summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorProjectRevoTPP <projectrevotpp@hotmail.com>2017-08-27 12:53:38 -0400
committerProjectRevoTPP <projectrevotpp@hotmail.com>2017-08-27 12:53:38 -0400
commitbd59586968791b7c322bc79ef571f9cbff80c38a (patch)
treeca90d3083db91ff3943528a9b73e36a02b1a4ef1
parent47b9907ec58c55759a95aed1f31e92fb72031a5f (diff)
parentd58e89a51850a38bf6ae332736bdedcfd62770f7 (diff)
merge
-rw-r--r--asm/battle_2.s8
-rw-r--r--asm/battle_9.s1424
-rw-r--r--asm/battle_anim_81258BC.s1396
-rw-r--r--asm/battle_controller_linkopponent1.s1421
-rw-r--r--asm/battle_controller_safari.s1402
-rw-r--r--data/battle_811DA74.s64
-rw-r--r--data/battle_anim_81258BC.s64
-rw-r--r--data/battle_anim_8137220.s64
-rw-r--r--data/battle_moves.s (renamed from data/battle_moves.inc)5
-rw-r--r--data/data2b.s126
-rw-r--r--include/battle.h18
-rw-r--r--include/rom3.h60
-rw-r--r--ld_script.txt28
-rw-r--r--src/battle/battle_2.c26
-rw-r--r--src/battle/battle_4.c32
-rw-r--r--src/battle/battle_5.c1579
-rw-r--r--src/battle/battle_7.c384
-rw-r--r--src/battle/battle_controller_linkopponent2.c (renamed from src/battle/battle_10.c)338
-rw-r--r--src/battle/battle_controller_linkpartner.c (renamed from src/battle/battle_811DA74.c)222
-rw-r--r--src/battle/battle_controller_opponent.c (renamed from src/battle/battle_8.c)519
-rw-r--r--src/battle/battle_controller_player.c (renamed from src/battle/battle_6.c)1647
-rw-r--r--src/battle/battle_controller_safari.c173
-rw-r--r--src/battle/battle_controller_wally.c (renamed from src/battle/battle_anim_8137220.c)265
-rw-r--r--src/misc/rom3.c72
24 files changed, 5854 insertions, 5483 deletions
diff --git a/asm/battle_2.s b/asm/battle_2.s
index 804cefa76..617729451 100644
--- a/asm/battle_2.s
+++ b/asm/battle_2.s
@@ -189,7 +189,7 @@ _080124A8:
lsls r0, 8
orrs r2, r0
movs r0, 0
- bl dp01_build_cmdbuf_x12_a_bb
+ bl Emitcmd18
bl _08012E32
.align 2, 0
_080124C0: .4byte gActionForBanks
@@ -408,7 +408,7 @@ _0801264E:
movs r0, 0
movs r2, 0
add r3, sp, 0x4
- bl sub_800CBA4
+ bl Emitcmd20
b _0801289E
.align 2, 0
_080126AC: .4byte gBattleMons
@@ -698,7 +698,7 @@ _08012908:
ldr r0, _08012928 @ =0x0201606c
adds r1, r0
movs r0, 0
- bl sub_800CBE0
+ bl EmitOpenBag
ldrb r0, [r4]
bl MarkBufferBankForExecution
b _08012968
@@ -725,7 +725,7 @@ _0801292C:
adds r0, r4
strb r5, [r0]
movs r0, 0
- bl dp01_build_cmdbuf_x32_32_32_32
+ bl Emitcmd50
mov r4, r8
ldrb r0, [r4]
bl MarkBufferBankForExecution
diff --git a/asm/battle_9.s b/asm/battle_9.s
index 1c5431afc..9f4beef55 100644
--- a/asm/battle_9.s
+++ b/asm/battle_9.s
@@ -41,7 +41,7 @@ ai_switch_perish_song: @ 8035FEC
movs r0, 0x1
movs r1, 0x2
movs r2, 0
- bl dp01_build_cmdbuf_x21_a_bb
+ bl Emitcmd33
movs r0, 0x1
b _0803604E
.align 2, 0
@@ -86,7 +86,7 @@ _08036070:
movs r0, 0x1
movs r1, 0x2
movs r2, 0
- bl dp01_build_cmdbuf_x21_a_bb
+ bl Emitcmd33
movs r0, 0x1
b _080361CA
.align 2, 0
@@ -410,7 +410,7 @@ _0803630C:
movs r0, 0x1
movs r1, 0x2
movs r2, 0
- bl dp01_build_cmdbuf_x21_a_bb
+ bl Emitcmd33
movs r0, 0x1
b _08036402
.align 2, 0
@@ -634,7 +634,7 @@ _080364E0:
movs r0, 0x1
movs r1, 0x2
movs r2, 0
- bl dp01_build_cmdbuf_x21_a_bb
+ bl Emitcmd33
_080364FE:
movs r0, 0x1
_08036500:
@@ -958,7 +958,7 @@ _08036768:
movs r0, 0x1
movs r1, 0x2
movs r2, 0
- bl dp01_build_cmdbuf_x21_a_bb
+ bl Emitcmd33
movs r0, 0x1
b _080368DA
.align 2, 0
@@ -1533,7 +1533,7 @@ _08036C2E:
lsls r2, 8
movs r0, 0x1
movs r1, 0
- bl dp01_build_cmdbuf_x21_a_bb
+ bl Emitcmd33
_08036C40:
pop {r4-r6}
pop {r0}
@@ -2623,7 +2623,7 @@ _080374AE:
movs r0, 0x1
movs r1, 0x1
movs r2, 0
- bl dp01_build_cmdbuf_x21_a_bb
+ bl Emitcmd33
ldr r1, _080374DC @ =0x02000000
ldr r0, _080374E0 @ =gActiveBank
ldrb r0, [r0]
@@ -2667,1414 +2667,4 @@ _080374FA:
bx r1
thumb_func_end sub_803708C
- thumb_func_start nullsub_47
-nullsub_47: @ 803750C
- bx lr
- thumb_func_end nullsub_47
-
- thumb_func_start SetBankFuncToLinkOpponentBufferRunCommand
-SetBankFuncToLinkOpponentBufferRunCommand: @ 8037510
- ldr r1, _08037520 @ =gBattleBankFunc
- ldr r0, _08037524 @ =gActiveBank
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08037528 @ =sub_803752C
- str r1, [r0]
- bx lr
- .align 2, 0
-_08037520: .4byte gBattleBankFunc
-_08037524: .4byte gActiveBank
-_08037528: .4byte sub_803752C
- thumb_func_end SetBankFuncToLinkOpponentBufferRunCommand
-
- thumb_func_start sub_803752C
-sub_803752C: @ 803752C
- push {lr}
- ldr r2, _08037560 @ =gBattleExecBuffer
- ldr r1, _08037564 @ =gBitTable
- ldr r0, _08037568 @ =gActiveBank
- ldrb r3, [r0]
- lsls r0, r3, 2
- adds r0, r1
- ldr r1, [r2]
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _08037578
- ldr r0, _0803756C @ =gBattleBufferA
- lsls r1, r3, 9
- adds r1, r0
- ldrb r0, [r1]
- cmp r0, 0x38
- bhi _08037574
- ldr r0, _08037570 @ =gLinkOpponentBufferCommands
- ldrb r1, [r1]
- lsls r1, 2
- adds r1, r0
- ldr r0, [r1]
- bl _call_via_r0
- b _08037578
- .align 2, 0
-_08037560: .4byte gBattleExecBuffer
-_08037564: .4byte gBitTable
-_08037568: .4byte gActiveBank
-_0803756C: .4byte gBattleBufferA
-_08037570: .4byte gLinkOpponentBufferCommands
-_08037574:
- bl dp01_tbl4_exec_completed
-_08037578:
- pop {r0}
- bx r0
- thumb_func_end sub_803752C
-
- thumb_func_start sub_803757C
-sub_803757C: @ 803757C
- push {lr}
- ldr r2, _080375A4 @ =gSprites
- ldr r1, _080375A8 @ =gObjectBankIDs
- ldr r0, _080375AC @ =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, _080375B0 @ =SpriteCallbackDummy
- cmp r1, r0
- bne _080375A0
- bl dp01_tbl4_exec_completed
-_080375A0:
- pop {r0}
- bx r0
- .align 2, 0
-_080375A4: .4byte gSprites
-_080375A8: .4byte gObjectBankIDs
-_080375AC: .4byte gActiveBank
-_080375B0: .4byte SpriteCallbackDummy
- thumb_func_end sub_803757C
-
- thumb_func_start sub_80375B4
-sub_80375B4: @ 80375B4
- push {r4-r6,lr}
- ldr r4, _0803762C @ =gSprites
- ldr r6, _08037630 @ =gObjectBankIDs
- ldr r5, _08037634 @ =gActiveBank
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r2, r0, 2
- adds r0, r4, 0
- adds r0, 0x1C
- adds r0, r2, r0
- ldr r1, [r0]
- ldr r0, _08037638 @ =SpriteCallbackDummy
- cmp r1, r0
- bne _08037624
- adds r0, r2, r4
- ldrh r0, [r0, 0x6]
- bl sub_8031B74
- ldrb r0, [r5]
- adds r0, r6
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- ldrh r0, [r1, 0x38]
- ldr r2, _0803763C @ =0x000003ff
- ands r2, r0
- ldrh r3, [r1, 0x4]
- ldr r0, _08037640 @ =0xfffffc00
- ands r0, r3
- orrs r0, r2
- strh r0, [r1, 0x4]
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl FreeSpriteOamMatrix
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl DestroySprite
- bl dp01_tbl4_exec_completed
-_08037624:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0803762C: .4byte gSprites
-_08037630: .4byte gObjectBankIDs
-_08037634: .4byte gActiveBank
-_08037638: .4byte SpriteCallbackDummy
-_0803763C: .4byte 0x000003ff
-_08037640: .4byte 0xfffffc00
- thumb_func_end sub_80375B4
-
- thumb_func_start sub_8037644
-sub_8037644: @ 8037644
- push {lr}
- ldr r3, _08037678 @ =gActiveBank
- ldrb r0, [r3]
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- ldr r2, _0803767C @ =0x02017810
- adds r1, r2
- ldrb r0, [r1, 0x9]
- subs r0, 0x1
- strb r0, [r1, 0x9]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- bne _08037674
- ldrb r0, [r3]
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- movs r0, 0
- strb r0, [r1, 0x9]
- bl dp01_tbl4_exec_completed
-_08037674:
- pop {r0}
- bx r0
- .align 2, 0
-_08037678: .4byte gActiveBank
-_0803767C: .4byte 0x02017810
- thumb_func_end sub_8037644
-
- thumb_func_start sub_8037680
-sub_8037680: @ 8037680
- push {r4-r7,lr}
- movs r6, 0
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _080376A4
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _080376D8
- ldr r0, _080376C4 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _080376D8
-_080376A4:
- ldr r2, _080376C8 @ =gSprites
- ldr r1, _080376CC @ =gHealthboxIDs
- ldr r0, _080376D0 @ =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, _080376D4 @ =SpriteCallbackDummy
- cmp r1, r0
- bne _0803770E
- b _0803770C
- .align 2, 0
-_080376C4: .4byte gBattleTypeFlags
-_080376C8: .4byte gSprites
-_080376CC: .4byte gHealthboxIDs
-_080376D0: .4byte gActiveBank
-_080376D4: .4byte SpriteCallbackDummy
-_080376D8:
- ldr r2, _080377D8 @ =gSprites
- ldr r5, _080377DC @ =gHealthboxIDs
- ldr r0, _080377E0 @ =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, _080377E4 @ =SpriteCallbackDummy
- cmp r4, r0
- bne _0803770E
- 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 _0803770E
-_0803770C:
- movs r6, 0x1
-_0803770E:
- bl IsCryPlayingOrClearCrySongs
- lsls r0, 24
- cmp r0, 0
- beq _0803771A
- movs r6, 0
-_0803771A:
- cmp r6, 0
- bne _08037720
- b _08037822
-_08037720:
- ldr r7, _080377E0 @ =gActiveBank
- ldrb r0, [r7]
- bl GetBankIdentity
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x1
- bne _080377B4
- ldrb r2, [r7]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- ldr r5, _080377E8 @ =0x02017810
- adds r4, r0, r5
- ldrb r1, [r4, 0x1]
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- beq _08037822
- movs r6, 0x2
- adds r1, r6, 0
- eors r1, r2
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldrb r1, [r0, 0x1]
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- beq _08037822
- ldrb r1, [r4]
- movs r3, 0x7F
- adds r0, r3, 0
- ands r0, r1
- strb r0, [r4]
- ldrb r0, [r7]
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- ldrb r2, [r1, 0x1]
- movs r4, 0x2
- negs r4, r4
- adds r0, r4, 0
- ands r0, r2
- strb r0, [r1, 0x1]
- ldrb r0, [r7]
- adds r1, r6, 0
- eors r1, r0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldrb r1, [r0]
- ands r3, r1
- strb r3, [r0]
- ldrb r0, [r7]
- adds r1, r6, 0
- eors r1, r0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldrb r1, [r0, 0x1]
- ands r4, r1
- strb r4, [r0, 0x1]
- ldr r4, _080377EC @ =0x000027f9
- adds r0, r4, 0
- bl FreeSpriteTilesByTag
- adds r0, r4, 0
- bl FreeSpritePaletteByTag
-_080377B4:
- ldr r0, _080377F0 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _080377F8
- ldrb r0, [r7]
- bl GetBankIdentity
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08037804
- ldr r0, _080377F4 @ =gMPlay_BGM
- bl m4aMPlayContinue
- b _08037804
- .align 2, 0
-_080377D8: .4byte gSprites
-_080377DC: .4byte gHealthboxIDs
-_080377E0: .4byte gActiveBank
-_080377E4: .4byte SpriteCallbackDummy
-_080377E8: .4byte 0x02017810
-_080377EC: .4byte 0x000027f9
-_080377F0: .4byte gBattleTypeFlags
-_080377F4: .4byte gMPlay_BGM
-_080377F8:
- ldr r0, _08037828 @ =gMPlay_BGM
- ldr r1, _0803782C @ =0x0000ffff
- movs r2, 0x80
- lsls r2, 1
- bl m4aMPlayVolumeControl
-_08037804:
- ldr r2, _08037830 @ =gActiveBank
- ldrb r1, [r2]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- ldr r1, _08037834 @ =0x02017810
- adds r0, r1
- movs r1, 0x3
- strb r1, [r0, 0x9]
- ldr r1, _08037838 @ =gBattleBankFunc
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0803783C @ =sub_8037644
- str r1, [r0]
-_08037822:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08037828: .4byte gMPlay_BGM
-_0803782C: .4byte 0x0000ffff
-_08037830: .4byte gActiveBank
-_08037834: .4byte 0x02017810
-_08037838: .4byte gBattleBankFunc
-_0803783C: .4byte sub_8037644
- thumb_func_end sub_8037680
-
- thumb_func_start sub_8037840
-sub_8037840: @ 8037840
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r6, _08037A48 @ =gActiveBank
- ldrb r2, [r6]
- lsls r3, r2, 1
- adds r0, r3, r2
- lsls r0, 2
- ldr r5, _08037A4C @ =0x02017810
- adds r0, r5
- ldrb r1, [r0]
- movs r4, 0x88
- adds r0, r4, 0
- ands r0, r1
- cmp r0, 0
- bne _08037878
- ldr r0, _08037A50 @ =gBattlePartyID
- adds r0, r3, r0
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08037A54 @ =gEnemyParty
- adds r1, r0
- adds r0, r2, 0
- bl sub_8141828
-_08037878:
- ldrb r0, [r6]
- movs r7, 0x2
- adds r2, r7, 0
- eors r2, r0
- lsls r3, r2, 1
- adds r0, r3, r2
- lsls r0, 2
- adds r0, r5
- ldrb r1, [r0]
- adds r0, r4, 0
- ands r0, r1
- cmp r0, 0
- bne _080378A6
- ldr r0, _08037A50 @ =gBattlePartyID
- adds r0, r3, r0
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08037A54 @ =gEnemyParty
- adds r1, r0
- adds r0, r2, 0
- bl sub_8141828
-_080378A6:
- ldrb r2, [r6]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r5
- ldrb r1, [r0]
- movs r3, 0x8
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- beq _080378BE
- b _08037A3A
-_080378BE:
- adds r1, r2, 0
- eors r1, r7
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldrb r1, [r0]
- adds r0, r3, 0
- ands r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- beq _080378DA
- b _08037A3A
-_080378DA:
- ldr r0, _08037A58 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0803791A
- adds r0, r2, 0
- bl GetBankIdentity
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- bne _0803791A
- ldrb r0, [r6]
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- ldrb r0, [r1, 0x9]
- adds r0, 0x1
- strb r0, [r1, 0x9]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0803790E
- b _08037A3A
-_0803790E:
- ldrb r1, [r6]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strb r4, [r0, 0x9]
-_0803791A:
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _080379B2
- ldr r0, _08037A58 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _080379B2
- ldr r1, _08037A5C @ =gUnknown_0300434C
- ldr r5, _08037A48 @ =gActiveBank
- ldrb r0, [r5]
- movs r4, 0x2
- eors r0, r4
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08037A60 @ =gSprites
- adds r0, r1
- bl DestroySprite
- ldr r0, _08037A64 @ =gHealthboxIDs
- mov r8, r0
- ldrb r0, [r5]
- adds r1, r4, 0
- eors r1, r0
- mov r2, r8
- adds r0, r1, r2
- ldrb r0, [r0]
- ldr r2, _08037A50 @ =gBattlePartyID
- mov r10, r2
- lsls r1, 1
- add r1, r10
- ldrh r1, [r1]
- movs r2, 0x64
- mov r9, r2
- mov r2, r9
- muls r2, r1
- adds r1, r2, 0
- ldr r6, _08037A54 @ =gEnemyParty
- adds r1, r6
- movs r2, 0
- bl sub_8045A5C
- ldrb r0, [r5]
- eors r0, r4
- bl sub_804777C
- ldrb r0, [r5]
- eors r0, r4
- add r0, r8
- ldrb r0, [r0]
- bl sub_8043DFC
- ldrb r0, [r5]
- eors r4, r0
- lsls r0, r4, 1
- add r0, r10
- ldrh r0, [r0]
- mov r1, r9
- muls r1, r0
- adds r0, r1, 0
- adds r0, r6
- movs r1, 0xB
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r0, r4, 0
- bl sub_8032984
-_080379B2:
- ldr r1, _08037A5C @ =gUnknown_0300434C
- ldr r4, _08037A48 @ =gActiveBank
- ldrb r0, [r4]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08037A60 @ =gSprites
- adds r0, r1
- bl DestroySprite
- ldr r5, _08037A64 @ =gHealthboxIDs
- ldrb r1, [r4]
- adds r0, r1, r5
- ldrb r0, [r0]
- ldr r2, _08037A50 @ =gBattlePartyID
- mov r9, r2
- lsls r1, 1
- add r1, r9
- ldrh r1, [r1]
- movs r2, 0x64
- mov r8, r2
- mov r2, r8
- muls r2, r1
- adds r1, r2, 0
- ldr r6, _08037A54 @ =gEnemyParty
- adds r1, r6
- movs r2, 0
- bl sub_8045A5C
- ldrb r0, [r4]
- bl sub_804777C
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl sub_8043DFC
- ldrb r5, [r4]
- lsls r0, r5, 1
- add r0, r9
- ldrh r0, [r0]
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- adds r0, r6
- movs r1, 0xB
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r0, r5, 0
- bl sub_8032984
- ldr r2, _08037A68 @ =0x02017840
- ldrb r1, [r2, 0x9]
- movs r0, 0x2
- negs r0, r0
- ands r0, r1
- strb r0, [r2, 0x9]
- ldr r1, _08037A6C @ =gBattleBankFunc
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08037A70 @ =sub_8037680
- str r1, [r0]
-_08037A3A:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08037A48: .4byte gActiveBank
-_08037A4C: .4byte 0x02017810
-_08037A50: .4byte gBattlePartyID
-_08037A54: .4byte gEnemyParty
-_08037A58: .4byte gBattleTypeFlags
-_08037A5C: .4byte gUnknown_0300434C
-_08037A60: .4byte gSprites
-_08037A64: .4byte gHealthboxIDs
-_08037A68: .4byte 0x02017840
-_08037A6C: .4byte gBattleBankFunc
-_08037A70: .4byte sub_8037680
- thumb_func_end sub_8037840
-
- thumb_func_start sub_8037A74
-sub_8037A74: @ 8037A74
- push {r4-r7,lr}
- ldr r2, _08037ACC @ =gSprites
- ldr r0, _08037AD0 @ =gObjectBankIDs
- ldr r7, _08037AD4 @ =gActiveBank
- ldrb r3, [r7]
- adds r0, r3, r0
- 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
- lsrs r2, r0, 31
- cmp r2, 0x1
- bne _08037B18
- movs r4, 0x24
- ldrsh r0, [r1, r4]
- cmp r0, 0
- bne _08037B18
- lsls r4, r3, 1
- adds r0, r4, r3
- lsls r0, 2
- ldr r6, _08037AD8 @ =0x02017810
- adds r1, r0, r6
- ldrb r5, [r1]
- movs r0, 0x80
- ands r0, r5
- cmp r0, 0
- bne _08037AE4
- ldr r0, _08037ADC @ =gBattlePartyID
- adds r0, r4, r0
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08037AE0 @ =gEnemyParty
- adds r1, r0
- adds r0, r3, 0
- bl sub_8141828
- b _08037B18
- .align 2, 0
-_08037ACC: .4byte gSprites
-_08037AD0: .4byte gObjectBankIDs
-_08037AD4: .4byte gActiveBank
-_08037AD8: .4byte 0x02017810
-_08037ADC: .4byte gBattlePartyID
-_08037AE0: .4byte gEnemyParty
-_08037AE4:
- ldrb r0, [r1, 0x1]
- ands r2, r0
- cmp r2, 0
- beq _08037B18
- movs r0, 0x7F
- ands r0, r5
- strb r0, [r1]
- ldrb r0, [r7]
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r6
- ldrb r2, [r1, 0x1]
- movs r0, 0x2
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0x1]
- ldr r4, _08037B20 @ =0x000027f9
- adds r0, r4, 0
- bl FreeSpriteTilesByTag
- adds r0, r4, 0
- bl FreeSpritePaletteByTag
- bl dp01_tbl4_exec_completed
-_08037B18:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08037B20: .4byte 0x000027f9
- thumb_func_end sub_8037A74
-
- thumb_func_start sub_8037B24
-sub_8037B24: @ 8037B24
- push {r4-r6,lr}
- ldr r6, _08037B64 @ =gActiveBank
- ldrb r0, [r6]
- ldr r5, _08037B68 @ =gHealthboxIDs
- adds r1, r0, r5
- ldrb r1, [r1]
- movs r2, 0
- movs r3, 0
- bl sub_8045C78
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- ldrb r0, [r6]
- adds r0, r5
- ldrb r0, [r0]
- bl sub_8043DFC
- lsls r4, 16
- asrs r1, r4, 16
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _08037B6C
- ldrb r0, [r6]
- adds r0, r5
- ldrb r0, [r0]
- movs r2, 0
- bl sub_80440EC
- b _08037B70
- .align 2, 0
-_08037B64: .4byte gActiveBank
-_08037B68: .4byte gHealthboxIDs
-_08037B6C:
- bl dp01_tbl4_exec_completed
-_08037B70:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8037B24
-
- thumb_func_start sub_8037B78
-sub_8037B78: @ 8037B78
- push {lr}
- ldr r2, _08037BAC @ =gSprites
- ldr r0, _08037BB0 @ =gObjectBankIDs
- ldr r1, _08037BB4 @ =gActiveBank
- ldrb r3, [r1]
- adds r0, r3, r0
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- adds r0, 0x3E
- ldrb r0, [r0]
- lsls r0, 31
- cmp r0, 0
- bne _08037BA6
- ldr r0, _08037BB8 @ =gHealthboxIDs
- adds r0, r3, r0
- ldrb r0, [r0]
- bl sub_8043DB0
- bl dp01_tbl4_exec_completed
-_08037BA6:
- pop {r0}
- bx r0
- .align 2, 0
-_08037BAC: .4byte gSprites
-_08037BB0: .4byte gObjectBankIDs
-_08037BB4: .4byte gActiveBank
-_08037BB8: .4byte gHealthboxIDs
- thumb_func_end sub_8037B78
-
- thumb_func_start sub_8037BBC
-sub_8037BBC: @ 8037BBC
- push {r4-r6,lr}
- ldr r6, _08037C18 @ =gActiveBank
- ldrb r2, [r6]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- ldr r1, _08037C1C @ =0x02017810
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _08037C12
- ldr r5, _08037C20 @ =gObjectBankIDs
- adds r0, r2, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, _08037C24 @ =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
- ldrb r0, [r6]
- bl sub_8032A08
- ldr r1, _08037C28 @ =gHealthboxIDs
- ldrb r0, [r6]
- adds r0, r1
- ldrb r0, [r0]
- bl sub_8043DB0
- bl dp01_tbl4_exec_completed
-_08037C12:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08037C18: .4byte gActiveBank
-_08037C1C: .4byte 0x02017810
-_08037C20: .4byte gObjectBankIDs
-_08037C24: .4byte gSprites
-_08037C28: .4byte gHealthboxIDs
- thumb_func_end sub_8037BBC
-
- thumb_func_start sub_8037C2C
-sub_8037C2C: @ 8037C2C
- push {lr}
- ldr r0, _08037C40 @ =gUnknown_03004210
- ldrh r0, [r0, 0x16]
- cmp r0, 0
- bne _08037C3A
- bl dp01_tbl4_exec_completed
-_08037C3A:
- pop {r0}
- bx r0
- .align 2, 0
-_08037C40: .4byte gUnknown_03004210
- thumb_func_end sub_8037C2C
-
- thumb_func_start dp01t_0F_4_move_anim
-dp01t_0F_4_move_anim: @ 8037C44
- push {r4,lr}
- ldr r1, _08037C80 @ =gObjectBankIDs
- ldr r0, _08037C84 @ =gActiveBank
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- ldr r2, _08037C88 @ =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 _08037C90
- 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, _08037C8C @ =gDoingBattleAnim
- strb r3, [r0]
- bl dp01_tbl4_exec_completed
- b _08037CBA
- .align 2, 0
-_08037C80: .4byte gObjectBankIDs
-_08037C84: .4byte gActiveBank
-_08037C88: .4byte gSprites
-_08037C8C: .4byte gDoingBattleAnim
-_08037C90:
- ldrh r0, [r4, 0x30]
- movs r1, 0x3
- ands r0, r1
- cmp r0, 0
- bne _08037CB4
- 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]
-_08037CB4:
- ldrh r0, [r4, 0x30]
- adds r0, 0x1
- strh r0, [r4, 0x30]
-_08037CBA:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end dp01t_0F_4_move_anim
-
- thumb_func_start sub_8037CC0
-sub_8037CC0: @ 8037CC0
- push {r4,lr}
- ldr r2, _08037D10 @ =gSprites
- ldr r0, _08037D14 @ =gHealthboxIDs
- ldr r4, _08037D18 @ =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, _08037D1C @ =SpriteCallbackDummy
- cmp r1, r0
- bne _08037D08
- lsls r0, r3, 2
- ldr r1, _08037D20 @ =0x02017800
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _08037CFC
- adds r0, r3, 0
- adds r1, r3, 0
- adds r2, r3, 0
- movs r3, 0x6
- bl move_anim_start_t4
-_08037CFC:
- ldr r0, _08037D24 @ =gBattleBankFunc
- ldrb r1, [r4]
- lsls r1, 2
- adds r1, r0
- ldr r0, _08037D28 @ =sub_8037D2C
- str r0, [r1]
-_08037D08:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08037D10: .4byte gSprites
-_08037D14: .4byte gHealthboxIDs
-_08037D18: .4byte gActiveBank
-_08037D1C: .4byte SpriteCallbackDummy
-_08037D20: .4byte 0x02017800
-_08037D24: .4byte gBattleBankFunc
-_08037D28: .4byte sub_8037D2C
- thumb_func_end sub_8037CC0
-
- thumb_func_start sub_8037D2C
-sub_8037D2C: @ 8037D2C
- push {lr}
- ldr r0, _08037D58 @ =gActiveBank
- ldrb r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- ldr r1, _08037D5C @ =0x02017810
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _08037D52
- ldr r0, _08037D60 @ =c3_0802FDF4
- movs r1, 0xA
- bl CreateTask
- bl dp01_tbl4_exec_completed
-_08037D52:
- pop {r0}
- bx r0
- .align 2, 0
-_08037D58: .4byte gActiveBank
-_08037D5C: .4byte 0x02017810
-_08037D60: .4byte c3_0802FDF4
- thumb_func_end sub_8037D2C
-
- thumb_func_start sub_8037D64
-sub_8037D64: @ 8037D64
- push {r4,r5,lr}
- ldr r5, _08037E08 @ =gActiveBank
- ldrb r1, [r5]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- ldr r3, _08037E0C @ =0x02017810
- adds r2, r0, r3
- ldrb r1, [r2, 0x1]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08037E00
- ldrb r1, [r2]
- movs r0, 0x7F
- ands r0, r1
- strb r0, [r2]
- ldrb r0, [r5]
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r3
- ldrb r2, [r1, 0x1]
- movs r0, 0x2
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0x1]
- ldr r4, _08037E10 @ =0x000027f9
- adds r0, r4, 0
- bl FreeSpriteTilesByTag
- adds r0, r4, 0
- bl FreeSpritePaletteByTag
- ldr r1, _08037E14 @ =gObjectBankIDs
- ldrb r0, [r5]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08037E18 @ =gSprites
- adds r0, r1
- movs r1, 0
- bl StartSpriteAnim
- ldr r4, _08037E1C @ =gHealthboxIDs
- ldrb r1, [r5]
- adds r0, r1, r4
- ldrb r0, [r0]
- ldr r2, _08037E20 @ =gBattlePartyID
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, _08037E24 @ =gEnemyParty
- adds r1, r2
- movs r2, 0
- bl sub_8045A5C
- ldrb r0, [r5]
- bl sub_804777C
- ldrb r0, [r5]
- adds r0, r4
- ldrb r0, [r0]
- bl sub_8043DFC
- ldrb r0, [r5]
- bl sub_8031F88
- ldr r1, _08037E28 @ =gBattleBankFunc
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08037E2C @ =sub_8037CC0
- str r1, [r0]
-_08037E00:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08037E08: .4byte gActiveBank
-_08037E0C: .4byte 0x02017810
-_08037E10: .4byte 0x000027f9
-_08037E14: .4byte gObjectBankIDs
-_08037E18: .4byte gSprites
-_08037E1C: .4byte gHealthboxIDs
-_08037E20: .4byte gBattlePartyID
-_08037E24: .4byte gEnemyParty
-_08037E28: .4byte gBattleBankFunc
-_08037E2C: .4byte sub_8037CC0
- thumb_func_end sub_8037D64
-
- thumb_func_start sub_8037E30
-sub_8037E30: @ 8037E30
- push {r4-r6,lr}
- ldr r5, _08037ECC @ =gActiveBank
- ldrb r2, [r5]
- lsls r3, r2, 1
- adds r0, r3, r2
- lsls r0, 2
- ldr r6, _08037ED0 @ =0x02017810
- adds r0, r6
- ldrb r1, [r0]
- movs r0, 0x88
- ands r0, r1
- cmp r0, 0
- bne _08037E5E
- ldr r0, _08037ED4 @ =gBattlePartyID
- adds r0, r3, r0
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08037ED8 @ =gEnemyParty
- adds r1, r0
- adds r0, r2, 0
- bl sub_8141828
-_08037E5E:
- ldr r4, _08037EDC @ =gSprites
- ldr r0, _08037EE0 @ =gUnknown_0300434C
- 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, _08037EE4 @ =SpriteCallbackDummy
- cmp r1, r0
- bne _08037EC4
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r6
- ldrb r1, [r0]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- bne _08037EC4
- adds r0, r3, r4
- bl DestroySprite
- ldrb r4, [r5]
- ldr r1, _08037ED4 @ =gBattlePartyID
- lsls r0, r4, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08037ED8 @ =gEnemyParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r0, r4, 0
- bl sub_8032984
- ldr r1, _08037EE8 @ =gBattleBankFunc
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08037EEC @ =sub_8037D64
- str r1, [r0]
-_08037EC4:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08037ECC: .4byte gActiveBank
-_08037ED0: .4byte 0x02017810
-_08037ED4: .4byte gBattlePartyID
-_08037ED8: .4byte gEnemyParty
-_08037EDC: .4byte gSprites
-_08037EE0: .4byte gUnknown_0300434C
-_08037EE4: .4byte SpriteCallbackDummy
-_08037EE8: .4byte gBattleBankFunc
-_08037EEC: .4byte sub_8037D64
- thumb_func_end sub_8037E30
-
- thumb_func_start sub_8037EF0
-sub_8037EF0: @ 8037EF0
- push {lr}
- ldr r0, _08037F20 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- bne _08037F1C
- movs r0, 0x5A
- bl m4aSongNumStop
- ldr r3, _08037F24 @ =gMain
- ldr r0, _08037F28 @ =0x0000043d
- adds r2, r3, r0
- ldrb r1, [r2]
- movs r0, 0x3
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- ldr r0, _08037F2C @ =gPreBattleCallback1
- ldr r0, [r0]
- str r0, [r3]
- ldr r0, _08037F30 @ =c2_8011A1C
- bl SetMainCallback2
-_08037F1C:
- pop {r0}
- bx r0
- .align 2, 0
-_08037F20: .4byte gReceivedRemoteLinkPlayers
-_08037F24: .4byte gMain
-_08037F28: .4byte 0x0000043d
-_08037F2C: .4byte gPreBattleCallback1
-_08037F30: .4byte c2_8011A1C
- thumb_func_end sub_8037EF0
-
- thumb_func_start sub_8037F34
-sub_8037F34: @ 8037F34
- push {lr}
- ldr r0, _08037F64 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08037F9A
- ldr r0, _08037F68 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08037F78
- bl sub_800832C
- ldr r1, _08037F6C @ =gBattleBankFunc
- ldr r0, _08037F70 @ =gActiveBank
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08037F74 @ =sub_8037EF0
- str r1, [r0]
- b _08037F9A
- .align 2, 0
-_08037F64: .4byte gPaletteFade
-_08037F68: .4byte gBattleTypeFlags
-_08037F6C: .4byte gBattleBankFunc
-_08037F70: .4byte gActiveBank
-_08037F74: .4byte sub_8037EF0
-_08037F78:
- movs r0, 0x5A
- bl m4aSongNumStop
- ldr r2, _08037FA0 @ =gMain
- ldr r0, _08037FA4 @ =0x0000043d
- adds r3, r2, r0
- ldrb r1, [r3]
- movs r0, 0x3
- negs r0, r0
- ands r0, r1
- strb r0, [r3]
- ldr r0, _08037FA8 @ =gPreBattleCallback1
- ldr r0, [r0]
- str r0, [r2]
- ldr r0, [r2, 0x8]
- bl SetMainCallback2
-_08037F9A:
- pop {r0}
- bx r0
- .align 2, 0
-_08037FA0: .4byte gMain
-_08037FA4: .4byte 0x0000043d
-_08037FA8: .4byte gPreBattleCallback1
- thumb_func_end sub_8037F34
-
- thumb_func_start sub_8037FAC
-sub_8037FAC: @ 8037FAC
- push {lr}
- ldr r0, _08037FD0 @ =gActiveBank
- ldrb r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- ldr r1, _08037FD4 @ =0x02017810
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- bne _08037FCA
- bl dp01_tbl4_exec_completed
-_08037FCA:
- pop {r0}
- bx r0
- .align 2, 0
-_08037FD0: .4byte gActiveBank
-_08037FD4: .4byte 0x02017810
- thumb_func_end sub_8037FAC
-
- thumb_func_start sub_8037FD8
-sub_8037FD8: @ 8037FD8
- push {lr}
- ldr r0, _08037FFC @ =gActiveBank
- ldrb r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- ldr r1, _08038000 @ =0x02017810
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- bne _08037FF6
- bl dp01_tbl4_exec_completed
-_08037FF6:
- pop {r0}
- bx r0
- .align 2, 0
-_08037FFC: .4byte gActiveBank
-_08038000: .4byte 0x02017810
- thumb_func_end sub_8037FD8
-
- thumb_func_start dp01_tbl4_exec_completed
-dp01_tbl4_exec_completed: @ 8038004
- push {r4,lr}
- sub sp, 0x4
- ldr r1, _08038044 @ =gBattleBankFunc
- ldr r4, _08038048 @ =gActiveBank
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0803804C @ =sub_803752C
- str r1, [r0]
- ldr r0, _08038050 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08038058
- bl GetMultiplayerId
- mov r1, sp
- strb r0, [r1]
- movs r0, 0x2
- movs r1, 0x4
- mov r2, sp
- bl dp01_prepare_buffer_wireless_probably
- ldr r1, _08038054 @ =gBattleBufferA
- ldrb r0, [r4]
- lsls r0, 9
- adds r0, r1
- movs r1, 0x38
- strb r1, [r0]
- b _0803806A
- .align 2, 0
-_08038044: .4byte gBattleBankFunc
-_08038048: .4byte gActiveBank
-_0803804C: .4byte sub_803752C
-_08038050: .4byte gBattleTypeFlags
-_08038054: .4byte gBattleBufferA
-_08038058:
- ldr r2, _08038074 @ =gBattleExecBuffer
- ldr r1, _08038078 @ =gBitTable
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- ldr r0, [r2]
- bics r0, r1
- str r0, [r2]
-_0803806A:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08038074: .4byte gBattleExecBuffer
-_08038078: .4byte gBitTable
- thumb_func_end dp01_tbl4_exec_completed
-
.align 2, 0 @ Don't pad with nop.
diff --git a/asm/battle_anim_81258BC.s b/asm/battle_anim_81258BC.s
index 8dbb9b1c2..951c0e2fc 100644
--- a/asm/battle_anim_81258BC.s
+++ b/asm/battle_anim_81258BC.s
@@ -729,1397 +729,5 @@ _0812B45C: .4byte gTasks
_0812B460: .4byte gUnknown_0202F7D2
thumb_func_end sub_812B404
- thumb_func_start unref_sub_812B464
-unref_sub_812B464: @ 812B464
- bx lr
- thumb_func_end unref_sub_812B464
-
- thumb_func_start SetBankFuncToSafariBufferRunCommand
-SetBankFuncToSafariBufferRunCommand: @ 812B468
- ldr r1, _0812B478 @ =gBattleBankFunc
- ldr r0, _0812B47C @ =gActiveBank
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0812B480 @ =SafariBufferRunCommand
- str r1, [r0]
- bx lr
- .align 2, 0
-_0812B478: .4byte gBattleBankFunc
-_0812B47C: .4byte gActiveBank
-_0812B480: .4byte SafariBufferRunCommand
- thumb_func_end SetBankFuncToSafariBufferRunCommand
-
- thumb_func_start SafariBufferRunCommand
-SafariBufferRunCommand: @ 812B484
- push {lr}
- ldr r2, _0812B4B8 @ =gBattleExecBuffer
- ldr r1, _0812B4BC @ =gBitTable
- ldr r0, _0812B4C0 @ =gActiveBank
- ldrb r3, [r0]
- lsls r0, r3, 2
- adds r0, r1
- ldr r1, [r2]
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _0812B4D0
- ldr r0, _0812B4C4 @ =gBattleBufferA
- lsls r1, r3, 9
- adds r1, r0
- ldrb r0, [r1]
- cmp r0, 0x38
- bhi _0812B4CC
- ldr r0, _0812B4C8 @ =gSafariBufferCommands
- ldrb r1, [r1]
- lsls r1, 2
- adds r1, r0
- ldr r0, [r1]
- bl _call_via_r0
- b _0812B4D0
- .align 2, 0
-_0812B4B8: .4byte gBattleExecBuffer
-_0812B4BC: .4byte gBitTable
-_0812B4C0: .4byte gActiveBank
-_0812B4C4: .4byte gBattleBufferA
-_0812B4C8: .4byte gSafariBufferCommands
-_0812B4CC:
- bl SafariBufferExecCompleted
-_0812B4D0:
- pop {r0}
- bx r0
- thumb_func_end SafariBufferRunCommand
-
- thumb_func_start bx_battle_menu_t6_2
-bx_battle_menu_t6_2: @ 812B4D4
- push {r4,r5,lr}
- ldr r0, _0812B508 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r2, 0x1
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- beq _0812B546
- movs r0, 0x5
- bl PlaySE
- bl DestroyMenuCursor
- ldr r1, _0812B50C @ =gActionSelectionCursor
- ldr r0, _0812B510 @ =gActiveBank
- ldrb r0, [r0]
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _0812B524
- cmp r0, 0x1
- bgt _0812B514
- cmp r0, 0
- beq _0812B51E
- b _0812B540
- .align 2, 0
-_0812B508: .4byte gMain
-_0812B50C: .4byte gActionSelectionCursor
-_0812B510: .4byte gActiveBank
-_0812B514:
- cmp r0, 0x2
- beq _0812B52A
- cmp r0, 0x3
- beq _0812B536
- b _0812B540
-_0812B51E:
- movs r0, 0x1
- movs r1, 0x5
- b _0812B52E
-_0812B524:
- movs r0, 0x1
- movs r1, 0x6
- b _0812B52E
-_0812B52A:
- movs r0, 0x1
- movs r1, 0x7
-_0812B52E:
- movs r2, 0
- bl dp01_build_cmdbuf_x21_a_bb
- b _0812B540
-_0812B536:
- movs r0, 0x1
- movs r1, 0x8
- movs r2, 0
- bl dp01_build_cmdbuf_x21_a_bb
-_0812B540:
- bl SafariBufferExecCompleted
- b _0812B64E
-_0812B546:
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0812B584
- ldr r5, _0812B57C @ =gActionSelectionCursor
- ldr r4, _0812B580 @ =gActiveBank
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- beq _0812B64E
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl nullsub_8
- ldrb r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- movs r2, 0x1
- b _0812B5F2
- .align 2, 0
-_0812B57C: .4byte gActionSelectionCursor
-_0812B580: .4byte gActiveBank
-_0812B584:
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0812B5C0
- ldr r5, _0812B5B8 @ =gActionSelectionCursor
- ldr r4, _0812B5BC @ =gActiveBank
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- bne _0812B64E
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl nullsub_8
- ldrb r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- movs r2, 0x1
- b _0812B5F2
- .align 2, 0
-_0812B5B8: .4byte gActionSelectionCursor
-_0812B5BC: .4byte gActiveBank
-_0812B5C0:
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0812B60C
- ldr r5, _0812B604 @ =gActionSelectionCursor
- ldr r4, _0812B608 @ =gActiveBank
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0812B64E
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl nullsub_8
- ldrb r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- movs r2, 0x2
-_0812B5F2:
- eors r0, r2
- strb r0, [r1]
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- movs r1, 0
- bl sub_802E3E4
- b _0812B64E
- .align 2, 0
-_0812B604: .4byte gActionSelectionCursor
-_0812B608: .4byte gActiveBank
-_0812B60C:
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0812B64E
- ldr r5, _0812B654 @ =gActionSelectionCursor
- ldr r4, _0812B658 @ =gActiveBank
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _0812B64E
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl nullsub_8
- 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 sub_802E3E4
-_0812B64E:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0812B654: .4byte gActionSelectionCursor
-_0812B658: .4byte gActiveBank
- thumb_func_end bx_battle_menu_t6_2
-
- thumb_func_start sub_812B65C
-sub_812B65C: @ 812B65C
- push {lr}
- ldr r2, _0812B684 @ =gSprites
- ldr r1, _0812B688 @ =gObjectBankIDs
- ldr r0, _0812B68C @ =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, _0812B690 @ =SpriteCallbackDummy
- cmp r1, r0
- bne _0812B680
- bl SafariBufferExecCompleted
-_0812B680:
- pop {r0}
- bx r0
- .align 2, 0
-_0812B684: .4byte gSprites
-_0812B688: .4byte gObjectBankIDs
-_0812B68C: .4byte gActiveBank
-_0812B690: .4byte SpriteCallbackDummy
- thumb_func_end sub_812B65C
-
- thumb_func_start sub_812B694
-sub_812B694: @ 812B694
- push {lr}
- ldr r0, _0812B6A8 @ =gUnknown_03004210
- ldrh r0, [r0, 0x16]
- cmp r0, 0
- bne _0812B6A2
- bl SafariBufferExecCompleted
-_0812B6A2:
- pop {r0}
- bx r0
- .align 2, 0
-_0812B6A8: .4byte gUnknown_03004210
- thumb_func_end sub_812B694
-
- thumb_func_start sub_812B6AC
-sub_812B6AC: @ 812B6AC
- push {lr}
- ldr r0, _0812B6DC @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0812B6D6
- ldr r2, _0812B6E0 @ =gMain
- ldr r0, _0812B6E4 @ =0x0000043d
- adds r3, r2, r0
- ldrb r1, [r3]
- movs r0, 0x3
- negs r0, r0
- ands r0, r1
- strb r0, [r3]
- ldr r0, _0812B6E8 @ =gPreBattleCallback1
- ldr r0, [r0]
- str r0, [r2]
- ldr r0, [r2, 0x8]
- bl SetMainCallback2
-_0812B6D6:
- pop {r0}
- bx r0
- .align 2, 0
-_0812B6DC: .4byte gPaletteFade
-_0812B6E0: .4byte gMain
-_0812B6E4: .4byte 0x0000043d
-_0812B6E8: .4byte gPreBattleCallback1
- thumb_func_end sub_812B6AC
-
- thumb_func_start bx_wait_t6
-bx_wait_t6: @ 812B6EC
- push {lr}
- ldr r0, _0812B718 @ =gDoingBattleAnim
- ldrb r0, [r0]
- cmp r0, 0
- beq _0812B70E
- ldr r0, _0812B71C @ =gActiveBank
- ldrb r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- ldr r1, _0812B720 @ =0x02017810
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _0812B712
-_0812B70E:
- bl SafariBufferExecCompleted
-_0812B712:
- pop {r0}
- bx r0
- .align 2, 0
-_0812B718: .4byte gDoingBattleAnim
-_0812B71C: .4byte gActiveBank
-_0812B720: .4byte 0x02017810
- thumb_func_end bx_wait_t6
-
- thumb_func_start sub_812B724
-sub_812B724: @ 812B724
- push {lr}
- ldr r0, _0812B748 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0812B744
- ldr r1, _0812B74C @ =gBattleBankFunc
- ldr r0, _0812B750 @ =gActiveBank
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0812B754 @ =sub_812B758
- str r1, [r0]
- bl sub_810BADC
-_0812B744:
- pop {r0}
- bx r0
- .align 2, 0
-_0812B748: .4byte gPaletteFade
-_0812B74C: .4byte gBattleBankFunc
-_0812B750: .4byte gActiveBank
-_0812B754: .4byte sub_812B758
- thumb_func_end sub_812B724
-
- thumb_func_start sub_812B758
-sub_812B758: @ 812B758
- push {lr}
- ldr r0, _0812B784 @ =gMain
- ldr r1, [r0, 0x4]
- ldr r0, _0812B788 @ =sub_800F808
- cmp r1, r0
- bne _0812B77E
- ldr r0, _0812B78C @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0812B77E
- ldr r0, _0812B790 @ =gScriptItemId
- ldrh r1, [r0]
- movs r0, 0x1
- bl dp01_build_cmdbuf_x23_aa_0
- bl SafariBufferExecCompleted
-_0812B77E:
- pop {r0}
- bx r0
- .align 2, 0
-_0812B784: .4byte gMain
-_0812B788: .4byte sub_800F808
-_0812B78C: .4byte gPaletteFade
-_0812B790: .4byte gScriptItemId
- thumb_func_end sub_812B758
-
- thumb_func_start sub_812B794
-sub_812B794: @ 812B794
- push {lr}
- ldr r0, _0812B7B8 @ =gActiveBank
- ldrb r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- ldr r1, _0812B7BC @ =0x02017810
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- bne _0812B7B2
- bl SafariBufferExecCompleted
-_0812B7B2:
- pop {r0}
- bx r0
- .align 2, 0
-_0812B7B8: .4byte gActiveBank
-_0812B7BC: .4byte 0x02017810
- thumb_func_end sub_812B794
-
- thumb_func_start SafariBufferExecCompleted
-SafariBufferExecCompleted: @ 812B7C0
- push {r4,lr}
- sub sp, 0x4
- ldr r1, _0812B800 @ =gBattleBankFunc
- ldr r4, _0812B804 @ =gActiveBank
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0812B808 @ =SafariBufferRunCommand
- str r1, [r0]
- ldr r0, _0812B80C @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0812B814
- bl GetMultiplayerId
- mov r1, sp
- strb r0, [r1]
- movs r0, 0x2
- movs r1, 0x4
- mov r2, sp
- bl dp01_prepare_buffer_wireless_probably
- ldr r1, _0812B810 @ =gBattleBufferA
- ldrb r0, [r4]
- lsls r0, 9
- adds r0, r1
- movs r1, 0x38
- strb r1, [r0]
- b _0812B826
- .align 2, 0
-_0812B800: .4byte gBattleBankFunc
-_0812B804: .4byte gActiveBank
-_0812B808: .4byte SafariBufferRunCommand
-_0812B80C: .4byte gBattleTypeFlags
-_0812B810: .4byte gBattleBufferA
-_0812B814:
- ldr r2, _0812B830 @ =gBattleExecBuffer
- ldr r1, _0812B834 @ =gBitTable
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- ldr r0, [r2]
- bics r0, r1
- str r0, [r2]
-_0812B826:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0812B830: .4byte gBattleExecBuffer
-_0812B834: .4byte gBitTable
- thumb_func_end SafariBufferExecCompleted
-
- thumb_func_start unref_sub_812B838
-unref_sub_812B838: @ 812B838
- push {lr}
- ldr r0, _0812B85C @ =gActiveBank
- ldrb r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- ldr r1, _0812B860 @ =0x02017810
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- bne _0812B856
- bl SafariBufferExecCompleted
-_0812B856:
- pop {r0}
- bx r0
- .align 2, 0
-_0812B85C: .4byte gActiveBank
-_0812B860: .4byte 0x02017810
- thumb_func_end unref_sub_812B838
-
- thumb_func_start SafariHandleGetAttributes
-SafariHandleGetAttributes: @ 812B864
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end SafariHandleGetAttributes
-
- thumb_func_start sub_812B870
-sub_812B870: @ 812B870
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812B870
-
- thumb_func_start sub_812B87C
-sub_812B87C: @ 812B87C
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812B87C
-
- thumb_func_start sub_812B888
-sub_812B888: @ 812B888
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812B888
-
- thumb_func_start sub_812B894
-sub_812B894: @ 812B894
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812B894
-
- thumb_func_start sub_812B8A0
-sub_812B8A0: @ 812B8A0
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812B8A0
-
- thumb_func_start sub_812B8AC
-sub_812B8AC: @ 812B8AC
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812B8AC
-
- thumb_func_start sub_812B8B8
-sub_812B8B8: @ 812B8B8
- push {r4-r6,lr}
- ldr r4, _0812B96C @ =gSaveBlock2
- ldrb r0, [r4, 0x8]
- ldr r5, _0812B970 @ =gActiveBank
- ldrb r1, [r5]
- bl LoadPlayerTrainerBankSprite
- ldrb r6, [r4, 0x8]
- ldrb r0, [r5]
- bl GetBankIdentity
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r6, 0
- bl GetMonSpriteTemplate_803C5A0
- ldr r0, _0812B974 @ =gUnknown_02024E8C
- ldr r2, _0812B978 @ =gTrainerBackPicCoords
- ldrb r1, [r4, 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, _0812B97C @ =gObjectBankIDs
- ldrb r1, [r5]
- adds r1, r6
- strb r0, [r1]
- ldr r4, _0812B980 @ =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, _0812B984 @ =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, _0812B988 @ =sub_80313A0
- str r1, [r0]
- ldr r1, _0812B98C @ =gBattleBankFunc
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0812B990 @ =sub_812B65C
- str r1, [r0]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0812B96C: .4byte gSaveBlock2
-_0812B970: .4byte gActiveBank
-_0812B974: .4byte gUnknown_02024E8C
-_0812B978: .4byte gTrainerBackPicCoords
-_0812B97C: .4byte gObjectBankIDs
-_0812B980: .4byte gSprites
-_0812B984: .4byte 0x0000fffe
-_0812B988: .4byte sub_80313A0
-_0812B98C: .4byte gBattleBankFunc
-_0812B990: .4byte sub_812B65C
- thumb_func_end sub_812B8B8
-
- thumb_func_start sub_812B994
-sub_812B994: @ 812B994
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812B994
-
- thumb_func_start sub_812B9A0
-sub_812B9A0: @ 812B9A0
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812B9A0
-
- thumb_func_start sub_812B9AC
-sub_812B9AC: @ 812B9AC
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812B9AC
-
- thumb_func_start sub_812B9B8
-sub_812B9B8: @ 812B9B8
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812B9B8
-
- thumb_func_start sub_812B9C4
-sub_812B9C4: @ 812B9C4
- push {r4,r5,lr}
- ldr r1, _0812BA00 @ =0x02017840
- movs r0, 0x4
- strb r0, [r1, 0x8]
- ldr r1, _0812BA04 @ =gDoingBattleAnim
- movs r0, 0x1
- strb r0, [r1]
- ldr r5, _0812BA08 @ =gActiveBank
- ldrb r4, [r5]
- movs r0, 0x1
- bl GetBankByPlayerAI
- 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, _0812BA0C @ =gBattleBankFunc
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0812BA10 @ =bx_wait_t6
- str r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0812BA00: .4byte 0x02017840
-_0812BA04: .4byte gDoingBattleAnim
-_0812BA08: .4byte gActiveBank
-_0812BA0C: .4byte gBattleBankFunc
-_0812BA10: .4byte bx_wait_t6
- thumb_func_end sub_812B9C4
-
- thumb_func_start sub_812BA14
-sub_812BA14: @ 812BA14
- push {r4,r5,lr}
- ldr r1, _0812BA58 @ =gBattleBufferA
- ldr r5, _0812BA5C @ =gActiveBank
- ldrb r0, [r5]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r1, [r0]
- ldr r0, _0812BA60 @ =0x02017840
- strb r1, [r0, 0x8]
- ldr r1, _0812BA64 @ =gDoingBattleAnim
- movs r0, 0x1
- strb r0, [r1]
- ldrb r4, [r5]
- movs r0, 0x1
- bl GetBankByPlayerAI
- 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, _0812BA68 @ =gBattleBankFunc
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0812BA6C @ =bx_wait_t6
- str r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0812BA58: .4byte gBattleBufferA
-_0812BA5C: .4byte gActiveBank
-_0812BA60: .4byte 0x02017840
-_0812BA64: .4byte gDoingBattleAnim
-_0812BA68: .4byte gBattleBankFunc
-_0812BA6C: .4byte bx_wait_t6
- thumb_func_end sub_812BA14
-
- thumb_func_start sub_812BA70
-sub_812BA70: @ 812BA70
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BA70
-
- thumb_func_start sub_812BA7C
-sub_812BA7C: @ 812BA7C
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BA7C
-
- thumb_func_start SafariHandlePrintString
-SafariHandlePrintString: @ 812BA88
- push {r4,lr}
- sub sp, 0x4
- ldr r0, _0812BACC @ =gUnknown_030042A4
- movs r1, 0
- strh r1, [r0]
- ldr r0, _0812BAD0 @ =gUnknown_030042A0
- strh r1, [r0]
- ldr r4, _0812BAD4 @ =gActiveBank
- ldrb r0, [r4]
- lsls r0, 9
- ldr r1, _0812BAD8 @ =gUnknown_02023A62
- adds r0, r1
- ldrh r0, [r0]
- bl BufferStringBattle
- ldr r0, _0812BADC @ =gUnknown_03004210
- ldr r1, _0812BAE0 @ =gDisplayedStringBattle
- movs r2, 0xF
- str r2, [sp]
- movs r2, 0x90
- movs r3, 0x2
- bl sub_8002EB0
- ldr r1, _0812BAE4 @ =gBattleBankFunc
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0812BAE8 @ =sub_812B694
- str r1, [r0]
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0812BACC: .4byte gUnknown_030042A4
-_0812BAD0: .4byte gUnknown_030042A0
-_0812BAD4: .4byte gActiveBank
-_0812BAD8: .4byte gUnknown_02023A62
-_0812BADC: .4byte gUnknown_03004210
-_0812BAE0: .4byte gDisplayedStringBattle
-_0812BAE4: .4byte gBattleBankFunc
-_0812BAE8: .4byte sub_812B694
- thumb_func_end SafariHandlePrintString
-
- thumb_func_start SafariHandlePrintStringPlayerOnly
-SafariHandlePrintStringPlayerOnly: @ 812BAEC
- push {lr}
- ldr r0, _0812BB04 @ =gActiveBank
- ldrb r0, [r0]
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- bne _0812BB08
- bl SafariHandlePrintString
- b _0812BB0C
- .align 2, 0
-_0812BB04: .4byte gActiveBank
-_0812BB08:
- bl SafariBufferExecCompleted
-_0812BB0C:
- pop {r0}
- bx r0
- thumb_func_end SafariHandlePrintStringPlayerOnly
-
-.section .text_812BBFC
-
- thumb_func_start sub_812BBFC
-sub_812BBFC: @ 812BBFC
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BBFC
-
- thumb_func_start sub_812BC08
-sub_812BC08: @ 812BC08
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BC08
-
- thumb_func_start sub_812BC14
-sub_812BC14: @ 812BC14
- 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, _0812BC44 @ =gBattleBankFunc
- ldr r2, _0812BC48 @ =gActiveBank
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0812BC4C @ =sub_812B724
- str r1, [r0]
- ldr r1, _0812BC50 @ =gBankInMenu
- ldrb r0, [r2]
- strb r0, [r1]
- add sp, 0x4
- pop {r0}
- bx r0
- .align 2, 0
-_0812BC44: .4byte gBattleBankFunc
-_0812BC48: .4byte gActiveBank
-_0812BC4C: .4byte sub_812B724
-_0812BC50: .4byte gBankInMenu
- thumb_func_end sub_812BC14
-
- thumb_func_start sub_812BC54
-sub_812BC54: @ 812BC54
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BC54
-
- thumb_func_start sub_812BC60
-sub_812BC60: @ 812BC60
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BC60
-
- thumb_func_start sub_812BC6C
-sub_812BC6C: @ 812BC6C
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BC6C
-
- thumb_func_start sub_812BC78
-sub_812BC78: @ 812BC78
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BC78
-
- thumb_func_start sub_812BC84
-sub_812BC84: @ 812BC84
- push {lr}
- ldr r0, _0812BCB0 @ =gHealthboxIDs
- ldr r1, _0812BCB4 @ =gActiveBank
- ldrb r1, [r1]
- adds r0, r1, r0
- ldrb r0, [r0]
- ldr r2, _0812BCB8 @ =gBattlePartyID
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, _0812BCBC @ =gPlayerParty
- adds r1, r2
- movs r2, 0xB
- bl sub_8045A5C
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_0812BCB0: .4byte gHealthboxIDs
-_0812BCB4: .4byte gActiveBank
-_0812BCB8: .4byte gBattlePartyID
-_0812BCBC: .4byte gPlayerParty
- thumb_func_end sub_812BC84
-
- thumb_func_start sub_812BCC0
-sub_812BCC0: @ 812BCC0
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BCC0
-
- thumb_func_start sub_812BCCC
-sub_812BCCC: @ 812BCCC
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BCCC
-
- thumb_func_start sub_812BCD8
-sub_812BCD8: @ 812BCD8
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BCD8
-
- thumb_func_start sub_812BCE4
-sub_812BCE4: @ 812BCE4
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BCE4
-
- thumb_func_start sub_812BCF0
-sub_812BCF0: @ 812BCF0
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BCF0
-
- thumb_func_start sub_812BCFC
-sub_812BCFC: @ 812BCFC
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BCFC
-
- thumb_func_start sub_812BD08
-sub_812BD08: @ 812BD08
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BD08
-
- thumb_func_start sub_812BD14
-sub_812BD14: @ 812BD14
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BD14
-
- thumb_func_start sub_812BD20
-sub_812BD20: @ 812BD20
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BD20
-
- thumb_func_start sub_812BD2C
-sub_812BD2C: @ 812BD2C
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BD2C
-
- thumb_func_start sub_812BD38
-sub_812BD38: @ 812BD38
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BD38
-
- thumb_func_start sub_812BD44
-sub_812BD44: @ 812BD44
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BD44
-
- thumb_func_start sub_812BD50
-sub_812BD50: @ 812BD50
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BD50
-
- thumb_func_start sub_812BD5C
-sub_812BD5C: @ 812BD5C
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BD5C
-
- thumb_func_start sub_812BD68
-sub_812BD68: @ 812BD68
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BD68
-
- thumb_func_start sub_812BD74
-sub_812BD74: @ 812BD74
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BD74
-
- thumb_func_start sub_812BD80
-sub_812BD80: @ 812BD80
- push {r4,lr}
- ldr r4, _0812BDBC @ =gActiveBank
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- movs r3, 0x3F
- cmp r0, 0
- bne _0812BD94
- movs r3, 0xC0
-_0812BD94:
- ldr r2, _0812BDC0 @ =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
- .align 2, 0
-_0812BDBC: .4byte gActiveBank
-_0812BDC0: .4byte gBattleBufferA
- thumb_func_end sub_812BD80
-
- thumb_func_start sub_812BDC4
-sub_812BDC4: @ 812BDC4
- push {lr}
- ldr r2, _0812BDEC @ =gBattleBufferA
- ldr r0, _0812BDF0 @ =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 PlayFanfare
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_0812BDEC: .4byte gBattleBufferA
-_0812BDF0: .4byte gActiveBank
- thumb_func_end sub_812BDC4
-
- thumb_func_start sub_812BDF4
-sub_812BDF4: @ 812BDF4
- push {lr}
- ldr r1, _0812BE24 @ =gBattlePartyID
- ldr r0, _0812BE28 @ =gActiveBank
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0812BE2C @ =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
- .align 2, 0
-_0812BE24: .4byte gBattlePartyID
-_0812BE28: .4byte gActiveBank
-_0812BE2C: .4byte gPlayerParty
- thumb_func_end sub_812BDF4
-
- thumb_func_start dp01t_2E_6_battle_intro
-dp01t_2E_6_battle_intro: @ 812BE30
- push {lr}
- ldr r1, _0812BE58 @ =gBattleBufferA
- ldr r0, _0812BE5C @ =gActiveBank
- ldrb r0, [r0]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- bl sub_80E43C0
- ldr r2, _0812BE60 @ =gUnknown_02024DE8
- ldrh r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strh r0, [r2]
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_0812BE58: .4byte gBattleBufferA
-_0812BE5C: .4byte gActiveBank
-_0812BE60: .4byte gUnknown_02024DE8
- thumb_func_end dp01t_2E_6_battle_intro
-
- thumb_func_start sub_812BE64
-sub_812BE64: @ 812BE64
- push {r4,r5,lr}
- ldr r5, _0812BEA0 @ =gHealthboxIDs
- ldr r4, _0812BEA4 @ =gActiveBank
- ldrb r1, [r4]
- adds r0, r1, r5
- ldrb r0, [r0]
- ldr r2, _0812BEA8 @ =gBattlePartyID
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, _0812BEAC @ =gPlayerParty
- adds r1, r2
- movs r2, 0xA
- bl sub_8045A5C
- ldrb r0, [r4]
- bl sub_804777C
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl sub_8043DFC
- bl SafariBufferExecCompleted
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0812BEA0: .4byte gHealthboxIDs
-_0812BEA4: .4byte gActiveBank
-_0812BEA8: .4byte gBattlePartyID
-_0812BEAC: .4byte gPlayerParty
- thumb_func_end sub_812BE64
-
- thumb_func_start sub_812BEB0
-sub_812BEB0: @ 812BEB0
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BEB0
-
- thumb_func_start sub_812BEBC
-sub_812BEBC: @ 812BEBC
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BEBC
-
- thumb_func_start sub_812BEC8
-sub_812BEC8: @ 812BEC8
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BEC8
-
- thumb_func_start sub_812BED4
-sub_812BED4: @ 812BED4
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BED4
-
- thumb_func_start sub_812BEE0
-sub_812BEE0: @ 812BEE0
- push {r4-r6,lr}
- sub sp, 0x4
- ldr r5, _0812BF18 @ =gBattleBufferA
- ldr r6, _0812BF1C @ =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 _0812BF20
- bl SafariBufferExecCompleted
- b _0812BF2C
- .align 2, 0
-_0812BF18: .4byte gBattleBufferA
-_0812BF1C: .4byte gActiveBank
-_0812BF20:
- ldr r0, _0812BF34 @ =gBattleBankFunc
- ldrb r1, [r6]
- lsls r1, 2
- adds r1, r0
- ldr r0, _0812BF38 @ =sub_812B794
- str r0, [r1]
-_0812BF2C:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0812BF34: .4byte gBattleBankFunc
-_0812BF38: .4byte sub_812B794
- thumb_func_end sub_812BEE0
-
- thumb_func_start sub_812BF3C
-sub_812BF3C: @ 812BF3C
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BF3C
-
- thumb_func_start sub_812BF48
-sub_812BF48: @ 812BF48
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BF48
-
- thumb_func_start sub_812BF54
-sub_812BF54: @ 812BF54
- push {r4,lr}
- ldr r2, _0812BF98 @ =gBattleOutcome
- ldr r1, _0812BF9C @ =gBattleBufferA
- ldr r4, _0812BFA0 @ =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, _0812BFA4 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x6
- ands r0, r1
- cmp r0, 0x2
- bne _0812BF90
- ldr r0, _0812BFA8 @ =gBattleBankFunc
- ldrb r1, [r4]
- lsls r1, 2
- adds r1, r0
- ldr r0, _0812BFAC @ =sub_812B6AC
- str r0, [r1]
-_0812BF90:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0812BF98: .4byte gBattleOutcome
-_0812BF9C: .4byte gBattleBufferA
-_0812BFA0: .4byte gActiveBank
-_0812BFA4: .4byte gBattleTypeFlags
-_0812BFA8: .4byte gBattleBankFunc
-_0812BFAC: .4byte sub_812B6AC
- thumb_func_end sub_812BF54
-
- thumb_func_start nullsub_78
-nullsub_78: @ 812BFB0
- bx lr
- thumb_func_end nullsub_78
-
- .align 2, 0 @ Don't pad with nop.
+ .align 2, 0 @ Don't pad with nop.
+ \ No newline at end of file
diff --git a/asm/battle_controller_linkopponent1.s b/asm/battle_controller_linkopponent1.s
new file mode 100644
index 000000000..e53531703
--- /dev/null
+++ b/asm/battle_controller_linkopponent1.s
@@ -0,0 +1,1421 @@
+ .include "constants/gba_constants.inc"
+ .include "constants/species_constants.inc"
+ .include "asm/macros.inc"
+
+ .syntax unified
+
+ .text
+
+
+
+ thumb_func_start nullsub_47
+nullsub_47: @ 803750C
+ bx lr
+ thumb_func_end nullsub_47
+
+ thumb_func_start SetBankFuncToLinkOpponentBufferRunCommand
+SetBankFuncToLinkOpponentBufferRunCommand: @ 8037510
+ ldr r1, _08037520 @ =gBattleBankFunc
+ ldr r0, _08037524 @ =gActiveBank
+ ldrb r0, [r0]
+ lsls r0, 2
+ adds r0, r1
+ ldr r1, _08037528 @ =sub_803752C
+ str r1, [r0]
+ bx lr
+ .align 2, 0
+_08037520: .4byte gBattleBankFunc
+_08037524: .4byte gActiveBank
+_08037528: .4byte sub_803752C
+ thumb_func_end SetBankFuncToLinkOpponentBufferRunCommand
+
+ thumb_func_start sub_803752C
+sub_803752C: @ 803752C
+ push {lr}
+ ldr r2, _08037560 @ =gBattleExecBuffer
+ ldr r1, _08037564 @ =gBitTable
+ ldr r0, _08037568 @ =gActiveBank
+ ldrb r3, [r0]
+ lsls r0, r3, 2
+ adds r0, r1
+ ldr r1, [r2]
+ ldr r0, [r0]
+ ands r1, r0
+ cmp r1, 0
+ beq _08037578
+ ldr r0, _0803756C @ =gBattleBufferA
+ lsls r1, r3, 9
+ adds r1, r0
+ ldrb r0, [r1]
+ cmp r0, 0x38
+ bhi _08037574
+ ldr r0, _08037570 @ =gLinkOpponentBufferCommands
+ ldrb r1, [r1]
+ lsls r1, 2
+ adds r1, r0
+ ldr r0, [r1]
+ bl _call_via_r0
+ b _08037578
+ .align 2, 0
+_08037560: .4byte gBattleExecBuffer
+_08037564: .4byte gBitTable
+_08037568: .4byte gActiveBank
+_0803756C: .4byte gBattleBufferA
+_08037570: .4byte gLinkOpponentBufferCommands
+_08037574:
+ bl LinkOpponentBufferExecCompleted
+_08037578:
+ pop {r0}
+ bx r0
+ thumb_func_end sub_803752C
+
+ thumb_func_start sub_803757C
+sub_803757C: @ 803757C
+ push {lr}
+ ldr r2, _080375A4 @ =gSprites
+ ldr r1, _080375A8 @ =gObjectBankIDs
+ ldr r0, _080375AC @ =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, _080375B0 @ =SpriteCallbackDummy
+ cmp r1, r0
+ bne _080375A0
+ bl LinkOpponentBufferExecCompleted
+_080375A0:
+ pop {r0}
+ bx r0
+ .align 2, 0
+_080375A4: .4byte gSprites
+_080375A8: .4byte gObjectBankIDs
+_080375AC: .4byte gActiveBank
+_080375B0: .4byte SpriteCallbackDummy
+ thumb_func_end sub_803757C
+
+ thumb_func_start sub_80375B4
+sub_80375B4: @ 80375B4
+ push {r4-r6,lr}
+ ldr r4, _0803762C @ =gSprites
+ ldr r6, _08037630 @ =gObjectBankIDs
+ ldr r5, _08037634 @ =gActiveBank
+ ldrb r0, [r5]
+ adds r0, r6
+ ldrb r1, [r0]
+ lsls r0, r1, 4
+ adds r0, r1
+ lsls r2, r0, 2
+ adds r0, r4, 0
+ adds r0, 0x1C
+ adds r0, r2, r0
+ ldr r1, [r0]
+ ldr r0, _08037638 @ =SpriteCallbackDummy
+ cmp r1, r0
+ bne _08037624
+ adds r0, r2, r4
+ ldrh r0, [r0, 0x6]
+ bl sub_8031B74
+ ldrb r0, [r5]
+ adds r0, r6
+ ldrb r0, [r0]
+ lsls r1, r0, 4
+ adds r1, r0
+ lsls r1, 2
+ adds r1, r4
+ ldrh r0, [r1, 0x38]
+ ldr r2, _0803763C @ =0x000003ff
+ ands r2, r0
+ ldrh r3, [r1, 0x4]
+ ldr r0, _08037640 @ =0xfffffc00
+ ands r0, r3
+ orrs r0, r2
+ strh r0, [r1, 0x4]
+ ldrb r0, [r5]
+ adds r0, r6
+ ldrb r1, [r0]
+ lsls r0, r1, 4
+ adds r0, r1
+ lsls r0, 2
+ adds r0, r4
+ bl FreeSpriteOamMatrix
+ ldrb r0, [r5]
+ adds r0, r6
+ ldrb r1, [r0]
+ lsls r0, r1, 4
+ adds r0, r1
+ lsls r0, 2
+ adds r0, r4
+ bl DestroySprite
+ bl LinkOpponentBufferExecCompleted
+_08037624:
+ pop {r4-r6}
+ pop {r0}
+ bx r0
+ .align 2, 0
+_0803762C: .4byte gSprites
+_08037630: .4byte gObjectBankIDs
+_08037634: .4byte gActiveBank
+_08037638: .4byte SpriteCallbackDummy
+_0803763C: .4byte 0x000003ff
+_08037640: .4byte 0xfffffc00
+ thumb_func_end sub_80375B4
+
+ thumb_func_start sub_8037644
+sub_8037644: @ 8037644
+ push {lr}
+ ldr r3, _08037678 @ =gActiveBank
+ ldrb r0, [r3]
+ lsls r1, r0, 1
+ adds r1, r0
+ lsls r1, 2
+ ldr r2, _0803767C @ =0x02017810
+ adds r1, r2
+ ldrb r0, [r1, 0x9]
+ subs r0, 0x1
+ strb r0, [r1, 0x9]
+ lsls r0, 24
+ lsrs r0, 24
+ cmp r0, 0xFF
+ bne _08037674
+ ldrb r0, [r3]
+ lsls r1, r0, 1
+ adds r1, r0
+ lsls r1, 2
+ adds r1, r2
+ movs r0, 0
+ strb r0, [r1, 0x9]
+ bl LinkOpponentBufferExecCompleted
+_08037674:
+ pop {r0}
+ bx r0
+ .align 2, 0
+_08037678: .4byte gActiveBank
+_0803767C: .4byte 0x02017810
+ thumb_func_end sub_8037644
+
+ thumb_func_start sub_8037680
+sub_8037680: @ 8037680
+ push {r4-r7,lr}
+ movs r6, 0
+ bl IsDoubleBattle
+ lsls r0, 24
+ cmp r0, 0
+ beq _080376A4
+ bl IsDoubleBattle
+ lsls r0, 24
+ cmp r0, 0
+ beq _080376D8
+ ldr r0, _080376C4 @ =gBattleTypeFlags
+ ldrh r1, [r0]
+ movs r0, 0x40
+ ands r0, r1
+ cmp r0, 0
+ beq _080376D8
+_080376A4:
+ ldr r2, _080376C8 @ =gSprites
+ ldr r1, _080376CC @ =gHealthboxIDs
+ ldr r0, _080376D0 @ =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, _080376D4 @ =SpriteCallbackDummy
+ cmp r1, r0
+ bne _0803770E
+ b _0803770C
+ .align 2, 0
+_080376C4: .4byte gBattleTypeFlags
+_080376C8: .4byte gSprites
+_080376CC: .4byte gHealthboxIDs
+_080376D0: .4byte gActiveBank
+_080376D4: .4byte SpriteCallbackDummy
+_080376D8:
+ ldr r2, _080377D8 @ =gSprites
+ ldr r5, _080377DC @ =gHealthboxIDs
+ ldr r0, _080377E0 @ =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, _080377E4 @ =SpriteCallbackDummy
+ cmp r4, r0
+ bne _0803770E
+ 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 _0803770E
+_0803770C:
+ movs r6, 0x1
+_0803770E:
+ bl IsCryPlayingOrClearCrySongs
+ lsls r0, 24
+ cmp r0, 0
+ beq _0803771A
+ movs r6, 0
+_0803771A:
+ cmp r6, 0
+ bne _08037720
+ b _08037822
+_08037720:
+ ldr r7, _080377E0 @ =gActiveBank
+ ldrb r0, [r7]
+ bl GetBankIdentity
+ lsls r0, 24
+ lsrs r3, r0, 24
+ cmp r3, 0x1
+ bne _080377B4
+ ldrb r2, [r7]
+ lsls r0, r2, 1
+ adds r0, r2
+ lsls r0, 2
+ ldr r5, _080377E8 @ =0x02017810
+ adds r4, r0, r5
+ ldrb r1, [r4, 0x1]
+ adds r0, r3, 0
+ ands r0, r1
+ cmp r0, 0
+ beq _08037822
+ movs r6, 0x2
+ adds r1, r6, 0
+ eors r1, r2
+ lsls r0, r1, 1
+ adds r0, r1
+ lsls r0, 2
+ adds r0, r5
+ ldrb r1, [r0, 0x1]
+ adds r0, r3, 0
+ ands r0, r1
+ cmp r0, 0
+ beq _08037822
+ ldrb r1, [r4]
+ movs r3, 0x7F
+ adds r0, r3, 0
+ ands r0, r1
+ strb r0, [r4]
+ ldrb r0, [r7]
+ lsls r1, r0, 1
+ adds r1, r0
+ lsls r1, 2
+ adds r1, r5
+ ldrb r2, [r1, 0x1]
+ movs r4, 0x2
+ negs r4, r4
+ adds r0, r4, 0
+ ands r0, r2
+ strb r0, [r1, 0x1]
+ ldrb r0, [r7]
+ adds r1, r6, 0
+ eors r1, r0
+ lsls r0, r1, 1
+ adds r0, r1
+ lsls r0, 2
+ adds r0, r5
+ ldrb r1, [r0]
+ ands r3, r1
+ strb r3, [r0]
+ ldrb r0, [r7]
+ adds r1, r6, 0
+ eors r1, r0
+ lsls r0, r1, 1
+ adds r0, r1
+ lsls r0, 2
+ adds r0, r5
+ ldrb r1, [r0, 0x1]
+ ands r4, r1
+ strb r4, [r0, 0x1]
+ ldr r4, _080377EC @ =0x000027f9
+ adds r0, r4, 0
+ bl FreeSpriteTilesByTag
+ adds r0, r4, 0
+ bl FreeSpritePaletteByTag
+_080377B4:
+ ldr r0, _080377F0 @ =gBattleTypeFlags
+ ldrh r1, [r0]
+ movs r0, 0x40
+ ands r0, r1
+ cmp r0, 0
+ beq _080377F8
+ ldrb r0, [r7]
+ bl GetBankIdentity
+ lsls r0, 24
+ lsrs r0, 24
+ cmp r0, 0x1
+ bne _08037804
+ ldr r0, _080377F4 @ =gMPlay_BGM
+ bl m4aMPlayContinue
+ b _08037804
+ .align 2, 0
+_080377D8: .4byte gSprites
+_080377DC: .4byte gHealthboxIDs
+_080377E0: .4byte gActiveBank
+_080377E4: .4byte SpriteCallbackDummy
+_080377E8: .4byte 0x02017810
+_080377EC: .4byte 0x000027f9
+_080377F0: .4byte gBattleTypeFlags
+_080377F4: .4byte gMPlay_BGM
+_080377F8:
+ ldr r0, _08037828 @ =gMPlay_BGM
+ ldr r1, _0803782C @ =0x0000ffff
+ movs r2, 0x80
+ lsls r2, 1
+ bl m4aMPlayVolumeControl
+_08037804:
+ ldr r2, _08037830 @ =gActiveBank
+ ldrb r1, [r2]
+ lsls r0, r1, 1
+ adds r0, r1
+ lsls r0, 2
+ ldr r1, _08037834 @ =0x02017810
+ adds r0, r1
+ movs r1, 0x3
+ strb r1, [r0, 0x9]
+ ldr r1, _08037838 @ =gBattleBankFunc
+ ldrb r0, [r2]
+ lsls r0, 2
+ adds r0, r1
+ ldr r1, _0803783C @ =sub_8037644
+ str r1, [r0]
+_08037822:
+ pop {r4-r7}
+ pop {r0}
+ bx r0
+ .align 2, 0
+_08037828: .4byte gMPlay_BGM
+_0803782C: .4byte 0x0000ffff
+_08037830: .4byte gActiveBank
+_08037834: .4byte 0x02017810
+_08037838: .4byte gBattleBankFunc
+_0803783C: .4byte sub_8037644
+ thumb_func_end sub_8037680
+
+ thumb_func_start sub_8037840
+sub_8037840: @ 8037840
+ push {r4-r7,lr}
+ mov r7, r10
+ mov r6, r9
+ mov r5, r8
+ push {r5-r7}
+ ldr r6, _08037A48 @ =gActiveBank
+ ldrb r2, [r6]
+ lsls r3, r2, 1
+ adds r0, r3, r2
+ lsls r0, 2
+ ldr r5, _08037A4C @ =0x02017810
+ adds r0, r5
+ ldrb r1, [r0]
+ movs r4, 0x88
+ adds r0, r4, 0
+ ands r0, r1
+ cmp r0, 0
+ bne _08037878
+ ldr r0, _08037A50 @ =gBattlePartyID
+ adds r0, r3, r0
+ ldrh r1, [r0]
+ movs r0, 0x64
+ muls r1, r0
+ ldr r0, _08037A54 @ =gEnemyParty
+ adds r1, r0
+ adds r0, r2, 0
+ bl sub_8141828
+_08037878:
+ ldrb r0, [r6]
+ movs r7, 0x2
+ adds r2, r7, 0
+ eors r2, r0
+ lsls r3, r2, 1
+ adds r0, r3, r2
+ lsls r0, 2
+ adds r0, r5
+ ldrb r1, [r0]
+ adds r0, r4, 0
+ ands r0, r1
+ cmp r0, 0
+ bne _080378A6
+ ldr r0, _08037A50 @ =gBattlePartyID
+ adds r0, r3, r0
+ ldrh r1, [r0]
+ movs r0, 0x64
+ muls r1, r0
+ ldr r0, _08037A54 @ =gEnemyParty
+ adds r1, r0
+ adds r0, r2, 0
+ bl sub_8141828
+_080378A6:
+ ldrb r2, [r6]
+ lsls r0, r2, 1
+ adds r0, r2
+ lsls r0, 2
+ adds r0, r5
+ ldrb r1, [r0]
+ movs r3, 0x8
+ adds r0, r3, 0
+ ands r0, r1
+ cmp r0, 0
+ beq _080378BE
+ b _08037A3A
+_080378BE:
+ adds r1, r2, 0
+ eors r1, r7
+ lsls r0, r1, 1
+ adds r0, r1
+ lsls r0, 2
+ adds r0, r5
+ ldrb r1, [r0]
+ adds r0, r3, 0
+ ands r0, r1
+ lsls r0, 24
+ lsrs r4, r0, 24
+ cmp r4, 0
+ beq _080378DA
+ b _08037A3A
+_080378DA:
+ ldr r0, _08037A58 @ =gBattleTypeFlags
+ ldrh r1, [r0]
+ movs r0, 0x40
+ ands r0, r1
+ cmp r0, 0
+ beq _0803791A
+ adds r0, r2, 0
+ bl GetBankIdentity
+ lsls r0, 24
+ lsrs r0, 24
+ cmp r0, 0x3
+ bne _0803791A
+ ldrb r0, [r6]
+ lsls r1, r0, 1
+ adds r1, r0
+ lsls r1, 2
+ adds r1, r5
+ ldrb r0, [r1, 0x9]
+ adds r0, 0x1
+ strb r0, [r1, 0x9]
+ lsls r0, 24
+ lsrs r0, 24
+ cmp r0, 0x1
+ bne _0803790E
+ b _08037A3A
+_0803790E:
+ ldrb r1, [r6]
+ lsls r0, r1, 1
+ adds r0, r1
+ lsls r0, 2
+ adds r0, r5
+ strb r4, [r0, 0x9]
+_0803791A:
+ bl IsDoubleBattle
+ lsls r0, 24
+ cmp r0, 0
+ beq _080379B2
+ ldr r0, _08037A58 @ =gBattleTypeFlags
+ ldrh r1, [r0]
+ movs r0, 0x40
+ ands r0, r1
+ cmp r0, 0
+ bne _080379B2
+ ldr r1, _08037A5C @ =gUnknown_0300434C
+ ldr r5, _08037A48 @ =gActiveBank
+ ldrb r0, [r5]
+ movs r4, 0x2
+ eors r0, r4
+ adds r0, r1
+ ldrb r1, [r0]
+ lsls r0, r1, 4
+ adds r0, r1
+ lsls r0, 2
+ ldr r1, _08037A60 @ =gSprites
+ adds r0, r1
+ bl DestroySprite
+ ldr r0, _08037A64 @ =gHealthboxIDs
+ mov r8, r0
+ ldrb r0, [r5]
+ adds r1, r4, 0
+ eors r1, r0
+ mov r2, r8
+ adds r0, r1, r2
+ ldrb r0, [r0]
+ ldr r2, _08037A50 @ =gBattlePartyID
+ mov r10, r2
+ lsls r1, 1
+ add r1, r10
+ ldrh r1, [r1]
+ movs r2, 0x64
+ mov r9, r2
+ mov r2, r9
+ muls r2, r1
+ adds r1, r2, 0
+ ldr r6, _08037A54 @ =gEnemyParty
+ adds r1, r6
+ movs r2, 0
+ bl sub_8045A5C
+ ldrb r0, [r5]
+ eors r0, r4
+ bl sub_804777C
+ ldrb r0, [r5]
+ eors r0, r4
+ add r0, r8
+ ldrb r0, [r0]
+ bl sub_8043DFC
+ ldrb r0, [r5]
+ eors r4, r0
+ lsls r0, r4, 1
+ add r0, r10
+ ldrh r0, [r0]
+ mov r1, r9
+ muls r1, r0
+ adds r0, r1, 0
+ adds r0, r6
+ movs r1, 0xB
+ bl GetMonData
+ adds r1, r0, 0
+ lsls r1, 16
+ lsrs r1, 16
+ adds r0, r4, 0
+ bl sub_8032984
+_080379B2:
+ ldr r1, _08037A5C @ =gUnknown_0300434C
+ ldr r4, _08037A48 @ =gActiveBank
+ ldrb r0, [r4]
+ adds r0, r1
+ ldrb r1, [r0]
+ lsls r0, r1, 4
+ adds r0, r1
+ lsls r0, 2
+ ldr r1, _08037A60 @ =gSprites
+ adds r0, r1
+ bl DestroySprite
+ ldr r5, _08037A64 @ =gHealthboxIDs
+ ldrb r1, [r4]
+ adds r0, r1, r5
+ ldrb r0, [r0]
+ ldr r2, _08037A50 @ =gBattlePartyID
+ mov r9, r2
+ lsls r1, 1
+ add r1, r9
+ ldrh r1, [r1]
+ movs r2, 0x64
+ mov r8, r2
+ mov r2, r8
+ muls r2, r1
+ adds r1, r2, 0
+ ldr r6, _08037A54 @ =gEnemyParty
+ adds r1, r6
+ movs r2, 0
+ bl sub_8045A5C
+ ldrb r0, [r4]
+ bl sub_804777C
+ ldrb r0, [r4]
+ adds r0, r5
+ ldrb r0, [r0]
+ bl sub_8043DFC
+ ldrb r5, [r4]
+ lsls r0, r5, 1
+ add r0, r9
+ ldrh r0, [r0]
+ mov r1, r8
+ muls r1, r0
+ adds r0, r1, 0
+ adds r0, r6
+ movs r1, 0xB
+ bl GetMonData
+ adds r1, r0, 0
+ lsls r1, 16
+ lsrs r1, 16
+ adds r0, r5, 0
+ bl sub_8032984
+ ldr r2, _08037A68 @ =0x02017840
+ ldrb r1, [r2, 0x9]
+ movs r0, 0x2
+ negs r0, r0
+ ands r0, r1
+ strb r0, [r2, 0x9]
+ ldr r1, _08037A6C @ =gBattleBankFunc
+ ldrb r0, [r4]
+ lsls r0, 2
+ adds r0, r1
+ ldr r1, _08037A70 @ =sub_8037680
+ str r1, [r0]
+_08037A3A:
+ pop {r3-r5}
+ mov r8, r3
+ mov r9, r4
+ mov r10, r5
+ pop {r4-r7}
+ pop {r0}
+ bx r0
+ .align 2, 0
+_08037A48: .4byte gActiveBank
+_08037A4C: .4byte 0x02017810
+_08037A50: .4byte gBattlePartyID
+_08037A54: .4byte gEnemyParty
+_08037A58: .4byte gBattleTypeFlags
+_08037A5C: .4byte gUnknown_0300434C
+_08037A60: .4byte gSprites
+_08037A64: .4byte gHealthboxIDs
+_08037A68: .4byte 0x02017840
+_08037A6C: .4byte gBattleBankFunc
+_08037A70: .4byte sub_8037680
+ thumb_func_end sub_8037840
+
+ thumb_func_start sub_8037A74
+sub_8037A74: @ 8037A74
+ push {r4-r7,lr}
+ ldr r2, _08037ACC @ =gSprites
+ ldr r0, _08037AD0 @ =gObjectBankIDs
+ ldr r7, _08037AD4 @ =gActiveBank
+ ldrb r3, [r7]
+ adds r0, r3, r0
+ 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
+ lsrs r2, r0, 31
+ cmp r2, 0x1
+ bne _08037B18
+ movs r4, 0x24
+ ldrsh r0, [r1, r4]
+ cmp r0, 0
+ bne _08037B18
+ lsls r4, r3, 1
+ adds r0, r4, r3
+ lsls r0, 2
+ ldr r6, _08037AD8 @ =0x02017810
+ adds r1, r0, r6
+ ldrb r5, [r1]
+ movs r0, 0x80
+ ands r0, r5
+ cmp r0, 0
+ bne _08037AE4
+ ldr r0, _08037ADC @ =gBattlePartyID
+ adds r0, r4, r0
+ ldrh r1, [r0]
+ movs r0, 0x64
+ muls r1, r0
+ ldr r0, _08037AE0 @ =gEnemyParty
+ adds r1, r0
+ adds r0, r3, 0
+ bl sub_8141828
+ b _08037B18
+ .align 2, 0
+_08037ACC: .4byte gSprites
+_08037AD0: .4byte gObjectBankIDs
+_08037AD4: .4byte gActiveBank
+_08037AD8: .4byte 0x02017810
+_08037ADC: .4byte gBattlePartyID
+_08037AE0: .4byte gEnemyParty
+_08037AE4:
+ ldrb r0, [r1, 0x1]
+ ands r2, r0
+ cmp r2, 0
+ beq _08037B18
+ movs r0, 0x7F
+ ands r0, r5
+ strb r0, [r1]
+ ldrb r0, [r7]
+ lsls r1, r0, 1
+ adds r1, r0
+ lsls r1, 2
+ adds r1, r6
+ ldrb r2, [r1, 0x1]
+ movs r0, 0x2
+ negs r0, r0
+ ands r0, r2
+ strb r0, [r1, 0x1]
+ ldr r4, _08037B20 @ =0x000027f9
+ adds r0, r4, 0
+ bl FreeSpriteTilesByTag
+ adds r0, r4, 0
+ bl FreeSpritePaletteByTag
+ bl LinkOpponentBufferExecCompleted
+_08037B18:
+ pop {r4-r7}
+ pop {r0}
+ bx r0
+ .align 2, 0
+_08037B20: .4byte 0x000027f9
+ thumb_func_end sub_8037A74
+
+ thumb_func_start sub_8037B24
+sub_8037B24: @ 8037B24
+ push {r4-r6,lr}
+ ldr r6, _08037B64 @ =gActiveBank
+ ldrb r0, [r6]
+ ldr r5, _08037B68 @ =gHealthboxIDs
+ adds r1, r0, r5
+ ldrb r1, [r1]
+ movs r2, 0
+ movs r3, 0
+ bl sub_8045C78
+ adds r4, r0, 0
+ lsls r4, 16
+ lsrs r4, 16
+ ldrb r0, [r6]
+ adds r0, r5
+ ldrb r0, [r0]
+ bl sub_8043DFC
+ lsls r4, 16
+ asrs r1, r4, 16
+ movs r0, 0x1
+ negs r0, r0
+ cmp r1, r0
+ beq _08037B6C
+ ldrb r0, [r6]
+ adds r0, r5
+ ldrb r0, [r0]
+ movs r2, 0
+ bl sub_80440EC
+ b _08037B70
+ .align 2, 0
+_08037B64: .4byte gActiveBank
+_08037B68: .4byte gHealthboxIDs
+_08037B6C:
+ bl LinkOpponentBufferExecCompleted
+_08037B70:
+ pop {r4-r6}
+ pop {r0}
+ bx r0
+ thumb_func_end sub_8037B24
+
+ thumb_func_start sub_8037B78
+sub_8037B78: @ 8037B78
+ push {lr}
+ ldr r2, _08037BAC @ =gSprites
+ ldr r0, _08037BB0 @ =gObjectBankIDs
+ ldr r1, _08037BB4 @ =gActiveBank
+ ldrb r3, [r1]
+ adds r0, r3, r0
+ ldrb r1, [r0]
+ lsls r0, r1, 4
+ adds r0, r1
+ lsls r0, 2
+ adds r0, r2
+ adds r0, 0x3E
+ ldrb r0, [r0]
+ lsls r0, 31
+ cmp r0, 0
+ bne _08037BA6
+ ldr r0, _08037BB8 @ =gHealthboxIDs
+ adds r0, r3, r0
+ ldrb r0, [r0]
+ bl sub_8043DB0
+ bl LinkOpponentBufferExecCompleted
+_08037BA6:
+ pop {r0}
+ bx r0
+ .align 2, 0
+_08037BAC: .4byte gSprites
+_08037BB0: .4byte gObjectBankIDs
+_08037BB4: .4byte gActiveBank
+_08037BB8: .4byte gHealthboxIDs
+ thumb_func_end sub_8037B78
+
+ thumb_func_start sub_8037BBC
+sub_8037BBC: @ 8037BBC
+ push {r4-r6,lr}
+ ldr r6, _08037C18 @ =gActiveBank
+ ldrb r2, [r6]
+ lsls r0, r2, 1
+ adds r0, r2
+ lsls r0, 2
+ ldr r1, _08037C1C @ =0x02017810
+ adds r0, r1
+ ldrb r1, [r0]
+ movs r0, 0x40
+ ands r0, r1
+ cmp r0, 0
+ bne _08037C12
+ ldr r5, _08037C20 @ =gObjectBankIDs
+ adds r0, r2, r5
+ ldrb r1, [r0]
+ lsls r0, r1, 4
+ adds r0, r1
+ lsls r0, 2
+ ldr r4, _08037C24 @ =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
+ ldrb r0, [r6]
+ bl sub_8032A08
+ ldr r1, _08037C28 @ =gHealthboxIDs
+ ldrb r0, [r6]
+ adds r0, r1
+ ldrb r0, [r0]
+ bl sub_8043DB0
+ bl LinkOpponentBufferExecCompleted
+_08037C12:
+ pop {r4-r6}
+ pop {r0}
+ bx r0
+ .align 2, 0
+_08037C18: .4byte gActiveBank
+_08037C1C: .4byte 0x02017810
+_08037C20: .4byte gObjectBankIDs
+_08037C24: .4byte gSprites
+_08037C28: .4byte gHealthboxIDs
+ thumb_func_end sub_8037BBC
+
+ thumb_func_start sub_8037C2C
+sub_8037C2C: @ 8037C2C
+ push {lr}
+ ldr r0, _08037C40 @ =gUnknown_03004210
+ ldrh r0, [r0, 0x16]
+ cmp r0, 0
+ bne _08037C3A
+ bl LinkOpponentBufferExecCompleted
+_08037C3A:
+ pop {r0}
+ bx r0
+ .align 2, 0
+_08037C40: .4byte gUnknown_03004210
+ thumb_func_end sub_8037C2C
+
+ thumb_func_start dp01t_0F_4_move_anim
+dp01t_0F_4_move_anim: @ 8037C44
+ push {r4,lr}
+ ldr r1, _08037C80 @ =gObjectBankIDs
+ ldr r0, _08037C84 @ =gActiveBank
+ ldrb r0, [r0]
+ adds r0, r1
+ ldrb r1, [r0]
+ ldr r2, _08037C88 @ =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 _08037C90
+ 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, _08037C8C @ =gDoingBattleAnim
+ strb r3, [r0]
+ bl LinkOpponentBufferExecCompleted
+ b _08037CBA
+ .align 2, 0
+_08037C80: .4byte gObjectBankIDs
+_08037C84: .4byte gActiveBank
+_08037C88: .4byte gSprites
+_08037C8C: .4byte gDoingBattleAnim
+_08037C90:
+ ldrh r0, [r4, 0x30]
+ movs r1, 0x3
+ ands r0, r1
+ cmp r0, 0
+ bne _08037CB4
+ 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]
+_08037CB4:
+ ldrh r0, [r4, 0x30]
+ adds r0, 0x1
+ strh r0, [r4, 0x30]
+_08037CBA:
+ pop {r4}
+ pop {r0}
+ bx r0
+ thumb_func_end dp01t_0F_4_move_anim
+
+ thumb_func_start sub_8037CC0
+sub_8037CC0: @ 8037CC0
+ push {r4,lr}
+ ldr r2, _08037D10 @ =gSprites
+ ldr r0, _08037D14 @ =gHealthboxIDs
+ ldr r4, _08037D18 @ =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, _08037D1C @ =SpriteCallbackDummy
+ cmp r1, r0
+ bne _08037D08
+ lsls r0, r3, 2
+ ldr r1, _08037D20 @ =0x02017800
+ adds r0, r1
+ ldrb r1, [r0]
+ movs r0, 0x4
+ ands r0, r1
+ cmp r0, 0
+ beq _08037CFC
+ adds r0, r3, 0
+ adds r1, r3, 0
+ adds r2, r3, 0
+ movs r3, 0x6
+ bl move_anim_start_t4
+_08037CFC:
+ ldr r0, _08037D24 @ =gBattleBankFunc
+ ldrb r1, [r4]
+ lsls r1, 2
+ adds r1, r0
+ ldr r0, _08037D28 @ =sub_8037D2C
+ str r0, [r1]
+_08037D08:
+ pop {r4}
+ pop {r0}
+ bx r0
+ .align 2, 0
+_08037D10: .4byte gSprites
+_08037D14: .4byte gHealthboxIDs
+_08037D18: .4byte gActiveBank
+_08037D1C: .4byte SpriteCallbackDummy
+_08037D20: .4byte 0x02017800
+_08037D24: .4byte gBattleBankFunc
+_08037D28: .4byte sub_8037D2C
+ thumb_func_end sub_8037CC0
+
+ thumb_func_start sub_8037D2C
+sub_8037D2C: @ 8037D2C
+ push {lr}
+ ldr r0, _08037D58 @ =gActiveBank
+ ldrb r1, [r0]
+ lsls r0, r1, 1
+ adds r0, r1
+ lsls r0, 2
+ ldr r1, _08037D5C @ =0x02017810
+ adds r0, r1
+ ldrb r1, [r0]
+ movs r0, 0x40
+ ands r0, r1
+ cmp r0, 0
+ bne _08037D52
+ ldr r0, _08037D60 @ =c3_0802FDF4
+ movs r1, 0xA
+ bl CreateTask
+ bl LinkOpponentBufferExecCompleted
+_08037D52:
+ pop {r0}
+ bx r0
+ .align 2, 0
+_08037D58: .4byte gActiveBank
+_08037D5C: .4byte 0x02017810
+_08037D60: .4byte c3_0802FDF4
+ thumb_func_end sub_8037D2C
+
+ thumb_func_start sub_8037D64
+sub_8037D64: @ 8037D64
+ push {r4,r5,lr}
+ ldr r5, _08037E08 @ =gActiveBank
+ ldrb r1, [r5]
+ lsls r0, r1, 1
+ adds r0, r1
+ lsls r0, 2
+ ldr r3, _08037E0C @ =0x02017810
+ adds r2, r0, r3
+ ldrb r1, [r2, 0x1]
+ movs r0, 0x1
+ ands r0, r1
+ cmp r0, 0
+ beq _08037E00
+ ldrb r1, [r2]
+ movs r0, 0x7F
+ ands r0, r1
+ strb r0, [r2]
+ ldrb r0, [r5]
+ lsls r1, r0, 1
+ adds r1, r0
+ lsls r1, 2
+ adds r1, r3
+ ldrb r2, [r1, 0x1]
+ movs r0, 0x2
+ negs r0, r0
+ ands r0, r2
+ strb r0, [r1, 0x1]
+ ldr r4, _08037E10 @ =0x000027f9
+ adds r0, r4, 0
+ bl FreeSpriteTilesByTag
+ adds r0, r4, 0
+ bl FreeSpritePaletteByTag
+ ldr r1, _08037E14 @ =gObjectBankIDs
+ ldrb r0, [r5]
+ adds r0, r1
+ ldrb r1, [r0]
+ lsls r0, r1, 4
+ adds r0, r1
+ lsls r0, 2
+ ldr r1, _08037E18 @ =gSprites
+ adds r0, r1
+ movs r1, 0
+ bl StartSpriteAnim
+ ldr r4, _08037E1C @ =gHealthboxIDs
+ ldrb r1, [r5]
+ adds r0, r1, r4
+ ldrb r0, [r0]
+ ldr r2, _08037E20 @ =gBattlePartyID
+ lsls r1, 1
+ adds r1, r2
+ ldrh r2, [r1]
+ movs r1, 0x64
+ muls r1, r2
+ ldr r2, _08037E24 @ =gEnemyParty
+ adds r1, r2
+ movs r2, 0
+ bl sub_8045A5C
+ ldrb r0, [r5]
+ bl sub_804777C
+ ldrb r0, [r5]
+ adds r0, r4
+ ldrb r0, [r0]
+ bl sub_8043DFC
+ ldrb r0, [r5]
+ bl sub_8031F88
+ ldr r1, _08037E28 @ =gBattleBankFunc
+ ldrb r0, [r5]
+ lsls r0, 2
+ adds r0, r1
+ ldr r1, _08037E2C @ =sub_8037CC0
+ str r1, [r0]
+_08037E00:
+ pop {r4,r5}
+ pop {r0}
+ bx r0
+ .align 2, 0
+_08037E08: .4byte gActiveBank
+_08037E0C: .4byte 0x02017810
+_08037E10: .4byte 0x000027f9
+_08037E14: .4byte gObjectBankIDs
+_08037E18: .4byte gSprites
+_08037E1C: .4byte gHealthboxIDs
+_08037E20: .4byte gBattlePartyID
+_08037E24: .4byte gEnemyParty
+_08037E28: .4byte gBattleBankFunc
+_08037E2C: .4byte sub_8037CC0
+ thumb_func_end sub_8037D64
+
+ thumb_func_start sub_8037E30
+sub_8037E30: @ 8037E30
+ push {r4-r6,lr}
+ ldr r5, _08037ECC @ =gActiveBank
+ ldrb r2, [r5]
+ lsls r3, r2, 1
+ adds r0, r3, r2
+ lsls r0, 2
+ ldr r6, _08037ED0 @ =0x02017810
+ adds r0, r6
+ ldrb r1, [r0]
+ movs r0, 0x88
+ ands r0, r1
+ cmp r0, 0
+ bne _08037E5E
+ ldr r0, _08037ED4 @ =gBattlePartyID
+ adds r0, r3, r0
+ ldrh r1, [r0]
+ movs r0, 0x64
+ muls r1, r0
+ ldr r0, _08037ED8 @ =gEnemyParty
+ adds r1, r0
+ adds r0, r2, 0
+ bl sub_8141828
+_08037E5E:
+ ldr r4, _08037EDC @ =gSprites
+ ldr r0, _08037EE0 @ =gUnknown_0300434C
+ 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, _08037EE4 @ =SpriteCallbackDummy
+ cmp r1, r0
+ bne _08037EC4
+ lsls r0, r2, 1
+ adds r0, r2
+ lsls r0, 2
+ adds r0, r6
+ ldrb r1, [r0]
+ movs r0, 0x8
+ ands r0, r1
+ cmp r0, 0
+ bne _08037EC4
+ adds r0, r3, r4
+ bl DestroySprite
+ ldrb r4, [r5]
+ ldr r1, _08037ED4 @ =gBattlePartyID
+ lsls r0, r4, 1
+ adds r0, r1
+ ldrh r1, [r0]
+ movs r0, 0x64
+ muls r0, r1
+ ldr r1, _08037ED8 @ =gEnemyParty
+ adds r0, r1
+ movs r1, 0xB
+ bl GetMonData
+ adds r1, r0, 0
+ lsls r1, 16
+ lsrs r1, 16
+ adds r0, r4, 0
+ bl sub_8032984
+ ldr r1, _08037EE8 @ =gBattleBankFunc
+ ldrb r0, [r5]
+ lsls r0, 2
+ adds r0, r1
+ ldr r1, _08037EEC @ =sub_8037D64
+ str r1, [r0]
+_08037EC4:
+ pop {r4-r6}
+ pop {r0}
+ bx r0
+ .align 2, 0
+_08037ECC: .4byte gActiveBank
+_08037ED0: .4byte 0x02017810
+_08037ED4: .4byte gBattlePartyID
+_08037ED8: .4byte gEnemyParty
+_08037EDC: .4byte gSprites
+_08037EE0: .4byte gUnknown_0300434C
+_08037EE4: .4byte SpriteCallbackDummy
+_08037EE8: .4byte gBattleBankFunc
+_08037EEC: .4byte sub_8037D64
+ thumb_func_end sub_8037E30
+
+ thumb_func_start sub_8037EF0
+sub_8037EF0: @ 8037EF0
+ push {lr}
+ ldr r0, _08037F20 @ =gReceivedRemoteLinkPlayers
+ ldrb r0, [r0]
+ cmp r0, 0
+ bne _08037F1C
+ movs r0, 0x5A
+ bl m4aSongNumStop
+ ldr r3, _08037F24 @ =gMain
+ ldr r0, _08037F28 @ =0x0000043d
+ adds r2, r3, r0
+ ldrb r1, [r2]
+ movs r0, 0x3
+ negs r0, r0
+ ands r0, r1
+ strb r0, [r2]
+ ldr r0, _08037F2C @ =gPreBattleCallback1
+ ldr r0, [r0]
+ str r0, [r3]
+ ldr r0, _08037F30 @ =c2_8011A1C
+ bl SetMainCallback2
+_08037F1C:
+ pop {r0}
+ bx r0
+ .align 2, 0
+_08037F20: .4byte gReceivedRemoteLinkPlayers
+_08037F24: .4byte gMain
+_08037F28: .4byte 0x0000043d
+_08037F2C: .4byte gPreBattleCallback1
+_08037F30: .4byte c2_8011A1C
+ thumb_func_end sub_8037EF0
+
+ thumb_func_start sub_8037F34
+sub_8037F34: @ 8037F34
+ push {lr}
+ ldr r0, _08037F64 @ =gPaletteFade
+ ldrb r1, [r0, 0x7]
+ movs r0, 0x80
+ ands r0, r1
+ cmp r0, 0
+ bne _08037F9A
+ ldr r0, _08037F68 @ =gBattleTypeFlags
+ ldrh r1, [r0]
+ movs r0, 0x2
+ ands r0, r1
+ cmp r0, 0
+ beq _08037F78
+ bl sub_800832C
+ ldr r1, _08037F6C @ =gBattleBankFunc
+ ldr r0, _08037F70 @ =gActiveBank
+ ldrb r0, [r0]
+ lsls r0, 2
+ adds r0, r1
+ ldr r1, _08037F74 @ =sub_8037EF0
+ str r1, [r0]
+ b _08037F9A
+ .align 2, 0
+_08037F64: .4byte gPaletteFade
+_08037F68: .4byte gBattleTypeFlags
+_08037F6C: .4byte gBattleBankFunc
+_08037F70: .4byte gActiveBank
+_08037F74: .4byte sub_8037EF0
+_08037F78:
+ movs r0, 0x5A
+ bl m4aSongNumStop
+ ldr r2, _08037FA0 @ =gMain
+ ldr r0, _08037FA4 @ =0x0000043d
+ adds r3, r2, r0
+ ldrb r1, [r3]
+ movs r0, 0x3
+ negs r0, r0
+ ands r0, r1
+ strb r0, [r3]
+ ldr r0, _08037FA8 @ =gPreBattleCallback1
+ ldr r0, [r0]
+ str r0, [r2]
+ ldr r0, [r2, 0x8]
+ bl SetMainCallback2
+_08037F9A:
+ pop {r0}
+ bx r0
+ .align 2, 0
+_08037FA0: .4byte gMain
+_08037FA4: .4byte 0x0000043d
+_08037FA8: .4byte gPreBattleCallback1
+ thumb_func_end sub_8037F34
+
+ thumb_func_start sub_8037FAC
+sub_8037FAC: @ 8037FAC
+ push {lr}
+ ldr r0, _08037FD0 @ =gActiveBank
+ ldrb r1, [r0]
+ lsls r0, r1, 1
+ adds r0, r1
+ lsls r0, 2
+ ldr r1, _08037FD4 @ =0x02017810
+ adds r0, r1
+ ldrb r1, [r0]
+ movs r0, 0x10
+ ands r0, r1
+ cmp r0, 0
+ bne _08037FCA
+ bl LinkOpponentBufferExecCompleted
+_08037FCA:
+ pop {r0}
+ bx r0
+ .align 2, 0
+_08037FD0: .4byte gActiveBank
+_08037FD4: .4byte 0x02017810
+ thumb_func_end sub_8037FAC
+
+ thumb_func_start sub_8037FD8
+sub_8037FD8: @ 8037FD8
+ push {lr}
+ ldr r0, _08037FFC @ =gActiveBank
+ ldrb r1, [r0]
+ lsls r0, r1, 1
+ adds r0, r1
+ lsls r0, 2
+ ldr r1, _08038000 @ =0x02017810
+ adds r0, r1
+ ldrb r1, [r0]
+ movs r0, 0x20
+ ands r0, r1
+ cmp r0, 0
+ bne _08037FF6
+ bl LinkOpponentBufferExecCompleted
+_08037FF6:
+ pop {r0}
+ bx r0
+ .align 2, 0
+_08037FFC: .4byte gActiveBank
+_08038000: .4byte 0x02017810
+ thumb_func_end sub_8037FD8
+
+ thumb_func_start LinkOpponentBufferExecCompleted
+LinkOpponentBufferExecCompleted: @ 8038004
+ push {r4,lr}
+ sub sp, 0x4
+ ldr r1, _08038044 @ =gBattleBankFunc
+ ldr r4, _08038048 @ =gActiveBank
+ ldrb r0, [r4]
+ lsls r0, 2
+ adds r0, r1
+ ldr r1, _0803804C @ =sub_803752C
+ str r1, [r0]
+ ldr r0, _08038050 @ =gBattleTypeFlags
+ ldrh r1, [r0]
+ movs r0, 0x2
+ ands r0, r1
+ cmp r0, 0
+ beq _08038058
+ bl GetMultiplayerId
+ mov r1, sp
+ strb r0, [r1]
+ movs r0, 0x2
+ movs r1, 0x4
+ mov r2, sp
+ bl dp01_prepare_buffer_wireless_probably
+ ldr r1, _08038054 @ =gBattleBufferA
+ ldrb r0, [r4]
+ lsls r0, 9
+ adds r0, r1
+ movs r1, 0x38
+ strb r1, [r0]
+ b _0803806A
+ .align 2, 0
+_08038044: .4byte gBattleBankFunc
+_08038048: .4byte gActiveBank
+_0803804C: .4byte sub_803752C
+_08038050: .4byte gBattleTypeFlags
+_08038054: .4byte gBattleBufferA
+_08038058:
+ ldr r2, _08038074 @ =gBattleExecBuffer
+ ldr r1, _08038078 @ =gBitTable
+ ldrb r0, [r4]
+ lsls r0, 2
+ adds r0, r1
+ ldr r1, [r0]
+ ldr r0, [r2]
+ bics r0, r1
+ str r0, [r2]
+_0803806A:
+ add sp, 0x4
+ pop {r4}
+ pop {r0}
+ bx r0
+ .align 2, 0
+_08038074: .4byte gBattleExecBuffer
+_08038078: .4byte gBitTable
+ thumb_func_end LinkOpponentBufferExecCompleted
+
+ .align 2, 0 @ Don't pad with nop.
diff --git a/asm/battle_controller_safari.s b/asm/battle_controller_safari.s
new file mode 100644
index 000000000..97bcd15b5
--- /dev/null
+++ b/asm/battle_controller_safari.s
@@ -0,0 +1,1402 @@
+ .include "constants/gba_constants.inc"
+ .include "constants/species_constants.inc"
+ .include "asm/macros.inc"
+
+ .syntax unified
+
+ .text
+
+ thumb_func_start unref_sub_812B464
+unref_sub_812B464: @ 812B464
+ bx lr
+ thumb_func_end unref_sub_812B464
+
+ thumb_func_start SetBankFuncToSafariBufferRunCommand
+SetBankFuncToSafariBufferRunCommand: @ 812B468
+ ldr r1, _0812B478 @ =gBattleBankFunc
+ ldr r0, _0812B47C @ =gActiveBank
+ ldrb r0, [r0]
+ lsls r0, 2
+ adds r0, r1
+ ldr r1, _0812B480 @ =SafariBufferRunCommand
+ str r1, [r0]
+ bx lr
+ .align 2, 0
+_0812B478: .4byte gBattleBankFunc
+_0812B47C: .4byte gActiveBank
+_0812B480: .4byte SafariBufferRunCommand
+ thumb_func_end SetBankFuncToSafariBufferRunCommand
+
+ thumb_func_start SafariBufferRunCommand
+SafariBufferRunCommand: @ 812B484
+ push {lr}
+ ldr r2, _0812B4B8 @ =gBattleExecBuffer
+ ldr r1, _0812B4BC @ =gBitTable
+ ldr r0, _0812B4C0 @ =gActiveBank
+ ldrb r3, [r0]
+ lsls r0, r3, 2
+ adds r0, r1
+ ldr r1, [r2]
+ ldr r0, [r0]
+ ands r1, r0
+ cmp r1, 0
+ beq _0812B4D0
+ ldr r0, _0812B4C4 @ =gBattleBufferA
+ lsls r1, r3, 9
+ adds r1, r0
+ ldrb r0, [r1]
+ cmp r0, 0x38
+ bhi _0812B4CC
+ ldr r0, _0812B4C8 @ =gSafariBufferCommands
+ ldrb r1, [r1]
+ lsls r1, 2
+ adds r1, r0
+ ldr r0, [r1]
+ bl _call_via_r0
+ b _0812B4D0
+ .align 2, 0
+_0812B4B8: .4byte gBattleExecBuffer
+_0812B4BC: .4byte gBitTable
+_0812B4C0: .4byte gActiveBank
+_0812B4C4: .4byte gBattleBufferA
+_0812B4C8: .4byte gSafariBufferCommands
+_0812B4CC:
+ bl SafariBufferExecCompleted
+_0812B4D0:
+ pop {r0}
+ bx r0
+ thumb_func_end SafariBufferRunCommand
+
+ thumb_func_start bx_battle_menu_t6_2
+bx_battle_menu_t6_2: @ 812B4D4
+ push {r4,r5,lr}
+ ldr r0, _0812B508 @ =gMain
+ ldrh r1, [r0, 0x2E]
+ movs r2, 0x1
+ adds r0, r2, 0
+ ands r0, r1
+ cmp r0, 0
+ beq _0812B546
+ movs r0, 0x5
+ bl PlaySE
+ bl DestroyMenuCursor
+ ldr r1, _0812B50C @ =gActionSelectionCursor
+ ldr r0, _0812B510 @ =gActiveBank
+ ldrb r0, [r0]
+ adds r0, r1
+ ldrb r0, [r0]
+ cmp r0, 0x1
+ beq _0812B524
+ cmp r0, 0x1
+ bgt _0812B514
+ cmp r0, 0
+ beq _0812B51E
+ b _0812B540
+ .align 2, 0
+_0812B508: .4byte gMain
+_0812B50C: .4byte gActionSelectionCursor
+_0812B510: .4byte gActiveBank
+_0812B514:
+ cmp r0, 0x2
+ beq _0812B52A
+ cmp r0, 0x3
+ beq _0812B536
+ b _0812B540
+_0812B51E:
+ movs r0, 0x1
+ movs r1, 0x5
+ b _0812B52E
+_0812B524:
+ movs r0, 0x1
+ movs r1, 0x6
+ b _0812B52E
+_0812B52A:
+ movs r0, 0x1
+ movs r1, 0x7
+_0812B52E:
+ movs r2, 0
+ bl Emitcmd33
+ b _0812B540
+_0812B536:
+ movs r0, 0x1
+ movs r1, 0x8
+ movs r2, 0
+ bl Emitcmd33
+_0812B540:
+ bl SafariBufferExecCompleted
+ b _0812B64E
+_0812B546:
+ movs r0, 0x20
+ ands r0, r1
+ cmp r0, 0
+ beq _0812B584
+ ldr r5, _0812B57C @ =gActionSelectionCursor
+ ldr r4, _0812B580 @ =gActiveBank
+ ldrb r0, [r4]
+ adds r0, r5
+ ldrb r1, [r0]
+ adds r0, r2, 0
+ ands r0, r1
+ cmp r0, 0
+ beq _0812B64E
+ movs r0, 0x5
+ bl PlaySE
+ ldrb r0, [r4]
+ adds r0, r5
+ ldrb r0, [r0]
+ bl nullsub_8
+ ldrb r1, [r4]
+ adds r1, r5
+ ldrb r0, [r1]
+ movs r2, 0x1
+ b _0812B5F2
+ .align 2, 0
+_0812B57C: .4byte gActionSelectionCursor
+_0812B580: .4byte gActiveBank
+_0812B584:
+ movs r0, 0x10
+ ands r0, r1
+ cmp r0, 0
+ beq _0812B5C0
+ ldr r5, _0812B5B8 @ =gActionSelectionCursor
+ ldr r4, _0812B5BC @ =gActiveBank
+ ldrb r0, [r4]
+ adds r0, r5
+ ldrb r1, [r0]
+ adds r0, r2, 0
+ ands r0, r1
+ cmp r0, 0
+ bne _0812B64E
+ movs r0, 0x5
+ bl PlaySE
+ ldrb r0, [r4]
+ adds r0, r5
+ ldrb r0, [r0]
+ bl nullsub_8
+ ldrb r1, [r4]
+ adds r1, r5
+ ldrb r0, [r1]
+ movs r2, 0x1
+ b _0812B5F2
+ .align 2, 0
+_0812B5B8: .4byte gActionSelectionCursor
+_0812B5BC: .4byte gActiveBank
+_0812B5C0:
+ movs r0, 0x40
+ ands r0, r1
+ cmp r0, 0
+ beq _0812B60C
+ ldr r5, _0812B604 @ =gActionSelectionCursor
+ ldr r4, _0812B608 @ =gActiveBank
+ ldrb r0, [r4]
+ adds r0, r5
+ ldrb r1, [r0]
+ movs r0, 0x2
+ ands r0, r1
+ cmp r0, 0
+ beq _0812B64E
+ movs r0, 0x5
+ bl PlaySE
+ ldrb r0, [r4]
+ adds r0, r5
+ ldrb r0, [r0]
+ bl nullsub_8
+ ldrb r1, [r4]
+ adds r1, r5
+ ldrb r0, [r1]
+ movs r2, 0x2
+_0812B5F2:
+ eors r0, r2
+ strb r0, [r1]
+ ldrb r0, [r4]
+ adds r0, r5
+ ldrb r0, [r0]
+ movs r1, 0
+ bl sub_802E3E4
+ b _0812B64E
+ .align 2, 0
+_0812B604: .4byte gActionSelectionCursor
+_0812B608: .4byte gActiveBank
+_0812B60C:
+ movs r0, 0x80
+ ands r0, r1
+ cmp r0, 0
+ beq _0812B64E
+ ldr r5, _0812B654 @ =gActionSelectionCursor
+ ldr r4, _0812B658 @ =gActiveBank
+ ldrb r0, [r4]
+ adds r0, r5
+ ldrb r1, [r0]
+ movs r0, 0x2
+ ands r0, r1
+ cmp r0, 0
+ bne _0812B64E
+ movs r0, 0x5
+ bl PlaySE
+ ldrb r0, [r4]
+ adds r0, r5
+ ldrb r0, [r0]
+ bl nullsub_8
+ 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 sub_802E3E4
+_0812B64E:
+ pop {r4,r5}
+ pop {r0}
+ bx r0
+ .align 2, 0
+_0812B654: .4byte gActionSelectionCursor
+_0812B658: .4byte gActiveBank
+ thumb_func_end bx_battle_menu_t6_2
+
+ thumb_func_start sub_812B65C
+sub_812B65C: @ 812B65C
+ push {lr}
+ ldr r2, _0812B684 @ =gSprites
+ ldr r1, _0812B688 @ =gObjectBankIDs
+ ldr r0, _0812B68C @ =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, _0812B690 @ =SpriteCallbackDummy
+ cmp r1, r0
+ bne _0812B680
+ bl SafariBufferExecCompleted
+_0812B680:
+ pop {r0}
+ bx r0
+ .align 2, 0
+_0812B684: .4byte gSprites
+_0812B688: .4byte gObjectBankIDs
+_0812B68C: .4byte gActiveBank
+_0812B690: .4byte SpriteCallbackDummy
+ thumb_func_end sub_812B65C
+
+ thumb_func_start sub_812B694
+sub_812B694: @ 812B694
+ push {lr}
+ ldr r0, _0812B6A8 @ =gUnknown_03004210
+ ldrh r0, [r0, 0x16]
+ cmp r0, 0
+ bne _0812B6A2
+ bl SafariBufferExecCompleted
+_0812B6A2:
+ pop {r0}
+ bx r0
+ .align 2, 0
+_0812B6A8: .4byte gUnknown_03004210
+ thumb_func_end sub_812B694
+
+ thumb_func_start sub_812B6AC
+sub_812B6AC: @ 812B6AC
+ push {lr}
+ ldr r0, _0812B6DC @ =gPaletteFade
+ ldrb r1, [r0, 0x7]
+ movs r0, 0x80
+ ands r0, r1
+ cmp r0, 0
+ bne _0812B6D6
+ ldr r2, _0812B6E0 @ =gMain
+ ldr r0, _0812B6E4 @ =0x0000043d
+ adds r3, r2, r0
+ ldrb r1, [r3]
+ movs r0, 0x3
+ negs r0, r0
+ ands r0, r1
+ strb r0, [r3]
+ ldr r0, _0812B6E8 @ =gPreBattleCallback1
+ ldr r0, [r0]
+ str r0, [r2]
+ ldr r0, [r2, 0x8]
+ bl SetMainCallback2
+_0812B6D6:
+ pop {r0}
+ bx r0
+ .align 2, 0
+_0812B6DC: .4byte gPaletteFade
+_0812B6E0: .4byte gMain
+_0812B6E4: .4byte 0x0000043d
+_0812B6E8: .4byte gPreBattleCallback1
+ thumb_func_end sub_812B6AC
+
+ thumb_func_start bx_wait_t6
+bx_wait_t6: @ 812B6EC
+ push {lr}
+ ldr r0, _0812B718 @ =gDoingBattleAnim
+ ldrb r0, [r0]
+ cmp r0, 0
+ beq _0812B70E
+ ldr r0, _0812B71C @ =gActiveBank
+ ldrb r1, [r0]
+ lsls r0, r1, 1
+ adds r0, r1
+ lsls r0, 2
+ ldr r1, _0812B720 @ =0x02017810
+ adds r0, r1
+ ldrb r1, [r0]
+ movs r0, 0x40
+ ands r0, r1
+ cmp r0, 0
+ bne _0812B712
+_0812B70E:
+ bl SafariBufferExecCompleted
+_0812B712:
+ pop {r0}
+ bx r0
+ .align 2, 0
+_0812B718: .4byte gDoingBattleAnim
+_0812B71C: .4byte gActiveBank
+_0812B720: .4byte 0x02017810
+ thumb_func_end bx_wait_t6
+
+ thumb_func_start sub_812B724
+sub_812B724: @ 812B724
+ push {lr}
+ ldr r0, _0812B748 @ =gPaletteFade
+ ldrb r1, [r0, 0x7]
+ movs r0, 0x80
+ ands r0, r1
+ cmp r0, 0
+ bne _0812B744
+ ldr r1, _0812B74C @ =gBattleBankFunc
+ ldr r0, _0812B750 @ =gActiveBank
+ ldrb r0, [r0]
+ lsls r0, 2
+ adds r0, r1
+ ldr r1, _0812B754 @ =sub_812B758
+ str r1, [r0]
+ bl sub_810BADC
+_0812B744:
+ pop {r0}
+ bx r0
+ .align 2, 0
+_0812B748: .4byte gPaletteFade
+_0812B74C: .4byte gBattleBankFunc
+_0812B750: .4byte gActiveBank
+_0812B754: .4byte sub_812B758
+ thumb_func_end sub_812B724
+
+ thumb_func_start sub_812B758
+sub_812B758: @ 812B758
+ push {lr}
+ ldr r0, _0812B784 @ =gMain
+ ldr r1, [r0, 0x4]
+ ldr r0, _0812B788 @ =sub_800F808
+ cmp r1, r0
+ bne _0812B77E
+ ldr r0, _0812B78C @ =gPaletteFade
+ ldrb r1, [r0, 0x7]
+ movs r0, 0x80
+ ands r0, r1
+ cmp r0, 0
+ bne _0812B77E
+ ldr r0, _0812B790 @ =gScriptItemId
+ ldrh r1, [r0]
+ movs r0, 0x1
+ bl Emitcmd35
+ bl SafariBufferExecCompleted
+_0812B77E:
+ pop {r0}
+ bx r0
+ .align 2, 0
+_0812B784: .4byte gMain
+_0812B788: .4byte sub_800F808
+_0812B78C: .4byte gPaletteFade
+_0812B790: .4byte gScriptItemId
+ thumb_func_end sub_812B758
+
+ thumb_func_start sub_812B794
+sub_812B794: @ 812B794
+ push {lr}
+ ldr r0, _0812B7B8 @ =gActiveBank
+ ldrb r1, [r0]
+ lsls r0, r1, 1
+ adds r0, r1
+ lsls r0, 2
+ ldr r1, _0812B7BC @ =0x02017810
+ adds r0, r1
+ ldrb r1, [r0]
+ movs r0, 0x20
+ ands r0, r1
+ cmp r0, 0
+ bne _0812B7B2
+ bl SafariBufferExecCompleted
+_0812B7B2:
+ pop {r0}
+ bx r0
+ .align 2, 0
+_0812B7B8: .4byte gActiveBank
+_0812B7BC: .4byte 0x02017810
+ thumb_func_end sub_812B794
+
+ thumb_func_start SafariBufferExecCompleted
+SafariBufferExecCompleted: @ 812B7C0
+ push {r4,lr}
+ sub sp, 0x4
+ ldr r1, _0812B800 @ =gBattleBankFunc
+ ldr r4, _0812B804 @ =gActiveBank
+ ldrb r0, [r4]
+ lsls r0, 2
+ adds r0, r1
+ ldr r1, _0812B808 @ =SafariBufferRunCommand
+ str r1, [r0]
+ ldr r0, _0812B80C @ =gBattleTypeFlags
+ ldrh r1, [r0]
+ movs r0, 0x2
+ ands r0, r1
+ cmp r0, 0
+ beq _0812B814
+ bl GetMultiplayerId
+ mov r1, sp
+ strb r0, [r1]
+ movs r0, 0x2
+ movs r1, 0x4
+ mov r2, sp
+ bl dp01_prepare_buffer_wireless_probably
+ ldr r1, _0812B810 @ =gBattleBufferA
+ ldrb r0, [r4]
+ lsls r0, 9
+ adds r0, r1
+ movs r1, 0x38
+ strb r1, [r0]
+ b _0812B826
+ .align 2, 0
+_0812B800: .4byte gBattleBankFunc
+_0812B804: .4byte gActiveBank
+_0812B808: .4byte SafariBufferRunCommand
+_0812B80C: .4byte gBattleTypeFlags
+_0812B810: .4byte gBattleBufferA
+_0812B814:
+ ldr r2, _0812B830 @ =gBattleExecBuffer
+ ldr r1, _0812B834 @ =gBitTable
+ ldrb r0, [r4]
+ lsls r0, 2
+ adds r0, r1
+ ldr r1, [r0]
+ ldr r0, [r2]
+ bics r0, r1
+ str r0, [r2]
+_0812B826:
+ add sp, 0x4
+ pop {r4}
+ pop {r0}
+ bx r0
+ .align 2, 0
+_0812B830: .4byte gBattleExecBuffer
+_0812B834: .4byte gBitTable
+ thumb_func_end SafariBufferExecCompleted
+
+ thumb_func_start unref_sub_812B838
+unref_sub_812B838: @ 812B838
+ push {lr}
+ ldr r0, _0812B85C @ =gActiveBank
+ ldrb r1, [r0]
+ lsls r0, r1, 1
+ adds r0, r1
+ lsls r0, 2
+ ldr r1, _0812B860 @ =0x02017810
+ adds r0, r1
+ ldrb r1, [r0]
+ movs r0, 0x10
+ ands r0, r1
+ cmp r0, 0
+ bne _0812B856
+ bl SafariBufferExecCompleted
+_0812B856:
+ pop {r0}
+ bx r0
+ .align 2, 0
+_0812B85C: .4byte gActiveBank
+_0812B860: .4byte 0x02017810
+ thumb_func_end unref_sub_812B838
+
+ thumb_func_start SafariHandleGetAttributes
+SafariHandleGetAttributes: @ 812B864
+ push {lr}
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ thumb_func_end SafariHandleGetAttributes
+
+ thumb_func_start SafariHandlecmd1
+SafariHandlecmd1: @ 812B870
+ push {lr}
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ thumb_func_end SafariHandlecmd1
+
+ thumb_func_start SafariHandleSetAttributes
+SafariHandleSetAttributes: @ 812B87C
+ push {lr}
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ thumb_func_end SafariHandleSetAttributes
+
+ thumb_func_start SafariHandlecmd3
+SafariHandlecmd3: @ 812B888
+ push {lr}
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ thumb_func_end SafariHandlecmd3
+
+ thumb_func_start SafariHandleLoadPokeSprite
+SafariHandleLoadPokeSprite: @ 812B894
+ push {lr}
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ thumb_func_end SafariHandleLoadPokeSprite
+
+ thumb_func_start SafariHandleSendOutPoke
+SafariHandleSendOutPoke: @ 812B8A0
+ push {lr}
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ thumb_func_end SafariHandleSendOutPoke
+
+ thumb_func_start SafariHandleReturnPokeToBall
+SafariHandleReturnPokeToBall: @ 812B8AC
+ push {lr}
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ thumb_func_end SafariHandleReturnPokeToBall
+
+ thumb_func_start SafariHandleTrainerThrow
+SafariHandleTrainerThrow: @ 812B8B8
+ push {r4-r6,lr}
+ ldr r4, _0812B96C @ =gSaveBlock2
+ ldrb r0, [r4, 0x8]
+ ldr r5, _0812B970 @ =gActiveBank
+ ldrb r1, [r5]
+ bl LoadPlayerTrainerBankSprite
+ ldrb r6, [r4, 0x8]
+ ldrb r0, [r5]
+ bl GetBankIdentity
+ adds r1, r0, 0
+ lsls r1, 24
+ lsrs r1, 24
+ adds r0, r6, 0
+ bl GetMonSpriteTemplate_803C5A0
+ ldr r0, _0812B974 @ =gUnknown_02024E8C
+ ldr r2, _0812B978 @ =gTrainerBackPicCoords
+ ldrb r1, [r4, 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, _0812B97C @ =gObjectBankIDs
+ ldrb r1, [r5]
+ adds r1, r6
+ strb r0, [r1]
+ ldr r4, _0812B980 @ =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, _0812B984 @ =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, _0812B988 @ =sub_80313A0
+ str r1, [r0]
+ ldr r1, _0812B98C @ =gBattleBankFunc
+ ldrb r0, [r5]
+ lsls r0, 2
+ adds r0, r1
+ ldr r1, _0812B990 @ =sub_812B65C
+ str r1, [r0]
+ pop {r4-r6}
+ pop {r0}
+ bx r0
+ .align 2, 0
+_0812B96C: .4byte gSaveBlock2
+_0812B970: .4byte gActiveBank
+_0812B974: .4byte gUnknown_02024E8C
+_0812B978: .4byte gTrainerBackPicCoords
+_0812B97C: .4byte gObjectBankIDs
+_0812B980: .4byte gSprites
+_0812B984: .4byte 0x0000fffe
+_0812B988: .4byte sub_80313A0
+_0812B98C: .4byte gBattleBankFunc
+_0812B990: .4byte sub_812B65C
+ thumb_func_end SafariHandleTrainerThrow
+
+ thumb_func_start SafariHandleTrainerSlide
+SafariHandleTrainerSlide: @ 812B994
+ push {lr}
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ thumb_func_end SafariHandleTrainerSlide
+
+ thumb_func_start SafariHandleTrainerSlideBack
+SafariHandleTrainerSlideBack: @ 812B9A0
+ push {lr}
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ thumb_func_end SafariHandleTrainerSlideBack
+
+ thumb_func_start SafariHandlecmd10
+SafariHandlecmd10: @ 812B9AC
+ push {lr}
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ thumb_func_end SafariHandlecmd10
+
+ thumb_func_start SafariHandlecmd11
+SafariHandlecmd11: @ 812B9B8
+ push {lr}
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ thumb_func_end SafariHandlecmd11
+
+ thumb_func_start SafariHandlecmd12
+SafariHandlecmd12: @ 812B9C4
+ push {r4,r5,lr}
+ ldr r1, _0812BA00 @ =0x02017840
+ movs r0, 0x4
+ strb r0, [r1, 0x8]
+ ldr r1, _0812BA04 @ =gDoingBattleAnim
+ movs r0, 0x1
+ strb r0, [r1]
+ ldr r5, _0812BA08 @ =gActiveBank
+ ldrb r4, [r5]
+ movs r0, 0x1
+ bl GetBankByPlayerAI
+ 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, _0812BA0C @ =gBattleBankFunc
+ ldrb r0, [r5]
+ lsls r0, 2
+ adds r0, r1
+ ldr r1, _0812BA10 @ =bx_wait_t6
+ str r1, [r0]
+ pop {r4,r5}
+ pop {r0}
+ bx r0
+ .align 2, 0
+_0812BA00: .4byte 0x02017840
+_0812BA04: .4byte gDoingBattleAnim
+_0812BA08: .4byte gActiveBank
+_0812BA0C: .4byte gBattleBankFunc
+_0812BA10: .4byte bx_wait_t6
+ thumb_func_end SafariHandlecmd12
+
+ thumb_func_start SafariHandleBallThrow
+SafariHandleBallThrow: @ 812BA14
+ push {r4,r5,lr}
+ ldr r1, _0812BA58 @ =gBattleBufferA
+ ldr r5, _0812BA5C @ =gActiveBank
+ ldrb r0, [r5]
+ lsls r0, 9
+ adds r1, 0x1
+ adds r0, r1
+ ldrb r1, [r0]
+ ldr r0, _0812BA60 @ =0x02017840
+ strb r1, [r0, 0x8]
+ ldr r1, _0812BA64 @ =gDoingBattleAnim
+ movs r0, 0x1
+ strb r0, [r1]
+ ldrb r4, [r5]
+ movs r0, 0x1
+ bl GetBankByPlayerAI
+ 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, _0812BA68 @ =gBattleBankFunc
+ ldrb r0, [r5]
+ lsls r0, 2
+ adds r0, r1
+ ldr r1, _0812BA6C @ =bx_wait_t6
+ str r1, [r0]
+ pop {r4,r5}
+ pop {r0}
+ bx r0
+ .align 2, 0
+_0812BA58: .4byte gBattleBufferA
+_0812BA5C: .4byte gActiveBank
+_0812BA60: .4byte 0x02017840
+_0812BA64: .4byte gDoingBattleAnim
+_0812BA68: .4byte gBattleBankFunc
+_0812BA6C: .4byte bx_wait_t6
+ thumb_func_end SafariHandleBallThrow
+
+ thumb_func_start SafariHandlePuase
+SafariHandlePuase: @ 812BA70
+ push {lr}
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ thumb_func_end SafariHandlePuase
+
+ thumb_func_start SafariHandleMoveAnimation
+SafariHandleMoveAnimation: @ 812BA7C
+ push {lr}
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ thumb_func_end SafariHandleMoveAnimation
+
+ thumb_func_start SafariHandlePrintString
+SafariHandlePrintString: @ 812BA88
+ push {r4,lr}
+ sub sp, 0x4
+ ldr r0, _0812BACC @ =gUnknown_030042A4
+ movs r1, 0
+ strh r1, [r0]
+ ldr r0, _0812BAD0 @ =gUnknown_030042A0
+ strh r1, [r0]
+ ldr r4, _0812BAD4 @ =gActiveBank
+ ldrb r0, [r4]
+ lsls r0, 9
+ ldr r1, _0812BAD8 @ =gUnknown_02023A62
+ adds r0, r1
+ ldrh r0, [r0]
+ bl BufferStringBattle
+ ldr r0, _0812BADC @ =gUnknown_03004210
+ ldr r1, _0812BAE0 @ =gDisplayedStringBattle
+ movs r2, 0xF
+ str r2, [sp]
+ movs r2, 0x90
+ movs r3, 0x2
+ bl sub_8002EB0
+ ldr r1, _0812BAE4 @ =gBattleBankFunc
+ ldrb r0, [r4]
+ lsls r0, 2
+ adds r0, r1
+ ldr r1, _0812BAE8 @ =sub_812B694
+ str r1, [r0]
+ add sp, 0x4
+ pop {r4}
+ pop {r0}
+ bx r0
+ .align 2, 0
+_0812BACC: .4byte gUnknown_030042A4
+_0812BAD0: .4byte gUnknown_030042A0
+_0812BAD4: .4byte gActiveBank
+_0812BAD8: .4byte gUnknown_02023A62
+_0812BADC: .4byte gUnknown_03004210
+_0812BAE0: .4byte gDisplayedStringBattle
+_0812BAE4: .4byte gBattleBankFunc
+_0812BAE8: .4byte sub_812B694
+ thumb_func_end SafariHandlePrintString
+
+ thumb_func_start SafariHandlePrintStringPlayerOnly
+SafariHandlePrintStringPlayerOnly: @ 812BAEC
+ push {lr}
+ ldr r0, _0812BB04 @ =gActiveBank
+ ldrb r0, [r0]
+ bl GetBankSide
+ lsls r0, 24
+ cmp r0, 0
+ bne _0812BB08
+ bl SafariHandlePrintString
+ b _0812BB0C
+ .align 2, 0
+_0812BB04: .4byte gActiveBank
+_0812BB08:
+ bl SafariBufferExecCompleted
+_0812BB0C:
+ pop {r0}
+ bx r0
+ thumb_func_end SafariHandlePrintStringPlayerOnly
+
+.section .text_812BBFC
+
+ thumb_func_start SafariHandlecmd19
+SafariHandlecmd19: @ 812BBFC
+ push {lr}
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ thumb_func_end SafariHandlecmd19
+
+ thumb_func_start SafariHandlecmd20
+SafariHandlecmd20: @ 812BC08
+ push {lr}
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ thumb_func_end SafariHandlecmd20
+
+ thumb_func_start SafariHandleOpenBag
+SafariHandleOpenBag: @ 812BC14
+ 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, _0812BC44 @ =gBattleBankFunc
+ ldr r2, _0812BC48 @ =gActiveBank
+ ldrb r0, [r2]
+ lsls r0, 2
+ adds r0, r1
+ ldr r1, _0812BC4C @ =sub_812B724
+ str r1, [r0]
+ ldr r1, _0812BC50 @ =gBankInMenu
+ ldrb r0, [r2]
+ strb r0, [r1]
+ add sp, 0x4
+ pop {r0}
+ bx r0
+ .align 2, 0
+_0812BC44: .4byte gBattleBankFunc
+_0812BC48: .4byte gActiveBank
+_0812BC4C: .4byte sub_812B724
+_0812BC50: .4byte gBankInMenu
+ thumb_func_end SafariHandleOpenBag
+
+ thumb_func_start SafariHandlecmd22
+SafariHandlecmd22: @ 812BC54
+ push {lr}
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ thumb_func_end SafariHandlecmd22
+
+ thumb_func_start SafariHandlecmd23
+SafariHandlecmd23: @ 812BC60
+ push {lr}
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ thumb_func_end SafariHandlecmd23
+
+ thumb_func_start SafariHandleHealthBarUpdate
+SafariHandleHealthBarUpdate: @ 812BC6C
+ push {lr}
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ thumb_func_end SafariHandleHealthBarUpdate
+
+ thumb_func_start SafariHandleExpBarUpdate
+SafariHandleExpBarUpdate: @ 812BC78
+ push {lr}
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ thumb_func_end SafariHandleExpBarUpdate
+
+ thumb_func_start SafariHandleStatusIconUpdate
+SafariHandleStatusIconUpdate: @ 812BC84
+ push {lr}
+ ldr r0, _0812BCB0 @ =gHealthboxIDs
+ ldr r1, _0812BCB4 @ =gActiveBank
+ ldrb r1, [r1]
+ adds r0, r1, r0
+ ldrb r0, [r0]
+ ldr r2, _0812BCB8 @ =gBattlePartyID
+ lsls r1, 1
+ adds r1, r2
+ ldrh r2, [r1]
+ movs r1, 0x64
+ muls r1, r2
+ ldr r2, _0812BCBC @ =gPlayerParty
+ adds r1, r2
+ movs r2, 0xB
+ bl sub_8045A5C
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ .align 2, 0
+_0812BCB0: .4byte gHealthboxIDs
+_0812BCB4: .4byte gActiveBank
+_0812BCB8: .4byte gBattlePartyID
+_0812BCBC: .4byte gPlayerParty
+ thumb_func_end SafariHandleStatusIconUpdate
+
+ thumb_func_start SafariHandleStatusAnimation
+SafariHandleStatusAnimation: @ 812BCC0
+ push {lr}
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ thumb_func_end SafariHandleStatusAnimation
+
+ thumb_func_start SafariHandleStatusXor
+SafariHandleStatusXor: @ 812BCCC
+ push {lr}
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ thumb_func_end SafariHandleStatusXor
+
+ thumb_func_start SafariHandlecmd29
+SafariHandlecmd29: @ 812BCD8
+ push {lr}
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ thumb_func_end SafariHandlecmd29
+
+ thumb_func_start SafariHandleDMATransfer
+SafariHandleDMATransfer: @ 812BCE4
+ push {lr}
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ thumb_func_end SafariHandleDMATransfer
+
+ thumb_func_start SafariHandlecmd31
+SafariHandlecmd31: @ 812BCF0
+ push {lr}
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ thumb_func_end SafariHandlecmd31
+
+ thumb_func_start SafariHandlecmd32
+SafariHandlecmd32: @ 812BCFC
+ push {lr}
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ thumb_func_end SafariHandlecmd32
+
+ thumb_func_start SafariHandlecmd33
+SafariHandlecmd33: @ 812BD08
+ push {lr}
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ thumb_func_end SafariHandlecmd33
+
+ thumb_func_start SafariHandlecmd34
+SafariHandlecmd34: @ 812BD14
+ push {lr}
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ thumb_func_end SafariHandlecmd34
+
+ thumb_func_start SafariHandlecmd35
+SafariHandlecmd35: @ 812BD20
+ push {lr}
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ thumb_func_end SafariHandlecmd35
+
+ thumb_func_start SafariHandlecmd36
+SafariHandlecmd36: @ 812BD2C
+ push {lr}
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ thumb_func_end SafariHandlecmd36
+
+ thumb_func_start SafariHandlecmd37
+SafariHandlecmd37: @ 812BD38
+ push {lr}
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ thumb_func_end SafariHandlecmd37
+
+ thumb_func_start SafariHandlecmd38
+SafariHandlecmd38: @ 812BD44
+ push {lr}
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ thumb_func_end SafariHandlecmd38
+
+ thumb_func_start SafariHandlecmd39
+SafariHandlecmd39: @ 812BD50
+ push {lr}
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ thumb_func_end SafariHandlecmd39
+
+ thumb_func_start SafariHandlecmd40
+SafariHandlecmd40: @ 812BD5C
+ push {lr}
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ thumb_func_end SafariHandlecmd40
+
+ thumb_func_start SafariHandleHitAnimation
+SafariHandleHitAnimation: @ 812BD68
+ push {lr}
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ thumb_func_end SafariHandleHitAnimation
+
+ thumb_func_start SafariHandlecmd42
+SafariHandlecmd42: @ 812BD74
+ push {lr}
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ thumb_func_end SafariHandlecmd42
+
+ thumb_func_start SafariHandleEffectivenessSound
+SafariHandleEffectivenessSound: @ 812BD80
+ push {r4,lr}
+ ldr r4, _0812BDBC @ =gActiveBank
+ ldrb r0, [r4]
+ bl GetBankSide
+ lsls r0, 24
+ movs r3, 0x3F
+ cmp r0, 0
+ bne _0812BD94
+ movs r3, 0xC0
+_0812BD94:
+ ldr r2, _0812BDC0 @ =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
+ .align 2, 0
+_0812BDBC: .4byte gActiveBank
+_0812BDC0: .4byte gBattleBufferA
+ thumb_func_end SafariHandleEffectivenessSound
+
+ thumb_func_start SafariHandlecmd44
+SafariHandlecmd44: @ 812BDC4
+ push {lr}
+ ldr r2, _0812BDEC @ =gBattleBufferA
+ ldr r0, _0812BDF0 @ =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 PlayFanfare
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ .align 2, 0
+_0812BDEC: .4byte gBattleBufferA
+_0812BDF0: .4byte gActiveBank
+ thumb_func_end SafariHandlecmd44
+
+ thumb_func_start SafariHandleFaintingCry
+SafariHandleFaintingCry: @ 812BDF4
+ push {lr}
+ ldr r1, _0812BE24 @ =gBattlePartyID
+ ldr r0, _0812BE28 @ =gActiveBank
+ ldrb r0, [r0]
+ lsls r0, 1
+ adds r0, r1
+ ldrh r1, [r0]
+ movs r0, 0x64
+ muls r0, r1
+ ldr r1, _0812BE2C @ =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
+ .align 2, 0
+_0812BE24: .4byte gBattlePartyID
+_0812BE28: .4byte gActiveBank
+_0812BE2C: .4byte gPlayerParty
+ thumb_func_end SafariHandleFaintingCry
+
+ thumb_func_start SafariHandleIntroSlide
+SafariHandleIntroSlide: @ 812BE30
+ push {lr}
+ ldr r1, _0812BE58 @ =gBattleBufferA
+ ldr r0, _0812BE5C @ =gActiveBank
+ ldrb r0, [r0]
+ lsls r0, 9
+ adds r1, 0x1
+ adds r0, r1
+ ldrb r0, [r0]
+ bl sub_80E43C0
+ ldr r2, _0812BE60 @ =gUnknown_02024DE8
+ ldrh r0, [r2]
+ movs r1, 0x1
+ orrs r0, r1
+ strh r0, [r2]
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ .align 2, 0
+_0812BE58: .4byte gBattleBufferA
+_0812BE5C: .4byte gActiveBank
+_0812BE60: .4byte gUnknown_02024DE8
+ thumb_func_end SafariHandleIntroSlide
+
+ thumb_func_start SafariHandleTrainerBallThrow
+SafariHandleTrainerBallThrow: @ 812BE64
+ push {r4,r5,lr}
+ ldr r5, _0812BEA0 @ =gHealthboxIDs
+ ldr r4, _0812BEA4 @ =gActiveBank
+ ldrb r1, [r4]
+ adds r0, r1, r5
+ ldrb r0, [r0]
+ ldr r2, _0812BEA8 @ =gBattlePartyID
+ lsls r1, 1
+ adds r1, r2
+ ldrh r2, [r1]
+ movs r1, 0x64
+ muls r1, r2
+ ldr r2, _0812BEAC @ =gPlayerParty
+ adds r1, r2
+ movs r2, 0xA
+ bl sub_8045A5C
+ ldrb r0, [r4]
+ bl sub_804777C
+ ldrb r0, [r4]
+ adds r0, r5
+ ldrb r0, [r0]
+ bl sub_8043DFC
+ bl SafariBufferExecCompleted
+ pop {r4,r5}
+ pop {r0}
+ bx r0
+ .align 2, 0
+_0812BEA0: .4byte gHealthboxIDs
+_0812BEA4: .4byte gActiveBank
+_0812BEA8: .4byte gBattlePartyID
+_0812BEAC: .4byte gPlayerParty
+ thumb_func_end SafariHandleTrainerBallThrow
+
+ thumb_func_start SafariHandlecmd48
+SafariHandlecmd48: @ 812BEB0
+ push {lr}
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ thumb_func_end SafariHandlecmd48
+
+ thumb_func_start SafariHandlecmd49
+SafariHandlecmd49: @ 812BEBC
+ push {lr}
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ thumb_func_end SafariHandlecmd49
+
+ thumb_func_start SafariHandlecmd50
+SafariHandlecmd50: @ 812BEC8
+ push {lr}
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ thumb_func_end SafariHandlecmd50
+
+ thumb_func_start SafariHandleSpriteInvisibility
+SafariHandleSpriteInvisibility: @ 812BED4
+ push {lr}
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ thumb_func_end SafariHandleSpriteInvisibility
+
+ thumb_func_start SafariHandleBattleAnimation
+SafariHandleBattleAnimation: @ 812BEE0
+ push {r4-r6,lr}
+ sub sp, 0x4
+ ldr r5, _0812BF18 @ =gBattleBufferA
+ ldr r6, _0812BF1C @ =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 _0812BF20
+ bl SafariBufferExecCompleted
+ b _0812BF2C
+ .align 2, 0
+_0812BF18: .4byte gBattleBufferA
+_0812BF1C: .4byte gActiveBank
+_0812BF20:
+ ldr r0, _0812BF34 @ =gBattleBankFunc
+ ldrb r1, [r6]
+ lsls r1, 2
+ adds r1, r0
+ ldr r0, _0812BF38 @ =sub_812B794
+ str r0, [r1]
+_0812BF2C:
+ add sp, 0x4
+ pop {r4-r6}
+ pop {r0}
+ bx r0
+ .align 2, 0
+_0812BF34: .4byte gBattleBankFunc
+_0812BF38: .4byte sub_812B794
+ thumb_func_end SafariHandleBattleAnimation
+
+ thumb_func_start SafariHandleLinkStandbyMsg
+SafariHandleLinkStandbyMsg: @ 812BF3C
+ push {lr}
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ thumb_func_end SafariHandleLinkStandbyMsg
+
+ thumb_func_start SafariHandleResetActionMoveSelection
+SafariHandleResetActionMoveSelection: @ 812BF48
+ push {lr}
+ bl SafariBufferExecCompleted
+ pop {r0}
+ bx r0
+ thumb_func_end SafariHandleResetActionMoveSelection
+
+ thumb_func_start SafariHandlecmd55
+SafariHandlecmd55: @ 812BF54
+ push {r4,lr}
+ ldr r2, _0812BF98 @ =gBattleOutcome
+ ldr r1, _0812BF9C @ =gBattleBufferA
+ ldr r4, _0812BFA0 @ =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, _0812BFA4 @ =gBattleTypeFlags
+ ldrh r1, [r0]
+ movs r0, 0x6
+ ands r0, r1
+ cmp r0, 0x2
+ bne _0812BF90
+ ldr r0, _0812BFA8 @ =gBattleBankFunc
+ ldrb r1, [r4]
+ lsls r1, 2
+ adds r1, r0
+ ldr r0, _0812BFAC @ =sub_812B6AC
+ str r0, [r1]
+_0812BF90:
+ pop {r4}
+ pop {r0}
+ bx r0
+ .align 2, 0
+_0812BF98: .4byte gBattleOutcome
+_0812BF9C: .4byte gBattleBufferA
+_0812BFA0: .4byte gActiveBank
+_0812BFA4: .4byte gBattleTypeFlags
+_0812BFA8: .4byte gBattleBankFunc
+_0812BFAC: .4byte sub_812B6AC
+ thumb_func_end SafariHandlecmd55
+
+ thumb_func_start SafariHandlecmd56
+SafariHandlecmd56: @ 812BFB0
+ bx lr
+ thumb_func_end SafariHandlecmd56
+
+ .align 2, 0 @ Don't pad with nop.
diff --git a/data/battle_811DA74.s b/data/battle_811DA74.s
deleted file mode 100644
index 873c76eb9..000000000
--- a/data/battle_811DA74.s
+++ /dev/null
@@ -1,64 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gLinkPartnerBufferCommands:: @ 83FE4F4
- .4byte LinkPartnerHandleGetAttributes
- .4byte sub_811EC04
- .4byte LinkPartnerHandleSetAttributes
- .4byte sub_811F664
- .4byte sub_811F6D8
- .4byte sub_811F7F4
- .4byte sub_811F9D0
- .4byte sub_811FAE4
- .4byte sub_811FC30
- .4byte sub_811FC3C
- .4byte sub_811FCE8
- .4byte sub_811FDCC
- .4byte sub_811FDD8
- .4byte sub_811FDE4
- .4byte sub_811FDF0
- .4byte sub_811FDFC
- .4byte sub_8120094
- .4byte sub_81200F8
- .4byte sub_8120104
- .4byte sub_8120110
- .4byte sub_812011C
- .4byte sub_8120128
- .4byte sub_8120134
- .4byte sub_8120140
- .4byte LinkPartnerHandleHealthBarUpdate
- .4byte LinkPartnerHandleExpBarUpdate
- .4byte LinkPartnerHandleStatusIconUpdate
- .4byte LinkPartnerHandleStatusAnimation
- .4byte sub_8120324
- .4byte sub_8120330
- .4byte sub_812033C
- .4byte sub_8120348
- .4byte sub_8120354
- .4byte sub_8120360
- .4byte sub_812036C
- .4byte sub_8120378
- .4byte sub_8120384
- .4byte sub_8120390
- .4byte sub_81203AC
- .4byte sub_81203E4
- .4byte sub_81203FC
- .4byte LinkPartnerHandleHitAnimation
- .4byte sub_8120494
- .4byte LinkPartnerHandleEffectivenessSound
- .4byte sub_81204E4
- .4byte LinkPartnerHandleFaintingCry
- .4byte dp01t_2E_3_battle_intro
- .4byte sub_8120588
- .4byte dp01t_30_3_80EB11C
- .4byte sub_8120920
- .4byte sub_812096C
- .4byte sub_8120978
- .4byte sub_81209D8
- .4byte sub_8120A40
- .4byte sub_8120A4C
- .4byte sub_8120A58
- .4byte nullsub_75
diff --git a/data/battle_anim_81258BC.s b/data/battle_anim_81258BC.s
deleted file mode 100644
index 993adbc2e..000000000
--- a/data/battle_anim_81258BC.s
+++ /dev/null
@@ -1,64 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gSafariBufferCommands:: @ 8402080
- .4byte SafariHandleGetAttributes
- .4byte sub_812B870
- .4byte sub_812B87C
- .4byte sub_812B888
- .4byte sub_812B894
- .4byte sub_812B8A0
- .4byte sub_812B8AC
- .4byte sub_812B8B8
- .4byte sub_812B994
- .4byte sub_812B9A0
- .4byte sub_812B9AC
- .4byte sub_812B9B8
- .4byte sub_812B9C4
- .4byte sub_812BA14
- .4byte sub_812BA70
- .4byte sub_812BA7C
- .4byte SafariHandlePrintString
- .4byte SafariHandlePrintStringPlayerOnly
- .4byte sub_812BB10
- .4byte sub_812BBFC
- .4byte sub_812BC08
- .4byte sub_812BC14
- .4byte sub_812BC54
- .4byte sub_812BC60
- .4byte sub_812BC6C
- .4byte sub_812BC78
- .4byte sub_812BC84
- .4byte sub_812BCC0
- .4byte sub_812BCCC
- .4byte sub_812BCD8
- .4byte sub_812BCE4
- .4byte sub_812BCF0
- .4byte sub_812BCFC
- .4byte sub_812BD08
- .4byte sub_812BD14
- .4byte sub_812BD20
- .4byte sub_812BD2C
- .4byte sub_812BD38
- .4byte sub_812BD44
- .4byte sub_812BD50
- .4byte sub_812BD5C
- .4byte sub_812BD68
- .4byte sub_812BD74
- .4byte sub_812BD80
- .4byte sub_812BDC4
- .4byte sub_812BDF4
- .4byte dp01t_2E_6_battle_intro
- .4byte sub_812BE64
- .4byte sub_812BEB0
- .4byte sub_812BEBC
- .4byte sub_812BEC8
- .4byte sub_812BED4
- .4byte sub_812BEE0
- .4byte sub_812BF3C
- .4byte sub_812BF48
- .4byte sub_812BF54
- .4byte nullsub_78
diff --git a/data/battle_anim_8137220.s b/data/battle_anim_8137220.s
deleted file mode 100644
index c1673af9a..000000000
--- a/data/battle_anim_8137220.s
+++ /dev/null
@@ -1,64 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gWallyBufferCommands:: @ 84061A4
- .4byte dp01t_00_5_getattr
- .4byte sub_8138230
- .4byte sub_813823C
- .4byte sub_8138C90
- .4byte sub_8138C9C
- .4byte sub_8138CA8
- .4byte sub_8138CB4
- .4byte sub_8138D38
- .4byte sub_8138E04
- .4byte sub_8138ED0
- .4byte sub_8138EDC
- .4byte sub_8138EE8
- .4byte sub_8138EF4
- .4byte sub_8138F44
- .4byte sub_8138FA0
- .4byte sub_8138FAC
- .4byte sub_8139208
- .4byte dp01t_11_5_message_for_player_only
- .4byte sub_8139298
- .4byte sub_8139378
- .4byte sub_8139384
- .4byte sub_81393EC
- .4byte sub_813942C
- .4byte sub_8139438
- .4byte sub_8139444
- .4byte sub_8139544
- .4byte sub_8139550
- .4byte sub_813955C
- .4byte sub_8139568
- .4byte sub_8139574
- .4byte sub_8139580
- .4byte sub_813958C
- .4byte sub_8139598
- .4byte sub_81395A4
- .4byte sub_81395B0
- .4byte sub_81395BC
- .4byte sub_81395C8
- .4byte sub_81395D4
- .4byte sub_81395E0
- .4byte sub_81395EC
- .4byte sub_81395F8
- .4byte sub_8139604
- .4byte sub_8139674
- .4byte sub_8139680
- .4byte sub_81396B0
- .4byte sub_81396E0
- .4byte dp01t_2E_5_battle_intro
- .4byte sub_8139750
- .4byte sub_8139AA0
- .4byte sub_8139B20
- .4byte sub_8139B2C
- .4byte sub_8139B38
- .4byte sub_8139B44
- .4byte sub_8139BA0
- .4byte sub_8139BAC
- .4byte sub_8139BB8
- .4byte nullsub_80
diff --git a/data/battle_moves.inc b/data/battle_moves.s
index ff7e2cb33..ea32446d2 100644
--- a/data/battle_moves.inc
+++ b/data/battle_moves.s
@@ -1,3 +1,8 @@
+ .include "asm/macros.inc"
+ .include "constants/constants.inc"
+
+ .section .rodata
+
.align 2
gBattleMoves:: @ 81FB12C
@ NONE
diff --git a/data/data2b.s b/data/data2b.s
index 0387b6699..329384396 100644
--- a/data/data2b.s
+++ b/data/data2b.s
@@ -76,129 +76,3 @@ gUnknown_081FAF4C:: @ 81FAF4C
.4byte 0x0200a000
.4byte 0x0200c000
.4byte 0x0200e000
-
- .align 2
-gOpponentBufferCommands:: @ 81FAF5C
- .4byte OpponentHandleGetAttributes
- .4byte dp01t_01_2_read_pokmon_data_slice
- .4byte OpponentHandleSetAttributes
- .4byte sub_8034744
- .4byte OpponentHandleLoadPokeSprite
- .4byte OpponentHandleSendOutPoke
- .4byte OpponentHandleReturnPokeToBall
- .4byte OpponentHandleTrainerThrow
- .4byte OpponentHandleTrainerSlide
- .4byte OpponentHandleTrainerSlideBack
- .4byte sub_8035030
- .4byte sub_80350D4
- .4byte sub_80350E0
- .4byte OpponentHandleBallThrow
- .4byte OpponentHandlePause
- .4byte OpponentHandleMoveAnimation
- .4byte OpponentHandlePrintString
- .4byte OpponentHandlePrintStringPlayerOnly
- .4byte sub_803540C
- .4byte sub_803541C
- .4byte sub_8035428
- .4byte sub_8035590
- .4byte sub_80355C0
- .4byte sub_80356C0
- .4byte OpponentHandleHealthBarUpdate
- .4byte OpponentHandleExpBarUpdate
- .4byte OpponentHandleStatusIconUpdate
- .4byte OpponentHandleStatusAnimation
- .4byte OpponentHandleStatusXor
- .4byte sub_80358B0
- .4byte OpponentHandleDMATransfer
- .4byte sub_80358C8
- .4byte sub_80358D4
- .4byte sub_80358E0
- .4byte sub_80358EC
- .4byte sub_80358F8
- .4byte sub_8035904
- .4byte sub_8035910
- .4byte sub_803592C
- .4byte sub_8035964
- .4byte sub_803597C
- .4byte OpponentHandleHitAnimation
- .4byte sub_8035A14
- .4byte OpponentHandleEffectivenessSound
- .4byte sub_8035A64
- .4byte OpponentHandleFaintingCry
- .4byte dp01t_2E_7_battle_intro
- .4byte sub_8035B04
- .4byte dp01t_30_7_0803D67C
- .4byte sub_8035E6C
- .4byte sub_8035EB8
- .4byte OpponentHandleSpriteInvisibility
- .4byte OpponentHandleBattleAnimation
- .4byte OpponentHandleLinkStandbyMsg
- .4byte OpponentHandleResetActionMoveSelection
- .4byte sub_8035FA4
- .4byte nullsub_46
-
-@ unreferenced unknown values
- .byte 0xB0, 0xB0, 0xC8, 0x98, 0x28, 0x28, 0x28, 0x20
-
- .align 2
-gLinkOpponentBufferCommands:: @ 81FB048
- .4byte LinkOpponentHandleGetAttributes
- .4byte sub_803889C
- .4byte sub_80388A8
- .4byte sub_8039220
- .4byte sub_8039294
- .4byte sub_80393E4
- .4byte sub_80395B4
- .4byte sub_80396D0
- .4byte sub_80398A4
- .4byte sub_80398B0
- .4byte sub_803995C
- .4byte sub_8039A00
- .4byte sub_8039A0C
- .4byte sub_8039A18
- .4byte sub_8039A24
- .4byte sub_8039A30
- .4byte sub_8039CC8
- .4byte sub_8039D2C
- .4byte sub_8039D38
- .4byte sub_8039D44
- .4byte sub_8039D50
- .4byte sub_8039D5C
- .4byte sub_8039D68
- .4byte sub_8039D74
- .4byte sub_8039D80
- .4byte sub_8039E70
- .4byte sub_8039E7C
- .4byte sub_8039EF0
- .4byte sub_8039F58
- .4byte sub_8039F64
- .4byte sub_8039F70
- .4byte sub_8039F7C
- .4byte sub_8039F88
- .4byte sub_8039F94
- .4byte sub_8039FA0
- .4byte sub_8039FAC
- .4byte sub_8039FB8
- .4byte sub_8039FC4
- .4byte sub_8039FE0
- .4byte sub_803A018
- .4byte sub_803A030
- .4byte dp01t_29_4_blink
- .4byte sub_803A0C8
- .4byte sub_803A0D4
- .4byte sub_803A118
- .4byte sub_803A148
- .4byte dp01t_2E_4_battle_intro
- .4byte sub_803A1B8
- .4byte sub_803A3DC
- .4byte sub_803A520
- .4byte sub_803A56C
- .4byte sub_803A578
- .4byte bx_exec_buffer_A_ch0_tbl4
- .4byte sub_803A640
- .4byte sub_803A64C
- .4byte sub_803A658
- .4byte nullsub_48
-
-@ 81FB12C
- .include "data/battle_moves.inc"
diff --git a/include/battle.h b/include/battle.h
index 08ed5cf58..72211f50f 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -689,13 +689,13 @@ extern u8 gBattleTextBuff1[];
//function declarations of buffer emits
void EmitGetAttributes(u8 buffID, u8 request, u8 c); //0x0
-void dp01_build_cmdbuf_x01_a_b_0(u8 a, u8 b, u8 c); //0x1
+void Emitcmd1(u8 a, u8 b, u8 c); //0x1
void EmitSetAttributes(u8 a, u8 request, u8 c, u8 bytes, void *data); //0x2
-void EmitSwitchInAnim(u8 a, u8 b, u8 c); //0x5
+void EmitSendOutPoke(u8 a, u8 b, u8 c); //0x5
void EmitReturnPokeToBall(u8 a, u8 b); //0x6
void EmitTrainerSlide(u8 a); //0x8
-void EmitFaintAnimation(u8 a); //0xA
-void EmitBallThrowAnim(u8 a, u8 shakes); //0xD
+void Emitcmd10(u8 a); //0xA
+void EmitBallThrow(u8 a, u8 shakes); //0xD
//void EmitMoveAnimation(u8 a, u16 move, u8 turn, u16 power, s32 dmg, u8 happiness, void *disable_struct); //0xF
void EmitPrintString(u8 a, u16 stringID); //0x10
//void EmitPrintStringPlayerOnly(u8 a, u16 stringID); //0x11
@@ -707,15 +707,15 @@ void EmitStatusAnimation(u8 a, u8 b, u32 c); //0x1B
void EmitStatusXor(u8 a, u8 b); //0x1C
void EmitHitAnimation(u8 a); //0x29
void EmitEffectivenessSound(u8 a, u16 sound); //0x2B
-void EmitPlaySound(u8 a, u16 sound); //0x2C
+void Emitcmd44(u8 a, u16 sound); //0x2C
void EmitFaintingCry(u8 a); //0x2D
-void EmitBattleIntroSlide(u8 a, u8 b); //0x2E
-void dp01_build_cmdbuf_x30_TODO(u8 a, u8 *b, u8 c); //0x30
-void dp01_build_cmdbuf_x31_31_31_31(u8 a); //0x31
+void EmitIntroSlide(u8 a, u8 b); //0x2E
+void Emitcmd48(u8 a, u8 *b, u8 c); //0x30
+void Emitcmd49(u8 a); //0x31
void EmitSpriteInvisibility(u8 a, u8 b); //0x33
void EmitBattleAnimation(u8 a, u8 b, u16 c); //0x34
void EmitResetActionMoveSelection(u8 a, u8 b); //0x36
-void dp01_build_cmdbuf_x37_a(u8 a, u8 b); //0x37
+void Emitcmd55(u8 a, u8 b); //0x37
#define REQUEST_ALL_BATTLE 0x0
#define REQUEST_SPECIES_BATTLE 0x1
diff --git a/include/rom3.h b/include/rom3.h
index 1fa55d11a..95ef5cca4 100644
--- a/include/rom3.h
+++ b/include/rom3.h
@@ -15,53 +15,53 @@ void sub_800C1A8(u8);
void sub_800C35C(void);
void sub_800C47C(u8);
void EmitGetAttributes(u8 a, u8 b, u8 c);
-void dp01_build_cmdbuf_x01_a_b_0(u8 a, u8 b, u8 c);
-void dp01_build_cmdbuf_x04_4_4_4(u8 a);
-void EmitSwitchInAnim(u8, u8, u8);
+void Emitcmd1(u8 a, u8 b, u8 c);
+void EmitLoadPokeSprite(u8 a);
+void EmitSendOutPoke(u8, u8, u8);
void EmitReturnPokeToBall(u8 a, u8 b);
-void dp01_build_cmdbuf_x07_7_7_7(u8 a);
+void EmitTrainerThrow(u8 a);
void EmitTrainerSlide(u8 a);
-void dp01_build_cmdbuf_x09_9_9_9(u8 a);
-void EmitFaintAnimation(u8 a);
-void dp01_build_cmdbuf_x0B_B_B_B(u8 a);
-void dp01_build_cmdbuf_x0C_C_C_C(u8 a);
-void EmitBallThrowAnim(u8 a, u8 b);
+void EmitTrainerSlideBack(u8 a);
+void Emitcmd10(u8 a);
+void Emitcmd11(u8 a);
+void Emitcmd12(u8 a);
+void EmitBallThrow(u8 a, u8 b);
void EmitMoveAnimation(u8 a, u16 b, u8 c, u16 d, s32 e, u8 f, struct DisableStruct *g);
void EmitPrintString(u8 a, u16 b);
void EmitPrintStringPlayerOnly(u8 a, u16 stringID);
-void dp01_build_cmdbuf_x12_a_bb(u8 a, u8 b, u16 c);
-void sub_800CBA4(u8 a, u8 b, u8 c, u8 *d);
-void sub_800CBE0(u8 a, u8 *b);
+void Emitcmd18(u8 a, u8 b, u16 c);
+void Emitcmd20(u8 a, u8 b, u8 c, u8 *d);
+void EmitOpenBag(u8 a, u8 *b);
void EmitChoosePokemon(u8 a, u8 b, u8 c, u8 d, u8 *e);
-void dp01_build_cmdbuf_x17_17_17_17(u8 a);
+void Emitcmd23(u8 a);
void EmitHealthBarUpdate(u8 a, u16 b);
void EmitExpBarUpdate(u8 a, u8 b, u16 c);
void EmitStatusIconUpdate(u8 a, u32 b, u32 c);
void EmitStatusAnimation(u8 a, u8 b, u32 c);
void EmitStatusXor(u8 a, u8 b);
-void dp01_build_cmdbuf_x1D_1D_numargs_varargs(u8, u16, u8 *);
-void dp01_build_cmdbuf_x21_a_bb(u8 a, u8 b, u16 c);
-void dp01_build_cmdbuf_x22_a_three_bytes(u8 a, u8 b, u8 *c);
-void dp01_build_cmdbuf_x23_aa_0(u8 a, u16 b);
-void dp01_build_cmdbuf_x24_aa_0(u8 a, u16 b);
-void dp01_build_cmdbuf_x25_25_25_25(u8 a);
-void dp01_build_cmdbuf_x26_a(u8 a, u8 b);
-void dp01_build_cmdbuf_x27_27_27_27(u8 a);
-void dp01_build_cmdbuf_x28_28_28_28(u8 a);
+void Emitcmd29(u8, u16, u8 *);
+void Emitcmd33(u8 a, u8 b, u16 c);
+void Emitcmd34(u8 a, u8 b, u8 *c);
+void Emitcmd35(u8 a, u16 b);
+void Emitcmd36(u8 a, u16 b);
+void Emitcmd37(u8 a);
+void Emitcmd38(u8 a, u8 b);
+void Emitcmd39(u8 a);
+void Emitcmd40(u8 a);
void EmitHitAnimation(u8 a);
-void dp01_build_cmdbuf_x2A_2A_2A_2A(u8 a);
+void Emitcmd42(u8 a);
void EmitEffectivenessSound(u8 a, u16 b);
-void EmitPlaySound(u8 a, u16 b);
+void Emitcmd44(u8 a, u16 b);
void EmitFaintingCry(u8 a);
-void EmitBattleIntroSlide(u8 a, u8 b);
-void dp01_build_cmdbuf_x2F_2F_2F_2F(u8 a);
-void dp01_build_cmdbuf_x30_TODO(u8 a, u8 *b, u8 c);
-void dp01_build_cmdbuf_x31_31_31_31(u8 a);
-void dp01_build_cmdbuf_x32_32_32_32(u8 a);
+void EmitIntroSlide(u8 a, u8 b);
+void EmitTrainerBallThrow(u8 a);
+void Emitcmd48(u8 a, u8 *b, u8 c);
+void Emitcmd49(u8 a);
+void Emitcmd50(u8 a);
void EmitSpriteInvisibility(u8 a, u8 b);
void EmitBattleAnimation(u8 a, u8 b, u16 c);
void EmitLinkStandbyMsg(u8 a, u8 b);
void EmitResetActionMoveSelection(u8 a, u8 b);
-void dp01_build_cmdbuf_x37_a(u8 a, u8 b);
+void Emitcmd55(u8 a, u8 b);
#endif // GUARD_ROM3_H
diff --git a/ld_script.txt b/ld_script.txt
index e89a23fc0..3a04171c7 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -55,12 +55,12 @@ SECTIONS {
asm/battle_2.o(.text);
src/battle/battle_3.o(.text);
src/battle/battle_4.o(.text);
- src/battle/battle_5.o(.text);
- src/battle/battle_6.o(.text);
+ src/battle/battle_controller_player.o(.text);
src/battle/battle_7.o(.text);
- src/battle/battle_8.o(.text);
+ src/battle/battle_controller_opponent.o(.text);
asm/battle_9.o(.text);
- src/battle/battle_10.o(.text);
+ asm/battle_controller_linkopponent1.o(.text);
+ src/battle/battle_controller_linkopponent2.o(.text);
src/pokemon/pokemon_1.o(.text);
src/battle/calculate_base_damage.o(.text);
src/pokemon/pokemon_2.o(.text);
@@ -227,7 +227,7 @@ SECTIONS {
src/field/landmark.o(.text);
src/field/fldeff_strength.o(.text);
src/battle/battle_transition.o(.text);
- src/battle/battle_811DA74.o(.text);
+ src/battle/battle_controller_linkpartner.o(.text);
src/battle/battle_message.o(.text);
src/field/choose_party.o(.text);
asm/cable_car.o(.text);
@@ -239,8 +239,9 @@ SECTIONS {
asm/field_effect_helpers.o(.text);
asm/contest_ai.o(.text);
asm/battle_anim_81258BC.o(.text);
- src/battle/battle_anim_81258BC.o(.text);
- asm/battle_anim_81258BC.o(.text_812BBFC);
+ asm/battle_controller_safari.o(.text);
+ src/battle/battle_controller_safari.o(.text);
+ asm/battle_controller_safari.o(.text_812BBFC);
src/field/fldeff_sweetscent.o(.text);
asm/battle_anim_812C144.o(.text);
src/pokemon/learn_move.o(.text);
@@ -249,7 +250,7 @@ SECTIONS {
src/field/roamer.o(.text);
asm/battle_tower.o(.text);
src/field/use_pokeblock.o(.text);
- src/battle/battle_anim_8137220.o(.text);
+ src/battle/battle_controller_wally.o(.text);
src/field/player_pc.o(.text);
src/scene/intro.o(.text);
src/field/field_region_map.o(.text);
@@ -330,8 +331,11 @@ SECTIONS {
data/main_menu.o(.rodata);
data/data2a.o(.rodata);
src/battle/battle_4.o(.rodata);
- src/battle/battle_5.o(.rodata);
+ src/battle/battle_controller_player.o(.rodata);
data/data2b.o(.rodata);
+ src/battle/battle_controller_opponent.o(.rodata);
+ src/battle/battle_controller_linkopponent2.o(.rodata);
+ data/battle_moves.o(.rodata);
src/battle/battle_3.o(.rodata);
src/pokemon/pokemon_data.o(.rodata);
. = ALIGN(4);
@@ -445,21 +449,21 @@ SECTIONS {
data/pokedex_cry_screen.o(.rodata);
data/landmark.o(.rodata);
src/battle/battle_transition.o(.rodata);
- data/battle_811DA74.o(.rodata);
+ src/battle/battle_controller_linkpartner.o(.rodata);
data/battle_message.o(.rodata);
src/field/choose_party.o(.rodata);
data/cable_car.o(.rodata);
src/engine/save.o(.rodata);
data/field_effect_helpers.o(.rodata);
data/contest_ai.o(.rodata);
- data/battle_anim_81258BC.o(.rodata);
+ src/battle/battle_controller_safari.o(.rodata);
data/battle_anim_812C144.o(.rodata);
src/pokemon/learn_move.o(.rodata);
src/field/decoration_inventory.o(.rodata);
src/field/roamer.o(.rodata);
data/battle_tower.o(.rodata);
src/field/use_pokeblock.o(.rodata);
- data/battle_anim_8137220.o(.rodata);
+ src/battle/battle_controller_wally.o(.rodata);
src/field/player_pc.o(.rodata);
src/scene/intro.o(.rodata);
data/battle_anim_813F0F4.o(.rodata);
diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c
index bdd908ea5..106d3333b 100644
--- a/src/battle/battle_2.c
+++ b/src/battle/battle_2.c
@@ -1866,7 +1866,7 @@ static void BattlePrepIntroSlide(void)
if (gBattleExecBuffer == 0)
{
gActiveBank = GetBankByPlayerAI(0);
- EmitBattleIntroSlide(0, gBattleTerrain);
+ EmitIntroSlide(0, gBattleTerrain);
MarkBufferBankForExecution(gActiveBank);
gBattleMainFunc = sub_8011384;
gBattleCommunication[0] = 0;
@@ -1910,7 +1910,7 @@ void sub_8011384(void)
if (GetBankIdentity(gActiveBank) == 0)
{
- dp01_build_cmdbuf_x07_7_7_7(0);
+ EmitTrainerThrow(0);
MarkBufferBankForExecution(gActiveBank);
}
@@ -1918,7 +1918,7 @@ void sub_8011384(void)
{
if (GetBankIdentity(gActiveBank) == 1)
{
- dp01_build_cmdbuf_x07_7_7_7(0);
+ EmitTrainerThrow(0);
MarkBufferBankForExecution(gActiveBank);
}
if (GetBankSide(gActiveBank) == 1
@@ -1931,7 +1931,7 @@ void sub_8011384(void)
&& !(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK)))
{
GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBank].species), 2);
- dp01_build_cmdbuf_x04_4_4_4(0);
+ EmitLoadPokeSprite(0);
MarkBufferBankForExecution(gActiveBank);
}
}
@@ -1941,7 +1941,7 @@ void sub_8011384(void)
if (GetBankIdentity(gActiveBank) == 2
|| GetBankIdentity(gActiveBank) == 3)
{
- dp01_build_cmdbuf_x07_7_7_7(0);
+ EmitTrainerThrow(0);
MarkBufferBankForExecution(gActiveBank);
}
}
@@ -1979,7 +1979,7 @@ void bc_801333C(void)
}
}
gActiveBank = GetBankByPlayerAI(1);
- dp01_build_cmdbuf_x30_TODO(0, (u8 *)sp0, 0x80);
+ Emitcmd48(0, (u8 *)sp0, 0x80);
MarkBufferBankForExecution(gActiveBank);
for (i = 0; i < 6; i++)
@@ -1997,7 +1997,7 @@ void bc_801333C(void)
}
}
gActiveBank = GetBankByPlayerAI(0);
- dp01_build_cmdbuf_x30_TODO(0, (u8 *)sp0, 0x80);
+ Emitcmd48(0, (u8 *)sp0, 0x80);
MarkBufferBankForExecution(gActiveBank);
gBattleMainFunc = bc_battle_begin_message;
@@ -2063,13 +2063,13 @@ void sub_8011834(void)
{
if (GetBankIdentity(gActiveBank) == 1)
{
- dp01_build_cmdbuf_x2F_2F_2F_2F(0);
+ EmitTrainerBallThrow(0);
MarkBufferBankForExecution(gActiveBank);
}
if ((gBattleTypeFlags & BATTLE_TYPE_MULTI)
&& GetBankIdentity(gActiveBank) == 3)
{
- dp01_build_cmdbuf_x2F_2F_2F_2F(0);
+ EmitTrainerBallThrow(0);
MarkBufferBankForExecution(gActiveBank);
}
}
@@ -2115,13 +2115,13 @@ void sub_80119B4(void)
{
if (GetBankIdentity(gActiveBank) == 0)
{
- dp01_build_cmdbuf_x2F_2F_2F_2F(0);
+ EmitTrainerBallThrow(0);
MarkBufferBankForExecution(gActiveBank);
}
if ((gBattleTypeFlags & BATTLE_TYPE_MULTI)
&& GetBankIdentity(gActiveBank) == 2)
{
- dp01_build_cmdbuf_x2F_2F_2F_2F(0);
+ EmitTrainerBallThrow(0);
MarkBufferBankForExecution(gActiveBank);
}
}
@@ -2140,7 +2140,7 @@ void unref_sub_8011A68(void)
{
if (GetBankSide(gActiveBank) == 0)
{
- EmitSwitchInAnim(0, gBattlePartyID[gActiveBank], 0);
+ EmitSendOutPoke(0, gBattlePartyID[gActiveBank], 0);
MarkBufferBankForExecution(gActiveBank);
}
}
@@ -2429,7 +2429,7 @@ void sub_8012324(void)
}
else
{
- dp01_build_cmdbuf_x12_a_bb(0, gActionForBanks[0], gBattleBufferB[0][1] | (gBattleBufferB[0][2] << 8));
+ Emitcmd18(0, gActionForBanks[0], gBattleBufferB[0][1] | (gBattleBufferB[0][2] << 8));
MarkBufferBankForExecution(gActiveBank);
gBattleCommunication[gActiveBank]++;
}
diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c
index 6dd5d7df6..a796ace94 100644
--- a/src/battle/battle_4.c
+++ b/src/battle/battle_4.c
@@ -5634,7 +5634,7 @@ static void atk1A_faint_animation(void)
if (gBattleExecBuffer == 0)
{
gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
- EmitFaintAnimation(0);
+ Emitcmd10(0);
MarkBufferBankForExecution(gActiveBank);
gBattlescriptCurrInstr += 2;
}
@@ -10125,7 +10125,7 @@ static void atk4E_switchin_anim(void)
GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBank].species), 2);
}
gAbsentBankFlags &= ~(gBitTable[gActiveBank]);
- EmitSwitchInAnim(0, gBattlePartyID[gActiveBank], BSScriptRead8(gBattlescriptCurrInstr + 2));
+ EmitSendOutPoke(0, gBattlePartyID[gActiveBank], BSScriptRead8(gBattlescriptCurrInstr + 2));
MarkBufferBankForExecution(gActiveBank);
gBattlescriptCurrInstr += 3;
}
@@ -10446,7 +10446,7 @@ _08022BC4:\n\
bics r0, r1\n\
str r0, [r2]\n\
movs r0, 0\n\
- bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\
+ bl Emitcmd42\n\
ldrb r0, [r4]\n\
bl MarkBufferBankForExecution\n\
b _08022C7E\n\
@@ -10531,7 +10531,7 @@ _08022C7E:\n\
bics r0, r1\n\
str r0, [r2]\n\
movs r0, 0\n\
- bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\
+ bl Emitcmd42\n\
ldrb r0, [r4]\n\
bl MarkBufferBankForExecution\n\
b _08022D40\n\
@@ -10615,7 +10615,7 @@ _08022D40:\n\
bics r0, r1\n\
str r0, [r2]\n\
movs r0, 0\n\
- bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\
+ bl Emitcmd42\n\
ldrb r0, [r4]\n\
bl MarkBufferBankForExecution\n\
b _08022DF6\n\
@@ -10702,7 +10702,7 @@ _08022DF6:\n\
bics r0, r1\n\
str r0, [r2]\n\
movs r0, 0\n\
- bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\
+ bl Emitcmd42\n\
ldrb r0, [r4]\n\
bl MarkBufferBankForExecution\n\
b _08022EB8\n\
@@ -10900,7 +10900,7 @@ _08022F92:\n\
bics r0, r1\n\
str r0, [r7]\n\
movs r0, 0\n\
- bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\
+ bl Emitcmd42\n\
ldrb r0, [r6]\n\
bl MarkBufferBankForExecution\n\
b _0802303A\n\
@@ -10977,7 +10977,7 @@ _0802303A:\n\
bics r0, r1\n\
str r0, [r2]\n\
movs r0, 0\n\
- bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\
+ bl Emitcmd42\n\
ldrb r0, [r5]\n\
bl MarkBufferBankForExecution\n\
b _080230EE\n\
@@ -11426,7 +11426,7 @@ static void atk54_effectiveness_sound(void)
static void atk55_play_sound(void)
{
gActiveBank = gBankAttacker;
- EmitPlaySound(0, BS2ScriptRead16(gBattlescriptCurrInstr + 1));
+ Emitcmd44(0, BS2ScriptRead16(gBattlescriptCurrInstr + 1));
MarkBufferBankForExecution(gActiveBank);
gBattlescriptCurrInstr += 3;
}
@@ -11442,7 +11442,7 @@ static void atk56_fainting_cry(void)
static void atk57(void)
{
gActiveBank = GetBankByPlayerAI(0);
- dp01_build_cmdbuf_x37_a(0, gBattleOutcome);
+ Emitcmd55(0, gBattleOutcome);
MarkBufferBankForExecution(gActiveBank);
gBattlescriptCurrInstr += 1;
}
@@ -12011,7 +12011,7 @@ static void atk61_8025BA4(void)
hpStatus[i].status = GetMonData(&party[i], MON_DATA_STATUS);
}
}
- dp01_build_cmdbuf_x30_TODO(0, (u8*)(hpStatus), 1);
+ Emitcmd48(0, (u8*)(hpStatus), 1);
MarkBufferBankForExecution(gActiveBank);
gBattlescriptCurrInstr += 2;
}
@@ -12019,7 +12019,7 @@ static void atk61_8025BA4(void)
static void atk62_08025C6C(void)
{
gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
- dp01_build_cmdbuf_x31_31_31_31(0);
+ Emitcmd49(0);
MarkBufferBankForExecution(gActiveBank);
gBattlescriptCurrInstr += 2;
}
@@ -17789,13 +17789,13 @@ void atkEF_pokeball_catch_calculation(void)
gBankTarget = gBankAttacker ^ 1;
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
{
- EmitBallThrowAnim(0, 5);
+ EmitBallThrow(0, 5);
MarkBufferBankForExecution(gActiveBank);
gBattlescriptCurrInstr = BattleScript_TrainerBallBlock;
}
else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL)
{
- EmitBallThrowAnim(0, 4);
+ EmitBallThrow(0, 4);
MarkBufferBankForExecution(gActiveBank);
gBattlescriptCurrInstr = BattleScript_WallyBallThrow;
}
@@ -17873,7 +17873,7 @@ void atkEF_pokeball_catch_calculation(void)
}
if (odds > 254) //poke caught
{
- EmitBallThrowAnim(0, 4);
+ EmitBallThrow(0, 4);
MarkBufferBankForExecution(gActiveBank);
gBattlescriptCurrInstr = BattleScript_SuccessBallThrow;
SetMonData(&gEnemyParty[gBattlePartyID[gBankTarget]], MON_DATA_POKEBALL, (const void*) &gLastUsedItem);
@@ -17890,7 +17890,7 @@ void atkEF_pokeball_catch_calculation(void)
for (shakes = 0; shakes < 4 && Random() < odds; shakes++) {}
if (gLastUsedItem == ITEM_MASTER_BALL)
shakes = 4; //why calculate the shakes before that check?
- EmitBallThrowAnim(0, shakes);
+ EmitBallThrow(0, shakes);
MarkBufferBankForExecution(gActiveBank);
if (shakes == 4) //poke caught, copy of the code above
{
diff --git a/src/battle/battle_5.c b/src/battle/battle_5.c
deleted file mode 100644
index 5972c0cb1..000000000
--- a/src/battle/battle_5.c
+++ /dev/null
@@ -1,1579 +0,0 @@
-#include "global.h"
-#include "data2.h"
-#include "battle.h"
-#include "battle_interface.h"
-#include "item.h"
-#include "items.h"
-#include "link.h"
-#include "m4a.h"
-#include "main.h"
-#include "menu_cursor.h"
-#include "moves.h"
-#include "palette.h"
-#include "pokemon.h"
-#include "rom3.h"
-#include "songs.h"
-#include "sound.h"
-#include "string_util.h"
-#include "task.h"
-#include "text.h"
-#include "util.h"
-
-extern u8 gActiveBank;
-extern void (*gBattleBankFunc[])(void);
-extern bool8 gDoingBattleAnim;
-extern u16 gBattleTypeFlags;
-extern u32 gBattleExecBuffer;
-extern u8 gBattleBufferA[][0x200];
-extern u8 gObjectBankIDs[];
-extern u8 gActionSelectionCursor[];
-extern u8 gMoveSelectionCursor[];
-extern u8 gAbsentBankFlags;
-extern u8 gUnknown_03004344;
-extern u8 gNoOfAllBanks;
-extern u16 gBattlePartyID[];
-//extern const struct BattleMove gBattleMoves[];
-extern u16 gUnknown_030042A0;
-extern u16 gUnknown_030042A4;
-extern struct Window gUnknown_03004210;
-extern const u8 gUnknown_08400D89[];
-extern u8 gUnknown_03004348;
-extern struct BattlePokemon gBattleMons[];
-extern MainCallback gPreBattleCallback1;
-extern u8 gHealthboxIDs[];
-extern struct MusicPlayerInfo gMPlay_BGM;
-extern u8 gUnknown_0300434C[];
-extern u8 gUnknown_0202E8F4;
-extern u8 gUnknown_0202E8F5;
-extern u8 gUnknown_02038470[];
-extern u16 gScriptItemId;
-extern u8 gDisplayedStringBattle[];
-extern const u8 gUnknown_08400CE0[];
-
-extern void dp11b_obj_instanciate(u8, u8, s8, s8);
-extern u8 GetBankIdentity(u8);
-extern u8 GetBankByPlayerAI(u8);
-extern void dp11b_obj_free(u8, u8);
-extern void sub_8010520(struct Sprite *);
-extern void sub_8010574(struct Sprite *);
-extern bool8 IsDoubleBattle();
-extern void sub_804777C();
-extern void sub_8141828();
-extern void sub_8094E20(u8);
-extern void nullsub_14(void);
-extern void sub_80A6DCC(void);
-extern void ReshowBattleScreenAfterMenu(void);
-
-void PlayerHandleGetAttributes(void);
-void sub_802ECF0(void);
-void PlayerHandleSetAttributes(void);
-void sub_802F7CC(void);
-void PlayerHandleLoadPokeSprite(void);
-void PlayerHandleSendOutPoke(void);
-void PlayerHandleReturnPokeToBall(void);
-void PlayerHandleTrainerThrow(void);
-void PlayerHandleTrainerSlide(void);
-void PlayerHandleTrainerSlideBack(void);
-void sub_802FE7C(void);
-void sub_802FF60(void);
-void sub_802FF80(void);
-void PlayerHandleBallThrow(void);
-void PlayerHandlePuase(void);
-void PlayerHandleMoveAnimation(void);
-void PlayerHandlePrintString(void);
-void PlayerHandlePrintStringPlayerOnly(void);
-void sub_803037C(void);
-void nullsub_42(void);
-void sub_8030468(void);
-void PlayerHandleOpenBag(void);
-void sub_8030594(void);
-void sub_8030674(void);
-void PlayerHandleHealthBarUpdate(void);
-void PlayerHandleExpBarUpdate(void);
-void PlayerHandleStatusIconUpdate(void);
-void PlayerHandleStatusAnimation(void);
-void PlayerHandleStatusXor(void);
-void sub_803097C(void);
-void PlayerHandleDMATransfer(void);
-void sub_8030A3C(void);
-void sub_8030A6C(void);
-void sub_8030A78(void);
-void sub_8030A8C(void);
-void sub_8030AA0(void);
-void sub_8030AB4(void);
-void sub_8030AC8(void);
-void sub_8030AE4(void);
-void sub_8030B1C(void);
-void sub_8030B34(void);
-void PlayerHandleHitAnimation(void);
-void sub_8030BCC(void);
-void PlayerHandleEffectivenessSound(void);
-void sub_8030C1C(void);
-void PlayerHandleFaintingCry(void);
-void PlayerHandleIntroSlide(void);
-void PlayerHandleTrainerBallThrow(void);
-void sub_8030FAC(void);
-void sub_80310A4(void);
-void sub_80310F0(void);
-void PlayerHandleSpriteInvisibility(void);
-void PlayerHandleBattleAnimation(void);
-void PlayerHandleLinkStandbyMsg(void);
-void PlayerHandleResetActionMoveSelection(void);
-void sub_80312A0(void);
-void nullsub_43(void);
-
-const u8 gString_TurnJP[] = _("ターン");
-
-void (*const gPlayerBufferCommands[])(void) =
-{
- PlayerHandleGetAttributes,
- sub_802ECF0,
- PlayerHandleSetAttributes,
- sub_802F7CC,
- PlayerHandleLoadPokeSprite,
- PlayerHandleSendOutPoke,
- PlayerHandleReturnPokeToBall,
- PlayerHandleTrainerThrow,
- PlayerHandleTrainerSlide,
- PlayerHandleTrainerSlideBack,
- sub_802FE7C,
- sub_802FF60,
- sub_802FF80,
- PlayerHandleBallThrow,
- PlayerHandlePuase,
- PlayerHandleMoveAnimation,
- PlayerHandlePrintString,
- PlayerHandlePrintStringPlayerOnly,
- sub_803037C,
- nullsub_42,
- sub_8030468,
- PlayerHandleOpenBag,
- sub_8030594,
- sub_8030674,
- PlayerHandleHealthBarUpdate,
- PlayerHandleExpBarUpdate,
- PlayerHandleStatusIconUpdate,
- PlayerHandleStatusAnimation,
- PlayerHandleStatusXor,
- sub_803097C,
- PlayerHandleDMATransfer,
- sub_8030A3C,
- sub_8030A6C,
- sub_8030A78,
- sub_8030A8C,
- sub_8030AA0,
- sub_8030AB4,
- sub_8030AC8,
- sub_8030AE4,
- sub_8030B1C,
- sub_8030B34,
- PlayerHandleHitAnimation,
- sub_8030BCC,
- PlayerHandleEffectivenessSound,
- sub_8030C1C,
- PlayerHandleFaintingCry,
- PlayerHandleIntroSlide,
- PlayerHandleTrainerBallThrow,
- sub_8030FAC,
- sub_80310A4,
- sub_80310F0,
- PlayerHandleSpriteInvisibility,
- PlayerHandleBattleAnimation,
- PlayerHandleLinkStandbyMsg,
- PlayerHandleResetActionMoveSelection,
- sub_80312A0,
- nullsub_43,
-};
-
-void PlayerBufferRunCommand(void);
-void sub_802C2EC(void);
-void sub_802C68C(void);
-void sub_802CA60(void);
-void sub_802D730(void);
-void sub_802DA9C(u8);
-void sub_802DB6C(u8);
-void sub_802DCB0(u8);
-void sub_802DD10(u8);
-void sub_802DDC4(u8);
-void sub_802DF88(void);
-void sub_802E03C(void);
-void sub_802E12C(s32, const u8 *);
-void sub_802E1B0(void);
-void sub_802E220(void);
-void sub_802E2D4(void);
-void sub_802E3B4(u8, int);
-void nullsub_7(u8);
-void b_link_standby_message(void);
-
-void nullsub_91(void)
-{
-}
-
-void SetBankFuncToPlayerBufferRunCommand(void)
-{
- gBattleBankFunc[gActiveBank] = PlayerBufferRunCommand;
- gDoingBattleAnim = FALSE;
-}
-
-void PlayerBufferExecCompleted(void)
-{
- gBattleBankFunc[gActiveBank] = PlayerBufferRunCommand;
- if (gBattleTypeFlags & BATTLE_TYPE_LINK)
- {
- u8 playerId = GetMultiplayerId();
-
- dp01_prepare_buffer_wireless_probably(2, 4, &playerId);
- gBattleBufferA[gActiveBank][0] = 0x38;
- }
- else
- {
- gBattleExecBuffer &= ~gBitTable[gActiveBank];
- }
-}
-
-void PlayerBufferRunCommand(void)
-{
- if (gBattleExecBuffer & gBitTable[gActiveBank])
- {
- if (gBattleBufferA[gActiveBank][0] < 0x39)
- gPlayerBufferCommands[gBattleBufferA[gActiveBank][0]]();
- else
- PlayerBufferExecCompleted();
- }
-}
-
-void bx_0802E404(void)
-{
- if (gSprites[gObjectBankIDs[gActiveBank]].pos2.x == 0)
- PlayerBufferExecCompleted();
-}
-
-void sub_802C098(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.newKeys & A_BUTTON)
- {
- PlaySE(SE_SELECT);
- DestroyMenuCursor();
-
- // Useless switch statement.
- switch (gActionSelectionCursor[gActiveBank])
- {
- case 0:
- dp01_build_cmdbuf_x21_a_bb(1, 0, 0);
- break;
- case 1:
- dp01_build_cmdbuf_x21_a_bb(1, 1, 0);
- break;
- case 2:
- dp01_build_cmdbuf_x21_a_bb(1, 2, 0);
- break;
- case 3:
- dp01_build_cmdbuf_x21_a_bb(1, 3, 0);
- break;
- }
- PlayerBufferExecCompleted();
- }
- else if (gMain.newKeys & DPAD_LEFT)
- {
- if (gActionSelectionCursor[gActiveBank] & 1)
- {
- PlaySE(SE_SELECT);
- nullsub_8(gActionSelectionCursor[gActiveBank]);
- gActionSelectionCursor[gActiveBank] ^= 1;
- sub_802E3E4(gActionSelectionCursor[gActiveBank], 0);
- }
- }
- else if (gMain.newKeys & DPAD_RIGHT)
- {
- if (!(gActionSelectionCursor[gActiveBank] & 1))
- {
- PlaySE(SE_SELECT);
- nullsub_8(gActionSelectionCursor[gActiveBank]);
- gActionSelectionCursor[gActiveBank] ^= 1;
- sub_802E3E4(gActionSelectionCursor[gActiveBank], 0);
- }
- }
- else if (gMain.newKeys & DPAD_UP)
- {
- if (gActionSelectionCursor[gActiveBank] & 2)
- {
- PlaySE(SE_SELECT);
- nullsub_8(gActionSelectionCursor[gActiveBank]);
- gActionSelectionCursor[gActiveBank] ^= 2;
- sub_802E3E4(gActionSelectionCursor[gActiveBank], 0);
- }
- }
- else if (gMain.newKeys & DPAD_DOWN)
- {
- if (!(gActionSelectionCursor[gActiveBank] & 2))
- {
- PlaySE(SE_SELECT);
- nullsub_8(gActionSelectionCursor[gActiveBank]);
- gActionSelectionCursor[gActiveBank] ^= 2;
- sub_802E3E4(gActionSelectionCursor[gActiveBank], 0);
- }
- }
- else if (gMain.newKeys & B_BUTTON)
- {
- if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
- && GetBankIdentity(gActiveBank) == 2
- && !(gAbsentBankFlags & gBitTable[GetBankByPlayerAI(0)])
- && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
- {
- if (gBattleBufferA[gActiveBank][1] == 1)
- {
- // Add item to bag if it is a ball
- if (itemId <= ITEM_PREMIER_BALL)
- AddBagItem(itemId, 1);
- else
- return;
- }
- PlaySE(SE_SELECT);
- dp01_build_cmdbuf_x21_a_bb(1, 12, 0);
- PlayerBufferExecCompleted();
- DestroyMenuCursor();
- }
- }
- else if (gMain.newKeys & START_BUTTON)
- {
- sub_804454C();
- }
-}
-
-void unref_sub_802C2B8(void)
-{
- dp11b_obj_free(gActiveBank, 1);
- dp11b_obj_free(gActiveBank, 0);
- gBattleBankFunc[gActiveBank] = sub_802C2EC;
-}
-
-// TODO: fix this function
-void sub_802C2EC(void)
-{
- u8 arr[4] = {0, 2, 3, 1};
- s32 i;
-
- dp11b_obj_instanciate(gUnknown_03004344, 1, 15, 1);
- i = 0;
- if (gNoOfAllBanks != 0)
- {
- do
- {
- if (i != gUnknown_03004344)
- dp11b_obj_free(i, 1);
- i++;
- } while (i < gNoOfAllBanks);
- }
- if (gMain.newKeys & A_BUTTON)
- {
- DestroyMenuCursor();
- PlaySE(SE_SELECT);
- gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010574;
- dp01_build_cmdbuf_x21_a_bb(1, 10, gMoveSelectionCursor[gActiveBank] | (gUnknown_03004344 << 8));
- dp11b_obj_free(gUnknown_03004344, 1);
- PlayerBufferExecCompleted();
- }
- //_0802C3A8
- else if (gMain.newKeys & B_BUTTON)
- {
- PlaySE(SE_SELECT);
- gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010574;
- gBattleBankFunc[gActiveBank] = sub_802C68C;
- dp11b_obj_instanciate(gActiveBank, 1, 7, 1);
- dp11b_obj_instanciate(gActiveBank, 0, 7, 1);
- dp11b_obj_free(gUnknown_03004344, 1);
- }
- else if (gMain.newKeys & 0x60)
- {
- PlaySE(SE_SELECT);
- gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010574;
- do
- {
- u8 var = GetBankIdentity(gUnknown_03004344);
-
- for (i = 0; i < 4; i++)
- {
- if (var == arr[i])
- break;
- }
- do
- {
- i--;
- if (i < 0)
- i = 3;
- gUnknown_03004344 = GetBankByPlayerAI(arr[i]);
- } while(gUnknown_03004344 == gNoOfAllBanks);
- i = 0;
- switch (GetBankIdentity(gUnknown_03004344))
- {
- case 0:
- case 2:
- if (gActiveBank == gUnknown_03004344)
- {
- u32 moveId;
-
- asm("":::"memory");
- moveId = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1 + gMoveSelectionCursor[gActiveBank]);
- if (!(gBattleMoves[moveId].target & 2))
- break;
- }
- i++;
- break;
- case 1:
- case 3:
- i++;
- }
- //_0802C500
- if (gAbsentBankFlags & gBitTable[gUnknown_03004344])
- i = 0;
- } while (i == 0);
- gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010520;
- }
- //_0802C540
- else if (gMain.newKeys & 0x90)
- {
- PlaySE(SE_SELECT);
- gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010574;
- do
- {
- u8 var = GetBankIdentity(gUnknown_03004344);
-
- for (i = 0; i < 4; i++)
- {
- if (var == arr[i])
- break;
- }
- do
- {
- i++;
- if (i > 3)
- i = 0;
- gUnknown_03004344 = GetBankByPlayerAI(arr[i]);
- } while (gUnknown_03004344 == gNoOfAllBanks);
- i = 0;
- switch (GetBankIdentity(gUnknown_03004344))
- {
- case 0:
- case 2:
- if (gActiveBank == gUnknown_03004344)
- {
- u32 moveId;
-
- asm("":::"memory");
- moveId = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1 + gMoveSelectionCursor[gActiveBank]);
- if (!(gBattleMoves[moveId].target & 2))
- break;
- }
- i++;
- break;
- case 1:
- case 3:
- i++;
- }
- if (gAbsentBankFlags & gBitTable[gUnknown_03004344])
- i = 0;
- } while (i == 0);
- gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010520;
- }
-}
-
-struct UnknownStruct1
-{
- u16 moves[4];
- u8 pp[4];
- u8 unkC[0x12-0xC];
- u8 unk12;
- u8 unk13;
- u8 filler14[0x20-0x14];
-};
-
-const u8 gUnknown_081FAE80[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW WHITE LIGHT_BLUE WHITE2}");
-
-void sub_802C68C(void)
-{
- u32 r8 = 0;
- struct UnknownStruct1 *r6 = (struct UnknownStruct1 *)(gBattleBufferA[gActiveBank] + 4);
-
- if (gMain.newKeys & A_BUTTON)
- {
- u32 r4;
-
- PlaySE(SE_SELECT);
-
- if (r6->moves[gMoveSelectionCursor[gActiveBank]] == MOVE_CURSE)
- r4 = (r6->unk12 != TYPE_GHOST && (r6->unk13 ^ 7)) ? 0x10 : 0;
- else
- r4 = gBattleMoves[r6->moves[gMoveSelectionCursor[gActiveBank]]].target;
-
- if (r4 & 0x10)
- gUnknown_03004344 = gActiveBank;
- else
- gUnknown_03004344 = GetBankByPlayerAI((GetBankIdentity(gActiveBank) & 1) ^ 1);
-
- if (gBattleBufferA[gActiveBank][1] == 0)
- {
- if ((r4 & 2) && gBattleBufferA[gActiveBank][2] == 0)
- r8++;
- }
- else
- {
- if (!(r4 & 0x7D))
- r8++;
- if (r6->pp[gMoveSelectionCursor[gActiveBank]] == 0)
- {
- r8 = 0;
- }
- else if (!(r4 & 0x12) && CountAliveMons(0) <= 1)
- {
- gUnknown_03004344 = sub_803C434(gActiveBank);
- r8 = 0;
- }
- }
- if (r8 == 0)
- {
- DestroyMenuCursor();
- dp01_build_cmdbuf_x21_a_bb(1, 10, gMoveSelectionCursor[gActiveBank] | (gUnknown_03004344 << 8));
- PlayerBufferExecCompleted();
- }
- else
- {
- gBattleBankFunc[gActiveBank] = sub_802C2EC;
- if (r4 & 0x12)
- gUnknown_03004344 = gActiveBank;
- else if (gAbsentBankFlags & gBitTable[GetBankByPlayerAI(1)])
- gUnknown_03004344 = GetBankByPlayerAI(3);
- else
- gUnknown_03004344 = GetBankByPlayerAI(1);
- gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010520;
- }
- }
- else if (gMain.newKeys & B_BUTTON)
- {
- DestroyMenuCursor();
- PlaySE(SE_SELECT);
- gUnknown_030042A4 = 0;
- gUnknown_030042A0 = 320;
- dp01_build_cmdbuf_x21_a_bb(1, 10, 0xFFFF);
- PlayerBufferExecCompleted();
- }
- else if (gMain.newKeys & DPAD_LEFT)
- {
- if (gMoveSelectionCursor[gActiveBank] & 1)
- {
- nullsub_7(gMoveSelectionCursor[gActiveBank]);
- gMoveSelectionCursor[gActiveBank] ^= 1;
- PlaySE(SE_SELECT);
- sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0);
- sub_802E220();
- sub_802E2D4();
- }
- }
- else if (gMain.newKeys & DPAD_RIGHT)
- {
- if (!(gMoveSelectionCursor[gActiveBank] & 1)
- && (gMoveSelectionCursor[gActiveBank] ^ 1) < gUnknown_03004348)
- {
- nullsub_7(gMoveSelectionCursor[gActiveBank]);
- gMoveSelectionCursor[gActiveBank] ^= 1;
- PlaySE(SE_SELECT);
- sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0);
- sub_802E220();
- sub_802E2D4();
- }
- }
- else if (gMain.newKeys & DPAD_UP)
- {
- if (gMoveSelectionCursor[gActiveBank] & 2)
- {
- nullsub_7(gMoveSelectionCursor[gActiveBank]);
- gMoveSelectionCursor[gActiveBank] ^= 2;
- PlaySE(SE_SELECT);
- sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0);
- sub_802E220();
- sub_802E2D4();
- }
- }
- else if (gMain.newKeys & DPAD_DOWN)
- {
- if (!(gMoveSelectionCursor[gActiveBank] & 2)
- && (gMoveSelectionCursor[gActiveBank] ^ 2) < gUnknown_03004348)
- {
- nullsub_7(gMoveSelectionCursor[gActiveBank]);
- gMoveSelectionCursor[gActiveBank] ^= 2;
- PlaySE(SE_SELECT);
- sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0);
- sub_802E220();
- sub_802E2D4();
- }
- }
- else if (gMain.newKeys & SELECT_BUTTON)
- {
- if (gUnknown_03004348 > 1 && !(gBattleTypeFlags & BATTLE_TYPE_LINK))
- {
- sub_802E12C(gMoveSelectionCursor[gActiveBank], gUnknown_081FAE80);
- if (gMoveSelectionCursor[gActiveBank] != 0)
- gUnknown_03004344 = 0;
- else
- gUnknown_03004344 = gMoveSelectionCursor[gActiveBank] + 1;
- sub_802E3B4(gUnknown_03004344, 27);
- FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A);
- InitWindow(&gUnknown_03004210, gUnknown_08400D89, 0x290, 0x17, 0x37);
- sub_8002F44(&gUnknown_03004210);
- gBattleBankFunc[gActiveBank] = sub_802CA60;
- }
- }
-}
-
-extern const u8 gUnknown_08400D49[];
-extern const u8 gUnknown_08400D38[];
-
-void sub_802CA60(void)
-{
- u8 perMovePPBonuses[4];
- struct
- {
- u16 moves[4];
- u8 pp[4];
- u8 filler18[8]; // what is this?
- } sp0;
- //struct UnknownStruct1 sp0;
- u8 totalPPBonuses;
-
- if (gMain.newKeys & (A_BUTTON | SELECT_BUTTON))
- {
- PlaySE(SE_SELECT);
- if (gMoveSelectionCursor[gActiveBank] != gUnknown_03004344)
- {
- struct UnknownStruct1 *r9 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4];
- s32 i;
-
- i = r9->moves[gMoveSelectionCursor[gActiveBank]];
- r9->moves[gMoveSelectionCursor[gActiveBank]] = r9->moves[gUnknown_03004344];
- r9->moves[gUnknown_03004344] = i;
-
- i = r9->pp[gMoveSelectionCursor[gActiveBank]];
- r9->pp[gMoveSelectionCursor[gActiveBank]] = r9->pp[gUnknown_03004344];
- r9->pp[gUnknown_03004344] = i;
-
- i = r9->unkC[gMoveSelectionCursor[gActiveBank]];
- r9->unkC[gMoveSelectionCursor[gActiveBank]] = r9->unkC[gUnknown_03004344];
- r9->unkC[gUnknown_03004344] = i;
-
- if (gDisableStructs[gActiveBank].unk18_b & gBitTable[gMoveSelectionCursor[gActiveBank]])
- {
- gDisableStructs[gActiveBank].unk18_b &= ~gBitTable[gMoveSelectionCursor[gActiveBank]];
- gDisableStructs[gActiveBank].unk18_b |= gBitTable[gUnknown_03004344];
- }
-
- sub_802E1B0();
-
- for (i = 0; i < 4; i++)
- perMovePPBonuses[i] = (gBattleMons[gActiveBank].ppBonuses & (3 << (i * 2))) >> (i * 2);
- totalPPBonuses = perMovePPBonuses[gMoveSelectionCursor[gActiveBank]];
- perMovePPBonuses[gMoveSelectionCursor[gActiveBank]] = perMovePPBonuses[gUnknown_03004344];
- perMovePPBonuses[gUnknown_03004344] = 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] = r9->moves[i];
- gBattleMons[gActiveBank].pp[i] = r9->pp[i];
- }
- if (!(gBattleMons[gActiveBank].status2 & 0x200000))
- {
- for (i = 0; i < 4; i++)
- {
- sp0.moves[i] = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1 + i);
- sp0.pp[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 = sp0.moves[gMoveSelectionCursor[gActiveBank]];
- sp0.moves[gMoveSelectionCursor[gActiveBank]] = sp0.moves[gUnknown_03004344];
- sp0.moves[gUnknown_03004344] = i;
-
- i = sp0.pp[gMoveSelectionCursor[gActiveBank]];
- sp0.pp[gMoveSelectionCursor[gActiveBank]] = sp0.pp[gUnknown_03004344];
- sp0.pp[gUnknown_03004344] = i;
-
- totalPPBonuses = perMovePPBonuses[gMoveSelectionCursor[gActiveBank]];
- perMovePPBonuses[gMoveSelectionCursor[gActiveBank]] = perMovePPBonuses[gUnknown_03004344];
- perMovePPBonuses[gUnknown_03004344] = 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, (u8 *)&sp0.moves[i]);
- SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_PP1 + i, &sp0.pp[i]);
- }
- SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_PP_BONUSES, &totalPPBonuses);
- }
- }
- else
- {
- sub_802E12C(gUnknown_03004344, gUnknown_08400D49);
- }
- gBattleBankFunc[gActiveBank] = sub_802C68C;
- gMoveSelectionCursor[gActiveBank] = gUnknown_03004344;
- sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0);
- FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A);
- InitWindow(&gUnknown_03004210, gUnknown_08400D38, 0x290, 0x17, 0x37);
- sub_8002F44(&gUnknown_03004210);
- sub_802E220();
- sub_802E2D4();
- }
- if (gMain.newKeys & (B_BUTTON | SELECT_BUTTON))
- {
- PlaySE(SE_SELECT);
- nullsub_7(gUnknown_03004344);
- sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0);
- sub_802E12C(gMoveSelectionCursor[gActiveBank], gUnknown_08400D49);
- gBattleBankFunc[gActiveBank] = sub_802C68C;
- FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A);
- InitWindow(&gUnknown_03004210, gUnknown_08400D38, 0x290, 0x17, 0x37);
- sub_8002F44(&gUnknown_03004210);
- sub_802E220();
- sub_802E2D4();
- }
- if ((gMain.newKeys & DPAD_LEFT) && (gUnknown_03004344 & 1))
- {
- if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank])
- sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0x1D);
- else
- nullsub_7(gUnknown_03004344);
- gUnknown_03004344 ^= 1;
- PlaySE(SE_SELECT);
- if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank])
- sub_802E3B4(gUnknown_03004344, 0);
- else
- sub_802E3B4(gUnknown_03004344, 0x1B);
- }
- if ((gMain.newKeys & DPAD_RIGHT) && !(gUnknown_03004344 & 1) && (gUnknown_03004344 ^ 1) < gUnknown_03004348)
- {
- if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank])
- sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0x1D);
- else
- nullsub_7(gUnknown_03004344);
- gUnknown_03004344 ^= 1;
- PlaySE(SE_SELECT);
- if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank])
- sub_802E3B4(gUnknown_03004344, 0);
- else
- sub_802E3B4(gUnknown_03004344, 0x1B);
- }
- if ((gMain.newKeys & DPAD_UP) && (gUnknown_03004344 & 2))
- {
- if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank])
- sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0x1D);
- else
- nullsub_7(gUnknown_03004344);
- gUnknown_03004344 ^= 2;
- PlaySE(SE_SELECT);
- if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank])
- sub_802E3B4(gUnknown_03004344, 0);
- else
- sub_802E3B4(gUnknown_03004344, 0x1B);
- }
- if ((gMain.newKeys & DPAD_DOWN) && !(gUnknown_03004344 & 2) && (gUnknown_03004344 ^ 2) < gUnknown_03004348)
- {
- if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank])
- sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0x1D);
- else
- nullsub_7(gUnknown_03004344);
- gUnknown_03004344 ^= 2;
- PlaySE(SE_SELECT);
- if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank])
- sub_802E3B4(gUnknown_03004344, 0);
- else
- sub_802E3B4(gUnknown_03004344, 0x1B);
- }
-}
-
-void sub_802D148(void)
-{
- if (gReceivedRemoteLinkPlayers == 0)
- {
- m4aSongNumStop(SE_HINSI);
- gMain.inBattle = FALSE;
- gMain.callback1 = gPreBattleCallback1;
- SetMainCallback2(c2_8011A1C);
- }
-}
-
-void sub_802D18C(void)
-{
- if (!gPaletteFade.active)
- {
- if (gBattleTypeFlags & BATTLE_TYPE_LINK)
- {
- sub_800832C();
- gBattleBankFunc[gActiveBank] = sub_802D148;
- }
- else
- {
- m4aSongNumStop(SE_HINSI);
- gMain.inBattle = FALSE;
- gMain.callback1 = gPreBattleCallback1;
- SetMainCallback2(gMain.savedCallback);
- }
- }
-}
-
-void sub_802D204(void)
-{
- if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy)
- PlayerBufferExecCompleted();
-}
-
-// duplicate of sub_802D204
-void sub_802D23C(void)
-{
- if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy)
- PlayerBufferExecCompleted();
-}
-
-void sub_802D274(void)
-{
- if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy)
- {
- nullsub_10(gSaveBlock2.playerGender);
- FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]);
- DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]);
- PlayerBufferExecCompleted();
- }
-}
-
-void sub_802D2E0(void)
-{
- if (--ewram17810[gActiveBank].unk9 == 0xFF)
- {
- ewram17810[gActiveBank].unk9 = 0;
- PlayerBufferExecCompleted();
- }
-}
-
-void sub_802D31C(void)
-{
- bool8 r6 = FALSE;
-
- if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI)))
- {
- if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy)
- r6 = TRUE;
- }
- else
- {
- if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy
- && gSprites[gHealthboxIDs[gActiveBank ^ 2]].callback == SpriteCallbackDummy)
- r6 = TRUE;
- }
- if (IsCryPlayingOrClearCrySongs())
- r6 = FALSE;
-
- if (r6 && ewram17810[gActiveBank].unk1_0 && ewram17810[gActiveBank ^ 2].unk1_0)
- {
- ewram17810[gActiveBank].unk0_7 = 0;
- ewram17810[gActiveBank].unk1_0 = 0;
- ewram17810[gActiveBank ^ 2].unk0_7 = 0;
- ewram17810[gActiveBank ^ 2].unk1_0 = 0;
- FreeSpriteTilesByTag(0x27F9);
- FreeSpritePaletteByTag(0x27F9);
- if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
- m4aMPlayContinue(&gMPlay_BGM);
- else
- m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 256);
- sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
- if (IsDoubleBattle())
- sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank ^ 2]], gActiveBank ^ 2);
- ewram17810[gActiveBank].unk9 = 3;
- gBattleBankFunc[gActiveBank] = sub_802D2E0;
- }
-}
-
-void sub_802D500(void)
-{
- if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7)
- sub_8141828(gActiveBank, &gPlayerParty[gBattlePartyID[gActiveBank]]);
- if (!ewram17810[gActiveBank ^ 2].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_7)
- sub_8141828(gActiveBank ^ 2, &gPlayerParty[gBattlePartyID[gActiveBank ^ 2]]);
- if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_3)
- {
- if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
- {
- DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank ^ 2]]);
- sub_8045A5C(
- gHealthboxIDs[gActiveBank ^ 2],
- &gPlayerParty[gBattlePartyID[gActiveBank ^ 2]],
- 0);
- sub_804777C(gActiveBank ^ 2);
- sub_8043DFC(gHealthboxIDs[gActiveBank ^ 2]);
- }
- DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]);
- sub_8045A5C(
- gHealthboxIDs[gActiveBank],
- &gPlayerParty[gBattlePartyID[gActiveBank]],
- 0);
- sub_804777C(gActiveBank);
- sub_8043DFC(gHealthboxIDs[gActiveBank]);
- ewram17840.unk9_0 = 0;
- gBattleBankFunc[gActiveBank] = sub_802D31C;
- }
-}
-
-void sub_802D680(void)
-{
- if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy
- && ewram17810[gActiveBank].unk1_0)
- {
- ewram17810[gActiveBank].unk0_7 = 0;
- ewram17810[gActiveBank].unk1_0 = 0;
- FreeSpriteTilesByTag(0x27F9);
- FreeSpritePaletteByTag(0x27F9);
- if (ewram17800[gActiveBank].substituteSprite)
- move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6);
- gBattleBankFunc[gActiveBank] = sub_802D730;
- }
-}
-
-void sub_802D730(void)
-{
- if (!ewram17810[gActiveBank].unk0_6 && !IsCryPlayingOrClearCrySongs())
- {
- m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100);
- sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
- PlayerBufferExecCompleted();
- }
-}
-
-void sub_802D798(void)
-{
- if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7)
- sub_8141828(gActiveBank, &gPlayerParty[gBattlePartyID[gActiveBank]]);
- if (gSprites[gUnknown_0300434C[gActiveBank]].callback == SpriteCallbackDummy
- && !ewram17810[gActiveBank].unk0_3)
- {
- DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]);
- sub_8045A5C(gHealthboxIDs[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], 0);
- sub_804777C(gActiveBank);
- sub_8043DFC(gHealthboxIDs[gActiveBank]);
- sub_8031F88(gActiveBank);
- gBattleBankFunc[gActiveBank] = sub_802D680;
- }
-}
-
-void c3_0802FDF4(u8 taskId)
-{
- if (!IsCryPlayingOrClearCrySongs())
- {
- m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100);
- DestroyTask(taskId);
- }
-}
-
-void bx_t1_healthbar_update(void)
-{
- s16 r4 = sub_8045C78(gActiveBank, gHealthboxIDs[gActiveBank], 0, 0);
-
- sub_8043DFC(gHealthboxIDs[gActiveBank]);
- if (r4 != -1)
- {
- sub_80440EC(gHealthboxIDs[gActiveBank], r4, 0);
- }
- else
- {
- sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
- PlayerBufferExecCompleted();
- }
-}
-
-void sub_802D90C(void)
-{
- if (gUnknown_03004210.state == 0)
- PlayerBufferExecCompleted();
-}
-
-// Rare Candy usage, maybe?
-void sub_802D924(u8 taskId)
-{
- u32 pkmnIndex = (u8)gTasks[taskId].data[0];
- u8 bank = gTasks[taskId].data[2];
- s16 gainedExp = gTasks[taskId].data[1];
-
- if (IsDoubleBattle() == TRUE || pkmnIndex != gBattlePartyID[bank])
- {
- struct Pokemon *pkmn = &gPlayerParty[pkmnIndex];
- u16 species = GetMonData(pkmn, MON_DATA_SPECIES);
- u8 level = GetMonData(pkmn, MON_DATA_LEVEL);
- u32 currExp = GetMonData(pkmn, MON_DATA_EXP);
- u32 nextLvlExp = gExperienceTables[gBaseStats[species].growthRate][level + 1];
-
- if (currExp + gainedExp >= nextLvlExp)
- {
- u8 savedActiveBank;
-
- SetMonData(pkmn, MON_DATA_EXP, (u8 *)&nextLvlExp);
- CalculateMonStats(pkmn);
- gainedExp -= nextLvlExp - currExp;
- savedActiveBank = gActiveBank;
- gActiveBank = bank;
- dp01_build_cmdbuf_x21_a_bb(1, 11, gainedExp);
- gActiveBank = savedActiveBank;
-
- if (IsDoubleBattle() == TRUE
- && ((u16)pkmnIndex == gBattlePartyID[bank] || (u16)pkmnIndex == gBattlePartyID[bank ^ 2]))
- gTasks[taskId].func = sub_802DCB0;
- else
- gTasks[taskId].func = sub_802DDC4;
- }
- else
- {
- currExp += gainedExp;
- SetMonData(pkmn, MON_DATA_EXP, (u8 *)&currExp);
- gBattleBankFunc[bank] = sub_802D90C;
- DestroyTask(taskId);
- }
- }
- else
- {
- gTasks[taskId].func = sub_802DA9C;
- }
-}
-
-void sub_802DA9C(u8 taskId)
-{
- u8 pkmnIndex = gTasks[taskId].data[0];
- s32 r9 = gTasks[taskId].data[1];
- u8 bank = gTasks[taskId].data[2];
- struct Pokemon *pkmn = &gPlayerParty[pkmnIndex];
- u8 level = GetMonData(pkmn, MON_DATA_LEVEL);
- u16 species = GetMonData(pkmn, MON_DATA_SPECIES);
- u32 exp = GetMonData(pkmn, MON_DATA_EXP);
- u32 currLvlExp = gExperienceTables[gBaseStats[species].growthRate][level];
- u32 expToNextLvl;
-
- exp -= currLvlExp;
- expToNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLvlExp;
- sub_8043D84(bank, gHealthboxIDs[bank], expToNextLvl, exp, -r9);
- PlaySE(SE_EXP);
- gTasks[taskId].func = sub_802DB6C;
-}
-
-#ifdef NONMATCHING
-void sub_802DB6C(u8 taskId)
-{
- if (gTasks[taskId].data[10] < 13)
- {
- gTasks[taskId].data[10]++;
- }
- else
- {
- u8 r9 = gTasks[taskId].data[0];
- s32 r10 = gTasks[taskId].data[1]; //s16?
- u8 r7 = gTasks[taskId].data[2];
- s16 r4;
-
- r4 = sub_8045C78(r7, gHealthboxIDs[r7], 1, 0);
- sub_8043DFC(gHealthboxIDs[r7]);
- if (r4 == -1)
- {
- struct Pokemon *pkmn;
- u8 r4;
- u32 sp4;
- u16 r0;
- u32 sp0;
-
- m4aSongNumStop(SE_EXP);
- pkmn = &gPlayerParty[r9];
- r4 = GetMonData(pkmn, MON_DATA_LEVEL);
- sp4 = GetMonData(pkmn, MON_DATA_EXP);
- r0 = GetMonData(pkmn, MON_DATA_SPECIES);
- sp0 = gExperienceTables[gBaseStats[r0].growthRate][r4 + 1];
- if (sp4 + r10 >= sp0)
- {
- u8 r5;
- u32 asdf;
-
- SetMonData(pkmn, MON_DATA_EXP, (u8 *)&sp0);
- CalculateMonStats(pkmn);
- //r10 -= sp0 - sp4;
- asdf = sp0 - sp4;
- //asdf = r10 - (sp0 - sp4);
- r10 -= asdf;
- r5 = gActiveBank;
- gActiveBank = r7;
- dp01_build_cmdbuf_x21_a_bb(1, 11, r10);
- gActiveBank = r5;
- gTasks[taskId].func = sub_802DCB0;
- }
- else
- {
- //u32 asdf = sp4 + r10;
- sp4 += r10;
- SetMonData(pkmn, MON_DATA_EXP, (u8 *)&sp4);
- gBattleBankFunc[r7] = sub_802D90C;
- DestroyTask(taskId);
- }
- }
- }
-}
-#else
-__attribute__((naked))
-void sub_802DB6C(u8 taskId)
-{
- asm_unified("push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, 0x8\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r8, r0\n\
- ldr r1, _0802DB98 @ =gTasks\n\
- lsls r0, 2\n\
- add r0, r8\n\
- lsls r0, 3\n\
- adds r6, r0, r1\n\
- ldrh r1, [r6, 0x1C]\n\
- movs r2, 0x1C\n\
- ldrsh r0, [r6, r2]\n\
- cmp r0, 0xC\n\
- bgt _0802DB9C\n\
- adds r0, r1, 0x1\n\
- strh r0, [r6, 0x1C]\n\
- b _0802DC98\n\
- .align 2, 0\n\
-_0802DB98: .4byte gTasks\n\
-_0802DB9C:\n\
- ldrb r0, [r6, 0x8]\n\
- mov r9, r0\n\
- ldrh r2, [r6, 0xA]\n\
- mov r10, r2\n\
- ldrb r7, [r6, 0xC]\n\
- ldr r5, _0802DC64 @ =gHealthboxIDs\n\
- adds r5, r7, r5\n\
- ldrb r1, [r5]\n\
- adds r0, r7, 0\n\
- movs r2, 0x1\n\
- movs r3, 0\n\
- bl sub_8045C78\n\
- adds r4, r0, 0\n\
- lsls r4, 16\n\
- lsrs r4, 16\n\
- ldrb r0, [r5]\n\
- bl sub_8043DFC\n\
- lsls r4, 16\n\
- asrs r4, 16\n\
- movs r0, 0x1\n\
- negs r0, r0\n\
- cmp r4, r0\n\
- bne _0802DC98\n\
- movs r0, 0x21\n\
- bl m4aSongNumStop\n\
- movs r0, 0x64\n\
- mov r1, r9\n\
- muls r1, r0\n\
- ldr r0, _0802DC68 @ =gPlayerParty\n\
- adds r5, r1, r0\n\
- adds r0, r5, 0\n\
- movs r1, 0x38\n\
- bl GetMonData\n\
- adds r4, r0, 0\n\
- lsls r4, 24\n\
- lsrs r4, 24\n\
- adds r0, r5, 0\n\
- movs r1, 0x19\n\
- bl GetMonData\n\
- str r0, [sp, 0x4]\n\
- adds r0, r5, 0\n\
- movs r1, 0xB\n\
- bl GetMonData\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- ldr r3, _0802DC6C @ =gExperienceTables\n\
- adds r4, 0x1\n\
- lsls r4, 2\n\
- ldr r2, _0802DC70 @ =gBaseStats\n\
- lsls r1, r0, 3\n\
- subs r1, r0\n\
- lsls r1, 2\n\
- adds r1, r2\n\
- ldrb r1, [r1, 0x13]\n\
- movs r0, 0xCA\n\
- lsls r0, 1\n\
- muls r0, r1\n\
- adds r4, r0\n\
- adds r4, r3\n\
- ldr r1, [r4]\n\
- str r1, [sp]\n\
- mov r2, r10\n\
- lsls r0, r2, 16\n\
- asrs r4, r0, 16\n\
- ldr r0, [sp, 0x4]\n\
- adds r0, r4\n\
- cmp r0, r1\n\
- blt _0802DC7C\n\
- adds r0, r5, 0\n\
- movs r1, 0x19\n\
- mov r2, sp\n\
- bl SetMonData\n\
- adds r0, r5, 0\n\
- bl CalculateMonStats\n\
- ldr r2, [sp]\n\
- add r0, sp, 0x4\n\
- ldrh r0, [r0]\n\
- subs r2, r0\n\
- subs r2, r4, r2\n\
- ldr r4, _0802DC74 @ =gActiveBank\n\
- ldrb r5, [r4]\n\
- strb r7, [r4]\n\
- lsls r2, 16\n\
- lsrs r2, 16\n\
- movs r0, 0x1\n\
- movs r1, 0xB\n\
- bl dp01_build_cmdbuf_x21_a_bb\n\
- strb r5, [r4]\n\
- ldr r0, _0802DC78 @ =sub_802DCB0\n\
- str r0, [r6]\n\
- b _0802DC98\n\
- .align 2, 0\n\
-_0802DC64: .4byte gHealthboxIDs\n\
-_0802DC68: .4byte gPlayerParty\n\
-_0802DC6C: .4byte gExperienceTables\n\
-_0802DC70: .4byte gBaseStats\n\
-_0802DC74: .4byte gActiveBank\n\
-_0802DC78: .4byte sub_802DCB0\n\
-_0802DC7C:\n\
- str r0, [sp, 0x4]\n\
- add r2, sp, 0x4\n\
- adds r0, r5, 0\n\
- movs r1, 0x19\n\
- bl SetMonData\n\
- ldr r1, _0802DCA8 @ =gBattleBankFunc\n\
- lsls r0, r7, 2\n\
- adds r0, r1\n\
- ldr r1, _0802DCAC @ =sub_802D90C\n\
- str r1, [r0]\n\
- mov r0, r8\n\
- bl DestroyTask\n\
-_0802DC98:\n\
- add sp, 0x8\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_0802DCA8: .4byte gBattleBankFunc\n\
-_0802DCAC: .4byte sub_802D90C\n");
-}
-#endif
-
-void sub_802DCB0(u8 taskId)
-{
- u8 bank = gTasks[taskId].data[2];
- u8 pkmnIndex = gTasks[taskId].data[0];
-
- if (IsDoubleBattle() == TRUE && pkmnIndex == gBattlePartyID[bank ^ 2])
- bank ^= 2;
- move_anim_start_t4(bank, bank, bank, 0);
- gTasks[taskId].func = sub_802DD10;
-}
-
-void sub_802DD10(u8 taskId)
-{
- u8 bank = gTasks[taskId].data[2];
-
- if (!ewram17810[bank].unk0_6)
- {
- u8 pkmnIndex = gTasks[taskId].data[0];
-
- GetMonData(&gPlayerParty[pkmnIndex], MON_DATA_LEVEL); // Unused return value
- if (IsDoubleBattle() == TRUE && pkmnIndex == gBattlePartyID[bank ^ 2])
- sub_8045A5C(gHealthboxIDs[bank ^ 2], &gPlayerParty[pkmnIndex], 0);
- else
- sub_8045A5C(gHealthboxIDs[bank], &gPlayerParty[pkmnIndex], 0);
- gTasks[taskId].func = sub_802DDC4;
- }
-}
-
-void sub_802DDC4(u8 taskId)
-{
- u8 pkmnIndex;
- u8 bank;
-
- pkmnIndex = gTasks[taskId].data[0];
- GetMonData(&gPlayerParty[pkmnIndex], MON_DATA_LEVEL); // Unused return value
- bank = gTasks[taskId].data[2];
- gBattleBankFunc[bank] = sub_802D90C;
- DestroyTask(taskId);
-}
-
-void sub_802DE10(void)
-{
- if (gSprites[gObjectBankIDs[gActiveBank]].pos1.y + gSprites[gObjectBankIDs[gActiveBank]].pos2.y > DISPLAY_HEIGHT)
- {
- u16 species = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES);
-
- nullsub_9(species);
- FreeOamMatrix(gSprites[gObjectBankIDs[gActiveBank]].oam.matrixNum);
- DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]);
- sub_8043DB0(gHealthboxIDs[gActiveBank]);
- PlayerBufferExecCompleted();
- }
-}
-
-void sub_802DEAC(void)
-{
- if (!ewram17810[gActiveBank].unk0_6)
- {
- FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]);
- DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]);
- sub_8043DB0(gHealthboxIDs[gActiveBank]);
- PlayerBufferExecCompleted();
- }
-}
-
-// Duplicate of sub_802D90C
-void sub_802DF18(void)
-{
- if (gUnknown_03004210.state == 0)
- PlayerBufferExecCompleted();
-}
-
-void sub_802DF30(void)
-{
- if (!gPaletteFade.active)
- {
- u8 r4;
-
- gBattleBankFunc[gActiveBank] = sub_802DF88;
- r4 = gTasks[gUnknown_0300434C[gActiveBank]].data[0];
- DestroyTask(gUnknown_0300434C[gActiveBank]);
- sub_8094E20(r4);
- }
-}
-
-void sub_802DF88(void)
-{
- if (gMain.callback2 == sub_800F808 && !gPaletteFade.active)
- {
- if (gUnknown_0202E8F4 == 1)
- dp01_build_cmdbuf_x22_a_three_bytes(1, gUnknown_0202E8F5, gUnknown_02038470);
- else
- dp01_build_cmdbuf_x22_a_three_bytes(1, 6, NULL);
- if ((gBattleBufferA[gActiveBank][1] & 0xF) == 1)
- b_link_standby_message();
- PlayerBufferExecCompleted();
- }
-}
-
-void sub_802E004(void)
-{
- if (!gPaletteFade.active)
- {
- gBattleBankFunc[gActiveBank] = sub_802E03C;
- nullsub_14();
- sub_80A6DCC();
- }
-}
-
-void sub_802E03C(void)
-{
- if (gMain.callback2 == sub_800F808 && !gPaletteFade.active)
- {
- dp01_build_cmdbuf_x23_aa_0(1, gScriptItemId);
- PlayerBufferExecCompleted();
- }
-}
-
-void bx_wait_t1(void)
-{
- if (!gDoingBattleAnim || !ewram17810[gActiveBank].unk0_6)
- PlayerBufferExecCompleted();
-}
-
-void bx_blink_t1(void)
-{
- u8 spriteId = gObjectBankIDs[gActiveBank];
-
- if (gSprites[spriteId].data1 == 32)
- {
- gSprites[spriteId].data1 = 0;
- gSprites[spriteId].invisible = FALSE;
- gDoingBattleAnim = 0;
- PlayerBufferExecCompleted();
- }
- else
- {
- if (((u16)gSprites[spriteId].data1 % 4) == 0)
- gSprites[spriteId].invisible ^= 1;
- gSprites[spriteId].data1++;
- }
-}
-
-void sub_802E12C(s32 a, const u8 *b)
-{
- struct UnknownStruct1 *r4 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4];
-
- StringCopy(gDisplayedStringBattle, b);
- StringAppend(gDisplayedStringBattle, gMoveNames[r4->moves[a]]);
- InitWindow(
- &gUnknown_03004210,
- gDisplayedStringBattle,
- 0x300 + a * 20,
- (a & 1) ? 11 : 1,
- (a < 2) ? 0x37 : 0x39);
- sub_8002F44(&gUnknown_03004210);
-}
-
-void sub_802E1B0(void)
-{
- struct UnknownStruct1 *r4 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4];
- s32 i;
-
- gUnknown_03004348 = 0;
- FillWindowRect(&gUnknown_03004210, 0x1016, 1, 0x37, 0x14, 0x3A);
- for (i = 0; i < 4; i++)
- {
- nullsub_7(i);
- sub_802E12C(i, gUnknown_08400D49);
- if (r4->moves[i] != 0)
- gUnknown_03004348++;
- }
-}
-
-void sub_802E220(void)
-{
- if (gBattleBufferA[gActiveBank][2] != 1)
- {
- struct UnknownStruct1 *r4 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4];
- u8 *str = gDisplayedStringBattle;
-
- str = StringCopy(str, gUnknown_08400D49);
- str[0] = EXT_CTRL_CODE_BEGIN;
- str[1] = 0x11;
- str[2] = 2;
- str += 3;
- str[0] = EXT_CTRL_CODE_BEGIN;
- str[1] = 0x14;
- str[2] = 6;
- str += 3;
- str = ConvertIntToDecimalStringN(str, r4->pp[gMoveSelectionCursor[gActiveBank]], 1, 2);
- *str++ = CHAR_SLASH;
- ConvertIntToDecimalStringN(str, r4->unkC[gMoveSelectionCursor[gActiveBank]], 1, 2);
- InitWindow(&gUnknown_03004210, gDisplayedStringBattle, 0x2A2, 0x19, 0x37);
- sub_8002F44(&gUnknown_03004210);
- }
-}
-
-extern const u8 gUnknown_08400D52[];
-extern const u8 gTypeNames[][7];
-
-void sub_802E2D4(void)
-{
- if (gBattleBufferA[gActiveBank][2] == 1)
- {
- FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A);
- InitWindow(&gUnknown_03004210, gUnknown_08400D52, 0x290, 0x13, 0x37);
- }
- else
- {
- struct UnknownStruct1 *r4 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4];
- u8 *str = gDisplayedStringBattle;
-
- str = StringCopy(str, gUnknown_08400D49);
- StringCopy(str, gTypeNames[gBattleMoves[r4->moves[gMoveSelectionCursor[gActiveBank]]].type]);
- FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x39, 0x1C, 0x3A);
- InitWindow(&gUnknown_03004210, gDisplayedStringBattle, 0x2C0, 0x17, 0x39);
- }
- sub_8002F44(&gUnknown_03004210);
-}
-
-const u8 gUnknown_081FAE89[][2] =
-{
- { 8, 120},
- {88, 120},
- { 8, 136},
- {88, 136},
-};
-
-const u8 gUnknown_081FAE91[][2] =
-{
- {144, 120},
- {190, 120},
- {144, 136},
- {190, 136},
- { 72, 72},
- { 32, 90},
- { 80, 80},
- { 80, 88},
-};
-
-void sub_802E3B4(u8 a, int unused)
-{
- sub_814A958(0x48);
- sub_814A880(gUnknown_081FAE89[a][0], gUnknown_081FAE89[a][1]);
-}
-
-void nullsub_7(u8 a)
-{
-}
-
-void sub_802E3E4(u8 a, int unused)
-{
- sub_814A958(0x2A);
- sub_814A880(gUnknown_081FAE91[a][0], gUnknown_081FAE91[a][1]);
-}
-
-void nullsub_8(u8 a)
-{
-}
-
-void sub_802E414(void)
-{
- SetMainCallback2(ReshowBattleScreenAfterMenu);
-}
-
-void sub_802E424(void)
-{
- SetMainCallback2(ReshowBattleScreenAfterMenu);
-}
-
-void sub_802E434(void)
-{
- if (!ewram17810[gActiveBank].unk0_4)
- PlayerBufferExecCompleted();
-}
-
-void sub_802E460(void)
-{
- if (!ewram17810[gActiveBank].unk0_5)
- PlayerBufferExecCompleted();
-}
-
-void b_link_standby_message(void)
-{
- if (gBattleTypeFlags & BATTLE_TYPE_LINK)
- {
- gUnknown_030042A4 = 0;
- gUnknown_030042A0 = 0;
- sub_8002EB0(&gUnknown_03004210, gUnknown_08400CE0, 0x90, 2, 15);
- }
-}
diff --git a/src/battle/battle_7.c b/src/battle/battle_7.c
index 0c4b118b4..cf3a3522e 100644
--- a/src/battle/battle_7.c
+++ b/src/battle/battle_7.c
@@ -31,7 +31,6 @@ struct Struct2019348
extern u8 gBattleBufferA[][0x200];
extern u8 gActiveBank;
-extern u32 gBattleExecBuffer;
extern u8 gNoOfAllBanks;
extern u16 gBattlePartyID[];
extern u8 gBanksBySide[];
@@ -63,7 +62,6 @@ extern const u8 gSubstituteDollGfx[];
extern const u8 gSubstituteDollPal[];
extern const struct CompressedSpriteSheet gUnknown_081FAF24;
extern const struct SpriteTemplate gSpriteTemplate_81FAF34;
-extern void (*const gOpponentBufferCommands[])(void);
extern const struct CompressedSpriteSheet gUnknown_0820A47C;
extern const struct CompressedSpriteSheet gUnknown_0820A484;
extern const struct CompressedSpriteSheet gUnknown_0820A48C[];
@@ -96,9 +94,6 @@ void sub_80324E0(u8 a);
void sub_80327CC(void);
void sub_8032978(struct Sprite *);
void sub_80328A4(struct Sprite *);
-void OpponentBufferRunCommand(void);
-void sub_80332D0(void);
-void OpponentBufferExecCompleted(void);
void sub_80312F0(struct Sprite *sprite)
{
@@ -273,29 +268,29 @@ bool8 mplay_80342A4(u8 a)
return TRUE;
}
-void BattleLoadOpponentMonSprite(struct Pokemon *pkmn, u8 bank)
+void BattleLoadOpponentMonSprite(struct Pokemon *pkmn, u8 b)
{
u32 personalityValue;
u16 species;
- u32 transformPersonality;
+ u32 r7;
u32 otId;
u8 var;
u16 paletteOffset;
const u8 *lzPaletteData;
personalityValue = GetMonData(pkmn, MON_DATA_PERSONALITY);
- if (ewram17800[bank].transformedSpecies == 0)
+ if (ewram17800[b].transformedSpecies == 0)
{
species = GetMonData(pkmn, MON_DATA_SPECIES);
- transformPersonality = personalityValue;
+ r7 = personalityValue;
}
else
{
- species = ewram17800[bank].transformedSpecies;
- transformPersonality = gPID_perBank[bank];
+ species = ewram17800[b].transformedSpecies;
+ r7 = gPID_perBank[b];
}
otId = GetMonData(pkmn, MON_DATA_OT_ID);
- var = GetBankIdentity(bank);
+ var = GetBankIdentity(b);
HandleLoadSpecialPokePic(
&gMonFrontPicTable[species],
gMonFrontPicCoords[species].coords,
@@ -303,29 +298,29 @@ void BattleLoadOpponentMonSprite(struct Pokemon *pkmn, u8 bank)
0x02000000,
gUnknown_081FAF4C[var],
species,
- transformPersonality);
- paletteOffset = 0x100 + bank * 16;
- if (ewram17800[bank].transformedSpecies == 0)
+ r7);
+ paletteOffset = 0x100 + b * 16;
+ if (ewram17800[b].transformedSpecies == 0)
lzPaletteData = pokemon_get_pal(pkmn);
else
lzPaletteData = species_and_otid_get_pal(species, otId, personalityValue);
sub_800D238(lzPaletteData, ewram);
LoadPalette(ewram, paletteOffset, 0x20);
- LoadPalette(ewram, 0x80 + bank * 16, 0x20);
+ LoadPalette(ewram, 0x80 + b * 16, 0x20);
if (species == SPECIES_CASTFORM)
{
- paletteOffset = 0x100 + bank * 16;
+ paletteOffset = 0x100 + b * 16;
sub_800D238(lzPaletteData, ewram + 0x16400);
- LoadPalette(ewram + 0x16400 + gBattleMonForms[bank] * 32, paletteOffset, 0x20);
+ LoadPalette(ewram + 0x16400 + gBattleMonForms[b] * 32, paletteOffset, 0x20);
}
- if (ewram17800[bank].transformedSpecies != 0)
+ if (ewram17800[b].transformedSpecies != 0)
{
BlendPalette(paletteOffset, 16, 6, 0x7FFF);
CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32);
}
}
-void BattleLoadPlayerMonSprite(struct Pokemon *pkmn, u8 bank)
+void BattleLoadPlayerMonSprite(struct Pokemon *pkmn, u8 b)
{
u32 personalityValue;
u16 species;
@@ -336,18 +331,18 @@ void BattleLoadPlayerMonSprite(struct Pokemon *pkmn, u8 bank)
const u8 *lzPaletteData;
personalityValue = GetMonData(pkmn, MON_DATA_PERSONALITY);
- if (ewram17800[bank].transformedSpecies == 0)
+ if (ewram17800[b].transformedSpecies == 0)
{
species = GetMonData(pkmn, MON_DATA_SPECIES);
r7 = personalityValue;
}
else
{
- species = ewram17800[bank].transformedSpecies;
- r7 = gPID_perBank[bank];
+ species = ewram17800[b].transformedSpecies;
+ r7 = gPID_perBank[b];
}
otId = GetMonData(pkmn, MON_DATA_OT_ID);
- var = GetBankIdentity(bank);
+ var = GetBankIdentity(b);
HandleLoadSpecialPokePic(
&gMonBackPicTable[species],
gMonBackPicCoords[species].coords,
@@ -356,21 +351,21 @@ void BattleLoadPlayerMonSprite(struct Pokemon *pkmn, u8 bank)
gUnknown_081FAF4C[var],
species,
r7);
- paletteOffset = 0x100 + bank * 16;
- if (ewram17800[bank].transformedSpecies == 0)
+ paletteOffset = 0x100 + b * 16;
+ if (ewram17800[b].transformedSpecies == 0)
lzPaletteData = pokemon_get_pal(pkmn);
else
lzPaletteData = species_and_otid_get_pal(species, otId, personalityValue);
sub_800D238(lzPaletteData, ewram);
LoadPalette(ewram, paletteOffset, 0x20);
- LoadPalette(ewram, 0x80 + bank * 16, 0x20);
+ LoadPalette(ewram, 0x80 + b * 16, 0x20);
if (species == SPECIES_CASTFORM)
{
- paletteOffset = 0x100 + bank * 16;
+ paletteOffset = 0x100 + b * 16;
sub_800D238(lzPaletteData, ewram + 0x16400);
- LoadPalette(ewram + 0x16400 + gBattleMonForms[bank] * 32, paletteOffset, 0x20);
+ LoadPalette(ewram + 0x16400 + gBattleMonForms[b] * 32, paletteOffset, 0x20);
}
- if (ewram17800[bank].transformedSpecies != 0)
+ if (ewram17800[b].transformedSpecies != 0)
{
BlendPalette(paletteOffset, 16, 6, 0x7FFF);
CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32);
@@ -405,11 +400,11 @@ void sub_8031A6C(u16 a, u8 b)
LoadCompressedObjectPalette(&gTrainerFrontPicPaletteTable[a]);
}
-void LoadPlayerTrainerBankSprite(u16 a, u8 bank)
+void LoadPlayerTrainerBankSprite(u16 a, u8 b)
{
u8 status;
- status = GetBankIdentity(bank);
+ status = GetBankIdentity(b);
DecompressPicFromTable_2(
&gTrainerBackPicTable[a],
gTrainerBackPicCoords[a].coords,
@@ -417,7 +412,7 @@ void LoadPlayerTrainerBankSprite(u16 a, u8 bank)
(void *)0x02000000,
gUnknown_081FAF4C[status],
0);
- LoadCompressedPalette(gTrainerBackPicPaletteTable[a].data, 0x100 + bank * 16, 32);
+ LoadCompressedPalette(gTrainerBackPicPaletteTable[a].data, 0x100 + b * 16, 32);
}
void nullsub_10(int unused)
@@ -615,7 +610,7 @@ void sub_8031F88(u8 a)
ewram17800[a].invisible = gSprites[gObjectBankIDs[a]].invisible;
}
-void sub_8031FC4(u8 bank1, u8 bank2, bool8 c)
+void sub_8031FC4(u8 a, u8 b, bool8 c)
{
u16 paletteOffset;
u16 species;
@@ -626,16 +621,16 @@ void sub_8031FC4(u8 bank1, u8 bank2, bool8 c)
if (c)
{
- StartSpriteAnim(&gSprites[gObjectBankIDs[bank1]], ewram17840.unk0);
- paletteOffset = 0x100 + bank1 * 16;
+ StartSpriteAnim(&gSprites[gObjectBankIDs[a]], ewram17840.unk0);
+ paletteOffset = 0x100 + a * 16;
LoadPalette(ewram + 0x16400 + ewram17840.unk0 * 32, paletteOffset, 32);
- gBattleMonForms[bank1] = ewram17840.unk0;
- if (ewram17800[bank1].transformedSpecies != 0)
+ gBattleMonForms[a] = ewram17840.unk0;
+ if (ewram17800[a].transformedSpecies != 0)
{
BlendPalette(paletteOffset, 16, 6, 0x7FFF);
CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32);
}
- gSprites[gObjectBankIDs[bank1]].pos1.y = sub_8077F68(bank1);
+ gSprites[gObjectBankIDs[a]].pos1.y = sub_8077F68(a);
}
else
{
@@ -659,15 +654,15 @@ void sub_8031FC4(u8 bank1, u8 bank2, bool8 c)
}
else
{
- r10 = GetBankIdentity(bank1);
- if (GetBankSide(bank2) == 1)
- species = GetMonData(&gEnemyParty[gBattlePartyID[bank2]], MON_DATA_SPECIES);
+ r10 = GetBankIdentity(a);
+ if (GetBankSide(b) == 1)
+ species = GetMonData(&gEnemyParty[gBattlePartyID[b]], MON_DATA_SPECIES);
else
- species = GetMonData(&gPlayerParty[gBattlePartyID[bank2]], MON_DATA_SPECIES);
- if (GetBankSide(bank1) == 0)
+ species = GetMonData(&gPlayerParty[gBattlePartyID[b]], MON_DATA_SPECIES);
+ if (GetBankSide(a) == 0)
{
- personalityValue = GetMonData(&gPlayerParty[gBattlePartyID[bank1]], MON_DATA_PERSONALITY);
- otId = GetMonData(&gPlayerParty[gBattlePartyID[bank1]], MON_DATA_OT_ID);
+ personalityValue = GetMonData(&gPlayerParty[gBattlePartyID[a]], MON_DATA_PERSONALITY);
+ otId = GetMonData(&gPlayerParty[gBattlePartyID[a]], MON_DATA_OT_ID);
HandleLoadSpecialPokePic(
&gMonBackPicTable[species],
gMonBackPicCoords[species].coords,
@@ -675,12 +670,12 @@ void sub_8031FC4(u8 bank1, u8 bank2, bool8 c)
0x02000000,
gUnknown_081FAF4C[r10],
species,
- gPID_perBank[bank1]);
+ gPID_perBank[a]);
}
else
{
- personalityValue = GetMonData(&gEnemyParty[gBattlePartyID[bank1]], MON_DATA_PERSONALITY);
- otId = GetMonData(&gEnemyParty[gBattlePartyID[bank1]], MON_DATA_OT_ID);
+ personalityValue = GetMonData(&gEnemyParty[gBattlePartyID[a]], MON_DATA_PERSONALITY);
+ otId = GetMonData(&gEnemyParty[gBattlePartyID[a]], MON_DATA_OT_ID);
HandleLoadSpecialPokePic(
&gMonFrontPicTable[species],
gMonFrontPicCoords[species].coords,
@@ -688,13 +683,13 @@ void sub_8031FC4(u8 bank1, u8 bank2, bool8 c)
0x02000000,
gUnknown_081FAF4C[r10],
species,
- gPID_perBank[bank1]);
+ gPID_perBank[a]);
}
}
src = gUnknown_081FAF4C[r10];
- dst = (void *)(VRAM + 0x10000 + gSprites[gObjectBankIDs[bank1]].oam.tileNum * 32);
+ dst = (void *)(VRAM + 0x10000 + gSprites[gObjectBankIDs[a]].oam.tileNum * 32);
DmaCopy32(3, src, dst, 0x800);
- paletteOffset = 0x100 + bank1 * 16;
+ paletteOffset = 0x100 + a * 16;
lzPaletteData = species_and_otid_get_pal(species, otId, personalityValue);
sub_800D238(lzPaletteData, ewram);
LoadPalette(ewram, paletteOffset, 32);
@@ -703,17 +698,17 @@ void sub_8031FC4(u8 bank1, u8 bank2, bool8 c)
u16 *paletteSrc = (u16 *)(ewram + 0x16400);
sub_800D238(lzPaletteData, paletteSrc);
- LoadPalette(paletteSrc + gBattleMonForms[bank2] * 16, paletteOffset, 32);
+ LoadPalette(paletteSrc + gBattleMonForms[b] * 16, paletteOffset, 32);
}
BlendPalette(paletteOffset, 16, 6, 0x7FFF);
CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32);
if (!IsContest())
{
- ewram17800[bank1].transformedSpecies = species;
- gBattleMonForms[bank1] = gBattleMonForms[bank2];
+ ewram17800[a].transformedSpecies = species;
+ gBattleMonForms[a] = gBattleMonForms[b];
}
- gSprites[gObjectBankIDs[bank1]].pos1.y = sub_8077F68(bank1);
- StartSpriteAnim(&gSprites[gObjectBankIDs[bank1]], gBattleMonForms[bank1]);
+ gSprites[gObjectBankIDs[a]].pos1.y = sub_8077F68(a);
+ StartSpriteAnim(&gSprites[gObjectBankIDs[a]], gBattleMonForms[a]);
}
}
@@ -958,278 +953,3 @@ void sub_8032AA8(u8 a, u8 b)
if (b == 0)
sub_80324E0(a);
}
-
-void nullsub_45(void)
-{
-}
-
-void SetBankFuncToOpponentBufferRunCommand(void)
-{
- gBattleBankFunc[gActiveBank] = OpponentBufferRunCommand;
-}
-
-void OpponentBufferRunCommand(void)
-{
- if (gBattleExecBuffer & gBitTable[gActiveBank])
- {
- if (gBattleBufferA[gActiveBank][0] <= 0x38)
- gOpponentBufferCommands[gBattleBufferA[gActiveBank][0]]();
- else
- OpponentBufferExecCompleted();
- }
-}
-
-void sub_8032B4C(void)
-{
- if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy)
- OpponentBufferExecCompleted();
-}
-
-// Duplicate of sub_8032B4C
-void sub_8032B84(void)
-{
- if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy)
- OpponentBufferExecCompleted();
-}
-
-void sub_8032BBC(void)
-{
- if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy)
- {
- sub_8031B74(gSprites[gObjectBankIDs[gActiveBank]].oam.affineParam);
- gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum = gSprites[gObjectBankIDs[gActiveBank]].data5;
- FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]);
- DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]);
- OpponentBufferExecCompleted();
- }
-}
-
-void sub_8032C4C(void)
-{
- if ((--ewram17810[gActiveBank].unk9) == 0xFF)
- {
- ewram17810[gActiveBank].unk9 = 0;
- OpponentBufferExecCompleted();
- }
-}
-
-void sub_8032C88(void)
-{
- bool8 r6 = FALSE;
-
- if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI)))
- {
- if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy)
- r6 = TRUE;
- }
- else
- {
- if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy
- && gSprites[gHealthboxIDs[gActiveBank ^ 2]].callback == SpriteCallbackDummy)
- r6 = TRUE;
- }
- if (IsCryPlayingOrClearCrySongs())
- r6 = FALSE;
-
- if (r6 && ewram17810[gActiveBank].unk1_0 && ewram17810[gActiveBank ^ 2].unk1_0)
- {
- ewram17810[gActiveBank].unk0_7 = 0;
- ewram17810[gActiveBank].unk1_0 = 0;
- ewram17810[gActiveBank ^ 2].unk0_7 = 0;
- ewram17810[gActiveBank ^ 2].unk1_0 = 0;
- FreeSpriteTilesByTag(0x27F9);
- FreeSpritePaletteByTag(0x27F9);
- if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
- m4aMPlayContinue(&gMPlay_BGM);
- else
- m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 256);
- ewram17810[gActiveBank].unk9 = 3;
- gBattleBankFunc[gActiveBank] = sub_8032C4C;
- }
-}
-
-void sub_8032E2C(void)
-{
- if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7)
- sub_8141828(gActiveBank, &gEnemyParty[gBattlePartyID[gActiveBank]]);
- if (!ewram17810[gActiveBank ^ 2].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_7)
- sub_8141828(gActiveBank ^ 2, &gEnemyParty[gBattlePartyID[gActiveBank ^ 2]]);
- if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_3)
- {
- if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
- {
- DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank ^ 2]]);
- sub_8045A5C(
- gHealthboxIDs[gActiveBank ^ 2],
- &gEnemyParty[gBattlePartyID[gActiveBank ^ 2]],
- 0);
- sub_804777C(gActiveBank ^ 2);
- sub_8043DFC(gHealthboxIDs[gActiveBank ^ 2]);
- sub_8032984(
- gActiveBank ^ 2,
- GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank ^ 2]], MON_DATA_SPECIES));
- }
- DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]);
- sub_8045A5C(
- gHealthboxIDs[gActiveBank],
- &gEnemyParty[gBattlePartyID[gActiveBank]],
- 0);
- sub_804777C(gActiveBank);
- sub_8043DFC(gHealthboxIDs[gActiveBank]);
- sub_8032984(
- gActiveBank,
- GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES));
-
- ewram17840.unk9_0 = 0;
- gBattleBankFunc[gActiveBank] = sub_8032C88;
- }
-}
-
-void sub_8033018(void)
-{
- if (gSprites[gObjectBankIDs[gActiveBank]].animEnded == TRUE
- && gSprites[gObjectBankIDs[gActiveBank]].pos2.x == 0)
- {
- if (!ewram17810[gActiveBank].unk0_7)
- {
- sub_8141828(gActiveBank, &gEnemyParty[gBattlePartyID[gActiveBank]]);
- return;
- }
- if (ewram17810[gActiveBank].unk1_0)
- {
- ewram17810[gActiveBank].unk0_7 = 0;
- ewram17810[gActiveBank].unk1_0 = 0;
- FreeSpriteTilesByTag(0x27F9);
- FreeSpritePaletteByTag(0x27F9);
- OpponentBufferExecCompleted();
- return;
- }
- }
-}
-
-void sub_80330C8(void)
-{
- s16 r4 = sub_8045C78(gActiveBank, gHealthboxIDs[gActiveBank], 0, 0);
-
- sub_8043DFC(gHealthboxIDs[gActiveBank]);
- if (r4 != -1)
- sub_80440EC(gHealthboxIDs[gActiveBank], r4, 0);
- else
- OpponentBufferExecCompleted();
-}
-
-void sub_803311C(void)
-{
- if (!gSprites[gObjectBankIDs[gActiveBank]].inUse)
- {
- sub_8043DB0(gHealthboxIDs[gActiveBank]);
- OpponentBufferExecCompleted();
- }
-}
-
-void sub_8033160(void)
-{
- if (!ewram17810[gActiveBank].unk0_6)
- {
- FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]);
- DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]);
- sub_8032A08(gActiveBank);
- sub_8043DB0(gHealthboxIDs[gActiveBank]);
- OpponentBufferExecCompleted();
- }
-}
-
-void sub_80331D0(void)
-{
- if (gUnknown_03004210.state == 0)
- OpponentBufferExecCompleted();
-}
-
-void bx_blink_t7(void)
-{
- u8 spriteId = gObjectBankIDs[gActiveBank];
-
- if (gSprites[spriteId].data1 == 32)
- {
- gSprites[spriteId].data1 = 0;
- gSprites[spriteId].invisible = FALSE;
- gDoingBattleAnim = 0;
- OpponentBufferExecCompleted();
- }
- else
- {
- if (((u16)gSprites[spriteId].data1 % 4) == 0)
- gSprites[spriteId].invisible ^= 1;
- gSprites[spriteId].data1++;
- }
-}
-
-void sub_8033264(void)
-{
- if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy)
- {
- if (ewram17800[gActiveBank].substituteSprite)
- move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6);
- gBattleBankFunc[gActiveBank] = sub_80332D0;
- }
-}
-
-void sub_80332D0(void)
-{
- if (!ewram17810[gActiveBank].unk0_6)
- {
- CreateTask(c3_0802FDF4, 10);
- OpponentBufferExecCompleted();
- }
-}
-
-void sub_8033308(void)
-{
- if (ewram17810[gActiveBank].unk1_0)
- {
- ewram17810[gActiveBank].unk0_7 = 0;
- ewram17810[gActiveBank].unk1_0 = 0;
- FreeSpriteTilesByTag(0x27F9);
- FreeSpritePaletteByTag(0x27F9);
- StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 0);
- sub_8045A5C(
- gHealthboxIDs[gActiveBank],
- &gEnemyParty[gBattlePartyID[gActiveBank]],
- 0);
- sub_804777C(gActiveBank);
- sub_8043DFC(gHealthboxIDs[gActiveBank]);
- sub_8031F88(gActiveBank);
- gBattleBankFunc[gActiveBank] = sub_8033264;
- }
-}
-
-void sub_80333D4(void)
-{
- if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7)
- sub_8141828(gActiveBank, &gEnemyParty[gBattlePartyID[gActiveBank]]);
- if (gSprites[gUnknown_0300434C[gActiveBank]].callback == SpriteCallbackDummy
- && !ewram17810[gActiveBank].unk0_3)
- {
- DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]);
- sub_8032984(gActiveBank, GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES));
- gBattleBankFunc[gActiveBank] = sub_8033308;
- }
-}
-
-void sub_8033494(void)
-{
- if (!ewram17810[gActiveBank].unk0_4)
- OpponentBufferExecCompleted();
-}
-
-void sub_80334C0(void)
-{
- if (!ewram17810[gActiveBank].unk0_5)
- OpponentBufferExecCompleted();
-}
-
-void OpponentBufferExecCompleted(void)
-{
- gBattleBankFunc[gActiveBank] = OpponentBufferRunCommand;
- gBattleExecBuffer &= ~gBitTable[gActiveBank];
-}
diff --git a/src/battle/battle_10.c b/src/battle/battle_controller_linkopponent2.c
index 1a01e5383..2ca7c7970 100644
--- a/src/battle/battle_10.c
+++ b/src/battle/battle_controller_linkopponent2.c
@@ -98,7 +98,9 @@ extern u8 sub_8078874();
extern u8 move_anim_start_t3();
extern void sub_8037FD8(void);
extern void sub_8037F34(void);
-extern void dp01_tbl4_exec_completed(void);
+extern void LinkOpponentBufferExecCompleted(void);
+
+// this file's functions
u32 dp01_getattr_by_ch1_for_player_pokemon__(u8, u8 *);
void sub_8038900(u8);
@@ -108,6 +110,130 @@ void sub_8039B64(void);
void sub_803A2C4(u8);
void sub_803A4E0(void);
+void LinkOpponentHandleGetAttributes(void);
+void LinkOpponentHandlecmd1(void);
+void LinkOpponentHandleSetAttributes(void);
+void LinkOpponentHandlecmd3(void);
+void LinkOpponentHandleLoadPokeSprite(void);
+void LinkOpponentHandleSendOutPoke(void);
+void LinkOpponentHandleReturnPokeToBall(void);
+void LinkOpponentHandleTrainerThrow(void);
+void LinkOpponentHandleTrainerSlide(void);
+void LinkOpponentHandleTrainerSlideBack(void);
+void LinkOpponentHandlecmd10(void);
+void LinkOpponentHandlecmd11(void);
+void LinkOpponentHandlecmd12(void);
+void LinkOpponentHandleBallThrow(void);
+void LinkOpponentHandlePuase(void);
+void LinkOpponentHandleMoveAnimation(void);
+void LinkOpponentHandlePrintString(void);
+void LinkOpponentHandlePrintStringPlayerOnly(void);
+void LinkOpponentHandlecmd18(void);
+void LinkOpponentHandlecmd19(void);
+void LinkOpponentHandlecmd20(void);
+void LinkOpponentHandleOpenBag(void);
+void LinkOpponentHandlecmd22(void);
+void LinkOpponentHandlecmd23(void);
+void LinkOpponentHandleHealthBarUpdate(void);
+void LinkOpponentHandleExpBarUpdate(void);
+void LinkOpponentHandleStatusIconUpdate(void);
+void LinkOpponentHandleStatusAnimation(void);
+void LinkOpponentHandleStatusXor(void);
+void LinkOpponentHandlecmd29(void);
+void LinkOpponentHandleDMATransfer(void);
+void LinkOpponentHandlecmd31(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 LinkOpponentHandlecmd44(void);
+void LinkOpponentHandleFaintingCry(void);
+void LinkOpponentHandleIntroSlide(void);
+void LinkOpponentHandleTrainerBallThrow(void);
+void LinkOpponentHandlecmd48(void);
+void LinkOpponentHandlecmd49(void);
+void LinkOpponentHandlecmd50(void);
+void LinkOpponentHandleSpriteInvisibility(void);
+void LinkOpponentHandleBattleAnimation(void);
+void LinkOpponentHandleLinkStandbyMsg(void);
+void LinkOpponentHandleResetActionMoveSelection(void);
+void LinkOpponentHandlecmd55(void);
+void LinkOpponentHandlecmd56(void);
+
+// const data
+
+typedef void (*BattleBufferCmd) (void);
+const BattleBufferCmd gLinkOpponentBufferCommands[] =
+{
+ LinkOpponentHandleGetAttributes,
+ LinkOpponentHandlecmd1,
+ LinkOpponentHandleSetAttributes,
+ LinkOpponentHandlecmd3,
+ LinkOpponentHandleLoadPokeSprite,
+ LinkOpponentHandleSendOutPoke,
+ LinkOpponentHandleReturnPokeToBall,
+ LinkOpponentHandleTrainerThrow,
+ LinkOpponentHandleTrainerSlide,
+ LinkOpponentHandleTrainerSlideBack,
+ LinkOpponentHandlecmd10,
+ LinkOpponentHandlecmd11,
+ LinkOpponentHandlecmd12,
+ LinkOpponentHandleBallThrow,
+ LinkOpponentHandlePuase,
+ LinkOpponentHandleMoveAnimation,
+ LinkOpponentHandlePrintString,
+ LinkOpponentHandlePrintStringPlayerOnly,
+ LinkOpponentHandlecmd18,
+ LinkOpponentHandlecmd19,
+ LinkOpponentHandlecmd20,
+ LinkOpponentHandleOpenBag,
+ LinkOpponentHandlecmd22,
+ LinkOpponentHandlecmd23,
+ LinkOpponentHandleHealthBarUpdate,
+ LinkOpponentHandleExpBarUpdate,
+ LinkOpponentHandleStatusIconUpdate,
+ LinkOpponentHandleStatusAnimation,
+ LinkOpponentHandleStatusXor,
+ LinkOpponentHandlecmd29,
+ LinkOpponentHandleDMATransfer,
+ LinkOpponentHandlecmd31,
+ LinkOpponentHandlecmd32,
+ LinkOpponentHandlecmd33,
+ LinkOpponentHandlecmd34,
+ LinkOpponentHandlecmd35,
+ LinkOpponentHandlecmd36,
+ LinkOpponentHandlecmd37,
+ LinkOpponentHandlecmd38,
+ LinkOpponentHandlecmd39,
+ LinkOpponentHandlecmd40,
+ LinkOpponentHandleHitAnimation,
+ LinkOpponentHandlecmd42,
+ LinkOpponentHandleEffectivenessSound,
+ LinkOpponentHandlecmd44,
+ LinkOpponentHandleFaintingCry,
+ LinkOpponentHandleIntroSlide,
+ LinkOpponentHandleTrainerBallThrow,
+ LinkOpponentHandlecmd48,
+ LinkOpponentHandlecmd49,
+ LinkOpponentHandlecmd50,
+ LinkOpponentHandleSpriteInvisibility,
+ LinkOpponentHandleBattleAnimation,
+ LinkOpponentHandleLinkStandbyMsg,
+ LinkOpponentHandleResetActionMoveSelection,
+ LinkOpponentHandlecmd55,
+ LinkOpponentHandlecmd56
+};
+
+// code
+
void LinkOpponentHandleGetAttributes(void)
{
u8 buffer[0x100];
@@ -129,8 +255,8 @@ void LinkOpponentHandleGetAttributes(void)
r4 >>= 1;
}
}
- dp01_build_cmdbuf_x1D_1D_numargs_varargs(1, r6, buffer);
- dp01_tbl4_exec_completed();
+ Emitcmd29(1, r6, buffer);
+ LinkOpponentBufferExecCompleted();
}
u32 dp01_getattr_by_ch1_for_player_pokemon__(u8 a, u8 *buffer)
@@ -438,12 +564,12 @@ u32 dp01_getattr_by_ch1_for_player_pokemon__(u8 a, u8 *buffer)
return size;
}
-void sub_803889C(void)
+void LinkOpponentHandlecmd1(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_80388A8(void)
+void LinkOpponentHandleSetAttributes(void)
{
u8 i;
u8 r4;
@@ -462,7 +588,7 @@ void sub_80388A8(void)
r4 >>= 1;
}
}
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
void sub_8038900(u8 a)
@@ -681,7 +807,7 @@ void sub_8038900(u8 a)
}
}
-void sub_8039220(void)
+void LinkOpponentHandlecmd3(void)
{
u8 *dst;
u8 i;
@@ -689,10 +815,10 @@ void sub_8039220(void)
dst = (u8 *)&gEnemyParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1];
for (i = 0; i < gBattleBufferA[gActiveBank][2]; i++)
dst[i] = gBattleBufferA[gActiveBank][3 + i];
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039294(void)
+void LinkOpponentHandleLoadPokeSprite(void)
{
u16 species = GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES);
@@ -711,7 +837,7 @@ void sub_8039294(void)
gBattleBankFunc[gActiveBank] = sub_8037A74;
}
-void sub_80393E4(void)
+void LinkOpponentHandleSendOutPoke(void)
{
gBattlePartyID[gActiveBank] = gBattleBufferA[gActiveBank][1];
sub_8039430(gActiveBank, gBattleBufferA[gActiveBank][2]);
@@ -743,7 +869,7 @@ void sub_8039430(u8 a, u8 b)
gSprites[gUnknown_0300434C[a]].data0 = sub_8046400(0, 0xFE);
}
-void sub_80395B4(void)
+void LinkOpponentHandleReturnPokeToBall(void)
{
if (gBattleBufferA[gActiveBank][1] == 0)
{
@@ -756,7 +882,7 @@ void sub_80395B4(void)
DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]);
sub_8032A08(gActiveBank);
sub_8043DB0(gHealthboxIDs[gActiveBank]);
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
}
@@ -780,7 +906,7 @@ void sub_8039648(void)
}
}
-void sub_80396D0(void)
+void LinkOpponentHandleTrainerThrow(void)
{
s16 xOffset;
u32 gender;
@@ -814,12 +940,12 @@ void sub_80396D0(void)
gBattleBankFunc[gActiveBank] = sub_803757C;
}
-void sub_80398A4(void)
+void LinkOpponentHandleTrainerSlide(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_80398B0(void)
+void LinkOpponentHandleTrainerSlideBack(void)
{
oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]);
gSprites[gObjectBankIDs[gActiveBank]].data0 = 35;
@@ -830,7 +956,7 @@ void sub_80398B0(void)
gBattleBankFunc[gActiveBank] = sub_80375B4;
}
-void sub_803995C(void)
+void LinkOpponentHandlecmd10(void)
{
if (ewram17810[gActiveBank].unk4 == 0)
{
@@ -847,27 +973,27 @@ void sub_803995C(void)
}
}
-void sub_8039A00(void)
+void LinkOpponentHandlecmd11(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039A0C(void)
+void LinkOpponentHandlecmd12(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039A18(void)
+void LinkOpponentHandleBallThrow(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039A24(void)
+void LinkOpponentHandlePuase(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039A30(void)
+void LinkOpponentHandleMoveAnimation(void)
{
if (!mplay_80342A4(gActiveBank))
{
@@ -890,7 +1016,7 @@ void sub_8039A30(void)
// Dead code. sub_8031720 always returns 0.
if (sub_8031720(r0, gUnknown_0202F7C4) != 0)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
else
{
@@ -945,13 +1071,13 @@ void sub_8039B64(void)
gActiveBank,
gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
ewram17810[gActiveBank].unk4 = 0;
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
break;
}
}
-void sub_8039CC8(void)
+void LinkOpponentHandlePrintString(void)
{
gUnknown_030042A4 = 0;
gUnknown_030042A0 = 0;
@@ -960,42 +1086,42 @@ void sub_8039CC8(void)
gBattleBankFunc[gActiveBank] = sub_8037C2C;
}
-void sub_8039D2C(void)
+void LinkOpponentHandlePrintStringPlayerOnly(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039D38(void)
+void LinkOpponentHandlecmd18(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039D44(void)
+void LinkOpponentHandlecmd19(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039D50(void)
+void LinkOpponentHandlecmd20(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039D5C(void)
+void LinkOpponentHandleOpenBag(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039D68(void)
+void LinkOpponentHandlecmd22(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039D74(void)
+void LinkOpponentHandlecmd23(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039D80(void)
+void LinkOpponentHandleHealthBarUpdate(void)
{
s16 r7;
@@ -1017,12 +1143,12 @@ void sub_8039D80(void)
gBattleBankFunc[gActiveBank] = sub_8037B24;
}
-void sub_8039E70(void)
+void LinkOpponentHandleExpBarUpdate(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039E7C(void)
+void LinkOpponentHandleStatusIconUpdate(void)
{
if (mplay_80342A4(gActiveBank) == 0)
{
@@ -1032,7 +1158,7 @@ void sub_8039E7C(void)
}
}
-void sub_8039EF0(void)
+void LinkOpponentHandleStatusAnimation(void)
{
if (mplay_80342A4(gActiveBank) == 0)
{
@@ -1046,80 +1172,80 @@ void sub_8039EF0(void)
}
}
-void sub_8039F58(void)
+void LinkOpponentHandleStatusXor(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039F64(void)
+void LinkOpponentHandlecmd29(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039F70(void)
+void LinkOpponentHandleDMATransfer(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039F7C(void)
+void LinkOpponentHandlecmd31(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039F88(void)
+void LinkOpponentHandlecmd32(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039F94(void)
+void LinkOpponentHandlecmd33(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039FA0(void)
+void LinkOpponentHandlecmd34(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039FAC(void)
+void LinkOpponentHandlecmd35(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039FB8(void)
+void LinkOpponentHandlecmd36(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039FC4(void)
+void LinkOpponentHandlecmd37(void)
{
gUnknown_020238C8.unk0_0 = 0;
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039FE0(void)
+void LinkOpponentHandlecmd38(void)
{
gUnknown_020238C8.unk0_0 = gBattleBufferA[gActiveBank][1];
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_803A018(void)
+void LinkOpponentHandlecmd39(void)
{
gUnknown_020238C8.unk0_7 = 0;
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_803A030(void)
+void LinkOpponentHandlecmd40(void)
{
gUnknown_020238C8.unk0_7 ^= 1;
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void dp01t_29_4_blink(void)
+void LinkOpponentHandleHitAnimation(void)
{
if (gSprites[gObjectBankIDs[gActiveBank]].invisible == TRUE)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
else
{
@@ -1130,12 +1256,12 @@ void dp01t_29_4_blink(void)
}
}
-void sub_803A0C8(void)
+void LinkOpponentHandlecmd42(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_803A0D4(void)
+void LinkOpponentHandleEffectivenessSound(void)
{
s8 pan;
@@ -1144,31 +1270,31 @@ void sub_803A0D4(void)
else
pan = 63;
PlaySE12WithPanning(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8), pan);
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_803A118(void)
+void LinkOpponentHandlecmd44(void)
{
PlayFanfare(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_803A148(void)
+void LinkOpponentHandleFaintingCry(void)
{
PlayCry3(
GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES),
25, 5);
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void dp01t_2E_4_battle_intro(void)
+void LinkOpponentHandleIntroSlide(void)
{
sub_80E43C0(gBattleBufferA[gActiveBank][1]);
gUnknown_02024DE8 |= 1;
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_803A1B8(void)
+void LinkOpponentHandleTrainerBallThrow(void)
{
u8 taskId;
@@ -1219,11 +1345,11 @@ void sub_803A3A8(struct Sprite *sprite)
DestroySprite(sprite);
}
-void sub_803A3DC(void)
+void LinkOpponentHandlecmd48(void)
{
if (gBattleBufferA[gActiveBank][1] != 0 && GetBankSide(gActiveBank) == 0)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
return;
}
@@ -1256,33 +1382,33 @@ void sub_803A4E0(void)
if (ewram17810[gActiveBank].unk5++ >= 93)
{
ewram17810[gActiveBank].unk5 = 0;
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
}
-void sub_803A520(void)
+void LinkOpponentHandlecmd49(void)
{
if (ewram17810[gActiveBank].unk0_0)
gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0;
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_803A56C(void)
+void LinkOpponentHandlecmd50(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_803A578(void)
+void LinkOpponentHandleSpriteInvisibility(void)
{
if (sub_8078874(gActiveBank) != 0)
{
gSprites[gObjectBankIDs[gActiveBank]].invisible = gBattleBufferA[gActiveBank][1];
sub_8031F88(gActiveBank);
}
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void bx_exec_buffer_A_ch0_tbl4(void)
+void LinkOpponentHandleBattleAnimation(void)
{
if (mplay_80342A4(gActiveBank) == 0)
{
@@ -1290,23 +1416,23 @@ void bx_exec_buffer_A_ch0_tbl4(void)
u16 r4 = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8);
if (move_anim_start_t3(gActiveBank, gActiveBank, gActiveBank, r3, r4) != 0)
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
else
gBattleBankFunc[gActiveBank] = sub_8037FD8;
}
}
-void sub_803A640(void)
+void LinkOpponentHandleLinkStandbyMsg(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_803A64C(void)
+void LinkOpponentHandleResetActionMoveSelection(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_803A658(void)
+void LinkOpponentHandlecmd55(void)
{
if (gBattleBufferA[gActiveBank][1] == 3)
gBattleOutcome = gBattleBufferA[gActiveBank][1];
@@ -1314,10 +1440,10 @@ void sub_803A658(void)
gBattleOutcome = gBattleBufferA[gActiveBank][1] ^ 3;
FadeOutMapMusic(5);
BeginFastPaletteFade(3);
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
gBattleBankFunc[gActiveBank] = sub_8037F34;
}
-void nullsub_48(void)
+void LinkOpponentHandlecmd56(void)
{
}
diff --git a/src/battle/battle_811DA74.c b/src/battle/battle_controller_linkpartner.c
index 14f547b82..4308a8a5c 100644
--- a/src/battle/battle_811DA74.c
+++ b/src/battle/battle_controller_linkpartner.c
@@ -64,7 +64,6 @@ extern u8 gUnknown_0300434C[];
extern u8 gBattleMonForms[];
extern u8 gAnimScriptActive;
extern void (*gAnimScriptCallback)(void);
-extern void (*const gLinkPartnerBufferCommands[])(void);
extern u8 move_anim_start_t3();
extern u8 sub_8078874();
@@ -111,6 +110,8 @@ extern void sub_8031F88();
extern void sub_8141828();
extern void c2_8011A1C(void);
+// this file's functions
+
void LinkPartnerBufferRunCommand(void);
void sub_811E0A0(void);
void LinkPartnerBufferExecCompleted(void);
@@ -122,6 +123,127 @@ void sub_811FF30(void);
void sub_812071C(u8);
void sub_81208E0(void);
+void LinkPartnerHandleGetAttributes(void);
+void LinkPartnerHandlecmd1(void);
+void LinkPartnerHandleSetAttributes(void);
+void LinkPartnerHandlecmd3(void);
+void LinkPartnerHandleLoadPokeSprite(void);
+void LinkPartnerHandleSendOutPoke(void);
+void LinkPartnerHandleReturnPokeToBall(void);
+void LinkPartnerHandleTrainerThrow(void);
+void LinkPartnerHandleTrainerSlide(void);
+void LinkPartnerHandleTrainerSlideBack(void);
+void LinkPartnerHandlecmd10(void);
+void LinkPartnerHandlecmd11(void);
+void LinkPartnerHandlecmd12(void);
+void LinkPartnerHandleBallThrow(void);
+void LinkPartnerHandlePuase(void);
+void LinkPartnerHandleMoveAnimation(void);
+void LinkPartnerHandlePrintString(void);
+void LinkPartnerHandlePrintStringPlayerOnly(void);
+void LinkPartnerHandlecmd18(void);
+void LinkPartnerHandlecmd19(void);
+void LinkPartnerHandlecmd20(void);
+void LinkPartnerHandleOpenBag(void);
+void LinkPartnerHandlecmd22(void);
+void LinkPartnerHandlecmd23(void);
+void LinkPartnerHandleHealthBarUpdate(void);
+void LinkPartnerHandleExpBarUpdate(void);
+void LinkPartnerHandleStatusIconUpdate(void);
+void LinkPartnerHandleStatusAnimation(void);
+void LinkPartnerHandleStatusXor(void);
+void LinkPartnerHandlecmd29(void);
+void LinkPartnerHandleDMATransfer(void);
+void LinkPartnerHandlecmd31(void);
+void LinkPartnerHandlecmd32(void);
+void LinkPartnerHandlecmd33(void);
+void LinkPartnerHandlecmd34(void);
+void LinkPartnerHandlecmd35(void);
+void LinkPartnerHandlecmd36(void);
+void LinkPartnerHandlecmd37(void);
+void LinkPartnerHandlecmd38(void);
+void LinkPartnerHandlecmd39(void);
+void LinkPartnerHandlecmd40(void);
+void LinkPartnerHandleHitAnimation(void);
+void LinkPartnerHandlecmd42(void);
+void LinkPartnerHandleEffectivenessSound(void);
+void LinkPartnerHandlecmd44(void);
+void LinkPartnerHandleFaintingCry(void);
+void LinkPartnerHandleIntroSlide(void);
+void LinkPartnerHandleTrainerBallThrow(void);
+void LinkPartnerHandlecmd48(void);
+void LinkPartnerHandlecmd49(void);
+void LinkPartnerHandlecmd50(void);
+void LinkPartnerHandleSpriteInvisibility(void);
+void LinkPartnerHandleBattleAnimation(void);
+void LinkPartnerHandleLinkStandbyMsg(void);
+void LinkPartnerHandleResetActionMoveSelection(void);
+void LinkPartnerHandlecmd55(void);
+void LinkPartnerHandlecmd56(void);
+
+// const data
+typedef void (*BattleBufferCmd) (void);
+static const BattleBufferCmd gLinkPartnerBufferCommands[] =
+{
+ LinkPartnerHandleGetAttributes,
+ LinkPartnerHandlecmd1,
+ LinkPartnerHandleSetAttributes,
+ LinkPartnerHandlecmd3,
+ LinkPartnerHandleLoadPokeSprite,
+ LinkPartnerHandleSendOutPoke,
+ LinkPartnerHandleReturnPokeToBall,
+ LinkPartnerHandleTrainerThrow,
+ LinkPartnerHandleTrainerSlide,
+ LinkPartnerHandleTrainerSlideBack,
+ LinkPartnerHandlecmd10,
+ LinkPartnerHandlecmd11,
+ LinkPartnerHandlecmd12,
+ LinkPartnerHandleBallThrow,
+ LinkPartnerHandlePuase,
+ LinkPartnerHandleMoveAnimation,
+ LinkPartnerHandlePrintString,
+ LinkPartnerHandlePrintStringPlayerOnly,
+ LinkPartnerHandlecmd18,
+ LinkPartnerHandlecmd19,
+ LinkPartnerHandlecmd20,
+ LinkPartnerHandleOpenBag,
+ LinkPartnerHandlecmd22,
+ LinkPartnerHandlecmd23,
+ LinkPartnerHandleHealthBarUpdate,
+ LinkPartnerHandleExpBarUpdate,
+ LinkPartnerHandleStatusIconUpdate,
+ LinkPartnerHandleStatusAnimation,
+ LinkPartnerHandleStatusXor,
+ LinkPartnerHandlecmd29,
+ LinkPartnerHandleDMATransfer,
+ LinkPartnerHandlecmd31,
+ LinkPartnerHandlecmd32,
+ LinkPartnerHandlecmd33,
+ LinkPartnerHandlecmd34,
+ LinkPartnerHandlecmd35,
+ LinkPartnerHandlecmd36,
+ LinkPartnerHandlecmd37,
+ LinkPartnerHandlecmd38,
+ LinkPartnerHandlecmd39,
+ LinkPartnerHandlecmd40,
+ LinkPartnerHandleHitAnimation,
+ LinkPartnerHandlecmd42,
+ LinkPartnerHandleEffectivenessSound,
+ LinkPartnerHandlecmd44,
+ LinkPartnerHandleFaintingCry,
+ LinkPartnerHandleIntroSlide,
+ LinkPartnerHandleTrainerBallThrow,
+ LinkPartnerHandlecmd48,
+ LinkPartnerHandlecmd49,
+ LinkPartnerHandlecmd50,
+ LinkPartnerHandleSpriteInvisibility,
+ LinkPartnerHandleBattleAnimation,
+ LinkPartnerHandleLinkStandbyMsg,
+ LinkPartnerHandleResetActionMoveSelection,
+ LinkPartnerHandlecmd55,
+ LinkPartnerHandlecmd56,
+};
+// code starts here
void nullsub_74(void)
{
@@ -421,7 +543,7 @@ void LinkPartnerHandleGetAttributes(void)
r4 >>= 1;
}
}
- dp01_build_cmdbuf_x1D_1D_numargs_varargs(1, r6, unk);
+ Emitcmd29(1, r6, unk);
LinkPartnerBufferExecCompleted();
}
@@ -731,7 +853,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon(u8 a, u8 *buffer)
return size;
}
-void sub_811EC04(void)
+void LinkPartnerHandlecmd1(void)
{
LinkPartnerBufferExecCompleted();
}
@@ -976,7 +1098,7 @@ void sub_811EC68(u8 a)
sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
}
-void sub_811F664(void)
+void LinkPartnerHandlecmd3(void)
{
u8 *dst;
u8 i;
@@ -987,7 +1109,7 @@ void sub_811F664(void)
LinkPartnerBufferExecCompleted();
}
-void sub_811F6D8(void)
+void LinkPartnerHandleLoadPokeSprite(void)
{
BattleLoadPlayerMonSprite(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
GetMonSpriteTemplate_803C56C(
@@ -1005,7 +1127,7 @@ void sub_811F6D8(void)
gBattleBankFunc[gActiveBank] = sub_811DDE8;
}
-void sub_811F7F4(void)
+void LinkPartnerHandleSendOutPoke(void)
{
sub_8032AA8(gActiveBank, gBattleBufferA[gActiveBank][2]);
gBattlePartyID[gActiveBank] = gBattleBufferA[gActiveBank][1];
@@ -1038,7 +1160,7 @@ void sub_811F864(u8 a, u8 b)
gSprites[gUnknown_0300434C[a]].data0 = sub_8046400(0, 0xFF);
}
-void sub_811F9D0(void)
+void LinkPartnerHandleReturnPokeToBall(void)
{
if (gBattleBufferA[gActiveBank][1] == 0)
{
@@ -1074,7 +1196,7 @@ void sub_811FA5C(void)
}
}
-void sub_811FAE4(void)
+void LinkPartnerHandleTrainerThrow(void)
{
s16 xOffset;
u32 gender;
@@ -1105,12 +1227,12 @@ void sub_811FAE4(void)
gBattleBankFunc[gActiveBank] = sub_811DAE4;
}
-void sub_811FC30(void)
+void LinkPartnerHandleTrainerSlide(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_811FC3C(void)
+void LinkPartnerHandleTrainerSlideBack(void)
{
oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]);
gSprites[gObjectBankIDs[gActiveBank]].data0 = 35;
@@ -1121,7 +1243,7 @@ void sub_811FC3C(void)
gBattleBankFunc[gActiveBank] = sub_811DB1C;
}
-void sub_811FCE8(void)
+void LinkPartnerHandlecmd10(void)
{
if (ewram17810[gActiveBank].unk4 == 0)
{
@@ -1141,27 +1263,27 @@ void sub_811FCE8(void)
}
}
-void sub_811FDCC(void)
+void LinkPartnerHandlecmd11(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_811FDD8(void)
+void LinkPartnerHandlecmd12(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_811FDE4(void)
+void LinkPartnerHandleBallThrow(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_811FDF0(void)
+void LinkPartnerHandlePuase(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_811FDFC(void)
+void LinkPartnerHandleMoveAnimation(void)
{
if (!mplay_80342A4(gActiveBank))
{
@@ -1242,7 +1364,7 @@ void sub_811FF30(void)
}
}
-void sub_8120094(void)
+void LinkPartnerHandlePrintString(void)
{
gUnknown_030042A4 = 0;
gUnknown_030042A0 = 0;
@@ -1251,37 +1373,37 @@ void sub_8120094(void)
gBattleBankFunc[gActiveBank] = sub_811DFA0;
}
-void sub_81200F8(void)
+void LinkPartnerHandlePrintStringPlayerOnly(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120104(void)
+void LinkPartnerHandlecmd18(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120110(void)
+void LinkPartnerHandlecmd19(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_812011C(void)
+void LinkPartnerHandlecmd20(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120128(void)
+void LinkPartnerHandleOpenBag(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120134(void)
+void LinkPartnerHandlecmd22(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120140(void)
+void LinkPartnerHandlecmd23(void)
{
LinkPartnerBufferExecCompleted();
}
@@ -1337,70 +1459,70 @@ void LinkPartnerHandleStatusAnimation(void)
}
}
-void sub_8120324(void)
+void LinkPartnerHandleStatusXor(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120330(void)
+void LinkPartnerHandlecmd29(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_812033C(void)
+void LinkPartnerHandleDMATransfer(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120348(void)
+void LinkPartnerHandlecmd31(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120354(void)
+void LinkPartnerHandlecmd32(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120360(void)
+void LinkPartnerHandlecmd33(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_812036C(void)
+void LinkPartnerHandlecmd34(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120378(void)
+void LinkPartnerHandlecmd35(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120384(void)
+void LinkPartnerHandlecmd36(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120390(void)
+void LinkPartnerHandlecmd37(void)
{
gUnknown_020238C8.unk0_0 = 0;
LinkPartnerBufferExecCompleted();
}
-void sub_81203AC(void)
+void LinkPartnerHandlecmd38(void)
{
gUnknown_020238C8.unk0_0 = gBattleBufferA[gActiveBank][1];
LinkPartnerBufferExecCompleted();
}
-void sub_81203E4(void)
+void LinkPartnerHandlecmd39(void)
{
gUnknown_020238C8.unk0_7 = 0;
LinkPartnerBufferExecCompleted();
}
-void sub_81203FC(void)
+void LinkPartnerHandlecmd40(void)
{
gUnknown_020238C8.unk0_7 ^= 1;
LinkPartnerBufferExecCompleted();
@@ -1421,7 +1543,7 @@ void LinkPartnerHandleHitAnimation(void)
}
}
-void sub_8120494(void)
+void LinkPartnerHandlecmd42(void)
{
LinkPartnerBufferExecCompleted();
}
@@ -1438,7 +1560,7 @@ void LinkPartnerHandleEffectivenessSound(void)
LinkPartnerBufferExecCompleted();
}
-void sub_81204E4(void)
+void LinkPartnerHandlecmd44(void)
{
PlayFanfare(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
LinkPartnerBufferExecCompleted();
@@ -1452,14 +1574,14 @@ void LinkPartnerHandleFaintingCry(void)
LinkPartnerBufferExecCompleted();
}
-void dp01t_2E_3_battle_intro(void)
+void LinkPartnerHandleIntroSlide(void)
{
sub_80E43C0(gBattleBufferA[gActiveBank][1]);
gUnknown_02024DE8 |= 1;
LinkPartnerBufferExecCompleted();
}
-void sub_8120588(void)
+void LinkPartnerHandleTrainerBallThrow(void)
{
u8 r4;
u8 taskId;
@@ -1517,7 +1639,7 @@ void sub_812071C(u8 taskId)
DestroyTask(taskId);
}
-void dp01t_30_3_80EB11C(void)
+void LinkPartnerHandlecmd48(void)
{
if (gBattleBufferA[gActiveBank][1] != 0 && GetBankSide(gActiveBank) == 0)
{
@@ -1546,19 +1668,19 @@ void sub_81208E0(void)
}
}
-void sub_8120920(void)
+void LinkPartnerHandlecmd49(void)
{
if (ewram17810[gActiveBank].unk0_0)
gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0;
LinkPartnerBufferExecCompleted();
}
-void sub_812096C(void)
+void LinkPartnerHandlecmd50(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120978(void)
+void LinkPartnerHandleSpriteInvisibility(void)
{
if (sub_8078874(gActiveBank) != 0)
{
@@ -1568,7 +1690,7 @@ void sub_8120978(void)
LinkPartnerBufferExecCompleted();
}
-void sub_81209D8(void)
+void LinkPartnerHandleBattleAnimation(void)
{
if (mplay_80342A4(gActiveBank) == 0)
{
@@ -1582,17 +1704,17 @@ void sub_81209D8(void)
}
}
-void sub_8120A40(void)
+void LinkPartnerHandleLinkStandbyMsg(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120A4C(void)
+void LinkPartnerHandleResetActionMoveSelection(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120A58(void)
+void LinkPartnerHandlecmd55(void)
{
gBattleOutcome = gBattleBufferA[gActiveBank][1];
FadeOutMapMusic(5);
@@ -1601,6 +1723,6 @@ void sub_8120A58(void)
gBattleBankFunc[gActiveBank] = sub_811E29C;
}
-void nullsub_75(void)
+void LinkPartnerHandlecmd56(void)
{
}
diff --git a/src/battle/battle_8.c b/src/battle/battle_controller_opponent.c
index 44e42d0d6..abfa3fef2 100644
--- a/src/battle/battle_8.c
+++ b/src/battle/battle_controller_opponent.c
@@ -1,15 +1,19 @@
#include "global.h"
#include "battle.h"
-#include "battle_ai.h"
#include "battle_interface.h"
#include "data2.h"
-#include "graphics.h"
+#include "battle_811DA74.h"
+#include "battle_anim_813F0F4.h"
+#include "link.h"
+#include "m4a.h"
#include "main.h"
+#include "palette.h"
+#include "pokeball.h"
#include "pokemon.h"
-#include "rng.h"
#include "rom3.h"
-#include "songs.h"
+#include "rom_8077ABC.h"
#include "sound.h"
+#include "songs.h"
#include "sprite.h"
#include "string_util.h"
#include "task.h"
@@ -53,6 +57,11 @@ extern bool8 gDoingBattleAnim;
extern u16 gUnknown_02024DE8;
extern u8 gUnknown_02024E68[];
extern MainCallback gPreBattleCallback1;
+extern void (*const gOpponentBufferCommands[])(void);
+extern struct MusicPlayerInfo gMPlay_SE1;
+extern struct MusicPlayerInfo gMPlay_SE2;
+extern struct MusicPlayerInfo gMPlay_BGM;
+extern u32 gBattleExecBuffer;
extern u8 sub_8077ABC();
extern u8 sub_8077F68();
@@ -107,8 +116,11 @@ extern void sub_8032E2C(void);
extern u8 sub_8078874();
extern u8 move_anim_start_t3();
extern void sub_80334C0(void);
-extern void OpponentBufferExecCompleted(void);
+// this file's functions
+
+void OpponentBufferExecCompleted(void);
+void OpponentBufferRunCommand(void);
u32 sub_8033598(u8, u8 *);
void sub_8033E24(u8);
void sub_803495C(u8, u8);
@@ -117,6 +129,407 @@ void sub_8035238(void);
void sub_8035C10(struct Sprite *);
void sub_8035C44(u8);
void sub_8035E2C(void);
+void sub_80332D0(void);
+
+void OpponentHandleGetAttributes(void);
+void OpponentHandlecmd1(void);
+void OpponentHandleSetAttributes(void);
+void OpponentHandlecmd3(void);
+void OpponentHandleLoadPokeSprite(void);
+void OpponentHandleSendOutPoke(void);
+void OpponentHandleReturnPokeToBall(void);
+void OpponentHandleTrainerThrow(void);
+void OpponentHandleTrainerSlide(void);
+void OpponentHandleTrainerSlideBack(void);
+void OpponentHandlecmd10(void);
+void OpponentHandlecmd11(void);
+void OpponentHandlecmd12(void);
+void OpponentHandleBallThrow(void);
+void OpponentHandlePuase(void);
+void OpponentHandleMoveAnimation(void);
+void OpponentHandlePrintString(void);
+void OpponentHandlePrintStringPlayerOnly(void);
+void OpponentHandlecmd18(void);
+void OpponentHandlecmd19(void);
+void OpponentHandlecmd20(void);
+void OpponentHandleOpenBag(void);
+void OpponentHandlecmd22(void);
+void OpponentHandlecmd23(void);
+void OpponentHandleHealthBarUpdate(void);
+void OpponentHandleExpBarUpdate(void);
+void OpponentHandleStatusIconUpdate(void);
+void OpponentHandleStatusAnimation(void);
+void OpponentHandleStatusXor(void);
+void OpponentHandlecmd29(void);
+void OpponentHandleDMATransfer(void);
+void OpponentHandlecmd31(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 OpponentHandlecmd44(void);
+void OpponentHandleFaintingCry(void);
+void OpponentHandleIntroSlide(void);
+void OpponentHandleTrainerBallThrow(void);
+void OpponentHandlecmd48(void);
+void OpponentHandlecmd49(void);
+void OpponentHandlecmd50(void);
+void OpponentHandleSpriteInvisibility(void);
+void OpponentHandleBattleAnimation(void);
+void OpponentHandleLinkStandbyMsg(void);
+void OpponentHandleResetActionMoveSelection(void);
+void OpponentHandlecmd55(void);
+void OpponentHandlecmd56(void);
+
+// const data
+typedef void (*BattleBufferCmd) (void);
+static const BattleBufferCmd gOpponentBufferCommands[] =
+{
+ OpponentHandleGetAttributes,
+ OpponentHandlecmd1,
+ OpponentHandleSetAttributes,
+ OpponentHandlecmd3,
+ OpponentHandleLoadPokeSprite,
+ OpponentHandleSendOutPoke,
+ OpponentHandleReturnPokeToBall,
+ OpponentHandleTrainerThrow,
+ OpponentHandleTrainerSlide,
+ OpponentHandleTrainerSlideBack,
+ OpponentHandlecmd10,
+ OpponentHandlecmd11,
+ OpponentHandlecmd12,
+ OpponentHandleBallThrow,
+ OpponentHandlePuase,
+ OpponentHandleMoveAnimation,
+ OpponentHandlePrintString,
+ OpponentHandlePrintStringPlayerOnly,
+ OpponentHandlecmd18,
+ OpponentHandlecmd19,
+ OpponentHandlecmd20,
+ OpponentHandleOpenBag,
+ OpponentHandlecmd22,
+ OpponentHandlecmd23,
+ OpponentHandleHealthBarUpdate,
+ OpponentHandleExpBarUpdate,
+ OpponentHandleStatusIconUpdate,
+ OpponentHandleStatusAnimation,
+ OpponentHandleStatusXor,
+ OpponentHandlecmd29,
+ OpponentHandleDMATransfer,
+ OpponentHandlecmd31,
+ OpponentHandlecmd32,
+ OpponentHandlecmd33,
+ OpponentHandlecmd34,
+ OpponentHandlecmd35,
+ OpponentHandlecmd36,
+ OpponentHandlecmd37,
+ OpponentHandlecmd38,
+ OpponentHandlecmd39,
+ OpponentHandlecmd40,
+ OpponentHandleHitAnimation,
+ OpponentHandlecmd42,
+ OpponentHandleEffectivenessSound,
+ OpponentHandlecmd44,
+ OpponentHandleFaintingCry,
+ OpponentHandleIntroSlide,
+ OpponentHandleTrainerBallThrow,
+ OpponentHandlecmd48,
+ OpponentHandlecmd49,
+ OpponentHandlecmd50,
+ OpponentHandleSpriteInvisibility,
+ OpponentHandleBattleAnimation,
+ OpponentHandleLinkStandbyMsg,
+ OpponentHandleResetActionMoveSelection,
+ OpponentHandlecmd55,
+ OpponentHandlecmd56,
+};
+
+static const u8 sUnknownBytes[] = {0xB0, 0xB0, 0xC8, 0x98, 0x28, 0x28, 0x28, 0x20};
+
+// code
+
+void nullsub_45(void)
+{
+}
+
+void SetBankFuncToOpponentBufferRunCommand(void)
+{
+ gBattleBankFunc[gActiveBank] = OpponentBufferRunCommand;
+}
+
+void OpponentBufferRunCommand(void)
+{
+ if (gBattleExecBuffer & gBitTable[gActiveBank])
+ {
+ if (gBattleBufferA[gActiveBank][0] <= 0x38)
+ gOpponentBufferCommands[gBattleBufferA[gActiveBank][0]]();
+ else
+ OpponentBufferExecCompleted();
+ }
+}
+
+void sub_8032B4C(void)
+{
+ if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy)
+ OpponentBufferExecCompleted();
+}
+
+// Duplicate of sub_8032B4C
+void sub_8032B84(void)
+{
+ if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy)
+ OpponentBufferExecCompleted();
+}
+
+void sub_8032BBC(void)
+{
+ if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy)
+ {
+ sub_8031B74(gSprites[gObjectBankIDs[gActiveBank]].oam.affineParam);
+ gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum = gSprites[gObjectBankIDs[gActiveBank]].data5;
+ FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]);
+ DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]);
+ OpponentBufferExecCompleted();
+ }
+}
+
+void sub_8032C4C(void)
+{
+ if ((--ewram17810[gActiveBank].unk9) == 0xFF)
+ {
+ ewram17810[gActiveBank].unk9 = 0;
+ OpponentBufferExecCompleted();
+ }
+}
+
+void sub_8032C88(void)
+{
+ bool8 r6 = FALSE;
+
+ if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI)))
+ {
+ if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy)
+ r6 = TRUE;
+ }
+ else
+ {
+ if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy
+ && gSprites[gHealthboxIDs[gActiveBank ^ 2]].callback == SpriteCallbackDummy)
+ r6 = TRUE;
+ }
+ if (IsCryPlayingOrClearCrySongs())
+ r6 = FALSE;
+
+ if (r6 && ewram17810[gActiveBank].unk1_0 && ewram17810[gActiveBank ^ 2].unk1_0)
+ {
+ ewram17810[gActiveBank].unk0_7 = 0;
+ ewram17810[gActiveBank].unk1_0 = 0;
+ ewram17810[gActiveBank ^ 2].unk0_7 = 0;
+ ewram17810[gActiveBank ^ 2].unk1_0 = 0;
+ FreeSpriteTilesByTag(0x27F9);
+ FreeSpritePaletteByTag(0x27F9);
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ m4aMPlayContinue(&gMPlay_BGM);
+ else
+ m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 256);
+ ewram17810[gActiveBank].unk9 = 3;
+ gBattleBankFunc[gActiveBank] = sub_8032C4C;
+ }
+}
+
+void sub_8032E2C(void)
+{
+ if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7)
+ sub_8141828(gActiveBank, &gEnemyParty[gBattlePartyID[gActiveBank]]);
+ if (!ewram17810[gActiveBank ^ 2].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_7)
+ sub_8141828(gActiveBank ^ 2, &gEnemyParty[gBattlePartyID[gActiveBank ^ 2]]);
+ if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_3)
+ {
+ if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ {
+ DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank ^ 2]]);
+ sub_8045A5C(
+ gHealthboxIDs[gActiveBank ^ 2],
+ &gEnemyParty[gBattlePartyID[gActiveBank ^ 2]],
+ 0);
+ sub_804777C(gActiveBank ^ 2);
+ sub_8043DFC(gHealthboxIDs[gActiveBank ^ 2]);
+ sub_8032984(
+ gActiveBank ^ 2,
+ GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank ^ 2]], MON_DATA_SPECIES));
+ }
+ DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]);
+ sub_8045A5C(
+ gHealthboxIDs[gActiveBank],
+ &gEnemyParty[gBattlePartyID[gActiveBank]],
+ 0);
+ sub_804777C(gActiveBank);
+ sub_8043DFC(gHealthboxIDs[gActiveBank]);
+ sub_8032984(
+ gActiveBank,
+ GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES));
+
+ ewram17840.unk9_0 = 0;
+ gBattleBankFunc[gActiveBank] = sub_8032C88;
+ }
+}
+
+void sub_8033018(void)
+{
+ if (gSprites[gObjectBankIDs[gActiveBank]].animEnded == TRUE
+ && gSprites[gObjectBankIDs[gActiveBank]].pos2.x == 0)
+ {
+ if (!ewram17810[gActiveBank].unk0_7)
+ {
+ sub_8141828(gActiveBank, &gEnemyParty[gBattlePartyID[gActiveBank]]);
+ return;
+ }
+ if (ewram17810[gActiveBank].unk1_0)
+ {
+ ewram17810[gActiveBank].unk0_7 = 0;
+ ewram17810[gActiveBank].unk1_0 = 0;
+ FreeSpriteTilesByTag(0x27F9);
+ FreeSpritePaletteByTag(0x27F9);
+ OpponentBufferExecCompleted();
+ return;
+ }
+ }
+}
+
+void sub_80330C8(void)
+{
+ s16 r4 = sub_8045C78(gActiveBank, gHealthboxIDs[gActiveBank], 0, 0);
+
+ sub_8043DFC(gHealthboxIDs[gActiveBank]);
+ if (r4 != -1)
+ sub_80440EC(gHealthboxIDs[gActiveBank], r4, 0);
+ else
+ OpponentBufferExecCompleted();
+}
+
+void sub_803311C(void)
+{
+ if (!gSprites[gObjectBankIDs[gActiveBank]].inUse)
+ {
+ sub_8043DB0(gHealthboxIDs[gActiveBank]);
+ OpponentBufferExecCompleted();
+ }
+}
+
+void sub_8033160(void)
+{
+ if (!ewram17810[gActiveBank].unk0_6)
+ {
+ FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]);
+ DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]);
+ sub_8032A08(gActiveBank);
+ sub_8043DB0(gHealthboxIDs[gActiveBank]);
+ OpponentBufferExecCompleted();
+ }
+}
+
+void sub_80331D0(void)
+{
+ if (gUnknown_03004210.state == 0)
+ OpponentBufferExecCompleted();
+}
+
+void bx_blink_t7(void)
+{
+ u8 spriteId = gObjectBankIDs[gActiveBank];
+
+ if (gSprites[spriteId].data1 == 32)
+ {
+ gSprites[spriteId].data1 = 0;
+ gSprites[spriteId].invisible = FALSE;
+ gDoingBattleAnim = 0;
+ OpponentBufferExecCompleted();
+ }
+ else
+ {
+ if (((u16)gSprites[spriteId].data1 % 4) == 0)
+ gSprites[spriteId].invisible ^= 1;
+ gSprites[spriteId].data1++;
+ }
+}
+
+void sub_8033264(void)
+{
+ if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy)
+ {
+ if (ewram17800[gActiveBank].substituteSprite)
+ move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6);
+ gBattleBankFunc[gActiveBank] = sub_80332D0;
+ }
+}
+
+void sub_80332D0(void)
+{
+ if (!ewram17810[gActiveBank].unk0_6)
+ {
+ CreateTask(c3_0802FDF4, 10);
+ OpponentBufferExecCompleted();
+ }
+}
+
+void sub_8033308(void)
+{
+ if (ewram17810[gActiveBank].unk1_0)
+ {
+ ewram17810[gActiveBank].unk0_7 = 0;
+ ewram17810[gActiveBank].unk1_0 = 0;
+ FreeSpriteTilesByTag(0x27F9);
+ FreeSpritePaletteByTag(0x27F9);
+ StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 0);
+ sub_8045A5C(
+ gHealthboxIDs[gActiveBank],
+ &gEnemyParty[gBattlePartyID[gActiveBank]],
+ 0);
+ sub_804777C(gActiveBank);
+ sub_8043DFC(gHealthboxIDs[gActiveBank]);
+ sub_8031F88(gActiveBank);
+ gBattleBankFunc[gActiveBank] = sub_8033264;
+ }
+}
+
+void sub_80333D4(void)
+{
+ if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7)
+ sub_8141828(gActiveBank, &gEnemyParty[gBattlePartyID[gActiveBank]]);
+ if (gSprites[gUnknown_0300434C[gActiveBank]].callback == SpriteCallbackDummy
+ && !ewram17810[gActiveBank].unk0_3)
+ {
+ DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]);
+ sub_8032984(gActiveBank, GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES));
+ gBattleBankFunc[gActiveBank] = sub_8033308;
+ }
+}
+
+void sub_8033494(void)
+{
+ if (!ewram17810[gActiveBank].unk0_4)
+ OpponentBufferExecCompleted();
+}
+
+void sub_80334C0(void)
+{
+ if (!ewram17810[gActiveBank].unk0_5)
+ OpponentBufferExecCompleted();
+}
+
+void OpponentBufferExecCompleted(void)
+{
+ gBattleBankFunc[gActiveBank] = OpponentBufferRunCommand;
+ gBattleExecBuffer &= ~gBitTable[gActiveBank];
+}
void OpponentHandleGetAttributes(void)
{
@@ -139,7 +552,7 @@ void OpponentHandleGetAttributes(void)
r4 >>= 1;
}
}
- dp01_build_cmdbuf_x1D_1D_numargs_varargs(1, r6, buffer);
+ Emitcmd29(1, r6, buffer);
OpponentBufferExecCompleted();
}
@@ -448,7 +861,7 @@ u32 sub_8033598(u8 a, u8 *buffer)
return size;
}
-void dp01t_01_2_read_pokmon_data_slice(void)
+void OpponentHandlecmd1(void)
{
struct BattlePokemon buffer;
u8 *src = (u8 *)&gEnemyParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1];
@@ -457,7 +870,7 @@ void dp01t_01_2_read_pokmon_data_slice(void)
for (i = 0; i < gBattleBufferA[gActiveBank][2]; i++)
dst[i] = src[i];
- dp01_build_cmdbuf_x1D_1D_numargs_varargs(1, gBattleBufferA[gActiveBank][2], dst);
+ Emitcmd29(1, gBattleBufferA[gActiveBank][2], dst);
OpponentBufferExecCompleted();
}
@@ -699,7 +1112,7 @@ void sub_8033E24(u8 a)
}
}
-void sub_8034744(void)
+void OpponentHandlecmd3(void)
{
u8 *dst;
u8 i;
@@ -872,7 +1285,7 @@ void OpponentHandleTrainerSlideBack(void)
gBattleBankFunc[gActiveBank] = sub_8032BBC;
}
-void sub_8035030(void)
+void OpponentHandlecmd10(void)
{
if (ewram17810[gActiveBank].unk4 == 0)
{
@@ -889,12 +1302,12 @@ void sub_8035030(void)
}
}
-void sub_80350D4(void)
+void OpponentHandlecmd11(void)
{
OpponentBufferExecCompleted();
}
-void sub_80350E0(void)
+void OpponentHandlecmd12(void)
{
OpponentBufferExecCompleted();
}
@@ -904,7 +1317,7 @@ void OpponentHandleBallThrow(void)
OpponentBufferExecCompleted();
}
-void OpponentHandlePause(void)
+void OpponentHandlePuase(void)
{
OpponentBufferExecCompleted();
}
@@ -1007,19 +1420,19 @@ void OpponentHandlePrintStringPlayerOnly(void)
OpponentBufferExecCompleted();
}
-void sub_803540C(void)
+void OpponentHandlecmd18(void)
{
sub_8036B0C();
OpponentBufferExecCompleted();
}
-void sub_803541C(void)
+void OpponentHandlecmd19(void)
{
OpponentBufferExecCompleted();
}
#ifdef NONMATCHING
-void sub_8035428(void)
+void OpponentHandlecmd20(void)
{
u16 r4;
// Needed to match closer
@@ -1032,10 +1445,10 @@ void sub_8035428(void)
switch (r4)
{
case 5:
- dp01_build_cmdbuf_x21_a_bb(1, 4, 0);
+ Emitcmd33(1, 4, 0);
break;
case 4:
- dp01_build_cmdbuf_x21_a_bb(1, 3, 0);
+ Emitcmd33(1, 3, 0);
break;
default:
if (gBattleMoves[r5->moves[r4]].target & 0x12)
@@ -1047,7 +1460,7 @@ void sub_8035428(void)
gBankTarget = GetBankByPlayerAI(2);
}
r4 |= gBankTarget << 8;
- dp01_build_cmdbuf_x21_a_bb(1, 10, r4);
+ Emitcmd33(1, 10, r4);
break;
}
OpponentBufferExecCompleted();
@@ -1066,26 +1479,26 @@ void sub_8035428(void)
if (gBattleMoves[r2].target & 0x12)
{
r4 |= gActiveBank << 8;
- dp01_build_cmdbuf_x21_a_bb(1, 10, r4);
+ Emitcmd33(1, 10, r4);
}
else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
u16 r2 = GetBankByPlayerAI(Random() & 2) << 8;
- dp01_build_cmdbuf_x21_a_bb(1, 10, r4 | r2);
+ Emitcmd33(1, 10, r4 | r2);
}
else
{
u16 r2 = GetBankByPlayerAI(0) << 8;
- dp01_build_cmdbuf_x21_a_bb(1, 10, r4 | r2);
+ Emitcmd33(1, 10, r4 | r2);
}
OpponentBufferExecCompleted();
}
}
#else
__attribute__((naked))
-void sub_8035428(void)
+void OpponentHandlecmd20(void)
{
asm(".syntax unified\n\
push {r4-r6,lr}\n\
@@ -1121,7 +1534,7 @@ _08035468:\n\
movs r1, 0x3\n\
_0803546C:\n\
movs r2, 0\n\
- bl dp01_build_cmdbuf_x21_a_bb\n\
+ bl Emitcmd33\n\
b _080354E0\n\
_08035474:\n\
ldr r3, _080354E8 @ =gBattleMoves\n\
@@ -1176,7 +1589,7 @@ _080354CE:\n\
movs r0, 0x1\n\
movs r1, 0xA\n\
adds r2, r4, 0\n\
- bl dp01_build_cmdbuf_x21_a_bb\n\
+ bl Emitcmd33\n\
_080354E0:\n\
bl OpponentBufferExecCompleted\n\
b _0803558A\n\
@@ -1213,7 +1626,7 @@ _080354FA:\n\
movs r0, 0x1\n\
movs r1, 0xA\n\
adds r2, r4, 0\n\
- bl dp01_build_cmdbuf_x21_a_bb\n\
+ bl Emitcmd33\n\
b _08035586\n\
.align 2, 0\n\
_08035534: .4byte gBattleMoves\n\
@@ -1238,7 +1651,7 @@ _0803553C:\n\
orrs r2, r4\n\
movs r0, 0x1\n\
movs r1, 0xA\n\
- bl dp01_build_cmdbuf_x21_a_bb\n\
+ bl Emitcmd33\n\
b _08035586\n\
.align 2, 0\n\
_0803556C: .4byte gBattleTypeFlags\n\
@@ -1251,7 +1664,7 @@ _08035570:\n\
orrs r2, r4\n\
movs r0, 0x1\n\
movs r1, 0xA\n\
- bl dp01_build_cmdbuf_x21_a_bb\n\
+ bl Emitcmd33\n\
_08035586:\n\
bl OpponentBufferExecCompleted\n\
_0803558A:\n\
@@ -1262,14 +1675,14 @@ _0803558A:\n\
}
#endif
-void sub_8035590(void)
+void OpponentHandleOpenBag(void)
{
// What is this?
- dp01_build_cmdbuf_x23_aa_0(1, ewram[0x160D4 + gActiveBank / 2 * 2]);
+ Emitcmd35(1, ewram[0x160D4 + gActiveBank / 2 * 2]);
OpponentBufferExecCompleted();
}
-void sub_80355C0(void)
+void OpponentHandlecmd22(void)
{
s32 r4;
@@ -1306,11 +1719,11 @@ void sub_80355C0(void)
ewram[0x160C8 + GetBankIdentity(gActiveBank) / 2] = 6;
}
ewram[0x16068 + gActiveBank] = r4;
- dp01_build_cmdbuf_x22_a_three_bytes(1, r4, 0);
+ Emitcmd34(1, r4, 0);
OpponentBufferExecCompleted();
}
-void sub_80356C0(void)
+void OpponentHandlecmd23(void)
{
OpponentBufferExecCompleted();
}
@@ -1371,7 +1784,7 @@ void OpponentHandleStatusXor(void)
OpponentBufferExecCompleted();
}
-void sub_80358B0(void)
+void OpponentHandlecmd29(void)
{
OpponentBufferExecCompleted();
}
@@ -1381,55 +1794,55 @@ void OpponentHandleDMATransfer(void)
OpponentBufferExecCompleted();
}
-void sub_80358C8(void)
+void OpponentHandlecmd31(void)
{
OpponentBufferExecCompleted();
}
-void sub_80358D4(void)
+void OpponentHandlecmd32(void)
{
OpponentBufferExecCompleted();
}
-void sub_80358E0(void)
+void OpponentHandlecmd33(void)
{
OpponentBufferExecCompleted();
}
-void sub_80358EC(void)
+void OpponentHandlecmd34(void)
{
OpponentBufferExecCompleted();
}
-void sub_80358F8(void)
+void OpponentHandlecmd35(void)
{
OpponentBufferExecCompleted();
}
-void sub_8035904(void)
+void OpponentHandlecmd36(void)
{
OpponentBufferExecCompleted();
}
-void sub_8035910(void)
+void OpponentHandlecmd37(void)
{
gUnknown_020238C8.unk0_0 = 0;
OpponentBufferExecCompleted();
}
-void sub_803592C(void)
+void OpponentHandlecmd38(void)
{
gUnknown_020238C8.unk0_0 = gBattleBufferA[gActiveBank][1];
OpponentBufferExecCompleted();
}
-void sub_8035964(void)
+void OpponentHandlecmd39(void)
{
gUnknown_020238C8.unk0_7 = 0;
OpponentBufferExecCompleted();
}
-void sub_803597C(void)
+void OpponentHandlecmd40(void)
{
gUnknown_020238C8.unk0_7 ^= 1;
OpponentBufferExecCompleted();
@@ -1450,7 +1863,7 @@ void OpponentHandleHitAnimation(void)
}
}
-void sub_8035A14(void)
+void OpponentHandlecmd42(void)
{
OpponentBufferExecCompleted();
}
@@ -1467,7 +1880,7 @@ void OpponentHandleEffectivenessSound(void)
OpponentBufferExecCompleted();
}
-void sub_8035A64(void)
+void OpponentHandlecmd44(void)
{
PlayFanfare(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
OpponentBufferExecCompleted();
@@ -1481,14 +1894,14 @@ void OpponentHandleFaintingCry(void)
OpponentBufferExecCompleted();
}
-void dp01t_2E_7_battle_intro(void)
+void OpponentHandleIntroSlide(void)
{
sub_80E43C0(gBattleBufferA[gActiveBank][1]);
gUnknown_02024DE8 |= 1;
OpponentBufferExecCompleted();
}
-void sub_8035B04(void)
+void OpponentHandleTrainerBallThrow(void)
{
u8 taskId;
@@ -1539,7 +1952,7 @@ void sub_8035C44(u8 taskId)
DestroyTask(taskId);
}
-void dp01t_30_7_0803D67C(void)
+void OpponentHandlecmd48(void)
{
if (gBattleBufferA[gActiveBank][1] != 0 && GetBankSide(gActiveBank) == 0)
{
@@ -1580,14 +1993,14 @@ void sub_8035E2C(void)
}
}
-void sub_8035E6C(void)
+void OpponentHandlecmd49(void)
{
if (ewram17810[gActiveBank].unk0_0)
gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0;
OpponentBufferExecCompleted();
}
-void sub_8035EB8(void)
+void OpponentHandlecmd50(void)
{
OpponentBufferExecCompleted();
}
@@ -1626,7 +2039,7 @@ void OpponentHandleResetActionMoveSelection(void)
OpponentBufferExecCompleted();
}
-void sub_8035FA4(void)
+void OpponentHandlecmd55(void)
{
if ((gBattleTypeFlags & BATTLE_TYPE_LINK) && !(gBattleTypeFlags & BATTLE_TYPE_WILD))
{
@@ -1637,6 +2050,6 @@ void sub_8035FA4(void)
OpponentBufferExecCompleted();
}
-void nullsub_46(void)
+void OpponentHandlecmd56(void)
{
}
diff --git a/src/battle/battle_6.c b/src/battle/battle_controller_player.c
index e7f152a4b..269f20642 100644
--- a/src/battle/battle_6.c
+++ b/src/battle/battle_controller_player.c
@@ -1,15 +1,20 @@
#include "global.h"
+#include "data2.h"
#include "battle.h"
#include "battle_interface.h"
#include "battle_message.h"
-#include "data2.h"
+#include "item.h"
+#include "items.h"
+#include "link.h"
+#include "m4a.h"
+#include "main.h"
#include "menu_cursor.h"
+#include "moves.h"
#include "palette.h"
#include "pokemon.h"
#include "rom3.h"
#include "songs.h"
#include "sound.h"
-#include "sprite.h"
#include "string_util.h"
#include "task.h"
#include "text.h"
@@ -23,6 +28,12 @@ struct UnknownStruct3
u8 ppBonuses;
};
+#if ENGLISH
+#define SUB_803037C_TILE_DATA_OFFSET 440
+#elif GERMAN
+#define SUB_803037C_TILE_DATA_OFFSET 444
+#endif
+
extern u16 gUnknown_030042A4;
extern u16 gUnknown_030042A0;
@@ -70,15 +81,8 @@ extern const u8 gUnknown_08400CA8[];
extern const u8 gUnknown_08400CF3[];
extern const u8 gUnknown_08400D38[];
-#if ENGLISH
-#define SUB_803037C_TILE_DATA_OFFSET 440
-#elif GERMAN
-#define SUB_803037C_TILE_DATA_OFFSET 444
-#endif
-
extern void sub_802C68C(void);
extern void sub_802E1B0(void);
-extern void sub_802E3B4();
extern void sub_802E220();
extern void sub_802E2D4();
extern void sub_802E004(void);
@@ -101,7 +105,6 @@ extern void oamt_set_x3A_32();
extern void BattleLoadPlayerMonSprite();
extern bool8 IsDoubleBattle(void);
extern void sub_802D500(void);
-extern void dp11b_obj_free();
extern bool8 sub_8078874(u8);
extern bool8 move_anim_start_t3();
extern void sub_802E460(void);
@@ -132,7 +135,190 @@ extern u8 sub_8077F68();
extern u8 sub_8046400();
extern void sub_802D798(void);
extern void bx_0802E404(void);
+extern u8 gActiveBank;
+extern void (*gBattleBankFunc[])(void);
+extern bool8 gDoingBattleAnim;
+extern u16 gBattleTypeFlags;
+extern u32 gBattleExecBuffer;
+extern u8 gBattleBufferA[][0x200];
+extern u8 gObjectBankIDs[];
+extern u8 gActionSelectionCursor[];
+extern u8 gMoveSelectionCursor[];
+extern u8 gAbsentBankFlags;
+extern u8 gUnknown_03004344;
+extern u8 gNoOfAllBanks;
+extern u16 gBattlePartyID[];
+extern u16 gUnknown_030042A0;
+extern u16 gUnknown_030042A4;
+extern struct Window gUnknown_03004210;
+extern const u8 gUnknown_08400D89[];
+extern u8 gUnknown_03004348;
+extern struct BattlePokemon gBattleMons[];
+extern MainCallback gPreBattleCallback1;
+extern u8 gHealthboxIDs[];
+extern struct MusicPlayerInfo gMPlay_BGM;
+extern u8 gUnknown_0300434C[];
+extern u8 gUnknown_0202E8F4;
+extern u8 gUnknown_0202E8F5;
+extern u8 gUnknown_02038470[];
+extern u16 gScriptItemId;
+extern u8 gDisplayedStringBattle[];
+extern const u8 gUnknown_08400CE0[];
+extern void dp11b_obj_instanciate(u8, u8, s8, s8);
+extern u8 GetBankIdentity(u8);
+extern u8 GetBankByPlayerAI(u8);
+extern void dp11b_obj_free(u8, u8);
+extern void sub_8010520(struct Sprite *);
+extern void sub_8010574(struct Sprite *);
+extern bool8 IsDoubleBattle();
+extern void sub_804777C();
+extern void sub_8141828();
+extern void sub_8094E20(u8);
+extern void nullsub_14(void);
+extern void sub_80A6DCC(void);
+extern void ReshowBattleScreenAfterMenu(void);
+
+void PlayerHandleGetAttributes(void);
+void PlayerHandlecmd1(void);
+void PlayerHandleSetAttributes(void);
+void PlayerHandlecmd3(void);
+void PlayerHandleLoadPokeSprite(void);
+void PlayerHandleSendOutPoke(void);
+void PlayerHandleReturnPokeToBall(void);
+void PlayerHandleTrainerThrow(void);
+void PlayerHandleTrainerSlide(void);
+void PlayerHandleTrainerSlideBack(void);
+void PlayerHandlecmd10(void);
+void PlayerHandlecmd11(void);
+void PlayerHandlecmd12(void);
+void PlayerHandleBallThrow(void);
+void PlayerHandlePuase(void);
+void PlayerHandleMoveAnimation(void);
+void PlayerHandlePrintString(void);
+void PlayerHandlePrintStringPlayerOnly(void);
+void PlayerHandlecmd18(void);
+void PlayerHandlecmd19(void);
+void PlayerHandlecmd20(void);
+void PlayerHandleOpenBag(void);
+void PlayerHandlecmd22(void);
+void PlayerHandlecmd23(void);
+void PlayerHandleHealthBarUpdate(void);
+void PlayerHandleExpBarUpdate(void);
+void PlayerHandleStatusIconUpdate(void);
+void PlayerHandleStatusAnimation(void);
+void PlayerHandleStatusXor(void);
+void PlayerHandlecmd29(void);
+void PlayerHandleDMATransfer(void);
+void PlayerHandlecmd31(void);
+void PlayerHandlecmd32(void);
+void PlayerHandlecmd33(void);
+void PlayerHandlecmd34(void);
+void PlayerHandlecmd35(void);
+void PlayerHandlecmd36(void);
+void PlayerHandlecmd37(void);
+void PlayerHandlecmd38(void);
+void PlayerHandlecmd39(void);
+void PlayerHandlecmd40(void);
+void PlayerHandleHitAnimation(void);
+void PlayerHandlecmd42(void);
+void PlayerHandleEffectivenessSound(void);
+void PlayerHandlecmd44(void);
+void PlayerHandleFaintingCry(void);
+void PlayerHandleIntroSlide(void);
+void PlayerHandleTrainerBallThrow(void);
+void PlayerHandlecmd48(void);
+void PlayerHandlecmd49(void);
+void PlayerHandlecmd50(void);
+void PlayerHandleSpriteInvisibility(void);
+void PlayerHandleBattleAnimation(void);
+void PlayerHandleLinkStandbyMsg(void);
+void PlayerHandleResetActionMoveSelection(void);
+void PlayerHandlecmd55(void);
+void PlayerHandlecmd56(void);
+
+const u8 gString_TurnJP[] = _("ターン");
+
+void (*const gPlayerBufferCommands[])(void) =
+{
+ PlayerHandleGetAttributes,
+ PlayerHandlecmd1,
+ PlayerHandleSetAttributes,
+ PlayerHandlecmd3,
+ PlayerHandleLoadPokeSprite,
+ PlayerHandleSendOutPoke,
+ PlayerHandleReturnPokeToBall,
+ PlayerHandleTrainerThrow,
+ PlayerHandleTrainerSlide,
+ PlayerHandleTrainerSlideBack,
+ PlayerHandlecmd10,
+ PlayerHandlecmd11,
+ PlayerHandlecmd12,
+ PlayerHandleBallThrow,
+ PlayerHandlePuase,
+ PlayerHandleMoveAnimation,
+ PlayerHandlePrintString,
+ PlayerHandlePrintStringPlayerOnly,
+ PlayerHandlecmd18,
+ PlayerHandlecmd19,
+ PlayerHandlecmd20,
+ PlayerHandleOpenBag,
+ PlayerHandlecmd22,
+ PlayerHandlecmd23,
+ PlayerHandleHealthBarUpdate,
+ PlayerHandleExpBarUpdate,
+ PlayerHandleStatusIconUpdate,
+ PlayerHandleStatusAnimation,
+ PlayerHandleStatusXor,
+ PlayerHandlecmd29,
+ PlayerHandleDMATransfer,
+ PlayerHandlecmd31,
+ PlayerHandlecmd32,
+ PlayerHandlecmd33,
+ PlayerHandlecmd34,
+ PlayerHandlecmd35,
+ PlayerHandlecmd36,
+ PlayerHandlecmd37,
+ PlayerHandlecmd38,
+ PlayerHandlecmd39,
+ PlayerHandlecmd40,
+ PlayerHandleHitAnimation,
+ PlayerHandlecmd42,
+ PlayerHandleEffectivenessSound,
+ PlayerHandlecmd44,
+ PlayerHandleFaintingCry,
+ PlayerHandleIntroSlide,
+ PlayerHandleTrainerBallThrow,
+ PlayerHandlecmd48,
+ PlayerHandlecmd49,
+ PlayerHandlecmd50,
+ PlayerHandleSpriteInvisibility,
+ PlayerHandleBattleAnimation,
+ PlayerHandleLinkStandbyMsg,
+ PlayerHandleResetActionMoveSelection,
+ PlayerHandlecmd55,
+ PlayerHandlecmd56,
+};
+
+void PlayerBufferRunCommand(void);
+void sub_802C2EC(void);
+void sub_802C68C(void);
+void sub_802CA60(void);
+void sub_802D730(void);
+void sub_802DA9C(u8);
+void sub_802DB6C(u8);
+void sub_802DCB0(u8);
+void sub_802DD10(u8);
+void sub_802DDC4(u8);
+void sub_802DF88(void);
+void sub_802E03C(void);
+void sub_802E12C(s32, const u8 *);
+void sub_802E1B0(void);
+void sub_802E220(void);
+void sub_802E2D4(void);
+void sub_802E3B4(u8, int);
+void nullsub_7(u8);
+void b_link_standby_message(void);
u32 dp01_getattr_by_ch1_for_player_pokemon_(u8, u8 *);
void dp01_setattr_by_ch1_for_player_pokemon(u8);
void sub_802F934(u8, u8);
@@ -143,6 +329,1379 @@ void sub_8030E38(struct Sprite *);
void task05_08033660(u8);
void sub_8031064(void);
+void nullsub_91(void)
+{
+}
+
+void SetBankFuncToPlayerBufferRunCommand(void)
+{
+ gBattleBankFunc[gActiveBank] = PlayerBufferRunCommand;
+ gDoingBattleAnim = FALSE;
+}
+
+void PlayerBufferExecCompleted(void)
+{
+ gBattleBankFunc[gActiveBank] = PlayerBufferRunCommand;
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ u8 playerId = GetMultiplayerId();
+
+ dp01_prepare_buffer_wireless_probably(2, 4, &playerId);
+ gBattleBufferA[gActiveBank][0] = 0x38;
+ }
+ else
+ {
+ gBattleExecBuffer &= ~gBitTable[gActiveBank];
+ }
+}
+
+void PlayerBufferRunCommand(void)
+{
+ if (gBattleExecBuffer & gBitTable[gActiveBank])
+ {
+ if (gBattleBufferA[gActiveBank][0] < 0x39)
+ gPlayerBufferCommands[gBattleBufferA[gActiveBank][0]]();
+ else
+ PlayerBufferExecCompleted();
+ }
+}
+
+void bx_0802E404(void)
+{
+ if (gSprites[gObjectBankIDs[gActiveBank]].pos2.x == 0)
+ PlayerBufferExecCompleted();
+}
+
+void sub_802C098(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.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ DestroyMenuCursor();
+
+ // Useless switch statement.
+ switch (gActionSelectionCursor[gActiveBank])
+ {
+ case 0:
+ Emitcmd33(1, 0, 0);
+ break;
+ case 1:
+ Emitcmd33(1, 1, 0);
+ break;
+ case 2:
+ Emitcmd33(1, 2, 0);
+ break;
+ case 3:
+ Emitcmd33(1, 3, 0);
+ break;
+ }
+ PlayerBufferExecCompleted();
+ }
+ else if (gMain.newKeys & DPAD_LEFT)
+ {
+ if (gActionSelectionCursor[gActiveBank] & 1)
+ {
+ PlaySE(SE_SELECT);
+ nullsub_8(gActionSelectionCursor[gActiveBank]);
+ gActionSelectionCursor[gActiveBank] ^= 1;
+ sub_802E3E4(gActionSelectionCursor[gActiveBank], 0);
+ }
+ }
+ else if (gMain.newKeys & DPAD_RIGHT)
+ {
+ if (!(gActionSelectionCursor[gActiveBank] & 1))
+ {
+ PlaySE(SE_SELECT);
+ nullsub_8(gActionSelectionCursor[gActiveBank]);
+ gActionSelectionCursor[gActiveBank] ^= 1;
+ sub_802E3E4(gActionSelectionCursor[gActiveBank], 0);
+ }
+ }
+ else if (gMain.newKeys & DPAD_UP)
+ {
+ if (gActionSelectionCursor[gActiveBank] & 2)
+ {
+ PlaySE(SE_SELECT);
+ nullsub_8(gActionSelectionCursor[gActiveBank]);
+ gActionSelectionCursor[gActiveBank] ^= 2;
+ sub_802E3E4(gActionSelectionCursor[gActiveBank], 0);
+ }
+ }
+ else if (gMain.newKeys & DPAD_DOWN)
+ {
+ if (!(gActionSelectionCursor[gActiveBank] & 2))
+ {
+ PlaySE(SE_SELECT);
+ nullsub_8(gActionSelectionCursor[gActiveBank]);
+ gActionSelectionCursor[gActiveBank] ^= 2;
+ sub_802E3E4(gActionSelectionCursor[gActiveBank], 0);
+ }
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ && GetBankIdentity(gActiveBank) == 2
+ && !(gAbsentBankFlags & gBitTable[GetBankByPlayerAI(0)])
+ && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ {
+ if (gBattleBufferA[gActiveBank][1] == 1)
+ {
+ // Add item to bag if it is a ball
+ if (itemId <= ITEM_PREMIER_BALL)
+ AddBagItem(itemId, 1);
+ else
+ return;
+ }
+ PlaySE(SE_SELECT);
+ Emitcmd33(1, 12, 0);
+ PlayerBufferExecCompleted();
+ DestroyMenuCursor();
+ }
+ }
+ else if (gMain.newKeys & START_BUTTON)
+ {
+ sub_804454C();
+ }
+}
+
+void unref_sub_802C2B8(void)
+{
+ dp11b_obj_free(gActiveBank, 1);
+ dp11b_obj_free(gActiveBank, 0);
+ gBattleBankFunc[gActiveBank] = sub_802C2EC;
+}
+
+// TODO: fix this function
+void sub_802C2EC(void)
+{
+ u8 arr[4] = {0, 2, 3, 1};
+ s32 i;
+
+ dp11b_obj_instanciate(gUnknown_03004344, 1, 15, 1);
+ i = 0;
+ if (gNoOfAllBanks != 0)
+ {
+ do
+ {
+ if (i != gUnknown_03004344)
+ dp11b_obj_free(i, 1);
+ i++;
+ } while (i < gNoOfAllBanks);
+ }
+ if (gMain.newKeys & A_BUTTON)
+ {
+ DestroyMenuCursor();
+ PlaySE(SE_SELECT);
+ gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010574;
+ Emitcmd33(1, 10, gMoveSelectionCursor[gActiveBank] | (gUnknown_03004344 << 8));
+ dp11b_obj_free(gUnknown_03004344, 1);
+ PlayerBufferExecCompleted();
+ }
+ //_0802C3A8
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010574;
+ gBattleBankFunc[gActiveBank] = sub_802C68C;
+ dp11b_obj_instanciate(gActiveBank, 1, 7, 1);
+ dp11b_obj_instanciate(gActiveBank, 0, 7, 1);
+ dp11b_obj_free(gUnknown_03004344, 1);
+ }
+ else if (gMain.newKeys & 0x60)
+ {
+ PlaySE(SE_SELECT);
+ gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010574;
+ do
+ {
+ u8 var = GetBankIdentity(gUnknown_03004344);
+
+ for (i = 0; i < 4; i++)
+ {
+ if (var == arr[i])
+ break;
+ }
+ do
+ {
+ i--;
+ if (i < 0)
+ i = 3;
+ gUnknown_03004344 = GetBankByPlayerAI(arr[i]);
+ } while(gUnknown_03004344 == gNoOfAllBanks);
+ i = 0;
+ switch (GetBankIdentity(gUnknown_03004344))
+ {
+ case 0:
+ case 2:
+ if (gActiveBank == gUnknown_03004344)
+ {
+ u32 moveId;
+
+ asm("":::"memory");
+ moveId = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1 + gMoveSelectionCursor[gActiveBank]);
+ if (!(gBattleMoves[moveId].target & 2))
+ break;
+ }
+ i++;
+ break;
+ case 1:
+ case 3:
+ i++;
+ }
+ //_0802C500
+ if (gAbsentBankFlags & gBitTable[gUnknown_03004344])
+ i = 0;
+ } while (i == 0);
+ gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010520;
+ }
+ //_0802C540
+ else if (gMain.newKeys & 0x90)
+ {
+ PlaySE(SE_SELECT);
+ gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010574;
+ do
+ {
+ u8 var = GetBankIdentity(gUnknown_03004344);
+
+ for (i = 0; i < 4; i++)
+ {
+ if (var == arr[i])
+ break;
+ }
+ do
+ {
+ i++;
+ if (i > 3)
+ i = 0;
+ gUnknown_03004344 = GetBankByPlayerAI(arr[i]);
+ } while (gUnknown_03004344 == gNoOfAllBanks);
+ i = 0;
+ switch (GetBankIdentity(gUnknown_03004344))
+ {
+ case 0:
+ case 2:
+ if (gActiveBank == gUnknown_03004344)
+ {
+ u32 moveId;
+
+ asm("":::"memory");
+ moveId = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1 + gMoveSelectionCursor[gActiveBank]);
+ if (!(gBattleMoves[moveId].target & 2))
+ break;
+ }
+ i++;
+ break;
+ case 1:
+ case 3:
+ i++;
+ }
+ if (gAbsentBankFlags & gBitTable[gUnknown_03004344])
+ i = 0;
+ } while (i == 0);
+ gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010520;
+ }
+}
+
+struct UnknownStruct1
+{
+ u16 moves[4];
+ u8 pp[4];
+ u8 unkC[0x12-0xC];
+ u8 unk12;
+ u8 unk13;
+ u8 filler14[0x20-0x14];
+};
+
+const u8 gUnknown_081FAE80[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW WHITE LIGHT_BLUE WHITE2}");
+
+void sub_802C68C(void)
+{
+ u32 r8 = 0;
+ struct UnknownStruct1 *r6 = (struct UnknownStruct1 *)(gBattleBufferA[gActiveBank] + 4);
+
+ if (gMain.newKeys & A_BUTTON)
+ {
+ u32 r4;
+
+ PlaySE(SE_SELECT);
+
+ if (r6->moves[gMoveSelectionCursor[gActiveBank]] == MOVE_CURSE)
+ r4 = (r6->unk12 != TYPE_GHOST && (r6->unk13 ^ 7)) ? 0x10 : 0;
+ else
+ r4 = gBattleMoves[r6->moves[gMoveSelectionCursor[gActiveBank]]].target;
+
+ if (r4 & 0x10)
+ gUnknown_03004344 = gActiveBank;
+ else
+ gUnknown_03004344 = GetBankByPlayerAI((GetBankIdentity(gActiveBank) & 1) ^ 1);
+
+ if (gBattleBufferA[gActiveBank][1] == 0)
+ {
+ if ((r4 & 2) && gBattleBufferA[gActiveBank][2] == 0)
+ r8++;
+ }
+ else
+ {
+ if (!(r4 & 0x7D))
+ r8++;
+ if (r6->pp[gMoveSelectionCursor[gActiveBank]] == 0)
+ {
+ r8 = 0;
+ }
+ else if (!(r4 & 0x12) && CountAliveMons(0) <= 1)
+ {
+ gUnknown_03004344 = sub_803C434(gActiveBank);
+ r8 = 0;
+ }
+ }
+ if (r8 == 0)
+ {
+ DestroyMenuCursor();
+ Emitcmd33(1, 10, gMoveSelectionCursor[gActiveBank] | (gUnknown_03004344 << 8));
+ PlayerBufferExecCompleted();
+ }
+ else
+ {
+ gBattleBankFunc[gActiveBank] = sub_802C2EC;
+ if (r4 & 0x12)
+ gUnknown_03004344 = gActiveBank;
+ else if (gAbsentBankFlags & gBitTable[GetBankByPlayerAI(1)])
+ gUnknown_03004344 = GetBankByPlayerAI(3);
+ else
+ gUnknown_03004344 = GetBankByPlayerAI(1);
+ gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010520;
+ }
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ DestroyMenuCursor();
+ PlaySE(SE_SELECT);
+ gUnknown_030042A4 = 0;
+ gUnknown_030042A0 = 320;
+ Emitcmd33(1, 10, 0xFFFF);
+ PlayerBufferExecCompleted();
+ }
+ else if (gMain.newKeys & DPAD_LEFT)
+ {
+ if (gMoveSelectionCursor[gActiveBank] & 1)
+ {
+ nullsub_7(gMoveSelectionCursor[gActiveBank]);
+ gMoveSelectionCursor[gActiveBank] ^= 1;
+ PlaySE(SE_SELECT);
+ sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0);
+ sub_802E220();
+ sub_802E2D4();
+ }
+ }
+ else if (gMain.newKeys & DPAD_RIGHT)
+ {
+ if (!(gMoveSelectionCursor[gActiveBank] & 1)
+ && (gMoveSelectionCursor[gActiveBank] ^ 1) < gUnknown_03004348)
+ {
+ nullsub_7(gMoveSelectionCursor[gActiveBank]);
+ gMoveSelectionCursor[gActiveBank] ^= 1;
+ PlaySE(SE_SELECT);
+ sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0);
+ sub_802E220();
+ sub_802E2D4();
+ }
+ }
+ else if (gMain.newKeys & DPAD_UP)
+ {
+ if (gMoveSelectionCursor[gActiveBank] & 2)
+ {
+ nullsub_7(gMoveSelectionCursor[gActiveBank]);
+ gMoveSelectionCursor[gActiveBank] ^= 2;
+ PlaySE(SE_SELECT);
+ sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0);
+ sub_802E220();
+ sub_802E2D4();
+ }
+ }
+ else if (gMain.newKeys & DPAD_DOWN)
+ {
+ if (!(gMoveSelectionCursor[gActiveBank] & 2)
+ && (gMoveSelectionCursor[gActiveBank] ^ 2) < gUnknown_03004348)
+ {
+ nullsub_7(gMoveSelectionCursor[gActiveBank]);
+ gMoveSelectionCursor[gActiveBank] ^= 2;
+ PlaySE(SE_SELECT);
+ sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0);
+ sub_802E220();
+ sub_802E2D4();
+ }
+ }
+ else if (gMain.newKeys & SELECT_BUTTON)
+ {
+ if (gUnknown_03004348 > 1 && !(gBattleTypeFlags & BATTLE_TYPE_LINK))
+ {
+ sub_802E12C(gMoveSelectionCursor[gActiveBank], gUnknown_081FAE80);
+ if (gMoveSelectionCursor[gActiveBank] != 0)
+ gUnknown_03004344 = 0;
+ else
+ gUnknown_03004344 = gMoveSelectionCursor[gActiveBank] + 1;
+ sub_802E3B4(gUnknown_03004344, 27);
+ FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A);
+ InitWindow(&gUnknown_03004210, gUnknown_08400D89, 0x290, 0x17, 0x37);
+ sub_8002F44(&gUnknown_03004210);
+ gBattleBankFunc[gActiveBank] = sub_802CA60;
+ }
+ }
+}
+
+extern const u8 gUnknown_08400D49[];
+extern const u8 gUnknown_08400D38[];
+
+void sub_802CA60(void)
+{
+ u8 perMovePPBonuses[4];
+ struct
+ {
+ u16 moves[4];
+ u8 pp[4];
+ u8 filler18[8]; // what is this?
+ } sp0;
+ //struct UnknownStruct1 sp0;
+ u8 totalPPBonuses;
+
+ if (gMain.newKeys & (A_BUTTON | SELECT_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ if (gMoveSelectionCursor[gActiveBank] != gUnknown_03004344)
+ {
+ struct UnknownStruct1 *r9 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4];
+ s32 i;
+
+ i = r9->moves[gMoveSelectionCursor[gActiveBank]];
+ r9->moves[gMoveSelectionCursor[gActiveBank]] = r9->moves[gUnknown_03004344];
+ r9->moves[gUnknown_03004344] = i;
+
+ i = r9->pp[gMoveSelectionCursor[gActiveBank]];
+ r9->pp[gMoveSelectionCursor[gActiveBank]] = r9->pp[gUnknown_03004344];
+ r9->pp[gUnknown_03004344] = i;
+
+ i = r9->unkC[gMoveSelectionCursor[gActiveBank]];
+ r9->unkC[gMoveSelectionCursor[gActiveBank]] = r9->unkC[gUnknown_03004344];
+ r9->unkC[gUnknown_03004344] = i;
+
+ if (gDisableStructs[gActiveBank].unk18_b & gBitTable[gMoveSelectionCursor[gActiveBank]])
+ {
+ gDisableStructs[gActiveBank].unk18_b &= ~gBitTable[gMoveSelectionCursor[gActiveBank]];
+ gDisableStructs[gActiveBank].unk18_b |= gBitTable[gUnknown_03004344];
+ }
+
+ sub_802E1B0();
+
+ for (i = 0; i < 4; i++)
+ perMovePPBonuses[i] = (gBattleMons[gActiveBank].ppBonuses & (3 << (i * 2))) >> (i * 2);
+ totalPPBonuses = perMovePPBonuses[gMoveSelectionCursor[gActiveBank]];
+ perMovePPBonuses[gMoveSelectionCursor[gActiveBank]] = perMovePPBonuses[gUnknown_03004344];
+ perMovePPBonuses[gUnknown_03004344] = 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] = r9->moves[i];
+ gBattleMons[gActiveBank].pp[i] = r9->pp[i];
+ }
+ if (!(gBattleMons[gActiveBank].status2 & 0x200000))
+ {
+ for (i = 0; i < 4; i++)
+ {
+ sp0.moves[i] = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1 + i);
+ sp0.pp[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 = sp0.moves[gMoveSelectionCursor[gActiveBank]];
+ sp0.moves[gMoveSelectionCursor[gActiveBank]] = sp0.moves[gUnknown_03004344];
+ sp0.moves[gUnknown_03004344] = i;
+
+ i = sp0.pp[gMoveSelectionCursor[gActiveBank]];
+ sp0.pp[gMoveSelectionCursor[gActiveBank]] = sp0.pp[gUnknown_03004344];
+ sp0.pp[gUnknown_03004344] = i;
+
+ totalPPBonuses = perMovePPBonuses[gMoveSelectionCursor[gActiveBank]];
+ perMovePPBonuses[gMoveSelectionCursor[gActiveBank]] = perMovePPBonuses[gUnknown_03004344];
+ perMovePPBonuses[gUnknown_03004344] = 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, (u8 *)&sp0.moves[i]);
+ SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_PP1 + i, &sp0.pp[i]);
+ }
+ SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_PP_BONUSES, &totalPPBonuses);
+ }
+ }
+ else
+ {
+ sub_802E12C(gUnknown_03004344, gUnknown_08400D49);
+ }
+ gBattleBankFunc[gActiveBank] = sub_802C68C;
+ gMoveSelectionCursor[gActiveBank] = gUnknown_03004344;
+ sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0);
+ FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A);
+ InitWindow(&gUnknown_03004210, gUnknown_08400D38, 0x290, 0x17, 0x37);
+ sub_8002F44(&gUnknown_03004210);
+ sub_802E220();
+ sub_802E2D4();
+ }
+ if (gMain.newKeys & (B_BUTTON | SELECT_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ nullsub_7(gUnknown_03004344);
+ sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0);
+ sub_802E12C(gMoveSelectionCursor[gActiveBank], gUnknown_08400D49);
+ gBattleBankFunc[gActiveBank] = sub_802C68C;
+ FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A);
+ InitWindow(&gUnknown_03004210, gUnknown_08400D38, 0x290, 0x17, 0x37);
+ sub_8002F44(&gUnknown_03004210);
+ sub_802E220();
+ sub_802E2D4();
+ }
+ if ((gMain.newKeys & DPAD_LEFT) && (gUnknown_03004344 & 1))
+ {
+ if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank])
+ sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0x1D);
+ else
+ nullsub_7(gUnknown_03004344);
+ gUnknown_03004344 ^= 1;
+ PlaySE(SE_SELECT);
+ if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank])
+ sub_802E3B4(gUnknown_03004344, 0);
+ else
+ sub_802E3B4(gUnknown_03004344, 0x1B);
+ }
+ if ((gMain.newKeys & DPAD_RIGHT) && !(gUnknown_03004344 & 1) && (gUnknown_03004344 ^ 1) < gUnknown_03004348)
+ {
+ if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank])
+ sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0x1D);
+ else
+ nullsub_7(gUnknown_03004344);
+ gUnknown_03004344 ^= 1;
+ PlaySE(SE_SELECT);
+ if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank])
+ sub_802E3B4(gUnknown_03004344, 0);
+ else
+ sub_802E3B4(gUnknown_03004344, 0x1B);
+ }
+ if ((gMain.newKeys & DPAD_UP) && (gUnknown_03004344 & 2))
+ {
+ if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank])
+ sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0x1D);
+ else
+ nullsub_7(gUnknown_03004344);
+ gUnknown_03004344 ^= 2;
+ PlaySE(SE_SELECT);
+ if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank])
+ sub_802E3B4(gUnknown_03004344, 0);
+ else
+ sub_802E3B4(gUnknown_03004344, 0x1B);
+ }
+ if ((gMain.newKeys & DPAD_DOWN) && !(gUnknown_03004344 & 2) && (gUnknown_03004344 ^ 2) < gUnknown_03004348)
+ {
+ if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank])
+ sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0x1D);
+ else
+ nullsub_7(gUnknown_03004344);
+ gUnknown_03004344 ^= 2;
+ PlaySE(SE_SELECT);
+ if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank])
+ sub_802E3B4(gUnknown_03004344, 0);
+ else
+ sub_802E3B4(gUnknown_03004344, 0x1B);
+ }
+}
+
+void sub_802D148(void)
+{
+ if (gReceivedRemoteLinkPlayers == 0)
+ {
+ m4aSongNumStop(SE_HINSI);
+ gMain.inBattle = FALSE;
+ gMain.callback1 = gPreBattleCallback1;
+ SetMainCallback2(c2_8011A1C);
+ }
+}
+
+void sub_802D18C(void)
+{
+ if (!gPaletteFade.active)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ sub_800832C();
+ gBattleBankFunc[gActiveBank] = sub_802D148;
+ }
+ else
+ {
+ m4aSongNumStop(SE_HINSI);
+ gMain.inBattle = FALSE;
+ gMain.callback1 = gPreBattleCallback1;
+ SetMainCallback2(gMain.savedCallback);
+ }
+ }
+}
+
+void sub_802D204(void)
+{
+ if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy)
+ PlayerBufferExecCompleted();
+}
+
+// duplicate of sub_802D204
+void sub_802D23C(void)
+{
+ if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy)
+ PlayerBufferExecCompleted();
+}
+
+void sub_802D274(void)
+{
+ if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy)
+ {
+ nullsub_10(gSaveBlock2.playerGender);
+ FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]);
+ DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]);
+ PlayerBufferExecCompleted();
+ }
+}
+
+void sub_802D2E0(void)
+{
+ if (--ewram17810[gActiveBank].unk9 == 0xFF)
+ {
+ ewram17810[gActiveBank].unk9 = 0;
+ PlayerBufferExecCompleted();
+ }
+}
+
+void sub_802D31C(void)
+{
+ bool8 r6 = FALSE;
+
+ if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI)))
+ {
+ if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy)
+ r6 = TRUE;
+ }
+ else
+ {
+ if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy
+ && gSprites[gHealthboxIDs[gActiveBank ^ 2]].callback == SpriteCallbackDummy)
+ r6 = TRUE;
+ }
+ if (IsCryPlayingOrClearCrySongs())
+ r6 = FALSE;
+
+ if (r6 && ewram17810[gActiveBank].unk1_0 && ewram17810[gActiveBank ^ 2].unk1_0)
+ {
+ ewram17810[gActiveBank].unk0_7 = 0;
+ ewram17810[gActiveBank].unk1_0 = 0;
+ ewram17810[gActiveBank ^ 2].unk0_7 = 0;
+ ewram17810[gActiveBank ^ 2].unk1_0 = 0;
+ FreeSpriteTilesByTag(0x27F9);
+ FreeSpritePaletteByTag(0x27F9);
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ m4aMPlayContinue(&gMPlay_BGM);
+ else
+ m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 256);
+ sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ if (IsDoubleBattle())
+ sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank ^ 2]], gActiveBank ^ 2);
+ ewram17810[gActiveBank].unk9 = 3;
+ gBattleBankFunc[gActiveBank] = sub_802D2E0;
+ }
+}
+
+void sub_802D500(void)
+{
+ if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7)
+ sub_8141828(gActiveBank, &gPlayerParty[gBattlePartyID[gActiveBank]]);
+ if (!ewram17810[gActiveBank ^ 2].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_7)
+ sub_8141828(gActiveBank ^ 2, &gPlayerParty[gBattlePartyID[gActiveBank ^ 2]]);
+ if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_3)
+ {
+ if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ {
+ DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank ^ 2]]);
+ sub_8045A5C(
+ gHealthboxIDs[gActiveBank ^ 2],
+ &gPlayerParty[gBattlePartyID[gActiveBank ^ 2]],
+ 0);
+ sub_804777C(gActiveBank ^ 2);
+ sub_8043DFC(gHealthboxIDs[gActiveBank ^ 2]);
+ }
+ DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]);
+ sub_8045A5C(
+ gHealthboxIDs[gActiveBank],
+ &gPlayerParty[gBattlePartyID[gActiveBank]],
+ 0);
+ sub_804777C(gActiveBank);
+ sub_8043DFC(gHealthboxIDs[gActiveBank]);
+ ewram17840.unk9_0 = 0;
+ gBattleBankFunc[gActiveBank] = sub_802D31C;
+ }
+}
+
+void sub_802D680(void)
+{
+ if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy
+ && ewram17810[gActiveBank].unk1_0)
+ {
+ ewram17810[gActiveBank].unk0_7 = 0;
+ ewram17810[gActiveBank].unk1_0 = 0;
+ FreeSpriteTilesByTag(0x27F9);
+ FreeSpritePaletteByTag(0x27F9);
+ if (ewram17800[gActiveBank].substituteSprite)
+ move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6);
+ gBattleBankFunc[gActiveBank] = sub_802D730;
+ }
+}
+
+void sub_802D730(void)
+{
+ if (!ewram17810[gActiveBank].unk0_6 && !IsCryPlayingOrClearCrySongs())
+ {
+ m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100);
+ sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ PlayerBufferExecCompleted();
+ }
+}
+
+void sub_802D798(void)
+{
+ if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7)
+ sub_8141828(gActiveBank, &gPlayerParty[gBattlePartyID[gActiveBank]]);
+ if (gSprites[gUnknown_0300434C[gActiveBank]].callback == SpriteCallbackDummy
+ && !ewram17810[gActiveBank].unk0_3)
+ {
+ DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]);
+ sub_8045A5C(gHealthboxIDs[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], 0);
+ sub_804777C(gActiveBank);
+ sub_8043DFC(gHealthboxIDs[gActiveBank]);
+ sub_8031F88(gActiveBank);
+ gBattleBankFunc[gActiveBank] = sub_802D680;
+ }
+}
+
+void c3_0802FDF4(u8 taskId)
+{
+ if (!IsCryPlayingOrClearCrySongs())
+ {
+ m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100);
+ DestroyTask(taskId);
+ }
+}
+
+void bx_t1_healthbar_update(void)
+{
+ s16 r4 = sub_8045C78(gActiveBank, gHealthboxIDs[gActiveBank], 0, 0);
+
+ sub_8043DFC(gHealthboxIDs[gActiveBank]);
+ if (r4 != -1)
+ {
+ sub_80440EC(gHealthboxIDs[gActiveBank], r4, 0);
+ }
+ else
+ {
+ sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ PlayerBufferExecCompleted();
+ }
+}
+
+void sub_802D90C(void)
+{
+ if (gUnknown_03004210.state == 0)
+ PlayerBufferExecCompleted();
+}
+
+// Rare Candy usage, maybe?
+void sub_802D924(u8 taskId)
+{
+ u32 pkmnIndex = (u8)gTasks[taskId].data[0];
+ u8 bank = gTasks[taskId].data[2];
+ s16 gainedExp = gTasks[taskId].data[1];
+
+ if (IsDoubleBattle() == TRUE || pkmnIndex != gBattlePartyID[bank])
+ {
+ struct Pokemon *pkmn = &gPlayerParty[pkmnIndex];
+ u16 species = GetMonData(pkmn, MON_DATA_SPECIES);
+ u8 level = GetMonData(pkmn, MON_DATA_LEVEL);
+ u32 currExp = GetMonData(pkmn, MON_DATA_EXP);
+ u32 nextLvlExp = gExperienceTables[gBaseStats[species].growthRate][level + 1];
+
+ if (currExp + gainedExp >= nextLvlExp)
+ {
+ u8 savedActiveBank;
+
+ SetMonData(pkmn, MON_DATA_EXP, (u8 *)&nextLvlExp);
+ CalculateMonStats(pkmn);
+ gainedExp -= nextLvlExp - currExp;
+ savedActiveBank = gActiveBank;
+ gActiveBank = bank;
+ Emitcmd33(1, 11, gainedExp);
+ gActiveBank = savedActiveBank;
+
+ if (IsDoubleBattle() == TRUE
+ && ((u16)pkmnIndex == gBattlePartyID[bank] || (u16)pkmnIndex == gBattlePartyID[bank ^ 2]))
+ gTasks[taskId].func = sub_802DCB0;
+ else
+ gTasks[taskId].func = sub_802DDC4;
+ }
+ else
+ {
+ currExp += gainedExp;
+ SetMonData(pkmn, MON_DATA_EXP, (u8 *)&currExp);
+ gBattleBankFunc[bank] = sub_802D90C;
+ DestroyTask(taskId);
+ }
+ }
+ else
+ {
+ gTasks[taskId].func = sub_802DA9C;
+ }
+}
+
+void sub_802DA9C(u8 taskId)
+{
+ u8 pkmnIndex = gTasks[taskId].data[0];
+ s32 r9 = gTasks[taskId].data[1];
+ u8 bank = gTasks[taskId].data[2];
+ struct Pokemon *pkmn = &gPlayerParty[pkmnIndex];
+ u8 level = GetMonData(pkmn, MON_DATA_LEVEL);
+ u16 species = GetMonData(pkmn, MON_DATA_SPECIES);
+ u32 exp = GetMonData(pkmn, MON_DATA_EXP);
+ u32 currLvlExp = gExperienceTables[gBaseStats[species].growthRate][level];
+ u32 expToNextLvl;
+
+ exp -= currLvlExp;
+ expToNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLvlExp;
+ sub_8043D84(bank, gHealthboxIDs[bank], expToNextLvl, exp, -r9);
+ PlaySE(SE_EXP);
+ gTasks[taskId].func = sub_802DB6C;
+}
+
+#ifdef NONMATCHING
+void sub_802DB6C(u8 taskId)
+{
+ if (gTasks[taskId].data[10] < 13)
+ {
+ gTasks[taskId].data[10]++;
+ }
+ else
+ {
+ u8 r9 = gTasks[taskId].data[0];
+ s32 r10 = gTasks[taskId].data[1]; //s16?
+ u8 r7 = gTasks[taskId].data[2];
+ s16 r4;
+
+ r4 = sub_8045C78(r7, gHealthboxIDs[r7], 1, 0);
+ sub_8043DFC(gHealthboxIDs[r7]);
+ if (r4 == -1)
+ {
+ struct Pokemon *pkmn;
+ u8 r4;
+ u32 sp4;
+ u16 r0;
+ u32 sp0;
+
+ m4aSongNumStop(SE_EXP);
+ pkmn = &gPlayerParty[r9];
+ r4 = GetMonData(pkmn, MON_DATA_LEVEL);
+ sp4 = GetMonData(pkmn, MON_DATA_EXP);
+ r0 = GetMonData(pkmn, MON_DATA_SPECIES);
+ sp0 = gExperienceTables[gBaseStats[r0].growthRate][r4 + 1];
+ if (sp4 + r10 >= sp0)
+ {
+ u8 r5;
+ u32 asdf;
+
+ SetMonData(pkmn, MON_DATA_EXP, (u8 *)&sp0);
+ CalculateMonStats(pkmn);
+ //r10 -= sp0 - sp4;
+ asdf = sp0 - sp4;
+ //asdf = r10 - (sp0 - sp4);
+ r10 -= asdf;
+ r5 = gActiveBank;
+ gActiveBank = r7;
+ Emitcmd33(1, 11, r10);
+ gActiveBank = r5;
+ gTasks[taskId].func = sub_802DCB0;
+ }
+ else
+ {
+ //u32 asdf = sp4 + r10;
+ sp4 += r10;
+ SetMonData(pkmn, MON_DATA_EXP, (u8 *)&sp4);
+ gBattleBankFunc[r7] = sub_802D90C;
+ DestroyTask(taskId);
+ }
+ }
+ }
+}
+#else
+__attribute__((naked))
+void sub_802DB6C(u8 taskId)
+{
+ asm_unified("push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x8\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r8, r0\n\
+ ldr r1, _0802DB98 @ =gTasks\n\
+ lsls r0, 2\n\
+ add r0, r8\n\
+ lsls r0, 3\n\
+ adds r6, r0, r1\n\
+ ldrh r1, [r6, 0x1C]\n\
+ movs r2, 0x1C\n\
+ ldrsh r0, [r6, r2]\n\
+ cmp r0, 0xC\n\
+ bgt _0802DB9C\n\
+ adds r0, r1, 0x1\n\
+ strh r0, [r6, 0x1C]\n\
+ b _0802DC98\n\
+ .align 2, 0\n\
+_0802DB98: .4byte gTasks\n\
+_0802DB9C:\n\
+ ldrb r0, [r6, 0x8]\n\
+ mov r9, r0\n\
+ ldrh r2, [r6, 0xA]\n\
+ mov r10, r2\n\
+ ldrb r7, [r6, 0xC]\n\
+ ldr r5, _0802DC64 @ =gHealthboxIDs\n\
+ adds r5, r7, r5\n\
+ ldrb r1, [r5]\n\
+ adds r0, r7, 0\n\
+ movs r2, 0x1\n\
+ movs r3, 0\n\
+ bl sub_8045C78\n\
+ adds r4, r0, 0\n\
+ lsls r4, 16\n\
+ lsrs r4, 16\n\
+ ldrb r0, [r5]\n\
+ bl sub_8043DFC\n\
+ lsls r4, 16\n\
+ asrs r4, 16\n\
+ movs r0, 0x1\n\
+ negs r0, r0\n\
+ cmp r4, r0\n\
+ bne _0802DC98\n\
+ movs r0, 0x21\n\
+ bl m4aSongNumStop\n\
+ movs r0, 0x64\n\
+ mov r1, r9\n\
+ muls r1, r0\n\
+ ldr r0, _0802DC68 @ =gPlayerParty\n\
+ adds r5, r1, r0\n\
+ adds r0, r5, 0\n\
+ movs r1, 0x38\n\
+ bl GetMonData\n\
+ adds r4, r0, 0\n\
+ lsls r4, 24\n\
+ lsrs r4, 24\n\
+ adds r0, r5, 0\n\
+ movs r1, 0x19\n\
+ bl GetMonData\n\
+ str r0, [sp, 0x4]\n\
+ adds r0, r5, 0\n\
+ movs r1, 0xB\n\
+ bl GetMonData\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ ldr r3, _0802DC6C @ =gExperienceTables\n\
+ adds r4, 0x1\n\
+ lsls r4, 2\n\
+ ldr r2, _0802DC70 @ =gBaseStats\n\
+ lsls r1, r0, 3\n\
+ subs r1, r0\n\
+ lsls r1, 2\n\
+ adds r1, r2\n\
+ ldrb r1, [r1, 0x13]\n\
+ movs r0, 0xCA\n\
+ lsls r0, 1\n\
+ muls r0, r1\n\
+ adds r4, r0\n\
+ adds r4, r3\n\
+ ldr r1, [r4]\n\
+ str r1, [sp]\n\
+ mov r2, r10\n\
+ lsls r0, r2, 16\n\
+ asrs r4, r0, 16\n\
+ ldr r0, [sp, 0x4]\n\
+ adds r0, r4\n\
+ cmp r0, r1\n\
+ blt _0802DC7C\n\
+ adds r0, r5, 0\n\
+ movs r1, 0x19\n\
+ mov r2, sp\n\
+ bl SetMonData\n\
+ adds r0, r5, 0\n\
+ bl CalculateMonStats\n\
+ ldr r2, [sp]\n\
+ add r0, sp, 0x4\n\
+ ldrh r0, [r0]\n\
+ subs r2, r0\n\
+ subs r2, r4, r2\n\
+ ldr r4, _0802DC74 @ =gActiveBank\n\
+ ldrb r5, [r4]\n\
+ strb r7, [r4]\n\
+ lsls r2, 16\n\
+ lsrs r2, 16\n\
+ movs r0, 0x1\n\
+ movs r1, 0xB\n\
+ bl Emitcmd33\n\
+ strb r5, [r4]\n\
+ ldr r0, _0802DC78 @ =sub_802DCB0\n\
+ str r0, [r6]\n\
+ b _0802DC98\n\
+ .align 2, 0\n\
+_0802DC64: .4byte gHealthboxIDs\n\
+_0802DC68: .4byte gPlayerParty\n\
+_0802DC6C: .4byte gExperienceTables\n\
+_0802DC70: .4byte gBaseStats\n\
+_0802DC74: .4byte gActiveBank\n\
+_0802DC78: .4byte sub_802DCB0\n\
+_0802DC7C:\n\
+ str r0, [sp, 0x4]\n\
+ add r2, sp, 0x4\n\
+ adds r0, r5, 0\n\
+ movs r1, 0x19\n\
+ bl SetMonData\n\
+ ldr r1, _0802DCA8 @ =gBattleBankFunc\n\
+ lsls r0, r7, 2\n\
+ adds r0, r1\n\
+ ldr r1, _0802DCAC @ =sub_802D90C\n\
+ str r1, [r0]\n\
+ mov r0, r8\n\
+ bl DestroyTask\n\
+_0802DC98:\n\
+ add sp, 0x8\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_0802DCA8: .4byte gBattleBankFunc\n\
+_0802DCAC: .4byte sub_802D90C\n");
+}
+#endif
+
+void sub_802DCB0(u8 taskId)
+{
+ u8 bank = gTasks[taskId].data[2];
+ u8 pkmnIndex = gTasks[taskId].data[0];
+
+ if (IsDoubleBattle() == TRUE && pkmnIndex == gBattlePartyID[bank ^ 2])
+ bank ^= 2;
+ move_anim_start_t4(bank, bank, bank, 0);
+ gTasks[taskId].func = sub_802DD10;
+}
+
+void sub_802DD10(u8 taskId)
+{
+ u8 bank = gTasks[taskId].data[2];
+
+ if (!ewram17810[bank].unk0_6)
+ {
+ u8 pkmnIndex = gTasks[taskId].data[0];
+
+ GetMonData(&gPlayerParty[pkmnIndex], MON_DATA_LEVEL); // Unused return value
+ if (IsDoubleBattle() == TRUE && pkmnIndex == gBattlePartyID[bank ^ 2])
+ sub_8045A5C(gHealthboxIDs[bank ^ 2], &gPlayerParty[pkmnIndex], 0);
+ else
+ sub_8045A5C(gHealthboxIDs[bank], &gPlayerParty[pkmnIndex], 0);
+ gTasks[taskId].func = sub_802DDC4;
+ }
+}
+
+void sub_802DDC4(u8 taskId)
+{
+ u8 pkmnIndex;
+ u8 bank;
+
+ pkmnIndex = gTasks[taskId].data[0];
+ GetMonData(&gPlayerParty[pkmnIndex], MON_DATA_LEVEL); // Unused return value
+ bank = gTasks[taskId].data[2];
+ gBattleBankFunc[bank] = sub_802D90C;
+ DestroyTask(taskId);
+}
+
+void sub_802DE10(void)
+{
+ if (gSprites[gObjectBankIDs[gActiveBank]].pos1.y + gSprites[gObjectBankIDs[gActiveBank]].pos2.y > DISPLAY_HEIGHT)
+ {
+ u16 species = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES);
+
+ nullsub_9(species);
+ FreeOamMatrix(gSprites[gObjectBankIDs[gActiveBank]].oam.matrixNum);
+ DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]);
+ sub_8043DB0(gHealthboxIDs[gActiveBank]);
+ PlayerBufferExecCompleted();
+ }
+}
+
+void sub_802DEAC(void)
+{
+ if (!ewram17810[gActiveBank].unk0_6)
+ {
+ FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]);
+ DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]);
+ sub_8043DB0(gHealthboxIDs[gActiveBank]);
+ PlayerBufferExecCompleted();
+ }
+}
+
+// Duplicate of sub_802D90C
+void sub_802DF18(void)
+{
+ if (gUnknown_03004210.state == 0)
+ PlayerBufferExecCompleted();
+}
+
+void sub_802DF30(void)
+{
+ if (!gPaletteFade.active)
+ {
+ u8 r4;
+
+ gBattleBankFunc[gActiveBank] = sub_802DF88;
+ r4 = gTasks[gUnknown_0300434C[gActiveBank]].data[0];
+ DestroyTask(gUnknown_0300434C[gActiveBank]);
+ sub_8094E20(r4);
+ }
+}
+
+void sub_802DF88(void)
+{
+ if (gMain.callback2 == sub_800F808 && !gPaletteFade.active)
+ {
+ if (gUnknown_0202E8F4 == 1)
+ Emitcmd34(1, gUnknown_0202E8F5, gUnknown_02038470);
+ else
+ Emitcmd34(1, 6, NULL);
+ if ((gBattleBufferA[gActiveBank][1] & 0xF) == 1)
+ b_link_standby_message();
+ PlayerBufferExecCompleted();
+ }
+}
+
+void sub_802E004(void)
+{
+ if (!gPaletteFade.active)
+ {
+ gBattleBankFunc[gActiveBank] = sub_802E03C;
+ nullsub_14();
+ sub_80A6DCC();
+ }
+}
+
+void sub_802E03C(void)
+{
+ if (gMain.callback2 == sub_800F808 && !gPaletteFade.active)
+ {
+ Emitcmd35(1, gScriptItemId);
+ PlayerBufferExecCompleted();
+ }
+}
+
+void bx_wait_t1(void)
+{
+ if (!gDoingBattleAnim || !ewram17810[gActiveBank].unk0_6)
+ PlayerBufferExecCompleted();
+}
+
+void bx_blink_t1(void)
+{
+ u8 spriteId = gObjectBankIDs[gActiveBank];
+
+ if (gSprites[spriteId].data1 == 32)
+ {
+ gSprites[spriteId].data1 = 0;
+ gSprites[spriteId].invisible = FALSE;
+ gDoingBattleAnim = 0;
+ PlayerBufferExecCompleted();
+ }
+ else
+ {
+ if (((u16)gSprites[spriteId].data1 % 4) == 0)
+ gSprites[spriteId].invisible ^= 1;
+ gSprites[spriteId].data1++;
+ }
+}
+
+void sub_802E12C(s32 a, const u8 *b)
+{
+ struct UnknownStruct1 *r4 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4];
+
+ StringCopy(gDisplayedStringBattle, b);
+ StringAppend(gDisplayedStringBattle, gMoveNames[r4->moves[a]]);
+ InitWindow(
+ &gUnknown_03004210,
+ gDisplayedStringBattle,
+ 0x300 + a * 20,
+ (a & 1) ? 11 : 1,
+ (a < 2) ? 0x37 : 0x39);
+ sub_8002F44(&gUnknown_03004210);
+}
+
+void sub_802E1B0(void)
+{
+ struct UnknownStruct1 *r4 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4];
+ s32 i;
+
+ gUnknown_03004348 = 0;
+ FillWindowRect(&gUnknown_03004210, 0x1016, 1, 0x37, 0x14, 0x3A);
+ for (i = 0; i < 4; i++)
+ {
+ nullsub_7(i);
+ sub_802E12C(i, gUnknown_08400D49);
+ if (r4->moves[i] != 0)
+ gUnknown_03004348++;
+ }
+}
+
+void sub_802E220(void)
+{
+ if (gBattleBufferA[gActiveBank][2] != 1)
+ {
+ struct UnknownStruct1 *r4 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4];
+ u8 *str = gDisplayedStringBattle;
+
+ str = StringCopy(str, gUnknown_08400D49);
+ str[0] = EXT_CTRL_CODE_BEGIN;
+ str[1] = 0x11;
+ str[2] = 2;
+ str += 3;
+ str[0] = EXT_CTRL_CODE_BEGIN;
+ str[1] = 0x14;
+ str[2] = 6;
+ str += 3;
+ str = ConvertIntToDecimalStringN(str, r4->pp[gMoveSelectionCursor[gActiveBank]], 1, 2);
+ *str++ = CHAR_SLASH;
+ ConvertIntToDecimalStringN(str, r4->unkC[gMoveSelectionCursor[gActiveBank]], 1, 2);
+ InitWindow(&gUnknown_03004210, gDisplayedStringBattle, 0x2A2, 0x19, 0x37);
+ sub_8002F44(&gUnknown_03004210);
+ }
+}
+
+extern const u8 gUnknown_08400D52[];
+extern const u8 gTypeNames[][7];
+
+void sub_802E2D4(void)
+{
+ if (gBattleBufferA[gActiveBank][2] == 1)
+ {
+ FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A);
+ InitWindow(&gUnknown_03004210, gUnknown_08400D52, 0x290, 0x13, 0x37);
+ }
+ else
+ {
+ struct UnknownStruct1 *r4 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4];
+ u8 *str = gDisplayedStringBattle;
+
+ str = StringCopy(str, gUnknown_08400D49);
+ StringCopy(str, gTypeNames[gBattleMoves[r4->moves[gMoveSelectionCursor[gActiveBank]]].type]);
+ FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x39, 0x1C, 0x3A);
+ InitWindow(&gUnknown_03004210, gDisplayedStringBattle, 0x2C0, 0x17, 0x39);
+ }
+ sub_8002F44(&gUnknown_03004210);
+}
+
+const u8 gUnknown_081FAE89[][2] =
+{
+ { 8, 120},
+ {88, 120},
+ { 8, 136},
+ {88, 136},
+};
+
+const u8 gUnknown_081FAE91[][2] =
+{
+ {144, 120},
+ {190, 120},
+ {144, 136},
+ {190, 136},
+ { 72, 72},
+ { 32, 90},
+ { 80, 80},
+ { 80, 88},
+};
+
+void sub_802E3B4(u8 a, int unused)
+{
+ sub_814A958(0x48);
+ sub_814A880(gUnknown_081FAE89[a][0], gUnknown_081FAE89[a][1]);
+}
+
+void nullsub_7(u8 a)
+{
+}
+
+void sub_802E3E4(u8 a, int unused)
+{
+ sub_814A958(0x2A);
+ sub_814A880(gUnknown_081FAE91[a][0], gUnknown_081FAE91[a][1]);
+}
+
+void nullsub_8(u8 a)
+{
+}
+
+void sub_802E414(void)
+{
+ SetMainCallback2(ReshowBattleScreenAfterMenu);
+}
+
+void sub_802E424(void)
+{
+ SetMainCallback2(ReshowBattleScreenAfterMenu);
+}
+
+void sub_802E434(void)
+{
+ if (!ewram17810[gActiveBank].unk0_4)
+ PlayerBufferExecCompleted();
+}
+
+void sub_802E460(void)
+{
+ if (!ewram17810[gActiveBank].unk0_5)
+ PlayerBufferExecCompleted();
+}
+
+void b_link_standby_message(void)
+{
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ gUnknown_030042A4 = 0;
+ gUnknown_030042A0 = 0;
+ sub_8002EB0(&gUnknown_03004210, gUnknown_08400CE0, 0x90, 2, 15);
+ }
+}
+
void PlayerHandleGetAttributes(void)
{
u8 unkData[0x100];
@@ -164,7 +1723,7 @@ void PlayerHandleGetAttributes(void)
r4 >>= 1;
}
}
- dp01_build_cmdbuf_x1D_1D_numargs_varargs(1, offset, unkData);
+ Emitcmd29(1, offset, unkData);
PlayerBufferExecCompleted();
}
@@ -474,7 +2033,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon_(u8 a, u8 *buffer)
return size;
}
-void sub_802ECF0(void)
+void PlayerHandlecmd1(void)
{
struct BattlePokemon battleMon; // I think this is a BattlePokemon
u8 *src = (u8 *)&gPlayerParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1];
@@ -483,7 +2042,7 @@ void sub_802ECF0(void)
for (i = 0; i < gBattleBufferA[gActiveBank][2]; i++)
dst[i] = src[i];
- dp01_build_cmdbuf_x1D_1D_numargs_varargs(1, gBattleBufferA[gActiveBank][2], dst);
+ Emitcmd29(1, gBattleBufferA[gActiveBank][2], dst);
PlayerBufferExecCompleted();
}
@@ -727,7 +2286,7 @@ void dp01_setattr_by_ch1_for_player_pokemon(u8 a)
sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
}
-void sub_802F7CC(void)
+void PlayerHandlecmd3(void)
{
u8 *dst = (u8 *)&gPlayerParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1];
u8 i;
@@ -871,7 +2430,7 @@ void PlayerHandleTrainerSlideBack(void)
gBattleBankFunc[gActiveBank] = sub_802D274;
}
-void sub_802FE7C(void)
+void PlayerHandlecmd10(void)
{
if (ewram17810[gActiveBank].unk4 == 0)
{
@@ -894,13 +2453,13 @@ void sub_802FE7C(void)
}
}
-void sub_802FF60(void)
+void PlayerHandlecmd11(void)
{
BeginNormalPaletteFade(0xFFFFFFFF, 2, 0, 16, 0);
PlayerBufferExecCompleted();
}
-void sub_802FF80(void)
+void PlayerHandlecmd12(void)
{
ewram17840.unk8 = 4;
gDoingBattleAnim = 1;
@@ -1020,7 +2579,7 @@ void PlayerHandlePrintStringPlayerOnly(void)
PlayerBufferExecCompleted();
}
-void sub_803037C(void)
+void PlayerHandlecmd18(void)
{
int r4;
@@ -1045,11 +2604,11 @@ void sub_803037C(void)
sub_8002F44(&gUnknown_03004210);
}
-void nullsub_42()
+void PlayerHandlecmd19()
{
}
-void sub_8030468(void)
+void PlayerHandlecmd20(void)
{
sub_814A5C0(0, 0xFFFF, 12, 0x2D9F, 0);
sub_80304A8();
@@ -1083,7 +2642,7 @@ void PlayerHandleOpenBag(void)
gUnknown_02038470[i] = gBattleBufferA[gActiveBank][1 + i];
}
-void sub_8030594(void)
+void PlayerHandlecmd22(void)
{
s32 i;
@@ -1099,7 +2658,7 @@ void sub_8030594(void)
gBankInMenu = gActiveBank;
}
-void sub_8030674(void)
+void PlayerHandlecmd23(void)
{
BattleMusicStop();
BeginNormalPaletteFade(0xFFFFFFFF, 2, 0, 16, 0);
@@ -1182,7 +2741,7 @@ void PlayerHandleStatusXor(void)
PlayerBufferExecCompleted();
}
-void sub_803097C(void)
+void PlayerHandlecmd29(void)
{
PlayerBufferExecCompleted();
}
@@ -1214,60 +2773,60 @@ void PlayerHandleDMATransfer(void)
PlayerBufferExecCompleted();
}
-void sub_8030A3C(void)
+void PlayerHandlecmd31(void)
{
PlayBGM(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
PlayerBufferExecCompleted();
}
-void sub_8030A6C(void)
+void PlayerHandlecmd32(void)
{
PlayerBufferExecCompleted();
}
-void sub_8030A78(void)
+void PlayerHandlecmd33(void)
{
- dp01_build_cmdbuf_x21_a_bb(1, 0, 0);
+ Emitcmd33(1, 0, 0);
PlayerBufferExecCompleted();
}
-void sub_8030A8C(void)
+void PlayerHandlecmd34(void)
{
- dp01_build_cmdbuf_x22_a_three_bytes(1, 0, 0);
+ Emitcmd34(1, 0, 0);
PlayerBufferExecCompleted();
}
-void sub_8030AA0(void)
+void PlayerHandlecmd35(void)
{
- dp01_build_cmdbuf_x23_aa_0(1, 0);
+ Emitcmd35(1, 0);
PlayerBufferExecCompleted();
}
-void sub_8030AB4(void)
+void PlayerHandlecmd36(void)
{
- dp01_build_cmdbuf_x24_aa_0(1, 0);
+ Emitcmd36(1, 0);
PlayerBufferExecCompleted();
}
-void sub_8030AC8(void)
+void PlayerHandlecmd37(void)
{
gUnknown_020238C8.unk0_0 = 0;
PlayerBufferExecCompleted();
}
-void sub_8030AE4(void)
+void PlayerHandlecmd38(void)
{
gUnknown_020238C8.unk0_0 = gBattleBufferA[gActiveBank][1];
PlayerBufferExecCompleted();
}
-void sub_8030B1C(void)
+void PlayerHandlecmd39(void)
{
gUnknown_020238C8.unk0_7 = 0;
PlayerBufferExecCompleted();
}
-void sub_8030B34(void)
+void PlayerHandlecmd40(void)
{
gUnknown_020238C8.unk0_7 ^= 1;
PlayerBufferExecCompleted();
@@ -1288,7 +2847,7 @@ void PlayerHandleHitAnimation(void)
}
}
-void sub_8030BCC(void)
+void PlayerHandlecmd42(void)
{
PlayerBufferExecCompleted();
}
@@ -1305,7 +2864,7 @@ void PlayerHandleEffectivenessSound(void)
PlayerBufferExecCompleted();
}
-void sub_8030C1C(void)
+void PlayerHandlecmd44(void)
{
PlayFanfare(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
PlayerBufferExecCompleted();
@@ -1393,7 +2952,7 @@ void task05_08033660(u8 taskId)
}
}
-void sub_8030FAC(void)
+void PlayerHandlecmd48(void)
{
if (gBattleBufferA[gActiveBank][1] != 0 && GetBankSide(gActiveBank) == 0)
{
@@ -1419,14 +2978,14 @@ void sub_8031064(void)
}
}
-void sub_80310A4(void)
+void PlayerHandlecmd49(void)
{
if (ewram17810[gActiveBank].unk0_0)
gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0;
PlayerBufferExecCompleted();
}
-void sub_80310F0(void)
+void PlayerHandlecmd50(void)
{
dp11b_obj_free(gActiveBank, 1);
dp11b_obj_free(gActiveBank, 0);
@@ -1493,7 +3052,7 @@ void PlayerHandleResetActionMoveSelection(void)
PlayerBufferExecCompleted();
}
-void sub_80312A0(void)
+void PlayerHandlecmd55(void)
{
gBattleOutcome = gBattleBufferA[gActiveBank][1];
FadeOutMapMusic(5);
@@ -1502,6 +3061,6 @@ void sub_80312A0(void)
gBattleBankFunc[gActiveBank] = sub_802D18C;
}
-void nullsub_43(void)
+void PlayerHandlecmd56(void)
{
}
diff --git a/src/battle/battle_controller_safari.c b/src/battle/battle_controller_safari.c
new file mode 100644
index 000000000..46e34589a
--- /dev/null
+++ b/src/battle/battle_controller_safari.c
@@ -0,0 +1,173 @@
+#include "global.h"
+#include "battle_anim_81258BC.h"
+#include "battle.h"
+#include "battle_message.h"
+#include "menu_cursor.h"
+#include "text.h"
+
+extern struct Window gUnknown_03004210;
+extern u8 gDisplayedStringBattle[];
+extern u8 gActionSelectionCursor[];
+
+extern const u8 gUnknown_08400CBB[];
+extern u8 gActiveBank;
+extern const u8 gUnknown_08400D15[];
+
+extern void *gBattleBankFunc[];
+extern u16 gUnknown_030042A0;
+extern u16 gUnknown_030042A4;
+
+#if ENGLISH
+#define SUB_812BB10_TILE_DATA_OFFSET 440
+#elif GERMAN
+#define SUB_812BB10_TILE_DATA_OFFSET 444
+#endif
+
+// this file's functions
+void SafariHandleGetAttributes(void);
+void SafariHandlecmd1(void);
+void SafariHandleSetAttributes(void);
+void SafariHandlecmd3(void);
+void SafariHandleLoadPokeSprite(void);
+void SafariHandleSendOutPoke(void);
+void SafariHandleReturnPokeToBall(void);
+void SafariHandleTrainerThrow(void);
+void SafariHandleTrainerSlide(void);
+void SafariHandleTrainerSlideBack(void);
+void SafariHandlecmd10(void);
+void SafariHandlecmd11(void);
+void SafariHandlecmd12(void);
+void SafariHandleBallThrow(void);
+void SafariHandlePuase(void);
+void SafariHandleMoveAnimation(void);
+void SafariHandlePrintString(void);
+void SafariHandlePrintStringPlayerOnly(void);
+void SafariHandlecmd18(void);
+void SafariHandlecmd19(void);
+void SafariHandlecmd20(void);
+void SafariHandleOpenBag(void);
+void SafariHandlecmd22(void);
+void SafariHandlecmd23(void);
+void SafariHandleHealthBarUpdate(void);
+void SafariHandleExpBarUpdate(void);
+void SafariHandleStatusIconUpdate(void);
+void SafariHandleStatusAnimation(void);
+void SafariHandleStatusXor(void);
+void SafariHandlecmd29(void);
+void SafariHandleDMATransfer(void);
+void SafariHandlecmd31(void);
+void SafariHandlecmd32(void);
+void SafariHandlecmd33(void);
+void SafariHandlecmd34(void);
+void SafariHandlecmd35(void);
+void SafariHandlecmd36(void);
+void SafariHandlecmd37(void);
+void SafariHandlecmd38(void);
+void SafariHandlecmd39(void);
+void SafariHandlecmd40(void);
+void SafariHandleHitAnimation(void);
+void SafariHandlecmd42(void);
+void SafariHandleEffectivenessSound(void);
+void SafariHandlecmd44(void);
+void SafariHandleFaintingCry(void);
+void SafariHandleIntroSlide(void);
+void SafariHandleTrainerBallThrow(void);
+void SafariHandlecmd48(void);
+void SafariHandlecmd49(void);
+void SafariHandlecmd50(void);
+void SafariHandleSpriteInvisibility(void);
+void SafariHandleBattleAnimation(void);
+void SafariHandleLinkStandbyMsg(void);
+void SafariHandleResetActionMoveSelection(void);
+void SafariHandlecmd55(void);
+void SafariHandlecmd56(void);
+
+// const data
+typedef void (*BattleBufferCmd) (void);
+const BattleBufferCmd gSafariBufferCommands[] =
+{
+ SafariHandleGetAttributes,
+ SafariHandlecmd1,
+ SafariHandleSetAttributes,
+ SafariHandlecmd3,
+ SafariHandleLoadPokeSprite,
+ SafariHandleSendOutPoke,
+ SafariHandleReturnPokeToBall,
+ SafariHandleTrainerThrow,
+ SafariHandleTrainerSlide,
+ SafariHandleTrainerSlideBack,
+ SafariHandlecmd10,
+ SafariHandlecmd11,
+ SafariHandlecmd12,
+ SafariHandleBallThrow,
+ SafariHandlePuase,
+ SafariHandleMoveAnimation,
+ SafariHandlePrintString,
+ SafariHandlePrintStringPlayerOnly,
+ SafariHandlecmd18,
+ SafariHandlecmd19,
+ SafariHandlecmd20,
+ SafariHandleOpenBag,
+ SafariHandlecmd22,
+ SafariHandlecmd23,
+ SafariHandleHealthBarUpdate,
+ SafariHandleExpBarUpdate,
+ SafariHandleStatusIconUpdate,
+ SafariHandleStatusAnimation,
+ SafariHandleStatusXor,
+ SafariHandlecmd29,
+ SafariHandleDMATransfer,
+ SafariHandlecmd31,
+ SafariHandlecmd32,
+ SafariHandlecmd33,
+ SafariHandlecmd34,
+ SafariHandlecmd35,
+ SafariHandlecmd36,
+ SafariHandlecmd37,
+ SafariHandlecmd38,
+ SafariHandlecmd39,
+ SafariHandlecmd40,
+ SafariHandleHitAnimation,
+ SafariHandlecmd42,
+ SafariHandleEffectivenessSound,
+ SafariHandlecmd44,
+ SafariHandleFaintingCry,
+ SafariHandleIntroSlide,
+ SafariHandleTrainerBallThrow,
+ SafariHandlecmd48,
+ SafariHandlecmd49,
+ SafariHandlecmd50,
+ SafariHandleSpriteInvisibility,
+ SafariHandleBattleAnimation,
+ SafariHandleLinkStandbyMsg,
+ SafariHandleResetActionMoveSelection,
+ SafariHandlecmd55,
+ SafariHandlecmd56,
+};
+// code
+
+void SafariHandlecmd18(void) {
+ int i;
+
+ gUnknown_030042A4 = 0;
+ gUnknown_030042A0 = 160;
+ gUnknown_03004210.paletteNum = 0;
+ FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 15, 27, 18);
+ FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 35, 16, 36);
+ gBattleBankFunc[gActiveBank] = bx_battle_menu_t6_2;
+
+ InitWindow(&gUnknown_03004210, gUnknown_08400D15, 400, 18, 35);
+ sub_8002F44(&gUnknown_03004210);
+ sub_814A5C0(0, 0xFFFF, 12, 11679, 0);
+
+ for (i = 0; i < 4; i++)
+ {
+ nullsub_8(i);
+ }
+
+ sub_802E3E4(gActionSelectionCursor[gActiveBank], 0);
+ StrCpyDecodeToDisplayedStringBattle((u8 *) gUnknown_08400CBB);
+
+ InitWindow(&gUnknown_03004210, gDisplayedStringBattle, SUB_812BB10_TILE_DATA_OFFSET, 2, 35);
+ sub_8002F44(&gUnknown_03004210);
+}
diff --git a/src/battle/battle_anim_8137220.c b/src/battle/battle_controller_wally.c
index af2b86c17..36e525bcc 100644
--- a/src/battle/battle_anim_8137220.c
+++ b/src/battle/battle_controller_wally.c
@@ -29,7 +29,6 @@ struct UnknownStruct3
extern u8 gActiveBank;
extern void (*gBattleBankFunc[])(void);
extern u32 gBattleExecBuffer;
-extern void (*gWallyBufferCommands[])(void);
extern u8 gBattleBufferA[][0x200];
extern u8 gObjectBankIDs[];
extern MainCallback gPreBattleCallback1;
@@ -61,8 +60,8 @@ extern const u8 gUnknown_08400CCC[];
extern const u8 gUnknown_08400CF3[];
// TODO: include rom3.h when my other PR gets merged
-extern void dp01_build_cmdbuf_x21_a_bb(u8, u8, u16);
-extern void dp01_build_cmdbuf_x23_aa_0(u8, u16);
+extern void Emitcmd33(u8, u8, u16);
+extern void Emitcmd35(u8, u16);
extern void nullsub_14(void);
extern void PrepareBagForWallyTutorial(void);
@@ -72,7 +71,7 @@ extern void sub_804777C();
extern void sub_8043DFC();
extern bool8 IsDoubleBattle(void);
extern void c3_0802FDF4(u8);
-extern void sub_802ECF0(void);
+extern void PlayerHandlecmd1(void);
extern void LoadPlayerTrainerBankSprite();
extern u8 GetBankIdentity(u8);
extern void sub_80313A0(struct Sprite *);
@@ -98,6 +97,8 @@ extern u8 sub_8079E90();
extern void sub_80312F0(struct Sprite *);
extern bool8 move_anim_start_t3();
+// this file's functions
+
void WallyBufferRunCommand(void);
void sub_81374FC(void);
void sub_81376B8(void);
@@ -107,6 +108,130 @@ void sub_8138294(u8);
void sub_81390D0(void);
void sub_8139A2C(u8);
+void WallyHandleGetAttributes(void);
+void WallyHandlecmd1(void);
+void WallyHandleSetAttributes(void);
+void WallyHandlecmd3(void);
+void WallyHandleLoadPokeSprite(void);
+void WallyHandleSendOutPoke(void);
+void WallyHandleReturnPokeToBall(void);
+void WallyHandleTrainerThrow(void);
+void WallyHandleTrainerSlide(void);
+void WallyHandleTrainerSlideBack(void);
+void WallyHandlecmd10(void);
+void WallyHandlecmd11(void);
+void WallyHandlecmd12(void);
+void WallyHandleBallThrow(void);
+void WallyHandlePuase(void);
+void WallyHandleMoveAnimation(void);
+void WallyHandlePrintString(void);
+void WallyHandlePrintStringPlayerOnly(void);
+void WallyHandlecmd18(void);
+void WallyHandlecmd19(void);
+void WallyHandlecmd20(void);
+void WallyHandleOpenBag(void);
+void WallyHandlecmd22(void);
+void WallyHandlecmd23(void);
+void WallyHandleHealthBarUpdate(void);
+void WallyHandleExpBarUpdate(void);
+void WallyHandleStatusIconUpdate(void);
+void WallyHandleStatusAnimation(void);
+void WallyHandleStatusXor(void);
+void WallyHandlecmd29(void);
+void WallyHandleDMATransfer(void);
+void WallyHandlecmd31(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 WallyHandlecmd44(void);
+void WallyHandleFaintingCry(void);
+void WallyHandleIntroSlide(void);
+void WallyHandleTrainerBallThrow(void);
+void WallyHandlecmd48(void);
+void WallyHandlecmd49(void);
+void WallyHandlecmd50(void);
+void WallyHandleSpriteInvisibility(void);
+void WallyHandleBattleAnimation(void);
+void WallyHandleLinkStandbyMsg(void);
+void WallyHandleResetActionMoveSelection(void);
+void WallyHandlecmd55(void);
+void WallyHandlecmd56(void);
+
+// const data
+
+typedef void (*BattleBufferCmd) (void);
+static const BattleBufferCmd gWallyBufferCommands[] =
+{
+ WallyHandleGetAttributes,
+ WallyHandlecmd1,
+ WallyHandleSetAttributes,
+ WallyHandlecmd3,
+ WallyHandleLoadPokeSprite,
+ WallyHandleSendOutPoke,
+ WallyHandleReturnPokeToBall,
+ WallyHandleTrainerThrow,
+ WallyHandleTrainerSlide,
+ WallyHandleTrainerSlideBack,
+ WallyHandlecmd10,
+ WallyHandlecmd11,
+ WallyHandlecmd12,
+ WallyHandleBallThrow,
+ WallyHandlePuase,
+ WallyHandleMoveAnimation,
+ WallyHandlePrintString,
+ WallyHandlePrintStringPlayerOnly,
+ WallyHandlecmd18,
+ WallyHandlecmd19,
+ WallyHandlecmd20,
+ WallyHandleOpenBag,
+ WallyHandlecmd22,
+ WallyHandlecmd23,
+ WallyHandleHealthBarUpdate,
+ WallyHandleExpBarUpdate,
+ WallyHandleStatusIconUpdate,
+ WallyHandleStatusAnimation,
+ WallyHandleStatusXor,
+ WallyHandlecmd29,
+ WallyHandleDMATransfer,
+ WallyHandlecmd31,
+ WallyHandlecmd32,
+ WallyHandlecmd33,
+ WallyHandlecmd34,
+ WallyHandlecmd35,
+ WallyHandlecmd36,
+ WallyHandlecmd37,
+ WallyHandlecmd38,
+ WallyHandlecmd39,
+ WallyHandlecmd40,
+ WallyHandleHitAnimation,
+ WallyHandlecmd42,
+ WallyHandleEffectivenessSound,
+ WallyHandlecmd44,
+ WallyHandleFaintingCry,
+ WallyHandleIntroSlide,
+ WallyHandleTrainerBallThrow,
+ WallyHandlecmd48,
+ WallyHandlecmd49,
+ WallyHandlecmd50,
+ WallyHandleSpriteInvisibility,
+ WallyHandleBattleAnimation,
+ WallyHandleLinkStandbyMsg,
+ WallyHandleResetActionMoveSelection,
+ WallyHandlecmd55,
+ WallyHandlecmd56,
+};
+
+// code
+
void unref_sub_8137220(void)
{
}
@@ -146,7 +271,7 @@ void sub_81372BC(void)
if (r4 == 0)
{
PlaySE(SE_SELECT);
- dp01_build_cmdbuf_x21_a_bb(1, 0, 0);
+ Emitcmd33(1, 0, 0);
WallyBufferExecCompleted();
ewram[0x160A8]++;
ewram[0x160A9] = r4;
@@ -158,7 +283,7 @@ void sub_81372BC(void)
if (r4 == 0)
{
PlaySE(SE_SELECT);
- dp01_build_cmdbuf_x21_a_bb(1, 0, 0);
+ Emitcmd33(1, 0, 0);
WallyBufferExecCompleted();
ewram[0x160A8]++;
ewram[0x160A9] = r4;
@@ -169,7 +294,7 @@ void sub_81372BC(void)
r4 = --ewram[0x160AA];
if (r4 == 0)
{
- dp01_build_cmdbuf_x21_a_bb(1, 9, 0);
+ Emitcmd33(1, 9, 0);
WallyBufferExecCompleted();
ewram[0x160A8]++;
ewram[0x160A9] = r4;
@@ -191,7 +316,7 @@ void sub_81372BC(void)
{
PlaySE(SE_SELECT);
DestroyMenuCursor();
- dp01_build_cmdbuf_x21_a_bb(1, 1, 0);
+ Emitcmd33(1, 1, 0);
WallyBufferExecCompleted();
}
break;
@@ -241,7 +366,7 @@ void sub_81374FC(void)
if (gMain.callback2 == sub_800F808
&& !gPaletteFade.active)
{
- dp01_build_cmdbuf_x23_aa_0(1, gScriptItemId);
+ Emitcmd35(1, gScriptItemId);
WallyBufferExecCompleted();
}
}
@@ -374,7 +499,7 @@ void unref_sub_81379E4(void)
WallyBufferExecCompleted();
}
-void dp01t_00_5_getattr(void)
+void WallyHandleGetAttributes(void)
{
u8 arr[0x100];
u32 r6 = 0;
@@ -395,7 +520,7 @@ void dp01t_00_5_getattr(void)
r4 >>= 1;
}
}
- dp01_build_cmdbuf_x1D_1D_numargs_varargs(1, r6, arr);
+ Emitcmd29(1, r6, arr);
WallyBufferExecCompleted();
}
@@ -704,12 +829,12 @@ u32 sub_8137A84(u8 a, u8 *buffer)
return size;
}
-void sub_8138230(void)
+void WallyHandlecmd1(void)
{
- sub_802ECF0();
+ PlayerHandlecmd1();
}
-void sub_813823C(void)
+void WallyHandleSetAttributes(void)
{
u8 r4;
u8 i;
@@ -948,22 +1073,22 @@ void sub_8138294(u8 a)
sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
}
-void sub_8138C90(void)
+void WallyHandlecmd3(void)
{
WallyBufferExecCompleted();
}
-void sub_8138C9C(void)
+void WallyHandleLoadPokeSprite(void)
{
WallyBufferExecCompleted();
}
-void sub_8138CA8(void)
+void WallyHandleSendOutPoke(void)
{
WallyBufferExecCompleted();
}
-void sub_8138CB4(void)
+void WallyHandleReturnPokeToBall(void)
{
if (gBattleBufferA[gActiveBank][1] == 0)
{
@@ -979,7 +1104,7 @@ void sub_8138CB4(void)
}
}
-void sub_8138D38(void)
+void WallyHandleTrainerThrow(void)
{
LoadPlayerTrainerBankSprite(2, gActiveBank);
GetMonSpriteTemplate_803C5A0(2, GetBankIdentity(gActiveBank));
@@ -994,7 +1119,7 @@ void sub_8138D38(void)
gBattleBankFunc[gActiveBank] = sub_813741C;
}
-void sub_8138E04(void)
+void WallyHandleTrainerSlide(void)
{
LoadPlayerTrainerBankSprite(2, gActiveBank);
GetMonSpriteTemplate_803C5A0(2, GetBankIdentity(gActiveBank));
@@ -1009,22 +1134,22 @@ void sub_8138E04(void)
gBattleBankFunc[gActiveBank] = sub_8137908;
}
-void sub_8138ED0(void)
+void WallyHandleTrainerSlideBack(void)
{
WallyBufferExecCompleted();
}
-void sub_8138EDC(void)
+void WallyHandlecmd10(void)
{
WallyBufferExecCompleted();
}
-void sub_8138EE8(void)
+void WallyHandlecmd11(void)
{
WallyBufferExecCompleted();
}
-void sub_8138EF4(void)
+void WallyHandlecmd12(void)
{
ewram17840.unk8 = 4;
gDoingBattleAnim = TRUE;
@@ -1032,7 +1157,7 @@ void sub_8138EF4(void)
gBattleBankFunc[gActiveBank] = bx_wait_t5;
}
-void sub_8138F44(void)
+void WallyHandleBallThrow(void)
{
u8 val = gBattleBufferA[gActiveBank][1];
@@ -1042,12 +1167,12 @@ void sub_8138F44(void)
gBattleBankFunc[gActiveBank] = bx_wait_t5;
}
-void sub_8138FA0(void)
+void WallyHandlePuase(void)
{
WallyBufferExecCompleted();
}
-void sub_8138FAC(void)
+void WallyHandleMoveAnimation(void)
{
u16 r0 = gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8);
@@ -1115,7 +1240,7 @@ void sub_81390D0(void)
}
}
-void sub_8139208(void)
+void WallyHandlePrintString(void)
{
u16 *ptr;
@@ -1129,15 +1254,15 @@ void sub_8139208(void)
gBattleBankFunc[gActiveBank] = sub_8137454;
}
-void dp01t_11_5_message_for_player_only(void)
+void WallyHandlePrintStringPlayerOnly(void)
{
if (GetBankSide(gActiveBank) == 0)
- sub_8139208();
+ WallyHandlePrintString();
else
WallyBufferExecCompleted();
}
-void sub_8139298(void)
+void WallyHandlecmd18(void)
{
s32 i;
@@ -1162,12 +1287,12 @@ void sub_8139298(void)
sub_8002F44(&gUnknown_03004210);
}
-void sub_8139378(void)
+void WallyHandlecmd19(void)
{
WallyBufferExecCompleted();
}
-void sub_8139384(void)
+void WallyHandlecmd20(void)
{
switch (ewram[0x160A9])
{
@@ -1182,31 +1307,31 @@ void sub_8139384(void)
{
DestroyMenuCursor();
PlaySE(SE_SELECT);
- dp01_build_cmdbuf_x21_a_bb(1, 10, 256);
+ Emitcmd33(1, 10, 256);
WallyBufferExecCompleted();
}
break;
}
}
-void sub_81393EC(void)
+void WallyHandleOpenBag(void)
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
gBattleBankFunc[gActiveBank] = sub_81374C4;
gBankInMenu = gActiveBank;
}
-void sub_813942C(void)
+void WallyHandlecmd22(void)
{
WallyBufferExecCompleted();
}
-void sub_8139438(void)
+void WallyHandlecmd23(void)
{
WallyBufferExecCompleted();
}
-void sub_8139444(void)
+void WallyHandleHealthBarUpdate(void)
{
s16 r7;
@@ -1229,87 +1354,87 @@ void sub_8139444(void)
gBattleBankFunc[gActiveBank] = sub_81377B0;
}
-void sub_8139544(void)
+void WallyHandleExpBarUpdate(void)
{
WallyBufferExecCompleted();
}
-void sub_8139550(void)
+void WallyHandleStatusIconUpdate(void)
{
WallyBufferExecCompleted();
}
-void sub_813955C(void)
+void WallyHandleStatusAnimation(void)
{
WallyBufferExecCompleted();
}
-void sub_8139568(void)
+void WallyHandleStatusXor(void)
{
WallyBufferExecCompleted();
}
-void sub_8139574(void)
+void WallyHandlecmd29(void)
{
WallyBufferExecCompleted();
}
-void sub_8139580(void)
+void WallyHandleDMATransfer(void)
{
WallyBufferExecCompleted();
}
-void sub_813958C(void)
+void WallyHandlecmd31(void)
{
WallyBufferExecCompleted();
}
-void sub_8139598(void)
+void WallyHandlecmd32(void)
{
WallyBufferExecCompleted();
}
-void sub_81395A4(void)
+void WallyHandlecmd33(void)
{
WallyBufferExecCompleted();
}
-void sub_81395B0(void)
+void WallyHandlecmd34(void)
{
WallyBufferExecCompleted();
}
-void sub_81395BC(void)
+void WallyHandlecmd35(void)
{
WallyBufferExecCompleted();
}
-void sub_81395C8(void)
+void WallyHandlecmd36(void)
{
WallyBufferExecCompleted();
}
-void sub_81395D4(void)
+void WallyHandlecmd37(void)
{
WallyBufferExecCompleted();
}
-void sub_81395E0(void)
+void WallyHandlecmd38(void)
{
WallyBufferExecCompleted();
}
-void sub_81395EC(void)
+void WallyHandlecmd39(void)
{
WallyBufferExecCompleted();
}
-void sub_81395F8(void)
+void WallyHandlecmd40(void)
{
WallyBufferExecCompleted();
}
-void sub_8139604(void)
+void WallyHandleHitAnimation(void)
{
if (gSprites[gObjectBankIDs[gActiveBank]].invisible == TRUE)
{
@@ -1324,37 +1449,37 @@ void sub_8139604(void)
}
}
-void sub_8139674(void)
+void WallyHandlecmd42(void)
{
WallyBufferExecCompleted();
}
-void sub_8139680(void)
+void WallyHandleEffectivenessSound(void)
{
PlaySE(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
WallyBufferExecCompleted();
}
-void sub_81396B0(void)
+void WallyHandlecmd44(void)
{
PlayFanfare(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
WallyBufferExecCompleted();
}
-void sub_81396E0(void)
+void WallyHandleFaintingCry(void)
{
PlayCry1(GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES), 25);
WallyBufferExecCompleted();
}
-void dp01t_2E_5_battle_intro(void)
+void WallyHandleIntroSlide(void)
{
sub_80E43C0(gBattleBufferA[gActiveBank][1]);
gUnknown_02024DE8 |= 1;
WallyBufferExecCompleted();
}
-void sub_8139750(void)
+void WallyHandleTrainerBallThrow(void)
{
u8 paletteNum;
u8 taskId;
@@ -1421,7 +1546,7 @@ void sub_8139A2C(u8 taskId)
}
}
-void sub_8139AA0(void)
+void WallyHandlecmd48(void)
{
if (gBattleBufferA[gActiveBank][1] != 0 && GetBankSide(gActiveBank) == 0)
{
@@ -1435,22 +1560,22 @@ void sub_8139AA0(void)
}
}
-void sub_8139B20(void)
+void WallyHandlecmd49(void)
{
WallyBufferExecCompleted();
}
-void sub_8139B2C(void)
+void WallyHandlecmd50(void)
{
WallyBufferExecCompleted();
}
-void sub_8139B38(void)
+void WallyHandleSpriteInvisibility(void)
{
WallyBufferExecCompleted();
}
-void sub_8139B44(void)
+void WallyHandleBattleAnimation(void)
{
u8 val2 = gBattleBufferA[gActiveBank][1];
u16 val = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8);
@@ -1461,17 +1586,17 @@ void sub_8139B44(void)
gBattleBankFunc[gActiveBank] = sub_8137940;
}
-void sub_8139BA0(void)
+void WallyHandleLinkStandbyMsg(void)
{
WallyBufferExecCompleted();
}
-void sub_8139BAC(void)
+void WallyHandleResetActionMoveSelection(void)
{
WallyBufferExecCompleted();
}
-void sub_8139BB8(void)
+void WallyHandlecmd55(void)
{
gBattleOutcome = gBattleBufferA[gActiveBank][1];
FadeOutMapMusic(5);
@@ -1481,6 +1606,6 @@ void sub_8139BB8(void)
gBattleBankFunc[gActiveBank] = sub_813746C;
}
-void nullsub_80(void)
+void WallyHandlecmd56(void)
{
}
diff --git a/src/misc/rom3.c b/src/misc/rom3.c
index 803bbf943..da2ea1357 100644
--- a/src/misc/rom3.c
+++ b/src/misc/rom3.c
@@ -573,7 +573,7 @@ void EmitGetAttributes(u8 a, u8 b, u8 c)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void dp01_build_cmdbuf_x01_a_b_0(u8 a, u8 b, u8 c)
+void Emitcmd1(u8 a, u8 b, u8 c)
{
gBattleBuffersTransferData[0] = 1;
gBattleBuffersTransferData[1] = b;
@@ -594,7 +594,7 @@ void EmitSetAttributes(u8 a, u8 b, u8 c, u8 d, void *e)
dp01_prepare_buffer(a, gBattleBuffersTransferData, d + 3);
}
-void unref_sub_800C6A4(u8 a, u8 b, u8 c, u8 *d)
+void Emitcmd3(u8 a, u8 b, u8 c, u8 *d)
{
int i;
@@ -606,7 +606,7 @@ void unref_sub_800C6A4(u8 a, u8 b, u8 c, u8 *d)
dp01_prepare_buffer(a, gBattleBuffersTransferData, c + 3);
}
-void dp01_build_cmdbuf_x04_4_4_4(u8 a)
+void EmitLoadPokeSprite(u8 a)
{
gBattleBuffersTransferData[0] = 4;
gBattleBuffersTransferData[1] = 4;
@@ -615,7 +615,7 @@ void dp01_build_cmdbuf_x04_4_4_4(u8 a)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void EmitSwitchInAnim(u8 a, u8 b, u8 c)
+void EmitSendOutPoke(u8 a, u8 b, u8 c)
{
gBattleBuffersTransferData[0] = 5;
gBattleBuffersTransferData[1] = b;
@@ -631,7 +631,7 @@ void EmitReturnPokeToBall(u8 a, u8 b)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 2);
}
-void dp01_build_cmdbuf_x07_7_7_7(u8 a)
+void EmitTrainerThrow(u8 a)
{
gBattleBuffersTransferData[0] = 7;
gBattleBuffersTransferData[1] = 7;
@@ -649,7 +649,7 @@ void EmitTrainerSlide(u8 a)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void dp01_build_cmdbuf_x09_9_9_9(u8 a)
+void EmitTrainerSlideBack(u8 a)
{
gBattleBuffersTransferData[0] = 9;
gBattleBuffersTransferData[1] = 9;
@@ -658,7 +658,7 @@ void dp01_build_cmdbuf_x09_9_9_9(u8 a)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void EmitFaintAnimation(u8 a)
+void Emitcmd10(u8 a)
{
gBattleBuffersTransferData[0] = 10;
gBattleBuffersTransferData[1] = 10;
@@ -667,7 +667,7 @@ void EmitFaintAnimation(u8 a)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void dp01_build_cmdbuf_x0B_B_B_B(u8 a)
+void Emitcmd11(u8 a)
{
gBattleBuffersTransferData[0] = 11;
gBattleBuffersTransferData[1] = 11;
@@ -676,7 +676,7 @@ void dp01_build_cmdbuf_x0B_B_B_B(u8 a)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void dp01_build_cmdbuf_x0C_C_C_C(u8 a)
+void Emitcmd12(u8 a)
{
gBattleBuffersTransferData[0] = 12;
gBattleBuffersTransferData[1] = 12;
@@ -685,14 +685,14 @@ void dp01_build_cmdbuf_x0C_C_C_C(u8 a)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void EmitBallThrowAnim(u8 a, u8 b)
+void EmitBallThrow(u8 a, u8 b)
{
gBattleBuffersTransferData[0] = 13;
gBattleBuffersTransferData[1] = b;
dp01_prepare_buffer(a, gBattleBuffersTransferData, 2);
}
-void unref_sub_800C828(u8 a, u8 b, u8 *c)
+void EmitPuase(u8 a, u8 b, u8 *c)
{
int i;
@@ -1021,7 +1021,7 @@ _0800CB54: .4byte gBattleTextBuff1\n\
.syntax divided\n");
}
-void dp01_build_cmdbuf_x12_a_bb(u8 a, u8 b, u16 c)
+void Emitcmd18(u8 a, u8 b, u16 c)
{
gBattleBuffersTransferData[0] = 18;
gBattleBuffersTransferData[1] = b;
@@ -1030,14 +1030,14 @@ void dp01_build_cmdbuf_x12_a_bb(u8 a, u8 b, u16 c)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void unref_sub_800CB84(u8 a, u8 b)
+void Emitcmd19(u8 a, u8 b)
{
gBattleBuffersTransferData[0] = 19;
gBattleBuffersTransferData[1] = b;
dp01_prepare_buffer(a, gBattleBuffersTransferData, 2);
}
-void sub_800CBA4(u8 a, u8 b, u8 c, u8 *d)
+void Emitcmd20(u8 a, u8 b, u8 c, u8 *d)
{
u32 i;
@@ -1050,7 +1050,7 @@ void sub_800CBA4(u8 a, u8 b, u8 c, u8 *d)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 24);
}
-void sub_800CBE0(u8 a, u8 *b)
+void EmitOpenBag(u8 a, u8 *b)
{
int i;
@@ -1073,7 +1073,7 @@ void EmitChoosePokemon(u8 a, u8 b, u8 c, u8 d, u8 *e)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 8); //but only 7 bytes were written
}
-void dp01_build_cmdbuf_x17_17_17_17(u8 a)
+void Emitcmd23(u8 a)
{
gBattleBuffersTransferData[0] = 23;
gBattleBuffersTransferData[1] = 23;
@@ -1136,7 +1136,7 @@ void EmitStatusXor(u8 a, u8 b)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 2);
}
-void dp01_build_cmdbuf_x1D_1D_numargs_varargs(u8 a, u16 b, u8 *c)
+void Emitcmd29(u8 a, u16 b, u8 *c)
{
int i;
@@ -1149,7 +1149,7 @@ void dp01_build_cmdbuf_x1D_1D_numargs_varargs(u8 a, u16 b, u8 *c)
dp01_prepare_buffer(a, gBattleBuffersTransferData, b + 4);
}
-void unref_sub_800CDD4(u8 a, u32 b, u16 c, u8 *d)
+void EmitDMATransfer(u8 a, u32 b, u16 c, u8 *d)
{
int i;
@@ -1165,7 +1165,7 @@ void unref_sub_800CDD4(u8 a, u32 b, u16 c, u8 *d)
dp01_prepare_buffer(a, gBattleBuffersTransferData, c + 7);
}
-void unref_sub_800CE3C(u8 a, u16 b, u8 *c)
+void Emitcmd31(u8 a, u16 b, u8 *c)
{
int i;
@@ -1177,7 +1177,7 @@ void unref_sub_800CE3C(u8 a, u16 b, u8 *c)
dp01_prepare_buffer(a, gBattleBuffersTransferData, b + 3);
}
-void unref_sub_800CE84(u8 a, u16 b, u8 *c)
+void Emitcmd32(u8 a, u16 b, u8 *c)
{
int i;
@@ -1189,7 +1189,7 @@ void unref_sub_800CE84(u8 a, u16 b, u8 *c)
dp01_prepare_buffer(a, gBattleBuffersTransferData, b + 3);
}
-void dp01_build_cmdbuf_x21_a_bb(u8 a, u8 b, u16 c)
+void Emitcmd33(u8 a, u8 b, u16 c)
{
gBattleBuffersTransferData[0] = 33;
gBattleBuffersTransferData[1] = b;
@@ -1198,7 +1198,7 @@ void dp01_build_cmdbuf_x21_a_bb(u8 a, u8 b, u16 c)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void dp01_build_cmdbuf_x22_a_three_bytes(u8 a, u8 b, u8 *c)
+void Emitcmd34(u8 a, u8 b, u8 *c)
{
int i;
@@ -1209,7 +1209,7 @@ void dp01_build_cmdbuf_x22_a_three_bytes(u8 a, u8 b, u8 *c)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 5);
}
-void dp01_build_cmdbuf_x23_aa_0(u8 a, u16 b)
+void Emitcmd35(u8 a, u16 b)
{
gBattleBuffersTransferData[0] = 35;
gBattleBuffersTransferData[1] = b;
@@ -1218,7 +1218,7 @@ void dp01_build_cmdbuf_x23_aa_0(u8 a, u16 b)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void dp01_build_cmdbuf_x24_aa_0(u8 a, u16 b)
+void Emitcmd36(u8 a, u16 b)
{
gBattleBuffersTransferData[0] = 36;
gBattleBuffersTransferData[1] = b;
@@ -1227,7 +1227,7 @@ void dp01_build_cmdbuf_x24_aa_0(u8 a, u16 b)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void dp01_build_cmdbuf_x25_25_25_25(u8 a)
+void Emitcmd37(u8 a)
{
gBattleBuffersTransferData[0] = 37;
gBattleBuffersTransferData[1] = 37;
@@ -1236,14 +1236,14 @@ void dp01_build_cmdbuf_x25_25_25_25(u8 a)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void dp01_build_cmdbuf_x26_a(u8 a, u8 b)
+void Emitcmd38(u8 a, u8 b)
{
gBattleBuffersTransferData[0] = 38;
gBattleBuffersTransferData[1] = b;
dp01_prepare_buffer(a, gBattleBuffersTransferData, 2);
}
-void dp01_build_cmdbuf_x27_27_27_27(u8 a)
+void Emitcmd39(u8 a)
{
gBattleBuffersTransferData[0] = 39;
gBattleBuffersTransferData[1] = 39;
@@ -1252,7 +1252,7 @@ void dp01_build_cmdbuf_x27_27_27_27(u8 a)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void dp01_build_cmdbuf_x28_28_28_28(u8 a)
+void Emitcmd40(u8 a)
{
gBattleBuffersTransferData[0] = 40;
gBattleBuffersTransferData[1] = 40;
@@ -1270,7 +1270,7 @@ void EmitHitAnimation(u8 a)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void dp01_build_cmdbuf_x2A_2A_2A_2A(u8 a)
+void Emitcmd42(u8 a)
{
gBattleBuffersTransferData[0] = 42;
gBattleBuffersTransferData[1] = 42;
@@ -1288,7 +1288,7 @@ void EmitEffectivenessSound(u8 a, u16 b)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void EmitPlaySound(u8 a, u16 b)
+void Emitcmd44(u8 a, u16 b)
{
gBattleBuffersTransferData[0] = 44;
gBattleBuffersTransferData[1] = b;
@@ -1306,14 +1306,14 @@ void EmitFaintingCry(u8 a)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void EmitBattleIntroSlide(u8 a, u8 b)
+void EmitIntroSlide(u8 a, u8 b)
{
gBattleBuffersTransferData[0] = 46;
gBattleBuffersTransferData[1] = b;
dp01_prepare_buffer(a, gBattleBuffersTransferData, 2);
}
-void dp01_build_cmdbuf_x2F_2F_2F_2F(u8 a)
+void EmitTrainerBallThrow(u8 a)
{
gBattleBuffersTransferData[0] = 47;
gBattleBuffersTransferData[1] = 47;
@@ -1322,7 +1322,7 @@ void dp01_build_cmdbuf_x2F_2F_2F_2F(u8 a)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void dp01_build_cmdbuf_x30_TODO(u8 a, u8 *b, u8 c)
+void Emitcmd48(u8 a, u8 *b, u8 c)
{
int i;
@@ -1335,7 +1335,7 @@ void dp01_build_cmdbuf_x30_TODO(u8 a, u8 *b, u8 c)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 52);
}
-void dp01_build_cmdbuf_x31_31_31_31(u8 a)
+void Emitcmd49(u8 a)
{
gBattleBuffersTransferData[0] = 49;
gBattleBuffersTransferData[1] = 49;
@@ -1344,7 +1344,7 @@ void dp01_build_cmdbuf_x31_31_31_31(u8 a)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void dp01_build_cmdbuf_x32_32_32_32(u8 a)
+void Emitcmd50(u8 a)
{
gBattleBuffersTransferData[0] = 50;
gBattleBuffersTransferData[1] = 50;
@@ -1385,7 +1385,7 @@ void EmitResetActionMoveSelection(u8 a, u8 b)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 2);
}
-void dp01_build_cmdbuf_x37_a(u8 a, u8 b)
+void Emitcmd55(u8 a, u8 b)
{
gBattleBuffersTransferData[0] = 55;
gBattleBuffersTransferData[1] = b;