summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/battle_1.s26
-rw-r--r--asm/battle_7.s78
-rw-r--r--asm/battle_anim_80A5C6C.s (renamed from asm/rom_80A5C6C.s)8
-rw-r--r--asm/battle_anim_80A9C70.s2
-rw-r--r--asm/battle_anim_80FE840.s6
-rw-r--r--asm/battle_controller_linkopponent.s401
-rw-r--r--asm/battle_controller_linkpartner.s38
-rw-r--r--asm/battle_controller_opponent.s424
-rw-r--r--asm/battle_controller_player.s10419
-rw-r--r--asm/battle_controller_player_partner.s6347
-rw-r--r--asm/battle_controller_recorded_opponent.s62
-rw-r--r--asm/battle_controller_recorded_player.s6144
-rw-r--r--asm/battle_controller_safari.s1412
-rw-r--r--asm/battle_controller_wally.s414
-rwxr-xr-xasm/battle_frontier_1.s12
-rwxr-xr-xasm/battle_frontier_2.s20
-rw-r--r--asm/battle_link_817C95C.s103
-rwxr-xr-xasm/battle_tower.s6
-rw-r--r--asm/battle_transition.s2
-rw-r--r--asm/evolution_scene.s44
-rwxr-xr-xasm/item_menu.s6
-rwxr-xr-xasm/party_menu.s4
-rwxr-xr-xasm/pokeball.s6
-rw-r--r--asm/pokedex.s2
-rw-r--r--asm/pokemon_animation.s94
-rwxr-xr-xasm/pokemon_summary_screen.s2
-rw-r--r--asm/recorded_battle.s10
-rw-r--r--asm/rom6.s2
-rw-r--r--data/battle_anim_815A0D4.s163
-rw-r--r--data/battle_controller_link_opponent.s64
-rw-r--r--data/battle_controller_opponent.s67
-rw-r--r--data/battle_controller_player.s69
-rw-r--r--data/battle_controller_player_partner.s71
-rw-r--r--data/battle_controller_recorded_player.s64
-rw-r--r--data/battle_controller_safari.s228
-rw-r--r--data/battle_controller_wally.s64
-rw-r--r--include/battle.h107
-rw-r--r--include/battle_2.h44
-rw-r--r--include/battle_anim.h21
-rw-r--r--include/battle_controllers.h140
-rw-r--r--include/battle_interface.h14
-rw-r--r--include/battle_link_817C95C.h11
-rw-r--r--include/battle_message.h2
-rw-r--r--include/battle_script_commands.h10
-rw-r--r--include/gba/io_reg.h2
-rw-r--r--include/global.h2
-rw-r--r--include/link.h1
-rw-r--r--include/pokeball.h8
-rw-r--r--include/pokemon.h4
-rw-r--r--include/recorded_battle.h2
-rw-r--r--ld_script.txt27
-rw-r--r--src/battle_2.c39
-rw-r--r--src/battle_ai_switch_items.c18
-rw-r--r--src/battle_anim.c20
-rw-r--r--src/battle_controller_linkopponent.c143
-rw-r--r--src/battle_controller_opponent.c146
-rw-r--r--src/battle_controller_player.c3160
-rw-r--r--src/battle_controller_player_partner.c1970
-rw-r--r--src/battle_controller_recorded_player.c1854
-rw-r--r--src/battle_controller_safari.c723
-rw-r--r--src/battle_controller_wally.c147
-rw-r--r--src/battle_controllers.c116
-rw-r--r--src/battle_interface.c59
-rw-r--r--src/battle_message.c2
-rw-r--r--src/battle_script_commands.c106
-rw-r--r--src/pokemon_2.c7
-rw-r--r--src/pokemon_3.c2
-rw-r--r--src/reshow_battle_screen.c4
-rw-r--r--sym_common.txt4
-rw-r--r--sym_ewram.txt2
70 files changed, 9627 insertions, 26174 deletions
diff --git a/asm/battle_1.s b/asm/battle_1.s
index 9a981e222..9665b0d11 100644
--- a/asm/battle_1.s
+++ b/asm/battle_1.s
@@ -1888,7 +1888,7 @@ sub_8035C4C: @ 8035C4C
bne _08035C68
ldr r0, =gText_Draw
movs r1, 0x15
- bl sub_814F9EC
+ bl BattleHandleAddTextPrinter
b _08035D68
.pool
_08035C68:
@@ -1964,10 +1964,10 @@ _08035CE2:
_08035CFC:
ldr r0, =gText_Win
movs r1, 0x17
- bl sub_814F9EC
+ bl BattleHandleAddTextPrinter
ldr r0, =gText_Loss
movs r1, 0x16
- bl sub_814F9EC
+ bl BattleHandleAddTextPrinter
b _08035D68
.pool
_08035D20:
@@ -1985,19 +1985,19 @@ _08035D20:
_08035D36:
ldr r0, =gText_Win
movs r1, 0x16
- bl sub_814F9EC
+ bl BattleHandleAddTextPrinter
ldr r0, =gText_Loss
movs r1, 0x17
- bl sub_814F9EC
+ bl BattleHandleAddTextPrinter
b _08035D68
.pool
_08035D58:
ldr r0, =gText_Win
movs r1, 0x17
- bl sub_814F9EC
+ bl BattleHandleAddTextPrinter
ldr r0, =gText_Loss
movs r1, 0x16
- bl sub_814F9EC
+ bl BattleHandleAddTextPrinter
_08035D68:
pop {r0}
bx r0
@@ -2068,14 +2068,14 @@ _08035DDC:
_08035DE6:
adds r0, r1, 0
movs r1, 0x11
- bl sub_814F9EC
+ bl BattleHandleAddTextPrinter
ldrb r1, [r4, 0x18]
movs r0, 0x4
b _08035E14
_08035DF4:
adds r0, r1, 0
movs r1, 0x12
- bl sub_814F9EC
+ bl BattleHandleAddTextPrinter
ldrb r1, [r4, 0x18]
movs r0, 0x4
str r0, [sp]
@@ -2085,7 +2085,7 @@ _08035DF4:
_08035E08:
adds r0, r1, 0
movs r1, 0x13
- bl sub_814F9EC
+ bl BattleHandleAddTextPrinter
ldrb r1, [r4, 0x18]
movs r0, 0x8
_08035E14:
@@ -2099,7 +2099,7 @@ _08035E1A:
_08035E22:
adds r0, r1, 0
movs r1, 0x14
- bl sub_814F9EC
+ bl BattleHandleAddTextPrinter
ldrb r1, [r4, 0x18]
movs r0, 0x8
str r0, [sp]
@@ -2139,14 +2139,14 @@ _08035E66:
adds r1, r0, r4
adds r0, r1, 0
movs r1, 0xF
- bl sub_814F9EC
+ bl BattleHandleAddTextPrinter
lsls r0, r6, 3
subs r0, r6
lsls r0, 2
adds r1, r0, r4
adds r0, r1, 0
movs r1, 0x10
- bl sub_814F9EC
+ bl BattleHandleAddTextPrinter
movs r4, 0x7
str r4, [sp]
adds r0, r7, 0
diff --git a/asm/battle_7.s b/asm/battle_7.s
index ea6fc40b3..d86c68dfc 100644
--- a/asm/battle_7.s
+++ b/asm/battle_7.s
@@ -67,8 +67,8 @@ _0805D192:
.pool
thumb_func_end FreeBattleSpritesData
- thumb_func_start sub_805D19C
-sub_805D19C: @ 805D19C
+ thumb_func_start ChooseMoveAndTargetInBattlePalace
+ChooseMoveAndTargetInBattlePalace: @ 805D19C
push {r4-r7,lr}
mov r7, r10
mov r6, r9
@@ -448,7 +448,7 @@ _0805D496:
pop {r1}
bx r1
.pool
- thumb_func_end sub_805D19C
+ thumb_func_end ChooseMoveAndTargetInBattlePalace
thumb_func_start sub_805D4A8
sub_805D4A8: @ 805D4A8
@@ -834,8 +834,8 @@ _0805D800:
.pool
thumb_func_end sub_805D7EC
- thumb_func_start move_anim_start_t2_for_situation
-move_anim_start_t2_for_situation: @ 805D808
+ thumb_func_start DoStatusAnimation
+DoStatusAnimation: @ 805D808
push {r4-r6,lr}
adds r4, r1, 0
lsls r0, 24
@@ -962,10 +962,10 @@ _0805D902:
pop {r4-r6}
pop {r0}
bx r0
- thumb_func_end move_anim_start_t2_for_situation
+ thumb_func_end DoStatusAnimation
- thumb_func_start move_anim_start_t3
-move_anim_start_t3: @ 805D908
+ thumb_func_start DoBattleAnimationFromTable
+DoBattleAnimationFromTable: @ 805D908
push {r4-r7,lr}
mov r7, r10
mov r6, r9
@@ -1070,7 +1070,7 @@ _0805D9CC:
ldr r0, =gUnknown_082C9320
adds r1, r5, 0
movs r2, 0
- bl DoBattleAnim
+ bl LaunchBattleAnimation
ldr r0, =task0A_0803415C
movs r1, 0xA
bl CreateTask
@@ -1105,7 +1105,7 @@ _0805DA1E:
pop {r1}
bx r1
.pool
- thumb_func_end move_anim_start_t3
+ thumb_func_end DoBattleAnimationFromTable
thumb_func_start task0A_0803415C
task0A_0803415C: @ 805DA48
@@ -1172,8 +1172,8 @@ _0805DABE:
bx r1
thumb_func_end sub_805DAA0
- thumb_func_start move_anim_start_t4
-move_anim_start_t4: @ 805DAC4
+ thumb_func_start DoSpecialBattleAnimation
+DoSpecialBattleAnimation: @ 805DAC4
push {r4,lr}
adds r4, r0, 0
lsls r4, 24
@@ -1187,7 +1187,7 @@ move_anim_start_t4: @ 805DAC4
ldr r0, =gUnknown_082C937C
adds r1, r3, 0
movs r2, 0
- bl DoBattleAnim
+ bl LaunchBattleAnimation
ldr r0, =task0A_08034248
movs r1, 0xA
bl CreateTask
@@ -1216,7 +1216,7 @@ move_anim_start_t4: @ 805DAC4
pop {r0}
bx r0
.pool
- thumb_func_end move_anim_start_t4
+ thumb_func_end DoSpecialBattleAnimation
thumb_func_start task0A_08034248
task0A_08034248: @ 805DB34
@@ -1258,11 +1258,11 @@ _0805DB76:
.pool
thumb_func_end task0A_08034248
- thumb_func_start sub_805DB8C
-sub_805DB8C: @ 805DB8C
+ thumb_func_start IsMoveWithoutAnimation
+IsMoveWithoutAnimation: @ 805DB8C
movs r0, 0
bx lr
- thumb_func_end sub_805DB8C
+ thumb_func_end IsMoveWithoutAnimation
thumb_func_start mplay_80342A4
mplay_80342A4: @ 805DB90
@@ -1357,7 +1357,7 @@ BattleLoadOpponentMonSpriteGfx: @ 805DC0C
.pool
_0805DC50:
ldrh r5, [r2, 0x2]
- ldr r0, =gUnknown_020244BC
+ ldr r0, =gTransformedPersonalities
adds r0, r1, r0
ldr r6, [r0]
_0805DC58:
@@ -1510,7 +1510,7 @@ BattleLoadPlayerMonSpriteGfx: @ 805DD7C
.pool
_0805DDC0:
ldrh r5, [r2, 0x2]
- ldr r0, =gUnknown_020244BC
+ ldr r0, =gTransformedPersonalities
adds r0, r1, r0
ldr r4, [r0]
_0805DDC8:
@@ -1670,8 +1670,8 @@ nullsub_24: @ 805DF34
bx lr
thumb_func_end nullsub_24
- thumb_func_start sub_805DF38
-sub_805DF38: @ 805DF38
+ thumb_func_start DecompressTrainerFrontPic
+DecompressTrainerFrontPic: @ 805DF38
push {r4,lr}
adds r4, r0, 0
adds r0, r1, 0
@@ -1701,10 +1701,10 @@ sub_805DF38: @ 805DF38
pop {r0}
bx r0
.pool
- thumb_func_end sub_805DF38
+ thumb_func_end DecompressTrainerFrontPic
- thumb_func_start LoadBackTrainerBankSpriteGfx
-LoadBackTrainerBankSpriteGfx: @ 805DF84
+ thumb_func_start DecompressTrainerBackPic
+DecompressTrainerBackPic: @ 805DF84
push {r4,r5,lr}
adds r5, r0, 0
adds r4, r1, 0
@@ -1742,15 +1742,15 @@ LoadBackTrainerBankSpriteGfx: @ 805DF84
pop {r0}
bx r0
.pool
- thumb_func_end LoadBackTrainerBankSpriteGfx
+ thumb_func_end DecompressTrainerBackPic
thumb_func_start nullsub_25
nullsub_25: @ 805DFE0
bx lr
thumb_func_end nullsub_25
- thumb_func_start sub_805DFE4
-sub_805DFE4: @ 805DFE4
+ thumb_func_start FreeTrainerFrontPicPalette
+FreeTrainerFrontPicPalette: @ 805DFE4
push {lr}
lsls r0, 16
ldr r1, =gTrainerFrontPicPaletteTable
@@ -1761,7 +1761,7 @@ sub_805DFE4: @ 805DFE4
pop {r0}
bx r0
.pool
- thumb_func_end sub_805DFE4
+ thumb_func_end FreeTrainerFrontPicPalette
thumb_func_start sub_805DFFC
sub_805DFFC: @ 805DFFC
@@ -2229,8 +2229,8 @@ _0805E3EA:
.pool
thumb_func_end sub_805E394
- thumb_func_start sub_805E408
-sub_805E408: @ 805E408
+ thumb_func_start SetBattleSpriteInvisibilityBitToSpriteInvisibility
+SetBattleSpriteInvisibilityBitToSpriteInvisibility: @ 805E408
lsls r0, 24
lsrs r0, 24
ldr r1, =gBattleSpritesDataPtr
@@ -2258,7 +2258,7 @@ sub_805E408: @ 805E408
strb r0, [r3]
bx lr
.pool
- thumb_func_end sub_805E408
+ thumb_func_end SetBattleSpriteInvisibilityBitToSpriteInvisibility
thumb_func_start sub_805E448
sub_805E448: @ 805E448
@@ -2441,7 +2441,7 @@ _0805E59C:
adds r1, 0x4
adds r1, r2
ldr r1, [r1]
- ldr r3, =gUnknown_020244BC
+ ldr r3, =gTransformedPersonalities
lsls r2, r7, 2
adds r2, r3
ldr r3, [r2]
@@ -2479,7 +2479,7 @@ _0805E618:
adds r1, 0x4
adds r1, r2
ldr r1, [r1]
- ldr r3, =gUnknown_020244BC
+ ldr r3, =gTransformedPersonalities
lsls r2, r7, 2
adds r2, r3
ldr r3, [r2]
@@ -2795,8 +2795,8 @@ _0805E93E:
bx r0
thumb_func_end refresh_graphics_maybe
- thumb_func_start sub_805E94C
-sub_805E94C: @ 805E94C
+ thumb_func_start TrySetBehindSubstituteSpriteBit
+TrySetBehindSubstituteSpriteBit: @ 805E94C
push {lr}
lsls r0, 24
lsrs r2, r0, 24
@@ -2817,7 +2817,7 @@ _0805E96C:
pop {r0}
bx r0
.pool
- thumb_func_end sub_805E94C
+ thumb_func_end TrySetBehindSubstituteSpriteBit
thumb_func_start sub_805E974
sub_805E974: @ 805E974
@@ -3572,8 +3572,8 @@ _0805EF6A:
.pool
thumb_func_end sub_805EF14
- thumb_func_start sub_805EF84
-sub_805EF84: @ 805EF84
+ thumb_func_start ClearTemporarySpeciesSpriteData
+ClearTemporarySpeciesSpriteData: @ 805EF84
push {r4,lr}
lsls r0, 24
lsrs r4, r0, 24
@@ -3598,7 +3598,7 @@ _0805EFAC:
pop {r0}
bx r0
.pool
- thumb_func_end sub_805EF84
+ thumb_func_end ClearTemporarySpeciesSpriteData
thumb_func_start AllocateMonSpritesGfx
AllocateMonSpritesGfx: @ 805EFBC
diff --git a/asm/rom_80A5C6C.s b/asm/battle_anim_80A5C6C.s
index bf273ac53..fa05e36ce 100644
--- a/asm/rom_80A5C6C.s
+++ b/asm/battle_anim_80A5C6C.s
@@ -217,7 +217,7 @@ _080A5E04:
b _080A5E42
.pool
_080A5E3C:
- ldr r0, =gUnknown_020244BC
+ ldr r0, =gTransformedPersonalities
adds r0, r1, r0
ldr r2, [r0]
_080A5E42:
@@ -307,7 +307,7 @@ _080A5EC8:
b _080A5F0A
.pool
_080A5F04:
- ldr r0, =gUnknown_020244BC
+ ldr r0, =gTransformedPersonalities
adds r0, r1, r0
ldr r2, [r0]
_080A5F0A:
@@ -5522,7 +5522,7 @@ _080A86C4:
.pool
_080A871C:
ldrh r7, [r1, 0x2]
- ldr r0, =gUnknown_020244BC
+ ldr r0, =gTransformedPersonalities
adds r0, r2, r0
ldr r2, [r0]
_080A8724:
@@ -5612,7 +5612,7 @@ _080A8790:
.pool
_080A87DC:
ldrh r7, [r1, 0x2]
- ldr r0, =gUnknown_020244BC
+ ldr r0, =gTransformedPersonalities
adds r0, r2, r0
ldr r2, [r0]
_080A87E4:
diff --git a/asm/battle_anim_80A9C70.s b/asm/battle_anim_80A9C70.s
index 9b2939673..681802e12 100644
--- a/asm/battle_anim_80A9C70.s
+++ b/asm/battle_anim_80A9C70.s
@@ -869,7 +869,7 @@ move_anim_start_t2: @ 80AA364
strb r4, [r0]
ldr r0, =gUnknown_082C92FC
movs r2, 0
- bl DoBattleAnim
+ bl LaunchBattleAnimation
ldr r0, =task0A_80788BC
movs r1, 0xA
bl CreateTask
diff --git a/asm/battle_anim_80FE840.s b/asm/battle_anim_80FE840.s
index dc927cacc..315f884cf 100644
--- a/asm/battle_anim_80FE840.s
+++ b/asm/battle_anim_80FE840.s
@@ -50443,8 +50443,8 @@ _081181CA:
bx r1
thumb_func_end sub_8118140
- thumb_func_start battle_intro_launch
-battle_intro_launch: @ 81181D4
+ thumb_func_start HandleIntroSlide
+HandleIntroSlide: @ 81181D4
push {r4,lr}
lsls r0, 24
lsrs r4, r0, 24
@@ -50521,7 +50521,7 @@ _08118258:
pop {r0}
bx r0
.pool
- thumb_func_end battle_intro_launch
+ thumb_func_end HandleIntroSlide
thumb_func_start sub_811828C
sub_811828C: @ 811828C
diff --git a/asm/battle_controller_linkopponent.s b/asm/battle_controller_linkopponent.s
index d4e248d8c..f719ab59d 100644
--- a/asm/battle_controller_linkopponent.s
+++ b/asm/battle_controller_linkopponent.s
@@ -6,23 +6,6 @@
.text
- thumb_func_start nullsub_28
-nullsub_28: @ 8064390
- bx lr
- thumb_func_end nullsub_28
-
- thumb_func_start SetBankFuncToLinkOpponentBufferRunCommand
-SetBankFuncToLinkOpponentBufferRunCommand: @ 8064394
- ldr r1, =gBattleBankFunc
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, =LinkOpponentBufferRunCommand
- str r1, [r0]
- bx lr
- .pool
- thumb_func_end SetBankFuncToLinkOpponentBufferRunCommand
thumb_func_start LinkOpponentBufferRunCommand
LinkOpponentBufferRunCommand: @ 80643B0
@@ -130,7 +113,7 @@ sub_8064470: @ 8064470
bne _080644C2
adds r0, r2, r5
ldrh r0, [r0, 0x6]
- bl sub_805DFE4
+ bl FreeTrainerFrontPicPalette
ldrb r0, [r4]
adds r0, r6
ldrb r1, [r0]
@@ -1180,7 +1163,7 @@ sub_8064D60: @ 8064D60
adds r1, r3, 0
adds r2, r3, 0
movs r3, 0x6
- bl move_anim_start_t4
+ bl DoSpecialBattleAnimation
_08064DA0:
ldr r0, =gBattleBankFunc
ldrb r1, [r4]
@@ -1329,7 +1312,7 @@ sub_8064E50: @ 8064E50
ldrb r0, [r0]
bl SetHealthboxSpriteVisible
ldrb r0, [r5]
- bl sub_805E408
+ bl SetBattleSpriteInvisibilityBitToSpriteInvisibility
ldr r1, =gBattleBankFunc
ldrb r0, [r5]
lsls r0, 2
@@ -1525,8 +1508,8 @@ _080650CE:
.pool
thumb_func_end LinkOpponentBufferExecCompleted
- thumb_func_start dp01t_00_2_getattr
-dp01t_00_2_getattr: @ 80650E0
+ thumb_func_start LinkOpponentHandleGetMonData
+LinkOpponentHandleGetMonData: @ 80650E0
push {r4-r6,lr}
sub sp, 0x100
movs r6, 0
@@ -1578,7 +1561,7 @@ _0806513A:
pop {r4-r6}
pop {r0}
bx r0
- thumb_func_end dp01t_00_2_getattr
+ thumb_func_end LinkOpponentHandleGetMonData
thumb_func_start dp01_getattr_by_ch1_for_opponent_pokemon
dp01_getattr_by_ch1_for_opponent_pokemon: @ 8065154
@@ -2458,16 +2441,16 @@ _080658EA:
.pool
thumb_func_end dp01_getattr_by_ch1_for_opponent_pokemon
- thumb_func_start sub_8065900
-sub_8065900: @ 8065900
+ thumb_func_start LinkOpponentHandleGetRawMonData
+LinkOpponentHandleGetRawMonData: @ 8065900
push {lr}
bl LinkOpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_8065900
+ thumb_func_end LinkOpponentHandleGetRawMonData
- thumb_func_start sub_806590C
-sub_806590C: @ 806590C
+ thumb_func_start LinkOpponentHandleSetMonData
+LinkOpponentHandleSetMonData: @ 806590C
push {r4,r5,lr}
ldr r1, =gBattleBufferA
ldr r0, =gActiveBank
@@ -2507,7 +2490,7 @@ _0806595A:
pop {r4,r5}
pop {r0}
bx r0
- thumb_func_end sub_806590C
+ thumb_func_end LinkOpponentHandleSetMonData
thumb_func_start sub_8065964
sub_8065964: @ 8065964
@@ -3494,8 +3477,8 @@ _08066270:
.pool
thumb_func_end sub_8065964
- thumb_func_start sub_8066284
-sub_8066284: @ 8066284
+ thumb_func_start LinkOpponentHandleSetRawMonData
+LinkOpponentHandleSetRawMonData: @ 8066284
push {r4-r7,lr}
ldr r1, =gBattlePartyID
ldr r7, =gActiveBank
@@ -3547,10 +3530,10 @@ _080662DC:
pop {r0}
bx r0
.pool
- thumb_func_end sub_8066284
+ thumb_func_end LinkOpponentHandleSetRawMonData
- thumb_func_start sub_80662F8
-sub_80662F8: @ 80662F8
+ thumb_func_start LinkOpponentHandleLoadMonSprite
+LinkOpponentHandleLoadMonSprite: @ 80662F8
push {r4-r7,lr}
mov r7, r10
mov r6, r9
@@ -3688,10 +3671,10 @@ sub_80662F8: @ 80662F8
pop {r0}
bx r0
.pool
- thumb_func_end sub_80662F8
+ thumb_func_end LinkOpponentHandleLoadMonSprite
- thumb_func_start sub_8066448
-sub_8066448: @ 8066448
+ thumb_func_start LinkOpponentHandleSwitchInAnim
+LinkOpponentHandleSwitchInAnim: @ 8066448
push {r4,lr}
ldr r1, =gBattlePartyID
ldr r4, =gActiveBank
@@ -3720,7 +3703,7 @@ sub_8066448: @ 8066448
pop {r0}
bx r0
.pool
- thumb_func_end sub_8066448
+ thumb_func_end LinkOpponentHandleSwitchInAnim
thumb_func_start sub_8066494
sub_8066494: @ 8066494
@@ -3735,7 +3718,7 @@ sub_8066494: @ 8066494
lsls r1, 24
lsrs r1, 24
adds r0, r6, 0
- bl sub_805EF84
+ bl ClearTemporarySpeciesSpriteData
ldr r0, =gBattlePartyID
lsls r4, r6, 1
adds r4, r0
@@ -3895,8 +3878,8 @@ sub_8066494: @ 8066494
.pool
thumb_func_end sub_8066494
- thumb_func_start sub_8066624
-sub_8066624: @ 8066624
+ thumb_func_start LinkOpponentHandleReturnMonToBall
+LinkOpponentHandleReturnMonToBall: @ 8066624
push {r4-r6,lr}
ldr r1, =gBattleBufferA
ldr r6, =gActiveBank
@@ -3954,7 +3937,7 @@ _080666A8:
pop {r0}
bx r0
.pool
- thumb_func_end sub_8066624
+ thumb_func_end LinkOpponentHandleReturnMonToBall
thumb_func_start sub_80666BC
sub_80666BC: @ 80666BC
@@ -3987,7 +3970,7 @@ _080666E4:
adds r0, r2, 0
adds r1, r2, 0
movs r3, 0x5
- bl move_anim_start_t4
+ bl DoSpecialBattleAnimation
_080666FE:
ldr r0, [r6]
ldrb r1, [r5]
@@ -4012,7 +3995,7 @@ _08066712:
adds r0, r2, 0
adds r1, r2, 0
movs r3, 0x2
- bl move_anim_start_t4
+ bl DoSpecialBattleAnimation
ldr r1, =gBattleBankFunc
ldrb r0, [r5]
lsls r0, 2
@@ -4026,8 +4009,8 @@ _0806673A:
.pool
thumb_func_end sub_80666BC
- thumb_func_start sub_8066748
-sub_8066748: @ 8066748
+ thumb_func_start LinkOpponentHandleDrawTrainerPic
+LinkOpponentHandleDrawTrainerPic: @ 8066748
push {r4-r7,lr}
mov r7, r9
mov r6, r8
@@ -4064,7 +4047,7 @@ _08066794:
ldr r0, =gTrainerBattleOpponent_B
_08066796:
ldrh r0, [r0]
- bl sub_8162AA0
+ bl GetFrontierTrainerFrontSpriteId
lsls r0, 24
lsrs r0, 24
b _0806694C
@@ -4265,7 +4248,7 @@ _0806693A:
lsls r1, 2
adds r1, r6
ldrb r0, [r1, 0x13]
- bl sub_806F000
+ bl PlayerGenderToFrontTrainerPicId
_08066948:
lsls r0, 16
lsrs r0, 16
@@ -4273,7 +4256,7 @@ _0806694C:
mov r8, r0
ldr r5, =gActiveBank
ldrb r1, [r5]
- bl sub_805DF38
+ bl DecompressTrainerFrontPic
ldrb r0, [r5]
bl GetBankIdentity
adds r1, r0, 0
@@ -4378,10 +4361,10 @@ _0806694C:
pop {r0}
bx r0
.pool
- thumb_func_end sub_8066748
+ thumb_func_end LinkOpponentHandleDrawTrainerPic
- thumb_func_start sub_8066A58
-sub_8066A58: @ 8066A58
+ thumb_func_start LinkOpponentHandleTrainerSlide
+LinkOpponentHandleTrainerSlide: @ 8066A58
push {r4-r6,lr}
mov r6, r8
push {r6}
@@ -4396,13 +4379,13 @@ _08066A74:
ldr r0, =gTrainerBattleOpponent_B
_08066A76:
ldrh r0, [r0]
- bl sub_8162AA0
+ bl GetFrontierTrainerFrontSpriteId
lsls r0, 24
lsrs r0, 24
mov r8, r0
ldr r6, =gActiveBank
ldrb r1, [r6]
- bl sub_805DF38
+ bl DecompressTrainerFrontPic
ldrb r0, [r6]
bl GetBankIdentity
adds r1, r0, 0
@@ -4510,10 +4493,10 @@ _08066A76:
pop {r0}
bx r0
.pool
- thumb_func_end sub_8066A58
+ thumb_func_end LinkOpponentHandleTrainerSlide
- thumb_func_start sub_8066B94
-sub_8066B94: @ 8066B94
+ thumb_func_start LinkOpponentHandleTrainerSlideBack
+LinkOpponentHandleTrainerSlideBack: @ 8066B94
push {r4-r6,lr}
ldr r6, =gBankSpriteIds
ldr r4, =gActiveBank
@@ -4584,10 +4567,10 @@ sub_8066B94: @ 8066B94
pop {r0}
bx r0
.pool
- thumb_func_end sub_8066B94
+ thumb_func_end LinkOpponentHandleTrainerSlideBack
- thumb_func_start sub_8066C40
-sub_8066C40: @ 8066C40
+ thumb_func_start LinkOpponentHandleFaintAnimation
+LinkOpponentHandleFaintAnimation: @ 8066C40
push {r4-r6,lr}
ldr r6, =gBattleSpritesDataPtr
ldr r4, [r6]
@@ -4612,7 +4595,7 @@ sub_8066C40: @ 8066C40
adds r0, r2, 0
adds r1, r2, 0
movs r3, 0x5
- bl move_anim_start_t4
+ bl DoSpecialBattleAnimation
_08066C74:
ldr r0, [r6]
ldrb r1, [r5]
@@ -4661,42 +4644,42 @@ _08066CD0:
pop {r0}
bx r0
.pool
- thumb_func_end sub_8066C40
+ thumb_func_end LinkOpponentHandleFaintAnimation
- thumb_func_start sub_8066CEC
-sub_8066CEC: @ 8066CEC
+ thumb_func_start LinkOpponentHandleCmd11
+LinkOpponentHandleCmd11: @ 8066CEC
push {lr}
bl LinkOpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_8066CEC
+ thumb_func_end LinkOpponentHandleCmd11
- thumb_func_start sub_8066CF8
-sub_8066CF8: @ 8066CF8
+ thumb_func_start LinkOpponentHandleCmd12
+LinkOpponentHandleCmd12: @ 8066CF8
push {lr}
bl LinkOpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_8066CF8
+ thumb_func_end LinkOpponentHandleCmd12
- thumb_func_start sub_8066D04
-sub_8066D04: @ 8066D04
+ thumb_func_start LinkOpponentHandleBallThrow
+LinkOpponentHandleBallThrow: @ 8066D04
push {lr}
bl LinkOpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_8066D04
+ thumb_func_end LinkOpponentHandleBallThrow
- thumb_func_start sub_8066D10
-sub_8066D10: @ 8066D10
+ thumb_func_start LinkOpponentHandlePause
+LinkOpponentHandlePause: @ 8066D10
push {lr}
bl LinkOpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_8066D10
+ thumb_func_end LinkOpponentHandlePause
- thumb_func_start sub_8066D1C
-sub_8066D1C: @ 8066D1C
+ thumb_func_start LinkOpponentHandleMoveAnimation
+LinkOpponentHandleMoveAnimation: @ 8066D1C
push {r4-r7,lr}
mov r7, r8
push {r7}
@@ -4798,7 +4781,7 @@ _08066D32:
adds r0, 0x10
adds r1, r0
str r1, [r7]
- ldr r2, =gUnknown_020244BC
+ ldr r2, =gTransformedPersonalities
ldrb r0, [r5]
lsls r0, 2
adds r0, r2
@@ -4807,7 +4790,7 @@ _08066D32:
mov r0, r8
ldrb r1, [r0]
adds r0, r6, 0
- bl sub_805DB8C
+ bl IsMoveWithoutAnimation
lsls r0, 24
lsrs r3, r0, 24
cmp r3, 0
@@ -4842,7 +4825,7 @@ _08066E58:
pop {r0}
bx r0
.pool
- thumb_func_end sub_8066D1C
+ thumb_func_end LinkOpponentHandleMoveAnimation
thumb_func_start sub_8066E70
sub_8066E70: @ 8066E70
@@ -4907,7 +4890,7 @@ _08066ED2:
adds r0, r2, 0
adds r1, r2, 0
movs r3, 0x5
- bl move_anim_start_t4
+ bl DoSpecialBattleAnimation
_08066EF4:
ldr r0, [r7]
ldrb r1, [r6]
@@ -4965,7 +4948,7 @@ _08066F32:
adds r0, r2, 0
adds r1, r2, 0
movs r3, 0x6
- bl move_anim_start_t4
+ bl DoSpecialBattleAnimation
ldr r0, [r7]
ldrb r1, [r6]
ldr r0, [r0]
@@ -5008,7 +4991,7 @@ _08066FA8:
ldrb r2, [r2]
lsls r2, 8
orrs r1, r2
- bl sub_805E94C
+ bl TrySetBehindSubstituteSpriteBit
ldr r0, [r7]
ldrb r1, [r6]
ldr r2, [r0, 0x4]
@@ -5028,8 +5011,8 @@ _08066FE4:
bx r0
thumb_func_end sub_8066E70
- thumb_func_start sub_8066FF4
-sub_8066FF4: @ 8066FF4
+ thumb_func_start LinkOpponentHandlePrintString
+LinkOpponentHandlePrintString: @ 8066FF4
push {r4,r5,lr}
ldr r0, =gBattle_BG0_X
movs r1, 0
@@ -5045,7 +5028,7 @@ sub_8066FF4: @ 8066FF4
bl BufferStringBattle
ldr r0, =gDisplayedStringBattle
movs r1, 0
- bl sub_814F9EC
+ bl BattleHandleAddTextPrinter
ldr r1, =gBattleBankFunc
ldrb r0, [r5]
lsls r0, 2
@@ -5058,66 +5041,66 @@ sub_8066FF4: @ 8066FF4
pop {r0}
bx r0
.pool
- thumb_func_end sub_8066FF4
+ thumb_func_end LinkOpponentHandlePrintString
- thumb_func_start sub_806704C
-sub_806704C: @ 806704C
+ thumb_func_start LinkOpponentHandlePrintStringPlayerOnly
+LinkOpponentHandlePrintStringPlayerOnly: @ 806704C
push {lr}
bl LinkOpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_806704C
+ thumb_func_end LinkOpponentHandlePrintStringPlayerOnly
- thumb_func_start sub_8067058
-sub_8067058: @ 8067058
+ thumb_func_start LinkOpponentHandleChooseAction
+LinkOpponentHandleChooseAction: @ 8067058
push {lr}
bl LinkOpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_8067058
+ thumb_func_end LinkOpponentHandleChooseAction
- thumb_func_start sub_8067064
-sub_8067064: @ 8067064
+ thumb_func_start LinkOpponentHandleCmd19
+LinkOpponentHandleCmd19: @ 8067064
push {lr}
bl LinkOpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_8067064
+ thumb_func_end LinkOpponentHandleCmd19
- thumb_func_start sub_8067070
-sub_8067070: @ 8067070
+ thumb_func_start LinkOpponentHandleChooseMove
+LinkOpponentHandleChooseMove: @ 8067070
push {lr}
bl LinkOpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_8067070
+ thumb_func_end LinkOpponentHandleChooseMove
- thumb_func_start sub_806707C
-sub_806707C: @ 806707C
+ thumb_func_start LinkOpponentHandleOpenBag
+LinkOpponentHandleOpenBag: @ 806707C
push {lr}
bl LinkOpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_806707C
+ thumb_func_end LinkOpponentHandleOpenBag
- thumb_func_start sub_8067088
-sub_8067088: @ 8067088
+ thumb_func_start LinkOpponentHandleChoosePokemon
+LinkOpponentHandleChoosePokemon: @ 8067088
push {lr}
bl LinkOpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_8067088
+ thumb_func_end LinkOpponentHandleChoosePokemon
- thumb_func_start sub_8067094
-sub_8067094: @ 8067094
+ thumb_func_start LinkOpponentHandleCmd23
+LinkOpponentHandleCmd23: @ 8067094
push {lr}
bl LinkOpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_8067094
+ thumb_func_end LinkOpponentHandleCmd23
- thumb_func_start sub_80670A0
-sub_80670A0: @ 80670A0
+ thumb_func_start LinkOpponentHandleHealthBarUpdate
+LinkOpponentHandleHealthBarUpdate: @ 80670A0
push {r4-r7,lr}
mov r7, r9
mov r6, r8
@@ -5210,18 +5193,18 @@ _0806715A:
pop {r0}
bx r0
.pool
- thumb_func_end sub_80670A0
+ thumb_func_end LinkOpponentHandleHealthBarUpdate
- thumb_func_start sub_8067190
-sub_8067190: @ 8067190
+ thumb_func_start LinkOpponentHandleExpUpdate
+LinkOpponentHandleExpUpdate: @ 8067190
push {lr}
bl LinkOpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_8067190
+ thumb_func_end LinkOpponentHandleExpUpdate
- thumb_func_start sub_806719C
-sub_806719C: @ 806719C
+ thumb_func_start LinkOpponentHandleStatusIconUpdate
+LinkOpponentHandleStatusIconUpdate: @ 806719C
push {r4,lr}
ldr r4, =gActiveBank
ldrb r0, [r4]
@@ -5267,10 +5250,10 @@ _080671F0:
pop {r0}
bx r0
.pool
- thumb_func_end sub_806719C
+ thumb_func_end LinkOpponentHandleStatusIconUpdate
- thumb_func_start sub_8067214
-sub_8067214: @ 8067214
+ thumb_func_start LinkOpponentHandleStatusAnimation
+LinkOpponentHandleStatusAnimation: @ 8067214
push {r4,r5,lr}
ldr r5, =gActiveBank
ldrb r0, [r5]
@@ -5302,7 +5285,7 @@ sub_8067214: @ 8067214
ldrb r2, [r3]
lsls r2, 24
orrs r1, r2
- bl move_anim_start_t2_for_situation
+ bl DoStatusAnimation
ldr r1, =gBattleBankFunc
ldrb r0, [r5]
lsls r0, 2
@@ -5314,82 +5297,82 @@ _08067264:
pop {r0}
bx r0
.pool
- thumb_func_end sub_8067214
+ thumb_func_end LinkOpponentHandleStatusAnimation
- thumb_func_start sub_806727C
-sub_806727C: @ 806727C
+ thumb_func_start LinkOpponentHandleStatusXor
+LinkOpponentHandleStatusXor: @ 806727C
push {lr}
bl LinkOpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_806727C
+ thumb_func_end LinkOpponentHandleStatusXor
- thumb_func_start sub_8067288
-sub_8067288: @ 8067288
+ thumb_func_start LinkOpponentHandleDataTransfer
+LinkOpponentHandleDataTransfer: @ 8067288
push {lr}
bl LinkOpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_8067288
+ thumb_func_end LinkOpponentHandleDataTransfer
- thumb_func_start sub_8067294
-sub_8067294: @ 8067294
+ thumb_func_start LinkOpponentHandleDMA3Transfer
+LinkOpponentHandleDMA3Transfer: @ 8067294
push {lr}
bl LinkOpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_8067294
+ thumb_func_end LinkOpponentHandleDMA3Transfer
- thumb_func_start sub_80672A0
-sub_80672A0: @ 80672A0
+ thumb_func_start LinkOpponentHandlePlayBGM
+LinkOpponentHandlePlayBGM: @ 80672A0
push {lr}
bl LinkOpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_80672A0
+ thumb_func_end LinkOpponentHandlePlayBGM
- thumb_func_start sub_80672AC
-sub_80672AC: @ 80672AC
+ thumb_func_start LinkOpponentHandleCmd32
+LinkOpponentHandleCmd32: @ 80672AC
push {lr}
bl LinkOpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_80672AC
+ thumb_func_end LinkOpponentHandleCmd32
- thumb_func_start sub_80672B8
-sub_80672B8: @ 80672B8
+ thumb_func_start LinkOpponentHandleCmd33
+LinkOpponentHandleCmd33: @ 80672B8
push {lr}
bl LinkOpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_80672B8
+ thumb_func_end LinkOpponentHandleCmd33
- thumb_func_start sub_80672C4
-sub_80672C4: @ 80672C4
+ thumb_func_start LinkOpponentHandleCmd34
+LinkOpponentHandleCmd34: @ 80672C4
push {lr}
bl LinkOpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_80672C4
+ thumb_func_end LinkOpponentHandleCmd34
- thumb_func_start sub_80672D0
-sub_80672D0: @ 80672D0
+ thumb_func_start LinkOpponentHandleCmd35
+LinkOpponentHandleCmd35: @ 80672D0
push {lr}
bl LinkOpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_80672D0
+ thumb_func_end LinkOpponentHandleCmd35
- thumb_func_start sub_80672DC
-sub_80672DC: @ 80672DC
+ thumb_func_start LinkOpponentHandleCmd36
+LinkOpponentHandleCmd36: @ 80672DC
push {lr}
bl LinkOpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_80672DC
+ thumb_func_end LinkOpponentHandleCmd36
- thumb_func_start sub_80672E8
-sub_80672E8: @ 80672E8
+ thumb_func_start LinkOpponentHandleCmd37
+LinkOpponentHandleCmd37: @ 80672E8
push {lr}
ldr r2, =gUnknown_02022D0C
ldrb r1, [r2]
@@ -5401,10 +5384,10 @@ sub_80672E8: @ 80672E8
pop {r0}
bx r0
.pool
- thumb_func_end sub_80672E8
+ thumb_func_end LinkOpponentHandleCmd37
- thumb_func_start sub_8067304
-sub_8067304: @ 8067304
+ thumb_func_start LinkOpponentHandleCmd38
+LinkOpponentHandleCmd38: @ 8067304
push {lr}
ldr r3, =gUnknown_02022D0C
ldr r1, =gBattleBufferA
@@ -5426,10 +5409,10 @@ sub_8067304: @ 8067304
pop {r0}
bx r0
.pool
- thumb_func_end sub_8067304
+ thumb_func_end LinkOpponentHandleCmd38
- thumb_func_start sub_806733C
-sub_806733C: @ 806733C
+ thumb_func_start LinkOpponentHandleCmd39
+LinkOpponentHandleCmd39: @ 806733C
push {lr}
ldr r2, =gUnknown_02022D0C
ldrb r1, [r2]
@@ -5440,10 +5423,10 @@ sub_806733C: @ 806733C
pop {r0}
bx r0
.pool
- thumb_func_end sub_806733C
+ thumb_func_end LinkOpponentHandleCmd39
- thumb_func_start sub_8067354
-sub_8067354: @ 8067354
+ thumb_func_start LinkOpponentHandleCmd40
+LinkOpponentHandleCmd40: @ 8067354
push {lr}
ldr r3, =gUnknown_02022D0C
ldr r1, [r3]
@@ -5461,10 +5444,10 @@ sub_8067354: @ 8067354
pop {r0}
bx r0
.pool
- thumb_func_end sub_8067354
+ thumb_func_end LinkOpponentHandleCmd40
- thumb_func_start sub_806737C
-sub_806737C: @ 806737C
+ thumb_func_start LinkOpponentHandleHitAnimation
+LinkOpponentHandleHitAnimation: @ 806737C
push {r4,lr}
ldr r3, =gSprites
ldr r2, =gBankSpriteIds
@@ -5498,7 +5481,7 @@ _080673B0:
movs r1, 0
strh r1, [r0, 0x30]
ldrb r0, [r4]
- bl sub_80769F4
+ bl DoHitAnimHealthboxEffect
ldr r1, =gBattleBankFunc
ldrb r0, [r4]
lsls r0, 2
@@ -5510,18 +5493,18 @@ _080673DA:
pop {r0}
bx r0
.pool
- thumb_func_end sub_806737C
+ thumb_func_end LinkOpponentHandleHitAnimation
- thumb_func_start sub_80673EC
-sub_80673EC: @ 80673EC
+ thumb_func_start LinkOpponentHandleCmd42
+LinkOpponentHandleCmd42: @ 80673EC
push {lr}
bl LinkOpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_80673EC
+ thumb_func_end LinkOpponentHandleCmd42
- thumb_func_start sub_80673F8
-sub_80673F8: @ 80673F8
+ thumb_func_start LinkOpponentHandleEffectivenessSound
+LinkOpponentHandleEffectivenessSound: @ 80673F8
push {r4,lr}
ldr r4, =gActiveBank
ldrb r0, [r4]
@@ -5551,10 +5534,10 @@ _0806740C:
pop {r0}
bx r0
.pool
- thumb_func_end sub_80673F8
+ thumb_func_end LinkOpponentHandleEffectivenessSound
- thumb_func_start sub_806743C
-sub_806743C: @ 806743C
+ thumb_func_start LinkOpponentHandlePlayFanfareOrBGM
+LinkOpponentHandlePlayFanfareOrBGM: @ 806743C
push {r4,r5,lr}
ldr r4, =gBattleBufferA
ldr r5, =gActiveBank
@@ -5594,10 +5577,10 @@ _0806748C:
pop {r4,r5}
pop {r0}
bx r0
- thumb_func_end sub_806743C
+ thumb_func_end LinkOpponentHandlePlayFanfareOrBGM
- thumb_func_start sub_8067498
-sub_8067498: @ 8067498
+ thumb_func_start LinkOpponentHandleFaintingCry
+LinkOpponentHandleFaintingCry: @ 8067498
push {lr}
ldr r1, =gBattlePartyID
ldr r0, =gActiveBank
@@ -5620,10 +5603,10 @@ sub_8067498: @ 8067498
pop {r0}
bx r0
.pool
- thumb_func_end sub_8067498
+ thumb_func_end LinkOpponentHandleFaintingCry
- thumb_func_start sub_80674D4
-sub_80674D4: @ 80674D4
+ thumb_func_start LinkOpponentHandleIntroSlide
+LinkOpponentHandleIntroSlide: @ 80674D4
push {lr}
ldr r1, =gBattleBufferA
ldr r0, =gActiveBank
@@ -5632,7 +5615,7 @@ sub_80674D4: @ 80674D4
adds r1, 0x1
adds r0, r1
ldrb r0, [r0]
- bl battle_intro_launch
+ bl HandleIntroSlide
ldr r2, =gUnknown_020243FC
ldrh r0, [r2]
movs r1, 0x1
@@ -5642,10 +5625,10 @@ sub_80674D4: @ 80674D4
pop {r0}
bx r0
.pool
- thumb_func_end sub_80674D4
+ thumb_func_end LinkOpponentHandleIntroSlide
- thumb_func_start sub_8067508
-sub_8067508: @ 8067508
+ thumb_func_start LinkOpponentHandleIntroTrainerBallThrow
+LinkOpponentHandleIntroTrainerBallThrow: @ 8067508
push {r4-r6,lr}
ldr r5, =gBankSpriteIds
ldr r6, =gActiveBank
@@ -5757,7 +5740,7 @@ _080675CA:
pop {r0}
bx r0
.pool
- thumb_func_end sub_8067508
+ thumb_func_end LinkOpponentHandleIntroTrainerBallThrow
thumb_func_start c3_08038DC4
c3_08038DC4: @ 8067618
@@ -5862,7 +5845,7 @@ sub_80676FC: @ 80676FC
push {r4,lr}
adds r4, r0, 0
ldrh r0, [r4, 0x6]
- bl sub_805DFE4
+ bl FreeTrainerFrontPicPalette
adds r0, r4, 0
bl FreeSpriteOamMatrix
adds r0, r4, 0
@@ -5872,8 +5855,8 @@ sub_80676FC: @ 80676FC
bx r0
thumb_func_end sub_80676FC
- thumb_func_start sub_8067718
-sub_8067718: @ 8067718
+ thumb_func_start LinkOpponentHandleDrawPartyStatusSummary
+LinkOpponentHandleDrawPartyStatusSummary: @ 8067718
push {r4-r7,lr}
ldr r1, =gBattleBufferA
ldr r0, =gActiveBank
@@ -5995,7 +5978,7 @@ _08067812:
pop {r0}
bx r0
.pool
- thumb_func_end sub_8067718
+ thumb_func_end LinkOpponentHandleDrawPartyStatusSummary
thumb_func_start sub_806782C
sub_806782C: @ 806782C
@@ -6033,8 +6016,8 @@ _08067864:
.pool
thumb_func_end sub_806782C
- thumb_func_start sub_8067874
-sub_8067874: @ 8067874
+ thumb_func_start LinkOpponentHandleCmd49
+LinkOpponentHandleCmd49: @ 8067874
push {lr}
ldr r0, =gBattleSpritesDataPtr
ldr r1, [r0]
@@ -6065,18 +6048,18 @@ _080678A6:
pop {r0}
bx r0
.pool
- thumb_func_end sub_8067874
+ thumb_func_end LinkOpponentHandleCmd49
- thumb_func_start sub_80678C4
-sub_80678C4: @ 80678C4
+ thumb_func_start LinkOpponentHandleCmd50
+LinkOpponentHandleCmd50: @ 80678C4
push {lr}
bl LinkOpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_80678C4
+ thumb_func_end LinkOpponentHandleCmd50
- thumb_func_start sub_80678D0
-sub_80678D0: @ 80678D0
+ thumb_func_start LinkOpponentHandleSpriteInvisibility
+LinkOpponentHandleSpriteInvisibility: @ 80678D0
push {r4,lr}
ldr r4, =gActiveBank
ldrb r0, [r4]
@@ -6109,17 +6092,17 @@ sub_80678D0: @ 80678D0
orrs r0, r1
strb r0, [r2]
ldrb r0, [r4]
- bl sub_805E408
+ bl SetBattleSpriteInvisibilityBitToSpriteInvisibility
_08067916:
bl LinkOpponentBufferExecCompleted
pop {r4}
pop {r0}
bx r0
.pool
- thumb_func_end sub_80678D0
+ thumb_func_end LinkOpponentHandleSpriteInvisibility
- thumb_func_start sub_8067930
-sub_8067930: @ 8067930
+ thumb_func_start LinkOpponentHandleBattleAnimation
+LinkOpponentHandleBattleAnimation: @ 8067930
push {r4-r6,lr}
sub sp, 0x4
ldr r5, =gActiveBank
@@ -6146,7 +6129,7 @@ sub_8067930: @ 8067930
adds r0, r2, 0
adds r1, r2, 0
adds r3, r6, 0
- bl move_anim_start_t3
+ bl DoBattleAnimationFromTable
lsls r0, 24
cmp r0, 0
beq _08067980
@@ -6169,10 +6152,10 @@ _08067992:
pop {r0}
bx r0
.pool
- thumb_func_end sub_8067930
+ thumb_func_end LinkOpponentHandleBattleAnimation
- thumb_func_start sub_80679A4
-sub_80679A4: @ 80679A4
+ thumb_func_start LinkOpponentHandleLinkStandbyMsg
+LinkOpponentHandleLinkStandbyMsg: @ 80679A4
push {lr}
ldr r0, =gActiveBank
ldrb r0, [r0]
@@ -6184,18 +6167,18 @@ sub_80679A4: @ 80679A4
pop {r0}
bx r0
.pool
- thumb_func_end sub_80679A4
+ thumb_func_end LinkOpponentHandleLinkStandbyMsg
- thumb_func_start sub_80679C4
-sub_80679C4: @ 80679C4
+ thumb_func_start LinkOpponentHandleResetActionMoveSelection
+LinkOpponentHandleResetActionMoveSelection: @ 80679C4
push {lr}
bl LinkOpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_80679C4
+ thumb_func_end LinkOpponentHandleResetActionMoveSelection
- thumb_func_start sub_80679D0
-sub_80679D0: @ 80679D0
+ thumb_func_start LinkOpponentHandleCmd55
+LinkOpponentHandleCmd55: @ 80679D0
push {r4,r5,lr}
ldr r5, =gActiveBank
ldrb r0, [r5]
@@ -6255,7 +6238,7 @@ _08067A08:
pop {r0}
bx r0
.pool
- thumb_func_end sub_80679D0
+ thumb_func_end LinkOpponentHandleCmd55
thumb_func_start nullsub_92
nullsub_92: @ 8067A70
diff --git a/asm/battle_controller_linkpartner.s b/asm/battle_controller_linkpartner.s
index adc5cdb84..e8581c396 100644
--- a/asm/battle_controller_linkpartner.s
+++ b/asm/battle_controller_linkpartner.s
@@ -736,7 +736,7 @@ sub_814B4E0: @ 814B4E0
cmp r1, r0
bne _0814B532
adds r0, r3, 0
- bl sub_805E408
+ bl SetBattleSpriteInvisibilityBitToSpriteInvisibility
ldr r0, =gBattleSpritesDataPtr
ldr r0, [r0]
ldrb r2, [r4]
@@ -751,7 +751,7 @@ sub_814B4E0: @ 814B4E0
adds r0, r2, 0
adds r1, r2, 0
movs r3, 0x6
- bl move_anim_start_t4
+ bl DoSpecialBattleAnimation
_0814B526:
ldr r0, =gBattleBankFunc
ldrb r1, [r4]
@@ -3265,7 +3265,7 @@ sub_814CC28: @ 814CC28
adds r6, r4, 0x2
adds r1, r6
ldrb r1, [r1]
- bl sub_805EF84
+ bl ClearTemporarySpeciesSpriteData
ldr r2, =gBattlePartyID
ldrb r0, [r5]
lsls r1, r0, 1
@@ -3314,7 +3314,7 @@ sub_814CC98: @ 814CC98
lsls r1, 24
lsrs r1, 24
adds r0, r6, 0
- bl sub_805EF84
+ bl ClearTemporarySpeciesSpriteData
ldr r0, =gBattlePartyID
lsls r2, r6, 1
adds r2, r0
@@ -3554,7 +3554,7 @@ _0814CECC:
adds r0, r2, 0
adds r1, r2, 0
movs r3, 0x5
- bl move_anim_start_t4
+ bl DoSpecialBattleAnimation
_0814CEE6:
ldr r0, [r6]
ldrb r1, [r5]
@@ -3579,7 +3579,7 @@ _0814CEFA:
adds r0, r2, 0
adds r1, r2, 0
movs r3, 0x1
- bl move_anim_start_t4
+ bl DoSpecialBattleAnimation
ldr r1, =gBattleBankFunc
ldrb r0, [r5]
lsls r0, 2
@@ -3696,7 +3696,7 @@ _0814D002:
ldr r5, =gActiveBank
ldrb r1, [r5]
adds r0, r4, 0
- bl LoadBackTrainerBankSpriteGfx
+ bl DecompressTrainerBackPic
ldrb r0, [r5]
bl GetBankIdentity
adds r1, r0, 0
@@ -3893,7 +3893,7 @@ sub_814D19C: @ 814D19C
adds r0, r2, 0
adds r1, r2, 0
movs r3, 0x5
- bl move_anim_start_t4
+ bl DoSpecialBattleAnimation
_0814D1D0:
ldr r0, [r6]
ldrb r1, [r5]
@@ -4107,7 +4107,7 @@ _0814D2CE:
adds r0, 0x10
adds r1, r0
str r1, [r7]
- ldr r2, =gUnknown_020244BC
+ ldr r2, =gTransformedPersonalities
ldrb r0, [r5]
lsls r0, 2
adds r0, r2
@@ -4116,7 +4116,7 @@ _0814D2CE:
mov r0, r8
ldrb r1, [r0]
adds r0, r6, 0
- bl sub_805DB8C
+ bl IsMoveWithoutAnimation
lsls r0, 24
lsrs r3, r0, 24
cmp r3, 0
@@ -4216,7 +4216,7 @@ _0814D46E:
adds r0, r2, 0
adds r1, r2, 0
movs r3, 0x5
- bl move_anim_start_t4
+ bl DoSpecialBattleAnimation
_0814D490:
ldr r0, [r7]
ldrb r1, [r6]
@@ -4274,7 +4274,7 @@ _0814D4CE:
adds r0, r2, 0
adds r1, r2, 0
movs r3, 0x6
- bl move_anim_start_t4
+ bl DoSpecialBattleAnimation
ldr r0, [r7]
ldrb r1, [r6]
ldr r0, [r0]
@@ -4317,7 +4317,7 @@ _0814D544:
ldrb r2, [r2]
lsls r2, 8
orrs r1, r2
- bl sub_805E94C
+ bl TrySetBehindSubstituteSpriteBit
ldr r0, [r7]
ldrb r1, [r6]
ldr r2, [r0, 0x4]
@@ -4354,7 +4354,7 @@ sub_814D590: @ 814D590
bl BufferStringBattle
ldr r0, =gDisplayedStringBattle
movs r1, 0
- bl sub_814F9EC
+ bl BattleHandleAddTextPrinter
ldr r1, =gBattleBankFunc
ldrb r0, [r5]
lsls r0, 2
@@ -4611,7 +4611,7 @@ sub_814D7B0: @ 814D7B0
ldrb r2, [r3]
lsls r2, 24
orrs r1, r2
- bl move_anim_start_t2_for_situation
+ bl DoStatusAnimation
ldr r1, =gBattleBankFunc
ldrb r0, [r5]
lsls r0, 2
@@ -4807,7 +4807,7 @@ _0814D94C:
movs r1, 0
strh r1, [r0, 0x30]
ldrb r0, [r4]
- bl sub_80769F4
+ bl DoHitAnimHealthboxEffect
ldr r1, =gBattleBankFunc
ldrb r0, [r4]
lsls r0, 2
@@ -4942,7 +4942,7 @@ dp01t_2E_4_battle_intro: @ 814DA74
adds r1, 0x1
adds r0, r1
ldrb r0, [r0]
- bl battle_intro_launch
+ bl HandleIntroSlide
ldr r2, =gUnknown_020243FC
ldrh r0, [r2]
movs r1, 0x1
@@ -5503,7 +5503,7 @@ sub_814DF40: @ 814DF40
orrs r0, r1
strb r0, [r2]
ldrb r0, [r4]
- bl sub_805E408
+ bl SetBattleSpriteInvisibilityBitToSpriteInvisibility
_0814DF86:
bl LinkPartnerBufferExecCompleted
pop {r4}
@@ -5540,7 +5540,7 @@ sub_814DFA0: @ 814DFA0
adds r0, r2, 0
adds r1, r2, 0
adds r3, r6, 0
- bl move_anim_start_t3
+ bl DoBattleAnimationFromTable
lsls r0, 24
cmp r0, 0
beq _0814DFF0
diff --git a/asm/battle_controller_opponent.s b/asm/battle_controller_opponent.s
index b66e373ca..1fc43b9e9 100644
--- a/asm/battle_controller_opponent.s
+++ b/asm/battle_controller_opponent.s
@@ -5,24 +5,6 @@
.text
-
- thumb_func_start nullsub_26
-nullsub_26: @ 805F160
- bx lr
- thumb_func_end nullsub_26
-
- thumb_func_start SetBankFuncToOpponentBufferRunCommand
-SetBankFuncToOpponentBufferRunCommand: @ 805F164
- ldr r1, =gBattleBankFunc
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, =OpponentBufferRunCommand
- str r1, [r0]
- bx lr
- .pool
- thumb_func_end SetBankFuncToOpponentBufferRunCommand
thumb_func_start OpponentBufferRunCommand
OpponentBufferRunCommand: @ 805F180
@@ -130,7 +112,7 @@ sub_805F240: @ 805F240
bne _0805F292
adds r0, r2, r5
ldrh r0, [r0, 0x6]
- bl sub_805DFE4
+ bl FreeTrainerFrontPicPalette
ldrb r0, [r4]
adds r0, r6
ldrb r1, [r0]
@@ -1274,7 +1256,7 @@ sub_805FC10: @ 805FC10
adds r1, r3, 0
adds r2, r3, 0
movs r3, 0x6
- bl move_anim_start_t4
+ bl DoSpecialBattleAnimation
_0805FC50:
ldr r0, =gBattleBankFunc
ldrb r1, [r4]
@@ -1423,7 +1405,7 @@ sub_805FD00: @ 805FD00
ldrb r0, [r0]
bl SetHealthboxSpriteVisible
ldrb r0, [r5]
- bl sub_805E408
+ bl SetBattleSpriteInvisibilityBitToSpriteInvisibility
ldr r1, =gBattleBankFunc
ldrb r0, [r5]
lsls r0, 2
@@ -1619,8 +1601,8 @@ _0805FF7E:
.pool
thumb_func_end OpponentBufferExecCompleted
- thumb_func_start dp01t_00_7_getattr
-dp01t_00_7_getattr: @ 805FF90
+ thumb_func_start OpponentHandleGetMonData
+OpponentHandleGetMonData: @ 805FF90
push {r4-r6,lr}
sub sp, 0x100
movs r6, 0
@@ -1672,7 +1654,7 @@ _0805FFEA:
pop {r4-r6}
pop {r0}
bx r0
- thumb_func_end dp01t_00_7_getattr
+ thumb_func_end OpponentHandleGetMonData
thumb_func_start sub_8060004
sub_8060004: @ 8060004
@@ -2552,8 +2534,8 @@ _0806079A:
.pool
thumb_func_end sub_8060004
- thumb_func_start dp01t_01_2_read_pokmon_data_slice
-dp01t_01_2_read_pokmon_data_slice: @ 80607B0
+ thumb_func_start OpponentHandleGetRawMonData
+OpponentHandleGetRawMonData: @ 80607B0
push {r4-r7,lr}
sub sp, 0x58
ldr r2, =gBattlePartyID
@@ -2614,10 +2596,10 @@ _08060806:
pop {r0}
bx r0
.pool
- thumb_func_end dp01t_01_2_read_pokmon_data_slice
+ thumb_func_end OpponentHandleGetRawMonData
- thumb_func_start dp01t_02_7_setattr
-dp01t_02_7_setattr: @ 8060838
+ thumb_func_start OpponentHandleSetMonData
+OpponentHandleSetMonData: @ 8060838
push {r4,r5,lr}
ldr r1, =gBattleBufferA
ldr r0, =gActiveBank
@@ -2657,7 +2639,7 @@ _08060886:
pop {r4,r5}
pop {r0}
bx r0
- thumb_func_end dp01t_02_7_setattr
+ thumb_func_end OpponentHandleSetMonData
thumb_func_start sub_8060890
sub_8060890: @ 8060890
@@ -3644,8 +3626,8 @@ _0806119C:
.pool
thumb_func_end sub_8060890
- thumb_func_start sub_80611B0
-sub_80611B0: @ 80611B0
+ thumb_func_start OpponentHandleSetRawMonData
+OpponentHandleSetRawMonData: @ 80611B0
push {r4-r7,lr}
ldr r1, =gBattlePartyID
ldr r7, =gActiveBank
@@ -3697,10 +3679,10 @@ _08061208:
pop {r0}
bx r0
.pool
- thumb_func_end sub_80611B0
+ thumb_func_end OpponentHandleSetRawMonData
- thumb_func_start sub_8061224
-sub_8061224: @ 8061224
+ thumb_func_start OpponentHandleLoadMonSprite
+OpponentHandleLoadMonSprite: @ 8061224
push {r4-r7,lr}
mov r7, r10
mov r6, r9
@@ -3843,10 +3825,10 @@ sub_8061224: @ 8061224
pop {r0}
bx r0
.pool
- thumb_func_end sub_8061224
+ thumb_func_end OpponentHandleLoadMonSprite
- thumb_func_start sub_806137C
-sub_806137C: @ 806137C
+ thumb_func_start OpponentHandleSwitchInAnim
+OpponentHandleSwitchInAnim: @ 806137C
push {r4,lr}
ldr r4, =gActiveBank
ldrb r0, [r4]
@@ -3882,7 +3864,7 @@ sub_806137C: @ 806137C
pop {r0}
bx r0
.pool
- thumb_func_end sub_806137C
+ thumb_func_end OpponentHandleSwitchInAnim
thumb_func_start sub_80613DC
sub_80613DC: @ 80613DC
@@ -3897,7 +3879,7 @@ sub_80613DC: @ 80613DC
lsls r1, 24
lsrs r1, 24
adds r0, r6, 0
- bl sub_805EF84
+ bl ClearTemporarySpeciesSpriteData
ldr r0, =gBattlePartyID
lsls r4, r6, 1
adds r4, r0
@@ -4057,8 +4039,8 @@ sub_80613DC: @ 80613DC
.pool
thumb_func_end sub_80613DC
- thumb_func_start sub_806156C
-sub_806156C: @ 806156C
+ thumb_func_start OpponentHandleReturnMonToBall
+OpponentHandleReturnMonToBall: @ 806156C
push {r4-r6,lr}
ldr r1, =gBattleBufferA
ldr r6, =gActiveBank
@@ -4116,7 +4098,7 @@ _080615F0:
pop {r0}
bx r0
.pool
- thumb_func_end sub_806156C
+ thumb_func_end OpponentHandleReturnMonToBall
thumb_func_start sub_8061604
sub_8061604: @ 8061604
@@ -4149,7 +4131,7 @@ _0806162C:
adds r0, r2, 0
adds r1, r2, 0
movs r3, 0x5
- bl move_anim_start_t4
+ bl DoSpecialBattleAnimation
_08061646:
ldr r0, [r6]
ldrb r1, [r5]
@@ -4174,7 +4156,7 @@ _0806165A:
adds r0, r2, 0
adds r1, r2, 0
movs r3, 0x2
- bl move_anim_start_t4
+ bl DoSpecialBattleAnimation
ldr r1, =gBattleBankFunc
ldrb r0, [r5]
lsls r0, 2
@@ -4188,8 +4170,8 @@ _08061682:
.pool
thumb_func_end sub_8061604
- thumb_func_start sub_8061690
-sub_8061690: @ 8061690
+ thumb_func_start OpponentHandleDrawTrainerPic
+OpponentHandleDrawTrainerPic: @ 8061690
push {r4-r7,lr}
mov r7, r9
mov r6, r8
@@ -4256,18 +4238,18 @@ _08061708:
cmp r0, 0x1
bne _08061734
ldrh r0, [r3]
- bl sub_8162AA0
+ bl GetFrontierTrainerFrontSpriteId
b _0806175A
.pool
_08061734:
ldr r0, =gTrainerBattleOpponent_B
ldrh r0, [r0]
- bl sub_8162AA0
+ bl GetFrontierTrainerFrontSpriteId
b _0806175A
.pool
_08061744:
ldrh r0, [r3]
- bl sub_8162AA0
+ bl GetFrontierTrainerFrontSpriteId
b _0806175A
_0806174C:
movs r0, 0x80
@@ -4329,7 +4311,7 @@ _080617CA:
ldr r5, =gActiveBank
ldrb r1, [r5]
mov r0, r8
- bl sub_805DF38
+ bl DecompressTrainerFrontPic
ldrb r0, [r5]
bl GetBankIdentity
adds r1, r0, 0
@@ -4434,10 +4416,10 @@ _080617CA:
pop {r0}
bx r0
.pool
- thumb_func_end sub_8061690
+ thumb_func_end OpponentHandleDrawTrainerPic
- thumb_func_start sub_80618D8
-sub_80618D8: @ 80618D8
+ thumb_func_start OpponentHandleTrainerSlide
+OpponentHandleTrainerSlide: @ 80618D8
push {r4-r6,lr}
mov r6, r8
push {r6}
@@ -4503,18 +4485,18 @@ _08061950:
cmp r0, 0x1
bne _0806197C
ldrh r0, [r3]
- bl sub_8162AA0
+ bl GetFrontierTrainerFrontSpriteId
b _080619A2
.pool
_0806197C:
ldr r0, =gTrainerBattleOpponent_B
ldrh r0, [r0]
- bl sub_8162AA0
+ bl GetFrontierTrainerFrontSpriteId
b _080619A2
.pool
_0806198C:
ldrh r0, [r3]
- bl sub_8162AA0
+ bl GetFrontierTrainerFrontSpriteId
b _080619A2
_08061994:
movs r0, 0x80
@@ -4555,7 +4537,7 @@ _080619DE:
mov r8, r0
ldr r6, =gActiveBank
ldrb r1, [r6]
- bl sub_805DF38
+ bl DecompressTrainerFrontPic
ldrb r0, [r6]
bl GetBankIdentity
adds r1, r0, 0
@@ -4662,10 +4644,10 @@ _080619DE:
pop {r0}
bx r0
.pool
- thumb_func_end sub_80618D8
+ thumb_func_end OpponentHandleTrainerSlide
- thumb_func_start sub_8061AF0
-sub_8061AF0: @ 8061AF0
+ thumb_func_start OpponentHandleTrainerSlideBack
+OpponentHandleTrainerSlideBack: @ 8061AF0
push {r4-r6,lr}
ldr r6, =gBankSpriteIds
ldr r4, =gActiveBank
@@ -4736,10 +4718,10 @@ sub_8061AF0: @ 8061AF0
pop {r0}
bx r0
.pool
- thumb_func_end sub_8061AF0
+ thumb_func_end OpponentHandleTrainerSlideBack
- thumb_func_start sub_8061B9C
-sub_8061B9C: @ 8061B9C
+ thumb_func_start OpponentHandleFaintAnimation
+OpponentHandleFaintAnimation: @ 8061B9C
push {r4-r6,lr}
ldr r6, =gBattleSpritesDataPtr
ldr r4, [r6]
@@ -4764,7 +4746,7 @@ sub_8061B9C: @ 8061B9C
adds r0, r2, 0
adds r1, r2, 0
movs r3, 0x5
- bl move_anim_start_t4
+ bl DoSpecialBattleAnimation
_08061BD0:
ldr r0, [r6]
ldrb r1, [r5]
@@ -4813,42 +4795,42 @@ _08061C2C:
pop {r0}
bx r0
.pool
- thumb_func_end sub_8061B9C
+ thumb_func_end OpponentHandleFaintAnimation
- thumb_func_start sub_8061C48
-sub_8061C48: @ 8061C48
+ thumb_func_start OpponentHandleCmd11
+OpponentHandleCmd11: @ 8061C48
push {lr}
bl OpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_8061C48
+ thumb_func_end OpponentHandleCmd11
- thumb_func_start sub_8061C54
-sub_8061C54: @ 8061C54
+ thumb_func_start OpponentHandleCmd12
+OpponentHandleCmd12: @ 8061C54
push {lr}
bl OpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_8061C54
+ thumb_func_end OpponentHandleCmd12
- thumb_func_start sub_8061C60
-sub_8061C60: @ 8061C60
+ thumb_func_start OpponentHandleBallThrow
+OpponentHandleBallThrow: @ 8061C60
push {lr}
bl OpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_8061C60
+ thumb_func_end OpponentHandleBallThrow
- thumb_func_start sub_8061C6C
-sub_8061C6C: @ 8061C6C
+ thumb_func_start OpponentHandlePause
+OpponentHandlePause: @ 8061C6C
push {lr}
bl OpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_8061C6C
+ thumb_func_end OpponentHandlePause
- thumb_func_start sub_8061C78
-sub_8061C78: @ 8061C78
+ thumb_func_start OpponentHandleMoveAnimation
+OpponentHandleMoveAnimation: @ 8061C78
push {r4-r6,lr}
ldr r6, =gActiveBank
ldrb r0, [r6]
@@ -4946,14 +4928,14 @@ _08061C8A:
adds r1, 0x10
adds r2, r1
str r2, [r3]
- ldr r3, =gUnknown_020244BC
+ ldr r3, =gTransformedPersonalities
ldrb r1, [r6]
lsls r1, 2
adds r1, r3
ldr r2, [r2]
str r2, [r1]
ldrb r1, [r5]
- bl sub_805DB8C
+ bl IsMoveWithoutAnimation
lsls r0, 24
lsrs r3, r0, 24
cmp r3, 0
@@ -4982,7 +4964,7 @@ _08061D9E:
pop {r0}
bx r0
.pool
- thumb_func_end sub_8061C78
+ thumb_func_end OpponentHandleMoveAnimation
thumb_func_start bx_move_anim_7
bx_move_anim_7: @ 8061DB0
@@ -5047,7 +5029,7 @@ _08061E12:
adds r0, r2, 0
adds r1, r2, 0
movs r3, 0x5
- bl move_anim_start_t4
+ bl DoSpecialBattleAnimation
_08061E34:
ldr r0, [r7]
ldrb r1, [r6]
@@ -5105,7 +5087,7 @@ _08061E72:
adds r0, r2, 0
adds r1, r2, 0
movs r3, 0x6
- bl move_anim_start_t4
+ bl DoSpecialBattleAnimation
ldr r0, [r7]
ldrb r1, [r6]
ldr r0, [r0]
@@ -5148,7 +5130,7 @@ _08061EE8:
ldrb r2, [r2]
lsls r2, 8
orrs r1, r2
- bl sub_805E94C
+ bl TrySetBehindSubstituteSpriteBit
ldr r0, [r7]
ldrb r1, [r6]
ldr r2, [r0, 0x4]
@@ -5168,8 +5150,8 @@ _08061F24:
bx r0
thumb_func_end bx_move_anim_7
- thumb_func_start sub_8061F34
-sub_8061F34: @ 8061F34
+ thumb_func_start OpponentHandlePrintString
+OpponentHandlePrintString: @ 8061F34
push {r4,r5,lr}
ldr r0, =gBattle_BG0_X
movs r1, 0
@@ -5185,7 +5167,7 @@ sub_8061F34: @ 8061F34
bl BufferStringBattle
ldr r0, =gDisplayedStringBattle
movs r1, 0
- bl sub_814F9EC
+ bl BattleHandleAddTextPrinter
ldr r1, =gBattleBankFunc
ldrb r0, [r5]
lsls r0, 2
@@ -5199,35 +5181,35 @@ sub_8061F34: @ 8061F34
pop {r0}
bx r0
.pool
- thumb_func_end sub_8061F34
+ thumb_func_end OpponentHandlePrintString
- thumb_func_start sub_8061F90
-sub_8061F90: @ 8061F90
+ thumb_func_start OpponentHandlePrintStringPlayerOnly
+OpponentHandlePrintStringPlayerOnly: @ 8061F90
push {lr}
bl OpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_8061F90
+ thumb_func_end OpponentHandlePrintStringPlayerOnly
- thumb_func_start sub_8061F9C
-sub_8061F9C: @ 8061F9C
+ thumb_func_start OpponentHandleChooseAction
+OpponentHandleChooseAction: @ 8061F9C
push {lr}
bl AI_TrySwitchOrUseItem
bl OpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_8061F9C
+ thumb_func_end OpponentHandleChooseAction
- thumb_func_start sub_8061FAC
-sub_8061FAC: @ 8061FAC
+ thumb_func_start OpponentHandleCmd19
+OpponentHandleCmd19: @ 8061FAC
push {lr}
bl OpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_8061FAC
+ thumb_func_end OpponentHandleCmd19
- thumb_func_start sub_8061FB8
-sub_8061FB8: @ 8061FB8
+ thumb_func_start OpponentHandleChooseMove
+OpponentHandleChooseMove: @ 8061FB8
push {r4-r6,lr}
ldr r0, =gBattleTypeFlags
ldr r2, [r0]
@@ -5236,14 +5218,14 @@ sub_8061FB8: @ 8061FB8
ands r0, r2
cmp r0, 0
beq _08061FE4
- bl sub_805D19C
+ bl ChooseMoveAndTargetInBattlePalace
adds r2, r0, 0
lsls r2, 16
lsrs r2, 16
movs r0, 0x1
movs r1, 0xA
_08061FD6:
- bl EmitCmd33
+ bl EmitTwoReturnValues
_08061FDA:
bl OpponentBufferExecCompleted
b _08062156
@@ -5347,7 +5329,7 @@ _0806209C:
movs r0, 0x1
movs r1, 0xA
adds r2, r4, 0
- bl EmitCmd33
+ bl EmitTwoReturnValues
b _08061FDA
.pool
_080620C4:
@@ -5378,7 +5360,7 @@ _080620C6:
movs r0, 0x1
movs r1, 0xA
adds r2, r4, 0
- bl EmitCmd33
+ bl EmitTwoReturnValues
b _08062152
.pool
_08062108:
@@ -5401,7 +5383,7 @@ _08062108:
orrs r2, r4
movs r0, 0x1
movs r1, 0xA
- bl EmitCmd33
+ bl EmitTwoReturnValues
b _08062152
.pool
_0806213C:
@@ -5413,17 +5395,17 @@ _0806213C:
orrs r2, r4
movs r0, 0x1
movs r1, 0xA
- bl EmitCmd33
+ bl EmitTwoReturnValues
_08062152:
bl OpponentBufferExecCompleted
_08062156:
pop {r4-r6}
pop {r0}
bx r0
- thumb_func_end sub_8061FB8
+ thumb_func_end OpponentHandleChooseMove
- thumb_func_start sub_806215C
-sub_806215C: @ 806215C
+ thumb_func_start OpponentHandleOpenBag
+OpponentHandleOpenBag: @ 806215C
push {lr}
ldr r0, =gActiveBank
ldrb r0, [r0]
@@ -5435,15 +5417,15 @@ sub_806215C: @ 806215C
adds r0, 0xC0
ldrb r1, [r0]
movs r0, 0x1
- bl EmitCmd35
+ bl EmitOneReturnValue
bl OpponentBufferExecCompleted
pop {r0}
bx r0
.pool
- thumb_func_end sub_806215C
+ thumb_func_end OpponentHandleOpenBag
- thumb_func_start sub_8062188
-sub_8062188: @ 8062188
+ thumb_func_start OpponentHandleChoosePokemon
+OpponentHandleChoosePokemon: @ 8062188
push {r4-r7,lr}
ldr r0, =gActiveBank
ldrb r0, [r0]
@@ -5550,24 +5532,24 @@ _0806225A:
lsrs r1, 24
movs r0, 0x1
movs r2, 0
- bl EmitCmd34
+ bl EmitChosenMonReturnValue
bl OpponentBufferExecCompleted
pop {r4-r7}
pop {r0}
bx r0
.pool
- thumb_func_end sub_8062188
+ thumb_func_end OpponentHandleChoosePokemon
- thumb_func_start sub_8062288
-sub_8062288: @ 8062288
+ thumb_func_start OpponentHandleCmd23
+OpponentHandleCmd23: @ 8062288
push {lr}
bl OpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_8062288
+ thumb_func_end OpponentHandleCmd23
- thumb_func_start sub_8062294
-sub_8062294: @ 8062294
+ thumb_func_start OpponentHandleHealthBarUpdate
+OpponentHandleHealthBarUpdate: @ 8062294
push {r4-r7,lr}
mov r7, r9
mov r6, r8
@@ -5660,18 +5642,18 @@ _0806234E:
pop {r0}
bx r0
.pool
- thumb_func_end sub_8062294
+ thumb_func_end OpponentHandleHealthBarUpdate
- thumb_func_start sub_8062384
-sub_8062384: @ 8062384
+ thumb_func_start OpponentHandleExpUpdate
+OpponentHandleExpUpdate: @ 8062384
push {lr}
bl OpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_8062384
+ thumb_func_end OpponentHandleExpUpdate
- thumb_func_start sub_8062390
-sub_8062390: @ 8062390
+ thumb_func_start OpponentHandleStatusIconUpdate
+OpponentHandleStatusIconUpdate: @ 8062390
push {r4,lr}
ldr r4, =gActiveBank
ldrb r0, [r4]
@@ -5717,10 +5699,10 @@ _080623E4:
pop {r0}
bx r0
.pool
- thumb_func_end sub_8062390
+ thumb_func_end OpponentHandleStatusIconUpdate
- thumb_func_start sub_8062408
-sub_8062408: @ 8062408
+ thumb_func_start OpponentHandleStatusAnimation
+OpponentHandleStatusAnimation: @ 8062408
push {r4,r5,lr}
ldr r5, =gActiveBank
ldrb r0, [r5]
@@ -5752,7 +5734,7 @@ sub_8062408: @ 8062408
ldrb r2, [r3]
lsls r2, 24
orrs r1, r2
- bl move_anim_start_t2_for_situation
+ bl DoStatusAnimation
ldr r1, =gBattleBankFunc
ldrb r0, [r5]
lsls r0, 2
@@ -5764,82 +5746,82 @@ _08062458:
pop {r0}
bx r0
.pool
- thumb_func_end sub_8062408
+ thumb_func_end OpponentHandleStatusAnimation
- thumb_func_start sub_8062470
-sub_8062470: @ 8062470
+ thumb_func_start OpponentHandleStatusXor
+OpponentHandleStatusXor: @ 8062470
push {lr}
bl OpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_8062470
+ thumb_func_end OpponentHandleStatusXor
- thumb_func_start sub_806247C
-sub_806247C: @ 806247C
+ thumb_func_start OpponentHandleDataTransfer
+OpponentHandleDataTransfer: @ 806247C
push {lr}
bl OpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_806247C
+ thumb_func_end OpponentHandleDataTransfer
- thumb_func_start sub_8062488
-sub_8062488: @ 8062488
+ thumb_func_start OpponentHandleDMA3Transfer
+OpponentHandleDMA3Transfer: @ 8062488
push {lr}
bl OpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_8062488
+ thumb_func_end OpponentHandleDMA3Transfer
- thumb_func_start sub_8062494
-sub_8062494: @ 8062494
+ thumb_func_start OpponentHandlePlayBGM
+OpponentHandlePlayBGM: @ 8062494
push {lr}
bl OpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_8062494
+ thumb_func_end OpponentHandlePlayBGM
- thumb_func_start sub_80624A0
-sub_80624A0: @ 80624A0
+ thumb_func_start OpponentHandleCmd32
+OpponentHandleCmd32: @ 80624A0
push {lr}
bl OpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_80624A0
+ thumb_func_end OpponentHandleCmd32
- thumb_func_start sub_80624AC
-sub_80624AC: @ 80624AC
+ thumb_func_start OpponentHandleCmd33
+OpponentHandleCmd33: @ 80624AC
push {lr}
bl OpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_80624AC
+ thumb_func_end OpponentHandleCmd33
- thumb_func_start sub_80624B8
-sub_80624B8: @ 80624B8
+ thumb_func_start OpponentHandleCmd34
+OpponentHandleCmd34: @ 80624B8
push {lr}
bl OpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_80624B8
+ thumb_func_end OpponentHandleCmd34
- thumb_func_start sub_80624C4
-sub_80624C4: @ 80624C4
+ thumb_func_start OpponentHandleCmd35
+OpponentHandleCmd35: @ 80624C4
push {lr}
bl OpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_80624C4
+ thumb_func_end OpponentHandleCmd35
- thumb_func_start sub_80624D0
-sub_80624D0: @ 80624D0
+ thumb_func_start OpponentHandleCmd36
+OpponentHandleCmd36: @ 80624D0
push {lr}
bl OpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_80624D0
+ thumb_func_end OpponentHandleCmd36
- thumb_func_start sub_80624DC
-sub_80624DC: @ 80624DC
+ thumb_func_start OpponentHandleCmd37
+OpponentHandleCmd37: @ 80624DC
push {lr}
ldr r2, =gUnknown_02022D0C
ldrb r1, [r2]
@@ -5851,10 +5833,10 @@ sub_80624DC: @ 80624DC
pop {r0}
bx r0
.pool
- thumb_func_end sub_80624DC
+ thumb_func_end OpponentHandleCmd37
- thumb_func_start sub_80624F8
-sub_80624F8: @ 80624F8
+ thumb_func_start OpponentHandleCmd38
+OpponentHandleCmd38: @ 80624F8
push {lr}
ldr r3, =gUnknown_02022D0C
ldr r1, =gBattleBufferA
@@ -5876,10 +5858,10 @@ sub_80624F8: @ 80624F8
pop {r0}
bx r0
.pool
- thumb_func_end sub_80624F8
+ thumb_func_end OpponentHandleCmd38
- thumb_func_start sub_8062530
-sub_8062530: @ 8062530
+ thumb_func_start OpponentHandleCmd39
+OpponentHandleCmd39: @ 8062530
push {lr}
ldr r2, =gUnknown_02022D0C
ldrb r1, [r2]
@@ -5890,10 +5872,10 @@ sub_8062530: @ 8062530
pop {r0}
bx r0
.pool
- thumb_func_end sub_8062530
+ thumb_func_end OpponentHandleCmd39
- thumb_func_start sub_8062548
-sub_8062548: @ 8062548
+ thumb_func_start OpponentHandleCmd40
+OpponentHandleCmd40: @ 8062548
push {lr}
ldr r3, =gUnknown_02022D0C
ldr r1, [r3]
@@ -5911,10 +5893,10 @@ sub_8062548: @ 8062548
pop {r0}
bx r0
.pool
- thumb_func_end sub_8062548
+ thumb_func_end OpponentHandleCmd40
- thumb_func_start dp01t_29_7_blink
-dp01t_29_7_blink: @ 8062570
+ thumb_func_start OpponentHandleHitAnimation
+OpponentHandleHitAnimation: @ 8062570
push {r4,lr}
ldr r3, =gSprites
ldr r2, =gBankSpriteIds
@@ -5948,7 +5930,7 @@ _080625A4:
movs r1, 0
strh r1, [r0, 0x30]
ldrb r0, [r4]
- bl sub_80769F4
+ bl DoHitAnimHealthboxEffect
ldr r1, =gBattleBankFunc
ldrb r0, [r4]
lsls r0, 2
@@ -5960,18 +5942,18 @@ _080625CE:
pop {r0}
bx r0
.pool
- thumb_func_end dp01t_29_7_blink
+ thumb_func_end OpponentHandleHitAnimation
- thumb_func_start sub_80625E0
-sub_80625E0: @ 80625E0
+ thumb_func_start OpponentHandleCmd42
+OpponentHandleCmd42: @ 80625E0
push {lr}
bl OpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_80625E0
+ thumb_func_end OpponentHandleCmd42
- thumb_func_start sub_80625EC
-sub_80625EC: @ 80625EC
+ thumb_func_start OpponentHandleEffectivenessSound
+OpponentHandleEffectivenessSound: @ 80625EC
push {r4,lr}
ldr r4, =gActiveBank
ldrb r0, [r4]
@@ -6001,10 +5983,10 @@ _08062600:
pop {r0}
bx r0
.pool
- thumb_func_end sub_80625EC
+ thumb_func_end OpponentHandleEffectivenessSound
- thumb_func_start sub_8062630
-sub_8062630: @ 8062630
+ thumb_func_start OpponentHandlePlayFanfareOrBGM
+OpponentHandlePlayFanfareOrBGM: @ 8062630
push {r4,r5,lr}
ldr r4, =gBattleBufferA
ldr r5, =gActiveBank
@@ -6044,10 +6026,10 @@ _08062680:
pop {r4,r5}
pop {r0}
bx r0
- thumb_func_end sub_8062630
+ thumb_func_end OpponentHandlePlayFanfareOrBGM
- thumb_func_start sub_806268C
-sub_806268C: @ 806268C
+ thumb_func_start OpponentHandleFaintingCry
+OpponentHandleFaintingCry: @ 806268C
push {lr}
ldr r1, =gBattlePartyID
ldr r0, =gActiveBank
@@ -6070,10 +6052,10 @@ sub_806268C: @ 806268C
pop {r0}
bx r0
.pool
- thumb_func_end sub_806268C
+ thumb_func_end OpponentHandleFaintingCry
- thumb_func_start dp01t_2E_7_battle_intro
-dp01t_2E_7_battle_intro: @ 80626C8
+ thumb_func_start OpponentHandleIntroSlide
+OpponentHandleIntroSlide: @ 80626C8
push {lr}
ldr r1, =gBattleBufferA
ldr r0, =gActiveBank
@@ -6082,7 +6064,7 @@ dp01t_2E_7_battle_intro: @ 80626C8
adds r1, 0x1
adds r0, r1
ldrb r0, [r0]
- bl battle_intro_launch
+ bl HandleIntroSlide
ldr r2, =gUnknown_020243FC
ldrh r0, [r2]
movs r1, 0x1
@@ -6092,10 +6074,10 @@ dp01t_2E_7_battle_intro: @ 80626C8
pop {r0}
bx r0
.pool
- thumb_func_end dp01t_2E_7_battle_intro
+ thumb_func_end OpponentHandleIntroSlide
- thumb_func_start sub_80626FC
-sub_80626FC: @ 80626FC
+ thumb_func_start OpponentHandleIntroTrainerBallThrow
+OpponentHandleIntroTrainerBallThrow: @ 80626FC
push {r4-r6,lr}
ldr r5, =gBankSpriteIds
ldr r6, =gActiveBank
@@ -6207,14 +6189,14 @@ _080627BE:
pop {r0}
bx r0
.pool
- thumb_func_end sub_80626FC
+ thumb_func_end OpponentHandleIntroTrainerBallThrow
thumb_func_start sub_806280C
sub_806280C: @ 806280C
push {r4,lr}
adds r4, r0, 0
ldrh r0, [r4, 0x6]
- bl sub_805DFE4
+ bl FreeTrainerFrontPicPalette
adds r0, r4, 0
bl FreeSpriteOamMatrix
adds r0, r4, 0
@@ -6327,8 +6309,8 @@ _080628E0:
.pool
thumb_func_end sub_8062828
- thumb_func_start dp01t_30_7_0803D67C
-dp01t_30_7_0803D67C: @ 8062918
+ thumb_func_start OpponentHandleDrawPartyStatusSummary
+OpponentHandleDrawPartyStatusSummary: @ 8062918
push {r4-r7,lr}
ldr r1, =gBattleBufferA
ldr r0, =gActiveBank
@@ -6450,7 +6432,7 @@ _08062A12:
pop {r0}
bx r0
.pool
- thumb_func_end dp01t_30_7_0803D67C
+ thumb_func_end OpponentHandleDrawPartyStatusSummary
thumb_func_start bx_0803D790_t7
bx_0803D790_t7: @ 8062A2C
@@ -6488,8 +6470,8 @@ _08062A64:
.pool
thumb_func_end bx_0803D790_t7
- thumb_func_start sub_8062A74
-sub_8062A74: @ 8062A74
+ thumb_func_start OpponentHandleCmd49
+OpponentHandleCmd49: @ 8062A74
push {lr}
ldr r0, =gBattleSpritesDataPtr
ldr r1, [r0]
@@ -6520,18 +6502,18 @@ _08062AA6:
pop {r0}
bx r0
.pool
- thumb_func_end sub_8062A74
+ thumb_func_end OpponentHandleCmd49
- thumb_func_start sub_8062AC4
-sub_8062AC4: @ 8062AC4
+ thumb_func_start OpponentHandleCmd50
+OpponentHandleCmd50: @ 8062AC4
push {lr}
bl OpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_8062AC4
+ thumb_func_end OpponentHandleCmd50
- thumb_func_start sub_8062AD0
-sub_8062AD0: @ 8062AD0
+ thumb_func_start OpponentHandleSpriteInvisibility
+OpponentHandleSpriteInvisibility: @ 8062AD0
push {r4,lr}
ldr r4, =gActiveBank
ldrb r0, [r4]
@@ -6564,17 +6546,17 @@ sub_8062AD0: @ 8062AD0
orrs r0, r1
strb r0, [r2]
ldrb r0, [r4]
- bl sub_805E408
+ bl SetBattleSpriteInvisibilityBitToSpriteInvisibility
_08062B16:
bl OpponentBufferExecCompleted
pop {r4}
pop {r0}
bx r0
.pool
- thumb_func_end sub_8062AD0
+ thumb_func_end OpponentHandleSpriteInvisibility
- thumb_func_start dp01t_34_7_move_anim_start_t3
-dp01t_34_7_move_anim_start_t3: @ 8062B30
+ thumb_func_start OpponentHandleBattleAnimation
+OpponentHandleBattleAnimation: @ 8062B30
push {r4-r6,lr}
sub sp, 0x4
ldr r6, =gActiveBank
@@ -6600,7 +6582,7 @@ dp01t_34_7_move_anim_start_t3: @ 8062B30
str r4, [sp]
adds r0, r2, 0
adds r1, r2, 0
- bl move_anim_start_t3
+ bl DoBattleAnimationFromTable
lsls r0, 24
cmp r0, 0
beq _08062B7C
@@ -6620,26 +6602,26 @@ _08062B88:
pop {r0}
bx r0
.pool
- thumb_func_end dp01t_34_7_move_anim_start_t3
+ thumb_func_end OpponentHandleBattleAnimation
- thumb_func_start sub_8062B98
-sub_8062B98: @ 8062B98
+ thumb_func_start OpponentHandleLinkStandbyMsg
+OpponentHandleLinkStandbyMsg: @ 8062B98
push {lr}
bl OpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_8062B98
+ thumb_func_end OpponentHandleLinkStandbyMsg
- thumb_func_start sub_8062BA4
-sub_8062BA4: @ 8062BA4
+ thumb_func_start OpponentHandleResetActionMoveSelection
+OpponentHandleResetActionMoveSelection: @ 8062BA4
push {lr}
bl OpponentBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_8062BA4
+ thumb_func_end OpponentHandleResetActionMoveSelection
- thumb_func_start sub_8062BB0
-sub_8062BB0: @ 8062BB0
+ thumb_func_start OpponentHandleCmd55
+OpponentHandleCmd55: @ 8062BB0
push {lr}
ldr r0, =gBattleTypeFlags
ldr r0, [r0]
@@ -6665,7 +6647,7 @@ _08062BDA:
pop {r0}
bx r0
.pool
- thumb_func_end sub_8062BB0
+ thumb_func_end OpponentHandleCmd55
thumb_func_start nullsub_91
nullsub_91: @ 8062BF4
diff --git a/asm/battle_controller_player.s b/asm/battle_controller_player.s
deleted file mode 100644
index 10b675714..000000000
--- a/asm/battle_controller_player.s
+++ /dev/null
@@ -1,10419 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start nullsub_21
-nullsub_21: @ 8057458
- bx lr
- thumb_func_end nullsub_21
-
- thumb_func_start SetBankFuncToPlayerBufferRunCommand
-SetBankFuncToPlayerBufferRunCommand: @ 805745C
- ldr r1, =gBattleBankFunc
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, =PlayerBufferRunCommand
- str r1, [r0]
- ldr r0, =gDoingBattleAnim
- movs r1, 0
- strb r1, [r0]
- ldr r0, =gUnknown_020244CC
- strb r1, [r0]
- bx lr
- .pool
- thumb_func_end SetBankFuncToPlayerBufferRunCommand
-
- thumb_func_start PlayerBufferExecCompleted
-PlayerBufferExecCompleted: @ 805748C
- push {r4,lr}
- sub sp, 0x4
- ldr r1, =gBattleBankFunc
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, =PlayerBufferRunCommand
- str r1, [r0]
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080574E0
- bl GetMultiplayerId
- mov r1, sp
- strb r0, [r1]
- movs r0, 0x2
- movs r1, 0x4
- mov r2, sp
- bl PrepareBufferDataTransferLink
- ldr r1, =gBattleBufferA
- ldrb r0, [r4]
- lsls r0, 9
- adds r0, r1
- movs r1, 0x38
- strb r1, [r0]
- b _080574F2
- .pool
-_080574E0:
- ldr r2, =gBattleExecBuffer
- ldr r1, =gBitTable
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- ldr r0, [r2]
- bics r0, r1
- str r0, [r2]
-_080574F2:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end PlayerBufferExecCompleted
-
- thumb_func_start PlayerBufferRunCommand
-PlayerBufferRunCommand: @ 8057504
- push {lr}
- ldr r2, =gBattleExecBuffer
- ldr r1, =gBitTable
- ldr r0, =gActiveBank
- ldrb r3, [r0]
- lsls r0, r3, 2
- adds r0, r1
- ldr r1, [r2]
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _08057550
- ldr r0, =gBattleBufferA
- lsls r1, r3, 9
- adds r1, r0
- ldrb r0, [r1]
- cmp r0, 0x38
- bhi _0805754C
- ldr r0, =gPlayerBufferCommands
- ldrb r1, [r1]
- lsls r1, 2
- adds r1, r0
- ldr r0, [r1]
- bl _call_via_r0
- b _08057550
- .pool
-_0805754C:
- bl PlayerBufferExecCompleted
-_08057550:
- pop {r0}
- bx r0
- thumb_func_end PlayerBufferRunCommand
-
- thumb_func_start bx_0802E404
-bx_0802E404: @ 8057554
- push {lr}
- ldr r2, =gSprites
- ldr r1, =gBankSpriteIds
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x24
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _08057576
- bl PlayerBufferExecCompleted
-_08057576:
- pop {r0}
- bx r0
- .pool
- thumb_func_end bx_0802E404
-
- thumb_func_start sub_8057588
-sub_8057588: @ 8057588
- push {r4-r7,lr}
- ldr r3, =gBattleBufferA
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- lsls r2, r0, 9
- adds r1, r3, 0x2
- adds r1, r2, r1
- ldrb r5, [r1]
- adds r3, 0x3
- adds r2, r3
- ldrb r1, [r2]
- lsls r1, 8
- orrs r5, r1
- movs r1, 0x1
- movs r2, 0x7
- movs r3, 0x1
- bl dp11b_obj_instanciate
- ldrb r0, [r4]
- movs r1, 0
- movs r2, 0x7
- movs r3, 0x1
- bl dp11b_obj_instanciate
- ldr r0, =gMain
- ldrh r1, [r0, 0x30]
- movs r0, 0xF0
- ands r0, r1
- cmp r0, 0
- beq _080575EC
- ldr r0, =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x13]
- cmp r0, 0x2
- bne _080575EC
- ldr r1, =gUnknown_020244CC
- ldrb r0, [r1]
- adds r0, 0x1
- b _080575F0
- .pool
-_080575EC:
- ldr r1, =gUnknown_020244CC
- movs r0, 0
-_080575F0:
- strb r0, [r1]
- ldr r0, =gMain
- ldrh r2, [r0, 0x2E]
- movs r3, 0x1
- adds r0, r3, 0
- ands r0, r2
- cmp r0, 0
- beq _08057658
- movs r0, 0x5
- bl PlaySE
- ldr r1, =gActionSelectionCursor
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _08057640
- cmp r0, 0x1
- bgt _08057630
- cmp r0, 0
- beq _0805763A
- b _080577C2
- .pool
-_08057630:
- cmp r0, 0x2
- beq _08057646
- cmp r0, 0x3
- beq _0805764C
- b _080577C2
-_0805763A:
- movs r0, 0x1
- movs r1, 0
- b _080577BC
-_08057640:
- movs r0, 0x1
- movs r1, 0x1
- b _080577BC
-_08057646:
- movs r0, 0x1
- movs r1, 0x2
- b _080577BC
-_0805764C:
- movs r0, 0x1
- movs r1, 0x3
- movs r2, 0
- bl EmitCmd33
- b _080577C2
-_08057658:
- movs r0, 0x20
- ands r0, r2
- cmp r0, 0
- beq _08057698
- ldr r5, =gActionSelectionCursor
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- bne _08057674
- b _080577E8
-_08057674:
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl ActionSelectionDestroyCursorAt
- ldrb r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- movs r2, 0x1
- b _08057732
- .pool
-_08057698:
- movs r0, 0x10
- ands r0, r2
- cmp r0, 0
- beq _080576D8
- ldr r5, =gActionSelectionCursor
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- beq _080576B4
- b _080577E8
-_080576B4:
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl ActionSelectionDestroyCursorAt
- ldrb r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- movs r2, 0x1
- b _08057732
- .pool
-_080576D8:
- movs r7, 0x40
- adds r0, r7, 0
- ands r0, r2
- cmp r0, 0
- beq _08057700
- ldr r5, =gActionSelectionCursor
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080577E8
- b _0805771A
- .pool
-_08057700:
- movs r0, 0x80
- ands r0, r2
- cmp r0, 0
- beq _0805774C
- ldr r5, =gActionSelectionCursor
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _080577E8
-_0805771A:
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl ActionSelectionDestroyCursorAt
- ldrb r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- movs r2, 0x2
-_08057732:
- eors r0, r2
- strb r0, [r1]
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- movs r1, 0
- bl ActionSelectionCreateCursorAt
- b _080577E8
- .pool
-_0805774C:
- movs r0, 0x2
- ands r0, r2
- cmp r0, 0
- bne _0805775A
- ldrb r0, [r1]
- cmp r0, 0x3B
- bls _080577DC
-_0805775A:
- ldr r4, =gBattleTypeFlags
- ldr r0, [r4]
- ands r0, r3
- cmp r0, 0
- beq _080577E8
- ldr r6, =gActiveBank
- ldrb r0, [r6]
- bl GetBankIdentity
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bne _080577E8
- movs r0, 0
- bl GetBankByIdentity
- ldr r1, =gAbsentBankFlags
- ldrb r1, [r1]
- ldr r2, =gBitTable
- lsls r0, 24
- lsrs r0, 22
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _080577E8
- ldr r0, [r4]
- ands r0, r7
- cmp r0, 0
- bne _080577E8
- ldr r0, =gBattleBufferA
- ldrb r1, [r6]
- lsls r1, 9
- adds r0, 0x1
- adds r1, r0
- ldrb r0, [r1]
- cmp r0, 0x1
- bne _080577B2
- cmp r5, 0xC
- bhi _080577E8
- adds r0, r5, 0
- movs r1, 0x1
- bl AddBagItem
-_080577B2:
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- movs r1, 0xC
-_080577BC:
- movs r2, 0
- bl EmitCmd33
-_080577C2:
- bl PlayerBufferExecCompleted
- b _080577E8
- .pool
-_080577DC:
- movs r0, 0x8
- ands r0, r2
- cmp r0, 0
- beq _080577E8
- bl SwapHpBarsWithHpText
-_080577E8:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8057588
-
- thumb_func_start sub_80577F0
-sub_80577F0: @ 80577F0
- push {r4,lr}
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- movs r1, 0x1
- bl dp11b_obj_free
- ldrb r0, [r4]
- movs r1, 0
- bl dp11b_obj_free
- ldr r1, =gBattleBankFunc
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_8057824
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80577F0
-
- thumb_func_start sub_8057824
-sub_8057824: @ 8057824
- push {r4,r5,lr}
- sub sp, 0x4
- ldr r1, =gUnknown_0831C5F8
- mov r0, sp
- movs r2, 0x4
- bl memcpy
- ldr r0, =gUnknown_03005D74
- ldrb r0, [r0]
- movs r1, 0x1
- movs r2, 0xF
- movs r3, 0x1
- bl dp11b_obj_instanciate
- movs r4, 0
- ldr r0, =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r0, 0
- beq _08057866
-_0805784A:
- ldr r0, =gUnknown_03005D74
- ldrb r0, [r0]
- cmp r4, r0
- beq _0805785C
- lsls r0, r4, 24
- lsrs r0, 24
- movs r1, 0x1
- bl dp11b_obj_free
-_0805785C:
- adds r4, 0x1
- ldr r0, =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r4, r0
- blt _0805784A
-_08057866:
- ldr r2, =gMain
- ldrh r1, [r2, 0x2C]
- movs r0, 0xF0
- ands r0, r1
- cmp r0, 0
- beq _0805789C
- ldr r0, =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x13]
- cmp r0, 0x2
- bne _0805789C
- ldr r1, =gUnknown_020244CC
- ldrb r0, [r1]
- adds r0, 0x1
- b _080578A0
- .pool
-_0805789C:
- ldr r1, =gUnknown_020244CC
- movs r0, 0
-_080578A0:
- strb r0, [r1]
- ldrh r2, [r2, 0x2E]
- movs r0, 0x1
- ands r0, r2
- cmp r0, 0
- beq _08057910
- movs r0, 0x5
- bl PlaySE
- ldr r2, =gSprites
- ldr r1, =gBankSpriteIds
- ldr r4, =gUnknown_03005D74
- ldrb r0, [r4]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, =sub_8039B2C
- str r1, [r0]
- ldr r1, =gMoveSelectionCursor
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- adds r0, r1
- ldrb r2, [r0]
- ldrb r0, [r4]
- lsls r0, 8
- orrs r2, r0
- movs r0, 0x1
- movs r1, 0xA
- bl EmitCmd33
- ldrb r0, [r4]
- movs r1, 0x1
- bl dp11b_obj_free
- bl PlayerBufferExecCompleted
- b _08057BC8
- .pool
-_08057910:
- movs r0, 0x2
- ands r0, r2
- cmp r0, 0
- bne _0805791E
- ldrb r0, [r1]
- cmp r0, 0x3B
- bls _0805798C
-_0805791E:
- movs r0, 0x5
- bl PlaySE
- ldr r2, =gSprites
- ldr r1, =gBankSpriteIds
- ldr r5, =gUnknown_03005D74
- ldrb r0, [r5]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, =sub_8039B2C
- str r1, [r0]
- ldr r1, =gBattleBankFunc
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_8057BFC
- str r1, [r0]
- ldrb r0, [r4]
- movs r1, 0x1
- movs r2, 0x7
- movs r3, 0x1
- bl dp11b_obj_instanciate
- ldrb r0, [r4]
- movs r1, 0
- movs r2, 0x7
- movs r3, 0x1
- bl dp11b_obj_instanciate
- ldrb r0, [r5]
- movs r1, 0x1
- bl dp11b_obj_free
- b _08057BC8
- .pool
-_0805798C:
- movs r0, 0x60
- ands r0, r2
- cmp r0, 0
- bne _08057996
- b _08057AB0
-_08057996:
- movs r0, 0x5
- bl PlaySE
- ldr r2, =gSprites
- ldr r1, =gBankSpriteIds
- ldr r3, =gUnknown_03005D74
- ldrb r0, [r3]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, =sub_8039B2C
- str r1, [r0]
- adds r5, r3, 0
-_080579B8:
- ldrb r0, [r5]
- bl GetBankIdentity
- lsls r0, 24
- lsrs r1, r0, 24
- movs r4, 0
- mov r0, sp
- b _080579E2
- .pool
-_080579D8:
- adds r4, 0x1
- cmp r4, 0x3
- bgt _080579E8
- mov r2, sp
- adds r0, r2, r4
-_080579E2:
- ldrb r0, [r0]
- cmp r1, r0
- bne _080579D8
-_080579E8:
- subs r4, 0x1
- cmp r4, 0
- bge _080579F0
- movs r4, 0x4
-_080579F0:
- mov r1, sp
- adds r0, r1, r4
- ldrb r0, [r0]
- bl GetBankByIdentity
- strb r0, [r5]
- ldr r1, =gNoOfAllBanks
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r1]
- cmp r0, r1
- beq _080579E8
- movs r4, 0
- ldrb r0, [r5]
- bl GetBankIdentity
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08057A6E
- cmp r0, 0x1
- bgt _08057A28
- cmp r0, 0
- beq _08057A32
- b _08057A70
- .pool
-_08057A28:
- cmp r0, 0x2
- beq _08057A32
- cmp r0, 0x3
- beq _08057A6E
- b _08057A70
-_08057A32:
- ldr r2, =gActiveBank
- ldrb r0, [r2]
- ldrb r1, [r5]
- cmp r0, r1
- bne _08057A6E
- ldr r1, =gBattlePartyID
- ldrb r2, [r2]
- lsls r0, r2, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gMoveSelectionCursor
- adds r2, r1
- ldrb r1, [r2]
- adds r1, 0xD
- bl GetMonData
- ldr r2, =gBattleMoves
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r1, [r1, 0x6]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08057A70
-_08057A6E:
- adds r4, 0x1
-_08057A70:
- ldr r0, =gAbsentBankFlags
- ldrb r1, [r0]
- ldr r2, =gBitTable
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- ldr r0, =gUnknown_03005D74
- cmp r1, 0
- beq _08057A88
- movs r4, 0
-_08057A88:
- cmp r4, 0
- beq _080579B8
- b _08057BB0
- .pool
-_08057AB0:
- movs r0, 0x90
- ands r0, r2
- cmp r0, 0
- bne _08057ABA
- b _08057BC8
-_08057ABA:
- movs r0, 0x5
- bl PlaySE
- ldr r2, =gSprites
- ldr r1, =gBankSpriteIds
- ldr r3, =gUnknown_03005D74
- ldrb r0, [r3]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, =sub_8039B2C
- str r1, [r0]
- adds r5, r3, 0
-_08057ADC:
- ldrb r0, [r5]
- bl GetBankIdentity
- lsls r0, 24
- lsrs r1, r0, 24
- movs r4, 0
- mov r0, sp
- b _08057B06
- .pool
-_08057AFC:
- adds r4, 0x1
- cmp r4, 0x3
- bgt _08057B0C
- mov r2, sp
- adds r0, r2, r4
-_08057B06:
- ldrb r0, [r0]
- cmp r1, r0
- bne _08057AFC
-_08057B0C:
- adds r4, 0x1
- cmp r4, 0x3
- ble _08057B14
- movs r4, 0
-_08057B14:
- mov r1, sp
- adds r0, r1, r4
- ldrb r0, [r0]
- bl GetBankByIdentity
- strb r0, [r5]
- ldr r1, =gNoOfAllBanks
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r1]
- cmp r0, r1
- beq _08057B0C
- movs r4, 0
- ldrb r0, [r5]
- bl GetBankIdentity
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08057B92
- cmp r0, 0x1
- bgt _08057B4C
- cmp r0, 0
- beq _08057B56
- b _08057B94
- .pool
-_08057B4C:
- cmp r0, 0x2
- beq _08057B56
- cmp r0, 0x3
- beq _08057B92
- b _08057B94
-_08057B56:
- ldr r2, =gActiveBank
- ldrb r0, [r2]
- ldrb r1, [r5]
- cmp r0, r1
- bne _08057B92
- ldr r1, =gBattlePartyID
- ldrb r2, [r2]
- lsls r0, r2, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gMoveSelectionCursor
- adds r2, r1
- ldrb r1, [r2]
- adds r1, 0xD
- bl GetMonData
- ldr r2, =gBattleMoves
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r1, [r1, 0x6]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08057B94
-_08057B92:
- adds r4, 0x1
-_08057B94:
- ldr r0, =gAbsentBankFlags
- ldrb r1, [r0]
- ldr r2, =gBitTable
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- ldr r0, =gUnknown_03005D74
- cmp r1, 0
- beq _08057BAC
- movs r4, 0
-_08057BAC:
- cmp r4, 0
- beq _08057ADC
-_08057BB0:
- ldr r2, =gSprites
- ldr r1, =gBankSpriteIds
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, =sub_8039AD8
- str r1, [r0]
-_08057BC8:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8057824
-
- thumb_func_start sub_8057BFC
-sub_8057BFC: @ 8057BFC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- movs r0, 0
- mov r8, r0
- ldr r3, =gActiveBank
- ldrb r0, [r3]
- lsls r0, 9
- ldr r1, =gBattleBufferA + 4
- adds r6, r0, r1
- ldr r2, =gMain
- ldrh r1, [r2, 0x2C]
- movs r0, 0xF0
- ands r0, r1
- adds r7, r3, 0
- cmp r0, 0
- beq _08057C44
- ldr r0, =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x13]
- cmp r0, 0x2
- bne _08057C44
- ldr r1, =gUnknown_020244CC
- ldrb r0, [r1]
- adds r0, 0x1
- b _08057C48
- .pool
-_08057C44:
- ldr r1, =gUnknown_020244CC
- movs r0, 0
-_08057C48:
- strb r0, [r1]
- ldrh r2, [r2, 0x2E]
- movs r5, 0x1
- adds r0, r5, 0
- ands r0, r2
- cmp r0, 0
- bne _08057C58
- b _08057E04
-_08057C58:
- movs r0, 0x5
- bl PlaySE
- ldr r1, =gMoveSelectionCursor
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 1
- adds r1, r6, r0
- ldrh r0, [r1]
- cmp r0, 0xAE
- bne _08057C98
- ldrb r0, [r6, 0x12]
- movs r4, 0
- cmp r0, 0x7
- beq _08057CA6
- ldrb r1, [r6, 0x13]
- movs r0, 0x7
- eors r1, r0
- negs r0, r1
- orrs r0, r1
- asrs r4, r0, 31
- movs r0, 0x10
- ands r4, r0
- b _08057CA6
- .pool
-_08057C98:
- ldr r2, =gBattleMoves
- ldrh r1, [r1]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r4, [r0, 0x6]
-_08057CA6:
- movs r0, 0x10
- ands r0, r4
- cmp r0, 0
- beq _08057CC4
- ldr r0, =gUnknown_03005D74
- ldr r1, =gActiveBank
- ldrb r1, [r1]
- strb r1, [r0]
- b _08057CDE
- .pool
-_08057CC4:
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- bl GetBankIdentity
- adds r1, r0, 0
- movs r2, 0x1
- movs r0, 0x1
- ands r0, r1
- eors r0, r2
- bl GetBankByIdentity
- ldr r1, =gUnknown_03005D74
- strb r0, [r1]
-_08057CDE:
- ldr r5, =gBattleBufferA
- ldr r0, =gActiveBank
- ldrb r3, [r0]
- lsls r2, r3, 9
- adds r1, r5, 0x1
- adds r1, r2, r1
- ldrb r1, [r1]
- adds r7, r0, 0
- cmp r1, 0
- bne _08057D18
- movs r0, 0x2
- ands r0, r4
- cmp r0, 0
- beq _08057D5A
- adds r0, r5, 0x2
- adds r0, r2, r0
- ldrb r0, [r0]
- cmp r0, 0
- bne _08057D5A
- movs r0, 0x1
- add r8, r0
- b _08057D5A
- .pool
-_08057D18:
- movs r0, 0x7D
- ands r0, r4
- cmp r0, 0
- bne _08057D24
- movs r0, 0x1
- add r8, r0
-_08057D24:
- ldr r0, =gMoveSelectionCursor
- adds r0, r3, r0
- adds r1, r6, 0
- adds r1, 0x8
- ldrb r0, [r0]
- adds r1, r0
- ldrb r0, [r1]
- cmp r0, 0
- beq _08057D62
- movs r0, 0x12
- ands r0, r4
- cmp r0, 0
- bne _08057D5A
- movs r0, 0
- bl CountAliveMonsInBattle
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bhi _08057D5A
- ldrb r0, [r7]
- bl sub_8069F34
- ldr r1, =gUnknown_03005D74
- strb r0, [r1]
- movs r0, 0
- mov r8, r0
-_08057D5A:
- ldr r7, =gActiveBank
- mov r0, r8
- cmp r0, 0
- bne _08057D80
-_08057D62:
- ldr r1, =gMoveSelectionCursor
- ldrb r0, [r7]
- adds r0, r1
- ldrb r2, [r0]
- ldr r0, =gUnknown_03005D74
- ldrb r0, [r0]
- lsls r0, 8
- orrs r2, r0
- b _08057E1C
- .pool
-_08057D80:
- ldr r1, =gBattleBankFunc
- ldrb r0, [r7]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_8057824
- str r1, [r0]
- movs r0, 0x12
- ands r4, r0
- cmp r4, 0
- beq _08057DA8
- ldr r1, =gUnknown_03005D74
- ldrb r0, [r7]
- b _08057DD8
- .pool
-_08057DA8:
- movs r0, 0x1
- bl GetBankByIdentity
- ldr r1, =gAbsentBankFlags
- ldrb r1, [r1]
- ldr r2, =gBitTable
- lsls r0, 24
- lsrs r0, 22
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _08057DD0
- movs r0, 0x3
- b _08057DD2
- .pool
-_08057DD0:
- movs r0, 0x1
-_08057DD2:
- bl GetBankByIdentity
- ldr r1, =gUnknown_03005D74
-_08057DD8:
- strb r0, [r1]
- ldr r2, =gSprites
- ldr r1, =gBankSpriteIds
- ldr r0, =gUnknown_03005D74
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, =sub_8039AD8
- b _08057F9C
- .pool
-_08057E04:
- movs r6, 0x2
- adds r0, r6, 0
- ands r0, r2
- cmp r0, 0
- bne _08057E14
- ldrb r0, [r1]
- cmp r0, 0x3B
- bls _08057E30
-_08057E14:
- movs r0, 0x5
- bl PlaySE
- ldr r2, =0x0000ffff
-_08057E1C:
- movs r0, 0x1
- movs r1, 0xA
- bl EmitCmd33
- bl PlayerBufferExecCompleted
- b _08057F9E
- .pool
-_08057E30:
- movs r0, 0x20
- ands r0, r2
- cmp r0, 0
- beq _08057E60
- ldr r4, =gMoveSelectionCursor
- ldrb r0, [r7]
- adds r2, r0, r4
- ldrb r1, [r2]
- adds r0, r5, 0
- ands r0, r1
- cmp r0, 0
- bne _08057E4A
- b _08057F9E
-_08057E4A:
- ldrb r0, [r2]
- bl battle_menu_cursor_related
- ldrb r1, [r7]
- adds r1, r4
- ldrb r0, [r1]
- movs r2, 0x1
- eors r0, r2
- b _08057F08
- .pool
-_08057E60:
- movs r0, 0x10
- ands r0, r2
- cmp r0, 0
- beq _08057EA4
- ldr r4, =gMoveSelectionCursor
- ldrb r0, [r7]
- adds r3, r0, r4
- ldrb r2, [r3]
- movs r6, 0x1
- adds r0, r5, 0
- ands r0, r2
- cmp r0, 0
- beq _08057E7C
- b _08057F9E
-_08057E7C:
- ldr r1, =gUnknown_03005D78
- adds r0, r6, 0
- eors r0, r2
- ldrb r1, [r1]
- cmp r0, r1
- bcc _08057E8A
- b _08057F9E
-_08057E8A:
- ldrb r0, [r3]
- bl battle_menu_cursor_related
- ldrb r1, [r7]
- adds r1, r4
- ldrb r0, [r1]
- eors r0, r6
- b _08057F08
- .pool
-_08057EA4:
- movs r0, 0x40
- ands r0, r2
- cmp r0, 0
- beq _08057ED4
- ldr r4, =gMoveSelectionCursor
- ldrb r0, [r7]
- adds r2, r0, r4
- ldrb r1, [r2]
- adds r0, r6, 0
- ands r0, r1
- cmp r0, 0
- beq _08057F9E
- ldrb r0, [r2]
- bl battle_menu_cursor_related
- ldrb r1, [r7]
- adds r1, r4
- ldrb r0, [r1]
- movs r2, 0x2
- eors r0, r2
- b _08057F08
- .pool
-_08057ED4:
- movs r0, 0x80
- ands r0, r2
- cmp r0, 0
- beq _08057F30
- ldr r4, =gMoveSelectionCursor
- ldrb r0, [r7]
- adds r3, r0, r4
- ldrb r2, [r3]
- movs r5, 0x2
- adds r0, r6, 0
- ands r0, r2
- cmp r0, 0
- bne _08057F9E
- ldr r1, =gUnknown_03005D78
- adds r0, r5, 0
- eors r0, r2
- ldrb r1, [r1]
- cmp r0, r1
- bcs _08057F9E
- ldrb r0, [r3]
- bl battle_menu_cursor_related
- ldrb r1, [r7]
- adds r1, r4
- ldrb r0, [r1]
- eors r0, r5
-_08057F08:
- strb r0, [r1]
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r7]
- adds r0, r4
- ldrb r0, [r0]
- movs r1, 0
- bl battle_menu_cursor_related_2
- bl sub_8059B3C
- bl sub_8059BB0
- b _08057F9E
- .pool
-_08057F30:
- movs r0, 0x4
- ands r0, r2
- cmp r0, 0
- beq _08057F9E
- ldr r0, =gUnknown_03005D78
- ldrb r0, [r0]
- cmp r0, 0x1
- bls _08057F9E
- ldr r0, =gBattleTypeFlags
- ldr r5, [r0]
- ands r5, r6
- cmp r5, 0
- bne _08057F9E
- ldr r4, =gMoveSelectionCursor
- ldrb r0, [r7]
- adds r0, r4
- ldrb r0, [r0]
- movs r1, 0x1D
- bl battle_menu_cursor_related_2
- ldrb r0, [r7]
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0
- beq _08057F78
- ldr r0, =gUnknown_03005D74
- strb r5, [r0]
- b _08057F80
- .pool
-_08057F78:
- ldr r1, =gUnknown_03005D74
- adds r0, 0x1
- strb r0, [r1]
- adds r0, r1, 0
-_08057F80:
- ldrb r0, [r0]
- movs r1, 0x1B
- bl battle_menu_cursor_related_2
- ldr r0, =gText_BattleSwitchWhich
- movs r1, 0xB
- bl sub_814F9EC
- ldr r1, =gBattleBankFunc
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_8058138
-_08057F9C:
- str r1, [r0]
-_08057F9E:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8057BFC
-
- thumb_func_start sub_8057FBC
-sub_8057FBC: @ 8057FBC
- push {r4-r7,lr}
- movs r7, 0
- ldr r4, =gMain
- ldrh r1, [r4, 0x2E]
- movs r6, 0x1
- adds r0, r6, 0
- ands r0, r1
- cmp r0, 0
- beq _08057FD6
- movs r0, 0x5
- bl PlaySE
- movs r7, 0x1
-_08057FD6:
- ldrh r1, [r4, 0x2E]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08057FF8
- movs r0, 0x5
- bl PlaySE
- ldr r1, =gBattle_BG0_X
- movs r0, 0
- strh r0, [r1]
- ldr r1, =gBattle_BG0_Y
- movs r2, 0xA0
- lsls r2, 1
- adds r0, r2, 0
- strh r0, [r1]
- movs r7, 0xFF
-_08057FF8:
- ldrh r1, [r4, 0x2E]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _08058038
- ldr r5, =gMoveSelectionCursor
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- adds r2, r0, r5
- ldrb r1, [r2]
- adds r0, r6, 0
- ands r0, r1
- cmp r0, 0
- beq _08058038
- ldrb r0, [r2]
- bl battle_menu_cursor_related
- ldrb r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- movs r2, 0x1
- eors r0, r2
- strb r0, [r1]
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- movs r1, 0
- bl battle_menu_cursor_related_2
-_08058038:
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _08058086
- ldr r5, =gMoveSelectionCursor
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- adds r3, r0, r5
- ldrb r2, [r3]
- movs r6, 0x1
- movs r0, 0x1
- ands r0, r2
- cmp r0, 0
- bne _08058086
- ldr r1, =gUnknown_03005D78
- adds r0, r6, 0
- eors r0, r2
- ldrb r1, [r1]
- cmp r0, r1
- bcs _08058086
- ldrb r0, [r3]
- bl battle_menu_cursor_related
- ldrb r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- eors r0, r6
- strb r0, [r1]
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- movs r1, 0
- bl battle_menu_cursor_related_2
-_08058086:
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _080580C8
- ldr r5, =gMoveSelectionCursor
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- adds r2, r0, r5
- ldrb r1, [r2]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080580C8
- ldrb r0, [r2]
- bl battle_menu_cursor_related
- ldrb r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- movs r2, 0x2
- eors r0, r2
- strb r0, [r1]
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- movs r1, 0
- bl battle_menu_cursor_related_2
-_080580C8:
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08058116
- ldr r5, =gMoveSelectionCursor
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- adds r3, r0, r5
- ldrb r2, [r3]
- movs r6, 0x2
- movs r0, 0x2
- ands r0, r2
- cmp r0, 0
- bne _08058116
- ldr r1, =gUnknown_03005D78
- adds r0, r6, 0
- eors r0, r2
- ldrb r1, [r1]
- cmp r0, r1
- bcs _08058116
- ldrb r0, [r3]
- bl battle_menu_cursor_related
- ldrb r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- eors r0, r6
- strb r0, [r1]
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- movs r1, 0
- bl battle_menu_cursor_related_2
-_08058116:
- adds r0, r7, 0
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_8057FBC
-
- thumb_func_start sub_8058138
-sub_8058138: @ 8058138
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x24
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x5
- ands r0, r1
- cmp r0, 0
- bne _08058152
- b _08058500
-_08058152:
- movs r0, 0x5
- bl PlaySE
- ldr r0, =gMoveSelectionCursor
- mov r10, r0
- ldr r1, =gActiveBank
- mov r8, r1
- ldrb r1, [r1]
- adds r2, r1, r0
- ldr r5, =gUnknown_03005D74
- ldrb r0, [r2]
- ldrb r3, [r5]
- cmp r0, r3
- bne _08058170
- b _080584A8
-_08058170:
- lsls r1, 9
- ldr r0, =gBattleBufferA + 4
- adds r1, r0
- mov r9, r1
- ldrb r1, [r2]
- lsls r1, 1
- add r1, r9
- ldrh r6, [r1]
- ldrb r0, [r5]
- lsls r0, 1
- add r0, r9
- ldrh r0, [r0]
- strh r0, [r1]
- ldrb r0, [r5]
- lsls r0, 1
- add r0, r9
- strh r6, [r0]
- mov r1, r8
- ldrb r0, [r1]
- add r0, r10
- ldrb r1, [r0]
- mov r7, r9
- adds r7, 0x8
- adds r1, r7, r1
- ldrb r6, [r1]
- ldrb r0, [r5]
- adds r0, r7, r0
- ldrb r0, [r0]
- strb r0, [r1]
- ldrb r0, [r5]
- adds r0, r7, r0
- strb r6, [r0]
- mov r2, r8
- ldrb r0, [r2]
- add r0, r10
- ldrb r1, [r0]
- mov r2, r9
- adds r2, 0xC
- adds r1, r2, r1
- ldrb r6, [r1]
- ldrb r0, [r5]
- adds r0, r2, r0
- ldrb r0, [r0]
- strb r0, [r1]
- ldrb r0, [r5]
- adds r2, r0
- strb r6, [r2]
- mov r3, r8
- ldrb r1, [r3]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- ldr r2, =gDisableStructs
- adds r6, r0, r2
- ldrb r4, [r6, 0x18]
- lsls r3, r4, 24
- lsrs r2, r3, 28
- ldr r0, =gBitTable
- mov r12, r0
- add r1, r10
- ldrb r0, [r1]
- lsls r0, 2
- add r0, r12
- ldr r0, [r0]
- ands r2, r0
- cmp r2, 0
- beq _0805822A
- lsrs r1, r3, 28
- bics r1, r0
- lsls r1, 4
- movs r2, 0xF
- adds r0, r2, 0
- ands r0, r4
- orrs r0, r1
- strb r0, [r6, 0x18]
- mov r1, r8
- ldrb r0, [r1]
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- ldr r3, =gDisableStructs
- adds r1, r3
- ldrb r4, [r1, 0x18]
- lsrs r3, r4, 4
- ldrb r0, [r5]
- lsls r0, 2
- add r0, r12
- ldr r0, [r0]
- orrs r0, r3
- lsls r0, 4
- ands r2, r4
- orrs r2, r0
- strb r2, [r1, 0x18]
-_0805822A:
- bl sub_8059AAC
- movs r6, 0
- mov r12, r7
- mov r5, sp
- adds r5, 0x18
- str r5, [sp, 0x1C]
- ldr r2, =gBattleMons
- mov r0, r8
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r4, r0, 0
- adds r4, 0x3B
- mov r7, r8
- mov r10, r2
- movs r5, 0x3
-_0805824E:
- mov r1, sp
- adds r3, r1, r6
- ldrb r1, [r4]
- lsls r2, r6, 1
- adds r0, r5, 0
- lsls r0, r2
- ands r1, r0
- asrs r1, r2
- strb r1, [r3]
- adds r6, 0x1
- cmp r6, 0x3
- ble _0805824E
- ldr r1, =gMoveSelectionCursor
- ldrb r0, [r7]
- adds r0, r1
- ldrb r0, [r0]
- add r0, sp
- ldrb r0, [r0]
- ldr r2, [sp, 0x1C]
- strb r0, [r2]
- ldrb r0, [r7]
- adds r0, r1
- ldrb r0, [r0]
- mov r3, sp
- adds r2, r3, r0
- ldr r1, =gUnknown_03005D74
- ldrb r0, [r1]
- add r0, sp
- ldrb r0, [r0]
- movs r3, 0
- strb r0, [r2]
- ldrb r0, [r1]
- mov r5, sp
- adds r1, r5, r0
- ldr r2, [sp, 0x1C]
- ldrb r0, [r2]
- strb r0, [r1]
- strb r3, [r2]
- movs r6, 0
- ldr r2, [sp, 0x1C]
-_0805829E:
- mov r3, sp
- adds r0, r3, r6
- ldrb r1, [r0]
- lsls r0, r6, 1
- lsls r1, r0
- ldrb r0, [r2]
- orrs r0, r1
- strb r0, [r2]
- adds r6, 0x1
- cmp r6, 0x3
- ble _0805829E
- ldrb r1, [r7]
- movs r0, 0x58
- muls r0, r1
- add r0, r10
- adds r0, 0x3B
- ldr r5, [sp, 0x1C]
- ldrb r1, [r5]
- strb r1, [r0]
- movs r6, 0
- adds r4, r7, 0
- movs r3, 0x58
- movs r0, 0x24
- add r0, r10
- mov r8, r0
- mov r2, r9
- mov r7, r10
- adds r7, 0xC
- mov r5, r12
-_080582D8:
- lsls r1, r6, 1
- ldrb r0, [r4]
- muls r0, r3
- adds r1, r0
- adds r1, r7
- ldrh r0, [r2]
- strh r0, [r1]
- ldrb r0, [r4]
- adds r1, r0, 0
- muls r1, r3
- adds r1, r6, r1
- add r1, r8
- adds r0, r5, r6
- ldrb r0, [r0]
- strb r0, [r1]
- adds r2, 0x2
- adds r6, 0x1
- cmp r6, 0x3
- ble _080582D8
- ldr r2, =gActiveBank
- ldrb r1, [r2]
- movs r0, 0x58
- muls r0, r1
- mov r1, r10
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 14
- ands r0, r1
- cmp r0, 0
- beq _0805831A
- b _080584A8
-_0805831A:
- movs r6, 0
- mov r1, sp
- adds r1, 0x4
- str r1, [sp, 0x20]
- add r3, sp, 0xC
- mov r10, r3
- ldr r5, =gBattlePartyID
- mov r9, r5
- mov r8, r2
- movs r7, 0x64
- ldr r5, =gPlayerParty
- adds r4, r1, 0
-_08058332:
- mov r1, r8
- ldrb r0, [r1]
- lsls r0, 1
- add r0, r9
- ldrh r0, [r0]
- muls r0, r7
- adds r0, r5
- adds r1, r6, 0
- adds r1, 0xD
- bl GetMonData
- strh r0, [r4]
- mov r2, r8
- ldrb r0, [r2]
- lsls r0, 1
- add r0, r9
- ldrh r0, [r0]
- muls r0, r7
- adds r0, r5
- adds r1, r6, 0
- adds r1, 0x11
- bl GetMonData
- mov r3, r10
- adds r1, r3, r6
- strb r0, [r1]
- adds r4, 0x2
- adds r6, 0x1
- cmp r6, 0x3
- ble _08058332
- ldr r1, =gBattlePartyID
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x15
- bl GetMonData
- ldr r5, [sp, 0x1C]
- strb r0, [r5]
- movs r6, 0
- movs r5, 0x3
- ldr r4, [sp, 0x1C]
-_08058392:
- mov r0, sp
- adds r3, r0, r6
- lsls r2, r6, 1
- adds r1, r5, 0
- lsls r1, r2
- ldrb r0, [r4]
- ands r0, r1
- asrs r0, r2
- strb r0, [r3]
- adds r6, 0x1
- cmp r6, 0x3
- ble _08058392
- ldr r4, =gMoveSelectionCursor
- ldr r3, =gActiveBank
- ldrb r0, [r3]
- adds r0, r4
- ldrb r1, [r0]
- lsls r1, 1
- ldr r2, [sp, 0x20]
- adds r1, r2, r1
- ldrh r6, [r1]
- ldr r2, =gUnknown_03005D74
- ldrb r0, [r2]
- lsls r0, 1
- ldr r5, [sp, 0x20]
- adds r0, r5, r0
- ldrh r0, [r0]
- movs r5, 0
- strh r0, [r1]
- ldrb r0, [r2]
- lsls r0, 1
- ldr r1, [sp, 0x20]
- adds r0, r1, r0
- strh r6, [r0]
- ldrb r0, [r3]
- adds r0, r4
- ldrb r1, [r0]
- add r1, r10
- ldrb r6, [r1]
- ldrb r0, [r2]
- add r0, r10
- ldrb r0, [r0]
- strb r0, [r1]
- ldrb r0, [r2]
- add r0, r10
- strb r6, [r0]
- ldrb r0, [r3]
- adds r0, r4
- ldrb r0, [r0]
- add r0, sp
- ldrb r0, [r0]
- ldr r1, [sp, 0x1C]
- strb r0, [r1]
- ldrb r0, [r3]
- adds r0, r4
- ldrb r0, [r0]
- mov r3, sp
- adds r1, r3, r0
- ldrb r0, [r2]
- add r0, sp
- ldrb r0, [r0]
- strb r0, [r1]
- ldrb r0, [r2]
- adds r1, r3, r0
- ldr r2, [sp, 0x1C]
- ldrb r0, [r2]
- strb r0, [r1]
- strb r5, [r2]
- movs r6, 0
- ldr r2, [sp, 0x1C]
-_0805841E:
- mov r3, sp
- adds r0, r3, r6
- ldrb r1, [r0]
- lsls r0, r6, 1
- lsls r1, r0
- ldrb r0, [r2]
- orrs r0, r1
- strb r0, [r2]
- adds r6, 0x1
- cmp r6, 0x3
- ble _0805841E
- movs r6, 0
- ldr r5, =gBattlePartyID
- mov r10, r5
- ldr r0, =gActiveBank
- mov r9, r0
- movs r1, 0x64
- mov r8, r1
- ldr r7, =gPlayerParty
- ldr r5, [sp, 0x20]
- adds r5, 0x8
- ldr r4, [sp, 0x20]
-_0805844A:
- mov r2, r9
- ldrb r0, [r2]
- lsls r0, 1
- add r0, r10
- ldrh r0, [r0]
- mov r3, r8
- muls r3, r0
- adds r0, r3, 0
- adds r0, r7
- adds r1, r6, 0
- adds r1, 0xD
- adds r2, r4, 0
- bl SetMonData
- mov r1, r9
- ldrb r0, [r1]
- lsls r0, 1
- add r0, r10
- ldrh r0, [r0]
- mov r2, r8
- muls r2, r0
- adds r0, r2, 0
- adds r0, r7
- adds r1, r6, 0
- adds r1, 0x11
- adds r2, r5, 0
- bl SetMonData
- adds r5, 0x1
- adds r4, 0x2
- adds r6, 0x1
- cmp r6, 0x3
- ble _0805844A
- ldr r1, =gBattlePartyID
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x15
- ldr r2, [sp, 0x1C]
- bl SetMonData
-_080584A8:
- ldr r1, =gBattleBankFunc
- ldr r2, =gActiveBank
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_8057BFC
- str r1, [r0]
- ldr r3, =gMoveSelectionCursor
- ldrb r0, [r2]
- adds r0, r3
- ldr r1, =gUnknown_03005D74
- ldrb r1, [r1]
- strb r1, [r0]
- ldrb r0, [r2]
- adds r0, r3
- ldrb r0, [r0]
- movs r1, 0
- bl battle_menu_cursor_related_2
- b _08058532
- .pool
-_08058500:
- movs r0, 0x6
- ands r0, r1
- cmp r0, 0
- beq _08058554
- movs r0, 0x5
- bl PlaySE
- ldr r0, =gUnknown_03005D74
- ldrb r0, [r0]
- bl battle_menu_cursor_related
- ldr r1, =gMoveSelectionCursor
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- adds r0, r1
- ldrb r0, [r0]
- movs r1, 0
- bl battle_menu_cursor_related_2
- ldr r1, =gBattleBankFunc
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_8057BFC
- str r1, [r0]
-_08058532:
- bl sub_8059B18
- bl sub_8059B3C
- bl sub_8059BB0
- b _080586E8
- .pool
-_08058554:
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _080585A4
- ldr r3, =gUnknown_03005D74
- ldrb r2, [r3]
- movs r0, 0x1
- ands r0, r2
- cmp r0, 0
- bne _0805856A
- b _080586E8
-_0805856A:
- ldr r0, =gMoveSelectionCursor
- ldr r1, =gActiveBank
- ldrb r1, [r1]
- adds r1, r0
- ldrb r5, [r1]
- cmp r2, r5
- bne _08058590
-_08058578:
- ldrb r0, [r1]
- movs r1, 0x1D
- bl battle_menu_cursor_related_2
- b _08058596
- .pool
-_08058590:
- ldrb r0, [r3]
- bl battle_menu_cursor_related
-_08058596:
- ldr r4, =gUnknown_03005D74
- ldrb r0, [r4]
- movs r1, 0x1
- b _0805862C
- .pool
-_080585A4:
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _080585E8
- ldr r3, =gUnknown_03005D74
- ldrb r2, [r3]
- movs r0, 0x1
- ands r0, r2
- cmp r0, 0
- beq _080585BA
- b _080586E8
-_080585BA:
- ldr r1, =gUnknown_03005D78
- movs r0, 0x1
- eors r0, r2
- ldrb r1, [r1]
- cmp r0, r1
- bcc _080585C8
- b _080586E8
-_080585C8:
- ldr r0, =gMoveSelectionCursor
- ldr r1, =gActiveBank
- ldrb r1, [r1]
- adds r1, r0
- ldrb r0, [r1]
- cmp r2, r0
- beq _08058578
- b _08058590
- .pool
-_080585E8:
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0805865C
- ldr r3, =gUnknown_03005D74
- ldrb r2, [r3]
- movs r0, 0x2
- ands r0, r2
- cmp r0, 0
- beq _080586E8
- ldr r0, =gMoveSelectionCursor
- ldr r1, =gActiveBank
- ldrb r1, [r1]
- adds r1, r0
- ldrb r5, [r1]
- cmp r2, r5
- bne _08058620
- ldrb r0, [r1]
- movs r1, 0x1D
- bl battle_menu_cursor_related_2
- b _08058626
- .pool
-_08058620:
- ldrb r0, [r3]
- bl battle_menu_cursor_related
-_08058626:
- ldr r4, =gUnknown_03005D74
- ldrb r0, [r4]
- movs r1, 0x2
-_0805862C:
- eors r0, r1
- strb r0, [r4]
- movs r0, 0x5
- bl PlaySE
- ldr r1, =gMoveSelectionCursor
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r4]
- ldrb r0, [r0]
- cmp r1, r0
- beq _080586CA
- ldrb r0, [r4]
- movs r1, 0x1B
- bl battle_menu_cursor_related_2
- b _080586E8
- .pool
-_0805865C:
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080586E8
- ldr r3, =gUnknown_03005D74
- ldrb r2, [r3]
- movs r0, 0x2
- ands r0, r2
- cmp r0, 0
- bne _080586E8
- ldr r1, =gUnknown_03005D78
- movs r0, 0x2
- eors r0, r2
- ldrb r1, [r1]
- cmp r0, r1
- bcs _080586E8
- ldr r0, =gMoveSelectionCursor
- ldr r1, =gActiveBank
- ldrb r1, [r1]
- adds r1, r0
- ldrb r0, [r1]
- cmp r2, r0
- bne _080586A4
- ldrb r0, [r1]
- movs r1, 0x1D
- bl battle_menu_cursor_related_2
- b _080586AA
- .pool
-_080586A4:
- ldrb r0, [r3]
- bl battle_menu_cursor_related
-_080586AA:
- ldr r4, =gUnknown_03005D74
- ldrb r0, [r4]
- movs r1, 0x2
- eors r0, r1
- strb r0, [r4]
- movs r0, 0x5
- bl PlaySE
- ldr r1, =gMoveSelectionCursor
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r4]
- ldrb r0, [r0]
- cmp r1, r0
- bne _080586E0
-_080586CA:
- adds r0, r1, 0
- movs r1, 0
- bl battle_menu_cursor_related_2
- b _080586E8
- .pool
-_080586E0:
- ldrb r0, [r4]
- movs r1, 0x1B
- bl battle_menu_cursor_related_2
-_080586E8:
- add sp, 0x24
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8058138
-
- thumb_func_start sub_80586F8
-sub_80586F8: @ 80586F8
- push {lr}
- ldr r0, =gLinkVSyncDisabled
- ldrb r0, [r0]
- cmp r0, 0
- bne _0805875C
- ldr r0, =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- bne _08058798
- movs r0, 0x5A
- bl m4aSongNumStop
- ldr r3, =gMain
- ldr r0, =0x00000439
- adds r2, r3, r0
- ldrb r1, [r2]
- movs r0, 0x3
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- ldr r0, =gPreBattleCallback1
- ldr r0, [r0]
- str r0, [r3]
- ldr r0, =sub_8038D64
- bl SetMainCallback2
- ldr r0, =gBattleOutcome
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _08058738
- bl sub_817E3F4
-_08058738:
- bl FreeAllWindowBuffers
- b _08058798
- .pool
-_0805875C:
- bl sub_800A520
- lsls r0, 24
- cmp r0, 0
- beq _08058798
- movs r0, 0x5A
- bl m4aSongNumStop
- ldr r3, =gMain
- ldr r0, =0x00000439
- adds r2, r3, r0
- ldrb r1, [r2]
- movs r0, 0x3
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- ldr r0, =gPreBattleCallback1
- ldr r0, [r0]
- str r0, [r3]
- ldr r0, =sub_8038D64
- bl SetMainCallback2
- ldr r0, =gBattleOutcome
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _08058794
- bl sub_817E3F4
-_08058794:
- bl FreeAllWindowBuffers
-_08058798:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80586F8
-
- thumb_func_start sub_80587B0
-sub_80587B0: @ 80587B0
- push {lr}
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08058832
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08058810
- bl sub_800A520
- lsls r0, 24
- cmp r0, 0
- beq _08058832
- ldr r0, =gLinkVSyncDisabled
- ldrb r0, [r0]
- cmp r0, 0
- bne _080587F0
- bl sub_800AC34
- b _080587F4
- .pool
-_080587F0:
- bl sub_800ADF8
-_080587F4:
- ldr r1, =gBattleBankFunc
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_80586F8
- str r1, [r0]
- b _08058832
- .pool
-_08058810:
- movs r0, 0x5A
- bl m4aSongNumStop
- ldr r2, =gMain
- ldr r0, =0x00000439
- adds r3, r2, r0
- ldrb r1, [r3]
- movs r0, 0x3
- negs r0, r0
- ands r0, r1
- strb r0, [r3]
- ldr r0, =gPreBattleCallback1
- ldr r0, [r0]
- str r0, [r2]
- ldr r0, [r2, 0x8]
- bl SetMainCallback2
-_08058832:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80587B0
-
- thumb_func_start sub_8058844
-sub_8058844: @ 8058844
- push {lr}
- ldr r2, =gSprites
- ldr r1, =gBankSpriteIds
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, [r0]
- ldr r0, =SpriteCallbackDummy
- cmp r1, r0
- bne _08058868
- bl PlayerBufferExecCompleted
-_08058868:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8058844
-
- thumb_func_start sub_805887C
-sub_805887C: @ 805887C
- push {lr}
- ldr r2, =gSprites
- ldr r1, =gBankSpriteIds
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, [r0]
- ldr r0, =SpriteCallbackDummy
- cmp r1, r0
- bne _080588A0
- bl PlayerBufferExecCompleted
-_080588A0:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805887C
-
- thumb_func_start bx_802F7A0
-bx_802F7A0: @ 80588B4
- push {r4-r6,lr}
- ldr r6, =gSprites
- ldr r5, =gBankSpriteIds
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r6, 0
- adds r1, 0x1C
- adds r0, r1
- ldr r1, [r0]
- ldr r0, =SpriteCallbackDummy
- cmp r1, r0
- bne _08058908
- ldr r0, =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- bl nullsub_25
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- bl FreeSpriteOamMatrix
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- bl DestroySprite
- bl PlayerBufferExecCompleted
-_08058908:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end bx_802F7A0
-
- thumb_func_start sub_8058924
-sub_8058924: @ 8058924
- push {r4,lr}
- ldr r4, =gBattleSpritesDataPtr
- ldr r1, [r4]
- ldr r3, =gActiveBank
- ldrb r0, [r3]
- ldr r2, [r1, 0x4]
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r0, [r1, 0x9]
- subs r0, 0x1
- strb r0, [r1, 0x9]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- bne _0805895C
- ldr r0, [r4]
- ldrb r1, [r3]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0
- strb r1, [r0, 0x9]
- bl PlayerBufferExecCompleted
-_0805895C:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8058924
-
- thumb_func_start sub_805896C
-sub_805896C: @ 805896C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- movs r7, 0
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _08058998
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _080589D0
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _080589D0
-_08058998:
- ldr r2, =gSprites
- ldr r1, =gHealthBoxesIds
- ldr r3, =gActiveBank
- ldrb r0, [r3]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, [r0]
- ldr r0, =SpriteCallbackDummy
- mov r10, r3
- cmp r1, r0
- bne _08058A0A
- b _08058A0E
- .pool
-_080589D0:
- ldr r3, =gSprites
- ldr r6, =gHealthBoxesIds
- ldr r2, =gActiveBank
- ldrb r4, [r2]
- adds r0, r4, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r5, r3, 0
- adds r5, 0x1C
- adds r0, r5
- ldr r3, [r0]
- ldr r0, =SpriteCallbackDummy
- mov r10, r2
- cmp r3, r0
- bne _08058A0A
- movs r0, 0x2
- eors r4, r0
- adds r0, r4, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r0, [r0]
- cmp r0, r3
- bne _08058A0A
- movs r7, 0x1
-_08058A0A:
- cmp r7, 0
- beq _08058B08
-_08058A0E:
- ldr r0, =gBattleSpritesDataPtr
- mov r9, r0
- ldr r0, [r0]
- mov r6, r10
- ldrb r2, [r6]
- ldr r3, [r0, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r4, r0, r3
- ldrb r1, [r4, 0x1]
- movs r5, 0x1
- adds r0, r5, 0
- ands r0, r1
- cmp r0, 0
- beq _08058B08
- movs r1, 0x2
- mov r8, r1
- mov r1, r8
- eors r1, r2
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrb r1, [r0, 0x1]
- adds r0, r5, 0
- ands r0, r1
- cmp r0, 0
- beq _08058B08
- ldrb r1, [r4]
- movs r3, 0x7F
- adds r0, r3, 0
- ands r0, r1
- strb r0, [r4]
- mov r2, r9
- ldr r0, [r2]
- ldrb r2, [r6]
- ldr r0, [r0, 0x4]
- lsls r1, r2, 1
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r2, [r1, 0x1]
- movs r4, 0x2
- negs r4, r4
- adds r0, r4, 0
- ands r0, r2
- strb r0, [r1, 0x1]
- mov r0, r9
- ldr r2, [r0]
- ldrb r0, [r6]
- mov r1, r8
- eors r1, r0
- ldr r2, [r2, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- ands r3, r1
- strb r3, [r0]
- mov r1, r9
- ldr r2, [r1]
- ldrb r0, [r6]
- mov r1, r8
- eors r1, r0
- ldr r2, [r2, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x1]
- ands r4, r1
- strb r4, [r0, 0x1]
- ldr r4, =0x000027f9
- adds r0, r4, 0
- bl FreeSpriteTilesByTag
- adds r0, r4, 0
- bl FreeSpritePaletteByTag
- ldr r7, =gBattlePartyID
- ldrb r1, [r6]
- lsls r0, r1, 1
- adds r0, r7
- ldrh r0, [r0]
- movs r5, 0x64
- muls r0, r5
- ldr r4, =gPlayerParty
- adds r0, r4
- bl sub_805E990
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _08058AE4
- ldrb r0, [r6]
- mov r1, r8
- eors r1, r0
- lsls r0, r1, 1
- adds r0, r7
- ldrh r0, [r0]
- muls r0, r5
- adds r0, r4
- bl sub_805E990
-_08058AE4:
- mov r2, r9
- ldr r0, [r2]
- mov r2, r10
- ldrb r1, [r2]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x3
- strb r1, [r0, 0x9]
- ldr r1, =gBattleBankFunc
- mov r2, r10
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_8058924
- str r1, [r0]
-_08058B08:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805896C
-
- thumb_func_start sub_8058B40
-sub_8058B40: @ 8058B40
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- movs r0, 0
- mov r9, r0
- mov r8, r0
- ldr r4, =gBattleSpritesDataPtr
- ldr r0, [r4]
- ldr r7, =gActiveBank
- ldrb r2, [r7]
- ldr r1, [r0, 0x4]
- lsls r3, r2, 1
- adds r0, r3, r2
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r5, 0x88
- adds r0, r5, 0
- ands r0, r1
- cmp r0, 0
- bne _08058B80
- ldr r0, =gBattlePartyID
- adds r0, r3, r0
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, =gPlayerParty
- adds r1, r0
- adds r0, r2, 0
- bl sub_8172EF0
-_08058B80:
- ldr r1, [r4]
- ldrb r0, [r7]
- movs r6, 0x2
- adds r2, r6, 0
- eors r2, r0
- ldr r1, [r1, 0x4]
- lsls r3, r2, 1
- adds r0, r3, r2
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- adds r0, r5, 0
- ands r0, r1
- cmp r0, 0
- bne _08058BB2
- ldr r0, =gBattlePartyID
- adds r0, r3, r0
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, =gPlayerParty
- adds r1, r0
- adds r0, r2, 0
- bl sub_8172EF0
-_08058BB2:
- ldr r0, [r4]
- ldrb r2, [r7]
- ldr r3, [r0, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r4, r0, r3
- ldrb r1, [r4]
- movs r5, 0x8
- adds r0, r5, 0
- ands r0, r1
- cmp r0, 0
- bne _08058C82
- adds r1, r6, 0
- eors r1, r2
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrb r1, [r0]
- adds r0, r5, 0
- ands r0, r1
- cmp r0, 0
- bne _08058C82
- ldrb r1, [r4, 0x1]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08058C68
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _08058C38
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- bne _08058C38
- ldr r4, =gHealthBoxesIds
- ldrb r0, [r7]
- adds r1, r6, 0
- eors r1, r0
- adds r0, r1, r4
- ldrb r0, [r0]
- ldr r2, =gBattlePartyID
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, =gPlayerParty
- adds r1, r2
- movs r2, 0
- bl UpdateHealthboxAttribute
- ldrb r0, [r7]
- eors r0, r6
- bl sub_8076918
- ldrb r0, [r7]
- eors r0, r6
- adds r0, r4
- ldrb r0, [r0]
- bl SetHealthboxSpriteVisible
-_08058C38:
- ldr r5, =gHealthBoxesIds
- ldr r4, =gActiveBank
- ldrb r1, [r4]
- adds r0, r1, r5
- ldrb r0, [r0]
- ldr r2, =gBattlePartyID
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, =gPlayerParty
- adds r1, r2
- movs r2, 0
- bl UpdateHealthboxAttribute
- ldrb r0, [r4]
- bl sub_8076918
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl SetHealthboxSpriteVisible
-_08058C68:
- ldr r0, =gBattleSpritesDataPtr
- ldr r2, [r0]
- ldr r0, =gActiveBank
- ldrb r1, [r0]
- ldr r2, [r2, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x1]
- movs r2, 0x80
- orrs r1, r2
- strb r1, [r0, 0x1]
-_08058C82:
- ldr r5, =gBattleSpritesDataPtr
- ldr r0, [r5]
- ldr r4, =gActiveBank
- ldrb r2, [r4]
- ldr r3, [r0, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r3
- ldrb r1, [r0, 0x1]
- movs r0, 0xC0
- ands r0, r1
- cmp r0, 0x80
- bne _08058D32
- movs r1, 0x2
- eors r1, r2
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrb r1, [r0, 0x1]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _08058D32
- bl IsCryPlayingOrClearCrySongs
- lsls r0, 24
- cmp r0, 0
- bne _08058D32
- ldr r0, [r5]
- ldrb r1, [r4]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x1]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- bne _08058D14
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x42
- ands r0, r1
- cmp r0, 0x42
- bne _08058D08
- ldr r0, =gMPlay_BGM
- bl m4aMPlayContinue
- b _08058D14
- .pool
-_08058D08:
- ldr r0, =gMPlay_BGM
- ldr r1, =0x0000ffff
- movs r2, 0x80
- lsls r2, 1
- bl m4aMPlayVolumeControl
-_08058D14:
- ldr r0, =gBattleSpritesDataPtr
- ldr r2, [r0]
- ldr r0, =gActiveBank
- ldrb r1, [r0]
- ldr r2, [r2, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x1]
- movs r2, 0x20
- orrs r1, r2
- strb r1, [r0, 0x1]
- movs r0, 0x1
- mov r9, r0
-_08058D32:
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _08058D52
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _08058DAC
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08058DAC
-_08058D52:
- ldr r2, =gSprites
- ldr r0, =gUnknown_03005D7C
- ldr r1, =gActiveBank
- ldrb r4, [r1]
- adds r0, r4, r0
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r3, [r0]
- ldr r0, =SpriteCallbackDummy
- cmp r3, r0
- bne _08058E0A
- ldr r0, =gBankSpriteIds
- adds r0, r4, r0
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- cmp r0, r3
- bne _08058E0A
- b _08058E06
- .pool
-_08058DAC:
- ldr r2, =gSprites
- ldr r7, =gUnknown_03005D7C
- ldr r0, =gActiveBank
- ldrb r3, [r0]
- adds r0, r3, r7
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r4, [r0]
- ldr r0, =SpriteCallbackDummy
- cmp r4, r0
- bne _08058E0A
- ldr r6, =gBankSpriteIds
- adds r0, r3, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldr r5, [r0]
- cmp r5, r4
- bne _08058E0A
- movs r0, 0x2
- eors r3, r0
- adds r0, r3, r7
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldr r4, [r0]
- cmp r4, r5
- bne _08058E0A
- adds r0, r3, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- cmp r0, r4
- bne _08058E0A
-_08058E06:
- movs r0, 0x1
- mov r8, r0
-_08058E0A:
- mov r0, r9
- cmp r0, 0
- beq _08058EAA
- mov r0, r8
- cmp r0, 0
- beq _08058EAA
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _08058E48
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- bne _08058E48
- ldr r2, =gUnknown_03005D7C
- ldr r0, =gActiveBank
- ldrb r1, [r0]
- movs r0, 0x2
- eors r0, r1
- adds r0, r2
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSprites
- adds r0, r1
- bl DestroySprite
-_08058E48:
- ldr r1, =gUnknown_03005D7C
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSprites
- adds r0, r1
- bl DestroySprite
- ldr r3, =gBattleSpritesDataPtr
- ldr r0, [r3]
- ldr r2, [r0, 0x8]
- ldrb r1, [r2, 0x9]
- movs r0, 0x2
- negs r0, r0
- ands r0, r1
- strb r0, [r2, 0x9]
- ldr r0, [r3]
- ldrb r2, [r4]
- ldr r0, [r0, 0x4]
- lsls r1, r2, 1
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r2, [r1, 0x1]
- movs r0, 0x21
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0x1]
- ldr r0, [r3]
- ldrb r2, [r4]
- ldr r0, [r0, 0x4]
- lsls r1, r2, 1
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r2, [r1, 0x1]
- movs r0, 0x7F
- ands r0, r2
- strb r0, [r1, 0x1]
- ldr r1, =gBattleBankFunc
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_805896C
- str r1, [r0]
-_08058EAA:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8058B40
-
- thumb_func_start sub_8058EDC
-sub_8058EDC: @ 8058EDC
- push {r4-r6,lr}
- ldr r2, =gSprites
- ldr r0, =gHealthBoxesIds
- ldr r6, =gActiveBank
- ldrb r3, [r6]
- adds r0, r3, r0
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r4, [r0]
- ldr r0, =SpriteCallbackDummy
- cmp r4, r0
- bne _08058F94
- ldr r5, =gBattleSpritesDataPtr
- ldr r0, [r5]
- ldr r1, [r0, 0x4]
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x1]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08058F94
- ldr r0, =gBankSpriteIds
- adds r0, r3, r0
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- cmp r0, r4
- bne _08058F94
- adds r0, r3, 0
- bl sub_805E408
- ldr r0, [r5]
- ldrb r2, [r6]
- ldr r0, [r0, 0x4]
- lsls r1, r2, 1
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r2, [r1]
- movs r0, 0x7F
- ands r0, r2
- strb r0, [r1]
- ldr r0, [r5]
- ldrb r2, [r6]
- ldr r0, [r0, 0x4]
- lsls r1, r2, 1
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r2, [r1, 0x1]
- movs r0, 0x2
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0x1]
- ldr r4, =0x000027f9
- adds r0, r4, 0
- bl FreeSpriteTilesByTag
- adds r0, r4, 0
- bl FreeSpritePaletteByTag
- ldr r0, [r5]
- ldrb r2, [r6]
- ldr r1, [r0]
- lsls r0, r2, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _08058F88
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x6
- bl move_anim_start_t4
-_08058F88:
- ldr r0, =gBattleBankFunc
- ldrb r1, [r6]
- lsls r1, 2
- adds r1, r0
- ldr r0, =sub_8058FC0
- str r0, [r1]
-_08058F94:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8058EDC
-
- thumb_func_start sub_8058FC0
-sub_8058FC0: @ 8058FC0
- push {r4,lr}
- ldr r0, =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r4, =gActiveBank
- ldrb r1, [r4]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _0805900E
- bl IsCryPlayingOrClearCrySongs
- lsls r0, 24
- cmp r0, 0
- bne _0805900E
- ldr r0, =gMPlay_BGM
- ldr r1, =0x0000ffff
- movs r2, 0x80
- lsls r2, 1
- bl m4aMPlayVolumeControl
- ldr r2, =gBattlePartyID
- ldrb r1, [r4]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, =gPlayerParty
- adds r0, r2
- bl sub_805E990
- bl PlayerBufferExecCompleted
-_0805900E:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8058FC0
-
- thumb_func_start sub_805902C
-sub_805902C: @ 805902C
- push {r4-r6,lr}
- ldr r6, =gBattleSpritesDataPtr
- ldr r0, [r6]
- ldr r5, =gActiveBank
- ldrb r2, [r5]
- ldr r1, [r0, 0x4]
- lsls r3, r2, 1
- adds r0, r3, r2
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x88
- ands r0, r1
- cmp r0, 0
- bne _0805905E
- ldr r0, =gBattlePartyID
- adds r0, r3, r0
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, =gPlayerParty
- adds r1, r0
- adds r0, r2, 0
- bl sub_8172EF0
-_0805905E:
- ldr r4, =gSprites
- ldr r0, =gUnknown_03005D7C
- ldrb r2, [r5]
- adds r0, r2, r0
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r3, r0, 2
- adds r0, r4, 0
- adds r0, 0x1C
- adds r0, r3, r0
- ldr r1, [r0]
- ldr r0, =SpriteCallbackDummy
- cmp r1, r0
- bne _080590D2
- ldr r0, [r6]
- ldr r1, [r0, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- bne _080590D2
- adds r0, r3, r4
- bl DestroySprite
- ldr r4, =gHealthBoxesIds
- ldrb r1, [r5]
- adds r0, r1, r4
- ldrb r0, [r0]
- ldr r2, =gBattlePartyID
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, =gPlayerParty
- adds r1, r2
- movs r2, 0
- bl UpdateHealthboxAttribute
- ldrb r0, [r5]
- bl sub_8076918
- ldrb r0, [r5]
- adds r0, r4
- ldrb r0, [r0]
- bl SetHealthboxSpriteVisible
- ldr r1, =gBattleBankFunc
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_8058EDC
- str r1, [r0]
-_080590D2:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805902C
-
- thumb_func_start c3_0802FDF4
-c3_0802FDF4: @ 8059100
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl IsCryPlayingOrClearCrySongs
- lsls r0, 24
- cmp r0, 0
- bne _08059122
- ldr r0, =gMPlay_BGM
- ldr r1, =0x0000ffff
- movs r2, 0x80
- lsls r2, 1
- bl m4aMPlayVolumeControl
- adds r0, r4, 0
- bl DestroyTask
-_08059122:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end c3_0802FDF4
-
- thumb_func_start bx_t1_healthbar_update
-bx_t1_healthbar_update: @ 8059130
- push {r4-r6,lr}
- ldr r5, =gActiveBank
- ldrb r0, [r5]
- ldr r6, =gHealthBoxesIds
- adds r1, r0, r6
- ldrb r1, [r1]
- movs r2, 0
- movs r3, 0
- bl sub_8074AA0
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- ldrb r0, [r5]
- adds r0, r6
- ldrb r0, [r0]
- bl SetHealthboxSpriteVisible
- lsls r4, 16
- asrs r1, r4, 16
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _08059178
- ldrb r0, [r5]
- adds r0, r6
- ldrb r0, [r0]
- movs r2, 0
- bl UpdateHpTextInHealthbox
- b _08059192
- .pool
-_08059178:
- ldr r2, =gBattlePartyID
- ldrb r1, [r5]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, =gPlayerParty
- adds r0, r2
- bl sub_805E990
- bl PlayerBufferExecCompleted
-_08059192:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end bx_t1_healthbar_update
-
- thumb_func_start sub_80591A0
-sub_80591A0: @ 80591A0
- push {lr}
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- bne _080591B2
- bl PlayerBufferExecCompleted
-_080591B2:
- pop {r0}
- bx r0
- thumb_func_end sub_80591A0
-
- thumb_func_start sub_80591B8
-sub_80591B8: @ 80591B8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x10
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- ldr r1, =gTasks
- lsls r0, 2
- add r0, r9
- lsls r0, 3
- adds r0, r1
- mov r8, r0
- ldrb r0, [r0, 0x8]
- mov r10, r0
- mov r1, r8
- ldrb r7, [r1, 0xC]
- str r7, [sp, 0x8]
- ldrh r2, [r1, 0xA]
- str r2, [sp, 0xC]
- bl IsDoubleBattle
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _080591FE
- ldr r1, =gBattlePartyID
- lsls r0, r7, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r10, r0
- bne _080591FE
- b _08059314
-_080591FE:
- movs r0, 0x64
- mov r1, r10
- muls r1, r0
- ldr r0, =gPlayerParty
- adds r6, r1, r0
- adds r0, r6, 0
- movs r1, 0xB
- bl GetMonData
- adds r5, r0, 0
- lsls r5, 16
- lsrs r5, 16
- adds r0, r6, 0
- movs r1, 0x38
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r6, 0
- movs r1, 0x19
- bl GetMonData
- str r0, [sp, 0x4]
- ldr r3, =gExperienceTables
- adds r4, 0x1
- lsls r4, 2
- ldr r2, =gBaseStats
- lsls r1, r5, 3
- subs r1, r5
- lsls r1, 2
- adds r1, r2
- ldrb r2, [r1, 0x13]
- movs r1, 0xCA
- lsls r1, 1
- muls r1, r2
- adds r4, r1
- adds r4, r3
- ldr r2, [r4]
- str r2, [sp]
- ldr r3, [sp, 0xC]
- lsls r1, r3, 16
- asrs r1, 16
- adds r0, r1
- cmp r0, r2
- bcc _080592EC
- adds r0, r6, 0
- movs r1, 0x19
- mov r2, sp
- bl SetMonData
- adds r0, r6, 0
- bl CalculateMonStats
- ldr r2, [sp]
- add r0, sp, 0x4
- ldrh r0, [r0]
- subs r2, r0
- ldr r0, [sp, 0xC]
- subs r2, r0, r2
- ldr r4, =gActiveBank
- ldrb r5, [r4]
- strb r7, [r4]
- lsls r2, 16
- lsrs r2, 16
- movs r0, 0x1
- movs r1, 0xB
- bl EmitCmd33
- strb r5, [r4]
- bl IsDoubleBattle
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080592D4
- ldr r2, =gBattlePartyID
- lsls r0, r7, 1
- adds r0, r2
- mov r1, r10
- ldrh r0, [r0]
- cmp r1, r0
- beq _080592B2
- movs r0, 0x2
- eors r7, r0
- lsls r0, r7, 1
- adds r0, r2
- ldrh r0, [r0]
- cmp r1, r0
- bne _080592D4
-_080592B2:
- ldr r0, =sub_8059544
- b _08059316
- .pool
-_080592D4:
- ldr r0, =gTasks
- mov r2, r9
- lsls r1, r2, 2
- add r1, r9
- lsls r1, 3
- adds r1, r0
- ldr r0, =sub_805965C
- b _08059318
- .pool
-_080592EC:
- str r0, [sp, 0x4]
- add r2, sp, 0x4
- adds r0, r6, 0
- movs r1, 0x19
- bl SetMonData
- ldr r1, =gBattleBankFunc
- ldr r3, [sp, 0x8]
- lsls r0, r3, 2
- adds r0, r1
- ldr r1, =sub_80591A0
- str r1, [r0]
- mov r0, r9
- bl DestroyTask
- b _0805931A
- .pool
-_08059314:
- ldr r0, =sub_8059330
-_08059316:
- mov r1, r8
-_08059318:
- str r0, [r1]
-_0805931A:
- add sp, 0x10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80591B8
-
- thumb_func_start sub_8059330
-sub_8059330: @ 8059330
- push {r4-r6,lr}
- mov r6, r10
- mov r5, r9
- mov r4, r8
- push {r4-r6}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- ldr r1, =gTasks
- lsls r2, r0, 2
- mov r8, r2
- add r8, r0
- mov r0, r8
- lsls r0, 3
- mov r8, r0
- add r8, r1
- mov r2, r8
- ldrb r1, [r2, 0x8]
- movs r0, 0xA
- ldrsh r2, [r2, r0]
- mov r9, r2
- mov r2, r8
- ldrb r2, [r2, 0xC]
- mov r10, r2
- movs r0, 0x64
- adds r6, r1, 0
- muls r6, r0
- ldr r0, =gPlayerParty
- adds r6, r0
- adds r0, r6, 0
- movs r1, 0x38
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r6, 0
- movs r1, 0xB
- bl GetMonData
- adds r5, r0, 0
- lsls r5, 16
- lsrs r5, 16
- adds r0, r6, 0
- movs r1, 0x19
- bl GetMonData
- adds r3, r0, 0
- ldr r6, =gExperienceTables
- lsls r1, r4, 2
- ldr r2, =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, =gHealthBoxesIds
- add r0, r10
- ldrb r1, [r0]
- mov r0, r9
- negs r0, r0
- str r0, [sp]
- mov r0, r10
- bl SetBattleBarStruct
- movs r0, 0x21
- bl PlaySE
- ldr r0, =sub_8059400
- mov r1, r8
- str r0, [r1]
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8059330
-
- thumb_func_start sub_8059400
-sub_8059400: @ 8059400
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r1, =gTasks
- lsls r0, 2
- add r0, r8
- lsls r0, 3
- adds r6, r0, r1
- ldrh r1, [r6, 0x1C]
- movs r2, 0x1C
- ldrsh r0, [r6, r2]
- cmp r0, 0xC
- bgt _08059430
- adds r0, r1, 0x1
- strh r0, [r6, 0x1C]
- b _0805952C
- .pool
-_08059430:
- ldrb r0, [r6, 0x8]
- mov r9, r0
- ldrh r2, [r6, 0xA]
- mov r10, r2
- ldrb r7, [r6, 0xC]
- ldr r5, =gHealthBoxesIds
- adds r5, r7, r5
- ldrb r1, [r5]
- adds r0, r7, 0
- movs r2, 0x1
- movs r3, 0
- bl sub_8074AA0
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- ldrb r0, [r5]
- bl SetHealthboxSpriteVisible
- lsls r4, 16
- asrs r4, 16
- movs r0, 0x1
- negs r0, r0
- cmp r4, r0
- bne _0805952C
- movs r0, 0x21
- bl m4aSongNumStop
- movs r0, 0x64
- mov r1, r9
- muls r1, r0
- ldr r0, =gPlayerParty
- adds r5, r1, r0
- adds r0, r5, 0
- movs r1, 0x38
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r5, 0
- movs r1, 0x19
- bl GetMonData
- str r0, [sp, 0x4]
- adds r0, r5, 0
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- ldr r3, =gExperienceTables
- adds r4, 0x1
- lsls r4, 2
- ldr r2, =gBaseStats
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r1, [r1, 0x13]
- movs r0, 0xCA
- lsls r0, 1
- muls r0, r1
- adds r4, r0
- adds r4, r3
- ldr r1, [r4]
- str r1, [sp]
- mov r2, r10
- lsls r0, r2, 16
- asrs r4, r0, 16
- ldr r0, [sp, 0x4]
- adds r0, r4
- cmp r0, r1
- blt _08059510
- adds r0, r5, 0
- movs r1, 0x19
- mov r2, sp
- bl SetMonData
- adds r0, r5, 0
- bl CalculateMonStats
- ldr r2, [sp]
- add r0, sp, 0x4
- ldrh r0, [r0]
- subs r2, r0
- subs r2, r4, r2
- ldr r4, =gActiveBank
- ldrb r5, [r4]
- strb r7, [r4]
- lsls r2, 16
- lsrs r2, 16
- movs r0, 0x1
- movs r1, 0xB
- bl EmitCmd33
- strb r5, [r4]
- ldr r0, =sub_8059544
- str r0, [r6]
- b _0805952C
- .pool
-_08059510:
- str r0, [sp, 0x4]
- add r2, sp, 0x4
- adds r0, r5, 0
- movs r1, 0x19
- bl SetMonData
- ldr r1, =gBattleBankFunc
- lsls r0, r7, 2
- adds r0, r1
- ldr r1, =sub_80591A0
- str r1, [r0]
- mov r0, r8
- bl DestroyTask
-_0805952C:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8059400
-
- thumb_func_start sub_8059544
-sub_8059544: @ 8059544
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- ldrb r4, [r0, 0xC]
- ldrb r6, [r0, 0x8]
- bl IsDoubleBattle
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08059578
- ldr r1, =gBattlePartyID
- movs r0, 0x2
- adds r2, r4, 0
- eors r2, r0
- lsls r0, r2, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r6, r0
- bne _08059578
- adds r4, r2, 0
-_08059578:
- adds r0, r4, 0
- adds r1, r4, 0
- adds r2, r4, 0
- movs r3, 0
- bl move_anim_start_t4
- ldr r0, =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r0
- ldr r0, =sub_80595A4
- str r0, [r1]
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8059544
-
- thumb_func_start sub_80595A4
-sub_80595A4: @ 80595A4
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r1, =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r2, r0, r1
- ldrb r5, [r2, 0xC]
- ldr r0, =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r1, [r0, 0x4]
- lsls r0, r5, 1
- adds r0, r5
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _08059646
- ldrb r4, [r2, 0x8]
- movs r0, 0x64
- adds r1, r4, 0
- muls r1, r0
- ldr r0, =gPlayerParty
- adds r7, r1, r0
- adds r0, r7, 0
- movs r1, 0x38
- bl GetMonData
- bl IsDoubleBattle
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08059624
- ldr r1, =gBattlePartyID
- movs r0, 0x2
- adds r2, r5, 0
- eors r2, r0
- lsls r0, r2, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r4, r0
- bne _08059624
- ldr r0, =gHealthBoxesIds
- adds r0, r2, r0
- ldrb r0, [r0]
- adds r1, r7, 0
- movs r2, 0
- bl UpdateHealthboxAttribute
- b _08059638
- .pool
-_08059624:
- ldr r0, =gHealthBoxesIds
- adds r0, r5, r0
- ldrb r0, [r0]
- movs r1, 0x64
- muls r1, r4
- ldr r2, =gPlayerParty
- adds r1, r2
- movs r2, 0
- bl UpdateHealthboxAttribute
-_08059638:
- ldr r0, =gTasks
- lsls r1, r6, 2
- adds r1, r6
- lsls r1, 3
- adds r1, r0
- ldr r0, =sub_805965C
- str r0, [r1]
-_08059646:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80595A4
-
- thumb_func_start sub_805965C
-sub_805965C: @ 805965C
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- ldr r0, =gTasks
- lsls r4, r5, 2
- adds r4, r5
- lsls r4, 3
- adds r4, r0
- ldrb r1, [r4, 0x8]
- movs r0, 0x64
- muls r0, r1
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x38
- bl GetMonData
- ldrb r0, [r4, 0xC]
- ldr r1, =gBattleBankFunc
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_80591A0
- str r1, [r0]
- adds r0, r5, 0
- bl DestroyTask
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805965C
-
- thumb_func_start sub_80596A8
-sub_80596A8: @ 80596A8
- push {r4-r6,lr}
- ldr r6, =gSprites
- ldr r5, =gBankSpriteIds
- ldr r4, =gActiveBank
- ldrb r2, [r4]
- adds r0, r2, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- movs r3, 0x22
- ldrsh r1, [r0, r3]
- movs r3, 0x26
- ldrsh r0, [r0, r3]
- adds r1, r0
- cmp r1, 0xA0
- ble _08059724
- ldr r1, =gBattlePartyID
- lsls r0, r2, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- bl nullsub_24
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- ldrb r0, [r0, 0x3]
- lsls r0, 26
- lsrs r0, 27
- bl FreeOamMatrix
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- bl DestroySprite
- ldr r1, =gHealthBoxesIds
- ldrb r0, [r4]
- adds r0, r1
- ldrb r0, [r0]
- bl SetHealthboxSpriteInvisible
- bl PlayerBufferExecCompleted
-_08059724:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80596A8
-
- thumb_func_start sub_8059744
-sub_8059744: @ 8059744
- push {r4-r6,lr}
- ldr r0, =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r6, =gActiveBank
- ldrb r2, [r6]
- ldr r1, [r0, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _08059798
- ldr r5, =gBankSpriteIds
- adds r0, r2, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, =gSprites
- adds r0, r4
- bl FreeSpriteOamMatrix
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl DestroySprite
- ldr r1, =gHealthBoxesIds
- ldrb r0, [r6]
- adds r0, r1
- ldrb r0, [r0]
- bl SetHealthboxSpriteInvisible
- bl PlayerBufferExecCompleted
-_08059798:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8059744
-
- thumb_func_start sub_80597B4
-sub_80597B4: @ 80597B4
- push {lr}
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- bne _080597C6
- bl PlayerBufferExecCompleted
-_080597C6:
- pop {r0}
- bx r0
- thumb_func_end sub_80597B4
-
- thumb_func_start sub_80597CC
-sub_80597CC: @ 80597CC
- push {r4,lr}
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0805980A
- ldr r1, =gBattleBankFunc
- ldr r2, =gActiveBank
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_8059828
- str r1, [r0]
- ldr r3, =gTasks
- ldr r1, =gUnknown_03005D7C
- ldrb r0, [r2]
- adds r0, r1
- ldrb r0, [r0]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r3
- ldrb r4, [r1, 0x8]
- bl DestroyTask
- bl FreeAllWindowBuffers
- adds r0, r4, 0
- bl sub_81B89AC
-_0805980A:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80597CC
-
- thumb_func_start sub_8059828
-sub_8059828: @ 8059828
- push {lr}
- ldr r0, =gMain
- ldr r1, [r0, 0x4]
- ldr r0, =BattleMainCB2
- cmp r1, r0
- bne _08059898
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08059898
- ldr r0, =gUnknown_0203CEE8
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _08059870
- ldr r0, =gUnknown_0203CEE9
- ldrb r1, [r0]
- ldr r2, =gUnknown_0203CF00
- movs r0, 0x1
- bl EmitCmd34
- b _0805987A
- .pool
-_08059870:
- movs r0, 0x1
- movs r1, 0x6
- movs r2, 0
- bl EmitCmd34
-_0805987A:
- ldr r1, =gBattleBufferA
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0x1
- bne _08059894
- bl b_link_standby_message
-_08059894:
- bl PlayerBufferExecCompleted
-_08059898:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8059828
-
- thumb_func_start sub_80598A4
-sub_80598A4: @ 80598A4
- push {lr}
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080598CC
- ldr r1, =gBattleBankFunc
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_80598E0
- str r1, [r0]
- bl nullsub_35
- bl FreeAllWindowBuffers
- bl sub_81AABB0
-_080598CC:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80598A4
-
- thumb_func_start sub_80598E0
-sub_80598E0: @ 80598E0
- push {lr}
- ldr r0, =gMain
- ldr r1, [r0, 0x4]
- ldr r0, =BattleMainCB2
- cmp r1, r0
- bne _08059906
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08059906
- ldr r0, =gScriptItemId
- ldrh r1, [r0]
- movs r0, 0x1
- bl EmitCmd35
- bl PlayerBufferExecCompleted
-_08059906:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80598E0
-
- thumb_func_start bx_wait_t1
-bx_wait_t1: @ 805991C
- push {lr}
- ldr r0, =gDoingBattleAnim
- ldrb r0, [r0]
- cmp r0, 0
- beq _08059942
- ldr r0, =gBattleSpritesDataPtr
- ldr r2, [r0]
- ldr r0, =gActiveBank
- ldrb r1, [r0]
- ldr r2, [r2, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _08059946
-_08059942:
- bl PlayerBufferExecCompleted
-_08059946:
- pop {r0}
- bx r0
- .pool
- thumb_func_end bx_wait_t1
-
- thumb_func_start bx_blink_t1
-bx_blink_t1: @ 8059958
- push {r4,lr}
- ldr r1, =gBankSpriteIds
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- ldr r2, =gSprites
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r4, r0, r2
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- cmp r0, 0x20
- bne _080599A4
- movs r3, 0
- movs r0, 0
- strh r0, [r4, 0x30]
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r1, [r2]
- subs r0, 0x5
- ands r0, r1
- strb r0, [r2]
- ldr r0, =gDoingBattleAnim
- strb r3, [r0]
- bl PlayerBufferExecCompleted
- b _080599CE
- .pool
-_080599A4:
- ldrh r0, [r4, 0x30]
- movs r1, 0x3
- ands r0, r1
- cmp r0, 0
- bne _080599C8
- adds r3, r4, 0
- adds r3, 0x3E
- ldrb r2, [r3]
- lsls r0, r2, 29
- lsrs r0, 31
- movs r1, 0x1
- eors r1, r0
- lsls r1, 2
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
-_080599C8:
- ldrh r0, [r4, 0x30]
- adds r0, 0x1
- strh r0, [r4, 0x30]
-_080599CE:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end bx_blink_t1
-
- thumb_func_start sub_80599D4
-sub_80599D4: @ 80599D4
- push {r4,lr}
- sub sp, 0x4
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08059A02
- ldr r4, =gUnknown_03005D74
- ldrb r0, [r4]
- cmp r0, 0
- beq _08059A02
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- bl BattleDestroyCursorAt
- movs r0, 0
- strb r0, [r4]
- movs r0, 0
- bl BattleCreateCursorAt
-_08059A02:
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08059A2C
- ldr r4, =gUnknown_03005D74
- ldrb r0, [r4]
- cmp r0, 0
- bne _08059A2C
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- bl BattleDestroyCursorAt
- movs r0, 0x1
- strb r0, [r4]
- movs r0, 0x1
- bl BattleCreateCursorAt
-_08059A2C:
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r2, 0x1
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- beq _08059A7A
- str r2, [sp]
- movs r0, 0x18
- movs r1, 0x8
- movs r2, 0x1D
- movs r3, 0xD
- bl sub_8056A3C
- movs r0, 0x5
- bl PlaySE
- ldr r0, =gUnknown_03005D74
- ldrb r0, [r0]
- cmp r0, 0
- beq _08059A6C
- movs r0, 0x1
- movs r1, 0xE
- movs r2, 0
- bl EmitCmd33
- b _08059A76
- .pool
-_08059A6C:
- movs r0, 0x1
- movs r1, 0xD
- movs r2, 0
- bl EmitCmd33
-_08059A76:
- bl PlayerBufferExecCompleted
-_08059A7A:
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08059AA0
- movs r0, 0x1
- str r0, [sp]
- movs r0, 0x18
- movs r1, 0x8
- movs r2, 0x1D
- movs r3, 0xD
- bl sub_8056A3C
- movs r0, 0x5
- bl PlaySE
- bl PlayerBufferExecCompleted
-_08059AA0:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80599D4
-
- thumb_func_start sub_8059AAC
-sub_8059AAC: @ 8059AAC
- push {r4-r7,lr}
- ldr r0, =gActiveBank
- ldrb r1, [r0]
- lsls r1, 9
- ldr r3, =gBattleBufferA + 4
- ldr r2, =gUnknown_03005D78
- movs r0, 0
- strb r0, [r2]
- movs r5, 0
- ldr r7, =gDisplayedStringBattle
- adds r4, r1, r3
- adds r6, r2, 0
-_08059AC4:
- lsls r0, r5, 24
- lsrs r0, 24
- bl battle_menu_cursor_related
- ldrh r1, [r4]
- movs r0, 0xD
- muls r1, r0
- ldr r0, =gMoveNames
- adds r1, r0
- adds r0, r7, 0
- bl StringCopy
- adds r1, r5, 0x3
- lsls r1, 24
- lsrs r1, 24
- adds r0, r7, 0
- bl sub_814F9EC
- ldrh r0, [r4]
- cmp r0, 0
- beq _08059AF4
- ldrb r0, [r6]
- adds r0, 0x1
- strb r0, [r6]
-_08059AF4:
- adds r4, 0x2
- adds r5, 0x1
- cmp r5, 0x3
- ble _08059AC4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8059AAC
-
- thumb_func_start sub_8059B18
-sub_8059B18: @ 8059B18
- push {r4,lr}
- ldr r4, =gDisplayedStringBattle
- ldr r1, =gText_MoveInterfacePP
- adds r0, r4, 0
- bl StringCopy
- adds r0, r4, 0
- movs r1, 0x7
- bl sub_814F9EC
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8059B18
-
- thumb_func_start sub_8059B3C
-sub_8059B3C: @ 8059B3C
- push {r4-r7,lr}
- ldr r5, =gBattleBufferA
- ldr r7, =gActiveBank
- ldrb r0, [r7]
- lsls r0, 9
- adds r1, r5, 0x2
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _08059B98
- bl SetPpNumbersPaletteInMoveSelection
- ldrb r1, [r7]
- lsls r4, r1, 9
- adds r0, r5, 0x4
- adds r4, r0
- ldr r6, =gDisplayedStringBattle
- ldr r5, =gMoveSelectionCursor
- adds r1, r5
- adds r0, r4, 0
- adds r0, 0x8
- ldrb r1, [r1]
- adds r0, r1
- ldrb r1, [r0]
- adds r0, r6, 0
- movs r2, 0x1
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- movs r1, 0xBA
- strb r1, [r0]
- adds r0, 0x1
- ldrb r1, [r7]
- adds r1, r5
- adds r4, 0xC
- ldrb r1, [r1]
- adds r4, r1
- ldrb r1, [r4]
- movs r2, 0x1
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- adds r0, r6, 0
- movs r1, 0x9
- bl sub_814F9EC
-_08059B98:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8059B3C
-
- thumb_func_start sub_8059BB0
-sub_8059BB0: @ 8059BB0
- push {r4-r6,lr}
- ldr r5, =gActiveBank
- ldrb r4, [r5]
- lsls r4, 9
- ldr r0, =gBattleBufferA + 4
- adds r4, r0
- ldr r6, =gDisplayedStringBattle
- ldr r1, =gText_MoveInterfaceType
- adds r0, r6, 0
- bl StringCopy
- movs r1, 0xFC
- strb r1, [r0]
- adds r0, 0x1
- movs r1, 0x6
- strb r1, [r0]
- adds r0, 0x1
- movs r1, 0x1
- strb r1, [r0]
- adds r0, 0x1
- ldr r3, =gBattleMoves
- ldr r2, =gMoveSelectionCursor
- ldrb r1, [r5]
- adds r1, r2
- ldrb r1, [r1]
- lsls r1, 1
- adds r4, r1
- ldrh r2, [r4]
- lsls r1, r2, 1
- adds r1, r2
- lsls r1, 2
- adds r1, r3
- ldrb r2, [r1, 0x2]
- lsls r1, r2, 3
- subs r1, r2
- ldr r2, =gTypeNames
- adds r1, r2
- bl StringCopy
- adds r0, r6, 0
- movs r1, 0xA
- bl sub_814F9EC
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8059BB0
-
- thumb_func_start battle_menu_cursor_related_2
-battle_menu_cursor_related_2: @ 8059C28
- push {lr}
- sub sp, 0x10
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- lsls r1, 24
- lsrs r1, 24
- add r2, sp, 0xC
- adds r0, r1, 0x1
- strh r0, [r2]
- adds r0, r2, 0
- adds r1, 0x2
- strh r1, [r0, 0x2]
- movs r1, 0x1
- adds r0, r3, 0
- ands r0, r1
- lsls r2, r0, 3
- adds r2, r0
- adds r2, 0x1
- movs r0, 0x2
- ands r3, r0
- adds r3, 0x37
- str r1, [sp]
- str r0, [sp, 0x4]
- movs r0, 0x11
- str r0, [sp, 0x8]
- movs r0, 0
- add r1, sp, 0xC
- bl CopyToBgTilemapBufferRect_ChangePalette
- movs r0, 0
- bl CopyBgTilemapBufferToVram
- add sp, 0x10
- pop {r0}
- bx r0
- thumb_func_end battle_menu_cursor_related_2
-
- thumb_func_start battle_menu_cursor_related
-battle_menu_cursor_related: @ 8059C70
- push {lr}
- sub sp, 0x10
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- add r0, sp, 0xC
- ldr r1, =0x00001016
- strh r1, [r0]
- strh r1, [r0, 0x2]
- movs r1, 0x1
- adds r0, r3, 0
- ands r0, r1
- lsls r2, r0, 3
- adds r2, r0
- adds r2, 0x1
- movs r0, 0x2
- ands r3, r0
- adds r3, 0x37
- str r1, [sp]
- str r0, [sp, 0x4]
- movs r0, 0x11
- str r0, [sp, 0x8]
- movs r0, 0
- add r1, sp, 0xC
- bl CopyToBgTilemapBufferRect_ChangePalette
- movs r0, 0
- bl CopyBgTilemapBufferToVram
- add sp, 0x10
- pop {r0}
- bx r0
- .pool
- thumb_func_end battle_menu_cursor_related
-
- thumb_func_start ActionSelectionCreateCursorAt
-ActionSelectionCreateCursorAt: @ 8059CB4
- push {r4,lr}
- sub sp, 0x10
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- add r0, sp, 0xC
- movs r4, 0x1
- strh r4, [r0]
- movs r1, 0x2
- strh r1, [r0, 0x2]
- adds r0, r3, 0
- ands r0, r4
- lsls r2, r0, 3
- subs r2, r0
- adds r2, 0x10
- lsls r2, 24
- lsrs r2, 24
- ands r3, r1
- adds r3, 0x23
- str r4, [sp]
- str r1, [sp, 0x4]
- movs r0, 0x11
- str r0, [sp, 0x8]
- movs r0, 0
- add r1, sp, 0xC
- bl CopyToBgTilemapBufferRect_ChangePalette
- movs r0, 0
- bl CopyBgTilemapBufferToVram
- add sp, 0x10
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end ActionSelectionCreateCursorAt
-
- thumb_func_start ActionSelectionDestroyCursorAt
-ActionSelectionDestroyCursorAt: @ 8059CF8
- push {lr}
- sub sp, 0x10
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- add r0, sp, 0xC
- ldr r1, =0x00001016
- strh r1, [r0]
- strh r1, [r0, 0x2]
- movs r1, 0x1
- adds r0, r3, 0
- ands r0, r1
- lsls r2, r0, 3
- subs r2, r0
- adds r2, 0x10
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0x2
- ands r3, r0
- adds r3, 0x23
- str r1, [sp]
- str r0, [sp, 0x4]
- movs r0, 0x11
- str r0, [sp, 0x8]
- movs r0, 0
- add r1, sp, 0xC
- bl CopyToBgTilemapBufferRect_ChangePalette
- movs r0, 0
- bl CopyBgTilemapBufferToVram
- add sp, 0x10
- pop {r0}
- bx r0
- .pool
- thumb_func_end ActionSelectionDestroyCursorAt
-
- thumb_func_start sub_8059D40
-sub_8059D40: @ 8059D40
- push {lr}
- ldr r0, =ReshowBattleScreenAfterMenu
- bl SetMainCallback2
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8059D40
-
- thumb_func_start sub_8059D50
-sub_8059D50: @ 8059D50
- push {lr}
- ldr r0, =ReshowBattleScreenAfterMenu
- bl SetMainCallback2
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8059D50
-
- thumb_func_start sub_8059D60
-sub_8059D60: @ 8059D60
- push {lr}
- ldr r0, =gBattleSpritesDataPtr
- ldr r2, [r0]
- ldr r0, =gActiveBank
- ldrb r1, [r0]
- ldr r2, [r2, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- bne _08059D82
- bl PlayerBufferExecCompleted
-_08059D82:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8059D60
-
- thumb_func_start bx_8030B2C
-bx_8030B2C: @ 8059D90
- push {lr}
- ldr r0, =gBattleSpritesDataPtr
- ldr r2, [r0]
- ldr r0, =gActiveBank
- ldrb r1, [r0]
- ldr r2, [r2, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- bne _08059DB2
- bl PlayerBufferExecCompleted
-_08059DB2:
- pop {r0}
- bx r0
- .pool
- thumb_func_end bx_8030B2C
-
- thumb_func_start b_link_standby_message
-b_link_standby_message: @ 8059DC0
- push {lr}
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08059DE0
- ldr r0, =gBattle_BG0_X
- movs r1, 0
- strh r1, [r0]
- ldr r0, =gBattle_BG0_Y
- strh r1, [r0]
- ldr r0, =gText_LinkStandby
- movs r1, 0
- bl sub_814F9EC
-_08059DE0:
- pop {r0}
- bx r0
- .pool
- thumb_func_end b_link_standby_message
-
- thumb_func_start dp01t_00_1_getattr
-dp01t_00_1_getattr: @ 8059DF4
- push {r4-r6,lr}
- sub sp, 0x100
- movs r6, 0
- ldr r1, =gBattleBufferA
- ldr r0, =gActiveBank
- ldrb r2, [r0]
- lsls r0, r2, 9
- adds r1, 0x2
- adds r1, r0, r1
- ldrb r0, [r1]
- cmp r0, 0
- bne _08059E2C
- ldr r0, =gBattlePartyID
- lsls r1, r2, 1
- adds r1, r0
- ldrb r0, [r1]
- mov r1, sp
- bl dp01_getattr_by_ch1_for_player_pokemon_
- adds r6, r0, 0
- b _08059E4E
- .pool
-_08059E2C:
- ldrb r4, [r1]
- movs r5, 0
-_08059E30:
- movs r0, 0x1
- ands r0, r4
- cmp r0, 0
- beq _08059E46
- lsls r0, r5, 24
- lsrs r0, 24
- mov r2, sp
- adds r1, r2, r6
- bl dp01_getattr_by_ch1_for_player_pokemon_
- adds r6, r0
-_08059E46:
- lsrs r4, 1
- adds r5, 0x1
- cmp r5, 0x5
- ble _08059E30
-_08059E4E:
- lsls r1, r6, 16
- lsrs r1, 16
- movs r0, 0x1
- mov r2, sp
- bl EmitDataTransfer
- bl PlayerBufferExecCompleted
- add sp, 0x100
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end dp01t_00_1_getattr
-
- thumb_func_start dp01_getattr_by_ch1_for_player_pokemon_
-dp01_getattr_by_ch1_for_player_pokemon_: @ 8059E68
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x90
- adds r7, r1, 0
- lsls r0, 24
- lsrs r5, r0, 24
- movs r6, 0
- ldr r2, =gBattleBufferA
- ldr r3, =gActiveBank
- ldrb r0, [r3]
- lsls r0, 9
- adds r1, r2, 0x1
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x3B
- bls _08059E92
- bl _0805A5FE
-_08059E92:
- lsls r0, 2
- ldr r1, =_08059EA8
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_08059EA8:
- .4byte _08059F98
- .4byte _0805A1BC
- .4byte _0805A1CC
- .4byte _0805A1DC
- .4byte _0805A244
- .4byte _0805A244
- .4byte _0805A244
- .4byte _0805A244
- .4byte _0805A260
- .4byte _0805A29C
- .4byte _0805A29C
- .4byte _0805A29C
- .4byte _0805A29C
- .4byte _0805A5FE
- .4byte _0805A5FE
- .4byte _0805A5FE
- .4byte _0805A5FE
- .4byte _0805A2B8
- .4byte _0805A2C8
- .4byte _0805A2F8
- .4byte _0805A308
- .4byte _0805A318
- .4byte _0805A328
- .4byte _0805A338
- .4byte _0805A348
- .4byte _0805A358
- .4byte _0805A368
- .4byte _0805A378
- .4byte _0805A388
- .4byte _0805A398
- .4byte _0805A3A8
- .4byte _0805A3B8
- .4byte _0805A408
- .4byte _0805A418
- .4byte _0805A428
- .4byte _0805A438
- .4byte _0805A448
- .4byte _0805A458
- .4byte _0805A468
- .4byte _0805A478
- .4byte _0805A488
- .4byte _0805A4BC
- .4byte _0805A4CC
- .4byte _0805A4DC
- .4byte _0805A4EC
- .4byte _0805A4FC
- .4byte _0805A50C
- .4byte _0805A51C
- .4byte _0805A52C
- .4byte _0805A54C
- .4byte _0805A55C
- .4byte _0805A56C
- .4byte _0805A57C
- .4byte _0805A58C
- .4byte _0805A59C
- .4byte _0805A5AC
- .4byte _0805A5BC
- .4byte _0805A5CC
- .4byte _0805A5DC
- .4byte _0805A5EC
-_08059F98:
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, =gPlayerParty
- adds r4, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- mov r1, sp
- strh r0, [r1]
- adds r0, r4, 0
- movs r1, 0xC
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0x2E]
- movs r6, 0
- add r0, sp, 0x24
- mov r9, r0
- movs r1, 0x3B
- add r1, sp
- mov r10, r1
- mov r2, sp
- adds r2, 0x2B
- str r2, [sp, 0x80]
- mov r0, sp
- adds r0, 0x2A
- str r0, [sp, 0x7C]
- mov r1, sp
- adds r1, 0x68
- str r1, [sp, 0x8C]
- adds r2, 0x5
- str r2, [sp, 0x84]
- adds r0, 0x12
- str r0, [sp, 0x88]
- mov r8, r4
- add r4, sp, 0xC
-_08059FE4:
- adds r1, r6, 0
- adds r1, 0xD
- mov r0, r8
- bl GetMonData
- strh r0, [r4]
- adds r1, r6, 0
- adds r1, 0x11
- mov r0, r8
- bl GetMonData
- mov r2, r9
- adds r1, r2, r6
- strb r0, [r1]
- adds r4, 0x2
- adds r6, 0x1
- cmp r6, 0x3
- ble _08059FE4
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, =gPlayerParty
- adds r4, r0
- adds r0, r4, 0
- movs r1, 0x15
- bl GetMonData
- mov r1, r10
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x20
- bl GetMonData
- ldr r2, [sp, 0x80]
- strb r0, [r2]
- adds r0, r4, 0
- movs r1, 0x19
- bl GetMonData
- str r0, [sp, 0x44]
- adds r0, r4, 0
- movs r1, 0x27
- bl GetMonData
- mov r3, sp
- movs r5, 0x1F
- ands r0, r5
- ldrb r2, [r3, 0x14]
- movs r1, 0x20
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r3, 0x14]
- adds r0, r4, 0
- movs r1, 0x28
- bl GetMonData
- mov r3, sp
- movs r6, 0x1F
- ands r0, r6
- lsls r0, 5
- ldrh r2, [r3, 0x14]
- ldr r1, =0xfffffc1f
- ands r1, r2
- orrs r1, r0
- strh r1, [r3, 0x14]
- adds r0, r4, 0
- movs r1, 0x29
- bl GetMonData
- mov r3, sp
- ands r0, r5
- lsls r0, 2
- ldrb r2, [r3, 0x15]
- movs r1, 0x7D
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r3, 0x15]
- adds r0, r4, 0
- movs r1, 0x2A
- bl GetMonData
- movs r1, 0x1F
- ands r1, r0
- lsls r1, 15
- ldr r0, [sp, 0x14]
- ldr r2, =0xfff07fff
- ands r0, r2
- orrs r0, r1
- str r0, [sp, 0x14]
- adds r0, r4, 0
- movs r1, 0x2B
- bl GetMonData
- mov r3, sp
- ands r0, r6
- lsls r0, 4
- ldrh r2, [r3, 0x16]
- ldr r1, =0xfffffe0f
- ands r1, r2
- orrs r1, r0
- strh r1, [r3, 0x16]
- adds r0, r4, 0
- movs r1, 0x2C
- bl GetMonData
- mov r3, sp
- ands r0, r5
- lsls r0, 1
- ldrb r2, [r3, 0x17]
- movs r1, 0x3F
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r3, 0x17]
- adds r0, r4, 0
- movs r1, 0
- bl GetMonData
- str r0, [sp, 0x48]
- adds r0, r4, 0
- movs r1, 0x37
- bl GetMonData
- str r0, [sp, 0x4C]
- adds r0, r4, 0
- movs r1, 0x38
- bl GetMonData
- ldr r1, [sp, 0x7C]
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0x28]
- adds r0, r4, 0
- movs r1, 0x3A
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0x2C]
- adds r0, r4, 0
- movs r1, 0x3B
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0x2]
- adds r0, r4, 0
- movs r1, 0x3C
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0x4]
- adds r0, r4, 0
- movs r1, 0x3D
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0x6]
- adds r0, r4, 0
- movs r1, 0x3E
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0x8]
- adds r0, r4, 0
- movs r1, 0x3F
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0xA]
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- mov r3, sp
- movs r1, 0x1
- ands r0, r1
- lsls r0, 6
- ldrb r2, [r3, 0x17]
- movs r1, 0x41
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r3, 0x17]
- adds r0, r4, 0
- movs r1, 0x2E
- bl GetMonData
- mov r3, sp
- lsls r0, 7
- ldrb r2, [r3, 0x17]
- movs r1, 0x7F
- ands r1, r2
- orrs r1, r0
- strb r1, [r3, 0x17]
- adds r0, r4, 0
- movs r1, 0x1
- bl GetMonData
- str r0, [sp, 0x54]
- adds r0, r4, 0
- movs r1, 0x2
- ldr r2, [sp, 0x8C]
- bl GetMonData
- ldr r0, [sp, 0x84]
- ldr r1, [sp, 0x8C]
- bl StringCopy10
- adds r0, r4, 0
- movs r1, 0x7
- ldr r2, [sp, 0x88]
- bl GetMonData
- mov r2, sp
- movs r6, 0
-_0805A19C:
- adds r0, r7, r6
- adds r1, r2, r6
- ldrb r1, [r1]
- strb r1, [r0]
- adds r6, 0x1
- cmp r6, 0x57
- bls _0805A19C
- b _0805A5FE
- .pool
-_0805A1BC:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- b _0805A536
- .pool
-_0805A1CC:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0xC
- b _0805A536
- .pool
-_0805A1DC:
- movs r6, 0
- add r2, sp, 0x58
- mov r9, r2
- add r0, sp, 0x60
- mov r10, r0
- movs r0, 0x64
- adds r1, r5, 0
- muls r1, r0
- ldr r0, =gPlayerParty
- adds r4, r1, r0
- mov r8, r9
-_0805A1F2:
- adds r1, r6, 0
- adds r1, 0xD
- adds r0, r4, 0
- bl GetMonData
- mov r1, r8
- strh r0, [r1]
- adds r1, r6, 0
- adds r1, 0x11
- adds r0, r4, 0
- bl GetMonData
- mov r2, r10
- adds r1, r2, r6
- strb r0, [r1]
- movs r0, 0x2
- add r8, r0
- adds r6, 0x1
- cmp r6, 0x3
- ble _0805A1F2
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x15
- bl GetMonData
- mov r1, r9
- strb r0, [r1, 0xC]
- mov r2, r9
- movs r6, 0
-_0805A230:
- adds r0, r7, r6
- adds r1, r2, r6
- ldrb r1, [r1]
- strb r1, [r0]
- adds r6, 0x1
- cmp r6, 0xF
- bls _0805A230
- b _0805A5FE
- .pool
-_0805A244:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldrb r1, [r3]
- lsls r1, 9
- adds r2, 0x1
- adds r1, r2
- ldrb r1, [r1]
- adds r1, 0x9
- b _0805A536
- .pool
-_0805A260:
- movs r6, 0
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r2, =gPlayerParty
- mov r8, r2
-_0805A26C:
- adds r1, r6, 0
- adds r1, 0x11
- mov r2, r8
- adds r0, r4, r2
- bl GetMonData
- adds r1, r7, r6
- strb r0, [r1]
- adds r6, 0x1
- cmp r6, 0x3
- ble _0805A26C
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x15
- bl GetMonData
- adds r1, r7, r6
- strb r0, [r1]
- adds r6, 0x1
- b _0805A5FE
- .pool
-_0805A29C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldrb r1, [r3]
- lsls r1, 9
- adds r2, 0x1
- adds r1, r2
- ldrb r1, [r1]
- adds r1, 0x8
- b _0805A5F6
- .pool
-_0805A2B8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x1
- b _0805A2D2
- .pool
-_0805A2C8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x19
-_0805A2D2:
- bl GetMonData
- adds r1, r0, 0
- strb r1, [r7]
- movs r0, 0xFF
- lsls r0, 8
- ands r0, r1
- lsrs r0, 8
- strb r0, [r7, 0x1]
- movs r0, 0xFF
- lsls r0, 16
- ands r0, r1
- lsrs r0, 16
- strb r0, [r7, 0x2]
- movs r6, 0x3
- b _0805A5FE
- .pool
-_0805A2F8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x1A
- b _0805A5F6
- .pool
-_0805A308:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x1B
- b _0805A5F6
- .pool
-_0805A318:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x1C
- b _0805A5F6
- .pool
-_0805A328:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x1D
- b _0805A5F6
- .pool
-_0805A338:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x1E
- b _0805A5F6
- .pool
-_0805A348:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x1F
- b _0805A5F6
- .pool
-_0805A358:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x20
- b _0805A5F6
- .pool
-_0805A368:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x22
- b _0805A5F6
- .pool
-_0805A378:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x23
- b _0805A5F6
- .pool
-_0805A388:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x24
- b _0805A5F6
- .pool
-_0805A398:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x25
- b _0805A5F6
- .pool
-_0805A3A8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x26
- b _0805A5F6
- .pool
-_0805A3B8:
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, =gPlayerParty
- adds r4, r0
- adds r0, r4, 0
- movs r1, 0x27
- bl GetMonData
- strb r0, [r7]
- adds r0, r4, 0
- movs r1, 0x28
- bl GetMonData
- strb r0, [r7, 0x1]
- adds r0, r4, 0
- movs r1, 0x29
- bl GetMonData
- strb r0, [r7, 0x2]
- adds r0, r4, 0
- movs r1, 0x2A
- bl GetMonData
- strb r0, [r7, 0x3]
- adds r0, r4, 0
- movs r1, 0x2B
- bl GetMonData
- strb r0, [r7, 0x4]
- adds r0, r4, 0
- movs r1, 0x2C
- bl GetMonData
- strb r0, [r7, 0x5]
- movs r6, 0x6
- b _0805A5FE
- .pool
-_0805A408:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x27
- b _0805A5F6
- .pool
-_0805A418:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x28
- b _0805A5F6
- .pool
-_0805A428:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x29
- b _0805A5F6
- .pool
-_0805A438:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x2A
- b _0805A5F6
- .pool
-_0805A448:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x2B
- b _0805A5F6
- .pool
-_0805A458:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x2C
- b _0805A5F6
- .pool
-_0805A468:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0
- b _0805A492
- .pool
-_0805A478:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x9
- b _0805A536
- .pool
-_0805A488:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x37
-_0805A492:
- bl GetMonData
- adds r1, r0, 0
- strb r1, [r7]
- movs r0, 0xFF
- lsls r0, 8
- ands r0, r1
- lsrs r0, 8
- strb r0, [r7, 0x1]
- movs r0, 0xFF
- lsls r0, 16
- ands r0, r1
- lsrs r0, 16
- strb r0, [r7, 0x2]
- lsrs r0, r1, 24
- strb r0, [r7, 0x3]
- movs r6, 0x4
- b _0805A5FE
- .pool
-_0805A4BC:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x38
- b _0805A5F6
- .pool
-_0805A4CC:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x39
- b _0805A536
- .pool
-_0805A4DC:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x3A
- b _0805A536
- .pool
-_0805A4EC:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x3B
- b _0805A536
- .pool
-_0805A4FC:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x3C
- b _0805A536
- .pool
-_0805A50C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x3D
- b _0805A536
- .pool
-_0805A51C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x3E
- b _0805A536
- .pool
-_0805A52C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x3F
-_0805A536:
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- strb r0, [r7]
- lsrs r0, 8
- strb r0, [r7, 0x1]
- movs r6, 0x2
- b _0805A5FE
- .pool
-_0805A54C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x16
- b _0805A5F6
- .pool
-_0805A55C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x17
- b _0805A5F6
- .pool
-_0805A56C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x18
- b _0805A5F6
- .pool
-_0805A57C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x21
- b _0805A5F6
- .pool
-_0805A58C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x2F
- b _0805A5F6
- .pool
-_0805A59C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x30
- b _0805A5F6
- .pool
-_0805A5AC:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x32
- b _0805A5F6
- .pool
-_0805A5BC:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x33
- b _0805A5F6
- .pool
-_0805A5CC:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x34
- b _0805A5F6
- .pool
-_0805A5DC:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x35
- b _0805A5F6
- .pool
-_0805A5EC:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x36
-_0805A5F6:
- bl GetMonData
- strb r0, [r7]
- movs r6, 0x1
-_0805A5FE:
- adds r0, r6, 0
- add sp, 0x90
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end dp01_getattr_by_ch1_for_player_pokemon_
-
- thumb_func_start sub_805A614
-sub_805A614: @ 805A614
- push {r4-r7,lr}
- sub sp, 0x58
- ldr r2, =gBattlePartyID
- ldr r5, =gActiveBank
- ldrb r1, [r5]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- adds r4, r2, 0
- muls r4, r0
- ldr r3, =gBattleBufferA
- lsls r1, 9
- adds r0, r3, 0x1
- adds r0, r1, r0
- ldrb r2, [r0]
- ldr r0, =gPlayerParty
- adds r0, r2, r0
- adds r6, r4, r0
- mov r0, sp
- adds r4, r0, r2
- movs r2, 0
- adds r0, r3, 0x2
- adds r1, r0
- adds r7, r5, 0
- mov r12, r3
- ldrb r1, [r1]
- cmp r2, r1
- bcs _0805A66A
- adds r3, r0, 0
-_0805A650:
- adds r1, r4, r2
- adds r0, r6, r2
- ldrb r0, [r0]
- strb r0, [r1]
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- ldrb r0, [r5]
- lsls r0, 9
- adds r0, r3
- ldrb r0, [r0]
- cmp r2, r0
- bcc _0805A650
-_0805A66A:
- ldrb r0, [r7]
- lsls r0, 9
- mov r1, r12
- adds r1, 0x2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x1
- adds r2, r4, 0
- bl EmitDataTransfer
- bl PlayerBufferExecCompleted
- add sp, 0x58
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805A614
-
- thumb_func_start dp01t_02_1_setattr
-dp01t_02_1_setattr: @ 805A69C
- push {r4,r5,lr}
- ldr r1, =gBattleBufferA
- ldr r0, =gActiveBank
- ldrb r2, [r0]
- lsls r0, r2, 9
- adds r1, 0x2
- adds r1, r0, r1
- ldrb r0, [r1]
- cmp r0, 0
- bne _0805A6CC
- ldr r0, =gBattlePartyID
- lsls r1, r2, 1
- adds r1, r0
- ldrb r0, [r1]
- bl dp01_setattr_by_ch1_for_player_pokemon
- b _0805A6EA
- .pool
-_0805A6CC:
- ldrb r4, [r1]
- movs r5, 0
-_0805A6D0:
- movs r0, 0x1
- ands r0, r4
- cmp r0, 0
- beq _0805A6DE
- adds r0, r5, 0
- bl dp01_setattr_by_ch1_for_player_pokemon
-_0805A6DE:
- lsrs r4, 1
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x5
- bls _0805A6D0
-_0805A6EA:
- bl PlayerBufferExecCompleted
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end dp01t_02_1_setattr
-
- thumb_func_start dp01_setattr_by_ch1_for_player_pokemon
-dp01_setattr_by_ch1_for_player_pokemon: @ 805A6F4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x34
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- lsls r0, 9
- ldr r2, =gBattleBufferA + 3
- adds r3, r0, r2
- adds r6, r3, 0
- subs r1, r2, 0x2
- adds r0, r1
- ldrb r0, [r0]
- adds r7, r2, 0
- cmp r0, 0x3B
- bls _0805A720
- bl _0805B0BA
-_0805A720:
- lsls r0, 2
- ldr r1, =_0805A738
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0805A738:
- .4byte _0805A828
- .4byte _0805A9C0
- .4byte _0805A9E0
- .4byte _0805AA00
- .4byte _0805AA58
- .4byte _0805AA58
- .4byte _0805AA58
- .4byte _0805AA58
- .4byte _0805AA80
- .4byte _0805AAE4
- .4byte _0805AAE4
- .4byte _0805AAE4
- .4byte _0805AAE4
- .4byte _0805B0BA
- .4byte _0805B0BA
- .4byte _0805B0BA
- .4byte _0805B0BA
- .4byte _0805AB14
- .4byte _0805AB34
- .4byte _0805AB54
- .4byte _0805AB74
- .4byte _0805AB94
- .4byte _0805ABB4
- .4byte _0805ABD4
- .4byte _0805ABF4
- .4byte _0805AC14
- .4byte _0805AC34
- .4byte _0805AC54
- .4byte _0805AC74
- .4byte _0805AC94
- .4byte _0805ACB4
- .4byte _0805ACD4
- .4byte _0805AD44
- .4byte _0805AD64
- .4byte _0805AD84
- .4byte _0805ADA4
- .4byte _0805ADC4
- .4byte _0805ADE4
- .4byte _0805AE04
- .4byte _0805AE24
- .4byte _0805AE44
- .4byte _0805AE64
- .4byte _0805AE84
- .4byte _0805AEA4
- .4byte _0805AEC4
- .4byte _0805AEE4
- .4byte _0805AF04
- .4byte _0805AF24
- .4byte _0805AF44
- .4byte _0805AF64
- .4byte _0805AF84
- .4byte _0805AFA4
- .4byte _0805AFC4
- .4byte _0805AFE4
- .4byte _0805B004
- .4byte _0805B024
- .4byte _0805B044
- .4byte _0805B064
- .4byte _0805B084
- .4byte _0805B0A4
-_0805A828:
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, =gPlayerParty
- adds r4, r0
- adds r0, r4, 0
- movs r1, 0xB
- adds r2, r6, 0
- bl SetMonData
- adds r2, r6, 0
- adds r2, 0x2E
- adds r0, r4, 0
- movs r1, 0xC
- bl SetMonData
- movs r0, 0
- mov r8, r0
- movs r0, 0x3B
- adds r0, r6
- mov r10, r0
- adds r0, r6, 0
- adds r0, 0x2B
- str r0, [sp, 0x20]
- adds r0, 0x19
- str r0, [sp, 0x28]
- adds r0, 0x4
- str r0, [sp, 0x2C]
- adds r0, 0x4
- str r0, [sp, 0x30]
- subs r0, 0x22
- str r0, [sp, 0x1C]
- subs r0, 0x2
- str r0, [sp, 0x18]
- adds r0, 0x4
- str r0, [sp, 0x24]
- adds r0, r6, 0x2
- str r0, [sp, 0x4]
- adds r0, r6, 0x4
- str r0, [sp, 0x8]
- adds r0, r6, 0x6
- str r0, [sp, 0xC]
- adds r0, 0x2
- str r0, [sp, 0x10]
- adds r0, 0x2
- str r0, [sp, 0x14]
- mov r9, r4
- adds r7, r6, 0
- adds r7, 0x24
- adds r4, r6, 0
- adds r4, 0xC
-_0805A88E:
- mov r1, r8
- adds r1, 0xD
- mov r0, r9
- adds r2, r4, 0
- bl SetMonData
- mov r1, r8
- adds r1, 0x11
- mov r0, r9
- adds r2, r7, 0
- bl SetMonData
- adds r7, 0x1
- adds r4, 0x2
- movs r0, 0x1
- add r8, r0
- mov r0, r8
- cmp r0, 0x3
- ble _0805A88E
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, =gPlayerParty
- adds r4, r0
- adds r0, r4, 0
- movs r1, 0x15
- mov r2, r10
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x20
- ldr r2, [sp, 0x20]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x19
- ldr r2, [sp, 0x28]
- bl SetMonData
- ldrb r0, [r6, 0x14]
- lsls r0, 27
- lsrs r0, 27
- mov r1, sp
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x27
- mov r2, sp
- bl SetMonData
- mov r1, sp
- ldrh r0, [r6, 0x14]
- lsls r0, 22
- lsrs r0, 27
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x28
- mov r2, sp
- bl SetMonData
- mov r1, sp
- ldrb r0, [r6, 0x15]
- lsls r0, 25
- lsrs r0, 27
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x29
- mov r2, sp
- bl SetMonData
- mov r1, sp
- ldr r0, [r6, 0x14]
- lsls r0, 12
- lsrs r0, 27
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x2A
- mov r2, sp
- bl SetMonData
- mov r1, sp
- ldrh r0, [r6, 0x16]
- lsls r0, 23
- lsrs r0, 27
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x2B
- mov r2, sp
- bl SetMonData
- mov r1, sp
- ldrb r0, [r6, 0x17]
- lsls r0, 26
- lsrs r0, 27
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x2C
- mov r2, sp
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0
- ldr r2, [sp, 0x2C]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x37
- ldr r2, [sp, 0x30]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x38
- ldr r2, [sp, 0x1C]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x39
- ldr r2, [sp, 0x18]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x3A
- ldr r2, [sp, 0x24]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x3B
- ldr r2, [sp, 0x4]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x3C
- ldr r2, [sp, 0x8]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x3D
- ldr r2, [sp, 0xC]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x3E
- ldr r2, [sp, 0x10]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x3F
- ldr r2, [sp, 0x14]
- bl SetMonData
- b _0805B0BA
- .pool
-_0805A9C0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0xB
- bl SetMonData
- b _0805B0BA
- .pool
-_0805A9E0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0xC
- bl SetMonData
- b _0805B0BA
- .pool
-_0805AA00:
- movs r0, 0
- mov r8, r0
- movs r0, 0xC
- adds r0, r3
- mov r9, r0
- movs r0, 0x64
- adds r1, r5, 0
- muls r1, r0
- ldr r0, =gPlayerParty
- adds r7, r1, r0
- adds r6, r3, 0
- adds r6, 0x8
- adds r4, r3, 0
-_0805AA1A:
- mov r1, r8
- adds r1, 0xD
- adds r0, r7, 0
- adds r2, r4, 0
- bl SetMonData
- mov r1, r8
- adds r1, 0x11
- adds r0, r7, 0
- adds r2, r6, 0
- bl SetMonData
- adds r6, 0x1
- adds r4, 0x2
- movs r0, 0x1
- add r8, r0
- mov r0, r8
- cmp r0, 0x3
- ble _0805AA1A
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x15
- mov r2, r9
- bl SetMonData
- b _0805B0BA
- .pool
-_0805AA58:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r3, =gBattleBufferA
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r1, r3, 0x1
- adds r1, r2, r1
- ldrb r1, [r1]
- adds r1, 0x9
- b _0805AAFC
- .pool
-_0805AA80:
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, =gPlayerParty
- adds r4, r0
- ldr r5, =gActiveBank
- ldrb r2, [r5]
- lsls r2, 9
- adds r2, r7
- adds r0, r4, 0
- movs r1, 0x11
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x1
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x12
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x2
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x13
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x3
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x14
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x4
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x15
- bl SetMonData
- b _0805B0BA
- .pool
-_0805AAE4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r3, =gBattleBufferA
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r1, r3, 0x1
- adds r1, r2, r1
- ldrb r1, [r1]
- adds r1, 0x8
-_0805AAFC:
- adds r3, 0x3
- adds r2, r3
- bl SetMonData
- b _0805B0BA
- .pool
-_0805AB14:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x1
- bl SetMonData
- b _0805B0BA
- .pool
-_0805AB34:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x19
- bl SetMonData
- b _0805B0BA
- .pool
-_0805AB54:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x1A
- bl SetMonData
- b _0805B0BA
- .pool
-_0805AB74:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x1B
- bl SetMonData
- b _0805B0BA
- .pool
-_0805AB94:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x1C
- bl SetMonData
- b _0805B0BA
- .pool
-_0805ABB4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x1D
- bl SetMonData
- b _0805B0BA
- .pool
-_0805ABD4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x1E
- bl SetMonData
- b _0805B0BA
- .pool
-_0805ABF4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x1F
- bl SetMonData
- b _0805B0BA
- .pool
-_0805AC14:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x20
- bl SetMonData
- b _0805B0BA
- .pool
-_0805AC34:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x22
- bl SetMonData
- b _0805B0BA
- .pool
-_0805AC54:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x23
- bl SetMonData
- b _0805B0BA
- .pool
-_0805AC74:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x24
- bl SetMonData
- b _0805B0BA
- .pool
-_0805AC94:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x25
- bl SetMonData
- b _0805B0BA
- .pool
-_0805ACB4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x26
- bl SetMonData
- b _0805B0BA
- .pool
-_0805ACD4:
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, =gPlayerParty
- adds r4, r0
- ldr r5, =gActiveBank
- ldrb r2, [r5]
- lsls r2, 9
- adds r2, r7
- adds r0, r4, 0
- movs r1, 0x27
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x1
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x28
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x2
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x29
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x3
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x2A
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x4
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x2B
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x5
- adds r2, r0
- adds r0, r4, 0
- b _0805ADF4
- .pool
-_0805AD44:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x27
- bl SetMonData
- b _0805B0BA
- .pool
-_0805AD64:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x28
- bl SetMonData
- b _0805B0BA
- .pool
-_0805AD84:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x29
- bl SetMonData
- b _0805B0BA
- .pool
-_0805ADA4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x2A
- bl SetMonData
- b _0805B0BA
- .pool
-_0805ADC4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x2B
- bl SetMonData
- b _0805B0BA
- .pool
-_0805ADE4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
-_0805ADF4:
- movs r1, 0x2C
- bl SetMonData
- b _0805B0BA
- .pool
-_0805AE04:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0
- bl SetMonData
- b _0805B0BA
- .pool
-_0805AE24:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x9
- bl SetMonData
- b _0805B0BA
- .pool
-_0805AE44:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x37
- bl SetMonData
- b _0805B0BA
- .pool
-_0805AE64:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x38
- bl SetMonData
- b _0805B0BA
- .pool
-_0805AE84:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x39
- bl SetMonData
- b _0805B0BA
- .pool
-_0805AEA4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x3A
- bl SetMonData
- b _0805B0BA
- .pool
-_0805AEC4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x3B
- bl SetMonData
- b _0805B0BA
- .pool
-_0805AEE4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x3C
- bl SetMonData
- b _0805B0BA
- .pool
-_0805AF04:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x3D
- bl SetMonData
- b _0805B0BA
- .pool
-_0805AF24:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x3E
- bl SetMonData
- b _0805B0BA
- .pool
-_0805AF44:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x3F
- bl SetMonData
- b _0805B0BA
- .pool
-_0805AF64:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x16
- bl SetMonData
- b _0805B0BA
- .pool
-_0805AF84:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x17
- bl SetMonData
- b _0805B0BA
- .pool
-_0805AFA4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x18
- bl SetMonData
- b _0805B0BA
- .pool
-_0805AFC4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x21
- bl SetMonData
- b _0805B0BA
- .pool
-_0805AFE4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x2F
- bl SetMonData
- b _0805B0BA
- .pool
-_0805B004:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x30
- bl SetMonData
- b _0805B0BA
- .pool
-_0805B024:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x32
- bl SetMonData
- b _0805B0BA
- .pool
-_0805B044:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x33
- bl SetMonData
- b _0805B0BA
- .pool
-_0805B064:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x34
- bl SetMonData
- b _0805B0BA
- .pool
-_0805B084:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x35
- bl SetMonData
- b _0805B0BA
- .pool
-_0805B0A4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x36
- bl SetMonData
-_0805B0BA:
- ldr r2, =gBattlePartyID
- ldr r0, =gActiveBank
- ldrb r1, [r0]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, =gPlayerParty
- adds r0, r2
- bl sub_805E990
- add sp, 0x34
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end dp01_setattr_by_ch1_for_player_pokemon
-
- thumb_func_start sub_805B0F0
-sub_805B0F0: @ 805B0F0
- push {r4-r7,lr}
- ldr r1, =gBattlePartyID
- ldr r7, =gActiveBank
- ldrb r2, [r7]
- lsls r0, r2, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- adds r3, r1, 0
- muls r3, r0
- ldr r4, =gBattleBufferA
- lsls r2, 9
- adds r0, r4, 0x1
- adds r0, r2, r0
- ldrb r0, [r0]
- ldr r1, =gPlayerParty
- adds r0, r1
- adds r5, r3, r0
- movs r3, 0
- adds r0, r4, 0x2
- adds r2, r0
- ldrb r2, [r2]
- cmp r3, r2
- bcs _0805B148
- adds r6, r4, 0
- adds r2, r7, 0
- adds r4, r0, 0
-_0805B126:
- adds r1, r5, r3
- ldrb r0, [r2]
- lsls r0, 9
- adds r0, 0x3
- adds r0, r3, r0
- adds r0, r6
- ldrb r0, [r0]
- strb r0, [r1]
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- ldrb r0, [r2]
- lsls r0, 9
- adds r0, r4
- ldrb r0, [r0]
- cmp r3, r0
- bcc _0805B126
-_0805B148:
- bl PlayerBufferExecCompleted
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805B0F0
-
- thumb_func_start sub_805B164
-sub_805B164: @ 805B164
- push {r4,lr}
- ldr r2, =gBattlePartyID
- ldr r4, =gActiveBank
- ldrb r1, [r4]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, =gPlayerParty
- adds r0, r2
- bl BattleLoadPlayerMonSpriteGfx
- ldr r2, =gSprites
- ldr r0, =gBankSpriteIds
- ldrb r3, [r4]
- adds r0, r3, r0
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- lsls r3, 4
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r3
- strb r0, [r1, 0x5]
- ldr r1, =gBattleBankFunc
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, =bx_0802E404
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805B164
-
- thumb_func_start sub_805B1CC
-sub_805B1CC: @ 805B1CC
- push {r4-r6,lr}
- ldr r5, =gActiveBank
- ldrb r0, [r5]
- ldr r4, =gBattleBufferA
- lsls r1, r0, 9
- adds r6, r4, 0x2
- adds r1, r6
- ldrb r1, [r1]
- bl sub_805EF84
- ldr r2, =gBattlePartyID
- ldrb r0, [r5]
- lsls r1, r0, 1
- adds r1, r2
- lsls r0, 9
- adds r4, 0x1
- adds r0, r4
- ldrb r0, [r0]
- movs r4, 0
- strh r0, [r1]
- ldrb r1, [r5]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, =gPlayerParty
- adds r0, r2
- bl BattleLoadPlayerMonSpriteGfx
- ldr r1, =gActionSelectionCursor
- ldrb r0, [r5]
- adds r0, r1
- strb r4, [r0]
- ldr r1, =gMoveSelectionCursor
- ldrb r0, [r5]
- adds r0, r1
- strb r4, [r0]
- ldrb r0, [r5]
- lsls r1, r0, 9
- adds r1, r6
- ldrb r1, [r1]
- bl sub_805B258
- ldr r1, =gBattleBankFunc
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_805902C
- str r1, [r0]
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805B1CC
-
- thumb_func_start sub_805B258
-sub_805B258: @ 805B258
- push {r4-r6,lr}
- mov r6, r10
- mov r5, r9
- mov r4, r8
- push {r4-r6}
- adds r6, r0, 0
- lsls r6, 24
- lsrs r6, 24
- lsls r1, 24
- lsrs r1, 24
- adds r0, r6, 0
- bl sub_805EF84
- ldr r0, =gBattlePartyID
- lsls r2, r6, 1
- adds r2, r0
- ldr r0, =gBattleBufferA
- lsls r1, r6, 9
- adds r0, 0x1
- adds r1, r0
- ldrb r0, [r1]
- strh r0, [r2]
- ldrh r1, [r2]
- movs r0, 0x64
- muls r0, r1
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- mov r8, r0
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- ldr r0, =sub_805D714
- bl CreateInvisibleSpriteWithCallback
- ldr r1, =gUnknown_03005D7C
- mov r9, r1
- add r9, r6
- mov r1, r9
- strb r0, [r1]
- adds r0, r6, 0
- bl GetBankIdentity
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- mov r0, r8
- bl sub_806A068
- ldr r0, =gUnknown_0202499C
- mov r10, r0
- adds r0, r6, 0
- movs r1, 0x2
- bl sub_80A5C6C
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- adds r0, r6, 0
- bl sub_80A6138
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r6, 0
- bl sub_80A82E4
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- mov r0, r10
- adds r1, r5, 0
- adds r2, r4, 0
- bl CreateSprite
- ldr r4, =gBankSpriteIds
- adds r4, r6, r4
- strb r0, [r4]
- ldr r5, =gSprites
- mov r0, r9
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldrb r1, [r4]
- strh r1, [r0, 0x30]
- mov r0, r9
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r6, [r0, 0x32]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r6, [r0, 0x2E]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- mov r1, r8
- strh r1, [r0, 0x32]
- ldrb r0, [r4]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- lsls r3, r6, 4
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r3
- strb r0, [r1, 0x5]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, =gBattleMonForms
- adds r6, r1
- ldrb r1, [r6]
- bl StartSpriteAnim
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r5, 0
- adds r1, 0x1C
- adds r0, r1
- ldr r1, =SpriteCallbackDummy
- str r1, [r0]
- movs r0, 0
- movs r1, 0xFF
- bl sub_80753E8
- mov r1, r9
- ldrb r2, [r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r5
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r1, 0x2E]
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805B258
-
- thumb_func_start sub_805B3D4
-sub_805B3D4: @ 805B3D4
- push {r4-r6,lr}
- ldr r1, =gBattleBufferA
- ldr r6, =gActiveBank
- ldrb r2, [r6]
- lsls r0, r2, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r3, [r0]
- cmp r3, 0
- bne _0805B41C
- ldr r0, =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r1, [r0, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- strb r3, [r0, 0x4]
- ldr r1, =gBattleBankFunc
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_805B464
- str r1, [r0]
- b _0805B452
- .pool
-_0805B41C:
- ldr r5, =gBankSpriteIds
- adds r0, r2, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, =gSprites
- adds r0, r4
- bl FreeSpriteOamMatrix
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl DestroySprite
- ldr r1, =gHealthBoxesIds
- ldrb r0, [r6]
- adds r0, r1
- ldrb r0, [r0]
- bl SetHealthboxSpriteInvisible
- bl PlayerBufferExecCompleted
-_0805B452:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805B3D4
-
- thumb_func_start sub_805B464
-sub_805B464: @ 805B464
- push {r4-r6,lr}
- ldr r6, =gBattleSpritesDataPtr
- ldr r4, [r6]
- ldr r5, =gActiveBank
- ldrb r2, [r5]
- ldr r1, [r4, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r3, r0, r1
- ldrb r0, [r3, 0x4]
- cmp r0, 0
- beq _0805B48C
- cmp r0, 0x1
- beq _0805B4BA
- b _0805B4E2
- .pool
-_0805B48C:
- ldr r1, [r4]
- lsls r0, r2, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0805B4A6
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x5
- bl move_anim_start_t4
-_0805B4A6:
- ldr r0, [r6]
- ldrb r1, [r5]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x1
- strb r1, [r0, 0x4]
- b _0805B4E2
-_0805B4BA:
- ldrb r1, [r3]
- movs r0, 0x40
- ands r0, r1
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _0805B4E2
- strb r0, [r3, 0x4]
- ldrb r2, [r5]
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x1
- bl move_anim_start_t4
- ldr r1, =gBattleBankFunc
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_8059744
- str r1, [r0]
-_0805B4E2:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805B464
-
- thumb_func_start sub_805B4F0
-sub_805B4F0: @ 805B4F0
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0805B5B4
- bl GetMultiplayerId
- ldr r5, =gLinkPlayers
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r5
- movs r4, 0xFF
- ldrb r0, [r1]
- cmp r0, 0x4
- beq _0805B538
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r5
- ldrh r1, [r1]
- adds r0, r4, 0
- ands r0, r1
- cmp r0, 0x5
- bne _0805B558
-_0805B538:
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r5
- ldrb r0, [r1, 0x13]
- adds r4, r0, 0x2
- b _0805B5BA
- .pool
-_0805B558:
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r5
- ldrh r1, [r1]
- adds r0, r4, 0
- ands r0, r1
- cmp r0, 0x2
- beq _0805B58A
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r5
- ldrh r0, [r1]
- ands r4, r0
- cmp r4, 0x1
- bne _0805B5A0
-_0805B58A:
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r5
- ldrb r0, [r1, 0x13]
- adds r4, r0, 0x4
- b _0805B5BA
-_0805B5A0:
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r5
- ldrb r4, [r1, 0x13]
- b _0805B5BA
-_0805B5B4:
- ldr r0, =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r4, [r0, 0x8]
-_0805B5BA:
- ldr r0, =gBattleTypeFlags
- ldr r1, [r0]
- movs r2, 0x40
- ands r1, r2
- adds r5, r0, 0
- cmp r1, 0
- beq _0805B63C
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- bl GetBankIdentity
- movs r1, 0x2
- ands r1, r0
- movs r0, 0x20
- mov r9, r0
- cmp r1, 0
- beq _0805B5E0
- movs r1, 0x5A
- mov r9, r1
-_0805B5E0:
- ldr r0, [r5]
- movs r1, 0x80
- lsls r1, 15
- ands r0, r1
- cmp r0, 0
- beq _0805B618
- ldr r0, =gPartnerTrainerId
- ldrh r1, [r0]
- ldr r0, =0x00000c03
- cmp r1, r0
- beq _0805B618
- movs r0, 0x5A
- mov r9, r0
- ldr r1, =gTrainerFrontPicCoords
- b _0805B642
- .pool
-_0805B618:
- ldr r1, =gTrainerBackPicCoords
- lsls r0, r4, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x8
- subs r0, r1
- lsls r0, 18
- movs r1, 0xA0
- lsls r1, 15
- adds r0, r1
- lsrs r7, r0, 16
- ldr r5, =gBattleTypeFlags
- b _0805B656
- .pool
-_0805B63C:
- movs r0, 0x50
- mov r9, r0
- ldr r1, =gTrainerBackPicCoords
-_0805B642:
- lsls r0, r4, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x8
- subs r0, r1
- lsls r0, 18
- movs r1, 0xA0
- lsls r1, 15
- adds r0, r1
- lsrs r7, r0, 16
-_0805B656:
- ldr r0, [r5]
- movs r1, 0x80
- lsls r1, 15
- ands r0, r1
- cmp r0, 0
- bne _0805B664
- b _0805B794
-_0805B664:
- ldr r0, =gPartnerTrainerId
- ldrh r1, [r0]
- ldr r0, =0x00000c03
- cmp r1, r0
- bne _0805B670
- b _0805B794
-_0805B670:
- ldr r0, =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- bl sub_806F000
- lsls r0, 16
- lsrs r4, r0, 16
- adds r5, r4, 0
- ldr r6, =gActiveBank
- ldrb r1, [r6]
- adds r0, r5, 0
- bl sub_805DF38
- ldrb r0, [r6]
- bl GetBankIdentity
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- bl sub_806A1C0
- ldr r0, =gUnknown_0202499C
- mov r8, r0
- lsls r4, r7, 16
- asrs r4, 16
- ldrb r0, [r6]
- bl sub_80A82E4
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- mov r0, r8
- mov r1, r9
- adds r2, r4, 0
- bl CreateSprite
- ldr r4, =gBankSpriteIds
- ldrb r1, [r6]
- adds r1, r4
- strb r0, [r1]
- ldr r0, =gTrainerFrontPicPaletteTable
- lsls r5, 3
- adds r5, r0
- ldrh r0, [r5, 0x4]
- bl IndexOfSpritePaletteTag
- ldr r5, =gSprites
- ldrb r1, [r6]
- adds r1, r4
- ldrb r1, [r1]
- lsls r2, r1, 4
- adds r2, r1
- lsls r2, 2
- adds r2, r5
- lsls r0, 4
- ldrb r3, [r2, 0x5]
- movs r1, 0xF
- ands r1, r3
- orrs r1, r0
- strb r1, [r2, 0x5]
- ldrb r0, [r6]
- adds r0, r4
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r1, 0xF0
- strh r1, [r0, 0x24]
- ldrb r0, [r6]
- adds r0, r4
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r1, 0x30
- strh r1, [r0, 0x26]
- ldrb r0, [r6]
- adds r0, r4
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, =0x0000fffe
- strh r1, [r0, 0x2E]
- ldrb r0, [r6]
- adds r0, r4
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r5, 0
- adds r1, 0x1C
- adds r0, r1
- ldr r1, =sub_805D7AC
- str r1, [r0]
- ldrb r0, [r6]
- adds r0, r4
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- ldrb r2, [r1, 0x1]
- movs r0, 0x4
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0x1]
- ldrb r0, [r6]
- adds r0, r4
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r2, 0x1
- orrs r1, r2
- strb r1, [r0]
- b _0805B82A
- .pool
-_0805B794:
- ldr r5, =gActiveBank
- ldrb r1, [r5]
- adds r0, r4, 0
- bl LoadBackTrainerBankSpriteGfx
- ldrb r0, [r5]
- bl GetBankIdentity
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl sub_806A12C
- ldr r6, =gUnknown_0202499C
- mov r8, r9
- lsls r4, r7, 16
- asrs r4, 16
- ldrb r0, [r5]
- bl sub_80A82E4
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- adds r0, r6, 0
- mov r1, r8
- adds r2, r4, 0
- bl CreateSprite
- ldr r6, =gBankSpriteIds
- ldrb r1, [r5]
- adds r1, r6
- strb r0, [r1]
- ldr r4, =gSprites
- ldrb r3, [r5]
- adds r0, r3, r6
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- lsls r3, 4
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r3
- strb r0, [r1, 0x5]
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0xF0
- strh r1, [r0, 0x24]
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldr r1, =0x0000fffe
- strh r1, [r0, 0x2E]
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r4, 0x1C
- adds r0, r4
- ldr r1, =sub_805D7AC
- str r1, [r0]
-_0805B82A:
- ldr r1, =gBattleBankFunc
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_8058844
- str r1, [r0]
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805B4F0
-
- thumb_func_start dp01t_08_1_8032428
-dp01t_08_1_8032428: @ 805B864
- push {r4-r6,lr}
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0805B920
- bl GetMultiplayerId
- ldr r5, =gLinkPlayers
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r5
- movs r4, 0xFF
- ldrb r0, [r1]
- cmp r0, 0x4
- beq _0805B8A6
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r5
- ldrh r1, [r1]
- adds r0, r4, 0
- ands r0, r1
- cmp r0, 0x5
- bne _0805B8C4
-_0805B8A6:
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r5
- ldrb r0, [r1, 0x13]
- adds r4, r0, 0x2
- b _0805B926
- .pool
-_0805B8C4:
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r5
- ldrh r1, [r1]
- adds r0, r4, 0
- ands r0, r1
- cmp r0, 0x2
- beq _0805B8F6
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r5
- ldrh r0, [r1]
- ands r4, r0
- cmp r4, 0x1
- bne _0805B90C
-_0805B8F6:
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r5
- ldrb r0, [r1, 0x13]
- adds r4, r0, 0x4
- b _0805B926
-_0805B90C:
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r5
- ldrb r4, [r1, 0x13]
- b _0805B926
-_0805B920:
- ldr r0, =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r4, [r0, 0x8]
-_0805B926:
- ldr r5, =gActiveBank
- ldrb r1, [r5]
- adds r0, r4, 0
- bl LoadBackTrainerBankSpriteGfx
- ldrb r0, [r5]
- bl GetBankIdentity
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl sub_806A12C
- ldr r0, =gUnknown_0202499C
- ldr r1, =gTrainerBackPicCoords
- lsls r4, 2
- adds r4, r1
- ldrb r1, [r4]
- movs r2, 0x8
- subs r2, r1
- lsls r2, 18
- movs r1, 0xA0
- lsls r1, 15
- adds r2, r1
- asrs r2, 16
- movs r1, 0x50
- movs r3, 0x1E
- bl CreateSprite
- ldr r6, =gBankSpriteIds
- ldrb r1, [r5]
- adds r1, r6
- strb r0, [r1]
- ldr r4, =gSprites
- ldrb r3, [r5]
- adds r0, r3, r6
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- lsls r3, 4
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r3
- strb r0, [r1, 0x5]
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldr r1, =0x0000ffa0
- strh r1, [r0, 0x24]
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0x2
- strh r1, [r0, 0x2E]
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r4, 0x1C
- adds r0, r4
- ldr r1, =sub_805D7AC
- str r1, [r0]
- ldr r1, =gBattleBankFunc
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_805887C
- str r1, [r0]
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end dp01t_08_1_8032428
-
- thumb_func_start sub_805B9F8
-sub_805B9F8: @ 805B9F8
- push {r4-r6,lr}
- ldr r5, =gBankSpriteIds
- ldr r6, =gActiveBank
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, =gSprites
- adds r0, r4
- bl oamt_add_pos2_onto_pos1
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0x32
- strh r1, [r0, 0x2E]
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldr r1, =0x0000ffd8
- strh r1, [r0, 0x32]
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrh r1, [r0, 0x22]
- strh r1, [r0, 0x36]
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r4, 0
- adds r1, 0x1C
- adds r0, r1
- ldr r1, =sub_80A6EEC
- str r1, [r0]
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldr r1, =SpriteCallbackDummy
- bl StoreSpriteCallbackInData6
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0x1
- bl StartSpriteAnim
- ldr r1, =gBattleBankFunc
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r1
- ldr r1, =bx_802F7A0
- str r1, [r0]
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805B9F8
-
- thumb_func_start sub_805BAB8
-sub_805BAB8: @ 805BAB8
- push {r4-r6,lr}
- ldr r6, =gBattleSpritesDataPtr
- ldr r4, [r6]
- ldr r5, =gActiveBank
- ldrb r2, [r5]
- ldr r0, [r4, 0x4]
- lsls r1, r2, 1
- adds r1, r2
- lsls r1, 2
- adds r3, r1, r0
- ldrb r0, [r3, 0x4]
- cmp r0, 0
- bne _0805BB0C
- ldr r1, [r4]
- lsls r0, r2, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0805BAEC
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x5
- bl move_anim_start_t4
-_0805BAEC:
- ldr r0, [r6]
- ldrb r1, [r5]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x4]
- adds r1, 0x1
- strb r1, [r0, 0x4]
- b _0805BB82
- .pool
-_0805BB0C:
- ldrb r1, [r3]
- movs r0, 0x40
- ands r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _0805BB82
- strb r4, [r3, 0x4]
- ldr r2, =gBattlePartyID
- ldrb r1, [r5]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, =gPlayerParty
- adds r0, r2
- bl sub_805E990
- movs r1, 0x40
- negs r1, r1
- movs r0, 0x10
- bl PlaySE12WithPanning
- ldr r2, =gSprites
- ldr r3, =gBankSpriteIds
- ldrb r0, [r5]
- adds r0, r3
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- strh r4, [r0, 0x30]
- ldrb r0, [r5]
- adds r0, r3
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x5
- strh r1, [r0, 0x32]
- ldrb r0, [r5]
- adds r0, r3
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, =sub_8039C00
- str r1, [r0]
- ldr r1, =gBattleBankFunc
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_80596A8
- str r1, [r0]
-_0805BB82:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805BAB8
-
- thumb_func_start sub_805BBA4
-sub_805BBA4: @ 805BBA4
- push {lr}
- sub sp, 0x4
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r1, 0x2
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- bl PlayerBufferExecCompleted
- add sp, 0x4
- pop {r0}
- bx r0
- thumb_func_end sub_805BBA4
-
- thumb_func_start sub_805BBC4
-sub_805BBC4: @ 805BBC4
- push {r4,r5,lr}
- ldr r0, =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r1, [r0, 0x8]
- movs r0, 0x4
- strb r0, [r1, 0x8]
- ldr r1, =gDoingBattleAnim
- movs r0, 0x1
- strb r0, [r1]
- ldr r5, =gActiveBank
- ldrb r4, [r5]
- movs r0, 0x1
- bl GetBankByIdentity
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r1, r4, 0
- movs r3, 0x3
- bl move_anim_start_t4
- ldr r1, =gBattleBankFunc
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, =bx_wait_t1
- str r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805BBC4
-
- thumb_func_start sub_805BC18
-sub_805BC18: @ 805BC18
- push {r4,r5,lr}
- ldr r1, =gBattleBufferA
- ldr r5, =gActiveBank
- ldrb r0, [r5]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r1, [r0]
- ldr r0, =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r0, [r0, 0x8]
- strb r1, [r0, 0x8]
- ldr r1, =gDoingBattleAnim
- movs r0, 0x1
- strb r0, [r1]
- ldrb r4, [r5]
- movs r0, 0x1
- bl GetBankByIdentity
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r1, r4, 0
- movs r3, 0x3
- bl move_anim_start_t4
- ldr r1, =gBattleBankFunc
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, =bx_wait_t1
- str r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805BC18
-
- thumb_func_start sub_805BC78
-sub_805BC78: @ 805BC78
- push {lr}
- ldr r1, =gBattleBufferA
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _0805BC96
-_0805BC8C:
- subs r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _0805BC8C
-_0805BC96:
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805BC78
-
- thumb_func_start dp01t_0F_1_move_anim
-dp01t_0F_1_move_anim: @ 805BCA8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r5, =gActiveBank
- ldrb r0, [r5]
- bl mplay_80342A4
- lsls r0, 24
- cmp r0, 0
- beq _0805BCBE
- b _0805BDE4
-_0805BCBE:
- ldr r0, =gBattleBufferA
- mov r12, r0
- ldrb r1, [r5]
- lsls r1, 9
- adds r0, 0x1
- adds r0, r1, r0
- ldrb r6, [r0]
- mov r0, r12
- adds r0, 0x2
- adds r0, r1, r0
- ldrb r0, [r0]
- lsls r0, 8
- orrs r6, r0
- ldr r0, =gAnimMoveTurn
- mov r8, r0
- mov r0, r12
- adds r0, 0x3
- adds r1, r0
- ldrb r0, [r1]
- mov r1, r8
- strb r0, [r1]
- ldr r3, =gAnimMovePower
- ldrb r1, [r5]
- lsls r1, 9
- mov r0, r12
- adds r0, 0x4
- adds r0, r1, r0
- ldrb r2, [r0]
- mov r0, r12
- adds r0, 0x5
- adds r1, r0
- ldrb r0, [r1]
- lsls r0, 8
- orrs r2, r0
- strh r2, [r3]
- ldr r3, =gAnimMoveDmg
- ldrb r1, [r5]
- lsls r1, 9
- mov r0, r12
- adds r0, 0x6
- adds r0, r1, r0
- ldrb r2, [r0]
- mov r0, r12
- adds r0, 0x7
- adds r0, r1, r0
- ldrb r0, [r0]
- lsls r0, 8
- orrs r2, r0
- mov r0, r12
- adds r0, 0x8
- adds r0, r1, r0
- ldrb r0, [r0]
- lsls r0, 16
- orrs r2, r0
- mov r0, r12
- adds r0, 0x9
- adds r1, r0
- ldrb r0, [r1]
- lsls r0, 24
- orrs r2, r0
- str r2, [r3]
- ldr r2, =gAnimFriendship
- ldrb r0, [r5]
- lsls r0, 9
- mov r1, r12
- adds r1, 0xA
- adds r0, r1
- ldrb r0, [r0]
- strb r0, [r2]
- ldr r4, =gWeatherMoveAnim
- ldrb r1, [r5]
- lsls r1, 9
- mov r0, r12
- adds r0, 0xC
- adds r0, r1, r0
- ldrb r2, [r0]
- mov r0, r12
- adds r0, 0xD
- adds r1, r0
- ldrb r0, [r1]
- lsls r0, 8
- orrs r2, r0
- strh r2, [r4]
- ldr r7, =gAnimDisableStructPtr
- ldrb r1, [r5]
- lsls r1, 9
- mov r0, r12
- adds r0, 0x10
- adds r1, r0
- str r1, [r7]
- ldr r2, =gUnknown_020244BC
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r2
- ldr r1, [r1]
- str r1, [r0]
- mov r0, r8
- ldrb r1, [r0]
- adds r0, r6, 0
- bl sub_805DB8C
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0
- beq _0805BDBC
- bl PlayerBufferExecCompleted
- b _0805BDE4
- .pool
-_0805BDBC:
- ldr r0, =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldrb r1, [r5]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- strb r3, [r0, 0x4]
- ldr r1, =gBattleBankFunc
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, =bx_move_anim_1
- str r1, [r0]
- ldrh r1, [r4]
- ldr r2, [r7]
- adds r0, r6, 0
- bl sub_817E0FC
-_0805BDE4:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end dp01t_0F_1_move_anim
-
- thumb_func_start bx_move_anim_1
-bx_move_anim_1: @ 805BDFC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r2, =gBattleBufferA
- ldr r6, =gActiveBank
- ldrb r3, [r6]
- lsls r1, r3, 9
- adds r0, r2, 0x1
- mov r10, r0
- adds r0, r1, r0
- ldrb r4, [r0]
- adds r5, r2, 0x2
- mov r9, r5
- adds r0, r1, r5
- ldrb r0, [r0]
- lsls r0, 8
- orrs r4, r0
- adds r2, 0xB
- adds r1, r2
- ldrb r1, [r1]
- mov r8, r1
- ldr r7, =gBattleSpritesDataPtr
- ldr r5, [r7]
- ldr r1, [r5, 0x4]
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r2, [r0, 0x4]
- cmp r2, 0x1
- beq _0805BE94
- cmp r2, 0x1
- bgt _0805BE54
- cmp r2, 0
- beq _0805BE5E
- b _0805BF70
- .pool
-_0805BE54:
- cmp r2, 0x2
- beq _0805BEBE
- cmp r2, 0x3
- beq _0805BF34
- b _0805BF70
-_0805BE5E:
- ldr r1, [r5]
- lsls r0, r3, 2
- adds r1, r0, r1
- ldrb r2, [r1]
- movs r0, 0xC
- ands r0, r2
- cmp r0, 0x4
- bne _0805BE80
- movs r0, 0x8
- orrs r0, r2
- strb r0, [r1]
- ldrb r2, [r6]
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x5
- bl move_anim_start_t4
-_0805BE80:
- ldr r0, [r7]
- ldrb r1, [r6]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x1
- strb r1, [r0, 0x4]
- b _0805BF70
-_0805BE94:
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _0805BF70
- movs r0, 0
- bl sub_805EB9C
- adds r0, r4, 0
- bl DoMoveAnim
- ldr r0, [r7]
- ldrb r1, [r6]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x2
- strb r1, [r0, 0x4]
- b _0805BF70
-_0805BEBE:
- ldr r0, =gAnimScriptCallback
- ldr r0, [r0]
- bl _call_via_r0
- ldr r0, =gAnimScriptActive
- ldrb r0, [r0]
- cmp r0, 0
- bne _0805BF70
- movs r0, 0x1
- bl sub_805EB9C
- ldr r0, [r7]
- ldrb r2, [r6]
- ldr r1, [r0]
- lsls r0, r2, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0805BF0C
- mov r0, r8
- cmp r0, 0x1
- bhi _0805BF0C
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x6
- bl move_anim_start_t4
- ldr r0, [r7]
- ldrb r1, [r6]
- ldr r0, [r0]
- lsls r1, 2
- adds r1, r0
- ldrb r2, [r1]
- movs r0, 0x9
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
-_0805BF0C:
- ldr r0, =gBattleSpritesDataPtr
- ldr r2, [r0]
- ldr r0, =gActiveBank
- ldrb r1, [r0]
- ldr r2, [r2, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x3
- strb r1, [r0, 0x4]
- b _0805BF70
- .pool
-_0805BF34:
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _0805BF70
- bl sub_805E394
- ldrb r0, [r6]
- lsls r2, r0, 9
- mov r3, r10
- adds r1, r2, r3
- ldrb r1, [r1]
- add r2, r9
- ldrb r2, [r2]
- lsls r2, 8
- orrs r1, r2
- bl sub_805E94C
- ldr r0, [r7]
- ldrb r1, [r6]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- strb r4, [r0, 0x4]
- bl PlayerBufferExecCompleted
-_0805BF70:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end bx_move_anim_1
-
- thumb_func_start sub_805BF80
-sub_805BF80: @ 805BF80
- push {r4,r5,lr}
- ldr r0, =gBattle_BG0_X
- movs r1, 0
- strh r1, [r0]
- ldr r0, =gBattle_BG0_Y
- strh r1, [r0]
- ldr r5, =gActiveBank
- ldrb r4, [r5]
- lsls r4, 9
- ldr r0, =gBattleBufferA + 2
- adds r4, r0
- ldrh r0, [r4]
- bl BufferStringBattle
- ldr r0, =gDisplayedStringBattle
- movs r1, 0
- bl sub_814F9EC
- ldr r1, =gBattleBankFunc
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_80597B4
- str r1, [r0]
- ldrh r0, [r4]
- bl sub_817C95C
- ldrb r0, [r5]
- ldrh r1, [r4]
- bl sub_81A57E4
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805BF80
-
- thumb_func_start dp01t_11_1_message_for_player_only
-dp01t_11_1_message_for_player_only: @ 805BFE0
- push {lr}
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- bne _0805BFFC
- bl sub_805BF80
- b _0805C000
- .pool
-_0805BFFC:
- bl PlayerBufferExecCompleted
-_0805C000:
- pop {r0}
- bx r0
- thumb_func_end dp01t_11_1_message_for_player_only
-
- thumb_func_start sub_805C004
-sub_805C004: @ 805C004
- push {lr}
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0
- bne _0805C02A
- ldr r0, =gBattle_BG0_X
- strh r1, [r0]
- ldr r1, =gBattle_BG0_Y
- movs r0, 0xA0
- strh r0, [r1]
- ldr r1, =gBattleBankFunc
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_8057588
- str r1, [r0]
-_0805C02A:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805C004
-
- thumb_func_start dp01t_12_6_battle_menu
-dp01t_12_6_battle_menu: @ 805C044
- push {r4,lr}
- ldr r1, =gBattleBankFunc
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_805C004
- str r1, [r0]
- bl sub_817F2A8
- ldr r0, =gText_BattleMenu
- movs r1, 0x2
- bl sub_814F9EC
- movs r4, 0
-_0805C062:
- lsls r0, r4, 24
- lsrs r0, 24
- bl ActionSelectionDestroyCursorAt
- adds r4, 0x1
- cmp r4, 0x3
- ble _0805C062
- ldr r1, =gActionSelectionCursor
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- adds r0, r1
- ldrb r0, [r0]
- movs r1, 0
- bl ActionSelectionCreateCursorAt
- ldr r0, =gText_WhatWillPkmnDo
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r0, =gDisplayedStringBattle
- movs r1, 0x1
- bl sub_814F9EC
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end dp01t_12_6_battle_menu
-
- thumb_func_start sub_805C0B0
-sub_805C0B0: @ 805C0B0
- push {r4,lr}
- sub sp, 0x4
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _0805C108
- str r0, [sp]
- movs r0, 0x18
- movs r1, 0x8
- movs r2, 0x1D
- movs r3, 0xD
- bl sub_8056A3C
- ldr r0, =gText_BattleYesNoChoice
- movs r1, 0xC
- bl sub_814F9EC
- ldr r1, =gUnknown_03005D74
- movs r0, 0x1
- strb r0, [r1]
- movs r0, 0x1
- bl BattleCreateCursorAt
- ldr r1, =gBattleBankFunc
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_80599D4
- str r1, [r0]
- b _0805C10C
- .pool
-_0805C108:
- bl PlayerBufferExecCompleted
-_0805C10C:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_805C0B0
-
- thumb_func_start sub_805C114
-sub_805C114: @ 805C114
- push {lr}
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0
- bne _0805C13E
- ldr r0, =gBattle_BG0_X
- strh r1, [r0]
- ldr r1, =gBattle_BG0_Y
- movs r2, 0xA0
- lsls r2, 1
- adds r0, r2, 0
- strh r0, [r1]
- ldr r1, =gBattleBankFunc
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_8057BFC
- str r1, [r0]
-_0805C13E:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805C114
-
- thumb_func_start sub_805C158
-sub_805C158: @ 805C158
- push {lr}
- ldr r0, =gActiveBank
- ldrb r1, [r0]
- ldr r0, =gBattleStruct
- ldr r0, [r0]
- adds r1, r0
- movs r0, 0xA6
- lsls r0, 2
- adds r1, r0
- ldrb r0, [r1]
- subs r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- cmp r0, 0
- bne _0805C194
- ldr r1, =gBattlePalaceMoveSelectionRngValue
- ldr r0, =gRngValue
- ldr r0, [r0]
- str r0, [r1]
- bl sub_805D19C
- adds r2, r0, 0
- lsls r2, 16
- lsrs r2, 16
- movs r0, 0x1
- movs r1, 0xA
- bl EmitCmd33
- bl PlayerBufferExecCompleted
-_0805C194:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805C158
-
- thumb_func_start dp01t_14_5_move_menu_pokedude
-dp01t_14_5_move_menu_pokedude: @ 805C1A8
- push {lr}
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 10
- ands r0, r1
- cmp r0, 0
- beq _0805C1EC
- ldr r2, =gActiveBank
- ldrb r0, [r2]
- ldr r1, =gBattleStruct
- ldr r1, [r1]
- adds r0, r1
- movs r1, 0xA6
- lsls r1, 2
- adds r0, r1
- movs r1, 0x8
- strb r1, [r0]
- ldr r1, =gBattleBankFunc
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_805C158
- b _0805C1FC
- .pool
-_0805C1EC:
- bl sub_805C210
- ldr r1, =gBattleBankFunc
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_805C114
-_0805C1FC:
- str r1, [r0]
- pop {r0}
- bx r0
- .pool
- thumb_func_end dp01t_14_5_move_menu_pokedude
-
- thumb_func_start sub_805C210
-sub_805C210: @ 805C210
- push {lr}
- bl sub_8059AAC
- ldr r1, =gUnknown_03005D74
- movs r0, 0xFF
- strb r0, [r1]
- ldr r1, =gMoveSelectionCursor
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- adds r0, r1
- ldrb r0, [r0]
- movs r1, 0
- bl battle_menu_cursor_related_2
- bl sub_8059B18
- bl sub_8059B3C
- bl sub_8059BB0
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805C210
-
- thumb_func_start sub_805C248
-sub_805C248: @ 805C248
- push {r4,r5,lr}
- sub sp, 0x4
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r1, =gBattleBankFunc
- ldr r2, =gActiveBank
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_80598A4
- str r1, [r0]
- ldr r1, =gBankInMenu
- ldrb r0, [r2]
- strb r0, [r1]
- movs r3, 0
- ldr r5, =gUnknown_0203CF00
- ldr r4, =gBattleBufferA
-_0805C276:
- adds r0, r3, r5
- ldrb r1, [r2]
- lsls r1, 9
- adds r1, 0x1
- adds r1, r3, r1
- adds r1, r4
- ldrb r1, [r1]
- strb r1, [r0]
- adds r3, 0x1
- cmp r3, 0x2
- ble _0805C276
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805C248
-
- thumb_func_start sub_805C2AC
-sub_805C2AC: @ 805C2AC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- movs r3, 0
- ldr r0, =gUnknown_0203CF00
- mov r12, r0
- ldr r1, =gBattleBufferA
- mov r8, r1
- ldr r2, =gActiveBank
- ldr r7, =gBattleTypeFlags
- mov r6, r12
- mov r5, r8
- adds r4, r2, 0
-_0805C2C8:
- adds r0, r3, r6
- ldrb r1, [r4]
- lsls r1, 9
- adds r1, 0x4
- adds r1, r3, r1
- adds r1, r5
- ldrb r1, [r1]
- strb r1, [r0]
- adds r3, 0x1
- cmp r3, 0x2
- ble _0805C2C8
- ldr r0, [r7]
- movs r1, 0x80
- lsls r1, 11
- ands r0, r1
- cmp r0, 0
- beq _0805C330
- ldrb r3, [r2]
- lsls r0, r3, 9
- mov r1, r8
- adds r1, 0x1
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0x2
- beq _0805C330
- ldr r1, =gBattlePartyID
- lsls r0, r3, 1
- adds r0, r1
- ldrb r1, [r0]
- adds r1, 0x1
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0x1
- mov r2, r12
- bl EmitCmd34
- bl PlayerBufferExecCompleted
- b _0805C3BC
- .pool
-_0805C330:
- ldr r0, =TaskDummy
- movs r1, 0xFF
- bl CreateTask
- ldr r3, =gUnknown_03005D7C
- ldr r4, =gActiveBank
- ldrb r1, [r4]
- adds r1, r3
- movs r2, 0
- mov r8, r2
- strb r0, [r1]
- ldr r5, =gTasks
- ldrb r2, [r4]
- adds r3, r2, r3
- ldrb r0, [r3]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r5
- ldr r5, =gBattleBufferA
- lsls r2, 9
- adds r6, r5, 0x1
- adds r2, r6
- ldrb r2, [r2]
- movs r0, 0xF
- ands r0, r2
- strh r0, [r1, 0x8]
- ldr r3, =gBattleStruct
- ldr r1, [r3]
- adds r1, 0x49
- ldrb r0, [r4]
- lsls r0, 9
- adds r0, r6
- ldrb r0, [r0]
- lsrs r0, 4
- strb r0, [r1]
- ldr r2, [r3]
- adds r2, 0x8B
- ldrb r0, [r4]
- lsls r0, 9
- adds r1, r5, 0x2
- adds r0, r1
- ldrb r0, [r0]
- strb r0, [r2]
- ldr r1, [r3]
- adds r1, 0xB0
- ldrb r0, [r4]
- lsls r0, 9
- adds r5, 0x3
- adds r0, r5
- ldrb r0, [r0]
- strb r0, [r1]
- movs r0, 0x1
- negs r0, r0
- mov r1, r8
- str r1, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r1, =gBattleBankFunc
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_80597CC
- str r1, [r0]
- ldr r1, =gBankInMenu
- ldrb r0, [r4]
- strb r0, [r1]
-_0805C3BC:
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805C2AC
-
- thumb_func_start sub_805C3EC
-sub_805C3EC: @ 805C3EC
- push {lr}
- sub sp, 0x4
- bl BattleMusicStop
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r1, 0x2
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- bl PlayerBufferExecCompleted
- add sp, 0x4
- pop {r0}
- bx r0
- thumb_func_end sub_805C3EC
-
- thumb_func_start sub_805C410
-sub_805C410: @ 805C410
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x4
- movs r0, 0
- bl LoadBattleBarGfx
- ldr r3, =gBattleBufferA
- ldr r0, =gActiveBank
- mov r9, r0
- ldrb r1, [r0]
- lsls r1, 9
- adds r0, r3, 0x2
- adds r0, r1, r0
- ldrb r2, [r0]
- adds r3, 0x3
- adds r1, r3
- ldrb r0, [r1]
- lsls r0, 8
- orrs r2, r0
- lsls r2, 16
- asrs r7, r2, 16
- cmp r7, 0
- ble _0805C44A
- ldr r1, =gUnknown_0203CD70
- ldr r0, [r1]
- adds r0, r7
- str r0, [r1]
-_0805C44A:
- ldr r0, =0x00007fff
- cmp r7, r0
- beq _0805C4B4
- ldr r6, =gBattlePartyID
- mov r1, r9
- ldrb r0, [r1]
- lsls r0, 1
- adds r0, r6
- ldrh r0, [r0]
- movs r5, 0x64
- muls r0, r5
- ldr r4, =gPlayerParty
- adds r0, r4
- movs r1, 0x3A
- bl GetMonData
- mov r8, r0
- mov r2, r9
- ldrb r0, [r2]
- lsls r0, 1
- adds r0, r6
- ldrh r0, [r0]
- muls r0, r5
- adds r0, r4
- movs r1, 0x39
- bl GetMonData
- adds r3, r0, 0
- mov r1, r9
- ldrb r0, [r1]
- ldr r1, =gHealthBoxesIds
- adds r1, r0, r1
- ldrb r1, [r1]
- str r7, [sp]
- mov r2, r8
- bl SetBattleBarStruct
- b _0805C4F2
- .pool
-_0805C4B4:
- ldr r1, =gBattlePartyID
- mov r2, r9
- ldrb r0, [r2]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x3A
- bl GetMonData
- adds r2, r0, 0
- mov r1, r9
- ldrb r0, [r1]
- ldr r4, =gHealthBoxesIds
- adds r1, r0, r4
- ldrb r1, [r1]
- str r7, [sp]
- movs r3, 0
- bl SetBattleBarStruct
- mov r2, r9
- ldrb r0, [r2]
- adds r0, r4
- ldrb r0, [r0]
- movs r1, 0
- movs r2, 0
- bl UpdateHpTextInHealthbox
-_0805C4F2:
- ldr r1, =gBattleBankFunc
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, =bx_t1_healthbar_update
- str r1, [r0]
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805C410
-
- thumb_func_start sub_805C528
-sub_805C528: @ 805C528
- push {r4-r7,lr}
- ldr r5, =gBattleBufferA
- ldr r6, =gActiveBank
- ldrb r0, [r6]
- lsls r0, 9
- adds r1, r5, 0x1
- adds r0, r1
- ldrb r7, [r0]
- movs r0, 0x64
- adds r1, r7, 0
- muls r1, r0
- ldr r0, =gPlayerParty
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0x38
- bl GetMonData
- cmp r0, 0x63
- bls _0805C560
- bl PlayerBufferExecCompleted
- b _0805C5AC
- .pool
-_0805C560:
- movs r0, 0x1
- bl LoadBattleBarGfx
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- ldrb r1, [r6]
- lsls r1, 9
- adds r0, r5, 0x2
- adds r0, r1, r0
- ldrb r4, [r0]
- adds r0, r5, 0x3
- adds r1, r0
- ldrb r0, [r1]
- lsls r0, 8
- orrs r4, r0
- ldr r0, =sub_80591B8
- movs r1, 0xA
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r7, [r1, 0x8]
- strh r4, [r1, 0xA]
- ldrb r0, [r6]
- strh r0, [r1, 0xC]
- ldr r1, =gBattleBankFunc
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r1
- ldr r1, =nullsub_21
- str r1, [r0]
-_0805C5AC:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805C528
-
- thumb_func_start sub_805C5C4
-sub_805C5C4: @ 805C5C4
- push {r4,lr}
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- bl mplay_80342A4
- lsls r0, 24
- cmp r0, 0
- bne _0805C618
- ldr r0, =gHealthBoxesIds
- ldrb r1, [r4]
- adds r0, r1, r0
- ldrb r0, [r0]
- ldr r2, =gBattlePartyID
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, =gPlayerParty
- adds r1, r2
- movs r2, 0x9
- bl UpdateHealthboxAttribute
- ldrb r2, [r4]
- ldr r0, =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r0, [r0, 0x4]
- lsls r1, r2, 1
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r2, [r1]
- movs r0, 0x11
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- ldr r1, =gBattleBankFunc
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_8059D60
- str r1, [r0]
-_0805C618:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805C5C4
-
- thumb_func_start sub_805C63C
-sub_805C63C: @ 805C63C
- push {r4,r5,lr}
- ldr r5, =gActiveBank
- ldrb r0, [r5]
- bl mplay_80342A4
- lsls r0, 24
- cmp r0, 0
- bne _0805C68C
- ldr r4, =gBattleBufferA
- ldrb r3, [r5]
- lsls r3, 9
- adds r0, r4, 0x1
- adds r0, r3, r0
- ldrb r0, [r0]
- adds r1, r4, 0x2
- adds r1, r3, r1
- ldrb r1, [r1]
- adds r2, r4, 0x3
- adds r2, r3, r2
- ldrb r2, [r2]
- lsls r2, 8
- orrs r1, r2
- adds r2, r4, 0x4
- adds r2, r3, r2
- ldrb r2, [r2]
- lsls r2, 16
- orrs r1, r2
- adds r4, 0x5
- adds r3, r4
- ldrb r2, [r3]
- lsls r2, 24
- orrs r1, r2
- bl move_anim_start_t2_for_situation
- ldr r1, =gBattleBankFunc
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_8059D60
- str r1, [r0]
-_0805C68C:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805C63C
-
- thumb_func_start sub_805C6A4
-sub_805C6A4: @ 805C6A4
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- sub sp, 0x4
- ldr r0, =gBattlePartyID
- mov r8, r0
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- lsls r0, 1
- add r0, r8
- ldrh r0, [r0]
- movs r6, 0x64
- muls r0, r6
- ldr r5, =gPlayerParty
- adds r0, r5
- movs r1, 0x37
- bl GetMonData
- ldr r2, =gBattleBufferA
- ldrb r1, [r4]
- lsls r1, 9
- adds r2, 0x1
- adds r1, r2
- ldrb r1, [r1]
- eors r0, r1
- mov r1, sp
- strb r0, [r1]
- ldrb r0, [r4]
- lsls r0, 1
- add r0, r8
- ldrh r0, [r0]
- muls r0, r6
- adds r0, r5
- movs r1, 0x37
- mov r2, sp
- bl SetMonData
- bl PlayerBufferExecCompleted
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805C6A4
-
- thumb_func_start sub_805C710
-sub_805C710: @ 805C710
- push {lr}
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_805C710
-
- thumb_func_start sub_805C71C
-sub_805C71C: @ 805C71C
- push {r4,r5,lr}
- ldr r3, =gBattleBufferA
- ldr r0, =gActiveBank
- ldrb r2, [r0]
- lsls r2, 9
- adds r0, r3, 0x1
- adds r0, r2, r0
- ldrb r5, [r0]
- adds r0, r3, 0x2
- adds r0, r2, r0
- ldrb r0, [r0]
- lsls r0, 8
- orrs r5, r0
- adds r0, r3, 0x3
- adds r0, r2, r0
- ldrb r0, [r0]
- lsls r0, 16
- orrs r5, r0
- adds r0, r3, 0x4
- adds r0, r2, r0
- ldrb r4, [r0]
- lsls r4, 24
- adds r0, r3, 0x5
- adds r0, r2, r0
- ldrb r1, [r0]
- adds r0, r3, 0x6
- adds r0, r2, r0
- ldrb r0, [r0]
- lsls r0, 8
- orrs r1, r0
- lsls r1, 16
- adds r3, 0x7
- adds r2, r3
- orrs r5, r4
- lsrs r4, r1, 16
- movs r0, 0x80
- lsls r0, 5
- cmp r4, r0
- bhi _0805C78C
- ldr r0, =0x040000d4
- str r2, [r0]
- str r5, [r0, 0x4]
- lsrs r1, 17
- movs r2, 0x80
- lsls r2, 24
- orrs r1, r2
- str r1, [r0, 0x8]
- ldr r0, [r0, 0x8]
- b _0805C7B8
- .pool
-_0805C78C:
- ldr r3, =0x040000d4
- str r2, [r3]
- str r5, [r3, 0x4]
- ldr r0, =0x80000800
- str r0, [r3, 0x8]
- ldr r0, [r3, 0x8]
- movs r0, 0x80
- lsls r0, 5
- adds r2, r0
- adds r5, r0
- ldr r1, =0xfffff000
- adds r4, r1
- cmp r4, r0
- bhi _0805C78C
- str r2, [r3]
- str r5, [r3, 0x4]
- lsrs r0, r4, 1
- movs r1, 0x80
- lsls r1, 24
- orrs r0, r1
- str r0, [r3, 0x8]
- ldr r0, [r3, 0x8]
-_0805C7B8:
- bl PlayerBufferExecCompleted
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805C71C
-
- thumb_func_start sub_805C7D0
-sub_805C7D0: @ 805C7D0
- push {lr}
- ldr r2, =gBattleBufferA
- ldr r0, =gActiveBank
- ldrb r1, [r0]
- lsls r1, 9
- adds r0, r2, 0x1
- adds r0, r1, r0
- ldrb r0, [r0]
- adds r2, 0x2
- adds r1, r2
- ldrb r1, [r1]
- lsls r1, 8
- orrs r0, r1
- bl PlayBGM
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805C7D0
-
- thumb_func_start sub_805C800
-sub_805C800: @ 805C800
- push {lr}
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_805C800
-
- thumb_func_start sub_805C80C
-sub_805C80C: @ 805C80C
- push {lr}
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- bl EmitCmd33
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_805C80C
-
- thumb_func_start sub_805C820
-sub_805C820: @ 805C820
- push {lr}
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- bl EmitCmd34
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_805C820
-
- thumb_func_start sub_805C834
-sub_805C834: @ 805C834
- push {lr}
- movs r0, 0x1
- movs r1, 0
- bl EmitCmd35
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_805C834
-
- thumb_func_start sub_805C848
-sub_805C848: @ 805C848
- push {lr}
- movs r0, 0x1
- movs r1, 0
- bl EmitCmd36
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_805C848
-
- thumb_func_start sub_805C85C
-sub_805C85C: @ 805C85C
- push {lr}
- ldr r2, =gUnknown_02022D0C
- ldrb r1, [r2]
- movs r0, 0x80
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805C85C
-
- thumb_func_start sub_805C878
-sub_805C878: @ 805C878
- push {lr}
- ldr r3, =gUnknown_02022D0C
- ldr r1, =gBattleBufferA
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- movs r1, 0x7F
- ands r1, r0
- ldrb r2, [r3]
- movs r0, 0x80
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805C878
-
- thumb_func_start sub_805C8B0
-sub_805C8B0: @ 805C8B0
- push {lr}
- ldr r2, =gUnknown_02022D0C
- ldrb r1, [r2]
- movs r0, 0x7F
- ands r0, r1
- strb r0, [r2]
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805C8B0
-
- thumb_func_start sub_805C8C8
-sub_805C8C8: @ 805C8C8
- push {lr}
- ldr r3, =gUnknown_02022D0C
- ldr r1, [r3]
- lsls r1, 24
- lsrs r1, 31
- movs r0, 0x1
- eors r1, r0
- lsls r1, 7
- ldrb r2, [r3]
- movs r0, 0x7F
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805C8C8
-
- thumb_func_start dp01t_29_1_blink
-dp01t_29_1_blink: @ 805C8F0
- push {r4,lr}
- ldr r3, =gSprites
- ldr r2, =gBankSpriteIds
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- adds r0, r2
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- adds r0, 0x3E
- ldrb r0, [r0]
- lsls r0, 29
- cmp r0, 0
- bge _0805C924
- bl PlayerBufferExecCompleted
- b _0805C94E
- .pool
-_0805C924:
- ldr r1, =gDoingBattleAnim
- movs r0, 0x1
- strb r0, [r1]
- ldrb r0, [r4]
- adds r0, r2
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- movs r1, 0
- strh r1, [r0, 0x30]
- ldrb r0, [r4]
- bl sub_80769F4
- ldr r1, =gBattleBankFunc
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, =bx_blink_t1
- str r1, [r0]
-_0805C94E:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end dp01t_29_1_blink
-
- thumb_func_start sub_805C960
-sub_805C960: @ 805C960
- push {lr}
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_805C960
-
- thumb_func_start sub_805C96C
-sub_805C96C: @ 805C96C
- push {r4,lr}
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- movs r3, 0x3F
- cmp r0, 0
- bne _0805C980
- movs r3, 0xC0
-_0805C980:
- ldr r2, =gBattleBufferA
- ldrb r1, [r4]
- lsls r1, 9
- adds r0, r2, 0x1
- adds r0, r1, r0
- ldrb r0, [r0]
- adds r2, 0x2
- adds r1, r2
- ldrb r1, [r1]
- lsls r1, 8
- orrs r0, r1
- lsls r1, r3, 24
- asrs r1, 24
- bl PlaySE12WithPanning
- bl PlayerBufferExecCompleted
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805C96C
-
- thumb_func_start sub_805C9B0
-sub_805C9B0: @ 805C9B0
- push {r4,r5,lr}
- ldr r4, =gBattleBufferA
- ldr r5, =gActiveBank
- ldrb r0, [r5]
- lsls r3, r0, 9
- adds r0, r4, 0x3
- adds r0, r3, r0
- ldrb r0, [r0]
- cmp r0, 0
- beq _0805C9EC
- bl BattleMusicStop
- ldrb r1, [r5]
- lsls r1, 9
- adds r0, r4, 0x1
- adds r0, r1, r0
- ldrb r0, [r0]
- adds r2, r4, 0x2
- adds r1, r2
- ldrb r1, [r1]
- lsls r1, 8
- orrs r0, r1
- bl PlayBGM
- b _0805CA00
- .pool
-_0805C9EC:
- adds r0, r4, 0x1
- adds r0, r3, r0
- ldrb r0, [r0]
- adds r1, r4, 0x2
- adds r1, r3, r1
- ldrb r1, [r1]
- lsls r1, 8
- orrs r0, r1
- bl PlayFanfare
-_0805CA00:
- bl PlayerBufferExecCompleted
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_805C9B0
-
- thumb_func_start sub_805CA0C
-sub_805CA0C: @ 805CA0C
- push {lr}
- ldr r1, =gBattlePartyID
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x19
- negs r1, r1
- movs r2, 0x5
- bl PlayCry3
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805CA0C
-
- thumb_func_start dp01t_2E_1_battle_intro
-dp01t_2E_1_battle_intro: @ 805CA4C
- push {lr}
- ldr r1, =gBattleBufferA
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- bl battle_intro_launch
- ldr r2, =gUnknown_020243FC
- ldrh r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strh r0, [r2]
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- .pool
- thumb_func_end dp01t_2E_1_battle_intro
-
- thumb_func_start dp01t_2F_1_pokemon_enter
-dp01t_2F_1_pokemon_enter: @ 805CA80
- push {r4-r7,lr}
- ldr r6, =gBankSpriteIds
- ldr r7, =gActiveBank
- ldrb r0, [r7]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r5, =gSprites
- adds r0, r5
- bl oamt_add_pos2_onto_pos1
- ldrb r0, [r7]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r1, 0x32
- strh r1, [r0, 0x2E]
- ldrb r0, [r7]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, =0x0000ffd8
- strh r1, [r0, 0x32]
- ldrb r0, [r7]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldrh r1, [r0, 0x22]
- strh r1, [r0, 0x36]
- ldrb r0, [r7]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r5, 0
- adds r1, 0x1C
- adds r0, r1
- ldr r1, =sub_80A6EEC
- str r1, [r0]
- ldrb r2, [r7]
- adds r0, r2, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r2, [r0, 0x38]
- ldrb r0, [r7]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, =sub_805CC00
- bl StoreSpriteCallbackInData6
- ldrb r0, [r7]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r1, 0x1
- bl StartSpriteAnim
- ldr r0, =0x0000d6f8
- bl AllocSpritePalette
- adds r4, r0, 0
- lsls r4, 24
- ldr r1, =gTrainerBackPicPaletteTable
- ldr r0, =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- lsls r0, 3
- adds r0, r1
- ldr r0, [r0]
- lsrs r4, 20
- movs r2, 0x80
- lsls r2, 1
- adds r1, r4, r2
- movs r2, 0x20
- bl LoadCompressedPalette
- ldrb r0, [r7]
- adds r0, r6
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r4
- strb r0, [r1, 0x5]
- ldr r0, =task05_08033660
- movs r1, 0x5
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r4, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r4
- ldrb r0, [r7]
- strh r0, [r1, 0x8]
- ldr r3, =gBattleSpritesDataPtr
- ldr r0, [r3]
- ldrb r2, [r7]
- ldr r1, [r0, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0805CBA2
- ldr r0, =gUnknown_020244B4
- adds r0, r2, r0
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r4
- ldr r1, =sub_8073C30
- str r1, [r0]
-_0805CBA2:
- ldr r0, [r3]
- ldr r2, [r0, 0x8]
- ldrb r0, [r2, 0x9]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2, 0x9]
- ldr r1, =gBattleBankFunc
- ldrb r0, [r7]
- lsls r0, 2
- adds r0, r1
- ldr r1, =nullsub_21
- str r1, [r0]
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end dp01t_2F_1_pokemon_enter
-
- thumb_func_start sub_805CC00
-sub_805CC00: @ 805CC00
- push {r4,r5,lr}
- adds r5, r0, 0
- ldrh r4, [r5, 0x38]
- lsls r4, 24
- lsrs r4, 24
- bl FreeSpriteOamMatrix
- ldrb r0, [r5, 0x5]
- lsrs r0, 4
- bl GetSpritePaletteTagByPaletteNum
- lsls r0, 16
- lsrs r0, 16
- bl FreeSpritePaletteByTag
- adds r0, r5, 0
- bl DestroySprite
- ldr r1, =gBattlePartyID
- lsls r0, r4, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, =gPlayerParty
- adds r0, r1
- adds r1, r4, 0
- bl BattleLoadPlayerMonSpriteGfx
- ldr r0, =gBankSpriteIds
- adds r4, r0
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSprites
- adds r0, r1
- movs r1, 0
- bl StartSpriteAnim
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805CC00
-
- thumb_func_start task05_08033660
-task05_08033660: @ 805CC68
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r1, =gTasks
- lsls r0, 2
- add r0, r8
- lsls r0, 3
- adds r1, r0, r1
- ldrh r2, [r1, 0xA]
- movs r3, 0xA
- ldrsh r0, [r1, r3]
- cmp r0, 0x1E
- bgt _0805CC94
- adds r0, r2, 0x1
- strh r0, [r1, 0xA]
- b _0805CD50
- .pool
-_0805CC94:
- ldr r7, =gActiveBank
- ldrb r0, [r7]
- mov r9, r0
- ldrh r0, [r1, 0x8]
- strb r0, [r7]
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _0805CCB4
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0805CCE4
-_0805CCB4:
- ldr r0, =gBattleBufferA
- ldrb r1, [r7]
- lsls r2, r1, 9
- adds r0, 0x1
- adds r2, r0
- ldr r0, =gBattlePartyID
- lsls r1, 1
- adds r1, r0
- ldrh r0, [r1]
- strb r0, [r2]
- ldrb r0, [r7]
- movs r1, 0
- bl sub_805B258
- b _0805CD38
- .pool
-_0805CCE4:
- ldr r4, =gBattleBufferA
- ldrb r0, [r7]
- lsls r1, r0, 9
- adds r4, 0x1
- adds r1, r4
- ldr r5, =gBattlePartyID
- lsls r0, 1
- adds r0, r5
- ldrh r0, [r0]
- strb r0, [r1]
- ldrb r0, [r7]
- movs r1, 0
- bl sub_805B258
- ldrb r0, [r7]
- movs r6, 0x2
- eors r0, r6
- strb r0, [r7]
- ldrb r0, [r7]
- lsls r1, r0, 9
- adds r1, r4
- lsls r0, 1
- adds r0, r5
- ldrh r0, [r0]
- strb r0, [r1]
- ldrb r1, [r7]
- lsls r0, r1, 1
- adds r0, r5
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, =gPlayerParty
- adds r0, r2
- bl BattleLoadPlayerMonSpriteGfx
- ldrb r0, [r7]
- movs r1, 0
- bl sub_805B258
- ldrb r0, [r7]
- eors r0, r6
- strb r0, [r7]
-_0805CD38:
- ldr r1, =gBattleBankFunc
- ldr r2, =gActiveBank
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_8058B40
- str r1, [r0]
- mov r3, r9
- strb r3, [r2]
- mov r0, r8
- bl DestroyTask
-_0805CD50:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task05_08033660
-
- thumb_func_start sub_805CD74
-sub_805CD74: @ 805CD74
- push {r4-r6,lr}
- ldr r1, =gBattleBufferA
- ldr r0, =gActiveBank
- ldrb r2, [r0]
- lsls r0, r2, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _0805CDA4
- adds r0, r2, 0
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- bne _0805CDA4
- bl PlayerBufferExecCompleted
- b _0805CE18
- .pool
-_0805CDA4:
- ldr r6, =gBattleSpritesDataPtr
- ldr r0, [r6]
- ldr r5, =gActiveBank
- ldrb r1, [r5]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r2, 0x1
- orrs r1, r2
- strb r1, [r0]
- ldrb r0, [r5]
- lsls r3, r0, 9
- ldr r4, =gBattleBufferA + 4
- adds r1, r3, r4
- subs r2, r4, 0x3
- adds r2, r3, r2
- ldrb r2, [r2]
- subs r4, 0x2
- adds r3, r4
- ldrb r3, [r3]
- bl CreatePartyStatusSummarySprites
- ldr r2, =gUnknown_020244B4
- ldrb r1, [r5]
- adds r1, r2
- movs r3, 0
- strb r0, [r1]
- ldr r0, [r6]
- ldrb r1, [r5]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- strb r3, [r0, 0x5]
- ldrb r2, [r5]
- lsls r0, r2, 9
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0
- beq _0805CE0C
- ldr r0, [r6]
- ldr r1, [r0, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- movs r1, 0x5D
- strb r1, [r0, 0x5]
-_0805CE0C:
- ldr r0, =gBattleBankFunc
- ldrb r1, [r5]
- lsls r1, 2
- adds r1, r0
- ldr r0, =sub_805CE38
- str r0, [r1]
-_0805CE18:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805CD74
-
- thumb_func_start sub_805CE38
-sub_805CE38: @ 805CE38
- push {r4,lr}
- ldr r4, =gBattleSpritesDataPtr
- ldr r0, [r4]
- ldr r3, =gActiveBank
- ldrb r1, [r3]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x5]
- adds r2, r1, 0x1
- strb r2, [r0, 0x5]
- lsls r1, 24
- lsrs r1, 24
- cmp r1, 0x5C
- bls _0805CE70
- ldr r0, [r4]
- ldrb r1, [r3]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0
- strb r1, [r0, 0x5]
- bl PlayerBufferExecCompleted
-_0805CE70:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805CE38
-
- thumb_func_start sub_805CE80
-sub_805CE80: @ 805CE80
- push {lr}
- ldr r0, =gBattleSpritesDataPtr
- ldr r1, [r0]
- ldr r0, =gActiveBank
- ldrb r3, [r0]
- ldr r1, [r1, 0x4]
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0805CEB2
- ldr r2, =gTasks
- ldr r0, =gUnknown_020244B4
- adds r0, r3, r0
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- ldr r1, =sub_8073C30
- str r1, [r0]
-_0805CEB2:
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805CE80
-
- thumb_func_start sub_805CED0
-sub_805CED0: @ 805CED0
- push {r4,lr}
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- movs r1, 0x1
- bl dp11b_obj_free
- ldrb r0, [r4]
- movs r1, 0
- bl dp11b_obj_free
- bl PlayerBufferExecCompleted
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805CED0
-
- thumb_func_start dp01t_33_1_enemy_move
-dp01t_33_1_enemy_move: @ 805CEF4
- push {r4,lr}
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- bl AnimBankSpriteExists
- lsls r0, 24
- cmp r0, 0
- beq _0805CF3A
- ldr r3, =gSprites
- ldr r0, =gBankSpriteIds
- ldrb r1, [r4]
- adds r0, r1, r0
- ldrb r0, [r0]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r3
- ldr r0, =gBattleBufferA
- lsls r1, 9
- adds r0, 0x1
- adds r1, r0
- adds r2, 0x3E
- movs r0, 0x1
- ldrb r1, [r1]
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2]
- ldrb r0, [r4]
- bl sub_805E408
-_0805CF3A:
- bl PlayerBufferExecCompleted
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end dp01t_33_1_enemy_move
-
- thumb_func_start sub_805CF54
-sub_805CF54: @ 805CF54
- push {r4-r6,lr}
- sub sp, 0x4
- ldr r5, =gActiveBank
- ldrb r0, [r5]
- bl mplay_80342A4
- lsls r0, 24
- cmp r0, 0
- bne _0805CFB6
- ldr r4, =gBattleBufferA
- ldrb r2, [r5]
- lsls r1, r2, 9
- adds r0, r4, 0x1
- adds r0, r1, r0
- ldrb r6, [r0]
- adds r0, r4, 0x2
- adds r0, r1, r0
- ldrb r3, [r0]
- adds r4, 0x3
- adds r1, r4
- ldrb r0, [r1]
- lsls r0, 8
- orrs r3, r0
- str r3, [sp]
- adds r0, r2, 0
- adds r1, r2, 0
- adds r3, r6, 0
- bl move_anim_start_t3
- lsls r0, 24
- cmp r0, 0
- beq _0805CFA4
- bl PlayerBufferExecCompleted
- b _0805CFB0
- .pool
-_0805CFA4:
- ldr r0, =gBattleBankFunc
- ldrb r1, [r5]
- lsls r1, 2
- adds r1, r0
- ldr r0, =bx_8030B2C
- str r0, [r1]
-_0805CFB0:
- adds r0, r6, 0
- bl sub_817E32C
-_0805CFB6:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805CF54
-
- thumb_func_start dp01t_35_1_link_standby_message_and_free_vram
-dp01t_35_1_link_standby_message_and_free_vram: @ 805CFC8
- push {r4,r5,lr}
- ldr r5, =gActiveBank
- ldrb r0, [r5]
- lsls r0, 9
- ldr r4, =gBattleBufferA + 2
- adds r0, r4
- bl sub_81851A8
- ldrb r0, [r5]
- lsls r0, 9
- subs r4, 0x1
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _0805D002
- cmp r0, 0x1
- bgt _0805CFF8
- cmp r0, 0
- beq _0805CFFE
- b _0805D020
- .pool
-_0805CFF8:
- cmp r0, 0x2
- beq _0805D01C
- b _0805D020
-_0805CFFE:
- bl b_link_standby_message
-_0805D002:
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- movs r1, 0x1
- bl dp11b_obj_free
- ldrb r0, [r4]
- movs r1, 0
- bl dp11b_obj_free
- b _0805D020
- .pool
-_0805D01C:
- bl b_link_standby_message
-_0805D020:
- bl PlayerBufferExecCompleted
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end dp01t_35_1_link_standby_message_and_free_vram
-
- thumb_func_start sub_805D02C
-sub_805D02C: @ 805D02C
- push {r4,lr}
- ldr r1, =gBattleBufferA
- ldr r4, =gActiveBank
- ldrb r3, [r4]
- lsls r0, r3, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r2, [r0]
- cmp r2, 0x1
- beq _0805D074
- cmp r2, 0x1
- bgt _0805D054
- cmp r2, 0
- beq _0805D05A
- b _0805D084
- .pool
-_0805D054:
- cmp r2, 0x2
- beq _0805D07C
- b _0805D084
-_0805D05A:
- ldr r0, =gActionSelectionCursor
- adds r0, r3, r0
- strb r2, [r0]
- ldr r1, =gMoveSelectionCursor
- ldrb r0, [r4]
- adds r0, r1
- strb r2, [r0]
- b _0805D084
- .pool
-_0805D074:
- ldr r0, =gActionSelectionCursor
- b _0805D07E
- .pool
-_0805D07C:
- ldr r0, =gMoveSelectionCursor
-_0805D07E:
- adds r0, r3, r0
- movs r1, 0
- strb r1, [r0]
-_0805D084:
- bl PlayerBufferExecCompleted
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805D02C
-
- thumb_func_start sub_805D094
-sub_805D094: @ 805D094
- push {r4,r5,lr}
- ldr r5, =gActiveBank
- ldrb r0, [r5]
- lsls r0, 9
- ldr r4, =gBattleBufferA + 4
- adds r0, r4
- bl sub_81851A8
- ldr r2, =gBattleOutcome
- ldrb r0, [r5]
- lsls r0, 9
- subs r1, r4, 0x3
- adds r0, r1
- ldrb r0, [r0]
- strb r0, [r2]
- ldr r0, =gSaveBlock2Ptr
- ldr r3, [r0]
- ldrb r0, [r5]
- lsls r0, 9
- subs r4, 0x2
- adds r0, r4
- ldrb r0, [r0]
- ldr r1, =0x00000ca9
- adds r3, r1
- movs r1, 0x1
- ands r1, r0
- lsls r1, 3
- ldrb r2, [r3]
- movs r0, 0x9
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- movs r0, 0x5
- bl FadeOutMapMusic
- movs r0, 0x3
- bl BeginFastPaletteFade
- bl PlayerBufferExecCompleted
- ldr r1, =gBattleBankFunc
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_80587B0
- str r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_805D094
-
- thumb_func_start nullsub_22
-nullsub_22: @ 805D114
- bx lr
- thumb_func_end nullsub_22
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/battle_controller_player_partner.s b/asm/battle_controller_player_partner.s
deleted file mode 100644
index f82e1c3c3..000000000
--- a/asm/battle_controller_player_partner.s
+++ /dev/null
@@ -1,6347 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
-
- thumb_func_start nullsub_77
-nullsub_77: @ 81BADF0
- bx lr
- thumb_func_end nullsub_77
-
- thumb_func_start SetBankFuncToPlayerPartnerBufferRunCommand
-SetBankFuncToPlayerPartnerBufferRunCommand: @ 81BADF4
- ldr r1, =gBattleBankFunc
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, =PlayerPartnerBufferRunCommand
- str r1, [r0]
- bx lr
- .pool
- thumb_func_end SetBankFuncToPlayerPartnerBufferRunCommand
-
- thumb_func_start PlayerPartnerBufferRunCommand
-PlayerPartnerBufferRunCommand: @ 81BAE10
- push {lr}
- ldr r2, =gBattleExecBuffer
- ldr r1, =gBitTable
- ldr r0, =gActiveBank
- ldrb r3, [r0]
- lsls r0, r3, 2
- adds r0, r1
- ldr r1, [r2]
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _081BAE5C
- ldr r0, =gBattleBufferA
- lsls r1, r3, 9
- adds r1, r0
- ldrb r0, [r1]
- cmp r0, 0x38
- bhi _081BAE58
- ldr r0, =gPlayerPartnerBufferCommands
- ldrb r1, [r1]
- lsls r1, 2
- adds r1, r0
- ldr r0, [r1]
- bl _call_via_r0
- b _081BAE5C
- .pool
-_081BAE58:
- bl PlayerPartnerBufferExecCompleted
-_081BAE5C:
- pop {r0}
- bx r0
- thumb_func_end PlayerPartnerBufferRunCommand
-
- thumb_func_start sub_81BAE60
-sub_81BAE60: @ 81BAE60
- push {lr}
- ldr r2, =gSprites
- ldr r1, =gBankSpriteIds
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, [r0]
- ldr r0, =SpriteCallbackDummy
- cmp r1, r0
- bne _081BAE84
- bl PlayerPartnerBufferExecCompleted
-_081BAE84:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BAE60
-
- thumb_func_start sub_81BAE98
-sub_81BAE98: @ 81BAE98
- push {r4-r6,lr}
- ldr r6, =gSprites
- ldr r5, =gBankSpriteIds
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r6, 0
- adds r1, 0x1C
- adds r0, r1
- ldr r1, [r0]
- ldr r0, =SpriteCallbackDummy
- cmp r1, r0
- bne _081BAEE8
- movs r0, 0
- bl nullsub_25
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- bl FreeSpriteOamMatrix
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- bl DestroySprite
- bl PlayerPartnerBufferExecCompleted
-_081BAEE8:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BAE98
-
- thumb_func_start sub_81BAF00
-sub_81BAF00: @ 81BAF00
- push {r4,lr}
- ldr r4, =gBattleSpritesDataPtr
- ldr r1, [r4]
- ldr r3, =gActiveBank
- ldrb r0, [r3]
- ldr r2, [r1, 0x4]
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r0, [r1, 0x9]
- subs r0, 0x1
- strb r0, [r1, 0x9]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- bne _081BAF38
- ldr r0, [r4]
- ldrb r1, [r3]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0
- strb r1, [r0, 0x9]
- bl PlayerPartnerBufferExecCompleted
-_081BAF38:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BAF00
-
- thumb_func_start sub_81BAF48
-sub_81BAF48: @ 81BAF48
- push {r4-r6,lr}
- movs r6, 0
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _081BAF6C
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _081BAFA0
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _081BAFA0
-_081BAF6C:
- ldr r2, =gSprites
- ldr r1, =gHealthBoxesIds
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, [r0]
- ldr r0, =SpriteCallbackDummy
- cmp r1, r0
- bne _081BAFD8
- b _081BAFD6
- .pool
-_081BAFA0:
- ldr r2, =gSprites
- ldr r5, =gHealthBoxesIds
- ldr r0, =gActiveBank
- ldrb r3, [r0]
- adds r0, r3, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r4, r2, 0
- adds r4, 0x1C
- adds r0, r4
- ldr r2, [r0]
- ldr r0, =SpriteCallbackDummy
- cmp r2, r0
- bne _081BAFD8
- movs r0, 0x2
- eors r3, r0
- adds r0, r3, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldr r0, [r0]
- cmp r0, r2
- bne _081BAFD8
-_081BAFD6:
- movs r6, 0x1
-_081BAFD8:
- bl IsCryPlayingOrClearCrySongs
- lsls r0, 24
- cmp r0, 0
- beq _081BAFE4
- movs r6, 0
-_081BAFE4:
- cmp r6, 0
- beq _081BB00A
- ldr r0, =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r3, =gActiveBank
- ldrb r1, [r3]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x3
- strb r1, [r0, 0x9]
- ldr r1, =gBattleBankFunc
- ldrb r0, [r3]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_81BAF00
- str r1, [r0]
-_081BB00A:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BAF48
-
- thumb_func_start sub_81BB02C
-sub_81BB02C: @ 81BB02C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r0, =gBattleSpritesDataPtr
- mov r12, r0
- ldr r0, [r0]
- ldr r7, =gActiveBank
- ldrb r2, [r7]
- ldr r3, [r0, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r4, r0, r3
- ldrb r1, [r4]
- movs r5, 0x8
- adds r0, r5, 0
- ands r0, r1
- cmp r0, 0
- beq _081BB058
- b _081BB196
-_081BB058:
- movs r1, 0x2
- mov r8, r1
- adds r1, r2, 0
- mov r0, r8
- eors r1, r0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrb r1, [r0]
- adds r0, r5, 0
- ands r0, r1
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0
- beq _081BB07A
- b _081BB196
-_081BB07A:
- ldr r1, =gSprites
- mov r10, r1
- ldr r0, =gUnknown_03005D7C
- mov r9, r0
- adds r0, r2, r0
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- mov r5, r10
- adds r5, 0x1C
- adds r0, r5
- ldr r3, [r0]
- ldr r0, =SpriteCallbackDummy
- cmp r3, r0
- bne _081BB196
- ldr r0, =gBankSpriteIds
- adds r0, r2, r0
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r0, [r0]
- cmp r0, r3
- bne _081BB196
- ldrb r0, [r4, 0x9]
- adds r0, 0x1
- strb r0, [r4, 0x9]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _081BB196
- mov r1, r12
- ldr r0, [r1]
- ldrb r1, [r7]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- strb r6, [r0, 0x9]
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _081BB134
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- bne _081BB134
- ldrb r0, [r7]
- mov r1, r8
- eors r0, r1
- add r0, r9
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- add r0, r10
- bl DestroySprite
- ldr r4, =gHealthBoxesIds
- ldrb r0, [r7]
- mov r1, r8
- eors r1, r0
- adds r0, r1, r4
- ldrb r0, [r0]
- ldr r2, =gBattlePartyID
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, =gPlayerParty
- adds r1, r2
- movs r2, 0
- bl UpdateHealthboxAttribute
- ldrb r0, [r7]
- mov r1, r8
- eors r0, r1
- bl sub_8076918
- ldrb r0, [r7]
- mov r1, r8
- eors r0, r1
- adds r0, r4
- ldrb r0, [r0]
- bl SetHealthboxSpriteVisible
-_081BB134:
- ldr r1, =gUnknown_03005D7C
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSprites
- adds r0, r1
- bl DestroySprite
- ldr r5, =gHealthBoxesIds
- ldrb r1, [r4]
- adds r0, r1, r5
- ldrb r0, [r0]
- ldr r2, =gBattlePartyID
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, =gPlayerParty
- adds r1, r2
- movs r2, 0
- bl UpdateHealthboxAttribute
- ldrb r0, [r4]
- bl sub_8076918
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl SetHealthboxSpriteVisible
- ldr r0, =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r2, [r0, 0x8]
- ldrb r1, [r2, 0x9]
- movs r0, 0x2
- negs r0, r0
- ands r0, r1
- strb r0, [r2, 0x9]
- ldr r1, =gBattleBankFunc
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_81BAF48
- str r1, [r0]
-_081BB196:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BB02C
-
- thumb_func_start sub_81BB1D4
-sub_81BB1D4: @ 81BB1D4
- push {lr}
- ldr r2, =gSprites
- ldr r1, =gBankSpriteIds
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r0, r2
- adds r0, r1, 0
- adds r0, 0x3F
- ldrb r0, [r0]
- lsls r0, 27
- cmp r0, 0
- bge _081BB202
- movs r2, 0x24
- ldrsh r0, [r1, r2]
- cmp r0, 0
- bne _081BB202
- bl PlayerPartnerBufferExecCompleted
-_081BB202:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BB1D4
-
- thumb_func_start bx_t3_healthbar_update
-bx_t3_healthbar_update: @ 81BB214
- push {r4-r6,lr}
- ldr r5, =gActiveBank
- ldrb r0, [r5]
- ldr r6, =gHealthBoxesIds
- adds r1, r0, r6
- ldrb r1, [r1]
- movs r2, 0
- movs r3, 0
- bl sub_8074AA0
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- ldrb r0, [r5]
- adds r0, r6
- ldrb r0, [r0]
- bl SetHealthboxSpriteVisible
- lsls r4, 16
- asrs r1, r4, 16
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _081BB25C
- ldrb r0, [r5]
- adds r0, r6
- ldrb r0, [r0]
- movs r2, 0
- bl UpdateHpTextInHealthbox
- b _081BB276
- .pool
-_081BB25C:
- ldr r2, =gBattlePartyID
- ldrb r1, [r5]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, =gPlayerParty
- adds r0, r2
- bl sub_805E990
- bl PlayerPartnerBufferExecCompleted
-_081BB276:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end bx_t3_healthbar_update
-
- thumb_func_start sub_81BB284
-sub_81BB284: @ 81BB284
- push {lr}
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- bne _081BB296
- bl PlayerPartnerBufferExecCompleted
-_081BB296:
- pop {r0}
- bx r0
- thumb_func_end sub_81BB284
-
- thumb_func_start sub_81BB29C
-sub_81BB29C: @ 81BB29C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x10
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- ldr r1, =gTasks
- lsls r0, 2
- add r0, r9
- lsls r0, 3
- adds r0, r1
- mov r8, r0
- ldrb r0, [r0, 0x8]
- mov r10, r0
- mov r1, r8
- ldrb r7, [r1, 0xC]
- str r7, [sp, 0x8]
- ldrh r2, [r1, 0xA]
- str r2, [sp, 0xC]
- bl IsDoubleBattle
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _081BB2E2
- ldr r1, =gBattlePartyID
- lsls r0, r7, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r10, r0
- bne _081BB2E2
- b _081BB3F8
-_081BB2E2:
- movs r0, 0x64
- mov r1, r10
- muls r1, r0
- ldr r0, =gPlayerParty
- adds r6, r1, r0
- adds r0, r6, 0
- movs r1, 0xB
- bl GetMonData
- adds r5, r0, 0
- lsls r5, 16
- lsrs r5, 16
- adds r0, r6, 0
- movs r1, 0x38
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r6, 0
- movs r1, 0x19
- bl GetMonData
- str r0, [sp, 0x4]
- ldr r3, =gExperienceTables
- adds r4, 0x1
- lsls r4, 2
- ldr r2, =gBaseStats
- lsls r1, r5, 3
- subs r1, r5
- lsls r1, 2
- adds r1, r2
- ldrb r2, [r1, 0x13]
- movs r1, 0xCA
- lsls r1, 1
- muls r1, r2
- adds r4, r1
- adds r4, r3
- ldr r2, [r4]
- str r2, [sp]
- ldr r3, [sp, 0xC]
- lsls r1, r3, 16
- asrs r1, 16
- adds r0, r1
- cmp r0, r2
- bcc _081BB3D0
- adds r0, r6, 0
- movs r1, 0x19
- mov r2, sp
- bl SetMonData
- adds r0, r6, 0
- bl CalculateMonStats
- ldr r2, [sp]
- add r0, sp, 0x4
- ldrh r0, [r0]
- subs r2, r0
- ldr r0, [sp, 0xC]
- subs r2, r0, r2
- ldr r4, =gActiveBank
- ldrb r5, [r4]
- strb r7, [r4]
- lsls r2, 16
- lsrs r2, 16
- movs r0, 0x1
- movs r1, 0xB
- bl EmitCmd33
- strb r5, [r4]
- bl IsDoubleBattle
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _081BB3B8
- ldr r2, =gBattlePartyID
- lsls r0, r7, 1
- adds r0, r2
- mov r1, r10
- ldrh r0, [r0]
- cmp r1, r0
- beq _081BB396
- movs r0, 0x2
- eors r7, r0
- lsls r0, r7, 1
- adds r0, r2
- ldrh r0, [r0]
- cmp r1, r0
- bne _081BB3B8
-_081BB396:
- ldr r0, =sub_81BB628
- b _081BB3FA
- .pool
-_081BB3B8:
- ldr r0, =gTasks
- mov r2, r9
- lsls r1, r2, 2
- add r1, r9
- lsls r1, 3
- adds r1, r0
- ldr r0, =sub_81BB740
- b _081BB3FC
- .pool
-_081BB3D0:
- str r0, [sp, 0x4]
- add r2, sp, 0x4
- adds r0, r6, 0
- movs r1, 0x19
- bl SetMonData
- ldr r1, =gBattleBankFunc
- ldr r3, [sp, 0x8]
- lsls r0, r3, 2
- adds r0, r1
- ldr r1, =sub_81BB284
- str r1, [r0]
- mov r0, r9
- bl DestroyTask
- b _081BB3FE
- .pool
-_081BB3F8:
- ldr r0, =sub_81BB414
-_081BB3FA:
- mov r1, r8
-_081BB3FC:
- str r0, [r1]
-_081BB3FE:
- add sp, 0x10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BB29C
-
- thumb_func_start sub_81BB414
-sub_81BB414: @ 81BB414
- push {r4-r6,lr}
- mov r6, r10
- mov r5, r9
- mov r4, r8
- push {r4-r6}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- ldr r1, =gTasks
- lsls r2, r0, 2
- mov r8, r2
- add r8, r0
- mov r0, r8
- lsls r0, 3
- mov r8, r0
- add r8, r1
- mov r2, r8
- ldrb r1, [r2, 0x8]
- movs r0, 0xA
- ldrsh r2, [r2, r0]
- mov r9, r2
- mov r2, r8
- ldrb r2, [r2, 0xC]
- mov r10, r2
- movs r0, 0x64
- adds r6, r1, 0
- muls r6, r0
- ldr r0, =gPlayerParty
- adds r6, r0
- adds r0, r6, 0
- movs r1, 0x38
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r6, 0
- movs r1, 0xB
- bl GetMonData
- adds r5, r0, 0
- lsls r5, 16
- lsrs r5, 16
- adds r0, r6, 0
- movs r1, 0x19
- bl GetMonData
- adds r3, r0, 0
- ldr r6, =gExperienceTables
- lsls r1, r4, 2
- ldr r2, =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, =gHealthBoxesIds
- add r0, r10
- ldrb r1, [r0]
- mov r0, r9
- negs r0, r0
- str r0, [sp]
- mov r0, r10
- bl SetBattleBarStruct
- movs r0, 0x21
- bl PlaySE
- ldr r0, =sub_81BB4E4
- mov r1, r8
- str r0, [r1]
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BB414
-
- thumb_func_start sub_81BB4E4
-sub_81BB4E4: @ 81BB4E4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r1, =gTasks
- lsls r0, 2
- add r0, r8
- lsls r0, 3
- adds r6, r0, r1
- ldrh r1, [r6, 0x1C]
- movs r2, 0x1C
- ldrsh r0, [r6, r2]
- cmp r0, 0xC
- bgt _081BB514
- adds r0, r1, 0x1
- strh r0, [r6, 0x1C]
- b _081BB610
- .pool
-_081BB514:
- ldrb r0, [r6, 0x8]
- mov r9, r0
- ldrh r2, [r6, 0xA]
- mov r10, r2
- ldrb r7, [r6, 0xC]
- ldr r5, =gHealthBoxesIds
- adds r5, r7, r5
- ldrb r1, [r5]
- adds r0, r7, 0
- movs r2, 0x1
- movs r3, 0
- bl sub_8074AA0
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- ldrb r0, [r5]
- bl SetHealthboxSpriteVisible
- lsls r4, 16
- asrs r4, 16
- movs r0, 0x1
- negs r0, r0
- cmp r4, r0
- bne _081BB610
- movs r0, 0x21
- bl m4aSongNumStop
- movs r0, 0x64
- mov r1, r9
- muls r1, r0
- ldr r0, =gPlayerParty
- adds r5, r1, r0
- adds r0, r5, 0
- movs r1, 0x38
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r5, 0
- movs r1, 0x19
- bl GetMonData
- str r0, [sp, 0x4]
- adds r0, r5, 0
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- ldr r3, =gExperienceTables
- adds r4, 0x1
- lsls r4, 2
- ldr r2, =gBaseStats
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r1, [r1, 0x13]
- movs r0, 0xCA
- lsls r0, 1
- muls r0, r1
- adds r4, r0
- adds r4, r3
- ldr r1, [r4]
- str r1, [sp]
- mov r2, r10
- lsls r0, r2, 16
- asrs r4, r0, 16
- ldr r0, [sp, 0x4]
- adds r0, r4
- cmp r0, r1
- blt _081BB5F4
- adds r0, r5, 0
- movs r1, 0x19
- mov r2, sp
- bl SetMonData
- adds r0, r5, 0
- bl CalculateMonStats
- ldr r2, [sp]
- add r0, sp, 0x4
- ldrh r0, [r0]
- subs r2, r0
- subs r2, r4, r2
- ldr r4, =gActiveBank
- ldrb r5, [r4]
- strb r7, [r4]
- lsls r2, 16
- lsrs r2, 16
- movs r0, 0x1
- movs r1, 0xB
- bl EmitCmd33
- strb r5, [r4]
- ldr r0, =sub_81BB628
- str r0, [r6]
- b _081BB610
- .pool
-_081BB5F4:
- str r0, [sp, 0x4]
- add r2, sp, 0x4
- adds r0, r5, 0
- movs r1, 0x19
- bl SetMonData
- ldr r1, =gBattleBankFunc
- lsls r0, r7, 2
- adds r0, r1
- ldr r1, =sub_81BB284
- str r1, [r0]
- mov r0, r8
- bl DestroyTask
-_081BB610:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BB4E4
-
- thumb_func_start sub_81BB628
-sub_81BB628: @ 81BB628
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- ldrb r4, [r0, 0xC]
- ldrb r6, [r0, 0x8]
- bl IsDoubleBattle
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _081BB65C
- ldr r1, =gBattlePartyID
- movs r0, 0x2
- adds r2, r4, 0
- eors r2, r0
- lsls r0, r2, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r6, r0
- bne _081BB65C
- adds r4, r2, 0
-_081BB65C:
- adds r0, r4, 0
- adds r1, r4, 0
- adds r2, r4, 0
- movs r3, 0
- bl move_anim_start_t4
- ldr r0, =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r0
- ldr r0, =sub_81BB688
- str r0, [r1]
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BB628
-
- thumb_func_start sub_81BB688
-sub_81BB688: @ 81BB688
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r1, =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r2, r0, r1
- ldrb r5, [r2, 0xC]
- ldr r0, =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r1, [r0, 0x4]
- lsls r0, r5, 1
- adds r0, r5
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _081BB72A
- ldrb r4, [r2, 0x8]
- movs r0, 0x64
- adds r1, r4, 0
- muls r1, r0
- ldr r0, =gPlayerParty
- adds r7, r1, r0
- adds r0, r7, 0
- movs r1, 0x38
- bl GetMonData
- bl IsDoubleBattle
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _081BB708
- ldr r1, =gBattlePartyID
- movs r0, 0x2
- adds r2, r5, 0
- eors r2, r0
- lsls r0, r2, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r4, r0
- bne _081BB708
- ldr r0, =gHealthBoxesIds
- adds r0, r2, r0
- ldrb r0, [r0]
- adds r1, r7, 0
- movs r2, 0
- bl UpdateHealthboxAttribute
- b _081BB71C
- .pool
-_081BB708:
- ldr r0, =gHealthBoxesIds
- adds r0, r5, r0
- ldrb r0, [r0]
- movs r1, 0x64
- muls r1, r4
- ldr r2, =gPlayerParty
- adds r1, r2
- movs r2, 0
- bl UpdateHealthboxAttribute
-_081BB71C:
- ldr r0, =gTasks
- lsls r1, r6, 2
- adds r1, r6
- lsls r1, 3
- adds r1, r0
- ldr r0, =sub_81BB740
- str r0, [r1]
-_081BB72A:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BB688
-
- thumb_func_start sub_81BB740
-sub_81BB740: @ 81BB740
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- ldr r0, =gTasks
- lsls r4, r5, 2
- adds r4, r5
- lsls r4, 3
- adds r4, r0
- ldrb r1, [r4, 0x8]
- movs r0, 0x64
- muls r0, r1
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x38
- bl GetMonData
- ldrb r0, [r4, 0xC]
- ldr r1, =gBattleBankFunc
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_81BB284
- str r1, [r0]
- adds r0, r5, 0
- bl DestroyTask
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BB740
-
- thumb_func_start sub_81BB78C
-sub_81BB78C: @ 81BB78C
- push {r4-r6,lr}
- ldr r6, =gSprites
- ldr r5, =gBankSpriteIds
- ldr r4, =gActiveBank
- ldrb r2, [r4]
- adds r0, r2, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- movs r3, 0x22
- ldrsh r1, [r0, r3]
- movs r3, 0x26
- ldrsh r0, [r0, r3]
- adds r1, r0
- cmp r1, 0xA0
- ble _081BB808
- ldr r1, =gBattlePartyID
- lsls r0, r2, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- bl nullsub_24
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- ldrb r0, [r0, 0x3]
- lsls r0, 26
- lsrs r0, 27
- bl FreeOamMatrix
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- bl DestroySprite
- ldr r1, =gHealthBoxesIds
- ldrb r0, [r4]
- adds r0, r1
- ldrb r0, [r0]
- bl SetHealthboxSpriteInvisible
- bl PlayerPartnerBufferExecCompleted
-_081BB808:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BB78C
-
- thumb_func_start sub_81BB828
-sub_81BB828: @ 81BB828
- push {r4-r6,lr}
- ldr r0, =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r6, =gActiveBank
- ldrb r2, [r6]
- ldr r1, [r0, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _081BB87C
- ldr r5, =gBankSpriteIds
- adds r0, r2, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, =gSprites
- adds r0, r4
- bl FreeSpriteOamMatrix
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl DestroySprite
- ldr r1, =gHealthBoxesIds
- ldrb r0, [r6]
- adds r0, r1
- ldrb r0, [r0]
- bl SetHealthboxSpriteInvisible
- bl PlayerPartnerBufferExecCompleted
-_081BB87C:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BB828
-
- thumb_func_start sub_81BB898
-sub_81BB898: @ 81BB898
- push {lr}
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- bne _081BB8AA
- bl PlayerPartnerBufferExecCompleted
-_081BB8AA:
- pop {r0}
- bx r0
- thumb_func_end sub_81BB898
-
- thumb_func_start bx_blink_t3
-bx_blink_t3: @ 81BB8B0
- push {r4,lr}
- ldr r1, =gBankSpriteIds
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- ldr r2, =gSprites
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r4, r0, r2
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- cmp r0, 0x20
- bne _081BB8FC
- movs r3, 0
- movs r0, 0
- strh r0, [r4, 0x30]
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r1, [r2]
- subs r0, 0x5
- ands r0, r1
- strb r0, [r2]
- ldr r0, =gDoingBattleAnim
- strb r3, [r0]
- bl PlayerPartnerBufferExecCompleted
- b _081BB926
- .pool
-_081BB8FC:
- ldrh r0, [r4, 0x30]
- movs r1, 0x3
- ands r0, r1
- cmp r0, 0
- bne _081BB920
- adds r3, r4, 0
- adds r3, 0x3E
- ldrb r2, [r3]
- lsls r0, r2, 29
- lsrs r0, 31
- movs r1, 0x1
- eors r1, r0
- lsls r1, 2
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
-_081BB920:
- ldrh r0, [r4, 0x30]
- adds r0, 0x1
- strh r0, [r4, 0x30]
-_081BB926:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end bx_blink_t3
-
- thumb_func_start sub_81BB92C
-sub_81BB92C: @ 81BB92C
- push {r4,lr}
- ldr r2, =gSprites
- ldr r0, =gHealthBoxesIds
- ldr r4, =gActiveBank
- ldrb r3, [r4]
- adds r0, r3, r0
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, [r0]
- ldr r0, =SpriteCallbackDummy
- cmp r1, r0
- bne _081BB97E
- adds r0, r3, 0
- bl sub_805E408
- ldr r0, =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldrb r2, [r4]
- ldr r1, [r0]
- lsls r0, r2, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _081BB972
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x6
- bl move_anim_start_t4
-_081BB972:
- ldr r0, =gBattleBankFunc
- ldrb r1, [r4]
- lsls r1, 2
- adds r1, r0
- ldr r0, =dp01t_35_3_free_vram
- str r0, [r1]
-_081BB97E:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BB92C
-
- thumb_func_start dp01t_35_3_free_vram
-dp01t_35_3_free_vram: @ 81BB9A0
- push {lr}
- ldr r0, =gBattleSpritesDataPtr
- ldr r1, [r0]
- ldr r0, =gActiveBank
- ldrb r3, [r0]
- ldr r1, [r1, 0x4]
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _081BB9DC
- ldr r2, =gSprites
- ldr r0, =gBankSpriteIds
- adds r0, r3, r0
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, [r0]
- ldr r0, =SpriteCallbackDummy
- cmp r1, r0
- bne _081BB9DC
- bl PlayerPartnerBufferExecCompleted
-_081BB9DC:
- pop {r0}
- bx r0
- .pool
- thumb_func_end dp01t_35_3_free_vram
-
- thumb_func_start sub_81BB9F4
-sub_81BB9F4: @ 81BB9F4
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r3, =gBattleSpritesDataPtr
- ldr r0, [r3]
- ldr r7, =gActiveBank
- ldrb r1, [r7]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r2, r0, r2
- ldrb r1, [r2, 0x1]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _081BBAB0
- ldrb r1, [r2]
- movs r0, 0x7F
- ands r0, r1
- strb r0, [r2]
- ldr r0, [r3]
- ldrb r2, [r7]
- ldr r0, [r0, 0x4]
- lsls r1, r2, 1
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r2, [r1, 0x1]
- movs r0, 0x2
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0x1]
- ldr r4, =0x000027f9
- adds r0, r4, 0
- bl FreeSpriteTilesByTag
- adds r0, r4, 0
- bl FreeSpritePaletteByTag
- ldr r0, =c3_0802FDF4
- movs r1, 0xA
- bl CreateTask
- ldr r0, =gBattlePartyID
- mov r8, r0
- ldrb r1, [r7]
- lsls r0, r1, 1
- add r0, r8
- ldrh r0, [r0]
- movs r6, 0x64
- muls r0, r6
- ldr r5, =gPlayerParty
- adds r0, r5
- bl sub_805E990
- ldr r1, =gBankSpriteIds
- ldrb r0, [r7]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSprites
- adds r0, r1
- movs r1, 0
- bl StartSpriteAnim
- ldr r4, =gHealthBoxesIds
- ldrb r1, [r7]
- adds r0, r1, r4
- ldrb r0, [r0]
- lsls r1, 1
- add r1, r8
- ldrh r1, [r1]
- muls r1, r6
- adds r1, r5
- movs r2, 0
- bl UpdateHealthboxAttribute
- ldrb r0, [r7]
- bl sub_8076918
- ldrb r0, [r7]
- adds r0, r4
- ldrb r0, [r0]
- bl SetHealthboxSpriteVisible
- ldr r1, =gBattleBankFunc
- ldrb r0, [r7]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_81BB92C
- str r1, [r0]
-_081BBAB0:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BB9F4
-
- thumb_func_start sub_81BBAE8
-sub_81BBAE8: @ 81BBAE8
- push {r4-r6,lr}
- ldr r6, =gBattleSpritesDataPtr
- ldr r0, [r6]
- ldr r4, =gActiveBank
- ldrb r2, [r4]
- ldr r1, [r0, 0x4]
- lsls r3, r2, 1
- adds r0, r3, r2
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x88
- ands r0, r1
- cmp r0, 0
- bne _081BBB1A
- ldr r0, =gBattlePartyID
- adds r0, r3, r0
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, =gPlayerParty
- adds r1, r0
- adds r0, r2, 0
- bl sub_8172EF0
-_081BBB1A:
- ldr r5, =gSprites
- ldr r0, =gUnknown_03005D7C
- ldrb r2, [r4]
- adds r0, r2, r0
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r3, r0, 2
- adds r0, r5, 0
- adds r0, 0x1C
- adds r0, r3, r0
- ldr r1, [r0]
- ldr r0, =SpriteCallbackDummy
- cmp r1, r0
- bne _081BBB60
- ldr r0, [r6]
- ldr r1, [r0, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- bne _081BBB60
- adds r0, r3, r5
- bl DestroySprite
- ldr r1, =gBattleBankFunc
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_81BB9F4
- str r1, [r0]
-_081BBB60:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BBAE8
-
- thumb_func_start PlayerPartnerBufferExecCompleted
-PlayerPartnerBufferExecCompleted: @ 81BBB8C
- push {r4,lr}
- sub sp, 0x4
- ldr r1, =gBattleBankFunc
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, =PlayerPartnerBufferRunCommand
- str r1, [r0]
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- beq _081BBBE0
- bl GetMultiplayerId
- mov r1, sp
- strb r0, [r1]
- movs r0, 0x2
- movs r1, 0x4
- mov r2, sp
- bl PrepareBufferDataTransferLink
- ldr r1, =gBattleBufferA
- ldrb r0, [r4]
- lsls r0, 9
- adds r0, r1
- movs r1, 0x38
- strb r1, [r0]
- b _081BBBF2
- .pool
-_081BBBE0:
- ldr r2, =gBattleExecBuffer
- ldr r1, =gBitTable
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- ldr r0, [r2]
- bics r0, r1
- str r0, [r2]
-_081BBBF2:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end PlayerPartnerBufferExecCompleted
-
- thumb_func_start sub_81BBC04
-sub_81BBC04: @ 81BBC04
- push {lr}
- ldr r0, =gBattleSpritesDataPtr
- ldr r2, [r0]
- ldr r0, =gActiveBank
- ldrb r1, [r0]
- ldr r2, [r2, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- bne _081BBC26
- bl PlayerPartnerBufferExecCompleted
-_081BBC26:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BBC04
-
- thumb_func_start bx_80E8A6C
-bx_80E8A6C: @ 81BBC34
- push {lr}
- ldr r0, =gBattleSpritesDataPtr
- ldr r2, [r0]
- ldr r0, =gActiveBank
- ldrb r1, [r0]
- ldr r2, [r2, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- bne _081BBC56
- bl PlayerPartnerBufferExecCompleted
-_081BBC56:
- pop {r0}
- bx r0
- .pool
- thumb_func_end bx_80E8A6C
-
- thumb_func_start dp01t_00_3_getattr
-dp01t_00_3_getattr: @ 81BBC64
- push {r4-r6,lr}
- sub sp, 0x100
- movs r6, 0
- ldr r1, =gBattleBufferA
- ldr r0, =gActiveBank
- ldrb r2, [r0]
- lsls r0, r2, 9
- adds r1, 0x2
- adds r1, r0, r1
- ldrb r0, [r1]
- cmp r0, 0
- bne _081BBC9C
- ldr r0, =gBattlePartyID
- lsls r1, r2, 1
- adds r1, r0
- ldrb r0, [r1]
- mov r1, sp
- bl dp01_getattr_by_ch1_for_player_pokemon
- adds r6, r0, 0
- b _081BBCBE
- .pool
-_081BBC9C:
- ldrb r4, [r1]
- movs r5, 0
-_081BBCA0:
- movs r0, 0x1
- ands r0, r4
- cmp r0, 0
- beq _081BBCB6
- lsls r0, r5, 24
- lsrs r0, 24
- mov r2, sp
- adds r1, r2, r6
- bl dp01_getattr_by_ch1_for_player_pokemon
- adds r6, r0
-_081BBCB6:
- lsrs r4, 1
- adds r5, 0x1
- cmp r5, 0x5
- ble _081BBCA0
-_081BBCBE:
- lsls r1, r6, 16
- lsrs r1, 16
- movs r0, 0x1
- mov r2, sp
- bl EmitDataTransfer
- bl PlayerPartnerBufferExecCompleted
- add sp, 0x100
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end dp01t_00_3_getattr
-
- thumb_func_start dp01_getattr_by_ch1_for_player_pokemon
-dp01_getattr_by_ch1_for_player_pokemon: @ 81BBCD8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x90
- adds r7, r1, 0
- lsls r0, 24
- lsrs r5, r0, 24
- movs r6, 0
- ldr r2, =gBattleBufferA
- ldr r3, =gActiveBank
- ldrb r0, [r3]
- lsls r0, 9
- adds r1, r2, 0x1
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x3B
- bls _081BBD02
- bl _081BC46E
-_081BBD02:
- lsls r0, 2
- ldr r1, =_081BBD18
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_081BBD18:
- .4byte _081BBE08
- .4byte _081BC02C
- .4byte _081BC03C
- .4byte _081BC04C
- .4byte _081BC0B4
- .4byte _081BC0B4
- .4byte _081BC0B4
- .4byte _081BC0B4
- .4byte _081BC0D0
- .4byte _081BC10C
- .4byte _081BC10C
- .4byte _081BC10C
- .4byte _081BC10C
- .4byte _081BC46E
- .4byte _081BC46E
- .4byte _081BC46E
- .4byte _081BC46E
- .4byte _081BC128
- .4byte _081BC138
- .4byte _081BC168
- .4byte _081BC178
- .4byte _081BC188
- .4byte _081BC198
- .4byte _081BC1A8
- .4byte _081BC1B8
- .4byte _081BC1C8
- .4byte _081BC1D8
- .4byte _081BC1E8
- .4byte _081BC1F8
- .4byte _081BC208
- .4byte _081BC218
- .4byte _081BC228
- .4byte _081BC278
- .4byte _081BC288
- .4byte _081BC298
- .4byte _081BC2A8
- .4byte _081BC2B8
- .4byte _081BC2C8
- .4byte _081BC2D8
- .4byte _081BC2E8
- .4byte _081BC2F8
- .4byte _081BC32C
- .4byte _081BC33C
- .4byte _081BC34C
- .4byte _081BC35C
- .4byte _081BC36C
- .4byte _081BC37C
- .4byte _081BC38C
- .4byte _081BC39C
- .4byte _081BC3BC
- .4byte _081BC3CC
- .4byte _081BC3DC
- .4byte _081BC3EC
- .4byte _081BC3FC
- .4byte _081BC40C
- .4byte _081BC41C
- .4byte _081BC42C
- .4byte _081BC43C
- .4byte _081BC44C
- .4byte _081BC45C
-_081BBE08:
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, =gPlayerParty
- adds r4, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- mov r1, sp
- strh r0, [r1]
- adds r0, r4, 0
- movs r1, 0xC
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0x2E]
- movs r6, 0
- add r0, sp, 0x24
- mov r9, r0
- movs r1, 0x3B
- add r1, sp
- mov r10, r1
- mov r2, sp
- adds r2, 0x2B
- str r2, [sp, 0x80]
- mov r0, sp
- adds r0, 0x2A
- str r0, [sp, 0x7C]
- mov r1, sp
- adds r1, 0x68
- str r1, [sp, 0x8C]
- adds r2, 0x5
- str r2, [sp, 0x84]
- adds r0, 0x12
- str r0, [sp, 0x88]
- mov r8, r4
- add r4, sp, 0xC
-_081BBE54:
- adds r1, r6, 0
- adds r1, 0xD
- mov r0, r8
- bl GetMonData
- strh r0, [r4]
- adds r1, r6, 0
- adds r1, 0x11
- mov r0, r8
- bl GetMonData
- mov r2, r9
- adds r1, r2, r6
- strb r0, [r1]
- adds r4, 0x2
- adds r6, 0x1
- cmp r6, 0x3
- ble _081BBE54
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, =gPlayerParty
- adds r4, r0
- adds r0, r4, 0
- movs r1, 0x15
- bl GetMonData
- mov r1, r10
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x20
- bl GetMonData
- ldr r2, [sp, 0x80]
- strb r0, [r2]
- adds r0, r4, 0
- movs r1, 0x19
- bl GetMonData
- str r0, [sp, 0x44]
- adds r0, r4, 0
- movs r1, 0x27
- bl GetMonData
- mov r3, sp
- movs r5, 0x1F
- ands r0, r5
- ldrb r2, [r3, 0x14]
- movs r1, 0x20
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r3, 0x14]
- adds r0, r4, 0
- movs r1, 0x28
- bl GetMonData
- mov r3, sp
- movs r6, 0x1F
- ands r0, r6
- lsls r0, 5
- ldrh r2, [r3, 0x14]
- ldr r1, =0xfffffc1f
- ands r1, r2
- orrs r1, r0
- strh r1, [r3, 0x14]
- adds r0, r4, 0
- movs r1, 0x29
- bl GetMonData
- mov r3, sp
- ands r0, r5
- lsls r0, 2
- ldrb r2, [r3, 0x15]
- movs r1, 0x7D
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r3, 0x15]
- adds r0, r4, 0
- movs r1, 0x2A
- bl GetMonData
- movs r1, 0x1F
- ands r1, r0
- lsls r1, 15
- ldr r0, [sp, 0x14]
- ldr r2, =0xfff07fff
- ands r0, r2
- orrs r0, r1
- str r0, [sp, 0x14]
- adds r0, r4, 0
- movs r1, 0x2B
- bl GetMonData
- mov r3, sp
- ands r0, r6
- lsls r0, 4
- ldrh r2, [r3, 0x16]
- ldr r1, =0xfffffe0f
- ands r1, r2
- orrs r1, r0
- strh r1, [r3, 0x16]
- adds r0, r4, 0
- movs r1, 0x2C
- bl GetMonData
- mov r3, sp
- ands r0, r5
- lsls r0, 1
- ldrb r2, [r3, 0x17]
- movs r1, 0x3F
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r3, 0x17]
- adds r0, r4, 0
- movs r1, 0
- bl GetMonData
- str r0, [sp, 0x48]
- adds r0, r4, 0
- movs r1, 0x37
- bl GetMonData
- str r0, [sp, 0x4C]
- adds r0, r4, 0
- movs r1, 0x38
- bl GetMonData
- ldr r1, [sp, 0x7C]
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0x28]
- adds r0, r4, 0
- movs r1, 0x3A
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0x2C]
- adds r0, r4, 0
- movs r1, 0x3B
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0x2]
- adds r0, r4, 0
- movs r1, 0x3C
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0x4]
- adds r0, r4, 0
- movs r1, 0x3D
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0x6]
- adds r0, r4, 0
- movs r1, 0x3E
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0x8]
- adds r0, r4, 0
- movs r1, 0x3F
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0xA]
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- mov r3, sp
- movs r1, 0x1
- ands r0, r1
- lsls r0, 6
- ldrb r2, [r3, 0x17]
- movs r1, 0x41
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r3, 0x17]
- adds r0, r4, 0
- movs r1, 0x2E
- bl GetMonData
- mov r3, sp
- lsls r0, 7
- ldrb r2, [r3, 0x17]
- movs r1, 0x7F
- ands r1, r2
- orrs r1, r0
- strb r1, [r3, 0x17]
- adds r0, r4, 0
- movs r1, 0x1
- bl GetMonData
- str r0, [sp, 0x54]
- adds r0, r4, 0
- movs r1, 0x2
- ldr r2, [sp, 0x8C]
- bl GetMonData
- ldr r0, [sp, 0x84]
- ldr r1, [sp, 0x8C]
- bl StringCopy10
- adds r0, r4, 0
- movs r1, 0x7
- ldr r2, [sp, 0x88]
- bl GetMonData
- mov r2, sp
- movs r6, 0
-_081BC00C:
- adds r0, r7, r6
- adds r1, r2, r6
- ldrb r1, [r1]
- strb r1, [r0]
- adds r6, 0x1
- cmp r6, 0x57
- bls _081BC00C
- b _081BC46E
- .pool
-_081BC02C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- b _081BC3A6
- .pool
-_081BC03C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0xC
- b _081BC3A6
- .pool
-_081BC04C:
- movs r6, 0
- add r2, sp, 0x58
- mov r9, r2
- add r0, sp, 0x60
- mov r10, r0
- movs r0, 0x64
- adds r1, r5, 0
- muls r1, r0
- ldr r0, =gPlayerParty
- adds r4, r1, r0
- mov r8, r9
-_081BC062:
- adds r1, r6, 0
- adds r1, 0xD
- adds r0, r4, 0
- bl GetMonData
- mov r1, r8
- strh r0, [r1]
- adds r1, r6, 0
- adds r1, 0x11
- adds r0, r4, 0
- bl GetMonData
- mov r2, r10
- adds r1, r2, r6
- strb r0, [r1]
- movs r0, 0x2
- add r8, r0
- adds r6, 0x1
- cmp r6, 0x3
- ble _081BC062
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x15
- bl GetMonData
- mov r1, r9
- strb r0, [r1, 0xC]
- mov r2, r9
- movs r6, 0
-_081BC0A0:
- adds r0, r7, r6
- adds r1, r2, r6
- ldrb r1, [r1]
- strb r1, [r0]
- adds r6, 0x1
- cmp r6, 0xF
- bls _081BC0A0
- b _081BC46E
- .pool
-_081BC0B4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldrb r1, [r3]
- lsls r1, 9
- adds r2, 0x1
- adds r1, r2
- ldrb r1, [r1]
- adds r1, 0x9
- b _081BC3A6
- .pool
-_081BC0D0:
- movs r6, 0
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r2, =gPlayerParty
- mov r8, r2
-_081BC0DC:
- adds r1, r6, 0
- adds r1, 0x11
- mov r2, r8
- adds r0, r4, r2
- bl GetMonData
- adds r1, r7, r6
- strb r0, [r1]
- adds r6, 0x1
- cmp r6, 0x3
- ble _081BC0DC
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x15
- bl GetMonData
- adds r1, r7, r6
- strb r0, [r1]
- adds r6, 0x1
- b _081BC46E
- .pool
-_081BC10C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldrb r1, [r3]
- lsls r1, 9
- adds r2, 0x1
- adds r1, r2
- ldrb r1, [r1]
- adds r1, 0x8
- b _081BC466
- .pool
-_081BC128:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x1
- b _081BC142
- .pool
-_081BC138:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x19
-_081BC142:
- bl GetMonData
- adds r1, r0, 0
- strb r1, [r7]
- movs r0, 0xFF
- lsls r0, 8
- ands r0, r1
- lsrs r0, 8
- strb r0, [r7, 0x1]
- movs r0, 0xFF
- lsls r0, 16
- ands r0, r1
- lsrs r0, 16
- strb r0, [r7, 0x2]
- movs r6, 0x3
- b _081BC46E
- .pool
-_081BC168:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x1A
- b _081BC466
- .pool
-_081BC178:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x1B
- b _081BC466
- .pool
-_081BC188:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x1C
- b _081BC466
- .pool
-_081BC198:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x1D
- b _081BC466
- .pool
-_081BC1A8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x1E
- b _081BC466
- .pool
-_081BC1B8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x1F
- b _081BC466
- .pool
-_081BC1C8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x20
- b _081BC466
- .pool
-_081BC1D8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x22
- b _081BC466
- .pool
-_081BC1E8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x23
- b _081BC466
- .pool
-_081BC1F8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x24
- b _081BC466
- .pool
-_081BC208:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x25
- b _081BC466
- .pool
-_081BC218:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x26
- b _081BC466
- .pool
-_081BC228:
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, =gPlayerParty
- adds r4, r0
- adds r0, r4, 0
- movs r1, 0x27
- bl GetMonData
- strb r0, [r7]
- adds r0, r4, 0
- movs r1, 0x28
- bl GetMonData
- strb r0, [r7, 0x1]
- adds r0, r4, 0
- movs r1, 0x29
- bl GetMonData
- strb r0, [r7, 0x2]
- adds r0, r4, 0
- movs r1, 0x2A
- bl GetMonData
- strb r0, [r7, 0x3]
- adds r0, r4, 0
- movs r1, 0x2B
- bl GetMonData
- strb r0, [r7, 0x4]
- adds r0, r4, 0
- movs r1, 0x2C
- bl GetMonData
- strb r0, [r7, 0x5]
- movs r6, 0x6
- b _081BC46E
- .pool
-_081BC278:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x27
- b _081BC466
- .pool
-_081BC288:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x28
- b _081BC466
- .pool
-_081BC298:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x29
- b _081BC466
- .pool
-_081BC2A8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x2A
- b _081BC466
- .pool
-_081BC2B8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x2B
- b _081BC466
- .pool
-_081BC2C8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x2C
- b _081BC466
- .pool
-_081BC2D8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0
- b _081BC302
- .pool
-_081BC2E8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x9
- b _081BC3A6
- .pool
-_081BC2F8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x37
-_081BC302:
- bl GetMonData
- adds r1, r0, 0
- strb r1, [r7]
- movs r0, 0xFF
- lsls r0, 8
- ands r0, r1
- lsrs r0, 8
- strb r0, [r7, 0x1]
- movs r0, 0xFF
- lsls r0, 16
- ands r0, r1
- lsrs r0, 16
- strb r0, [r7, 0x2]
- lsrs r0, r1, 24
- strb r0, [r7, 0x3]
- movs r6, 0x4
- b _081BC46E
- .pool
-_081BC32C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x38
- b _081BC466
- .pool
-_081BC33C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x39
- b _081BC3A6
- .pool
-_081BC34C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x3A
- b _081BC3A6
- .pool
-_081BC35C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x3B
- b _081BC3A6
- .pool
-_081BC36C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x3C
- b _081BC3A6
- .pool
-_081BC37C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x3D
- b _081BC3A6
- .pool
-_081BC38C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x3E
- b _081BC3A6
- .pool
-_081BC39C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x3F
-_081BC3A6:
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- strb r0, [r7]
- lsrs r0, 8
- strb r0, [r7, 0x1]
- movs r6, 0x2
- b _081BC46E
- .pool
-_081BC3BC:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x16
- b _081BC466
- .pool
-_081BC3CC:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x17
- b _081BC466
- .pool
-_081BC3DC:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x18
- b _081BC466
- .pool
-_081BC3EC:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x21
- b _081BC466
- .pool
-_081BC3FC:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x2F
- b _081BC466
- .pool
-_081BC40C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x30
- b _081BC466
- .pool
-_081BC41C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x32
- b _081BC466
- .pool
-_081BC42C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x33
- b _081BC466
- .pool
-_081BC43C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x34
- b _081BC466
- .pool
-_081BC44C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x35
- b _081BC466
- .pool
-_081BC45C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x36
-_081BC466:
- bl GetMonData
- strb r0, [r7]
- movs r6, 0x1
-_081BC46E:
- adds r0, r6, 0
- add sp, 0x90
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end dp01_getattr_by_ch1_for_player_pokemon
-
- thumb_func_start sub_81BC484
-sub_81BC484: @ 81BC484
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_81BC484
-
- thumb_func_start sub_81BC490
-sub_81BC490: @ 81BC490
- push {r4,r5,lr}
- ldr r1, =gBattleBufferA
- ldr r0, =gActiveBank
- ldrb r2, [r0]
- lsls r0, r2, 9
- adds r1, 0x2
- adds r1, r0, r1
- ldrb r0, [r1]
- cmp r0, 0
- bne _081BC4C0
- ldr r0, =gBattlePartyID
- lsls r1, r2, 1
- adds r1, r0
- ldrb r0, [r1]
- bl sub_81BC4E8
- b _081BC4DE
- .pool
-_081BC4C0:
- ldrb r4, [r1]
- movs r5, 0
-_081BC4C4:
- movs r0, 0x1
- ands r0, r4
- cmp r0, 0
- beq _081BC4D2
- adds r0, r5, 0
- bl sub_81BC4E8
-_081BC4D2:
- lsrs r4, 1
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x5
- bls _081BC4C4
-_081BC4DE:
- bl PlayerPartnerBufferExecCompleted
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_81BC490
-
- thumb_func_start sub_81BC4E8
-sub_81BC4E8: @ 81BC4E8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x34
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- lsls r0, 9
- ldr r2, =gBattleBufferA + 3
- adds r3, r0, r2
- adds r6, r3, 0
- subs r1, r2, 0x2
- adds r0, r1
- ldrb r0, [r0]
- adds r7, r2, 0
- cmp r0, 0x3B
- bls _081BC514
- bl _081BCEAE
-_081BC514:
- lsls r0, 2
- ldr r1, =_081BC52C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_081BC52C:
- .4byte _081BC61C
- .4byte _081BC7B4
- .4byte _081BC7D4
- .4byte _081BC7F4
- .4byte _081BC84C
- .4byte _081BC84C
- .4byte _081BC84C
- .4byte _081BC84C
- .4byte _081BC874
- .4byte _081BC8D8
- .4byte _081BC8D8
- .4byte _081BC8D8
- .4byte _081BC8D8
- .4byte _081BCEAE
- .4byte _081BCEAE
- .4byte _081BCEAE
- .4byte _081BCEAE
- .4byte _081BC908
- .4byte _081BC928
- .4byte _081BC948
- .4byte _081BC968
- .4byte _081BC988
- .4byte _081BC9A8
- .4byte _081BC9C8
- .4byte _081BC9E8
- .4byte _081BCA08
- .4byte _081BCA28
- .4byte _081BCA48
- .4byte _081BCA68
- .4byte _081BCA88
- .4byte _081BCAA8
- .4byte _081BCAC8
- .4byte _081BCB38
- .4byte _081BCB58
- .4byte _081BCB78
- .4byte _081BCB98
- .4byte _081BCBB8
- .4byte _081BCBD8
- .4byte _081BCBF8
- .4byte _081BCC18
- .4byte _081BCC38
- .4byte _081BCC58
- .4byte _081BCC78
- .4byte _081BCC98
- .4byte _081BCCB8
- .4byte _081BCCD8
- .4byte _081BCCF8
- .4byte _081BCD18
- .4byte _081BCD38
- .4byte _081BCD58
- .4byte _081BCD78
- .4byte _081BCD98
- .4byte _081BCDB8
- .4byte _081BCDD8
- .4byte _081BCDF8
- .4byte _081BCE18
- .4byte _081BCE38
- .4byte _081BCE58
- .4byte _081BCE78
- .4byte _081BCE98
-_081BC61C:
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, =gPlayerParty
- adds r4, r0
- adds r0, r4, 0
- movs r1, 0xB
- adds r2, r6, 0
- bl SetMonData
- adds r2, r6, 0
- adds r2, 0x2E
- adds r0, r4, 0
- movs r1, 0xC
- bl SetMonData
- movs r0, 0
- mov r8, r0
- movs r0, 0x3B
- adds r0, r6
- mov r10, r0
- adds r0, r6, 0
- adds r0, 0x2B
- str r0, [sp, 0x20]
- adds r0, 0x19
- str r0, [sp, 0x28]
- adds r0, 0x4
- str r0, [sp, 0x2C]
- adds r0, 0x4
- str r0, [sp, 0x30]
- subs r0, 0x22
- str r0, [sp, 0x1C]
- subs r0, 0x2
- str r0, [sp, 0x18]
- adds r0, 0x4
- str r0, [sp, 0x24]
- adds r0, r6, 0x2
- str r0, [sp, 0x4]
- adds r0, r6, 0x4
- str r0, [sp, 0x8]
- adds r0, r6, 0x6
- str r0, [sp, 0xC]
- adds r0, 0x2
- str r0, [sp, 0x10]
- adds r0, 0x2
- str r0, [sp, 0x14]
- mov r9, r4
- adds r7, r6, 0
- adds r7, 0x24
- adds r4, r6, 0
- adds r4, 0xC
-_081BC682:
- mov r1, r8
- adds r1, 0xD
- mov r0, r9
- adds r2, r4, 0
- bl SetMonData
- mov r1, r8
- adds r1, 0x11
- mov r0, r9
- adds r2, r7, 0
- bl SetMonData
- adds r7, 0x1
- adds r4, 0x2
- movs r0, 0x1
- add r8, r0
- mov r0, r8
- cmp r0, 0x3
- ble _081BC682
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, =gPlayerParty
- adds r4, r0
- adds r0, r4, 0
- movs r1, 0x15
- mov r2, r10
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x20
- ldr r2, [sp, 0x20]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x19
- ldr r2, [sp, 0x28]
- bl SetMonData
- ldrb r0, [r6, 0x14]
- lsls r0, 27
- lsrs r0, 27
- mov r1, sp
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x27
- mov r2, sp
- bl SetMonData
- mov r1, sp
- ldrh r0, [r6, 0x14]
- lsls r0, 22
- lsrs r0, 27
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x28
- mov r2, sp
- bl SetMonData
- mov r1, sp
- ldrb r0, [r6, 0x15]
- lsls r0, 25
- lsrs r0, 27
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x29
- mov r2, sp
- bl SetMonData
- mov r1, sp
- ldr r0, [r6, 0x14]
- lsls r0, 12
- lsrs r0, 27
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x2A
- mov r2, sp
- bl SetMonData
- mov r1, sp
- ldrh r0, [r6, 0x16]
- lsls r0, 23
- lsrs r0, 27
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x2B
- mov r2, sp
- bl SetMonData
- mov r1, sp
- ldrb r0, [r6, 0x17]
- lsls r0, 26
- lsrs r0, 27
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x2C
- mov r2, sp
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0
- ldr r2, [sp, 0x2C]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x37
- ldr r2, [sp, 0x30]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x38
- ldr r2, [sp, 0x1C]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x39
- ldr r2, [sp, 0x18]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x3A
- ldr r2, [sp, 0x24]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x3B
- ldr r2, [sp, 0x4]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x3C
- ldr r2, [sp, 0x8]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x3D
- ldr r2, [sp, 0xC]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x3E
- ldr r2, [sp, 0x10]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x3F
- ldr r2, [sp, 0x14]
- bl SetMonData
- b _081BCEAE
- .pool
-_081BC7B4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0xB
- bl SetMonData
- b _081BCEAE
- .pool
-_081BC7D4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0xC
- bl SetMonData
- b _081BCEAE
- .pool
-_081BC7F4:
- movs r0, 0
- mov r8, r0
- movs r0, 0xC
- adds r0, r3
- mov r9, r0
- movs r0, 0x64
- adds r1, r5, 0
- muls r1, r0
- ldr r0, =gPlayerParty
- adds r7, r1, r0
- adds r6, r3, 0
- adds r6, 0x8
- adds r4, r3, 0
-_081BC80E:
- mov r1, r8
- adds r1, 0xD
- adds r0, r7, 0
- adds r2, r4, 0
- bl SetMonData
- mov r1, r8
- adds r1, 0x11
- adds r0, r7, 0
- adds r2, r6, 0
- bl SetMonData
- adds r6, 0x1
- adds r4, 0x2
- movs r0, 0x1
- add r8, r0
- mov r0, r8
- cmp r0, 0x3
- ble _081BC80E
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x15
- mov r2, r9
- bl SetMonData
- b _081BCEAE
- .pool
-_081BC84C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r3, =gBattleBufferA
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r1, r3, 0x1
- adds r1, r2, r1
- ldrb r1, [r1]
- adds r1, 0x9
- b _081BC8F0
- .pool
-_081BC874:
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, =gPlayerParty
- adds r4, r0
- ldr r5, =gActiveBank
- ldrb r2, [r5]
- lsls r2, 9
- adds r2, r7
- adds r0, r4, 0
- movs r1, 0x11
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x1
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x12
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x2
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x13
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x3
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x14
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x4
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x15
- bl SetMonData
- b _081BCEAE
- .pool
-_081BC8D8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r3, =gBattleBufferA
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r1, r3, 0x1
- adds r1, r2, r1
- ldrb r1, [r1]
- adds r1, 0x8
-_081BC8F0:
- adds r3, 0x3
- adds r2, r3
- bl SetMonData
- b _081BCEAE
- .pool
-_081BC908:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x1
- bl SetMonData
- b _081BCEAE
- .pool
-_081BC928:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x19
- bl SetMonData
- b _081BCEAE
- .pool
-_081BC948:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x1A
- bl SetMonData
- b _081BCEAE
- .pool
-_081BC968:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x1B
- bl SetMonData
- b _081BCEAE
- .pool
-_081BC988:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x1C
- bl SetMonData
- b _081BCEAE
- .pool
-_081BC9A8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x1D
- bl SetMonData
- b _081BCEAE
- .pool
-_081BC9C8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x1E
- bl SetMonData
- b _081BCEAE
- .pool
-_081BC9E8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x1F
- bl SetMonData
- b _081BCEAE
- .pool
-_081BCA08:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x20
- bl SetMonData
- b _081BCEAE
- .pool
-_081BCA28:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x22
- bl SetMonData
- b _081BCEAE
- .pool
-_081BCA48:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x23
- bl SetMonData
- b _081BCEAE
- .pool
-_081BCA68:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x24
- bl SetMonData
- b _081BCEAE
- .pool
-_081BCA88:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x25
- bl SetMonData
- b _081BCEAE
- .pool
-_081BCAA8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x26
- bl SetMonData
- b _081BCEAE
- .pool
-_081BCAC8:
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, =gPlayerParty
- adds r4, r0
- ldr r5, =gActiveBank
- ldrb r2, [r5]
- lsls r2, 9
- adds r2, r7
- adds r0, r4, 0
- movs r1, 0x27
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x1
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x28
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x2
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x29
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x3
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x2A
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x4
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x2B
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x5
- adds r2, r0
- adds r0, r4, 0
- b _081BCBE8
- .pool
-_081BCB38:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x27
- bl SetMonData
- b _081BCEAE
- .pool
-_081BCB58:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x28
- bl SetMonData
- b _081BCEAE
- .pool
-_081BCB78:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x29
- bl SetMonData
- b _081BCEAE
- .pool
-_081BCB98:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x2A
- bl SetMonData
- b _081BCEAE
- .pool
-_081BCBB8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x2B
- bl SetMonData
- b _081BCEAE
- .pool
-_081BCBD8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
-_081BCBE8:
- movs r1, 0x2C
- bl SetMonData
- b _081BCEAE
- .pool
-_081BCBF8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0
- bl SetMonData
- b _081BCEAE
- .pool
-_081BCC18:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x9
- bl SetMonData
- b _081BCEAE
- .pool
-_081BCC38:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x37
- bl SetMonData
- b _081BCEAE
- .pool
-_081BCC58:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x38
- bl SetMonData
- b _081BCEAE
- .pool
-_081BCC78:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x39
- bl SetMonData
- b _081BCEAE
- .pool
-_081BCC98:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x3A
- bl SetMonData
- b _081BCEAE
- .pool
-_081BCCB8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x3B
- bl SetMonData
- b _081BCEAE
- .pool
-_081BCCD8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x3C
- bl SetMonData
- b _081BCEAE
- .pool
-_081BCCF8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x3D
- bl SetMonData
- b _081BCEAE
- .pool
-_081BCD18:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x3E
- bl SetMonData
- b _081BCEAE
- .pool
-_081BCD38:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x3F
- bl SetMonData
- b _081BCEAE
- .pool
-_081BCD58:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x16
- bl SetMonData
- b _081BCEAE
- .pool
-_081BCD78:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x17
- bl SetMonData
- b _081BCEAE
- .pool
-_081BCD98:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x18
- bl SetMonData
- b _081BCEAE
- .pool
-_081BCDB8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x21
- bl SetMonData
- b _081BCEAE
- .pool
-_081BCDD8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x2F
- bl SetMonData
- b _081BCEAE
- .pool
-_081BCDF8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x30
- bl SetMonData
- b _081BCEAE
- .pool
-_081BCE18:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x32
- bl SetMonData
- b _081BCEAE
- .pool
-_081BCE38:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x33
- bl SetMonData
- b _081BCEAE
- .pool
-_081BCE58:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x34
- bl SetMonData
- b _081BCEAE
- .pool
-_081BCE78:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x35
- bl SetMonData
- b _081BCEAE
- .pool
-_081BCE98:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x36
- bl SetMonData
-_081BCEAE:
- ldr r2, =gBattlePartyID
- ldr r0, =gActiveBank
- ldrb r1, [r0]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, =gPlayerParty
- adds r0, r2
- bl sub_805E990
- add sp, 0x34
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BC4E8
-
- thumb_func_start sub_81BCEE4
-sub_81BCEE4: @ 81BCEE4
- push {r4-r7,lr}
- ldr r1, =gBattlePartyID
- ldr r7, =gActiveBank
- ldrb r2, [r7]
- lsls r0, r2, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- adds r3, r1, 0
- muls r3, r0
- ldr r4, =gBattleBufferA
- lsls r2, 9
- adds r0, r4, 0x1
- adds r0, r2, r0
- ldrb r0, [r0]
- ldr r1, =gPlayerParty
- adds r0, r1
- adds r5, r3, r0
- movs r3, 0
- adds r0, r4, 0x2
- adds r2, r0
- ldrb r2, [r2]
- cmp r3, r2
- bcs _081BCF3C
- adds r6, r4, 0
- adds r2, r7, 0
- adds r4, r0, 0
-_081BCF1A:
- adds r1, r5, r3
- ldrb r0, [r2]
- lsls r0, 9
- adds r0, 0x3
- adds r0, r3, r0
- adds r0, r6
- ldrb r0, [r0]
- strb r0, [r1]
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- ldrb r0, [r2]
- lsls r0, 9
- adds r0, r4
- ldrb r0, [r0]
- cmp r3, r0
- bcc _081BCF1A
-_081BCF3C:
- bl PlayerPartnerBufferExecCompleted
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BCEE4
-
- thumb_func_start sub_81BCF58
-sub_81BCF58: @ 81BCF58
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- ldr r0, =gBattlePartyID
- mov r8, r0
- ldr r6, =gActiveBank
- ldrb r1, [r6]
- lsls r0, r1, 1
- add r0, r8
- ldrh r0, [r0]
- movs r5, 0x64
- muls r0, r5
- ldr r4, =gPlayerParty
- adds r0, r4
- bl BattleLoadPlayerMonSpriteGfx
- ldrb r0, [r6]
- lsls r0, 1
- add r0, r8
- ldrh r0, [r0]
- muls r0, r5
- adds r0, r4
- movs r1, 0xB
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- ldrb r0, [r6]
- bl GetBankIdentity
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl sub_806A068
- ldr r0, =gUnknown_0202499C
- mov r8, r0
- ldrb r0, [r6]
- movs r1, 0x2
- bl sub_80A5C6C
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- ldrb r0, [r6]
- bl sub_80A6138
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldrb r0, [r6]
- bl sub_80A82E4
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- mov r0, r8
- adds r1, r5, 0
- adds r2, r4, 0
- bl CreateSprite
- ldr r4, =gBankSpriteIds
- ldrb r1, [r6]
- adds r1, r4
- strb r0, [r1]
- ldr r5, =gSprites
- ldrb r0, [r6]
- adds r0, r4
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, =0x0000ff10
- strh r1, [r0, 0x24]
- ldrb r2, [r6]
- adds r0, r2, r4
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r2, [r0, 0x2E]
- ldrb r3, [r6]
- adds r0, r3, r4
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- lsls r3, 4
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r3
- strb r0, [r1, 0x5]
- ldrb r2, [r6]
- adds r4, r2, r4
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, =gBattleMonForms
- adds r2, r1
- ldrb r1, [r2]
- bl StartSpriteAnim
- ldr r1, =gBattleBankFunc
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_81BB1D4
- str r1, [r0]
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BCF58
-
- thumb_func_start sub_81BD074
-sub_81BD074: @ 81BD074
- push {r4-r6,lr}
- ldr r5, =gActiveBank
- ldrb r0, [r5]
- ldr r4, =gBattleBufferA
- lsls r1, r0, 9
- adds r6, r4, 0x2
- adds r1, r6
- ldrb r1, [r1]
- bl sub_805EF84
- ldr r2, =gBattlePartyID
- ldrb r0, [r5]
- lsls r1, r0, 1
- adds r1, r2
- lsls r0, 9
- adds r4, 0x1
- adds r0, r4
- ldrb r0, [r0]
- strh r0, [r1]
- ldrb r1, [r5]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, =gPlayerParty
- adds r0, r2
- bl BattleLoadPlayerMonSpriteGfx
- ldrb r0, [r5]
- lsls r1, r0, 9
- adds r1, r6
- ldrb r1, [r1]
- bl sub_81BD0E4
- ldr r1, =gBattleBankFunc
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_81BBAE8
- str r1, [r0]
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BD074
-
- thumb_func_start sub_81BD0E4
-sub_81BD0E4: @ 81BD0E4
- push {r4-r6,lr}
- mov r6, r10
- mov r5, r9
- mov r4, r8
- push {r4-r6}
- adds r6, r0, 0
- lsls r6, 24
- lsrs r6, 24
- lsls r1, 24
- lsrs r1, 24
- adds r0, r6, 0
- bl sub_805EF84
- ldr r0, =gBattlePartyID
- lsls r2, r6, 1
- adds r2, r0
- ldr r0, =gBattleBufferA
- lsls r1, r6, 9
- adds r0, 0x1
- adds r1, r0
- ldrb r0, [r1]
- strh r0, [r2]
- ldrh r1, [r2]
- movs r0, 0x64
- muls r0, r1
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- mov r8, r0
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- ldr r0, =sub_805D714
- bl CreateInvisibleSpriteWithCallback
- ldr r1, =gUnknown_03005D7C
- mov r9, r1
- add r9, r6
- mov r1, r9
- strb r0, [r1]
- adds r0, r6, 0
- bl GetBankIdentity
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- mov r0, r8
- bl sub_806A068
- ldr r0, =gUnknown_0202499C
- mov r10, r0
- adds r0, r6, 0
- movs r1, 0x2
- bl sub_80A5C6C
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- adds r0, r6, 0
- bl sub_80A6138
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r6, 0
- bl sub_80A82E4
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- mov r0, r10
- adds r1, r5, 0
- adds r2, r4, 0
- bl CreateSprite
- ldr r4, =gBankSpriteIds
- adds r4, r6, r4
- strb r0, [r4]
- ldr r5, =gSprites
- mov r0, r9
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldrb r1, [r4]
- strh r1, [r0, 0x30]
- mov r0, r9
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r6, [r0, 0x32]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r6, [r0, 0x2E]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- mov r1, r8
- strh r1, [r0, 0x32]
- ldrb r0, [r4]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- lsls r3, r6, 4
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r3
- strb r0, [r1, 0x5]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, =gBattleMonForms
- adds r6, r1
- ldrb r1, [r6]
- bl StartSpriteAnim
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r5, 0
- adds r1, 0x1C
- adds r0, r1
- ldr r1, =SpriteCallbackDummy
- str r1, [r0]
- movs r0, 0
- movs r1, 0xFF
- bl sub_80753E8
- mov r1, r9
- ldrb r2, [r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r5
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r1, 0x2E]
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BD0E4
-
- thumb_func_start sub_81BD260
-sub_81BD260: @ 81BD260
- push {r4-r6,lr}
- ldr r1, =gBattleBufferA
- ldr r6, =gActiveBank
- ldrb r2, [r6]
- lsls r0, r2, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r3, [r0]
- cmp r3, 0
- bne _081BD2A8
- ldr r0, =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r1, [r0, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- strb r3, [r0, 0x4]
- ldr r1, =gBattleBankFunc
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_81BD2F0
- str r1, [r0]
- b _081BD2DE
- .pool
-_081BD2A8:
- ldr r5, =gBankSpriteIds
- adds r0, r2, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, =gSprites
- adds r0, r4
- bl FreeSpriteOamMatrix
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl DestroySprite
- ldr r1, =gHealthBoxesIds
- ldrb r0, [r6]
- adds r0, r1
- ldrb r0, [r0]
- bl SetHealthboxSpriteInvisible
- bl PlayerPartnerBufferExecCompleted
-_081BD2DE:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BD260
-
- thumb_func_start sub_81BD2F0
-sub_81BD2F0: @ 81BD2F0
- push {r4-r6,lr}
- ldr r6, =gBattleSpritesDataPtr
- ldr r4, [r6]
- ldr r5, =gActiveBank
- ldrb r2, [r5]
- ldr r1, [r4, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r3, r0, r1
- ldrb r0, [r3, 0x4]
- cmp r0, 0
- beq _081BD318
- cmp r0, 0x1
- beq _081BD346
- b _081BD36E
- .pool
-_081BD318:
- ldr r1, [r4]
- lsls r0, r2, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _081BD332
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x5
- bl move_anim_start_t4
-_081BD332:
- ldr r0, [r6]
- ldrb r1, [r5]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x1
- strb r1, [r0, 0x4]
- b _081BD36E
-_081BD346:
- ldrb r1, [r3]
- movs r0, 0x40
- ands r0, r1
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _081BD36E
- strb r0, [r3, 0x4]
- ldrb r2, [r5]
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x1
- bl move_anim_start_t4
- ldr r1, =gBattleBankFunc
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_81BB828
- str r1, [r0]
-_081BD36E:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BD2F0
-
- thumb_func_start sub_81BD37C
-sub_81BD37C: @ 81BD37C
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- ldr r2, =gPartnerTrainerId
- ldrh r1, [r2]
- ldr r0, =0x00000c03
- cmp r1, r0
- bne _081BD3A8
- movs r4, 0x7
- movs r0, 0x5A
- mov r9, r0
- ldr r0, =gTrainerBackPicCoords
- ldrb r1, [r0, 0x1C]
- b _081BD3BE
- .pool
-_081BD3A8:
- ldrh r0, [r2]
- bl sub_8162AA0
- lsls r0, 24
- lsrs r4, r0, 24
- movs r0, 0x20
- mov r9, r0
- ldr r1, =gTrainerFrontPicCoords
- lsls r0, r4, 2
- adds r0, r1
- ldrb r1, [r0]
-_081BD3BE:
- movs r0, 0x8
- subs r0, r1
- lsls r0, 18
- movs r1, 0xA0
- lsls r1, 15
- adds r0, r1
- lsrs r7, r0, 16
- ldr r0, =gPartnerTrainerId
- ldrh r1, [r0]
- ldr r0, =0x00000c03
- cmp r1, r0
- bne _081BD494
- ldr r5, =gActiveBank
- ldrb r1, [r5]
- adds r0, r4, 0
- bl LoadBackTrainerBankSpriteGfx
- ldrb r0, [r5]
- bl GetBankIdentity
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl sub_806A12C
- ldr r6, =gUnknown_0202499C
- mov r8, r9
- lsls r4, r7, 16
- asrs r4, 16
- ldrb r0, [r5]
- bl sub_80A82E4
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- adds r0, r6, 0
- mov r1, r8
- adds r2, r4, 0
- bl CreateSprite
- ldr r6, =gBankSpriteIds
- ldrb r1, [r5]
- adds r1, r6
- strb r0, [r1]
- ldr r4, =gSprites
- ldrb r3, [r5]
- adds r0, r3, r6
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- lsls r3, 4
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r3
- strb r0, [r1, 0x5]
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0xF0
- strh r1, [r0, 0x24]
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldr r1, =0x0000fffe
- strh r1, [r0, 0x2E]
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r4, 0x1C
- adds r0, r4
- ldr r1, =sub_805D7AC
- str r1, [r0]
- b _081BD57C
- .pool
-_081BD494:
- adds r5, r4, 0
- ldr r6, =gActiveBank
- ldrb r1, [r6]
- adds r0, r5, 0
- bl sub_805DF38
- ldrb r0, [r6]
- bl GetBankIdentity
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- bl sub_806A1C0
- ldr r0, =gUnknown_0202499C
- mov r8, r0
- lsls r4, r7, 16
- asrs r4, 16
- ldrb r0, [r6]
- bl sub_80A82E4
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- mov r0, r8
- mov r1, r9
- adds r2, r4, 0
- bl CreateSprite
- ldr r4, =gBankSpriteIds
- ldrb r1, [r6]
- adds r1, r4
- strb r0, [r1]
- ldr r0, =gTrainerFrontPicPaletteTable
- lsls r5, 3
- adds r5, r0
- ldrh r0, [r5, 0x4]
- bl IndexOfSpritePaletteTag
- ldr r5, =gSprites
- ldrb r1, [r6]
- adds r1, r4
- ldrb r1, [r1]
- lsls r2, r1, 4
- adds r2, r1
- lsls r2, 2
- adds r2, r5
- lsls r0, 4
- ldrb r3, [r2, 0x5]
- movs r1, 0xF
- ands r1, r3
- orrs r1, r0
- strb r1, [r2, 0x5]
- ldrb r0, [r6]
- adds r0, r4
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r1, 0xF0
- strh r1, [r0, 0x24]
- ldrb r0, [r6]
- adds r0, r4
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r1, 0x30
- strh r1, [r0, 0x26]
- ldrb r0, [r6]
- adds r0, r4
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, =0x0000fffe
- strh r1, [r0, 0x2E]
- ldrb r0, [r6]
- adds r0, r4
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r5, 0
- adds r1, 0x1C
- adds r0, r1
- ldr r1, =sub_805D7AC
- str r1, [r0]
- ldrb r0, [r6]
- adds r0, r4
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- ldrb r2, [r1, 0x1]
- movs r0, 0x4
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0x1]
- ldrb r0, [r6]
- adds r0, r4
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r2, 0x1
- orrs r1, r2
- strb r1, [r0]
-_081BD57C:
- ldr r1, =gBattleBankFunc
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_81BAE60
- str r1, [r0]
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BD37C
-
- thumb_func_start sub_81BD5BC
-sub_81BD5BC: @ 81BD5BC
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_81BD5BC
-
- thumb_func_start sub_81BD5C8
-sub_81BD5C8: @ 81BD5C8
- push {r4-r6,lr}
- ldr r6, =gBankSpriteIds
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r5, =gSprites
- adds r0, r5
- bl oamt_add_pos2_onto_pos1
- ldrb r0, [r4]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r1, 0x23
- strh r1, [r0, 0x2E]
- ldrb r0, [r4]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, =0x0000ffd8
- strh r1, [r0, 0x32]
- ldrb r0, [r4]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldrh r1, [r0, 0x22]
- strh r1, [r0, 0x36]
- ldrb r0, [r4]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r5, 0
- adds r1, 0x1C
- adds r0, r1
- ldr r1, =sub_80A6EEC
- str r1, [r0]
- ldrb r0, [r4]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, =SpriteCallbackDummy
- bl StoreSpriteCallbackInData6
- ldr r1, =gBattleBankFunc
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_81BAE98
- str r1, [r0]
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BD5C8
-
- thumb_func_start sub_81BD674
-sub_81BD674: @ 81BD674
- push {r4-r6,lr}
- ldr r6, =gBattleSpritesDataPtr
- ldr r4, [r6]
- ldr r5, =gActiveBank
- ldrb r2, [r5]
- ldr r0, [r4, 0x4]
- lsls r1, r2, 1
- adds r1, r2
- lsls r1, 2
- adds r3, r1, r0
- ldrb r0, [r3, 0x4]
- cmp r0, 0
- bne _081BD6C8
- ldr r1, [r4]
- lsls r0, r2, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _081BD6A8
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x5
- bl move_anim_start_t4
-_081BD6A8:
- ldr r0, [r6]
- ldrb r1, [r5]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x4]
- adds r1, 0x1
- strb r1, [r0, 0x4]
- b _081BD73E
- .pool
-_081BD6C8:
- ldrb r1, [r3]
- movs r0, 0x40
- ands r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _081BD73E
- strb r4, [r3, 0x4]
- ldr r2, =gBattlePartyID
- ldrb r1, [r5]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, =gPlayerParty
- adds r0, r2
- bl sub_805E990
- movs r1, 0x40
- negs r1, r1
- movs r0, 0x10
- bl PlaySE12WithPanning
- ldr r2, =gSprites
- ldr r3, =gBankSpriteIds
- ldrb r0, [r5]
- adds r0, r3
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- strh r4, [r0, 0x30]
- ldrb r0, [r5]
- adds r0, r3
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x5
- strh r1, [r0, 0x32]
- ldrb r0, [r5]
- adds r0, r3
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, =sub_8039C00
- str r1, [r0]
- ldr r1, =gBattleBankFunc
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_81BB78C
- str r1, [r0]
-_081BD73E:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BD674
-
- thumb_func_start sub_81BD760
-sub_81BD760: @ 81BD760
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_81BD760
-
- thumb_func_start sub_81BD76C
-sub_81BD76C: @ 81BD76C
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_81BD76C
-
- thumb_func_start sub_81BD778
-sub_81BD778: @ 81BD778
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_81BD778
-
- thumb_func_start sub_81BD784
-sub_81BD784: @ 81BD784
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_81BD784
-
- thumb_func_start sub_81BD790
-sub_81BD790: @ 81BD790
- push {r4-r6,lr}
- ldr r6, =gActiveBank
- ldrb r0, [r6]
- bl mplay_80342A4
- lsls r0, 24
- cmp r0, 0
- beq _081BD7A2
- b _081BD8B6
-_081BD7A2:
- ldr r0, =gBattleBufferA
- mov r12, r0
- ldrb r2, [r6]
- lsls r2, 9
- adds r0, 0x1
- adds r0, r2, r0
- ldrb r0, [r0]
- mov r1, r12
- adds r1, 0x2
- adds r1, r2, r1
- ldrb r1, [r1]
- lsls r1, 8
- orrs r0, r1
- ldr r5, =gAnimMoveTurn
- mov r1, r12
- adds r1, 0x3
- adds r2, r1
- ldrb r1, [r2]
- strb r1, [r5]
- ldr r4, =gAnimMovePower
- ldrb r2, [r6]
- lsls r2, 9
- mov r1, r12
- adds r1, 0x4
- adds r1, r2, r1
- ldrb r3, [r1]
- mov r1, r12
- adds r1, 0x5
- adds r2, r1
- ldrb r1, [r2]
- lsls r1, 8
- orrs r3, r1
- strh r3, [r4]
- ldr r4, =gAnimMoveDmg
- ldrb r2, [r6]
- lsls r2, 9
- mov r1, r12
- adds r1, 0x6
- adds r1, r2, r1
- ldrb r3, [r1]
- mov r1, r12
- adds r1, 0x7
- adds r1, r2, r1
- ldrb r1, [r1]
- lsls r1, 8
- orrs r3, r1
- mov r1, r12
- adds r1, 0x8
- adds r1, r2, r1
- ldrb r1, [r1]
- lsls r1, 16
- orrs r3, r1
- mov r1, r12
- adds r1, 0x9
- adds r2, r1
- ldrb r1, [r2]
- lsls r1, 24
- orrs r3, r1
- str r3, [r4]
- ldr r3, =gAnimFriendship
- ldrb r1, [r6]
- lsls r1, 9
- mov r2, r12
- adds r2, 0xA
- adds r1, r2
- ldrb r1, [r1]
- strb r1, [r3]
- ldr r4, =gWeatherMoveAnim
- ldrb r2, [r6]
- lsls r2, 9
- mov r1, r12
- adds r1, 0xC
- adds r1, r2, r1
- ldrb r3, [r1]
- mov r1, r12
- adds r1, 0xD
- adds r2, r1
- ldrb r1, [r2]
- lsls r1, 8
- orrs r3, r1
- strh r3, [r4]
- ldr r3, =gAnimDisableStructPtr
- ldrb r2, [r6]
- lsls r2, 9
- mov r1, r12
- adds r1, 0x10
- adds r2, r1
- str r2, [r3]
- ldr r3, =gUnknown_020244BC
- ldrb r1, [r6]
- lsls r1, 2
- adds r1, r3
- ldr r2, [r2]
- str r2, [r1]
- ldrb r1, [r5]
- bl sub_805DB8C
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0
- beq _081BD898
- bl PlayerPartnerBufferExecCompleted
- b _081BD8B6
- .pool
-_081BD898:
- ldr r0, =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldrb r1, [r6]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- strb r3, [r0, 0x4]
- ldr r1, =gBattleBankFunc
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r1
- ldr r1, =bx_move_anim_3
- str r1, [r0]
-_081BD8B6:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BD790
-
- thumb_func_start bx_move_anim_3
-bx_move_anim_3: @ 81BD8C8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r2, =gBattleBufferA
- ldr r6, =gActiveBank
- ldrb r3, [r6]
- lsls r1, r3, 9
- adds r0, r2, 0x1
- mov r10, r0
- adds r0, r1, r0
- ldrb r4, [r0]
- adds r5, r2, 0x2
- mov r9, r5
- adds r0, r1, r5
- ldrb r0, [r0]
- lsls r0, 8
- orrs r4, r0
- adds r2, 0xB
- adds r1, r2
- ldrb r1, [r1]
- mov r8, r1
- ldr r7, =gBattleSpritesDataPtr
- ldr r5, [r7]
- ldr r1, [r5, 0x4]
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r2, [r0, 0x4]
- cmp r2, 0x1
- beq _081BD960
- cmp r2, 0x1
- bgt _081BD920
- cmp r2, 0
- beq _081BD92A
- b _081BDA3C
- .pool
-_081BD920:
- cmp r2, 0x2
- beq _081BD98A
- cmp r2, 0x3
- beq _081BDA00
- b _081BDA3C
-_081BD92A:
- ldr r1, [r5]
- lsls r0, r3, 2
- adds r1, r0, r1
- ldrb r2, [r1]
- movs r0, 0xC
- ands r0, r2
- cmp r0, 0x4
- bne _081BD94C
- movs r0, 0x8
- orrs r0, r2
- strb r0, [r1]
- ldrb r2, [r6]
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x5
- bl move_anim_start_t4
-_081BD94C:
- ldr r0, [r7]
- ldrb r1, [r6]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x1
- strb r1, [r0, 0x4]
- b _081BDA3C
-_081BD960:
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _081BDA3C
- movs r0, 0
- bl sub_805EB9C
- adds r0, r4, 0
- bl DoMoveAnim
- ldr r0, [r7]
- ldrb r1, [r6]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x2
- strb r1, [r0, 0x4]
- b _081BDA3C
-_081BD98A:
- ldr r0, =gAnimScriptCallback
- ldr r0, [r0]
- bl _call_via_r0
- ldr r0, =gAnimScriptActive
- ldrb r0, [r0]
- cmp r0, 0
- bne _081BDA3C
- movs r0, 0x1
- bl sub_805EB9C
- ldr r0, [r7]
- ldrb r2, [r6]
- ldr r1, [r0]
- lsls r0, r2, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _081BD9D8
- mov r0, r8
- cmp r0, 0x1
- bhi _081BD9D8
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x6
- bl move_anim_start_t4
- ldr r0, [r7]
- ldrb r1, [r6]
- ldr r0, [r0]
- lsls r1, 2
- adds r1, r0
- ldrb r2, [r1]
- movs r0, 0x9
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
-_081BD9D8:
- ldr r0, =gBattleSpritesDataPtr
- ldr r2, [r0]
- ldr r0, =gActiveBank
- ldrb r1, [r0]
- ldr r2, [r2, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x3
- strb r1, [r0, 0x4]
- b _081BDA3C
- .pool
-_081BDA00:
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _081BDA3C
- bl sub_805E394
- ldrb r0, [r6]
- lsls r2, r0, 9
- mov r3, r10
- adds r1, r2, r3
- ldrb r1, [r1]
- add r2, r9
- ldrb r2, [r2]
- lsls r2, 8
- orrs r1, r2
- bl sub_805E94C
- ldr r0, [r7]
- ldrb r1, [r6]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- strb r4, [r0, 0x4]
- bl PlayerPartnerBufferExecCompleted
-_081BDA3C:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end bx_move_anim_3
-
- thumb_func_start sub_81BDA4C
-sub_81BDA4C: @ 81BDA4C
- push {r4,lr}
- ldr r0, =gBattle_BG0_X
- movs r1, 0
- strh r1, [r0]
- ldr r0, =gBattle_BG0_Y
- strh r1, [r0]
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- lsls r0, 9
- ldr r1, =gBattleBufferA + 2
- adds r0, r1
- ldrh r0, [r0]
- bl BufferStringBattle
- ldr r0, =gDisplayedStringBattle
- movs r1, 0
- bl sub_814F9EC
- ldr r1, =gBattleBankFunc
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_81BB898
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BDA4C
-
- thumb_func_start sub_81BDAA0
-sub_81BDAA0: @ 81BDAA0
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_81BDAA0
-
- thumb_func_start sub_81BDAAC
-sub_81BDAAC: @ 81BDAAC
- push {lr}
- bl AI_TrySwitchOrUseItem
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_81BDAAC
-
- thumb_func_start sub_81BDABC
-sub_81BDABC: @ 81BDABC
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_81BDABC
-
- thumb_func_start sub_81BDAC8
-sub_81BDAC8: @ 81BDAC8
- push {r4-r6,lr}
- ldr r6, =gActiveBank
- ldrb r4, [r6]
- lsls r4, 9
- ldr r0, =gBattleBufferA + 4
- adds r4, r0
- movs r0, 0xF
- bl BattleAI_SetupAIData
- bl BattleAI_ChooseMoveOrAction
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r2, =gBattleMoves
- lsls r0, r5, 1
- adds r4, r0
- ldrh r1, [r4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x6]
- movs r0, 0x12
- ands r0, r1
- cmp r0, 0
- beq _081BDB02
- ldr r1, =gBankTarget
- ldrb r0, [r6]
- strb r0, [r1]
-_081BDB02:
- ldrh r1, [r4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x6]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _081BDB3C
- movs r0, 0x1
- bl GetBankByIdentity
- ldr r4, =gBankTarget
- strb r0, [r4]
- ldr r0, =gAbsentBankFlags
- ldrb r1, [r0]
- ldr r2, =gBitTable
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _081BDB3C
- movs r0, 0x3
- bl GetBankByIdentity
- strb r0, [r4]
-_081BDB3C:
- ldr r0, =gBankTarget
- ldrb r2, [r0]
- lsls r2, 8
- orrs r2, r5
- movs r0, 0x1
- movs r1, 0xA
- bl EmitCmd33
- bl PlayerPartnerBufferExecCompleted
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BDAC8
-
- thumb_func_start sub_81BDB70
-sub_81BDB70: @ 81BDB70
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_81BDB70
-
- thumb_func_start sub_81BDB7C
-sub_81BDB7C: @ 81BDB7C
- push {r4-r6,lr}
- bl GetMostSuitableMonToSwitchInto
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x6
- bne _081BDBD0
- movs r0, 0
- bl GetBankByIdentity
- lsls r0, 24
- lsrs r6, r0, 24
- movs r0, 0x2
- bl GetBankByIdentity
- lsls r0, 24
- lsrs r5, r0, 24
- movs r4, 0x3
- b _081BDBA4
-_081BDBA2:
- adds r4, 0x1
-_081BDBA4:
- cmp r4, 0x5
- bgt _081BDBD0
- movs r0, 0x64
- muls r0, r4
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _081BDBA2
- ldr r1, =gBattlePartyID
- lsls r0, r6, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r4, r0
- beq _081BDBA2
- lsls r0, r5, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r4, r0
- beq _081BDBA2
-_081BDBD0:
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- ldr r1, =gBattleStruct
- ldr r1, [r1]
- adds r0, r1
- adds r0, 0x5C
- strb r4, [r0]
- lsls r1, r4, 24
- lsrs r1, 24
- movs r0, 0x1
- movs r2, 0
- bl EmitCmd34
- bl PlayerPartnerBufferExecCompleted
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BDB7C
-
- thumb_func_start sub_81BDC04
-sub_81BDC04: @ 81BDC04
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_81BDC04
-
- thumb_func_start sub_81BDC10
-sub_81BDC10: @ 81BDC10
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x4
- movs r0, 0
- bl LoadBattleBarGfx
- ldr r3, =gBattleBufferA
- ldr r0, =gActiveBank
- mov r9, r0
- ldrb r4, [r0]
- lsls r2, r4, 9
- adds r0, r3, 0x2
- adds r0, r2, r0
- ldrb r1, [r0]
- adds r3, 0x3
- adds r2, r3
- ldrb r0, [r2]
- lsls r0, 8
- orrs r1, r0
- lsls r1, 16
- asrs r7, r1, 16
- ldr r0, =0x00007fff
- cmp r7, r0
- beq _081BDCA0
- ldr r6, =gBattlePartyID
- lsls r0, r4, 1
- adds r0, r6
- ldrh r0, [r0]
- movs r5, 0x64
- muls r0, r5
- ldr r4, =gPlayerParty
- adds r0, r4
- movs r1, 0x3A
- bl GetMonData
- mov r8, r0
- mov r1, r9
- ldrb r0, [r1]
- lsls r0, 1
- adds r0, r6
- ldrh r0, [r0]
- muls r0, r5
- adds r0, r4
- movs r1, 0x39
- bl GetMonData
- adds r3, r0, 0
- mov r1, r9
- ldrb r0, [r1]
- ldr r1, =gHealthBoxesIds
- adds r1, r0, r1
- ldrb r1, [r1]
- str r7, [sp]
- mov r2, r8
- bl SetBattleBarStruct
- b _081BDCCA
- .pool
-_081BDCA0:
- ldr r1, =gBattlePartyID
- lsls r0, r4, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x3A
- bl GetMonData
- adds r2, r0, 0
- mov r1, r9
- ldrb r0, [r1]
- ldr r1, =gHealthBoxesIds
- adds r1, r0, r1
- ldrb r1, [r1]
- str r7, [sp]
- movs r3, 0
- bl SetBattleBarStruct
-_081BDCCA:
- ldr r1, =gBattleBankFunc
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, =bx_t3_healthbar_update
- str r1, [r0]
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BDC10
-
- thumb_func_start sub_81BDD00
-sub_81BDD00: @ 81BDD00
- push {r4-r7,lr}
- ldr r5, =gBattleBufferA
- ldr r6, =gActiveBank
- ldrb r0, [r6]
- lsls r0, 9
- adds r1, r5, 0x1
- adds r0, r1
- ldrb r7, [r0]
- movs r0, 0x64
- adds r1, r7, 0
- muls r1, r0
- ldr r0, =gPlayerParty
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0x38
- bl GetMonData
- cmp r0, 0x63
- bls _081BDD38
- bl PlayerPartnerBufferExecCompleted
- b _081BDD84
- .pool
-_081BDD38:
- movs r0, 0x1
- bl LoadBattleBarGfx
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- ldrb r1, [r6]
- lsls r1, 9
- adds r0, r5, 0x2
- adds r0, r1, r0
- ldrb r4, [r0]
- adds r0, r5, 0x3
- adds r1, r0
- ldrb r0, [r1]
- lsls r0, 8
- orrs r4, r0
- ldr r0, =sub_81BB29C
- movs r1, 0xA
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r7, [r1, 0x8]
- strh r4, [r1, 0xA]
- ldrb r0, [r6]
- strh r0, [r1, 0xC]
- ldr r1, =gBattleBankFunc
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r1
- ldr r1, =nullsub_21
- str r1, [r0]
-_081BDD84:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BDD00
-
- thumb_func_start sub_81BDD9C
-sub_81BDD9C: @ 81BDD9C
- push {r4,lr}
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- bl mplay_80342A4
- lsls r0, 24
- cmp r0, 0
- bne _081BDDF0
- ldr r0, =gHealthBoxesIds
- ldrb r1, [r4]
- adds r0, r1, r0
- ldrb r0, [r0]
- ldr r2, =gBattlePartyID
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, =gPlayerParty
- adds r1, r2
- movs r2, 0x9
- bl UpdateHealthboxAttribute
- ldrb r2, [r4]
- ldr r0, =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r0, [r0, 0x4]
- lsls r1, r2, 1
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r2, [r1]
- movs r0, 0x11
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- ldr r1, =gBattleBankFunc
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_81BBC04
- str r1, [r0]
-_081BDDF0:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BDD9C
-
- thumb_func_start sub_81BDE14
-sub_81BDE14: @ 81BDE14
- push {r4,r5,lr}
- ldr r5, =gActiveBank
- ldrb r0, [r5]
- bl mplay_80342A4
- lsls r0, 24
- cmp r0, 0
- bne _081BDE64
- ldr r4, =gBattleBufferA
- ldrb r3, [r5]
- lsls r3, 9
- adds r0, r4, 0x1
- adds r0, r3, r0
- ldrb r0, [r0]
- adds r1, r4, 0x2
- adds r1, r3, r1
- ldrb r1, [r1]
- adds r2, r4, 0x3
- adds r2, r3, r2
- ldrb r2, [r2]
- lsls r2, 8
- orrs r1, r2
- adds r2, r4, 0x4
- adds r2, r3, r2
- ldrb r2, [r2]
- lsls r2, 16
- orrs r1, r2
- adds r4, 0x5
- adds r3, r4
- ldrb r2, [r3]
- lsls r2, 24
- orrs r1, r2
- bl move_anim_start_t2_for_situation
- ldr r1, =gBattleBankFunc
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_81BBC04
- str r1, [r0]
-_081BDE64:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BDE14
-
- thumb_func_start sub_81BDE7C
-sub_81BDE7C: @ 81BDE7C
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_81BDE7C
-
- thumb_func_start sub_81BDE88
-sub_81BDE88: @ 81BDE88
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_81BDE88
-
- thumb_func_start sub_81BDE94
-sub_81BDE94: @ 81BDE94
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_81BDE94
-
- thumb_func_start sub_81BDEA0
-sub_81BDEA0: @ 81BDEA0
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_81BDEA0
-
- thumb_func_start sub_81BDEAC
-sub_81BDEAC: @ 81BDEAC
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_81BDEAC
-
- thumb_func_start sub_81BDEB8
-sub_81BDEB8: @ 81BDEB8
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_81BDEB8
-
- thumb_func_start sub_81BDEC4
-sub_81BDEC4: @ 81BDEC4
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_81BDEC4
-
- thumb_func_start sub_81BDED0
-sub_81BDED0: @ 81BDED0
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_81BDED0
-
- thumb_func_start sub_81BDEDC
-sub_81BDEDC: @ 81BDEDC
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_81BDEDC
-
- thumb_func_start sub_81BDEE8
-sub_81BDEE8: @ 81BDEE8
- push {lr}
- ldr r2, =gUnknown_02022D0C
- ldrb r1, [r2]
- movs r0, 0x80
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BDEE8
-
- thumb_func_start sub_81BDF04
-sub_81BDF04: @ 81BDF04
- push {lr}
- ldr r3, =gUnknown_02022D0C
- ldr r1, =gBattleBufferA
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- movs r1, 0x7F
- ands r1, r0
- ldrb r2, [r3]
- movs r0, 0x80
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BDF04
-
- thumb_func_start sub_81BDF3C
-sub_81BDF3C: @ 81BDF3C
- push {lr}
- ldr r2, =gUnknown_02022D0C
- ldrb r1, [r2]
- movs r0, 0x7F
- ands r0, r1
- strb r0, [r2]
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BDF3C
-
- thumb_func_start sub_81BDF54
-sub_81BDF54: @ 81BDF54
- push {lr}
- ldr r3, =gUnknown_02022D0C
- ldr r1, [r3]
- lsls r1, 24
- lsrs r1, 31
- movs r0, 0x1
- eors r1, r0
- lsls r1, 7
- ldrb r2, [r3]
- movs r0, 0x7F
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BDF54
-
- thumb_func_start dp01t_29_3_blink
-dp01t_29_3_blink: @ 81BDF7C
- push {r4,lr}
- ldr r3, =gSprites
- ldr r2, =gBankSpriteIds
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- adds r0, r2
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- adds r0, 0x3E
- ldrb r0, [r0]
- lsls r0, 29
- cmp r0, 0
- bge _081BDFB0
- bl PlayerPartnerBufferExecCompleted
- b _081BDFDA
- .pool
-_081BDFB0:
- ldr r1, =gDoingBattleAnim
- movs r0, 0x1
- strb r0, [r1]
- ldrb r0, [r4]
- adds r0, r2
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- movs r1, 0
- strh r1, [r0, 0x30]
- ldrb r0, [r4]
- bl sub_80769F4
- ldr r1, =gBattleBankFunc
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, =bx_blink_t3
- str r1, [r0]
-_081BDFDA:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end dp01t_29_3_blink
-
- thumb_func_start sub_81BDFEC
-sub_81BDFEC: @ 81BDFEC
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_81BDFEC
-
- thumb_func_start sub_81BDFF8
-sub_81BDFF8: @ 81BDFF8
- push {r4,lr}
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- movs r3, 0x3F
- cmp r0, 0
- bne _081BE00C
- movs r3, 0xC0
-_081BE00C:
- ldr r2, =gBattleBufferA
- ldrb r1, [r4]
- lsls r1, 9
- adds r0, r2, 0x1
- adds r0, r1, r0
- ldrb r0, [r0]
- adds r2, 0x2
- adds r1, r2
- ldrb r1, [r1]
- lsls r1, 8
- orrs r0, r1
- lsls r1, r3, 24
- asrs r1, 24
- bl PlaySE12WithPanning
- bl PlayerPartnerBufferExecCompleted
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BDFF8
-
- thumb_func_start sub_81BE03C
-sub_81BE03C: @ 81BE03C
- push {r4,r5,lr}
- ldr r4, =gBattleBufferA
- ldr r5, =gActiveBank
- ldrb r0, [r5]
- lsls r3, r0, 9
- adds r0, r4, 0x3
- adds r0, r3, r0
- ldrb r0, [r0]
- cmp r0, 0
- beq _081BE078
- bl BattleMusicStop
- ldrb r1, [r5]
- lsls r1, 9
- adds r0, r4, 0x1
- adds r0, r1, r0
- ldrb r0, [r0]
- adds r2, r4, 0x2
- adds r1, r2
- ldrb r1, [r1]
- lsls r1, 8
- orrs r0, r1
- bl PlayBGM
- b _081BE08C
- .pool
-_081BE078:
- adds r0, r4, 0x1
- adds r0, r3, r0
- ldrb r0, [r0]
- adds r1, r4, 0x2
- adds r1, r3, r1
- ldrb r1, [r1]
- lsls r1, 8
- orrs r0, r1
- bl PlayFanfare
-_081BE08C:
- bl PlayerPartnerBufferExecCompleted
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_81BE03C
-
- thumb_func_start sub_81BE098
-sub_81BE098: @ 81BE098
- push {lr}
- ldr r1, =gBattlePartyID
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x19
- negs r1, r1
- movs r2, 0x5
- bl PlayCry3
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BE098
-
- thumb_func_start dp01t_2E_3_battle_intro
-dp01t_2E_3_battle_intro: @ 81BE0D8
- push {lr}
- ldr r1, =gBattleBufferA
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- bl battle_intro_launch
- ldr r2, =gUnknown_020243FC
- ldrh r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strh r0, [r2]
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- .pool
- thumb_func_end dp01t_2E_3_battle_intro
-
- thumb_func_start sub_81BE10C
-sub_81BE10C: @ 81BE10C
- push {r4-r6,lr}
- ldr r6, =gBankSpriteIds
- ldr r5, =gActiveBank
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, =gSprites
- adds r0, r4
- bl oamt_add_pos2_onto_pos1
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0x32
- strh r1, [r0, 0x2E]
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldr r1, =0x0000ffd8
- strh r1, [r0, 0x32]
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrh r1, [r0, 0x22]
- strh r1, [r0, 0x36]
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r4, 0
- adds r1, 0x1C
- adds r0, r1
- ldr r1, =sub_80A6EEC
- str r1, [r0]
- ldrb r2, [r5]
- adds r0, r2, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- strh r2, [r0, 0x38]
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldr r1, =sub_805CC00
- bl StoreSpriteCallbackInData6
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0x1
- bl StartSpriteAnim
- ldr r0, =0x0000d6f9
- bl AllocSpritePalette
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r2, =gPartnerTrainerId
- ldrh r1, [r2]
- ldr r0, =0x00000c03
- cmp r1, r0
- bne _081BE1FC
- ldr r0, =gTrainerBackPicPaletteTable
- ldr r0, [r0, 0x38]
- lsls r4, 4
- movs r2, 0x80
- lsls r2, 1
- adds r1, r4, r2
- movs r2, 0x20
- bl LoadCompressedPalette
- b _081BE21A
- .pool
-_081BE1FC:
- ldrh r0, [r2]
- bl sub_8162AA0
- lsls r0, 24
- ldr r1, =gTrainerFrontPicPaletteTable
- lsrs r0, 21
- adds r0, r1
- ldr r0, [r0]
- lsls r4, 4
- movs r2, 0x80
- lsls r2, 1
- adds r1, r4, r2
- movs r2, 0x20
- bl LoadCompressedPalette
-_081BE21A:
- ldr r2, =gSprites
- ldr r1, =gBankSpriteIds
- ldr r5, =gActiveBank
- ldrb r0, [r5]
- adds r0, r1
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r4
- strb r0, [r1, 0x5]
- ldr r0, =sub_81BE2C8
- movs r1, 0x5
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r4, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r4
- ldrb r0, [r5]
- strh r0, [r1, 0x8]
- ldr r3, =gBattleSpritesDataPtr
- ldr r0, [r3]
- ldrb r2, [r5]
- ldr r1, [r0, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _081BE27E
- ldr r0, =gUnknown_020244B4
- adds r0, r2, r0
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r4
- ldr r1, =sub_8073C30
- str r1, [r0]
-_081BE27E:
- ldr r0, [r3]
- ldr r2, [r0, 0x8]
- ldrb r0, [r2, 0x9]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2, 0x9]
- ldr r1, =gBattleBankFunc
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, =nullsub_77
- str r1, [r0]
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BE10C
-
- thumb_func_start sub_81BE2C8
-sub_81BE2C8: @ 81BE2C8
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r1, =gTasks
- lsls r0, 2
- add r0, r8
- lsls r0, 3
- adds r1, r0, r1
- ldrh r2, [r1, 0xA]
- movs r3, 0xA
- ldrsh r0, [r1, r3]
- cmp r0, 0x17
- bgt _081BE2F4
- adds r0, r2, 0x1
- strh r0, [r1, 0xA]
- b _081BE3B0
- .pool
-_081BE2F4:
- ldr r7, =gActiveBank
- ldrb r0, [r7]
- mov r9, r0
- ldrh r0, [r1, 0x8]
- strb r0, [r7]
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _081BE314
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _081BE344
-_081BE314:
- ldr r0, =gBattleBufferA
- ldrb r1, [r7]
- lsls r2, r1, 9
- adds r0, 0x1
- adds r2, r0
- ldr r0, =gBattlePartyID
- lsls r1, 1
- adds r1, r0
- ldrh r0, [r1]
- strb r0, [r2]
- ldrb r0, [r7]
- movs r1, 0
- bl sub_81BD0E4
- b _081BE398
- .pool
-_081BE344:
- ldr r4, =gBattleBufferA
- ldrb r0, [r7]
- lsls r1, r0, 9
- adds r4, 0x1
- adds r1, r4
- ldr r5, =gBattlePartyID
- lsls r0, 1
- adds r0, r5
- ldrh r0, [r0]
- strb r0, [r1]
- ldrb r0, [r7]
- movs r1, 0
- bl sub_81BD0E4
- ldrb r0, [r7]
- movs r6, 0x2
- eors r0, r6
- strb r0, [r7]
- ldrb r0, [r7]
- lsls r1, r0, 9
- adds r1, r4
- lsls r0, 1
- adds r0, r5
- ldrh r0, [r0]
- strb r0, [r1]
- ldrb r1, [r7]
- lsls r0, r1, 1
- adds r0, r5
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, =gPlayerParty
- adds r0, r2
- bl BattleLoadPlayerMonSpriteGfx
- ldrb r0, [r7]
- movs r1, 0
- bl sub_81BD0E4
- ldrb r0, [r7]
- eors r0, r6
- strb r0, [r7]
-_081BE398:
- ldr r1, =gBattleBankFunc
- ldr r2, =gActiveBank
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_81BB02C
- str r1, [r0]
- mov r3, r9
- strb r3, [r2]
- mov r0, r8
- bl DestroyTask
-_081BE3B0:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BE2C8
-
- thumb_func_start dp01t_30_3_80EB11C
-dp01t_30_3_80EB11C: @ 81BE3D4
- push {r4-r6,lr}
- ldr r1, =gBattleBufferA
- ldr r0, =gActiveBank
- ldrb r2, [r0]
- lsls r0, r2, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _081BE404
- adds r0, r2, 0
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- bne _081BE404
- bl PlayerPartnerBufferExecCompleted
- b _081BE478
- .pool
-_081BE404:
- ldr r6, =gBattleSpritesDataPtr
- ldr r0, [r6]
- ldr r5, =gActiveBank
- ldrb r1, [r5]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r2, 0x1
- orrs r1, r2
- strb r1, [r0]
- ldrb r0, [r5]
- lsls r3, r0, 9
- ldr r4, =gBattleBufferA + 4
- adds r1, r3, r4
- subs r2, r4, 0x3
- adds r2, r3, r2
- ldrb r2, [r2]
- subs r4, 0x2
- adds r3, r4
- ldrb r3, [r3]
- bl CreatePartyStatusSummarySprites
- ldr r2, =gUnknown_020244B4
- ldrb r1, [r5]
- adds r1, r2
- movs r3, 0
- strb r0, [r1]
- ldr r0, [r6]
- ldrb r1, [r5]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- strb r3, [r0, 0x5]
- ldrb r2, [r5]
- lsls r0, r2, 9
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0
- beq _081BE46C
- ldr r0, [r6]
- ldr r1, [r0, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- movs r1, 0x5D
- strb r1, [r0, 0x5]
-_081BE46C:
- ldr r0, =gBattleBankFunc
- ldrb r1, [r5]
- lsls r1, 2
- adds r1, r0
- ldr r0, =sub_81BE498
- str r0, [r1]
-_081BE478:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end dp01t_30_3_80EB11C
-
- thumb_func_start sub_81BE498
-sub_81BE498: @ 81BE498
- push {r4,lr}
- ldr r4, =gBattleSpritesDataPtr
- ldr r0, [r4]
- ldr r3, =gActiveBank
- ldrb r1, [r3]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x5]
- adds r2, r1, 0x1
- strb r2, [r0, 0x5]
- lsls r1, 24
- lsrs r1, 24
- cmp r1, 0x5C
- bls _081BE4D0
- ldr r0, [r4]
- ldrb r1, [r3]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0
- strb r1, [r0, 0x5]
- bl PlayerPartnerBufferExecCompleted
-_081BE4D0:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BE498
-
- thumb_func_start sub_81BE4E0
-sub_81BE4E0: @ 81BE4E0
- push {lr}
- ldr r0, =gBattleSpritesDataPtr
- ldr r1, [r0]
- ldr r0, =gActiveBank
- ldrb r3, [r0]
- ldr r1, [r1, 0x4]
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _081BE512
- ldr r2, =gTasks
- ldr r0, =gUnknown_020244B4
- adds r0, r3, r0
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- ldr r1, =sub_8073C30
- str r1, [r0]
-_081BE512:
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BE4E0
-
- thumb_func_start sub_81BE530
-sub_81BE530: @ 81BE530
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_81BE530
-
- thumb_func_start sub_81BE53C
-sub_81BE53C: @ 81BE53C
- push {r4,lr}
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- bl AnimBankSpriteExists
- lsls r0, 24
- cmp r0, 0
- beq _081BE582
- ldr r3, =gSprites
- ldr r0, =gBankSpriteIds
- ldrb r1, [r4]
- adds r0, r1, r0
- ldrb r0, [r0]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r3
- ldr r0, =gBattleBufferA
- lsls r1, 9
- adds r0, 0x1
- adds r1, r0
- adds r2, 0x3E
- movs r0, 0x1
- ldrb r1, [r1]
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2]
- ldrb r0, [r4]
- bl sub_805E408
-_081BE582:
- bl PlayerPartnerBufferExecCompleted
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BE53C
-
- thumb_func_start sub_81BE59C
-sub_81BE59C: @ 81BE59C
- push {r4-r6,lr}
- sub sp, 0x4
- ldr r6, =gActiveBank
- ldrb r0, [r6]
- bl mplay_80342A4
- lsls r0, 24
- cmp r0, 0
- bne _081BE5F4
- ldr r5, =gBattleBufferA
- ldrb r2, [r6]
- lsls r1, r2, 9
- adds r0, r5, 0x1
- adds r0, r1, r0
- ldrb r3, [r0]
- adds r0, r5, 0x2
- adds r0, r1, r0
- ldrb r4, [r0]
- adds r5, 0x3
- adds r1, r5
- ldrb r0, [r1]
- lsls r0, 8
- orrs r4, r0
- str r4, [sp]
- adds r0, r2, 0
- adds r1, r2, 0
- bl move_anim_start_t3
- lsls r0, 24
- cmp r0, 0
- beq _081BE5E8
- bl PlayerPartnerBufferExecCompleted
- b _081BE5F4
- .pool
-_081BE5E8:
- ldr r0, =gBattleBankFunc
- ldrb r1, [r6]
- lsls r1, 2
- adds r1, r0
- ldr r0, =bx_80E8A6C
- str r0, [r1]
-_081BE5F4:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BE59C
-
- thumb_func_start sub_81BE604
-sub_81BE604: @ 81BE604
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_81BE604
-
- thumb_func_start sub_81BE610
-sub_81BE610: @ 81BE610
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_81BE610
-
- thumb_func_start sub_81BE61C
-sub_81BE61C: @ 81BE61C
- push {r4,lr}
- ldr r2, =gBattleOutcome
- ldr r1, =gBattleBufferA
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- strb r0, [r2]
- movs r0, 0x5
- bl FadeOutMapMusic
- movs r0, 0x3
- bl BeginFastPaletteFade
- bl PlayerPartnerBufferExecCompleted
- ldr r1, =gBattleBankFunc
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_80587B0
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BE61C
-
- thumb_func_start nullsub_128
-nullsub_128: @ 81BE668
- bx lr
- thumb_func_end nullsub_128
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/battle_controller_recorded_opponent.s b/asm/battle_controller_recorded_opponent.s
index f98c10a6c..2a98967c4 100644
--- a/asm/battle_controller_recorded_opponent.s
+++ b/asm/battle_controller_recorded_opponent.s
@@ -129,7 +129,7 @@ sub_81865C8: @ 81865C8
bne _0818661A
adds r0, r2, r5
ldrh r0, [r0, 0x6]
- bl sub_805DFE4
+ bl FreeTrainerFrontPicPalette
ldrb r0, [r4]
adds r0, r6
ldrb r1, [r0]
@@ -1161,7 +1161,7 @@ sub_8186EA4: @ 8186EA4
adds r1, r3, 0
adds r2, r3, 0
movs r3, 0x6
- bl move_anim_start_t4
+ bl DoSpecialBattleAnimation
_08186EE4:
ldr r0, =gBattleBankFunc
ldrb r1, [r4]
@@ -1310,7 +1310,7 @@ sub_8186F94: @ 8186F94
ldrb r0, [r0]
bl SetHealthboxSpriteVisible
ldrb r0, [r5]
- bl sub_805E408
+ bl SetBattleSpriteInvisibilityBitToSpriteInvisibility
ldr r1, =gBattleBankFunc
ldrb r0, [r5]
lsls r0, 2
@@ -3716,7 +3716,7 @@ sub_81885D8: @ 81885D8
lsls r1, 24
lsrs r1, 24
adds r0, r6, 0
- bl sub_805EF84
+ bl ClearTemporarySpeciesSpriteData
ldr r0, =gBattlePartyID
lsls r4, r6, 1
adds r4, r0
@@ -3968,7 +3968,7 @@ _08188828:
adds r0, r2, 0
adds r1, r2, 0
movs r3, 0x5
- bl move_anim_start_t4
+ bl DoSpecialBattleAnimation
_08188842:
ldr r0, [r6]
ldrb r1, [r5]
@@ -3993,7 +3993,7 @@ _08188856:
adds r0, r2, 0
adds r1, r2, 0
movs r3, 0x2
- bl move_anim_start_t4
+ bl DoSpecialBattleAnimation
ldr r1, =gBattleBankFunc
ldrb r0, [r5]
lsls r0, 2
@@ -4045,7 +4045,7 @@ _081888D8:
ldr r0, =gTrainerBattleOpponent_B
_081888DA:
ldrh r0, [r0]
- bl sub_8162AA0
+ bl GetFrontierTrainerFrontSpriteId
lsls r0, 24
lsrs r0, 24
b _0818892C
@@ -4078,7 +4078,7 @@ _08188910:
adds r0, r2
ldrb r0, [r0, 0x13]
_08188924:
- bl sub_806F000
+ bl PlayerGenderToFrontTrainerPicId
_08188928:
lsls r0, 16
lsrs r0, 16
@@ -4086,7 +4086,7 @@ _0818892C:
mov r8, r0
ldr r5, =gActiveBank
ldrb r1, [r5]
- bl sub_805DF38
+ bl DecompressTrainerFrontPic
ldrb r0, [r5]
bl GetBankIdentity
adds r1, r0, 0
@@ -4301,7 +4301,7 @@ sub_8188AF8: @ 8188AF8
adds r0, r2, 0
adds r1, r2, 0
movs r3, 0x5
- bl move_anim_start_t4
+ bl DoSpecialBattleAnimation
_08188B2C:
ldr r0, [r6]
ldrb r1, [r5]
@@ -4483,14 +4483,14 @@ _08188BE6:
adds r1, 0x10
adds r2, r1
str r2, [r3]
- ldr r3, =gUnknown_020244BC
+ ldr r3, =gTransformedPersonalities
ldrb r1, [r6]
lsls r1, 2
adds r1, r3
ldr r2, [r2]
str r2, [r1]
ldrb r1, [r5]
- bl sub_805DB8C
+ bl IsMoveWithoutAnimation
lsls r0, 24
lsrs r3, r0, 24
cmp r3, 0
@@ -4584,7 +4584,7 @@ _08188D6E:
adds r0, r2, 0
adds r1, r2, 0
movs r3, 0x5
- bl move_anim_start_t4
+ bl DoSpecialBattleAnimation
_08188D90:
ldr r0, [r7]
ldrb r1, [r6]
@@ -4642,7 +4642,7 @@ _08188DCE:
adds r0, r2, 0
adds r1, r2, 0
movs r3, 0x6
- bl move_anim_start_t4
+ bl DoSpecialBattleAnimation
ldr r0, [r7]
ldrb r1, [r6]
ldr r0, [r0]
@@ -4685,7 +4685,7 @@ _08188E44:
ldrb r2, [r2]
lsls r2, 8
orrs r1, r2
- bl sub_805E94C
+ bl TrySetBehindSubstituteSpriteBit
ldr r0, [r7]
ldrb r1, [r6]
ldr r2, [r0, 0x4]
@@ -4722,7 +4722,7 @@ sub_8188E90: @ 8188E90
bl BufferStringBattle
ldr r0, =gDisplayedStringBattle
movs r1, 0
- bl sub_814F9EC
+ bl BattleHandleAddTextPrinter
ldr r1, =gBattleBankFunc
ldrb r0, [r4]
lsls r0, 2
@@ -4748,13 +4748,13 @@ sub_8188EF0: @ 8188EF0
push {lr}
ldr r0, =gActiveBank
ldrb r0, [r0]
- bl sub_8185054
+ bl RecordedBattle_ReadBankAction
adds r1, r0, 0
lsls r1, 24
lsrs r1, 24
movs r0, 0x1
movs r2, 0
- bl EmitCmd33
+ bl EmitTwoReturnValues
bl RecordedOpponentBufferExecCompleted
pop {r0}
bx r0
@@ -4779,31 +4779,31 @@ sub_8188F20: @ 8188F20
ands r0, r1
cmp r0, 0
beq _08188F48
- bl sub_805D19C
+ bl ChooseMoveAndTargetInBattlePalace
adds r2, r0, 0
lsls r2, 16
lsrs r2, 16
movs r0, 0x1
movs r1, 0xA
- bl EmitCmd33
+ bl EmitTwoReturnValues
b _08188F6C
.pool
_08188F48:
ldr r5, =gActiveBank
ldrb r0, [r5]
- bl sub_8185054
+ bl RecordedBattle_ReadBankAction
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
ldrb r0, [r5]
- bl sub_8185054
+ bl RecordedBattle_ReadBankAction
adds r2, r0, 0
lsls r2, 24
lsrs r2, 16
orrs r2, r4
movs r0, 0x1
movs r1, 0xA
- bl EmitCmd33
+ bl EmitTwoReturnValues
_08188F6C:
bl RecordedOpponentBufferExecCompleted
pop {r4,r5}
@@ -4825,7 +4825,7 @@ sub_8188F88: @ 8188F88
push {r4,lr}
ldr r4, =gActiveBank
ldrb r0, [r4]
- bl sub_8185054
+ bl RecordedBattle_ReadBankAction
ldrb r1, [r4]
ldr r3, =gBattleStruct
ldr r2, [r3]
@@ -4839,7 +4839,7 @@ sub_8188F88: @ 8188F88
ldrb r1, [r0]
movs r0, 0x1
movs r2, 0
- bl EmitCmd34
+ bl EmitChosenMonReturnValue
bl RecordedOpponentBufferExecCompleted
pop {r4}
pop {r0}
@@ -5041,7 +5041,7 @@ sub_8189144: @ 8189144
ldrb r2, [r3]
lsls r2, 24
orrs r1, r2
- bl move_anim_start_t2_for_situation
+ bl DoStatusAnimation
ldr r1, =gBattleBankFunc
ldrb r0, [r5]
lsls r0, 2
@@ -5237,7 +5237,7 @@ _081892E0:
movs r1, 0
strh r1, [r0, 0x30]
ldrb r0, [r4]
- bl sub_80769F4
+ bl DoHitAnimHealthboxEffect
ldr r1, =gBattleBankFunc
ldrb r0, [r4]
lsls r0, 2
@@ -5371,7 +5371,7 @@ sub_8189404: @ 8189404
adds r1, 0x1
adds r0, r1
ldrb r0, [r0]
- bl battle_intro_launch
+ bl HandleIntroSlide
ldr r2, =gUnknown_020243FC
ldrh r0, [r2]
movs r1, 0x1
@@ -5601,7 +5601,7 @@ sub_818962C: @ 818962C
push {r4,lr}
adds r4, r0, 0
ldrh r0, [r4, 0x6]
- bl sub_805DFE4
+ bl FreeTrainerFrontPicPalette
adds r0, r4, 0
bl FreeSpriteOamMatrix
adds r0, r4, 0
@@ -5848,7 +5848,7 @@ sub_8189800: @ 8189800
orrs r0, r1
strb r0, [r2]
ldrb r0, [r4]
- bl sub_805E408
+ bl SetBattleSpriteInvisibilityBitToSpriteInvisibility
_08189846:
bl RecordedOpponentBufferExecCompleted
pop {r4}
@@ -5884,7 +5884,7 @@ sub_8189860: @ 8189860
str r4, [sp]
adds r0, r2, 0
adds r1, r2, 0
- bl move_anim_start_t3
+ bl DoBattleAnimationFromTable
lsls r0, 24
cmp r0, 0
beq _081898AC
diff --git a/asm/battle_controller_recorded_player.s b/asm/battle_controller_recorded_player.s
deleted file mode 100644
index 6f3976205..000000000
--- a/asm/battle_controller_recorded_player.s
+++ /dev/null
@@ -1,6144 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
-
- thumb_func_start nullsub_120
-nullsub_120: @ 8189948
- bx lr
- thumb_func_end nullsub_120
-
- thumb_func_start SetBankFuncToRecordedPlayerBufferRunCommand
-SetBankFuncToRecordedPlayerBufferRunCommand: @ 818994C
- ldr r1, =gBattleBankFunc
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, =RecordedPlayerBufferRunCommand
- str r1, [r0]
- bx lr
- .pool
- thumb_func_end SetBankFuncToRecordedPlayerBufferRunCommand
-
- thumb_func_start RecordedPlayerBufferRunCommand
-RecordedPlayerBufferRunCommand: @ 8189968
- push {lr}
- ldr r2, =gBattleExecBuffer
- ldr r1, =gBitTable
- ldr r0, =gActiveBank
- ldrb r3, [r0]
- lsls r0, r3, 2
- adds r0, r1
- ldr r1, [r2]
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _081899B4
- ldr r0, =gBattleBufferA
- lsls r1, r3, 9
- adds r1, r0
- ldrb r0, [r1]
- cmp r0, 0x38
- bhi _081899B0
- ldr r0, =gRecordedPlayerBufferCommands
- ldrb r1, [r1]
- lsls r1, 2
- adds r1, r0
- ldr r0, [r1]
- bl _call_via_r0
- b _081899B4
- .pool
-_081899B0:
- bl RecordedPlayerBufferExecCompleted
-_081899B4:
- pop {r0}
- bx r0
- thumb_func_end RecordedPlayerBufferRunCommand
-
- thumb_func_start sub_81899B8
-sub_81899B8: @ 81899B8
- push {lr}
- ldr r2, =gSprites
- ldr r1, =gBankSpriteIds
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, [r0]
- ldr r0, =SpriteCallbackDummy
- cmp r1, r0
- bne _081899DC
- bl RecordedPlayerBufferExecCompleted
-_081899DC:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81899B8
-
- thumb_func_start sub_81899F0
-sub_81899F0: @ 81899F0
- push {r4-r6,lr}
- ldr r6, =gSprites
- ldr r5, =gBankSpriteIds
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r6, 0
- adds r1, 0x1C
- adds r0, r1
- ldr r1, [r0]
- ldr r0, =SpriteCallbackDummy
- cmp r1, r0
- bne _08189A40
- movs r0, 0
- bl nullsub_25
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- bl FreeSpriteOamMatrix
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- bl DestroySprite
- bl RecordedPlayerBufferExecCompleted
-_08189A40:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81899F0
-
- thumb_func_start sub_8189A58
-sub_8189A58: @ 8189A58
- push {r4,lr}
- ldr r4, =gBattleSpritesDataPtr
- ldr r1, [r4]
- ldr r3, =gActiveBank
- ldrb r0, [r3]
- ldr r2, [r1, 0x4]
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r0, [r1, 0x9]
- subs r0, 0x1
- strb r0, [r1, 0x9]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- bne _08189A90
- ldr r0, [r4]
- ldrb r1, [r3]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0
- strb r1, [r0, 0x9]
- bl RecordedPlayerBufferExecCompleted
-_08189A90:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8189A58
-
- thumb_func_start sub_8189AA0
-sub_8189AA0: @ 8189AA0
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- movs r6, 0
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- bl GetBankIdentity
- lsls r0, 24
- cmp r0, 0
- beq _08189ABA
- b _08189C60
-_08189ABA:
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _08189ADA
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _08189B0C
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08189B0C
-_08189ADA:
- ldr r2, =gSprites
- ldr r1, =gHealthBoxesIds
- ldrb r0, [r4]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, [r0]
- ldr r0, =SpriteCallbackDummy
- cmp r1, r0
- bne _08189B42
- b _08189B48
- .pool
-_08189B0C:
- ldr r2, =gSprites
- ldr r5, =gHealthBoxesIds
- ldr r0, =gActiveBank
- ldrb r3, [r0]
- adds r0, r3, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r4, [r0]
- ldr r0, =SpriteCallbackDummy
- cmp r4, r0
- bne _08189B42
- movs r0, 0x2
- eors r3, r0
- adds r0, r3, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- cmp r0, r4
- bne _08189B42
- movs r6, 0x1
-_08189B42:
- cmp r6, 0
- bne _08189B48
- b _08189D18
-_08189B48:
- ldr r0, =gBattleSpritesDataPtr
- mov r9, r0
- ldr r0, [r0]
- ldr r5, =gActiveBank
- ldrb r2, [r5]
- ldr r3, [r0, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r4, r0, r3
- ldrb r1, [r4, 0x1]
- movs r6, 0x1
- adds r0, r6, 0
- ands r0, r1
- cmp r0, 0
- bne _08189B6A
- b _08189D18
-_08189B6A:
- movs r1, 0x2
- mov r8, r1
- mov r1, r8
- eors r1, r2
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrb r1, [r0, 0x1]
- adds r0, r6, 0
- ands r0, r1
- cmp r0, 0
- bne _08189B86
- b _08189D18
-_08189B86:
- ldrb r1, [r4]
- movs r3, 0x7F
- adds r0, r3, 0
- ands r0, r1
- strb r0, [r4]
- mov r1, r9
- ldr r0, [r1]
- ldrb r2, [r5]
- ldr r0, [r0, 0x4]
- lsls r1, r2, 1
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r2, [r1, 0x1]
- movs r4, 0x2
- negs r4, r4
- adds r0, r4, 0
- ands r0, r2
- strb r0, [r1, 0x1]
- mov r0, r9
- ldr r2, [r0]
- ldrb r0, [r5]
- mov r1, r8
- eors r1, r0
- ldr r2, [r2, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- ands r3, r1
- strb r3, [r0]
- mov r1, r9
- ldr r2, [r1]
- ldrb r0, [r5]
- mov r1, r8
- eors r1, r0
- ldr r2, [r2, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x1]
- ands r4, r1
- strb r4, [r0, 0x1]
- ldr r4, =0x000027f9
- adds r0, r4, 0
- bl FreeSpriteTilesByTag
- adds r0, r4, 0
- bl FreeSpritePaletteByTag
- ldr r7, =gBattlePartyID
- ldrb r1, [r5]
- lsls r0, r1, 1
- adds r0, r7
- ldrh r0, [r0]
- movs r6, 0x64
- muls r0, r6
- ldr r4, =gPlayerParty
- adds r0, r4
- bl sub_805E990
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _08189C22
- ldrb r0, [r5]
- mov r1, r8
- eors r1, r0
- lsls r0, r1, 1
- adds r0, r7
- ldrh r0, [r0]
- muls r0, r6
- adds r0, r4
- bl sub_805E990
-_08189C22:
- mov r1, r9
- ldr r0, [r1]
- ldrb r1, [r5]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x3
- strb r1, [r0, 0x9]
- ldr r1, =gBattleBankFunc
- ldrb r0, [r5]
- b _08189D10
- .pool
-_08189C60:
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _08189C80
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _08189CB0
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08189CB0
-_08189C80:
- ldr r2, =gSprites
- ldr r1, =gHealthBoxesIds
- ldrb r0, [r4]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, [r0]
- ldr r0, =SpriteCallbackDummy
- cmp r1, r0
- bne _08189CE6
- b _08189CE4
- .pool
-_08189CB0:
- ldr r2, =gSprites
- ldr r5, =gHealthBoxesIds
- ldr r0, =gActiveBank
- ldrb r3, [r0]
- adds r0, r3, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r4, [r0]
- ldr r0, =SpriteCallbackDummy
- cmp r4, r0
- bne _08189CE6
- movs r0, 0x2
- eors r3, r0
- adds r0, r3, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- cmp r0, r4
- bne _08189CE6
-_08189CE4:
- movs r6, 0x1
-_08189CE6:
- bl IsCryPlayingOrClearCrySongs
- lsls r0, 24
- cmp r0, 0
- beq _08189CF2
- movs r6, 0
-_08189CF2:
- cmp r6, 0
- beq _08189D18
- ldr r0, =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r3, =gActiveBank
- ldrb r1, [r3]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x3
- strb r1, [r0, 0x9]
- ldr r1, =gBattleBankFunc
- ldrb r0, [r3]
-_08189D10:
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_8189A58
- str r1, [r0]
-_08189D18:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8189AA0
-
- thumb_func_start sub_8189D40
-sub_8189D40: @ 8189D40
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- movs r0, 0
- mov r10, r0
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- bl GetBankIdentity
- lsls r0, 24
- cmp r0, 0
- bne _08189DBE
- ldr r5, =gBattleSpritesDataPtr
- ldr r0, [r5]
- ldrb r2, [r4]
- ldr r1, [r0, 0x4]
- lsls r3, r2, 1
- adds r0, r3, r2
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r6, 0x88
- adds r0, r6, 0
- ands r0, r1
- cmp r0, 0
- bne _08189D8C
- ldr r0, =gBattlePartyID
- adds r0, r3, r0
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, =gPlayerParty
- adds r1, r0
- adds r0, r2, 0
- bl sub_8172EF0
-_08189D8C:
- ldr r2, [r5]
- ldrb r1, [r4]
- movs r0, 0x2
- adds r3, r0, 0
- eors r3, r1
- ldr r1, [r2, 0x4]
- lsls r2, r3, 1
- adds r0, r2, r3
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- adds r0, r6, 0
- ands r0, r1
- cmp r0, 0
- bne _08189DBE
- ldr r0, =gBattlePartyID
- adds r0, r2, r0
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, =gPlayerParty
- adds r1, r0
- adds r0, r3, 0
- bl sub_8172EF0
-_08189DBE:
- ldr r3, =gBattleSpritesDataPtr
- ldr r0, [r3]
- ldr r2, =gActiveBank
- ldrb r5, [r2]
- ldr r4, [r0, 0x4]
- lsls r0, r5, 1
- adds r0, r5
- lsls r0, 2
- adds r6, r0, r4
- ldrb r1, [r6]
- movs r0, 0x8
- mov r12, r0
- ands r0, r1
- mov r9, r2
- mov r8, r3
- cmp r0, 0
- bne _08189EA2
- movs r7, 0x2
- adds r1, r7, 0
- eors r1, r5
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r1, [r0]
- mov r0, r12
- ands r0, r1
- cmp r0, 0
- bne _08189EA2
- ldrb r1, [r6, 0x1]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08189E84
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _08189E54
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- bne _08189E54
- ldr r4, =gHealthBoxesIds
- mov r1, r9
- ldrb r0, [r1]
- adds r1, r7, 0
- eors r1, r0
- adds r0, r1, r4
- ldrb r0, [r0]
- ldr r2, =gBattlePartyID
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, =gPlayerParty
- adds r1, r2
- movs r2, 0
- bl UpdateHealthboxAttribute
- mov r1, r9
- ldrb r0, [r1]
- eors r0, r7
- bl sub_8076918
- mov r1, r9
- ldrb r0, [r1]
- eors r0, r7
- adds r0, r4
- ldrb r0, [r0]
- bl SetHealthboxSpriteVisible
-_08189E54:
- ldr r5, =gHealthBoxesIds
- ldr r4, =gActiveBank
- ldrb r1, [r4]
- adds r0, r1, r5
- ldrb r0, [r0]
- ldr r2, =gBattlePartyID
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, =gPlayerParty
- adds r1, r2
- movs r2, 0
- bl UpdateHealthboxAttribute
- ldrb r0, [r4]
- bl sub_8076918
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl SetHealthboxSpriteVisible
-_08189E84:
- ldr r4, =gBattleSpritesDataPtr
- ldr r0, [r4]
- ldr r3, =gActiveBank
- ldrb r1, [r3]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x1]
- movs r2, 0x80
- orrs r1, r2
- strb r1, [r0, 0x1]
- mov r9, r3
- mov r8, r4
-_08189EA2:
- mov r1, r8
- ldr r0, [r1]
- mov r1, r9
- ldrb r2, [r1]
- ldr r3, [r0, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r3
- ldrb r1, [r0, 0x1]
- movs r0, 0xC0
- ands r0, r1
- cmp r0, 0x80
- bne _08189F62
- movs r1, 0x2
- eors r1, r2
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrb r1, [r0, 0x1]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _08189F62
- bl IsCryPlayingOrClearCrySongs
- lsls r0, 24
- cmp r0, 0
- bne _08189F62
- mov r1, r8
- ldr r0, [r1]
- mov r1, r9
- ldrb r2, [r1]
- ldr r1, [r0, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x1]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- bne _08189F44
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x42
- ands r0, r1
- cmp r0, 0x42
- bne _08189F38
- adds r0, r2, 0
- bl GetBankIdentity
- lsls r0, 24
- cmp r0, 0
- bne _08189F44
- ldr r0, =gMPlay_BGM
- bl m4aMPlayContinue
- b _08189F44
- .pool
-_08189F38:
- ldr r0, =gMPlay_BGM
- ldr r1, =0x0000ffff
- movs r2, 0x80
- lsls r2, 1
- bl m4aMPlayVolumeControl
-_08189F44:
- ldr r0, =gBattleSpritesDataPtr
- ldr r2, [r0]
- ldr r0, =gActiveBank
- ldrb r1, [r0]
- ldr r2, [r2, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x1]
- movs r2, 0x20
- orrs r1, r2
- strb r1, [r0, 0x1]
- movs r0, 0x1
- mov r10, r0
-_08189F62:
- mov r1, r10
- cmp r1, 0
- beq _0818A02A
- ldr r7, =gSprites
- ldr r6, =gUnknown_03005D7C
- ldr r5, =gActiveBank
- ldrb r3, [r5]
- adds r0, r3, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r4, r7, 0
- adds r4, 0x1C
- adds r0, r4
- ldr r2, [r0]
- ldr r0, =SpriteCallbackDummy
- cmp r2, r0
- bne _0818A02A
- ldr r0, =gBankSpriteIds
- adds r0, r3, r0
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldr r0, [r0]
- cmp r0, r2
- bne _0818A02A
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _08189FC8
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- bne _08189FC8
- ldrb r1, [r5]
- movs r0, 0x2
- eors r0, r1
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r7
- bl DestroySprite
-_08189FC8:
- ldr r1, =gUnknown_03005D7C
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSprites
- adds r0, r1
- bl DestroySprite
- ldr r3, =gBattleSpritesDataPtr
- ldr r0, [r3]
- ldr r2, [r0, 0x8]
- ldrb r1, [r2, 0x9]
- movs r0, 0x2
- negs r0, r0
- ands r0, r1
- strb r0, [r2, 0x9]
- ldr r0, [r3]
- ldrb r2, [r4]
- ldr r0, [r0, 0x4]
- lsls r1, r2, 1
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r2, [r1, 0x1]
- movs r0, 0x21
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0x1]
- ldr r0, [r3]
- ldrb r2, [r4]
- ldr r0, [r0, 0x4]
- lsls r1, r2, 1
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r2, [r1, 0x1]
- movs r0, 0x7F
- ands r0, r2
- strb r0, [r1, 0x1]
- ldr r1, =gBattleBankFunc
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_8189AA0
- str r1, [r0]
-_0818A02A:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8189D40
-
- thumb_func_start sub_818A064
-sub_818A064: @ 818A064
- push {lr}
- ldr r2, =gSprites
- ldr r1, =gBankSpriteIds
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r0, r2
- adds r0, r1, 0
- adds r0, 0x3F
- ldrb r0, [r0]
- lsls r0, 27
- cmp r0, 0
- bge _0818A092
- movs r2, 0x24
- ldrsh r0, [r1, r2]
- cmp r0, 0
- bne _0818A092
- bl RecordedPlayerBufferExecCompleted
-_0818A092:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818A064
-
- thumb_func_start sub_818A0A4
-sub_818A0A4: @ 818A0A4
- push {r4-r6,lr}
- ldr r5, =gActiveBank
- ldrb r0, [r5]
- ldr r6, =gHealthBoxesIds
- adds r1, r0, r6
- ldrb r1, [r1]
- movs r2, 0
- movs r3, 0
- bl sub_8074AA0
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- ldrb r0, [r5]
- adds r0, r6
- ldrb r0, [r0]
- bl SetHealthboxSpriteVisible
- lsls r4, 16
- asrs r1, r4, 16
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _0818A0EC
- ldrb r0, [r5]
- adds r0, r6
- ldrb r0, [r0]
- movs r2, 0
- bl UpdateHpTextInHealthbox
- b _0818A106
- .pool
-_0818A0EC:
- ldr r2, =gBattlePartyID
- ldrb r1, [r5]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, =gPlayerParty
- adds r0, r2
- bl sub_805E990
- bl RecordedPlayerBufferExecCompleted
-_0818A106:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818A0A4
-
- thumb_func_start sub_818A114
-sub_818A114: @ 818A114
- push {r4-r6,lr}
- ldr r6, =gSprites
- ldr r5, =gBankSpriteIds
- ldr r4, =gActiveBank
- ldrb r2, [r4]
- adds r0, r2, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- movs r3, 0x22
- ldrsh r1, [r0, r3]
- movs r3, 0x26
- ldrsh r0, [r0, r3]
- adds r1, r0
- cmp r1, 0xA0
- ble _0818A190
- ldr r1, =gBattlePartyID
- lsls r0, r2, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- bl nullsub_24
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- ldrb r0, [r0, 0x3]
- lsls r0, 26
- lsrs r0, 27
- bl FreeOamMatrix
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- bl DestroySprite
- ldr r1, =gHealthBoxesIds
- ldrb r0, [r4]
- adds r0, r1
- ldrb r0, [r0]
- bl SetHealthboxSpriteInvisible
- bl RecordedPlayerBufferExecCompleted
-_0818A190:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818A114
-
- thumb_func_start sub_818A1B0
-sub_818A1B0: @ 818A1B0
- push {r4-r6,lr}
- ldr r0, =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r6, =gActiveBank
- ldrb r2, [r6]
- ldr r1, [r0, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _0818A204
- ldr r5, =gBankSpriteIds
- adds r0, r2, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, =gSprites
- adds r0, r4
- bl FreeSpriteOamMatrix
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl DestroySprite
- ldr r1, =gHealthBoxesIds
- ldrb r0, [r6]
- adds r0, r1
- ldrb r0, [r0]
- bl SetHealthboxSpriteInvisible
- bl RecordedPlayerBufferExecCompleted
-_0818A204:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818A1B0
-
- thumb_func_start sub_818A220
-sub_818A220: @ 818A220
- push {lr}
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- bne _0818A232
- bl RecordedPlayerBufferExecCompleted
-_0818A232:
- pop {r0}
- bx r0
- thumb_func_end sub_818A220
-
- thumb_func_start sub_818A238
-sub_818A238: @ 818A238
- push {r4,lr}
- ldr r1, =gBankSpriteIds
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- ldr r2, =gSprites
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r4, r0, r2
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- cmp r0, 0x20
- bne _0818A284
- movs r3, 0
- movs r0, 0
- strh r0, [r4, 0x30]
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r1, [r2]
- subs r0, 0x5
- ands r0, r1
- strb r0, [r2]
- ldr r0, =gDoingBattleAnim
- strb r3, [r0]
- bl RecordedPlayerBufferExecCompleted
- b _0818A2AE
- .pool
-_0818A284:
- ldrh r0, [r4, 0x30]
- movs r1, 0x3
- ands r0, r1
- cmp r0, 0
- bne _0818A2A8
- adds r3, r4, 0
- adds r3, 0x3E
- ldrb r2, [r3]
- lsls r0, r2, 29
- lsrs r0, 31
- movs r1, 0x1
- eors r1, r0
- lsls r1, 2
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
-_0818A2A8:
- ldrh r0, [r4, 0x30]
- adds r0, 0x1
- strh r0, [r4, 0x30]
-_0818A2AE:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_818A238
-
- thumb_func_start sub_818A2B4
-sub_818A2B4: @ 818A2B4
- push {r4,lr}
- ldr r2, =gSprites
- ldr r0, =gHealthBoxesIds
- ldr r4, =gActiveBank
- ldrb r3, [r4]
- adds r0, r3, r0
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, [r0]
- ldr r0, =SpriteCallbackDummy
- cmp r1, r0
- bne _0818A306
- adds r0, r3, 0
- bl sub_805E408
- ldr r0, =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldrb r2, [r4]
- ldr r1, [r0]
- lsls r0, r2, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0818A2FA
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x6
- bl move_anim_start_t4
-_0818A2FA:
- ldr r0, =gBattleBankFunc
- ldrb r1, [r4]
- lsls r1, 2
- adds r1, r0
- ldr r0, =sub_818A328
- str r0, [r1]
-_0818A306:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818A2B4
-
- thumb_func_start sub_818A328
-sub_818A328: @ 818A328
- push {lr}
- ldr r0, =gBattleSpritesDataPtr
- ldr r1, [r0]
- ldr r0, =gActiveBank
- ldrb r3, [r0]
- ldr r1, [r1, 0x4]
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _0818A364
- ldr r2, =gSprites
- ldr r0, =gBankSpriteIds
- adds r0, r3, r0
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, [r0]
- ldr r0, =SpriteCallbackDummy
- cmp r1, r0
- bne _0818A364
- bl RecordedPlayerBufferExecCompleted
-_0818A364:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818A328
-
- thumb_func_start sub_818A37C
-sub_818A37C: @ 818A37C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r3, =gBattleSpritesDataPtr
- ldr r0, [r3]
- ldr r7, =gActiveBank
- ldrb r1, [r7]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r2, r0, r2
- ldrb r1, [r2, 0x1]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0818A438
- ldrb r1, [r2]
- movs r0, 0x7F
- ands r0, r1
- strb r0, [r2]
- ldr r0, [r3]
- ldrb r2, [r7]
- ldr r0, [r0, 0x4]
- lsls r1, r2, 1
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r2, [r1, 0x1]
- movs r0, 0x2
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0x1]
- ldr r4, =0x000027f9
- adds r0, r4, 0
- bl FreeSpriteTilesByTag
- adds r0, r4, 0
- bl FreeSpritePaletteByTag
- ldr r0, =c3_0802FDF4
- movs r1, 0xA
- bl CreateTask
- ldr r0, =gBattlePartyID
- mov r8, r0
- ldrb r1, [r7]
- lsls r0, r1, 1
- add r0, r8
- ldrh r0, [r0]
- movs r6, 0x64
- muls r0, r6
- ldr r5, =gPlayerParty
- adds r0, r5
- bl sub_805E990
- ldr r1, =gBankSpriteIds
- ldrb r0, [r7]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSprites
- adds r0, r1
- movs r1, 0
- bl StartSpriteAnim
- ldr r4, =gHealthBoxesIds
- ldrb r1, [r7]
- adds r0, r1, r4
- ldrb r0, [r0]
- lsls r1, 1
- add r1, r8
- ldrh r1, [r1]
- muls r1, r6
- adds r1, r5
- movs r2, 0
- bl UpdateHealthboxAttribute
- ldrb r0, [r7]
- bl sub_8076918
- ldrb r0, [r7]
- adds r0, r4
- ldrb r0, [r0]
- bl SetHealthboxSpriteVisible
- ldr r1, =gBattleBankFunc
- ldrb r0, [r7]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_818A2B4
- str r1, [r0]
-_0818A438:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818A37C
-
- thumb_func_start sub_818A470
-sub_818A470: @ 818A470
- push {r4-r6,lr}
- ldr r6, =gBattleSpritesDataPtr
- ldr r0, [r6]
- ldr r4, =gActiveBank
- ldrb r2, [r4]
- ldr r1, [r0, 0x4]
- lsls r3, r2, 1
- adds r0, r3, r2
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x88
- ands r0, r1
- cmp r0, 0
- bne _0818A4A2
- ldr r0, =gBattlePartyID
- adds r0, r3, r0
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, =gPlayerParty
- adds r1, r0
- adds r0, r2, 0
- bl sub_8172EF0
-_0818A4A2:
- ldr r5, =gSprites
- ldr r0, =gUnknown_03005D7C
- ldrb r2, [r4]
- adds r0, r2, r0
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r3, r0, 2
- adds r0, r5, 0
- adds r0, 0x1C
- adds r0, r3, r0
- ldr r1, [r0]
- ldr r0, =SpriteCallbackDummy
- cmp r1, r0
- bne _0818A4E8
- ldr r0, [r6]
- ldr r1, [r0, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- bne _0818A4E8
- adds r0, r3, r5
- bl DestroySprite
- ldr r1, =gBattleBankFunc
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_818A37C
- str r1, [r0]
-_0818A4E8:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818A470
-
- thumb_func_start RecordedPlayerBufferExecCompleted
-RecordedPlayerBufferExecCompleted: @ 818A514
- push {r4,lr}
- sub sp, 0x4
- ldr r1, =gBattleBankFunc
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, =RecordedPlayerBufferRunCommand
- str r1, [r0]
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0818A568
- bl GetMultiplayerId
- mov r1, sp
- strb r0, [r1]
- movs r0, 0x2
- movs r1, 0x4
- mov r2, sp
- bl PrepareBufferDataTransferLink
- ldr r1, =gBattleBufferA
- ldrb r0, [r4]
- lsls r0, 9
- adds r0, r1
- movs r1, 0x38
- strb r1, [r0]
- b _0818A57A
- .pool
-_0818A568:
- ldr r2, =gBattleExecBuffer
- ldr r1, =gBitTable
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- ldr r0, [r2]
- bics r0, r1
- str r0, [r2]
-_0818A57A:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end RecordedPlayerBufferExecCompleted
-
- thumb_func_start sub_818A58C
-sub_818A58C: @ 818A58C
- push {lr}
- ldr r0, =gBattleSpritesDataPtr
- ldr r2, [r0]
- ldr r0, =gActiveBank
- ldrb r1, [r0]
- ldr r2, [r2, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- bne _0818A5AE
- bl RecordedPlayerBufferExecCompleted
-_0818A5AE:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818A58C
-
- thumb_func_start sub_818A5BC
-sub_818A5BC: @ 818A5BC
- push {lr}
- ldr r0, =gBattleSpritesDataPtr
- ldr r2, [r0]
- ldr r0, =gActiveBank
- ldrb r1, [r0]
- ldr r2, [r2, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- bne _0818A5DE
- bl RecordedPlayerBufferExecCompleted
-_0818A5DE:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818A5BC
-
- thumb_func_start sub_818A5EC
-sub_818A5EC: @ 818A5EC
- push {r4-r6,lr}
- sub sp, 0x100
- movs r6, 0
- ldr r1, =gBattleBufferA
- ldr r0, =gActiveBank
- ldrb r2, [r0]
- lsls r0, r2, 9
- adds r1, 0x2
- adds r1, r0, r1
- ldrb r0, [r1]
- cmp r0, 0
- bne _0818A624
- ldr r0, =gBattlePartyID
- lsls r1, r2, 1
- adds r1, r0
- ldrb r0, [r1]
- mov r1, sp
- bl sub_818A660
- adds r6, r0, 0
- b _0818A646
- .pool
-_0818A624:
- ldrb r4, [r1]
- movs r5, 0
-_0818A628:
- movs r0, 0x1
- ands r0, r4
- cmp r0, 0
- beq _0818A63E
- lsls r0, r5, 24
- lsrs r0, 24
- mov r2, sp
- adds r1, r2, r6
- bl sub_818A660
- adds r6, r0
-_0818A63E:
- lsrs r4, 1
- adds r5, 0x1
- cmp r5, 0x5
- ble _0818A628
-_0818A646:
- lsls r1, r6, 16
- lsrs r1, 16
- movs r0, 0x1
- mov r2, sp
- bl EmitDataTransfer
- bl RecordedPlayerBufferExecCompleted
- add sp, 0x100
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_818A5EC
-
- thumb_func_start sub_818A660
-sub_818A660: @ 818A660
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x90
- adds r7, r1, 0
- lsls r0, 24
- lsrs r5, r0, 24
- movs r6, 0
- ldr r2, =gBattleBufferA
- ldr r3, =gActiveBank
- ldrb r0, [r3]
- lsls r0, 9
- adds r1, r2, 0x1
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x3B
- bls _0818A68A
- bl _0818ADF6
-_0818A68A:
- lsls r0, 2
- ldr r1, =_0818A6A0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0818A6A0:
- .4byte _0818A790
- .4byte _0818A9B4
- .4byte _0818A9C4
- .4byte _0818A9D4
- .4byte _0818AA3C
- .4byte _0818AA3C
- .4byte _0818AA3C
- .4byte _0818AA3C
- .4byte _0818AA58
- .4byte _0818AA94
- .4byte _0818AA94
- .4byte _0818AA94
- .4byte _0818AA94
- .4byte _0818ADF6
- .4byte _0818ADF6
- .4byte _0818ADF6
- .4byte _0818ADF6
- .4byte _0818AAB0
- .4byte _0818AAC0
- .4byte _0818AAF0
- .4byte _0818AB00
- .4byte _0818AB10
- .4byte _0818AB20
- .4byte _0818AB30
- .4byte _0818AB40
- .4byte _0818AB50
- .4byte _0818AB60
- .4byte _0818AB70
- .4byte _0818AB80
- .4byte _0818AB90
- .4byte _0818ABA0
- .4byte _0818ABB0
- .4byte _0818AC00
- .4byte _0818AC10
- .4byte _0818AC20
- .4byte _0818AC30
- .4byte _0818AC40
- .4byte _0818AC50
- .4byte _0818AC60
- .4byte _0818AC70
- .4byte _0818AC80
- .4byte _0818ACB4
- .4byte _0818ACC4
- .4byte _0818ACD4
- .4byte _0818ACE4
- .4byte _0818ACF4
- .4byte _0818AD04
- .4byte _0818AD14
- .4byte _0818AD24
- .4byte _0818AD44
- .4byte _0818AD54
- .4byte _0818AD64
- .4byte _0818AD74
- .4byte _0818AD84
- .4byte _0818AD94
- .4byte _0818ADA4
- .4byte _0818ADB4
- .4byte _0818ADC4
- .4byte _0818ADD4
- .4byte _0818ADE4
-_0818A790:
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, =gPlayerParty
- adds r4, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- mov r1, sp
- strh r0, [r1]
- adds r0, r4, 0
- movs r1, 0xC
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0x2E]
- movs r6, 0
- add r0, sp, 0x24
- mov r9, r0
- movs r1, 0x3B
- add r1, sp
- mov r10, r1
- mov r2, sp
- adds r2, 0x2B
- str r2, [sp, 0x80]
- mov r0, sp
- adds r0, 0x2A
- str r0, [sp, 0x7C]
- mov r1, sp
- adds r1, 0x68
- str r1, [sp, 0x8C]
- adds r2, 0x5
- str r2, [sp, 0x84]
- adds r0, 0x12
- str r0, [sp, 0x88]
- mov r8, r4
- add r4, sp, 0xC
-_0818A7DC:
- adds r1, r6, 0
- adds r1, 0xD
- mov r0, r8
- bl GetMonData
- strh r0, [r4]
- adds r1, r6, 0
- adds r1, 0x11
- mov r0, r8
- bl GetMonData
- mov r2, r9
- adds r1, r2, r6
- strb r0, [r1]
- adds r4, 0x2
- adds r6, 0x1
- cmp r6, 0x3
- ble _0818A7DC
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, =gPlayerParty
- adds r4, r0
- adds r0, r4, 0
- movs r1, 0x15
- bl GetMonData
- mov r1, r10
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x20
- bl GetMonData
- ldr r2, [sp, 0x80]
- strb r0, [r2]
- adds r0, r4, 0
- movs r1, 0x19
- bl GetMonData
- str r0, [sp, 0x44]
- adds r0, r4, 0
- movs r1, 0x27
- bl GetMonData
- mov r3, sp
- movs r5, 0x1F
- ands r0, r5
- ldrb r2, [r3, 0x14]
- movs r1, 0x20
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r3, 0x14]
- adds r0, r4, 0
- movs r1, 0x28
- bl GetMonData
- mov r3, sp
- movs r6, 0x1F
- ands r0, r6
- lsls r0, 5
- ldrh r2, [r3, 0x14]
- ldr r1, =0xfffffc1f
- ands r1, r2
- orrs r1, r0
- strh r1, [r3, 0x14]
- adds r0, r4, 0
- movs r1, 0x29
- bl GetMonData
- mov r3, sp
- ands r0, r5
- lsls r0, 2
- ldrb r2, [r3, 0x15]
- movs r1, 0x7D
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r3, 0x15]
- adds r0, r4, 0
- movs r1, 0x2A
- bl GetMonData
- movs r1, 0x1F
- ands r1, r0
- lsls r1, 15
- ldr r0, [sp, 0x14]
- ldr r2, =0xfff07fff
- ands r0, r2
- orrs r0, r1
- str r0, [sp, 0x14]
- adds r0, r4, 0
- movs r1, 0x2B
- bl GetMonData
- mov r3, sp
- ands r0, r6
- lsls r0, 4
- ldrh r2, [r3, 0x16]
- ldr r1, =0xfffffe0f
- ands r1, r2
- orrs r1, r0
- strh r1, [r3, 0x16]
- adds r0, r4, 0
- movs r1, 0x2C
- bl GetMonData
- mov r3, sp
- ands r0, r5
- lsls r0, 1
- ldrb r2, [r3, 0x17]
- movs r1, 0x3F
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r3, 0x17]
- adds r0, r4, 0
- movs r1, 0
- bl GetMonData
- str r0, [sp, 0x48]
- adds r0, r4, 0
- movs r1, 0x37
- bl GetMonData
- str r0, [sp, 0x4C]
- adds r0, r4, 0
- movs r1, 0x38
- bl GetMonData
- ldr r1, [sp, 0x7C]
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0x28]
- adds r0, r4, 0
- movs r1, 0x3A
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0x2C]
- adds r0, r4, 0
- movs r1, 0x3B
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0x2]
- adds r0, r4, 0
- movs r1, 0x3C
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0x4]
- adds r0, r4, 0
- movs r1, 0x3D
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0x6]
- adds r0, r4, 0
- movs r1, 0x3E
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0x8]
- adds r0, r4, 0
- movs r1, 0x3F
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0xA]
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- mov r3, sp
- movs r1, 0x1
- ands r0, r1
- lsls r0, 6
- ldrb r2, [r3, 0x17]
- movs r1, 0x41
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r3, 0x17]
- adds r0, r4, 0
- movs r1, 0x2E
- bl GetMonData
- mov r3, sp
- lsls r0, 7
- ldrb r2, [r3, 0x17]
- movs r1, 0x7F
- ands r1, r2
- orrs r1, r0
- strb r1, [r3, 0x17]
- adds r0, r4, 0
- movs r1, 0x1
- bl GetMonData
- str r0, [sp, 0x54]
- adds r0, r4, 0
- movs r1, 0x2
- ldr r2, [sp, 0x8C]
- bl GetMonData
- ldr r0, [sp, 0x84]
- ldr r1, [sp, 0x8C]
- bl StringCopy10
- adds r0, r4, 0
- movs r1, 0x7
- ldr r2, [sp, 0x88]
- bl GetMonData
- mov r2, sp
- movs r6, 0
-_0818A994:
- adds r0, r7, r6
- adds r1, r2, r6
- ldrb r1, [r1]
- strb r1, [r0]
- adds r6, 0x1
- cmp r6, 0x57
- bls _0818A994
- b _0818ADF6
- .pool
-_0818A9B4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- b _0818AD2E
- .pool
-_0818A9C4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0xC
- b _0818AD2E
- .pool
-_0818A9D4:
- movs r6, 0
- add r2, sp, 0x58
- mov r9, r2
- add r0, sp, 0x60
- mov r10, r0
- movs r0, 0x64
- adds r1, r5, 0
- muls r1, r0
- ldr r0, =gPlayerParty
- adds r4, r1, r0
- mov r8, r9
-_0818A9EA:
- adds r1, r6, 0
- adds r1, 0xD
- adds r0, r4, 0
- bl GetMonData
- mov r1, r8
- strh r0, [r1]
- adds r1, r6, 0
- adds r1, 0x11
- adds r0, r4, 0
- bl GetMonData
- mov r2, r10
- adds r1, r2, r6
- strb r0, [r1]
- movs r0, 0x2
- add r8, r0
- adds r6, 0x1
- cmp r6, 0x3
- ble _0818A9EA
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x15
- bl GetMonData
- mov r1, r9
- strb r0, [r1, 0xC]
- mov r2, r9
- movs r6, 0
-_0818AA28:
- adds r0, r7, r6
- adds r1, r2, r6
- ldrb r1, [r1]
- strb r1, [r0]
- adds r6, 0x1
- cmp r6, 0xF
- bls _0818AA28
- b _0818ADF6
- .pool
-_0818AA3C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldrb r1, [r3]
- lsls r1, 9
- adds r2, 0x1
- adds r1, r2
- ldrb r1, [r1]
- adds r1, 0x9
- b _0818AD2E
- .pool
-_0818AA58:
- movs r6, 0
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r2, =gPlayerParty
- mov r8, r2
-_0818AA64:
- adds r1, r6, 0
- adds r1, 0x11
- mov r2, r8
- adds r0, r4, r2
- bl GetMonData
- adds r1, r7, r6
- strb r0, [r1]
- adds r6, 0x1
- cmp r6, 0x3
- ble _0818AA64
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x15
- bl GetMonData
- adds r1, r7, r6
- strb r0, [r1]
- adds r6, 0x1
- b _0818ADF6
- .pool
-_0818AA94:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldrb r1, [r3]
- lsls r1, 9
- adds r2, 0x1
- adds r1, r2
- ldrb r1, [r1]
- adds r1, 0x8
- b _0818ADEE
- .pool
-_0818AAB0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x1
- b _0818AACA
- .pool
-_0818AAC0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x19
-_0818AACA:
- bl GetMonData
- adds r1, r0, 0
- strb r1, [r7]
- movs r0, 0xFF
- lsls r0, 8
- ands r0, r1
- lsrs r0, 8
- strb r0, [r7, 0x1]
- movs r0, 0xFF
- lsls r0, 16
- ands r0, r1
- lsrs r0, 16
- strb r0, [r7, 0x2]
- movs r6, 0x3
- b _0818ADF6
- .pool
-_0818AAF0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x1A
- b _0818ADEE
- .pool
-_0818AB00:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x1B
- b _0818ADEE
- .pool
-_0818AB10:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x1C
- b _0818ADEE
- .pool
-_0818AB20:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x1D
- b _0818ADEE
- .pool
-_0818AB30:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x1E
- b _0818ADEE
- .pool
-_0818AB40:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x1F
- b _0818ADEE
- .pool
-_0818AB50:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x20
- b _0818ADEE
- .pool
-_0818AB60:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x22
- b _0818ADEE
- .pool
-_0818AB70:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x23
- b _0818ADEE
- .pool
-_0818AB80:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x24
- b _0818ADEE
- .pool
-_0818AB90:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x25
- b _0818ADEE
- .pool
-_0818ABA0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x26
- b _0818ADEE
- .pool
-_0818ABB0:
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, =gPlayerParty
- adds r4, r0
- adds r0, r4, 0
- movs r1, 0x27
- bl GetMonData
- strb r0, [r7]
- adds r0, r4, 0
- movs r1, 0x28
- bl GetMonData
- strb r0, [r7, 0x1]
- adds r0, r4, 0
- movs r1, 0x29
- bl GetMonData
- strb r0, [r7, 0x2]
- adds r0, r4, 0
- movs r1, 0x2A
- bl GetMonData
- strb r0, [r7, 0x3]
- adds r0, r4, 0
- movs r1, 0x2B
- bl GetMonData
- strb r0, [r7, 0x4]
- adds r0, r4, 0
- movs r1, 0x2C
- bl GetMonData
- strb r0, [r7, 0x5]
- movs r6, 0x6
- b _0818ADF6
- .pool
-_0818AC00:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x27
- b _0818ADEE
- .pool
-_0818AC10:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x28
- b _0818ADEE
- .pool
-_0818AC20:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x29
- b _0818ADEE
- .pool
-_0818AC30:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x2A
- b _0818ADEE
- .pool
-_0818AC40:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x2B
- b _0818ADEE
- .pool
-_0818AC50:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x2C
- b _0818ADEE
- .pool
-_0818AC60:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0
- b _0818AC8A
- .pool
-_0818AC70:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x9
- b _0818AD2E
- .pool
-_0818AC80:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x37
-_0818AC8A:
- bl GetMonData
- adds r1, r0, 0
- strb r1, [r7]
- movs r0, 0xFF
- lsls r0, 8
- ands r0, r1
- lsrs r0, 8
- strb r0, [r7, 0x1]
- movs r0, 0xFF
- lsls r0, 16
- ands r0, r1
- lsrs r0, 16
- strb r0, [r7, 0x2]
- lsrs r0, r1, 24
- strb r0, [r7, 0x3]
- movs r6, 0x4
- b _0818ADF6
- .pool
-_0818ACB4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x38
- b _0818ADEE
- .pool
-_0818ACC4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x39
- b _0818AD2E
- .pool
-_0818ACD4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x3A
- b _0818AD2E
- .pool
-_0818ACE4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x3B
- b _0818AD2E
- .pool
-_0818ACF4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x3C
- b _0818AD2E
- .pool
-_0818AD04:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x3D
- b _0818AD2E
- .pool
-_0818AD14:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x3E
- b _0818AD2E
- .pool
-_0818AD24:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x3F
-_0818AD2E:
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- strb r0, [r7]
- lsrs r0, 8
- strb r0, [r7, 0x1]
- movs r6, 0x2
- b _0818ADF6
- .pool
-_0818AD44:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x16
- b _0818ADEE
- .pool
-_0818AD54:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x17
- b _0818ADEE
- .pool
-_0818AD64:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x18
- b _0818ADEE
- .pool
-_0818AD74:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x21
- b _0818ADEE
- .pool
-_0818AD84:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x2F
- b _0818ADEE
- .pool
-_0818AD94:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x30
- b _0818ADEE
- .pool
-_0818ADA4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x32
- b _0818ADEE
- .pool
-_0818ADB4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x33
- b _0818ADEE
- .pool
-_0818ADC4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x34
- b _0818ADEE
- .pool
-_0818ADD4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x35
- b _0818ADEE
- .pool
-_0818ADE4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x36
-_0818ADEE:
- bl GetMonData
- strb r0, [r7]
- movs r6, 0x1
-_0818ADF6:
- adds r0, r6, 0
- add sp, 0x90
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_818A660
-
- thumb_func_start sub_818AE0C
-sub_818AE0C: @ 818AE0C
- push {lr}
- bl RecordedPlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_818AE0C
-
- thumb_func_start sub_818AE18
-sub_818AE18: @ 818AE18
- push {r4,r5,lr}
- ldr r1, =gBattleBufferA
- ldr r0, =gActiveBank
- ldrb r2, [r0]
- lsls r0, r2, 9
- adds r1, 0x2
- adds r1, r0, r1
- ldrb r0, [r1]
- cmp r0, 0
- bne _0818AE48
- ldr r0, =gBattlePartyID
- lsls r1, r2, 1
- adds r1, r0
- ldrb r0, [r1]
- bl sub_818AE70
- b _0818AE66
- .pool
-_0818AE48:
- ldrb r4, [r1]
- movs r5, 0
-_0818AE4C:
- movs r0, 0x1
- ands r0, r4
- cmp r0, 0
- beq _0818AE5A
- adds r0, r5, 0
- bl sub_818AE70
-_0818AE5A:
- lsrs r4, 1
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x5
- bls _0818AE4C
-_0818AE66:
- bl RecordedPlayerBufferExecCompleted
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_818AE18
-
- thumb_func_start sub_818AE70
-sub_818AE70: @ 818AE70
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x34
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- lsls r0, 9
- ldr r2, =gBattleBufferA + 3
- adds r3, r0, r2
- adds r6, r3, 0
- subs r1, r2, 0x2
- adds r0, r1
- ldrb r0, [r0]
- adds r7, r2, 0
- cmp r0, 0x3B
- bls _0818AE9C
- bl _0818B836
-_0818AE9C:
- lsls r0, 2
- ldr r1, =_0818AEB4
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0818AEB4:
- .4byte _0818AFA4
- .4byte _0818B13C
- .4byte _0818B15C
- .4byte _0818B17C
- .4byte _0818B1D4
- .4byte _0818B1D4
- .4byte _0818B1D4
- .4byte _0818B1D4
- .4byte _0818B1FC
- .4byte _0818B260
- .4byte _0818B260
- .4byte _0818B260
- .4byte _0818B260
- .4byte _0818B836
- .4byte _0818B836
- .4byte _0818B836
- .4byte _0818B836
- .4byte _0818B290
- .4byte _0818B2B0
- .4byte _0818B2D0
- .4byte _0818B2F0
- .4byte _0818B310
- .4byte _0818B330
- .4byte _0818B350
- .4byte _0818B370
- .4byte _0818B390
- .4byte _0818B3B0
- .4byte _0818B3D0
- .4byte _0818B3F0
- .4byte _0818B410
- .4byte _0818B430
- .4byte _0818B450
- .4byte _0818B4C0
- .4byte _0818B4E0
- .4byte _0818B500
- .4byte _0818B520
- .4byte _0818B540
- .4byte _0818B560
- .4byte _0818B580
- .4byte _0818B5A0
- .4byte _0818B5C0
- .4byte _0818B5E0
- .4byte _0818B600
- .4byte _0818B620
- .4byte _0818B640
- .4byte _0818B660
- .4byte _0818B680
- .4byte _0818B6A0
- .4byte _0818B6C0
- .4byte _0818B6E0
- .4byte _0818B700
- .4byte _0818B720
- .4byte _0818B740
- .4byte _0818B760
- .4byte _0818B780
- .4byte _0818B7A0
- .4byte _0818B7C0
- .4byte _0818B7E0
- .4byte _0818B800
- .4byte _0818B820
-_0818AFA4:
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, =gPlayerParty
- adds r4, r0
- adds r0, r4, 0
- movs r1, 0xB
- adds r2, r6, 0
- bl SetMonData
- adds r2, r6, 0
- adds r2, 0x2E
- adds r0, r4, 0
- movs r1, 0xC
- bl SetMonData
- movs r0, 0
- mov r8, r0
- movs r0, 0x3B
- adds r0, r6
- mov r10, r0
- adds r0, r6, 0
- adds r0, 0x2B
- str r0, [sp, 0x20]
- adds r0, 0x19
- str r0, [sp, 0x28]
- adds r0, 0x4
- str r0, [sp, 0x2C]
- adds r0, 0x4
- str r0, [sp, 0x30]
- subs r0, 0x22
- str r0, [sp, 0x1C]
- subs r0, 0x2
- str r0, [sp, 0x18]
- adds r0, 0x4
- str r0, [sp, 0x24]
- adds r0, r6, 0x2
- str r0, [sp, 0x4]
- adds r0, r6, 0x4
- str r0, [sp, 0x8]
- adds r0, r6, 0x6
- str r0, [sp, 0xC]
- adds r0, 0x2
- str r0, [sp, 0x10]
- adds r0, 0x2
- str r0, [sp, 0x14]
- mov r9, r4
- adds r7, r6, 0
- adds r7, 0x24
- adds r4, r6, 0
- adds r4, 0xC
-_0818B00A:
- mov r1, r8
- adds r1, 0xD
- mov r0, r9
- adds r2, r4, 0
- bl SetMonData
- mov r1, r8
- adds r1, 0x11
- mov r0, r9
- adds r2, r7, 0
- bl SetMonData
- adds r7, 0x1
- adds r4, 0x2
- movs r0, 0x1
- add r8, r0
- mov r0, r8
- cmp r0, 0x3
- ble _0818B00A
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, =gPlayerParty
- adds r4, r0
- adds r0, r4, 0
- movs r1, 0x15
- mov r2, r10
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x20
- ldr r2, [sp, 0x20]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x19
- ldr r2, [sp, 0x28]
- bl SetMonData
- ldrb r0, [r6, 0x14]
- lsls r0, 27
- lsrs r0, 27
- mov r1, sp
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x27
- mov r2, sp
- bl SetMonData
- mov r1, sp
- ldrh r0, [r6, 0x14]
- lsls r0, 22
- lsrs r0, 27
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x28
- mov r2, sp
- bl SetMonData
- mov r1, sp
- ldrb r0, [r6, 0x15]
- lsls r0, 25
- lsrs r0, 27
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x29
- mov r2, sp
- bl SetMonData
- mov r1, sp
- ldr r0, [r6, 0x14]
- lsls r0, 12
- lsrs r0, 27
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x2A
- mov r2, sp
- bl SetMonData
- mov r1, sp
- ldrh r0, [r6, 0x16]
- lsls r0, 23
- lsrs r0, 27
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x2B
- mov r2, sp
- bl SetMonData
- mov r1, sp
- ldrb r0, [r6, 0x17]
- lsls r0, 26
- lsrs r0, 27
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x2C
- mov r2, sp
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0
- ldr r2, [sp, 0x2C]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x37
- ldr r2, [sp, 0x30]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x38
- ldr r2, [sp, 0x1C]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x39
- ldr r2, [sp, 0x18]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x3A
- ldr r2, [sp, 0x24]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x3B
- ldr r2, [sp, 0x4]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x3C
- ldr r2, [sp, 0x8]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x3D
- ldr r2, [sp, 0xC]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x3E
- ldr r2, [sp, 0x10]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x3F
- ldr r2, [sp, 0x14]
- bl SetMonData
- b _0818B836
- .pool
-_0818B13C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0xB
- bl SetMonData
- b _0818B836
- .pool
-_0818B15C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0xC
- bl SetMonData
- b _0818B836
- .pool
-_0818B17C:
- movs r0, 0
- mov r8, r0
- movs r0, 0xC
- adds r0, r3
- mov r9, r0
- movs r0, 0x64
- adds r1, r5, 0
- muls r1, r0
- ldr r0, =gPlayerParty
- adds r7, r1, r0
- adds r6, r3, 0
- adds r6, 0x8
- adds r4, r3, 0
-_0818B196:
- mov r1, r8
- adds r1, 0xD
- adds r0, r7, 0
- adds r2, r4, 0
- bl SetMonData
- mov r1, r8
- adds r1, 0x11
- adds r0, r7, 0
- adds r2, r6, 0
- bl SetMonData
- adds r6, 0x1
- adds r4, 0x2
- movs r0, 0x1
- add r8, r0
- mov r0, r8
- cmp r0, 0x3
- ble _0818B196
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x15
- mov r2, r9
- bl SetMonData
- b _0818B836
- .pool
-_0818B1D4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r3, =gBattleBufferA
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r1, r3, 0x1
- adds r1, r2, r1
- ldrb r1, [r1]
- adds r1, 0x9
- b _0818B278
- .pool
-_0818B1FC:
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, =gPlayerParty
- adds r4, r0
- ldr r5, =gActiveBank
- ldrb r2, [r5]
- lsls r2, 9
- adds r2, r7
- adds r0, r4, 0
- movs r1, 0x11
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x1
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x12
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x2
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x13
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x3
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x14
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x4
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x15
- bl SetMonData
- b _0818B836
- .pool
-_0818B260:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r3, =gBattleBufferA
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r1, r3, 0x1
- adds r1, r2, r1
- ldrb r1, [r1]
- adds r1, 0x8
-_0818B278:
- adds r3, 0x3
- adds r2, r3
- bl SetMonData
- b _0818B836
- .pool
-_0818B290:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x1
- bl SetMonData
- b _0818B836
- .pool
-_0818B2B0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x19
- bl SetMonData
- b _0818B836
- .pool
-_0818B2D0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x1A
- bl SetMonData
- b _0818B836
- .pool
-_0818B2F0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x1B
- bl SetMonData
- b _0818B836
- .pool
-_0818B310:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x1C
- bl SetMonData
- b _0818B836
- .pool
-_0818B330:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x1D
- bl SetMonData
- b _0818B836
- .pool
-_0818B350:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x1E
- bl SetMonData
- b _0818B836
- .pool
-_0818B370:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x1F
- bl SetMonData
- b _0818B836
- .pool
-_0818B390:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x20
- bl SetMonData
- b _0818B836
- .pool
-_0818B3B0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x22
- bl SetMonData
- b _0818B836
- .pool
-_0818B3D0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x23
- bl SetMonData
- b _0818B836
- .pool
-_0818B3F0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x24
- bl SetMonData
- b _0818B836
- .pool
-_0818B410:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x25
- bl SetMonData
- b _0818B836
- .pool
-_0818B430:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x26
- bl SetMonData
- b _0818B836
- .pool
-_0818B450:
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, =gPlayerParty
- adds r4, r0
- ldr r5, =gActiveBank
- ldrb r2, [r5]
- lsls r2, 9
- adds r2, r7
- adds r0, r4, 0
- movs r1, 0x27
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x1
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x28
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x2
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x29
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x3
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x2A
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x4
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x2B
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x5
- adds r2, r0
- adds r0, r4, 0
- b _0818B570
- .pool
-_0818B4C0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x27
- bl SetMonData
- b _0818B836
- .pool
-_0818B4E0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x28
- bl SetMonData
- b _0818B836
- .pool
-_0818B500:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x29
- bl SetMonData
- b _0818B836
- .pool
-_0818B520:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x2A
- bl SetMonData
- b _0818B836
- .pool
-_0818B540:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x2B
- bl SetMonData
- b _0818B836
- .pool
-_0818B560:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
-_0818B570:
- movs r1, 0x2C
- bl SetMonData
- b _0818B836
- .pool
-_0818B580:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0
- bl SetMonData
- b _0818B836
- .pool
-_0818B5A0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x9
- bl SetMonData
- b _0818B836
- .pool
-_0818B5C0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x37
- bl SetMonData
- b _0818B836
- .pool
-_0818B5E0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x38
- bl SetMonData
- b _0818B836
- .pool
-_0818B600:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x39
- bl SetMonData
- b _0818B836
- .pool
-_0818B620:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x3A
- bl SetMonData
- b _0818B836
- .pool
-_0818B640:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x3B
- bl SetMonData
- b _0818B836
- .pool
-_0818B660:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x3C
- bl SetMonData
- b _0818B836
- .pool
-_0818B680:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x3D
- bl SetMonData
- b _0818B836
- .pool
-_0818B6A0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x3E
- bl SetMonData
- b _0818B836
- .pool
-_0818B6C0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x3F
- bl SetMonData
- b _0818B836
- .pool
-_0818B6E0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x16
- bl SetMonData
- b _0818B836
- .pool
-_0818B700:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x17
- bl SetMonData
- b _0818B836
- .pool
-_0818B720:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x18
- bl SetMonData
- b _0818B836
- .pool
-_0818B740:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x21
- bl SetMonData
- b _0818B836
- .pool
-_0818B760:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x2F
- bl SetMonData
- b _0818B836
- .pool
-_0818B780:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x30
- bl SetMonData
- b _0818B836
- .pool
-_0818B7A0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x32
- bl SetMonData
- b _0818B836
- .pool
-_0818B7C0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x33
- bl SetMonData
- b _0818B836
- .pool
-_0818B7E0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x34
- bl SetMonData
- b _0818B836
- .pool
-_0818B800:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x35
- bl SetMonData
- b _0818B836
- .pool
-_0818B820:
- movs r0, 0x64
- muls r0, r5
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gActiveBank
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x36
- bl SetMonData
-_0818B836:
- ldr r2, =gBattlePartyID
- ldr r0, =gActiveBank
- ldrb r1, [r0]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, =gPlayerParty
- adds r0, r2
- bl sub_805E990
- add sp, 0x34
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818AE70
-
- thumb_func_start sub_818B86C
-sub_818B86C: @ 818B86C
- push {r4-r7,lr}
- ldr r1, =gBattlePartyID
- ldr r7, =gActiveBank
- ldrb r2, [r7]
- lsls r0, r2, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- adds r3, r1, 0
- muls r3, r0
- ldr r4, =gBattleBufferA
- lsls r2, 9
- adds r0, r4, 0x1
- adds r0, r2, r0
- ldrb r0, [r0]
- ldr r1, =gPlayerParty
- adds r0, r1
- adds r5, r3, r0
- movs r3, 0
- adds r0, r4, 0x2
- adds r2, r0
- ldrb r2, [r2]
- cmp r3, r2
- bcs _0818B8C4
- adds r6, r4, 0
- adds r2, r7, 0
- adds r4, r0, 0
-_0818B8A2:
- adds r1, r5, r3
- ldrb r0, [r2]
- lsls r0, 9
- adds r0, 0x3
- adds r0, r3, r0
- adds r0, r6
- ldrb r0, [r0]
- strb r0, [r1]
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- ldrb r0, [r2]
- lsls r0, 9
- adds r0, r4
- ldrb r0, [r0]
- cmp r3, r0
- bcc _0818B8A2
-_0818B8C4:
- bl RecordedPlayerBufferExecCompleted
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818B86C
-
- thumb_func_start sub_818B8E0
-sub_818B8E0: @ 818B8E0
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- ldr r0, =gBattlePartyID
- mov r8, r0
- ldr r6, =gActiveBank
- ldrb r1, [r6]
- lsls r0, r1, 1
- add r0, r8
- ldrh r0, [r0]
- movs r5, 0x64
- muls r0, r5
- ldr r4, =gPlayerParty
- adds r0, r4
- bl BattleLoadPlayerMonSpriteGfx
- ldrb r0, [r6]
- lsls r0, 1
- add r0, r8
- ldrh r0, [r0]
- muls r0, r5
- adds r0, r4
- movs r1, 0xB
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- ldrb r0, [r6]
- bl GetBankIdentity
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl sub_806A068
- ldr r0, =gUnknown_0202499C
- mov r8, r0
- ldrb r0, [r6]
- movs r1, 0x2
- bl sub_80A5C6C
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- ldrb r0, [r6]
- bl sub_80A6138
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldrb r0, [r6]
- bl sub_80A82E4
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- mov r0, r8
- adds r1, r5, 0
- adds r2, r4, 0
- bl CreateSprite
- ldr r4, =gBankSpriteIds
- ldrb r1, [r6]
- adds r1, r4
- strb r0, [r1]
- ldr r5, =gSprites
- ldrb r0, [r6]
- adds r0, r4
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, =0x0000ff10
- strh r1, [r0, 0x24]
- ldrb r2, [r6]
- adds r0, r2, r4
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r2, [r0, 0x2E]
- ldrb r3, [r6]
- adds r0, r3, r4
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- lsls r3, 4
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r3
- strb r0, [r1, 0x5]
- ldrb r2, [r6]
- adds r4, r2, r4
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, =gBattleMonForms
- adds r2, r1
- ldrb r1, [r2]
- bl StartSpriteAnim
- ldr r1, =gBattleBankFunc
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_818A064
- str r1, [r0]
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818B8E0
-
- thumb_func_start sub_818B9FC
-sub_818B9FC: @ 818B9FC
- push {r4-r6,lr}
- ldr r5, =gActiveBank
- ldrb r0, [r5]
- ldr r4, =gBattleBufferA
- lsls r1, r0, 9
- adds r6, r4, 0x2
- adds r1, r6
- ldrb r1, [r1]
- bl sub_805EF84
- ldr r2, =gBattlePartyID
- ldrb r0, [r5]
- lsls r1, r0, 1
- adds r1, r2
- lsls r0, 9
- adds r4, 0x1
- adds r0, r4
- ldrb r0, [r0]
- strh r0, [r1]
- ldrb r1, [r5]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, =gPlayerParty
- adds r0, r2
- bl BattleLoadPlayerMonSpriteGfx
- ldrb r0, [r5]
- lsls r1, r0, 9
- adds r1, r6
- ldrb r1, [r1]
- bl sub_818BA6C
- ldr r1, =gBattleBankFunc
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_818A470
- str r1, [r0]
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818B9FC
-
- thumb_func_start sub_818BA6C
-sub_818BA6C: @ 818BA6C
- push {r4-r6,lr}
- mov r6, r10
- mov r5, r9
- mov r4, r8
- push {r4-r6}
- adds r6, r0, 0
- lsls r6, 24
- lsrs r6, 24
- lsls r1, 24
- lsrs r1, 24
- adds r0, r6, 0
- bl sub_805EF84
- ldr r0, =gBattlePartyID
- lsls r2, r6, 1
- adds r2, r0
- ldr r0, =gBattleBufferA
- lsls r1, r6, 9
- adds r0, 0x1
- adds r1, r0
- ldrb r0, [r1]
- strh r0, [r2]
- ldrh r1, [r2]
- movs r0, 0x64
- muls r0, r1
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- mov r8, r0
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- ldr r0, =sub_805D714
- bl CreateInvisibleSpriteWithCallback
- ldr r1, =gUnknown_03005D7C
- mov r9, r1
- add r9, r6
- mov r1, r9
- strb r0, [r1]
- adds r0, r6, 0
- bl GetBankIdentity
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- mov r0, r8
- bl sub_806A068
- ldr r0, =gUnknown_0202499C
- mov r10, r0
- adds r0, r6, 0
- movs r1, 0x2
- bl sub_80A5C6C
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- adds r0, r6, 0
- bl sub_80A6138
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r6, 0
- bl sub_80A82E4
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- mov r0, r10
- adds r1, r5, 0
- adds r2, r4, 0
- bl CreateSprite
- ldr r4, =gBankSpriteIds
- adds r4, r6, r4
- strb r0, [r4]
- ldr r5, =gSprites
- mov r0, r9
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldrb r1, [r4]
- strh r1, [r0, 0x30]
- mov r0, r9
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r6, [r0, 0x32]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r6, [r0, 0x2E]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- mov r1, r8
- strh r1, [r0, 0x32]
- ldrb r0, [r4]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- lsls r3, r6, 4
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r3
- strb r0, [r1, 0x5]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, =gBattleMonForms
- adds r6, r1
- ldrb r1, [r6]
- bl StartSpriteAnim
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r5, 0
- adds r1, 0x1C
- adds r0, r1
- ldr r1, =SpriteCallbackDummy
- str r1, [r0]
- movs r0, 0
- movs r1, 0xFF
- bl sub_80753E8
- mov r1, r9
- ldrb r2, [r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r5
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r1, 0x2E]
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818BA6C
-
- thumb_func_start sub_818BBE8
-sub_818BBE8: @ 818BBE8
- push {r4-r6,lr}
- ldr r1, =gBattleBufferA
- ldr r6, =gActiveBank
- ldrb r2, [r6]
- lsls r0, r2, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r3, [r0]
- cmp r3, 0
- bne _0818BC30
- ldr r0, =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r1, [r0, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- strb r3, [r0, 0x4]
- ldr r1, =gBattleBankFunc
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_818BC78
- str r1, [r0]
- b _0818BC66
- .pool
-_0818BC30:
- ldr r5, =gBankSpriteIds
- adds r0, r2, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, =gSprites
- adds r0, r4
- bl FreeSpriteOamMatrix
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl DestroySprite
- ldr r1, =gHealthBoxesIds
- ldrb r0, [r6]
- adds r0, r1
- ldrb r0, [r0]
- bl SetHealthboxSpriteInvisible
- bl RecordedPlayerBufferExecCompleted
-_0818BC66:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818BBE8
-
- thumb_func_start sub_818BC78
-sub_818BC78: @ 818BC78
- push {r4-r6,lr}
- ldr r6, =gBattleSpritesDataPtr
- ldr r4, [r6]
- ldr r5, =gActiveBank
- ldrb r2, [r5]
- ldr r1, [r4, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r3, r0, r1
- ldrb r0, [r3, 0x4]
- cmp r0, 0
- beq _0818BCA0
- cmp r0, 0x1
- beq _0818BCCE
- b _0818BCF6
- .pool
-_0818BCA0:
- ldr r1, [r4]
- lsls r0, r2, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0818BCBA
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x5
- bl move_anim_start_t4
-_0818BCBA:
- ldr r0, [r6]
- ldrb r1, [r5]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x1
- strb r1, [r0, 0x4]
- b _0818BCF6
-_0818BCCE:
- ldrb r1, [r3]
- movs r0, 0x40
- ands r0, r1
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _0818BCF6
- strb r0, [r3, 0x4]
- ldrb r2, [r5]
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x1
- bl move_anim_start_t4
- ldr r1, =gBattleBankFunc
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_818A1B0
- str r1, [r0]
-_0818BCF6:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818BC78
-
- thumb_func_start sub_818BD04
-sub_818BD04: @ 818BD04
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- ldr r0, =gBattleTypeFlags
- ldr r1, [r0]
- movs r0, 0x80
- lsls r0, 18
- ands r0, r1
- cmp r0, 0
- beq _0818BD48
- movs r0, 0x40
- ands r1, r0
- cmp r1, 0
- beq _0818BD30
- bl sub_8185F40
- lsls r0, 24
- lsrs r4, r0, 24
- b _0818BD4C
- .pool
-_0818BD30:
- ldr r2, =gLinkPlayers
- ldr r0, =gUnknown_0203C7B4
- ldrb r1, [r0]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- b _0818BD4A
- .pool
-_0818BD48:
- ldr r0, =gLinkPlayers
-_0818BD4A:
- ldrb r4, [r0, 0x13]
-_0818BD4C:
- ldr r0, =gBattleTypeFlags
- ldr r1, [r0]
- movs r2, 0x40
- ands r1, r2
- adds r5, r0, 0
- cmp r1, 0
- beq _0818BD98
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- bl GetBankIdentity
- movs r1, 0x2
- ands r1, r0
- movs r0, 0x20
- mov r9, r0
- cmp r1, 0
- beq _0818BD72
- movs r1, 0x5A
- mov r9, r1
-_0818BD72:
- ldr r0, [r5]
- movs r1, 0x80
- lsls r1, 15
- ands r0, r1
- cmp r0, 0
- beq _0818BD9C
- movs r0, 0x5A
- mov r9, r0
- ldr r1, =gTrainerFrontPicCoords
- b _0818BD9E
- .pool
-_0818BD98:
- movs r0, 0x50
- mov r9, r0
-_0818BD9C:
- ldr r1, =gTrainerBackPicCoords
-_0818BD9E:
- lsls r0, r4, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x8
- subs r0, r1
- lsls r0, 18
- movs r1, 0xA0
- lsls r1, 15
- adds r0, r1
- lsrs r7, r0, 16
- ldr r0, [r5]
- movs r1, 0x80
- lsls r1, 15
- ands r0, r1
- cmp r0, 0
- bne _0818BDC0
- b _0818BEDC
-_0818BDC0:
- ldr r0, =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- bl sub_806F000
- lsls r0, 16
- lsrs r4, r0, 16
- adds r5, r4, 0
- ldr r6, =gActiveBank
- ldrb r1, [r6]
- adds r0, r5, 0
- bl sub_805DF38
- ldrb r0, [r6]
- bl GetBankIdentity
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- bl sub_806A1C0
- ldr r0, =gUnknown_0202499C
- mov r8, r0
- lsls r4, r7, 16
- asrs r4, 16
- ldrb r0, [r6]
- bl sub_80A82E4
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- mov r0, r8
- mov r1, r9
- adds r2, r4, 0
- bl CreateSprite
- ldr r4, =gBankSpriteIds
- ldrb r1, [r6]
- adds r1, r4
- strb r0, [r1]
- ldr r0, =gTrainerFrontPicPaletteTable
- lsls r5, 3
- adds r5, r0
- ldrh r0, [r5, 0x4]
- bl IndexOfSpritePaletteTag
- ldr r5, =gSprites
- ldrb r1, [r6]
- adds r1, r4
- ldrb r1, [r1]
- lsls r2, r1, 4
- adds r2, r1
- lsls r2, 2
- adds r2, r5
- lsls r0, 4
- ldrb r3, [r2, 0x5]
- movs r1, 0xF
- ands r1, r3
- orrs r1, r0
- strb r1, [r2, 0x5]
- ldrb r0, [r6]
- adds r0, r4
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r1, 0xF0
- strh r1, [r0, 0x24]
- ldrb r0, [r6]
- adds r0, r4
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r1, 0x30
- strh r1, [r0, 0x26]
- ldrb r0, [r6]
- adds r0, r4
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, =0x0000fffe
- strh r1, [r0, 0x2E]
- ldrb r0, [r6]
- adds r0, r4
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r5, 0
- adds r1, 0x1C
- adds r0, r1
- ldr r1, =sub_805D7AC
- str r1, [r0]
- ldrb r0, [r6]
- adds r0, r4
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- ldrb r2, [r1, 0x1]
- movs r0, 0x4
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0x1]
- ldrb r0, [r6]
- adds r0, r4
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r2, 0x1
- orrs r1, r2
- strb r1, [r0]
- b _0818BF72
- .pool
-_0818BEDC:
- ldr r5, =gActiveBank
- ldrb r1, [r5]
- adds r0, r4, 0
- bl LoadBackTrainerBankSpriteGfx
- ldrb r0, [r5]
- bl GetBankIdentity
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl sub_806A12C
- ldr r6, =gUnknown_0202499C
- mov r8, r9
- lsls r4, r7, 16
- asrs r4, 16
- ldrb r0, [r5]
- bl sub_80A82E4
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- adds r0, r6, 0
- mov r1, r8
- adds r2, r4, 0
- bl CreateSprite
- ldr r6, =gBankSpriteIds
- ldrb r1, [r5]
- adds r1, r6
- strb r0, [r1]
- ldr r4, =gSprites
- ldrb r3, [r5]
- adds r0, r3, r6
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- lsls r3, 4
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r3
- strb r0, [r1, 0x5]
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0xF0
- strh r1, [r0, 0x24]
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldr r1, =0x0000fffe
- strh r1, [r0, 0x2E]
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r4, 0x1C
- adds r0, r4
- ldr r1, =sub_805D7AC
- str r1, [r0]
-_0818BF72:
- ldr r1, =gBattleBankFunc
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_81899B8
- str r1, [r0]
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818BD04
-
- thumb_func_start sub_818BFAC
-sub_818BFAC: @ 818BFAC
- push {lr}
- bl RecordedPlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_818BFAC
-
- thumb_func_start sub_818BFB8
-sub_818BFB8: @ 818BFB8
- push {r4-r6,lr}
- ldr r6, =gBankSpriteIds
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r5, =gSprites
- adds r0, r5
- bl oamt_add_pos2_onto_pos1
- ldrb r0, [r4]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r1, 0x23
- strh r1, [r0, 0x2E]
- ldrb r0, [r4]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, =0x0000ffd8
- strh r1, [r0, 0x32]
- ldrb r0, [r4]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldrh r1, [r0, 0x22]
- strh r1, [r0, 0x36]
- ldrb r0, [r4]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r5, 0
- adds r1, 0x1C
- adds r0, r1
- ldr r1, =sub_80A6EEC
- str r1, [r0]
- ldrb r0, [r4]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, =SpriteCallbackDummy
- bl StoreSpriteCallbackInData6
- ldr r1, =gBattleBankFunc
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_81899F0
- str r1, [r0]
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818BFB8
-
- thumb_func_start sub_818C064
-sub_818C064: @ 818C064
- push {r4-r6,lr}
- ldr r6, =gBattleSpritesDataPtr
- ldr r4, [r6]
- ldr r5, =gActiveBank
- ldrb r2, [r5]
- ldr r0, [r4, 0x4]
- lsls r1, r2, 1
- adds r1, r2
- lsls r1, 2
- adds r3, r1, r0
- ldrb r0, [r3, 0x4]
- cmp r0, 0
- bne _0818C0B8
- ldr r1, [r4]
- lsls r0, r2, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0818C098
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x5
- bl move_anim_start_t4
-_0818C098:
- ldr r0, [r6]
- ldrb r1, [r5]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x4]
- adds r1, 0x1
- strb r1, [r0, 0x4]
- b _0818C12E
- .pool
-_0818C0B8:
- ldrb r1, [r3]
- movs r0, 0x40
- ands r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _0818C12E
- strb r4, [r3, 0x4]
- ldr r2, =gBattlePartyID
- ldrb r1, [r5]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, =gPlayerParty
- adds r0, r2
- bl sub_805E990
- movs r1, 0x40
- negs r1, r1
- movs r0, 0x10
- bl PlaySE12WithPanning
- ldr r2, =gSprites
- ldr r3, =gBankSpriteIds
- ldrb r0, [r5]
- adds r0, r3
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- strh r4, [r0, 0x30]
- ldrb r0, [r5]
- adds r0, r3
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x5
- strh r1, [r0, 0x32]
- ldrb r0, [r5]
- adds r0, r3
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, =sub_8039C00
- str r1, [r0]
- ldr r1, =gBattleBankFunc
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_818A114
- str r1, [r0]
-_0818C12E:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818C064
-
- thumb_func_start sub_818C150
-sub_818C150: @ 818C150
- push {lr}
- bl RecordedPlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_818C150
-
- thumb_func_start sub_818C15C
-sub_818C15C: @ 818C15C
- push {lr}
- bl RecordedPlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_818C15C
-
- thumb_func_start sub_818C168
-sub_818C168: @ 818C168
- push {lr}
- bl RecordedPlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_818C168
-
- thumb_func_start sub_818C174
-sub_818C174: @ 818C174
- push {lr}
- bl RecordedPlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_818C174
-
- thumb_func_start sub_818C180
-sub_818C180: @ 818C180
- push {r4-r6,lr}
- ldr r6, =gActiveBank
- ldrb r0, [r6]
- bl mplay_80342A4
- lsls r0, 24
- cmp r0, 0
- beq _0818C192
- b _0818C2A6
-_0818C192:
- ldr r0, =gBattleBufferA
- mov r12, r0
- ldrb r2, [r6]
- lsls r2, 9
- adds r0, 0x1
- adds r0, r2, r0
- ldrb r0, [r0]
- mov r1, r12
- adds r1, 0x2
- adds r1, r2, r1
- ldrb r1, [r1]
- lsls r1, 8
- orrs r0, r1
- ldr r5, =gAnimMoveTurn
- mov r1, r12
- adds r1, 0x3
- adds r2, r1
- ldrb r1, [r2]
- strb r1, [r5]
- ldr r4, =gAnimMovePower
- ldrb r2, [r6]
- lsls r2, 9
- mov r1, r12
- adds r1, 0x4
- adds r1, r2, r1
- ldrb r3, [r1]
- mov r1, r12
- adds r1, 0x5
- adds r2, r1
- ldrb r1, [r2]
- lsls r1, 8
- orrs r3, r1
- strh r3, [r4]
- ldr r4, =gAnimMoveDmg
- ldrb r2, [r6]
- lsls r2, 9
- mov r1, r12
- adds r1, 0x6
- adds r1, r2, r1
- ldrb r3, [r1]
- mov r1, r12
- adds r1, 0x7
- adds r1, r2, r1
- ldrb r1, [r1]
- lsls r1, 8
- orrs r3, r1
- mov r1, r12
- adds r1, 0x8
- adds r1, r2, r1
- ldrb r1, [r1]
- lsls r1, 16
- orrs r3, r1
- mov r1, r12
- adds r1, 0x9
- adds r2, r1
- ldrb r1, [r2]
- lsls r1, 24
- orrs r3, r1
- str r3, [r4]
- ldr r3, =gAnimFriendship
- ldrb r1, [r6]
- lsls r1, 9
- mov r2, r12
- adds r2, 0xA
- adds r1, r2
- ldrb r1, [r1]
- strb r1, [r3]
- ldr r4, =gWeatherMoveAnim
- ldrb r2, [r6]
- lsls r2, 9
- mov r1, r12
- adds r1, 0xC
- adds r1, r2, r1
- ldrb r3, [r1]
- mov r1, r12
- adds r1, 0xD
- adds r2, r1
- ldrb r1, [r2]
- lsls r1, 8
- orrs r3, r1
- strh r3, [r4]
- ldr r3, =gAnimDisableStructPtr
- ldrb r2, [r6]
- lsls r2, 9
- mov r1, r12
- adds r1, 0x10
- adds r2, r1
- str r2, [r3]
- ldr r3, =gUnknown_020244BC
- ldrb r1, [r6]
- lsls r1, 2
- adds r1, r3
- ldr r2, [r2]
- str r2, [r1]
- ldrb r1, [r5]
- bl sub_805DB8C
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0
- beq _0818C288
- bl RecordedPlayerBufferExecCompleted
- b _0818C2A6
- .pool
-_0818C288:
- ldr r0, =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldrb r1, [r6]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- strb r3, [r0, 0x4]
- ldr r1, =gBattleBankFunc
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r1
- ldr r1, =bx_move_anim_2
- str r1, [r0]
-_0818C2A6:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818C180
-
- thumb_func_start bx_move_anim_2
-bx_move_anim_2: @ 818C2B8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r2, =gBattleBufferA
- ldr r6, =gActiveBank
- ldrb r3, [r6]
- lsls r1, r3, 9
- adds r0, r2, 0x1
- mov r10, r0
- adds r0, r1, r0
- ldrb r4, [r0]
- adds r5, r2, 0x2
- mov r9, r5
- adds r0, r1, r5
- ldrb r0, [r0]
- lsls r0, 8
- orrs r4, r0
- adds r2, 0xB
- adds r1, r2
- ldrb r1, [r1]
- mov r8, r1
- ldr r7, =gBattleSpritesDataPtr
- ldr r5, [r7]
- ldr r1, [r5, 0x4]
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r2, [r0, 0x4]
- cmp r2, 0x1
- beq _0818C350
- cmp r2, 0x1
- bgt _0818C310
- cmp r2, 0
- beq _0818C31A
- b _0818C42C
- .pool
-_0818C310:
- cmp r2, 0x2
- beq _0818C37A
- cmp r2, 0x3
- beq _0818C3F0
- b _0818C42C
-_0818C31A:
- ldr r1, [r5]
- lsls r0, r3, 2
- adds r1, r0, r1
- ldrb r2, [r1]
- movs r0, 0xC
- ands r0, r2
- cmp r0, 0x4
- bne _0818C33C
- movs r0, 0x8
- orrs r0, r2
- strb r0, [r1]
- ldrb r2, [r6]
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x5
- bl move_anim_start_t4
-_0818C33C:
- ldr r0, [r7]
- ldrb r1, [r6]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x1
- strb r1, [r0, 0x4]
- b _0818C42C
-_0818C350:
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _0818C42C
- movs r0, 0
- bl sub_805EB9C
- adds r0, r4, 0
- bl DoMoveAnim
- ldr r0, [r7]
- ldrb r1, [r6]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x2
- strb r1, [r0, 0x4]
- b _0818C42C
-_0818C37A:
- ldr r0, =gAnimScriptCallback
- ldr r0, [r0]
- bl _call_via_r0
- ldr r0, =gAnimScriptActive
- ldrb r0, [r0]
- cmp r0, 0
- bne _0818C42C
- movs r0, 0x1
- bl sub_805EB9C
- ldr r0, [r7]
- ldrb r2, [r6]
- ldr r1, [r0]
- lsls r0, r2, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0818C3C8
- mov r0, r8
- cmp r0, 0x1
- bhi _0818C3C8
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x6
- bl move_anim_start_t4
- ldr r0, [r7]
- ldrb r1, [r6]
- ldr r0, [r0]
- lsls r1, 2
- adds r1, r0
- ldrb r2, [r1]
- movs r0, 0x9
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
-_0818C3C8:
- ldr r0, =gBattleSpritesDataPtr
- ldr r2, [r0]
- ldr r0, =gActiveBank
- ldrb r1, [r0]
- ldr r2, [r2, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x3
- strb r1, [r0, 0x4]
- b _0818C42C
- .pool
-_0818C3F0:
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _0818C42C
- bl sub_805E394
- ldrb r0, [r6]
- lsls r2, r0, 9
- mov r3, r10
- adds r1, r2, r3
- ldrb r1, [r1]
- add r2, r9
- ldrb r2, [r2]
- lsls r2, 8
- orrs r1, r2
- bl sub_805E94C
- ldr r0, [r7]
- ldrb r1, [r6]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- strb r4, [r0, 0x4]
- bl RecordedPlayerBufferExecCompleted
-_0818C42C:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end bx_move_anim_2
-
- thumb_func_start sub_818C43C
-sub_818C43C: @ 818C43C
- push {r4,lr}
- ldr r0, =gBattle_BG0_X
- movs r1, 0
- strh r1, [r0]
- ldr r0, =gBattle_BG0_Y
- strh r1, [r0]
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- lsls r0, 9
- ldr r1, =gBattleBufferA + 2
- adds r0, r1
- ldrh r0, [r0]
- bl BufferStringBattle
- ldr r0, =gDisplayedStringBattle
- movs r1, 0
- bl sub_814F9EC
- ldr r1, =gBattleBankFunc
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_818A220
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818C43C
-
- thumb_func_start sub_818C490
-sub_818C490: @ 818C490
- push {lr}
- bl RecordedPlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_818C490
-
- thumb_func_start sub_818C49C
-sub_818C49C: @ 818C49C
- push {lr}
- ldr r1, =gBattleCommunication
- ldr r0, =gNoOfAllBanks
- ldrb r0, [r0]
- ldrb r1, [r1, 0x4]
- lsrs r0, 1
- cmp r1, r0
- bcc _0818C4C6
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- bl sub_8185054
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0x1
- movs r2, 0
- bl EmitCmd33
- bl RecordedPlayerBufferExecCompleted
-_0818C4C6:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818C49C
-
- thumb_func_start sub_818C4D8
-sub_818C4D8: @ 818C4D8
- push {lr}
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 10
- ands r0, r1
- cmp r0, 0
- beq _0818C508
- ldr r1, =gBattleBankFunc
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_818C49C
- str r1, [r0]
- b _0818C522
- .pool
-_0818C508:
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- bl sub_8185054
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0x1
- movs r2, 0
- bl EmitCmd33
- bl RecordedPlayerBufferExecCompleted
-_0818C522:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818C4D8
-
- thumb_func_start sub_818C52C
-sub_818C52C: @ 818C52C
- push {lr}
- bl RecordedPlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_818C52C
-
- thumb_func_start sub_818C538
-sub_818C538: @ 818C538
- push {r4,r5,lr}
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 10
- ands r0, r1
- cmp r0, 0
- beq _0818C560
- bl sub_805D19C
- adds r2, r0, 0
- lsls r2, 16
- lsrs r2, 16
- movs r0, 0x1
- movs r1, 0xA
- bl EmitCmd33
- b _0818C584
- .pool
-_0818C560:
- ldr r5, =gActiveBank
- ldrb r0, [r5]
- bl sub_8185054
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldrb r0, [r5]
- bl sub_8185054
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 16
- orrs r2, r4
- movs r0, 0x1
- movs r1, 0xA
- bl EmitCmd33
-_0818C584:
- bl RecordedPlayerBufferExecCompleted
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818C538
-
- thumb_func_start sub_818C594
-sub_818C594: @ 818C594
- push {lr}
- bl RecordedPlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_818C594
-
- thumb_func_start sub_818C5A0
-sub_818C5A0: @ 818C5A0
- push {r4,lr}
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- bl sub_8185054
- ldrb r1, [r4]
- ldr r3, =gBattleStruct
- ldr r2, [r3]
- adds r1, r2
- adds r1, 0x5C
- strb r0, [r1]
- ldrb r0, [r4]
- ldr r1, [r3]
- adds r0, r1
- adds r0, 0x5C
- ldrb r1, [r0]
- movs r0, 0x1
- movs r2, 0
- bl EmitCmd34
- bl RecordedPlayerBufferExecCompleted
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818C5A0
-
- thumb_func_start sub_818C5DC
-sub_818C5DC: @ 818C5DC
- push {lr}
- bl RecordedPlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_818C5DC
-
- thumb_func_start sub_818C5E8
-sub_818C5E8: @ 818C5E8
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x4
- movs r0, 0
- bl LoadBattleBarGfx
- ldr r3, =gBattleBufferA
- ldr r0, =gActiveBank
- mov r9, r0
- ldrb r4, [r0]
- lsls r2, r4, 9
- adds r0, r3, 0x2
- adds r0, r2, r0
- ldrb r1, [r0]
- adds r3, 0x3
- adds r2, r3
- ldrb r0, [r2]
- lsls r0, 8
- orrs r1, r0
- lsls r1, 16
- asrs r7, r1, 16
- ldr r0, =0x00007fff
- cmp r7, r0
- beq _0818C678
- ldr r6, =gBattlePartyID
- lsls r0, r4, 1
- adds r0, r6
- ldrh r0, [r0]
- movs r5, 0x64
- muls r0, r5
- ldr r4, =gPlayerParty
- adds r0, r4
- movs r1, 0x3A
- bl GetMonData
- mov r8, r0
- mov r1, r9
- ldrb r0, [r1]
- lsls r0, 1
- adds r0, r6
- ldrh r0, [r0]
- muls r0, r5
- adds r0, r4
- movs r1, 0x39
- bl GetMonData
- adds r3, r0, 0
- mov r1, r9
- ldrb r0, [r1]
- ldr r1, =gHealthBoxesIds
- adds r1, r0, r1
- ldrb r1, [r1]
- str r7, [sp]
- mov r2, r8
- bl SetBattleBarStruct
- b _0818C6B2
- .pool
-_0818C678:
- ldr r1, =gBattlePartyID
- lsls r0, r4, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x3A
- bl GetMonData
- adds r2, r0, 0
- mov r1, r9
- ldrb r0, [r1]
- ldr r4, =gHealthBoxesIds
- adds r1, r0, r4
- ldrb r1, [r1]
- str r7, [sp]
- movs r3, 0
- bl SetBattleBarStruct
- mov r1, r9
- ldrb r0, [r1]
- adds r0, r4
- ldrb r0, [r0]
- movs r1, 0
- movs r2, 0
- bl UpdateHpTextInHealthbox
-_0818C6B2:
- ldr r1, =gBattleBankFunc
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_818A0A4
- str r1, [r0]
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818C5E8
-
- thumb_func_start sub_818C6E8
-sub_818C6E8: @ 818C6E8
- push {lr}
- bl RecordedPlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_818C6E8
-
- thumb_func_start sub_818C6F4
-sub_818C6F4: @ 818C6F4
- push {r4,lr}
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- bl mplay_80342A4
- lsls r0, 24
- cmp r0, 0
- bne _0818C748
- ldr r0, =gHealthBoxesIds
- ldrb r1, [r4]
- adds r0, r1, r0
- ldrb r0, [r0]
- ldr r2, =gBattlePartyID
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, =gPlayerParty
- adds r1, r2
- movs r2, 0x9
- bl UpdateHealthboxAttribute
- ldrb r2, [r4]
- ldr r0, =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r0, [r0, 0x4]
- lsls r1, r2, 1
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r2, [r1]
- movs r0, 0x11
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- ldr r1, =gBattleBankFunc
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_818A58C
- str r1, [r0]
-_0818C748:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818C6F4
-
- thumb_func_start sub_818C76C
-sub_818C76C: @ 818C76C
- push {r4,r5,lr}
- ldr r5, =gActiveBank
- ldrb r0, [r5]
- bl mplay_80342A4
- lsls r0, 24
- cmp r0, 0
- bne _0818C7BC
- ldr r4, =gBattleBufferA
- ldrb r3, [r5]
- lsls r3, 9
- adds r0, r4, 0x1
- adds r0, r3, r0
- ldrb r0, [r0]
- adds r1, r4, 0x2
- adds r1, r3, r1
- ldrb r1, [r1]
- adds r2, r4, 0x3
- adds r2, r3, r2
- ldrb r2, [r2]
- lsls r2, 8
- orrs r1, r2
- adds r2, r4, 0x4
- adds r2, r3, r2
- ldrb r2, [r2]
- lsls r2, 16
- orrs r1, r2
- adds r4, 0x5
- adds r3, r4
- ldrb r2, [r3]
- lsls r2, 24
- orrs r1, r2
- bl move_anim_start_t2_for_situation
- ldr r1, =gBattleBankFunc
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_818A58C
- str r1, [r0]
-_0818C7BC:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818C76C
-
- thumb_func_start sub_818C7D4
-sub_818C7D4: @ 818C7D4
- push {lr}
- bl RecordedPlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_818C7D4
-
- thumb_func_start sub_818C7E0
-sub_818C7E0: @ 818C7E0
- push {lr}
- bl RecordedPlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_818C7E0
-
- thumb_func_start sub_818C7EC
-sub_818C7EC: @ 818C7EC
- push {lr}
- bl RecordedPlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_818C7EC
-
- thumb_func_start sub_818C7F8
-sub_818C7F8: @ 818C7F8
- push {lr}
- bl RecordedPlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_818C7F8
-
- thumb_func_start sub_818C804
-sub_818C804: @ 818C804
- push {lr}
- bl RecordedPlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_818C804
-
- thumb_func_start sub_818C810
-sub_818C810: @ 818C810
- push {lr}
- bl RecordedPlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_818C810
-
- thumb_func_start sub_818C81C
-sub_818C81C: @ 818C81C
- push {lr}
- bl RecordedPlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_818C81C
-
- thumb_func_start sub_818C828
-sub_818C828: @ 818C828
- push {lr}
- bl RecordedPlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_818C828
-
- thumb_func_start sub_818C834
-sub_818C834: @ 818C834
- push {lr}
- bl RecordedPlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_818C834
-
- thumb_func_start sub_818C840
-sub_818C840: @ 818C840
- push {lr}
- ldr r2, =gUnknown_02022D0C
- ldrb r1, [r2]
- movs r0, 0x80
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- bl RecordedPlayerBufferExecCompleted
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818C840
-
- thumb_func_start sub_818C85C
-sub_818C85C: @ 818C85C
- push {lr}
- ldr r3, =gUnknown_02022D0C
- ldr r1, =gBattleBufferA
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- movs r1, 0x7F
- ands r1, r0
- ldrb r2, [r3]
- movs r0, 0x80
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- bl RecordedPlayerBufferExecCompleted
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818C85C
-
- thumb_func_start sub_818C894
-sub_818C894: @ 818C894
- push {lr}
- ldr r2, =gUnknown_02022D0C
- ldrb r1, [r2]
- movs r0, 0x7F
- ands r0, r1
- strb r0, [r2]
- bl RecordedPlayerBufferExecCompleted
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818C894
-
- thumb_func_start sub_818C8AC
-sub_818C8AC: @ 818C8AC
- push {lr}
- ldr r3, =gUnknown_02022D0C
- ldr r1, [r3]
- lsls r1, 24
- lsrs r1, 31
- movs r0, 0x1
- eors r1, r0
- lsls r1, 7
- ldrb r2, [r3]
- movs r0, 0x7F
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- bl RecordedPlayerBufferExecCompleted
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818C8AC
-
- thumb_func_start sub_818C8D4
-sub_818C8D4: @ 818C8D4
- push {r4,lr}
- ldr r3, =gSprites
- ldr r2, =gBankSpriteIds
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- adds r0, r2
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- adds r0, 0x3E
- ldrb r0, [r0]
- lsls r0, 29
- cmp r0, 0
- bge _0818C908
- bl RecordedPlayerBufferExecCompleted
- b _0818C932
- .pool
-_0818C908:
- ldr r1, =gDoingBattleAnim
- movs r0, 0x1
- strb r0, [r1]
- ldrb r0, [r4]
- adds r0, r2
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- movs r1, 0
- strh r1, [r0, 0x30]
- ldrb r0, [r4]
- bl sub_80769F4
- ldr r1, =gBattleBankFunc
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_818A238
- str r1, [r0]
-_0818C932:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818C8D4
-
- thumb_func_start sub_818C944
-sub_818C944: @ 818C944
- push {lr}
- bl RecordedPlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_818C944
-
- thumb_func_start sub_818C950
-sub_818C950: @ 818C950
- push {r4,lr}
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- movs r3, 0x3F
- cmp r0, 0
- bne _0818C964
- movs r3, 0xC0
-_0818C964:
- ldr r2, =gBattleBufferA
- ldrb r1, [r4]
- lsls r1, 9
- adds r0, r2, 0x1
- adds r0, r1, r0
- ldrb r0, [r0]
- adds r2, 0x2
- adds r1, r2
- ldrb r1, [r1]
- lsls r1, 8
- orrs r0, r1
- lsls r1, r3, 24
- asrs r1, 24
- bl PlaySE12WithPanning
- bl RecordedPlayerBufferExecCompleted
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818C950
-
- thumb_func_start sub_818C994
-sub_818C994: @ 818C994
- push {r4,r5,lr}
- ldr r4, =gBattleBufferA
- ldr r5, =gActiveBank
- ldrb r0, [r5]
- lsls r3, r0, 9
- adds r0, r4, 0x3
- adds r0, r3, r0
- ldrb r0, [r0]
- cmp r0, 0
- beq _0818C9D0
- bl BattleMusicStop
- ldrb r1, [r5]
- lsls r1, 9
- adds r0, r4, 0x1
- adds r0, r1, r0
- ldrb r0, [r0]
- adds r2, r4, 0x2
- adds r1, r2
- ldrb r1, [r1]
- lsls r1, 8
- orrs r0, r1
- bl PlayBGM
- b _0818C9E4
- .pool
-_0818C9D0:
- adds r0, r4, 0x1
- adds r0, r3, r0
- ldrb r0, [r0]
- adds r1, r4, 0x2
- adds r1, r3, r1
- ldrb r1, [r1]
- lsls r1, 8
- orrs r0, r1
- bl PlayFanfare
-_0818C9E4:
- bl RecordedPlayerBufferExecCompleted
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_818C994
-
- thumb_func_start sub_818C9F0
-sub_818C9F0: @ 818C9F0
- push {lr}
- ldr r1, =gBattlePartyID
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x19
- negs r1, r1
- movs r2, 0x5
- bl PlayCry3
- bl RecordedPlayerBufferExecCompleted
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818C9F0
-
- thumb_func_start dp01t_2E_2_battle_intro
-dp01t_2E_2_battle_intro: @ 818CA30
- push {lr}
- ldr r1, =gBattleBufferA
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- bl battle_intro_launch
- ldr r2, =gUnknown_020243FC
- ldrh r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strh r0, [r2]
- bl RecordedPlayerBufferExecCompleted
- pop {r0}
- bx r0
- .pool
- thumb_func_end dp01t_2E_2_battle_intro
-
- thumb_func_start sub_818CA64
-sub_818CA64: @ 818CA64
- push {r4-r6,lr}
- ldr r5, =gBankSpriteIds
- ldr r6, =gActiveBank
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, =gSprites
- adds r0, r4
- bl oamt_add_pos2_onto_pos1
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0x32
- strh r1, [r0, 0x2E]
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldr r1, =0x0000ffd8
- strh r1, [r0, 0x32]
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrh r1, [r0, 0x22]
- strh r1, [r0, 0x36]
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r4, 0
- adds r1, 0x1C
- adds r0, r1
- ldr r1, =sub_80A6EEC
- str r1, [r0]
- ldrb r2, [r6]
- adds r0, r2, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- strh r2, [r0, 0x38]
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldr r1, =sub_805CC00
- bl StoreSpriteCallbackInData6
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0x1
- bl StartSpriteAnim
- ldr r0, =0x0000d6f9
- bl AllocSpritePalette
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 18
- ands r0, r1
- cmp r0, 0
- beq _0818CB54
- ldr r4, =gLinkPlayers
- ldrb r0, [r6]
- bl sub_806D864
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r4
- ldrb r0, [r1, 0x13]
- b _0818CB5A
- .pool
-_0818CB54:
- ldr r0, =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
-_0818CB5A:
- ldr r1, =gTrainerBackPicPaletteTable
- lsls r0, 3
- adds r0, r1
- ldr r0, [r0]
- lsls r4, r5, 4
- movs r2, 0x80
- lsls r2, 1
- adds r1, r4, r2
- movs r2, 0x20
- bl LoadCompressedPalette
- ldr r2, =gSprites
- ldr r1, =gBankSpriteIds
- ldr r5, =gActiveBank
- ldrb r0, [r5]
- adds r0, r1
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r4
- strb r0, [r1, 0x5]
- ldr r0, =sub_818CC24
- movs r1, 0x5
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r4, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r4
- ldrb r0, [r5]
- strh r0, [r1, 0x8]
- ldr r3, =gBattleSpritesDataPtr
- ldr r0, [r3]
- ldrb r2, [r5]
- ldr r1, [r0, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0818CBD4
- ldr r0, =gUnknown_020244B4
- adds r0, r2, r0
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r4
- ldr r1, =sub_8073C30
- str r1, [r0]
-_0818CBD4:
- ldr r0, [r3]
- ldr r2, [r0, 0x8]
- ldrb r0, [r2, 0x9]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2, 0x9]
- ldr r1, =gBattleBankFunc
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, =nullsub_120
- str r1, [r0]
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818CA64
-
- thumb_func_start sub_818CC24
-sub_818CC24: @ 818CC24
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r1, =gTasks
- lsls r0, 2
- add r0, r8
- lsls r0, 3
- adds r1, r0, r1
- ldrh r2, [r1, 0xA]
- movs r3, 0xA
- ldrsh r0, [r1, r3]
- cmp r0, 0x17
- bgt _0818CC50
- adds r0, r2, 0x1
- strh r0, [r1, 0xA]
- b _0818CD0C
- .pool
-_0818CC50:
- ldr r7, =gActiveBank
- ldrb r0, [r7]
- mov r9, r0
- ldrh r0, [r1, 0x8]
- strb r0, [r7]
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _0818CC70
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0818CCA0
-_0818CC70:
- ldr r0, =gBattleBufferA
- ldrb r1, [r7]
- lsls r2, r1, 9
- adds r0, 0x1
- adds r2, r0
- ldr r0, =gBattlePartyID
- lsls r1, 1
- adds r1, r0
- ldrh r0, [r1]
- strb r0, [r2]
- ldrb r0, [r7]
- movs r1, 0
- bl sub_818BA6C
- b _0818CCF4
- .pool
-_0818CCA0:
- ldr r4, =gBattleBufferA
- ldrb r0, [r7]
- lsls r1, r0, 9
- adds r4, 0x1
- adds r1, r4
- ldr r5, =gBattlePartyID
- lsls r0, 1
- adds r0, r5
- ldrh r0, [r0]
- strb r0, [r1]
- ldrb r0, [r7]
- movs r1, 0
- bl sub_818BA6C
- ldrb r0, [r7]
- movs r6, 0x2
- eors r0, r6
- strb r0, [r7]
- ldrb r0, [r7]
- lsls r1, r0, 9
- adds r1, r4
- lsls r0, 1
- adds r0, r5
- ldrh r0, [r0]
- strb r0, [r1]
- ldrb r1, [r7]
- lsls r0, r1, 1
- adds r0, r5
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, =gPlayerParty
- adds r0, r2
- bl BattleLoadPlayerMonSpriteGfx
- ldrb r0, [r7]
- movs r1, 0
- bl sub_818BA6C
- ldrb r0, [r7]
- eors r0, r6
- strb r0, [r7]
-_0818CCF4:
- ldr r1, =gBattleBankFunc
- ldr r2, =gActiveBank
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_8189D40
- str r1, [r0]
- mov r3, r9
- strb r3, [r2]
- mov r0, r8
- bl DestroyTask
-_0818CD0C:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818CC24
-
- thumb_func_start sub_818CD30
-sub_818CD30: @ 818CD30
- push {r4-r6,lr}
- ldr r1, =gBattleBufferA
- ldr r0, =gActiveBank
- ldrb r2, [r0]
- lsls r0, r2, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _0818CD60
- adds r0, r2, 0
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- bne _0818CD60
- bl RecordedPlayerBufferExecCompleted
- b _0818CDD4
- .pool
-_0818CD60:
- ldr r6, =gBattleSpritesDataPtr
- ldr r0, [r6]
- ldr r5, =gActiveBank
- ldrb r1, [r5]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r2, 0x1
- orrs r1, r2
- strb r1, [r0]
- ldrb r0, [r5]
- lsls r3, r0, 9
- ldr r4, =gBattleBufferA + 4
- adds r1, r3, r4
- subs r2, r4, 0x3
- adds r2, r3, r2
- ldrb r2, [r2]
- subs r4, 0x2
- adds r3, r4
- ldrb r3, [r3]
- bl CreatePartyStatusSummarySprites
- ldr r2, =gUnknown_020244B4
- ldrb r1, [r5]
- adds r1, r2
- movs r3, 0
- strb r0, [r1]
- ldr r0, [r6]
- ldrb r1, [r5]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- strb r3, [r0, 0x5]
- ldrb r2, [r5]
- lsls r0, r2, 9
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0
- beq _0818CDC8
- ldr r0, [r6]
- ldr r1, [r0, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- movs r1, 0x5D
- strb r1, [r0, 0x5]
-_0818CDC8:
- ldr r0, =gBattleBankFunc
- ldrb r1, [r5]
- lsls r1, 2
- adds r1, r0
- ldr r0, =bx_increment_dp11b_field_5_till_x60_then_resume
- str r0, [r1]
-_0818CDD4:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818CD30
-
- thumb_func_start bx_increment_dp11b_field_5_till_x60_then_resume
-bx_increment_dp11b_field_5_till_x60_then_resume: @ 818CDF4
- push {r4,lr}
- ldr r4, =gBattleSpritesDataPtr
- ldr r0, [r4]
- ldr r3, =gActiveBank
- ldrb r1, [r3]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x5]
- adds r2, r1, 0x1
- strb r2, [r0, 0x5]
- lsls r1, 24
- lsrs r1, 24
- cmp r1, 0x5C
- bls _0818CE2C
- ldr r0, [r4]
- ldrb r1, [r3]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0
- strb r1, [r0, 0x5]
- bl RecordedPlayerBufferExecCompleted
-_0818CE2C:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end bx_increment_dp11b_field_5_till_x60_then_resume
-
- thumb_func_start sub_818CE3C
-sub_818CE3C: @ 818CE3C
- push {lr}
- ldr r0, =gBattleSpritesDataPtr
- ldr r1, [r0]
- ldr r0, =gActiveBank
- ldrb r3, [r0]
- ldr r1, [r1, 0x4]
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0818CE6E
- ldr r2, =gTasks
- ldr r0, =gUnknown_020244B4
- adds r0, r3, r0
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- ldr r1, =sub_8073C30
- str r1, [r0]
-_0818CE6E:
- bl RecordedPlayerBufferExecCompleted
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818CE3C
-
- thumb_func_start sub_818CE8C
-sub_818CE8C: @ 818CE8C
- push {lr}
- bl RecordedPlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_818CE8C
-
- thumb_func_start sub_818CE98
-sub_818CE98: @ 818CE98
- push {r4,lr}
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- bl AnimBankSpriteExists
- lsls r0, 24
- cmp r0, 0
- beq _0818CEDE
- ldr r3, =gSprites
- ldr r0, =gBankSpriteIds
- ldrb r1, [r4]
- adds r0, r1, r0
- ldrb r0, [r0]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r3
- ldr r0, =gBattleBufferA
- lsls r1, 9
- adds r0, 0x1
- adds r1, r0
- adds r2, 0x3E
- movs r0, 0x1
- ldrb r1, [r1]
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2]
- ldrb r0, [r4]
- bl sub_805E408
-_0818CEDE:
- bl RecordedPlayerBufferExecCompleted
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818CE98
-
- thumb_func_start sub_818CEF8
-sub_818CEF8: @ 818CEF8
- push {r4-r6,lr}
- sub sp, 0x4
- ldr r6, =gActiveBank
- ldrb r0, [r6]
- bl mplay_80342A4
- lsls r0, 24
- cmp r0, 0
- bne _0818CF50
- ldr r5, =gBattleBufferA
- ldrb r2, [r6]
- lsls r1, r2, 9
- adds r0, r5, 0x1
- adds r0, r1, r0
- ldrb r3, [r0]
- adds r0, r5, 0x2
- adds r0, r1, r0
- ldrb r4, [r0]
- adds r5, 0x3
- adds r1, r5
- ldrb r0, [r1]
- lsls r0, 8
- orrs r4, r0
- str r4, [sp]
- adds r0, r2, 0
- adds r1, r2, 0
- bl move_anim_start_t3
- lsls r0, 24
- cmp r0, 0
- beq _0818CF44
- bl RecordedPlayerBufferExecCompleted
- b _0818CF50
- .pool
-_0818CF44:
- ldr r0, =gBattleBankFunc
- ldrb r1, [r6]
- lsls r1, 2
- adds r1, r0
- ldr r0, =sub_818A5BC
- str r0, [r1]
-_0818CF50:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818CEF8
-
- thumb_func_start sub_818CF60
-sub_818CF60: @ 818CF60
- push {lr}
- bl RecordedPlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_818CF60
-
- thumb_func_start sub_818CF6C
-sub_818CF6C: @ 818CF6C
- push {lr}
- bl RecordedPlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_818CF6C
-
- thumb_func_start sub_818CF78
-sub_818CF78: @ 818CF78
- push {r4,lr}
- ldr r2, =gBattleOutcome
- ldr r1, =gBattleBufferA
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- strb r0, [r2]
- movs r0, 0x5
- bl FadeOutMapMusic
- movs r0, 0x3
- bl BeginFastPaletteFade
- bl RecordedPlayerBufferExecCompleted
- ldr r1, =gBattleBankFunc
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_80587B0
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818CF78
-
- thumb_func_start nullsub_121
-nullsub_121: @ 818CFC4
- bx lr
- thumb_func_end nullsub_121
-
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/battle_controller_safari.s b/asm/battle_controller_safari.s
deleted file mode 100644
index d7efd69fe..000000000
--- a/asm/battle_controller_safari.s
+++ /dev/null
@@ -1,1412 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
-
- thumb_func_start nullsub_114
-nullsub_114: @ 8159368
- bx lr
- thumb_func_end nullsub_114
-
- thumb_func_start SetBankFuncToSafariBufferRunCommand
-SetBankFuncToSafariBufferRunCommand: @ 815936C
- ldr r1, =gBattleBankFunc
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, =SafariBufferRunCommand
- str r1, [r0]
- bx lr
- .pool
- thumb_func_end SetBankFuncToSafariBufferRunCommand
-
- thumb_func_start SafariBufferRunCommand
-SafariBufferRunCommand: @ 8159388
- push {lr}
- ldr r2, =gBattleExecBuffer
- ldr r1, =gBitTable
- ldr r0, =gActiveBank
- ldrb r3, [r0]
- lsls r0, r3, 2
- adds r0, r1
- ldr r1, [r2]
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _081593D4
- ldr r0, =gBattleBufferA
- lsls r1, r3, 9
- adds r1, r0
- ldrb r0, [r1]
- cmp r0, 0x38
- bhi _081593D0
- ldr r0, =gSafariBufferCommands
- ldrb r1, [r1]
- lsls r1, 2
- adds r1, r0
- ldr r0, [r1]
- bl _call_via_r0
- b _081593D4
- .pool
-_081593D0:
- bl SafariBufferExecCompleted
-_081593D4:
- pop {r0}
- bx r0
- thumb_func_end SafariBufferRunCommand
-
- thumb_func_start bx_battle_menu_t6_2
-bx_battle_menu_t6_2: @ 81593D8
- push {r4,r5,lr}
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r2, 0x1
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- beq _08159446
- movs r0, 0x5
- bl PlaySE
- ldr r1, =gActionSelectionCursor
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _08159424
- cmp r0, 0x1
- bgt _08159414
- cmp r0, 0
- beq _0815941E
- b _08159440
- .pool
-_08159414:
- cmp r0, 0x2
- beq _0815942A
- cmp r0, 0x3
- beq _08159436
- b _08159440
-_0815941E:
- movs r0, 0x1
- movs r1, 0x5
- b _0815942E
-_08159424:
- movs r0, 0x1
- movs r1, 0x6
- b _0815942E
-_0815942A:
- movs r0, 0x1
- movs r1, 0x7
-_0815942E:
- movs r2, 0
- bl EmitCmd33
- b _08159440
-_08159436:
- movs r0, 0x1
- movs r1, 0x8
- movs r2, 0
- bl EmitCmd33
-_08159440:
- bl SafariBufferExecCompleted
- b _0815954E
-_08159446:
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _08159484
- ldr r5, =gActionSelectionCursor
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- beq _0815954E
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl ActionSelectionDestroyCursorAt
- ldrb r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- movs r2, 0x1
- b _081594F2
- .pool
-_08159484:
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _081594C0
- ldr r5, =gActionSelectionCursor
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- bne _0815954E
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl ActionSelectionDestroyCursorAt
- ldrb r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- movs r2, 0x1
- b _081594F2
- .pool
-_081594C0:
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0815950C
- ldr r5, =gActionSelectionCursor
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0815954E
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl ActionSelectionDestroyCursorAt
- ldrb r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- movs r2, 0x2
-_081594F2:
- eors r0, r2
- strb r0, [r1]
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- movs r1, 0
- bl ActionSelectionCreateCursorAt
- b _0815954E
- .pool
-_0815950C:
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0815954E
- ldr r5, =gActionSelectionCursor
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _0815954E
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl ActionSelectionDestroyCursorAt
- ldrb r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- movs r2, 0x2
- eors r0, r2
- strb r0, [r1]
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- movs r1, 0
- bl ActionSelectionCreateCursorAt
-_0815954E:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end bx_battle_menu_t6_2
-
- thumb_func_start sub_815955C
-sub_815955C: @ 815955C
- push {lr}
- ldr r2, =gSprites
- ldr r1, =gBankSpriteIds
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, [r0]
- ldr r0, =SpriteCallbackDummy
- cmp r1, r0
- bne _08159580
- bl SafariBufferExecCompleted
-_08159580:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_815955C
-
- thumb_func_start bx_t6_button_a
-bx_t6_button_a: @ 8159594
- push {lr}
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- bne _081595A6
- bl SafariBufferExecCompleted
-_081595A6:
- pop {r0}
- bx r0
- thumb_func_end bx_t6_button_a
-
- thumb_func_start sub_81595AC
-sub_81595AC: @ 81595AC
- push {lr}
- ldr r2, =gSprites
- ldr r1, =gHealthBoxesIds
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, [r0]
- ldr r0, =SpriteCallbackDummy
- cmp r1, r0
- bne _081595D0
- bl SafariBufferExecCompleted
-_081595D0:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81595AC
-
- thumb_func_start sub_81595E4
-sub_81595E4: @ 81595E4
- push {lr}
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0815960E
- ldr r2, =gMain
- ldr r0, =0x00000439
- adds r3, r2, r0
- ldrb r1, [r3]
- movs r0, 0x3
- negs r0, r0
- ands r0, r1
- strb r0, [r3]
- ldr r0, =gPreBattleCallback1
- ldr r0, [r0]
- str r0, [r2]
- ldr r0, [r2, 0x8]
- bl SetMainCallback2
-_0815960E:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81595E4
-
- thumb_func_start bx_wait_t6
-bx_wait_t6: @ 8159624
- push {lr}
- ldr r0, =gDoingBattleAnim
- ldrb r0, [r0]
- cmp r0, 0
- beq _0815964A
- ldr r0, =gBattleSpritesDataPtr
- ldr r2, [r0]
- ldr r0, =gActiveBank
- ldrb r1, [r0]
- ldr r2, [r2, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _0815964E
-_0815964A:
- bl SafariBufferExecCompleted
-_0815964E:
- pop {r0}
- bx r0
- .pool
- thumb_func_end bx_wait_t6
-
- thumb_func_start sub_8159660
-sub_8159660: @ 8159660
- push {lr}
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08159684
- ldr r1, =gBattleBankFunc
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_8159698
- str r1, [r0]
- bl FreeAllWindowBuffers
- bl sub_81358F4
-_08159684:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8159660
-
- thumb_func_start sub_8159698
-sub_8159698: @ 8159698
- push {lr}
- ldr r0, =gMain
- ldr r1, [r0, 0x4]
- ldr r0, =BattleMainCB2
- cmp r1, r0
- bne _081596BE
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _081596BE
- ldr r0, =gScriptItemId
- ldrh r1, [r0]
- movs r0, 0x1
- bl EmitCmd35
- bl SafariBufferExecCompleted
-_081596BE:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8159698
-
- thumb_func_start sub_81596D4
-sub_81596D4: @ 81596D4
- push {lr}
- ldr r0, =gBattleSpritesDataPtr
- ldr r2, [r0]
- ldr r0, =gActiveBank
- ldrb r1, [r0]
- ldr r2, [r2, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- bne _081596F6
- bl SafariBufferExecCompleted
-_081596F6:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81596D4
-
- thumb_func_start SafariBufferExecCompleted
-SafariBufferExecCompleted: @ 8159704
- push {r4,lr}
- sub sp, 0x4
- ldr r1, =gBattleBankFunc
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, =SafariBufferRunCommand
- str r1, [r0]
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08159758
- bl GetMultiplayerId
- mov r1, sp
- strb r0, [r1]
- movs r0, 0x2
- movs r1, 0x4
- mov r2, sp
- bl PrepareBufferDataTransferLink
- ldr r1, =gBattleBufferA
- ldrb r0, [r4]
- lsls r0, 9
- adds r0, r1
- movs r1, 0x38
- strb r1, [r0]
- b _0815976A
- .pool
-_08159758:
- ldr r2, =gBattleExecBuffer
- ldr r1, =gBitTable
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- ldr r0, [r2]
- bics r0, r1
- str r0, [r2]
-_0815976A:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end SafariBufferExecCompleted
-
- thumb_func_start bx_80364D0
-bx_80364D0: @ 815977C
- push {lr}
- ldr r0, =gBattleSpritesDataPtr
- ldr r2, [r0]
- ldr r0, =gActiveBank
- ldrb r1, [r0]
- ldr r2, [r2, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- bne _0815979E
- bl SafariBufferExecCompleted
-_0815979E:
- pop {r0}
- bx r0
- .pool
- thumb_func_end bx_80364D0
-
- thumb_func_start sub_81597AC
-sub_81597AC: @ 81597AC
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_81597AC
-
- thumb_func_start sub_81597B8
-sub_81597B8: @ 81597B8
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_81597B8
-
- thumb_func_start sub_81597C4
-sub_81597C4: @ 81597C4
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_81597C4
-
- thumb_func_start sub_81597D0
-sub_81597D0: @ 81597D0
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_81597D0
-
- thumb_func_start sub_81597DC
-sub_81597DC: @ 81597DC
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_81597DC
-
- thumb_func_start sub_81597E8
-sub_81597E8: @ 81597E8
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_81597E8
-
- thumb_func_start sub_81597F4
-sub_81597F4: @ 81597F4
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_81597F4
-
- thumb_func_start sub_8159800
-sub_8159800: @ 8159800
- push {r4-r6,lr}
- ldr r4, =gSaveBlock2Ptr
- ldr r0, [r4]
- ldrb r0, [r0, 0x8]
- ldr r5, =gActiveBank
- ldrb r1, [r5]
- bl LoadBackTrainerBankSpriteGfx
- ldr r0, [r4]
- ldrb r6, [r0, 0x8]
- ldrb r0, [r5]
- bl GetBankIdentity
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r6, 0
- bl sub_806A12C
- ldr r0, =gUnknown_0202499C
- ldr r2, =gTrainerBackPicCoords
- ldr r1, [r4]
- ldrb r1, [r1, 0x8]
- lsls r1, 2
- adds r1, r2
- ldrb r1, [r1]
- movs r2, 0x8
- subs r2, r1
- lsls r2, 18
- movs r1, 0xA0
- lsls r1, 15
- adds r2, r1
- asrs r2, 16
- movs r1, 0x50
- movs r3, 0x1E
- bl CreateSprite
- ldr r6, =gBankSpriteIds
- ldrb r1, [r5]
- adds r1, r6
- strb r0, [r1]
- ldr r4, =gSprites
- ldrb r3, [r5]
- adds r0, r3, r6
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- lsls r3, 4
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r3
- strb r0, [r1, 0x5]
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0xF0
- strh r1, [r0, 0x24]
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldr r1, =0x0000fffe
- strh r1, [r0, 0x2E]
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r4, 0x1C
- adds r0, r4
- ldr r1, =sub_805D7AC
- str r1, [r0]
- ldr r1, =gBattleBankFunc
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_815955C
- str r1, [r0]
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8159800
-
- thumb_func_start sub_81598E0
-sub_81598E0: @ 81598E0
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_81598E0
-
- thumb_func_start sub_81598EC
-sub_81598EC: @ 81598EC
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_81598EC
-
- thumb_func_start sub_81598F8
-sub_81598F8: @ 81598F8
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_81598F8
-
- thumb_func_start sub_8159904
-sub_8159904: @ 8159904
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8159904
-
- thumb_func_start sub_8159910
-sub_8159910: @ 8159910
- push {r4,r5,lr}
- ldr r0, =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r1, [r0, 0x8]
- movs r0, 0x4
- strb r0, [r1, 0x8]
- ldr r1, =gDoingBattleAnim
- movs r0, 0x1
- strb r0, [r1]
- ldr r5, =gActiveBank
- ldrb r4, [r5]
- movs r0, 0x1
- bl GetBankByIdentity
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r1, r4, 0
- movs r3, 0x4
- bl move_anim_start_t4
- ldr r1, =gBattleBankFunc
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, =bx_wait_t6
- str r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8159910
-
- thumb_func_start sub_8159964
-sub_8159964: @ 8159964
- push {r4,r5,lr}
- ldr r1, =gBattleBufferA
- ldr r5, =gActiveBank
- ldrb r0, [r5]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r1, [r0]
- ldr r0, =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r0, [r0, 0x8]
- strb r1, [r0, 0x8]
- ldr r1, =gDoingBattleAnim
- movs r0, 0x1
- strb r0, [r1]
- ldrb r4, [r5]
- movs r0, 0x1
- bl GetBankByIdentity
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r1, r4, 0
- movs r3, 0x4
- bl move_anim_start_t4
- ldr r1, =gBattleBankFunc
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, =bx_wait_t6
- str r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8159964
-
- thumb_func_start sub_81599C4
-sub_81599C4: @ 81599C4
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_81599C4
-
- thumb_func_start sub_81599D0
-sub_81599D0: @ 81599D0
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_81599D0
-
- thumb_func_start dp01t_10_6_message
-dp01t_10_6_message: @ 81599DC
- push {r4,lr}
- ldr r0, =gBattle_BG0_X
- movs r1, 0
- strh r1, [r0]
- ldr r0, =gBattle_BG0_Y
- strh r1, [r0]
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- lsls r0, 9
- ldr r1, =gBattleBufferA + 2
- adds r0, r1
- ldrh r0, [r0]
- bl BufferStringBattle
- ldr r0, =gDisplayedStringBattle
- movs r1, 0
- bl sub_814F9EC
- ldr r1, =gBattleBankFunc
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, =bx_t6_button_a
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end dp01t_10_6_message
-
- thumb_func_start dp01t_11_6_message_for_player_only
-dp01t_11_6_message_for_player_only: @ 8159A30
- push {lr}
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- bne _08159A4C
- bl dp01t_10_6_message
- b _08159A50
- .pool
-_08159A4C:
- bl SafariBufferExecCompleted
-_08159A50:
- pop {r0}
- bx r0
- thumb_func_end dp01t_11_6_message_for_player_only
-
- thumb_func_start sub_8159A54
-sub_8159A54: @ 8159A54
- push {lr}
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0
- bne _08159A7A
- ldr r0, =gBattle_BG0_X
- strh r1, [r0]
- ldr r1, =gBattle_BG0_Y
- movs r0, 0xA0
- strh r0, [r1]
- ldr r1, =gBattleBankFunc
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, =bx_battle_menu_t6_2
- str r1, [r0]
-_08159A7A:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8159A54
-
- thumb_func_start sub_8159A94
-sub_8159A94: @ 8159A94
- push {r4,lr}
- ldr r1, =gBattleBankFunc
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_8159A54
- str r1, [r0]
- ldr r0, =gText_SafariZoneMenu
- movs r1, 0x2
- bl sub_814F9EC
- movs r4, 0
-_08159AAE:
- lsls r0, r4, 24
- lsrs r0, 24
- bl ActionSelectionDestroyCursorAt
- adds r4, 0x1
- cmp r4, 0x3
- ble _08159AAE
- ldr r1, =gActionSelectionCursor
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- adds r0, r1
- ldrb r0, [r0]
- movs r1, 0
- bl ActionSelectionCreateCursorAt
- ldr r0, =gText_WhatWillPkmnDo2
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r0, =gDisplayedStringBattle
- movs r1, 0x1
- bl sub_814F9EC
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8159A94
-
- thumb_func_start sub_8159AFC
-sub_8159AFC: @ 8159AFC
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8159AFC
-
- thumb_func_start sub_8159B08
-sub_8159B08: @ 8159B08
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8159B08
-
- thumb_func_start sub_8159B14
-sub_8159B14: @ 8159B14
- push {lr}
- sub sp, 0x4
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r1, =gBattleBankFunc
- ldr r2, =gActiveBank
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_8159660
- str r1, [r0]
- ldr r1, =gBankInMenu
- ldrb r0, [r2]
- strb r0, [r1]
- add sp, 0x4
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8159B14
-
- thumb_func_start sub_8159B54
-sub_8159B54: @ 8159B54
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8159B54
-
- thumb_func_start sub_8159B60
-sub_8159B60: @ 8159B60
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8159B60
-
- thumb_func_start sub_8159B6C
-sub_8159B6C: @ 8159B6C
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8159B6C
-
- thumb_func_start sub_8159B78
-sub_8159B78: @ 8159B78
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8159B78
-
- thumb_func_start sub_8159B84
-sub_8159B84: @ 8159B84
- push {lr}
- ldr r0, =gHealthBoxesIds
- ldr r1, =gActiveBank
- ldrb r1, [r1]
- adds r0, r1, r0
- ldrb r0, [r0]
- ldr r2, =gBattlePartyID
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, =gPlayerParty
- adds r1, r2
- movs r2, 0xB
- bl UpdateHealthboxAttribute
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8159B84
-
- thumb_func_start sub_8159BC0
-sub_8159BC0: @ 8159BC0
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8159BC0
-
- thumb_func_start sub_8159BCC
-sub_8159BCC: @ 8159BCC
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8159BCC
-
- thumb_func_start sub_8159BD8
-sub_8159BD8: @ 8159BD8
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8159BD8
-
- thumb_func_start sub_8159BE4
-sub_8159BE4: @ 8159BE4
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8159BE4
-
- thumb_func_start sub_8159BF0
-sub_8159BF0: @ 8159BF0
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8159BF0
-
- thumb_func_start sub_8159BFC
-sub_8159BFC: @ 8159BFC
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8159BFC
-
- thumb_func_start sub_8159C08
-sub_8159C08: @ 8159C08
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8159C08
-
- thumb_func_start sub_8159C14
-sub_8159C14: @ 8159C14
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8159C14
-
- thumb_func_start sub_8159C20
-sub_8159C20: @ 8159C20
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8159C20
-
- thumb_func_start sub_8159C2C
-sub_8159C2C: @ 8159C2C
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8159C2C
-
- thumb_func_start sub_8159C38
-sub_8159C38: @ 8159C38
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8159C38
-
- thumb_func_start sub_8159C44
-sub_8159C44: @ 8159C44
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8159C44
-
- thumb_func_start sub_8159C50
-sub_8159C50: @ 8159C50
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8159C50
-
- thumb_func_start sub_8159C5C
-sub_8159C5C: @ 8159C5C
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8159C5C
-
- thumb_func_start sub_8159C68
-sub_8159C68: @ 8159C68
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8159C68
-
- thumb_func_start sub_8159C74
-sub_8159C74: @ 8159C74
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8159C74
-
- thumb_func_start sub_8159C80
-sub_8159C80: @ 8159C80
- push {r4,lr}
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- movs r3, 0x3F
- cmp r0, 0
- bne _08159C94
- movs r3, 0xC0
-_08159C94:
- ldr r2, =gBattleBufferA
- ldrb r1, [r4]
- lsls r1, 9
- adds r0, r2, 0x1
- adds r0, r1, r0
- ldrb r0, [r0]
- adds r2, 0x2
- adds r1, r2
- ldrb r1, [r1]
- lsls r1, 8
- orrs r0, r1
- lsls r1, r3, 24
- asrs r1, 24
- bl PlaySE12WithPanning
- bl SafariBufferExecCompleted
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8159C80
-
- thumb_func_start dp01t_34_6_move_anim_start_t3
-dp01t_34_6_move_anim_start_t3: @ 8159CC4
- push {r4,r5,lr}
- ldr r4, =gBattleBufferA
- ldr r5, =gActiveBank
- ldrb r0, [r5]
- lsls r3, r0, 9
- adds r0, r4, 0x3
- adds r0, r3, r0
- ldrb r0, [r0]
- cmp r0, 0
- beq _08159D00
- bl BattleMusicStop
- ldrb r1, [r5]
- lsls r1, 9
- adds r0, r4, 0x1
- adds r0, r1, r0
- ldrb r0, [r0]
- adds r2, r4, 0x2
- adds r1, r2
- ldrb r1, [r1]
- lsls r1, 8
- orrs r0, r1
- bl PlayBGM
- b _08159D14
- .pool
-_08159D00:
- adds r0, r4, 0x1
- adds r0, r3, r0
- ldrb r0, [r0]
- adds r1, r4, 0x2
- adds r1, r3, r1
- ldrb r1, [r1]
- lsls r1, 8
- orrs r0, r1
- bl PlayFanfare
-_08159D14:
- bl SafariBufferExecCompleted
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end dp01t_34_6_move_anim_start_t3
-
- thumb_func_start sub_8159D20
-sub_8159D20: @ 8159D20
- push {lr}
- ldr r1, =gBattlePartyID
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x19
- bl PlayCry1
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8159D20
-
- thumb_func_start dp01t_2E_6_battle_intro
-dp01t_2E_6_battle_intro: @ 8159D5C
- push {lr}
- ldr r1, =gBattleBufferA
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- bl battle_intro_launch
- ldr r2, =gUnknown_020243FC
- ldrh r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strh r0, [r2]
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- .pool
- thumb_func_end dp01t_2E_6_battle_intro
-
- thumb_func_start sub_8159D90
-sub_8159D90: @ 8159D90
- push {r4,r5,lr}
- ldr r5, =gHealthBoxesIds
- ldr r4, =gActiveBank
- ldrb r1, [r4]
- adds r0, r1, r5
- ldrb r0, [r0]
- ldr r2, =gBattlePartyID
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, =gPlayerParty
- adds r1, r2
- movs r2, 0xA
- bl UpdateHealthboxAttribute
- ldrb r0, [r4]
- bl sub_8076918
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl SetHealthboxSpriteVisible
- ldr r1, =gBattleBankFunc
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, =sub_81595AC
- str r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8159D90
-
- thumb_func_start sub_8159DEC
-sub_8159DEC: @ 8159DEC
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8159DEC
-
- thumb_func_start sub_8159DF8
-sub_8159DF8: @ 8159DF8
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8159DF8
-
- thumb_func_start sub_8159E04
-sub_8159E04: @ 8159E04
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8159E04
-
- thumb_func_start sub_8159E10
-sub_8159E10: @ 8159E10
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8159E10
-
- thumb_func_start sub_8159E1C
-sub_8159E1C: @ 8159E1C
- push {r4-r6,lr}
- sub sp, 0x4
- ldr r5, =gBattleBufferA
- ldr r6, =gActiveBank
- ldrb r2, [r6]
- lsls r1, r2, 9
- adds r0, r5, 0x1
- adds r0, r1, r0
- ldrb r3, [r0]
- adds r0, r5, 0x2
- adds r0, r1, r0
- ldrb r4, [r0]
- adds r5, 0x3
- adds r1, r5
- ldrb r0, [r1]
- lsls r0, 8
- orrs r4, r0
- str r4, [sp]
- adds r0, r2, 0
- adds r1, r2, 0
- bl move_anim_start_t3
- lsls r0, 24
- cmp r0, 0
- beq _08159E5C
- bl SafariBufferExecCompleted
- b _08159E68
- .pool
-_08159E5C:
- ldr r0, =gBattleBankFunc
- ldrb r1, [r6]
- lsls r1, 2
- adds r1, r0
- ldr r0, =sub_81596D4
- str r0, [r1]
-_08159E68:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8159E1C
-
- thumb_func_start sub_8159E78
-sub_8159E78: @ 8159E78
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8159E78
-
- thumb_func_start sub_8159E84
-sub_8159E84: @ 8159E84
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8159E84
-
- thumb_func_start sub_8159E90
-sub_8159E90: @ 8159E90
- push {r4,lr}
- ldr r2, =gBattleOutcome
- ldr r1, =gBattleBufferA
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- strb r0, [r2]
- movs r0, 0x5
- bl FadeOutMapMusic
- movs r0, 0x3
- bl BeginFastPaletteFade
- bl SafariBufferExecCompleted
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x6
- ands r0, r1
- cmp r0, 0x2
- bne _08159ECC
- ldr r0, =gBattleBankFunc
- ldrb r1, [r4]
- lsls r1, 2
- adds r1, r0
- ldr r0, =sub_81595E4
- str r0, [r1]
-_08159ECC:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8159E90
-
- thumb_func_start nullsub_115
-nullsub_115: @ 8159EEC
- bx lr
- thumb_func_end nullsub_115
-
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/battle_controller_wally.s b/asm/battle_controller_wally.s
index e1d92de0d..10b6d30be 100644
--- a/asm/battle_controller_wally.s
+++ b/asm/battle_controller_wally.s
@@ -5,38 +5,6 @@
.text
-
- thumb_func_start nullsub_117
-nullsub_117: @ 81683B4
- bx lr
- thumb_func_end nullsub_117
-
- thumb_func_start SetBankFuncToWallyBufferRunCommand
-SetBankFuncToWallyBufferRunCommand: @ 81683B8
- ldr r1, =gBattleBankFunc
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, =WallyBufferRunCommand
- str r1, [r0]
- ldr r2, =gBattleStruct
- ldr r0, [r2]
- adds r0, 0x94
- movs r1, 0
- strb r1, [r0]
- ldr r0, [r2]
- adds r0, 0x95
- strb r1, [r0]
- ldr r0, [r2]
- adds r0, 0x96
- strb r1, [r0]
- ldr r0, [r2]
- adds r0, 0x97
- strb r1, [r0]
- bx lr
- .pool
- thumb_func_end SetBankFuncToWallyBufferRunCommand
thumb_func_start WallyBufferRunCommand
WallyBufferRunCommand: @ 81683F4
@@ -153,7 +121,7 @@ _081684CE:
movs r1, 0x9
_081684E4:
movs r2, 0
- bl EmitCmd33
+ bl EmitTwoReturnValues
bl WallyBufferExecCompleted
ldr r1, [r4]
adds r1, 0x94
@@ -208,7 +176,7 @@ _08168540:
movs r0, 0x1
movs r1, 0x1
movs r2, 0
- bl EmitCmd33
+ bl EmitTwoReturnValues
bl WallyBufferExecCompleted
_08168564:
pop {r4,r5}
@@ -311,7 +279,7 @@ sub_8168610: @ 8168610
ldr r0, =gScriptItemId
ldrh r1, [r0]
movs r0, 0x1
- bl EmitCmd35
+ bl EmitOneReturnValue
bl WallyBufferExecCompleted
_08168636:
pop {r0}
@@ -928,8 +896,8 @@ _08168B92:
.pool
thumb_func_end sub_8168B70
- thumb_func_start dp01t_00_5_getattr
-dp01t_00_5_getattr: @ 8168BA0
+ thumb_func_start WallyHandleGetMonData
+WallyHandleGetMonData: @ 8168BA0
push {r4-r6,lr}
sub sp, 0x100
movs r6, 0
@@ -981,7 +949,7 @@ _08168BFA:
pop {r4-r6}
pop {r0}
bx r0
- thumb_func_end dp01t_00_5_getattr
+ thumb_func_end WallyHandleGetMonData
thumb_func_start sub_8168C14
sub_8168C14: @ 8168C14
@@ -1861,16 +1829,16 @@ _081693AA:
.pool
thumb_func_end sub_8168C14
- thumb_func_start sub_81693C0
-sub_81693C0: @ 81693C0
+ thumb_func_start WallyHandleGetRawMonData
+WallyHandleGetRawMonData: @ 81693C0
push {lr}
- bl sub_805A614
+ bl PlayerHandleGetRawMonData
pop {r0}
bx r0
- thumb_func_end sub_81693C0
+ thumb_func_end WallyHandleGetRawMonData
- thumb_func_start sub_81693CC
-sub_81693CC: @ 81693CC
+ thumb_func_start WallyHandleSetMonData
+WallyHandleSetMonData: @ 81693CC
push {r4,r5,lr}
ldr r1, =gBattleBufferA
ldr r0, =gActiveBank
@@ -1910,7 +1878,7 @@ _0816941A:
pop {r4,r5}
pop {r0}
bx r0
- thumb_func_end sub_81693CC
+ thumb_func_end WallyHandleSetMonData
thumb_func_start sub_8169424
sub_8169424: @ 8169424
@@ -2945,32 +2913,32 @@ _08169DEA:
.pool
thumb_func_end sub_8169424
- thumb_func_start sub_8169E20
-sub_8169E20: @ 8169E20
+ thumb_func_start WallyHandleSetRawMonData
+WallyHandleSetRawMonData: @ 8169E20
push {lr}
bl WallyBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_8169E20
+ thumb_func_end WallyHandleSetRawMonData
- thumb_func_start sub_8169E2C
-sub_8169E2C: @ 8169E2C
+ thumb_func_start WallyHandleLoadMonSprite
+WallyHandleLoadMonSprite: @ 8169E2C
push {lr}
bl WallyBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_8169E2C
+ thumb_func_end WallyHandleLoadMonSprite
- thumb_func_start sub_8169E38
-sub_8169E38: @ 8169E38
+ thumb_func_start WallyHandleSwitchInAnim
+WallyHandleSwitchInAnim: @ 8169E38
push {lr}
bl WallyBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_8169E38
+ thumb_func_end WallyHandleSwitchInAnim
- thumb_func_start sub_8169E44
-sub_8169E44: @ 8169E44
+ thumb_func_start WallyHandleReturnMonToBall
+WallyHandleReturnMonToBall: @ 8169E44
push {r4-r6,lr}
ldr r0, =gBattleBufferA
ldr r6, =gActiveBank
@@ -2984,7 +2952,7 @@ sub_8169E44: @ 8169E44
adds r0, r2, 0
adds r1, r2, 0
movs r3, 0x1
- bl move_anim_start_t4
+ bl DoSpecialBattleAnimation
ldr r0, =gBattleBankFunc
ldrb r1, [r6]
lsls r1, 2
@@ -3022,15 +2990,15 @@ _08169EB6:
pop {r0}
bx r0
.pool
- thumb_func_end sub_8169E44
+ thumb_func_end WallyHandleReturnMonToBall
- thumb_func_start sub_8169EC8
-sub_8169EC8: @ 8169EC8
+ thumb_func_start WallyHandleDrawTrainerPic
+WallyHandleDrawTrainerPic: @ 8169EC8
push {r4-r6,lr}
ldr r4, =gActiveBank
ldrb r1, [r4]
movs r0, 0x6
- bl LoadBackTrainerBankSpriteGfx
+ bl DecompressTrainerBackPic
ldrb r0, [r4]
bl GetBankIdentity
adds r1, r0, 0
@@ -3107,15 +3075,15 @@ sub_8169EC8: @ 8169EC8
pop {r0}
bx r0
.pool
- thumb_func_end sub_8169EC8
+ thumb_func_end WallyHandleDrawTrainerPic
- thumb_func_start dp01t_07_6_
-dp01t_07_6_: @ 8169F94
+ thumb_func_start WallyHandleTrainerSlide
+WallyHandleTrainerSlide: @ 8169F94
push {r4-r6,lr}
ldr r4, =gActiveBank
ldrb r1, [r4]
movs r0, 0x6
- bl LoadBackTrainerBankSpriteGfx
+ bl DecompressTrainerBackPic
ldrb r0, [r4]
bl GetBankIdentity
adds r1, r0, 0
@@ -3192,34 +3160,34 @@ dp01t_07_6_: @ 8169F94
pop {r0}
bx r0
.pool
- thumb_func_end dp01t_07_6_
+ thumb_func_end WallyHandleTrainerSlide
- thumb_func_start sub_816A060
-sub_816A060: @ 816A060
+ thumb_func_start WallyHandleTrainerSlideBack
+WallyHandleTrainerSlideBack: @ 816A060
push {lr}
bl WallyBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_816A060
+ thumb_func_end WallyHandleTrainerSlideBack
- thumb_func_start sub_816A06C
-sub_816A06C: @ 816A06C
+ thumb_func_start WallyHandleFaintAnimation
+WallyHandleFaintAnimation: @ 816A06C
push {lr}
bl WallyBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_816A06C
+ thumb_func_end WallyHandleFaintAnimation
- thumb_func_start sub_816A078
-sub_816A078: @ 816A078
+ thumb_func_start WallyHandleCmd11
+WallyHandleCmd11: @ 816A078
push {lr}
bl WallyBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_816A078
+ thumb_func_end WallyHandleCmd11
- thumb_func_start sub_816A084
-sub_816A084: @ 816A084
+ thumb_func_start WallyHandleCmd12
+WallyHandleCmd12: @ 816A084
push {r4,r5,lr}
ldr r0, =gBattleSpritesDataPtr
ldr r0, [r0]
@@ -3239,7 +3207,7 @@ sub_816A084: @ 816A084
adds r0, r4, 0
adds r1, r4, 0
movs r3, 0x4
- bl move_anim_start_t4
+ bl DoSpecialBattleAnimation
ldr r1, =gBattleBankFunc
ldrb r0, [r5]
lsls r0, 2
@@ -3250,10 +3218,10 @@ sub_816A084: @ 816A084
pop {r0}
bx r0
.pool
- thumb_func_end sub_816A084
+ thumb_func_end WallyHandleCmd12
- thumb_func_start sub_816A0D8
-sub_816A0D8: @ 816A0D8
+ thumb_func_start WallyHandleBallThrow
+WallyHandleBallThrow: @ 816A0D8
push {r4,r5,lr}
ldr r1, =gBattleBufferA
ldr r5, =gActiveBank
@@ -3278,7 +3246,7 @@ sub_816A0D8: @ 816A0D8
adds r0, r4, 0
adds r1, r4, 0
movs r3, 0x4
- bl move_anim_start_t4
+ bl DoSpecialBattleAnimation
ldr r1, =gBattleBankFunc
ldrb r0, [r5]
lsls r0, 2
@@ -3289,18 +3257,18 @@ sub_816A0D8: @ 816A0D8
pop {r0}
bx r0
.pool
- thumb_func_end sub_816A0D8
+ thumb_func_end WallyHandleBallThrow
- thumb_func_start sub_816A138
-sub_816A138: @ 816A138
+ thumb_func_start WallyHandlePause
+WallyHandlePause: @ 816A138
push {lr}
bl WallyBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_816A138
+ thumb_func_end WallyHandlePause
- thumb_func_start sub_816A144
-sub_816A144: @ 816A144
+ thumb_func_start WallyHandleMoveAnimation
+WallyHandleMoveAnimation: @ 816A144
push {r4-r6,lr}
ldr r0, =gBattleBufferA
mov r12, r0
@@ -3391,14 +3359,14 @@ sub_816A144: @ 816A144
adds r1, 0x10
adds r2, r1
str r2, [r3]
- ldr r3, =gUnknown_020244BC
+ ldr r3, =gTransformedPersonalities
ldrb r1, [r6]
lsls r1, 2
adds r1, r3
ldr r2, [r2]
str r2, [r1]
ldrb r1, [r5]
- bl sub_805DB8C
+ bl IsMoveWithoutAnimation
lsls r0, 24
lsrs r3, r0, 24
cmp r3, 0
@@ -3427,7 +3395,7 @@ _0816A25A:
pop {r0}
bx r0
.pool
- thumb_func_end sub_816A144
+ thumb_func_end WallyHandleMoveAnimation
thumb_func_start bx_move_anim_5
bx_move_anim_5: @ 816A26C
@@ -3484,7 +3452,7 @@ _0816A2C6:
adds r1, r3, 0
adds r2, r3, 0
movs r3, 0x5
- bl move_anim_start_t4
+ bl DoSpecialBattleAnimation
_0816A2E2:
ldr r0, [r7]
ldrb r1, [r6]
@@ -3539,7 +3507,7 @@ _0816A320:
adds r0, r2, 0
adds r1, r2, 0
movs r3, 0x6
- bl move_anim_start_t4
+ bl DoSpecialBattleAnimation
_0816A354:
ldr r0, [r7]
ldrb r1, [r6]
@@ -3570,7 +3538,7 @@ _0816A370:
ldrb r2, [r2]
lsls r2, 8
orrs r1, r2
- bl sub_805E94C
+ bl TrySetBehindSubstituteSpriteBit
ldr r0, [r7]
ldrb r1, [r6]
ldr r2, [r0, 0x4]
@@ -3589,8 +3557,8 @@ _0816A3AC:
bx r0
thumb_func_end bx_move_anim_5
- thumb_func_start sub_816A3B8
-sub_816A3B8: @ 816A3B8
+ thumb_func_start WallyHandlePrintString
+WallyHandlePrintString: @ 816A3B8
push {r4,lr}
ldr r0, =gBattle_BG0_X
movs r1, 0
@@ -3606,7 +3574,7 @@ sub_816A3B8: @ 816A3B8
bl BufferStringBattle
ldr r0, =gDisplayedStringBattle
movs r1, 0
- bl sub_814F9EC
+ bl BattleHandleAddTextPrinter
ldr r1, =gBattleBankFunc
ldrb r0, [r4]
lsls r0, 2
@@ -3617,10 +3585,10 @@ sub_816A3B8: @ 816A3B8
pop {r0}
bx r0
.pool
- thumb_func_end sub_816A3B8
+ thumb_func_end WallyHandlePrintString
- thumb_func_start dp01t_11_5_message_for_player_only
-dp01t_11_5_message_for_player_only: @ 816A40C
+ thumb_func_start WallyHandlePrintStringPlayerOnly
+WallyHandlePrintStringPlayerOnly: @ 816A40C
push {lr}
ldr r0, =gActiveBank
ldrb r0, [r0]
@@ -3628,7 +3596,7 @@ dp01t_11_5_message_for_player_only: @ 816A40C
lsls r0, 24
cmp r0, 0
bne _0816A428
- bl sub_816A3B8
+ bl WallyHandlePrintString
b _0816A42C
.pool
_0816A428:
@@ -3636,7 +3604,7 @@ _0816A428:
_0816A42C:
pop {r0}
bx r0
- thumb_func_end dp01t_11_5_message_for_player_only
+ thumb_func_end WallyHandlePrintStringPlayerOnly
thumb_func_start sub_816A430
sub_816A430: @ 816A430
@@ -3664,8 +3632,8 @@ _0816A456:
.pool
thumb_func_end sub_816A430
- thumb_func_start dp01t_12_1_battle_menu
-dp01t_12_1_battle_menu: @ 816A470
+ thumb_func_start WallyHandleChooseAction
+WallyHandleChooseAction: @ 816A470
push {r4,lr}
ldr r1, =gBattleBankFunc
ldr r0, =gActiveBank
@@ -3676,7 +3644,7 @@ dp01t_12_1_battle_menu: @ 816A470
str r1, [r0]
ldr r0, =gText_BattleMenu
movs r1, 0x2
- bl sub_814F9EC
+ bl BattleHandleAddTextPrinter
movs r4, 0
_0816A48A:
lsls r0, r4, 24
@@ -3696,23 +3664,23 @@ _0816A48A:
bl BattleStringExpandPlaceholdersToDisplayedString
ldr r0, =gDisplayedStringBattle
movs r1, 0x1
- bl sub_814F9EC
+ bl BattleHandleAddTextPrinter
pop {r4}
pop {r0}
bx r0
.pool
- thumb_func_end dp01t_12_1_battle_menu
+ thumb_func_end WallyHandleChooseAction
- thumb_func_start sub_816A4D8
-sub_816A4D8: @ 816A4D8
+ thumb_func_start WallyHandleCmd19
+WallyHandleCmd19: @ 816A4D8
push {lr}
bl WallyBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_816A4D8
+ thumb_func_end WallyHandleCmd19
- thumb_func_start sub_816A4E4
-sub_816A4E4: @ 816A4E4
+ thumb_func_start WallyHandleChooseMove
+WallyHandleChooseMove: @ 816A4E4
push {r4,lr}
ldr r4, =gBattleStruct
ldr r1, [r4]
@@ -3732,7 +3700,7 @@ _0816A504:
beq _0816A550
b _0816A574
_0816A50A:
- bl sub_805C210
+ bl InitMoveSelectionsVarsAndStrings
ldr r1, [r4]
adds r1, 0x95
ldrb r0, [r1]
@@ -3777,16 +3745,16 @@ _0816A550:
lsls r2, 1
movs r0, 0x1
movs r1, 0xA
- bl EmitCmd33
+ bl EmitTwoReturnValues
bl WallyBufferExecCompleted
_0816A574:
pop {r4}
pop {r0}
bx r0
- thumb_func_end sub_816A4E4
+ thumb_func_end WallyHandleChooseMove
- thumb_func_start sub_816A57C
-sub_816A57C: @ 816A57C
+ thumb_func_start WallyHandleOpenBag
+WallyHandleOpenBag: @ 816A57C
push {lr}
sub sp, 0x4
movs r0, 0x1
@@ -3810,26 +3778,26 @@ sub_816A57C: @ 816A57C
pop {r0}
bx r0
.pool
- thumb_func_end sub_816A57C
+ thumb_func_end WallyHandleOpenBag
- thumb_func_start sub_816A5BC
-sub_816A5BC: @ 816A5BC
+ thumb_func_start WallyHandleChoosePokemon
+WallyHandleChoosePokemon: @ 816A5BC
push {lr}
bl WallyBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_816A5BC
+ thumb_func_end WallyHandleChoosePokemon
- thumb_func_start sub_816A5C8
-sub_816A5C8: @ 816A5C8
+ thumb_func_start WallyHandleCmd23
+WallyHandleCmd23: @ 816A5C8
push {lr}
bl WallyBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_816A5C8
+ thumb_func_end WallyHandleCmd23
- thumb_func_start sub_816A5D4
-sub_816A5D4: @ 816A5D4
+ thumb_func_start WallyHandleHealthBarUpdate
+WallyHandleHealthBarUpdate: @ 816A5D4
push {r4-r7,lr}
mov r7, r9
mov r6, r8
@@ -3929,138 +3897,138 @@ _0816A69E:
pop {r0}
bx r0
.pool
- thumb_func_end sub_816A5D4
+ thumb_func_end WallyHandleHealthBarUpdate
- thumb_func_start sub_816A6D4
-sub_816A6D4: @ 816A6D4
+ thumb_func_start WallyHandleExpUpdate
+WallyHandleExpUpdate: @ 816A6D4
push {lr}
bl WallyBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_816A6D4
+ thumb_func_end WallyHandleExpUpdate
- thumb_func_start sub_816A6E0
-sub_816A6E0: @ 816A6E0
+ thumb_func_start WallyHandleStatusIconUpdate
+WallyHandleStatusIconUpdate: @ 816A6E0
push {lr}
bl WallyBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_816A6E0
+ thumb_func_end WallyHandleStatusIconUpdate
- thumb_func_start sub_816A6EC
-sub_816A6EC: @ 816A6EC
+ thumb_func_start WallyHandleStatusAnimation
+WallyHandleStatusAnimation: @ 816A6EC
push {lr}
bl WallyBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_816A6EC
+ thumb_func_end WallyHandleStatusAnimation
- thumb_func_start sub_816A6F8
-sub_816A6F8: @ 816A6F8
+ thumb_func_start WallyHandleStatusXor
+WallyHandleStatusXor: @ 816A6F8
push {lr}
bl WallyBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_816A6F8
+ thumb_func_end WallyHandleStatusXor
- thumb_func_start sub_816A704
-sub_816A704: @ 816A704
+ thumb_func_start WallyHandleDataTransfer
+WallyHandleDataTransfer: @ 816A704
push {lr}
bl WallyBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_816A704
+ thumb_func_end WallyHandleDataTransfer
- thumb_func_start sub_816A710
-sub_816A710: @ 816A710
+ thumb_func_start WallyHandleDMA3Transfer
+WallyHandleDMA3Transfer: @ 816A710
push {lr}
bl WallyBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_816A710
+ thumb_func_end WallyHandleDMA3Transfer
- thumb_func_start sub_816A71C
-sub_816A71C: @ 816A71C
+ thumb_func_start WallyHandlePlayBGM
+WallyHandlePlayBGM: @ 816A71C
push {lr}
bl WallyBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_816A71C
+ thumb_func_end WallyHandlePlayBGM
- thumb_func_start sub_816A728
-sub_816A728: @ 816A728
+ thumb_func_start WallyHandleCmd32
+WallyHandleCmd32: @ 816A728
push {lr}
bl WallyBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_816A728
+ thumb_func_end WallyHandleCmd32
- thumb_func_start sub_816A734
-sub_816A734: @ 816A734
+ thumb_func_start WallyHandleCmd33
+WallyHandleCmd33: @ 816A734
push {lr}
bl WallyBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_816A734
+ thumb_func_end WallyHandleCmd33
- thumb_func_start sub_816A740
-sub_816A740: @ 816A740
+ thumb_func_start WallyHandleCmd34
+WallyHandleCmd34: @ 816A740
push {lr}
bl WallyBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_816A740
+ thumb_func_end WallyHandleCmd34
- thumb_func_start sub_816A74C
-sub_816A74C: @ 816A74C
+ thumb_func_start WallyHandleCmd35
+WallyHandleCmd35: @ 816A74C
push {lr}
bl WallyBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_816A74C
+ thumb_func_end WallyHandleCmd35
- thumb_func_start sub_816A758
-sub_816A758: @ 816A758
+ thumb_func_start WallyHandleCmd36
+WallyHandleCmd36: @ 816A758
push {lr}
bl WallyBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_816A758
+ thumb_func_end WallyHandleCmd36
- thumb_func_start sub_816A764
-sub_816A764: @ 816A764
+ thumb_func_start WallyHandleCmd37
+WallyHandleCmd37: @ 816A764
push {lr}
bl WallyBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_816A764
+ thumb_func_end WallyHandleCmd37
- thumb_func_start sub_816A770
-sub_816A770: @ 816A770
+ thumb_func_start WallyHandleCmd38
+WallyHandleCmd38: @ 816A770
push {lr}
bl WallyBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_816A770
+ thumb_func_end WallyHandleCmd38
- thumb_func_start sub_816A77C
-sub_816A77C: @ 816A77C
+ thumb_func_start WallyHandleCmd39
+WallyHandleCmd39: @ 816A77C
push {lr}
bl WallyBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_816A77C
+ thumb_func_end WallyHandleCmd39
- thumb_func_start sub_816A788
-sub_816A788: @ 816A788
+ thumb_func_start WallyHandleCmd40
+WallyHandleCmd40: @ 816A788
push {lr}
bl WallyBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_816A788
+ thumb_func_end WallyHandleCmd40
- thumb_func_start sub_816A794
-sub_816A794: @ 816A794
+ thumb_func_start WallyHandleHitAnimation
+WallyHandleHitAnimation: @ 816A794
push {r4,lr}
ldr r3, =gSprites
ldr r2, =gBankSpriteIds
@@ -4094,7 +4062,7 @@ _0816A7C8:
movs r1, 0
strh r1, [r0, 0x30]
ldrb r0, [r4]
- bl sub_80769F4
+ bl DoHitAnimHealthboxEffect
ldr r1, =gBattleBankFunc
ldrb r0, [r4]
lsls r0, 2
@@ -4106,18 +4074,18 @@ _0816A7F2:
pop {r0}
bx r0
.pool
- thumb_func_end sub_816A794
+ thumb_func_end WallyHandleHitAnimation
- thumb_func_start sub_816A804
-sub_816A804: @ 816A804
+ thumb_func_start WallyHandleCmd42
+WallyHandleCmd42: @ 816A804
push {lr}
bl WallyBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_816A804
+ thumb_func_end WallyHandleCmd42
- thumb_func_start sub_816A810
-sub_816A810: @ 816A810
+ thumb_func_start WallyHandleEffectivenessSound
+WallyHandleEffectivenessSound: @ 816A810
push {lr}
ldr r2, =gBattleBufferA
ldr r0, =gActiveBank
@@ -4136,10 +4104,10 @@ sub_816A810: @ 816A810
pop {r0}
bx r0
.pool
- thumb_func_end sub_816A810
+ thumb_func_end WallyHandleEffectivenessSound
- thumb_func_start sub_816A840
-sub_816A840: @ 816A840
+ thumb_func_start WallyHandlePlayFanfareOrBGM
+WallyHandlePlayFanfareOrBGM: @ 816A840
push {r4,r5,lr}
ldr r4, =gBattleBufferA
ldr r5, =gActiveBank
@@ -4179,10 +4147,10 @@ _0816A890:
pop {r4,r5}
pop {r0}
bx r0
- thumb_func_end sub_816A840
+ thumb_func_end WallyHandlePlayFanfareOrBGM
- thumb_func_start sub_816A89C
-sub_816A89C: @ 816A89C
+ thumb_func_start WallyHandleFaintingCry
+WallyHandleFaintingCry: @ 816A89C
push {lr}
ldr r1, =gBattlePartyID
ldr r0, =gActiveBank
@@ -4204,10 +4172,10 @@ sub_816A89C: @ 816A89C
pop {r0}
bx r0
.pool
- thumb_func_end sub_816A89C
+ thumb_func_end WallyHandleFaintingCry
- thumb_func_start dp01t_2E_5_battle_intro
-dp01t_2E_5_battle_intro: @ 816A8D8
+ thumb_func_start WallyHandleIntroSlide
+WallyHandleIntroSlide: @ 816A8D8
push {lr}
ldr r1, =gBattleBufferA
ldr r0, =gActiveBank
@@ -4216,7 +4184,7 @@ dp01t_2E_5_battle_intro: @ 816A8D8
adds r1, 0x1
adds r0, r1
ldrb r0, [r0]
- bl battle_intro_launch
+ bl HandleIntroSlide
ldr r2, =gUnknown_020243FC
ldrh r0, [r2]
movs r1, 0x1
@@ -4226,10 +4194,10 @@ dp01t_2E_5_battle_intro: @ 816A8D8
pop {r0}
bx r0
.pool
- thumb_func_end dp01t_2E_5_battle_intro
+ thumb_func_end WallyHandleIntroSlide
- thumb_func_start sub_816A90C
-sub_816A90C: @ 816A90C
+ thumb_func_start WallyHandleIntroTrainerBallThrow
+WallyHandleIntroTrainerBallThrow: @ 816A90C
push {r4-r7,lr}
ldr r6, =gBankSpriteIds
ldr r7, =gActiveBank
@@ -4381,7 +4349,7 @@ _0816AA24:
pop {r0}
bx r0
.pool
- thumb_func_end sub_816A90C
+ thumb_func_end WallyHandleIntroTrainerBallThrow
thumb_func_start sub_816AA80
sub_816AA80: @ 816AA80
@@ -4601,8 +4569,8 @@ _0816AC5E:
.pool
thumb_func_end sub_816AC04
- thumb_func_start sub_816AC78
-sub_816AC78: @ 816AC78
+ thumb_func_start WallyHandleDrawPartyStatusSummary
+WallyHandleDrawPartyStatusSummary: @ 816AC78
push {r4,r5,lr}
ldr r1, =gBattleBufferA
ldr r0, =gActiveBank
@@ -4656,34 +4624,34 @@ _0816ACE6:
pop {r0}
bx r0
.pool
- thumb_func_end sub_816AC78
+ thumb_func_end WallyHandleDrawPartyStatusSummary
- thumb_func_start sub_816ACFC
-sub_816ACFC: @ 816ACFC
+ thumb_func_start WallyHandleCmd49
+WallyHandleCmd49: @ 816ACFC
push {lr}
bl WallyBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_816ACFC
+ thumb_func_end WallyHandleCmd49
- thumb_func_start sub_816AD08
-sub_816AD08: @ 816AD08
+ thumb_func_start WallyHandleCmd50
+WallyHandleCmd50: @ 816AD08
push {lr}
bl WallyBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_816AD08
+ thumb_func_end WallyHandleCmd50
- thumb_func_start sub_816AD14
-sub_816AD14: @ 816AD14
+ thumb_func_start WallyHandleSpriteInvisibility
+WallyHandleSpriteInvisibility: @ 816AD14
push {lr}
bl WallyBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_816AD14
+ thumb_func_end WallyHandleSpriteInvisibility
- thumb_func_start sub_816AD20
-sub_816AD20: @ 816AD20
+ thumb_func_start WallyHandleBattleAnimation
+WallyHandleBattleAnimation: @ 816AD20
push {r4-r6,lr}
sub sp, 0x4
ldr r5, =gBattleBufferA
@@ -4704,7 +4672,7 @@ sub_816AD20: @ 816AD20
str r4, [sp]
adds r0, r2, 0
adds r1, r2, 0
- bl move_anim_start_t3
+ bl DoBattleAnimationFromTable
lsls r0, 24
cmp r0, 0
beq _0816AD60
@@ -4724,26 +4692,26 @@ _0816AD6C:
pop {r0}
bx r0
.pool
- thumb_func_end sub_816AD20
+ thumb_func_end WallyHandleBattleAnimation
- thumb_func_start sub_816AD7C
-sub_816AD7C: @ 816AD7C
+ thumb_func_start WallyHandleLinkStandbyMsg
+WallyHandleLinkStandbyMsg: @ 816AD7C
push {lr}
bl WallyBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_816AD7C
+ thumb_func_end WallyHandleLinkStandbyMsg
- thumb_func_start sub_816AD88
-sub_816AD88: @ 816AD88
+ thumb_func_start WallyHandleResetActionMoveSelection
+WallyHandleResetActionMoveSelection: @ 816AD88
push {lr}
bl WallyBufferExecCompleted
pop {r0}
bx r0
- thumb_func_end sub_816AD88
+ thumb_func_end WallyHandleResetActionMoveSelection
- thumb_func_start sub_816AD94
-sub_816AD94: @ 816AD94
+ thumb_func_start WallyHandleCmd55
+WallyHandleCmd55: @ 816AD94
push {r4,lr}
ldr r2, =gBattleOutcome
ldr r1, =gBattleBufferA
@@ -4776,7 +4744,7 @@ _0816ADD0:
pop {r0}
bx r0
.pool
- thumb_func_end sub_816AD94
+ thumb_func_end WallyHandleCmd55
thumb_func_start nullsub_118
nullsub_118: @ 816ADF0
diff --git a/asm/battle_frontier_1.s b/asm/battle_frontier_1.s
index 7ac60f1be..978dd30fa 100755
--- a/asm/battle_frontier_1.s
+++ b/asm/battle_frontier_1.s
@@ -6956,7 +6956,7 @@ _08192574:
cmp r2, r0
bne _08192598
ldrb r0, [r1, 0x8]
- bl sub_806F000
+ bl PlayerGenderToFrontTrainerPicId
lsls r0, 16
lsrs r0, 16
b _081925B6
@@ -6971,7 +6971,7 @@ _08192598:
.pool
_081925AC:
ldr r0, [sp, 0x24]
- bl sub_8162AA0
+ bl GetFrontierTrainerFrontSpriteId
_081925B2:
lsls r0, 24
lsrs r0, 24
@@ -8535,7 +8535,7 @@ _081932A2:
ldr r0, =gSaveBlock2Ptr
ldr r0, [r0]
ldrb r0, [r0, 0x8]
- bl sub_806F000
+ bl PlayerGenderToFrontTrainerPicId
lsls r0, 16
lsrs r0, 16
mov r2, r8
@@ -8554,7 +8554,7 @@ _081932D4:
_081932E4:
lsls r0, r1, 16
lsrs r0, 16
- bl sub_8162AA0
+ bl GetFrontierTrainerFrontSpriteId
_081932EC:
lsls r0, 24
lsrs r0, 24
@@ -8621,7 +8621,7 @@ _0819335A:
ldr r0, =gSaveBlock2Ptr
ldr r0, [r0]
ldrb r0, [r0, 0x8]
- bl sub_806F000
+ bl PlayerGenderToFrontTrainerPicId
lsls r0, 16
lsrs r0, 16
b _081933B0
@@ -8642,7 +8642,7 @@ _08193388:
_081933A4:
lsls r0, r1, 16
lsrs r0, 16
- bl sub_8162AA0
+ bl GetFrontierTrainerFrontSpriteId
lsls r0, 24
lsrs r0, 24
_081933B0:
diff --git a/asm/battle_frontier_2.s b/asm/battle_frontier_2.s
index 37ddc7ac6..ac92b3c2a 100755
--- a/asm/battle_frontier_2.s
+++ b/asm/battle_frontier_2.s
@@ -20557,7 +20557,7 @@ _081A5306:
movs r1, 0
movs r2, 0x18
movs r3, 0xD
- bl sub_8056A3C
+ bl HandleBattleWindow
b _081A553E
.pool
_081A531C:
@@ -20582,29 +20582,29 @@ _081A5328:
ldr r4, =gDisplayedStringBattle
adds r0, r4, 0
movs r1, 0xF
- bl sub_814F9EC
+ bl BattleHandleAddTextPrinter
ldr r0, =gText_Vs
movs r1, 0x10
- bl sub_814F9EC
+ bl BattleHandleAddTextPrinter
ldr r0, =gText_OpponentMon1Name
bl BattleStringExpandPlaceholdersToDisplayedString
adds r0, r4, 0
movs r1, 0x11
- bl sub_814F9EC
+ bl BattleHandleAddTextPrinter
ldr r0, =gText_Mind
movs r1, 0x12
- bl sub_814F9EC
+ bl BattleHandleAddTextPrinter
ldr r0, =gText_Skill
movs r1, 0x13
- bl sub_814F9EC
+ bl BattleHandleAddTextPrinter
ldr r0, =gText_Body
movs r1, 0x14
- bl sub_814F9EC
+ bl BattleHandleAddTextPrinter
ldr r0, =gText_Judgement
bl BattleStringExpandPlaceholdersToDisplayedString
adds r0, r4, 0
movs r1, 0x15
- bl sub_814F9EC
+ bl BattleHandleAddTextPrinter
b _081A553E
.pool
_081A53B4:
@@ -20688,7 +20688,7 @@ _081A5464:
bl BattleStringExpandPlaceholdersToDisplayedString
ldr r0, =gDisplayedStringBattle
movs r1, 0x15
- bl sub_814F9EC
+ bl BattleHandleAddTextPrinter
ldrb r0, [r5]
adds r0, 0x1
strb r0, [r5]
@@ -20733,7 +20733,7 @@ _081A54D4:
movs r1, 0
movs r2, 0x18
movs r3, 0xD
- bl sub_8056A3C
+ bl HandleBattleWindow
movs r0, 0
bl CopyBgTilemapBufferToVram
ldr r0, =gMPlay_BGM
diff --git a/asm/battle_link_817C95C.s b/asm/battle_link_817C95C.s
index aa887bc25..fedb50c45 100644
--- a/asm/battle_link_817C95C.s
+++ b/asm/battle_link_817C95C.s
@@ -110,7 +110,7 @@ _0817CA4C:
ldr r1, =gStringInfo
ldr r1, [r1]
ldrh r1, [r1]
- bl sub_817F33C
+ bl GetBankMoveSlotId
lsls r0, 24
lsrs r0, 24
mov r10, r0
@@ -2572,7 +2572,7 @@ _0817E122:
mov r1, r10
ldrb r0, [r1]
adds r1, r7, 0
- bl sub_817F33C
+ bl GetBankMoveSlotId
lsls r0, 24
lsrs r6, r0, 24
cmp r6, 0x3
@@ -4793,8 +4793,8 @@ _0817F324:
.pool
thumb_func_end sub_817F2A8
- thumb_func_start sub_817F33C
-sub_817F33C: @ 817F33C
+ thumb_func_start GetBankMoveSlotId
+GetBankMoveSlotId: @ 817F33C
push {r4-r7,lr}
lsls r0, 24
lsrs r5, r0, 24
@@ -4835,7 +4835,7 @@ _0817F388:
pop {r4-r7}
pop {r1}
bx r1
- thumb_func_end sub_817F33C
+ thumb_func_end GetBankMoveSlotId
thumb_func_start sub_817F394
sub_817F394: @ 817F394
@@ -4888,97 +4888,4 @@ _0817F3E6:
bx r0
thumb_func_end sub_817F394
- thumb_func_start nullsub_69
-nullsub_69: @ 817F3EC
- bx lr
- thumb_func_end nullsub_69
-
- thumb_func_start sub_817F3F0
-sub_817F3F0: @ 817F3F0
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- sub sp, 0x4
- mov r9, r0
- mov r8, r1
- adds r5, r2, 0
- adds r4, r3, 0
- lsls r5, 16
- negs r5, r5
- lsls r4, 16
- negs r4, r4
- lsrs r4, 16
- mov r0, r8
- lsls r0, 16
- asrs r0, 16
- mov r8, r0
- asrs r5, 16
- adds r1, r5, 0
- bl Cos
- adds r6, r0, 0
- lsls r4, 16
- asrs r4, 16
- mov r0, r8
- adds r1, r4, 0
- bl Sin
- subs r6, r0
- lsls r6, 16
- lsrs r6, 16
- mov r0, r8
- adds r1, r4, 0
- bl Cos
- adds r2, r0, 0
- mov r0, r8
- adds r1, r5, 0
- str r2, [sp]
- bl Sin
- ldr r2, [sp]
- adds r2, r0
- negs r5, r5
- negs r4, r4
- lsls r6, 16
- asrs r6, 16
- lsls r5, 16
- asrs r5, 16
- adds r6, r5
- mov r0, r9
- strh r6, [r0, 0x24]
- lsls r2, 16
- asrs r2, 16
- lsls r4, 16
- asrs r4, 16
- adds r2, r4
- strh r2, [r0, 0x26]
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_817F3F0
-
- thumb_func_start GetSpeciesBackAnimId
-GetSpeciesBackAnimId: @ 817F474
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- ldr r1, =gUnknown_0860A8C8
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _0817F48C
- movs r0, 0
- b _0817F492
- .pool
-_0817F48C:
- subs r0, 0x1
- lsls r0, 24
- lsrs r0, 24
-_0817F492:
- pop {r1}
- bx r1
- thumb_func_end GetSpeciesBackAnimId
-
.align 2, 0 @ Don't pad with nop.
diff --git a/asm/battle_tower.s b/asm/battle_tower.s
index 74c84e34c..2b220cb56 100755
--- a/asm/battle_tower.s
+++ b/asm/battle_tower.s
@@ -1329,8 +1329,8 @@ _08162A8A:
.pool
thumb_func_end sub_81628A0
- thumb_func_start sub_8162AA0
-sub_8162AA0: @ 8162AA0
+ thumb_func_start GetFrontierTrainerFrontSpriteId
+GetFrontierTrainerFrontSpriteId: @ 8162AA0
push {r4,r5,lr}
lsls r0, 16
lsrs r4, r0, 16
@@ -1454,7 +1454,7 @@ _08162BCA:
pop {r1}
bx r1
.pool
- thumb_func_end sub_8162AA0
+ thumb_func_end GetFrontierTrainerFrontSpriteId
thumb_func_start GetFrontierOpponentClass
GetFrontierOpponentClass: @ 8162BD8
diff --git a/asm/battle_transition.s b/asm/battle_transition.s
index 2f9637594..6ffa17320 100644
--- a/asm/battle_transition.s
+++ b/asm/battle_transition.s
@@ -4348,7 +4348,7 @@ sub_8148218: @ 8148218
ldr r0, =gSaveBlock2Ptr
ldr r0, [r0]
ldrb r0, [r0, 0x8]
- bl sub_806F000
+ bl PlayerGenderToFrontTrainerPicId
lsls r0, 24
lsrs r0, 24
movs r1, 0x88
diff --git a/asm/evolution_scene.s b/asm/evolution_scene.s
index e5e9aaab9..1dd5cb4f1 100644
--- a/asm/evolution_scene.s
+++ b/asm/evolution_scene.s
@@ -1338,7 +1338,7 @@ _0813E6E4:
bl StringExpandPlaceholders
adds r0, r4, 0
movs r1, 0
- bl sub_814F9EC
+ bl BattleHandleAddTextPrinter
ldr r0, =gTasks
mov r2, r8
adds r1, r2, r7
@@ -1626,7 +1626,7 @@ _0813E99E:
bl StringExpandPlaceholders
adds r0, r4, 0
movs r1, 0
- bl sub_814F9EC
+ bl BattleHandleAddTextPrinter
ldr r0, =0x00000173
bl PlayBGM
ldr r2, =gTasks
@@ -1868,7 +1868,7 @@ _0813EBE4:
_0813EBEC:
ldr r0, =gStringVar4
movs r1, 0
- bl sub_814F9EC
+ bl BattleHandleAddTextPrinter
ldr r1, =gTasks
mov r2, r8
adds r0, r2, r7
@@ -1900,7 +1900,7 @@ _0813EC2A:
bl BattleStringExpandPlaceholdersToDisplayedString
ldr r0, =gDisplayedStringBattle
movs r1, 0
- bl sub_814F9EC
+ bl BattleHandleAddTextPrinter
ldr r0, =gTasks
mov r3, r8
adds r1, r3, r7
@@ -1997,7 +1997,7 @@ _0813ED16:
bl BattleStringExpandPlaceholdersToDisplayedString
ldr r0, =gDisplayedStringBattle
movs r1, 0
- bl sub_814F9EC
+ bl BattleHandleAddTextPrinter
ldr r0, =gTasks
mov r2, r8
adds r1, r2, r7
@@ -2026,7 +2026,7 @@ _0813ED62:
bl BattleStringExpandPlaceholdersToDisplayedString
ldr r0, =gDisplayedStringBattle
movs r1, 0
- bl sub_814F9EC
+ bl BattleHandleAddTextPrinter
ldr r0, =gTasks
mov r3, r8
adds r1, r3, r7
@@ -2051,7 +2051,7 @@ _0813ED90:
bl BattleStringExpandPlaceholdersToDisplayedString
ldr r0, =gDisplayedStringBattle
movs r1, 0
- bl sub_814F9EC
+ bl BattleHandleAddTextPrinter
ldr r0, =gTasks
mov r2, r8
adds r1, r2, r7
@@ -2084,10 +2084,10 @@ _0813EDEA:
movs r1, 0x8
movs r2, 0x1D
movs r3, 0xD
- bl sub_8056A3C
+ bl HandleBattleWindow
ldr r0, =gText_BattleYesNoChoice
movs r1, 0xC
- bl sub_814F9EC
+ bl BattleHandleAddTextPrinter
ldr r0, =gTasks
mov r3, r8
adds r1, r3, r7
@@ -2100,7 +2100,7 @@ _0813EDEA:
ldr r0, =gBattleCommunication
strb r2, [r0, 0x1]
movs r0, 0
- bl BattleCreateCursorAt
+ bl BattleCreateYesNoCursorAt
b _0813F1A4
.pool
_0813EE34:
@@ -2117,10 +2117,10 @@ _0813EE34:
movs r0, 0x5
bl PlaySE
ldrb r0, [r4, 0x1]
- bl BattleDestroyCursorAt
+ bl BattleDestroyYesNoCursorAt
movs r0, 0
strb r0, [r4, 0x1]
- bl BattleCreateCursorAt
+ bl BattleCreateYesNoCursorAt
_0813EE5C:
ldr r0, =gMain
ldrh r1, [r0, 0x2E]
@@ -2135,10 +2135,10 @@ _0813EE5C:
movs r0, 0x5
bl PlaySE
ldrb r0, [r4, 0x1]
- bl BattleDestroyCursorAt
+ bl BattleDestroyYesNoCursorAt
movs r0, 0x1
strb r0, [r4, 0x1]
- bl BattleCreateCursorAt
+ bl BattleCreateYesNoCursorAt
_0813EE84:
ldr r0, =gMain
ldrh r1, [r0, 0x2E]
@@ -2152,7 +2152,7 @@ _0813EE84:
movs r1, 0x8
movs r2, 0x1D
movs r3, 0xD
- bl sub_8056A3C
+ bl HandleBattleWindow
movs r0, 0x5
bl PlaySE
ldr r0, =gBattleCommunication
@@ -2202,7 +2202,7 @@ _0813EF00:
movs r1, 0x8
movs r2, 0x1D
movs r3, 0xD
- bl sub_8056A3C
+ bl HandleBattleWindow
movs r0, 0x5
bl PlaySE
ldr r1, =gTasks
@@ -2292,7 +2292,7 @@ _0813EFC8:
bl BattleStringExpandPlaceholdersToDisplayedString
ldr r0, =gDisplayedStringBattle
movs r1, 0
- bl sub_814F9EC
+ bl BattleHandleAddTextPrinter
ldr r1, =gTasks
mov r2, r8
adds r0, r2, r7
@@ -2341,7 +2341,7 @@ _0813F05C:
bl BattleStringExpandPlaceholdersToDisplayedString
ldr r0, =gDisplayedStringBattle
movs r1, 0
- bl sub_814F9EC
+ bl BattleHandleAddTextPrinter
ldr r0, =gTasks
mov r2, r8
adds r1, r2, r7
@@ -2370,7 +2370,7 @@ _0813F0AA:
bl BattleStringExpandPlaceholdersToDisplayedString
ldr r0, =gDisplayedStringBattle
movs r1, 0
- bl sub_814F9EC
+ bl BattleHandleAddTextPrinter
ldr r0, =gTasks
mov r3, r8
adds r1, r3, r7
@@ -2398,7 +2398,7 @@ _0813F0D8:
bl BattleStringExpandPlaceholdersToDisplayedString
ldr r0, =gDisplayedStringBattle
movs r1, 0
- bl sub_814F9EC
+ bl BattleHandleAddTextPrinter
ldr r1, =gTasks
mov r2, r8
adds r0, r2, r7
@@ -2414,7 +2414,7 @@ _0813F120:
bl BattleStringExpandPlaceholdersToDisplayedString
ldr r0, =gDisplayedStringBattle
movs r1, 0
- bl sub_814F9EC
+ bl BattleHandleAddTextPrinter
ldr r1, =gTasks
mov r3, r8
adds r0, r3, r7
@@ -2434,7 +2434,7 @@ _0813F154:
bl BattleStringExpandPlaceholdersToDisplayedString
ldr r0, =gDisplayedStringBattle
movs r1, 0
- bl sub_814F9EC
+ bl BattleHandleAddTextPrinter
ldr r1, =gTasks
mov r2, r8
adds r0, r2, r7
diff --git a/asm/item_menu.s b/asm/item_menu.s
index 1e4dfca49..06c0a86ed 100755
--- a/asm/item_menu.s
+++ b/asm/item_menu.s
@@ -47,14 +47,14 @@ sub_81AABB0: @ 81AABB0
lsls r0, 24
cmp r0, 0
bne _081AABCC
- ldr r2, =sub_8059D50
+ ldr r2, =SetCB2ToReshowScreenAfterMenu2
movs r0, 0x1
movs r1, 0x5
bl GoToBagMenu
b _081AABD4
.pool
_081AABCC:
- ldr r1, =sub_8059D50
+ ldr r1, =SetCB2ToReshowScreenAfterMenu2
movs r0, 0x1
bl sub_81C4F98
_081AABD4:
@@ -5634,7 +5634,7 @@ DoWallyTutorialBagMenu: @ 81ADD70
movs r0, 0x4
movs r1, 0x1
bl AddBagItem
- ldr r2, =sub_8059D50
+ ldr r2, =SetCB2ToReshowScreenAfterMenu2
movs r0, 0xA
movs r1, 0
bl GoToBagMenu
diff --git a/asm/party_menu.s b/asm/party_menu.s
index f2e681b9b..0ab4eb318 100755
--- a/asm/party_menu.s
+++ b/asm/party_menu.s
@@ -15908,7 +15908,7 @@ sub_81B89AC: @ 81B89AC
str r0, [sp]
ldr r0, =sub_81B1370
str r0, [sp, 0x4]
- ldr r0, =sub_8059D40
+ ldr r0, =SetCB2ToReshowScreenAfterMenu
str r0, [sp, 0x8]
movs r0, 0x1
adds r2, r4, 0
@@ -16828,7 +16828,7 @@ _081B9136:
thumb_func_start sub_81B9140
sub_81B9140: @ 81B9140
push {lr}
- ldr r0, =sub_8059D40
+ ldr r0, =SetCB2ToReshowScreenAfterMenu
bl SetMainCallback2
pop {r0}
bx r0
diff --git a/asm/pokeball.s b/asm/pokeball.s
index fed227c80..0afd27932 100755
--- a/asm/pokeball.s
+++ b/asm/pokeball.s
@@ -2685,8 +2685,8 @@ _080769EA:
.pool
thumb_func_end sub_80769CC
- thumb_func_start sub_80769F4
-sub_80769F4: @ 80769F4
+ thumb_func_start DoHitAnimHealthboxEffect
+DoHitAnimHealthboxEffect: @ 80769F4
push {r4,r5,lr}
adds r4, r0, 0
lsls r4, 24
@@ -2714,7 +2714,7 @@ sub_80769F4: @ 80769F4
pop {r0}
bx r0
.pool
- thumb_func_end sub_80769F4
+ thumb_func_end DoHitAnimHealthboxEffect
thumb_func_start oamc_804BEB4
oamc_804BEB4: @ 8076A38
diff --git a/asm/pokedex.s b/asm/pokedex.s
index f9ee0eeab..3d69281c2 100644
--- a/asm/pokedex.s
+++ b/asm/pokedex.s
@@ -7923,7 +7923,7 @@ _080BF982:
ldr r0, =gSaveBlock2Ptr
ldr r0, [r0]
ldrb r0, [r0, 0x8]
- bl sub_806F000
+ bl PlayerGenderToFrontTrainerPicId
lsls r0, 16
lsrs r0, 16
movs r1, 0x98
diff --git a/asm/pokemon_animation.s b/asm/pokemon_animation.s
index a29ecb729..870e658f7 100644
--- a/asm/pokemon_animation.s
+++ b/asm/pokemon_animation.s
@@ -4,6 +4,100 @@
.syntax unified
.text
+
+
+ thumb_func_start nullsub_69
+nullsub_69: @ 817F3EC
+ bx lr
+ thumb_func_end nullsub_69
+
+ thumb_func_start sub_817F3F0
+sub_817F3F0: @ 817F3F0
+ push {r4-r6,lr}
+ mov r6, r9
+ mov r5, r8
+ push {r5,r6}
+ sub sp, 0x4
+ mov r9, r0
+ mov r8, r1
+ adds r5, r2, 0
+ adds r4, r3, 0
+ lsls r5, 16
+ negs r5, r5
+ lsls r4, 16
+ negs r4, r4
+ lsrs r4, 16
+ mov r0, r8
+ lsls r0, 16
+ asrs r0, 16
+ mov r8, r0
+ asrs r5, 16
+ adds r1, r5, 0
+ bl Cos
+ adds r6, r0, 0
+ lsls r4, 16
+ asrs r4, 16
+ mov r0, r8
+ adds r1, r4, 0
+ bl Sin
+ subs r6, r0
+ lsls r6, 16
+ lsrs r6, 16
+ mov r0, r8
+ adds r1, r4, 0
+ bl Cos
+ adds r2, r0, 0
+ mov r0, r8
+ adds r1, r5, 0
+ str r2, [sp]
+ bl Sin
+ ldr r2, [sp]
+ adds r2, r0
+ negs r5, r5
+ negs r4, r4
+ lsls r6, 16
+ asrs r6, 16
+ lsls r5, 16
+ asrs r5, 16
+ adds r6, r5
+ mov r0, r9
+ strh r6, [r0, 0x24]
+ lsls r2, 16
+ asrs r2, 16
+ lsls r4, 16
+ asrs r4, 16
+ adds r2, r4
+ strh r2, [r0, 0x26]
+ add sp, 0x4
+ pop {r3,r4}
+ mov r8, r3
+ mov r9, r4
+ pop {r4-r6}
+ pop {r0}
+ bx r0
+ thumb_func_end sub_817F3F0
+
+ thumb_func_start GetSpeciesBackAnimId
+GetSpeciesBackAnimId: @ 817F474
+ push {lr}
+ lsls r0, 16
+ lsrs r0, 16
+ ldr r1, =gUnknown_0860A8C8
+ adds r0, r1
+ ldrb r0, [r0]
+ cmp r0, 0
+ bne _0817F48C
+ movs r0, 0
+ b _0817F492
+ .pool
+_0817F48C:
+ subs r0, 0x1
+ lsls r0, 24
+ lsrs r0, 24
+_0817F492:
+ pop {r1}
+ bx r1
+ thumb_func_end GetSpeciesBackAnimId
thumb_func_start sub_817F498
sub_817F498: @ 817F498
diff --git a/asm/pokemon_summary_screen.s b/asm/pokemon_summary_screen.s
index fd2518075..03f6b11d1 100755
--- a/asm/pokemon_summary_screen.s
+++ b/asm/pokemon_summary_screen.s
@@ -2035,7 +2035,7 @@ sub_81C4EFC: @ 81C4EFC
thumb_func_start sub_81C4F10
sub_81C4F10: @ 81C4F10
push {lr}
- ldr r1, =sub_8059D50
+ ldr r1, =SetCB2ToReshowScreenAfterMenu2
movs r0, 0x1
bl sub_81C4F98
pop {r0}
diff --git a/asm/recorded_battle.s b/asm/recorded_battle.s
index 2209312c2..55cfdf6ef 100644
--- a/asm/recorded_battle.s
+++ b/asm/recorded_battle.s
@@ -312,8 +312,8 @@ _08185046:
.pool
thumb_func_end RecordedBattle_ClearBankAction
- thumb_func_start sub_8185054
-sub_8185054: @ 8185054
+ thumb_func_start RecordedBattle_ReadBankAction
+RecordedBattle_ReadBankAction: @ 8185054
push {r4,lr}
sub sp, 0x4
lsls r0, 24
@@ -364,7 +364,7 @@ _081850C6:
pop {r4}
pop {r1}
bx r1
- thumb_func_end sub_8185054
+ thumb_func_end RecordedBattle_ReadBankAction
thumb_func_start sub_81850D0
sub_81850D0: @ 81850D0
@@ -2274,7 +2274,7 @@ _0818611E:
b _081863EE
_08186142:
adds r0, r5, 0
- bl sub_8185054
+ bl RecordedBattle_ReadBankAction
movs r5, 0
mov r0, sp
adds r0, 0x4
@@ -2326,7 +2326,7 @@ _0818617E:
_081861A6:
ldr r3, [sp, 0x4C]
lsrs r0, r3, 24
- bl sub_8185054
+ bl RecordedBattle_ReadBankAction
strb r0, [r4]
ldrb r0, [r4]
lsls r0, 1
diff --git a/asm/rom6.s b/asm/rom6.s
index b729369c8..87b780ba5 100644
--- a/asm/rom6.s
+++ b/asm/rom6.s
@@ -547,7 +547,7 @@ _081358D4:
thumb_func_start sub_81358F4
sub_81358F4: @ 81358F4
push {lr}
- ldr r1, =sub_8059D50
+ ldr r1, =SetCB2ToReshowScreenAfterMenu2
movs r0, 0x1
bl sub_81357FC
pop {r0}
diff --git a/data/battle_anim_815A0D4.s b/data/battle_anim_815A0D4.s
index be8439db7..d89a83daf 100644
--- a/data/battle_anim_815A0D4.s
+++ b/data/battle_anim_815A0D4.s
@@ -3,7 +3,168 @@
.section .rodata
-
+ .align 2
+gUnknown_085CE004:: @ 85CE004
+ .2byte 0x0000, 0x0004, 0x0010, 0x0004
+ .2byte 0x0020, 0x0004, 0x0030, 0x0004
+ .2byte 0x0040, 0x0004, 0xffff, 0x0000
+
+ .align 2
+gUnknown_085CE01C:: @ 85CE01C
+ .4byte gUnknown_085CE004
+
+ .align 2
+gUnknown_085CE020:: @ 85CE020
+ spr_template 0x2799, 0x2799, gUnknown_08524A34, gUnknown_085CE01C, NULL, gDummySpriteAffineAnimTable, sub_80A77C8
+
+ .align 2
+ spr_template 0x2720, 0x2720, gUnknown_08524934, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_815A0D4
+
+ .align 2
+ spr_template 0x2721, 0x2721, gUnknown_08524904, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A78AC
+
+ .align 2
+gUnknown_085CE068:: @ 85CE068
+ .2byte 0x0000, 0x0028, 0x0010, 0x0008
+ .2byte 0x0020, 0x0028, 0xffff, 0x0000
+
+ .align 2
+gUnknown_085CE078:: @ 85CE078
+ .4byte gUnknown_085CE068
+
+ .align 2
+gUnknown_085CE07C:: @ 85CE07C
+ spr_template 0x27ce, 0x27ce, gUnknown_08524914, gUnknown_085CE078, NULL, gDummySpriteAffineAnimTable, sub_80A77C8
+
+ .align 2
+ spr_template 0x27cf, 0x27cf, gUnknown_08524A3C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_815A1B0
+
+ .align 2
+ spr_template 0x27cd, 0x27cd, gUnknown_08524974, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_815A254
+
+ .align 2
+gUnknown_085CE0C4:: @ 85CE0C4
+ .2byte 0x0180, 0x0180, 0x0000, 0x0000
+ .2byte 0xffe0, 0x0018, 0x0500, 0x0000
+ .2byte 0x0018, 0xffe0, 0x0500, 0x0000
+ .2byte 0x7ffe, 0x0001, 0x0000, 0x0000
+
+ .align 2
+gUnknown_085CE0E4:: @ 85CE0E4
+ .2byte 0x0030, 0x0030, 0x0000, 0x0000
+ .2byte 0x0020, 0x0020, 0x0600, 0x0000
+ .2byte 0x7fff, 0x0000, 0x0000, 0x0000
+
+ .align 2
+gUnknown_085CE0FC:: @ 85CE0FC
+ .4byte gUnknown_085CE0C4
+ .4byte gUnknown_085CE0E4
+
+ .align 2
+gUnknown_085CE104:: @ 85CE104
+ spr_template 0x27cb, 0x27cb, gUnknown_08524AFC, gDummySpriteAnimTable, NULL, gUnknown_085CE0FC, sub_815A2F0
+
+ .align 2
+ spr_template 0x27a8, 0x27a8, gUnknown_0852490C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_815A6C4
+
+ .align 2
+gUnknown_085CE134:: @ 85CE134
+ .2byte 0x0000, 0x0003, 0x0010, 0x0003
+ .2byte 0x0020, 0x0003, 0x0030, 0x0003
+ .2byte 0x0040, 0x0003, 0xffff, 0x0000
+
+ .align 2
+gUnknown_085CE14C:: @ 85CE14C
+ .4byte gUnknown_085CE134
+
+ .align 2
+gUnknown_085CE150:: @ 85CE150
+ spr_template 0x272b, 0x272b, gUnknown_08524914, gUnknown_085CE14C, NULL, gDummySpriteAffineAnimTable, sub_815A7B0
+
+ .align 2
+gUnknown_085CE168:: @ 85CE168
+ .2byte 0x0000, 0x0003, 0xffff, 0x0000
+
+ .align 2
+gUnknown_085CE170:: @ 85CE170
+ .4byte gUnknown_085CE168
+
+ .align 2
+gUnknown_085CE174:: @ 85CE174
+ .2byte 0xfff9, 0xfff9, 0x10fd, 0x0000
+ .2byte 0x0007, 0x0007, 0x1003, 0x0000
+ .2byte 0x7ffe, 0x0000, 0x0000, 0x0000
+
+ .align 2
+gUnknown_085CE18C:: @ 85CE18C
+ .4byte gUnknown_085CE174
+
+ .align 2
+gUnknown_085CE190:: @ 85CE190
+ spr_template 0x27f4, 0x27f4, gUnknown_08524974, gUnknown_085CE170, NULL, gUnknown_085CE18C, sub_815A7EC
+
+ .align 2
+gUnknown_085CE1A8:: @ 85CE1A8
+ .2byte 0x0000, 0x0008, 0x0010, 0x0010, 0x0020, 0x0004, 0x0030, 0x0004, 0xffff, 0x0000
+
+ .align 2
+gUnknown_085CE1BC:: @ 85CE1BC
+ .4byte gUnknown_085CE1A8
+
+ .align 2
+gUnknown_085CE1C0:: @ 85CE1C0
+ .2byte 0x0200, 0x0200, 0x0000, 0x0000
+ .2byte 0xffe0, 0xffe0, 0x0800, 0x0000
+ .2byte 0x7fff, 0x0000, 0x0000, 0x0000
+
+ .align 2
+gUnknown_085CE1D8:: @ 85CE1D8
+ .4byte gUnknown_085CE1C0
+
+ .align 2
+gUnknown_085CE1DC:: @ 85CE1DC
+ spr_template 0x27d0, 0x27d0, gUnknown_085249D4, gUnknown_085CE1BC, NULL, gUnknown_085CE1D8, sub_815A8AC
+
+ .align 2
+gUnknown_085CE1F4:: @ 85CE1F4
+ .2byte 0x0000, 0x0180, 0x0000, 0x0000
+ .2byte 0x0010, 0x0000, 0x1400, 0x0000
+ .2byte 0x7fff, 0x0000, 0x0000, 0x0000
+
+ .align 2
+gUnknown_085CE20C:: @ 85CE20C
+ .2byte 0x0140, 0x0180, 0x0000, 0x0000
+ .2byte 0xfff0, 0x0000, 0x1300, 0x0000
+ .2byte 0x7fff, 0x0000, 0x0000, 0x0000
+
+ .align 2
+gUnknown_085CE224:: @ 85CE224
+ .4byte gUnknown_085CE1F4
+ .4byte gUnknown_085CE20C
+
+ .align 2
+gUnknown_085CE22C:: @ 85CE22C
+ spr_template 0x27f3, 0x27f3, gUnknown_085249DC, gDummySpriteAnimTable, NULL, gUnknown_085CE224, sub_815A934
+
+ .align 2
+ spr_template 0x2807, 0x2807, gUnknown_08524914, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_815AAA4
+
+ .align 2
+ spr_template 0x2807, 0x2807, gUnknown_08524914, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_815ABD0
+
+ .align 2
+gUnknown_085CE274:: @ 85CE274
+ .2byte 0x0000, 0x0002, 0x0008, 0x0002
+ .2byte 0x0010, 0x0002, 0xfffe, 0x0000
+
+ .align 2
+gUnknown_085CE284:: @ 85CE284
+ .4byte gUnknown_085CE274
+
+ .align 2
+gUnknown_085CE288:: @ 85CE288
+ spr_template 0x27f5, 0x27f5, gUnknown_08524934, gUnknown_085CE284, NULL, gDummySpriteAffineAnimTable, sub_815ACD0
+
gUnknown_085CE2A0:: @ 85CE2A0
.incbin "baserom.gba", 0x5ce2a0, 0xb0
diff --git a/data/battle_controller_link_opponent.s b/data/battle_controller_link_opponent.s
deleted file mode 100644
index ff6c7023b..000000000
--- a/data/battle_controller_link_opponent.s
+++ /dev/null
@@ -1,64 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gLinkOpponentBufferCommands:: @ 831C7B4
- .4byte dp01t_00_2_getattr
- .4byte sub_8065900
- .4byte sub_806590C
- .4byte sub_8066284
- .4byte sub_80662F8
- .4byte sub_8066448
- .4byte sub_8066624
- .4byte sub_8066748
- .4byte sub_8066A58
- .4byte sub_8066B94
- .4byte sub_8066C40
- .4byte sub_8066CEC
- .4byte sub_8066CF8
- .4byte sub_8066D04
- .4byte sub_8066D10
- .4byte sub_8066D1C
- .4byte sub_8066FF4
- .4byte sub_806704C
- .4byte sub_8067058
- .4byte sub_8067064
- .4byte sub_8067070
- .4byte sub_806707C
- .4byte sub_8067088
- .4byte sub_8067094
- .4byte sub_80670A0
- .4byte sub_8067190
- .4byte sub_806719C
- .4byte sub_8067214
- .4byte sub_806727C
- .4byte sub_8067288
- .4byte sub_8067294
- .4byte sub_80672A0
- .4byte sub_80672AC
- .4byte sub_80672B8
- .4byte sub_80672C4
- .4byte sub_80672D0
- .4byte sub_80672DC
- .4byte sub_80672E8
- .4byte sub_8067304
- .4byte sub_806733C
- .4byte sub_8067354
- .4byte sub_806737C
- .4byte sub_80673EC
- .4byte sub_80673F8
- .4byte sub_806743C
- .4byte sub_8067498
- .4byte sub_80674D4
- .4byte sub_8067508
- .4byte sub_8067718
- .4byte sub_8067874
- .4byte sub_80678C4
- .4byte sub_80678D0
- .4byte sub_8067930
- .4byte sub_80679A4
- .4byte sub_80679C4
- .4byte sub_80679D0
- .4byte nullsub_92
diff --git a/data/battle_controller_opponent.s b/data/battle_controller_opponent.s
deleted file mode 100644
index 3b7acd003..000000000
--- a/data/battle_controller_opponent.s
+++ /dev/null
@@ -1,67 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gOpponentBufferCommands:: @ 831C6C8
- .4byte dp01t_00_7_getattr
- .4byte dp01t_01_2_read_pokmon_data_slice
- .4byte dp01t_02_7_setattr
- .4byte sub_80611B0
- .4byte sub_8061224
- .4byte sub_806137C
- .4byte sub_806156C
- .4byte sub_8061690
- .4byte sub_80618D8
- .4byte sub_8061AF0
- .4byte sub_8061B9C
- .4byte sub_8061C48
- .4byte sub_8061C54
- .4byte sub_8061C60
- .4byte sub_8061C6C
- .4byte sub_8061C78
- .4byte sub_8061F34
- .4byte sub_8061F90
- .4byte sub_8061F9C
- .4byte sub_8061FAC
- .4byte sub_8061FB8
- .4byte sub_806215C
- .4byte sub_8062188
- .4byte sub_8062288
- .4byte sub_8062294
- .4byte sub_8062384
- .4byte sub_8062390
- .4byte sub_8062408
- .4byte sub_8062470
- .4byte sub_806247C
- .4byte sub_8062488
- .4byte sub_8062494
- .4byte sub_80624A0
- .4byte sub_80624AC
- .4byte sub_80624B8
- .4byte sub_80624C4
- .4byte sub_80624D0
- .4byte sub_80624DC
- .4byte sub_80624F8
- .4byte sub_8062530
- .4byte sub_8062548
- .4byte dp01t_29_7_blink
- .4byte sub_80625E0
- .4byte sub_80625EC
- .4byte sub_8062630
- .4byte sub_806268C
- .4byte dp01t_2E_7_battle_intro
- .4byte sub_80626FC
- .4byte dp01t_30_7_0803D67C
- .4byte sub_8062A74
- .4byte sub_8062AC4
- .4byte sub_8062AD0
- .4byte dp01t_34_7_move_anim_start_t3
- .4byte sub_8062B98
- .4byte sub_8062BA4
- .4byte sub_8062BB0
- .4byte nullsub_91
-
- .align 2
- .byte 0xB0, 0xB0, 0xC8, 0x98, 0x28, 0x28, 0x28, 0x20
diff --git a/data/battle_controller_player.s b/data/battle_controller_player.s
deleted file mode 100644
index bc2a18edb..000000000
--- a/data/battle_controller_player.s
+++ /dev/null
@@ -1,69 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gPlayerBufferCommands:: @ 831C514
- .4byte dp01t_00_1_getattr
- .4byte sub_805A614
- .4byte dp01t_02_1_setattr
- .4byte sub_805B0F0
- .4byte sub_805B164
- .4byte sub_805B1CC
- .4byte sub_805B3D4
- .4byte sub_805B4F0
- .4byte dp01t_08_1_8032428
- .4byte sub_805B9F8
- .4byte sub_805BAB8
- .4byte sub_805BBA4
- .4byte sub_805BBC4
- .4byte sub_805BC18
- .4byte sub_805BC78
- .4byte dp01t_0F_1_move_anim
- .4byte sub_805BF80
- .4byte dp01t_11_1_message_for_player_only
- .4byte dp01t_12_6_battle_menu
- .4byte sub_805C0B0
- .4byte dp01t_14_5_move_menu_pokedude
- .4byte sub_805C248
- .4byte sub_805C2AC
- .4byte sub_805C3EC
- .4byte sub_805C410
- .4byte sub_805C528
- .4byte sub_805C5C4
- .4byte sub_805C63C
- .4byte sub_805C6A4
- .4byte sub_805C710
- .4byte sub_805C71C
- .4byte sub_805C7D0
- .4byte sub_805C800
- .4byte sub_805C80C
- .4byte sub_805C820
- .4byte sub_805C834
- .4byte sub_805C848
- .4byte sub_805C85C
- .4byte sub_805C878
- .4byte sub_805C8B0
- .4byte sub_805C8C8
- .4byte dp01t_29_1_blink
- .4byte sub_805C960
- .4byte sub_805C96C
- .4byte sub_805C9B0
- .4byte sub_805CA0C
- .4byte dp01t_2E_1_battle_intro
- .4byte dp01t_2F_1_pokemon_enter
- .4byte sub_805CD74
- .4byte sub_805CE80
- .4byte sub_805CED0
- .4byte dp01t_33_1_enemy_move
- .4byte sub_805CF54
- .4byte dp01t_35_1_link_standby_message_and_free_vram
- .4byte sub_805D02C
- .4byte sub_805D094
- .4byte nullsub_22
-
- .align 2
-gUnknown_0831C5F8:: @ 831C5F8
- .byte 0x00, 0x02, 0x03, 0x01, 0x48, 0x48, 0x20, 0x5a
- .byte 0x50, 0x50, 0x50, 0x58
diff --git a/data/battle_controller_player_partner.s b/data/battle_controller_player_partner.s
deleted file mode 100644
index 35d78ebe0..000000000
--- a/data/battle_controller_player_partner.s
+++ /dev/null
@@ -1,71 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gPlayerPartnerBufferCommands:: @ 8617170
- .4byte dp01t_00_3_getattr
- .4byte sub_81BC484
- .4byte sub_81BC490
- .4byte sub_81BCEE4
- .4byte sub_81BCF58
- .4byte sub_81BD074
- .4byte sub_81BD260
- .4byte sub_81BD37C
- .4byte sub_81BD5BC
- .4byte sub_81BD5C8
- .4byte sub_81BD674
- .4byte sub_81BD760
- .4byte sub_81BD76C
- .4byte sub_81BD778
- .4byte sub_81BD784
- .4byte sub_81BD790
- .4byte sub_81BDA4C
- .4byte sub_81BDAA0
- .4byte sub_81BDAAC
- .4byte sub_81BDABC
- .4byte sub_81BDAC8
- .4byte sub_81BDB70
- .4byte sub_81BDB7C
- .4byte sub_81BDC04
- .4byte sub_81BDC10
- .4byte sub_81BDD00
- .4byte sub_81BDD9C
- .4byte sub_81BDE14
- .4byte sub_81BDE7C
- .4byte sub_81BDE88
- .4byte sub_81BDE94
- .4byte sub_81BDEA0
- .4byte sub_81BDEAC
- .4byte sub_81BDEB8
- .4byte sub_81BDEC4
- .4byte sub_81BDED0
- .4byte sub_81BDEDC
- .4byte sub_81BDEE8
- .4byte sub_81BDF04
- .4byte sub_81BDF3C
- .4byte sub_81BDF54
- .4byte dp01t_29_3_blink
- .4byte sub_81BDFEC
- .4byte sub_81BDFF8
- .4byte sub_81BE03C
- .4byte sub_81BE098
- .4byte dp01t_2E_3_battle_intro
- .4byte sub_81BE10C
- .4byte dp01t_30_3_80EB11C
- .4byte sub_81BE4E0
- .4byte sub_81BE530
- .4byte sub_81BE53C
- .4byte sub_81BE59C
- .4byte sub_81BE604
- .4byte sub_81BE610
- .4byte sub_81BE61C
- .4byte nullsub_128
-
- .align 2
- @ apparently unused data
- .byte 0x83, 0x4d, 0xf3, 0x5f, 0x6f, 0x4f, 0xeb, 0x3e
- .byte 0x67, 0x2e, 0x10, 0x46, 0x8c, 0x3d, 0x28, 0x35
- .byte 0xc5, 0x2c, 0x15, 0x7f, 0xb5, 0x56, 0x9d, 0x53
- .byte 0x3b, 0x43, 0xda, 0x36, 0x79, 0x2a, 0x0e, 0x53
diff --git a/data/battle_controller_recorded_player.s b/data/battle_controller_recorded_player.s
deleted file mode 100644
index 089e4dcbf..000000000
--- a/data/battle_controller_recorded_player.s
+++ /dev/null
@@ -1,64 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gRecordedPlayerBufferCommands:: @ 860AF74
- .4byte sub_818A5EC
- .4byte sub_818AE0C
- .4byte sub_818AE18
- .4byte sub_818B86C
- .4byte sub_818B8E0
- .4byte sub_818B9FC
- .4byte sub_818BBE8
- .4byte sub_818BD04
- .4byte sub_818BFAC
- .4byte sub_818BFB8
- .4byte sub_818C064
- .4byte sub_818C150
- .4byte sub_818C15C
- .4byte sub_818C168
- .4byte sub_818C174
- .4byte sub_818C180
- .4byte sub_818C43C
- .4byte sub_818C490
- .4byte sub_818C4D8
- .4byte sub_818C52C
- .4byte sub_818C538
- .4byte sub_818C594
- .4byte sub_818C5A0
- .4byte sub_818C5DC
- .4byte sub_818C5E8
- .4byte sub_818C6E8
- .4byte sub_818C6F4
- .4byte sub_818C76C
- .4byte sub_818C7D4
- .4byte sub_818C7E0
- .4byte sub_818C7EC
- .4byte sub_818C7F8
- .4byte sub_818C804
- .4byte sub_818C810
- .4byte sub_818C81C
- .4byte sub_818C828
- .4byte sub_818C834
- .4byte sub_818C840
- .4byte sub_818C85C
- .4byte sub_818C894
- .4byte sub_818C8AC
- .4byte sub_818C8D4
- .4byte sub_818C944
- .4byte sub_818C950
- .4byte sub_818C994
- .4byte sub_818C9F0
- .4byte dp01t_2E_2_battle_intro
- .4byte sub_818CA64
- .4byte sub_818CD30
- .4byte sub_818CE3C
- .4byte sub_818CE8C
- .4byte sub_818CE98
- .4byte sub_818CEF8
- .4byte sub_818CF60
- .4byte sub_818CF6C
- .4byte sub_818CF78
- .4byte nullsub_121
diff --git a/data/battle_controller_safari.s b/data/battle_controller_safari.s
deleted file mode 100644
index 39d1d0de3..000000000
--- a/data/battle_controller_safari.s
+++ /dev/null
@@ -1,228 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gSafariBufferCommands:: @ 85CDF20
- .4byte sub_81597AC
- .4byte sub_81597B8
- .4byte sub_81597C4
- .4byte sub_81597D0
- .4byte sub_81597DC
- .4byte sub_81597E8
- .4byte sub_81597F4
- .4byte sub_8159800
- .4byte sub_81598E0
- .4byte sub_81598EC
- .4byte sub_81598F8
- .4byte sub_8159904
- .4byte sub_8159910
- .4byte sub_8159964
- .4byte sub_81599C4
- .4byte sub_81599D0
- .4byte dp01t_10_6_message
- .4byte dp01t_11_6_message_for_player_only
- .4byte sub_8159A94
- .4byte sub_8159AFC
- .4byte sub_8159B08
- .4byte sub_8159B14
- .4byte sub_8159B54
- .4byte sub_8159B60
- .4byte sub_8159B6C
- .4byte sub_8159B78
- .4byte sub_8159B84
- .4byte sub_8159BC0
- .4byte sub_8159BCC
- .4byte sub_8159BD8
- .4byte sub_8159BE4
- .4byte sub_8159BF0
- .4byte sub_8159BFC
- .4byte sub_8159C08
- .4byte sub_8159C14
- .4byte sub_8159C20
- .4byte sub_8159C2C
- .4byte sub_8159C38
- .4byte sub_8159C44
- .4byte sub_8159C50
- .4byte sub_8159C5C
- .4byte sub_8159C68
- .4byte sub_8159C74
- .4byte sub_8159C80
- .4byte dp01t_34_6_move_anim_start_t3
- .4byte sub_8159D20
- .4byte dp01t_2E_6_battle_intro
- .4byte sub_8159D90
- .4byte sub_8159DEC
- .4byte sub_8159DF8
- .4byte sub_8159E04
- .4byte sub_8159E10
- .4byte sub_8159E1C
- .4byte sub_8159E78
- .4byte sub_8159E84
- .4byte sub_8159E90
- .4byte nullsub_115
-
- .align 2
-gUnknown_085CE004:: @ 85CE004
- .2byte 0x0000, 0x0004, 0x0010, 0x0004
- .2byte 0x0020, 0x0004, 0x0030, 0x0004
- .2byte 0x0040, 0x0004, 0xffff, 0x0000
-
- .align 2
-gUnknown_085CE01C:: @ 85CE01C
- .4byte gUnknown_085CE004
-
- .align 2
-gUnknown_085CE020:: @ 85CE020
- spr_template 0x2799, 0x2799, gUnknown_08524A34, gUnknown_085CE01C, NULL, gDummySpriteAffineAnimTable, sub_80A77C8
-
- .align 2
- spr_template 0x2720, 0x2720, gUnknown_08524934, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_815A0D4
-
- .align 2
- spr_template 0x2721, 0x2721, gUnknown_08524904, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A78AC
-
- .align 2
-gUnknown_085CE068:: @ 85CE068
- .2byte 0x0000, 0x0028, 0x0010, 0x0008
- .2byte 0x0020, 0x0028, 0xffff, 0x0000
-
- .align 2
-gUnknown_085CE078:: @ 85CE078
- .4byte gUnknown_085CE068
-
- .align 2
-gUnknown_085CE07C:: @ 85CE07C
- spr_template 0x27ce, 0x27ce, gUnknown_08524914, gUnknown_085CE078, NULL, gDummySpriteAffineAnimTable, sub_80A77C8
-
- .align 2
- spr_template 0x27cf, 0x27cf, gUnknown_08524A3C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_815A1B0
-
- .align 2
- spr_template 0x27cd, 0x27cd, gUnknown_08524974, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_815A254
-
- .align 2
-gUnknown_085CE0C4:: @ 85CE0C4
- .2byte 0x0180, 0x0180, 0x0000, 0x0000
- .2byte 0xffe0, 0x0018, 0x0500, 0x0000
- .2byte 0x0018, 0xffe0, 0x0500, 0x0000
- .2byte 0x7ffe, 0x0001, 0x0000, 0x0000
-
- .align 2
-gUnknown_085CE0E4:: @ 85CE0E4
- .2byte 0x0030, 0x0030, 0x0000, 0x0000
- .2byte 0x0020, 0x0020, 0x0600, 0x0000
- .2byte 0x7fff, 0x0000, 0x0000, 0x0000
-
- .align 2
-gUnknown_085CE0FC:: @ 85CE0FC
- .4byte gUnknown_085CE0C4
- .4byte gUnknown_085CE0E4
-
- .align 2
-gUnknown_085CE104:: @ 85CE104
- spr_template 0x27cb, 0x27cb, gUnknown_08524AFC, gDummySpriteAnimTable, NULL, gUnknown_085CE0FC, sub_815A2F0
-
- .align 2
- spr_template 0x27a8, 0x27a8, gUnknown_0852490C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_815A6C4
-
- .align 2
-gUnknown_085CE134:: @ 85CE134
- .2byte 0x0000, 0x0003, 0x0010, 0x0003
- .2byte 0x0020, 0x0003, 0x0030, 0x0003
- .2byte 0x0040, 0x0003, 0xffff, 0x0000
-
- .align 2
-gUnknown_085CE14C:: @ 85CE14C
- .4byte gUnknown_085CE134
-
- .align 2
-gUnknown_085CE150:: @ 85CE150
- spr_template 0x272b, 0x272b, gUnknown_08524914, gUnknown_085CE14C, NULL, gDummySpriteAffineAnimTable, sub_815A7B0
-
- .align 2
-gUnknown_085CE168:: @ 85CE168
- .2byte 0x0000, 0x0003, 0xffff, 0x0000
-
- .align 2
-gUnknown_085CE170:: @ 85CE170
- .4byte gUnknown_085CE168
-
- .align 2
-gUnknown_085CE174:: @ 85CE174
- .2byte 0xfff9, 0xfff9, 0x10fd, 0x0000
- .2byte 0x0007, 0x0007, 0x1003, 0x0000
- .2byte 0x7ffe, 0x0000, 0x0000, 0x0000
-
- .align 2
-gUnknown_085CE18C:: @ 85CE18C
- .4byte gUnknown_085CE174
-
- .align 2
-gUnknown_085CE190:: @ 85CE190
- spr_template 0x27f4, 0x27f4, gUnknown_08524974, gUnknown_085CE170, NULL, gUnknown_085CE18C, sub_815A7EC
-
- .align 2
-gUnknown_085CE1A8:: @ 85CE1A8
- .2byte 0x0000, 0x0008, 0x0010, 0x0010, 0x0020, 0x0004, 0x0030, 0x0004, 0xffff, 0x0000
-
- .align 2
-gUnknown_085CE1BC:: @ 85CE1BC
- .4byte gUnknown_085CE1A8
-
- .align 2
-gUnknown_085CE1C0:: @ 85CE1C0
- .2byte 0x0200, 0x0200, 0x0000, 0x0000
- .2byte 0xffe0, 0xffe0, 0x0800, 0x0000
- .2byte 0x7fff, 0x0000, 0x0000, 0x0000
-
- .align 2
-gUnknown_085CE1D8:: @ 85CE1D8
- .4byte gUnknown_085CE1C0
-
- .align 2
-gUnknown_085CE1DC:: @ 85CE1DC
- spr_template 0x27d0, 0x27d0, gUnknown_085249D4, gUnknown_085CE1BC, NULL, gUnknown_085CE1D8, sub_815A8AC
-
- .align 2
-gUnknown_085CE1F4:: @ 85CE1F4
- .2byte 0x0000, 0x0180, 0x0000, 0x0000
- .2byte 0x0010, 0x0000, 0x1400, 0x0000
- .2byte 0x7fff, 0x0000, 0x0000, 0x0000
-
- .align 2
-gUnknown_085CE20C:: @ 85CE20C
- .2byte 0x0140, 0x0180, 0x0000, 0x0000
- .2byte 0xfff0, 0x0000, 0x1300, 0x0000
- .2byte 0x7fff, 0x0000, 0x0000, 0x0000
-
- .align 2
-gUnknown_085CE224:: @ 85CE224
- .4byte gUnknown_085CE1F4
- .4byte gUnknown_085CE20C
-
- .align 2
-gUnknown_085CE22C:: @ 85CE22C
- spr_template 0x27f3, 0x27f3, gUnknown_085249DC, gDummySpriteAnimTable, NULL, gUnknown_085CE224, sub_815A934
-
- .align 2
- spr_template 0x2807, 0x2807, gUnknown_08524914, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_815AAA4
-
- .align 2
- spr_template 0x2807, 0x2807, gUnknown_08524914, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_815ABD0
-
- .align 2
-gUnknown_085CE274:: @ 85CE274
- .2byte 0x0000, 0x0002, 0x0008, 0x0002
- .2byte 0x0010, 0x0002, 0xfffe, 0x0000
-
- .align 2
-gUnknown_085CE284:: @ 85CE284
- .4byte gUnknown_085CE274
-
- .align 2
-gUnknown_085CE288:: @ 85CE288
- spr_template 0x27f5, 0x27f5, gUnknown_08524934, gUnknown_085CE284, NULL, gDummySpriteAffineAnimTable, sub_815ACD0
-
-
diff --git a/data/battle_controller_wally.s b/data/battle_controller_wally.s
deleted file mode 100644
index 96d34d4a5..000000000
--- a/data/battle_controller_wally.s
+++ /dev/null
@@ -1,64 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gWallyBufferCommands:: @ 85DFDC0
- .4byte dp01t_00_5_getattr
- .4byte sub_81693C0
- .4byte sub_81693CC
- .4byte sub_8169E20
- .4byte sub_8169E2C
- .4byte sub_8169E38
- .4byte sub_8169E44
- .4byte sub_8169EC8
- .4byte dp01t_07_6_
- .4byte sub_816A060
- .4byte sub_816A06C
- .4byte sub_816A078
- .4byte sub_816A084
- .4byte sub_816A0D8
- .4byte sub_816A138
- .4byte sub_816A144
- .4byte sub_816A3B8
- .4byte dp01t_11_5_message_for_player_only
- .4byte dp01t_12_1_battle_menu
- .4byte sub_816A4D8
- .4byte sub_816A4E4
- .4byte sub_816A57C
- .4byte sub_816A5BC
- .4byte sub_816A5C8
- .4byte sub_816A5D4
- .4byte sub_816A6D4
- .4byte sub_816A6E0
- .4byte sub_816A6EC
- .4byte sub_816A6F8
- .4byte sub_816A704
- .4byte sub_816A710
- .4byte sub_816A71C
- .4byte sub_816A728
- .4byte sub_816A734
- .4byte sub_816A740
- .4byte sub_816A74C
- .4byte sub_816A758
- .4byte sub_816A764
- .4byte sub_816A770
- .4byte sub_816A77C
- .4byte sub_816A788
- .4byte sub_816A794
- .4byte sub_816A804
- .4byte sub_816A810
- .4byte sub_816A840
- .4byte sub_816A89C
- .4byte dp01t_2E_5_battle_intro
- .4byte sub_816A90C
- .4byte sub_816AC78
- .4byte sub_816ACFC
- .4byte sub_816AD08
- .4byte sub_816AD14
- .4byte sub_816AD20
- .4byte sub_816AD7C
- .4byte sub_816AD88
- .4byte sub_816AD94
- .4byte nullsub_118
diff --git a/include/battle.h b/include/battle.h
index 3328c691f..f731168dd 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -348,7 +348,7 @@ struct UnknownFlags
struct DisableStruct
{
- /*0x00*/ u32 unk0;
+ /*0x00*/ u32 transformedMonPersonality;
/*0x04*/ u16 disabledMove;
/*0x06*/ u16 encoredMove;
/*0x08*/ u8 protectUses;
@@ -772,38 +772,39 @@ extern struct BattleStruct* gBattleStruct;
#define MOVE_EFFECT_AFFECTS_USER 0x40
#define MOVE_EFFECT_CERTAIN 0x80
-// battle animations ids
-
-#define B_ANIM_CASTFORM_CHANGE 0x0
-#define B_ANIM_STATS_CHANGE 0x1
-#define B_ANIM_SUBSTITUTE_FADE 0x2
-#define B_ANIM_SUBSTITUTE_APPEAR 0x3
-#define B_ANIM_x4 0x4
-#define B_ANIM_ITEM_KNOCKOFF 0x5
-#define B_ANIM_TURN_TRAP 0x6
-#define B_ANIM_ITEM_EFFECT 0x7
-#define B_ANIM_SMOKEBALL_ESCAPE 0x8
-#define B_ANIM_HANGED_ON 0x9
-#define B_ANIM_RAIN_CONTINUES 0xA
-#define B_ANIM_SUN_CONTINUES 0xB
-#define B_ANIM_SANDSTORM_CONTINUES 0xC
-#define B_ANIM_HAIL_CONTINUES 0xD
-#define B_ANIM_LEECH_SEED_DRAIN 0xE
-#define B_ANIM_MON_HIT 0xF
-#define B_ANIM_ITEM_STEAL 0x10
-#define B_ANIM_SNATCH_MOVE 0x11
-#define B_ANIM_FUTURE_SIGHT_HIT 0x12
-#define B_ANIM_x13 0x13
-#define B_ANIM_x14 0x14
-#define B_ANIM_INGRAIN_HEAL 0x15
-#define B_ANIM_WISH_HEAL 0x16
-#define B_ANIM_x17 0x17
-#define B_ANIM_x18 0x18
-#define B_ANIM_x19 0x19
-#define B_ANIM_x1A 0x1A
-#define B_ANIM_x1B 0x1B
-#define B_ANIM_x1C 0x1C
-#define B_ANIM_x1D 0x1D
+// table ids for general animations
+#define B_ANIM_CASTFORM_CHANGE 0x0
+#define B_ANIM_STATS_CHANGE 0x1
+#define B_ANIM_SUBSTITUTE_FADE 0x2
+#define B_ANIM_SUBSTITUTE_APPEAR 0x3
+#define B_ANIM_x4 0x4
+#define B_ANIM_ITEM_KNOCKOFF 0x5
+#define B_ANIM_TURN_TRAP 0x6
+#define B_ANIM_ITEM_EFFECT 0x7
+#define B_ANIM_SMOKEBALL_ESCAPE 0x8
+#define B_ANIM_HANGED_ON 0x9
+#define B_ANIM_RAIN_CONTINUES 0xA
+#define B_ANIM_SUN_CONTINUES 0xB
+#define B_ANIM_SANDSTORM_CONTINUES 0xC
+#define B_ANIM_HAIL_CONTINUES 0xD
+#define B_ANIM_LEECH_SEED_DRAIN 0xE
+#define B_ANIM_MON_HIT 0xF
+#define B_ANIM_ITEM_STEAL 0x10
+#define B_ANIM_SNATCH_MOVE 0x11
+#define B_ANIM_FUTURE_SIGHT_HIT 0x12
+#define B_ANIM_x13 0x13
+#define B_ANIM_x14 0x14
+#define B_ANIM_INGRAIN_HEAL 0x15
+#define B_ANIM_WISH_HEAL 0x16
+
+// special animations table
+#define B_ANIM_LVL_UP 0x0
+#define B_ANIM_SWITCH_OUT_MON 0x1
+#define B_ANIM_SPECIAL_2 0x2
+#define B_ANIM_BALL_THROW 0x3
+#define B_ANIM_SAFARI_BALL_THROW 0x4
+#define B_ANIM_SUBSTITUTE_TO_MON 0x5
+#define B_ANIM_MON_TO_SUBSTITUTE 0x6
#define GET_STAT_BUFF_ID(n)((n & 0xF)) // first four bits 0x1, 0x2, 0x4, 0x8
#define GET_STAT_BUFF_VALUE(n)(((n >> 4) & 7)) // 0x10, 0x20, 0x40
@@ -878,6 +879,25 @@ void SetBankEnemyShadowSpriteCallback(u8 bank, u16 species);
void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 bank);
void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 bank);
void BattleLoadSubstituteSpriteGfx(u8 bank, bool8 arg1);
+void nullsub_24(u16 arg0);
+void nullsub_25(u8 arg0);
+void ClearTemporarySpeciesSpriteData(u8 bank, bool8 dontClearSubstitute);
+void sub_805D714(struct Sprite *sprite);
+void DecompressTrainerBackPic(u16 backPicId, u8 bank);
+void DecompressTrainerFrontPic(u16 frontPicId, u8 bank);
+void FreeTrainerFrontPicPalette(u16 frontPicId);
+void sub_805D7AC(struct Sprite *sprite);
+bool8 IsMoveWithoutAnimation(u16 moveId, u8 animationTurn);
+void sub_805EB9C(u8 arg0);
+void sub_805E394(void);
+void TrySetBehindSubstituteSpriteBit(u8 bank, u16 move);
+void DoStatusAnimation(bool8 isStatus2, u32 status);
+void DoSpecialBattleAnimation(u8 activeBank, u8 atkBank, u8 defBank, u8 tableId);
+bool8 DoBattleAnimationFromTable(u8 active, u8 atkBank, u8 defBank, u8 tableId, u16 argument);
+void SetBattleSpriteInvisibilityBitToSpriteInvisibility(u8 bank);
+u16 ChooseMoveAndTargetInBattlePalace(void);
+void LoadBattleBarGfx(u8 arg0);
+bool8 mplay_80342A4(u8 bank);
enum
{
@@ -890,7 +910,6 @@ enum
BACK_PIC_WALLY,
BACK_PIC_STEVEN
};
-void LoadBackTrainerBankSpriteGfx(u8 backPicId, u8 bank);
// rom_80A5C6C
u8 GetBankSide(u8 bank);
@@ -916,7 +935,7 @@ struct BattleAnimationInfo
u8 field_5;
u8 field_6;
u8 field_7;
- u8 field_8;
+ u8 ballThrowCaseId;
u8 field_9_x1 : 1;
u8 field_9_x2 : 1;
u8 field_9_x1C : 3;
@@ -931,11 +950,21 @@ struct BattleHealthboxInfo
u8 flag_x2 : 1;
u8 flag_x4 : 1;
u8 flag_x8 : 1;
- u8 flag_x10 : 1;
- u8 field_1;
+ u8 statusAnimActive : 1; // x10
+ u8 animFromTableActive : 1; // x20
+ u8 specialAnimActive : 1; //x40
+ u8 flag_x80 : 1;
+ u8 field_1_x1 : 1;
+ u8 field_1_x2 : 1;
+ u8 field_1_x4 : 1;
+ u8 field_1_x8 : 1;
+ u8 field_1_x10 : 1;
+ u8 field_1_x20 : 1;
+ u8 field_1_x40 : 1;
+ u8 field_1_x80 : 1;
u8 field_2;
u8 field_3;
- u8 field_4;
+ u8 animationState;
u8 field_5;
u8 field_6;
u8 field_7;
@@ -950,7 +979,7 @@ struct BattleBarInfo
u8 healthboxSpriteId;
s32 maxValue;
s32 currentValue;
- s32 field_C;
+ s32 receivedValue;
s32 field_10;
};
diff --git a/include/battle_2.h b/include/battle_2.h
index ceec2aa00..ee61efd9b 100644
--- a/include/battle_2.h
+++ b/include/battle_2.h
@@ -2,23 +2,45 @@
#define GUARD_BATTLE_2_H
void CB2_InitBattle(void);
-void CB2_QuitRecordedBattle(void);
-void FaintClearSetData(void);
-void SwitchInClearSetData(void);
-void sub_803BDA0(u8 bank);
void BattleMainCB2(void);
+void CB2_QuitRecordedBattle(void);
+void sub_8038528(struct Sprite* sprite);
+void sub_8038A04(void); // unused
void VBlankCB_Battle(void);
-bool8 TryRunFromBattle(u8 bank);
-u8 IsRunningFromBattleImpossible(void);
-u8 GetWhoStrikesFirst(u8 bank1, u8 bank2, bool8 ignoreChosenMoves);
-void SwapTurnOrder(u8 id1, u8 id2);
-void BattleTurnPassed(void);
-void RunBattleScriptCommands_PopCallbacksStack(void);
-void RunBattleScriptCommands(void);
+void nullsub_17(void);
+void sub_8038B74(struct Sprite *sprite);
+void sub_8038D64(void);
+u32 sub_80391E0(u8 arrayId, u8 caseId);
u32 sub_80397C4(u32 setId, u32 tableId);
+void oac_poke_opponent(struct Sprite *sprite);
+void SpriteCallbackDummy_2(struct Sprite *sprite);
+void sub_8039934(struct Sprite *sprite);
+void sub_8039AD8(struct Sprite *sprite);
+void sub_8039B2C(struct Sprite *sprite);
+void sub_8039B58(struct Sprite *sprite);
+void sub_8039BB4(struct Sprite *sprite);
+void sub_80105DC(struct Sprite *sprite);
+void sub_8039C00(struct Sprite *sprite);
+void dp11b_obj_instanciate(u8 bank, u8 b, s8 c, s8 d);
+void dp11b_obj_free(u8 bank, bool8 b);
+void sub_8039E44(struct Sprite *sprite);
+void sub_8039E60(struct Sprite *sprite);
+void sub_8039E84(struct Sprite *sprite);
void sub_8039E9C(struct Sprite *sprite);
void nullsub_20(void);
void BeginBattleIntro(void);
+void SwitchInClearSetData(void);
+void FaintClearSetData(void);
+void sub_803B3AC(void); // unused
+void sub_803B598(void); // unused
+void BattleTurnPassed(void);
+u8 IsRunningFromBattleImpossible(void);
+void sub_803BDA0(u8 bank);
+void SwapTurnOrder(u8 id1, u8 id2);
+u8 GetWhoStrikesFirst(u8 bank1, u8 bank2, bool8 ignoreChosenMoves);
+void RunBattleScriptCommands_PopCallbacksStack(void);
+void RunBattleScriptCommands(void);
+bool8 TryRunFromBattle(u8 bank);
extern const u8 gStatusConditionString_PoisonJpn[8];
extern const u8 gStatusConditionString_SleepJpn[8];
diff --git a/include/battle_anim.h b/include/battle_anim.h
index 5282916c0..67f0813bc 100644
--- a/include/battle_anim.h
+++ b/include/battle_anim.h
@@ -60,7 +60,7 @@ extern u8 gUnknown_02038440;
void ClearBattleAnimationVars(void);
void DoMoveAnim(u16 move);
-void DoBattleAnim(const u8 *const animsTable[], u16 tableId, bool8 isMoveAnim);
+void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMoveAnim);
void DestroyAnimSprite(struct Sprite *sprite);
void DestroyAnimVisualTask(u8 taskId);
void DestroyAnimSoundTask(u8 taskId);
@@ -75,5 +75,24 @@ s16 CalculatePanIncrement(s16 sourcePan, s16 targetPan, s16 incrementPan);
// battle_anim_80FE840.s
void SetAnimBgAttribute(u8 bgId, u8 attributeId, u8 value);
void sub_8118FBC(u8 arg0, u8 arg1, u8 arg2, u8 bankIdentity, u8 arg4, void *arg5, u16 *arg6, u16 arg7);
+void HandleIntroSlide(u8 terrainId);
+
+// battle_anim_80A5C6C.s
+void sub_80A6EEC(struct Sprite *sprite);
+void sub_80A8278(void);
+void sub_80A6B30(struct UnknownAnimStruct2*);
+void sub_80A6B90(struct UnknownAnimStruct2*, u32 arg1);
+u8 sub_80A82E4(u8 bank);
+u8 sub_80A5C6C(u8 bank, u8 attributeId);
+bool8 AnimBankSpriteExists(u8 bank);
+void sub_80A6C68(u8 arg0);
+u8 GetAnimBankSpriteId(u8 wantedBank);
+bool8 IsDoubleBattle(void);
+u8 sub_80A6D94(void);
+u8 sub_80A8364(u8);
+void StoreSpriteCallbackInData6(struct Sprite *sprite, void (*spriteCallback)(struct Sprite*));
+void oamt_add_pos2_onto_pos1(struct Sprite *sprite);
+u8 sub_80A6138(u8 bank);
+u8 sub_80A82E4(u8 bank);
#endif // GUARD_BATTLE_ANIM_H
diff --git a/include/battle_controllers.h b/include/battle_controllers.h
index 4bc6b7b84..8affb1406 100644
--- a/include/battle_controllers.h
+++ b/include/battle_controllers.h
@@ -1,16 +1,69 @@
#ifndef GUARD_BATTLE_CONTROLLERS_H
#define GUARD_BATTLE_CONTROLLERS_H
-#define REQUEST_ALL_BATTLE 0x0
-#define REQUEST_SPECIES_BATTLE 0x1
-#define REQUEST_HELDITEM_BATTLE 0x2
-#define REQUEST_MOVES_PP_BATTLE 0x3
-#define REQUEST_PPMOVE1_BATTLE 0x9
-#define REQUEST_PPMOVE2_BATTLE 0xA
-#define REQUEST_PPMOVE3_BATTLE 0xB
-#define REQUEST_PPMOVE4_BATTLE 0xC
-#define REQUEST_STATUS_BATTLE 0x28
-#define REQUEST_HP_BATTLE 0x2A
+enum
+{
+ REQUEST_ALL_BATTLE,
+ REQUEST_SPECIES_BATTLE,
+ REQUEST_HELDITEM_BATTLE,
+ REQUEST_MOVES_PP_BATTLE,
+ REQUEST_MOVE1_BATTLE,
+ REQUEST_MOVE2_BATTLE,
+ REQUEST_MOVE3_BATTLE,
+ REQUEST_MOVE4_BATTLE,
+ REQUEST_PP_DATA_BATTLE,
+ REQUEST_PPMOVE1_BATTLE,
+ REQUEST_PPMOVE2_BATTLE,
+ REQUEST_PPMOVE3_BATTLE,
+ REQUEST_PPMOVE4_BATTLE,
+ REQUEST_UNUSED_13_BATTLE,
+ REQUEST_UNUSED_14_BATTLE,
+ REQUEST_UNUSED_15_BATTLE,
+ REQUEST_UNUSED_16_BATTLE,
+ REQUEST_OTID_BATTLE,
+ REQUEST_EXP_BATTLE,
+ REQUEST_HP_EV_BATTLE,
+ REQUEST_ATK_EV_BATTLE,
+ REQUEST_DEF_EV_BATTLE,
+ REQUEST_SPEED_EV_BATTLE,
+ REQUEST_SPATK_EV_BATTLE,
+ REQUEST_SPDEF_EV_BATTLE,
+ REQUEST_FRIENDSHIP_BATTLE,
+ REQUEST_POKERUS_BATTLE,
+ REQUEST_MET_LOCATION_BATTLE,
+ REQUEST_MET_LEVEL_BATTLE,
+ REQUEST_MET_GAME_BATTLE,
+ REQUEST_POKEBALL_BATTLE,
+ REQUEST_ALL_IVS_BATTLE,
+ REQUEST_HP_IV_BATTLE,
+ REQUEST_ATK_IV_BATTLE,
+ REQUEST_DEF_IV_BATTLE,
+ REQUEST_SPEED_IV_BATTLE,
+ REQUEST_SPATK_IV_BATTLE,
+ REQUEST_SPDEF_IV_BATTLE,
+ REQUEST_PERSONALITY_BATTLE,
+ REQUEST_CHECKSUM_BATTLE,
+ REQUEST_STATUS_BATTLE,
+ REQUEST_LEVEL_BATTLE,
+ REQUEST_HP_BATTLE,
+ REQUEST_MAX_HP_BATTLE,
+ REQUEST_ATK_BATTLE,
+ REQUEST_DEF_BATTLE,
+ REQUEST_SPEED_BATTLE,
+ REQUEST_SPATK_BATTLE,
+ REQUEST_SPDEF_BATTLE,
+ REQUEST_COOL_BATTLE,
+ REQUEST_BEAUTY_BATTLE,
+ REQUEST_CUTE_BATTLE,
+ REQUEST_SMART_BATTLE,
+ REQUEST_TOUGH_BATTLE,
+ REQUEST_SHEEN_BATTLE,
+ REQUEST_COOL_RIBBON_BATTLE,
+ REQUEST_BEAUTY_RIBBON_BATTLE,
+ REQUEST_CUTE_RIBBON_BATTLE,
+ REQUEST_SMART_RIBBON_BATTLE,
+ REQUEST_TOUGH_RIBBON_BATTLE,
+};
#define RESET_ACTION_MOVE_SELECTION 0
#define RESET_ACTION_SELECTION 1
@@ -23,6 +76,16 @@
#define BALL_3_SHAKES_SUCCESS 4
#define BALL_TRAINER_BLOCK 5
+#define RET_VALUE_LEVELLED_UP 11
+
+#define INSTANT_HP_BAR_DROP 32767
+
+struct UnusedControllerStruct
+{
+ u8 field_0 : 7;
+ u8 flag_x80 : 1;
+};
+
struct HpAndStatus
{
u16 hp;
@@ -31,7 +94,7 @@ struct HpAndStatus
struct MovePpInfo
{
- u16 move[4];
+ u16 moves[4];
u8 pp[4];
u8 ppBonuses;
};
@@ -59,15 +122,15 @@ enum
CONTROLLER_TRAINERSLIDE,
CONTROLLER_TRAINERSLIDEBACK,
CONTROLLER_FAINTANIMATION,
- CONTROLLER_11,
- CONTROLLER_12,
- CONTROLLER_BALLTHROW,
+ CONTROLLER_PALETTEFADE,
+ CONTROLLER_SUCCESSBALLTHROWANIM,
+ CONTROLLER_BALLTHROWANIM,
CONTROLLER_PAUSE,
CONTROLLER_MOVEANIMATION,
CONTROLLER_PRINTSTRING,
CONTROLLER_PRINTSTRINGPLAYERONLY,
CONTROLLER_CHOOSEACTION,
- CONTROLLER_19,
+ CONTROLLER_UNKNOWNYESNOBOX,
CONTROLLER_CHOOSEMOVE,
CONTROLLER_OPENBAG,
CONTROLLER_CHOOSEPOKEMON,
@@ -81,10 +144,10 @@ enum
CONTROLLER_DMA3TRANSFER,
CONTROLLER_31,
CONTROLLER_32,
- CONTROLLER_33,
- CONTROLLER_34,
- CONTROLLER_35,
- CONTROLLER_36,
+ CONTROLLER_TWORETURNVALUES,
+ CONTROLLER_CHOSENMONRETURNVALUE,
+ CONTROLLER_ONERETURNVALUE,
+ CONTROLLER_ONERETURNVALUE_DUPLICATE,
CONTROLLER_37,
CONTROLLER_38,
CONTROLLER_39,
@@ -107,7 +170,7 @@ enum
CONTROLLER_56
};
-#define LAST_CONTROLLER_CMD_ID CONTROLLER_56 + 1
+#define CONTOLLER_CMDS_COUNT CONTROLLER_56 + 1
// general functions
void HandleLinkBattleSetup(void);
@@ -117,9 +180,9 @@ void sub_8033648(void);
void PrepareBufferDataTransferLink(u8 bufferId, u16 size, u8 *data);
// emitters
-void EmitGetMonData(u8 bufferId, u8 arg1, u8 arg2);
+void EmitGetMonData(u8 bufferId, u8 requestId, u8 monsToCheck);
void EmitGetRawMonData(u8 bufferId, u8 monId, u8 bytes); // unused
-void EmitSetMonData(u8 bufferId, u8 request, u8 c, u8 bytes, void *data);
+void EmitSetMonData(u8 bufferId, u8 requestId, u8 monsToCheck, u8 bytes, void *data);
void EmitSetRawMonData(u8 bufferId, u8 monId, u8 bytes, void *data); // unused
void EmitLoadMonSprite(u8 bufferId);
void EmitSwitchInAnim(u8 bufferId, u8 partyId, bool8 dontClearSubstituteBit);
@@ -128,17 +191,17 @@ void EmitDrawTrainerPic(u8 bufferId);
void EmitTrainerSlide(u8 bufferId);
void EmitTrainerSlideBack(u8 bufferId);
void EmitFaintAnimation(u8 bufferId);
-void EmitCmd11(u8 bufferId); // unused
-void EmitCmd12(u8 bufferId); // unused
-void EmitBallThrow(u8 bufferId, u8 caseId);
+void EmitPaletteFade(u8 bufferId); // unused
+void EmitSuccessBallThrowAnim(u8 bufferId); // unused
+void EmitBallThrowAnim(u8 bufferId, u8 caseId);
void EmitPause(u8 bufferId, u8 toWait, void *data); // unused
void EmitMoveAnimation(u8 bufferId, u16 move, u8 turnOfMove, u16 movePower, s32 dmg, u8 friendship, struct DisableStruct *disableStructPtr, u8 multihit);
void EmitPrintString(u8 bufferId, u16 stringId);
void EmitPrintStringPlayerOnly(u8 bufferId, u16 stringId);
void EmitChooseAction(u8 bufferId, u8 arg1, u16 arg2);
-void EmitCmd19(u8 bufferId);
+void EmitUnknownYesNoBox(u8 bufferId);
void EmitChooseMove(u8 bufferId, bool8 isDoubleBattle, bool8 NoPpNumber, struct ChooseMoveStruct *movePpData);
-void EmitOpenBag(u8 bufferId, u8* arg1);
+void EmitChooseItem(u8 bufferId, u8* arg1);
void EmitChoosePokemon(u8 bufferId, u8 caseId, u8 arg2, u8 abilityId, u8* arg4);
void EmitCmd23(u8 bufferId); // unused
void EmitHealthBarUpdate(u8 bufferId, u16 hpValue);
@@ -150,14 +213,14 @@ void EmitDataTransfer(u8 bufferId, u16 size, void *data);
void EmitDMA3Transfer(u8 bufferId, void *dst, u16 size, void *data); // unused
void EmitPlayBGM(u8 bufferId, u16 songId, void *unusedDumbDataParameter); // unused
void EmitCmd32(u8 bufferId, u16 size, void *c); // unused
-void EmitCmd33(u8 bufferId, u8 arg1, u16 arg2);
-void EmitCmd34(u8 bufferId, u8 b, u8 *c);
-void EmitCmd35(u8 bufferId, u16 b);
-void EmitCmd36(u8 bufferId, u16 b);
-void EmitCmd37(u8 bufferId);
-void EmitCmd38(u8 bufferId, u8 b);
-void EmitCmd39(u8 bufferId);
-void EmitCmd40(u8 bufferId);
+void EmitTwoReturnValues(u8 bufferId, u8 arg1, u16 arg2);
+void EmitChosenMonReturnValue(u8 bufferId, u8 b, u8 *c);
+void EmitOneReturnValue(u8 bufferId, u16 arg1);
+void EmitOneReturnValue_Duplicate(u8 bufferId, u16 b);
+void EmitCmd37(u8 bufferId); // unused
+void EmitCmd38(u8 bufferId, u8 b); // unused
+void EmitCmd39(u8 bufferId); // unused
+void EmitCmd40(u8 bufferId); // unused
void EmitHitAnimation(u8 bufferId);
void EmitCmd42(u8 bufferId);
void EmitEffectivenessSound(u8 bufferId, u16 songId);
@@ -177,8 +240,15 @@ void EmitCmd55(u8 bufferId, u8 arg1);
// player controller
void SetBankFuncToPlayerBufferRunCommand(void);
void nullsub_21(void);
+void PlayerHandleGetRawMonData(void);
+void sub_80587B0(void);
+void sub_805CC00(struct Sprite *sprite);
+void SetCB2ToReshowScreenAfterMenu(void);
+void SetCB2ToReshowScreenAfterMenu2(void);
+void c3_0802FDF4(u8 taskId);
void ActionSelectionCreateCursorAt(u8 cursorPos, u8 unused);
void ActionSelectionDestroyCursorAt(u8 cursorPos);
+void InitMoveSelectionsVarsAndStrings(void);
// recorded player controller
void SetBankFuncToRecordedPlayerBufferRunCommand(void);
diff --git a/include/battle_interface.h b/include/battle_interface.h
index 05ea1c021..aad30f7b3 100644
--- a/include/battle_interface.h
+++ b/include/battle_interface.h
@@ -3,6 +3,18 @@
#include "battle_controllers.h"
+enum
+{
+ HP_CURRENT,
+ HP_MAX
+};
+
+enum
+{
+ HEALTH_BAR,
+ EXP_BAR
+};
+
#define TAG_HEALTHBOX_PLAYER1_TILE 0xD6FF
#define TAG_HEALTHBOX_PLAYER2_TILE 0xD700
#define TAG_HEALTHBOX_OPPONENT1_TILE 0xD701
@@ -35,7 +47,7 @@ enum
u8 CreateBankHealthboxSprites(u8 bank);
u8 CreateSafariPlayerHealthboxSprites(void);
-void SetBattleBarStruct(u8 bank, u8 healthboxSpriteId, s32 maxVal, s32 currVal, s32 field_C);
+void SetBattleBarStruct(u8 bank, u8 healthboxSpriteId, s32 maxVal, s32 currVal, s32 receivedValue);
void SetHealthboxSpriteInvisible(u8 healthboxSpriteId);
void SetHealthboxSpriteVisible(u8 healthboxSpriteId);
void DestoryHealthboxSprite(u8 healthboxSpriteId);
diff --git a/include/battle_link_817C95C.h b/include/battle_link_817C95C.h
new file mode 100644
index 000000000..815c1f058
--- /dev/null
+++ b/include/battle_link_817C95C.h
@@ -0,0 +1,11 @@
+#ifndef GUARD_BATTLE_LINK_817C95C_H
+#define GUARD_BATTLE_LINK_817C95C_H
+
+void sub_817C95C(u16 stringId);
+void sub_817E0FC(u16 move, u16 weatherFlags, struct DisableStruct *disableStructPtr);
+void sub_817E32C(u8 animationId);
+void sub_817E3F4(void);
+void sub_817F2A8(void);
+u8 GetBankMoveSlotId(u8 bank, u16 move);
+
+#endif // GUARD_BATTLE_LINK_817C95C_H
diff --git a/include/battle_message.h b/include/battle_message.h
index 3b154c5a6..0d7a7f489 100644
--- a/include/battle_message.h
+++ b/include/battle_message.h
@@ -204,7 +204,7 @@ struct StringInfoBattle
void BufferStringBattle(u16 stringID);
u32 BattleStringExpandPlaceholdersToDisplayedString(const u8* src);
u32 BattleStringExpandPlaceholders(const u8* src, u8* dst);
-void sub_814F9EC(const u8* text, u8 arg1);
+void BattleHandleAddTextPrinter(const u8* text, u8 arg1);
void SetPpNumbersPaletteInMoveSelection(void);
u8 GetCurrentPpToMaxPpState(u8 currentPp, u8 maxPp);
diff --git a/include/battle_script_commands.h b/include/battle_script_commands.h
index 590944f02..a466abc04 100644
--- a/include/battle_script_commands.h
+++ b/include/battle_script_commands.h
@@ -25,6 +25,7 @@
#define VARIOUS_GET_MOVE_TARGET 3
#define VARIOUS_RESET_INTIMIDATE_TRACE_BITS 5
#define VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP 6
+#define VARIOUS_EMIT_YESNOBOX 13
#define VARIOUS_WAIT_CRY 18
#define VARIOUS_RETURN_OPPONENT_MON1 19
#define VARIOUS_RETURN_OPPONENT_MON2 20
@@ -41,15 +42,18 @@
#define STAT_CHANGE_WORKED 0
#define STAT_CHANGE_DIDNT_WORK 1
+#define WINDOW_CLEAR 0x1
+#define WINDOW_x80 0x80
+
void AI_CalcDmg(u8 bankAtk, u8 bankDef);
u8 TypeCalc(u16 move, u8 bankAtk, u8 bankDef);
u8 AI_TypeCalc(u16 move, u16 targetSpecies, u8 targetAbility);
u8 BankGetTurnOrder(u8 bank);
void SetMoveEffect(bool8 primary, u8 certain);
-void BattleDestroyCursorAt(u8 cursorPosition);
-void BattleCreateCursorAt(u8 cursorPosition);
+void BattleDestroyYesNoCursorAt(u8 cursorPosition);
+void BattleCreateYesNoCursorAt(u8 cursorPosition);
void BufferMoveToLearnIntoBattleTextBuff2(void);
-void sub_8056A3C(u8 xStart, u8 yStart, u8 xEnd, u8 yEnd, u8 flags);
+void HandleBattleWindow(u8 xStart, u8 yStart, u8 xEnd, u8 yEnd, u8 flags);
bool8 UproarWakeUpCheck(u8 bank);
extern void (* const gBattleScriptingCommandsTable[])(void);
diff --git a/include/gba/io_reg.h b/include/gba/io_reg.h
index 83a2a123b..f86f2434c 100644
--- a/include/gba/io_reg.h
+++ b/include/gba/io_reg.h
@@ -628,6 +628,8 @@
#define KEY_OR_INTR 0x0000
#define KEY_AND_INTR 0x8000
+#define DPAD_ANY ((DPAD_RIGHT | DPAD_LEFT | DPAD_UP | DPAD_DOWN))
+
// interrupt flags
#define INTR_FLAG_VBLANK (1 << 0)
#define INTR_FLAG_HBLANK (1 << 1)
diff --git a/include/global.h b/include/global.h
index 8860b4ae3..2e3a106eb 100644
--- a/include/global.h
+++ b/include/global.h
@@ -41,6 +41,8 @@ enum
VERSION_SAPPHIRE = 1,
VERSION_RUBY = 2,
VERSION_EMERALD = 3,
+ VERSION_FIRE_RED = 4,
+ VERSION_LEAF_GREEN = 5,
};
enum LanguageId {
diff --git a/include/link.h b/include/link.h
index b8835ce04..7a6563144 100644
--- a/include/link.h
+++ b/include/link.h
@@ -191,5 +191,6 @@ void sub_800A620(void);
void sub_8011BD0(void);
u8 sub_800ABAC(void);
u8 sub_800ABBC(void);
+void sub_800AC34(void);
#endif // GUARD_LINK_H
diff --git a/include/pokeball.h b/include/pokeball.h
new file mode 100644
index 000000000..76f084465
--- /dev/null
+++ b/include/pokeball.h
@@ -0,0 +1,8 @@
+#ifndef GUARD_POKEBALL_H
+#define GUARD_POKEBALL_H
+
+u8 sub_80753E8(u16, u8);
+void sub_8076918(u8 bank);
+void DoHitAnimHealthboxEffect(u8 bank);
+
+#endif // GUARD_POKEBALL_H
diff --git a/include/pokemon.h b/include/pokemon.h
index c26c28afa..626d4d7a1 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -643,6 +643,10 @@ void PartySpreadPokerus(struct Pokemon *party);
s8 GetMonFlavourRelation(struct Pokemon *mon, u8 a2);
s8 GetFlavourRelationByPersonality(u32 personality, u8 a2);
u8 GetItemEffectParamOffset(u16 itemId, u8 effectByte, u8 effectBit);
+u8 GetDefaultMoveTarget(u8 atkBank);
+u16 PlayerGenderToFrontTrainerPicId(u8 playerGender);
+void sub_806A1C0(u16 arg0, u8 bankIdentity);
+void sub_806A12C(u16 trainerSpriteId, u8 bankIdentity);
#include "sprite.h"
diff --git a/include/recorded_battle.h b/include/recorded_battle.h
index 6b80e220f..ae2ed1a79 100644
--- a/include/recorded_battle.h
+++ b/include/recorded_battle.h
@@ -6,6 +6,7 @@ extern u32 gRecordedBattleRngSeed;
void sub_8184DA4(u8 arg0);
void sub_8185F84(void);
void sub_8184E58(void);
+u8 RecordedBattle_ReadBankAction(u8 bank);
void RecordedBattle_SetBankAction(u8 bank, u8 action);
void RecordedBattle_ClearBankAction(u8 bank, u8 bytesToClear);
void sub_8185F90(u16 arg0);
@@ -18,5 +19,6 @@ void sub_8185FD0(void);
void sub_8186444(void);
void sub_8185EB8(void);
u8 sub_81850DC(u8 *arg0);
+u8 sub_8185F40(void);
#endif // GUARD_RECORDED_BATTLE_H
diff --git a/ld_script.txt b/ld_script.txt
index f655711dd..d55f09d2c 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -61,10 +61,12 @@ SECTIONS {
src/battle_util.o(.text);
src/battle_script_commands.o(.text);
asm/battle_5.o(.text);
- asm/battle_controller_player.o(.text);
+ src/battle_controller_player.o(.text);
asm/battle_7.o(.text);
+ src/battle_controller_opponent.o(.text);
asm/battle_controller_opponent.o(.text);
src/battle_ai_switch_items.o(.text);
+ src/battle_controller_linkopponent.o(.text);
asm/battle_controller_linkopponent.o(.text);
src/pokemon_1.o(.text);
asm/pokemon_1.o(.text);
@@ -114,7 +116,7 @@ SECTIONS {
src/palette.o(.text);
src/sound.o(.text);
src/battle_anim.o(.text);
- asm/rom_80A5C6C.o(.text);
+ asm/battle_anim_80A5C6C.o(.text);
src/task.o(.text);
src/reshow_battle_screen.o(.text);
asm/battle_anim_80A9C70.o(.text);
@@ -199,7 +201,7 @@ SECTIONS {
asm/field_effect_helpers.o(.text);
asm/contest_ai.o(.text);
asm/battle_anim_sound_tasks.o(.text);
- asm/battle_controller_safari.o(.text);
+ src/battle_controller_safari.o(.text);
asm/fldeff_sweetscent.o(.text);
asm/battle_anim_815A0D4.o(.text);
asm/learn_move.o(.text);
@@ -208,6 +210,7 @@ SECTIONS {
src/roamer.o(.text);
asm/battle_tower.o(.text);
asm/use_pokeblock.o(.text);
+ src/battle_controller_wally.o(.text);
asm/battle_controller_wally.o(.text);
asm/player_pc.o(.text);
asm/intro.o(.text);
@@ -232,7 +235,7 @@ SECTIONS {
asm/pokemon_animation.o(.text);
asm/recorded_battle.o(.text);
asm/battle_controller_recorded_opponent.o(.text);
- asm/battle_controller_recorded_player.o(.text);
+ src/battle_controller_recorded_player.o(.text);
src/battle_dome_cards.o(.text);
src/lilycove_lady.o(.text);
asm/battle_frontier_1.o(.text);
@@ -250,7 +253,7 @@ SECTIONS {
src/unk_text_util_2.o(.text);
src/multiboot.o(.text);
asm/unk_81BAD84.o(.text);
- asm/battle_controller_player_partner.o(.text);
+ src/battle_controller_player_partner.o(.text);
asm/fldeff_groundshake.o(.text);
asm/fossil_specials.o(.text);
src/berry_fix_program.o(.text);
@@ -335,10 +338,10 @@ SECTIONS {
src/battle_2.o(.rodata);
src/battle_util.o(.rodata);
src/battle_script_commands.o(.rodata);
- data/battle_controller_player.o(.rodata);
+ src/battle_controller_player.o(.rodata);
data/smokescreen.o(.rodata);
- data/battle_controller_opponent.o(.rodata);
- data/battle_controller_link_opponent.o(.rodata);
+ src/battle_controller_opponent.o(.rodata);
+ src/battle_controller_linkopponent.o(.rodata);
data/data2c.o(.rodata);
src/trig.o(.rodata);
src/util.o(.rodata);
@@ -424,13 +427,13 @@ SECTIONS {
data/save.o(.rodata);
data/field_effect_helpers.o(.rodata);
data/contest_ai.o(.rodata);
- data/battle_controller_safari.o(.rodata);
+ src/battle_controller_safari.o(.rodata);
data/battle_anim_815A0D4.o(.rodata);
data/learn_move.o(.rodata);
src/roamer.o(.rodata);
data/battle_tower.o(.rodata);
data/use_pokeblock.o(.rodata);
- data/battle_controller_wally.o(.rodata);
+ src/battle_controller_wally.o(.rodata);
data/player_pc.o(.rodata);
data/intro.o(.rodata);
data/field_region_map.o(.rodata);
@@ -451,7 +454,7 @@ SECTIONS {
data/bard_music.o(.rodata);
data/data_860A4AC.o(.rodata);
data/battle_controller_recorded_opponent.o(.rodata);
- data/battle_controller_recorded_player.o(.rodata);
+ src/battle_controller_recorded_player.o(.rodata);
src/battle_dome_cards.o(.rodata);
src/lilycove_lady.o(.rodata);
data/battle_frontier_1.o(.rodata);
@@ -465,7 +468,7 @@ SECTIONS {
data/battle_tent.o(.rodata);
src/unk_text_util_2.o(.rodata);
data/unk_81BAD84.o(.rodata);
- data/battle_controller_player_partner.o(.rodata);
+ src/battle_controller_player_partner.o(.rodata);
data/fossil_special_fldeff_groundshake.o(.rodata);
src/berry_fix_program.o(.rodata);
data/pokemon_summary_screen.o(.rodata);
diff --git a/src/battle_2.c b/src/battle_2.c
index 16c07114a..fd1b88b48 100644
--- a/src/battle_2.c
+++ b/src/battle_2.c
@@ -238,7 +238,6 @@ static void sub_8038F34(void);
static void sub_80392A8(void);
static void sub_803937C(void);
static void sub_803939C(void);
-void oac_poke_opponent(struct Sprite *sprite);
static void sub_803980C(struct Sprite *sprite);
static void sub_8039838(struct Sprite *sprite);
static void sub_8039894(struct Sprite *sprite);
@@ -2121,7 +2120,7 @@ static void sub_8038F34(void)
if (sub_800A520() == TRUE)
{
sub_800ADF8();
- sub_814F9EC(gText_LinkStandby3, 0);
+ BattleHandleAddTextPrinter(gText_LinkStandby3, 0);
gBattleCommunication[MULTIUSE_STATE]++;
}
break;
@@ -2247,17 +2246,17 @@ static void sub_803939C(void)
case 3:
if (!gPaletteFade.active)
{
- sub_814F9EC(gText_RecordBattleToPass, 0);
+ BattleHandleAddTextPrinter(gText_RecordBattleToPass, 0);
gBattleCommunication[MULTIUSE_STATE]++;
}
break;
case 4:
if (!IsTextPrinterActive(0))
{
- sub_8056A3C(0x18, 8, 0x1D, 0xD, 0);
- sub_814F9EC(gText_BattleYesNoChoice, 0xC);
+ HandleBattleWindow(0x18, 8, 0x1D, 0xD, 0);
+ BattleHandleAddTextPrinter(gText_BattleYesNoChoice, 0xC);
gBattleCommunication[CURSOR_POSITION] = 1;
- BattleCreateCursorAt(1);
+ BattleCreateYesNoCursorAt(1);
gBattleCommunication[MULTIUSE_STATE]++;
}
break;
@@ -2267,9 +2266,9 @@ static void sub_803939C(void)
if (gBattleCommunication[CURSOR_POSITION] != 0)
{
PlaySE(SE_SELECT);
- BattleDestroyCursorAt(gBattleCommunication[CURSOR_POSITION]);
+ BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]);
gBattleCommunication[CURSOR_POSITION] = 0;
- BattleCreateCursorAt(0);
+ BattleCreateYesNoCursorAt(0);
}
}
else if (gMain.newKeys & DPAD_DOWN)
@@ -2277,9 +2276,9 @@ static void sub_803939C(void)
if (gBattleCommunication[CURSOR_POSITION] == 0)
{
PlaySE(SE_SELECT);
- BattleDestroyCursorAt(gBattleCommunication[CURSOR_POSITION]);
+ BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]);
gBattleCommunication[CURSOR_POSITION] = 1;
- BattleCreateCursorAt(1);
+ BattleCreateYesNoCursorAt(1);
}
}
else if (gMain.newKeys & A_BUTTON)
@@ -2287,7 +2286,7 @@ static void sub_803939C(void)
PlaySE(SE_SELECT);
if (gBattleCommunication[CURSOR_POSITION] == 0)
{
- sub_8056A3C(0x18, 8, 0x1D, 0xD, 1);
+ HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR);
gBattleCommunication[1] = MoveRecordedBattleToSaveData();
gBattleCommunication[MULTIUSE_STATE] = 10;
}
@@ -2305,11 +2304,11 @@ static void sub_803939C(void)
case 6:
if (sub_800A520() == TRUE)
{
- sub_8056A3C(0x18, 8, 0x1D, 0xD, 1);
+ HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR);
if (gMain.field_439_x4)
{
sub_800ADF8();
- sub_814F9EC(gText_LinkStandby3, 0);
+ BattleHandleAddTextPrinter(gText_LinkStandby3, 0);
}
gBattleCommunication[MULTIUSE_STATE]++;
}
@@ -2340,14 +2339,14 @@ static void sub_803939C(void)
{
PlaySE(SE_SAVE);
BattleStringExpandPlaceholdersToDisplayedString(gText_BattleRecordedOnPass);
- sub_814F9EC(gDisplayedStringBattle, 0);
+ BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
gBattleCommunication[1] = 0x80;
gBattleCommunication[MULTIUSE_STATE]++;
}
else
{
BattleStringExpandPlaceholdersToDisplayedString(gText_BattleRecordCouldntBeSaved);
- sub_814F9EC(gDisplayedStringBattle, 0);
+ BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
gBattleCommunication[1] = 0x80;
gBattleCommunication[MULTIUSE_STATE]++;
}
@@ -2358,7 +2357,7 @@ static void sub_803939C(void)
if (gMain.field_439_x4)
{
sub_800ADF8();
- sub_814F9EC(gText_LinkStandby3, 0);
+ BattleHandleAddTextPrinter(gText_LinkStandby3, 0);
}
gBattleCommunication[MULTIUSE_STATE]++;
}
@@ -3690,7 +3689,7 @@ static void TryDoEventsBeforeFirstTurn(void)
TurnValuesCleanUp(FALSE);
SpecialStatusesClear();
*(&gBattleStruct->field_91) = gAbsentBankFlags;
- sub_814F9EC(gText_EmptyString3, 0);
+ BattleHandleAddTextPrinter(gText_EmptyString3, 0);
gBattleMainFunc = HandleTurnActionSelectionState;
ResetSentPokesToOpponentValue();
@@ -3797,7 +3796,7 @@ void BattleTurnPassed(void)
*(gBattleStruct->field_5C + i) = 6;
*(&gBattleStruct->field_91) = gAbsentBankFlags;
- sub_814F9EC(gText_EmptyString3, 0);
+ BattleHandleAddTextPrinter(gText_EmptyString3, 0);
gBattleMainFunc = HandleTurnActionSelectionState;
gRandomTurnNumber = Random();
@@ -4025,7 +4024,7 @@ static void HandleTurnActionSelectionState(void)
}
else
{
- EmitOpenBag(0, gBattleStruct->field_60[gActiveBank]);
+ EmitChooseItem(0, gBattleStruct->field_60[gActiveBank]);
MarkBufferBankForExecution(gActiveBank);
}
break;
@@ -4070,7 +4069,7 @@ static void HandleTurnActionSelectionState(void)
}
break;
case ACTION_POKEBLOCK_CASE:
- EmitOpenBag(0, gBattleStruct->field_60[gActiveBank]);
+ EmitChooseItem(0, gBattleStruct->field_60[gActiveBank]);
MarkBufferBankForExecution(gActiveBank);
break;
case ACTION_CANCEL_PARTNER:
diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c
index d86be6fad..de440054c 100644
--- a/src/battle_ai_switch_items.c
+++ b/src/battle_ai_switch_items.c
@@ -39,7 +39,7 @@ static bool8 ShouldSwitchIfPerishSong(void)
&& gDisableStructs[gActiveBank].perishSong1 == 0)
{
*(gBattleStruct->field_294 + gActiveBank) = 6;
- EmitCmd33(1, 2, 0);
+ EmitTwoReturnValues(1, ACTION_SWITCH, 0);
return TRUE;
}
@@ -121,7 +121,7 @@ static bool8 ShouldSwitchIfWonderGuard(void)
{
// we found a mon
*(gBattleStruct->field_294 + gActiveBank) = i;
- EmitCmd33(1, 2, 0);
+ EmitTwoReturnValues(1, ACTION_SWITCH, 0);
return TRUE;
}
}
@@ -221,7 +221,7 @@ static bool8 FindMonThatAbsorbsOpponentsMove(void)
{
// we found a mon
*(gBattleStruct->field_294 + gActiveBank) = i;
- EmitCmd33(1, 2, 0);
+ EmitTwoReturnValues(1, ACTION_SWITCH, 0);
return TRUE;
}
}
@@ -241,13 +241,13 @@ static bool8 ShouldSwitchIfNaturalCure(void)
if ((gUnknown_02024250[gActiveBank] == 0 || gUnknown_02024250[gActiveBank] == 0xFFFF) && Random() & 1)
{
*(gBattleStruct->field_294 + gActiveBank) = 6;
- EmitCmd33(1, 2, 0);
+ EmitTwoReturnValues(1, ACTION_SWITCH, 0);
return TRUE;
}
else if (gBattleMoves[gUnknown_02024250[gActiveBank]].power == 0 && Random() & 1)
{
*(gBattleStruct->field_294 + gActiveBank) = 6;
- EmitCmd33(1, 2, 0);
+ EmitTwoReturnValues(1, ACTION_SWITCH, 0);
return TRUE;
}
@@ -258,7 +258,7 @@ static bool8 ShouldSwitchIfNaturalCure(void)
if (Random() & 1)
{
*(gBattleStruct->field_294 + gActiveBank) = 6;
- EmitCmd33(1, 2, 0);
+ EmitTwoReturnValues(1, ACTION_SWITCH, 0);
return TRUE;
}
@@ -426,7 +426,7 @@ static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent)
if (moveFlags & MOVESTATUS_SUPEREFFECTIVE && Random() % moduloPercent == 0)
{
*(gBattleStruct->field_294 + gActiveBank) = i;
- EmitCmd33(1, 2, 0);
+ EmitTwoReturnValues(1, ACTION_SWITCH, 0);
return TRUE;
}
}
@@ -611,7 +611,7 @@ void AI_TrySwitchOrUseItem(void)
}
}
- EmitCmd33(1, 0, (gActiveBank ^ BIT_SIDE) << 8);
+ EmitTwoReturnValues(1, ACTION_USE_MOVE, (gActiveBank ^ BIT_SIDE) << 8);
}
#define TYPE_FORESIGHT 0xFE
@@ -940,7 +940,7 @@ static bool8 ShouldUseItem(void)
if (shouldUse)
{
- EmitCmd33(1, 1, 0);
+ EmitTwoReturnValues(1, ACTION_USE_ITEM, 0);
*(gBattleStruct->field_C0 + (gActiveBank / 2) * 2) = item;
gBattleResources->battleHistory->trainerItems[i] = 0;
return shouldUse;
diff --git a/src/battle_anim.c b/src/battle_anim.c
index 023272017..d41dc77c4 100644
--- a/src/battle_anim.c
+++ b/src/battle_anim.c
@@ -47,18 +47,6 @@ extern const struct CompressedSpriteSheet gBattleAnimPicTable[];
extern const struct CompressedSpritePalette gBattleAnimPaletteTable[];
extern const struct BattleAnimBackground gBattleAnimBackgroundTable[];
-extern void sub_80A8278(void); // rom_80A5C6C.s
-extern void sub_80A6B30(struct UnknownAnimStruct2*); // rom_80A5C6C.s
-extern void sub_80A6B90(struct UnknownAnimStruct2*, u32 arg1); // rom_80A5C6C.s
-extern u8 sub_80A82E4(u8 bank); // rom_80A5C6C.s
-extern u8 sub_80A5C6C(u8 bank, u8 attributeId); // rom_80A5C6C.s
-extern bool8 AnimBankSpriteExists(u8 bank); // rom_80A5C6C.s
-extern void sub_80A6C68(u8 arg0); // rom_80A5C6C.s
-extern u8 GetAnimBankSpriteId(u8 wantedBank); // rom_80A5C6C.s
-extern u8 sub_80A6D94(void);
-extern u8 sub_80A8364(u8);
-extern bool8 IsDoubleBattle(void);
-
// this file's functions
static void ScriptCmd_loadspritegfx(void);
static void ScriptCmd_unloadspritegfx(void);
@@ -234,10 +222,10 @@ void DoMoveAnim(u16 move)
{
gAnimBankAttacker = gBankAttacker;
gAnimBankTarget = gBankTarget;
- DoBattleAnim(gBattleAnims_Moves, move, TRUE);
+ LaunchBattleAnimation(gBattleAnims_Moves, move, TRUE);
}
-void DoBattleAnim(const u8 *const animsTable[], u16 tableId, bool8 isMoveAnim)
+void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMoveAnim)
{
s32 i;
@@ -1281,7 +1269,7 @@ static void ScriptCmd_changebg(void)
s8 BattleAnimAdjustPanning(s8 pan)
{
- if (!IsContest() && gBattleSpritesDataPtr->healthBoxesData[gAnimBankAttacker].flag_x10)
+ if (!IsContest() && gBattleSpritesDataPtr->healthBoxesData[gAnimBankAttacker].statusAnimActive)
{
if (GetBankSide(gAnimBankAttacker) != SIDE_PLAYER)
pan = PAN_SIDE_OPPONENT;
@@ -1323,7 +1311,7 @@ s8 BattleAnimAdjustPanning(s8 pan)
s8 BattleAnimAdjustPanning2(s8 pan)
{
- if (!IsContest() && gBattleSpritesDataPtr->healthBoxesData[gAnimBankAttacker].flag_x10)
+ if (!IsContest() && gBattleSpritesDataPtr->healthBoxesData[gAnimBankAttacker].statusAnimActive)
{
if (GetBankSide(gAnimBankAttacker) != SIDE_PLAYER)
pan = PAN_SIDE_OPPONENT;
diff --git a/src/battle_controller_linkopponent.c b/src/battle_controller_linkopponent.c
new file mode 100644
index 000000000..fb21865ca
--- /dev/null
+++ b/src/battle_controller_linkopponent.c
@@ -0,0 +1,143 @@
+#include "global.h"
+#include "battle.h"
+#include "battle_controllers.h"
+#include "battle_message.h"
+#include "battle_interface.h"
+#include "battle_anim.h"
+#include "link.h"
+
+extern u8 gActiveBank;
+extern bool8 gDoingBattleAnim;
+extern u8 gUnknown_020244CC;
+extern void (*gBattleBankFunc[BATTLE_BANKS_COUNT])(void);
+
+// this file's functions
+void LinkOpponentHandleGetMonData(void);
+void LinkOpponentHandleGetRawMonData(void);
+void LinkOpponentHandleSetMonData(void);
+void LinkOpponentHandleSetRawMonData(void);
+void LinkOpponentHandleLoadMonSprite(void);
+void LinkOpponentHandleSwitchInAnim(void);
+void LinkOpponentHandleReturnMonToBall(void);
+void LinkOpponentHandleDrawTrainerPic(void);
+void LinkOpponentHandleTrainerSlide(void);
+void LinkOpponentHandleTrainerSlideBack(void);
+void LinkOpponentHandleFaintAnimation(void);
+void LinkOpponentHandleCmd11(void);
+void LinkOpponentHandleCmd12(void);
+void LinkOpponentHandleBallThrow(void);
+void LinkOpponentHandlePause(void);
+void LinkOpponentHandleMoveAnimation(void);
+void LinkOpponentHandlePrintString(void);
+void LinkOpponentHandlePrintStringPlayerOnly(void);
+void LinkOpponentHandleChooseAction(void);
+void LinkOpponentHandleCmd19(void);
+void LinkOpponentHandleChooseMove(void);
+void LinkOpponentHandleOpenBag(void);
+void LinkOpponentHandleChoosePokemon(void);
+void LinkOpponentHandleCmd23(void);
+void LinkOpponentHandleHealthBarUpdate(void);
+void LinkOpponentHandleExpUpdate(void);
+void LinkOpponentHandleStatusIconUpdate(void);
+void LinkOpponentHandleStatusAnimation(void);
+void LinkOpponentHandleStatusXor(void);
+void LinkOpponentHandleDataTransfer(void);
+void LinkOpponentHandleDMA3Transfer(void);
+void LinkOpponentHandlePlayBGM(void);
+void LinkOpponentHandleCmd32(void);
+void LinkOpponentHandleCmd33(void);
+void LinkOpponentHandleCmd34(void);
+void LinkOpponentHandleCmd35(void);
+void LinkOpponentHandleCmd36(void);
+void LinkOpponentHandleCmd37(void);
+void LinkOpponentHandleCmd38(void);
+void LinkOpponentHandleCmd39(void);
+void LinkOpponentHandleCmd40(void);
+void LinkOpponentHandleHitAnimation(void);
+void LinkOpponentHandleCmd42(void);
+void LinkOpponentHandleEffectivenessSound(void);
+void LinkOpponentHandlePlayFanfareOrBGM(void);
+void LinkOpponentHandleFaintingCry(void);
+void LinkOpponentHandleIntroSlide(void);
+void LinkOpponentHandleIntroTrainerBallThrow(void);
+void LinkOpponentHandleDrawPartyStatusSummary(void);
+void LinkOpponentHandleCmd49(void);
+void LinkOpponentHandleCmd50(void);
+void LinkOpponentHandleSpriteInvisibility(void);
+void LinkOpponentHandleBattleAnimation(void);
+void LinkOpponentHandleLinkStandbyMsg(void);
+void LinkOpponentHandleResetActionMoveSelection(void);
+void LinkOpponentHandleCmd55(void);
+void nullsub_92(void);
+
+void LinkOpponentBufferRunCommand(void);
+
+void (*const gLinkOpponentBufferCommands[CONTOLLER_CMDS_COUNT])(void) =
+{
+ LinkOpponentHandleGetMonData,
+ LinkOpponentHandleGetRawMonData,
+ LinkOpponentHandleSetMonData,
+ LinkOpponentHandleSetRawMonData,
+ LinkOpponentHandleLoadMonSprite,
+ LinkOpponentHandleSwitchInAnim,
+ LinkOpponentHandleReturnMonToBall,
+ LinkOpponentHandleDrawTrainerPic,
+ LinkOpponentHandleTrainerSlide,
+ LinkOpponentHandleTrainerSlideBack,
+ LinkOpponentHandleFaintAnimation,
+ LinkOpponentHandleCmd11,
+ LinkOpponentHandleCmd12,
+ LinkOpponentHandleBallThrow,
+ LinkOpponentHandlePause,
+ LinkOpponentHandleMoveAnimation,
+ LinkOpponentHandlePrintString,
+ LinkOpponentHandlePrintStringPlayerOnly,
+ LinkOpponentHandleChooseAction,
+ LinkOpponentHandleCmd19,
+ LinkOpponentHandleChooseMove,
+ LinkOpponentHandleOpenBag,
+ LinkOpponentHandleChoosePokemon,
+ LinkOpponentHandleCmd23,
+ LinkOpponentHandleHealthBarUpdate,
+ LinkOpponentHandleExpUpdate,
+ LinkOpponentHandleStatusIconUpdate,
+ LinkOpponentHandleStatusAnimation,
+ LinkOpponentHandleStatusXor,
+ LinkOpponentHandleDataTransfer,
+ LinkOpponentHandleDMA3Transfer,
+ LinkOpponentHandlePlayBGM,
+ LinkOpponentHandleCmd32,
+ LinkOpponentHandleCmd33,
+ LinkOpponentHandleCmd34,
+ LinkOpponentHandleCmd35,
+ LinkOpponentHandleCmd36,
+ LinkOpponentHandleCmd37,
+ LinkOpponentHandleCmd38,
+ LinkOpponentHandleCmd39,
+ LinkOpponentHandleCmd40,
+ LinkOpponentHandleHitAnimation,
+ LinkOpponentHandleCmd42,
+ LinkOpponentHandleEffectivenessSound,
+ LinkOpponentHandlePlayFanfareOrBGM,
+ LinkOpponentHandleFaintingCry,
+ LinkOpponentHandleIntroSlide,
+ LinkOpponentHandleIntroTrainerBallThrow,
+ LinkOpponentHandleDrawPartyStatusSummary,
+ LinkOpponentHandleCmd49,
+ LinkOpponentHandleCmd50,
+ LinkOpponentHandleSpriteInvisibility,
+ LinkOpponentHandleBattleAnimation,
+ LinkOpponentHandleLinkStandbyMsg,
+ LinkOpponentHandleResetActionMoveSelection,
+ LinkOpponentHandleCmd55,
+ nullsub_92
+};
+
+void nullsub_28(void)
+{
+}
+
+void SetBankFuncToLinkOpponentBufferRunCommand(void)
+{
+ gBattleBankFunc[gActiveBank] = LinkOpponentBufferRunCommand;
+}
diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c
new file mode 100644
index 000000000..e55d78912
--- /dev/null
+++ b/src/battle_controller_opponent.c
@@ -0,0 +1,146 @@
+#include "global.h"
+#include "battle.h"
+#include "battle_controllers.h"
+#include "battle_message.h"
+#include "battle_interface.h"
+#include "battle_anim.h"
+#include "link.h"
+
+extern u8 gActiveBank;
+extern bool8 gDoingBattleAnim;
+extern u8 gUnknown_020244CC;
+extern void (*gBattleBankFunc[BATTLE_BANKS_COUNT])(void);
+
+// this file's functions
+void OpponentHandleGetMonData(void);
+void OpponentHandleGetRawMonData(void);
+void OpponentHandleSetMonData(void);
+void OpponentHandleSetRawMonData(void);
+void OpponentHandleLoadMonSprite(void);
+void OpponentHandleSwitchInAnim(void);
+void OpponentHandleReturnMonToBall(void);
+void OpponentHandleDrawTrainerPic(void);
+void OpponentHandleTrainerSlide(void);
+void OpponentHandleTrainerSlideBack(void);
+void OpponentHandleFaintAnimation(void);
+void OpponentHandleCmd11(void);
+void OpponentHandleCmd12(void);
+void OpponentHandleBallThrow(void);
+void OpponentHandlePause(void);
+void OpponentHandleMoveAnimation(void);
+void OpponentHandlePrintString(void);
+void OpponentHandlePrintStringPlayerOnly(void);
+void OpponentHandleChooseAction(void);
+void OpponentHandleCmd19(void);
+void OpponentHandleChooseMove(void);
+void OpponentHandleOpenBag(void);
+void OpponentHandleChoosePokemon(void);
+void OpponentHandleCmd23(void);
+void OpponentHandleHealthBarUpdate(void);
+void OpponentHandleExpUpdate(void);
+void OpponentHandleStatusIconUpdate(void);
+void OpponentHandleStatusAnimation(void);
+void OpponentHandleStatusXor(void);
+void OpponentHandleDataTransfer(void);
+void OpponentHandleDMA3Transfer(void);
+void OpponentHandlePlayBGM(void);
+void OpponentHandleCmd32(void);
+void OpponentHandleCmd33(void);
+void OpponentHandleCmd34(void);
+void OpponentHandleCmd35(void);
+void OpponentHandleCmd36(void);
+void OpponentHandleCmd37(void);
+void OpponentHandleCmd38(void);
+void OpponentHandleCmd39(void);
+void OpponentHandleCmd40(void);
+void OpponentHandleHitAnimation(void);
+void OpponentHandleCmd42(void);
+void OpponentHandleEffectivenessSound(void);
+void OpponentHandlePlayFanfareOrBGM(void);
+void OpponentHandleFaintingCry(void);
+void OpponentHandleIntroSlide(void);
+void OpponentHandleIntroTrainerBallThrow(void);
+void OpponentHandleDrawPartyStatusSummary(void);
+void OpponentHandleCmd49(void);
+void OpponentHandleCmd50(void);
+void OpponentHandleSpriteInvisibility(void);
+void OpponentHandleBattleAnimation(void);
+void OpponentHandleLinkStandbyMsg(void);
+void OpponentHandleResetActionMoveSelection(void);
+void OpponentHandleCmd55(void);
+void nullsub_91(void);
+
+void OpponentBufferRunCommand(void);
+
+void (*const gOpponentBufferCommands[CONTOLLER_CMDS_COUNT])(void) =
+{
+ OpponentHandleGetMonData,
+ OpponentHandleGetRawMonData,
+ OpponentHandleSetMonData,
+ OpponentHandleSetRawMonData,
+ OpponentHandleLoadMonSprite,
+ OpponentHandleSwitchInAnim,
+ OpponentHandleReturnMonToBall,
+ OpponentHandleDrawTrainerPic,
+ OpponentHandleTrainerSlide,
+ OpponentHandleTrainerSlideBack,
+ OpponentHandleFaintAnimation,
+ OpponentHandleCmd11,
+ OpponentHandleCmd12,
+ OpponentHandleBallThrow,
+ OpponentHandlePause,
+ OpponentHandleMoveAnimation,
+ OpponentHandlePrintString,
+ OpponentHandlePrintStringPlayerOnly,
+ OpponentHandleChooseAction,
+ OpponentHandleCmd19,
+ OpponentHandleChooseMove,
+ OpponentHandleOpenBag,
+ OpponentHandleChoosePokemon,
+ OpponentHandleCmd23,
+ OpponentHandleHealthBarUpdate,
+ OpponentHandleExpUpdate,
+ OpponentHandleStatusIconUpdate,
+ OpponentHandleStatusAnimation,
+ OpponentHandleStatusXor,
+ OpponentHandleDataTransfer,
+ OpponentHandleDMA3Transfer,
+ OpponentHandlePlayBGM,
+ OpponentHandleCmd32,
+ OpponentHandleCmd33,
+ OpponentHandleCmd34,
+ OpponentHandleCmd35,
+ OpponentHandleCmd36,
+ OpponentHandleCmd37,
+ OpponentHandleCmd38,
+ OpponentHandleCmd39,
+ OpponentHandleCmd40,
+ OpponentHandleHitAnimation,
+ OpponentHandleCmd42,
+ OpponentHandleEffectivenessSound,
+ OpponentHandlePlayFanfareOrBGM,
+ OpponentHandleFaintingCry,
+ OpponentHandleIntroSlide,
+ OpponentHandleIntroTrainerBallThrow,
+ OpponentHandleDrawPartyStatusSummary,
+ OpponentHandleCmd49,
+ OpponentHandleCmd50,
+ OpponentHandleSpriteInvisibility,
+ OpponentHandleBattleAnimation,
+ OpponentHandleLinkStandbyMsg,
+ OpponentHandleResetActionMoveSelection,
+ OpponentHandleCmd55,
+ nullsub_91
+};
+
+// unknown unused data
+static const u8 gUnknown_0831C7AC[] = {0xB0, 0xB0, 0xC8, 0x98, 0x28, 0x28, 0x28, 0x20};
+
+void nullsub_26(void)
+{
+}
+
+void SetBankFuncToOpponentBufferRunCommand(void)
+{
+ gBattleBankFunc[gActiveBank] = OpponentBufferRunCommand;
+}
diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c
new file mode 100644
index 000000000..b022d3f87
--- /dev/null
+++ b/src/battle_controller_player.c
@@ -0,0 +1,3160 @@
+#include "global.h"
+#include "battle.h"
+#include "battle_controllers.h"
+#include "battle_message.h"
+#include "battle_interface.h"
+#include "battle_anim.h"
+#include "battle_link_817C95C.h"
+#include "pokemon.h"
+#include "link.h"
+#include "util.h"
+#include "main.h"
+#include "item.h"
+#include "items.h"
+#include "songs.h"
+#include "sound.h"
+#include "moves.h"
+#include "window.h"
+#include "m4a.h"
+#include "palette.h"
+#include "task.h"
+#include "text.h"
+#include "string_util.h"
+#include "bg.h"
+#include "reshow_battle_screen.h"
+#include "rng.h"
+#include "pokeball.h"
+
+extern u32 gBattleExecBuffer;
+extern u8 gActiveBank;
+extern u8 gBankSpriteIds[BATTLE_BANKS_COUNT];
+extern u8 gActionSelectionCursor[BATTLE_BANKS_COUNT];
+extern u8 gMoveSelectionCursor[BATTLE_BANKS_COUNT];
+extern u8 gAbsentBankFlags;
+extern u8 gNoOfAllBanks;
+extern bool8 gDoingBattleAnim;
+extern u8 gUnknown_020244CC;
+extern void (*gBattleBankFunc[BATTLE_BANKS_COUNT])(void);
+extern void (*gPreBattleCallback1)(void);
+extern u16 gBattlePartyID[BATTLE_BANKS_COUNT];
+extern u8 gBattleBufferA[BATTLE_BANKS_COUNT][0x200];
+extern u8 gBattleBufferB[BATTLE_BANKS_COUNT][0x200];
+extern u8 gMultiUsePlayerCursor;
+extern struct BattlePokemon gBattleMons[BATTLE_BANKS_COUNT];
+extern struct MusicPlayerInfo gMPlay_BGM;
+extern u16 gPartnerTrainerId;
+extern struct SpriteTemplate gUnknown_0202499C;
+extern u8 gBattleMonForms[BATTLE_BANKS_COUNT];
+extern u16 gScriptItemId;
+extern u8 gUnknown_0203CEE8;
+extern u8 gUnknown_0203CEE9;
+extern u8 gUnknown_0203CF00[];
+extern u8 gUnknown_03005D7C[BATTLE_BANKS_COUNT];
+extern u8 gHealthBoxesIds[BATTLE_BANKS_COUNT];
+extern u8 gBattleOutcome;
+extern u8 gNumberOfMovesToChoose;
+extern u16 gBattle_BG0_X;
+extern u16 gBattle_BG0_Y;
+extern s32 gUnknown_0203CD70;
+extern u8 gBankInMenu;
+extern u32 gBattlePalaceMoveSelectionRngValue;
+extern u32 gTransformedPersonalities[BATTLE_BANKS_COUNT];
+extern u8 gUnknown_020244B4[];
+extern u16 gUnknown_020243FC;
+extern struct UnusedControllerStruct gUnknown_02022D0C;
+
+extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
+extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
+extern const u8 gTypeNames[][7];
+extern const struct BattleMove gBattleMoves[];
+
+extern const u8 gText_BattleSwitchWhich[];
+extern const u8 gText_MoveInterfacePP[];
+extern const u8 gText_MoveInterfaceType[];
+extern const u8 gText_LinkStandby[];
+extern const u8 gText_BattleMenu[];
+extern const u8 gText_WhatWillPkmnDo[];
+extern const u8 gText_BattleYesNoChoice[];
+
+extern void sub_8172EF0(u8 bank, struct Pokemon *mon);
+extern void sub_81B89AC(u8 arg0);
+extern void sub_81AABB0(void);
+extern void sub_806A068(u16, u8);
+extern void sub_81A57E4(u8 bank, u16 stringId);
+extern void sub_81851A8(u8 *);
+
+// this file's functions
+static void PlayerHandleGetMonData(void);
+void PlayerHandleGetRawMonData(void);
+static void PlayerHandleSetMonData(void);
+static void PlayerHandleSetRawMonData(void);
+static void PlayerHandleLoadMonSprite(void);
+static void PlayerHandleSwitchInAnim(void);
+static void PlayerHandleReturnMonToBall(void);
+static void PlayerHandleDrawTrainerPic(void);
+static void PlayerHandleTrainerSlide(void);
+static void PlayerHandleTrainerSlideBack(void);
+static void PlayerHandleFaintAnimation(void);
+static void PlayerHandlePaletteFade(void);
+static void PlayerHandleSuccessBallThrowAnim(void);
+static void PlayerHandleBallThrowAnim(void);
+static void PlayerHandlePause(void);
+static void PlayerHandleMoveAnimation(void);
+static void PlayerHandlePrintString(void);
+static void PlayerHandlePrintStringPlayerOnly(void);
+static void PlayerHandleChooseAction(void);
+static void PlayerHandleUnknownYesNoBox(void);
+static void PlayerHandleChooseMove(void);
+static void PlayerHandleChooseItem(void);
+static void PlayerHandleChoosePokemon(void);
+static void PlayerHandleCmd23(void);
+static void PlayerHandleHealthBarUpdate(void);
+static void PlayerHandleExpUpdate(void);
+static void PlayerHandleStatusIconUpdate(void);
+static void PlayerHandleStatusAnimation(void);
+static void PlayerHandleStatusXor(void);
+static void PlayerHandleDataTransfer(void);
+static void PlayerHandleDMA3Transfer(void);
+static void PlayerHandlePlayBGM(void);
+static void PlayerHandleCmd32(void);
+static void PlayerHandleTwoReturnValues(void);
+static void PlayerHandleChosenMonReturnValue(void);
+static void PlayerHandleOneReturnValue(void);
+static void PlayerHandleOneReturnValue_Duplicate(void);
+static void PlayerHandleCmd37(void);
+static void PlayerHandleCmd38(void);
+static void PlayerHandleCmd39(void);
+static void PlayerHandleCmd40(void);
+static void PlayerHandleHitAnimation(void);
+static void PlayerHandleCmd42(void);
+static void PlayerHandleEffectivenessSound(void);
+static void PlayerHandlePlayFanfareOrBGM(void);
+static void PlayerHandleFaintingCry(void);
+static void PlayerHandleIntroSlide(void);
+static void PlayerHandleIntroTrainerBallThrow(void);
+static void PlayerHandleDrawPartyStatusSummary(void);
+static void PlayerHandleCmd49(void);
+static void PlayerHandleCmd50(void);
+static void PlayerHandleSpriteInvisibility(void);
+static void PlayerHandleBattleAnimation(void);
+static void PlayerHandleLinkStandbyMsg(void);
+static void PlayerHandleResetActionMoveSelection(void);
+static void PlayerHandleCmd55(void);
+static void nullsub_22(void);
+
+static void PlayerBufferRunCommand(void);
+static void HandleInputChooseTarget(void);
+static void HandleInputChooseMove(void);
+static void MoveSelectionCreateCursorAt(u8 cursorPos, u8 arg1);
+static void MoveSelectionDestroyCursorAt(u8 cursorPos);
+static void MoveSelectionDisplayPpNumber(void);
+static void MoveSelectionDisplayPpString(void);
+static void MoveSelectionDisplayMoveType(void);
+static void MoveSelectionDisplayMoveNames(void);
+static void HandleMoveSwitchting(void);
+static void sub_8058FC0(void);
+static void sub_8059828(void);
+static void CompleteWhenChoseItem(void);
+static void sub_8059544(u8 taskId);
+static void Task_PrepareToGiveExpWithExpBar(u8 taskId);
+static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8 taskId);
+static void sub_8059400(u8 taskId);
+static void sub_80595A4(u8 taskId);
+static void PrintLinkStandbyMsg(void);
+static u32 CopyPlayerMonData(u8 monId, u8 *dst);
+static void SetPlayerMonData(u8 monId);
+static void sub_805B258(u8 bank, bool8 dontClearSubstituteBit);
+static void DoSwitchOutAnimation(void);
+static void PlayerDoMoveAnimation(void);
+static void task05_08033660(u8 taskId);
+static void sub_805CE38(void);
+
+static void (*const gPlayerBufferCommands[CONTOLLER_CMDS_COUNT])(void) =
+{
+ PlayerHandleGetMonData,
+ PlayerHandleGetRawMonData,
+ PlayerHandleSetMonData,
+ PlayerHandleSetRawMonData,
+ PlayerHandleLoadMonSprite,
+ PlayerHandleSwitchInAnim,
+ PlayerHandleReturnMonToBall,
+ PlayerHandleDrawTrainerPic,
+ PlayerHandleTrainerSlide,
+ PlayerHandleTrainerSlideBack,
+ PlayerHandleFaintAnimation,
+ PlayerHandlePaletteFade,
+ PlayerHandleSuccessBallThrowAnim,
+ PlayerHandleBallThrowAnim,
+ PlayerHandlePause,
+ PlayerHandleMoveAnimation,
+ PlayerHandlePrintString,
+ PlayerHandlePrintStringPlayerOnly,
+ PlayerHandleChooseAction,
+ PlayerHandleUnknownYesNoBox,
+ PlayerHandleChooseMove,
+ PlayerHandleChooseItem,
+ PlayerHandleChoosePokemon,
+ PlayerHandleCmd23,
+ PlayerHandleHealthBarUpdate,
+ PlayerHandleExpUpdate,
+ PlayerHandleStatusIconUpdate,
+ PlayerHandleStatusAnimation,
+ PlayerHandleStatusXor,
+ PlayerHandleDataTransfer,
+ PlayerHandleDMA3Transfer,
+ PlayerHandlePlayBGM,
+ PlayerHandleCmd32,
+ PlayerHandleTwoReturnValues,
+ PlayerHandleChosenMonReturnValue,
+ PlayerHandleOneReturnValue,
+ PlayerHandleOneReturnValue_Duplicate,
+ PlayerHandleCmd37,
+ PlayerHandleCmd38,
+ PlayerHandleCmd39,
+ PlayerHandleCmd40,
+ PlayerHandleHitAnimation,
+ PlayerHandleCmd42,
+ PlayerHandleEffectivenessSound,
+ PlayerHandlePlayFanfareOrBGM,
+ PlayerHandleFaintingCry,
+ PlayerHandleIntroSlide,
+ PlayerHandleIntroTrainerBallThrow,
+ PlayerHandleDrawPartyStatusSummary,
+ PlayerHandleCmd49,
+ PlayerHandleCmd50,
+ PlayerHandleSpriteInvisibility,
+ PlayerHandleBattleAnimation,
+ PlayerHandleLinkStandbyMsg,
+ PlayerHandleResetActionMoveSelection,
+ PlayerHandleCmd55,
+ nullsub_22
+};
+
+static const u8 sTargetIdentities[] = {IDENTITY_PLAYER_MON1, IDENTITY_PLAYER_MON2, IDENTITY_OPPONENT_MON2, IDENTITY_OPPONENT_MON1};
+
+// unknown unused data
+static const u8 gUnknown_0831C5FC[] = {0x48, 0x48, 0x20, 0x5a, 0x50, 0x50, 0x50, 0x58};
+
+void nullsub_21(void)
+{
+}
+
+void SetBankFuncToPlayerBufferRunCommand(void)
+{
+ gBattleBankFunc[gActiveBank] = PlayerBufferRunCommand;
+ gDoingBattleAnim = FALSE;
+ gUnknown_020244CC = 0;
+}
+
+static void PlayerBufferExecCompleted(void)
+{
+ gBattleBankFunc[gActiveBank] = PlayerBufferRunCommand;
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ u8 playerId = GetMultiplayerId();
+
+ PrepareBufferDataTransferLink(2, 4, &playerId);
+ gBattleBufferA[gActiveBank][0] = CONTOLLER_CMDS_COUNT - 1;
+ }
+ else
+ {
+ gBattleExecBuffer &= ~gBitTable[gActiveBank];
+ }
+}
+
+static void PlayerBufferRunCommand(void)
+{
+ if (gBattleExecBuffer & gBitTable[gActiveBank])
+ {
+ if (gBattleBufferA[gActiveBank][0] < ARRAY_COUNT(gPlayerBufferCommands))
+ gPlayerBufferCommands[gBattleBufferA[gActiveBank][0]]();
+ else
+ PlayerBufferExecCompleted();
+ }
+}
+
+static void CompleteOnBankSpritePosX_0(void)
+{
+ if (gSprites[gBankSpriteIds[gActiveBank]].pos2.x == 0)
+ PlayerBufferExecCompleted();
+}
+
+static void HandleInputChooseAction(void)
+{
+ u16 itemId = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8);
+
+ dp11b_obj_instanciate(gActiveBank, 1, 7, 1);
+ dp11b_obj_instanciate(gActiveBank, 0, 7, 1);
+
+ if (gMain.newAndRepeatedKeys & DPAD_ANY && gSaveBlock2Ptr->optionsButtonMode == 2)
+ gUnknown_020244CC++;
+ else
+ gUnknown_020244CC = 0;
+
+ if (gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+
+ switch (gActionSelectionCursor[gActiveBank])
+ {
+ case 0:
+ EmitTwoReturnValues(1, ACTION_USE_MOVE, 0);
+ break;
+ case 1:
+ EmitTwoReturnValues(1, ACTION_USE_ITEM, 0);
+ break;
+ case 2:
+ EmitTwoReturnValues(1, ACTION_SWITCH, 0);
+ break;
+ case 3:
+ EmitTwoReturnValues(1, ACTION_RUN, 0);
+ break;
+ }
+ PlayerBufferExecCompleted();
+ }
+ else if (gMain.newKeys & DPAD_LEFT)
+ {
+ if (gActionSelectionCursor[gActiveBank] & 1) // if is ACTION_USE_ITEM or ACTION_RUN
+ {
+ PlaySE(SE_SELECT);
+ ActionSelectionDestroyCursorAt(gActionSelectionCursor[gActiveBank]);
+ gActionSelectionCursor[gActiveBank] ^= 1;
+ ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBank], 0);
+ }
+ }
+ else if (gMain.newKeys & DPAD_RIGHT)
+ {
+ if (!(gActionSelectionCursor[gActiveBank] & 1)) // if is ACTION_USE_MOVE or ACTION_SWITCH
+ {
+ PlaySE(SE_SELECT);
+ ActionSelectionDestroyCursorAt(gActionSelectionCursor[gActiveBank]);
+ gActionSelectionCursor[gActiveBank] ^= 1;
+ ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBank], 0);
+ }
+ }
+ else if (gMain.newKeys & DPAD_UP)
+ {
+ if (gActionSelectionCursor[gActiveBank] & 2) // if is ACTION_SWITCH or ACTION_RUN
+ {
+ PlaySE(SE_SELECT);
+ ActionSelectionDestroyCursorAt(gActionSelectionCursor[gActiveBank]);
+ gActionSelectionCursor[gActiveBank] ^= 2;
+ ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBank], 0);
+ }
+ }
+ else if (gMain.newKeys & DPAD_DOWN)
+ {
+ if (!(gActionSelectionCursor[gActiveBank] & 2)) // if is ACTION_USE_MOVE or ACTION_USE_ITEM
+ {
+ PlaySE(SE_SELECT);
+ ActionSelectionDestroyCursorAt(gActionSelectionCursor[gActiveBank]);
+ gActionSelectionCursor[gActiveBank] ^= 2;
+ ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBank], 0);
+ }
+ }
+ else if (gMain.newKeys & B_BUTTON || gUnknown_020244CC > 59)
+ {
+ if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ && GetBankIdentity(gActiveBank) == IDENTITY_PLAYER_MON2
+ && !(gAbsentBankFlags & gBitTable[GetBankByIdentity(IDENTITY_PLAYER_MON1)])
+ && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ {
+ if (gBattleBufferA[gActiveBank][1] == ACTION_USE_ITEM)
+ {
+ // Add item to bag if it is a ball
+ if (itemId <= ITEM_PREMIER_BALL)
+ AddBagItem(itemId, 1);
+ else
+ return;
+ }
+ PlaySE(SE_SELECT);
+ EmitTwoReturnValues(1, ACTION_CANCEL_PARTNER, 0);
+ PlayerBufferExecCompleted();
+ }
+ }
+ else if (gMain.newKeys & START_BUTTON)
+ {
+ SwapHpBarsWithHpText();
+ }
+}
+
+static void sub_80577F0(void) // unused
+{
+ dp11b_obj_free(gActiveBank, 1);
+ dp11b_obj_free(gActiveBank, 0);
+ gBattleBankFunc[gActiveBank] = HandleInputChooseTarget;
+}
+
+static void HandleInputChooseTarget(void)
+{
+ s32 i;
+ u8 identities[4];
+ memcpy(identities, sTargetIdentities, ARRAY_COUNT(sTargetIdentities));
+
+ dp11b_obj_instanciate(gMultiUsePlayerCursor, 1, 0xF, 1);
+
+ // what a weird loop
+ i = 0;
+ if (gNoOfAllBanks != 0)
+ {
+ do
+ {
+ if (i != gMultiUsePlayerCursor)
+ dp11b_obj_free(i, 1);
+ i++;
+ } while (i < gNoOfAllBanks);
+ }
+
+ if (gMain.heldKeys & DPAD_ANY && gSaveBlock2Ptr->optionsButtonMode == 2)
+ gUnknown_020244CC++;
+ else
+ gUnknown_020244CC = 0;
+
+ if (gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ gSprites[gBankSpriteIds[gMultiUsePlayerCursor]].callback = sub_8039B2C;
+ EmitTwoReturnValues(1, 10, gMoveSelectionCursor[gActiveBank] | (gMultiUsePlayerCursor << 8));
+ dp11b_obj_free(gMultiUsePlayerCursor, 1);
+ PlayerBufferExecCompleted();
+ }
+ else if (gMain.newKeys & B_BUTTON || gUnknown_020244CC > 59)
+ {
+ PlaySE(SE_SELECT);
+ gSprites[gBankSpriteIds[gMultiUsePlayerCursor]].callback = sub_8039B2C;
+ gBattleBankFunc[gActiveBank] = HandleInputChooseMove;
+ dp11b_obj_instanciate(gActiveBank, 1, 7, 1);
+ dp11b_obj_instanciate(gActiveBank, 0, 7, 1);
+ dp11b_obj_free(gMultiUsePlayerCursor, 1);
+ }
+ else if (gMain.newKeys & (DPAD_LEFT | DPAD_UP))
+ {
+ PlaySE(SE_SELECT);
+ gSprites[gBankSpriteIds[gMultiUsePlayerCursor]].callback = sub_8039B2C;
+
+ do
+ {
+ u8 currSelIdentity = GetBankIdentity(gMultiUsePlayerCursor);
+
+ for (i = 0; i < BATTLE_BANKS_COUNT; i++)
+ {
+ if (currSelIdentity == identities[i])
+ break;
+ }
+ do
+ {
+ if (--i < 0)
+ i = 4; // UB: array out of range
+ gMultiUsePlayerCursor = GetBankByIdentity(identities[i]);
+ } while (gMultiUsePlayerCursor == gNoOfAllBanks);
+
+ i = 0;
+ switch (GetBankIdentity(gMultiUsePlayerCursor))
+ {
+ case IDENTITY_PLAYER_MON1:
+ case IDENTITY_PLAYER_MON2:
+ if (gActiveBank != gMultiUsePlayerCursor)
+ i++;
+ else if (gBattleMoves[GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1 + gMoveSelectionCursor[gActiveBank])].target & MOVE_TARGET_USER)
+ i++;
+ break;
+ case IDENTITY_OPPONENT_MON1:
+ case IDENTITY_OPPONENT_MON2:
+ i++;
+ break;
+ }
+
+ if (gAbsentBankFlags & gBitTable[gMultiUsePlayerCursor])
+ i = 0;
+ } while (i == 0);
+ gSprites[gBankSpriteIds[gMultiUsePlayerCursor]].callback = sub_8039AD8;
+ }
+ else if (gMain.newKeys & (DPAD_RIGHT | DPAD_DOWN))
+ {
+ PlaySE(SE_SELECT);
+ gSprites[gBankSpriteIds[gMultiUsePlayerCursor]].callback = sub_8039B2C;
+
+ do
+ {
+ u8 currSelIdentity = GetBankIdentity(gMultiUsePlayerCursor);
+
+ for (i = 0; i < BATTLE_BANKS_COUNT; i++)
+ {
+ if (currSelIdentity == identities[i])
+ break;
+ }
+ do
+ {
+ if (++i > 3)
+ i = 0;
+ gMultiUsePlayerCursor = GetBankByIdentity(identities[i]);
+ } while (gMultiUsePlayerCursor == gNoOfAllBanks);
+
+ i = 0;
+ switch (GetBankIdentity(gMultiUsePlayerCursor))
+ {
+ case IDENTITY_PLAYER_MON1:
+ case IDENTITY_PLAYER_MON2:
+ if (gActiveBank != gMultiUsePlayerCursor)
+ i++;
+ else if (gBattleMoves[GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1 + gMoveSelectionCursor[gActiveBank])].target & MOVE_TARGET_USER)
+ i++;
+ break;
+ case IDENTITY_OPPONENT_MON1:
+ case IDENTITY_OPPONENT_MON2:
+ i++;
+ break;
+ }
+
+ if (gAbsentBankFlags & gBitTable[gMultiUsePlayerCursor])
+ i = 0;
+ } while (i == 0);
+ gSprites[gBankSpriteIds[gMultiUsePlayerCursor]].callback = sub_8039AD8;
+ }
+}
+
+static void HandleInputChooseMove(void)
+{
+ bool32 canSelectTarget = FALSE;
+ struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct*)(&gBattleBufferA[gActiveBank][4]);
+
+ if (gMain.heldKeys & DPAD_ANY && gSaveBlock2Ptr->optionsButtonMode == 2)
+ gUnknown_020244CC++;
+ else
+ gUnknown_020244CC = 0;
+
+ if (gMain.newKeys & A_BUTTON)
+ {
+ u8 moveTarget;
+
+ PlaySE(SE_SELECT);
+ if (moveInfo->moves[gMoveSelectionCursor[gActiveBank]] == MOVE_CURSE)
+ {
+ if (moveInfo->monType1 != TYPE_GHOST && moveInfo->monType2 != TYPE_GHOST)
+ moveTarget = MOVE_TARGET_x10;
+ else
+ moveTarget = MOVE_TARGET_SELECTED;
+ }
+ else
+ {
+ moveTarget = gBattleMoves[moveInfo->moves[gMoveSelectionCursor[gActiveBank]]].target;
+ }
+
+ if (moveTarget & MOVE_TARGET_x10)
+ gMultiUsePlayerCursor = gActiveBank;
+ else
+ gMultiUsePlayerCursor = GetBankByIdentity((GetBankIdentity(gActiveBank) & BIT_SIDE) ^ BIT_SIDE);
+
+ if (!gBattleBufferA[gActiveBank][1]) // not a double battle
+ {
+ if (moveTarget & MOVE_TARGET_USER && !gBattleBufferA[gActiveBank][2])
+ canSelectTarget++;
+ }
+ else // double battle
+ {
+ if (!(moveTarget & (MOVE_TARGET_RANDOM | MOVE_TARGET_BOTH | MOVE_TARGET_DEPENDS | MOVE_TARGET_FOES_AND_ALLY | MOVE_TARGET_OPPONENTS_FIELD | MOVE_TARGET_x10)))
+ canSelectTarget++; // either selected or user
+
+ if (moveInfo->currentPp[gMoveSelectionCursor[gActiveBank]] == 0)
+ {
+ canSelectTarget = FALSE;
+ }
+ else if (!(moveTarget & (MOVE_TARGET_x10 | MOVE_TARGET_USER)) && CountAliveMonsInBattle(BATTLE_ALIVE_EXCEPT_ACTIVE) <= 1)
+ {
+ gMultiUsePlayerCursor = GetDefaultMoveTarget(gActiveBank);
+ canSelectTarget = FALSE;
+ }
+ }
+
+ if (!canSelectTarget)
+ {
+ EmitTwoReturnValues(1, 10, gMoveSelectionCursor[gActiveBank] | (gMultiUsePlayerCursor << 8));
+ PlayerBufferExecCompleted();
+ }
+ else
+ {
+ gBattleBankFunc[gActiveBank] = HandleInputChooseTarget;
+
+ if (moveTarget & (MOVE_TARGET_x10 | MOVE_TARGET_USER))
+ gMultiUsePlayerCursor = gActiveBank;
+ else if (gAbsentBankFlags & gBitTable[GetBankByIdentity(IDENTITY_OPPONENT_MON1)])
+ gMultiUsePlayerCursor = GetBankByIdentity(IDENTITY_OPPONENT_MON2);
+ else
+ gMultiUsePlayerCursor = GetBankByIdentity(IDENTITY_OPPONENT_MON1);
+
+ gSprites[gBankSpriteIds[gMultiUsePlayerCursor]].callback = sub_8039AD8;
+ }
+ }
+ else if (gMain.newKeys & B_BUTTON || gUnknown_020244CC > 59)
+ {
+ PlaySE(SE_SELECT);
+ EmitTwoReturnValues(1, 10, 0xFFFF);
+ PlayerBufferExecCompleted();
+ }
+ else if (gMain.newKeys & DPAD_LEFT)
+ {
+ if (gMoveSelectionCursor[gActiveBank] & 1)
+ {
+ MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBank]);
+ gMoveSelectionCursor[gActiveBank] ^= 1;
+ PlaySE(SE_SELECT);
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBank], 0);
+ MoveSelectionDisplayPpNumber();
+ MoveSelectionDisplayMoveType();
+ }
+ }
+ else if (gMain.newKeys & DPAD_RIGHT)
+ {
+ if (!(gMoveSelectionCursor[gActiveBank] & 1)
+ && (gMoveSelectionCursor[gActiveBank] ^ 1) < gNumberOfMovesToChoose)
+ {
+ MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBank]);
+ gMoveSelectionCursor[gActiveBank] ^= 1;
+ PlaySE(SE_SELECT);
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBank], 0);
+ MoveSelectionDisplayPpNumber();
+ MoveSelectionDisplayMoveType();
+ }
+ }
+ else if (gMain.newKeys & DPAD_UP)
+ {
+ if (gMoveSelectionCursor[gActiveBank] & 2)
+ {
+ MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBank]);
+ gMoveSelectionCursor[gActiveBank] ^= 2;
+ PlaySE(SE_SELECT);
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBank], 0);
+ MoveSelectionDisplayPpNumber();
+ MoveSelectionDisplayMoveType();
+ }
+ }
+ else if (gMain.newKeys & DPAD_DOWN)
+ {
+ if (!(gMoveSelectionCursor[gActiveBank] & 2)
+ && (gMoveSelectionCursor[gActiveBank] ^ 2) < gNumberOfMovesToChoose)
+ {
+ MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBank]);
+ gMoveSelectionCursor[gActiveBank] ^= 2;
+ PlaySE(SE_SELECT);
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBank], 0);
+ MoveSelectionDisplayPpNumber();
+ MoveSelectionDisplayMoveType();
+ }
+ }
+ else if (gMain.newKeys & SELECT_BUTTON)
+ {
+ if (gNumberOfMovesToChoose > 1 && !(gBattleTypeFlags & BATTLE_TYPE_LINK))
+ {
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBank], 29);
+
+ if (gMoveSelectionCursor[gActiveBank] != 0)
+ gMultiUsePlayerCursor = 0;
+ else
+ gMultiUsePlayerCursor = gMoveSelectionCursor[gActiveBank] + 1;
+
+ MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 27);
+ BattleHandleAddTextPrinter(gText_BattleSwitchWhich, 0xB);
+ gBattleBankFunc[gActiveBank] = HandleMoveSwitchting;
+ }
+ }
+}
+
+u32 sub_8057FBC(void) // unused
+{
+ u32 var = 0;
+
+ if (gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ var = 1;
+ }
+ if (gMain.newKeys & B_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ gBattle_BG0_X = 0;
+ gBattle_BG0_Y = 0x140;
+ var = 0xFF;
+ }
+ if (gMain.newKeys & DPAD_LEFT && gMoveSelectionCursor[gActiveBank] & 1)
+ {
+ MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBank]);
+ gMoveSelectionCursor[gActiveBank] ^= 1;
+ PlaySE(SE_SELECT);
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBank], 0);
+ }
+ if (gMain.newKeys & DPAD_RIGHT && !(gMoveSelectionCursor[gActiveBank] & 1)
+ && (gMoveSelectionCursor[gActiveBank] ^ 1) < gNumberOfMovesToChoose)
+ {
+ MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBank]);
+ gMoveSelectionCursor[gActiveBank] ^= 1;
+ PlaySE(SE_SELECT);
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBank], 0);
+ }
+ if (gMain.newKeys & DPAD_UP && gMoveSelectionCursor[gActiveBank] & 2)
+ {
+ MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBank]);
+ gMoveSelectionCursor[gActiveBank] ^= 2;
+ PlaySE(SE_SELECT);
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBank], 0);
+ }
+ if (gMain.newKeys & DPAD_DOWN && !(gMoveSelectionCursor[gActiveBank] & 2)
+ && (gMoveSelectionCursor[gActiveBank] ^ 2) < gNumberOfMovesToChoose)
+ {
+ MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBank]);
+ gMoveSelectionCursor[gActiveBank] ^= 2;
+ PlaySE(SE_SELECT);
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBank], 0);
+ }
+
+ return var;
+}
+
+static void HandleMoveSwitchting(void)
+{
+ u8 perMovePPBonuses[4];
+ struct ChooseMoveStruct moveStruct;
+ u8 totalPPBonuses;
+
+ if (gMain.newKeys & (A_BUTTON | SELECT_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+
+ if (gMoveSelectionCursor[gActiveBank] != gMultiUsePlayerCursor)
+ {
+ struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct*)(&gBattleBufferA[gActiveBank][4]);
+ s32 i;
+
+ // swap moves and pp
+ i = moveInfo->moves[gMoveSelectionCursor[gActiveBank]];
+ moveInfo->moves[gMoveSelectionCursor[gActiveBank]] = moveInfo->moves[gMultiUsePlayerCursor];
+ moveInfo->moves[gMultiUsePlayerCursor] = i;
+
+ i = moveInfo->currentPp[gMoveSelectionCursor[gActiveBank]];
+ moveInfo->currentPp[gMoveSelectionCursor[gActiveBank]] = moveInfo->currentPp[gMultiUsePlayerCursor];
+ moveInfo->currentPp[gMultiUsePlayerCursor] = i;
+
+ i = moveInfo->maxPp[gMoveSelectionCursor[gActiveBank]];
+ moveInfo->maxPp[gMoveSelectionCursor[gActiveBank]] = moveInfo->maxPp[gMultiUsePlayerCursor];
+ moveInfo->maxPp[gMultiUsePlayerCursor] = i;
+
+ if (gDisableStructs[gActiveBank].unk18_b & gBitTable[gMoveSelectionCursor[gActiveBank]])
+ {
+ gDisableStructs[gActiveBank].unk18_b &= (~gBitTable[gMoveSelectionCursor[gActiveBank]]);
+ gDisableStructs[gActiveBank].unk18_b |= gBitTable[gMultiUsePlayerCursor];
+ }
+
+ MoveSelectionDisplayMoveNames();
+
+ for (i = 0; i < 4; i++)
+ perMovePPBonuses[i] = (gBattleMons[gActiveBank].ppBonuses & (3 << (i * 2))) >> (i * 2);
+
+ totalPPBonuses = perMovePPBonuses[gMoveSelectionCursor[gActiveBank]];
+ perMovePPBonuses[gMoveSelectionCursor[gActiveBank]] = perMovePPBonuses[gMultiUsePlayerCursor];
+ perMovePPBonuses[gMultiUsePlayerCursor] = totalPPBonuses;
+
+ totalPPBonuses = 0;
+ for (i = 0; i < 4; i++)
+ totalPPBonuses |= perMovePPBonuses[i] << (i * 2);
+
+ gBattleMons[gActiveBank].ppBonuses = totalPPBonuses;
+
+ for (i = 0; i < 4; i++)
+ {
+ gBattleMons[gActiveBank].moves[i] = moveInfo->moves[i];
+ gBattleMons[gActiveBank].pp[i] = moveInfo->currentPp[i];
+ }
+
+ if (!(gBattleMons[gActiveBank].status2 & STATUS2_TRANSFORMED))
+ {
+ for (i = 0; i < 4; i++)
+ {
+ moveStruct.moves[i] = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1 + i);
+ moveStruct.currentPp[i] = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_PP1 + i);
+ }
+
+ totalPPBonuses = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_PP_BONUSES);
+ for (i = 0; i < 4; i++)
+ perMovePPBonuses[i] = (totalPPBonuses & (3 << (i * 2))) >> (i * 2);
+
+ i = moveStruct.moves[gMoveSelectionCursor[gActiveBank]];
+ moveStruct.moves[gMoveSelectionCursor[gActiveBank]] = moveStruct.moves[gMultiUsePlayerCursor];
+ moveStruct.moves[gMultiUsePlayerCursor] = i;
+
+ i = moveStruct.currentPp[gMoveSelectionCursor[gActiveBank]];
+ moveStruct.currentPp[gMoveSelectionCursor[gActiveBank]] = moveStruct.currentPp[gMultiUsePlayerCursor];
+ moveStruct.currentPp[gMultiUsePlayerCursor] = i;
+
+ totalPPBonuses = perMovePPBonuses[gMoveSelectionCursor[gActiveBank]];
+ perMovePPBonuses[gMoveSelectionCursor[gActiveBank]] = perMovePPBonuses[gMultiUsePlayerCursor];
+ perMovePPBonuses[gMultiUsePlayerCursor] = totalPPBonuses;
+
+ totalPPBonuses = 0;
+ for (i = 0; i < 4; i++)
+ totalPPBonuses |= perMovePPBonuses[i] << (i * 2);
+
+ for (i = 0; i < 4; i++)
+ {
+ SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1 + i, &moveStruct.moves[i]);
+ SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_PP1 + i, &moveStruct.currentPp[i]);
+ }
+
+ SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_PP_BONUSES, &totalPPBonuses);
+ }
+ }
+
+ gBattleBankFunc[gActiveBank] = HandleInputChooseMove;
+ gMoveSelectionCursor[gActiveBank] = gMultiUsePlayerCursor;
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBank], 0);
+ MoveSelectionDisplayPpString();
+ MoveSelectionDisplayPpNumber();
+ MoveSelectionDisplayMoveType();
+ }
+ else if (gMain.newKeys & (B_BUTTON | SELECT_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ MoveSelectionDestroyCursorAt(gMultiUsePlayerCursor);
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBank], 0);
+ gBattleBankFunc[gActiveBank] = HandleInputChooseMove;
+ MoveSelectionDisplayPpString();
+ MoveSelectionDisplayPpNumber();
+ MoveSelectionDisplayMoveType();
+ }
+ else if (gMain.newKeys & DPAD_LEFT)
+ {
+ if (gMultiUsePlayerCursor & 1)
+ {
+ if (gMultiUsePlayerCursor == gMoveSelectionCursor[gActiveBank])
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBank], 29);
+ else
+ MoveSelectionDestroyCursorAt(gMultiUsePlayerCursor);
+
+ gMultiUsePlayerCursor ^= 1;
+ PlaySE(SE_SELECT);
+
+ if (gMultiUsePlayerCursor == gMoveSelectionCursor[gActiveBank])
+ MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 0);
+ else
+ MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 27);
+ }
+ }
+ else if (gMain.newKeys & DPAD_RIGHT)
+ {
+ if (!(gMultiUsePlayerCursor & 1) && (gMultiUsePlayerCursor ^ 1) < gNumberOfMovesToChoose)
+ {
+ if (gMultiUsePlayerCursor == gMoveSelectionCursor[gActiveBank])
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBank], 29);
+ else
+ MoveSelectionDestroyCursorAt(gMultiUsePlayerCursor);
+
+ gMultiUsePlayerCursor ^= 1;
+ PlaySE(SE_SELECT);
+
+ if (gMultiUsePlayerCursor == gMoveSelectionCursor[gActiveBank])
+ MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 0);
+ else
+ MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 27);
+ }
+ }
+ else if (gMain.newKeys & DPAD_UP)
+ {
+ if (gMultiUsePlayerCursor & 2)
+ {
+ if (gMultiUsePlayerCursor == gMoveSelectionCursor[gActiveBank])
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBank], 29);
+ else
+ MoveSelectionDestroyCursorAt(gMultiUsePlayerCursor);
+
+ gMultiUsePlayerCursor ^= 2;
+ PlaySE(SE_SELECT);
+
+ if (gMultiUsePlayerCursor == gMoveSelectionCursor[gActiveBank])
+ MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 0);
+ else
+ MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 27);
+ }
+ }
+ else if (gMain.newKeys & DPAD_DOWN)
+ {
+ if (!(gMultiUsePlayerCursor & 2) && (gMultiUsePlayerCursor ^ 2) < gNumberOfMovesToChoose)
+ {
+ if (gMultiUsePlayerCursor == gMoveSelectionCursor[gActiveBank])
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBank], 29);
+ else
+ MoveSelectionDestroyCursorAt(gMultiUsePlayerCursor);
+
+ gMultiUsePlayerCursor ^= 2;
+ PlaySE(SE_SELECT);
+
+ if (gMultiUsePlayerCursor == gMoveSelectionCursor[gActiveBank])
+ MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 0);
+ else
+ MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 27);
+ }
+ }
+}
+
+static void sub_80586F8(void)
+{
+ if (gLinkVSyncDisabled == 0)
+ {
+ if (gReceivedRemoteLinkPlayers == 0)
+ {
+ m4aSongNumStop(SE_HINSI);
+ gMain.inBattle = 0;
+ gMain.callback1 = gPreBattleCallback1;
+ SetMainCallback2(sub_8038D64);
+ if (gBattleOutcome == BATTLE_WON)
+ sub_817E3F4();
+ FreeAllWindowBuffers();
+ }
+ }
+ else
+ {
+ if (sub_800A520())
+ {
+ m4aSongNumStop(SE_HINSI);
+ gMain.inBattle = 0;
+ gMain.callback1 = gPreBattleCallback1;
+ SetMainCallback2(sub_8038D64);
+ if (gBattleOutcome == BATTLE_WON)
+ sub_817E3F4();
+ FreeAllWindowBuffers();
+ }
+ }
+}
+
+void sub_80587B0(void)
+{
+ if (!gPaletteFade.active)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ if (sub_800A520())
+ {
+ if (gLinkVSyncDisabled == 0)
+ sub_800AC34();
+ else
+ sub_800ADF8();
+
+ gBattleBankFunc[gActiveBank] = sub_80586F8;
+ }
+ }
+ else
+ {
+ m4aSongNumStop(SE_HINSI);
+ gMain.inBattle = 0;
+ gMain.callback1 = gPreBattleCallback1;
+ SetMainCallback2(gMain.savedCallback);
+ }
+ }
+}
+
+static void CompleteOnBankSpriteCallbackDummy(void)
+{
+ if (gSprites[gBankSpriteIds[gActiveBank]].callback == SpriteCallbackDummy)
+ PlayerBufferExecCompleted();
+}
+
+static void CompleteOnBankSpriteCallbackDummy2(void)
+{
+ if (gSprites[gBankSpriteIds[gActiveBank]].callback == SpriteCallbackDummy)
+ PlayerBufferExecCompleted();
+}
+
+static void sub_80588B4(void)
+{
+ if (gSprites[gBankSpriteIds[gActiveBank]].callback == SpriteCallbackDummy)
+ {
+ nullsub_25(gSaveBlock2Ptr->playerGender);
+ FreeSpriteOamMatrix(&gSprites[gBankSpriteIds[gActiveBank]]);
+ DestroySprite(&gSprites[gBankSpriteIds[gActiveBank]]);
+ PlayerBufferExecCompleted();
+ }
+}
+
+static void sub_8058924(void)
+{
+ if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_9 == 0xFF)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_9 = 0;
+ PlayerBufferExecCompleted();
+ }
+}
+
+static void sub_805896C(void)
+{
+ bool8 var = FALSE;
+
+ if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI)))
+ {
+ if (gSprites[gHealthBoxesIds[gActiveBank]].callback == SpriteCallbackDummy)
+ var = TRUE;
+ }
+ else
+ {
+ if (gSprites[gHealthBoxesIds[gActiveBank]].callback == SpriteCallbackDummy
+ && gSprites[gHealthBoxesIds[gActiveBank ^ BIT_MON]].callback == SpriteCallbackDummy)
+ var = TRUE;
+ }
+
+ if (var && gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_1_x1
+ && gBattleSpritesDataPtr->healthBoxesData[gActiveBank ^ BIT_MON].field_1_x1)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].flag_x80 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_1_x1 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank ^ BIT_MON].flag_x80 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank ^ BIT_MON].field_1_x1 = 0;
+ FreeSpriteTilesByTag(0x27F9);
+ FreeSpritePaletteByTag(0x27F9);
+
+ sub_805E990(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+
+ if (IsDoubleBattle())
+ sub_805E990(&gPlayerParty[gBattlePartyID[gActiveBank ^ BIT_MON]], gActiveBank ^ BIT_MON);
+
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_9 = 3;
+ gBattleBankFunc[gActiveBank] = sub_8058924;
+ }
+}
+
+static void sub_8058B40(void)
+{
+ bool32 r9 = FALSE;
+ bool32 r8 = FALSE;
+
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].flag_x80 && !gBattleSpritesDataPtr->healthBoxesData[gActiveBank].flag_x8)
+ sub_8172EF0(gActiveBank, &gPlayerParty[gBattlePartyID[gActiveBank]]);
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank ^ BIT_MON].flag_x80 && !gBattleSpritesDataPtr->healthBoxesData[gActiveBank ^ BIT_MON].flag_x8)
+ sub_8172EF0(gActiveBank ^ BIT_MON, &gPlayerParty[gBattlePartyID[gActiveBank ^ BIT_MON]]);
+
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].flag_x8 && !gBattleSpritesDataPtr->healthBoxesData[gActiveBank ^ BIT_MON].flag_x8)
+ {
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_1_x80)
+ {
+ if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ {
+ UpdateHealthboxAttribute(gHealthBoxesIds[gActiveBank ^ BIT_MON], &gPlayerParty[gBattlePartyID[gActiveBank ^ BIT_MON]], HEALTHBOX_ALL);
+ sub_8076918(gActiveBank ^ BIT_MON);
+ SetHealthboxSpriteVisible(gHealthBoxesIds[gActiveBank ^ BIT_MON]);
+ }
+ UpdateHealthboxAttribute(gHealthBoxesIds[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], HEALTHBOX_ALL);
+ sub_8076918(gActiveBank);
+ SetHealthboxSpriteVisible(gHealthBoxesIds[gActiveBank]);
+ }
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_1_x80 = 1;
+ }
+
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_1_x40
+ && gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_1_x80
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBank ^ BIT_MON].field_1_x40
+ && !IsCryPlayingOrClearCrySongs())
+ {
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_1_x20)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_LINK)
+ m4aMPlayContinue(&gMPlay_BGM);
+ else
+ m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100);
+ }
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_1_x20 = 1;
+ r9 = TRUE;
+ }
+
+ if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI)))
+ {
+ if (gSprites[gUnknown_03005D7C[gActiveBank]].callback == SpriteCallbackDummy
+ && gSprites[gBankSpriteIds[gActiveBank]].callback == SpriteCallbackDummy)
+ {
+ r8 = TRUE;
+ }
+ }
+ else
+ {
+ if (gSprites[gUnknown_03005D7C[gActiveBank]].callback == SpriteCallbackDummy
+ && gSprites[gBankSpriteIds[gActiveBank]].callback == SpriteCallbackDummy
+ && gSprites[gUnknown_03005D7C[gActiveBank ^ BIT_MON]].callback == SpriteCallbackDummy
+ && gSprites[gBankSpriteIds[gActiveBank ^ BIT_MON]].callback == SpriteCallbackDummy)
+ {
+ r8 = TRUE;
+ }
+ }
+
+ if (r9 && r8)
+ {
+ if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ DestroySprite(&gSprites[gUnknown_03005D7C[gActiveBank ^ BIT_MON]]);
+ DestroySprite(&gSprites[gUnknown_03005D7C[gActiveBank]]);
+
+ gBattleSpritesDataPtr->animationData->field_9_x1 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_1_x20 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_1_x80 = 0;
+
+ gBattleBankFunc[gActiveBank] = sub_805896C;
+ }
+}
+
+static void sub_8058EDC(void)
+{
+ if (gSprites[gHealthBoxesIds[gActiveBank]].callback == SpriteCallbackDummy
+ && gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_1_x1
+ && gSprites[gBankSpriteIds[gActiveBank]].callback == SpriteCallbackDummy)
+ {
+ SetBattleSpriteInvisibilityBitToSpriteInvisibility(gActiveBank);
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].flag_x80 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_1_x1 = 0;
+ FreeSpriteTilesByTag(0x27F9);
+ FreeSpritePaletteByTag(0x27F9);
+
+ if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute)
+ DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_MON_TO_SUBSTITUTE);
+
+ gBattleBankFunc[gActiveBank] = sub_8058FC0;
+ }
+}
+
+static void sub_8058FC0(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].specialAnimActive
+ && !IsCryPlayingOrClearCrySongs())
+ {
+ m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100);
+ sub_805E990(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ PlayerBufferExecCompleted();
+ }
+}
+
+static void sub_805902C(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].flag_x80
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBank].flag_x8)
+ {
+ sub_8172EF0(gActiveBank, &gPlayerParty[gBattlePartyID[gActiveBank]]);
+ }
+
+ if (gSprites[gUnknown_03005D7C[gActiveBank]].callback == SpriteCallbackDummy
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBank].flag_x8)
+ {
+ DestroySprite(&gSprites[gUnknown_03005D7C[gActiveBank]]);
+ UpdateHealthboxAttribute(gHealthBoxesIds[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], HEALTHBOX_ALL);
+ sub_8076918(gActiveBank);
+ SetHealthboxSpriteVisible(gHealthBoxesIds[gActiveBank]);
+ gBattleBankFunc[gActiveBank] = sub_8058EDC;
+ }
+}
+
+void c3_0802FDF4(u8 taskId)
+{
+ if (!IsCryPlayingOrClearCrySongs())
+ {
+ m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100);
+ DestroyTask(taskId);
+ }
+}
+
+static void CompleteOnHealthbarDone(void)
+{
+ s16 hpValue = sub_8074AA0(gActiveBank, gHealthBoxesIds[gActiveBank], 0, 0);
+
+ SetHealthboxSpriteVisible(gHealthBoxesIds[gActiveBank]);
+
+ if (hpValue != -1)
+ {
+ UpdateHpTextInHealthbox(gHealthBoxesIds[gActiveBank], hpValue, HP_CURRENT);
+ }
+ else
+ {
+ sub_805E990(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ PlayerBufferExecCompleted();
+ }
+}
+
+static void CompleteOnInactiveTextPrinter(void)
+{
+ if (!IsTextPrinterActive(0))
+ PlayerBufferExecCompleted();
+}
+
+#define tExpTask_monId data[0]
+#define tExpTask_gainedExp data[1]
+#define tExpTask_bank data[2]
+#define tExpTask_frames data[10]
+
+static void Task_GiveExpToMon(u8 taskId)
+{
+ u32 monId = (u8)(gTasks[taskId].tExpTask_monId);
+ u8 bank = gTasks[taskId].tExpTask_bank;
+ s16 gainedExp = gTasks[taskId].tExpTask_gainedExp;
+
+ if (IsDoubleBattle() == TRUE || monId != gBattlePartyID[bank]) // give exp without the expbar
+ {
+ struct Pokemon *mon = &gPlayerParty[monId];
+ u16 species = GetMonData(mon, MON_DATA_SPECIES);
+ u8 level = GetMonData(mon, MON_DATA_LEVEL);
+ u32 currExp = GetMonData(mon, MON_DATA_EXP);
+ u32 nextLvlExp = gExperienceTables[gBaseStats[species].growthRate][level + 1];
+
+ if (currExp + gainedExp >= nextLvlExp)
+ {
+ u8 savedActiveBank;
+
+ SetMonData(mon, MON_DATA_EXP, &nextLvlExp);
+ CalculateMonStats(mon);
+ gainedExp -= nextLvlExp - currExp;
+ savedActiveBank = gActiveBank;
+ gActiveBank = bank;
+ EmitTwoReturnValues(1, RET_VALUE_LEVELLED_UP, gainedExp);
+ gActiveBank = savedActiveBank;
+
+ if (IsDoubleBattle() == TRUE
+ && ((u16)(monId) == gBattlePartyID[bank] || (u16)(monId) == gBattlePartyID[bank ^ BIT_MON]))
+ gTasks[taskId].func = sub_8059544;
+ else
+ gTasks[taskId].func = DestroyExpTaskAndCompleteOnInactiveTextPrinter;
+ }
+ else
+ {
+ currExp += gainedExp;
+ SetMonData(mon, MON_DATA_EXP, &currExp);
+ gBattleBankFunc[bank] = CompleteOnInactiveTextPrinter;
+ DestroyTask(taskId);
+ }
+ }
+ else
+ {
+ gTasks[taskId].func = Task_PrepareToGiveExpWithExpBar;
+ }
+}
+
+static void Task_PrepareToGiveExpWithExpBar(u8 taskId)
+{
+ u8 monIndex = gTasks[taskId].tExpTask_monId;
+ s32 gainedExp = gTasks[taskId].tExpTask_gainedExp;
+ u8 bank = gTasks[taskId].tExpTask_bank;
+ struct Pokemon *mon = &gPlayerParty[monIndex];
+ u8 level = GetMonData(mon, MON_DATA_LEVEL);
+ u16 species = GetMonData(mon, MON_DATA_SPECIES);
+ u32 exp = GetMonData(mon, MON_DATA_EXP);
+ u32 currLvlExp = gExperienceTables[gBaseStats[species].growthRate][level];
+ u32 expToNextLvl;
+
+ exp -= currLvlExp;
+ expToNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLvlExp;
+ SetBattleBarStruct(bank, gHealthBoxesIds[bank], expToNextLvl, exp, -gainedExp);
+ PlaySE(SE_EXP);
+ gTasks[taskId].func = sub_8059400;
+}
+
+static void sub_8059400(u8 taskId)
+{
+ if (gTasks[taskId].tExpTask_frames < 13)
+ {
+ gTasks[taskId].tExpTask_frames++;
+ }
+ else
+ {
+ u8 monId = gTasks[taskId].tExpTask_monId;
+ s16 gainedExp = gTasks[taskId].tExpTask_gainedExp;
+ u8 bank = gTasks[taskId].tExpTask_bank;
+ s16 r4;
+
+ r4 = sub_8074AA0(bank, gHealthBoxesIds[bank], EXP_BAR, 0);
+ SetHealthboxSpriteVisible(gHealthBoxesIds[bank]);
+ if (r4 == -1)
+ {
+ u8 level;
+ s32 currExp;
+ u16 species;
+ s32 expOnNextLvl;
+
+ m4aSongNumStop(SE_EXP);
+ level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL);
+ currExp = GetMonData(&gPlayerParty[monId], MON_DATA_EXP);
+ species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES);
+ expOnNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1];
+
+ if (currExp + gainedExp >= expOnNextLvl)
+ {
+ u8 savedActiveBank;
+
+ SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &expOnNextLvl);
+ CalculateMonStats(&gPlayerParty[monId]);
+ gainedExp -= expOnNextLvl - currExp;
+ savedActiveBank = gActiveBank;
+ gActiveBank = bank;
+ EmitTwoReturnValues(1, RET_VALUE_LEVELLED_UP, gainedExp);
+ gActiveBank = savedActiveBank;
+ gTasks[taskId].func = sub_8059544;
+ }
+ else
+ {
+ currExp += gainedExp;
+ SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &currExp);
+ gBattleBankFunc[bank] = CompleteOnInactiveTextPrinter;
+ DestroyTask(taskId);
+ }
+ }
+ }
+}
+
+static void sub_8059544(u8 taskId)
+{
+ u8 bank = gTasks[taskId].tExpTask_bank;
+ u8 monIndex = gTasks[taskId].tExpTask_monId;
+
+ if (IsDoubleBattle() == TRUE && monIndex == gBattlePartyID[bank ^ BIT_MON])
+ bank ^= BIT_MON;
+
+ DoSpecialBattleAnimation(bank, bank, bank, B_ANIM_LVL_UP);
+ gTasks[taskId].func = sub_80595A4;
+}
+
+static void sub_80595A4(u8 taskId)
+{
+ u8 bank = gTasks[taskId].tExpTask_bank;
+
+ if (!gBattleSpritesDataPtr->healthBoxesData[bank].specialAnimActive)
+ {
+ u8 monIndex = gTasks[taskId].tExpTask_monId;
+
+ GetMonData(&gPlayerParty[monIndex], MON_DATA_LEVEL); // Unused return value
+
+ if (IsDoubleBattle() == TRUE && monIndex == gBattlePartyID[bank ^ BIT_MON])
+ UpdateHealthboxAttribute(gHealthBoxesIds[bank ^ BIT_MON], &gPlayerParty[monIndex], HEALTHBOX_ALL);
+ else
+ UpdateHealthboxAttribute(gHealthBoxesIds[bank], &gPlayerParty[monIndex], HEALTHBOX_ALL);
+
+ gTasks[taskId].func = DestroyExpTaskAndCompleteOnInactiveTextPrinter;
+ }
+}
+
+static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8 taskId)
+{
+ u8 monIndex;
+ u8 bank;
+
+ monIndex = gTasks[taskId].tExpTask_monId;
+ GetMonData(&gPlayerParty[monIndex], MON_DATA_LEVEL); // Unused return value
+ bank = gTasks[taskId].tExpTask_bank;
+ gBattleBankFunc[bank] = CompleteOnInactiveTextPrinter;
+ DestroyTask(taskId);
+}
+
+static void sub_80596A8(void)
+{
+ if (gSprites[gBankSpriteIds[gActiveBank]].pos1.y + gSprites[gBankSpriteIds[gActiveBank]].pos2.y > DISPLAY_HEIGHT)
+ {
+ u16 species = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES);
+
+ nullsub_24(species);
+ FreeOamMatrix(gSprites[gBankSpriteIds[gActiveBank]].oam.matrixNum);
+ DestroySprite(&gSprites[gBankSpriteIds[gActiveBank]]);
+ SetHealthboxSpriteInvisible(gHealthBoxesIds[gActiveBank]);
+ PlayerBufferExecCompleted();
+ }
+}
+
+static void sub_8059744(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].specialAnimActive)
+ {
+ FreeSpriteOamMatrix(&gSprites[gBankSpriteIds[gActiveBank]]);
+ DestroySprite(&gSprites[gBankSpriteIds[gActiveBank]]);
+ SetHealthboxSpriteInvisible(gHealthBoxesIds[gActiveBank]);
+ PlayerBufferExecCompleted();
+ }
+}
+
+static void CompleteOnInactiveTextPrinter2(void)
+{
+ if (!IsTextPrinterActive(0))
+ PlayerBufferExecCompleted();
+}
+
+static void sub_80597CC(void)
+{
+ if (!gPaletteFade.active)
+ {
+ u8 r4;
+
+ gBattleBankFunc[gActiveBank] = sub_8059828;
+ r4 = gTasks[gUnknown_03005D7C[gActiveBank]].data[0];
+ DestroyTask(gUnknown_03005D7C[gActiveBank]);
+ FreeAllWindowBuffers();
+ sub_81B89AC(r4);
+ }
+}
+
+static void sub_8059828(void)
+{
+ if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active)
+ {
+ if (gUnknown_0203CEE8 == 1)
+ EmitChosenMonReturnValue(1, gUnknown_0203CEE9, gUnknown_0203CF00);
+ else
+ EmitChosenMonReturnValue(1, 6, NULL);
+
+ if ((gBattleBufferA[gActiveBank][1] & 0xF) == 1)
+ PrintLinkStandbyMsg();
+
+ PlayerBufferExecCompleted();
+ }
+}
+
+static void OpenBagAndChooseItem(void)
+{
+ if (!gPaletteFade.active)
+ {
+ gBattleBankFunc[gActiveBank] = CompleteWhenChoseItem;
+ nullsub_35();
+ FreeAllWindowBuffers();
+ sub_81AABB0();
+ }
+}
+
+static void CompleteWhenChoseItem(void)
+{
+ if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active)
+ {
+ EmitOneReturnValue(1, gScriptItemId);
+ PlayerBufferExecCompleted();
+ }
+}
+
+static void CompleteOnSpecialAnimDone(void)
+{
+ if (!gDoingBattleAnim || !gBattleSpritesDataPtr->healthBoxesData[gActiveBank].specialAnimActive)
+ PlayerBufferExecCompleted();
+}
+
+static void DoHitAnimBlinkSpriteEffect(void)
+{
+ u8 spriteId = gBankSpriteIds[gActiveBank];
+
+ if (gSprites[spriteId].data1 == 32)
+ {
+ gSprites[spriteId].data1 = 0;
+ gSprites[spriteId].invisible = 0;
+ gDoingBattleAnim = FALSE;
+ PlayerBufferExecCompleted();
+ }
+ else
+ {
+ if ((gSprites[spriteId].data1 % 4) == 0)
+ gSprites[spriteId].invisible ^= 1;
+ gSprites[spriteId].data1++;
+ }
+}
+
+static void PlayerHandleUnknownYesNoInput(void)
+{
+ if (gMain.newKeys & DPAD_UP && gMultiUsePlayerCursor != 0)
+ {
+ PlaySE(SE_SELECT);
+ BattleDestroyYesNoCursorAt(gMultiUsePlayerCursor);
+ gMultiUsePlayerCursor = 0;
+ BattleCreateYesNoCursorAt(0);
+ }
+ if (gMain.newKeys & DPAD_DOWN && gMultiUsePlayerCursor == 0)
+ {
+ PlaySE(SE_SELECT);
+ BattleDestroyYesNoCursorAt(gMultiUsePlayerCursor);
+ gMultiUsePlayerCursor = 1;
+ BattleCreateYesNoCursorAt(1);
+ }
+ if (gMain.newKeys & A_BUTTON)
+ {
+ HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR);
+ PlaySE(SE_SELECT);
+
+ if (gMultiUsePlayerCursor != 0)
+ EmitTwoReturnValues(1, 0xE, 0);
+ else
+ EmitTwoReturnValues(1, 0xD, 0);
+
+ PlayerBufferExecCompleted();
+ }
+ if (gMain.newKeys & B_BUTTON)
+ {
+ HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR);
+ PlaySE(SE_SELECT);
+ PlayerBufferExecCompleted();
+ }
+}
+
+static void MoveSelectionDisplayMoveNames(void)
+{
+ s32 i;
+ struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct*)(&gBattleBufferA[gActiveBank][4]);
+ gNumberOfMovesToChoose = 0;
+
+ for (i = 0; i < 4; i++)
+ {
+ MoveSelectionDestroyCursorAt(i);
+ StringCopy(gDisplayedStringBattle, gMoveNames[moveInfo->moves[i]]);
+ BattleHandleAddTextPrinter(gDisplayedStringBattle, i + 3);
+ if (moveInfo->moves[i] != MOVE_NONE)
+ gNumberOfMovesToChoose++;
+ }
+}
+
+static void MoveSelectionDisplayPpString(void)
+{
+ StringCopy(gDisplayedStringBattle, gText_MoveInterfacePP);
+ BattleHandleAddTextPrinter(gDisplayedStringBattle, 7);
+}
+
+static void MoveSelectionDisplayPpNumber(void)
+{
+ u8 *txtPtr;
+ struct ChooseMoveStruct *moveInfo;
+
+ if (gBattleBufferA[gActiveBank][2] == TRUE) // check if we didn't want to display pp number
+ return;
+
+ SetPpNumbersPaletteInMoveSelection();
+ moveInfo = (struct ChooseMoveStruct*)(&gBattleBufferA[gActiveBank][4]);
+ txtPtr = ConvertIntToDecimalStringN(gDisplayedStringBattle, moveInfo->currentPp[gMoveSelectionCursor[gActiveBank]], STR_CONV_MODE_RIGHT_ALIGN, 2);
+ txtPtr[0] = CHAR_SLASH;
+ txtPtr++;
+ ConvertIntToDecimalStringN(txtPtr, moveInfo->maxPp[gMoveSelectionCursor[gActiveBank]], STR_CONV_MODE_RIGHT_ALIGN, 2);
+
+ BattleHandleAddTextPrinter(gDisplayedStringBattle, 9);
+}
+
+static void MoveSelectionDisplayMoveType(void)
+{
+ u8 *txtPtr;
+ struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct*)(&gBattleBufferA[gActiveBank][4]);
+
+ txtPtr = StringCopy(gDisplayedStringBattle, gText_MoveInterfaceType);
+ txtPtr[0] = EXT_CTRL_CODE_BEGIN;
+ txtPtr++;
+ txtPtr[0] = 6;
+ txtPtr++;
+ txtPtr[0] = 1;
+ txtPtr++;
+
+ StringCopy(txtPtr, gTypeNames[gBattleMoves[moveInfo->moves[gMoveSelectionCursor[gActiveBank]]].type]);
+ BattleHandleAddTextPrinter(gDisplayedStringBattle, 10);
+}
+
+static void MoveSelectionCreateCursorAt(u8 cursorPosition, u8 arg1)
+{
+ u16 src[2];
+ src[0] = arg1 + 1;
+ src[1] = arg1 + 2;
+
+ CopyToBgTilemapBufferRect_ChangePalette(0, src, 9 * (cursorPosition & 1) + 1, 55 + (cursorPosition & 2), 1, 2, 0x11);
+ CopyBgTilemapBufferToVram(0);
+}
+
+static void MoveSelectionDestroyCursorAt(u8 cursorPosition)
+{
+ u16 src[2];
+ src[0] = 0x1016;
+ src[1] = 0x1016;
+
+ CopyToBgTilemapBufferRect_ChangePalette(0, src, 9 * (cursorPosition & 1) + 1, 55 + (cursorPosition & 2), 1, 2, 0x11);
+ CopyBgTilemapBufferToVram(0);
+}
+
+void ActionSelectionCreateCursorAt(u8 cursorPosition, u8 arg1)
+{
+ u16 src[2];
+ src[0] = 1;
+ src[1] = 2;
+
+ CopyToBgTilemapBufferRect_ChangePalette(0, src, 7 * (cursorPosition & 1) + 16, 35 + (cursorPosition & 2), 1, 2, 0x11);
+ CopyBgTilemapBufferToVram(0);
+}
+
+void ActionSelectionDestroyCursorAt(u8 cursorPosition)
+{
+ u16 src[2];
+ src[0] = 0x1016;
+ src[1] = 0x1016;
+
+ CopyToBgTilemapBufferRect_ChangePalette(0, src, 7 * (cursorPosition & 1) + 16, 35 + (cursorPosition & 2), 1, 2, 0x11);
+ CopyBgTilemapBufferToVram(0);
+}
+
+void SetCB2ToReshowScreenAfterMenu(void)
+{
+ SetMainCallback2(ReshowBattleScreenAfterMenu);
+}
+
+void SetCB2ToReshowScreenAfterMenu2(void)
+{
+ SetMainCallback2(ReshowBattleScreenAfterMenu);
+}
+
+static void CompleteOnFinishedStatusAnimation(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].statusAnimActive)
+ PlayerBufferExecCompleted();
+}
+
+static void CompleteOnFinishedBattleAnimation(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animFromTableActive)
+ PlayerBufferExecCompleted();
+}
+
+static void PrintLinkStandbyMsg(void)
+{
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ gBattle_BG0_X = 0;
+ gBattle_BG0_Y = 0;
+ BattleHandleAddTextPrinter(gText_LinkStandby, 0);
+ }
+}
+
+static void PlayerHandleGetMonData(void)
+{
+ u8 monData[sizeof(struct Pokemon) * 2 + 56]; // this allows to get full data of two pokemon, trying to get more will result in overwriting data
+ u32 size = 0;
+ u8 monsToCheck;
+ s32 i;
+
+ if (gBattleBufferA[gActiveBank][2] == 0)
+ {
+ size += CopyPlayerMonData(gBattlePartyID[gActiveBank], monData);
+ }
+ else
+ {
+ monsToCheck = gBattleBufferA[gActiveBank][2];
+ for (i = 0; i < 6; i++)
+ {
+ if (monsToCheck & 1)
+ size += CopyPlayerMonData(i, monData + size);
+ monsToCheck >>= 1;
+ }
+ }
+ EmitDataTransfer(1, size, monData);
+ PlayerBufferExecCompleted();
+}
+
+static u32 CopyPlayerMonData(u8 monId, u8 *dst)
+{
+ struct BattlePokemon battleMon;
+ struct MovePpInfo moveData;
+ u8 nickname[20];
+ u8 *src;
+ s16 data16;
+ u32 data32;
+ s32 size = 0;
+
+ switch (gBattleBufferA[gActiveBank][1])
+ {
+ case REQUEST_ALL_BATTLE:
+ battleMon.species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES);
+ battleMon.item = GetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM);
+ for (size = 0; size < 4; size++)
+ {
+ battleMon.moves[size] = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + size);
+ battleMon.pp[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size);
+ }
+ battleMon.ppBonuses = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES);
+ battleMon.friendship = GetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP);
+ battleMon.experience = GetMonData(&gPlayerParty[monId], MON_DATA_EXP);
+ battleMon.hpIV = GetMonData(&gPlayerParty[monId], MON_DATA_HP_IV);
+ battleMon.attackIV = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV);
+ battleMon.defenseIV = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV);
+ battleMon.speedIV = GetMonData(&gPlayerParty[monId], MON_DATA_SPD_IV);
+ battleMon.spAttackIV = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV);
+ battleMon.spDefenseIV = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV);
+ battleMon.personality = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY);
+ battleMon.status1 = GetMonData(&gPlayerParty[monId], MON_DATA_STATUS);
+ battleMon.level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL);
+ battleMon.hp = GetMonData(&gPlayerParty[monId], MON_DATA_HP);
+ battleMon.maxHP = GetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP);
+ battleMon.attack = GetMonData(&gPlayerParty[monId], MON_DATA_ATK);
+ battleMon.defense = GetMonData(&gPlayerParty[monId], MON_DATA_DEF);
+ battleMon.speed = GetMonData(&gPlayerParty[monId], MON_DATA_SPD);
+ battleMon.spAttack = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK);
+ battleMon.spDefense = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF);
+ battleMon.isEgg = GetMonData(&gPlayerParty[monId], MON_DATA_IS_EGG);
+ battleMon.altAbility = GetMonData(&gPlayerParty[monId], MON_DATA_ALT_ABILITY);
+ battleMon.otId = GetMonData(&gPlayerParty[monId], MON_DATA_OT_ID);
+ GetMonData(&gPlayerParty[monId], MON_DATA_NICKNAME, nickname);
+ StringCopy10(battleMon.nickname, nickname);
+ GetMonData(&gPlayerParty[monId], MON_DATA_OT_NAME, battleMon.otName);
+ src = (u8 *)&battleMon;
+ for (size = 0; size < sizeof(battleMon); size++)
+ dst[size] = src[size];
+ break;
+ case REQUEST_SPECIES_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_HELDITEM_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_MOVES_PP_BATTLE:
+ for (size = 0; size < 4; size++)
+ {
+ moveData.moves[size] = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + size);
+ moveData.pp[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size);
+ }
+ moveData.ppBonuses = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES);
+ src = (u8*)(&moveData);
+ for (size = 0; size < sizeof(moveData); size++)
+ dst[size] = src[size];
+ break;
+ case REQUEST_MOVE1_BATTLE:
+ case REQUEST_MOVE2_BATTLE:
+ case REQUEST_MOVE3_BATTLE:
+ case REQUEST_MOVE4_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBank][1] - REQUEST_MOVE1_BATTLE);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_PP_DATA_BATTLE:
+ for (size = 0; size < 4; size++)
+ dst[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size);
+ dst[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES);
+ size++;
+ break;
+ case REQUEST_PPMOVE1_BATTLE:
+ case REQUEST_PPMOVE2_BATTLE:
+ case REQUEST_PPMOVE3_BATTLE:
+ case REQUEST_PPMOVE4_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBank][1] - REQUEST_PPMOVE1_BATTLE);
+ size = 1;
+ break;
+ case REQUEST_OTID_BATTLE:
+ data32 = GetMonData(&gPlayerParty[monId], MON_DATA_OT_ID);
+ dst[0] = (data32 & 0x000000FF);
+ dst[1] = (data32 & 0x0000FF00) >> 8;
+ dst[2] = (data32 & 0x00FF0000) >> 16;
+ size = 3;
+ break;
+ case REQUEST_EXP_BATTLE:
+ data32 = GetMonData(&gPlayerParty[monId], MON_DATA_EXP);
+ dst[0] = (data32 & 0x000000FF);
+ dst[1] = (data32 & 0x0000FF00) >> 8;
+ dst[2] = (data32 & 0x00FF0000) >> 16;
+ size = 3;
+ break;
+ case REQUEST_HP_EV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_HP_EV);
+ size = 1;
+ break;
+ case REQUEST_ATK_EV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_EV);
+ size = 1;
+ break;
+ case REQUEST_DEF_EV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_EV);
+ size = 1;
+ break;
+ case REQUEST_SPEED_EV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPD_EV);
+ size = 1;
+ break;
+ case REQUEST_SPATK_EV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_EV);
+ size = 1;
+ break;
+ case REQUEST_SPDEF_EV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_EV);
+ size = 1;
+ break;
+ case REQUEST_FRIENDSHIP_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP);
+ size = 1;
+ break;
+ case REQUEST_POKERUS_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_POKERUS);
+ size = 1;
+ break;
+ case REQUEST_MET_LOCATION_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_MET_LOCATION);
+ size = 1;
+ break;
+ case REQUEST_MET_LEVEL_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL);
+ size = 1;
+ break;
+ case REQUEST_MET_GAME_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_MET_GAME);
+ size = 1;
+ break;
+ case REQUEST_POKEBALL_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_POKEBALL);
+ size = 1;
+ break;
+ case REQUEST_ALL_IVS_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_HP_IV);
+ dst[1] = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV);
+ dst[2] = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV);
+ dst[3] = GetMonData(&gPlayerParty[monId], MON_DATA_SPD_IV);
+ dst[4] = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV);
+ dst[5] = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV);
+ size = 6;
+ break;
+ case REQUEST_HP_IV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_HP_IV);
+ size = 1;
+ break;
+ case REQUEST_ATK_IV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV);
+ size = 1;
+ break;
+ case REQUEST_DEF_IV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV);
+ size = 1;
+ break;
+ case REQUEST_SPEED_IV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPD_IV);
+ size = 1;
+ break;
+ case REQUEST_SPATK_IV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV);
+ size = 1;
+ break;
+ case REQUEST_SPDEF_IV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV);
+ size = 1;
+ break;
+ case REQUEST_PERSONALITY_BATTLE:
+ data32 = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY);
+ dst[0] = (data32 & 0x000000FF);
+ dst[1] = (data32 & 0x0000FF00) >> 8;
+ dst[2] = (data32 & 0x00FF0000) >> 16;
+ dst[3] = (data32 & 0xFF000000) >> 24;
+ size = 4;
+ break;
+ case REQUEST_CHECKSUM_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_CHECKSUM);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_STATUS_BATTLE:
+ data32 = GetMonData(&gPlayerParty[monId], MON_DATA_STATUS);
+ dst[0] = (data32 & 0x000000FF);
+ dst[1] = (data32 & 0x0000FF00) >> 8;
+ dst[2] = (data32 & 0x00FF0000) >> 16;
+ dst[3] = (data32 & 0xFF000000) >> 24;
+ size = 4;
+ break;
+ case REQUEST_LEVEL_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL);
+ size = 1;
+ break;
+ case REQUEST_HP_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_HP);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_MAX_HP_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_ATK_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_ATK);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_DEF_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_DEF);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_SPEED_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_SPD);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_SPATK_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_SPDEF_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_COOL_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_COOL);
+ size = 1;
+ break;
+ case REQUEST_BEAUTY_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY);
+ size = 1;
+ break;
+ case REQUEST_CUTE_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_CUTE);
+ size = 1;
+ break;
+ case REQUEST_SMART_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SMART);
+ size = 1;
+ break;
+ case REQUEST_TOUGH_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_TOUGH);
+ size = 1;
+ break;
+ case REQUEST_SHEEN_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SHEEN);
+ size = 1;
+ break;
+ case REQUEST_COOL_RIBBON_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_COOL_RIBBON);
+ size = 1;
+ break;
+ case REQUEST_BEAUTY_RIBBON_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY_RIBBON);
+ size = 1;
+ break;
+ case REQUEST_CUTE_RIBBON_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_CUTE_RIBBON);
+ size = 1;
+ break;
+ case REQUEST_SMART_RIBBON_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SMART_RIBBON);
+ size = 1;
+ break;
+ case REQUEST_TOUGH_RIBBON_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON);
+ size = 1;
+ break;
+ }
+
+ return size;
+}
+
+void PlayerHandleGetRawMonData(void)
+{
+ struct BattlePokemon battleMon;
+ u8 *src = (u8 *)&gPlayerParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1];
+ u8 *dst = (u8 *)&battleMon + gBattleBufferA[gActiveBank][1];
+ u8 i;
+
+ for (i = 0; i < gBattleBufferA[gActiveBank][2]; i++)
+ dst[i] = src[i];
+
+ EmitDataTransfer(1, gBattleBufferA[gActiveBank][2], dst);
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleSetMonData(void)
+{
+ u8 monsToCheck;
+ u8 i;
+
+ if (gBattleBufferA[gActiveBank][2] == 0)
+ {
+ SetPlayerMonData(gBattlePartyID[gActiveBank]);
+ }
+ else
+ {
+ monsToCheck = gBattleBufferA[gActiveBank][2];
+ for (i = 0; i < 6; i++)
+ {
+ if (monsToCheck & 1)
+ SetPlayerMonData(i);
+ monsToCheck >>= 1;
+ }
+ }
+ PlayerBufferExecCompleted();
+}
+
+static void SetPlayerMonData(u8 monId)
+{
+ struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleBufferA[gActiveBank][3];
+ struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleBufferA[gActiveBank][3];
+ s32 i;
+
+ switch (gBattleBufferA[gActiveBank][1])
+ {
+ case REQUEST_ALL_BATTLE:
+ {
+ u8 iv;
+
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &battlePokemon->species);
+ SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &battlePokemon->item);
+ for (i = 0; i < 4; i++)
+ {
+ SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + i, &battlePokemon->moves[i]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + i, &battlePokemon->pp[i]);
+ }
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &battlePokemon->ppBonuses);
+ SetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP, &battlePokemon->friendship);
+ SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &battlePokemon->experience);
+ iv = battlePokemon->hpIV;
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &iv);
+ iv = battlePokemon->attackIV;
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &iv);
+ iv = battlePokemon->defenseIV;
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &iv);
+ iv = battlePokemon->speedIV;
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPD_IV, &iv);
+ iv = battlePokemon->spAttackIV;
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &iv);
+ iv = battlePokemon->spDefenseIV;
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &iv);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY, &battlePokemon->personality);
+ SetMonData(&gPlayerParty[monId], MON_DATA_STATUS, &battlePokemon->status1);
+ SetMonData(&gPlayerParty[monId], MON_DATA_LEVEL, &battlePokemon->level);
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP, &battlePokemon->hp);
+ SetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP, &battlePokemon->maxHP);
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK, &battlePokemon->attack);
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF, &battlePokemon->defense);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPD, &battlePokemon->speed);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK, &battlePokemon->spAttack);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF, &battlePokemon->spDefense);
+ }
+ break;
+ case REQUEST_SPECIES_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_HELDITEM_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_MOVES_PP_BATTLE:
+ for (i = 0; i < 4; i++)
+ {
+ SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + i, &moveData->moves[i]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + i, &moveData->pp[i]);
+ }
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &moveData->ppBonuses);
+ break;
+ case REQUEST_MOVE1_BATTLE:
+ case REQUEST_MOVE2_BATTLE:
+ case REQUEST_MOVE3_BATTLE:
+ case REQUEST_MOVE4_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBank][1] - REQUEST_MOVE1_BATTLE, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_PP_DATA_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP1, &gBattleBufferA[gActiveBank][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP2, &gBattleBufferA[gActiveBank][4]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP3, &gBattleBufferA[gActiveBank][5]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP4, &gBattleBufferA[gActiveBank][6]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &gBattleBufferA[gActiveBank][7]);
+ break;
+ case REQUEST_PPMOVE1_BATTLE:
+ case REQUEST_PPMOVE2_BATTLE:
+ case REQUEST_PPMOVE3_BATTLE:
+ case REQUEST_PPMOVE4_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBank][1] - REQUEST_PPMOVE1_BATTLE, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_OTID_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_OT_ID, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_EXP_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_HP_EV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP_EV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_ATK_EV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK_EV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_DEF_EV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_SPEED_EV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPD_EV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_SPATK_EV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_SPDEF_EV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_EV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_FRIENDSHIP_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_POKERUS_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_POKERUS, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_MET_LOCATION_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_MET_LOCATION, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_MET_LEVEL_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_MET_GAME_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_MET_GAME, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_POKEBALL_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_POKEBALL, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_ALL_IVS_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][4]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][5]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][6]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][7]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][8]);
+ break;
+ case REQUEST_HP_IV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_ATK_IV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_DEF_IV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_SPEED_IV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_SPATK_IV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_SPDEF_IV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_PERSONALITY_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_CHECKSUM_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_CHECKSUM, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_STATUS_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_STATUS, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_LEVEL_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_LEVEL, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_HP_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_MAX_HP_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_ATK_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_DEF_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_SPEED_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPD, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_SPATK_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_SPDEF_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_COOL_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_COOL, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_BEAUTY_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_CUTE_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_CUTE, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_SMART_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SMART, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_TOUGH_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_SHEEN_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SHEEN, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_COOL_RIBBON_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_COOL_RIBBON, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_BEAUTY_RIBBON_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_CUTE_RIBBON_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_CUTE_RIBBON, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_SMART_RIBBON_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SMART_RIBBON, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_TOUGH_RIBBON_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBank][3]);
+ break;
+ }
+
+ sub_805E990(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+}
+
+static void PlayerHandleSetRawMonData(void)
+{
+ u8 *dst = (u8 *)&gPlayerParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1];
+ u8 i;
+
+ for (i = 0; i < gBattleBufferA[gActiveBank][2]; i++)
+ dst[i] = gBattleBufferA[gActiveBank][3 + i];
+
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleLoadMonSprite(void)
+{
+ BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ gSprites[gBankSpriteIds[gActiveBank]].oam.paletteNum = gActiveBank;
+ gBattleBankFunc[gActiveBank] = CompleteOnBankSpritePosX_0;
+}
+
+static void PlayerHandleSwitchInAnim(void)
+{
+ ClearTemporarySpeciesSpriteData(gActiveBank, gBattleBufferA[gActiveBank][2]);
+ gBattlePartyID[gActiveBank] = gBattleBufferA[gActiveBank][1];
+ BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ gActionSelectionCursor[gActiveBank] = 0;
+ gMoveSelectionCursor[gActiveBank] = 0;
+ sub_805B258(gActiveBank, gBattleBufferA[gActiveBank][2]);
+ gBattleBankFunc[gActiveBank] = sub_805902C;
+}
+
+static void sub_805B258(u8 bank, bool8 dontClearSubstituteBit)
+{
+ u16 species;
+
+ ClearTemporarySpeciesSpriteData(bank, dontClearSubstituteBit);
+ gBattlePartyID[bank] = gBattleBufferA[bank][1];
+ species = GetMonData(&gPlayerParty[gBattlePartyID[bank]], MON_DATA_SPECIES);
+ gUnknown_03005D7C[bank] = CreateInvisibleSpriteWithCallback(sub_805D714);
+ sub_806A068(species, GetBankIdentity(bank));
+
+ gBankSpriteIds[bank] = CreateSprite(
+ &gUnknown_0202499C,
+ sub_80A5C6C(bank, 2),
+ sub_80A6138(bank),
+ sub_80A82E4(bank));
+
+ gSprites[gUnknown_03005D7C[bank]].data1 = gBankSpriteIds[bank];
+ gSprites[gUnknown_03005D7C[bank]].data2 = bank;
+
+ gSprites[gBankSpriteIds[bank]].data0 = bank;
+ gSprites[gBankSpriteIds[bank]].data2 = species;
+ gSprites[gBankSpriteIds[bank]].oam.paletteNum = bank;
+
+ StartSpriteAnim(&gSprites[gBankSpriteIds[bank]], gBattleMonForms[bank]);
+
+ gSprites[gBankSpriteIds[bank]].invisible = TRUE;
+ gSprites[gBankSpriteIds[bank]].callback = SpriteCallbackDummy;
+
+ gSprites[gUnknown_03005D7C[bank]].data0 = sub_80753E8(0, 0xFF);
+}
+
+static void PlayerHandleReturnMonToBall(void)
+{
+ if (gBattleBufferA[gActiveBank][1] == 0)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 0;
+ gBattleBankFunc[gActiveBank] = DoSwitchOutAnimation;
+ }
+ else
+ {
+ FreeSpriteOamMatrix(&gSprites[gBankSpriteIds[gActiveBank]]);
+ DestroySprite(&gSprites[gBankSpriteIds[gActiveBank]]);
+ SetHealthboxSpriteInvisible(gHealthBoxesIds[gActiveBank]);
+ PlayerBufferExecCompleted();
+ }
+}
+
+static void DoSwitchOutAnimation(void)
+{
+ switch (gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState)
+ {
+ case 0:
+ if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute)
+ DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
+
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 1;
+ break;
+ case 1:
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].specialAnimActive)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 0;
+ DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SWITCH_OUT_MON);
+ gBattleBankFunc[gActiveBank] = sub_8059744;
+ }
+ break;
+ }
+}
+
+// todo: get rid of it once the struct is declared in a header
+struct MonCoords
+{
+ // This would use a bitfield, but sub_8079F44
+ // uses it as a u8 and casting won't match.
+ u8 coords; // u8 x:4, y:4;
+ u8 y_offset;
+};
+extern const struct MonCoords gTrainerBackPicCoords[];
+extern const struct MonCoords gTrainerFrontPicCoords[];
+
+// some explanation here
+// in emerald it's possible to have a tag battle in the battle frontier facilities with AI
+// which use the front sprite for both the player and the partner as opposed to any other battles (including the one with Steven) that use the back pic as well as animate it
+static void PlayerHandleDrawTrainerPic(void)
+{
+ s16 xPos, yPos;
+ u32 trainerPicId;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ if ((gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_FIRE_RED
+ || (gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_LEAF_GREEN)
+ {
+ trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + BACK_PIC_RED;
+ }
+ else if ((gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_RUBY
+ || (gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_SAPPHIRE)
+ {
+ trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + BACK_PIC_RS_BRENDAN;
+ }
+ else
+ {
+ trainerPicId = gLinkPlayers[GetMultiplayerId()].gender;
+ }
+ }
+ else
+ {
+ trainerPicId = gSaveBlock2Ptr->playerGender;
+ }
+
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ {
+ if ((GetBankIdentity(gActiveBank) & BIT_MON) != 0) // second mon
+ xPos = 90;
+ else // first mon
+ xPos = 32;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gPartnerTrainerId != STEVEN_PARTNER_ID)
+ {
+ xPos = 90;
+ yPos = (8 - gTrainerFrontPicCoords[trainerPicId].coords) * 4 + 80;
+ }
+ else
+ {
+ yPos = (8 - gTrainerBackPicCoords[trainerPicId].coords) * 4 + 80;
+ }
+
+ }
+ else
+ {
+ xPos = 80;
+ yPos = (8 - gTrainerBackPicCoords[trainerPicId].coords) * 4 + 80;
+ }
+
+ // Use front pic table for any tag battles unless your partner is Steven.
+ if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gPartnerTrainerId != STEVEN_PARTNER_ID)
+ {
+ trainerPicId = PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender);
+ DecompressTrainerFrontPic(trainerPicId, gActiveBank);
+ sub_806A1C0(trainerPicId, GetBankIdentity(gActiveBank));
+ gBankSpriteIds[gActiveBank] = CreateSprite(&gUnknown_0202499C, xPos, yPos, sub_80A82E4(gActiveBank));
+
+ gSprites[gBankSpriteIds[gActiveBank]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicId].tag);
+ gSprites[gBankSpriteIds[gActiveBank]].pos2.x = 240;
+ gSprites[gBankSpriteIds[gActiveBank]].pos2.y = 48;
+ gSprites[gBankSpriteIds[gActiveBank]].data0 = -2;
+ gSprites[gBankSpriteIds[gActiveBank]].callback = sub_805D7AC;
+ gSprites[gBankSpriteIds[gActiveBank]].oam.affineMode = 0;
+ gSprites[gBankSpriteIds[gActiveBank]].hFlip = 1;
+ }
+ // use the back pic in any other scenario
+ else
+ {
+ DecompressTrainerBackPic(trainerPicId, gActiveBank);
+ sub_806A12C(trainerPicId, GetBankIdentity(gActiveBank));
+ gBankSpriteIds[gActiveBank] = CreateSprite(&gUnknown_0202499C, xPos, yPos, sub_80A82E4(gActiveBank));
+
+ gSprites[gBankSpriteIds[gActiveBank]].oam.paletteNum = gActiveBank;
+ gSprites[gBankSpriteIds[gActiveBank]].pos2.x = 240;
+ gSprites[gBankSpriteIds[gActiveBank]].data0 = -2;
+ gSprites[gBankSpriteIds[gActiveBank]].callback = sub_805D7AC;
+ }
+
+ gBattleBankFunc[gActiveBank] = CompleteOnBankSpriteCallbackDummy;
+}
+
+static void PlayerHandleTrainerSlide(void)
+{
+ u32 trainerPicId;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ if ((gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_FIRE_RED
+ || (gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_LEAF_GREEN)
+ {
+ trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + BACK_PIC_RED;
+ }
+ else if ((gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_RUBY
+ || (gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_SAPPHIRE)
+ {
+ trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + BACK_PIC_RS_BRENDAN;
+ }
+ else
+ {
+ trainerPicId = gLinkPlayers[GetMultiplayerId()].gender;
+ }
+ }
+ else
+ {
+ trainerPicId = gSaveBlock2Ptr->playerGender;
+ }
+
+ DecompressTrainerBackPic(trainerPicId, gActiveBank);
+ sub_806A12C(trainerPicId, GetBankIdentity(gActiveBank));
+ gBankSpriteIds[gActiveBank] = CreateSprite(&gUnknown_0202499C, 80, (8 - gTrainerBackPicCoords[trainerPicId].coords) * 4 + 80, 30);
+
+ gSprites[gBankSpriteIds[gActiveBank]].oam.paletteNum = gActiveBank;
+ gSprites[gBankSpriteIds[gActiveBank]].pos2.x = -96;
+ gSprites[gBankSpriteIds[gActiveBank]].data0 = 2;
+ gSprites[gBankSpriteIds[gActiveBank]].callback = sub_805D7AC;
+
+ gBattleBankFunc[gActiveBank] = CompleteOnBankSpriteCallbackDummy2;
+}
+
+static void PlayerHandleTrainerSlideBack(void)
+{
+ oamt_add_pos2_onto_pos1(&gSprites[gBankSpriteIds[gActiveBank]]);
+ gSprites[gBankSpriteIds[gActiveBank]].data0 = 50;
+ gSprites[gBankSpriteIds[gActiveBank]].data2 = -40;
+ gSprites[gBankSpriteIds[gActiveBank]].data4 = gSprites[gBankSpriteIds[gActiveBank]].pos1.y;
+ gSprites[gBankSpriteIds[gActiveBank]].callback = sub_80A6EEC;
+ StoreSpriteCallbackInData6(&gSprites[gBankSpriteIds[gActiveBank]], SpriteCallbackDummy);
+ StartSpriteAnim(&gSprites[gBankSpriteIds[gActiveBank]], 1);
+ gBattleBankFunc[gActiveBank] = sub_80588B4;
+}
+
+static void PlayerHandleFaintAnimation(void)
+{
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState == 0)
+ {
+ if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute)
+ DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState++;
+ }
+ else
+ {
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].specialAnimActive)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 0;
+ sub_805E990(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ PlaySE12WithPanning(SE_POKE_DEAD, -64);
+ gSprites[gBankSpriteIds[gActiveBank]].data1 = 0;
+ gSprites[gBankSpriteIds[gActiveBank]].data2 = 5;
+ gSprites[gBankSpriteIds[gActiveBank]].callback = sub_8039C00;
+ gBattleBankFunc[gActiveBank] = sub_80596A8;
+ }
+ }
+}
+
+static void PlayerHandlePaletteFade(void)
+{
+ BeginNormalPaletteFade(-1, 2, 0, 16, 0);
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleSuccessBallThrowAnim(void)
+{
+ gBattleSpritesDataPtr->animationData->ballThrowCaseId = BALL_3_SHAKES_SUCCESS;
+ gDoingBattleAnim = TRUE;
+ DoSpecialBattleAnimation(gActiveBank, gActiveBank, GetBankByIdentity(IDENTITY_OPPONENT_MON1), B_ANIM_BALL_THROW);
+ gBattleBankFunc[gActiveBank] = CompleteOnSpecialAnimDone;
+}
+
+static void PlayerHandleBallThrowAnim(void)
+{
+ u8 ballThrowCaseId = gBattleBufferA[gActiveBank][1];
+
+ gBattleSpritesDataPtr->animationData->ballThrowCaseId = ballThrowCaseId;
+ gDoingBattleAnim = TRUE;
+ DoSpecialBattleAnimation(gActiveBank, gActiveBank, GetBankByIdentity(IDENTITY_OPPONENT_MON1), B_ANIM_BALL_THROW);
+ gBattleBankFunc[gActiveBank] = CompleteOnSpecialAnimDone;
+}
+
+static void PlayerHandlePause(void)
+{
+ u8 var = gBattleBufferA[gActiveBank][1];
+
+ // WTF is this??
+ while (var != 0)
+ var--;
+
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleMoveAnimation(void)
+{
+ if (!mplay_80342A4(gActiveBank))
+ {
+ u16 move = gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8);
+
+ gAnimMoveTurn = gBattleBufferA[gActiveBank][3];
+ gAnimMovePower = gBattleBufferA[gActiveBank][4] | (gBattleBufferA[gActiveBank][5] << 8);
+ gAnimMoveDmg = gBattleBufferA[gActiveBank][6] | (gBattleBufferA[gActiveBank][7] << 8) | (gBattleBufferA[gActiveBank][8] << 16) | (gBattleBufferA[gActiveBank][9] << 24);
+ gAnimFriendship = gBattleBufferA[gActiveBank][10];
+ gWeatherMoveAnim = gBattleBufferA[gActiveBank][12] | (gBattleBufferA[gActiveBank][13] << 8);
+ gAnimDisableStructPtr = (struct DisableStruct *)&gBattleBufferA[gActiveBank][16];
+ gTransformedPersonalities[gActiveBank] = gAnimDisableStructPtr->transformedMonPersonality;
+ if (IsMoveWithoutAnimation(move, gAnimMoveTurn)) // always returns FALSE
+ {
+ PlayerBufferExecCompleted();
+ }
+ else
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 0;
+ gBattleBankFunc[gActiveBank] = PlayerDoMoveAnimation;
+ sub_817E0FC(move, gWeatherMoveAnim, gAnimDisableStructPtr);
+ }
+ }
+}
+
+static void PlayerDoMoveAnimation(void)
+{
+ u16 move = gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8);
+ u8 multihit = gBattleBufferA[gActiveBank][11];
+
+ switch (gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState)
+ {
+ case 0:
+ if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute
+ && !gBattleSpritesDataPtr->bankData[gActiveBank].flag_x8)
+ {
+ gBattleSpritesDataPtr->bankData[gActiveBank].flag_x8 = 1;
+ DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
+ }
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 1;
+ break;
+ case 1:
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].specialAnimActive)
+ {
+ sub_805EB9C(0);
+ DoMoveAnim(move);
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 2;
+ }
+ break;
+ case 2:
+ gAnimScriptCallback();
+ if (!gAnimScriptActive)
+ {
+ sub_805EB9C(1);
+ if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute && multihit < 2)
+ {
+ DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_MON_TO_SUBSTITUTE);
+ gBattleSpritesDataPtr->bankData[gActiveBank].flag_x8 = 0;
+ }
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 3;
+ }
+ break;
+ case 3:
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].specialAnimActive)
+ {
+ sub_805E394();
+ TrySetBehindSubstituteSpriteBit(gActiveBank, gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 0;
+ PlayerBufferExecCompleted();
+ }
+ break;
+ }
+}
+
+static void PlayerHandlePrintString(void)
+{
+ u16 *stringId;
+
+ gBattle_BG0_X = 0;
+ gBattle_BG0_Y = 0;
+ stringId = (u16*)(&gBattleBufferA[gActiveBank][2]);
+ BufferStringBattle(*stringId);
+ BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
+ gBattleBankFunc[gActiveBank] = CompleteOnInactiveTextPrinter2;
+ sub_817C95C(*stringId);
+ sub_81A57E4(gActiveBank, *stringId);
+}
+
+static void PlayerHandlePrintStringPlayerOnly(void)
+{
+ if (GetBankSide(gActiveBank) == SIDE_PLAYER)
+ PlayerHandlePrintString();
+ else
+ PlayerBufferExecCompleted();
+}
+
+static void HandleChooseActionAfterDma3(void)
+{
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ gBattle_BG0_X = 0;
+ gBattle_BG0_Y = 160;
+ gBattleBankFunc[gActiveBank] = HandleInputChooseAction;
+ }
+}
+
+static void PlayerHandleChooseAction(void)
+{
+ s32 i;
+
+ gBattleBankFunc[gActiveBank] = HandleChooseActionAfterDma3;
+ sub_817F2A8();
+ BattleHandleAddTextPrinter(gText_BattleMenu, 2);
+
+ for (i = 0; i < 4; i++)
+ ActionSelectionDestroyCursorAt(i);
+
+ ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBank], 0);
+ BattleStringExpandPlaceholdersToDisplayedString(gText_WhatWillPkmnDo);
+ BattleHandleAddTextPrinter(gDisplayedStringBattle, 1);
+}
+
+static void PlayerHandleUnknownYesNoBox(void)
+{
+ if (GetBankSide(gActiveBank) == SIDE_PLAYER)
+ {
+ HandleBattleWindow(0x18, 8, 0x1D, 0xD, 0);
+ BattleHandleAddTextPrinter(gText_BattleYesNoChoice, 12);
+ gMultiUsePlayerCursor = 1;
+ BattleCreateYesNoCursorAt(1);
+ gBattleBankFunc[gActiveBank] = PlayerHandleUnknownYesNoInput;
+ }
+ else
+ {
+ PlayerBufferExecCompleted();
+ }
+}
+
+static void HandleChooseMoveAfterDma3(void)
+{
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ gBattle_BG0_X = 0;
+ gBattle_BG0_Y = 320;
+ gBattleBankFunc[gActiveBank] = HandleInputChooseMove;
+ }
+}
+
+static void PlayerChooseMoveInBattlePalace(void)
+{
+ if (--*(gBattleStruct->field_298 + gActiveBank) == 0)
+ {
+ gBattlePalaceMoveSelectionRngValue = gRngValue;
+ EmitTwoReturnValues(1, 10, ChooseMoveAndTargetInBattlePalace());
+ PlayerBufferExecCompleted();
+ }
+}
+
+static void PlayerHandleChooseMove(void)
+{
+ if (gBattleTypeFlags & BATTLE_TYPE_PALACE)
+ {
+ *(gBattleStruct->field_298 + gActiveBank) = 8;
+ gBattleBankFunc[gActiveBank] = PlayerChooseMoveInBattlePalace;
+ }
+ else
+ {
+ InitMoveSelectionsVarsAndStrings();
+ gBattleBankFunc[gActiveBank] = HandleChooseMoveAfterDma3;
+ }
+}
+
+void InitMoveSelectionsVarsAndStrings(void)
+{
+ MoveSelectionDisplayMoveNames();
+ gMultiUsePlayerCursor = 0xFF;
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBank], 0);
+ MoveSelectionDisplayPpString();
+ MoveSelectionDisplayPpNumber();
+ MoveSelectionDisplayMoveType();
+}
+
+static void PlayerHandleChooseItem(void)
+{
+ s32 i;
+
+ BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
+ gBattleBankFunc[gActiveBank] = OpenBagAndChooseItem;
+ gBankInMenu = gActiveBank;
+
+ for (i = 0; i < 3; i++)
+ gUnknown_0203CF00[i] = gBattleBufferA[gActiveBank][1 + i];
+}
+
+static void PlayerHandleChoosePokemon(void)
+{
+ s32 i;
+
+ for (i = 0; i < 3; i++)
+ gUnknown_0203CF00[i] = gBattleBufferA[gActiveBank][4 + i];
+
+ if (gBattleTypeFlags & BATTLE_TYPE_ARENA && (gBattleBufferA[gActiveBank][1] & 0xF) != 2)
+ {
+ EmitChosenMonReturnValue(1, gBattlePartyID[gActiveBank] + 1, gUnknown_0203CF00);
+ PlayerBufferExecCompleted();
+ }
+ else
+ {
+ gUnknown_03005D7C[gActiveBank] = CreateTask(TaskDummy, 0xFF);
+ gTasks[gUnknown_03005D7C[gActiveBank]].data[0] = gBattleBufferA[gActiveBank][1] & 0xF;
+ *(&gBattleStruct->field_49) = gBattleBufferA[gActiveBank][1] >> 4;
+ *(&gBattleStruct->field_8B) = gBattleBufferA[gActiveBank][2];
+ *(&gBattleStruct->field_B0) = gBattleBufferA[gActiveBank][3];
+ BeginNormalPaletteFade(-1, 0, 0, 16, 0);
+ gBattleBankFunc[gActiveBank] = sub_80597CC;
+ gBankInMenu = gActiveBank;
+ }
+}
+
+static void PlayerHandleCmd23(void)
+{
+ BattleMusicStop();
+ BeginNormalPaletteFade(-1, 2, 0, 16, 0);
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleHealthBarUpdate(void)
+{
+ s16 hpVal;
+
+ LoadBattleBarGfx(0);
+ hpVal = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8);
+
+ if (hpVal > 0)
+ gUnknown_0203CD70 += hpVal;
+
+ if (hpVal != INSTANT_HP_BAR_DROP)
+ {
+ u32 maxHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP);
+ u32 curHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_HP);
+
+ SetBattleBarStruct(gActiveBank, gHealthBoxesIds[gActiveBank], maxHP, curHP, hpVal);
+ }
+ else
+ {
+ u32 maxHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP);
+
+ SetBattleBarStruct(gActiveBank, gHealthBoxesIds[gActiveBank], maxHP, 0, hpVal);
+ UpdateHpTextInHealthbox(gHealthBoxesIds[gActiveBank], 0, HP_CURRENT);
+ }
+
+ gBattleBankFunc[gActiveBank] = CompleteOnHealthbarDone;
+}
+
+static void PlayerHandleExpUpdate(void)
+{
+ u8 monId = gBattleBufferA[gActiveBank][1];
+
+ if (GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL) >= MAX_MON_LEVEL)
+ {
+ PlayerBufferExecCompleted();
+ }
+ else
+ {
+ s16 expPointsToGive;
+ u8 taskId;
+
+ LoadBattleBarGfx(1);
+ GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES); // unused return value
+ expPointsToGive = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8);
+ taskId = CreateTask(Task_GiveExpToMon, 10);
+ gTasks[taskId].tExpTask_monId = monId;
+ gTasks[taskId].tExpTask_gainedExp = expPointsToGive;
+ gTasks[taskId].tExpTask_bank = gActiveBank;
+ gBattleBankFunc[gActiveBank] = nullsub_21;
+ }
+}
+
+#undef tExpTask_monId
+#undef tExpTask_gainedExp
+#undef tExpTask_bank
+#undef tExpTask_frames
+
+static void PlayerHandleStatusIconUpdate(void)
+{
+ if (!mplay_80342A4(gActiveBank))
+ {
+ u8 bank;
+
+ UpdateHealthboxAttribute(gHealthBoxesIds[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], HEALTHBOX_STATUS_ICON);
+ bank = gActiveBank;
+ gBattleSpritesDataPtr->healthBoxesData[bank].statusAnimActive = 0;
+ gBattleBankFunc[gActiveBank] = CompleteOnFinishedStatusAnimation;
+ }
+}
+
+static void PlayerHandleStatusAnimation(void)
+{
+ if (!mplay_80342A4(gActiveBank))
+ {
+ DoStatusAnimation(gBattleBufferA[gActiveBank][1],
+ gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8) | (gBattleBufferA[gActiveBank][4] << 16) | (gBattleBufferA[gActiveBank][5] << 24));
+ gBattleBankFunc[gActiveBank] = CompleteOnFinishedStatusAnimation;
+ }
+}
+
+static void PlayerHandleStatusXor(void)
+{
+ u8 val = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_STATUS) ^ gBattleBufferA[gActiveBank][1];
+
+ SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_STATUS, &val);
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleDataTransfer(void)
+{
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleDMA3Transfer(void)
+{
+ u32 dstArg = gBattleBufferA[gActiveBank][1]
+ | (gBattleBufferA[gActiveBank][2] << 8)
+ | (gBattleBufferA[gActiveBank][3] << 16)
+ | (gBattleBufferA[gActiveBank][4] << 24);
+ u16 sizeArg = gBattleBufferA[gActiveBank][5] | (gBattleBufferA[gActiveBank][6] << 8);
+
+ const u8 *src = &gBattleBufferA[gActiveBank][7];
+ u8 *dst = (u8*)(dstArg);
+ u32 size = sizeArg;
+
+ while (1)
+ {
+ if (size <= 0x1000)
+ {
+ DmaCopy16(3, src, dst, size);
+ break;
+ }
+ DmaCopy16(3, src, dst, 0x1000);
+ src += 0x1000;
+ dst += 0x1000;
+ size -= 0x1000;
+ }
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandlePlayBGM(void)
+{
+ PlayBGM(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleCmd32(void)
+{
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleTwoReturnValues(void)
+{
+ EmitTwoReturnValues(1, 0, 0);
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleChosenMonReturnValue(void)
+{
+ EmitChosenMonReturnValue(1, 0, NULL);
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleOneReturnValue(void)
+{
+ EmitOneReturnValue(1, 0);
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleOneReturnValue_Duplicate(void)
+{
+ EmitOneReturnValue_Duplicate(1, 0);
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleCmd37(void)
+{
+ gUnknown_02022D0C.field_0 = 0;
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleCmd38(void)
+{
+ gUnknown_02022D0C.field_0 = gBattleBufferA[gActiveBank][1];
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleCmd39(void)
+{
+ gUnknown_02022D0C.flag_x80 = 0;
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleCmd40(void)
+{
+ gUnknown_02022D0C.flag_x80 ^= 1;
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleHitAnimation(void)
+{
+ if (gSprites[gBankSpriteIds[gActiveBank]].invisible == TRUE)
+ {
+ PlayerBufferExecCompleted();
+ }
+ else
+ {
+ gDoingBattleAnim = 1;
+ gSprites[gBankSpriteIds[gActiveBank]].data1 = 0;
+ DoHitAnimHealthboxEffect(gActiveBank);
+ gBattleBankFunc[gActiveBank] = DoHitAnimBlinkSpriteEffect;
+ }
+}
+
+static void PlayerHandleCmd42(void)
+{
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleEffectivenessSound(void)
+{
+ s8 pan;
+
+ if (GetBankSide(gActiveBank) == SIDE_PLAYER)
+ pan = PAN_SIDE_PLAYER;
+ else
+ pan = PAN_SIDE_OPPONENT;
+
+ PlaySE12WithPanning(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8), pan);
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandlePlayFanfareOrBGM(void)
+{
+ if (gBattleBufferA[gActiveBank][3])
+ {
+ BattleMusicStop();
+ PlayBGM(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
+ }
+ else
+ {
+ PlayFanfare(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
+ }
+
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleFaintingCry(void)
+{
+ u16 species = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES);
+
+ PlayCry3(species, -25, 5);
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleIntroSlide(void)
+{
+ HandleIntroSlide(gBattleBufferA[gActiveBank][1]);
+ gUnknown_020243FC |= 1;
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleIntroTrainerBallThrow(void)
+{
+ u8 paletteNum;
+ u8 taskId;
+
+ oamt_add_pos2_onto_pos1(&gSprites[gBankSpriteIds[gActiveBank]]);
+
+ gSprites[gBankSpriteIds[gActiveBank]].data0 = 50;
+ gSprites[gBankSpriteIds[gActiveBank]].data2 = -40;
+ gSprites[gBankSpriteIds[gActiveBank]].data4 = gSprites[gBankSpriteIds[gActiveBank]].pos1.y;
+ gSprites[gBankSpriteIds[gActiveBank]].callback = sub_80A6EEC;
+ gSprites[gBankSpriteIds[gActiveBank]].data5 = gActiveBank;
+
+ StoreSpriteCallbackInData6(&gSprites[gBankSpriteIds[gActiveBank]], sub_805CC00);
+ StartSpriteAnim(&gSprites[gBankSpriteIds[gActiveBank]], 1);
+
+ paletteNum = AllocSpritePalette(0xD6F8);
+ LoadCompressedPalette(gTrainerBackPicPaletteTable[gSaveBlock2Ptr->playerGender].data, 0x100 + paletteNum * 16, 32);
+ gSprites[gBankSpriteIds[gActiveBank]].oam.paletteNum = paletteNum;
+
+ taskId = CreateTask(task05_08033660, 5);
+ gTasks[taskId].data[0] = gActiveBank;
+
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBank].flag_x1)
+ gTasks[gUnknown_020244B4[gActiveBank]].func = sub_8073C30;
+
+ gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
+ gBattleBankFunc[gActiveBank] = nullsub_21;
+}
+
+void sub_805CC00(struct Sprite *sprite)
+{
+ u8 bank = sprite->data5;
+
+ FreeSpriteOamMatrix(sprite);
+ FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum));
+ DestroySprite(sprite);
+ BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlePartyID[bank]], bank);
+ StartSpriteAnim(&gSprites[gBankSpriteIds[bank]], 0);
+}
+
+static void task05_08033660(u8 taskId)
+{
+ if (gTasks[taskId].data[1] < 31)
+ {
+ gTasks[taskId].data[1]++;
+ }
+ else
+ {
+ u8 savedActiveBank = gActiveBank;
+
+ gActiveBank = gTasks[taskId].data[0];
+ if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ {
+ gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank];
+ sub_805B258(gActiveBank, FALSE);
+ }
+ else
+ {
+ gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank];
+ sub_805B258(gActiveBank, FALSE);
+ gActiveBank ^= BIT_MON;
+ gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank];
+ BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ sub_805B258(gActiveBank, FALSE);
+ gActiveBank ^= BIT_MON;
+ }
+ gBattleBankFunc[gActiveBank] = sub_8058B40;
+ gActiveBank = savedActiveBank;
+ DestroyTask(taskId);
+ }
+}
+
+static void PlayerHandleDrawPartyStatusSummary(void)
+{
+ if (gBattleBufferA[gActiveBank][1] != 0 && GetBankSide(gActiveBank) == SIDE_PLAYER)
+ {
+ PlayerBufferExecCompleted();
+ }
+ else
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].flag_x1 = 1;
+ gUnknown_020244B4[gActiveBank] = CreatePartyStatusSummarySprites(gActiveBank, (struct HpAndStatus *)&gBattleBufferA[gActiveBank][4], gBattleBufferA[gActiveBank][1], gBattleBufferA[gActiveBank][2]);
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_5 = 0;
+
+ if (gBattleBufferA[gActiveBank][2] != 0)
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_5 = 0x5D;
+
+ gBattleBankFunc[gActiveBank] = sub_805CE38;
+ }
+}
+
+static void sub_805CE38(void)
+{
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_5++ > 0x5C)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_5 = 0;
+ PlayerBufferExecCompleted();
+ }
+}
+
+static void PlayerHandleCmd49(void)
+{
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBank].flag_x1)
+ gTasks[gUnknown_020244B4[gActiveBank]].func = sub_8073C30;
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleCmd50(void)
+{
+ dp11b_obj_free(gActiveBank, 1);
+ dp11b_obj_free(gActiveBank, 0);
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleSpriteInvisibility(void)
+{
+ if (AnimBankSpriteExists(gActiveBank))
+ {
+ gSprites[gBankSpriteIds[gActiveBank]].invisible = gBattleBufferA[gActiveBank][1];
+ SetBattleSpriteInvisibilityBitToSpriteInvisibility(gActiveBank);
+ }
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleBattleAnimation(void)
+{
+ if (!mplay_80342A4(gActiveBank))
+ {
+ u8 animationId = gBattleBufferA[gActiveBank][1];
+ u16 argument = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8);
+
+ if (DoBattleAnimationFromTable(gActiveBank, gActiveBank, gActiveBank, animationId, argument))
+ PlayerBufferExecCompleted();
+ else
+ gBattleBankFunc[gActiveBank] = CompleteOnFinishedBattleAnimation;
+
+ sub_817E32C(animationId);
+ }
+}
+
+static void PlayerHandleLinkStandbyMsg(void)
+{
+ sub_81851A8(&gBattleBufferA[gActiveBank][2]);
+ switch (gBattleBufferA[gActiveBank][1])
+ {
+ case 0:
+ PrintLinkStandbyMsg();
+ // fall through
+ case 1:
+ dp11b_obj_free(gActiveBank, 1);
+ dp11b_obj_free(gActiveBank, 0);
+ break;
+ case 2:
+ PrintLinkStandbyMsg();
+ break;
+ }
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleResetActionMoveSelection(void)
+{
+ switch (gBattleBufferA[gActiveBank][1])
+ {
+ case RESET_ACTION_MOVE_SELECTION:
+ gActionSelectionCursor[gActiveBank] = 0;
+ gMoveSelectionCursor[gActiveBank] = 0;
+ break;
+ case RESET_ACTION_SELECTION:
+ gActionSelectionCursor[gActiveBank] = 0;
+ break;
+ case RESET_MOVE_SELECTION:
+ gMoveSelectionCursor[gActiveBank] = 0;
+ break;
+ }
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleCmd55(void)
+{
+ sub_81851A8(&gBattleBufferA[gActiveBank][4]);
+ gBattleOutcome = gBattleBufferA[gActiveBank][1];
+ gSaveBlock2Ptr->field_CA9_b = gBattleBufferA[gActiveBank][2];
+ FadeOutMapMusic(5);
+ BeginFastPaletteFade(3);
+ PlayerBufferExecCompleted();
+ gBattleBankFunc[gActiveBank] = sub_80587B0;
+}
+
+static void nullsub_22(void)
+{
+}
diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c
new file mode 100644
index 000000000..25eaf773f
--- /dev/null
+++ b/src/battle_controller_player_partner.c
@@ -0,0 +1,1970 @@
+#include "global.h"
+#include "battle.h"
+#include "battle_controllers.h"
+#include "battle_message.h"
+#include "battle_interface.h"
+#include "battle_anim.h"
+#include "battle_ai_script_commands.h"
+#include "pokemon.h"
+#include "link.h"
+#include "util.h"
+#include "main.h"
+#include "songs.h"
+#include "sound.h"
+#include "window.h"
+#include "m4a.h"
+#include "palette.h"
+#include "task.h"
+#include "text.h"
+#include "string_util.h"
+#include "bg.h"
+#include "reshow_battle_screen.h"
+#include "pokeball.h"
+
+extern u32 gBattleExecBuffer;
+extern u8 gActiveBank;
+extern u8 gBankSpriteIds[BATTLE_BANKS_COUNT];
+extern u8 gActionSelectionCursor[BATTLE_BANKS_COUNT];
+extern u8 gNoOfAllBanks;
+extern bool8 gDoingBattleAnim;
+extern void (*gBattleBankFunc[BATTLE_BANKS_COUNT])(void);
+extern void (*gPreBattleCallback1)(void);
+extern u16 gBattlePartyID[BATTLE_BANKS_COUNT];
+extern u8 gBattleBufferA[BATTLE_BANKS_COUNT][0x200];
+extern u8 gBattleBufferB[BATTLE_BANKS_COUNT][0x200];
+extern struct BattlePokemon gBattleMons[BATTLE_BANKS_COUNT];
+extern struct SpriteTemplate gUnknown_0202499C;
+extern u16 gScriptItemId;
+extern u8 gHealthBoxesIds[BATTLE_BANKS_COUNT];
+extern u8 gBattleOutcome;
+extern u16 gBattle_BG0_X;
+extern u16 gBattle_BG0_Y;
+extern u8 gBankInMenu;
+extern u16 gUnknown_020243FC;
+extern u8 gUnknown_03005D7C[BATTLE_BANKS_COUNT];
+extern u8 gBattleMonForms[BATTLE_BANKS_COUNT];
+extern u16 gPartnerTrainerId;
+extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
+extern u8 gBankTarget;
+extern u8 gAbsentBankFlags;
+extern u8 gUnknown_020244B4[];
+extern u32 gTransformedPersonalities[BATTLE_BANKS_COUNT];
+extern struct UnusedControllerStruct gUnknown_02022D0C;
+
+extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
+extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
+extern const struct BattleMove gBattleMoves[];
+
+extern void sub_81358F4(void);
+extern void sub_8172EF0(u8 bank, struct Pokemon *mon);
+extern void sub_806A068(u16, u8);
+
+// this file's functions
+static void PlayerPartnerHandleGetMonData(void);
+static void PlayerPartnerHandleGetRawMonData(void);
+static void PlayerPartnerHandleSetMonData(void);
+static void PlayerPartnerHandleSetRawMonData(void);
+static void PlayerPartnerHandleLoadMonSprite(void);
+static void PlayerPartnerHandleSwitchInAnim(void);
+static void PlayerPartnerHandleReturnMonToBall(void);
+static void PlayerPartnerHandleDrawTrainerPic(void);
+static void PlayerPartnerHandleTrainerSlide(void);
+static void PlayerPartnerHandleTrainerSlideBack(void);
+static void PlayerPartnerHandleFaintAnimation(void);
+static void PlayerPartnerHandlePaletteFade(void);
+static void PlayerPartnerHandleSuccessBallThrowAnim(void);
+static void PlayerPartnerHandleBallThrowAnim(void);
+static void PlayerPartnerHandlePause(void);
+static void PlayerPartnerHandleMoveAnimation(void);
+static void PlayerPartnerHandlePrintString(void);
+static void PlayerPartnerHandlePrintStringPlayerOnly(void);
+static void PlayerPartnerHandleChooseAction(void);
+static void PlayerPartnerHandleUnknownYesNoBox(void);
+static void PlayerPartnerHandleChooseMove(void);
+static void PlayerPartnerHandleChooseItem(void);
+static void PlayerPartnerHandleChoosePokemon(void);
+static void PlayerPartnerHandleCmd23(void);
+static void PlayerPartnerHandleHealthBarUpdate(void);
+static void PlayerPartnerHandleExpUpdate(void);
+static void PlayerPartnerHandleStatusIconUpdate(void);
+static void PlayerPartnerHandleStatusAnimation(void);
+static void PlayerPartnerHandleStatusXor(void);
+static void PlayerPartnerHandleDataTransfer(void);
+static void PlayerPartnerHandleDMA3Transfer(void);
+static void PlayerPartnerHandlePlayBGM(void);
+static void PlayerPartnerHandleCmd32(void);
+static void PlayerPartnerHandleTwoReturnValues(void);
+static void PlayerPartnerHandleChosenMonReturnValue(void);
+static void PlayerPartnerHandleOneReturnValue(void);
+static void PlayerPartnerHandleOneReturnValue_Duplicate(void);
+static void PlayerPartnerHandleCmd37(void);
+static void PlayerPartnerHandleCmd38(void);
+static void PlayerPartnerHandleCmd39(void);
+static void PlayerPartnerHandleCmd40(void);
+static void PlayerPartnerHandleHitAnimation(void);
+static void PlayerPartnerHandleCmd42(void);
+static void PlayerPartnerHandleEffectivenessSound(void);
+static void PlayerPartnerHandlePlayFanfareOrBGM(void);
+static void PlayerPartnerHandleFaintingCry(void);
+static void PlayerPartnerHandleIntroSlide(void);
+static void PlayerPartnerHandleIntroTrainerBallThrow(void);
+static void PlayerPartnerHandleDrawPartyStatusSummary(void);
+static void PlayerPartnerHandleCmd49(void);
+static void PlayerPartnerHandleCmd50(void);
+static void PlayerPartnerHandleSpriteInvisibility(void);
+static void PlayerPartnerHandleBattleAnimation(void);
+static void PlayerPartnerHandleLinkStandbyMsg(void);
+static void PlayerPartnerHandleResetActionMoveSelection(void);
+static void PlayerPartnerHandleCmd55(void);
+static void nullsub_128(void);
+
+static void PlayerPartnerBufferRunCommand(void);
+static void PlayerPartnerBufferExecCompleted(void);
+static void sub_81BB628(u8 taskId);
+static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8 taskId);
+static void Task_PrepareToGiveExpWithExpBar(u8 taskId);
+static void sub_81BB4E4(u8 taskId);
+static void sub_81BB628(u8 taskId);
+static void sub_81BB688(u8 taskId);
+static void sub_81BB9A0(void);
+static u32 CopyPlayerPartnerMonData(u8 monId, u8 *dst);
+static void SetPlayerPartnerMonData(u8 monId);
+static void sub_81BD0E4(u8 bank, bool8 dontClearSubstituteBit);
+static void DoSwitchOutAnimation(void);
+static void PlayerPartnerDoMoveAnimation(void);
+static void sub_81BE2C8(u8 taskId);
+static void sub_81BE498(void);
+
+static void (*const gPlayerPartnerBufferCommands[CONTOLLER_CMDS_COUNT])(void) =
+{
+ PlayerPartnerHandleGetMonData,
+ PlayerPartnerHandleGetRawMonData,
+ PlayerPartnerHandleSetMonData,
+ PlayerPartnerHandleSetRawMonData,
+ PlayerPartnerHandleLoadMonSprite,
+ PlayerPartnerHandleSwitchInAnim,
+ PlayerPartnerHandleReturnMonToBall,
+ PlayerPartnerHandleDrawTrainerPic,
+ PlayerPartnerHandleTrainerSlide,
+ PlayerPartnerHandleTrainerSlideBack,
+ PlayerPartnerHandleFaintAnimation,
+ PlayerPartnerHandlePaletteFade,
+ PlayerPartnerHandleSuccessBallThrowAnim,
+ PlayerPartnerHandleBallThrowAnim,
+ PlayerPartnerHandlePause,
+ PlayerPartnerHandleMoveAnimation,
+ PlayerPartnerHandlePrintString,
+ PlayerPartnerHandlePrintStringPlayerOnly,
+ PlayerPartnerHandleChooseAction,
+ PlayerPartnerHandleUnknownYesNoBox,
+ PlayerPartnerHandleChooseMove,
+ PlayerPartnerHandleChooseItem,
+ PlayerPartnerHandleChoosePokemon,
+ PlayerPartnerHandleCmd23,
+ PlayerPartnerHandleHealthBarUpdate,
+ PlayerPartnerHandleExpUpdate,
+ PlayerPartnerHandleStatusIconUpdate,
+ PlayerPartnerHandleStatusAnimation,
+ PlayerPartnerHandleStatusXor,
+ PlayerPartnerHandleDataTransfer,
+ PlayerPartnerHandleDMA3Transfer,
+ PlayerPartnerHandlePlayBGM,
+ PlayerPartnerHandleCmd32,
+ PlayerPartnerHandleTwoReturnValues,
+ PlayerPartnerHandleChosenMonReturnValue,
+ PlayerPartnerHandleOneReturnValue,
+ PlayerPartnerHandleOneReturnValue_Duplicate,
+ PlayerPartnerHandleCmd37,
+ PlayerPartnerHandleCmd38,
+ PlayerPartnerHandleCmd39,
+ PlayerPartnerHandleCmd40,
+ PlayerPartnerHandleHitAnimation,
+ PlayerPartnerHandleCmd42,
+ PlayerPartnerHandleEffectivenessSound,
+ PlayerPartnerHandlePlayFanfareOrBGM,
+ PlayerPartnerHandleFaintingCry,
+ PlayerPartnerHandleIntroSlide,
+ PlayerPartnerHandleIntroTrainerBallThrow,
+ PlayerPartnerHandleDrawPartyStatusSummary,
+ PlayerPartnerHandleCmd49,
+ PlayerPartnerHandleCmd50,
+ PlayerPartnerHandleSpriteInvisibility,
+ PlayerPartnerHandleBattleAnimation,
+ PlayerPartnerHandleLinkStandbyMsg,
+ PlayerPartnerHandleResetActionMoveSelection,
+ PlayerPartnerHandleCmd55,
+ nullsub_128
+};
+
+// unknown unused data
+static const u8 gUnknown_08617254[] =
+{
+ 0x83, 0x4d, 0xf3, 0x5f, 0x6f, 0x4f, 0xeb, 0x3e,
+ 0x67, 0x2e, 0x10, 0x46, 0x8c, 0x3d, 0x28, 0x35,
+ 0xc5, 0x2c, 0x15, 0x7f, 0xb5, 0x56, 0x9d, 0x53,
+ 0x3b, 0x43, 0xda, 0x36, 0x79, 0x2a, 0x0e, 0x53,
+};
+
+static void nullsub_77(void)
+{
+}
+
+void SetBankFuncToPlayerPartnerBufferRunCommand(void)
+{
+ gBattleBankFunc[gActiveBank] = PlayerPartnerBufferRunCommand;
+}
+
+static void PlayerPartnerBufferRunCommand(void)
+{
+ if (gBattleExecBuffer & gBitTable[gActiveBank])
+ {
+ if (gBattleBufferA[gActiveBank][0] < ARRAY_COUNT(gPlayerPartnerBufferCommands))
+ gPlayerPartnerBufferCommands[gBattleBufferA[gActiveBank][0]]();
+ else
+ PlayerPartnerBufferExecCompleted();
+ }
+}
+
+static void CompleteOnBankSpriteCallbackDummy(void)
+{
+ if (gSprites[gBankSpriteIds[gActiveBank]].callback == SpriteCallbackDummy)
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void sub_81BAE98(void)
+{
+ if (gSprites[gBankSpriteIds[gActiveBank]].callback == SpriteCallbackDummy)
+ {
+ nullsub_25(0);
+ FreeSpriteOamMatrix(&gSprites[gBankSpriteIds[gActiveBank]]);
+ DestroySprite(&gSprites[gBankSpriteIds[gActiveBank]]);
+ PlayerPartnerBufferExecCompleted();
+ }
+}
+
+static void sub_81BAF00(void)
+{
+ if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_9 == 0xFF)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_9 = 0;
+ PlayerPartnerBufferExecCompleted();
+ }
+}
+
+static void sub_81BAF48(void)
+{
+ bool32 r6 = FALSE;
+
+ if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI)))
+ {
+ if (gSprites[gHealthBoxesIds[gActiveBank]].callback == SpriteCallbackDummy)
+ r6 = TRUE;
+ }
+ else
+ {
+ if (gSprites[gHealthBoxesIds[gActiveBank]].callback == SpriteCallbackDummy
+ && gSprites[gHealthBoxesIds[gActiveBank ^ BIT_MON]].callback == SpriteCallbackDummy)
+ {
+ r6 = TRUE;
+ }
+ }
+
+ if (IsCryPlayingOrClearCrySongs())
+ r6 = FALSE;
+
+ if (r6)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_9 = 3;
+ gBattleBankFunc[gActiveBank] = sub_81BAF00;
+ }
+}
+
+static void sub_81BB02C(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].flag_x8
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBank ^ BIT_MON].flag_x8
+ && gSprites[gUnknown_03005D7C[gActiveBank]].callback == SpriteCallbackDummy
+ && gSprites[gBankSpriteIds[gActiveBank]].callback == SpriteCallbackDummy
+ && ++gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_9 != 1)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_9 = 0;
+
+ if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ {
+ DestroySprite(&gSprites[gUnknown_03005D7C[gActiveBank ^ BIT_MON]]);
+ UpdateHealthboxAttribute(gHealthBoxesIds[gActiveBank ^ BIT_MON], &gPlayerParty[gBattlePartyID[gActiveBank ^ BIT_MON]], HEALTHBOX_ALL);
+ sub_8076918(gActiveBank ^ BIT_MON);
+ SetHealthboxSpriteVisible(gHealthBoxesIds[gActiveBank ^ BIT_MON]);
+ }
+
+ DestroySprite(&gSprites[gUnknown_03005D7C[gActiveBank]]);
+ UpdateHealthboxAttribute(gHealthBoxesIds[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], HEALTHBOX_ALL);
+ sub_8076918(gActiveBank);
+ SetHealthboxSpriteVisible(gHealthBoxesIds[gActiveBank]);
+
+ gBattleSpritesDataPtr->animationData->field_9_x1 = 0;
+
+ gBattleBankFunc[gActiveBank] = sub_81BAF48;
+ }
+}
+
+static void sub_81BB1D4(void)
+{
+ if (gSprites[gBankSpriteIds[gActiveBank]].animEnded && gSprites[gBankSpriteIds[gActiveBank]].pos2.x == 0)
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void CompleteOnHealthbarDone(void)
+{
+ s16 hpValue = sub_8074AA0(gActiveBank, gHealthBoxesIds[gActiveBank], 0, 0);
+
+ SetHealthboxSpriteVisible(gHealthBoxesIds[gActiveBank]);
+
+ if (hpValue != -1)
+ {
+ UpdateHpTextInHealthbox(gHealthBoxesIds[gActiveBank], hpValue, HP_CURRENT);
+ }
+ else
+ {
+ sub_805E990(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ PlayerPartnerBufferExecCompleted();
+ }
+}
+
+static void CompleteOnInactiveTextPrinter(void)
+{
+ if (!IsTextPrinterActive(0))
+ PlayerPartnerBufferExecCompleted();
+}
+
+// the whole exp task is copied&pasted from player controller
+#define tExpTask_monId data[0]
+#define tExpTask_gainedExp data[1]
+#define tExpTask_bank data[2]
+#define tExpTask_frames data[10]
+
+static void Task_GiveExpToMon(u8 taskId)
+{
+ u32 monId = (u8)(gTasks[taskId].tExpTask_monId);
+ u8 bank = gTasks[taskId].tExpTask_bank;
+ s16 gainedExp = gTasks[taskId].tExpTask_gainedExp;
+
+ if (IsDoubleBattle() == TRUE || monId != gBattlePartyID[bank]) // give exp without the expbar
+ {
+ struct Pokemon *mon = &gPlayerParty[monId];
+ u16 species = GetMonData(mon, MON_DATA_SPECIES);
+ u8 level = GetMonData(mon, MON_DATA_LEVEL);
+ u32 currExp = GetMonData(mon, MON_DATA_EXP);
+ u32 nextLvlExp = gExperienceTables[gBaseStats[species].growthRate][level + 1];
+
+ if (currExp + gainedExp >= nextLvlExp)
+ {
+ u8 savedActiveBank;
+
+ SetMonData(mon, MON_DATA_EXP, &nextLvlExp);
+ CalculateMonStats(mon);
+ gainedExp -= nextLvlExp - currExp;
+ savedActiveBank = gActiveBank;
+ gActiveBank = bank;
+ EmitTwoReturnValues(1, RET_VALUE_LEVELLED_UP, gainedExp);
+ gActiveBank = savedActiveBank;
+
+ if (IsDoubleBattle() == TRUE
+ && ((u16)(monId) == gBattlePartyID[bank] || (u16)(monId) == gBattlePartyID[bank ^ BIT_MON]))
+ gTasks[taskId].func = sub_81BB628;
+ else
+ gTasks[taskId].func = DestroyExpTaskAndCompleteOnInactiveTextPrinter;
+ }
+ else
+ {
+ currExp += gainedExp;
+ SetMonData(mon, MON_DATA_EXP, &currExp);
+ gBattleBankFunc[bank] = CompleteOnInactiveTextPrinter;
+ DestroyTask(taskId);
+ }
+ }
+ else
+ {
+ gTasks[taskId].func = Task_PrepareToGiveExpWithExpBar;
+ }
+}
+
+static void Task_PrepareToGiveExpWithExpBar(u8 taskId)
+{
+ u8 monIndex = gTasks[taskId].tExpTask_monId;
+ s32 gainedExp = gTasks[taskId].tExpTask_gainedExp;
+ u8 bank = gTasks[taskId].tExpTask_bank;
+ struct Pokemon *mon = &gPlayerParty[monIndex];
+ u8 level = GetMonData(mon, MON_DATA_LEVEL);
+ u16 species = GetMonData(mon, MON_DATA_SPECIES);
+ u32 exp = GetMonData(mon, MON_DATA_EXP);
+ u32 currLvlExp = gExperienceTables[gBaseStats[species].growthRate][level];
+ u32 expToNextLvl;
+
+ exp -= currLvlExp;
+ expToNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLvlExp;
+ SetBattleBarStruct(bank, gHealthBoxesIds[bank], expToNextLvl, exp, -gainedExp);
+ PlaySE(SE_EXP);
+ gTasks[taskId].func = sub_81BB4E4;
+}
+
+static void sub_81BB4E4(u8 taskId)
+{
+ if (gTasks[taskId].tExpTask_frames < 13)
+ {
+ gTasks[taskId].tExpTask_frames++;
+ }
+ else
+ {
+ u8 monId = gTasks[taskId].tExpTask_monId;
+ s16 gainedExp = gTasks[taskId].tExpTask_gainedExp;
+ u8 bank = gTasks[taskId].tExpTask_bank;
+ s16 r4;
+
+ r4 = sub_8074AA0(bank, gHealthBoxesIds[bank], EXP_BAR, 0);
+ SetHealthboxSpriteVisible(gHealthBoxesIds[bank]);
+ if (r4 == -1)
+ {
+ u8 level;
+ s32 currExp;
+ u16 species;
+ s32 expOnNextLvl;
+
+ m4aSongNumStop(SE_EXP);
+ level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL);
+ currExp = GetMonData(&gPlayerParty[monId], MON_DATA_EXP);
+ species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES);
+ expOnNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1];
+
+ if (currExp + gainedExp >= expOnNextLvl)
+ {
+ u8 savedActiveBank;
+
+ SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &expOnNextLvl);
+ CalculateMonStats(&gPlayerParty[monId]);
+ gainedExp -= expOnNextLvl - currExp;
+ savedActiveBank = gActiveBank;
+ gActiveBank = bank;
+ EmitTwoReturnValues(1, RET_VALUE_LEVELLED_UP, gainedExp);
+ gActiveBank = savedActiveBank;
+ gTasks[taskId].func = sub_81BB628;
+ }
+ else
+ {
+ currExp += gainedExp;
+ SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &currExp);
+ gBattleBankFunc[bank] = CompleteOnInactiveTextPrinter;
+ DestroyTask(taskId);
+ }
+ }
+ }
+}
+
+static void sub_81BB628(u8 taskId)
+{
+ u8 bank = gTasks[taskId].tExpTask_bank;
+ u8 monIndex = gTasks[taskId].tExpTask_monId;
+
+ if (IsDoubleBattle() == TRUE && monIndex == gBattlePartyID[bank ^ BIT_MON])
+ bank ^= BIT_MON;
+
+ DoSpecialBattleAnimation(bank, bank, bank, B_ANIM_LVL_UP);
+ gTasks[taskId].func = sub_81BB688;
+}
+
+static void sub_81BB688(u8 taskId)
+{
+ u8 bank = gTasks[taskId].tExpTask_bank;
+
+ if (!gBattleSpritesDataPtr->healthBoxesData[bank].specialAnimActive)
+ {
+ u8 monIndex = gTasks[taskId].tExpTask_monId;
+
+ GetMonData(&gPlayerParty[monIndex], MON_DATA_LEVEL); // Unused return value
+
+ if (IsDoubleBattle() == TRUE && monIndex == gBattlePartyID[bank ^ BIT_MON])
+ UpdateHealthboxAttribute(gHealthBoxesIds[bank ^ BIT_MON], &gPlayerParty[monIndex], HEALTHBOX_ALL);
+ else
+ UpdateHealthboxAttribute(gHealthBoxesIds[bank], &gPlayerParty[monIndex], HEALTHBOX_ALL);
+
+ gTasks[taskId].func = DestroyExpTaskAndCompleteOnInactiveTextPrinter;
+ }
+}
+
+static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8 taskId)
+{
+ u8 monIndex;
+ u8 bank;
+
+ monIndex = gTasks[taskId].tExpTask_monId;
+ GetMonData(&gPlayerParty[monIndex], MON_DATA_LEVEL); // Unused return value
+ bank = gTasks[taskId].tExpTask_bank;
+ gBattleBankFunc[bank] = CompleteOnInactiveTextPrinter;
+ DestroyTask(taskId);
+}
+
+static void sub_81BB78C(void)
+{
+ if (gSprites[gBankSpriteIds[gActiveBank]].pos1.y + gSprites[gBankSpriteIds[gActiveBank]].pos2.y > DISPLAY_HEIGHT)
+ {
+ u16 species = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES);
+
+ nullsub_24(species);
+ FreeOamMatrix(gSprites[gBankSpriteIds[gActiveBank]].oam.matrixNum);
+ DestroySprite(&gSprites[gBankSpriteIds[gActiveBank]]);
+ SetHealthboxSpriteInvisible(gHealthBoxesIds[gActiveBank]);
+ PlayerPartnerBufferExecCompleted();
+ }
+}
+
+static void sub_81BB828(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].specialAnimActive)
+ {
+ FreeSpriteOamMatrix(&gSprites[gBankSpriteIds[gActiveBank]]);
+ DestroySprite(&gSprites[gBankSpriteIds[gActiveBank]]);
+ SetHealthboxSpriteInvisible(gHealthBoxesIds[gActiveBank]);
+ PlayerPartnerBufferExecCompleted();
+ }
+}
+
+static void CompleteOnInactiveTextPrinter2(void)
+{
+ if (!IsTextPrinterActive(0))
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void DoHitAnimBlinkSpriteEffect(void)
+{
+ u8 spriteId = gBankSpriteIds[gActiveBank];
+
+ if (gSprites[spriteId].data1 == 32)
+ {
+ gSprites[spriteId].data1 = 0;
+ gSprites[spriteId].invisible = 0;
+ gDoingBattleAnim = FALSE;
+ PlayerPartnerBufferExecCompleted();
+ }
+ else
+ {
+ if ((gSprites[spriteId].data1 % 4) == 0)
+ gSprites[spriteId].invisible ^= 1;
+ gSprites[spriteId].data1++;
+ }
+}
+
+static void sub_81BB92C(void)
+{
+ if (gSprites[gHealthBoxesIds[gActiveBank]].callback == SpriteCallbackDummy)
+ {
+ SetBattleSpriteInvisibilityBitToSpriteInvisibility(gActiveBank);
+ if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute)
+ DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_MON_TO_SUBSTITUTE);
+
+ gBattleBankFunc[gActiveBank] = sub_81BB9A0;
+ }
+}
+
+static void sub_81BB9A0(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].specialAnimActive
+ && gSprites[gBankSpriteIds[gActiveBank]].callback == SpriteCallbackDummy)
+ {
+ PlayerPartnerBufferExecCompleted();
+ }
+}
+
+static void sub_81BB9F4(void)
+{
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_1_x1)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].flag_x80 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_1_x1 = 0;
+
+ FreeSpriteTilesByTag(0x27F9);
+ FreeSpritePaletteByTag(0x27F9);
+
+ CreateTask(c3_0802FDF4, 10);
+ sub_805E990(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ StartSpriteAnim(&gSprites[gBankSpriteIds[gActiveBank]], 0);
+ UpdateHealthboxAttribute(gHealthBoxesIds[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], HEALTHBOX_ALL);
+ sub_8076918(gActiveBank);
+ SetHealthboxSpriteVisible(gHealthBoxesIds[gActiveBank]);
+
+ gBattleBankFunc[gActiveBank] = sub_81BB92C;
+ }
+}
+
+static void sub_81BBAE8(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].flag_x80
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBank].flag_x8)
+ {
+ sub_8172EF0(gActiveBank, &gPlayerParty[gBattlePartyID[gActiveBank]]);
+ }
+
+ if (gSprites[gUnknown_03005D7C[gActiveBank]].callback == SpriteCallbackDummy
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBank].flag_x8)
+ {
+ DestroySprite(&gSprites[gUnknown_03005D7C[gActiveBank]]);
+ gBattleBankFunc[gActiveBank] = sub_81BB9F4;
+ }
+}
+
+static void PlayerPartnerBufferExecCompleted(void)
+{
+ gBattleBankFunc[gActiveBank] = PlayerPartnerBufferRunCommand;
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ u8 playerId = GetMultiplayerId();
+
+ PrepareBufferDataTransferLink(2, 4, &playerId);
+ gBattleBufferA[gActiveBank][0] = CONTOLLER_CMDS_COUNT - 1;
+ }
+ else
+ {
+ gBattleExecBuffer &= ~gBitTable[gActiveBank];
+ }
+}
+
+static void CompleteOnFinishedStatusAnimation(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].statusAnimActive)
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void CompleteOnFinishedBattleAnimation(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animFromTableActive)
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void PlayerPartnerHandleGetMonData(void)
+{
+ u8 monData[sizeof(struct Pokemon) * 2 + 56]; // this allows to get full data of two pokemon, trying to get more will result in overwriting data
+ u32 size = 0;
+ u8 monsToCheck;
+ s32 i;
+
+ if (gBattleBufferA[gActiveBank][2] == 0)
+ {
+ size += CopyPlayerPartnerMonData(gBattlePartyID[gActiveBank], monData);
+ }
+ else
+ {
+ monsToCheck = gBattleBufferA[gActiveBank][2];
+ for (i = 0; i < 6; i++)
+ {
+ if (monsToCheck & 1)
+ size += CopyPlayerPartnerMonData(i, monData + size);
+ monsToCheck >>= 1;
+ }
+ }
+ EmitDataTransfer(1, size, monData);
+ PlayerPartnerBufferExecCompleted();
+}
+
+static u32 CopyPlayerPartnerMonData(u8 monId, u8 *dst)
+{
+ struct BattlePokemon battleMon;
+ struct MovePpInfo moveData;
+ u8 nickname[20];
+ u8 *src;
+ s16 data16;
+ u32 data32;
+ s32 size = 0;
+
+ switch (gBattleBufferA[gActiveBank][1])
+ {
+ case REQUEST_ALL_BATTLE:
+ battleMon.species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES);
+ battleMon.item = GetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM);
+ for (size = 0; size < 4; size++)
+ {
+ battleMon.moves[size] = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + size);
+ battleMon.pp[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size);
+ }
+ battleMon.ppBonuses = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES);
+ battleMon.friendship = GetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP);
+ battleMon.experience = GetMonData(&gPlayerParty[monId], MON_DATA_EXP);
+ battleMon.hpIV = GetMonData(&gPlayerParty[monId], MON_DATA_HP_IV);
+ battleMon.attackIV = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV);
+ battleMon.defenseIV = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV);
+ battleMon.speedIV = GetMonData(&gPlayerParty[monId], MON_DATA_SPD_IV);
+ battleMon.spAttackIV = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV);
+ battleMon.spDefenseIV = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV);
+ battleMon.personality = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY);
+ battleMon.status1 = GetMonData(&gPlayerParty[monId], MON_DATA_STATUS);
+ battleMon.level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL);
+ battleMon.hp = GetMonData(&gPlayerParty[monId], MON_DATA_HP);
+ battleMon.maxHP = GetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP);
+ battleMon.attack = GetMonData(&gPlayerParty[monId], MON_DATA_ATK);
+ battleMon.defense = GetMonData(&gPlayerParty[monId], MON_DATA_DEF);
+ battleMon.speed = GetMonData(&gPlayerParty[monId], MON_DATA_SPD);
+ battleMon.spAttack = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK);
+ battleMon.spDefense = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF);
+ battleMon.isEgg = GetMonData(&gPlayerParty[monId], MON_DATA_IS_EGG);
+ battleMon.altAbility = GetMonData(&gPlayerParty[monId], MON_DATA_ALT_ABILITY);
+ battleMon.otId = GetMonData(&gPlayerParty[monId], MON_DATA_OT_ID);
+ GetMonData(&gPlayerParty[monId], MON_DATA_NICKNAME, nickname);
+ StringCopy10(battleMon.nickname, nickname);
+ GetMonData(&gPlayerParty[monId], MON_DATA_OT_NAME, battleMon.otName);
+ src = (u8 *)&battleMon;
+ for (size = 0; size < sizeof(battleMon); size++)
+ dst[size] = src[size];
+ break;
+ case REQUEST_SPECIES_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_HELDITEM_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_MOVES_PP_BATTLE:
+ for (size = 0; size < 4; size++)
+ {
+ moveData.moves[size] = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + size);
+ moveData.pp[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size);
+ }
+ moveData.ppBonuses = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES);
+ src = (u8*)(&moveData);
+ for (size = 0; size < sizeof(moveData); size++)
+ dst[size] = src[size];
+ break;
+ case REQUEST_MOVE1_BATTLE:
+ case REQUEST_MOVE2_BATTLE:
+ case REQUEST_MOVE3_BATTLE:
+ case REQUEST_MOVE4_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBank][1] - REQUEST_MOVE1_BATTLE);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_PP_DATA_BATTLE:
+ for (size = 0; size < 4; size++)
+ dst[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size);
+ dst[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES);
+ size++;
+ break;
+ case REQUEST_PPMOVE1_BATTLE:
+ case REQUEST_PPMOVE2_BATTLE:
+ case REQUEST_PPMOVE3_BATTLE:
+ case REQUEST_PPMOVE4_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBank][1] - REQUEST_PPMOVE1_BATTLE);
+ size = 1;
+ break;
+ case REQUEST_OTID_BATTLE:
+ data32 = GetMonData(&gPlayerParty[monId], MON_DATA_OT_ID);
+ dst[0] = (data32 & 0x000000FF);
+ dst[1] = (data32 & 0x0000FF00) >> 8;
+ dst[2] = (data32 & 0x00FF0000) >> 16;
+ size = 3;
+ break;
+ case REQUEST_EXP_BATTLE:
+ data32 = GetMonData(&gPlayerParty[monId], MON_DATA_EXP);
+ dst[0] = (data32 & 0x000000FF);
+ dst[1] = (data32 & 0x0000FF00) >> 8;
+ dst[2] = (data32 & 0x00FF0000) >> 16;
+ size = 3;
+ break;
+ case REQUEST_HP_EV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_HP_EV);
+ size = 1;
+ break;
+ case REQUEST_ATK_EV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_EV);
+ size = 1;
+ break;
+ case REQUEST_DEF_EV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_EV);
+ size = 1;
+ break;
+ case REQUEST_SPEED_EV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPD_EV);
+ size = 1;
+ break;
+ case REQUEST_SPATK_EV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_EV);
+ size = 1;
+ break;
+ case REQUEST_SPDEF_EV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_EV);
+ size = 1;
+ break;
+ case REQUEST_FRIENDSHIP_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP);
+ size = 1;
+ break;
+ case REQUEST_POKERUS_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_POKERUS);
+ size = 1;
+ break;
+ case REQUEST_MET_LOCATION_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_MET_LOCATION);
+ size = 1;
+ break;
+ case REQUEST_MET_LEVEL_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL);
+ size = 1;
+ break;
+ case REQUEST_MET_GAME_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_MET_GAME);
+ size = 1;
+ break;
+ case REQUEST_POKEBALL_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_POKEBALL);
+ size = 1;
+ break;
+ case REQUEST_ALL_IVS_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_HP_IV);
+ dst[1] = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV);
+ dst[2] = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV);
+ dst[3] = GetMonData(&gPlayerParty[monId], MON_DATA_SPD_IV);
+ dst[4] = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV);
+ dst[5] = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV);
+ size = 6;
+ break;
+ case REQUEST_HP_IV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_HP_IV);
+ size = 1;
+ break;
+ case REQUEST_ATK_IV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV);
+ size = 1;
+ break;
+ case REQUEST_DEF_IV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV);
+ size = 1;
+ break;
+ case REQUEST_SPEED_IV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPD_IV);
+ size = 1;
+ break;
+ case REQUEST_SPATK_IV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV);
+ size = 1;
+ break;
+ case REQUEST_SPDEF_IV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV);
+ size = 1;
+ break;
+ case REQUEST_PERSONALITY_BATTLE:
+ data32 = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY);
+ dst[0] = (data32 & 0x000000FF);
+ dst[1] = (data32 & 0x0000FF00) >> 8;
+ dst[2] = (data32 & 0x00FF0000) >> 16;
+ dst[3] = (data32 & 0xFF000000) >> 24;
+ size = 4;
+ break;
+ case REQUEST_CHECKSUM_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_CHECKSUM);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_STATUS_BATTLE:
+ data32 = GetMonData(&gPlayerParty[monId], MON_DATA_STATUS);
+ dst[0] = (data32 & 0x000000FF);
+ dst[1] = (data32 & 0x0000FF00) >> 8;
+ dst[2] = (data32 & 0x00FF0000) >> 16;
+ dst[3] = (data32 & 0xFF000000) >> 24;
+ size = 4;
+ break;
+ case REQUEST_LEVEL_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL);
+ size = 1;
+ break;
+ case REQUEST_HP_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_HP);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_MAX_HP_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_ATK_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_ATK);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_DEF_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_DEF);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_SPEED_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_SPD);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_SPATK_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_SPDEF_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_COOL_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_COOL);
+ size = 1;
+ break;
+ case REQUEST_BEAUTY_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY);
+ size = 1;
+ break;
+ case REQUEST_CUTE_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_CUTE);
+ size = 1;
+ break;
+ case REQUEST_SMART_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SMART);
+ size = 1;
+ break;
+ case REQUEST_TOUGH_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_TOUGH);
+ size = 1;
+ break;
+ case REQUEST_SHEEN_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SHEEN);
+ size = 1;
+ break;
+ case REQUEST_COOL_RIBBON_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_COOL_RIBBON);
+ size = 1;
+ break;
+ case REQUEST_BEAUTY_RIBBON_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY_RIBBON);
+ size = 1;
+ break;
+ case REQUEST_CUTE_RIBBON_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_CUTE_RIBBON);
+ size = 1;
+ break;
+ case REQUEST_SMART_RIBBON_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SMART_RIBBON);
+ size = 1;
+ break;
+ case REQUEST_TOUGH_RIBBON_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON);
+ size = 1;
+ break;
+ }
+
+ return size;
+}
+
+static void PlayerPartnerHandleGetRawMonData(void)
+{
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void PlayerPartnerHandleSetMonData(void)
+{
+ u8 monsToCheck;
+ u8 i;
+
+ if (gBattleBufferA[gActiveBank][2] == 0)
+ {
+ SetPlayerPartnerMonData(gBattlePartyID[gActiveBank]);
+ }
+ else
+ {
+ monsToCheck = gBattleBufferA[gActiveBank][2];
+ for (i = 0; i < 6; i++)
+ {
+ if (monsToCheck & 1)
+ SetPlayerPartnerMonData(i);
+ monsToCheck >>= 1;
+ }
+ }
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void SetPlayerPartnerMonData(u8 monId)
+{
+ struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleBufferA[gActiveBank][3];
+ struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleBufferA[gActiveBank][3];
+ s32 i;
+
+ switch (gBattleBufferA[gActiveBank][1])
+ {
+ case REQUEST_ALL_BATTLE:
+ {
+ u8 iv;
+
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &battlePokemon->species);
+ SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &battlePokemon->item);
+ for (i = 0; i < 4; i++)
+ {
+ SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + i, &battlePokemon->moves[i]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + i, &battlePokemon->pp[i]);
+ }
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &battlePokemon->ppBonuses);
+ SetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP, &battlePokemon->friendship);
+ SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &battlePokemon->experience);
+ iv = battlePokemon->hpIV;
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &iv);
+ iv = battlePokemon->attackIV;
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &iv);
+ iv = battlePokemon->defenseIV;
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &iv);
+ iv = battlePokemon->speedIV;
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPD_IV, &iv);
+ iv = battlePokemon->spAttackIV;
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &iv);
+ iv = battlePokemon->spDefenseIV;
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &iv);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY, &battlePokemon->personality);
+ SetMonData(&gPlayerParty[monId], MON_DATA_STATUS, &battlePokemon->status1);
+ SetMonData(&gPlayerParty[monId], MON_DATA_LEVEL, &battlePokemon->level);
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP, &battlePokemon->hp);
+ SetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP, &battlePokemon->maxHP);
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK, &battlePokemon->attack);
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF, &battlePokemon->defense);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPD, &battlePokemon->speed);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK, &battlePokemon->spAttack);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF, &battlePokemon->spDefense);
+ }
+ break;
+ case REQUEST_SPECIES_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_HELDITEM_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_MOVES_PP_BATTLE:
+ for (i = 0; i < 4; i++)
+ {
+ SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + i, &moveData->moves[i]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + i, &moveData->pp[i]);
+ }
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &moveData->ppBonuses);
+ break;
+ case REQUEST_MOVE1_BATTLE:
+ case REQUEST_MOVE2_BATTLE:
+ case REQUEST_MOVE3_BATTLE:
+ case REQUEST_MOVE4_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBank][1] - REQUEST_MOVE1_BATTLE, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_PP_DATA_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP1, &gBattleBufferA[gActiveBank][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP2, &gBattleBufferA[gActiveBank][4]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP3, &gBattleBufferA[gActiveBank][5]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP4, &gBattleBufferA[gActiveBank][6]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &gBattleBufferA[gActiveBank][7]);
+ break;
+ case REQUEST_PPMOVE1_BATTLE:
+ case REQUEST_PPMOVE2_BATTLE:
+ case REQUEST_PPMOVE3_BATTLE:
+ case REQUEST_PPMOVE4_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBank][1] - REQUEST_PPMOVE1_BATTLE, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_OTID_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_OT_ID, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_EXP_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_HP_EV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP_EV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_ATK_EV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK_EV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_DEF_EV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_SPEED_EV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPD_EV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_SPATK_EV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_SPDEF_EV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_EV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_FRIENDSHIP_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_POKERUS_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_POKERUS, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_MET_LOCATION_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_MET_LOCATION, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_MET_LEVEL_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_MET_GAME_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_MET_GAME, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_POKEBALL_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_POKEBALL, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_ALL_IVS_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][4]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][5]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][6]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][7]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][8]);
+ break;
+ case REQUEST_HP_IV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_ATK_IV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_DEF_IV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_SPEED_IV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_SPATK_IV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_SPDEF_IV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_PERSONALITY_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_CHECKSUM_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_CHECKSUM, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_STATUS_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_STATUS, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_LEVEL_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_LEVEL, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_HP_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_MAX_HP_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_ATK_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_DEF_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_SPEED_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPD, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_SPATK_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_SPDEF_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_COOL_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_COOL, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_BEAUTY_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_CUTE_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_CUTE, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_SMART_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SMART, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_TOUGH_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_SHEEN_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SHEEN, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_COOL_RIBBON_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_COOL_RIBBON, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_BEAUTY_RIBBON_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_CUTE_RIBBON_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_CUTE_RIBBON, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_SMART_RIBBON_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SMART_RIBBON, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_TOUGH_RIBBON_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBank][3]);
+ break;
+ }
+
+ sub_805E990(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+}
+
+static void PlayerPartnerHandleSetRawMonData(void)
+{
+ u8 *dst = (u8 *)&gPlayerParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1];
+ u8 i;
+
+ for (i = 0; i < gBattleBufferA[gActiveBank][2]; i++)
+ dst[i] = gBattleBufferA[gActiveBank][3 + i];
+
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void PlayerPartnerHandleLoadMonSprite(void)
+{
+ u16 species;
+
+ BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ species = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES);
+ sub_806A068(species, GetBankIdentity(gActiveBank));
+
+ gBankSpriteIds[gActiveBank] = CreateSprite(&gUnknown_0202499C,
+ sub_80A5C6C(gActiveBank, 2),
+ sub_80A6138(gActiveBank),
+ sub_80A82E4(gActiveBank));
+ gSprites[gBankSpriteIds[gActiveBank]].pos2.x = -240;
+ gSprites[gBankSpriteIds[gActiveBank]].data0 = gActiveBank;
+ gSprites[gBankSpriteIds[gActiveBank]].oam.paletteNum = gActiveBank;
+ StartSpriteAnim(&gSprites[gBankSpriteIds[gActiveBank]], gBattleMonForms[gActiveBank]);
+ gBattleBankFunc[gActiveBank] = sub_81BB1D4;
+}
+
+static void PlayerPartnerHandleSwitchInAnim(void)
+{
+ ClearTemporarySpeciesSpriteData(gActiveBank, gBattleBufferA[gActiveBank][2]);
+ gBattlePartyID[gActiveBank] = gBattleBufferA[gActiveBank][1];
+ BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ sub_81BD0E4(gActiveBank, gBattleBufferA[gActiveBank][2]);
+ gBattleBankFunc[gActiveBank] = sub_81BBAE8;
+}
+
+static void sub_81BD0E4(u8 bank, bool8 dontClearSubstituteBit)
+{
+ u16 species;
+
+ ClearTemporarySpeciesSpriteData(bank, dontClearSubstituteBit);
+ gBattlePartyID[bank] = gBattleBufferA[bank][1];
+ species = GetMonData(&gPlayerParty[gBattlePartyID[bank]], MON_DATA_SPECIES);
+ gUnknown_03005D7C[bank] = CreateInvisibleSpriteWithCallback(sub_805D714);
+ sub_806A068(species, GetBankIdentity(bank));
+
+ gBankSpriteIds[bank] = CreateSprite(
+ &gUnknown_0202499C,
+ sub_80A5C6C(bank, 2),
+ sub_80A6138(bank),
+ sub_80A82E4(bank));
+
+ gSprites[gUnknown_03005D7C[bank]].data1 = gBankSpriteIds[bank];
+ gSprites[gUnknown_03005D7C[bank]].data2 = bank;
+
+ gSprites[gBankSpriteIds[bank]].data0 = bank;
+ gSprites[gBankSpriteIds[bank]].data2 = species;
+ gSprites[gBankSpriteIds[bank]].oam.paletteNum = bank;
+
+ StartSpriteAnim(&gSprites[gBankSpriteIds[bank]], gBattleMonForms[bank]);
+
+ gSprites[gBankSpriteIds[bank]].invisible = TRUE;
+ gSprites[gBankSpriteIds[bank]].callback = SpriteCallbackDummy;
+
+ gSprites[gUnknown_03005D7C[bank]].data0 = sub_80753E8(0, 0xFF);
+}
+
+static void PlayerPartnerHandleReturnMonToBall(void)
+{
+ if (gBattleBufferA[gActiveBank][1] == 0)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 0;
+ gBattleBankFunc[gActiveBank] = DoSwitchOutAnimation;
+ }
+ else
+ {
+ FreeSpriteOamMatrix(&gSprites[gBankSpriteIds[gActiveBank]]);
+ DestroySprite(&gSprites[gBankSpriteIds[gActiveBank]]);
+ SetHealthboxSpriteInvisible(gHealthBoxesIds[gActiveBank]);
+ PlayerPartnerBufferExecCompleted();
+ }
+}
+
+static void DoSwitchOutAnimation(void)
+{
+ switch (gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState)
+ {
+ case 0:
+ if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute)
+ DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
+
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 1;
+ break;
+ case 1:
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].specialAnimActive)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 0;
+ DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SWITCH_OUT_MON);
+ gBattleBankFunc[gActiveBank] = sub_81BB828;
+ }
+ break;
+ }
+}
+
+// todo: get rid of it once the struct is declared in a header
+struct MonCoords
+{
+ // This would use a bitfield, but sub_8079F44
+ // uses it as a u8 and casting won't match.
+ u8 coords; // u8 x:4, y:4;
+ u8 y_offset;
+};
+extern const struct MonCoords gTrainerBackPicCoords[];
+extern const struct MonCoords gTrainerFrontPicCoords[];
+
+// some explanation here
+// in emerald it's possible to have a tag battle in the battle frontier facilities with AI
+// which use the front sprite for both the player and the partner as opposed to any other battles (including the one with Steven) that use the back pic as well as animate it
+static void PlayerPartnerHandleDrawTrainerPic(void)
+{
+ s16 xPos, yPos;
+ u32 trainerPicId;
+
+ if (gPartnerTrainerId == STEVEN_PARTNER_ID)
+ {
+ trainerPicId = BACK_PIC_STEVEN;
+ xPos = 90;
+ yPos = (8 - gTrainerBackPicCoords[trainerPicId].coords) * 4 + 80;
+ }
+ else
+ {
+ trainerPicId = GetFrontierTrainerFrontSpriteId(gPartnerTrainerId);
+ xPos = 32;
+ yPos = (8 - gTrainerFrontPicCoords[trainerPicId].coords) * 4 + 80;
+ }
+
+ // Use back pic only if the partner is Steven
+ if (gPartnerTrainerId == STEVEN_PARTNER_ID)
+ {
+ DecompressTrainerBackPic(trainerPicId, gActiveBank);
+ sub_806A12C(trainerPicId, GetBankIdentity(gActiveBank));
+ gBankSpriteIds[gActiveBank] = CreateSprite(&gUnknown_0202499C, xPos, yPos, sub_80A82E4(gActiveBank));
+
+ gSprites[gBankSpriteIds[gActiveBank]].oam.paletteNum = gActiveBank;
+ gSprites[gBankSpriteIds[gActiveBank]].pos2.x = 240;
+ gSprites[gBankSpriteIds[gActiveBank]].data0 = -2;
+ gSprites[gBankSpriteIds[gActiveBank]].callback = sub_805D7AC;
+ }
+ else // otherwise use front sprite
+ {
+ DecompressTrainerFrontPic(trainerPicId, gActiveBank);
+ sub_806A1C0(trainerPicId, GetBankIdentity(gActiveBank));
+ gBankSpriteIds[gActiveBank] = CreateSprite(&gUnknown_0202499C, xPos, yPos, sub_80A82E4(gActiveBank));
+
+ gSprites[gBankSpriteIds[gActiveBank]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicId].tag);
+ gSprites[gBankSpriteIds[gActiveBank]].pos2.x = 240;
+ gSprites[gBankSpriteIds[gActiveBank]].pos2.y = 48;
+ gSprites[gBankSpriteIds[gActiveBank]].data0 = -2;
+ gSprites[gBankSpriteIds[gActiveBank]].callback = sub_805D7AC;
+ gSprites[gBankSpriteIds[gActiveBank]].oam.affineMode = 0;
+ gSprites[gBankSpriteIds[gActiveBank]].hFlip = 1;
+ }
+
+ gBattleBankFunc[gActiveBank] = CompleteOnBankSpriteCallbackDummy;
+}
+
+static void PlayerPartnerHandleTrainerSlide(void)
+{
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void PlayerPartnerHandleTrainerSlideBack(void)
+{
+ oamt_add_pos2_onto_pos1(&gSprites[gBankSpriteIds[gActiveBank]]);
+ gSprites[gBankSpriteIds[gActiveBank]].data0 = 35;
+ gSprites[gBankSpriteIds[gActiveBank]].data2 = -40;
+ gSprites[gBankSpriteIds[gActiveBank]].data4 = gSprites[gBankSpriteIds[gActiveBank]].pos1.y;
+ gSprites[gBankSpriteIds[gActiveBank]].callback = sub_80A6EEC;
+ StoreSpriteCallbackInData6(&gSprites[gBankSpriteIds[gActiveBank]], SpriteCallbackDummy);
+ gBattleBankFunc[gActiveBank] = sub_81BAE98;
+}
+
+static void PlayerPartnerHandleFaintAnimation(void)
+{
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState == 0)
+ {
+ if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute)
+ DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState++;
+ }
+ else
+ {
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].specialAnimActive)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 0;
+ sub_805E990(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ PlaySE12WithPanning(SE_POKE_DEAD, -64);
+ gSprites[gBankSpriteIds[gActiveBank]].data1 = 0;
+ gSprites[gBankSpriteIds[gActiveBank]].data2 = 5;
+ gSprites[gBankSpriteIds[gActiveBank]].callback = sub_8039C00;
+ gBattleBankFunc[gActiveBank] = sub_81BB78C;
+ }
+ }
+}
+
+static void PlayerPartnerHandlePaletteFade(void)
+{
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void PlayerPartnerHandleSuccessBallThrowAnim(void)
+{
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void PlayerPartnerHandleBallThrowAnim(void)
+{
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void PlayerPartnerHandlePause(void)
+{
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void PlayerPartnerHandleMoveAnimation(void)
+{
+ if (!mplay_80342A4(gActiveBank))
+ {
+ u16 move = gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8);
+
+ gAnimMoveTurn = gBattleBufferA[gActiveBank][3];
+ gAnimMovePower = gBattleBufferA[gActiveBank][4] | (gBattleBufferA[gActiveBank][5] << 8);
+ gAnimMoveDmg = gBattleBufferA[gActiveBank][6] | (gBattleBufferA[gActiveBank][7] << 8) | (gBattleBufferA[gActiveBank][8] << 16) | (gBattleBufferA[gActiveBank][9] << 24);
+ gAnimFriendship = gBattleBufferA[gActiveBank][10];
+ gWeatherMoveAnim = gBattleBufferA[gActiveBank][12] | (gBattleBufferA[gActiveBank][13] << 8);
+ gAnimDisableStructPtr = (struct DisableStruct *)&gBattleBufferA[gActiveBank][16];
+ gTransformedPersonalities[gActiveBank] = gAnimDisableStructPtr->transformedMonPersonality;
+ if (IsMoveWithoutAnimation(move, gAnimMoveTurn)) // always returns FALSE
+ {
+ PlayerPartnerBufferExecCompleted();
+ }
+ else
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 0;
+ gBattleBankFunc[gActiveBank] = PlayerPartnerDoMoveAnimation;
+ }
+ }
+}
+
+static void PlayerPartnerDoMoveAnimation(void)
+{
+ u16 move = gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8);
+ u8 multihit = gBattleBufferA[gActiveBank][11];
+
+ switch (gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState)
+ {
+ case 0:
+ if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute
+ && !gBattleSpritesDataPtr->bankData[gActiveBank].flag_x8)
+ {
+ gBattleSpritesDataPtr->bankData[gActiveBank].flag_x8 = 1;
+ DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
+ }
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 1;
+ break;
+ case 1:
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].specialAnimActive)
+ {
+ sub_805EB9C(0);
+ DoMoveAnim(move);
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 2;
+ }
+ break;
+ case 2:
+ gAnimScriptCallback();
+ if (!gAnimScriptActive)
+ {
+ sub_805EB9C(1);
+ if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute && multihit < 2)
+ {
+ DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_MON_TO_SUBSTITUTE);
+ gBattleSpritesDataPtr->bankData[gActiveBank].flag_x8 = 0;
+ }
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 3;
+ }
+ break;
+ case 3:
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].specialAnimActive)
+ {
+ sub_805E394();
+ TrySetBehindSubstituteSpriteBit(gActiveBank, gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 0;
+ PlayerPartnerBufferExecCompleted();
+ }
+ break;
+ }
+}
+
+static void PlayerPartnerHandlePrintString(void)
+{
+ u16 *stringId;
+
+ gBattle_BG0_X = 0;
+ gBattle_BG0_Y = 0;
+ stringId = (u16*)(&gBattleBufferA[gActiveBank][2]);
+ BufferStringBattle(*stringId);
+ BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
+ gBattleBankFunc[gActiveBank] = CompleteOnInactiveTextPrinter2;
+}
+
+static void PlayerPartnerHandlePrintStringPlayerOnly(void)
+{
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void PlayerPartnerHandleChooseAction(void)
+{
+ AI_TrySwitchOrUseItem();
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void PlayerPartnerHandleUnknownYesNoBox(void)
+{
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void PlayerPartnerHandleChooseMove(void)
+{
+ u8 chosenMoveId;
+ struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct*)(&gBattleBufferA[gActiveBank][4]);
+
+ BattleAI_SetupAIData(0xF);
+ chosenMoveId = BattleAI_ChooseMoveOrAction();
+
+ if (gBattleMoves[moveInfo->moves[chosenMoveId]].target & (MOVE_TARGET_x10 | MOVE_TARGET_USER))
+ gBankTarget = gActiveBank;
+ if (gBattleMoves[moveInfo->moves[chosenMoveId]].target & MOVE_TARGET_BOTH)
+ {
+ gBankTarget = GetBankByIdentity(IDENTITY_OPPONENT_MON1);
+ if (gAbsentBankFlags & gBitTable[gBankTarget])
+ gBankTarget = GetBankByIdentity(IDENTITY_OPPONENT_MON2);
+ }
+
+ EmitTwoReturnValues(1, 10, chosenMoveId | (gBankTarget << 8));
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void PlayerPartnerHandleChooseItem(void)
+{
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void PlayerPartnerHandleChoosePokemon(void)
+{
+ s32 chosenMonId = GetMostSuitableMonToSwitchInto();
+
+ if (chosenMonId == 6) // just switch to the next mon
+ {
+ u8 playerMonIdentity = GetBankByIdentity(IDENTITY_PLAYER_MON1);
+ u8 selfIdentity = GetBankByIdentity(IDENTITY_PLAYER_MON2);
+
+ for (chosenMonId = 3; chosenMonId < 6; chosenMonId++)
+ {
+ if (GetMonData(&gPlayerParty[chosenMonId], MON_DATA_HP) != 0
+ && chosenMonId != gBattlePartyID[playerMonIdentity]
+ && chosenMonId != gBattlePartyID[selfIdentity])
+ {
+ break;
+ }
+ }
+ }
+
+ *(gBattleStruct->field_5C + gActiveBank) = chosenMonId;
+ EmitChosenMonReturnValue(1, chosenMonId, NULL);
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void PlayerPartnerHandleCmd23(void)
+{
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void PlayerPartnerHandleHealthBarUpdate(void)
+{
+ s16 hpVal;
+
+ LoadBattleBarGfx(0);
+ hpVal = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8);
+
+ if (hpVal != INSTANT_HP_BAR_DROP)
+ {
+ u32 maxHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP);
+ u32 curHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_HP);
+
+ SetBattleBarStruct(gActiveBank, gHealthBoxesIds[gActiveBank], maxHP, curHP, hpVal);
+ }
+ else
+ {
+ u32 maxHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP);
+
+ SetBattleBarStruct(gActiveBank, gHealthBoxesIds[gActiveBank], maxHP, 0, hpVal);
+ }
+
+ gBattleBankFunc[gActiveBank] = CompleteOnHealthbarDone;
+}
+
+static void PlayerPartnerHandleExpUpdate(void)
+{
+ u8 monId = gBattleBufferA[gActiveBank][1];
+
+ if (GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL) >= MAX_MON_LEVEL)
+ {
+ PlayerPartnerBufferExecCompleted();
+ }
+ else
+ {
+ s16 expPointsToGive;
+ u8 taskId;
+
+ LoadBattleBarGfx(1);
+ GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES); // unused return value
+ expPointsToGive = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8);
+ taskId = CreateTask(Task_GiveExpToMon, 10);
+ gTasks[taskId].tExpTask_monId = monId;
+ gTasks[taskId].tExpTask_gainedExp = expPointsToGive;
+ gTasks[taskId].tExpTask_bank = gActiveBank;
+ gBattleBankFunc[gActiveBank] = nullsub_21;
+ }
+}
+
+#undef tExpTask_monId
+#undef tExpTask_gainedExp
+#undef tExpTask_bank
+#undef tExpTask_frames
+
+static void PlayerPartnerHandleStatusIconUpdate(void)
+{
+ if (!mplay_80342A4(gActiveBank))
+ {
+ u8 bank;
+
+ UpdateHealthboxAttribute(gHealthBoxesIds[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], HEALTHBOX_STATUS_ICON);
+ bank = gActiveBank;
+ gBattleSpritesDataPtr->healthBoxesData[bank].statusAnimActive = 0;
+ gBattleBankFunc[gActiveBank] = CompleteOnFinishedStatusAnimation;
+ }
+}
+
+static void PlayerPartnerHandleStatusAnimation(void)
+{
+ if (!mplay_80342A4(gActiveBank))
+ {
+ DoStatusAnimation(gBattleBufferA[gActiveBank][1],
+ gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8) | (gBattleBufferA[gActiveBank][4] << 16) | (gBattleBufferA[gActiveBank][5] << 24));
+ gBattleBankFunc[gActiveBank] = CompleteOnFinishedStatusAnimation;
+ }
+}
+
+static void PlayerPartnerHandleStatusXor(void)
+{
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void PlayerPartnerHandleDataTransfer(void)
+{
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void PlayerPartnerHandleDMA3Transfer(void)
+{
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void PlayerPartnerHandlePlayBGM(void)
+{
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void PlayerPartnerHandleCmd32(void)
+{
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void PlayerPartnerHandleTwoReturnValues(void)
+{
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void PlayerPartnerHandleChosenMonReturnValue(void)
+{
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void PlayerPartnerHandleOneReturnValue(void)
+{
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void PlayerPartnerHandleOneReturnValue_Duplicate(void)
+{
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void PlayerPartnerHandleCmd37(void)
+{
+ gUnknown_02022D0C.field_0 = 0;
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void PlayerPartnerHandleCmd38(void)
+{
+ gUnknown_02022D0C.field_0 = gBattleBufferA[gActiveBank][1];
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void PlayerPartnerHandleCmd39(void)
+{
+ gUnknown_02022D0C.flag_x80 = 0;
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void PlayerPartnerHandleCmd40(void)
+{
+ gUnknown_02022D0C.flag_x80 ^= 1;
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void PlayerPartnerHandleHitAnimation(void)
+{
+ if (gSprites[gBankSpriteIds[gActiveBank]].invisible == TRUE)
+ {
+ PlayerPartnerBufferExecCompleted();
+ }
+ else
+ {
+ gDoingBattleAnim = TRUE;
+ gSprites[gBankSpriteIds[gActiveBank]].data1 = 0;
+ DoHitAnimHealthboxEffect(gActiveBank);
+ gBattleBankFunc[gActiveBank] = DoHitAnimBlinkSpriteEffect;
+ }
+}
+
+static void PlayerPartnerHandleCmd42(void)
+{
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void PlayerPartnerHandleEffectivenessSound(void)
+{
+ s8 pan;
+
+ if (GetBankSide(gActiveBank) == SIDE_PLAYER)
+ pan = PAN_SIDE_PLAYER;
+ else
+ pan = PAN_SIDE_OPPONENT;
+
+ PlaySE12WithPanning(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8), pan);
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void PlayerPartnerHandlePlayFanfareOrBGM(void)
+{
+ if (gBattleBufferA[gActiveBank][3])
+ {
+ BattleMusicStop();
+ PlayBGM(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
+ }
+ else
+ {
+ PlayFanfare(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
+ }
+
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void PlayerPartnerHandleFaintingCry(void)
+{
+ u16 species = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES);
+
+ PlayCry3(species, -25, 5);
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void PlayerPartnerHandleIntroSlide(void)
+{
+ HandleIntroSlide(gBattleBufferA[gActiveBank][1]);
+ gUnknown_020243FC |= 1;
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void PlayerPartnerHandleIntroTrainerBallThrow(void)
+{
+ u8 paletteNum;
+ u8 taskId;
+
+ oamt_add_pos2_onto_pos1(&gSprites[gBankSpriteIds[gActiveBank]]);
+
+ gSprites[gBankSpriteIds[gActiveBank]].data0 = 50;
+ gSprites[gBankSpriteIds[gActiveBank]].data2 = -40;
+ gSprites[gBankSpriteIds[gActiveBank]].data4 = gSprites[gBankSpriteIds[gActiveBank]].pos1.y;
+ gSprites[gBankSpriteIds[gActiveBank]].callback = sub_80A6EEC;
+ gSprites[gBankSpriteIds[gActiveBank]].data5 = gActiveBank;
+
+ StoreSpriteCallbackInData6(&gSprites[gBankSpriteIds[gActiveBank]], sub_805CC00);
+ StartSpriteAnim(&gSprites[gBankSpriteIds[gActiveBank]], 1);
+
+ paletteNum = AllocSpritePalette(0xD6F9);
+ if (gPartnerTrainerId == STEVEN_PARTNER_ID)
+ {
+ u8 spriteId = BACK_PIC_STEVEN;
+ LoadCompressedPalette(gTrainerBackPicPaletteTable[spriteId].data, 0x100 + paletteNum * 16, 32);
+ }
+ else
+ {
+ u8 spriteId = GetFrontierTrainerFrontSpriteId(gPartnerTrainerId);
+ LoadCompressedPalette(gTrainerFrontPicPaletteTable[spriteId].data, 0x100 + paletteNum * 16, 32);
+ }
+
+
+ gSprites[gBankSpriteIds[gActiveBank]].oam.paletteNum = paletteNum;
+
+ taskId = CreateTask(sub_81BE2C8, 5);
+ gTasks[taskId].data[0] = gActiveBank;
+
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBank].flag_x1)
+ gTasks[gUnknown_020244B4[gActiveBank]].func = sub_8073C30;
+
+ gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
+ gBattleBankFunc[gActiveBank] = nullsub_77;
+}
+
+static void sub_81BE2C8(u8 taskId)
+{
+ if (gTasks[taskId].data[1] < 24)
+ {
+ gTasks[taskId].data[1]++;
+ }
+ else
+ {
+ u8 savedActiveBank = gActiveBank;
+
+ gActiveBank = gTasks[taskId].data[0];
+ if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ {
+ gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank];
+ sub_81BD0E4(gActiveBank, FALSE);
+ }
+ else
+ {
+ gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank];
+ sub_81BD0E4(gActiveBank, FALSE);
+ gActiveBank ^= BIT_MON;
+ gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank];
+ BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ sub_81BD0E4(gActiveBank, FALSE);
+ gActiveBank ^= BIT_MON;
+ }
+ gBattleBankFunc[gActiveBank] = sub_81BB02C;
+ gActiveBank = savedActiveBank;
+ DestroyTask(taskId);
+ }
+}
+
+static void PlayerPartnerHandleDrawPartyStatusSummary(void)
+{
+ if (gBattleBufferA[gActiveBank][1] != 0 && GetBankSide(gActiveBank) == SIDE_PLAYER)
+ {
+ PlayerPartnerBufferExecCompleted();
+ }
+ else
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].flag_x1 = 1;
+ gUnknown_020244B4[gActiveBank] = CreatePartyStatusSummarySprites(gActiveBank, (struct HpAndStatus *)&gBattleBufferA[gActiveBank][4], gBattleBufferA[gActiveBank][1], gBattleBufferA[gActiveBank][2]);
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_5 = 0;
+
+ if (gBattleBufferA[gActiveBank][2] != 0)
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_5 = 0x5D;
+
+ gBattleBankFunc[gActiveBank] = sub_81BE498;
+ }
+}
+
+static void sub_81BE498(void)
+{
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_5++ > 0x5C)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_5 = 0;
+ PlayerPartnerBufferExecCompleted();
+ }
+}
+
+static void PlayerPartnerHandleCmd49(void)
+{
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBank].flag_x1)
+ gTasks[gUnknown_020244B4[gActiveBank]].func = sub_8073C30;
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void PlayerPartnerHandleCmd50(void)
+{
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void PlayerPartnerHandleSpriteInvisibility(void)
+{
+ if (AnimBankSpriteExists(gActiveBank))
+ {
+ gSprites[gBankSpriteIds[gActiveBank]].invisible = gBattleBufferA[gActiveBank][1];
+ SetBattleSpriteInvisibilityBitToSpriteInvisibility(gActiveBank);
+ }
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void PlayerPartnerHandleBattleAnimation(void)
+{
+ if (!mplay_80342A4(gActiveBank))
+ {
+ u8 animationId = gBattleBufferA[gActiveBank][1];
+ u16 argument = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8);
+
+ if (DoBattleAnimationFromTable(gActiveBank, gActiveBank, gActiveBank, animationId, argument))
+ PlayerPartnerBufferExecCompleted();
+ else
+ gBattleBankFunc[gActiveBank] = CompleteOnFinishedBattleAnimation;
+ }
+}
+
+static void PlayerPartnerHandleLinkStandbyMsg(void)
+{
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void PlayerPartnerHandleResetActionMoveSelection(void)
+{
+ PlayerPartnerBufferExecCompleted();
+}
+
+static void PlayerPartnerHandleCmd55(void)
+{
+ gBattleOutcome = gBattleBufferA[gActiveBank][1];
+ FadeOutMapMusic(5);
+ BeginFastPaletteFade(3);
+ PlayerPartnerBufferExecCompleted();
+ gBattleBankFunc[gActiveBank] = sub_80587B0;
+}
+
+static void nullsub_128(void)
+{
+}
diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c
new file mode 100644
index 000000000..efedf52b6
--- /dev/null
+++ b/src/battle_controller_recorded_player.c
@@ -0,0 +1,1854 @@
+#include "global.h"
+#include "battle.h"
+#include "battle_controllers.h"
+#include "battle_message.h"
+#include "battle_interface.h"
+#include "battle_anim.h"
+#include "battle_ai_script_commands.h"
+#include "recorded_battle.h"
+#include "pokemon.h"
+#include "link.h"
+#include "util.h"
+#include "main.h"
+#include "songs.h"
+#include "sound.h"
+#include "window.h"
+#include "m4a.h"
+#include "palette.h"
+#include "task.h"
+#include "text.h"
+#include "string_util.h"
+#include "bg.h"
+#include "reshow_battle_screen.h"
+#include "pokeball.h"
+
+extern u32 gBattleExecBuffer;
+extern u8 gActiveBank;
+extern u8 gBankSpriteIds[BATTLE_BANKS_COUNT];
+extern u8 gActionSelectionCursor[BATTLE_BANKS_COUNT];
+extern u8 gNoOfAllBanks;
+extern bool8 gDoingBattleAnim;
+extern void (*gBattleBankFunc[BATTLE_BANKS_COUNT])(void);
+extern void (*gPreBattleCallback1)(void);
+extern u16 gBattlePartyID[BATTLE_BANKS_COUNT];
+extern u8 gBattleBufferA[BATTLE_BANKS_COUNT][0x200];
+extern u8 gBattleBufferB[BATTLE_BANKS_COUNT][0x200];
+extern struct BattlePokemon gBattleMons[BATTLE_BANKS_COUNT];
+extern struct SpriteTemplate gUnknown_0202499C;
+extern u16 gScriptItemId;
+extern u8 gHealthBoxesIds[BATTLE_BANKS_COUNT];
+extern u8 gBattleOutcome;
+extern u16 gBattle_BG0_X;
+extern u16 gBattle_BG0_Y;
+extern u8 gBankInMenu;
+extern u16 gUnknown_020243FC;
+extern u8 gUnknown_03005D7C[BATTLE_BANKS_COUNT];
+extern u8 gBattleMonForms[BATTLE_BANKS_COUNT];
+extern u16 gPartnerTrainerId;
+extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
+extern u8 gBankTarget;
+extern u8 gAbsentBankFlags;
+extern u8 gUnknown_020244B4[];
+extern u32 gTransformedPersonalities[BATTLE_BANKS_COUNT];
+extern u8 gBattleCommunication[];
+extern u8 gUnknown_0203C7B4;
+extern struct MusicPlayerInfo gMPlay_BGM;
+extern struct UnusedControllerStruct gUnknown_02022D0C;
+
+extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
+extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
+extern const struct BattleMove gBattleMoves[];
+
+extern void sub_8172EF0(u8 bank, struct Pokemon *mon);
+extern void sub_806A068(u16, u8);
+
+// this file's functions
+static void RecordedPlayerHandleGetMonData(void);
+static void RecordedPlayerHandleGetRawMonData(void);
+static void RecordedPlayerHandleSetMonData(void);
+static void RecordedPlayerHandleSetRawMonData(void);
+static void RecordedPlayerHandleLoadMonSprite(void);
+static void RecordedPlayerHandleSwitchInAnim(void);
+static void RecordedPlayerHandleReturnMonToBall(void);
+static void RecordedPlayerHandleDrawTrainerPic(void);
+static void RecordedPlayerHandleTrainerSlide(void);
+static void RecordedPlayerHandleTrainerSlideBack(void);
+static void RecordedPlayerHandleFaintAnimation(void);
+static void RecordedPlayerHandlePaletteFade(void);
+static void RecordedPlayerHandleSuccessBallThrowAnim(void);
+static void RecordedPlayerHandleBallThrowAnim(void);
+static void RecordedPlayerHandlePause(void);
+static void RecordedPlayerHandleMoveAnimation(void);
+static void RecordedPlayerHandlePrintString(void);
+static void RecordedPlayerHandlePrintStringPlayerOnly(void);
+static void RecordedPlayerHandleChooseAction(void);
+static void RecordedPlayerHandleUnknownYesNoBox(void);
+static void RecordedPlayerHandleChooseMove(void);
+static void RecordedPlayerHandleChooseItem(void);
+static void RecordedPlayerHandleChoosePokemon(void);
+static void RecordedPlayerHandleCmd23(void);
+static void RecordedPlayerHandleHealthBarUpdate(void);
+static void RecordedPlayerHandleExpUpdate(void);
+static void RecordedPlayerHandleStatusIconUpdate(void);
+static void RecordedPlayerHandleStatusAnimation(void);
+static void RecordedPlayerHandleStatusXor(void);
+static void RecordedPlayerHandleDataTransfer(void);
+static void RecordedPlayerHandleDMA3Transfer(void);
+static void RecordedPlayerHandlePlayBGM(void);
+static void RecordedPlayerHandleCmd32(void);
+static void RecordedPlayerHandleTwoReturnValues(void);
+static void RecordedPlayerHandleChosenMonReturnValue(void);
+static void RecordedPlayerHandleOneReturnValue(void);
+static void RecordedPlayerHandleOneReturnValue_Duplicate(void);
+static void RecordedPlayerHandleCmd37(void);
+static void RecordedPlayerHandleCmd38(void);
+static void RecordedPlayerHandleCmd39(void);
+static void RecordedPlayerHandleCmd40(void);
+static void RecordedPlayerHandleHitAnimation(void);
+static void RecordedPlayerHandleCmd42(void);
+static void RecordedPlayerHandleEffectivenessSound(void);
+static void RecordedPlayerHandlePlayFanfareOrBGM(void);
+static void RecordedPlayerHandleFaintingCry(void);
+static void RecordedPlayerHandleIntroSlide(void);
+static void RecordedPlayerHandleIntroTrainerBallThrow(void);
+static void RecordedPlayerHandleDrawPartyStatusSummary(void);
+static void RecordedPlayerHandleCmd49(void);
+static void RecordedPlayerHandleCmd50(void);
+static void RecordedPlayerHandleSpriteInvisibility(void);
+static void RecordedPlayerHandleBattleAnimation(void);
+static void RecordedPlayerHandleLinkStandbyMsg(void);
+static void RecordedPlayerHandleResetActionMoveSelection(void);
+static void RecordedPlayerHandleCmd55(void);
+static void nullsub_121(void);
+
+static void RecordedPlayerBufferRunCommand(void);
+static void RecordedPlayerBufferExecCompleted(void);
+static void sub_818A328(void);
+static u32 CopyRecordedPlayerMonData(u8 monId, u8 *dst);
+static void SetRecordedPlayerMonData(u8 monId);
+static void sub_818BA6C(u8 bank, bool8 dontClearSubstituteBit);
+static void DoSwitchOutAnimation(void);
+static void RecordedPlayerDoMoveAnimation(void);
+static void sub_818CC24(u8 taskId);
+static void sub_818CDF4(void);
+
+static void (*const gRecordedPlayerBufferCommands[CONTOLLER_CMDS_COUNT])(void) =
+{
+ RecordedPlayerHandleGetMonData,
+ RecordedPlayerHandleGetRawMonData,
+ RecordedPlayerHandleSetMonData,
+ RecordedPlayerHandleSetRawMonData,
+ RecordedPlayerHandleLoadMonSprite,
+ RecordedPlayerHandleSwitchInAnim,
+ RecordedPlayerHandleReturnMonToBall,
+ RecordedPlayerHandleDrawTrainerPic,
+ RecordedPlayerHandleTrainerSlide,
+ RecordedPlayerHandleTrainerSlideBack,
+ RecordedPlayerHandleFaintAnimation,
+ RecordedPlayerHandlePaletteFade,
+ RecordedPlayerHandleSuccessBallThrowAnim,
+ RecordedPlayerHandleBallThrowAnim,
+ RecordedPlayerHandlePause,
+ RecordedPlayerHandleMoveAnimation,
+ RecordedPlayerHandlePrintString,
+ RecordedPlayerHandlePrintStringPlayerOnly,
+ RecordedPlayerHandleChooseAction,
+ RecordedPlayerHandleUnknownYesNoBox,
+ RecordedPlayerHandleChooseMove,
+ RecordedPlayerHandleChooseItem,
+ RecordedPlayerHandleChoosePokemon,
+ RecordedPlayerHandleCmd23,
+ RecordedPlayerHandleHealthBarUpdate,
+ RecordedPlayerHandleExpUpdate,
+ RecordedPlayerHandleStatusIconUpdate,
+ RecordedPlayerHandleStatusAnimation,
+ RecordedPlayerHandleStatusXor,
+ RecordedPlayerHandleDataTransfer,
+ RecordedPlayerHandleDMA3Transfer,
+ RecordedPlayerHandlePlayBGM,
+ RecordedPlayerHandleCmd32,
+ RecordedPlayerHandleTwoReturnValues,
+ RecordedPlayerHandleChosenMonReturnValue,
+ RecordedPlayerHandleOneReturnValue,
+ RecordedPlayerHandleOneReturnValue_Duplicate,
+ RecordedPlayerHandleCmd37,
+ RecordedPlayerHandleCmd38,
+ RecordedPlayerHandleCmd39,
+ RecordedPlayerHandleCmd40,
+ RecordedPlayerHandleHitAnimation,
+ RecordedPlayerHandleCmd42,
+ RecordedPlayerHandleEffectivenessSound,
+ RecordedPlayerHandlePlayFanfareOrBGM,
+ RecordedPlayerHandleFaintingCry,
+ RecordedPlayerHandleIntroSlide,
+ RecordedPlayerHandleIntroTrainerBallThrow,
+ RecordedPlayerHandleDrawPartyStatusSummary,
+ RecordedPlayerHandleCmd49,
+ RecordedPlayerHandleCmd50,
+ RecordedPlayerHandleSpriteInvisibility,
+ RecordedPlayerHandleBattleAnimation,
+ RecordedPlayerHandleLinkStandbyMsg,
+ RecordedPlayerHandleResetActionMoveSelection,
+ RecordedPlayerHandleCmd55,
+ nullsub_121
+};
+
+static void nullsub_120(void)
+{
+}
+
+void SetBankFuncToRecordedPlayerBufferRunCommand(void)
+{
+ gBattleBankFunc[gActiveBank] = RecordedPlayerBufferRunCommand;
+}
+
+static void RecordedPlayerBufferRunCommand(void)
+{
+ if (gBattleExecBuffer & gBitTable[gActiveBank])
+ {
+ if (gBattleBufferA[gActiveBank][0] < ARRAY_COUNT(gRecordedPlayerBufferCommands))
+ gRecordedPlayerBufferCommands[gBattleBufferA[gActiveBank][0]]();
+ else
+ RecordedPlayerBufferExecCompleted();
+ }
+}
+
+static void CompleteOnBankSpriteCallbackDummy(void)
+{
+ if (gSprites[gBankSpriteIds[gActiveBank]].callback == SpriteCallbackDummy)
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void sub_81899F0(void)
+{
+ if (gSprites[gBankSpriteIds[gActiveBank]].callback == SpriteCallbackDummy)
+ {
+ nullsub_25(0);
+ FreeSpriteOamMatrix(&gSprites[gBankSpriteIds[gActiveBank]]);
+ DestroySprite(&gSprites[gBankSpriteIds[gActiveBank]]);
+ RecordedPlayerBufferExecCompleted();
+ }
+}
+
+static void sub_8189A58(void)
+{
+ if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_9 == 0xFF)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_9 = 0;
+ RecordedPlayerBufferExecCompleted();
+ }
+}
+
+static void sub_8189AA0(void)
+{
+ bool32 r6 = FALSE;
+
+ if (GetBankIdentity(gActiveBank) == IDENTITY_PLAYER_MON1)
+ {
+ if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI)))
+ {
+ if (gSprites[gHealthBoxesIds[gActiveBank]].callback == SpriteCallbackDummy)
+ r6 = TRUE;
+ }
+ else
+ {
+ if (gSprites[gHealthBoxesIds[gActiveBank]].callback == SpriteCallbackDummy
+ && gSprites[gHealthBoxesIds[gActiveBank ^ BIT_MON]].callback == SpriteCallbackDummy)
+ {
+ r6 = TRUE;
+ }
+ }
+
+ if (r6 && gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_1_x1
+ && gBattleSpritesDataPtr->healthBoxesData[gActiveBank ^ BIT_MON].field_1_x1)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].flag_x80 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_1_x1 = 0;
+
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank ^ BIT_MON].flag_x80 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank ^ BIT_MON].field_1_x1 = 0;
+
+ FreeSpriteTilesByTag(0x27F9);
+ FreeSpritePaletteByTag(0x27F9);
+
+ sub_805E990(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ if (IsDoubleBattle())
+ sub_805E990(&gPlayerParty[gBattlePartyID[gActiveBank ^ BIT_MON]], gActiveBank ^ BIT_MON);
+
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_9 = 3;
+ gBattleBankFunc[gActiveBank] = sub_8189A58;
+ }
+ }
+ else
+ {
+ if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI)))
+ {
+ if (gSprites[gHealthBoxesIds[gActiveBank]].callback == SpriteCallbackDummy)
+ r6 = TRUE;
+ }
+ else
+ {
+ if (gSprites[gHealthBoxesIds[gActiveBank]].callback == SpriteCallbackDummy
+ && gSprites[gHealthBoxesIds[gActiveBank ^ BIT_MON]].callback == SpriteCallbackDummy)
+ {
+ r6 = TRUE;
+ }
+ }
+
+ if (IsCryPlayingOrClearCrySongs())
+ r6 = FALSE;
+
+ if (r6)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_9 = 3;
+ gBattleBankFunc[gActiveBank] = sub_8189A58;
+ }
+ }
+}
+
+static void sub_8189D40(void)
+{
+ bool32 r10 = FALSE;
+
+ if (GetBankIdentity(gActiveBank) == IDENTITY_PLAYER_MON1)
+ {
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].flag_x80
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBank].flag_x8)
+ {
+ sub_8172EF0(gActiveBank, &gPlayerParty[gBattlePartyID[gActiveBank]]);
+ }
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank ^ BIT_MON].flag_x80
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBank ^ BIT_MON].flag_x8)
+ {
+ sub_8172EF0(gActiveBank ^ BIT_MON, &gPlayerParty[gBattlePartyID[gActiveBank ^ BIT_MON]]);
+ }
+ }
+
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].flag_x8
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBank ^ BIT_MON].flag_x8)
+ {
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_1_x80)
+ {
+ if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ {
+ UpdateHealthboxAttribute(gHealthBoxesIds[gActiveBank ^ BIT_MON], &gPlayerParty[gBattlePartyID[gActiveBank ^ BIT_MON]], HEALTHBOX_ALL);
+ sub_8076918(gActiveBank ^ BIT_MON);
+ SetHealthboxSpriteVisible(gHealthBoxesIds[gActiveBank ^ BIT_MON]);
+ }
+ UpdateHealthboxAttribute(gHealthBoxesIds[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], HEALTHBOX_ALL);
+ sub_8076918(gActiveBank);
+ SetHealthboxSpriteVisible(gHealthBoxesIds[gActiveBank]);
+ }
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_1_x80 = 1;
+ }
+
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_1_x80
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_1_x40
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBank ^ BIT_MON].field_1_x40
+ && !IsCryPlayingOrClearCrySongs())
+ {
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_1_x20)
+ {
+ if ((gBattleTypeFlags & BATTLE_TYPE_LINK) && (gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ {
+ if (GetBankIdentity(gActiveBank) == IDENTITY_PLAYER_MON1)
+ m4aMPlayContinue(&gMPlay_BGM);
+ }
+ else
+ {
+ m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100);
+ }
+
+ }
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_1_x20 = 1;
+ r10 = TRUE;
+ }
+
+ if (r10 && gSprites[gUnknown_03005D7C[gActiveBank]].callback == SpriteCallbackDummy
+ && gSprites[gBankSpriteIds[gActiveBank]].callback == SpriteCallbackDummy)
+ {
+ if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ DestroySprite(&gSprites[gUnknown_03005D7C[gActiveBank ^ BIT_MON]]);
+
+ DestroySprite(&gSprites[gUnknown_03005D7C[gActiveBank]]);
+ gBattleSpritesDataPtr->animationData->field_9_x1 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_1_x20 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_1_x80 = 0;
+ gBattleBankFunc[gActiveBank] = sub_8189AA0;
+ }
+}
+
+static void sub_818A064(void)
+{
+ if (gSprites[gBankSpriteIds[gActiveBank]].animEnded && gSprites[gBankSpriteIds[gActiveBank]].pos2.x == 0)
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void CompleteOnHealthbarDone(void)
+{
+ s16 hpValue = sub_8074AA0(gActiveBank, gHealthBoxesIds[gActiveBank], 0, 0);
+
+ SetHealthboxSpriteVisible(gHealthBoxesIds[gActiveBank]);
+
+ if (hpValue != -1)
+ {
+ UpdateHpTextInHealthbox(gHealthBoxesIds[gActiveBank], hpValue, HP_CURRENT);
+ }
+ else
+ {
+ sub_805E990(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ RecordedPlayerBufferExecCompleted();
+ }
+}
+
+static void sub_818A114(void)
+{
+ if (gSprites[gBankSpriteIds[gActiveBank]].pos1.y + gSprites[gBankSpriteIds[gActiveBank]].pos2.y > DISPLAY_HEIGHT)
+ {
+ u16 species = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES);
+
+ nullsub_24(species);
+ FreeOamMatrix(gSprites[gBankSpriteIds[gActiveBank]].oam.matrixNum);
+ DestroySprite(&gSprites[gBankSpriteIds[gActiveBank]]);
+ SetHealthboxSpriteInvisible(gHealthBoxesIds[gActiveBank]);
+ RecordedPlayerBufferExecCompleted();
+ }
+}
+
+static void sub_818A1B0(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].specialAnimActive)
+ {
+ FreeSpriteOamMatrix(&gSprites[gBankSpriteIds[gActiveBank]]);
+ DestroySprite(&gSprites[gBankSpriteIds[gActiveBank]]);
+ SetHealthboxSpriteInvisible(gHealthBoxesIds[gActiveBank]);
+ RecordedPlayerBufferExecCompleted();
+ }
+}
+
+static void CompleteOnInactiveTextPrinter(void)
+{
+ if (!IsTextPrinterActive(0))
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void DoHitAnimBlinkSpriteEffect(void)
+{
+ u8 spriteId = gBankSpriteIds[gActiveBank];
+
+ if (gSprites[spriteId].data1 == 32)
+ {
+ gSprites[spriteId].data1 = 0;
+ gSprites[spriteId].invisible = 0;
+ gDoingBattleAnim = FALSE;
+ RecordedPlayerBufferExecCompleted();
+ }
+ else
+ {
+ if ((gSprites[spriteId].data1 % 4) == 0)
+ gSprites[spriteId].invisible ^= 1;
+ gSprites[spriteId].data1++;
+ }
+}
+
+static void sub_818A2B4(void)
+{
+ if (gSprites[gHealthBoxesIds[gActiveBank]].callback == SpriteCallbackDummy)
+ {
+ SetBattleSpriteInvisibilityBitToSpriteInvisibility(gActiveBank);
+ if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute)
+ DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_MON_TO_SUBSTITUTE);
+
+ gBattleBankFunc[gActiveBank] = sub_818A328;
+ }
+}
+
+static void sub_818A328(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].specialAnimActive
+ && gSprites[gBankSpriteIds[gActiveBank]].callback == SpriteCallbackDummy)
+ {
+ RecordedPlayerBufferExecCompleted();
+ }
+}
+
+static void sub_818A37C(void)
+{
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_1_x1)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].flag_x80 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_1_x1 = 0;
+
+ FreeSpriteTilesByTag(0x27F9);
+ FreeSpritePaletteByTag(0x27F9);
+
+ CreateTask(c3_0802FDF4, 10);
+ sub_805E990(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ StartSpriteAnim(&gSprites[gBankSpriteIds[gActiveBank]], 0);
+ UpdateHealthboxAttribute(gHealthBoxesIds[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], HEALTHBOX_ALL);
+ sub_8076918(gActiveBank);
+ SetHealthboxSpriteVisible(gHealthBoxesIds[gActiveBank]);
+
+ gBattleBankFunc[gActiveBank] = sub_818A2B4;
+ }
+}
+
+static void sub_818A470(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].flag_x80
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBank].flag_x8)
+ {
+ sub_8172EF0(gActiveBank, &gPlayerParty[gBattlePartyID[gActiveBank]]);
+ }
+
+ if (gSprites[gUnknown_03005D7C[gActiveBank]].callback == SpriteCallbackDummy
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBank].flag_x8)
+ {
+ DestroySprite(&gSprites[gUnknown_03005D7C[gActiveBank]]);
+ gBattleBankFunc[gActiveBank] = sub_818A37C;
+ }
+}
+
+static void RecordedPlayerBufferExecCompleted(void)
+{
+ gBattleBankFunc[gActiveBank] = RecordedPlayerBufferRunCommand;
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ u8 playerId = GetMultiplayerId();
+
+ PrepareBufferDataTransferLink(2, 4, &playerId);
+ gBattleBufferA[gActiveBank][0] = CONTOLLER_CMDS_COUNT - 1;
+ }
+ else
+ {
+ gBattleExecBuffer &= ~gBitTable[gActiveBank];
+ }
+}
+
+static void CompleteOnFinishedStatusAnimation(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].statusAnimActive)
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void CompleteOnFinishedBattleAnimation(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animFromTableActive)
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void RecordedPlayerHandleGetMonData(void)
+{
+ u8 monData[sizeof(struct Pokemon) * 2 + 56]; // this allows to get full data of two pokemon, trying to get more will result in overwriting data
+ u32 size = 0;
+ u8 monsToCheck;
+ s32 i;
+
+ if (gBattleBufferA[gActiveBank][2] == 0)
+ {
+ size += CopyRecordedPlayerMonData(gBattlePartyID[gActiveBank], monData);
+ }
+ else
+ {
+ monsToCheck = gBattleBufferA[gActiveBank][2];
+ for (i = 0; i < 6; i++)
+ {
+ if (monsToCheck & 1)
+ size += CopyRecordedPlayerMonData(i, monData + size);
+ monsToCheck >>= 1;
+ }
+ }
+ EmitDataTransfer(1, size, monData);
+ RecordedPlayerBufferExecCompleted();
+}
+
+static u32 CopyRecordedPlayerMonData(u8 monId, u8 *dst)
+{
+ struct BattlePokemon battleMon;
+ struct MovePpInfo moveData;
+ u8 nickname[20];
+ u8 *src;
+ s16 data16;
+ u32 data32;
+ s32 size = 0;
+
+ switch (gBattleBufferA[gActiveBank][1])
+ {
+ case REQUEST_ALL_BATTLE:
+ battleMon.species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES);
+ battleMon.item = GetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM);
+ for (size = 0; size < 4; size++)
+ {
+ battleMon.moves[size] = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + size);
+ battleMon.pp[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size);
+ }
+ battleMon.ppBonuses = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES);
+ battleMon.friendship = GetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP);
+ battleMon.experience = GetMonData(&gPlayerParty[monId], MON_DATA_EXP);
+ battleMon.hpIV = GetMonData(&gPlayerParty[monId], MON_DATA_HP_IV);
+ battleMon.attackIV = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV);
+ battleMon.defenseIV = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV);
+ battleMon.speedIV = GetMonData(&gPlayerParty[monId], MON_DATA_SPD_IV);
+ battleMon.spAttackIV = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV);
+ battleMon.spDefenseIV = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV);
+ battleMon.personality = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY);
+ battleMon.status1 = GetMonData(&gPlayerParty[monId], MON_DATA_STATUS);
+ battleMon.level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL);
+ battleMon.hp = GetMonData(&gPlayerParty[monId], MON_DATA_HP);
+ battleMon.maxHP = GetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP);
+ battleMon.attack = GetMonData(&gPlayerParty[monId], MON_DATA_ATK);
+ battleMon.defense = GetMonData(&gPlayerParty[monId], MON_DATA_DEF);
+ battleMon.speed = GetMonData(&gPlayerParty[monId], MON_DATA_SPD);
+ battleMon.spAttack = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK);
+ battleMon.spDefense = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF);
+ battleMon.isEgg = GetMonData(&gPlayerParty[monId], MON_DATA_IS_EGG);
+ battleMon.altAbility = GetMonData(&gPlayerParty[monId], MON_DATA_ALT_ABILITY);
+ battleMon.otId = GetMonData(&gPlayerParty[monId], MON_DATA_OT_ID);
+ GetMonData(&gPlayerParty[monId], MON_DATA_NICKNAME, nickname);
+ StringCopy10(battleMon.nickname, nickname);
+ GetMonData(&gPlayerParty[monId], MON_DATA_OT_NAME, battleMon.otName);
+ src = (u8 *)&battleMon;
+ for (size = 0; size < sizeof(battleMon); size++)
+ dst[size] = src[size];
+ break;
+ case REQUEST_SPECIES_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_HELDITEM_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_MOVES_PP_BATTLE:
+ for (size = 0; size < 4; size++)
+ {
+ moveData.moves[size] = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + size);
+ moveData.pp[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size);
+ }
+ moveData.ppBonuses = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES);
+ src = (u8*)(&moveData);
+ for (size = 0; size < sizeof(moveData); size++)
+ dst[size] = src[size];
+ break;
+ case REQUEST_MOVE1_BATTLE:
+ case REQUEST_MOVE2_BATTLE:
+ case REQUEST_MOVE3_BATTLE:
+ case REQUEST_MOVE4_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBank][1] - REQUEST_MOVE1_BATTLE);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_PP_DATA_BATTLE:
+ for (size = 0; size < 4; size++)
+ dst[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size);
+ dst[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES);
+ size++;
+ break;
+ case REQUEST_PPMOVE1_BATTLE:
+ case REQUEST_PPMOVE2_BATTLE:
+ case REQUEST_PPMOVE3_BATTLE:
+ case REQUEST_PPMOVE4_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBank][1] - REQUEST_PPMOVE1_BATTLE);
+ size = 1;
+ break;
+ case REQUEST_OTID_BATTLE:
+ data32 = GetMonData(&gPlayerParty[monId], MON_DATA_OT_ID);
+ dst[0] = (data32 & 0x000000FF);
+ dst[1] = (data32 & 0x0000FF00) >> 8;
+ dst[2] = (data32 & 0x00FF0000) >> 16;
+ size = 3;
+ break;
+ case REQUEST_EXP_BATTLE:
+ data32 = GetMonData(&gPlayerParty[monId], MON_DATA_EXP);
+ dst[0] = (data32 & 0x000000FF);
+ dst[1] = (data32 & 0x0000FF00) >> 8;
+ dst[2] = (data32 & 0x00FF0000) >> 16;
+ size = 3;
+ break;
+ case REQUEST_HP_EV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_HP_EV);
+ size = 1;
+ break;
+ case REQUEST_ATK_EV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_EV);
+ size = 1;
+ break;
+ case REQUEST_DEF_EV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_EV);
+ size = 1;
+ break;
+ case REQUEST_SPEED_EV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPD_EV);
+ size = 1;
+ break;
+ case REQUEST_SPATK_EV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_EV);
+ size = 1;
+ break;
+ case REQUEST_SPDEF_EV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_EV);
+ size = 1;
+ break;
+ case REQUEST_FRIENDSHIP_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP);
+ size = 1;
+ break;
+ case REQUEST_POKERUS_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_POKERUS);
+ size = 1;
+ break;
+ case REQUEST_MET_LOCATION_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_MET_LOCATION);
+ size = 1;
+ break;
+ case REQUEST_MET_LEVEL_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL);
+ size = 1;
+ break;
+ case REQUEST_MET_GAME_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_MET_GAME);
+ size = 1;
+ break;
+ case REQUEST_POKEBALL_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_POKEBALL);
+ size = 1;
+ break;
+ case REQUEST_ALL_IVS_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_HP_IV);
+ dst[1] = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV);
+ dst[2] = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV);
+ dst[3] = GetMonData(&gPlayerParty[monId], MON_DATA_SPD_IV);
+ dst[4] = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV);
+ dst[5] = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV);
+ size = 6;
+ break;
+ case REQUEST_HP_IV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_HP_IV);
+ size = 1;
+ break;
+ case REQUEST_ATK_IV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV);
+ size = 1;
+ break;
+ case REQUEST_DEF_IV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV);
+ size = 1;
+ break;
+ case REQUEST_SPEED_IV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPD_IV);
+ size = 1;
+ break;
+ case REQUEST_SPATK_IV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV);
+ size = 1;
+ break;
+ case REQUEST_SPDEF_IV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV);
+ size = 1;
+ break;
+ case REQUEST_PERSONALITY_BATTLE:
+ data32 = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY);
+ dst[0] = (data32 & 0x000000FF);
+ dst[1] = (data32 & 0x0000FF00) >> 8;
+ dst[2] = (data32 & 0x00FF0000) >> 16;
+ dst[3] = (data32 & 0xFF000000) >> 24;
+ size = 4;
+ break;
+ case REQUEST_CHECKSUM_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_CHECKSUM);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_STATUS_BATTLE:
+ data32 = GetMonData(&gPlayerParty[monId], MON_DATA_STATUS);
+ dst[0] = (data32 & 0x000000FF);
+ dst[1] = (data32 & 0x0000FF00) >> 8;
+ dst[2] = (data32 & 0x00FF0000) >> 16;
+ dst[3] = (data32 & 0xFF000000) >> 24;
+ size = 4;
+ break;
+ case REQUEST_LEVEL_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL);
+ size = 1;
+ break;
+ case REQUEST_HP_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_HP);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_MAX_HP_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_ATK_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_ATK);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_DEF_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_DEF);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_SPEED_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_SPD);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_SPATK_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_SPDEF_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_COOL_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_COOL);
+ size = 1;
+ break;
+ case REQUEST_BEAUTY_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY);
+ size = 1;
+ break;
+ case REQUEST_CUTE_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_CUTE);
+ size = 1;
+ break;
+ case REQUEST_SMART_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SMART);
+ size = 1;
+ break;
+ case REQUEST_TOUGH_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_TOUGH);
+ size = 1;
+ break;
+ case REQUEST_SHEEN_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SHEEN);
+ size = 1;
+ break;
+ case REQUEST_COOL_RIBBON_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_COOL_RIBBON);
+ size = 1;
+ break;
+ case REQUEST_BEAUTY_RIBBON_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY_RIBBON);
+ size = 1;
+ break;
+ case REQUEST_CUTE_RIBBON_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_CUTE_RIBBON);
+ size = 1;
+ break;
+ case REQUEST_SMART_RIBBON_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SMART_RIBBON);
+ size = 1;
+ break;
+ case REQUEST_TOUGH_RIBBON_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON);
+ size = 1;
+ break;
+ }
+
+ return size;
+}
+
+static void RecordedPlayerHandleGetRawMonData(void)
+{
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void RecordedPlayerHandleSetMonData(void)
+{
+ u8 monsToCheck;
+ u8 i;
+
+ if (gBattleBufferA[gActiveBank][2] == 0)
+ {
+ SetRecordedPlayerMonData(gBattlePartyID[gActiveBank]);
+ }
+ else
+ {
+ monsToCheck = gBattleBufferA[gActiveBank][2];
+ for (i = 0; i < 6; i++)
+ {
+ if (monsToCheck & 1)
+ SetRecordedPlayerMonData(i);
+ monsToCheck >>= 1;
+ }
+ }
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void SetRecordedPlayerMonData(u8 monId)
+{
+ struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleBufferA[gActiveBank][3];
+ struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleBufferA[gActiveBank][3];
+ s32 i;
+
+ switch (gBattleBufferA[gActiveBank][1])
+ {
+ case REQUEST_ALL_BATTLE:
+ {
+ u8 iv;
+
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &battlePokemon->species);
+ SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &battlePokemon->item);
+ for (i = 0; i < 4; i++)
+ {
+ SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + i, &battlePokemon->moves[i]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + i, &battlePokemon->pp[i]);
+ }
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &battlePokemon->ppBonuses);
+ SetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP, &battlePokemon->friendship);
+ SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &battlePokemon->experience);
+ iv = battlePokemon->hpIV;
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &iv);
+ iv = battlePokemon->attackIV;
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &iv);
+ iv = battlePokemon->defenseIV;
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &iv);
+ iv = battlePokemon->speedIV;
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPD_IV, &iv);
+ iv = battlePokemon->spAttackIV;
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &iv);
+ iv = battlePokemon->spDefenseIV;
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &iv);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY, &battlePokemon->personality);
+ SetMonData(&gPlayerParty[monId], MON_DATA_STATUS, &battlePokemon->status1);
+ SetMonData(&gPlayerParty[monId], MON_DATA_LEVEL, &battlePokemon->level);
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP, &battlePokemon->hp);
+ SetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP, &battlePokemon->maxHP);
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK, &battlePokemon->attack);
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF, &battlePokemon->defense);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPD, &battlePokemon->speed);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK, &battlePokemon->spAttack);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF, &battlePokemon->spDefense);
+ }
+ break;
+ case REQUEST_SPECIES_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_HELDITEM_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_MOVES_PP_BATTLE:
+ for (i = 0; i < 4; i++)
+ {
+ SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + i, &moveData->moves[i]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + i, &moveData->pp[i]);
+ }
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &moveData->ppBonuses);
+ break;
+ case REQUEST_MOVE1_BATTLE:
+ case REQUEST_MOVE2_BATTLE:
+ case REQUEST_MOVE3_BATTLE:
+ case REQUEST_MOVE4_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBank][1] - REQUEST_MOVE1_BATTLE, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_PP_DATA_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP1, &gBattleBufferA[gActiveBank][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP2, &gBattleBufferA[gActiveBank][4]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP3, &gBattleBufferA[gActiveBank][5]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP4, &gBattleBufferA[gActiveBank][6]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &gBattleBufferA[gActiveBank][7]);
+ break;
+ case REQUEST_PPMOVE1_BATTLE:
+ case REQUEST_PPMOVE2_BATTLE:
+ case REQUEST_PPMOVE3_BATTLE:
+ case REQUEST_PPMOVE4_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBank][1] - REQUEST_PPMOVE1_BATTLE, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_OTID_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_OT_ID, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_EXP_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_HP_EV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP_EV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_ATK_EV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK_EV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_DEF_EV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_SPEED_EV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPD_EV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_SPATK_EV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_SPDEF_EV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_EV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_FRIENDSHIP_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_POKERUS_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_POKERUS, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_MET_LOCATION_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_MET_LOCATION, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_MET_LEVEL_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_MET_GAME_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_MET_GAME, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_POKEBALL_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_POKEBALL, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_ALL_IVS_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][4]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][5]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][6]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][7]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][8]);
+ break;
+ case REQUEST_HP_IV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_ATK_IV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_DEF_IV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_SPEED_IV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_SPATK_IV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_SPDEF_IV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_PERSONALITY_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_CHECKSUM_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_CHECKSUM, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_STATUS_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_STATUS, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_LEVEL_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_LEVEL, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_HP_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_MAX_HP_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_ATK_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_DEF_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_SPEED_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPD, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_SPATK_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_SPDEF_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_COOL_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_COOL, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_BEAUTY_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_CUTE_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_CUTE, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_SMART_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SMART, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_TOUGH_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_SHEEN_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SHEEN, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_COOL_RIBBON_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_COOL_RIBBON, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_BEAUTY_RIBBON_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_CUTE_RIBBON_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_CUTE_RIBBON, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_SMART_RIBBON_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SMART_RIBBON, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case REQUEST_TOUGH_RIBBON_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBank][3]);
+ break;
+ }
+
+ sub_805E990(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+}
+
+static void RecordedPlayerHandleSetRawMonData(void)
+{
+ u8 *dst = (u8 *)&gPlayerParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1];
+ u8 i;
+
+ for (i = 0; i < gBattleBufferA[gActiveBank][2]; i++)
+ dst[i] = gBattleBufferA[gActiveBank][3 + i];
+
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void RecordedPlayerHandleLoadMonSprite(void)
+{
+ u16 species;
+
+ BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ species = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES);
+ sub_806A068(species, GetBankIdentity(gActiveBank));
+
+ gBankSpriteIds[gActiveBank] = CreateSprite(&gUnknown_0202499C,
+ sub_80A5C6C(gActiveBank, 2),
+ sub_80A6138(gActiveBank),
+ sub_80A82E4(gActiveBank));
+ gSprites[gBankSpriteIds[gActiveBank]].pos2.x = -240;
+ gSprites[gBankSpriteIds[gActiveBank]].data0 = gActiveBank;
+ gSprites[gBankSpriteIds[gActiveBank]].oam.paletteNum = gActiveBank;
+ StartSpriteAnim(&gSprites[gBankSpriteIds[gActiveBank]], gBattleMonForms[gActiveBank]);
+ gBattleBankFunc[gActiveBank] = sub_818A064;
+}
+
+static void RecordedPlayerHandleSwitchInAnim(void)
+{
+ ClearTemporarySpeciesSpriteData(gActiveBank, gBattleBufferA[gActiveBank][2]);
+ gBattlePartyID[gActiveBank] = gBattleBufferA[gActiveBank][1];
+ BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ sub_818BA6C(gActiveBank, gBattleBufferA[gActiveBank][2]);
+ gBattleBankFunc[gActiveBank] = sub_818A470;
+}
+
+static void sub_818BA6C(u8 bank, bool8 dontClearSubstituteBit)
+{
+ u16 species;
+
+ ClearTemporarySpeciesSpriteData(bank, dontClearSubstituteBit);
+ gBattlePartyID[bank] = gBattleBufferA[bank][1];
+ species = GetMonData(&gPlayerParty[gBattlePartyID[bank]], MON_DATA_SPECIES);
+ gUnknown_03005D7C[bank] = CreateInvisibleSpriteWithCallback(sub_805D714);
+ sub_806A068(species, GetBankIdentity(bank));
+
+ gBankSpriteIds[bank] = CreateSprite(
+ &gUnknown_0202499C,
+ sub_80A5C6C(bank, 2),
+ sub_80A6138(bank),
+ sub_80A82E4(bank));
+
+ gSprites[gUnknown_03005D7C[bank]].data1 = gBankSpriteIds[bank];
+ gSprites[gUnknown_03005D7C[bank]].data2 = bank;
+
+ gSprites[gBankSpriteIds[bank]].data0 = bank;
+ gSprites[gBankSpriteIds[bank]].data2 = species;
+ gSprites[gBankSpriteIds[bank]].oam.paletteNum = bank;
+
+ StartSpriteAnim(&gSprites[gBankSpriteIds[bank]], gBattleMonForms[bank]);
+
+ gSprites[gBankSpriteIds[bank]].invisible = TRUE;
+ gSprites[gBankSpriteIds[bank]].callback = SpriteCallbackDummy;
+
+ gSprites[gUnknown_03005D7C[bank]].data0 = sub_80753E8(0, 0xFF);
+}
+
+static void RecordedPlayerHandleReturnMonToBall(void)
+{
+ if (gBattleBufferA[gActiveBank][1] == 0)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 0;
+ gBattleBankFunc[gActiveBank] = DoSwitchOutAnimation;
+ }
+ else
+ {
+ FreeSpriteOamMatrix(&gSprites[gBankSpriteIds[gActiveBank]]);
+ DestroySprite(&gSprites[gBankSpriteIds[gActiveBank]]);
+ SetHealthboxSpriteInvisible(gHealthBoxesIds[gActiveBank]);
+ RecordedPlayerBufferExecCompleted();
+ }
+}
+
+static void DoSwitchOutAnimation(void)
+{
+ switch (gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState)
+ {
+ case 0:
+ if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute)
+ DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
+
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 1;
+ break;
+ case 1:
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].specialAnimActive)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 0;
+ DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SWITCH_OUT_MON);
+ gBattleBankFunc[gActiveBank] = sub_818A1B0;
+ }
+ break;
+ }
+}
+
+// todo: get rid of it once the struct is declared in a header
+struct MonCoords
+{
+ // This would use a bitfield, but sub_8079F44
+ // uses it as a u8 and casting won't match.
+ u8 coords; // u8 x:4, y:4;
+ u8 y_offset;
+};
+extern const struct MonCoords gTrainerBackPicCoords[];
+extern const struct MonCoords gTrainerFrontPicCoords[];
+
+static void RecordedPlayerHandleDrawTrainerPic(void)
+{
+ s16 xPos, yPos;
+ u32 trainerPicId;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_x2000000)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ trainerPicId = sub_8185F40();
+ else
+ trainerPicId = gLinkPlayers[gUnknown_0203C7B4].gender;
+ }
+ else
+ {
+ trainerPicId = gLinkPlayers[0].gender;
+ }
+
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ {
+ if ((GetBankIdentity(gActiveBank) & BIT_MON) != 0) // second mon
+ xPos = 90;
+ else // first mon
+ xPos = 32;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)
+ {
+ xPos = 90;
+ yPos = (8 - gTrainerFrontPicCoords[trainerPicId].coords) * 4 + 80;
+ }
+ else
+ {
+ yPos = (8 - gTrainerBackPicCoords[trainerPicId].coords) * 4 + 80;
+ }
+
+ }
+ else
+ {
+ xPos = 80;
+ yPos = (8 - gTrainerBackPicCoords[trainerPicId].coords) * 4 + 80;
+ }
+
+ if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)
+ {
+ trainerPicId = PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender);
+ DecompressTrainerFrontPic(trainerPicId, gActiveBank);
+ sub_806A1C0(trainerPicId, GetBankIdentity(gActiveBank));
+ gBankSpriteIds[gActiveBank] = CreateSprite(&gUnknown_0202499C, xPos, yPos, sub_80A82E4(gActiveBank));
+
+ gSprites[gBankSpriteIds[gActiveBank]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicId].tag);
+ gSprites[gBankSpriteIds[gActiveBank]].pos2.x = 240;
+ gSprites[gBankSpriteIds[gActiveBank]].pos2.y = 48;
+ gSprites[gBankSpriteIds[gActiveBank]].data0 = -2;
+ gSprites[gBankSpriteIds[gActiveBank]].callback = sub_805D7AC;
+ gSprites[gBankSpriteIds[gActiveBank]].oam.affineMode = 0;
+ gSprites[gBankSpriteIds[gActiveBank]].hFlip = 1;
+ }
+ else
+ {
+ DecompressTrainerBackPic(trainerPicId, gActiveBank);
+ sub_806A12C(trainerPicId, GetBankIdentity(gActiveBank));
+ gBankSpriteIds[gActiveBank] = CreateSprite(&gUnknown_0202499C, xPos, yPos, sub_80A82E4(gActiveBank));
+
+ gSprites[gBankSpriteIds[gActiveBank]].oam.paletteNum = gActiveBank;
+ gSprites[gBankSpriteIds[gActiveBank]].pos2.x = 240;
+ gSprites[gBankSpriteIds[gActiveBank]].data0 = -2;
+ gSprites[gBankSpriteIds[gActiveBank]].callback = sub_805D7AC;
+ }
+
+ gBattleBankFunc[gActiveBank] = CompleteOnBankSpriteCallbackDummy;
+}
+
+static void RecordedPlayerHandleTrainerSlide(void)
+{
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void RecordedPlayerHandleTrainerSlideBack(void)
+{
+ oamt_add_pos2_onto_pos1(&gSprites[gBankSpriteIds[gActiveBank]]);
+ gSprites[gBankSpriteIds[gActiveBank]].data0 = 35;
+ gSprites[gBankSpriteIds[gActiveBank]].data2 = -40;
+ gSprites[gBankSpriteIds[gActiveBank]].data4 = gSprites[gBankSpriteIds[gActiveBank]].pos1.y;
+ gSprites[gBankSpriteIds[gActiveBank]].callback = sub_80A6EEC;
+ StoreSpriteCallbackInData6(&gSprites[gBankSpriteIds[gActiveBank]], SpriteCallbackDummy);
+ gBattleBankFunc[gActiveBank] = sub_81899F0;
+}
+
+static void RecordedPlayerHandleFaintAnimation(void)
+{
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState == 0)
+ {
+ if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute)
+ DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState++;
+ }
+ else
+ {
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].specialAnimActive)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 0;
+ sub_805E990(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ PlaySE12WithPanning(SE_POKE_DEAD, -64);
+ gSprites[gBankSpriteIds[gActiveBank]].data1 = 0;
+ gSprites[gBankSpriteIds[gActiveBank]].data2 = 5;
+ gSprites[gBankSpriteIds[gActiveBank]].callback = sub_8039C00;
+ gBattleBankFunc[gActiveBank] = sub_818A114;
+ }
+ }
+}
+
+static void RecordedPlayerHandlePaletteFade(void)
+{
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void RecordedPlayerHandleSuccessBallThrowAnim(void)
+{
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void RecordedPlayerHandleBallThrowAnim(void)
+{
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void RecordedPlayerHandlePause(void)
+{
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void RecordedPlayerHandleMoveAnimation(void)
+{
+ if (!mplay_80342A4(gActiveBank))
+ {
+ u16 move = gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8);
+
+ gAnimMoveTurn = gBattleBufferA[gActiveBank][3];
+ gAnimMovePower = gBattleBufferA[gActiveBank][4] | (gBattleBufferA[gActiveBank][5] << 8);
+ gAnimMoveDmg = gBattleBufferA[gActiveBank][6] | (gBattleBufferA[gActiveBank][7] << 8) | (gBattleBufferA[gActiveBank][8] << 16) | (gBattleBufferA[gActiveBank][9] << 24);
+ gAnimFriendship = gBattleBufferA[gActiveBank][10];
+ gWeatherMoveAnim = gBattleBufferA[gActiveBank][12] | (gBattleBufferA[gActiveBank][13] << 8);
+ gAnimDisableStructPtr = (struct DisableStruct *)&gBattleBufferA[gActiveBank][16];
+ gTransformedPersonalities[gActiveBank] = gAnimDisableStructPtr->transformedMonPersonality;
+ if (IsMoveWithoutAnimation(move, gAnimMoveTurn)) // always returns FALSE
+ {
+ RecordedPlayerBufferExecCompleted();
+ }
+ else
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 0;
+ gBattleBankFunc[gActiveBank] = RecordedPlayerDoMoveAnimation;
+ }
+ }
+}
+
+static void RecordedPlayerDoMoveAnimation(void)
+{
+ u16 move = gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8);
+ u8 multihit = gBattleBufferA[gActiveBank][11];
+
+ switch (gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState)
+ {
+ case 0:
+ if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute
+ && !gBattleSpritesDataPtr->bankData[gActiveBank].flag_x8)
+ {
+ gBattleSpritesDataPtr->bankData[gActiveBank].flag_x8 = 1;
+ DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
+ }
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 1;
+ break;
+ case 1:
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].specialAnimActive)
+ {
+ sub_805EB9C(0);
+ DoMoveAnim(move);
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 2;
+ }
+ break;
+ case 2:
+ gAnimScriptCallback();
+ if (!gAnimScriptActive)
+ {
+ sub_805EB9C(1);
+ if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute && multihit < 2)
+ {
+ DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_MON_TO_SUBSTITUTE);
+ gBattleSpritesDataPtr->bankData[gActiveBank].flag_x8 = 0;
+ }
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 3;
+ }
+ break;
+ case 3:
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].specialAnimActive)
+ {
+ sub_805E394();
+ TrySetBehindSubstituteSpriteBit(gActiveBank, gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 0;
+ RecordedPlayerBufferExecCompleted();
+ }
+ break;
+ }
+}
+
+static void RecordedPlayerHandlePrintString(void)
+{
+ u16 *stringId;
+
+ gBattle_BG0_X = 0;
+ gBattle_BG0_Y = 0;
+ stringId = (u16*)(&gBattleBufferA[gActiveBank][2]);
+ BufferStringBattle(*stringId);
+ BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
+ gBattleBankFunc[gActiveBank] = CompleteOnInactiveTextPrinter;
+}
+
+static void RecordedPlayerHandlePrintStringPlayerOnly(void)
+{
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void ChooseActionInBattlePalace(void)
+{
+ if (gBattleCommunication[4] >= gNoOfAllBanks / 2)
+ {
+ EmitTwoReturnValues(1, RecordedBattle_ReadBankAction(gActiveBank), 0);
+ RecordedPlayerBufferExecCompleted();
+ }
+}
+
+static void RecordedPlayerHandleChooseAction(void)
+{
+ if (gBattleTypeFlags & BATTLE_TYPE_PALACE)
+ {
+ gBattleBankFunc[gActiveBank] = ChooseActionInBattlePalace;
+ }
+ else
+ {
+ EmitTwoReturnValues(1, RecordedBattle_ReadBankAction(gActiveBank), 0);
+ RecordedPlayerBufferExecCompleted();
+ }
+}
+
+static void RecordedPlayerHandleUnknownYesNoBox(void)
+{
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void RecordedPlayerHandleChooseMove(void)
+{
+ if (gBattleTypeFlags & BATTLE_TYPE_PALACE)
+ {
+ EmitTwoReturnValues(1, 10, ChooseMoveAndTargetInBattlePalace());
+ }
+ else
+ {
+ u8 moveId = RecordedBattle_ReadBankAction(gActiveBank);
+ u8 target = RecordedBattle_ReadBankAction(gActiveBank);
+ EmitTwoReturnValues(1, 10, moveId | (target << 8));
+ }
+
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void RecordedPlayerHandleChooseItem(void)
+{
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void RecordedPlayerHandleChoosePokemon(void)
+{
+ *(gBattleStruct->field_5C + gActiveBank) = RecordedBattle_ReadBankAction(gActiveBank);
+ EmitChosenMonReturnValue(1, *(gBattleStruct->field_5C + gActiveBank), NULL);
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void RecordedPlayerHandleCmd23(void)
+{
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void RecordedPlayerHandleHealthBarUpdate(void)
+{
+ s16 hpVal;
+
+ LoadBattleBarGfx(0);
+ hpVal = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8);
+
+ if (hpVal != INSTANT_HP_BAR_DROP)
+ {
+ u32 maxHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP);
+ u32 curHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_HP);
+
+ SetBattleBarStruct(gActiveBank, gHealthBoxesIds[gActiveBank], maxHP, curHP, hpVal);
+ }
+ else
+ {
+ u32 maxHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP);
+
+ SetBattleBarStruct(gActiveBank, gHealthBoxesIds[gActiveBank], maxHP, 0, hpVal);
+ UpdateHpTextInHealthbox(gHealthBoxesIds[gActiveBank], 0, HP_CURRENT);
+ }
+
+ gBattleBankFunc[gActiveBank] = CompleteOnHealthbarDone;
+}
+
+static void RecordedPlayerHandleExpUpdate(void)
+{
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void RecordedPlayerHandleStatusIconUpdate(void)
+{
+ if (!mplay_80342A4(gActiveBank))
+ {
+ u8 bank;
+
+ UpdateHealthboxAttribute(gHealthBoxesIds[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], HEALTHBOX_STATUS_ICON);
+ bank = gActiveBank;
+ gBattleSpritesDataPtr->healthBoxesData[bank].statusAnimActive = 0;
+ gBattleBankFunc[gActiveBank] = CompleteOnFinishedStatusAnimation;
+ }
+}
+
+static void RecordedPlayerHandleStatusAnimation(void)
+{
+ if (!mplay_80342A4(gActiveBank))
+ {
+ DoStatusAnimation(gBattleBufferA[gActiveBank][1],
+ gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8) | (gBattleBufferA[gActiveBank][4] << 16) | (gBattleBufferA[gActiveBank][5] << 24));
+ gBattleBankFunc[gActiveBank] = CompleteOnFinishedStatusAnimation;
+ }
+}
+
+static void RecordedPlayerHandleStatusXor(void)
+{
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void RecordedPlayerHandleDataTransfer(void)
+{
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void RecordedPlayerHandleDMA3Transfer(void)
+{
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void RecordedPlayerHandlePlayBGM(void)
+{
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void RecordedPlayerHandleCmd32(void)
+{
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void RecordedPlayerHandleTwoReturnValues(void)
+{
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void RecordedPlayerHandleChosenMonReturnValue(void)
+{
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void RecordedPlayerHandleOneReturnValue(void)
+{
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void RecordedPlayerHandleOneReturnValue_Duplicate(void)
+{
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void RecordedPlayerHandleCmd37(void)
+{
+ gUnknown_02022D0C.field_0 = 0;
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void RecordedPlayerHandleCmd38(void)
+{
+ gUnknown_02022D0C.field_0 = gBattleBufferA[gActiveBank][1];
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void RecordedPlayerHandleCmd39(void)
+{
+ gUnknown_02022D0C.flag_x80 = 0;
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void RecordedPlayerHandleCmd40(void)
+{
+ gUnknown_02022D0C.flag_x80 ^= 1;
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void RecordedPlayerHandleHitAnimation(void)
+{
+ if (gSprites[gBankSpriteIds[gActiveBank]].invisible == TRUE)
+ {
+ RecordedPlayerBufferExecCompleted();
+ }
+ else
+ {
+ gDoingBattleAnim = TRUE;
+ gSprites[gBankSpriteIds[gActiveBank]].data1 = 0;
+ DoHitAnimHealthboxEffect(gActiveBank);
+ gBattleBankFunc[gActiveBank] = DoHitAnimBlinkSpriteEffect;
+ }
+}
+
+static void RecordedPlayerHandleCmd42(void)
+{
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void RecordedPlayerHandleEffectivenessSound(void)
+{
+ s8 pan;
+
+ if (GetBankSide(gActiveBank) == SIDE_PLAYER)
+ pan = PAN_SIDE_PLAYER;
+ else
+ pan = PAN_SIDE_OPPONENT;
+
+ PlaySE12WithPanning(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8), pan);
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void RecordedPlayerHandlePlayFanfareOrBGM(void)
+{
+ if (gBattleBufferA[gActiveBank][3])
+ {
+ BattleMusicStop();
+ PlayBGM(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
+ }
+ else
+ {
+ PlayFanfare(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
+ }
+
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void RecordedPlayerHandleFaintingCry(void)
+{
+ u16 species = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES);
+
+ PlayCry3(species, -25, 5);
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void RecordedPlayerHandleIntroSlide(void)
+{
+ HandleIntroSlide(gBattleBufferA[gActiveBank][1]);
+ gUnknown_020243FC |= 1;
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void RecordedPlayerHandleIntroTrainerBallThrow(void)
+{
+ u8 paletteNum;
+ u8 taskId;
+ u32 trainerPicId;
+
+ oamt_add_pos2_onto_pos1(&gSprites[gBankSpriteIds[gActiveBank]]);
+
+ gSprites[gBankSpriteIds[gActiveBank]].data0 = 50;
+ gSprites[gBankSpriteIds[gActiveBank]].data2 = -40;
+ gSprites[gBankSpriteIds[gActiveBank]].data4 = gSprites[gBankSpriteIds[gActiveBank]].pos1.y;
+ gSprites[gBankSpriteIds[gActiveBank]].callback = sub_80A6EEC;
+ gSprites[gBankSpriteIds[gActiveBank]].data5 = gActiveBank;
+
+ StoreSpriteCallbackInData6(&gSprites[gBankSpriteIds[gActiveBank]], sub_805CC00);
+ StartSpriteAnim(&gSprites[gBankSpriteIds[gActiveBank]], 1);
+
+ paletteNum = AllocSpritePalette(0xD6F9);
+ if (gBattleTypeFlags & BATTLE_TYPE_x2000000)
+ trainerPicId = gLinkPlayers[sub_806D864(gActiveBank)].gender;
+ else
+ trainerPicId = gSaveBlock2Ptr->playerGender;
+
+ LoadCompressedPalette(gTrainerBackPicPaletteTable[trainerPicId].data, 0x100 + paletteNum * 16, 32);
+
+ gSprites[gBankSpriteIds[gActiveBank]].oam.paletteNum = paletteNum;
+
+ taskId = CreateTask(sub_818CC24, 5);
+ gTasks[taskId].data[0] = gActiveBank;
+
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBank].flag_x1)
+ gTasks[gUnknown_020244B4[gActiveBank]].func = sub_8073C30;
+
+ gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
+ gBattleBankFunc[gActiveBank] = nullsub_120;
+}
+
+static void sub_818CC24(u8 taskId)
+{
+ if (gTasks[taskId].data[1] < 24)
+ {
+ gTasks[taskId].data[1]++;
+ }
+ else
+ {
+ u8 savedActiveBank = gActiveBank;
+
+ gActiveBank = gTasks[taskId].data[0];
+ if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ {
+ gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank];
+ sub_818BA6C(gActiveBank, FALSE);
+ }
+ else
+ {
+ gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank];
+ sub_818BA6C(gActiveBank, FALSE);
+ gActiveBank ^= BIT_MON;
+ gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank];
+ BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ sub_818BA6C(gActiveBank, FALSE);
+ gActiveBank ^= BIT_MON;
+ }
+ gBattleBankFunc[gActiveBank] = sub_8189D40;
+ gActiveBank = savedActiveBank;
+ DestroyTask(taskId);
+ }
+}
+
+static void RecordedPlayerHandleDrawPartyStatusSummary(void)
+{
+ if (gBattleBufferA[gActiveBank][1] != 0 && GetBankSide(gActiveBank) == SIDE_PLAYER)
+ {
+ RecordedPlayerBufferExecCompleted();
+ }
+ else
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].flag_x1 = 1;
+ gUnknown_020244B4[gActiveBank] = CreatePartyStatusSummarySprites(gActiveBank, (struct HpAndStatus *)&gBattleBufferA[gActiveBank][4], gBattleBufferA[gActiveBank][1], gBattleBufferA[gActiveBank][2]);
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_5 = 0;
+
+ if (gBattleBufferA[gActiveBank][2] != 0)
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_5 = 0x5D;
+
+ gBattleBankFunc[gActiveBank] = sub_818CDF4;
+ }
+}
+
+static void sub_818CDF4(void)
+{
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_5++ > 0x5C)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_5 = 0;
+ RecordedPlayerBufferExecCompleted();
+ }
+}
+
+static void RecordedPlayerHandleCmd49(void)
+{
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBank].flag_x1)
+ gTasks[gUnknown_020244B4[gActiveBank]].func = sub_8073C30;
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void RecordedPlayerHandleCmd50(void)
+{
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void RecordedPlayerHandleSpriteInvisibility(void)
+{
+ if (AnimBankSpriteExists(gActiveBank))
+ {
+ gSprites[gBankSpriteIds[gActiveBank]].invisible = gBattleBufferA[gActiveBank][1];
+ SetBattleSpriteInvisibilityBitToSpriteInvisibility(gActiveBank);
+ }
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void RecordedPlayerHandleBattleAnimation(void)
+{
+ if (!mplay_80342A4(gActiveBank))
+ {
+ u8 animationId = gBattleBufferA[gActiveBank][1];
+ u16 argument = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8);
+
+ if (DoBattleAnimationFromTable(gActiveBank, gActiveBank, gActiveBank, animationId, argument))
+ RecordedPlayerBufferExecCompleted();
+ else
+ gBattleBankFunc[gActiveBank] = CompleteOnFinishedBattleAnimation;
+ }
+}
+
+static void RecordedPlayerHandleLinkStandbyMsg(void)
+{
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void RecordedPlayerHandleResetActionMoveSelection(void)
+{
+ RecordedPlayerBufferExecCompleted();
+}
+
+static void RecordedPlayerHandleCmd55(void)
+{
+ gBattleOutcome = gBattleBufferA[gActiveBank][1];
+ FadeOutMapMusic(5);
+ BeginFastPaletteFade(3);
+ RecordedPlayerBufferExecCompleted();
+ gBattleBankFunc[gActiveBank] = sub_80587B0;
+}
+
+static void nullsub_121(void)
+{
+}
diff --git a/src/battle_controller_safari.c b/src/battle_controller_safari.c
new file mode 100644
index 000000000..74210e629
--- /dev/null
+++ b/src/battle_controller_safari.c
@@ -0,0 +1,723 @@
+#include "global.h"
+#include "battle.h"
+#include "battle_controllers.h"
+#include "battle_message.h"
+#include "battle_interface.h"
+#include "battle_anim.h"
+#include "pokemon.h"
+#include "link.h"
+#include "util.h"
+#include "main.h"
+#include "songs.h"
+#include "sound.h"
+#include "window.h"
+#include "m4a.h"
+#include "palette.h"
+#include "task.h"
+#include "text.h"
+#include "bg.h"
+#include "reshow_battle_screen.h"
+#include "pokeball.h"
+
+extern u32 gBattleExecBuffer;
+extern u8 gActiveBank;
+extern u8 gBankSpriteIds[BATTLE_BANKS_COUNT];
+extern u8 gActionSelectionCursor[BATTLE_BANKS_COUNT];
+extern u8 gNoOfAllBanks;
+extern bool8 gDoingBattleAnim;
+extern void (*gBattleBankFunc[BATTLE_BANKS_COUNT])(void);
+extern void (*gPreBattleCallback1)(void);
+extern u16 gBattlePartyID[BATTLE_BANKS_COUNT];
+extern u8 gBattleBufferA[BATTLE_BANKS_COUNT][0x200];
+extern u8 gBattleBufferB[BATTLE_BANKS_COUNT][0x200];
+extern struct BattlePokemon gBattleMons[BATTLE_BANKS_COUNT];
+extern struct SpriteTemplate gUnknown_0202499C;
+extern u16 gScriptItemId;
+extern u8 gHealthBoxesIds[BATTLE_BANKS_COUNT];
+extern u8 gBattleOutcome;
+extern u16 gBattle_BG0_X;
+extern u16 gBattle_BG0_Y;
+extern u8 gBankInMenu;
+extern u16 gUnknown_020243FC;
+
+extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
+
+extern const u8 gText_SafariZoneMenu[];
+extern const u8 gText_WhatWillPkmnDo2[];
+
+extern void sub_81358F4(void);
+
+// this file's functions
+static void SafariHandleGetMonData(void);
+static void SafariHandleGetRawMonData(void);
+static void SafariHandleSetMonData(void);
+static void SafariHandleSetRawMonData(void);
+static void SafariHandleLoadMonSprite(void);
+static void SafariHandleSwitchInAnim(void);
+static void SafariHandleReturnMonToBall(void);
+static void SafariHandleDrawTrainerPic(void);
+static void SafariHandleTrainerSlide(void);
+static void SafariHandleTrainerSlideBack(void);
+static void SafariHandleFaintAnimation(void);
+static void SafariHandlePaletteFade(void);
+static void SafariHandleSuccessBallThrowAnim(void);
+static void SafariHandleBallThrowAnim(void);
+static void SafariHandlePause(void);
+static void SafariHandleMoveAnimation(void);
+static void SafariHandlePrintString(void);
+static void SafariHandlePrintStringPlayerOnly(void);
+static void SafariHandleChooseAction(void);
+static void SafariHandleUnknownYesNoBox(void);
+static void SafariHandleChooseMove(void);
+static void SafariHandleChooseItem(void);
+static void SafariHandleChoosePokemon(void);
+static void SafariHandleCmd23(void);
+static void SafariHandleHealthBarUpdate(void);
+static void SafariHandleExpUpdate(void);
+static void SafariHandleStatusIconUpdate(void);
+static void SafariHandleStatusAnimation(void);
+static void SafariHandleStatusXor(void);
+static void SafariHandleDataTransfer(void);
+static void SafariHandleDMA3Transfer(void);
+static void SafariHandlePlayBGM(void);
+static void SafariHandleCmd32(void);
+static void SafariHandleTwoReturnValues(void);
+static void SafariHandleChosenMonReturnValue(void);
+static void SafariHandleOneReturnValue(void);
+static void SafariHandleOneReturnValue_Duplicate(void);
+static void SafariHandleCmd37(void);
+static void SafariHandleCmd38(void);
+static void SafariHandleCmd39(void);
+static void SafariHandleCmd40(void);
+static void SafariHandleHitAnimation(void);
+static void SafariHandleCmd42(void);
+static void SafariHandleEffectivenessSound(void);
+static void SafariHandlePlayFanfareOrBGM(void);
+static void SafariHandleFaintingCry(void);
+static void SafariHandleIntroSlide(void);
+static void SafariHandleIntroTrainerBallThrow(void);
+static void SafariHandleDrawPartyStatusSummary(void);
+static void SafariHandleCmd49(void);
+static void SafariHandleCmd50(void);
+static void SafariHandleSpriteInvisibility(void);
+static void SafariHandleBattleAnimation(void);
+static void SafariHandleLinkStandbyMsg(void);
+static void SafariHandleResetActionMoveSelection(void);
+static void SafariHandleCmd55(void);
+static void nullsub_115(void);
+
+static void SafariBufferRunCommand(void);
+static void SafariBufferExecCompleted(void);
+static void CompleteWhenChosePokeblock(void);
+
+static void (*const gSafariBufferCommands[CONTOLLER_CMDS_COUNT])(void) =
+{
+ SafariHandleGetMonData,
+ SafariHandleGetRawMonData,
+ SafariHandleSetMonData,
+ SafariHandleSetRawMonData,
+ SafariHandleLoadMonSprite,
+ SafariHandleSwitchInAnim,
+ SafariHandleReturnMonToBall,
+ SafariHandleDrawTrainerPic,
+ SafariHandleTrainerSlide,
+ SafariHandleTrainerSlideBack,
+ SafariHandleFaintAnimation,
+ SafariHandlePaletteFade,
+ SafariHandleSuccessBallThrowAnim,
+ SafariHandleBallThrowAnim,
+ SafariHandlePause,
+ SafariHandleMoveAnimation,
+ SafariHandlePrintString,
+ SafariHandlePrintStringPlayerOnly,
+ SafariHandleChooseAction,
+ SafariHandleUnknownYesNoBox,
+ SafariHandleChooseMove,
+ SafariHandleChooseItem,
+ SafariHandleChoosePokemon,
+ SafariHandleCmd23,
+ SafariHandleHealthBarUpdate,
+ SafariHandleExpUpdate,
+ SafariHandleStatusIconUpdate,
+ SafariHandleStatusAnimation,
+ SafariHandleStatusXor,
+ SafariHandleDataTransfer,
+ SafariHandleDMA3Transfer,
+ SafariHandlePlayBGM,
+ SafariHandleCmd32,
+ SafariHandleTwoReturnValues,
+ SafariHandleChosenMonReturnValue,
+ SafariHandleOneReturnValue,
+ SafariHandleOneReturnValue_Duplicate,
+ SafariHandleCmd37,
+ SafariHandleCmd38,
+ SafariHandleCmd39,
+ SafariHandleCmd40,
+ SafariHandleHitAnimation,
+ SafariHandleCmd42,
+ SafariHandleEffectivenessSound,
+ SafariHandlePlayFanfareOrBGM,
+ SafariHandleFaintingCry,
+ SafariHandleIntroSlide,
+ SafariHandleIntroTrainerBallThrow,
+ SafariHandleDrawPartyStatusSummary,
+ SafariHandleCmd49,
+ SafariHandleCmd50,
+ SafariHandleSpriteInvisibility,
+ SafariHandleBattleAnimation,
+ SafariHandleLinkStandbyMsg,
+ SafariHandleResetActionMoveSelection,
+ SafariHandleCmd55,
+ nullsub_115
+};
+
+static void nullsub_114(void)
+{
+}
+
+void SetBankFuncToSafariBufferRunCommand(void)
+{
+ gBattleBankFunc[gActiveBank] = SafariBufferRunCommand;
+}
+
+static void SafariBufferRunCommand(void)
+{
+ if (gBattleExecBuffer & gBitTable[gActiveBank])
+ {
+ if (gBattleBufferA[gActiveBank][0] < ARRAY_COUNT(gSafariBufferCommands))
+ gSafariBufferCommands[gBattleBufferA[gActiveBank][0]]();
+ else
+ SafariBufferExecCompleted();
+ }
+}
+
+static void HandleInputChooseAction(void)
+{
+ if (gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+
+ switch (gActionSelectionCursor[gActiveBank])
+ {
+ case 0:
+ EmitTwoReturnValues(1, ACTION_SAFARI_ZONE_BALL, 0);
+ break;
+ case 1:
+ EmitTwoReturnValues(1, ACTION_POKEBLOCK_CASE, 0);
+ break;
+ case 2:
+ EmitTwoReturnValues(1, ACTION_GO_NEAR, 0);
+ break;
+ case 3:
+ EmitTwoReturnValues(1, ACTION_SAFARI_ZONE_RUN, 0);
+ break;
+ }
+ SafariBufferExecCompleted();
+ }
+ else if (gMain.newKeys & DPAD_LEFT)
+ {
+ if (gActionSelectionCursor[gActiveBank] & 1)
+ {
+ PlaySE(SE_SELECT);
+ ActionSelectionDestroyCursorAt(gActionSelectionCursor[gActiveBank]);
+ gActionSelectionCursor[gActiveBank] ^= 1;
+ ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBank], 0);
+ }
+ }
+ else if (gMain.newKeys & DPAD_RIGHT)
+ {
+ if (!(gActionSelectionCursor[gActiveBank] & 1))
+ {
+ PlaySE(SE_SELECT);
+ ActionSelectionDestroyCursorAt(gActionSelectionCursor[gActiveBank]);
+ gActionSelectionCursor[gActiveBank] ^= 1;
+ ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBank], 0);
+ }
+ }
+ else if (gMain.newKeys & DPAD_UP)
+ {
+ if (gActionSelectionCursor[gActiveBank] & 2)
+ {
+ PlaySE(SE_SELECT);
+ ActionSelectionDestroyCursorAt(gActionSelectionCursor[gActiveBank]);
+ gActionSelectionCursor[gActiveBank] ^= 2;
+ ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBank], 0);
+ }
+ }
+ else if (gMain.newKeys & DPAD_DOWN)
+ {
+ if (!(gActionSelectionCursor[gActiveBank] & 2))
+ {
+ PlaySE(SE_SELECT);
+ ActionSelectionDestroyCursorAt(gActionSelectionCursor[gActiveBank]);
+ gActionSelectionCursor[gActiveBank] ^= 2;
+ ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBank], 0);
+ }
+ }
+}
+
+static void CompleteOnBankSpriteCallbackDummy(void)
+{
+ if (gSprites[gBankSpriteIds[gActiveBank]].callback == SpriteCallbackDummy)
+ SafariBufferExecCompleted();
+}
+
+static void CompleteOnInactiveTextPrinter(void)
+{
+ if (!IsTextPrinterActive(0))
+ SafariBufferExecCompleted();
+}
+
+static void CompleteOnHealthboxSpriteCallbackDummy(void)
+{
+ if (gSprites[gHealthBoxesIds[gActiveBank]].callback == SpriteCallbackDummy)
+ SafariBufferExecCompleted();
+}
+
+static void sub_81595E4(void)
+{
+ if (!gPaletteFade.active)
+ {
+ gMain.inBattle = FALSE;
+ gMain.callback1 = gPreBattleCallback1;
+ SetMainCallback2(gMain.savedCallback);
+ }
+}
+
+static void CompleteOnSpecialAnimDone(void)
+{
+ if (!gDoingBattleAnim || !gBattleSpritesDataPtr->healthBoxesData[gActiveBank].specialAnimActive)
+ SafariBufferExecCompleted();
+}
+
+static void OpenPokeblockCase(void)
+{
+ if (!gPaletteFade.active)
+ {
+ gBattleBankFunc[gActiveBank] = CompleteWhenChosePokeblock;
+ FreeAllWindowBuffers();
+ sub_81358F4();
+ }
+}
+
+static void CompleteWhenChosePokeblock(void)
+{
+ if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active)
+ {
+ EmitOneReturnValue(1, gScriptItemId);
+ SafariBufferExecCompleted();
+ }
+}
+
+static void CompleteOnFinishedBattleAnimation(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animFromTableActive)
+ SafariBufferExecCompleted();
+}
+
+static void SafariBufferExecCompleted(void)
+{
+ gBattleBankFunc[gActiveBank] = SafariBufferRunCommand;
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ u8 playerId = GetMultiplayerId();
+
+ PrepareBufferDataTransferLink(2, 4, &playerId);
+ gBattleBufferA[gActiveBank][0] = CONTOLLER_CMDS_COUNT - 1;
+ }
+ else
+ {
+ gBattleExecBuffer &= ~gBitTable[gActiveBank];
+ }
+}
+
+static void CompleteOnFinishedStatusAnimation(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].statusAnimActive)
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleGetMonData(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleGetRawMonData(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleSetMonData(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleSetRawMonData(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleLoadMonSprite(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleSwitchInAnim(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleReturnMonToBall(void)
+{
+ SafariBufferExecCompleted();
+}
+
+// todo: get rid of it once the struct is declared in a header
+struct MonCoords
+{
+ // This would use a bitfield, but sub_8079F44
+ // uses it as a u8 and casting won't match.
+ u8 coords; // u8 x:4, y:4;
+ u8 y_offset;
+};
+extern const struct MonCoords gTrainerBackPicCoords[];
+
+static void SafariHandleDrawTrainerPic(void)
+{
+ DecompressTrainerBackPic(gSaveBlock2Ptr->playerGender, gActiveBank);
+ sub_806A12C(gSaveBlock2Ptr->playerGender, GetBankIdentity(gActiveBank));
+ gBankSpriteIds[gActiveBank] = CreateSprite(
+ &gUnknown_0202499C,
+ 80,
+ (8 - gTrainerBackPicCoords[gSaveBlock2Ptr->playerGender].coords) * 4 + 80,
+ 30);
+ gSprites[gBankSpriteIds[gActiveBank]].oam.paletteNum = gActiveBank;
+ gSprites[gBankSpriteIds[gActiveBank]].pos2.x = 240;
+ gSprites[gBankSpriteIds[gActiveBank]].data0 = -2;
+ gSprites[gBankSpriteIds[gActiveBank]].callback = sub_805D7AC;
+ gBattleBankFunc[gActiveBank] = CompleteOnBankSpriteCallbackDummy;
+}
+
+static void SafariHandleTrainerSlide(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleTrainerSlideBack(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleFaintAnimation(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandlePaletteFade(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleSuccessBallThrowAnim(void)
+{
+ gBattleSpritesDataPtr->animationData->ballThrowCaseId = BALL_3_SHAKES_SUCCESS;
+ gDoingBattleAnim = TRUE;
+ DoSpecialBattleAnimation(gActiveBank, gActiveBank, GetBankByIdentity(IDENTITY_OPPONENT_MON1), B_ANIM_SAFARI_BALL_THROW);
+ gBattleBankFunc[gActiveBank] = CompleteOnSpecialAnimDone;
+}
+
+static void SafariHandleBallThrowAnim(void)
+{
+ u8 ballThrowCaseId = gBattleBufferA[gActiveBank][1];
+
+ gBattleSpritesDataPtr->animationData->ballThrowCaseId = ballThrowCaseId;
+ gDoingBattleAnim = TRUE;
+ DoSpecialBattleAnimation(gActiveBank, gActiveBank, GetBankByIdentity(IDENTITY_OPPONENT_MON1), B_ANIM_SAFARI_BALL_THROW);
+ gBattleBankFunc[gActiveBank] = CompleteOnSpecialAnimDone;
+}
+
+static void SafariHandlePause(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleMoveAnimation(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandlePrintString(void)
+{
+ u16 *stringId;
+
+ gBattle_BG0_X = 0;
+ gBattle_BG0_Y = 0;
+ stringId = (u16*)(&gBattleBufferA[gActiveBank][2]);
+ BufferStringBattle(*stringId);
+ BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
+ gBattleBankFunc[gActiveBank] = CompleteOnInactiveTextPrinter;
+}
+
+static void SafariHandlePrintStringPlayerOnly(void)
+{
+ if (GetBankSide(gActiveBank) == SIDE_PLAYER)
+ SafariHandlePrintString();
+ else
+ SafariBufferExecCompleted();
+}
+
+static void HandleChooseActionAfterDma3(void)
+{
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ gBattle_BG0_X = 0;
+ gBattle_BG0_Y = 160;
+ gBattleBankFunc[gActiveBank] = HandleInputChooseAction;
+ }
+}
+
+static void SafariHandleChooseAction(void)
+{
+ s32 i;
+
+ gBattleBankFunc[gActiveBank] = HandleChooseActionAfterDma3;
+ BattleHandleAddTextPrinter(gText_SafariZoneMenu, 2);
+
+ for (i = 0; i < 4; i++)
+ ActionSelectionDestroyCursorAt(i);
+
+ ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBank], 0);
+ BattleStringExpandPlaceholdersToDisplayedString(gText_WhatWillPkmnDo2);
+ BattleHandleAddTextPrinter(gDisplayedStringBattle, 1);
+}
+
+static void SafariHandleUnknownYesNoBox(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleChooseMove(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleChooseItem(void)
+{
+ s32 i;
+
+ BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
+ gBattleBankFunc[gActiveBank] = OpenPokeblockCase;
+ gBankInMenu = gActiveBank;
+}
+
+static void SafariHandleChoosePokemon(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleCmd23(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleHealthBarUpdate(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleExpUpdate(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleStatusIconUpdate(void)
+{
+ UpdateHealthboxAttribute(gHealthBoxesIds[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], HEALTHBOX_SAFARI_BALLS_TEXT);
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleStatusAnimation(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleStatusXor(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleDataTransfer(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleDMA3Transfer(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandlePlayBGM(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleCmd32(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleTwoReturnValues(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleChosenMonReturnValue(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleOneReturnValue(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleOneReturnValue_Duplicate(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleCmd37(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleCmd38(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleCmd39(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleCmd40(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleHitAnimation(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleCmd42(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleEffectivenessSound(void)
+{
+ s8 pan;
+
+ if (GetBankSide(gActiveBank) == SIDE_PLAYER)
+ pan = PAN_SIDE_PLAYER;
+ else
+ pan = PAN_SIDE_OPPONENT;
+
+ PlaySE12WithPanning(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8), pan);
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandlePlayFanfareOrBGM(void)
+{
+ if (gBattleBufferA[gActiveBank][3])
+ {
+ BattleMusicStop();
+ PlayBGM(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
+ }
+ else
+ {
+ PlayFanfare(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
+ }
+
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleFaintingCry(void)
+{
+ u16 species = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES);
+
+ PlayCry1(species, 25);
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleIntroSlide(void)
+{
+ HandleIntroSlide(gBattleBufferA[gActiveBank][1]);
+ gUnknown_020243FC |= 1;
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleIntroTrainerBallThrow(void)
+{
+ UpdateHealthboxAttribute(gHealthBoxesIds[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], HEALTHBOX_SAFARI_ALL_TEXT);
+ sub_8076918(gActiveBank);
+ SetHealthboxSpriteVisible(gHealthBoxesIds[gActiveBank]);
+ gBattleBankFunc[gActiveBank] = CompleteOnHealthboxSpriteCallbackDummy;
+}
+
+static void SafariHandleDrawPartyStatusSummary(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleCmd49(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleCmd50(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleSpriteInvisibility(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleBattleAnimation(void)
+{
+ u8 animationId = gBattleBufferA[gActiveBank][1];
+ u16 argument = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8);
+
+ if (DoBattleAnimationFromTable(gActiveBank, gActiveBank, gActiveBank, animationId, argument))
+ SafariBufferExecCompleted();
+ else
+ gBattleBankFunc[gActiveBank] = CompleteOnFinishedBattleAnimation;
+}
+
+static void SafariHandleLinkStandbyMsg(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleResetActionMoveSelection(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleCmd55(void)
+{
+ gBattleOutcome = gBattleBufferA[gActiveBank][1];
+ FadeOutMapMusic(5);
+ BeginFastPaletteFade(3);
+ SafariBufferExecCompleted();
+ if ((gBattleTypeFlags & BATTLE_TYPE_LINK) && !(gBattleTypeFlags & BATTLE_TYPE_WILD))
+ gBattleBankFunc[gActiveBank] = sub_81595E4;
+}
+
+static void nullsub_115(void)
+{
+}
diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c
new file mode 100644
index 000000000..ce38ca882
--- /dev/null
+++ b/src/battle_controller_wally.c
@@ -0,0 +1,147 @@
+#include "global.h"
+#include "battle.h"
+#include "battle_controllers.h"
+#include "battle_message.h"
+#include "battle_interface.h"
+#include "battle_anim.h"
+#include "link.h"
+
+extern u8 gActiveBank;
+extern bool8 gDoingBattleAnim;
+extern u8 gUnknown_020244CC;
+extern void (*gBattleBankFunc[BATTLE_BANKS_COUNT])(void);
+
+// this file's functions
+void WallyHandleGetMonData(void);
+void WallyHandleGetRawMonData(void);
+void WallyHandleSetMonData(void);
+void WallyHandleSetRawMonData(void);
+void WallyHandleLoadMonSprite(void);
+void WallyHandleSwitchInAnim(void);
+void WallyHandleReturnMonToBall(void);
+void WallyHandleDrawTrainerPic(void);
+void WallyHandleTrainerSlide(void);
+void WallyHandleTrainerSlideBack(void);
+void WallyHandleFaintAnimation(void);
+void WallyHandleCmd11(void);
+void WallyHandleCmd12(void);
+void WallyHandleBallThrow(void);
+void WallyHandlePause(void);
+void WallyHandleMoveAnimation(void);
+void WallyHandlePrintString(void);
+void WallyHandlePrintStringPlayerOnly(void);
+void WallyHandleChooseAction(void);
+void WallyHandleCmd19(void);
+void WallyHandleChooseMove(void);
+void WallyHandleOpenBag(void);
+void WallyHandleChoosePokemon(void);
+void WallyHandleCmd23(void);
+void WallyHandleHealthBarUpdate(void);
+void WallyHandleExpUpdate(void);
+void WallyHandleStatusIconUpdate(void);
+void WallyHandleStatusAnimation(void);
+void WallyHandleStatusXor(void);
+void WallyHandleDataTransfer(void);
+void WallyHandleDMA3Transfer(void);
+void WallyHandlePlayBGM(void);
+void WallyHandleCmd32(void);
+void WallyHandleCmd33(void);
+void WallyHandleCmd34(void);
+void WallyHandleCmd35(void);
+void WallyHandleCmd36(void);
+void WallyHandleCmd37(void);
+void WallyHandleCmd38(void);
+void WallyHandleCmd39(void);
+void WallyHandleCmd40(void);
+void WallyHandleHitAnimation(void);
+void WallyHandleCmd42(void);
+void WallyHandleEffectivenessSound(void);
+void WallyHandlePlayFanfareOrBGM(void);
+void WallyHandleFaintingCry(void);
+void WallyHandleIntroSlide(void);
+void WallyHandleIntroTrainerBallThrow(void);
+void WallyHandleDrawPartyStatusSummary(void);
+void WallyHandleCmd49(void);
+void WallyHandleCmd50(void);
+void WallyHandleSpriteInvisibility(void);
+void WallyHandleBattleAnimation(void);
+void WallyHandleLinkStandbyMsg(void);
+void WallyHandleResetActionMoveSelection(void);
+void WallyHandleCmd55(void);
+void nullsub_118(void);
+
+void WallyBufferRunCommand(void);
+
+void (*const gWallyBufferCommands[CONTOLLER_CMDS_COUNT])(void) =
+{
+ WallyHandleGetMonData,
+ WallyHandleGetRawMonData,
+ WallyHandleSetMonData,
+ WallyHandleSetRawMonData,
+ WallyHandleLoadMonSprite,
+ WallyHandleSwitchInAnim,
+ WallyHandleReturnMonToBall,
+ WallyHandleDrawTrainerPic,
+ WallyHandleTrainerSlide,
+ WallyHandleTrainerSlideBack,
+ WallyHandleFaintAnimation,
+ WallyHandleCmd11,
+ WallyHandleCmd12,
+ WallyHandleBallThrow,
+ WallyHandlePause,
+ WallyHandleMoveAnimation,
+ WallyHandlePrintString,
+ WallyHandlePrintStringPlayerOnly,
+ WallyHandleChooseAction,
+ WallyHandleCmd19,
+ WallyHandleChooseMove,
+ WallyHandleOpenBag,
+ WallyHandleChoosePokemon,
+ WallyHandleCmd23,
+ WallyHandleHealthBarUpdate,
+ WallyHandleExpUpdate,
+ WallyHandleStatusIconUpdate,
+ WallyHandleStatusAnimation,
+ WallyHandleStatusXor,
+ WallyHandleDataTransfer,
+ WallyHandleDMA3Transfer,
+ WallyHandlePlayBGM,
+ WallyHandleCmd32,
+ WallyHandleCmd33,
+ WallyHandleCmd34,
+ WallyHandleCmd35,
+ WallyHandleCmd36,
+ WallyHandleCmd37,
+ WallyHandleCmd38,
+ WallyHandleCmd39,
+ WallyHandleCmd40,
+ WallyHandleHitAnimation,
+ WallyHandleCmd42,
+ WallyHandleEffectivenessSound,
+ WallyHandlePlayFanfareOrBGM,
+ WallyHandleFaintingCry,
+ WallyHandleIntroSlide,
+ WallyHandleIntroTrainerBallThrow,
+ WallyHandleDrawPartyStatusSummary,
+ WallyHandleCmd49,
+ WallyHandleCmd50,
+ WallyHandleSpriteInvisibility,
+ WallyHandleBattleAnimation,
+ WallyHandleLinkStandbyMsg,
+ WallyHandleResetActionMoveSelection,
+ WallyHandleCmd55,
+ nullsub_118
+};
+
+void nullsub_117(void)
+{
+}
+
+void SetBankFuncToWallyBufferRunCommand(void)
+{
+ gBattleBankFunc[gActiveBank] = WallyBufferRunCommand;
+ gBattleStruct->field_94 = 0;
+ gBattleStruct->field_95 = 0;
+ gBattleStruct->field_96 = 0;
+ gBattleStruct->field_97 = 0;
+}
diff --git a/src/battle_controllers.c b/src/battle_controllers.c
index 9ac18c72f..bf6962b1b 100644
--- a/src/battle_controllers.c
+++ b/src/battle_controllers.c
@@ -939,11 +939,11 @@ static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId)
}
}
-void EmitGetMonData(u8 bufferId, u8 arg1, u8 arg2)
+void EmitGetMonData(u8 bufferId, u8 requestId, u8 monsToCheck)
{
gBattleBuffersTransferData[0] = CONTROLLER_GETMONDATA;
- gBattleBuffersTransferData[1] = arg1;
- gBattleBuffersTransferData[2] = arg2;
+ gBattleBuffersTransferData[1] = requestId;
+ gBattleBuffersTransferData[2] = monsToCheck;
gBattleBuffersTransferData[3] = 0;
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
}
@@ -957,13 +957,13 @@ void EmitGetRawMonData(u8 bufferId, u8 monId, u8 bytes)
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
}
-void EmitSetMonData(u8 bufferId, u8 request, u8 c, u8 bytes, void *data)
+void EmitSetMonData(u8 bufferId, u8 requestId, u8 monsToCheck, u8 bytes, void *data)
{
s32 i;
gBattleBuffersTransferData[0] = CONTROLLER_SETMONDATA;
- gBattleBuffersTransferData[1] = request;
- gBattleBuffersTransferData[2] = c;
+ gBattleBuffersTransferData[1] = requestId;
+ gBattleBuffersTransferData[2] = monsToCheck;
for (i = 0; i < bytes; i++)
gBattleBuffersTransferData[3 + i] = *(u8*)(data++);
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 3 + bytes);
@@ -984,9 +984,9 @@ void EmitSetRawMonData(u8 bufferId, u8 monId, u8 bytes, void *data)
void EmitLoadMonSprite(u8 bufferId)
{
gBattleBuffersTransferData[0] = CONTROLLER_LOADMONSPRITE;
- gBattleBuffersTransferData[1] = 4;
- gBattleBuffersTransferData[2] = 4;
- gBattleBuffersTransferData[3] = 4;
+ gBattleBuffersTransferData[1] = CONTROLLER_LOADMONSPRITE;
+ gBattleBuffersTransferData[2] = CONTROLLER_LOADMONSPRITE;
+ gBattleBuffersTransferData[3] = CONTROLLER_LOADMONSPRITE;
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
}
@@ -1009,27 +1009,27 @@ void EmitReturnMonToBall(u8 bufferId, u8 arg1)
void EmitDrawTrainerPic(u8 bufferId)
{
gBattleBuffersTransferData[0] = CONTROLLER_DRAWTRAINERPIC;
- gBattleBuffersTransferData[1] = 7;
- gBattleBuffersTransferData[2] = 7;
- gBattleBuffersTransferData[3] = 7;
+ gBattleBuffersTransferData[1] = CONTROLLER_DRAWTRAINERPIC;
+ gBattleBuffersTransferData[2] = CONTROLLER_DRAWTRAINERPIC;
+ gBattleBuffersTransferData[3] = CONTROLLER_DRAWTRAINERPIC;
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
}
void EmitTrainerSlide(u8 bufferId)
{
gBattleBuffersTransferData[0] = CONTROLLER_TRAINERSLIDE;
- gBattleBuffersTransferData[1] = 8;
- gBattleBuffersTransferData[2] = 8;
- gBattleBuffersTransferData[3] = 8;
+ gBattleBuffersTransferData[1] = CONTROLLER_TRAINERSLIDE;
+ gBattleBuffersTransferData[2] = CONTROLLER_TRAINERSLIDE;
+ gBattleBuffersTransferData[3] = CONTROLLER_TRAINERSLIDE;
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
}
void EmitTrainerSlideBack(u8 bufferId)
{
gBattleBuffersTransferData[0] = CONTROLLER_TRAINERSLIDEBACK;
- gBattleBuffersTransferData[1] = 9;
- gBattleBuffersTransferData[2] = 9;
- gBattleBuffersTransferData[3] = 9;
+ gBattleBuffersTransferData[1] = CONTROLLER_TRAINERSLIDEBACK;
+ gBattleBuffersTransferData[2] = CONTROLLER_TRAINERSLIDEBACK;
+ gBattleBuffersTransferData[3] = CONTROLLER_TRAINERSLIDEBACK;
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
}
@@ -1042,27 +1042,27 @@ void EmitFaintAnimation(u8 bufferId)
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
}
-void EmitCmd11(u8 bufferId)
+void EmitPaletteFade(u8 bufferId)
{
- gBattleBuffersTransferData[0] = CONTROLLER_11;
- gBattleBuffersTransferData[1] = 11;
- gBattleBuffersTransferData[2] = 11;
- gBattleBuffersTransferData[3] = 11;
+ gBattleBuffersTransferData[0] = CONTROLLER_PALETTEFADE;
+ gBattleBuffersTransferData[1] = CONTROLLER_PALETTEFADE;
+ gBattleBuffersTransferData[2] = CONTROLLER_PALETTEFADE;
+ gBattleBuffersTransferData[3] = CONTROLLER_PALETTEFADE;
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
}
-void EmitCmd12(u8 bufferId)
+void EmitSuccessBallThrowAnim(u8 bufferId)
{
- gBattleBuffersTransferData[0] = CONTROLLER_12;
- gBattleBuffersTransferData[1] = 12;
- gBattleBuffersTransferData[2] = 12;
- gBattleBuffersTransferData[3] = 12;
+ gBattleBuffersTransferData[0] = CONTROLLER_SUCCESSBALLTHROWANIM;
+ gBattleBuffersTransferData[1] = CONTROLLER_SUCCESSBALLTHROWANIM;
+ gBattleBuffersTransferData[2] = CONTROLLER_SUCCESSBALLTHROWANIM;
+ gBattleBuffersTransferData[3] = CONTROLLER_SUCCESSBALLTHROWANIM;
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
}
-void EmitBallThrow(u8 bufferId, u8 caseId)
+void EmitBallThrowAnim(u8 bufferId, u8 caseId)
{
- gBattleBuffersTransferData[0] = CONTROLLER_BALLTHROW;
+ gBattleBuffersTransferData[0] = CONTROLLER_BALLTHROWANIM;
gBattleBuffersTransferData[1] = caseId;
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 2);
}
@@ -1178,12 +1178,12 @@ void EmitChooseAction(u8 bufferId, u8 arg1, u16 arg2)
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
}
-void EmitCmd19(u8 bufferId)
+void EmitUnknownYesNoBox(u8 bufferId)
{
- gBattleBuffersTransferData[0] = CONTROLLER_19;
- gBattleBuffersTransferData[1] = 19;
- gBattleBuffersTransferData[2] = 19;
- gBattleBuffersTransferData[3] = 19;
+ gBattleBuffersTransferData[0] = CONTROLLER_UNKNOWNYESNOBOX;
+ gBattleBuffersTransferData[1] = CONTROLLER_UNKNOWNYESNOBOX;
+ gBattleBuffersTransferData[2] = CONTROLLER_UNKNOWNYESNOBOX;
+ gBattleBuffersTransferData[3] = CONTROLLER_UNKNOWNYESNOBOX;
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
}
@@ -1200,7 +1200,7 @@ void EmitChooseMove(u8 bufferId, bool8 isDoubleBattle, bool8 NoPpNumber, struct
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, sizeof(*movePpData) + 4);
}
-void EmitOpenBag(u8 bufferId, u8 *arg1)
+void EmitChooseItem(u8 bufferId, u8 *arg1)
{
s32 i;
@@ -1337,38 +1337,38 @@ void EmitCmd32(u8 bufferId, u16 size, void *data)
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, size + 3);
}
-void EmitCmd33(u8 bufferId, u8 arg1, u16 arg2)
+void EmitTwoReturnValues(u8 bufferId, u8 arg1, u16 arg2)
{
- gBattleBuffersTransferData[0] = CONTROLLER_33;
+ gBattleBuffersTransferData[0] = CONTROLLER_TWORETURNVALUES;
gBattleBuffersTransferData[1] = arg1;
gBattleBuffersTransferData[2] = arg2;
gBattleBuffersTransferData[3] = (arg2 & 0xFF00) >> 8;
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
}
-void EmitCmd34(u8 bufferId, u8 b, u8 *c)
+void EmitChosenMonReturnValue(u8 bufferId, u8 b, u8 *c)
{
s32 i;
- gBattleBuffersTransferData[0] = CONTROLLER_34;
+ gBattleBuffersTransferData[0] = CONTROLLER_CHOSENMONRETURNVALUE;
gBattleBuffersTransferData[1] = b;
for (i = 0; i < 3; i++)
gBattleBuffersTransferData[2 + i] = c[i];
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 5);
}
-void EmitCmd35(u8 bufferId, u16 b)
+void EmitOneReturnValue(u8 bufferId, u16 arg1)
{
- gBattleBuffersTransferData[0] = CONTROLLER_35;
- gBattleBuffersTransferData[1] = b;
- gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8;
+ gBattleBuffersTransferData[0] = CONTROLLER_ONERETURNVALUE;
+ gBattleBuffersTransferData[1] = arg1;
+ gBattleBuffersTransferData[2] = (arg1 & 0xFF00) >> 8;
gBattleBuffersTransferData[3] = 0;
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
}
-void EmitCmd36(u8 bufferId, u16 b)
+void EmitOneReturnValue_Duplicate(u8 bufferId, u16 b)
{
- gBattleBuffersTransferData[0] = CONTROLLER_36;
+ gBattleBuffersTransferData[0] = CONTROLLER_ONERETURNVALUE_DUPLICATE;
gBattleBuffersTransferData[1] = b;
gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8;
gBattleBuffersTransferData[3] = 0;
@@ -1378,9 +1378,9 @@ void EmitCmd36(u8 bufferId, u16 b)
void EmitCmd37(u8 bufferId)
{
gBattleBuffersTransferData[0] = CONTROLLER_37;
- gBattleBuffersTransferData[1] = 37;
- gBattleBuffersTransferData[2] = 37;
- gBattleBuffersTransferData[3] = 37;
+ gBattleBuffersTransferData[1] = CONTROLLER_37;
+ gBattleBuffersTransferData[2] = CONTROLLER_37;
+ gBattleBuffersTransferData[3] = CONTROLLER_37;
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
}
@@ -1394,27 +1394,27 @@ void EmitCmd38(u8 bufferId, u8 b)
void EmitCmd39(u8 bufferId)
{
gBattleBuffersTransferData[0] = CONTROLLER_39;
- gBattleBuffersTransferData[1] = 39;
- gBattleBuffersTransferData[2] = 39;
- gBattleBuffersTransferData[3] = 39;
+ gBattleBuffersTransferData[1] = CONTROLLER_39;
+ gBattleBuffersTransferData[2] = CONTROLLER_39;
+ gBattleBuffersTransferData[3] = CONTROLLER_39;
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
}
void EmitCmd40(u8 bufferId)
{
gBattleBuffersTransferData[0] = CONTROLLER_40;
- gBattleBuffersTransferData[1] = 40;
- gBattleBuffersTransferData[2] = 40;
- gBattleBuffersTransferData[3] = 40;
+ gBattleBuffersTransferData[1] = CONTROLLER_40;
+ gBattleBuffersTransferData[2] = CONTROLLER_40;
+ gBattleBuffersTransferData[3] = CONTROLLER_40;
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
}
void EmitHitAnimation(u8 bufferId)
{
gBattleBuffersTransferData[0] = CONTROLLER_HITANIMATION;
- gBattleBuffersTransferData[1] = 41;
- gBattleBuffersTransferData[2] = 41;
- gBattleBuffersTransferData[3] = 41;
+ gBattleBuffersTransferData[1] = CONTROLLER_HITANIMATION;
+ gBattleBuffersTransferData[2] = CONTROLLER_HITANIMATION;
+ gBattleBuffersTransferData[3] = CONTROLLER_HITANIMATION;
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
}
diff --git a/src/battle_interface.c b/src/battle_interface.c
index 9241db1d9..5f582a366 100644
--- a/src/battle_interface.c
+++ b/src/battle_interface.c
@@ -21,23 +21,11 @@
#include "safari_zone.h"
#include "battle_anim.h"
-enum
-{
- HEALTH_BAR,
- EXP_BAR
-};
-
-enum
-{
- HP_CURRENT,
- HP_MAX
-};
-
struct TestingBar
{
s32 maxValue;
s32 currValue;
- s32 field_8;
+ s32 receivedValue;
u32 unkC_0:5;
u32 unk10;
};
@@ -189,7 +177,6 @@ extern const u16 gBattleInterface_BallDisplayPal[];
extern const u8 gHealthboxElementsGfxTable[][32];
// functions
-extern bool8 IsDoubleBattle(void);
extern void AddTextPrinterParametrized2(u8 windowId, u8 fontId, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, struct TextColor *color, s8 speed, const u8 *str); // menu.h
extern void LoadBattleBarGfx(u8 arg0);
@@ -220,10 +207,10 @@ static void SpriteCB_StatusSummaryBallsOnBattleStart(struct Sprite *sprite);
static void SpriteCB_StatusSummaryBallsOnSwitchout(struct Sprite *sprite);
static u8 GetStatusIconForBankId(u8 statusElementId, u8 bank);
-static s32 sub_8074DB8(s32 maxValue, s32 currValue, s32 arg2, s32 *arg3, u8 arg4, u16 arg5);
-static u8 GetScaledExpFraction(s32 currValue, s32 arg1, s32 maxValue, u8 scale);
+static s32 sub_8074DB8(s32 maxValue, s32 currValue, s32 receivedValue, s32 *arg3, u8 arg4, u16 arg5);
+static u8 GetScaledExpFraction(s32 currValue, s32 receivedValue, s32 maxValue, u8 scale);
static void sub_8074B9C(u8 bank, u8 whichBar);
-static u8 sub_8074E8C(s32 maxValue, s32 currValue, s32 arg2, s32 *arg3, u8 *arg4, u8 arg5);
+static u8 sub_8074E8C(s32 maxValue, s32 currValue, s32 receivedValue, s32 *arg3, u8 *arg4, u8 arg5);
static void sub_8074F88(struct TestingBar *barInfo, s32 *arg1, u16 *arg2);
// const rom data
@@ -1055,12 +1042,12 @@ static void sub_8072924(struct Sprite *sprite)
sprite->pos2.y = gSprites[otherSpriteId].pos2.y;
}
-void SetBattleBarStruct(u8 bank, u8 healthboxSpriteId, s32 maxVal, s32 currVal, s32 field_C)
+void SetBattleBarStruct(u8 bank, u8 healthboxSpriteId, s32 maxVal, s32 currVal, s32 receivedValue)
{
gBattleSpritesDataPtr->battleBars[bank].healthboxSpriteId = healthboxSpriteId;
gBattleSpritesDataPtr->battleBars[bank].maxValue = maxVal;
gBattleSpritesDataPtr->battleBars[bank].currentValue = currVal;
- gBattleSpritesDataPtr->battleBars[bank].field_C = field_C;
+ gBattleSpritesDataPtr->battleBars[bank].receivedValue = receivedValue;
gBattleSpritesDataPtr->battleBars[bank].field_10 = -32768;
}
@@ -2268,22 +2255,22 @@ s32 sub_8074AA0(u8 bank, u8 healthboxSpriteId, u8 whichBar, u8 arg3)
{
var = sub_8074DB8(gBattleSpritesDataPtr->battleBars[bank].maxValue,
gBattleSpritesDataPtr->battleBars[bank].currentValue,
- gBattleSpritesDataPtr->battleBars[bank].field_C,
+ gBattleSpritesDataPtr->battleBars[bank].receivedValue,
&gBattleSpritesDataPtr->battleBars[bank].field_10,
6, 1);
}
else // exp bar
{
u16 expFraction = GetScaledExpFraction(gBattleSpritesDataPtr->battleBars[bank].currentValue,
- gBattleSpritesDataPtr->battleBars[bank].field_C,
+ gBattleSpritesDataPtr->battleBars[bank].receivedValue,
gBattleSpritesDataPtr->battleBars[bank].maxValue, 8);
if (expFraction == 0)
expFraction = 1;
- expFraction = abs(gBattleSpritesDataPtr->battleBars[bank].field_C / expFraction);
+ expFraction = abs(gBattleSpritesDataPtr->battleBars[bank].receivedValue / expFraction);
var = sub_8074DB8(gBattleSpritesDataPtr->battleBars[bank].maxValue,
gBattleSpritesDataPtr->battleBars[bank].currentValue,
- gBattleSpritesDataPtr->battleBars[bank].field_C,
+ gBattleSpritesDataPtr->battleBars[bank].receivedValue,
&gBattleSpritesDataPtr->battleBars[bank].field_10,
8, expFraction);
}
@@ -2299,7 +2286,7 @@ s32 sub_8074AA0(u8 bank, u8 healthboxSpriteId, u8 whichBar, u8 arg3)
static void sub_8074B9C(u8 bank, u8 whichBar)
{
- u8 array[7];
+ u8 array[8];
u8 subRet, level;
u8 barElementId;
u8 i;
@@ -2309,7 +2296,7 @@ static void sub_8074B9C(u8 bank, u8 whichBar)
case HEALTH_BAR:
subRet = sub_8074E8C(gBattleSpritesDataPtr->battleBars[bank].maxValue,
gBattleSpritesDataPtr->battleBars[bank].currentValue,
- gBattleSpritesDataPtr->battleBars[bank].field_C,
+ gBattleSpritesDataPtr->battleBars[bank].receivedValue,
&gBattleSpritesDataPtr->battleBars[bank].field_10,
array, 6);
barElementId = 3;
@@ -2333,7 +2320,7 @@ static void sub_8074B9C(u8 bank, u8 whichBar)
case EXP_BAR:
sub_8074E8C(gBattleSpritesDataPtr->battleBars[bank].maxValue,
gBattleSpritesDataPtr->battleBars[bank].currentValue,
- gBattleSpritesDataPtr->battleBars[bank].field_C,
+ gBattleSpritesDataPtr->battleBars[bank].receivedValue,
&gBattleSpritesDataPtr->battleBars[bank].field_10,
array, 8);
level = GetMonData(&gPlayerParty[gBattlePartyID[bank]], MON_DATA_LEVEL);
@@ -2355,7 +2342,7 @@ static void sub_8074B9C(u8 bank, u8 whichBar)
}
}
-static s32 sub_8074DB8(s32 maxValue, s32 currValue, s32 arg2, s32 *arg3, u8 arg4, u16 arg5)
+static s32 sub_8074DB8(s32 maxValue, s32 currValue, s32 receivedValue, s32 *arg3, u8 arg4, u16 arg5)
{
s32 r6;
s32 ret;
@@ -2369,7 +2356,7 @@ static s32 sub_8074DB8(s32 maxValue, s32 currValue, s32 arg2, s32 *arg3, u8 arg4
*arg3 = currValue;
}
- currValue -= arg2;
+ currValue -= receivedValue;
if (currValue < 0)
currValue = 0;
else if (currValue > maxValue)
@@ -2394,7 +2381,7 @@ static s32 sub_8074DB8(s32 maxValue, s32 currValue, s32 arg2, s32 *arg3, u8 arg4
{
s32 var = (maxValue << 8) / arg4;
- if (arg2 < 0)
+ if (receivedValue < 0)
{
*arg3 = r6 + var;
ret = *arg3 >> 8;
@@ -2419,7 +2406,7 @@ static s32 sub_8074DB8(s32 maxValue, s32 currValue, s32 arg2, s32 *arg3, u8 arg4
}
else
{
- if (arg2 < 0)
+ if (receivedValue < 0)
{
*arg3 += arg5;
if (*arg3 > currValue)
@@ -2438,9 +2425,9 @@ static s32 sub_8074DB8(s32 maxValue, s32 currValue, s32 arg2, s32 *arg3, u8 arg4
return ret;
}
-static u8 sub_8074E8C(s32 maxValue, s32 currValue, s32 arg2, s32 *arg3, u8 *arg4, u8 arg5)
+static u8 sub_8074E8C(s32 maxValue, s32 currValue, s32 receivedValue, s32 *arg3, u8 *arg4, u8 arg5)
{
- s32 r5 = currValue - arg2;
+ s32 r5 = currValue - receivedValue;
u8 ret;
u8 i;
u8 r2;
@@ -2493,7 +2480,7 @@ static s16 sub_8074F28(struct TestingBar *barInfo, s32 *arg1, u16 *arg2, s32 arg
ret = sub_8074DB8(barInfo->maxValue,
barInfo->currValue,
- barInfo->field_8,
+ barInfo->receivedValue,
arg1, 6, 1);
sub_8074F88(barInfo, arg1, arg2);
@@ -2514,7 +2501,7 @@ static void sub_8074F88(struct TestingBar *barInfo, s32 *arg1, u16 *arg2)
u8 i;
sub_8074E8C(barInfo->maxValue, barInfo->currValue,
- barInfo->field_8, arg1, sp8, 6);
+ barInfo->receivedValue, arg1, sp8, 6);
for (i = 0; i < 6; i++)
sp10[i] = (barInfo->unkC_0 << 12) | (barInfo->unk10 + sp8[i]);
@@ -2522,13 +2509,13 @@ static void sub_8074F88(struct TestingBar *barInfo, s32 *arg1, u16 *arg2)
CpuCopy16(sp10, arg2, sizeof(sp10));
}
-static u8 GetScaledExpFraction(s32 currValue, s32 arg1, s32 maxValue, u8 scale)
+static u8 GetScaledExpFraction(s32 currValue, s32 receivedValue, s32 maxValue, u8 scale)
{
s32 r5, result;
s8 r4, r0;
scale *= 8;
- r5 = currValue - arg1;
+ r5 = currValue - receivedValue;
if (r5 < 0)
r5 = 0;
diff --git a/src/battle_message.c b/src/battle_message.c
index aeff721d6..d0c7b118d 100644
--- a/src/battle_message.c
+++ b/src/battle_message.c
@@ -2209,7 +2209,7 @@ static void sub_814F950(u8* dst)
}
}
-void sub_814F9EC(const u8 *text, u8 arg1)
+void BattleHandleAddTextPrinter(const u8 *text, u8 arg1)
{
const u8 *r8 = gUnknown_085CD660[gBattleScripting.field_24];
bool32 r9;
diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c
index a1e5767ad..b2afd9837 100644
--- a/src/battle_script_commands.c
+++ b/src/battle_script_commands.c
@@ -3625,7 +3625,7 @@ static void atk23_getexp(void)
if (gBattleExecBuffer == 0)
{
gActiveBank = gBattleStruct->expGetterBank;
- if (gBattleBufferB[gActiveBank][0] == 0x21 && gBattleBufferB[gActiveBank][1] == 0xB)
+ if (gBattleBufferB[gActiveBank][0] == CONTROLLER_TWORETURNVALUES && gBattleBufferB[gActiveBank][1] == RET_VALUE_LEVELLED_UP)
{
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && gBattlePartyID[gActiveBank] == gBattleStruct->expGetterId)
sub_805E990(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
@@ -6114,33 +6114,33 @@ static void atk5A_yesnoboxlearnmove(void)
switch (gBattleScripting.learnMoveState)
{
case 0:
- sub_8056A3C(0x18, 8, 0x1D, 0xD, 0);
- sub_814F9EC(gText_BattleYesNoChoice, 0xC);
+ HandleBattleWindow(0x18, 8, 0x1D, 0xD, 0);
+ BattleHandleAddTextPrinter(gText_BattleYesNoChoice, 0xC);
gBattleScripting.learnMoveState++;
gBattleCommunication[CURSOR_POSITION] = 0;
- BattleCreateCursorAt(0);
+ BattleCreateYesNoCursorAt(0);
break;
case 1:
if (gMain.newKeys & DPAD_UP && gBattleCommunication[CURSOR_POSITION] != 0)
{
PlaySE(SE_SELECT);
- BattleDestroyCursorAt(gBattleCommunication[CURSOR_POSITION]);
+ BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]);
gBattleCommunication[CURSOR_POSITION] = 0;
- BattleCreateCursorAt(0);
+ BattleCreateYesNoCursorAt(0);
}
if (gMain.newKeys & DPAD_DOWN && gBattleCommunication[CURSOR_POSITION] == 0)
{
PlaySE(SE_SELECT);
- BattleDestroyCursorAt(gBattleCommunication[CURSOR_POSITION]);
+ BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]);
gBattleCommunication[CURSOR_POSITION] = 1;
- BattleCreateCursorAt(1);
+ BattleCreateYesNoCursorAt(1);
}
if (gMain.newKeys & A_BUTTON)
{
PlaySE(SE_SELECT);
if (gBattleCommunication[1] == 0)
{
- sub_8056A3C(0x18, 0x8, 0x1D, 0xD, 1);
+ HandleBattleWindow(0x18, 0x8, 0x1D, 0xD, WINDOW_CLEAR);
BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
gBattleScripting.learnMoveState++;
}
@@ -6214,7 +6214,7 @@ static void atk5A_yesnoboxlearnmove(void)
}
break;
case 5:
- sub_8056A3C(0x18, 8, 0x1D, 0xD, 1);
+ HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR);
gBattlescriptCurrInstr += 5;
break;
case 6:
@@ -6231,26 +6231,26 @@ static void atk5B_yesnoboxstoplearningmove(void)
switch (gBattleScripting.learnMoveState)
{
case 0:
- sub_8056A3C(0x18, 8, 0x1D, 0xD, 0);
- sub_814F9EC(gText_BattleYesNoChoice, 0xC);
+ HandleBattleWindow(0x18, 8, 0x1D, 0xD, 0);
+ BattleHandleAddTextPrinter(gText_BattleYesNoChoice, 0xC);
gBattleScripting.learnMoveState++;
gBattleCommunication[CURSOR_POSITION] = 0;
- BattleCreateCursorAt(0);
+ BattleCreateYesNoCursorAt(0);
break;
case 1:
if (gMain.newKeys & DPAD_UP && gBattleCommunication[CURSOR_POSITION] != 0)
{
PlaySE(SE_SELECT);
- BattleDestroyCursorAt(gBattleCommunication[CURSOR_POSITION]);
+ BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]);
gBattleCommunication[CURSOR_POSITION] = 0;
- BattleCreateCursorAt(0);
+ BattleCreateYesNoCursorAt(0);
}
if (gMain.newKeys & DPAD_DOWN && gBattleCommunication[CURSOR_POSITION] == 0)
{
PlaySE(SE_SELECT);
- BattleDestroyCursorAt(gBattleCommunication[CURSOR_POSITION]);
+ BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]);
gBattleCommunication[CURSOR_POSITION] = 1;
- BattleCreateCursorAt(1);
+ BattleCreateYesNoCursorAt(1);
}
if (gMain.newKeys & A_BUTTON)
{
@@ -6261,13 +6261,13 @@ static void atk5B_yesnoboxstoplearningmove(void)
else
gBattlescriptCurrInstr += 5;
- sub_8056A3C(0x18, 0x8, 0x1D, 0xD, 1);
+ HandleBattleWindow(0x18, 0x8, 0x1D, 0xD, WINDOW_CLEAR);
}
else if (gMain.newKeys & B_BUTTON)
{
PlaySE(SE_SELECT);
gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
- sub_8056A3C(0x18, 0x8, 0x1D, 0xD, 1);
+ HandleBattleWindow(0x18, 0x8, 0x1D, 0xD, WINDOW_CLEAR);
}
break;
}
@@ -6527,38 +6527,38 @@ static void atk67_yesnobox(void)
switch (gBattleCommunication[0])
{
case 0:
- sub_8056A3C(0x18, 8, 0x1D, 0xD, 0);
- sub_814F9EC(gText_BattleYesNoChoice, 0xC);
+ HandleBattleWindow(0x18, 8, 0x1D, 0xD, 0);
+ BattleHandleAddTextPrinter(gText_BattleYesNoChoice, 0xC);
gBattleCommunication[0]++;
gBattleCommunication[CURSOR_POSITION] = 0;
- BattleCreateCursorAt(0);
+ BattleCreateYesNoCursorAt(0);
break;
case 1:
if (gMain.newKeys & DPAD_UP && gBattleCommunication[CURSOR_POSITION] != 0)
{
PlaySE(SE_SELECT);
- BattleDestroyCursorAt(gBattleCommunication[CURSOR_POSITION]);
+ BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]);
gBattleCommunication[CURSOR_POSITION] = 0;
- BattleCreateCursorAt(0);
+ BattleCreateYesNoCursorAt(0);
}
if (gMain.newKeys & DPAD_DOWN && gBattleCommunication[CURSOR_POSITION] == 0)
{
PlaySE(SE_SELECT);
- BattleDestroyCursorAt(gBattleCommunication[CURSOR_POSITION]);
+ BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]);
gBattleCommunication[CURSOR_POSITION] = 1;
- BattleCreateCursorAt(1);
+ BattleCreateYesNoCursorAt(1);
}
if (gMain.newKeys & B_BUTTON)
{
gBattleCommunication[CURSOR_POSITION] = 1;
PlaySE(SE_SELECT);
- sub_8056A3C(0x18, 8, 0x1D, 0xD, 1);
+ HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR);
gBattlescriptCurrInstr++;
}
else if (gMain.newKeys & A_BUTTON)
{
PlaySE(SE_SELECT);
- sub_8056A3C(0x18, 8, 0x1D, 0xD, 1);
+ HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR);
gBattlescriptCurrInstr++;
}
break;
@@ -6674,7 +6674,7 @@ static void atk6C_draw_lvlupbox(void)
SetBgAttribute(1, BG_CTRL_ATTR_MOSAIC, 0);
ShowBg(0);
ShowBg(1);
- sub_8056A3C(0x12, 7, 0x1D, 0x13, 0x80);
+ HandleBattleWindow(0x12, 7, 0x1D, 0x13, WINDOW_x80);
gBattleScripting.atk6C_state = 4;
break;
case 4:
@@ -6704,7 +6704,7 @@ static void atk6C_draw_lvlupbox(void)
if (gMain.newKeys != 0)
{
PlaySE(SE_SELECT);
- sub_8056A3C(0x12, 7, 0x1D, 0x13, 0x81);
+ HandleBattleWindow(0x12, 7, 0x1D, 0x13, WINDOW_x80 | WINDOW_CLEAR);
gBattleScripting.atk6C_state++;
}
break;
@@ -7136,8 +7136,8 @@ static void atk76_various(void)
gDisableStructs[0].truantUnknownBit = 1;
gDisableStructs[1].truantUnknownBit = 1;
break;
- case 13:
- EmitCmd19(0);
+ case VARIOUS_EMIT_YESNOBOX:
+ EmitUnknownYesNoBox(0);
MarkBufferBankForExecution(gActiveBank);
break;
case 14:
@@ -7148,7 +7148,7 @@ static void atk76_various(void)
break;
case 16:
BattleStringExpandPlaceholdersToDisplayedString(gRefereeStringsTable[gBattlescriptCurrInstr[1]]);
- sub_814F9EC(gDisplayedStringBattle, 0x16);
+ BattleHandleAddTextPrinter(gDisplayedStringBattle, 0x16);
break;
case 17:
if (IsTextPrinterActive(0x16))
@@ -7255,7 +7255,7 @@ static void atk78_faintifabilitynotdamp(void)
{
gActiveBank = gBankAttacker;
gBattleMoveDamage = gBattleMons[gActiveBank].hp;
- EmitHealthBarUpdate(0, 0x7FFF);
+ EmitHealthBarUpdate(0, INSTANT_HP_BAR_DROP);
MarkBufferBankForExecution(gActiveBank);
gBattlescriptCurrInstr++;
@@ -8443,7 +8443,7 @@ static void atk9B_transformdataexecution(void)
gBattleMons[gBankAttacker].status2 |= STATUS2_TRANSFORMED;
gDisableStructs[gBankAttacker].disabledMove = 0;
gDisableStructs[gBankAttacker].disableTimer1 = 0;
- gDisableStructs[gBankAttacker].unk0 = gBattleMons[gBankTarget].personality;
+ gDisableStructs[gBankAttacker].transformedMonPersonality = gBattleMons[gBankTarget].personality;
gDisableStructs[gBankAttacker].unk18_b = 0;
PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[gBankTarget].species)
@@ -9152,7 +9152,7 @@ static void atkA8_copymovepermanently(void) // sketch
for (i = 0; i < 4; i++)
{
- movePpData.move[i] = gBattleMons[gBankAttacker].moves[i];
+ movePpData.moves[i] = gBattleMons[gBankAttacker].moves[i];
movePpData.pp[i] = gBattleMons[gBankAttacker].pp[i];
}
movePpData.ppBonuses = gBattleMons[gBankAttacker].ppBonuses;
@@ -10184,7 +10184,7 @@ static void atkC9_jumpifattackandspecialattackcannotfall(void) // memento
{
gActiveBank = gBankAttacker;
gBattleMoveDamage = gBattleMons[gActiveBank].hp;
- EmitHealthBarUpdate(0, 0x7FFF);
+ EmitHealthBarUpdate(0, INSTANT_HP_BAR_DROP);
MarkBufferBankForExecution(gActiveBank);
gBattlescriptCurrInstr += 5;
}
@@ -11003,13 +11003,13 @@ static void atkEF_pokeball_catch_calculation(void)
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
{
- EmitBallThrow(0, BALL_TRAINER_BLOCK);
+ EmitBallThrowAnim(0, BALL_TRAINER_BLOCK);
MarkBufferBankForExecution(gActiveBank);
gBattlescriptCurrInstr = BattleScript_TrainerBallBlock;
}
else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL)
{
- EmitBallThrow(0, BALL_3_SHAKES_SUCCESS);
+ EmitBallThrowAnim(0, BALL_3_SHAKES_SUCCESS);
MarkBufferBankForExecution(gActiveBank);
gBattlescriptCurrInstr = BattleScript_WallyBallThrow;
}
@@ -11098,7 +11098,7 @@ static void atkEF_pokeball_catch_calculation(void)
if (odds > 254) // mon caught
{
- EmitBallThrow(0, BALL_3_SHAKES_SUCCESS);
+ EmitBallThrowAnim(0, BALL_3_SHAKES_SUCCESS);
MarkBufferBankForExecution(gActiveBank);
gBattlescriptCurrInstr = BattleScript_SuccessBallThrow;
SetMonData(&gEnemyParty[gBattlePartyID[gBankTarget]], MON_DATA_POKEBALL, &gLastUsedItem);
@@ -11120,7 +11120,7 @@ static void atkEF_pokeball_catch_calculation(void)
if (gLastUsedItem == ITEM_MASTER_BALL)
shakes = BALL_3_SHAKES_SUCCESS; // why calculate the shakes before that check?
- EmitBallThrow(0, shakes);
+ EmitBallThrowAnim(0, shakes);
MarkBufferBankForExecution(gActiveBank);
if (shakes == BALL_3_SHAKES_SUCCESS) // mon caught, copy of the code above
@@ -11238,7 +11238,7 @@ static void atkF2_display_dex_info(void)
}
}
-void sub_8056A3C(u8 xStart, u8 yStart, u8 xEnd, u8 yEnd, u8 flags)
+void HandleBattleWindow(u8 xStart, u8 yStart, u8 xEnd, u8 yEnd, u8 flags)
{
s32 destY, destX;
u16 var = 0;
@@ -11275,10 +11275,10 @@ void sub_8056A3C(u8 xStart, u8 yStart, u8 xEnd, u8 yEnd, u8 flags)
var = 0x1026;
}
- if (flags & 1)
+ if (flags & WINDOW_CLEAR)
var = 0;
- if (flags & 0x80)
+ if (flags & WINDOW_x80)
CopyToBgTilemapBufferRect_ChangePalette(1, &var, destX, destY, 1, 1, 0x11);
else
CopyToBgTilemapBufferRect_ChangePalette(0, &var, destX, destY, 1, 1, 0x11);
@@ -11286,7 +11286,7 @@ void sub_8056A3C(u8 xStart, u8 yStart, u8 xEnd, u8 yEnd, u8 flags)
}
}
-void BattleCreateCursorAt(u8 cursorPosition)
+void BattleCreateYesNoCursorAt(u8 cursorPosition)
{
u16 src[2];
src[0] = 1;
@@ -11296,7 +11296,7 @@ void BattleCreateCursorAt(u8 cursorPosition)
CopyBgTilemapBufferToVram(0);
}
-void BattleDestroyCursorAt(u8 cursorPosition)
+void BattleDestroyYesNoCursorAt(u8 cursorPosition)
{
u16 src[2];
src[0] = 0x1016;
@@ -11311,26 +11311,26 @@ static void atkF3_nickname_caught_poke(void)
switch (gBattleCommunication[MULTIUSE_STATE])
{
case 0:
- sub_8056A3C(0x18, 8, 0x1D, 0xD, 0);
- sub_814F9EC(gText_BattleYesNoChoice, 0xC);
+ HandleBattleWindow(0x18, 8, 0x1D, 0xD, 0);
+ BattleHandleAddTextPrinter(gText_BattleYesNoChoice, 0xC);
gBattleCommunication[MULTIUSE_STATE]++;
gBattleCommunication[CURSOR_POSITION] = 0;
- BattleCreateCursorAt(0);
+ BattleCreateYesNoCursorAt(0);
break;
case 1:
if (gMain.newKeys & DPAD_UP && gBattleCommunication[CURSOR_POSITION] != 0)
{
PlaySE(SE_SELECT);
- BattleDestroyCursorAt(gBattleCommunication[CURSOR_POSITION]);
+ BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]);
gBattleCommunication[CURSOR_POSITION] = 0;
- BattleCreateCursorAt(0);
+ BattleCreateYesNoCursorAt(0);
}
if (gMain.newKeys & DPAD_DOWN && gBattleCommunication[CURSOR_POSITION] == 0)
{
PlaySE(SE_SELECT);
- BattleDestroyCursorAt(gBattleCommunication[CURSOR_POSITION]);
+ BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]);
gBattleCommunication[CURSOR_POSITION] = 1;
- BattleCreateCursorAt(1);
+ BattleCreateYesNoCursorAt(1);
}
if (gMain.newKeys & A_BUTTON)
{
diff --git a/src/pokemon_2.c b/src/pokemon_2.c
index 27441f952..78c205517 100644
--- a/src/pokemon_2.c
+++ b/src/pokemon_2.c
@@ -84,7 +84,7 @@ bool8 ShouldGetStatBadgeBoost(u16 badgeFlag, u8 bank)
return FALSE;
}
-u8 sub_8069F34(u8 bank)
+u8 GetDefaultMoveTarget(u8 bank)
{
u8 status = GetBankIdentity(bank) & 1;
@@ -194,6 +194,7 @@ void sub_806A1C0(u16 arg0, u8 bankIdentity)
gUnknown_0202499C = gMonSpritesGfxPtr->templates[bankIdentity];
else
gUnknown_0202499C = gUnknown_08329D98[bankIdentity];
+
gUnknown_0202499C.paletteTag = arg0;
gUnknown_0202499C.anims = gUnknown_0830536C[arg0];
}
@@ -1304,7 +1305,7 @@ void RemoveBattleMonPPBonus(struct BattlePokemon *mon, u8 moveIndex)
}
void sub_803FA70(u8 bank);
-void sub_805EF84(u8 bank, bool8);
+void ClearTemporarySpeciesSpriteData(u8 bank, bool8);
extern struct BattlePokemon gBattleMons[4];
@@ -1360,5 +1361,5 @@ void CopyPlayerPartyMonToBattleData(u8 bank, u8 partyIndex)
gBattleMons[bank].status2 = 0;
sub_803FA70(bank);
- sub_805EF84(bank, FALSE);
+ ClearTemporarySpeciesSpriteData(bank, FALSE);
}
diff --git a/src/pokemon_3.c b/src/pokemon_3.c
index 5ff99aee2..aa45c3d24 100644
--- a/src/pokemon_3.c
+++ b/src/pokemon_3.c
@@ -1659,7 +1659,7 @@ u16 sub_806EFF0(u16 arg0)
return gUnknown_0831F578[arg0];
}
-u16 sub_806F000(u8 playerGender)
+u16 PlayerGenderToFrontTrainerPicId(u8 playerGender)
{
if (playerGender)
return sub_806EFF0(0x3F);
diff --git a/src/reshow_battle_screen.c b/src/reshow_battle_screen.c
index 343ddb9c0..002f4f069 100644
--- a/src/reshow_battle_screen.c
+++ b/src/reshow_battle_screen.c
@@ -220,9 +220,9 @@ static bool8 LoadBankSpriteGfx(u8 bank)
BattleLoadSubstituteSpriteGfx(bank, FALSE);
}
else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI && bank == 0)
- LoadBackTrainerBankSpriteGfx(gSaveBlock2Ptr->playerGender, bank);
+ DecompressTrainerBackPic(gSaveBlock2Ptr->playerGender, bank);
else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL && bank == 0)
- LoadBackTrainerBankSpriteGfx(BACK_PIC_WALLY, bank);
+ DecompressTrainerBackPic(BACK_PIC_WALLY, bank);
else if (!gBattleSpritesDataPtr->bankData[bank].behindSubstitute)
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlePartyID[bank]], bank);
else
diff --git a/sym_common.txt b/sym_common.txt
index 85b508403..a825b9686 100644
--- a/sym_common.txt
+++ b/sym_common.txt
@@ -221,10 +221,10 @@ gBattleBankFunc: @ 3005D60
gHealthBoxesIds: @ 3005D70
.space 0x4
-gUnknown_03005D74: @ 3005D74
+gMultiUsePlayerCursor: @ 3005D74
.space 0x4
-gUnknown_03005D78: @ 3005D78
+gNumberOfMovesToChoose: @ 3005D78
.space 0x4
gUnknown_03005D7C: @ 3005D7C
diff --git a/sym_ewram.txt b/sym_ewram.txt
index d2779079e..f64bb98b8 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -495,7 +495,7 @@ gBankInMenu: @ 20244B8
gDoingBattleAnim: @ 20244B9
.space 0x3
-gUnknown_020244BC: @ 20244BC
+gTransformedPersonalities: @ 20244BC
.space 0x10
gUnknown_020244CC: @ 20244CC