summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjiangzhengwenjz <jiangzhengwenjzw@qq.com>2019-08-05 08:15:58 +0800
committerjiangzhengwenjz <jiangzhengwenjzw@qq.com>2019-08-05 08:15:58 +0800
commitb9d547a02f615b991713158bb7068ce0d7169088 (patch)
treeb09fb1c380e86fa9c2ba181dd669eead85f556b9
parent5568895b043dc37e95be0e99787541d78a7c6fee (diff)
ported battle_controller_player from pokeem and matched several new functions
-rw-r--r--asm/battle_2.s12
-rw-r--r--asm/battle_controller_link_partner.s4
-rw-r--r--asm/battle_controller_oak.s30
-rw-r--r--asm/battle_controller_player.s11027
-rw-r--r--asm/battle_controller_pokedude.s22
-rw-r--r--asm/battle_interface.s6
-rw-r--r--asm/battle_message.s4
-rw-r--r--asm/item_menu.s16
-rw-r--r--asm/link_rfu_3.s8
-rw-r--r--asm/party_menu.s22
-rw-r--r--data/data.s10
-rw-r--r--data/data_83F5738.s10
-rw-r--r--include/battle.h8
-rw-r--r--include/battle_anim.h4
-rw-r--r--include/battle_controllers.h13
-rw-r--r--include/battle_main.h (renamed from include/battle_2.h)61
-rw-r--r--include/battle_script_commands.h1
-rw-r--r--include/data2.h2
-rw-r--r--include/link.h4
-rw-r--r--include/party_menu.h5
-rw-r--r--include/pokemon.h2
-rw-r--r--include/pokemon_special_anim.h9
-rw-r--r--include/strings.h10
-rw-r--r--ld_script.txt4
-rw-r--r--src/battle_ai_script_commands.c2
-rw-r--r--src/battle_controller_opponent.c2
-rw-r--r--src/battle_controller_player.c2975
-rw-r--r--src/battle_controllers.c2
-rw-r--r--src/battle_gfx_sfx_util.c4
-rw-r--r--src/pokemon.c2
-rw-r--r--src/teachy_tv.c2
-rw-r--r--src/trainer_tower.c2
-rw-r--r--sym_common.txt4
33 files changed, 3154 insertions, 11135 deletions
diff --git a/asm/battle_2.s b/asm/battle_2.s
index 114aeebd7..c87c81841 100644
--- a/asm/battle_2.s
+++ b/asm/battle_2.s
@@ -4427,8 +4427,8 @@ _08012130:
_08012134: .4byte gIntroSlideFlags
thumb_func_end sub_8012110
- thumb_func_start dp11b_obj_instanciate
-dp11b_obj_instanciate: @ 8012138
+ thumb_func_start DoBounceEffect
+DoBounceEffect: @ 8012138
push {r4-r7,lr}
mov r7, r10
mov r6, r9
@@ -4570,10 +4570,10 @@ _0801223C:
_0801224C: .4byte gBattlerSpriteIds
_08012250: .4byte gBattleSpritesDataPtr
_08012254: .4byte gSprites
- thumb_func_end dp11b_obj_instanciate
+ thumb_func_end DoBounceEffect
- thumb_func_start dp11b_obj_free
-dp11b_obj_free: @ 8012258
+ thumb_func_start EndBounceEffect
+EndBounceEffect: @ 8012258
push {r4-r6,lr}
lsls r0, 24
lsrs r2, r0, 24
@@ -4660,7 +4660,7 @@ _080122FA:
.align 2, 0
_08012300: .4byte gBattleSpritesDataPtr
_08012304: .4byte gSprites
- thumb_func_end dp11b_obj_free
+ thumb_func_end EndBounceEffect
thumb_func_start SpriteCB_HealthBoxBounce
SpriteCB_HealthBoxBounce: @ 8012308
diff --git a/asm/battle_controller_link_partner.s b/asm/battle_controller_link_partner.s
index 09aaf645c..24500abfd 100644
--- a/asm/battle_controller_link_partner.s
+++ b/asm/battle_controller_link_partner.s
@@ -5375,7 +5375,7 @@ _080D6DFC:
adds r1, r4
ldrb r0, [r1, 0x13]
_080D6E0C:
- ldr r1, _080D6EA4 @ =gUnknown_8239FD4
+ ldr r1, _080D6EA4 @ =gTrainerBackPicPaletteTable
lsls r0, 3
adds r0, r1
ldr r0, [r0]
@@ -5451,7 +5451,7 @@ _080D6E86:
pop {r0}
bx r0
.align 2, 0
-_080D6EA4: .4byte gUnknown_8239FD4
+_080D6EA4: .4byte gTrainerBackPicPaletteTable
_080D6EA8: .4byte gSprites
_080D6EAC: .4byte gBattlerSpriteIds
_080D6EB0: .4byte gActiveBattler
diff --git a/asm/battle_controller_oak.s b/asm/battle_controller_oak.s
index d4743e8a4..47230be60 100644
--- a/asm/battle_controller_oak.s
+++ b/asm/battle_controller_oak.s
@@ -101,12 +101,12 @@ sub_80E763C: @ 80E763C
movs r1, 0x1
movs r2, 0x7
movs r3, 0x1
- bl dp11b_obj_instanciate
+ bl DoBounceEffect
ldrb r0, [r4]
movs r1, 0
movs r2, 0x7
movs r3, 0x1
- bl dp11b_obj_instanciate
+ bl DoBounceEffect
ldr r0, _080E76A4 @ =gMain
ldrh r1, [r0, 0x2E]
movs r2, 0x1
@@ -329,7 +329,7 @@ _080E782C:
ands r0, r1
cmp r0, 0
beq _080E7838
- bl sub_8048A4C
+ bl SwapHpBarsWithHpText
_080E7838:
pop {r3}
mov r8, r3
@@ -511,7 +511,7 @@ _080E7984: .4byte gDoingBattleAnim
thumb_func_start sub_80E7988
sub_80E7988: @ 80E7988
push {lr}
- bl sub_802EA10
+ bl HandleInputChooseMove
ldr r2, _080E79AC @ =gBattleControllerExecFlags
ldr r1, _080E79B0 @ =gBitTable
ldr r0, _080E79B4 @ =gActiveBattler
@@ -562,7 +562,7 @@ sub_80E79B8: @ 80E79B8
bl DestroyTask
bl FreeAllWindowBuffers
adds r0, r4, 0
- bl sub_81278DC
+ bl OpenPartyMenuInBattle
_080E79F6:
pop {r4}
pop {r0}
@@ -6031,7 +6031,7 @@ _080EA71E:
ands r0, r1
cmp r0, 0
beq _080EA770
- ldr r0, _080EA76C @ =gUnknown_83FE6D5
+ ldr r0, _080EA76C @ =gText_WhatWillPkmnDo
bl BattleStringExpandPlaceholdersToDisplayedString
b _080EA776
.align 2, 0
@@ -6042,7 +6042,7 @@ _080EA75C: .4byte gUnknown_83FDA4C
_080EA760: .4byte gUnknown_83FE725
_080EA764: .4byte gActionSelectionCursor
_080EA768: .4byte gBattleTypeFlags
-_080EA76C: .4byte gUnknown_83FE6D5
+_080EA76C: .4byte gText_WhatWillPkmnDo
_080EA770:
ldr r0, _080EA784 @ =gUnknown_83FE6FA
bl BattleStringExpandPlaceholdersToDisplayedString
@@ -6108,7 +6108,7 @@ sub_80EA7DC: @ 80EA7DC
ands r0, r1
cmp r0, 0
beq _080EA810
- bl sub_8032CB4
+ bl InitMoveSelectionsVarsAndStrings
ldr r1, _080EA804 @ =gBattlerControllerFuncs
ldr r0, _080EA808 @ =gActiveBattler
ldrb r0, [r0]
@@ -6135,7 +6135,7 @@ _080EA810:
.align 2, 0
_080EA824: .4byte gBattleStruct
_080EA828:
- bl sub_8032CB4
+ bl InitMoveSelectionsVarsAndStrings
ldr r1, [r4]
adds r1, 0x95
ldrb r0, [r1]
@@ -6891,7 +6891,7 @@ _080EAD64:
bl AllocSpritePalette
adds r4, r0, 0
lsls r4, 24
- ldr r1, _080EAEC0 @ =gUnknown_8239FD4
+ ldr r1, _080EAEC0 @ =gTrainerBackPicPaletteTable
ldr r0, _080EAEC4 @ =gSaveBlock2Ptr
ldr r0, [r0]
ldrb r0, [r0, 0x8]
@@ -6973,7 +6973,7 @@ _080EAEB0: .4byte 0x0000ffd8
_080EAEB4: .4byte StartAnimLinearTranslation
_080EAEB8: .4byte sub_80335F8
_080EAEBC: .4byte 0x0000d6f8
-_080EAEC0: .4byte gUnknown_8239FD4
+_080EAEC0: .4byte gTrainerBackPicPaletteTable
_080EAEC4: .4byte gSaveBlock2Ptr
_080EAEC8: .4byte sub_80EB0A8
_080EAECC: .4byte gTasks
@@ -7326,10 +7326,10 @@ sub_80EB1AC: @ 80EB1AC
ldr r4, _080EB1CC @ =gActiveBattler
ldrb r0, [r4]
movs r1, 0x1
- bl dp11b_obj_free
+ bl EndBounceEffect
ldrb r0, [r4]
movs r1, 0
- bl dp11b_obj_free
+ bl EndBounceEffect
bl WallyBufferExecCompleted
pop {r4}
pop {r0}
@@ -7410,10 +7410,10 @@ sub_80EB238: @ 80EB238
bgt _080EB260
adds r0, r2, 0
movs r1, 0x1
- bl dp11b_obj_free
+ bl EndBounceEffect
ldrb r0, [r4]
movs r1, 0
- bl dp11b_obj_free
+ bl EndBounceEffect
_080EB260:
bl WallyBufferExecCompleted
pop {r4}
diff --git a/asm/battle_controller_player.s b/asm/battle_controller_player.s
deleted file mode 100644
index 4db2fedb2..000000000
--- a/asm/battle_controller_player.s
+++ /dev/null
@@ -1,11027 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start nullsub_13
-nullsub_13: @ 802E310
- bx lr
- thumb_func_end nullsub_13
-
- thumb_func_start SetControllerToPlayer
-SetControllerToPlayer: @ 802E314
- ldr r1, _0802E32C @ =gBattlerControllerFuncs
- ldr r0, _0802E330 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0802E334 @ =PlayerBufferRunCommand
- str r1, [r0]
- ldr r1, _0802E338 @ =gDoingBattleAnim
- movs r0, 0
- strb r0, [r1]
- bx lr
- .align 2, 0
-_0802E32C: .4byte gBattlerControllerFuncs
-_0802E330: .4byte gActiveBattler
-_0802E334: .4byte PlayerBufferRunCommand
-_0802E338: .4byte gDoingBattleAnim
- thumb_func_end SetControllerToPlayer
-
- thumb_func_start PlayerBufferExecCompleted
-PlayerBufferExecCompleted: @ 802E33C
- push {r4,lr}
- sub sp, 0x4
- ldr r1, _0802E37C @ =gBattlerControllerFuncs
- ldr r4, _0802E380 @ =gActiveBattler
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0802E384 @ =PlayerBufferRunCommand
- str r1, [r0]
- ldr r0, _0802E388 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0802E390
- bl GetMultiplayerId
- mov r1, sp
- strb r0, [r1]
- movs r0, 0x2
- movs r1, 0x4
- mov r2, sp
- bl PrepareBufferDataTransferLink
- ldr r1, _0802E38C @ =gBattleBufferA
- ldrb r0, [r4]
- lsls r0, 9
- adds r0, r1
- movs r1, 0x38
- strb r1, [r0]
- b _0802E3A2
- .align 2, 0
-_0802E37C: .4byte gBattlerControllerFuncs
-_0802E380: .4byte gActiveBattler
-_0802E384: .4byte PlayerBufferRunCommand
-_0802E388: .4byte gBattleTypeFlags
-_0802E38C: .4byte gBattleBufferA
-_0802E390:
- ldr r2, _0802E3AC @ =gBattleControllerExecFlags
- ldr r1, _0802E3B0 @ =gBitTable
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- ldr r0, [r2]
- bics r0, r1
- str r0, [r2]
-_0802E3A2:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802E3AC: .4byte gBattleControllerExecFlags
-_0802E3B0: .4byte gBitTable
- thumb_func_end PlayerBufferExecCompleted
-
- thumb_func_start PlayerBufferRunCommand
-PlayerBufferRunCommand: @ 802E3B4
- push {lr}
- ldr r2, _0802E3E8 @ =gBattleControllerExecFlags
- ldr r1, _0802E3EC @ =gBitTable
- ldr r0, _0802E3F0 @ =gActiveBattler
- ldrb r3, [r0]
- lsls r0, r3, 2
- adds r0, r1
- ldr r1, [r2]
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _0802E400
- ldr r0, _0802E3F4 @ =gBattleBufferA
- lsls r1, r3, 9
- adds r1, r0
- ldrb r0, [r1]
- cmp r0, 0x38
- bhi _0802E3FC
- ldr r0, _0802E3F8 @ =gUnknown_825089C
- ldrb r1, [r1]
- lsls r1, 2
- adds r1, r0
- ldr r0, [r1]
- bl _call_via_r0
- b _0802E400
- .align 2, 0
-_0802E3E8: .4byte gBattleControllerExecFlags
-_0802E3EC: .4byte gBitTable
-_0802E3F0: .4byte gActiveBattler
-_0802E3F4: .4byte gBattleBufferA
-_0802E3F8: .4byte gUnknown_825089C
-_0802E3FC:
- bl PlayerBufferExecCompleted
-_0802E400:
- pop {r0}
- bx r0
- thumb_func_end PlayerBufferRunCommand
-
- thumb_func_start CompleteOnBankSpritePosX_0
-CompleteOnBankSpritePosX_0: @ 802E404
- push {lr}
- ldr r2, _0802E42C @ =gSprites
- ldr r1, _0802E430 @ =gBattlerSpriteIds
- ldr r0, _0802E434 @ =gActiveBattler
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x24
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _0802E426
- bl PlayerBufferExecCompleted
-_0802E426:
- pop {r0}
- bx r0
- .align 2, 0
-_0802E42C: .4byte gSprites
-_0802E430: .4byte gBattlerSpriteIds
-_0802E434: .4byte gActiveBattler
- thumb_func_end CompleteOnBankSpritePosX_0
-
- thumb_func_start sub_802E438
-sub_802E438: @ 802E438
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r7, _0802E498 @ =gBattleBufferA
- ldr r4, _0802E49C @ =gActiveBattler
- ldrb r0, [r4]
- lsls r2, r0, 9
- adds r1, r7, 0x2
- adds r1, r2, r1
- ldrb r5, [r1]
- adds r1, r7, 0x3
- adds r2, r1
- ldrb r1, [r2]
- lsls r1, 8
- orrs r5, r1
- movs r1, 0x1
- movs r2, 0x7
- movs r3, 0x1
- bl dp11b_obj_instanciate
- ldrb r0, [r4]
- movs r1, 0
- movs r2, 0x7
- movs r3, 0x1
- bl dp11b_obj_instanciate
- ldr r0, _0802E4A0 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r2, 0x1
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- beq _0802E4D0
- movs r0, 0x5
- bl PlaySE
- ldr r1, _0802E4A4 @ =gActionSelectionCursor
- ldrb r0, [r4]
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _0802E4B8
- cmp r0, 0x1
- bgt _0802E4A8
- cmp r0, 0
- beq _0802E4B2
- b _0802E616
- .align 2, 0
-_0802E498: .4byte gBattleBufferA
-_0802E49C: .4byte gActiveBattler
-_0802E4A0: .4byte gMain
-_0802E4A4: .4byte gActionSelectionCursor
-_0802E4A8:
- cmp r0, 0x2
- beq _0802E4BE
- cmp r0, 0x3
- beq _0802E4C4
- b _0802E616
-_0802E4B2:
- movs r0, 0x1
- movs r1, 0
- b _0802E610
-_0802E4B8:
- movs r0, 0x1
- movs r1, 0x1
- b _0802E610
-_0802E4BE:
- movs r0, 0x1
- movs r1, 0x2
- b _0802E610
-_0802E4C4:
- movs r0, 0x1
- movs r1, 0x3
- movs r2, 0
- bl BtlController_EmitTwoReturnValues
- b _0802E616
-_0802E4D0:
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0802E508
- ldr r5, _0802E504 @ =gActionSelectionCursor
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- bne _0802E4EA
- b _0802E634
-_0802E4EA:
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl ActionSelectionDestroyCursorAt
- ldrb r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- movs r2, 0x1
- b _0802E590
- .align 2, 0
-_0802E504: .4byte gActionSelectionCursor
-_0802E508:
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0802E540
- ldr r5, _0802E53C @ =gActionSelectionCursor
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- beq _0802E522
- b _0802E634
-_0802E522:
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl ActionSelectionDestroyCursorAt
- ldrb r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- movs r2, 0x1
- b _0802E590
- .align 2, 0
-_0802E53C: .4byte gActionSelectionCursor
-_0802E540:
- movs r0, 0x40
- mov r8, r0
- ands r0, r1
- cmp r0, 0
- beq _0802E560
- ldr r5, _0802E55C @ =gActionSelectionCursor
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0802E634
- b _0802E578
- .align 2, 0
-_0802E55C: .4byte gActionSelectionCursor
-_0802E560:
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0802E5A8
- ldr r5, _0802E5A4 @ =gActionSelectionCursor
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _0802E634
-_0802E578:
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl ActionSelectionDestroyCursorAt
- ldrb r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- movs r2, 0x2
-_0802E590:
- eors r0, r2
- strb r0, [r1]
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- movs r1, 0
- bl ActionSelectionCreateCursorAt
- b _0802E634
- .align 2, 0
-_0802E5A4: .4byte gActionSelectionCursor
-_0802E5A8:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0802E628
- ldr r6, _0802E61C @ =gBattleTypeFlags
- ldr r0, [r6]
- ands r0, r2
- cmp r0, 0
- beq _0802E634
- ldrb r0, [r4]
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bne _0802E634
- movs r0, 0
- bl GetBattlerAtPosition
- ldr r1, _0802E620 @ =gAbsentBattlerFlags
- ldrb r1, [r1]
- ldr r2, _0802E624 @ =gBitTable
- lsls r0, 24
- lsrs r0, 22
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _0802E634
- ldr r0, [r6]
- mov r1, r8
- ands r0, r1
- cmp r0, 0
- bne _0802E634
- ldrb r0, [r4]
- lsls r0, 9
- adds r1, r7, 0x1
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _0802E606
- cmp r5, 0xC
- bhi _0802E634
- adds r0, r5, 0
- movs r1, 0x1
- bl AddBagItem
-_0802E606:
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- movs r1, 0xC
-_0802E610:
- movs r2, 0
- bl BtlController_EmitTwoReturnValues
-_0802E616:
- bl PlayerBufferExecCompleted
- b _0802E634
- .align 2, 0
-_0802E61C: .4byte gBattleTypeFlags
-_0802E620: .4byte gAbsentBattlerFlags
-_0802E624: .4byte gBitTable
-_0802E628:
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _0802E634
- bl sub_8048A4C
-_0802E634:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_802E438
-
- thumb_func_start sub_802E640
-sub_802E640: @ 802E640
- push {r4,lr}
- ldr r4, _0802E668 @ =gActiveBattler
- ldrb r0, [r4]
- movs r1, 0x1
- bl dp11b_obj_free
- ldrb r0, [r4]
- movs r1, 0
- bl dp11b_obj_free
- ldr r1, _0802E66C @ =gBattlerControllerFuncs
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0802E670 @ =sub_802E674
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802E668: .4byte gActiveBattler
-_0802E66C: .4byte gBattlerControllerFuncs
-_0802E670: .4byte sub_802E674
- thumb_func_end sub_802E640
-
- thumb_func_start sub_802E674
-sub_802E674: @ 802E674
- push {r4,r5,lr}
- sub sp, 0x4
- ldr r1, _0802E708 @ =gUnknown_8250980
- mov r0, sp
- movs r2, 0x4
- bl memcpy
- ldr r0, _0802E70C @ =gUnknown_3004FF4
- ldrb r0, [r0]
- movs r1, 0x1
- movs r2, 0xF
- movs r3, 0x1
- bl dp11b_obj_instanciate
- movs r4, 0
- ldr r0, _0802E710 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r0, 0
- beq _0802E6B6
-_0802E69A:
- ldr r0, _0802E70C @ =gUnknown_3004FF4
- ldrb r0, [r0]
- cmp r4, r0
- beq _0802E6AC
- lsls r0, r4, 24
- lsrs r0, 24
- movs r1, 0x1
- bl dp11b_obj_free
-_0802E6AC:
- adds r4, 0x1
- ldr r0, _0802E710 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r4, r0
- blt _0802E69A
-_0802E6B6:
- ldr r0, _0802E714 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0802E72C
- movs r0, 0x5
- bl PlaySE
- ldr r2, _0802E718 @ =gSprites
- ldr r1, _0802E71C @ =gBattlerSpriteIds
- ldr r4, _0802E70C @ =gUnknown_3004FF4
- ldrb r0, [r4]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, _0802E720 @ =sub_8012098
- str r1, [r0]
- ldr r1, _0802E724 @ =gMoveSelectionCursor
- ldr r0, _0802E728 @ =gActiveBattler
- ldrb r0, [r0]
- adds r0, r1
- ldrb r2, [r0]
- ldrb r0, [r4]
- lsls r0, 8
- orrs r2, r0
- movs r0, 0x1
- movs r1, 0xA
- bl BtlController_EmitTwoReturnValues
- ldrb r0, [r4]
- movs r1, 0x1
- bl dp11b_obj_free
- bl PlayerBufferExecCompleted
- b _0802E9DC
- .align 2, 0
-_0802E708: .4byte gUnknown_8250980
-_0802E70C: .4byte gUnknown_3004FF4
-_0802E710: .4byte gBattlersCount
-_0802E714: .4byte gMain
-_0802E718: .4byte gSprites
-_0802E71C: .4byte gBattlerSpriteIds
-_0802E720: .4byte sub_8012098
-_0802E724: .4byte gMoveSelectionCursor
-_0802E728: .4byte gActiveBattler
-_0802E72C:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0802E7A0
- movs r0, 0x5
- bl PlaySE
- ldr r2, _0802E784 @ =gSprites
- ldr r1, _0802E788 @ =gBattlerSpriteIds
- ldr r5, _0802E78C @ =gUnknown_3004FF4
- ldrb r0, [r5]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, _0802E790 @ =sub_8012098
- str r1, [r0]
- ldr r1, _0802E794 @ =gBattlerControllerFuncs
- ldr r4, _0802E798 @ =gActiveBattler
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0802E79C @ =sub_802EA10
- str r1, [r0]
- ldrb r0, [r4]
- movs r1, 0x1
- movs r2, 0x7
- movs r3, 0x1
- bl dp11b_obj_instanciate
- ldrb r0, [r4]
- movs r1, 0
- movs r2, 0x7
- movs r3, 0x1
- bl dp11b_obj_instanciate
- ldrb r0, [r5]
- movs r1, 0x1
- bl dp11b_obj_free
- b _0802E9DC
- .align 2, 0
-_0802E784: .4byte gSprites
-_0802E788: .4byte gBattlerSpriteIds
-_0802E78C: .4byte gUnknown_3004FF4
-_0802E790: .4byte sub_8012098
-_0802E794: .4byte gBattlerControllerFuncs
-_0802E798: .4byte gActiveBattler
-_0802E79C: .4byte sub_802EA10
-_0802E7A0:
- movs r0, 0x60
- ands r0, r1
- cmp r0, 0
- bne _0802E7AA
- b _0802E8C4
-_0802E7AA:
- movs r0, 0x5
- bl PlaySE
- ldr r2, _0802E7DC @ =gSprites
- ldr r1, _0802E7E0 @ =gBattlerSpriteIds
- ldr r3, _0802E7E4 @ =gUnknown_3004FF4
- ldrb r0, [r3]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, _0802E7E8 @ =sub_8012098
- str r1, [r0]
- adds r5, r3, 0
-_0802E7CC:
- ldrb r0, [r5]
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r1, r0, 24
- movs r4, 0
- mov r0, sp
- b _0802E7F6
- .align 2, 0
-_0802E7DC: .4byte gSprites
-_0802E7E0: .4byte gBattlerSpriteIds
-_0802E7E4: .4byte gUnknown_3004FF4
-_0802E7E8: .4byte sub_8012098
-_0802E7EC:
- adds r4, 0x1
- cmp r4, 0x3
- bgt _0802E7FC
- mov r2, sp
- adds r0, r2, r4
-_0802E7F6:
- ldrb r0, [r0]
- cmp r1, r0
- bne _0802E7EC
-_0802E7FC:
- subs r4, 0x1
- cmp r4, 0
- bge _0802E804
- movs r4, 0x4
-_0802E804:
- mov r1, sp
- adds r0, r1, r4
- ldrb r0, [r0]
- bl GetBattlerAtPosition
- strb r0, [r5]
- ldr r1, _0802E838 @ =gBattlersCount
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r1]
- cmp r0, r1
- beq _0802E7FC
- movs r4, 0
- ldrb r0, [r5]
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0802E882
- cmp r0, 0x1
- bgt _0802E83C
- cmp r0, 0
- beq _0802E846
- b _0802E884
- .align 2, 0
-_0802E838: .4byte gBattlersCount
-_0802E83C:
- cmp r0, 0x2
- beq _0802E846
- cmp r0, 0x3
- beq _0802E882
- b _0802E884
-_0802E846:
- ldr r2, _0802E8A4 @ =gActiveBattler
- ldrb r0, [r2]
- ldrb r1, [r5]
- cmp r0, r1
- bne _0802E882
- ldr r1, _0802E8A8 @ =gBattlerPartyIndexes
- ldrb r2, [r2]
- lsls r0, r2, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0802E8AC @ =gPlayerParty
- adds r0, r1
- ldr r1, _0802E8B0 @ =gMoveSelectionCursor
- adds r2, r1
- ldrb r1, [r2]
- adds r1, 0xD
- bl GetMonData
- ldr r2, _0802E8B4 @ =gBattleMoves
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r1, [r1, 0x6]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0802E884
-_0802E882:
- adds r4, 0x1
-_0802E884:
- ldr r0, _0802E8B8 @ =gAbsentBattlerFlags
- ldrb r1, [r0]
- ldr r2, _0802E8BC @ =gBitTable
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- ldr r0, _0802E8C0 @ =gUnknown_3004FF4
- cmp r1, 0
- beq _0802E89C
- movs r4, 0
-_0802E89C:
- cmp r4, 0
- beq _0802E7CC
- b _0802E9C4
- .align 2, 0
-_0802E8A4: .4byte gActiveBattler
-_0802E8A8: .4byte gBattlerPartyIndexes
-_0802E8AC: .4byte gPlayerParty
-_0802E8B0: .4byte gMoveSelectionCursor
-_0802E8B4: .4byte gBattleMoves
-_0802E8B8: .4byte gAbsentBattlerFlags
-_0802E8BC: .4byte gBitTable
-_0802E8C0: .4byte gUnknown_3004FF4
-_0802E8C4:
- movs r0, 0x90
- ands r0, r1
- cmp r0, 0
- bne _0802E8CE
- b _0802E9DC
-_0802E8CE:
- movs r0, 0x5
- bl PlaySE
- ldr r2, _0802E900 @ =gSprites
- ldr r1, _0802E904 @ =gBattlerSpriteIds
- ldr r3, _0802E908 @ =gUnknown_3004FF4
- ldrb r0, [r3]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, _0802E90C @ =sub_8012098
- str r1, [r0]
- adds r5, r3, 0
-_0802E8F0:
- ldrb r0, [r5]
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r1, r0, 24
- movs r4, 0
- mov r0, sp
- b _0802E91A
- .align 2, 0
-_0802E900: .4byte gSprites
-_0802E904: .4byte gBattlerSpriteIds
-_0802E908: .4byte gUnknown_3004FF4
-_0802E90C: .4byte sub_8012098
-_0802E910:
- adds r4, 0x1
- cmp r4, 0x3
- bgt _0802E920
- mov r2, sp
- adds r0, r2, r4
-_0802E91A:
- ldrb r0, [r0]
- cmp r1, r0
- bne _0802E910
-_0802E920:
- adds r4, 0x1
- cmp r4, 0x3
- ble _0802E928
- movs r4, 0
-_0802E928:
- mov r1, sp
- adds r0, r1, r4
- ldrb r0, [r0]
- bl GetBattlerAtPosition
- strb r0, [r5]
- ldr r1, _0802E95C @ =gBattlersCount
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r1]
- cmp r0, r1
- beq _0802E920
- movs r4, 0
- ldrb r0, [r5]
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0802E9A6
- cmp r0, 0x1
- bgt _0802E960
- cmp r0, 0
- beq _0802E96A
- b _0802E9A8
- .align 2, 0
-_0802E95C: .4byte gBattlersCount
-_0802E960:
- cmp r0, 0x2
- beq _0802E96A
- cmp r0, 0x3
- beq _0802E9A6
- b _0802E9A8
-_0802E96A:
- ldr r2, _0802E9E4 @ =gActiveBattler
- ldrb r0, [r2]
- ldrb r1, [r5]
- cmp r0, r1
- bne _0802E9A6
- ldr r1, _0802E9E8 @ =gBattlerPartyIndexes
- ldrb r2, [r2]
- lsls r0, r2, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0802E9EC @ =gPlayerParty
- adds r0, r1
- ldr r1, _0802E9F0 @ =gMoveSelectionCursor
- adds r2, r1
- ldrb r1, [r2]
- adds r1, 0xD
- bl GetMonData
- ldr r2, _0802E9F4 @ =gBattleMoves
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r1, [r1, 0x6]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0802E9A8
-_0802E9A6:
- adds r4, 0x1
-_0802E9A8:
- ldr r0, _0802E9F8 @ =gAbsentBattlerFlags
- ldrb r1, [r0]
- ldr r2, _0802E9FC @ =gBitTable
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- ldr r0, _0802EA00 @ =gUnknown_3004FF4
- cmp r1, 0
- beq _0802E9C0
- movs r4, 0
-_0802E9C0:
- cmp r4, 0
- beq _0802E8F0
-_0802E9C4:
- ldr r2, _0802EA04 @ =gSprites
- ldr r1, _0802EA08 @ =gBattlerSpriteIds
- 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, _0802EA0C @ =sub_8012044
- str r1, [r0]
-_0802E9DC:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0802E9E4: .4byte gActiveBattler
-_0802E9E8: .4byte gBattlerPartyIndexes
-_0802E9EC: .4byte gPlayerParty
-_0802E9F0: .4byte gMoveSelectionCursor
-_0802E9F4: .4byte gBattleMoves
-_0802E9F8: .4byte gAbsentBattlerFlags
-_0802E9FC: .4byte gBitTable
-_0802EA00: .4byte gUnknown_3004FF4
-_0802EA04: .4byte gSprites
-_0802EA08: .4byte gBattlerSpriteIds
-_0802EA0C: .4byte sub_8012044
- thumb_func_end sub_802E674
-
- thumb_func_start sub_802EA10
-sub_802EA10: @ 802EA10
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- movs r0, 0
- mov r8, r0
- ldr r6, _0802EA6C @ =gActiveBattler
- ldrb r0, [r6]
- lsls r0, 9
- ldr r1, _0802EA70 @ =gUnknown_2022BC8
- adds r7, r0, r1
- bl sub_8033AC8
- ldr r0, _0802EA74 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r5, 0x1
- adds r0, r5, 0
- ands r0, r1
- cmp r0, 0
- bne _0802EA3A
- b _0802EC10
-_0802EA3A:
- movs r0, 0x5
- bl PlaySE
- ldr r1, _0802EA78 @ =gMoveSelectionCursor
- ldrb r0, [r6]
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 1
- adds r1, r7, r0
- ldrh r0, [r1]
- cmp r0, 0xAE
- bne _0802EA7C
- ldrb r0, [r7, 0x12]
- movs r4, 0
- cmp r0, 0x7
- beq _0802EA8A
- ldrb r1, [r7, 0x13]
- movs r0, 0x7
- eors r1, r0
- negs r0, r1
- orrs r0, r1
- asrs r4, r0, 31
- movs r0, 0x10
- ands r4, r0
- b _0802EA8A
- .align 2, 0
-_0802EA6C: .4byte gActiveBattler
-_0802EA70: .4byte gUnknown_2022BC8
-_0802EA74: .4byte gMain
-_0802EA78: .4byte gMoveSelectionCursor
-_0802EA7C:
- ldr r2, _0802EA9C @ =gBattleMoves
- ldrh r1, [r1]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r4, [r0, 0x6]
-_0802EA8A:
- movs r0, 0x10
- ands r0, r4
- cmp r0, 0
- beq _0802EAA8
- ldr r0, _0802EAA0 @ =gUnknown_3004FF4
- ldr r1, _0802EAA4 @ =gActiveBattler
- ldrb r1, [r1]
- strb r1, [r0]
- b _0802EAC2
- .align 2, 0
-_0802EA9C: .4byte gBattleMoves
-_0802EAA0: .4byte gUnknown_3004FF4
-_0802EAA4: .4byte gActiveBattler
-_0802EAA8:
- ldr r0, _0802EAEC @ =gActiveBattler
- ldrb r0, [r0]
- bl GetBattlerPosition
- adds r1, r0, 0
- movs r2, 0x1
- movs r0, 0x1
- ands r0, r1
- eors r0, r2
- bl GetBattlerAtPosition
- ldr r1, _0802EAF0 @ =gUnknown_3004FF4
- strb r0, [r1]
-_0802EAC2:
- ldr r3, _0802EAF4 @ =gBattleBufferA
- ldr r5, _0802EAEC @ =gActiveBattler
- ldrb r2, [r5]
- lsls r1, r2, 9
- adds r0, r3, 0x1
- adds r0, r1, r0
- ldrb r0, [r0]
- cmp r0, 0
- bne _0802EAF8
- movs r0, 0x2
- ands r0, r4
- cmp r0, 0
- beq _0802EB3A
- adds r0, r3, 0x2
- adds r0, r1, r0
- ldrb r0, [r0]
- cmp r0, 0
- bne _0802EB3A
- movs r0, 0x1
- add r8, r0
- b _0802EB3A
- .align 2, 0
-_0802EAEC: .4byte gActiveBattler
-_0802EAF0: .4byte gUnknown_3004FF4
-_0802EAF4: .4byte gBattleBufferA
-_0802EAF8:
- movs r0, 0x7D
- ands r0, r4
- cmp r0, 0
- bne _0802EB04
- movs r0, 0x1
- add r8, r0
-_0802EB04:
- ldr r0, _0802EB78 @ =gMoveSelectionCursor
- adds r0, r2, r0
- adds r1, r7, 0
- adds r1, 0x8
- ldrb r0, [r0]
- adds r1, r0
- ldrb r0, [r1]
- cmp r0, 0
- beq _0802EB36
- movs r0, 0x12
- ands r0, r4
- cmp r0, 0
- bne _0802EB3A
- movs r0, 0
- bl CountAliveMonsInBattle
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bhi _0802EB3A
- ldrb r0, [r5]
- bl GetDefaultMoveTarget
- ldr r1, _0802EB7C @ =gUnknown_3004FF4
- strb r0, [r1]
-_0802EB36:
- movs r0, 0
- mov r8, r0
-_0802EB3A:
- bl ResetPaletteFadeControl
- movs r0, 0xF0
- lsls r0, 12
- ldr r1, _0802EB80 @ =0x00007fff
- str r1, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl BeginNormalPaletteFade
- mov r0, r8
- cmp r0, 0
- bne _0802EB88
- ldr r1, _0802EB78 @ =gMoveSelectionCursor
- ldr r0, _0802EB84 @ =gActiveBattler
- ldrb r0, [r0]
- adds r0, r1
- ldrb r2, [r0]
- ldr r0, _0802EB7C @ =gUnknown_3004FF4
- ldrb r0, [r0]
- lsls r0, 8
- orrs r2, r0
- movs r0, 0x1
- movs r1, 0xA
- bl BtlController_EmitTwoReturnValues
- bl PlayerBufferExecCompleted
- b _0802EDBA
- .align 2, 0
-_0802EB78: .4byte gMoveSelectionCursor
-_0802EB7C: .4byte gUnknown_3004FF4
-_0802EB80: .4byte 0x00007fff
-_0802EB84: .4byte gActiveBattler
-_0802EB88:
- ldr r1, _0802EBA4 @ =gBattlerControllerFuncs
- ldr r2, _0802EBA8 @ =gActiveBattler
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0802EBAC @ =sub_802E674
- str r1, [r0]
- movs r0, 0x12
- ands r4, r0
- cmp r4, 0
- beq _0802EBB4
- ldr r1, _0802EBB0 @ =gUnknown_3004FF4
- ldrb r0, [r2]
- b _0802EBE4
- .align 2, 0
-_0802EBA4: .4byte gBattlerControllerFuncs
-_0802EBA8: .4byte gActiveBattler
-_0802EBAC: .4byte sub_802E674
-_0802EBB0: .4byte gUnknown_3004FF4
-_0802EBB4:
- movs r0, 0x1
- bl GetBattlerAtPosition
- ldr r1, _0802EBD4 @ =gAbsentBattlerFlags
- ldrb r1, [r1]
- ldr r2, _0802EBD8 @ =gBitTable
- lsls r0, 24
- lsrs r0, 22
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _0802EBDC
- movs r0, 0x3
- b _0802EBDE
- .align 2, 0
-_0802EBD4: .4byte gAbsentBattlerFlags
-_0802EBD8: .4byte gBitTable
-_0802EBDC:
- movs r0, 0x1
-_0802EBDE:
- bl GetBattlerAtPosition
- ldr r1, _0802EC00 @ =gUnknown_3004FF4
-_0802EBE4:
- strb r0, [r1]
- ldr r2, _0802EC04 @ =gSprites
- ldr r1, _0802EC08 @ =gBattlerSpriteIds
- ldr r0, _0802EC00 @ =gUnknown_3004FF4
- 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, _0802EC0C @ =sub_8012044
- b _0802EDB8
- .align 2, 0
-_0802EC00: .4byte gUnknown_3004FF4
-_0802EC04: .4byte gSprites
-_0802EC08: .4byte gBattlerSpriteIds
-_0802EC0C: .4byte sub_8012044
-_0802EC10:
- movs r7, 0x2
- adds r0, r7, 0
- ands r0, r1
- cmp r0, 0
- beq _0802EC38
- movs r0, 0x5
- bl PlaySE
- ldr r2, _0802EC34 @ =0x0000ffff
- movs r0, 0x1
- movs r1, 0xA
- bl BtlController_EmitTwoReturnValues
- bl PlayerBufferExecCompleted
- bl ResetPaletteFadeControl
- b _0802ED2C
- .align 2, 0
-_0802EC34: .4byte 0x0000ffff
-_0802EC38:
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0802EC68
- ldr r4, _0802EC64 @ =gMoveSelectionCursor
- ldrb r0, [r6]
- adds r2, r0, r4
- ldrb r1, [r2]
- adds r0, r5, 0
- ands r0, r1
- cmp r0, 0
- bne _0802EC52
- b _0802EDBA
-_0802EC52:
- ldrb r0, [r2]
- bl MoveSelectionDestroyCursorAt
- ldrb r1, [r6]
- adds r1, r4
- ldrb r0, [r1]
- movs r2, 0x1
- eors r0, r2
- b _0802ED10
- .align 2, 0
-_0802EC64: .4byte gMoveSelectionCursor
-_0802EC68:
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0802ECAC
- ldr r4, _0802ECA4 @ =gMoveSelectionCursor
- ldrb r0, [r6]
- adds r3, r0, r4
- ldrb r2, [r3]
- movs r7, 0x1
- adds r0, r5, 0
- ands r0, r2
- cmp r0, 0
- beq _0802EC84
- b _0802EDBA
-_0802EC84:
- ldr r1, _0802ECA8 @ =gUnknown_3004FF8
- adds r0, r7, 0
- eors r0, r2
- ldrb r1, [r1]
- cmp r0, r1
- bcc _0802EC92
- b _0802EDBA
-_0802EC92:
- ldrb r0, [r3]
- bl MoveSelectionDestroyCursorAt
- ldrb r1, [r6]
- adds r1, r4
- ldrb r0, [r1]
- eors r0, r7
- b _0802ED10
- .align 2, 0
-_0802ECA4: .4byte gMoveSelectionCursor
-_0802ECA8: .4byte gUnknown_3004FF8
-_0802ECAC:
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0802ECDC
- ldr r4, _0802ECD8 @ =gMoveSelectionCursor
- ldrb r0, [r6]
- adds r2, r0, r4
- ldrb r1, [r2]
- adds r0, r7, 0
- ands r0, r1
- cmp r0, 0
- bne _0802ECC6
- b _0802EDBA
-_0802ECC6:
- ldrb r0, [r2]
- bl MoveSelectionDestroyCursorAt
- ldrb r1, [r6]
- adds r1, r4
- ldrb r0, [r1]
- movs r2, 0x2
- eors r0, r2
- b _0802ED10
- .align 2, 0
-_0802ECD8: .4byte gMoveSelectionCursor
-_0802ECDC:
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0802ED4C
- ldr r4, _0802ED40 @ =gMoveSelectionCursor
- ldrb r0, [r6]
- adds r3, r0, r4
- ldrb r2, [r3]
- movs r5, 0x2
- adds r0, r7, 0
- ands r0, r2
- cmp r0, 0
- bne _0802EDBA
- ldr r1, _0802ED44 @ =gUnknown_3004FF8
- adds r0, r5, 0
- eors r0, r2
- ldrb r1, [r1]
- cmp r0, r1
- bcs _0802EDBA
- ldrb r0, [r3]
- bl MoveSelectionDestroyCursorAt
- ldrb r1, [r6]
- adds r1, r4
- ldrb r0, [r1]
- eors r0, r5
-_0802ED10:
- strb r0, [r1]
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r6]
- adds r0, r4
- ldrb r0, [r0]
- movs r1, 0
- bl MoveSelectionCreateCursorAt
- bl MoveSelectionDisplayPpNumber
- bl MoveSelectionDisplayMoveType
-_0802ED2C:
- movs r0, 0xF0
- lsls r0, 12
- ldr r1, _0802ED48 @ =0x00007fff
- str r1, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl BeginNormalPaletteFade
- b _0802EDBA
- .align 2, 0
-_0802ED40: .4byte gMoveSelectionCursor
-_0802ED44: .4byte gUnknown_3004FF8
-_0802ED48: .4byte 0x00007fff
-_0802ED4C:
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0802EDBA
- ldr r0, _0802ED84 @ =gUnknown_3004FF8
- ldrb r0, [r0]
- cmp r0, 0x1
- bls _0802EDBA
- ldr r0, _0802ED88 @ =gBattleTypeFlags
- ldr r5, [r0]
- ands r5, r7
- cmp r5, 0
- bne _0802EDBA
- ldr r4, _0802ED8C @ =gMoveSelectionCursor
- ldrb r0, [r6]
- adds r0, r4
- ldrb r0, [r0]
- movs r1, 0x1D
- bl MoveSelectionCreateCursorAt
- ldrb r0, [r6]
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0
- beq _0802ED94
- ldr r0, _0802ED90 @ =gUnknown_3004FF4
- strb r5, [r0]
- b _0802ED9C
- .align 2, 0
-_0802ED84: .4byte gUnknown_3004FF8
-_0802ED88: .4byte gBattleTypeFlags
-_0802ED8C: .4byte gMoveSelectionCursor
-_0802ED90: .4byte gUnknown_3004FF4
-_0802ED94:
- ldr r1, _0802EDC8 @ =gUnknown_3004FF4
- adds r0, 0x1
- strb r0, [r1]
- adds r0, r1, 0
-_0802ED9C:
- ldrb r0, [r0]
- movs r1, 0x1B
- bl MoveSelectionCreateCursorAt
- ldr r0, _0802EDCC @ =gUnknown_83FE7A0
- movs r1, 0xB
- bl BattlePutTextOnWindow
- ldr r1, _0802EDD0 @ =gBattlerControllerFuncs
- ldr r0, _0802EDD4 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0802EDD8 @ =sub_802EF58
-_0802EDB8:
- str r1, [r0]
-_0802EDBA:
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802EDC8: .4byte gUnknown_3004FF4
-_0802EDCC: .4byte gUnknown_83FE7A0
-_0802EDD0: .4byte gBattlerControllerFuncs
-_0802EDD4: .4byte gActiveBattler
-_0802EDD8: .4byte sub_802EF58
- thumb_func_end sub_802EA10
-
- thumb_func_start sub_802EDDC
-sub_802EDDC: @ 802EDDC
- push {r4-r7,lr}
- movs r7, 0
- ldr r4, _0802EF40 @ =gMain
- ldrh r1, [r4, 0x2E]
- movs r6, 0x1
- adds r0, r6, 0
- ands r0, r1
- cmp r0, 0
- beq _0802EDF6
- movs r0, 0x5
- bl PlaySE
- movs r7, 0x1
-_0802EDF6:
- ldrh r1, [r4, 0x2E]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0802EE18
- movs r0, 0x5
- bl PlaySE
- ldr r1, _0802EF44 @ =gBattle_BG0_X
- movs r0, 0
- strh r0, [r1]
- ldr r1, _0802EF48 @ =gBattle_BG0_Y
- movs r2, 0xA0
- lsls r2, 1
- adds r0, r2, 0
- strh r0, [r1]
- movs r7, 0xFF
-_0802EE18:
- ldrh r1, [r4, 0x2E]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0802EE58
- ldr r5, _0802EF4C @ =gMoveSelectionCursor
- ldr r4, _0802EF50 @ =gActiveBattler
- ldrb r0, [r4]
- adds r2, r0, r5
- ldrb r1, [r2]
- adds r0, r6, 0
- ands r0, r1
- cmp r0, 0
- beq _0802EE58
- ldrb r0, [r2]
- bl MoveSelectionDestroyCursorAt
- ldrb r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- movs r2, 0x1
- eors r0, r2
- strb r0, [r1]
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- movs r1, 0
- bl MoveSelectionCreateCursorAt
-_0802EE58:
- ldr r0, _0802EF40 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0802EEA6
- ldr r5, _0802EF4C @ =gMoveSelectionCursor
- ldr r4, _0802EF50 @ =gActiveBattler
- ldrb r0, [r4]
- adds r3, r0, r5
- ldrb r2, [r3]
- movs r6, 0x1
- movs r0, 0x1
- ands r0, r2
- cmp r0, 0
- bne _0802EEA6
- ldr r1, _0802EF54 @ =gUnknown_3004FF8
- adds r0, r6, 0
- eors r0, r2
- ldrb r1, [r1]
- cmp r0, r1
- bcs _0802EEA6
- ldrb r0, [r3]
- bl MoveSelectionDestroyCursorAt
- ldrb r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- eors r0, r6
- strb r0, [r1]
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- movs r1, 0
- bl MoveSelectionCreateCursorAt
-_0802EEA6:
- ldr r0, _0802EF40 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0802EEE8
- ldr r5, _0802EF4C @ =gMoveSelectionCursor
- ldr r4, _0802EF50 @ =gActiveBattler
- ldrb r0, [r4]
- adds r2, r0, r5
- ldrb r1, [r2]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0802EEE8
- ldrb r0, [r2]
- bl MoveSelectionDestroyCursorAt
- ldrb r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- movs r2, 0x2
- eors r0, r2
- strb r0, [r1]
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- movs r1, 0
- bl MoveSelectionCreateCursorAt
-_0802EEE8:
- ldr r0, _0802EF40 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0802EF36
- ldr r5, _0802EF4C @ =gMoveSelectionCursor
- ldr r4, _0802EF50 @ =gActiveBattler
- ldrb r0, [r4]
- adds r3, r0, r5
- ldrb r2, [r3]
- movs r6, 0x2
- movs r0, 0x2
- ands r0, r2
- cmp r0, 0
- bne _0802EF36
- ldr r1, _0802EF54 @ =gUnknown_3004FF8
- adds r0, r6, 0
- eors r0, r2
- ldrb r1, [r1]
- cmp r0, r1
- bcs _0802EF36
- ldrb r0, [r3]
- bl MoveSelectionDestroyCursorAt
- ldrb r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- eors r0, r6
- strb r0, [r1]
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- movs r1, 0
- bl MoveSelectionCreateCursorAt
-_0802EF36:
- adds r0, r7, 0
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0802EF40: .4byte gMain
-_0802EF44: .4byte gBattle_BG0_X
-_0802EF48: .4byte gBattle_BG0_Y
-_0802EF4C: .4byte gMoveSelectionCursor
-_0802EF50: .4byte gActiveBattler
-_0802EF54: .4byte gUnknown_3004FF8
- thumb_func_end sub_802EDDC
-
- thumb_func_start sub_802EF58
-sub_802EF58: @ 802EF58
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x24
- ldr r0, _0802F2E4 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x5
- ands r0, r1
- cmp r0, 0
- bne _0802EF72
- b _0802F34C
-_0802EF72:
- movs r0, 0x5
- bl PlaySE
- ldr r0, _0802F2E8 @ =gMoveSelectionCursor
- mov r10, r0
- ldr r1, _0802F2EC @ =gActiveBattler
- mov r8, r1
- ldrb r1, [r1]
- adds r2, r1, r0
- ldr r5, _0802F2F0 @ =gUnknown_3004FF4
- ldrb r0, [r2]
- ldrb r3, [r5]
- cmp r0, r3
- bne _0802EF90
- b _0802F2C8
-_0802EF90:
- lsls r1, 9
- ldr r0, _0802F2F4 @ =gUnknown_2022BC8
- adds r1, r0
- mov r9, r1
- ldrb r1, [r2]
- lsls r1, 1
- add r1, r9
- ldrh r6, [r1]
- ldrb r0, [r5]
- lsls r0, 1
- add r0, r9
- ldrh r0, [r0]
- strh r0, [r1]
- ldrb r0, [r5]
- lsls r0, 1
- add r0, r9
- strh r6, [r0]
- mov r1, r8
- ldrb r0, [r1]
- add r0, r10
- ldrb r1, [r0]
- mov r7, r9
- adds r7, 0x8
- adds r1, r7, r1
- ldrb r6, [r1]
- ldrb r0, [r5]
- adds r0, r7, r0
- ldrb r0, [r0]
- strb r0, [r1]
- ldrb r0, [r5]
- adds r0, r7, r0
- strb r6, [r0]
- mov r2, r8
- ldrb r0, [r2]
- add r0, r10
- ldrb r1, [r0]
- mov r2, r9
- adds r2, 0xC
- adds r1, r2, r1
- ldrb r6, [r1]
- ldrb r0, [r5]
- adds r0, r2, r0
- ldrb r0, [r0]
- strb r0, [r1]
- ldrb r0, [r5]
- adds r2, r0
- strb r6, [r2]
- mov r3, r8
- ldrb r1, [r3]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- ldr r2, _0802F2F8 @ =gDisableStructs
- adds r6, r0, r2
- ldrb r4, [r6, 0x18]
- lsls r3, r4, 24
- lsrs r2, r3, 28
- ldr r0, _0802F2FC @ =gBitTable
- mov r12, r0
- add r1, r10
- ldrb r0, [r1]
- lsls r0, 2
- add r0, r12
- ldr r0, [r0]
- ands r2, r0
- cmp r2, 0
- beq _0802F04A
- lsrs r1, r3, 28
- bics r1, r0
- lsls r1, 4
- movs r2, 0xF
- adds r0, r2, 0
- ands r0, r4
- orrs r0, r1
- strb r0, [r6, 0x18]
- mov r1, r8
- ldrb r0, [r1]
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- ldr r3, _0802F2F8 @ =gDisableStructs
- adds r1, r3
- ldrb r4, [r1, 0x18]
- lsrs r3, r4, 4
- ldrb r0, [r5]
- lsls r0, 2
- add r0, r12
- ldr r0, [r0]
- orrs r0, r3
- lsls r0, 4
- ands r2, r4
- orrs r2, r0
- strb r2, [r1, 0x18]
-_0802F04A:
- bl sub_8030830
- movs r6, 0
- mov r12, r7
- mov r5, sp
- adds r5, 0x18
- str r5, [sp, 0x1C]
- ldr r2, _0802F300 @ =gBattleMons
- mov r0, r8
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r4, r0, 0
- adds r4, 0x3B
- mov r7, r8
- mov r10, r2
- movs r5, 0x3
-_0802F06E:
- mov r1, sp
- adds r3, r1, r6
- ldrb r1, [r4]
- lsls r2, r6, 1
- adds r0, r5, 0
- lsls r0, r2
- ands r1, r0
- asrs r1, r2
- strb r1, [r3]
- adds r6, 0x1
- cmp r6, 0x3
- ble _0802F06E
- ldr r1, _0802F2E8 @ =gMoveSelectionCursor
- ldrb r0, [r7]
- adds r0, r1
- ldrb r0, [r0]
- add r0, sp
- ldrb r0, [r0]
- ldr r2, [sp, 0x1C]
- strb r0, [r2]
- ldrb r0, [r7]
- adds r0, r1
- ldrb r0, [r0]
- mov r3, sp
- adds r2, r3, r0
- ldr r1, _0802F2F0 @ =gUnknown_3004FF4
- ldrb r0, [r1]
- add r0, sp
- ldrb r0, [r0]
- movs r3, 0
- strb r0, [r2]
- ldrb r0, [r1]
- mov r5, sp
- adds r1, r5, r0
- ldr r2, [sp, 0x1C]
- ldrb r0, [r2]
- strb r0, [r1]
- strb r3, [r2]
- movs r6, 0
- ldr r2, [sp, 0x1C]
-_0802F0BE:
- mov r3, sp
- adds r0, r3, r6
- ldrb r1, [r0]
- lsls r0, r6, 1
- lsls r1, r0
- ldrb r0, [r2]
- orrs r0, r1
- strb r0, [r2]
- adds r6, 0x1
- cmp r6, 0x3
- ble _0802F0BE
- ldrb r1, [r7]
- movs r0, 0x58
- muls r0, r1
- add r0, r10
- adds r0, 0x3B
- ldr r5, [sp, 0x1C]
- ldrb r1, [r5]
- strb r1, [r0]
- movs r6, 0
- adds r4, r7, 0
- movs r3, 0x58
- movs r0, 0x24
- add r0, r10
- mov r8, r0
- mov r2, r9
- mov r7, r10
- adds r7, 0xC
- mov r5, r12
-_0802F0F8:
- lsls r1, r6, 1
- ldrb r0, [r4]
- muls r0, r3
- adds r1, r0
- adds r1, r7
- ldrh r0, [r2]
- strh r0, [r1]
- ldrb r0, [r4]
- adds r1, r0, 0
- muls r1, r3
- adds r1, r6, r1
- add r1, r8
- adds r0, r5, r6
- ldrb r0, [r0]
- strb r0, [r1]
- adds r2, 0x2
- adds r6, 0x1
- cmp r6, 0x3
- ble _0802F0F8
- ldr r2, _0802F2EC @ =gActiveBattler
- ldrb r1, [r2]
- movs r0, 0x58
- muls r0, r1
- mov r1, r10
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 14
- ands r0, r1
- cmp r0, 0
- beq _0802F13A
- b _0802F2C8
-_0802F13A:
- movs r6, 0
- mov r1, sp
- adds r1, 0x4
- str r1, [sp, 0x20]
- add r3, sp, 0xC
- mov r10, r3
- ldr r5, _0802F304 @ =gBattlerPartyIndexes
- mov r9, r5
- mov r8, r2
- movs r7, 0x64
- ldr r5, _0802F308 @ =gPlayerParty
- adds r4, r1, 0
-_0802F152:
- mov r1, r8
- ldrb r0, [r1]
- lsls r0, 1
- add r0, r9
- ldrh r0, [r0]
- muls r0, r7
- adds r0, r5
- adds r1, r6, 0
- adds r1, 0xD
- bl GetMonData
- strh r0, [r4]
- mov r2, r8
- ldrb r0, [r2]
- lsls r0, 1
- add r0, r9
- ldrh r0, [r0]
- muls r0, r7
- adds r0, r5
- adds r1, r6, 0
- adds r1, 0x11
- bl GetMonData
- mov r3, r10
- adds r1, r3, r6
- strb r0, [r1]
- adds r4, 0x2
- adds r6, 0x1
- cmp r6, 0x3
- ble _0802F152
- ldr r1, _0802F304 @ =gBattlerPartyIndexes
- ldr r0, _0802F2EC @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0802F308 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x15
- bl GetMonData
- ldr r5, [sp, 0x1C]
- strb r0, [r5]
- movs r6, 0
- movs r5, 0x3
- ldr r4, [sp, 0x1C]
-_0802F1B2:
- mov r0, sp
- adds r3, r0, r6
- lsls r2, r6, 1
- adds r1, r5, 0
- lsls r1, r2
- ldrb r0, [r4]
- ands r0, r1
- asrs r0, r2
- strb r0, [r3]
- adds r6, 0x1
- cmp r6, 0x3
- ble _0802F1B2
- ldr r4, _0802F2E8 @ =gMoveSelectionCursor
- ldr r3, _0802F2EC @ =gActiveBattler
- ldrb r0, [r3]
- adds r0, r4
- ldrb r1, [r0]
- lsls r1, 1
- ldr r2, [sp, 0x20]
- adds r1, r2, r1
- ldrh r6, [r1]
- ldr r2, _0802F2F0 @ =gUnknown_3004FF4
- ldrb r0, [r2]
- lsls r0, 1
- ldr r5, [sp, 0x20]
- adds r0, r5, r0
- ldrh r0, [r0]
- movs r5, 0
- strh r0, [r1]
- ldrb r0, [r2]
- lsls r0, 1
- ldr r1, [sp, 0x20]
- adds r0, r1, r0
- strh r6, [r0]
- ldrb r0, [r3]
- adds r0, r4
- ldrb r1, [r0]
- add r1, r10
- ldrb r6, [r1]
- ldrb r0, [r2]
- add r0, r10
- ldrb r0, [r0]
- strb r0, [r1]
- ldrb r0, [r2]
- add r0, r10
- strb r6, [r0]
- ldrb r0, [r3]
- adds r0, r4
- ldrb r0, [r0]
- add r0, sp
- ldrb r0, [r0]
- ldr r1, [sp, 0x1C]
- strb r0, [r1]
- ldrb r0, [r3]
- adds r0, r4
- ldrb r0, [r0]
- mov r3, sp
- adds r1, r3, r0
- ldrb r0, [r2]
- add r0, sp
- ldrb r0, [r0]
- strb r0, [r1]
- ldrb r0, [r2]
- adds r1, r3, r0
- ldr r2, [sp, 0x1C]
- ldrb r0, [r2]
- strb r0, [r1]
- strb r5, [r2]
- movs r6, 0
- ldr r2, [sp, 0x1C]
-_0802F23E:
- mov r3, sp
- adds r0, r3, r6
- ldrb r1, [r0]
- lsls r0, r6, 1
- lsls r1, r0
- ldrb r0, [r2]
- orrs r0, r1
- strb r0, [r2]
- adds r6, 0x1
- cmp r6, 0x3
- ble _0802F23E
- movs r6, 0
- ldr r5, _0802F304 @ =gBattlerPartyIndexes
- mov r10, r5
- ldr r0, _0802F2EC @ =gActiveBattler
- mov r9, r0
- movs r1, 0x64
- mov r8, r1
- ldr r7, _0802F308 @ =gPlayerParty
- ldr r5, [sp, 0x20]
- adds r5, 0x8
- ldr r4, [sp, 0x20]
-_0802F26A:
- mov r2, r9
- ldrb r0, [r2]
- lsls r0, 1
- add r0, r10
- ldrh r0, [r0]
- mov r3, r8
- muls r3, r0
- adds r0, r3, 0
- adds r0, r7
- adds r1, r6, 0
- adds r1, 0xD
- adds r2, r4, 0
- bl SetMonData
- mov r1, r9
- ldrb r0, [r1]
- lsls r0, 1
- add r0, r10
- ldrh r0, [r0]
- mov r2, r8
- muls r2, r0
- adds r0, r2, 0
- adds r0, r7
- adds r1, r6, 0
- adds r1, 0x11
- adds r2, r5, 0
- bl SetMonData
- adds r5, 0x1
- adds r4, 0x2
- adds r6, 0x1
- cmp r6, 0x3
- ble _0802F26A
- ldr r1, _0802F304 @ =gBattlerPartyIndexes
- ldr r0, _0802F2EC @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0802F308 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x15
- ldr r2, [sp, 0x1C]
- bl SetMonData
-_0802F2C8:
- ldr r0, _0802F30C @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0802F318
- ldr r1, _0802F310 @ =gBattlerControllerFuncs
- ldr r2, _0802F2EC @ =gActiveBattler
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0802F314 @ =sub_80E7988
- b _0802F324
- .align 2, 0
-_0802F2E4: .4byte gMain
-_0802F2E8: .4byte gMoveSelectionCursor
-_0802F2EC: .4byte gActiveBattler
-_0802F2F0: .4byte gUnknown_3004FF4
-_0802F2F4: .4byte gUnknown_2022BC8
-_0802F2F8: .4byte gDisableStructs
-_0802F2FC: .4byte gBitTable
-_0802F300: .4byte gBattleMons
-_0802F304: .4byte gBattlerPartyIndexes
-_0802F308: .4byte gPlayerParty
-_0802F30C: .4byte gBattleTypeFlags
-_0802F310: .4byte gBattlerControllerFuncs
-_0802F314: .4byte sub_80E7988
-_0802F318:
- ldr r1, _0802F390 @ =gBattlerControllerFuncs
- ldr r2, _0802F394 @ =gActiveBattler
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0802F398 @ =sub_802EA10
-_0802F324:
- str r1, [r0]
- adds r7, r2, 0
- ldr r2, _0802F39C @ =gMoveSelectionCursor
- ldrb r0, [r7]
- adds r0, r2
- ldr r1, _0802F3A0 @ =gUnknown_3004FF4
- ldrb r1, [r1]
- strb r1, [r0]
- ldrb r0, [r7]
- adds r0, r2
- ldrb r0, [r0]
- movs r1, 0
- bl MoveSelectionCreateCursorAt
- bl MoveSelectionDisplayPpString
- bl MoveSelectionDisplayPpNumber
- bl MoveSelectionDisplayMoveType
-_0802F34C:
- ldr r0, _0802F3A4 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0802F3C8
- movs r0, 0x5
- bl PlaySE
- ldr r0, _0802F3A0 @ =gUnknown_3004FF4
- ldrb r0, [r0]
- bl MoveSelectionDestroyCursorAt
- ldr r1, _0802F39C @ =gMoveSelectionCursor
- ldr r4, _0802F394 @ =gActiveBattler
- ldrb r0, [r4]
- adds r0, r1
- ldrb r0, [r0]
- movs r1, 0
- bl MoveSelectionCreateCursorAt
- ldr r0, _0802F3A8 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0802F3B0
- ldr r0, _0802F390 @ =gBattlerControllerFuncs
- ldrb r1, [r4]
- lsls r1, 2
- adds r1, r0
- ldr r0, _0802F3AC @ =sub_80E7988
- b _0802F3BA
- .align 2, 0
-_0802F390: .4byte gBattlerControllerFuncs
-_0802F394: .4byte gActiveBattler
-_0802F398: .4byte sub_802EA10
-_0802F39C: .4byte gMoveSelectionCursor
-_0802F3A0: .4byte gUnknown_3004FF4
-_0802F3A4: .4byte gMain
-_0802F3A8: .4byte gBattleTypeFlags
-_0802F3AC: .4byte sub_80E7988
-_0802F3B0:
- ldr r0, _0802F3F8 @ =gBattlerControllerFuncs
- ldrb r1, [r4]
- lsls r1, 2
- adds r1, r0
- ldr r0, _0802F3FC @ =sub_802EA10
-_0802F3BA:
- str r0, [r1]
- bl MoveSelectionDisplayPpString
- bl MoveSelectionDisplayPpNumber
- bl MoveSelectionDisplayMoveType
-_0802F3C8:
- ldr r0, _0802F400 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0802F454
- ldr r3, _0802F404 @ =gUnknown_3004FF4
- ldrb r2, [r3]
- movs r0, 0x1
- ands r0, r2
- cmp r0, 0
- beq _0802F454
- ldr r0, _0802F408 @ =gMoveSelectionCursor
- ldr r1, _0802F40C @ =gActiveBattler
- ldrb r1, [r1]
- adds r1, r0
- ldrb r5, [r1]
- cmp r2, r5
- bne _0802F410
- ldrb r0, [r1]
- movs r1, 0x1D
- bl MoveSelectionCreateCursorAt
- b _0802F416
- .align 2, 0
-_0802F3F8: .4byte gBattlerControllerFuncs
-_0802F3FC: .4byte sub_802EA10
-_0802F400: .4byte gMain
-_0802F404: .4byte gUnknown_3004FF4
-_0802F408: .4byte gMoveSelectionCursor
-_0802F40C: .4byte gActiveBattler
-_0802F410:
- ldrb r0, [r3]
- bl MoveSelectionDestroyCursorAt
-_0802F416:
- ldr r4, _0802F440 @ =gUnknown_3004FF4
- ldrb r0, [r4]
- movs r1, 0x1
- eors r0, r1
- strb r0, [r4]
- movs r0, 0x5
- bl PlaySE
- ldr r1, _0802F444 @ =gMoveSelectionCursor
- ldr r0, _0802F448 @ =gActiveBattler
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r4]
- ldrb r0, [r0]
- cmp r1, r0
- bne _0802F44C
- adds r0, r1, 0
- movs r1, 0
- bl MoveSelectionCreateCursorAt
- b _0802F454
- .align 2, 0
-_0802F440: .4byte gUnknown_3004FF4
-_0802F444: .4byte gMoveSelectionCursor
-_0802F448: .4byte gActiveBattler
-_0802F44C:
- ldrb r0, [r4]
- movs r1, 0x1B
- bl MoveSelectionCreateCursorAt
-_0802F454:
- ldr r0, _0802F490 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0802F4E8
- ldr r3, _0802F494 @ =gUnknown_3004FF4
- ldrb r2, [r3]
- movs r0, 0x1
- ands r0, r2
- cmp r0, 0
- bne _0802F4E8
- ldr r1, _0802F498 @ =gUnknown_3004FF8
- movs r0, 0x1
- eors r0, r2
- ldrb r1, [r1]
- cmp r0, r1
- bcs _0802F4E8
- ldr r0, _0802F49C @ =gMoveSelectionCursor
- ldr r1, _0802F4A0 @ =gActiveBattler
- ldrb r1, [r1]
- adds r1, r0
- ldrb r0, [r1]
- cmp r2, r0
- bne _0802F4A4
- ldrb r0, [r1]
- movs r1, 0x1D
- bl MoveSelectionCreateCursorAt
- b _0802F4AA
- .align 2, 0
-_0802F490: .4byte gMain
-_0802F494: .4byte gUnknown_3004FF4
-_0802F498: .4byte gUnknown_3004FF8
-_0802F49C: .4byte gMoveSelectionCursor
-_0802F4A0: .4byte gActiveBattler
-_0802F4A4:
- ldrb r0, [r3]
- bl MoveSelectionDestroyCursorAt
-_0802F4AA:
- ldr r4, _0802F4D4 @ =gUnknown_3004FF4
- ldrb r0, [r4]
- movs r1, 0x1
- eors r0, r1
- strb r0, [r4]
- movs r0, 0x5
- bl PlaySE
- ldr r1, _0802F4D8 @ =gMoveSelectionCursor
- ldr r0, _0802F4DC @ =gActiveBattler
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r4]
- ldrb r0, [r0]
- cmp r1, r0
- bne _0802F4E0
- adds r0, r1, 0
- movs r1, 0
- bl MoveSelectionCreateCursorAt
- b _0802F4E8
- .align 2, 0
-_0802F4D4: .4byte gUnknown_3004FF4
-_0802F4D8: .4byte gMoveSelectionCursor
-_0802F4DC: .4byte gActiveBattler
-_0802F4E0:
- ldrb r0, [r4]
- movs r1, 0x1B
- bl MoveSelectionCreateCursorAt
-_0802F4E8:
- ldr r0, _0802F518 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0802F56C
- ldr r3, _0802F51C @ =gUnknown_3004FF4
- ldrb r2, [r3]
- movs r0, 0x2
- ands r0, r2
- cmp r0, 0
- beq _0802F56C
- ldr r0, _0802F520 @ =gMoveSelectionCursor
- ldr r1, _0802F524 @ =gActiveBattler
- ldrb r1, [r1]
- adds r1, r0
- ldrb r5, [r1]
- cmp r2, r5
- bne _0802F528
- ldrb r0, [r1]
- movs r1, 0x1D
- bl MoveSelectionCreateCursorAt
- b _0802F52E
- .align 2, 0
-_0802F518: .4byte gMain
-_0802F51C: .4byte gUnknown_3004FF4
-_0802F520: .4byte gMoveSelectionCursor
-_0802F524: .4byte gActiveBattler
-_0802F528:
- ldrb r0, [r3]
- bl MoveSelectionDestroyCursorAt
-_0802F52E:
- ldr r4, _0802F558 @ =gUnknown_3004FF4
- ldrb r0, [r4]
- movs r1, 0x2
- eors r0, r1
- strb r0, [r4]
- movs r0, 0x5
- bl PlaySE
- ldr r1, _0802F55C @ =gMoveSelectionCursor
- ldr r0, _0802F560 @ =gActiveBattler
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r4]
- ldrb r0, [r0]
- cmp r1, r0
- bne _0802F564
- adds r0, r1, 0
- movs r1, 0
- bl MoveSelectionCreateCursorAt
- b _0802F56C
- .align 2, 0
-_0802F558: .4byte gUnknown_3004FF4
-_0802F55C: .4byte gMoveSelectionCursor
-_0802F560: .4byte gActiveBattler
-_0802F564:
- ldrb r0, [r4]
- movs r1, 0x1B
- bl MoveSelectionCreateCursorAt
-_0802F56C:
- ldr r0, _0802F5A8 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0802F600
- ldr r3, _0802F5AC @ =gUnknown_3004FF4
- ldrb r2, [r3]
- movs r0, 0x2
- ands r0, r2
- cmp r0, 0
- bne _0802F600
- ldr r1, _0802F5B0 @ =gUnknown_3004FF8
- movs r0, 0x2
- eors r0, r2
- ldrb r1, [r1]
- cmp r0, r1
- bcs _0802F600
- ldr r0, _0802F5B4 @ =gMoveSelectionCursor
- ldr r1, _0802F5B8 @ =gActiveBattler
- ldrb r1, [r1]
- adds r1, r0
- ldrb r0, [r1]
- cmp r2, r0
- bne _0802F5BC
- ldrb r0, [r1]
- movs r1, 0x1D
- bl MoveSelectionCreateCursorAt
- b _0802F5C2
- .align 2, 0
-_0802F5A8: .4byte gMain
-_0802F5AC: .4byte gUnknown_3004FF4
-_0802F5B0: .4byte gUnknown_3004FF8
-_0802F5B4: .4byte gMoveSelectionCursor
-_0802F5B8: .4byte gActiveBattler
-_0802F5BC:
- ldrb r0, [r3]
- bl MoveSelectionDestroyCursorAt
-_0802F5C2:
- ldr r4, _0802F5EC @ =gUnknown_3004FF4
- ldrb r0, [r4]
- movs r1, 0x2
- eors r0, r1
- strb r0, [r4]
- movs r0, 0x5
- bl PlaySE
- ldr r1, _0802F5F0 @ =gMoveSelectionCursor
- ldr r0, _0802F5F4 @ =gActiveBattler
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r4]
- ldrb r0, [r0]
- cmp r1, r0
- bne _0802F5F8
- adds r0, r1, 0
- movs r1, 0
- bl MoveSelectionCreateCursorAt
- b _0802F600
- .align 2, 0
-_0802F5EC: .4byte gUnknown_3004FF4
-_0802F5F0: .4byte gMoveSelectionCursor
-_0802F5F4: .4byte gActiveBattler
-_0802F5F8:
- ldrb r0, [r4]
- movs r1, 0x1B
- bl MoveSelectionCreateCursorAt
-_0802F600:
- add sp, 0x24
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_802EF58
-
- thumb_func_start sub_802F610
-sub_802F610: @ 802F610
- push {lr}
- ldr r0, _0802F64C @ =gWirelessCommType
- ldrb r0, [r0]
- cmp r0, 0
- bne _0802F664
- ldr r0, _0802F650 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- bne _0802F694
- movs r0, 0x53
- bl m4aSongNumStop
- ldr r3, _0802F654 @ =gMain
- ldr r0, _0802F658 @ =0x00000439
- adds r2, r3, r0
- ldrb r1, [r2]
- movs r0, 0x3
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- ldr r0, _0802F65C @ =gPreBattleCallback1
- ldr r0, [r0]
- str r0, [r3]
- ldr r0, _0802F660 @ =sub_8011A1C
- bl SetMainCallback2
- bl FreeAllWindowBuffers
- b _0802F694
- .align 2, 0
-_0802F64C: .4byte gWirelessCommType
-_0802F650: .4byte gReceivedRemoteLinkPlayers
-_0802F654: .4byte gMain
-_0802F658: .4byte 0x00000439
-_0802F65C: .4byte gPreBattleCallback1
-_0802F660: .4byte sub_8011A1C
-_0802F664:
- bl IsLinkTaskFinished
- lsls r0, 24
- cmp r0, 0
- beq _0802F694
- movs r0, 0x53
- bl m4aSongNumStop
- ldr r3, _0802F698 @ =gMain
- ldr r0, _0802F69C @ =0x00000439
- adds r2, r3, r0
- ldrb r1, [r2]
- movs r0, 0x3
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- ldr r0, _0802F6A0 @ =gPreBattleCallback1
- ldr r0, [r0]
- str r0, [r3]
- ldr r0, _0802F6A4 @ =sub_8011A1C
- bl SetMainCallback2
- bl FreeAllWindowBuffers
-_0802F694:
- pop {r0}
- bx r0
- .align 2, 0
-_0802F698: .4byte gMain
-_0802F69C: .4byte 0x00000439
-_0802F6A0: .4byte gPreBattleCallback1
-_0802F6A4: .4byte sub_8011A1C
- thumb_func_end sub_802F610
-
- thumb_func_start sub_802F6A8
-sub_802F6A8: @ 802F6A8
- push {lr}
- ldr r0, _0802F6D0 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0802F71E
- ldr r0, _0802F6D4 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0802F6FC
- ldr r0, _0802F6D8 @ =gWirelessCommType
- ldrb r0, [r0]
- cmp r0, 0
- bne _0802F6DC
- bl sub_800AAC0
- b _0802F6E0
- .align 2, 0
-_0802F6D0: .4byte gPaletteFade
-_0802F6D4: .4byte gBattleTypeFlags
-_0802F6D8: .4byte gWirelessCommType
-_0802F6DC:
- bl sub_800AB9C
-_0802F6E0:
- ldr r1, _0802F6F0 @ =gBattlerControllerFuncs
- ldr r0, _0802F6F4 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0802F6F8 @ =sub_802F610
- str r1, [r0]
- b _0802F71E
- .align 2, 0
-_0802F6F0: .4byte gBattlerControllerFuncs
-_0802F6F4: .4byte gActiveBattler
-_0802F6F8: .4byte sub_802F610
-_0802F6FC:
- movs r0, 0x53
- bl m4aSongNumStop
- ldr r2, _0802F724 @ =gMain
- ldr r0, _0802F728 @ =0x00000439
- adds r3, r2, r0
- ldrb r1, [r3]
- movs r0, 0x3
- negs r0, r0
- ands r0, r1
- strb r0, [r3]
- ldr r0, _0802F72C @ =gPreBattleCallback1
- ldr r0, [r0]
- str r0, [r2]
- ldr r0, [r2, 0x8]
- bl SetMainCallback2
-_0802F71E:
- pop {r0}
- bx r0
- .align 2, 0
-_0802F724: .4byte gMain
-_0802F728: .4byte 0x00000439
-_0802F72C: .4byte gPreBattleCallback1
- thumb_func_end sub_802F6A8
-
- thumb_func_start sub_802F730
-sub_802F730: @ 802F730
- push {lr}
- ldr r2, _0802F758 @ =gSprites
- ldr r1, _0802F75C @ =gBattlerSpriteIds
- ldr r0, _0802F760 @ =gActiveBattler
- 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, _0802F764 @ =SpriteCallbackDummy
- cmp r1, r0
- bne _0802F754
- bl PlayerBufferExecCompleted
-_0802F754:
- pop {r0}
- bx r0
- .align 2, 0
-_0802F758: .4byte gSprites
-_0802F75C: .4byte gBattlerSpriteIds
-_0802F760: .4byte gActiveBattler
-_0802F764: .4byte SpriteCallbackDummy
- thumb_func_end sub_802F730
-
- thumb_func_start sub_802F768
-sub_802F768: @ 802F768
- push {lr}
- ldr r2, _0802F790 @ =gSprites
- ldr r1, _0802F794 @ =gBattlerSpriteIds
- ldr r0, _0802F798 @ =gActiveBattler
- 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, _0802F79C @ =SpriteCallbackDummy
- cmp r1, r0
- bne _0802F78C
- bl PlayerBufferExecCompleted
-_0802F78C:
- pop {r0}
- bx r0
- .align 2, 0
-_0802F790: .4byte gSprites
-_0802F794: .4byte gBattlerSpriteIds
-_0802F798: .4byte gActiveBattler
-_0802F79C: .4byte SpriteCallbackDummy
- thumb_func_end sub_802F768
-
- thumb_func_start sub_802F7A0
-sub_802F7A0: @ 802F7A0
- push {r4-r6,lr}
- ldr r6, _0802F7FC @ =gSprites
- ldr r5, _0802F800 @ =gBattlerSpriteIds
- ldr r4, _0802F804 @ =gActiveBattler
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r6, 0
- adds r1, 0x1C
- adds r0, r1
- ldr r1, [r0]
- ldr r0, _0802F808 @ =SpriteCallbackDummy
- cmp r1, r0
- bne _0802F7F4
- ldr r0, _0802F80C @ =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- bl nullsub_16
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- bl FreeSpriteOamMatrix
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- bl DestroySprite
- bl PlayerBufferExecCompleted
-_0802F7F4:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0802F7FC: .4byte gSprites
-_0802F800: .4byte gBattlerSpriteIds
-_0802F804: .4byte gActiveBattler
-_0802F808: .4byte SpriteCallbackDummy
-_0802F80C: .4byte gSaveBlock2Ptr
- thumb_func_end sub_802F7A0
-
- thumb_func_start sub_802F810
-sub_802F810: @ 802F810
- push {r4,lr}
- ldr r4, _0802F850 @ =gBattleSpritesDataPtr
- ldr r1, [r4]
- ldr r3, _0802F854 @ =gActiveBattler
- ldrb r0, [r3]
- ldr r2, [r1, 0x4]
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r0, [r1, 0x9]
- subs r0, 0x1
- strb r0, [r1, 0x9]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- bne _0802F848
- ldr r0, [r4]
- ldrb r1, [r3]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0
- strb r1, [r0, 0x9]
- bl PlayerBufferExecCompleted
-_0802F848:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802F850: .4byte gBattleSpritesDataPtr
-_0802F854: .4byte gActiveBattler
- thumb_func_end sub_802F810
-
- thumb_func_start sub_802F858
-sub_802F858: @ 802F858
- push {r4-r7,lr}
- movs r6, 0
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _0802F87C
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _0802F8B0
- ldr r0, _0802F89C @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0802F8B0
-_0802F87C:
- ldr r2, _0802F8A0 @ =gSprites
- ldr r1, _0802F8A4 @ =gHealthboxSpriteIds
- ldr r0, _0802F8A8 @ =gActiveBattler
- 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, _0802F8AC @ =SpriteCallbackDummy
- cmp r1, r0
- bne _0802F8E6
- b _0802F8E4
- .align 2, 0
-_0802F89C: .4byte gBattleTypeFlags
-_0802F8A0: .4byte gSprites
-_0802F8A4: .4byte gHealthboxSpriteIds
-_0802F8A8: .4byte gActiveBattler
-_0802F8AC: .4byte SpriteCallbackDummy
-_0802F8B0:
- ldr r2, _0802F9B0 @ =gSprites
- ldr r5, _0802F9B4 @ =gHealthboxSpriteIds
- ldr r0, _0802F9B8 @ =gActiveBattler
- 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, _0802F9BC @ =SpriteCallbackDummy
- cmp r4, r0
- bne _0802F8E6
- 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 _0802F8E6
-_0802F8E4:
- movs r6, 0x1
-_0802F8E6:
- bl IsCryPlayingOrClearCrySongs
- lsls r0, 24
- cmp r0, 0
- beq _0802F8F2
- movs r6, 0
-_0802F8F2:
- cmp r6, 0
- bne _0802F8F8
- b _0802FA32
-_0802F8F8:
- ldr r0, _0802F9C0 @ =gBattleSpritesDataPtr
- mov r12, r0
- ldr r0, [r0]
- ldr r7, _0802F9B8 @ =gActiveBattler
- ldrb r2, [r7]
- ldr r3, [r0, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r4, r0, r3
- ldrb r1, [r4, 0x1]
- movs r5, 0x1
- adds r0, r5, 0
- ands r0, r1
- cmp r0, 0
- bne _0802F91A
- b _0802FA32
-_0802F91A:
- movs r6, 0x2
- adds r1, r6, 0
- eors r1, r2
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrb r1, [r0, 0x1]
- adds r0, r5, 0
- ands r0, r1
- cmp r0, 0
- bne _0802F934
- b _0802FA32
-_0802F934:
- ldrb r1, [r4]
- movs r3, 0x7F
- adds r0, r3, 0
- ands r0, r1
- strb r0, [r4]
- mov r1, r12
- ldr r0, [r1]
- ldrb r2, [r7]
- ldr r0, [r0, 0x4]
- lsls r1, r2, 1
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r2, [r1, 0x1]
- movs r4, 0x2
- negs r4, r4
- adds r0, r4, 0
- ands r0, r2
- strb r0, [r1, 0x1]
- mov r0, r12
- ldr r2, [r0]
- ldrb r0, [r7]
- adds r1, r6, 0
- eors r1, r0
- ldr r2, [r2, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- ands r3, r1
- strb r3, [r0]
- mov r1, r12
- ldr r2, [r1]
- ldrb r0, [r7]
- adds r1, r6, 0
- eors r1, r0
- ldr r2, [r2, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x1]
- ands r4, r1
- strb r4, [r0, 0x1]
- ldr r4, _0802F9C4 @ =0x000027f9
- adds r0, r4, 0
- bl FreeSpriteTilesByTag
- adds r0, r4, 0
- bl FreeSpritePaletteByTag
- ldr r0, _0802F9C8 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0802F9D0
- ldr r0, _0802F9CC @ =gMPlayInfo_BGM
- bl m4aMPlayContinue
- b _0802F9DC
- .align 2, 0
-_0802F9B0: .4byte gSprites
-_0802F9B4: .4byte gHealthboxSpriteIds
-_0802F9B8: .4byte gActiveBattler
-_0802F9BC: .4byte SpriteCallbackDummy
-_0802F9C0: .4byte gBattleSpritesDataPtr
-_0802F9C4: .4byte 0x000027f9
-_0802F9C8: .4byte gBattleTypeFlags
-_0802F9CC: .4byte gMPlayInfo_BGM
-_0802F9D0:
- ldr r0, _0802FA38 @ =gMPlayInfo_BGM
- ldr r1, _0802FA3C @ =0x0000ffff
- movs r2, 0x80
- lsls r2, 1
- bl m4aMPlayVolumeControl
-_0802F9DC:
- ldr r7, _0802FA40 @ =gBattlerPartyIndexes
- ldr r4, _0802FA44 @ =gActiveBattler
- ldrb r1, [r4]
- lsls r0, r1, 1
- adds r0, r7
- ldrh r0, [r0]
- movs r6, 0x64
- muls r0, r6
- ldr r5, _0802FA48 @ =gPlayerParty
- adds r0, r5
- bl HandleLowHpMusicChange
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _0802FA12
- ldrb r0, [r4]
- movs r1, 0x2
- eors r1, r0
- lsls r0, r1, 1
- adds r0, r7
- ldrh r0, [r0]
- muls r0, r6
- adds r0, r5
- bl HandleLowHpMusicChange
-_0802FA12:
- ldr r0, _0802FA4C @ =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldrb r1, [r4]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x3
- strb r1, [r0, 0x9]
- ldr r1, _0802FA50 @ =gBattlerControllerFuncs
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0802FA54 @ =sub_802F810
- str r1, [r0]
-_0802FA32:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802FA38: .4byte gMPlayInfo_BGM
-_0802FA3C: .4byte 0x0000ffff
-_0802FA40: .4byte gBattlerPartyIndexes
-_0802FA44: .4byte gActiveBattler
-_0802FA48: .4byte gPlayerParty
-_0802FA4C: .4byte gBattleSpritesDataPtr
-_0802FA50: .4byte gBattlerControllerFuncs
-_0802FA54: .4byte sub_802F810
- thumb_func_end sub_802F858
-
- thumb_func_start sub_802FA58
-sub_802FA58: @ 802FA58
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- ldr r0, _0802FBCC @ =gBattleSpritesDataPtr
- mov r9, r0
- ldr r0, [r0]
- ldr r1, _0802FBD0 @ =gActiveBattler
- mov r8, r1
- ldrb r2, [r1]
- ldr r3, [r0, 0x4]
- lsls r5, r2, 1
- adds r0, r5, r2
- lsls r0, 2
- adds r0, r3
- ldrb r4, [r0]
- movs r6, 0x8
- adds r0, r6, 0
- ands r0, r4
- cmp r0, 0
- beq _0802FA84
- b _0802FBBE
-_0802FA84:
- movs r7, 0x2
- adds r1, r2, 0
- eors r1, r7
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrb r1, [r0]
- adds r0, r6, 0
- ands r0, r1
- cmp r0, 0
- beq _0802FA9E
- b _0802FBBE
-_0802FA9E:
- movs r6, 0x80
- adds r0, r6, 0
- ands r0, r4
- cmp r0, 0
- bne _0802FABC
- ldr r0, _0802FBD4 @ =gBattlerPartyIndexes
- adds r0, r5, r0
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _0802FBD8 @ =gPlayerParty
- adds r1, r0
- adds r0, r2, 0
- bl sub_80F1720
-_0802FABC:
- mov r2, r9
- ldr r1, [r2]
- mov r2, r8
- ldrb r0, [r2]
- adds r2, r7, 0
- eors r2, r0
- ldr r1, [r1, 0x4]
- lsls r3, r2, 1
- adds r0, r3, r2
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- adds r0, r6, 0
- ands r0, r1
- cmp r0, 0
- bne _0802FAF0
- ldr r0, _0802FBD4 @ =gBattlerPartyIndexes
- adds r0, r3, r0
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _0802FBD8 @ =gPlayerParty
- adds r1, r0
- adds r0, r2, 0
- bl sub_80F1720
-_0802FAF0:
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _0802FB5C
- ldr r0, _0802FBDC @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- bne _0802FB5C
- ldr r1, _0802FBE0 @ =gUnknown_3004FFC
- mov r2, r8
- ldrb r0, [r2]
- eors r0, r7
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0802FBE4 @ =gSprites
- adds r0, r1
- bl DestroySprite
- ldr r4, _0802FBE8 @ =gHealthboxSpriteIds
- mov r1, r8
- ldrb r0, [r1]
- adds r1, r7, 0
- eors r1, r0
- adds r0, r1, r4
- ldrb r0, [r0]
- ldr r2, _0802FBD4 @ =gBattlerPartyIndexes
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, _0802FBD8 @ =gPlayerParty
- adds r1, r2
- movs r2, 0
- bl UpdateHealthboxAttribute
- mov r2, r8
- ldrb r0, [r2]
- eors r0, r7
- bl sub_804BD94
- mov r1, r8
- ldrb r0, [r1]
- eors r0, r7
- adds r0, r4
- ldrb r0, [r0]
- bl SetHealthboxSpriteVisible
-_0802FB5C:
- ldr r1, _0802FBE0 @ =gUnknown_3004FFC
- ldr r4, _0802FBD0 @ =gActiveBattler
- ldrb r0, [r4]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0802FBE4 @ =gSprites
- adds r0, r1
- bl DestroySprite
- ldr r5, _0802FBE8 @ =gHealthboxSpriteIds
- ldrb r1, [r4]
- adds r0, r1, r5
- ldrb r0, [r0]
- ldr r2, _0802FBD4 @ =gBattlerPartyIndexes
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, _0802FBD8 @ =gPlayerParty
- adds r1, r2
- movs r2, 0
- bl UpdateHealthboxAttribute
- ldrb r0, [r4]
- bl sub_804BD94
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl SetHealthboxSpriteVisible
- ldr r0, _0802FBCC @ =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r2, [r0, 0x8]
- ldrb r1, [r2, 0x9]
- movs r0, 0x2
- negs r0, r0
- ands r0, r1
- strb r0, [r2, 0x9]
- ldr r1, _0802FBEC @ =gBattlerControllerFuncs
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0802FBF0 @ =sub_802F858
- str r1, [r0]
-_0802FBBE:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802FBCC: .4byte gBattleSpritesDataPtr
-_0802FBD0: .4byte gActiveBattler
-_0802FBD4: .4byte gBattlerPartyIndexes
-_0802FBD8: .4byte gPlayerParty
-_0802FBDC: .4byte gBattleTypeFlags
-_0802FBE0: .4byte gUnknown_3004FFC
-_0802FBE4: .4byte gSprites
-_0802FBE8: .4byte gHealthboxSpriteIds
-_0802FBEC: .4byte gBattlerControllerFuncs
-_0802FBF0: .4byte sub_802F858
- thumb_func_end sub_802FA58
-
- thumb_func_start sub_802FBF4
-sub_802FBF4: @ 802FBF4
- push {r4-r6,lr}
- ldr r2, _0802FC8C @ =gSprites
- ldr r0, _0802FC90 @ =gHealthboxSpriteIds
- ldr r6, _0802FC94 @ =gActiveBattler
- ldrb r3, [r6]
- adds r0, r3, r0
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, [r0]
- ldr r0, _0802FC98 @ =SpriteCallbackDummy
- cmp r1, r0
- bne _0802FC84
- ldr r5, _0802FC9C @ =gBattleSpritesDataPtr
- ldr r0, [r5]
- ldr r1, [r0, 0x4]
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 2
- adds r2, r0, r1
- ldrb r1, [r2, 0x1]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0802FC84
- ldrb r1, [r2]
- movs r0, 0x7F
- ands r0, r1
- strb r0, [r2]
- ldr r0, [r5]
- ldrb r2, [r6]
- ldr r0, [r0, 0x4]
- lsls r1, r2, 1
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r2, [r1, 0x1]
- movs r0, 0x2
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0x1]
- ldr r4, _0802FCA0 @ =0x000027f9
- adds r0, r4, 0
- bl FreeSpriteTilesByTag
- adds r0, r4, 0
- bl FreeSpritePaletteByTag
- ldr r0, [r5]
- ldrb r2, [r6]
- ldr r1, [r0]
- lsls r0, r2, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0802FC78
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x6
- bl InitAndLaunchSpecialAnimation
-_0802FC78:
- ldr r0, _0802FCA4 @ =gBattlerControllerFuncs
- ldrb r1, [r6]
- lsls r1, 2
- adds r1, r0
- ldr r0, _0802FCA8 @ =sub_802FCAC
- str r0, [r1]
-_0802FC84:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0802FC8C: .4byte gSprites
-_0802FC90: .4byte gHealthboxSpriteIds
-_0802FC94: .4byte gActiveBattler
-_0802FC98: .4byte SpriteCallbackDummy
-_0802FC9C: .4byte gBattleSpritesDataPtr
-_0802FCA0: .4byte 0x000027f9
-_0802FCA4: .4byte gBattlerControllerFuncs
-_0802FCA8: .4byte sub_802FCAC
- thumb_func_end sub_802FBF4
-
- thumb_func_start sub_802FCAC
-sub_802FCAC: @ 802FCAC
- push {r4,lr}
- ldr r0, _0802FD00 @ =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r4, _0802FD04 @ =gActiveBattler
- ldrb r1, [r4]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _0802FCFA
- bl IsCryPlayingOrClearCrySongs
- lsls r0, 24
- cmp r0, 0
- bne _0802FCFA
- ldr r0, _0802FD08 @ =gMPlayInfo_BGM
- ldr r1, _0802FD0C @ =0x0000ffff
- movs r2, 0x80
- lsls r2, 1
- bl m4aMPlayVolumeControl
- ldr r2, _0802FD10 @ =gBattlerPartyIndexes
- ldrb r1, [r4]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, _0802FD14 @ =gPlayerParty
- adds r0, r2
- bl HandleLowHpMusicChange
- bl PlayerBufferExecCompleted
-_0802FCFA:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802FD00: .4byte gBattleSpritesDataPtr
-_0802FD04: .4byte gActiveBattler
-_0802FD08: .4byte gMPlayInfo_BGM
-_0802FD0C: .4byte 0x0000ffff
-_0802FD10: .4byte gBattlerPartyIndexes
-_0802FD14: .4byte gPlayerParty
- thumb_func_end sub_802FCAC
-
- thumb_func_start sub_802FD18
-sub_802FD18: @ 802FD18
- push {r4-r6,lr}
- ldr r6, _0802FDCC @ =gBattleSpritesDataPtr
- ldr r0, [r6]
- ldr r5, _0802FDD0 @ =gActiveBattler
- ldrb r2, [r5]
- ldr r1, [r0, 0x4]
- lsls r3, r2, 1
- adds r0, r3, r2
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x88
- ands r0, r1
- cmp r0, 0
- bne _0802FD4A
- ldr r0, _0802FDD4 @ =gBattlerPartyIndexes
- adds r0, r3, r0
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _0802FDD8 @ =gPlayerParty
- adds r1, r0
- adds r0, r2, 0
- bl sub_80F1720
-_0802FD4A:
- ldr r4, _0802FDDC @ =gSprites
- ldr r0, _0802FDE0 @ =gUnknown_3004FFC
- 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, _0802FDE4 @ =SpriteCallbackDummy
- cmp r1, r0
- bne _0802FDC4
- ldr r0, [r6]
- ldr r1, [r0, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- bne _0802FDC4
- adds r0, r3, r4
- bl DestroySprite
- ldr r4, _0802FDE8 @ =gHealthboxSpriteIds
- ldrb r1, [r5]
- adds r0, r1, r4
- ldrb r0, [r0]
- ldr r2, _0802FDD4 @ =gBattlerPartyIndexes
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, _0802FDD8 @ =gPlayerParty
- adds r1, r2
- movs r2, 0
- bl UpdateHealthboxAttribute
- ldrb r0, [r5]
- bl sub_804BD94
- ldrb r0, [r5]
- adds r0, r4
- ldrb r0, [r0]
- bl SetHealthboxSpriteVisible
- ldrb r0, [r5]
- bl CopyBattleSpriteInvisibility
- ldr r1, _0802FDEC @ =gBattlerControllerFuncs
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0802FDF0 @ =sub_802FBF4
- str r1, [r0]
-_0802FDC4:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0802FDCC: .4byte gBattleSpritesDataPtr
-_0802FDD0: .4byte gActiveBattler
-_0802FDD4: .4byte gBattlerPartyIndexes
-_0802FDD8: .4byte gPlayerParty
-_0802FDDC: .4byte gSprites
-_0802FDE0: .4byte gUnknown_3004FFC
-_0802FDE4: .4byte SpriteCallbackDummy
-_0802FDE8: .4byte gHealthboxSpriteIds
-_0802FDEC: .4byte gBattlerControllerFuncs
-_0802FDF0: .4byte sub_802FBF4
- thumb_func_end sub_802FD18
-
- thumb_func_start c3_0802FDF4
-c3_0802FDF4: @ 802FDF4
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl IsCryPlayingOrClearCrySongs
- lsls r0, 24
- cmp r0, 0
- bne _0802FE16
- ldr r0, _0802FE1C @ =gMPlayInfo_BGM
- ldr r1, _0802FE20 @ =0x0000ffff
- movs r2, 0x80
- lsls r2, 1
- bl m4aMPlayVolumeControl
- adds r0, r4, 0
- bl DestroyTask
-_0802FE16:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802FE1C: .4byte gMPlayInfo_BGM
-_0802FE20: .4byte 0x0000ffff
- thumb_func_end c3_0802FDF4
-
- thumb_func_start CompleteOnHealthbarDone
-CompleteOnHealthbarDone: @ 802FE24
- push {r4-r6,lr}
- ldr r5, _0802FE64 @ =gActiveBattler
- ldrb r0, [r5]
- ldr r6, _0802FE68 @ =gHealthboxSpriteIds
- adds r1, r0, r6
- ldrb r1, [r1]
- movs r2, 0
- movs r3, 0
- bl MoveBattleBar
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- ldrb r0, [r5]
- adds r0, r6
- ldrb r0, [r0]
- bl SetHealthboxSpriteVisible
- lsls r4, 16
- asrs r1, r4, 16
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _0802FE6C
- ldrb r0, [r5]
- adds r0, r6
- ldrb r0, [r0]
- movs r2, 0
- bl UpdateHpTextInHealthbox
- b _0802FE86
- .align 2, 0
-_0802FE64: .4byte gActiveBattler
-_0802FE68: .4byte gHealthboxSpriteIds
-_0802FE6C:
- ldr r2, _0802FE8C @ =gBattlerPartyIndexes
- ldrb r1, [r5]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, _0802FE90 @ =gPlayerParty
- adds r0, r2
- bl HandleLowHpMusicChange
- bl PlayerBufferExecCompleted
-_0802FE86:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0802FE8C: .4byte gBattlerPartyIndexes
-_0802FE90: .4byte gPlayerParty
- thumb_func_end CompleteOnHealthbarDone
-
- thumb_func_start sub_802FE94
-sub_802FE94: @ 802FE94
- push {lr}
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- bne _0802FEA6
- bl PlayerBufferExecCompleted
-_0802FEA6:
- pop {r0}
- bx r0
- thumb_func_end sub_802FE94
-
- thumb_func_start sub_802FEAC
-sub_802FEAC: @ 802FEAC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x10
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- ldr r1, _0802FFAC @ =gTasks
- lsls r0, 2
- add r0, r9
- lsls r0, 3
- adds r0, r1
- mov r8, r0
- ldrb r0, [r0, 0x8]
- mov r10, r0
- mov r1, r8
- ldrb r7, [r1, 0xC]
- str r7, [sp, 0x8]
- ldrh r2, [r1, 0xA]
- str r2, [sp, 0xC]
- bl IsDoubleBattle
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0802FEF2
- ldr r1, _0802FFB0 @ =gBattlerPartyIndexes
- lsls r0, r7, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r10, r0
- bne _0802FEF2
- b _08030008
-_0802FEF2:
- movs r0, 0x64
- mov r1, r10
- muls r1, r0
- ldr r0, _0802FFB4 @ =gPlayerParty
- adds r6, r1, r0
- adds r0, r6, 0
- movs r1, 0xB
- bl GetMonData
- adds r5, r0, 0
- lsls r5, 16
- lsrs r5, 16
- adds r0, r6, 0
- movs r1, 0x38
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r6, 0
- movs r1, 0x19
- bl GetMonData
- str r0, [sp, 0x4]
- ldr r3, _0802FFB8 @ =gExperienceTables
- adds r4, 0x1
- lsls r4, 2
- ldr r2, _0802FFBC @ =gBaseStats
- lsls r1, r5, 3
- subs r1, r5
- lsls r1, 2
- adds r1, r2
- ldrb r2, [r1, 0x13]
- movs r1, 0xCA
- lsls r1, 1
- muls r1, r2
- adds r4, r1
- adds r4, r3
- ldr r2, [r4]
- str r2, [sp]
- ldr r3, [sp, 0xC]
- lsls r1, r3, 16
- asrs r1, 16
- adds r0, r1
- cmp r0, r2
- bcc _0802FFE0
- adds r0, r6, 0
- movs r1, 0x19
- mov r2, sp
- bl SetMonData
- adds r0, r6, 0
- bl CalculateMonStats
- ldr r2, [sp]
- add r0, sp, 0x4
- ldrh r0, [r0]
- subs r2, r0
- ldr r0, [sp, 0xC]
- subs r2, r0, r2
- ldr r4, _0802FFC0 @ =gActiveBattler
- ldrb r5, [r4]
- strb r7, [r4]
- lsls r2, 16
- lsrs r2, 16
- movs r0, 0x1
- movs r1, 0xB
- bl BtlController_EmitTwoReturnValues
- strb r5, [r4]
- bl IsDoubleBattle
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0802FFC8
- ldr r2, _0802FFB0 @ =gBattlerPartyIndexes
- lsls r0, r7, 1
- adds r0, r2
- mov r1, r10
- ldrh r0, [r0]
- cmp r1, r0
- beq _0802FFA6
- movs r0, 0x2
- eors r7, r0
- lsls r0, r7, 1
- adds r0, r2
- ldrh r0, [r0]
- cmp r1, r0
- bne _0802FFC8
-_0802FFA6:
- ldr r0, _0802FFC4 @ =sub_8030238
- b _0803000A
- .align 2, 0
-_0802FFAC: .4byte gTasks
-_0802FFB0: .4byte gBattlerPartyIndexes
-_0802FFB4: .4byte gPlayerParty
-_0802FFB8: .4byte gExperienceTables
-_0802FFBC: .4byte gBaseStats
-_0802FFC0: .4byte gActiveBattler
-_0802FFC4: .4byte sub_8030238
-_0802FFC8:
- ldr r0, _0802FFD8 @ =gTasks
- mov r2, r9
- lsls r1, r2, 2
- add r1, r9
- lsls r1, 3
- adds r1, r0
- ldr r0, _0802FFDC @ =sub_8030350
- b _0803000C
- .align 2, 0
-_0802FFD8: .4byte gTasks
-_0802FFDC: .4byte sub_8030350
-_0802FFE0:
- str r0, [sp, 0x4]
- add r2, sp, 0x4
- adds r0, r6, 0
- movs r1, 0x19
- bl SetMonData
- ldr r1, _08030000 @ =gBattlerControllerFuncs
- ldr r3, [sp, 0x8]
- lsls r0, r3, 2
- adds r0, r1
- ldr r1, _08030004 @ =sub_802FE94
- str r1, [r0]
- mov r0, r9
- bl DestroyTask
- b _0803000E
- .align 2, 0
-_08030000: .4byte gBattlerControllerFuncs
-_08030004: .4byte sub_802FE94
-_08030008:
- ldr r0, _08030020 @ =sub_8030024
-_0803000A:
- mov r1, r8
-_0803000C:
- str r0, [r1]
-_0803000E:
- add sp, 0x10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08030020: .4byte sub_8030024
- thumb_func_end sub_802FEAC
-
- thumb_func_start sub_8030024
-sub_8030024: @ 8030024
- push {r4-r6,lr}
- mov r6, r10
- mov r5, r9
- mov r4, r8
- push {r4-r6}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _080300DC @ =gTasks
- lsls r2, r0, 2
- mov r8, r2
- add r8, r0
- mov r0, r8
- lsls r0, 3
- mov r8, r0
- add r8, r1
- mov r2, r8
- ldrb r1, [r2, 0x8]
- movs r0, 0xA
- ldrsh r2, [r2, r0]
- mov r9, r2
- mov r2, r8
- ldrb r2, [r2, 0xC]
- mov r10, r2
- movs r0, 0x64
- adds r6, r1, 0
- muls r6, r0
- ldr r0, _080300E0 @ =gPlayerParty
- adds r6, r0
- adds r0, r6, 0
- movs r1, 0x38
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r6, 0
- movs r1, 0xB
- bl GetMonData
- adds r5, r0, 0
- lsls r5, 16
- lsrs r5, 16
- adds r0, r6, 0
- movs r1, 0x19
- bl GetMonData
- adds r3, r0, 0
- ldr r6, _080300E4 @ =gExperienceTables
- lsls r1, r4, 2
- ldr r2, _080300E8 @ =gBaseStats
- lsls r0, r5, 3
- subs r0, r5
- lsls r0, 2
- adds r0, r2
- ldrb r2, [r0, 0x13]
- movs r0, 0xCA
- lsls r0, 1
- muls r0, r2
- adds r1, r0
- adds r1, r6
- ldr r1, [r1]
- subs r3, r1
- adds r4, 0x1
- lsls r4, 2
- adds r4, r0
- adds r4, r6
- ldr r2, [r4]
- subs r2, r1
- ldr r0, _080300EC @ =gHealthboxSpriteIds
- add r0, r10
- ldrb r1, [r0]
- mov r0, r9
- negs r0, r0
- str r0, [sp]
- mov r0, r10
- bl SetBattleBarStruct
- movs r0, 0x1B
- bl PlaySE
- ldr r0, _080300F0 @ =sub_80300F4
- mov r1, r8
- str r0, [r1]
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080300DC: .4byte gTasks
-_080300E0: .4byte gPlayerParty
-_080300E4: .4byte gExperienceTables
-_080300E8: .4byte gBaseStats
-_080300EC: .4byte gHealthboxSpriteIds
-_080300F0: .4byte sub_80300F4
- thumb_func_end sub_8030024
-
- thumb_func_start sub_80300F4
-sub_80300F4: @ 80300F4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r1, _08030120 @ =gTasks
- lsls r0, 2
- add r0, r8
- lsls r0, 3
- adds r6, r0, r1
- ldrh r1, [r6, 0x1C]
- movs r2, 0x1C
- ldrsh r0, [r6, r2]
- cmp r0, 0xC
- bgt _08030124
- adds r0, r1, 0x1
- strh r0, [r6, 0x1C]
- b _08030220
- .align 2, 0
-_08030120: .4byte gTasks
-_08030124:
- ldrb r0, [r6, 0x8]
- mov r9, r0
- ldrh r2, [r6, 0xA]
- mov r10, r2
- ldrb r7, [r6, 0xC]
- ldr r5, _080301EC @ =gHealthboxSpriteIds
- adds r5, r7, r5
- ldrb r1, [r5]
- adds r0, r7, 0
- movs r2, 0x1
- movs r3, 0
- bl MoveBattleBar
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- ldrb r0, [r5]
- bl SetHealthboxSpriteVisible
- lsls r4, 16
- asrs r4, 16
- movs r0, 0x1
- negs r0, r0
- cmp r4, r0
- bne _08030220
- movs r0, 0x1B
- bl m4aSongNumStop
- movs r0, 0x64
- mov r1, r9
- muls r1, r0
- ldr r0, _080301F0 @ =gPlayerParty
- adds r5, r1, r0
- adds r0, r5, 0
- movs r1, 0x38
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r5, 0
- movs r1, 0x19
- bl GetMonData
- str r0, [sp, 0x4]
- adds r0, r5, 0
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- ldr r3, _080301F4 @ =gExperienceTables
- adds r4, 0x1
- lsls r4, 2
- ldr r2, _080301F8 @ =gBaseStats
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r1, [r1, 0x13]
- movs r0, 0xCA
- lsls r0, 1
- muls r0, r1
- adds r4, r0
- adds r4, r3
- ldr r1, [r4]
- str r1, [sp]
- mov r2, r10
- lsls r0, r2, 16
- asrs r4, r0, 16
- ldr r0, [sp, 0x4]
- adds r0, r4
- cmp r0, r1
- blt _08030204
- adds r0, r5, 0
- movs r1, 0x19
- mov r2, sp
- bl SetMonData
- adds r0, r5, 0
- bl CalculateMonStats
- ldr r2, [sp]
- add r0, sp, 0x4
- ldrh r0, [r0]
- subs r2, r0
- subs r2, r4, r2
- ldr r4, _080301FC @ =gActiveBattler
- ldrb r5, [r4]
- strb r7, [r4]
- lsls r2, 16
- lsrs r2, 16
- movs r0, 0x1
- movs r1, 0xB
- bl BtlController_EmitTwoReturnValues
- strb r5, [r4]
- ldr r0, _08030200 @ =sub_8030238
- str r0, [r6]
- b _08030220
- .align 2, 0
-_080301EC: .4byte gHealthboxSpriteIds
-_080301F0: .4byte gPlayerParty
-_080301F4: .4byte gExperienceTables
-_080301F8: .4byte gBaseStats
-_080301FC: .4byte gActiveBattler
-_08030200: .4byte sub_8030238
-_08030204:
- str r0, [sp, 0x4]
- add r2, sp, 0x4
- adds r0, r5, 0
- movs r1, 0x19
- bl SetMonData
- ldr r1, _08030230 @ =gBattlerControllerFuncs
- lsls r0, r7, 2
- adds r0, r1
- ldr r1, _08030234 @ =sub_802FE94
- str r1, [r0]
- mov r0, r8
- bl DestroyTask
-_08030220:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08030230: .4byte gBattlerControllerFuncs
-_08030234: .4byte sub_802FE94
- thumb_func_end sub_80300F4
-
- thumb_func_start sub_8030238
-sub_8030238: @ 8030238
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, _0803028C @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- ldrb r4, [r0, 0xC]
- ldrb r6, [r0, 0x8]
- bl IsDoubleBattle
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0803026C
- ldr r1, _08030290 @ =gBattlerPartyIndexes
- movs r0, 0x2
- adds r2, r4, 0
- eors r2, r0
- lsls r0, r2, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r6, r0
- bne _0803026C
- adds r4, r2, 0
-_0803026C:
- adds r0, r4, 0
- adds r1, r4, 0
- adds r2, r4, 0
- movs r3, 0
- bl InitAndLaunchSpecialAnimation
- ldr r0, _0803028C @ =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r0
- ldr r0, _08030294 @ =sub_8030298
- str r0, [r1]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0803028C: .4byte gTasks
-_08030290: .4byte gBattlerPartyIndexes
-_08030294: .4byte sub_8030298
- thumb_func_end sub_8030238
-
- thumb_func_start sub_8030298
-sub_8030298: @ 8030298
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r1, _08030304 @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r2, r0, r1
- ldrb r5, [r2, 0xC]
- ldr r0, _08030308 @ =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r1, [r0, 0x4]
- lsls r0, r5, 1
- adds r0, r5
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _0803033A
- ldrb r4, [r2, 0x8]
- movs r0, 0x64
- adds r1, r4, 0
- muls r1, r0
- ldr r0, _0803030C @ =gPlayerParty
- adds r7, r1, r0
- adds r0, r7, 0
- movs r1, 0x38
- bl GetMonData
- bl IsDoubleBattle
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08030318
- ldr r1, _08030310 @ =gBattlerPartyIndexes
- movs r0, 0x2
- adds r2, r5, 0
- eors r2, r0
- lsls r0, r2, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r4, r0
- bne _08030318
- ldr r0, _08030314 @ =gHealthboxSpriteIds
- adds r0, r2, r0
- ldrb r0, [r0]
- adds r1, r7, 0
- movs r2, 0
- bl UpdateHealthboxAttribute
- b _0803032C
- .align 2, 0
-_08030304: .4byte gTasks
-_08030308: .4byte gBattleSpritesDataPtr
-_0803030C: .4byte gPlayerParty
-_08030310: .4byte gBattlerPartyIndexes
-_08030314: .4byte gHealthboxSpriteIds
-_08030318:
- ldr r0, _08030340 @ =gHealthboxSpriteIds
- adds r0, r5, r0
- ldrb r0, [r0]
- movs r1, 0x64
- muls r1, r4
- ldr r2, _08030344 @ =gPlayerParty
- adds r1, r2
- movs r2, 0
- bl UpdateHealthboxAttribute
-_0803032C:
- ldr r0, _08030348 @ =gTasks
- lsls r1, r6, 2
- adds r1, r6
- lsls r1, 3
- adds r1, r0
- ldr r0, _0803034C @ =sub_8030350
- str r0, [r1]
-_0803033A:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08030340: .4byte gHealthboxSpriteIds
-_08030344: .4byte gPlayerParty
-_08030348: .4byte gTasks
-_0803034C: .4byte sub_8030350
- thumb_func_end sub_8030298
-
- thumb_func_start sub_8030350
-sub_8030350: @ 8030350
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, _08030380 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r4, r0, r1
- movs r0, 0xC
- ldrsh r6, [r4, r0]
- lsls r0, r6, 24
- lsrs r0, 24
- bl IsBattlerSpriteVisible
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08030388
- ldr r0, _08030384 @ =sub_80303A8
- str r0, [r4]
- movs r0, 0
- strh r0, [r4, 0x26]
- b _08030398
- .align 2, 0
-_08030380: .4byte gTasks
-_08030384: .4byte sub_80303A8
-_08030388:
- ldr r0, _080303A0 @ =gBattlerControllerFuncs
- lsls r1, r6, 2
- adds r1, r0
- ldr r0, _080303A4 @ =sub_802FE94
- str r0, [r1]
- adds r0, r5, 0
- bl DestroyTask
-_08030398:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080303A0: .4byte gBattlerControllerFuncs
-_080303A4: .4byte sub_802FE94
- thumb_func_end sub_8030350
-
- thumb_func_start sub_80303A8
-sub_80303A8: @ 80303A8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- lsls r0, 2
- add r0, r8
- lsls r0, 3
- ldr r1, _080303FC @ =gTasks+0x8
- adds r5, r0, r1
- ldrb r7, [r5, 0x4]
- adds r0, r7, 0
- bl sub_80768B0
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x1
- eors r0, r1
- negs r1, r0
- orrs r1, r0
- lsrs r6, r1, 31
- ldr r0, _08030400 @ =gBattlerSpriteIds
- adds r0, r7, r0
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08030404 @ =gSprites
- adds r4, r0, r1
- movs r1, 0x1E
- ldrsh r0, [r5, r1]
- cmp r0, 0x6
- bls _080303F0
- b _0803051C
-_080303F0:
- lsls r0, 2
- ldr r1, _08030408 @ =_0803040C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080303FC: .4byte gTasks+0x8
-_08030400: .4byte gBattlerSpriteIds
-_08030404: .4byte gSprites
-_08030408: .4byte _0803040C
- .align 2, 0
-_0803040C:
- .4byte _08030428
- .4byte _0803047C
- .4byte _08030486
- .4byte _080304C0
- .4byte _080304E0
- .4byte _080304DA
- .4byte _080304E8
-_08030428:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- bne _0803051C
- cmp r6, 0
- bne _0803044C
- ldr r1, _08030444 @ =gBattle_BG1_X
- ldrh r0, [r1]
- strh r0, [r5, 0x1C]
- ldr r2, _08030448 @ =gBattle_BG1_Y
- b _08030454
- .align 2, 0
-_08030444: .4byte gBattle_BG1_X
-_08030448: .4byte gBattle_BG1_Y
-_0803044C:
- ldr r1, _08030474 @ =gBattle_BG2_X
- ldrh r0, [r1]
- strh r0, [r5, 0x1C]
- ldr r2, _08030478 @ =gBattle_BG2_Y
-_08030454:
- ldrh r0, [r2]
- strh r0, [r5, 0x1A]
- ldrh r0, [r4, 0x24]
- ldrh r3, [r4, 0x20]
- adds r0, r3
- negs r0, r0
- adds r0, 0x20
- strh r0, [r1]
- ldrh r0, [r4, 0x26]
- ldrh r4, [r4, 0x22]
- adds r0, r4
- negs r0, r0
- adds r0, 0x20
- strh r0, [r2]
- b _080304E0
- .align 2, 0
-_08030474: .4byte gBattle_BG2_X
-_08030478: .4byte gBattle_BG2_Y
-_0803047C:
- adds r0, r7, 0
- adds r1, r6, 0
- bl sub_8072E48
- b _080304E0
-_08030486:
- movs r0, 0x58
- bl PlaySE
- bl IsMonGettingExpSentOut
- cmp r0, 0
- beq _080304E0
- ldrh r0, [r4, 0x24]
- ldrh r1, [r4, 0x20]
- adds r0, r1
- lsls r0, 16
- lsrs r0, 16
- ldrh r1, [r4, 0x26]
- ldrh r4, [r4, 0x22]
- adds r1, r4
- lsls r1, 16
- lsrs r1, 16
- ldr r3, _080304BC @ =0x00002710
- movs r2, 0x1
- str r2, [sp]
- movs r2, 0
- str r2, [sp, 0x4]
- adds r2, r3, 0
- bl sub_811E5B8
- b _080304E0
- .align 2, 0
-_080304BC: .4byte 0x00002710
-_080304C0:
- bl sub_811E680
- lsls r0, 24
- cmp r0, 0
- bne _0803051C
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r1, [r2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- b _080304E0
-_080304DA:
- adds r0, r6, 0
- bl sub_8073128
-_080304E0:
- ldrh r0, [r5, 0x1E]
- adds r0, 0x1
- strh r0, [r5, 0x1E]
- b _0803051C
-_080304E8:
- cmp r6, 0
- bne _08030500
- ldr r1, _080304F8 @ =gBattle_BG1_X
- ldrh r0, [r5, 0x1C]
- strh r0, [r1]
- ldr r1, _080304FC @ =gBattle_BG1_Y
- b _08030508
- .align 2, 0
-_080304F8: .4byte gBattle_BG1_X
-_080304FC: .4byte gBattle_BG1_Y
-_08030500:
- ldr r1, _08030528 @ =gBattle_BG2_X
- ldrh r0, [r5, 0x1C]
- strh r0, [r1]
- ldr r1, _0803052C @ =gBattle_BG2_Y
-_08030508:
- ldrh r0, [r5, 0x1A]
- strh r0, [r1]
- ldr r0, _08030530 @ =gBattlerControllerFuncs
- lsls r1, r7, 2
- adds r1, r0
- ldr r0, _08030534 @ =sub_802FE94
- str r0, [r1]
- mov r0, r8
- bl DestroyTask
-_0803051C:
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08030528: .4byte gBattle_BG2_X
-_0803052C: .4byte gBattle_BG2_Y
-_08030530: .4byte gBattlerControllerFuncs
-_08030534: .4byte sub_802FE94
- thumb_func_end sub_80303A8
-
- thumb_func_start sub_8030538
-sub_8030538: @ 8030538
- push {r4-r6,lr}
- ldr r6, _08030590 @ =gSprites
- ldr r5, _08030594 @ =gBattlerSpriteIds
- ldr r4, _08030598 @ =gActiveBattler
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, r0, r6
- movs r1, 0x22
- ldrsh r0, [r2, r1]
- movs r3, 0x26
- ldrsh r1, [r2, r3]
- adds r0, r1
- cmp r0, 0xA0
- ble _08030588
- ldrb r0, [r2, 0x3]
- lsls r0, 26
- lsrs r0, 27
- bl FreeOamMatrix
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- bl DestroySprite
- ldr r1, _0803059C @ =gHealthboxSpriteIds
- ldrb r0, [r4]
- adds r0, r1
- ldrb r0, [r0]
- bl SetHealthboxSpriteInvisible
- bl PlayerBufferExecCompleted
-_08030588:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08030590: .4byte gSprites
-_08030594: .4byte gBattlerSpriteIds
-_08030598: .4byte gActiveBattler
-_0803059C: .4byte gHealthboxSpriteIds
- thumb_func_end sub_8030538
-
- thumb_func_start sub_80305A0
-sub_80305A0: @ 80305A0
- push {r4-r6,lr}
- ldr r0, _080305FC @ =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r6, _08030600 @ =gActiveBattler
- ldrb r2, [r6]
- ldr r1, [r0, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _080305F4
- ldr r5, _08030604 @ =gBattlerSpriteIds
- adds r0, r2, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, _08030608 @ =gSprites
- adds r0, r4
- bl FreeSpriteOamMatrix
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl DestroySprite
- ldr r1, _0803060C @ =gHealthboxSpriteIds
- ldrb r0, [r6]
- adds r0, r1
- ldrb r0, [r0]
- bl SetHealthboxSpriteInvisible
- bl PlayerBufferExecCompleted
-_080305F4:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080305FC: .4byte gBattleSpritesDataPtr
-_08030600: .4byte gActiveBattler
-_08030604: .4byte gBattlerSpriteIds
-_08030608: .4byte gSprites
-_0803060C: .4byte gHealthboxSpriteIds
- thumb_func_end sub_80305A0
-
- thumb_func_start sub_8030610
-sub_8030610: @ 8030610
- push {lr}
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- bne _08030622
- bl PlayerBufferExecCompleted
-_08030622:
- pop {r0}
- bx r0
- thumb_func_end sub_8030610
-
- thumb_func_start sub_8030628
-sub_8030628: @ 8030628
- push {r4,lr}
- ldr r0, _0803066C @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08030666
- ldr r1, _08030670 @ =gBattlerControllerFuncs
- ldr r2, _08030674 @ =gActiveBattler
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08030678 @ =sub_8030684
- str r1, [r0]
- ldr r3, _0803067C @ =gTasks
- ldr r1, _08030680 @ =gUnknown_3004FFC
- ldrb r0, [r2]
- adds r0, r1
- ldrb r0, [r0]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r3
- ldrb r4, [r1, 0x8]
- bl DestroyTask
- bl FreeAllWindowBuffers
- adds r0, r4, 0
- bl sub_81278DC
-_08030666:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0803066C: .4byte gPaletteFade
-_08030670: .4byte gBattlerControllerFuncs
-_08030674: .4byte gActiveBattler
-_08030678: .4byte sub_8030684
-_0803067C: .4byte gTasks
-_08030680: .4byte gUnknown_3004FFC
- thumb_func_end sub_8030628
-
- thumb_func_start sub_8030684
-sub_8030684: @ 8030684
- push {lr}
- ldr r0, _080306B4 @ =gMain
- ldr r1, [r0, 0x4]
- ldr r0, _080306B8 @ =BattleMainCB2
- cmp r1, r0
- bne _080306F4
- ldr r0, _080306BC @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080306F4
- ldr r0, _080306C0 @ =gUnknown_203B0C0
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _080306CC
- ldr r0, _080306C4 @ =gUnknown_203B0C1
- ldrb r1, [r0]
- ldr r2, _080306C8 @ =gUnknown_203B0DC
- movs r0, 0x1
- bl BtlController_EmitChosenMonReturnValue
- b _080306D6
- .align 2, 0
-_080306B4: .4byte gMain
-_080306B8: .4byte BattleMainCB2
-_080306BC: .4byte gPaletteFade
-_080306C0: .4byte gUnknown_203B0C0
-_080306C4: .4byte gUnknown_203B0C1
-_080306C8: .4byte gUnknown_203B0DC
-_080306CC:
- movs r0, 0x1
- movs r1, 0x6
- movs r2, 0
- bl BtlController_EmitChosenMonReturnValue
-_080306D6:
- ldr r1, _080306F8 @ =gBattleBufferA
- ldr r0, _080306FC @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0x1
- bne _080306F0
- bl PrintLinkStandbyMsg
-_080306F0:
- bl PlayerBufferExecCompleted
-_080306F4:
- pop {r0}
- bx r0
- .align 2, 0
-_080306F8: .4byte gBattleBufferA
-_080306FC: .4byte gActiveBattler
- thumb_func_end sub_8030684
-
- thumb_func_start sub_8030700
-sub_8030700: @ 8030700
- push {lr}
- ldr r0, _0803072C @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08030728
- ldr r1, _08030730 @ =gBattlerControllerFuncs
- ldr r0, _08030734 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08030738 @ =CompleteWhenChoseItem
- str r1, [r0]
- bl nullsub_44
- bl FreeAllWindowBuffers
- bl sub_8107ECC
-_08030728:
- pop {r0}
- bx r0
- .align 2, 0
-_0803072C: .4byte gPaletteFade
-_08030730: .4byte gBattlerControllerFuncs
-_08030734: .4byte gActiveBattler
-_08030738: .4byte CompleteWhenChoseItem
- thumb_func_end sub_8030700
-
- thumb_func_start CompleteWhenChoseItem
-CompleteWhenChoseItem: @ 803073C
- push {lr}
- ldr r0, _08030768 @ =gMain
- ldr r1, [r0, 0x4]
- ldr r0, _0803076C @ =BattleMainCB2
- cmp r1, r0
- bne _08030762
- ldr r0, _08030770 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08030762
- ldr r0, _08030774 @ =gSpecialVar_ItemId
- ldrh r1, [r0]
- movs r0, 0x1
- bl BtlController_EmitOneReturnValue
- bl PlayerBufferExecCompleted
-_08030762:
- pop {r0}
- bx r0
- .align 2, 0
-_08030768: .4byte gMain
-_0803076C: .4byte BattleMainCB2
-_08030770: .4byte gPaletteFade
-_08030774: .4byte gSpecialVar_ItemId
- thumb_func_end CompleteWhenChoseItem
-
- thumb_func_start CompleteOnSpecialAnimDone
-CompleteOnSpecialAnimDone: @ 8030778
- push {lr}
- ldr r0, _080307A8 @ =gDoingBattleAnim
- ldrb r0, [r0]
- cmp r0, 0
- beq _0803079E
- ldr r0, _080307AC @ =gBattleSpritesDataPtr
- ldr r2, [r0]
- ldr r0, _080307B0 @ =gActiveBattler
- ldrb r1, [r0]
- ldr r2, [r2, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _080307A2
-_0803079E:
- bl PlayerBufferExecCompleted
-_080307A2:
- pop {r0}
- bx r0
- .align 2, 0
-_080307A8: .4byte gDoingBattleAnim
-_080307AC: .4byte gBattleSpritesDataPtr
-_080307B0: .4byte gActiveBattler
- thumb_func_end CompleteOnSpecialAnimDone
-
- thumb_func_start DoHitAnimBlinkSpriteEffect
-DoHitAnimBlinkSpriteEffect: @ 80307B4
- push {r4,lr}
- ldr r1, _080307F0 @ =gBattlerSpriteIds
- ldr r0, _080307F4 @ =gActiveBattler
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- ldr r2, _080307F8 @ =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 _08030800
- 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, _080307FC @ =gDoingBattleAnim
- strb r3, [r0]
- bl PlayerBufferExecCompleted
- b _0803082A
- .align 2, 0
-_080307F0: .4byte gBattlerSpriteIds
-_080307F4: .4byte gActiveBattler
-_080307F8: .4byte gSprites
-_080307FC: .4byte gDoingBattleAnim
-_08030800:
- ldrh r0, [r4, 0x30]
- movs r1, 0x3
- ands r0, r1
- cmp r0, 0
- bne _08030824
- 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]
-_08030824:
- ldrh r0, [r4, 0x30]
- adds r0, 0x1
- strh r0, [r4, 0x30]
-_0803082A:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end DoHitAnimBlinkSpriteEffect
-
- thumb_func_start sub_8030830
-sub_8030830: @ 8030830
- push {r4-r7,lr}
- ldr r0, _08030890 @ =gActiveBattler
- ldrb r1, [r0]
- lsls r1, 9
- ldr r3, _08030894 @ =gUnknown_2022BC8
- ldr r2, _08030898 @ =gUnknown_3004FF8
- movs r0, 0
- strb r0, [r2]
- movs r5, 0
- ldr r6, _0803089C @ =gDisplayedStringBattle
- adds r4, r1, r3
- adds r7, r2, 0
-_08030848:
- lsls r0, r5, 24
- lsrs r0, 24
- bl MoveSelectionDestroyCursorAt
- adds r0, r6, 0
- ldr r1, _080308A0 @ =gUnknown_83FE770
- bl StringCopy
- ldrh r1, [r4]
- movs r0, 0xD
- muls r1, r0
- ldr r0, _080308A4 @ =gMoveNames
- adds r1, r0
- adds r0, r6, 0
- bl StringAppend
- adds r1, r5, 0x3
- lsls r1, 24
- lsrs r1, 24
- adds r0, r6, 0
- bl BattlePutTextOnWindow
- ldrh r0, [r4]
- cmp r0, 0
- beq _08030880
- ldrb r0, [r7]
- adds r0, 0x1
- strb r0, [r7]
-_08030880:
- adds r4, 0x2
- adds r5, 0x1
- cmp r5, 0x3
- ble _08030848
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08030890: .4byte gActiveBattler
-_08030894: .4byte gUnknown_2022BC8
-_08030898: .4byte gUnknown_3004FF8
-_0803089C: .4byte gDisplayedStringBattle
-_080308A0: .4byte gUnknown_83FE770
-_080308A4: .4byte gMoveNames
- thumb_func_end sub_8030830
-
- thumb_func_start MoveSelectionDisplayPpString
-MoveSelectionDisplayPpString: @ 80308A8
- push {r4,lr}
- ldr r4, _080308C4 @ =gDisplayedStringBattle
- ldr r1, _080308C8 @ =gUnknown_83FE766
- adds r0, r4, 0
- bl StringCopy
- adds r0, r4, 0
- movs r1, 0x7
- bl BattlePutTextOnWindow
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080308C4: .4byte gDisplayedStringBattle
-_080308C8: .4byte gUnknown_83FE766
- thumb_func_end MoveSelectionDisplayPpString
-
- thumb_func_start MoveSelectionDisplayPpNumber
-MoveSelectionDisplayPpNumber: @ 80308CC
- push {r4-r7,lr}
- ldr r5, _08030930 @ =gBattleBufferA
- ldr r7, _08030934 @ =gActiveBattler
- ldrb r0, [r7]
- lsls r0, 9
- adds r1, r5, 0x2
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _08030928
- bl SetPpNumbersPaletteInMoveSelection
- ldrb r1, [r7]
- lsls r4, r1, 9
- adds r0, r5, 0x4
- adds r4, r0
- ldr r6, _08030938 @ =gDisplayedStringBattle
- ldr r5, _0803093C @ =gMoveSelectionCursor
- adds r1, r5
- adds r0, r4, 0
- adds r0, 0x8
- ldrb r1, [r1]
- adds r0, r1
- ldrb r1, [r0]
- adds r0, r6, 0
- movs r2, 0x1
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- movs r1, 0xBA
- strb r1, [r0]
- adds r0, 0x1
- ldrb r1, [r7]
- adds r1, r5
- adds r4, 0xC
- ldrb r1, [r1]
- adds r4, r1
- ldrb r1, [r4]
- movs r2, 0x1
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- adds r0, r6, 0
- movs r1, 0x9
- bl BattlePutTextOnWindow
-_08030928:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08030930: .4byte gBattleBufferA
-_08030934: .4byte gActiveBattler
-_08030938: .4byte gDisplayedStringBattle
-_0803093C: .4byte gMoveSelectionCursor
- thumb_func_end MoveSelectionDisplayPpNumber
-
- thumb_func_start MoveSelectionDisplayMoveType
-MoveSelectionDisplayMoveType: @ 8030940
- push {r4-r6,lr}
- ldr r5, _080309AC @ =gActiveBattler
- ldrb r4, [r5]
- lsls r4, 9
- ldr r0, _080309B0 @ =gUnknown_2022BC8
- adds r4, r0
- ldr r6, _080309B4 @ =gDisplayedStringBattle
- ldr r1, _080309B8 @ =gUnknown_83FE76A
- adds r0, r6, 0
- bl StringCopy
- adds r3, r0, 0
- movs r0, 0xFC
- strb r0, [r3]
- adds r3, 0x1
- movs r0, 0x6
- strb r0, [r3]
- adds r3, 0x1
- movs r0, 0x1
- strb r0, [r3]
- adds r3, 0x1
- ldr r1, _080309BC @ =gUnknown_83FE770
- adds r0, r3, 0
- bl StringCopy
- adds r3, r0, 0
- ldr r2, _080309C0 @ =gBattleMoves
- ldr r1, _080309C4 @ =gMoveSelectionCursor
- ldrb r0, [r5]
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 1
- adds r4, r0
- ldrh r1, [r4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x2]
- lsls r1, r0, 3
- subs r1, r0
- ldr r0, _080309C8 @ =gUnknown_824F1A0
- adds r1, r0
- adds r0, r3, 0
- bl StringCopy
- adds r0, r6, 0
- movs r1, 0x8
- bl BattlePutTextOnWindow
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080309AC: .4byte gActiveBattler
-_080309B0: .4byte gUnknown_2022BC8
-_080309B4: .4byte gDisplayedStringBattle
-_080309B8: .4byte gUnknown_83FE76A
-_080309BC: .4byte gUnknown_83FE770
-_080309C0: .4byte gBattleMoves
-_080309C4: .4byte gMoveSelectionCursor
-_080309C8: .4byte gUnknown_824F1A0
- thumb_func_end MoveSelectionDisplayMoveType
-
- thumb_func_start MoveSelectionCreateCursorAt
-MoveSelectionCreateCursorAt: @ 80309CC
- push {lr}
- sub sp, 0x10
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- lsls r1, 24
- lsrs r1, 24
- add r2, sp, 0xC
- adds r0, r1, 0x1
- strh r0, [r2]
- adds r0, r2, 0
- adds r1, 0x2
- strh r1, [r0, 0x2]
- movs r1, 0x1
- adds r0, r3, 0
- ands r0, r1
- lsls r2, r0, 3
- adds r2, r0
- adds r2, 0x1
- movs r0, 0x2
- ands r3, r0
- adds r3, 0x37
- str r1, [sp]
- str r0, [sp, 0x4]
- movs r0, 0x11
- str r0, [sp, 0x8]
- movs r0, 0
- add r1, sp, 0xC
- bl CopyToBgTilemapBufferRect_ChangePalette
- movs r0, 0
- bl CopyBgTilemapBufferToVram
- add sp, 0x10
- pop {r0}
- bx r0
- thumb_func_end MoveSelectionCreateCursorAt
-
- thumb_func_start MoveSelectionDestroyCursorAt
-MoveSelectionDestroyCursorAt: @ 8030A14
- push {lr}
- sub sp, 0x10
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- add r0, sp, 0xC
- movs r1, 0x20
- strh r1, [r0]
- strh r1, [r0, 0x2]
- movs r1, 0x1
- adds r0, r3, 0
- ands r0, r1
- lsls r2, r0, 3
- adds r2, r0
- adds r2, 0x1
- movs r0, 0x2
- ands r3, r0
- adds r3, 0x37
- str r1, [sp]
- str r0, [sp, 0x4]
- movs r0, 0x11
- str r0, [sp, 0x8]
- movs r0, 0
- add r1, sp, 0xC
- bl CopyToBgTilemapBufferRect_ChangePalette
- movs r0, 0
- bl CopyBgTilemapBufferToVram
- add sp, 0x10
- pop {r0}
- bx r0
- thumb_func_end MoveSelectionDestroyCursorAt
-
- thumb_func_start ActionSelectionCreateCursorAt
-ActionSelectionCreateCursorAt: @ 8030A54
- push {r4,lr}
- sub sp, 0x10
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- add r0, sp, 0xC
- movs r4, 0x1
- strh r4, [r0]
- movs r1, 0x2
- strh r1, [r0, 0x2]
- adds r0, r3, 0
- ands r0, r4
- lsls r2, r0, 3
- subs r2, r0
- adds r2, 0x10
- lsls r2, 24
- lsrs r2, 24
- ands r3, r1
- adds r3, 0x23
- str r4, [sp]
- str r1, [sp, 0x4]
- movs r0, 0x11
- str r0, [sp, 0x8]
- movs r0, 0
- add r1, sp, 0xC
- bl CopyToBgTilemapBufferRect_ChangePalette
- movs r0, 0
- bl CopyBgTilemapBufferToVram
- add sp, 0x10
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end ActionSelectionCreateCursorAt
-
- thumb_func_start ActionSelectionDestroyCursorAt
-ActionSelectionDestroyCursorAt: @ 8030A98
- push {lr}
- sub sp, 0x10
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- add r0, sp, 0xC
- movs r1, 0x20
- strh r1, [r0]
- strh r1, [r0, 0x2]
- movs r1, 0x1
- adds r0, r3, 0
- ands r0, r1
- lsls r2, r0, 3
- subs r2, r0
- adds r2, 0x10
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0x2
- ands r3, r0
- adds r3, 0x23
- str r1, [sp]
- str r0, [sp, 0x4]
- movs r0, 0x11
- str r0, [sp, 0x8]
- movs r0, 0
- add r1, sp, 0xC
- bl CopyToBgTilemapBufferRect_ChangePalette
- movs r0, 0
- bl CopyBgTilemapBufferToVram
- add sp, 0x10
- pop {r0}
- bx r0
- thumb_func_end ActionSelectionDestroyCursorAt
-
- thumb_func_start sub_8030ADC
-sub_8030ADC: @ 8030ADC
- push {lr}
- ldr r0, _08030AE8 @ =ReshowBattleScreenAfterMenu
- bl SetMainCallback2
- pop {r0}
- bx r0
- .align 2, 0
-_08030AE8: .4byte ReshowBattleScreenAfterMenu
- thumb_func_end sub_8030ADC
-
- thumb_func_start sub_8030AEC
-sub_8030AEC: @ 8030AEC
- push {lr}
- ldr r0, _08030AF8 @ =ReshowBattleScreenAfterMenu
- bl SetMainCallback2
- pop {r0}
- bx r0
- .align 2, 0
-_08030AF8: .4byte ReshowBattleScreenAfterMenu
- thumb_func_end sub_8030AEC
-
- thumb_func_start CompleteOnFinishedStatusAnimation
-CompleteOnFinishedStatusAnimation: @ 8030AFC
- push {lr}
- ldr r0, _08030B24 @ =gBattleSpritesDataPtr
- ldr r2, [r0]
- ldr r0, _08030B28 @ =gActiveBattler
- ldrb r1, [r0]
- ldr r2, [r2, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- bne _08030B1E
- bl PlayerBufferExecCompleted
-_08030B1E:
- pop {r0}
- bx r0
- .align 2, 0
-_08030B24: .4byte gBattleSpritesDataPtr
-_08030B28: .4byte gActiveBattler
- thumb_func_end CompleteOnFinishedStatusAnimation
-
- thumb_func_start CompleteOnFinishedBattleAnimation
-CompleteOnFinishedBattleAnimation: @ 8030B2C
- push {lr}
- ldr r0, _08030B54 @ =gBattleSpritesDataPtr
- ldr r2, [r0]
- ldr r0, _08030B58 @ =gActiveBattler
- ldrb r1, [r0]
- ldr r2, [r2, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- bne _08030B4E
- bl PlayerBufferExecCompleted
-_08030B4E:
- pop {r0}
- bx r0
- .align 2, 0
-_08030B54: .4byte gBattleSpritesDataPtr
-_08030B58: .4byte gActiveBattler
- thumb_func_end CompleteOnFinishedBattleAnimation
-
- thumb_func_start PrintLinkStandbyMsg
-PrintLinkStandbyMsg: @ 8030B5C
- push {lr}
- ldr r0, _08030B80 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08030B7C
- ldr r0, _08030B84 @ =gBattle_BG0_X
- movs r1, 0
- strh r1, [r0]
- ldr r0, _08030B88 @ =gBattle_BG0_Y
- strh r1, [r0]
- ldr r0, _08030B8C @ =gUnknown_83FE714
- movs r1, 0
- bl BattlePutTextOnWindow
-_08030B7C:
- pop {r0}
- bx r0
- .align 2, 0
-_08030B80: .4byte gBattleTypeFlags
-_08030B84: .4byte gBattle_BG0_X
-_08030B88: .4byte gBattle_BG0_Y
-_08030B8C: .4byte gUnknown_83FE714
- thumb_func_end PrintLinkStandbyMsg
-
- thumb_func_start PlayerHandleGetMonData
-PlayerHandleGetMonData: @ 8030B90
- push {r4-r6,lr}
- sub sp, 0x100
- movs r6, 0
- ldr r1, _08030BBC @ =gBattleBufferA
- ldr r0, _08030BC0 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r0, r2, 9
- adds r1, 0x2
- adds r1, r0, r1
- ldrb r0, [r1]
- cmp r0, 0
- bne _08030BC8
- ldr r0, _08030BC4 @ =gBattlerPartyIndexes
- lsls r1, r2, 1
- adds r1, r0
- ldrb r0, [r1]
- mov r1, sp
- bl CopyPlayerMonData
- adds r6, r0, 0
- b _08030BEA
- .align 2, 0
-_08030BBC: .4byte gBattleBufferA
-_08030BC0: .4byte gActiveBattler
-_08030BC4: .4byte gBattlerPartyIndexes
-_08030BC8:
- ldrb r4, [r1]
- movs r5, 0
-_08030BCC:
- movs r0, 0x1
- ands r0, r4
- cmp r0, 0
- beq _08030BE2
- lsls r0, r5, 24
- lsrs r0, 24
- mov r2, sp
- adds r1, r2, r6
- bl CopyPlayerMonData
- adds r6, r0
-_08030BE2:
- lsrs r4, 1
- adds r5, 0x1
- cmp r5, 0x5
- ble _08030BCC
-_08030BEA:
- lsls r1, r6, 16
- lsrs r1, 16
- movs r0, 0x1
- mov r2, sp
- bl BtlController_EmitDataTransfer
- bl PlayerBufferExecCompleted
- add sp, 0x100
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end PlayerHandleGetMonData
-
- thumb_func_start CopyPlayerMonData
-CopyPlayerMonData: @ 8030C04
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x90
- adds r7, r1, 0
- lsls r0, 24
- lsrs r5, r0, 24
- movs r6, 0
- ldr r2, _08030C38 @ =gBattleBufferA
- ldr r3, _08030C3C @ =gActiveBattler
- ldrb r0, [r3]
- lsls r0, 9
- adds r1, r2, 0x1
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x3B
- bls _08030C2E
- bl _0803139A
-_08030C2E:
- lsls r0, 2
- ldr r1, _08030C40 @ =_08030C44
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08030C38: .4byte gBattleBufferA
-_08030C3C: .4byte gActiveBattler
-_08030C40: .4byte _08030C44
- .align 2, 0
-_08030C44:
- .4byte _08030D34
- .4byte _08030F58
- .4byte _08030F68
- .4byte _08030F78
- .4byte _08030FE0
- .4byte _08030FE0
- .4byte _08030FE0
- .4byte _08030FE0
- .4byte _08030FFC
- .4byte _08031038
- .4byte _08031038
- .4byte _08031038
- .4byte _08031038
- .4byte _0803139A
- .4byte _0803139A
- .4byte _0803139A
- .4byte _0803139A
- .4byte _08031054
- .4byte _08031064
- .4byte _08031094
- .4byte _080310A4
- .4byte _080310B4
- .4byte _080310C4
- .4byte _080310D4
- .4byte _080310E4
- .4byte _080310F4
- .4byte _08031104
- .4byte _08031114
- .4byte _08031124
- .4byte _08031134
- .4byte _08031144
- .4byte _08031154
- .4byte _080311A4
- .4byte _080311B4
- .4byte _080311C4
- .4byte _080311D4
- .4byte _080311E4
- .4byte _080311F4
- .4byte _08031204
- .4byte _08031214
- .4byte _08031224
- .4byte _08031258
- .4byte _08031268
- .4byte _08031278
- .4byte _08031288
- .4byte _08031298
- .4byte _080312A8
- .4byte _080312B8
- .4byte _080312C8
- .4byte _080312E8
- .4byte _080312F8
- .4byte _08031308
- .4byte _08031318
- .4byte _08031328
- .4byte _08031338
- .4byte _08031348
- .4byte _08031358
- .4byte _08031368
- .4byte _08031378
- .4byte _08031388
-_08030D34:
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, _08030F48 @ =gPlayerParty
- adds r4, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- mov r1, sp
- strh r0, [r1]
- adds r0, r4, 0
- movs r1, 0xC
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0x2E]
- movs r6, 0
- add r0, sp, 0x24
- mov r9, r0
- movs r1, 0x3B
- add r1, sp
- mov r10, r1
- mov r2, sp
- adds r2, 0x2B
- str r2, [sp, 0x80]
- mov r0, sp
- adds r0, 0x2A
- str r0, [sp, 0x7C]
- mov r1, sp
- adds r1, 0x68
- str r1, [sp, 0x8C]
- adds r2, 0x5
- str r2, [sp, 0x84]
- adds r0, 0x12
- str r0, [sp, 0x88]
- mov r8, r4
- add r4, sp, 0xC
-_08030D80:
- adds r1, r6, 0
- adds r1, 0xD
- mov r0, r8
- bl GetMonData
- strh r0, [r4]
- adds r1, r6, 0
- adds r1, 0x11
- mov r0, r8
- bl GetMonData
- mov r2, r9
- adds r1, r2, r6
- strb r0, [r1]
- adds r4, 0x2
- adds r6, 0x1
- cmp r6, 0x3
- ble _08030D80
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, _08030F48 @ =gPlayerParty
- adds r4, r0
- adds r0, r4, 0
- movs r1, 0x15
- bl GetMonData
- mov r1, r10
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x20
- bl GetMonData
- ldr r2, [sp, 0x80]
- strb r0, [r2]
- adds r0, r4, 0
- movs r1, 0x19
- bl GetMonData
- str r0, [sp, 0x44]
- adds r0, r4, 0
- movs r1, 0x27
- bl GetMonData
- mov r3, sp
- movs r5, 0x1F
- ands r0, r5
- ldrb r2, [r3, 0x14]
- movs r1, 0x20
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r3, 0x14]
- adds r0, r4, 0
- movs r1, 0x28
- bl GetMonData
- mov r3, sp
- movs r6, 0x1F
- ands r0, r6
- lsls r0, 5
- ldrh r2, [r3, 0x14]
- ldr r1, _08030F4C @ =0xfffffc1f
- ands r1, r2
- orrs r1, r0
- strh r1, [r3, 0x14]
- adds r0, r4, 0
- movs r1, 0x29
- bl GetMonData
- mov r3, sp
- ands r0, r5
- lsls r0, 2
- ldrb r2, [r3, 0x15]
- movs r1, 0x7D
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r3, 0x15]
- adds r0, r4, 0
- movs r1, 0x2A
- bl GetMonData
- movs r1, 0x1F
- ands r1, r0
- lsls r1, 15
- ldr r0, [sp, 0x14]
- ldr r2, _08030F50 @ =0xfff07fff
- ands r0, r2
- orrs r0, r1
- str r0, [sp, 0x14]
- adds r0, r4, 0
- movs r1, 0x2B
- bl GetMonData
- mov r3, sp
- ands r0, r6
- lsls r0, 4
- ldrh r2, [r3, 0x16]
- ldr r1, _08030F54 @ =0xfffffe0f
- ands r1, r2
- orrs r1, r0
- strh r1, [r3, 0x16]
- adds r0, r4, 0
- movs r1, 0x2C
- bl GetMonData
- mov r3, sp
- ands r0, r5
- lsls r0, 1
- ldrb r2, [r3, 0x17]
- movs r1, 0x3F
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r3, 0x17]
- adds r0, r4, 0
- movs r1, 0
- bl GetMonData
- str r0, [sp, 0x48]
- adds r0, r4, 0
- movs r1, 0x37
- bl GetMonData
- str r0, [sp, 0x4C]
- adds r0, r4, 0
- movs r1, 0x38
- bl GetMonData
- ldr r1, [sp, 0x7C]
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0x28]
- adds r0, r4, 0
- movs r1, 0x3A
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0x2C]
- adds r0, r4, 0
- movs r1, 0x3B
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0x2]
- adds r0, r4, 0
- movs r1, 0x3C
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0x4]
- adds r0, r4, 0
- movs r1, 0x3D
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0x6]
- adds r0, r4, 0
- movs r1, 0x3E
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0x8]
- adds r0, r4, 0
- movs r1, 0x3F
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0xA]
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- mov r3, sp
- movs r1, 0x1
- ands r0, r1
- lsls r0, 6
- ldrb r2, [r3, 0x17]
- movs r1, 0x41
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r3, 0x17]
- adds r0, r4, 0
- movs r1, 0x2E
- bl GetMonData
- mov r3, sp
- lsls r0, 7
- ldrb r2, [r3, 0x17]
- movs r1, 0x7F
- ands r1, r2
- orrs r1, r0
- strb r1, [r3, 0x17]
- adds r0, r4, 0
- movs r1, 0x1
- bl GetMonData
- str r0, [sp, 0x54]
- adds r0, r4, 0
- movs r1, 0x2
- ldr r2, [sp, 0x8C]
- bl GetMonData
- ldr r0, [sp, 0x84]
- ldr r1, [sp, 0x8C]
- bl StringCopy10
- adds r0, r4, 0
- movs r1, 0x7
- ldr r2, [sp, 0x88]
- bl GetMonData
- mov r2, sp
- movs r6, 0
-_08030F38:
- adds r0, r7, r6
- adds r1, r2, r6
- ldrb r1, [r1]
- strb r1, [r0]
- adds r6, 0x1
- cmp r6, 0x57
- bls _08030F38
- b _0803139A
- .align 2, 0
-_08030F48: .4byte gPlayerParty
-_08030F4C: .4byte 0xfffffc1f
-_08030F50: .4byte 0xfff07fff
-_08030F54: .4byte 0xfffffe0f
-_08030F58:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08030F64 @ =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- b _080312D2
- .align 2, 0
-_08030F64: .4byte gPlayerParty
-_08030F68:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08030F74 @ =gPlayerParty
- adds r0, r1
- movs r1, 0xC
- b _080312D2
- .align 2, 0
-_08030F74: .4byte gPlayerParty
-_08030F78:
- movs r6, 0
- add r2, sp, 0x58
- mov r9, r2
- add r0, sp, 0x60
- mov r10, r0
- movs r0, 0x64
- adds r1, r5, 0
- muls r1, r0
- ldr r0, _08030FDC @ =gPlayerParty
- adds r4, r1, r0
- mov r8, r9
-_08030F8E:
- adds r1, r6, 0
- adds r1, 0xD
- adds r0, r4, 0
- bl GetMonData
- mov r1, r8
- strh r0, [r1]
- adds r1, r6, 0
- adds r1, 0x11
- adds r0, r4, 0
- bl GetMonData
- mov r2, r10
- adds r1, r2, r6
- strb r0, [r1]
- movs r0, 0x2
- add r8, r0
- adds r6, 0x1
- cmp r6, 0x3
- ble _08030F8E
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08030FDC @ =gPlayerParty
- adds r0, r1
- movs r1, 0x15
- bl GetMonData
- mov r1, r9
- strb r0, [r1, 0xC]
- mov r2, r9
- movs r6, 0
-_08030FCC:
- adds r0, r7, r6
- adds r1, r2, r6
- ldrb r1, [r1]
- strb r1, [r0]
- adds r6, 0x1
- cmp r6, 0xF
- bls _08030FCC
- b _0803139A
- .align 2, 0
-_08030FDC: .4byte gPlayerParty
-_08030FE0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08030FF8 @ =gPlayerParty
- adds r0, r1
- ldrb r1, [r3]
- lsls r1, 9
- adds r2, 0x1
- adds r1, r2
- ldrb r1, [r1]
- adds r1, 0x9
- b _080312D2
- .align 2, 0
-_08030FF8: .4byte gPlayerParty
-_08030FFC:
- movs r6, 0
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r2, _08031034 @ =gPlayerParty
- mov r8, r2
-_08031008:
- adds r1, r6, 0
- adds r1, 0x11
- mov r2, r8
- adds r0, r4, r2
- bl GetMonData
- adds r1, r7, r6
- strb r0, [r1]
- adds r6, 0x1
- cmp r6, 0x3
- ble _08031008
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031034 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x15
- bl GetMonData
- adds r1, r7, r6
- strb r0, [r1]
- adds r6, 0x1
- b _0803139A
- .align 2, 0
-_08031034: .4byte gPlayerParty
-_08031038:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031050 @ =gPlayerParty
- adds r0, r1
- ldrb r1, [r3]
- lsls r1, 9
- adds r2, 0x1
- adds r1, r2
- ldrb r1, [r1]
- adds r1, 0x8
- b _08031392
- .align 2, 0
-_08031050: .4byte gPlayerParty
-_08031054:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031060 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x1
- b _0803106E
- .align 2, 0
-_08031060: .4byte gPlayerParty
-_08031064:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031090 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x19
-_0803106E:
- bl GetMonData
- adds r1, r0, 0
- strb r1, [r7]
- movs r0, 0xFF
- lsls r0, 8
- ands r0, r1
- lsrs r0, 8
- strb r0, [r7, 0x1]
- movs r0, 0xFF
- lsls r0, 16
- ands r0, r1
- lsrs r0, 16
- strb r0, [r7, 0x2]
- movs r6, 0x3
- b _0803139A
- .align 2, 0
-_08031090: .4byte gPlayerParty
-_08031094:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080310A0 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x1A
- b _08031392
- .align 2, 0
-_080310A0: .4byte gPlayerParty
-_080310A4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080310B0 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x1B
- b _08031392
- .align 2, 0
-_080310B0: .4byte gPlayerParty
-_080310B4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080310C0 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x1C
- b _08031392
- .align 2, 0
-_080310C0: .4byte gPlayerParty
-_080310C4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080310D0 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x1D
- b _08031392
- .align 2, 0
-_080310D0: .4byte gPlayerParty
-_080310D4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080310E0 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x1E
- b _08031392
- .align 2, 0
-_080310E0: .4byte gPlayerParty
-_080310E4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080310F0 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x1F
- b _08031392
- .align 2, 0
-_080310F0: .4byte gPlayerParty
-_080310F4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031100 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x20
- b _08031392
- .align 2, 0
-_08031100: .4byte gPlayerParty
-_08031104:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031110 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x22
- b _08031392
- .align 2, 0
-_08031110: .4byte gPlayerParty
-_08031114:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031120 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x23
- b _08031392
- .align 2, 0
-_08031120: .4byte gPlayerParty
-_08031124:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031130 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x24
- b _08031392
- .align 2, 0
-_08031130: .4byte gPlayerParty
-_08031134:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031140 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x25
- b _08031392
- .align 2, 0
-_08031140: .4byte gPlayerParty
-_08031144:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031150 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x26
- b _08031392
- .align 2, 0
-_08031150: .4byte gPlayerParty
-_08031154:
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, _080311A0 @ =gPlayerParty
- adds r4, r0
- adds r0, r4, 0
- movs r1, 0x27
- bl GetMonData
- strb r0, [r7]
- adds r0, r4, 0
- movs r1, 0x28
- bl GetMonData
- strb r0, [r7, 0x1]
- adds r0, r4, 0
- movs r1, 0x29
- bl GetMonData
- strb r0, [r7, 0x2]
- adds r0, r4, 0
- movs r1, 0x2A
- bl GetMonData
- strb r0, [r7, 0x3]
- adds r0, r4, 0
- movs r1, 0x2B
- bl GetMonData
- strb r0, [r7, 0x4]
- adds r0, r4, 0
- movs r1, 0x2C
- bl GetMonData
- strb r0, [r7, 0x5]
- movs r6, 0x6
- b _0803139A
- .align 2, 0
-_080311A0: .4byte gPlayerParty
-_080311A4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080311B0 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x27
- b _08031392
- .align 2, 0
-_080311B0: .4byte gPlayerParty
-_080311B4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080311C0 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x28
- b _08031392
- .align 2, 0
-_080311C0: .4byte gPlayerParty
-_080311C4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080311D0 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x29
- b _08031392
- .align 2, 0
-_080311D0: .4byte gPlayerParty
-_080311D4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080311E0 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x2A
- b _08031392
- .align 2, 0
-_080311E0: .4byte gPlayerParty
-_080311E4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080311F0 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x2B
- b _08031392
- .align 2, 0
-_080311F0: .4byte gPlayerParty
-_080311F4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031200 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x2C
- b _08031392
- .align 2, 0
-_08031200: .4byte gPlayerParty
-_08031204:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031210 @ =gPlayerParty
- adds r0, r1
- movs r1, 0
- b _0803122E
- .align 2, 0
-_08031210: .4byte gPlayerParty
-_08031214:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031220 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x9
- b _080312D2
- .align 2, 0
-_08031220: .4byte gPlayerParty
-_08031224:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031254 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x37
-_0803122E:
- bl GetMonData
- adds r1, r0, 0
- strb r1, [r7]
- movs r0, 0xFF
- lsls r0, 8
- ands r0, r1
- lsrs r0, 8
- strb r0, [r7, 0x1]
- movs r0, 0xFF
- lsls r0, 16
- ands r0, r1
- lsrs r0, 16
- strb r0, [r7, 0x2]
- lsrs r0, r1, 24
- strb r0, [r7, 0x3]
- movs r6, 0x4
- b _0803139A
- .align 2, 0
-_08031254: .4byte gPlayerParty
-_08031258:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031264 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x38
- b _08031392
- .align 2, 0
-_08031264: .4byte gPlayerParty
-_08031268:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031274 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x39
- b _080312D2
- .align 2, 0
-_08031274: .4byte gPlayerParty
-_08031278:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031284 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x3A
- b _080312D2
- .align 2, 0
-_08031284: .4byte gPlayerParty
-_08031288:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031294 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x3B
- b _080312D2
- .align 2, 0
-_08031294: .4byte gPlayerParty
-_08031298:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080312A4 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x3C
- b _080312D2
- .align 2, 0
-_080312A4: .4byte gPlayerParty
-_080312A8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080312B4 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x3D
- b _080312D2
- .align 2, 0
-_080312B4: .4byte gPlayerParty
-_080312B8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080312C4 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x3E
- b _080312D2
- .align 2, 0
-_080312C4: .4byte gPlayerParty
-_080312C8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080312E4 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x3F
-_080312D2:
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- strb r0, [r7]
- lsrs r0, 8
- strb r0, [r7, 0x1]
- movs r6, 0x2
- b _0803139A
- .align 2, 0
-_080312E4: .4byte gPlayerParty
-_080312E8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080312F4 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x16
- b _08031392
- .align 2, 0
-_080312F4: .4byte gPlayerParty
-_080312F8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031304 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x17
- b _08031392
- .align 2, 0
-_08031304: .4byte gPlayerParty
-_08031308:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031314 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x18
- b _08031392
- .align 2, 0
-_08031314: .4byte gPlayerParty
-_08031318:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031324 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x21
- b _08031392
- .align 2, 0
-_08031324: .4byte gPlayerParty
-_08031328:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031334 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x2F
- b _08031392
- .align 2, 0
-_08031334: .4byte gPlayerParty
-_08031338:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031344 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x30
- b _08031392
- .align 2, 0
-_08031344: .4byte gPlayerParty
-_08031348:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031354 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x32
- b _08031392
- .align 2, 0
-_08031354: .4byte gPlayerParty
-_08031358:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031364 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x33
- b _08031392
- .align 2, 0
-_08031364: .4byte gPlayerParty
-_08031368:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031374 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x34
- b _08031392
- .align 2, 0
-_08031374: .4byte gPlayerParty
-_08031378:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031384 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x35
- b _08031392
- .align 2, 0
-_08031384: .4byte gPlayerParty
-_08031388:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080313AC @ =gPlayerParty
- adds r0, r1
- movs r1, 0x36
-_08031392:
- bl GetMonData
- strb r0, [r7]
- movs r6, 0x1
-_0803139A:
- adds r0, r6, 0
- add sp, 0x90
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_080313AC: .4byte gPlayerParty
- thumb_func_end CopyPlayerMonData
-
- thumb_func_start PlayerHandleGetRawMonData
-PlayerHandleGetRawMonData: @ 80313B0
- push {r4-r7,lr}
- sub sp, 0x58
- ldr r2, _08031428 @ =gBattlerPartyIndexes
- ldr r5, _0803142C @ =gActiveBattler
- ldrb r1, [r5]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- adds r4, r2, 0
- muls r4, r0
- ldr r3, _08031430 @ =gBattleBufferA
- lsls r1, 9
- adds r0, r3, 0x1
- adds r0, r1, r0
- ldrb r2, [r0]
- ldr r0, _08031434 @ =gPlayerParty
- adds r0, r2, r0
- adds r6, r4, r0
- mov r0, sp
- adds r4, r0, r2
- movs r2, 0
- adds r0, r3, 0x2
- adds r1, r0
- adds r7, r5, 0
- mov r12, r3
- ldrb r1, [r1]
- cmp r2, r1
- bcs _08031406
- adds r3, r0, 0
-_080313EC:
- adds r1, r4, r2
- adds r0, r6, r2
- ldrb r0, [r0]
- strb r0, [r1]
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- ldrb r0, [r5]
- lsls r0, 9
- adds r0, r3
- ldrb r0, [r0]
- cmp r2, r0
- bcc _080313EC
-_08031406:
- ldrb r0, [r7]
- lsls r0, 9
- mov r1, r12
- adds r1, 0x2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x1
- adds r2, r4, 0
- bl BtlController_EmitDataTransfer
- bl PlayerBufferExecCompleted
- add sp, 0x58
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08031428: .4byte gBattlerPartyIndexes
-_0803142C: .4byte gActiveBattler
-_08031430: .4byte gBattleBufferA
-_08031434: .4byte gPlayerParty
- thumb_func_end PlayerHandleGetRawMonData
-
- thumb_func_start PlayerHandleSetMonData
-PlayerHandleSetMonData: @ 8031438
- push {r4,r5,lr}
- ldr r1, _0803145C @ =gBattleBufferA
- ldr r0, _08031460 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r0, r2, 9
- adds r1, 0x2
- adds r1, r0, r1
- ldrb r0, [r1]
- cmp r0, 0
- bne _08031468
- ldr r0, _08031464 @ =gBattlerPartyIndexes
- lsls r1, r2, 1
- adds r1, r0
- ldrb r0, [r1]
- bl SetPlayerMonData
- b _08031486
- .align 2, 0
-_0803145C: .4byte gBattleBufferA
-_08031460: .4byte gActiveBattler
-_08031464: .4byte gBattlerPartyIndexes
-_08031468:
- ldrb r4, [r1]
- movs r5, 0
-_0803146C:
- movs r0, 0x1
- ands r0, r4
- cmp r0, 0
- beq _0803147A
- adds r0, r5, 0
- bl SetPlayerMonData
-_0803147A:
- lsrs r4, 1
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x5
- bls _0803146C
-_08031486:
- bl PlayerBufferExecCompleted
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end PlayerHandleSetMonData
-
- thumb_func_start SetPlayerMonData
-SetPlayerMonData: @ 8031490
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x34
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _080314C8 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 9
- ldr r2, _080314CC @ =gUnknown_2022BC7
- adds r3, r0, r2
- adds r6, r3, 0
- subs r1, r2, 0x2
- adds r0, r1
- ldrb r0, [r0]
- adds r7, r2, 0
- cmp r0, 0x3B
- bls _080314BC
- bl _08031E56
-_080314BC:
- lsls r0, 2
- ldr r1, _080314D0 @ =_080314D4
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080314C8: .4byte gActiveBattler
-_080314CC: .4byte gUnknown_2022BC7
-_080314D0: .4byte _080314D4
- .align 2, 0
-_080314D4:
- .4byte _080315C4
- .4byte _0803175C
- .4byte _0803177C
- .4byte _0803179C
- .4byte _080317F4
- .4byte _080317F4
- .4byte _080317F4
- .4byte _080317F4
- .4byte _0803181C
- .4byte _08031880
- .4byte _08031880
- .4byte _08031880
- .4byte _08031880
- .4byte _08031E56
- .4byte _08031E56
- .4byte _08031E56
- .4byte _08031E56
- .4byte _080318B0
- .4byte _080318D0
- .4byte _080318F0
- .4byte _08031910
- .4byte _08031930
- .4byte _08031950
- .4byte _08031970
- .4byte _08031990
- .4byte _080319B0
- .4byte _080319D0
- .4byte _080319F0
- .4byte _08031A10
- .4byte _08031A30
- .4byte _08031A50
- .4byte _08031A70
- .4byte _08031AE0
- .4byte _08031B00
- .4byte _08031B20
- .4byte _08031B40
- .4byte _08031B60
- .4byte _08031B80
- .4byte _08031BA0
- .4byte _08031BC0
- .4byte _08031BE0
- .4byte _08031C00
- .4byte _08031C20
- .4byte _08031C40
- .4byte _08031C60
- .4byte _08031C80
- .4byte _08031CA0
- .4byte _08031CC0
- .4byte _08031CE0
- .4byte _08031D00
- .4byte _08031D20
- .4byte _08031D40
- .4byte _08031D60
- .4byte _08031D80
- .4byte _08031DA0
- .4byte _08031DC0
- .4byte _08031DE0
- .4byte _08031E00
- .4byte _08031E20
- .4byte _08031E40
-_080315C4:
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, _08031758 @ =gPlayerParty
- adds r4, r0
- adds r0, r4, 0
- movs r1, 0xB
- adds r2, r6, 0
- bl SetMonData
- adds r2, r6, 0
- adds r2, 0x2E
- adds r0, r4, 0
- movs r1, 0xC
- bl SetMonData
- movs r0, 0
- mov r8, r0
- movs r0, 0x3B
- adds r0, r6
- mov r10, r0
- adds r0, r6, 0
- adds r0, 0x2B
- str r0, [sp, 0x20]
- adds r0, 0x19
- str r0, [sp, 0x28]
- adds r0, 0x4
- str r0, [sp, 0x2C]
- adds r0, 0x4
- str r0, [sp, 0x30]
- subs r0, 0x22
- str r0, [sp, 0x1C]
- subs r0, 0x2
- str r0, [sp, 0x18]
- adds r0, 0x4
- str r0, [sp, 0x24]
- adds r0, r6, 0x2
- str r0, [sp, 0x4]
- adds r0, r6, 0x4
- str r0, [sp, 0x8]
- adds r0, r6, 0x6
- str r0, [sp, 0xC]
- adds r0, 0x2
- str r0, [sp, 0x10]
- adds r0, 0x2
- str r0, [sp, 0x14]
- mov r9, r4
- adds r7, r6, 0
- adds r7, 0x24
- adds r4, r6, 0
- adds r4, 0xC
-_0803162A:
- mov r1, r8
- adds r1, 0xD
- mov r0, r9
- adds r2, r4, 0
- bl SetMonData
- mov r1, r8
- adds r1, 0x11
- mov r0, r9
- adds r2, r7, 0
- bl SetMonData
- adds r7, 0x1
- adds r4, 0x2
- movs r0, 0x1
- add r8, r0
- mov r0, r8
- cmp r0, 0x3
- ble _0803162A
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, _08031758 @ =gPlayerParty
- adds r4, r0
- adds r0, r4, 0
- movs r1, 0x15
- mov r2, r10
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x20
- ldr r2, [sp, 0x20]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x19
- ldr r2, [sp, 0x28]
- bl SetMonData
- ldrb r0, [r6, 0x14]
- lsls r0, 27
- lsrs r0, 27
- mov r1, sp
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x27
- mov r2, sp
- bl SetMonData
- mov r1, sp
- ldrh r0, [r6, 0x14]
- lsls r0, 22
- lsrs r0, 27
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x28
- mov r2, sp
- bl SetMonData
- mov r1, sp
- ldrb r0, [r6, 0x15]
- lsls r0, 25
- lsrs r0, 27
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x29
- mov r2, sp
- bl SetMonData
- mov r1, sp
- ldr r0, [r6, 0x14]
- lsls r0, 12
- lsrs r0, 27
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x2A
- mov r2, sp
- bl SetMonData
- mov r1, sp
- ldrh r0, [r6, 0x16]
- lsls r0, 23
- lsrs r0, 27
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x2B
- mov r2, sp
- bl SetMonData
- mov r1, sp
- ldrb r0, [r6, 0x17]
- lsls r0, 26
- lsrs r0, 27
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x2C
- mov r2, sp
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0
- ldr r2, [sp, 0x2C]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x37
- ldr r2, [sp, 0x30]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x38
- ldr r2, [sp, 0x1C]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x39
- ldr r2, [sp, 0x18]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x3A
- ldr r2, [sp, 0x24]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x3B
- ldr r2, [sp, 0x4]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x3C
- ldr r2, [sp, 0x8]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x3D
- ldr r2, [sp, 0xC]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x3E
- ldr r2, [sp, 0x10]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x3F
- ldr r2, [sp, 0x14]
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031758: .4byte gPlayerParty
-_0803175C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031774 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031778 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0xB
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031774: .4byte gPlayerParty
-_08031778: .4byte gActiveBattler
-_0803177C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031794 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031798 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0xC
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031794: .4byte gPlayerParty
-_08031798: .4byte gActiveBattler
-_0803179C:
- movs r0, 0
- mov r8, r0
- movs r0, 0xC
- adds r0, r3
- mov r9, r0
- movs r0, 0x64
- adds r1, r5, 0
- muls r1, r0
- ldr r0, _080317F0 @ =gPlayerParty
- adds r7, r1, r0
- adds r6, r3, 0
- adds r6, 0x8
- adds r4, r3, 0
-_080317B6:
- mov r1, r8
- adds r1, 0xD
- adds r0, r7, 0
- adds r2, r4, 0
- bl SetMonData
- mov r1, r8
- adds r1, 0x11
- adds r0, r7, 0
- adds r2, r6, 0
- bl SetMonData
- adds r6, 0x1
- adds r4, 0x2
- movs r0, 0x1
- add r8, r0
- mov r0, r8
- cmp r0, 0x3
- ble _080317B6
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080317F0 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x15
- mov r2, r9
- bl SetMonData
- b _08031E56
- .align 2, 0
-_080317F0: .4byte gPlayerParty
-_080317F4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031810 @ =gPlayerParty
- adds r0, r1
- ldr r3, _08031814 @ =gBattleBufferA
- ldr r1, _08031818 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r1, r3, 0x1
- adds r1, r2, r1
- ldrb r1, [r1]
- adds r1, 0x9
- b _08031898
- .align 2, 0
-_08031810: .4byte gPlayerParty
-_08031814: .4byte gBattleBufferA
-_08031818: .4byte gActiveBattler
-_0803181C:
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, _08031878 @ =gPlayerParty
- adds r4, r0
- ldr r5, _0803187C @ =gActiveBattler
- ldrb r2, [r5]
- lsls r2, 9
- adds r2, r7
- adds r0, r4, 0
- movs r1, 0x11
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x1
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x12
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x2
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x13
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x3
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x14
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x4
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x15
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031878: .4byte gPlayerParty
-_0803187C: .4byte gActiveBattler
-_08031880:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080318A4 @ =gPlayerParty
- adds r0, r1
- ldr r3, _080318A8 @ =gBattleBufferA
- ldr r1, _080318AC @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r1, r3, 0x1
- adds r1, r2, r1
- ldrb r1, [r1]
- adds r1, 0x8
-_08031898:
- adds r3, 0x3
- adds r2, r3
- bl SetMonData
- b _08031E56
- .align 2, 0
-_080318A4: .4byte gPlayerParty
-_080318A8: .4byte gBattleBufferA
-_080318AC: .4byte gActiveBattler
-_080318B0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080318C8 @ =gPlayerParty
- adds r0, r1
- ldr r1, _080318CC @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x1
- bl SetMonData
- b _08031E56
- .align 2, 0
-_080318C8: .4byte gPlayerParty
-_080318CC: .4byte gActiveBattler
-_080318D0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080318E8 @ =gPlayerParty
- adds r0, r1
- ldr r1, _080318EC @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x19
- bl SetMonData
- b _08031E56
- .align 2, 0
-_080318E8: .4byte gPlayerParty
-_080318EC: .4byte gActiveBattler
-_080318F0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031908 @ =gPlayerParty
- adds r0, r1
- ldr r1, _0803190C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x1A
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031908: .4byte gPlayerParty
-_0803190C: .4byte gActiveBattler
-_08031910:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031928 @ =gPlayerParty
- adds r0, r1
- ldr r1, _0803192C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x1B
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031928: .4byte gPlayerParty
-_0803192C: .4byte gActiveBattler
-_08031930:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031948 @ =gPlayerParty
- adds r0, r1
- ldr r1, _0803194C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x1C
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031948: .4byte gPlayerParty
-_0803194C: .4byte gActiveBattler
-_08031950:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031968 @ =gPlayerParty
- adds r0, r1
- ldr r1, _0803196C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x1D
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031968: .4byte gPlayerParty
-_0803196C: .4byte gActiveBattler
-_08031970:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031988 @ =gPlayerParty
- adds r0, r1
- ldr r1, _0803198C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x1E
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031988: .4byte gPlayerParty
-_0803198C: .4byte gActiveBattler
-_08031990:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080319A8 @ =gPlayerParty
- adds r0, r1
- ldr r1, _080319AC @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x1F
- bl SetMonData
- b _08031E56
- .align 2, 0
-_080319A8: .4byte gPlayerParty
-_080319AC: .4byte gActiveBattler
-_080319B0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080319C8 @ =gPlayerParty
- adds r0, r1
- ldr r1, _080319CC @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x20
- bl SetMonData
- b _08031E56
- .align 2, 0
-_080319C8: .4byte gPlayerParty
-_080319CC: .4byte gActiveBattler
-_080319D0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080319E8 @ =gPlayerParty
- adds r0, r1
- ldr r1, _080319EC @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x22
- bl SetMonData
- b _08031E56
- .align 2, 0
-_080319E8: .4byte gPlayerParty
-_080319EC: .4byte gActiveBattler
-_080319F0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031A08 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031A0C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x23
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031A08: .4byte gPlayerParty
-_08031A0C: .4byte gActiveBattler
-_08031A10:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031A28 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031A2C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x24
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031A28: .4byte gPlayerParty
-_08031A2C: .4byte gActiveBattler
-_08031A30:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031A48 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031A4C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x25
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031A48: .4byte gPlayerParty
-_08031A4C: .4byte gActiveBattler
-_08031A50:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031A68 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031A6C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x26
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031A68: .4byte gPlayerParty
-_08031A6C: .4byte gActiveBattler
-_08031A70:
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, _08031AD8 @ =gPlayerParty
- adds r4, r0
- ldr r5, _08031ADC @ =gActiveBattler
- ldrb r2, [r5]
- lsls r2, 9
- adds r2, r7
- adds r0, r4, 0
- movs r1, 0x27
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x1
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x28
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x2
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x29
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x3
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x2A
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x4
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x2B
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x5
- adds r2, r0
- adds r0, r4, 0
- b _08031B90
- .align 2, 0
-_08031AD8: .4byte gPlayerParty
-_08031ADC: .4byte gActiveBattler
-_08031AE0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031AF8 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031AFC @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x27
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031AF8: .4byte gPlayerParty
-_08031AFC: .4byte gActiveBattler
-_08031B00:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031B18 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031B1C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x28
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031B18: .4byte gPlayerParty
-_08031B1C: .4byte gActiveBattler
-_08031B20:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031B38 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031B3C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x29
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031B38: .4byte gPlayerParty
-_08031B3C: .4byte gActiveBattler
-_08031B40:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031B58 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031B5C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x2A
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031B58: .4byte gPlayerParty
-_08031B5C: .4byte gActiveBattler
-_08031B60:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031B78 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031B7C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x2B
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031B78: .4byte gPlayerParty
-_08031B7C: .4byte gActiveBattler
-_08031B80:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031B98 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031B9C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
-_08031B90:
- movs r1, 0x2C
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031B98: .4byte gPlayerParty
-_08031B9C: .4byte gActiveBattler
-_08031BA0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031BB8 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031BBC @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031BB8: .4byte gPlayerParty
-_08031BBC: .4byte gActiveBattler
-_08031BC0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031BD8 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031BDC @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x9
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031BD8: .4byte gPlayerParty
-_08031BDC: .4byte gActiveBattler
-_08031BE0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031BF8 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031BFC @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x37
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031BF8: .4byte gPlayerParty
-_08031BFC: .4byte gActiveBattler
-_08031C00:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031C18 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031C1C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x38
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031C18: .4byte gPlayerParty
-_08031C1C: .4byte gActiveBattler
-_08031C20:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031C38 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031C3C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x39
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031C38: .4byte gPlayerParty
-_08031C3C: .4byte gActiveBattler
-_08031C40:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031C58 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031C5C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x3A
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031C58: .4byte gPlayerParty
-_08031C5C: .4byte gActiveBattler
-_08031C60:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031C78 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031C7C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x3B
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031C78: .4byte gPlayerParty
-_08031C7C: .4byte gActiveBattler
-_08031C80:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031C98 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031C9C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x3C
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031C98: .4byte gPlayerParty
-_08031C9C: .4byte gActiveBattler
-_08031CA0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031CB8 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031CBC @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x3D
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031CB8: .4byte gPlayerParty
-_08031CBC: .4byte gActiveBattler
-_08031CC0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031CD8 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031CDC @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x3E
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031CD8: .4byte gPlayerParty
-_08031CDC: .4byte gActiveBattler
-_08031CE0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031CF8 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031CFC @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x3F
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031CF8: .4byte gPlayerParty
-_08031CFC: .4byte gActiveBattler
-_08031D00:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031D18 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031D1C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x16
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031D18: .4byte gPlayerParty
-_08031D1C: .4byte gActiveBattler
-_08031D20:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031D38 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031D3C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x17
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031D38: .4byte gPlayerParty
-_08031D3C: .4byte gActiveBattler
-_08031D40:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031D58 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031D5C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x18
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031D58: .4byte gPlayerParty
-_08031D5C: .4byte gActiveBattler
-_08031D60:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031D78 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031D7C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x21
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031D78: .4byte gPlayerParty
-_08031D7C: .4byte gActiveBattler
-_08031D80:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031D98 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031D9C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x2F
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031D98: .4byte gPlayerParty
-_08031D9C: .4byte gActiveBattler
-_08031DA0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031DB8 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031DBC @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x30
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031DB8: .4byte gPlayerParty
-_08031DBC: .4byte gActiveBattler
-_08031DC0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031DD8 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031DDC @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x32
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031DD8: .4byte gPlayerParty
-_08031DDC: .4byte gActiveBattler
-_08031DE0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031DF8 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031DFC @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x33
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031DF8: .4byte gPlayerParty
-_08031DFC: .4byte gActiveBattler
-_08031E00:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031E18 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031E1C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x34
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031E18: .4byte gPlayerParty
-_08031E1C: .4byte gActiveBattler
-_08031E20:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031E38 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031E3C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x35
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031E38: .4byte gPlayerParty
-_08031E3C: .4byte gActiveBattler
-_08031E40:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031E80 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031E84 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x36
- bl SetMonData
-_08031E56:
- ldr r2, _08031E88 @ =gBattlerPartyIndexes
- ldr r0, _08031E84 @ =gActiveBattler
- ldrb r1, [r0]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, _08031E80 @ =gPlayerParty
- adds r0, r2
- bl HandleLowHpMusicChange
- add sp, 0x34
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08031E80: .4byte gPlayerParty
-_08031E84: .4byte gActiveBattler
-_08031E88: .4byte gBattlerPartyIndexes
- thumb_func_end SetPlayerMonData
-
- thumb_func_start PlayerHandleSetRawMonData
-PlayerHandleSetRawMonData: @ 8031E8C
- push {r4-r7,lr}
- ldr r1, _08031EF0 @ =gBattlerPartyIndexes
- ldr r7, _08031EF4 @ =gActiveBattler
- ldrb r2, [r7]
- lsls r0, r2, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- adds r3, r1, 0
- muls r3, r0
- ldr r4, _08031EF8 @ =gBattleBufferA
- lsls r2, 9
- adds r0, r4, 0x1
- adds r0, r2, r0
- ldrb r0, [r0]
- ldr r1, _08031EFC @ =gPlayerParty
- adds r0, r1
- adds r5, r3, r0
- movs r3, 0
- adds r0, r4, 0x2
- adds r2, r0
- ldrb r2, [r2]
- cmp r3, r2
- bcs _08031EE4
- adds r6, r4, 0
- adds r2, r7, 0
- adds r4, r0, 0
-_08031EC2:
- adds r1, r5, r3
- ldrb r0, [r2]
- lsls r0, 9
- adds r0, 0x3
- adds r0, r3, r0
- adds r0, r6
- ldrb r0, [r0]
- strb r0, [r1]
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- ldrb r0, [r2]
- lsls r0, 9
- adds r0, r4
- ldrb r0, [r0]
- cmp r3, r0
- bcc _08031EC2
-_08031EE4:
- bl PlayerBufferExecCompleted
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08031EF0: .4byte gBattlerPartyIndexes
-_08031EF4: .4byte gActiveBattler
-_08031EF8: .4byte gBattleBufferA
-_08031EFC: .4byte gPlayerParty
- thumb_func_end PlayerHandleSetRawMonData
-
- thumb_func_start PlayerHandleLoadMonSprite
-PlayerHandleLoadMonSprite: @ 8031F00
- push {r4,lr}
- ldr r2, _08031F4C @ =gBattlerPartyIndexes
- ldr r4, _08031F50 @ =gActiveBattler
- ldrb r1, [r4]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, _08031F54 @ =gPlayerParty
- adds r0, r2
- bl BattleLoadPlayerMonSpriteGfx
- ldr r2, _08031F58 @ =gSprites
- ldr r0, _08031F5C @ =gBattlerSpriteIds
- ldrb r3, [r4]
- adds r0, r3, r0
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- lsls r3, 4
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r3
- strb r0, [r1, 0x5]
- ldr r1, _08031F60 @ =gBattlerControllerFuncs
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08031F64 @ =CompleteOnBankSpritePosX_0
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08031F4C: .4byte gBattlerPartyIndexes
-_08031F50: .4byte gActiveBattler
-_08031F54: .4byte gPlayerParty
-_08031F58: .4byte gSprites
-_08031F5C: .4byte gBattlerSpriteIds
-_08031F60: .4byte gBattlerControllerFuncs
-_08031F64: .4byte CompleteOnBankSpritePosX_0
- thumb_func_end PlayerHandleLoadMonSprite
-
- thumb_func_start PlayerHandleSwitchInAnim
-PlayerHandleSwitchInAnim: @ 8031F68
- push {r4-r6,lr}
- ldr r5, _08031FD4 @ =gActiveBattler
- ldrb r0, [r5]
- ldr r4, _08031FD8 @ =gBattleBufferA
- lsls r1, r0, 9
- adds r6, r4, 0x2
- adds r1, r6
- ldrb r1, [r1]
- bl ClearTemporarySpeciesSpriteData
- ldr r2, _08031FDC @ =gBattlerPartyIndexes
- ldrb r0, [r5]
- lsls r1, r0, 1
- adds r1, r2
- lsls r0, 9
- adds r4, 0x1
- adds r0, r4
- ldrb r0, [r0]
- movs r4, 0
- strh r0, [r1]
- ldrb r1, [r5]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, _08031FE0 @ =gPlayerParty
- adds r0, r2
- bl BattleLoadPlayerMonSpriteGfx
- ldr r1, _08031FE4 @ =gActionSelectionCursor
- ldrb r0, [r5]
- adds r0, r1
- strb r4, [r0]
- ldr r1, _08031FE8 @ =gMoveSelectionCursor
- ldrb r0, [r5]
- adds r0, r1
- strb r4, [r0]
- ldrb r0, [r5]
- lsls r1, r0, 9
- adds r1, r6
- ldrb r1, [r1]
- bl sub_8031FF4
- ldr r1, _08031FEC @ =gBattlerControllerFuncs
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08031FF0 @ =sub_802FD18
- str r1, [r0]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08031FD4: .4byte gActiveBattler
-_08031FD8: .4byte gBattleBufferA
-_08031FDC: .4byte gBattlerPartyIndexes
-_08031FE0: .4byte gPlayerParty
-_08031FE4: .4byte gActionSelectionCursor
-_08031FE8: .4byte gMoveSelectionCursor
-_08031FEC: .4byte gBattlerControllerFuncs
-_08031FF0: .4byte sub_802FD18
- thumb_func_end PlayerHandleSwitchInAnim
-
- thumb_func_start sub_8031FF4
-sub_8031FF4: @ 8031FF4
- push {r4-r6,lr}
- mov r6, r10
- mov r5, r9
- mov r4, r8
- push {r4-r6}
- adds r6, r0, 0
- lsls r6, 24
- lsrs r6, 24
- lsls r1, 24
- lsrs r1, 24
- adds r0, r6, 0
- bl ClearTemporarySpeciesSpriteData
- ldr r0, _08032138 @ =gBattlerPartyIndexes
- lsls r2, r6, 1
- adds r2, r0
- ldr r0, _0803213C @ =gBattleBufferA
- lsls r1, r6, 9
- adds r0, 0x1
- adds r1, r0
- ldrb r0, [r1]
- strh r0, [r2]
- ldrh r1, [r2]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08032140 @ =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- mov r8, r0
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- ldr r0, _08032144 @ =sub_8033E3C
- bl CreateInvisibleSpriteWithCallback
- ldr r1, _08032148 @ =gUnknown_3004FFC
- mov r9, r1
- add r9, r6
- mov r1, r9
- strb r0, [r1]
- adds r0, r6, 0
- bl GetBattlerPosition
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- mov r0, r8
- bl SetMultiuseSpriteTemplateToPokemon
- ldr r0, _0803214C @ =gMultiuseSpriteTemplate
- mov r10, r0
- adds r0, r6, 0
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- adds r0, r6, 0
- bl GetBattlerSpriteDefault_Y
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r6, 0
- bl GetBattlerSpriteSubpriority
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- mov r0, r10
- adds r1, r5, 0
- adds r2, r4, 0
- bl CreateSprite
- ldr r4, _08032150 @ =gBattlerSpriteIds
- adds r4, r6, r4
- strb r0, [r4]
- ldr r5, _08032154 @ =gSprites
- mov r0, r9
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldrb r1, [r4]
- strh r1, [r0, 0x30]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r6, [r0, 0x2E]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- mov r1, r8
- strh r1, [r0, 0x32]
- ldrb r0, [r4]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- lsls r3, r6, 4
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r3
- strb r0, [r1, 0x5]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, _08032158 @ =gBattleMonForms
- adds r6, r1
- ldrb r1, [r6]
- bl StartSpriteAnim
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r5, 0
- adds r1, 0x1C
- adds r0, r1
- ldr r1, _0803215C @ =SpriteCallbackDummy
- str r1, [r0]
- movs r0, 0
- movs r1, 0xFF
- bl DoPokeballSendOutAnimation
- mov r1, r9
- ldrb r2, [r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r5
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r1, 0x2E]
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08032138: .4byte gBattlerPartyIndexes
-_0803213C: .4byte gBattleBufferA
-_08032140: .4byte gPlayerParty
-_08032144: .4byte sub_8033E3C
-_08032148: .4byte gUnknown_3004FFC
-_0803214C: .4byte gMultiuseSpriteTemplate
-_08032150: .4byte gBattlerSpriteIds
-_08032154: .4byte gSprites
-_08032158: .4byte gBattleMonForms
-_0803215C: .4byte SpriteCallbackDummy
- thumb_func_end sub_8031FF4
-
- thumb_func_start PlayerHandleReturnPokeToBall
-PlayerHandleReturnPokeToBall: @ 8032160
- push {r4-r6,lr}
- ldr r1, _08032194 @ =gBattleBufferA
- ldr r6, _08032198 @ =gActiveBattler
- ldrb r2, [r6]
- lsls r0, r2, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r3, [r0]
- cmp r3, 0
- bne _080321A8
- ldr r0, _0803219C @ =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r1, [r0, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- strb r3, [r0, 0x4]
- ldr r1, _080321A0 @ =gBattlerControllerFuncs
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080321A4 @ =sub_80321F0
- str r1, [r0]
- b _080321DE
- .align 2, 0
-_08032194: .4byte gBattleBufferA
-_08032198: .4byte gActiveBattler
-_0803219C: .4byte gBattleSpritesDataPtr
-_080321A0: .4byte gBattlerControllerFuncs
-_080321A4: .4byte sub_80321F0
-_080321A8:
- ldr r5, _080321E4 @ =gBattlerSpriteIds
- adds r0, r2, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, _080321E8 @ =gSprites
- adds r0, r4
- bl FreeSpriteOamMatrix
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl DestroySprite
- ldr r1, _080321EC @ =gHealthboxSpriteIds
- ldrb r0, [r6]
- adds r0, r1
- ldrb r0, [r0]
- bl SetHealthboxSpriteInvisible
- bl PlayerBufferExecCompleted
-_080321DE:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080321E4: .4byte gBattlerSpriteIds
-_080321E8: .4byte gSprites
-_080321EC: .4byte gHealthboxSpriteIds
- thumb_func_end PlayerHandleReturnPokeToBall
-
- thumb_func_start sub_80321F0
-sub_80321F0: @ 80321F0
- push {r4-r6,lr}
- ldr r6, _08032210 @ =gBattleSpritesDataPtr
- ldr r4, [r6]
- ldr r5, _08032214 @ =gActiveBattler
- ldrb r2, [r5]
- ldr r1, [r4, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r3, r0, r1
- ldrb r0, [r3, 0x4]
- cmp r0, 0
- beq _08032218
- cmp r0, 0x1
- beq _08032246
- b _0803226E
- .align 2, 0
-_08032210: .4byte gBattleSpritesDataPtr
-_08032214: .4byte gActiveBattler
-_08032218:
- ldr r1, [r4]
- lsls r0, r2, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _08032232
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x5
- bl InitAndLaunchSpecialAnimation
-_08032232:
- ldr r0, [r6]
- ldrb r1, [r5]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x1
- strb r1, [r0, 0x4]
- b _0803226E
-_08032246:
- ldrb r1, [r3]
- movs r0, 0x40
- ands r0, r1
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _0803226E
- strb r0, [r3, 0x4]
- ldrb r2, [r5]
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x1
- bl InitAndLaunchSpecialAnimation
- ldr r1, _08032274 @ =gBattlerControllerFuncs
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08032278 @ =sub_80305A0
- str r1, [r0]
-_0803226E:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08032274: .4byte gBattlerControllerFuncs
-_08032278: .4byte sub_80305A0
- thumb_func_end sub_80321F0
-
- thumb_func_start sub_803227C
-sub_803227C: @ 803227C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r0, _080322A4 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _080322AC
- ldr r0, _080322A8 @ =gActiveBattler
- ldrb r0, [r0]
- bl GetBattlerPosition
- movs r1, 0x2
- ands r1, r0
- movs r7, 0x20
- cmp r1, 0
- beq _080322AE
- movs r7, 0x5A
- b _080322AE
- .align 2, 0
-_080322A4: .4byte gBattleTypeFlags
-_080322A8: .4byte gActiveBattler
-_080322AC:
- movs r7, 0x50
-_080322AE:
- ldr r0, _08032320 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0803233C
- bl GetMultiplayerId
- ldr r5, _08032324 @ =gLinkPlayers
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r5
- movs r4, 0xFF
- ldrb r0, [r1]
- cmp r0, 0x2
- beq _08032306
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r5
- ldrh r1, [r1]
- adds r0, r4, 0
- ands r0, r1
- cmp r0, 0x1
- beq _08032306
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r5
- ldrh r0, [r1]
- ands r4, r0
- cmp r4, 0x3
- bne _08032328
-_08032306:
- bl GetMultiplayerId
- ldr r2, _08032324 @ =gLinkPlayers
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r0, [r1, 0x13]
- adds r4, r0, 0x2
- b _08032342
- .align 2, 0
-_08032320: .4byte gBattleTypeFlags
-_08032324: .4byte gLinkPlayers
-_08032328:
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r5
- ldrb r4, [r1, 0x13]
- b _08032342
-_0803233C:
- ldr r0, _08032400 @ =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r4, [r0, 0x8]
-_08032342:
- ldr r5, _08032404 @ =gActiveBattler
- ldrb r1, [r5]
- adds r0, r4, 0
- bl DecompressTrainerBackPalette
- ldrb r0, [r5]
- bl GetBattlerPosition
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl SetMultiuseSpriteTemplateToTrainerBack
- ldr r6, _08032408 @ =gMultiuseSpriteTemplate
- mov r8, r7
- ldr r0, _0803240C @ =gTrainerBackPicCoords
- lsls r4, 2
- adds r4, r0
- ldrb r0, [r4]
- movs r4, 0x8
- subs r4, r0
- lsls r4, 18
- movs r0, 0xA0
- lsls r0, 15
- adds r4, r0
- asrs r4, 16
- ldrb r0, [r5]
- bl GetBattlerSpriteSubpriority
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- adds r0, r6, 0
- mov r1, r8
- adds r2, r4, 0
- bl CreateSprite
- ldr r6, _08032410 @ =gBattlerSpriteIds
- ldrb r1, [r5]
- adds r1, r6
- strb r0, [r1]
- ldr r4, _08032414 @ =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, _08032418 @ =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, _0803241C @ =sub_8033EEC
- str r1, [r0]
- ldr r1, _08032420 @ =gBattlerControllerFuncs
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08032424 @ =sub_802F730
- str r1, [r0]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08032400: .4byte gSaveBlock2Ptr
-_08032404: .4byte gActiveBattler
-_08032408: .4byte gMultiuseSpriteTemplate
-_0803240C: .4byte gTrainerBackPicCoords
-_08032410: .4byte gBattlerSpriteIds
-_08032414: .4byte gSprites
-_08032418: .4byte 0x0000fffe
-_0803241C: .4byte sub_8033EEC
-_08032420: .4byte gBattlerControllerFuncs
-_08032424: .4byte sub_802F730
- thumb_func_end sub_803227C
-
- thumb_func_start sub_8032428
-sub_8032428: @ 8032428
- push {r4-r6,lr}
- ldr r0, _0803249C @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080324B8
- bl GetMultiplayerId
- ldr r5, _080324A0 @ =gLinkPlayers
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r5
- movs r4, 0xFF
- ldrb r0, [r1]
- cmp r0, 0x2
- beq _08032482
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r5
- ldrh r1, [r1]
- adds r0, r4, 0
- ands r0, r1
- cmp r0, 0x1
- beq _08032482
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r5
- ldrh r0, [r1]
- ands r4, r0
- cmp r4, 0x3
- bne _080324A4
-_08032482:
- bl GetMultiplayerId
- ldr r2, _080324A0 @ =gLinkPlayers
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r0, [r1, 0x13]
- adds r4, r0, 0x2
- b _080324BE
- .align 2, 0
-_0803249C: .4byte gBattleTypeFlags
-_080324A0: .4byte gLinkPlayers
-_080324A4:
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r5
- ldrb r4, [r1, 0x13]
- b _080324BE
-_080324B8:
- ldr r0, _08032568 @ =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r4, [r0, 0x8]
-_080324BE:
- ldr r5, _0803256C @ =gActiveBattler
- ldrb r1, [r5]
- adds r0, r4, 0
- bl DecompressTrainerBackPalette
- ldrb r0, [r5]
- bl GetBattlerPosition
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl SetMultiuseSpriteTemplateToTrainerBack
- ldr r0, _08032570 @ =gMultiuseSpriteTemplate
- ldr r1, _08032574 @ =gTrainerBackPicCoords
- lsls r4, 2
- adds r4, r1
- ldrb r1, [r4]
- movs r2, 0x8
- subs r2, r1
- lsls r2, 18
- movs r1, 0xA0
- lsls r1, 15
- adds r2, r1
- asrs r2, 16
- movs r1, 0x50
- movs r3, 0x1E
- bl CreateSprite
- ldr r6, _08032578 @ =gBattlerSpriteIds
- ldrb r1, [r5]
- adds r1, r6
- strb r0, [r1]
- ldr r4, _0803257C @ =gSprites
- ldrb r3, [r5]
- adds r0, r3, r6
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- lsls r3, 4
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r3
- strb r0, [r1, 0x5]
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldr r1, _08032580 @ =0x0000ffa0
- strh r1, [r0, 0x24]
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0x2
- strh r1, [r0, 0x2E]
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r4, 0x1C
- adds r0, r4
- ldr r1, _08032584 @ =sub_8033EEC
- str r1, [r0]
- ldr r1, _08032588 @ =gBattlerControllerFuncs
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0803258C @ =sub_802F768
- str r1, [r0]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08032568: .4byte gSaveBlock2Ptr
-_0803256C: .4byte gActiveBattler
-_08032570: .4byte gMultiuseSpriteTemplate
-_08032574: .4byte gTrainerBackPicCoords
-_08032578: .4byte gBattlerSpriteIds
-_0803257C: .4byte gSprites
-_08032580: .4byte 0x0000ffa0
-_08032584: .4byte sub_8033EEC
-_08032588: .4byte gBattlerControllerFuncs
-_0803258C: .4byte sub_802F768
- thumb_func_end sub_8032428
-
- thumb_func_start PlayerHandleTrainerSlideBack
-PlayerHandleTrainerSlideBack: @ 8032590
- push {r4-r6,lr}
- ldr r5, _08032630 @ =gBattlerSpriteIds
- ldr r6, _08032634 @ =gActiveBattler
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, _08032638 @ =gSprites
- adds r0, r4
- bl SetSpritePrimaryCoordsFromSecondaryCoords
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0x32
- strh r1, [r0, 0x2E]
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldr r1, _0803263C @ =0x0000ffd8
- strh r1, [r0, 0x32]
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrh r1, [r0, 0x22]
- strh r1, [r0, 0x36]
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r4, 0
- adds r1, 0x1C
- adds r0, r1
- ldr r1, _08032640 @ =StartAnimLinearTranslation
- str r1, [r0]
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldr r1, _08032644 @ =SpriteCallbackDummy
- bl StoreSpriteCallbackInData6
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0x1
- bl StartSpriteAnim
- ldr r1, _08032648 @ =gBattlerControllerFuncs
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0803264C @ =sub_802F7A0
- str r1, [r0]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08032630: .4byte gBattlerSpriteIds
-_08032634: .4byte gActiveBattler
-_08032638: .4byte gSprites
-_0803263C: .4byte 0x0000ffd8
-_08032640: .4byte StartAnimLinearTranslation
-_08032644: .4byte SpriteCallbackDummy
-_08032648: .4byte gBattlerControllerFuncs
-_0803264C: .4byte sub_802F7A0
- thumb_func_end PlayerHandleTrainerSlideBack
-
- thumb_func_start sub_8032650
-sub_8032650: @ 8032650
- push {r4-r6,lr}
- ldr r6, _0803269C @ =gBattleSpritesDataPtr
- ldr r4, [r6]
- ldr r5, _080326A0 @ =gActiveBattler
- ldrb r2, [r5]
- ldr r0, [r4, 0x4]
- lsls r1, r2, 1
- adds r1, r2
- lsls r1, 2
- adds r3, r1, r0
- ldrb r0, [r3, 0x4]
- cmp r0, 0
- bne _080326A4
- ldr r1, [r4]
- lsls r0, r2, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _08032684
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x5
- bl InitAndLaunchSpecialAnimation
-_08032684:
- ldr r0, [r6]
- ldrb r1, [r5]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x4]
- adds r1, 0x1
- strb r1, [r0, 0x4]
- b _0803271A
- .align 2, 0
-_0803269C: .4byte gBattleSpritesDataPtr
-_080326A0: .4byte gActiveBattler
-_080326A4:
- ldrb r1, [r3]
- movs r0, 0x40
- ands r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _0803271A
- strb r4, [r3, 0x4]
- ldr r2, _08032720 @ =gBattlerPartyIndexes
- ldrb r1, [r5]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, _08032724 @ =gPlayerParty
- adds r0, r2
- bl HandleLowHpMusicChange
- movs r1, 0x40
- negs r1, r1
- movs r0, 0x10
- bl PlaySE12WithPanning
- ldr r2, _08032728 @ =gSprites
- ldr r3, _0803272C @ =gBattlerSpriteIds
- ldrb r0, [r5]
- adds r0, r3
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- strh r4, [r0, 0x30]
- ldrb r0, [r5]
- adds r0, r3
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x5
- strh r1, [r0, 0x32]
- ldrb r0, [r5]
- adds r0, r3
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, _08032730 @ =sub_8012110
- str r1, [r0]
- ldr r1, _08032734 @ =gBattlerControllerFuncs
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08032738 @ =sub_8030538
- str r1, [r0]
-_0803271A:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08032720: .4byte gBattlerPartyIndexes
-_08032724: .4byte gPlayerParty
-_08032728: .4byte gSprites
-_0803272C: .4byte gBattlerSpriteIds
-_08032730: .4byte sub_8012110
-_08032734: .4byte gBattlerControllerFuncs
-_08032738: .4byte sub_8030538
- thumb_func_end sub_8032650
-
- thumb_func_start PlayerHandlePaletteFade
-PlayerHandlePaletteFade: @ 803273C
- push {lr}
- sub sp, 0x4
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r1, 0x2
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- bl PlayerBufferExecCompleted
- add sp, 0x4
- pop {r0}
- bx r0
- thumb_func_end PlayerHandlePaletteFade
-
- thumb_func_start sub_803275C
-sub_803275C: @ 803275C
- push {r4,r5,lr}
- ldr r0, _0803279C @ =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r1, [r0, 0x8]
- movs r0, 0x4
- strb r0, [r1, 0x8]
- ldr r1, _080327A0 @ =gDoingBattleAnim
- movs r0, 0x1
- strb r0, [r1]
- ldr r5, _080327A4 @ =gActiveBattler
- ldrb r4, [r5]
- movs r0, 0x1
- bl GetBattlerAtPosition
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r1, r4, 0
- movs r3, 0x3
- bl InitAndLaunchSpecialAnimation
- ldr r1, _080327A8 @ =gBattlerControllerFuncs
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080327AC @ =CompleteOnSpecialAnimDone
- str r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0803279C: .4byte gBattleSpritesDataPtr
-_080327A0: .4byte gDoingBattleAnim
-_080327A4: .4byte gActiveBattler
-_080327A8: .4byte gBattlerControllerFuncs
-_080327AC: .4byte CompleteOnSpecialAnimDone
- thumb_func_end sub_803275C
-
- thumb_func_start PlayerHandleBallThrowAnim
-PlayerHandleBallThrowAnim: @ 80327B0
- push {r4,r5,lr}
- ldr r1, _080327F8 @ =gBattleBufferA
- ldr r5, _080327FC @ =gActiveBattler
- ldrb r0, [r5]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r1, [r0]
- ldr r0, _08032800 @ =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r0, [r0, 0x8]
- strb r1, [r0, 0x8]
- ldr r1, _08032804 @ =gDoingBattleAnim
- movs r0, 0x1
- strb r0, [r1]
- ldrb r4, [r5]
- movs r0, 0x1
- bl GetBattlerAtPosition
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r1, r4, 0
- movs r3, 0x3
- bl InitAndLaunchSpecialAnimation
- ldr r1, _08032808 @ =gBattlerControllerFuncs
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0803280C @ =CompleteOnSpecialAnimDone
- str r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080327F8: .4byte gBattleBufferA
-_080327FC: .4byte gActiveBattler
-_08032800: .4byte gBattleSpritesDataPtr
-_08032804: .4byte gDoingBattleAnim
-_08032808: .4byte gBattlerControllerFuncs
-_0803280C: .4byte CompleteOnSpecialAnimDone
- thumb_func_end PlayerHandleBallThrowAnim
-
- thumb_func_start PlayerHandlePause
-PlayerHandlePause: @ 8032810
- push {lr}
- ldr r1, _08032838 @ =gBattleBufferA
- ldr r0, _0803283C @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _0803282E
-_08032824:
- subs r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _08032824
-_0803282E:
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_08032838: .4byte gBattleBufferA
-_0803283C: .4byte gActiveBattler
- thumb_func_end PlayerHandlePause
-
- thumb_func_start PlayerHandleMoveAnimation
-PlayerHandleMoveAnimation: @ 8032840
- push {r4-r6,lr}
- ldr r6, _08032924 @ =gActiveBattler
- ldrb r0, [r6]
- bl mplay_80342A4
- lsls r0, 24
- cmp r0, 0
- beq _08032852
- b _08032966
-_08032852:
- ldr r0, _08032928 @ =gBattleBufferA
- mov r12, r0
- ldrb r2, [r6]
- lsls r2, 9
- adds r0, 0x1
- adds r0, r2, r0
- ldrb r0, [r0]
- mov r1, r12
- adds r1, 0x2
- adds r1, r2, r1
- ldrb r1, [r1]
- lsls r1, 8
- orrs r0, r1
- ldr r5, _0803292C @ =gAnimMoveTurn
- mov r1, r12
- adds r1, 0x3
- adds r2, r1
- ldrb r1, [r2]
- strb r1, [r5]
- ldr r4, _08032930 @ =gAnimMovePower
- ldrb r2, [r6]
- lsls r2, 9
- mov r1, r12
- adds r1, 0x4
- adds r1, r2, r1
- ldrb r3, [r1]
- mov r1, r12
- adds r1, 0x5
- adds r2, r1
- ldrb r1, [r2]
- lsls r1, 8
- orrs r3, r1
- strh r3, [r4]
- ldr r4, _08032934 @ =gAnimMoveDmg
- ldrb r2, [r6]
- lsls r2, 9
- mov r1, r12
- adds r1, 0x6
- adds r1, r2, r1
- ldrb r3, [r1]
- mov r1, r12
- adds r1, 0x7
- adds r1, r2, r1
- ldrb r1, [r1]
- lsls r1, 8
- orrs r3, r1
- mov r1, r12
- adds r1, 0x8
- adds r1, r2, r1
- ldrb r1, [r1]
- lsls r1, 16
- orrs r3, r1
- mov r1, r12
- adds r1, 0x9
- adds r2, r1
- ldrb r1, [r2]
- lsls r1, 24
- orrs r3, r1
- str r3, [r4]
- ldr r3, _08032938 @ =gAnimFriendship
- ldrb r1, [r6]
- lsls r1, 9
- mov r2, r12
- adds r2, 0xA
- adds r1, r2
- ldrb r1, [r1]
- strb r1, [r3]
- ldr r4, _0803293C @ =gWeatherMoveAnim
- ldrb r2, [r6]
- lsls r2, 9
- mov r1, r12
- adds r1, 0xC
- adds r1, r2, r1
- ldrb r3, [r1]
- mov r1, r12
- adds r1, 0xD
- adds r2, r1
- ldrb r1, [r2]
- lsls r1, 8
- orrs r3, r1
- strh r3, [r4]
- ldr r3, _08032940 @ =gAnimDisableStructPtr
- ldrb r2, [r6]
- lsls r2, 9
- mov r1, r12
- adds r1, 0x10
- adds r2, r1
- str r2, [r3]
- ldr r3, _08032944 @ =gTransformedPersonalities
- ldrb r1, [r6]
- lsls r1, 2
- adds r1, r3
- ldr r2, [r2]
- str r2, [r1]
- ldrb r1, [r5]
- bl IsMoveWithoutAnimation
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0
- beq _08032948
- bl PlayerBufferExecCompleted
- b _08032966
- .align 2, 0
-_08032924: .4byte gActiveBattler
-_08032928: .4byte gBattleBufferA
-_0803292C: .4byte gAnimMoveTurn
-_08032930: .4byte gAnimMovePower
-_08032934: .4byte gAnimMoveDmg
-_08032938: .4byte gAnimFriendship
-_0803293C: .4byte gWeatherMoveAnim
-_08032940: .4byte gAnimDisableStructPtr
-_08032944: .4byte gTransformedPersonalities
-_08032948:
- ldr r0, _0803296C @ =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldrb r1, [r6]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- strb r3, [r0, 0x4]
- ldr r1, _08032970 @ =gBattlerControllerFuncs
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08032974 @ =sub_8032978
- str r1, [r0]
-_08032966:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0803296C: .4byte gBattleSpritesDataPtr
-_08032970: .4byte gBattlerControllerFuncs
-_08032974: .4byte sub_8032978
- thumb_func_end PlayerHandleMoveAnimation
-
- thumb_func_start sub_8032978
-sub_8032978: @ 8032978
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r2, _080329C4 @ =gBattleBufferA
- ldr r6, _080329C8 @ =gActiveBattler
- ldrb r3, [r6]
- lsls r1, r3, 9
- adds r0, r2, 0x1
- mov r10, r0
- adds r0, r1, r0
- ldrb r4, [r0]
- adds r5, r2, 0x2
- mov r9, r5
- adds r0, r1, r5
- ldrb r0, [r0]
- lsls r0, 8
- orrs r4, r0
- adds r2, 0xB
- adds r1, r2
- ldrb r1, [r1]
- mov r8, r1
- ldr r7, _080329CC @ =gBattleSpritesDataPtr
- ldr r5, [r7]
- ldr r1, [r5, 0x4]
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r2, [r0, 0x4]
- cmp r2, 0x1
- beq _08032A10
- cmp r2, 0x1
- bgt _080329D0
- cmp r2, 0
- beq _080329DA
- b _08032AEC
- .align 2, 0
-_080329C4: .4byte gBattleBufferA
-_080329C8: .4byte gActiveBattler
-_080329CC: .4byte gBattleSpritesDataPtr
-_080329D0:
- cmp r2, 0x2
- beq _08032A3A
- cmp r2, 0x3
- beq _08032AB0
- b _08032AEC
-_080329DA:
- ldr r1, [r5]
- lsls r0, r3, 2
- adds r1, r0, r1
- ldrb r2, [r1]
- movs r0, 0xC
- ands r0, r2
- cmp r0, 0x4
- bne _080329FC
- movs r0, 0x8
- orrs r0, r2
- strb r0, [r1]
- ldrb r2, [r6]
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x5
- bl InitAndLaunchSpecialAnimation
-_080329FC:
- ldr r0, [r7]
- ldrb r1, [r6]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x1
- strb r1, [r0, 0x4]
- b _08032AEC
-_08032A10:
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _08032AEC
- movs r0, 0
- bl sub_8035450
- adds r0, r4, 0
- bl DoMoveAnim
- ldr r0, [r7]
- ldrb r1, [r6]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x2
- strb r1, [r0, 0x4]
- b _08032AEC
-_08032A3A:
- ldr r0, _08032AA0 @ =gAnimScriptCallback
- ldr r0, [r0]
- bl _call_via_r0
- ldr r0, _08032AA4 @ =gAnimScriptActive
- ldrb r0, [r0]
- cmp r0, 0
- bne _08032AEC
- movs r0, 0x1
- bl sub_8035450
- ldr r0, [r7]
- ldrb r2, [r6]
- ldr r1, [r0]
- lsls r0, r2, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _08032A88
- mov r0, r8
- cmp r0, 0x1
- bhi _08032A88
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x6
- bl InitAndLaunchSpecialAnimation
- ldr r0, [r7]
- ldrb r1, [r6]
- ldr r0, [r0]
- lsls r1, 2
- adds r1, r0
- ldrb r2, [r1]
- movs r0, 0x9
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
-_08032A88:
- ldr r0, _08032AA8 @ =gBattleSpritesDataPtr
- ldr r2, [r0]
- ldr r0, _08032AAC @ =gActiveBattler
- ldrb r1, [r0]
- ldr r2, [r2, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x3
- strb r1, [r0, 0x4]
- b _08032AEC
- .align 2, 0
-_08032AA0: .4byte gAnimScriptCallback
-_08032AA4: .4byte gAnimScriptActive
-_08032AA8: .4byte gBattleSpritesDataPtr
-_08032AAC: .4byte gActiveBattler
-_08032AB0:
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _08032AEC
- bl CopyAllBattleSpritesInvisibilities
- ldrb r0, [r6]
- lsls r2, r0, 9
- mov r3, r10
- adds r1, r2, r3
- ldrb r1, [r1]
- add r2, r9
- ldrb r2, [r2]
- lsls r2, 8
- orrs r1, r2
- bl TrySetBehindSubstituteSpriteBit
- ldr r0, [r7]
- ldrb r1, [r6]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- strb r4, [r0, 0x4]
- bl PlayerBufferExecCompleted
-_08032AEC:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8032978
-
- thumb_func_start sub_8032AFC
-sub_8032AFC: @ 8032AFC
- push {r4,lr}
- ldr r0, _08032B30 @ =gBattle_BG0_X
- movs r1, 0
- strh r1, [r0]
- ldr r0, _08032B34 @ =gBattle_BG0_Y
- strh r1, [r0]
- ldr r0, _08032B38 @ =gActiveBattler
- ldrb r4, [r0]
- lsls r4, 9
- ldr r0, _08032B3C @ =gUnknown_2022BC6
- adds r4, r0
- ldrh r0, [r4]
- bl BufferStringBattle
- ldrh r0, [r4]
- bl sub_80D89B0
- lsls r0, 24
- cmp r0, 0
- beq _08032B44
- ldr r0, _08032B40 @ =gDisplayedStringBattle
- movs r1, 0x40
- bl BattlePutTextOnWindow
- b _08032B4C
- .align 2, 0
-_08032B30: .4byte gBattle_BG0_X
-_08032B34: .4byte gBattle_BG0_Y
-_08032B38: .4byte gActiveBattler
-_08032B3C: .4byte gUnknown_2022BC6
-_08032B40: .4byte gDisplayedStringBattle
-_08032B44:
- ldr r0, _08032B60 @ =gDisplayedStringBattle
- movs r1, 0
- bl BattlePutTextOnWindow
-_08032B4C:
- ldr r1, _08032B64 @ =gBattlerControllerFuncs
- ldr r0, _08032B68 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08032B6C @ =sub_8030610
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08032B60: .4byte gDisplayedStringBattle
-_08032B64: .4byte gBattlerControllerFuncs
-_08032B68: .4byte gActiveBattler
-_08032B6C: .4byte sub_8030610
- thumb_func_end sub_8032AFC
-
- thumb_func_start sub_8032B70
-sub_8032B70: @ 8032B70
- push {lr}
- ldr r0, _08032B88 @ =gActiveBattler
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _08032B8C
- bl sub_8032AFC
- b _08032B90
- .align 2, 0
-_08032B88: .4byte gActiveBattler
-_08032B8C:
- bl PlayerBufferExecCompleted
-_08032B90:
- pop {r0}
- bx r0
- thumb_func_end sub_8032B70
-
- thumb_func_start sub_8032B94
-sub_8032B94: @ 8032B94
- push {lr}
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0
- bne _08032BBA
- ldr r0, _08032BC0 @ =gBattle_BG0_X
- strh r1, [r0]
- ldr r1, _08032BC4 @ =gBattle_BG0_Y
- movs r0, 0xA0
- strh r0, [r1]
- ldr r1, _08032BC8 @ =gBattlerControllerFuncs
- ldr r0, _08032BCC @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08032BD0 @ =sub_802E438
- str r1, [r0]
-_08032BBA:
- pop {r0}
- bx r0
- .align 2, 0
-_08032BC0: .4byte gBattle_BG0_X
-_08032BC4: .4byte gBattle_BG0_Y
-_08032BC8: .4byte gBattlerControllerFuncs
-_08032BCC: .4byte gActiveBattler
-_08032BD0: .4byte sub_802E438
- thumb_func_end sub_8032B94
-
- thumb_func_start sub_8032BD4
-sub_8032BD4: @ 8032BD4
- push {r4,lr}
- ldr r1, _08032C28 @ =gBattlerControllerFuncs
- ldr r0, _08032C2C @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08032C30 @ =sub_8032B94
- str r1, [r0]
- ldr r0, _08032C34 @ =gUnknown_83FDA4C
- movs r1, 0
- bl BattlePutTextOnWindow
- ldr r0, _08032C38 @ =gUnknown_83FE725
- movs r1, 0x2
- bl BattlePutTextOnWindow
- movs r4, 0
-_08032BF6:
- lsls r0, r4, 24
- lsrs r0, 24
- bl ActionSelectionDestroyCursorAt
- adds r4, 0x1
- cmp r4, 0x3
- ble _08032BF6
- ldr r1, _08032C3C @ =gActionSelectionCursor
- ldr r0, _08032C2C @ =gActiveBattler
- ldrb r0, [r0]
- adds r0, r1
- ldrb r0, [r0]
- movs r1, 0
- bl ActionSelectionCreateCursorAt
- ldr r0, _08032C40 @ =gUnknown_83FE6D5
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r0, _08032C44 @ =gDisplayedStringBattle
- movs r1, 0x1
- bl BattlePutTextOnWindow
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08032C28: .4byte gBattlerControllerFuncs
-_08032C2C: .4byte gActiveBattler
-_08032C30: .4byte sub_8032B94
-_08032C34: .4byte gUnknown_83FDA4C
-_08032C38: .4byte gUnknown_83FE725
-_08032C3C: .4byte gActionSelectionCursor
-_08032C40: .4byte gUnknown_83FE6D5
-_08032C44: .4byte gDisplayedStringBattle
- thumb_func_end sub_8032BD4
-
- thumb_func_start nullsub_14
-nullsub_14: @ 8032C48
- bx lr
- thumb_func_end nullsub_14
-
- thumb_func_start sub_8032C4C
-sub_8032C4C: @ 8032C4C
- push {lr}
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0
- bne _08032C76
- ldr r0, _08032C7C @ =gBattle_BG0_X
- strh r1, [r0]
- ldr r1, _08032C80 @ =gBattle_BG0_Y
- movs r2, 0xA0
- lsls r2, 1
- adds r0, r2, 0
- strh r0, [r1]
- ldr r1, _08032C84 @ =gBattlerControllerFuncs
- ldr r0, _08032C88 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08032C8C @ =sub_802EA10
- str r1, [r0]
-_08032C76:
- pop {r0}
- bx r0
- .align 2, 0
-_08032C7C: .4byte gBattle_BG0_X
-_08032C80: .4byte gBattle_BG0_Y
-_08032C84: .4byte gBattlerControllerFuncs
-_08032C88: .4byte gActiveBattler
-_08032C8C: .4byte sub_802EA10
- thumb_func_end sub_8032C4C
-
- thumb_func_start sub_8032C90
-sub_8032C90: @ 8032C90
- push {lr}
- bl sub_8032CB4
- ldr r1, _08032CA8 @ =gBattlerControllerFuncs
- ldr r0, _08032CAC @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08032CB0 @ =sub_8032C4C
- str r1, [r0]
- pop {r0}
- bx r0
- .align 2, 0
-_08032CA8: .4byte gBattlerControllerFuncs
-_08032CAC: .4byte gActiveBattler
-_08032CB0: .4byte sub_8032C4C
- thumb_func_end sub_8032C90
-
- thumb_func_start sub_8032CB4
-sub_8032CB4: @ 8032CB4
- push {lr}
- bl sub_8030830
- ldr r1, _08032CE0 @ =gUnknown_3004FF4
- movs r0, 0xFF
- strb r0, [r1]
- ldr r1, _08032CE4 @ =gMoveSelectionCursor
- ldr r0, _08032CE8 @ =gActiveBattler
- ldrb r0, [r0]
- adds r0, r1
- ldrb r0, [r0]
- movs r1, 0
- bl MoveSelectionCreateCursorAt
- bl MoveSelectionDisplayPpString
- bl MoveSelectionDisplayPpNumber
- bl MoveSelectionDisplayMoveType
- pop {r0}
- bx r0
- .align 2, 0
-_08032CE0: .4byte gUnknown_3004FF4
-_08032CE4: .4byte gMoveSelectionCursor
-_08032CE8: .4byte gActiveBattler
- thumb_func_end sub_8032CB4
-
- thumb_func_start sub_8032CEC
-sub_8032CEC: @ 8032CEC
- push {r4,r5,lr}
- sub sp, 0x4
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r1, _08032D38 @ =gBattlerControllerFuncs
- ldr r2, _08032D3C @ =gActiveBattler
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08032D40 @ =sub_8030700
- str r1, [r0]
- ldr r1, _08032D44 @ =gBattlerInMenuId
- ldrb r0, [r2]
- strb r0, [r1]
- movs r3, 0
- ldr r5, _08032D48 @ =gUnknown_203B0DC
- ldr r4, _08032D4C @ =gBattleBufferA
-_08032D1A:
- adds r0, r3, r5
- ldrb r1, [r2]
- lsls r1, 9
- adds r1, 0x1
- adds r1, r3, r1
- adds r1, r4
- ldrb r1, [r1]
- strb r1, [r0]
- adds r3, 0x1
- cmp r3, 0x2
- ble _08032D1A
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08032D38: .4byte gBattlerControllerFuncs
-_08032D3C: .4byte gActiveBattler
-_08032D40: .4byte sub_8030700
-_08032D44: .4byte gBattlerInMenuId
-_08032D48: .4byte gUnknown_203B0DC
-_08032D4C: .4byte gBattleBufferA
- thumb_func_end sub_8032CEC
-
- thumb_func_start sub_8032D50
-sub_8032D50: @ 8032D50
- push {r4-r6,lr}
- sub sp, 0x4
- ldr r0, _08032E00 @ =TaskDummy
- movs r1, 0xFF
- bl CreateTask
- ldr r3, _08032E04 @ =gUnknown_3004FFC
- ldr r4, _08032E08 @ =gActiveBattler
- ldrb r1, [r4]
- adds r1, r3
- strb r0, [r1]
- ldr r5, _08032E0C @ =gTasks
- ldrb r2, [r4]
- adds r3, r2, r3
- ldrb r0, [r3]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r5
- ldr r5, _08032E10 @ =gBattleBufferA
- lsls r2, 9
- adds r6, r5, 0x1
- adds r2, r6
- ldrb r2, [r2]
- movs r0, 0xF
- ands r0, r2
- strh r0, [r1, 0x8]
- ldr r3, _08032E14 @ =gBattleStruct
- ldr r1, [r3]
- adds r1, 0x49
- ldrb r0, [r4]
- lsls r0, 9
- adds r0, r6
- ldrb r0, [r0]
- lsrs r0, 4
- strb r0, [r1]
- ldr r2, [r3]
- adds r2, 0x8B
- ldrb r0, [r4]
- lsls r0, 9
- adds r1, r5, 0x2
- adds r0, r1
- ldrb r0, [r0]
- strb r0, [r2]
- ldr r2, [r3]
- adds r2, 0xAC
- ldrb r0, [r4]
- lsls r0, 9
- adds r1, r5, 0x3
- adds r0, r1
- ldrb r0, [r0]
- strb r0, [r2]
- movs r2, 0
- ldr r3, _08032E18 @ =gUnknown_203B0DC
-_08032DBC:
- adds r0, r2, r3
- ldrb r1, [r4]
- lsls r1, 9
- adds r1, 0x4
- adds r1, r2, r1
- adds r1, r5
- ldrb r1, [r1]
- strb r1, [r0]
- adds r2, 0x1
- cmp r2, 0x2
- ble _08032DBC
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r1, _08032E1C @ =gBattlerControllerFuncs
- ldr r2, _08032E08 @ =gActiveBattler
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08032E20 @ =sub_8030628
- str r1, [r0]
- ldr r1, _08032E24 @ =gBattlerInMenuId
- ldrb r0, [r2]
- strb r0, [r1]
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08032E00: .4byte TaskDummy
-_08032E04: .4byte gUnknown_3004FFC
-_08032E08: .4byte gActiveBattler
-_08032E0C: .4byte gTasks
-_08032E10: .4byte gBattleBufferA
-_08032E14: .4byte gBattleStruct
-_08032E18: .4byte gUnknown_203B0DC
-_08032E1C: .4byte gBattlerControllerFuncs
-_08032E20: .4byte sub_8030628
-_08032E24: .4byte gBattlerInMenuId
- thumb_func_end sub_8032D50
-
- thumb_func_start sub_8032E28
-sub_8032E28: @ 8032E28
- push {lr}
- sub sp, 0x4
- bl BattleStopLowHpSound
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r1, 0x2
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- bl PlayerBufferExecCompleted
- add sp, 0x4
- pop {r0}
- bx r0
- thumb_func_end sub_8032E28
-
- thumb_func_start sub_8032E4C
-sub_8032E4C: @ 8032E4C
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x4
- movs r0, 0
- bl LoadBattleBarGfx
- ldr r3, _08032EC4 @ =gBattleBufferA
- ldr r0, _08032EC8 @ =gActiveBattler
- mov r9, r0
- ldrb r4, [r0]
- lsls r2, r4, 9
- adds r0, r3, 0x2
- adds r0, r2, r0
- ldrb r1, [r0]
- adds r3, 0x3
- adds r2, r3
- ldrb r0, [r2]
- lsls r0, 8
- orrs r1, r0
- lsls r1, 16
- asrs r7, r1, 16
- ldr r0, _08032ECC @ =0x00007fff
- cmp r7, r0
- beq _08032EDC
- ldr r6, _08032ED0 @ =gBattlerPartyIndexes
- lsls r0, r4, 1
- adds r0, r6
- ldrh r0, [r0]
- movs r5, 0x64
- muls r0, r5
- ldr r4, _08032ED4 @ =gPlayerParty
- adds r0, r4
- movs r1, 0x3A
- bl GetMonData
- mov r8, r0
- mov r1, r9
- ldrb r0, [r1]
- lsls r0, 1
- adds r0, r6
- ldrh r0, [r0]
- muls r0, r5
- adds r0, r4
- movs r1, 0x39
- bl GetMonData
- adds r3, r0, 0
- mov r1, r9
- ldrb r0, [r1]
- ldr r1, _08032ED8 @ =gHealthboxSpriteIds
- adds r1, r0, r1
- ldrb r1, [r1]
- str r7, [sp]
- mov r2, r8
- bl SetBattleBarStruct
- b _08032F16
- .align 2, 0
-_08032EC4: .4byte gBattleBufferA
-_08032EC8: .4byte gActiveBattler
-_08032ECC: .4byte 0x00007fff
-_08032ED0: .4byte gBattlerPartyIndexes
-_08032ED4: .4byte gPlayerParty
-_08032ED8: .4byte gHealthboxSpriteIds
-_08032EDC:
- ldr r1, _08032F34 @ =gBattlerPartyIndexes
- lsls r0, r4, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08032F38 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x3A
- bl GetMonData
- adds r2, r0, 0
- mov r1, r9
- ldrb r0, [r1]
- ldr r4, _08032F3C @ =gHealthboxSpriteIds
- adds r1, r0, r4
- ldrb r1, [r1]
- str r7, [sp]
- movs r3, 0
- bl SetBattleBarStruct
- mov r1, r9
- ldrb r0, [r1]
- adds r0, r4
- ldrb r0, [r0]
- movs r1, 0
- movs r2, 0
- bl UpdateHpTextInHealthbox
-_08032F16:
- ldr r1, _08032F40 @ =gBattlerControllerFuncs
- ldr r0, _08032F44 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08032F48 @ =CompleteOnHealthbarDone
- str r1, [r0]
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08032F34: .4byte gBattlerPartyIndexes
-_08032F38: .4byte gPlayerParty
-_08032F3C: .4byte gHealthboxSpriteIds
-_08032F40: .4byte gBattlerControllerFuncs
-_08032F44: .4byte gActiveBattler
-_08032F48: .4byte CompleteOnHealthbarDone
- thumb_func_end sub_8032E4C
-
- thumb_func_start PlayerHandleExpUpdate
-PlayerHandleExpUpdate: @ 8032F4C
- push {r4-r7,lr}
- ldr r5, _08032F78 @ =gBattleBufferA
- ldr r6, _08032F7C @ =gActiveBattler
- ldrb r0, [r6]
- lsls r0, 9
- adds r1, r5, 0x1
- adds r0, r1
- ldrb r7, [r0]
- movs r0, 0x64
- adds r1, r7, 0
- muls r1, r0
- ldr r0, _08032F80 @ =gPlayerParty
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0x38
- bl GetMonData
- cmp r0, 0x63
- bls _08032F84
- bl PlayerBufferExecCompleted
- b _08032FD0
- .align 2, 0
-_08032F78: .4byte gBattleBufferA
-_08032F7C: .4byte gActiveBattler
-_08032F80: .4byte gPlayerParty
-_08032F84:
- movs r0, 0x1
- bl LoadBattleBarGfx
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- ldrb r1, [r6]
- lsls r1, 9
- adds r0, r5, 0x2
- adds r0, r1, r0
- ldrb r4, [r0]
- adds r0, r5, 0x3
- adds r1, r0
- ldrb r0, [r1]
- lsls r0, 8
- orrs r4, r0
- ldr r0, _08032FD8 @ =sub_802FEAC
- movs r1, 0xA
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08032FDC @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r7, [r1, 0x8]
- strh r4, [r1, 0xA]
- ldrb r0, [r6]
- strh r0, [r1, 0xC]
- ldr r1, _08032FE0 @ =gBattlerControllerFuncs
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08032FE4 @ =nullsub_13
- str r1, [r0]
-_08032FD0:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08032FD8: .4byte sub_802FEAC
-_08032FDC: .4byte gTasks
-_08032FE0: .4byte gBattlerControllerFuncs
-_08032FE4: .4byte nullsub_13
- thumb_func_end PlayerHandleExpUpdate
-
- thumb_func_start sub_8032FE8
-sub_8032FE8: @ 8032FE8
- push {r4,lr}
- ldr r4, _08033044 @ =gActiveBattler
- ldrb r0, [r4]
- bl mplay_80342A4
- lsls r0, 24
- cmp r0, 0
- bne _0803303C
- ldr r0, _08033048 @ =gHealthboxSpriteIds
- ldrb r1, [r4]
- adds r0, r1, r0
- ldrb r0, [r0]
- ldr r2, _0803304C @ =gBattlerPartyIndexes
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, _08033050 @ =gPlayerParty
- adds r1, r2
- movs r2, 0x9
- bl UpdateHealthboxAttribute
- ldrb r2, [r4]
- ldr r0, _08033054 @ =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r0, [r0, 0x4]
- lsls r1, r2, 1
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r2, [r1]
- movs r0, 0x11
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- ldr r1, _08033058 @ =gBattlerControllerFuncs
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0803305C @ =CompleteOnFinishedStatusAnimation
- str r1, [r0]
-_0803303C:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08033044: .4byte gActiveBattler
-_08033048: .4byte gHealthboxSpriteIds
-_0803304C: .4byte gBattlerPartyIndexes
-_08033050: .4byte gPlayerParty
-_08033054: .4byte gBattleSpritesDataPtr
-_08033058: .4byte gBattlerControllerFuncs
-_0803305C: .4byte CompleteOnFinishedStatusAnimation
- thumb_func_end sub_8032FE8
-
- thumb_func_start sub_8033060
-sub_8033060: @ 8033060
- push {r4,r5,lr}
- ldr r5, _080330B8 @ =gActiveBattler
- ldrb r0, [r5]
- bl mplay_80342A4
- lsls r0, 24
- cmp r0, 0
- bne _080330B0
- ldr r4, _080330BC @ =gBattleBufferA
- ldrb r3, [r5]
- lsls r3, 9
- adds r0, r4, 0x1
- adds r0, r3, r0
- ldrb r0, [r0]
- adds r1, r4, 0x2
- adds r1, r3, r1
- ldrb r1, [r1]
- adds r2, r4, 0x3
- adds r2, r3, r2
- ldrb r2, [r2]
- lsls r2, 8
- orrs r1, r2
- adds r2, r4, 0x4
- adds r2, r3, r2
- ldrb r2, [r2]
- lsls r2, 16
- orrs r1, r2
- adds r4, 0x5
- adds r3, r4
- ldrb r2, [r3]
- lsls r2, 24
- orrs r1, r2
- bl InitAndLaunchChosenStatusAnimation
- ldr r1, _080330C0 @ =gBattlerControllerFuncs
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080330C4 @ =CompleteOnFinishedStatusAnimation
- str r1, [r0]
-_080330B0:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080330B8: .4byte gActiveBattler
-_080330BC: .4byte gBattleBufferA
-_080330C0: .4byte gBattlerControllerFuncs
-_080330C4: .4byte CompleteOnFinishedStatusAnimation
- thumb_func_end sub_8033060
-
- thumb_func_start PlayerHandleStatusXor
-PlayerHandleStatusXor: @ 80330C8
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- sub sp, 0x4
- ldr r0, _08033124 @ =gBattlerPartyIndexes
- mov r8, r0
- ldr r4, _08033128 @ =gActiveBattler
- ldrb r0, [r4]
- lsls r0, 1
- add r0, r8
- ldrh r0, [r0]
- movs r6, 0x64
- muls r0, r6
- ldr r5, _0803312C @ =gPlayerParty
- adds r0, r5
- movs r1, 0x37
- bl GetMonData
- ldr r2, _08033130 @ =gBattleBufferA
- ldrb r1, [r4]
- lsls r1, 9
- adds r2, 0x1
- adds r1, r2
- ldrb r1, [r1]
- eors r0, r1
- mov r1, sp
- strb r0, [r1]
- ldrb r0, [r4]
- lsls r0, 1
- add r0, r8
- ldrh r0, [r0]
- muls r0, r6
- adds r0, r5
- movs r1, 0x37
- mov r2, sp
- bl SetMonData
- bl PlayerBufferExecCompleted
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08033124: .4byte gBattlerPartyIndexes
-_08033128: .4byte gActiveBattler
-_0803312C: .4byte gPlayerParty
-_08033130: .4byte gBattleBufferA
- thumb_func_end PlayerHandleStatusXor
-
- thumb_func_start sub_8033134
-sub_8033134: @ 8033134
- push {lr}
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8033134
-
- thumb_func_start PlayerHandleDMA3Transfer
-PlayerHandleDMA3Transfer: @ 8033140
- push {r4,r5,lr}
- ldr r3, _080331A4 @ =gBattleBufferA
- ldr r0, _080331A8 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- adds r0, r3, 0x1
- adds r0, r2, r0
- ldrb r5, [r0]
- adds r0, r3, 0x2
- adds r0, r2, r0
- ldrb r0, [r0]
- lsls r0, 8
- orrs r5, r0
- adds r0, r3, 0x3
- adds r0, r2, r0
- ldrb r0, [r0]
- lsls r0, 16
- orrs r5, r0
- adds r0, r3, 0x4
- adds r0, r2, r0
- ldrb r4, [r0]
- lsls r4, 24
- adds r0, r3, 0x5
- adds r0, r2, r0
- ldrb r1, [r0]
- adds r0, r3, 0x6
- adds r0, r2, r0
- ldrb r0, [r0]
- lsls r0, 8
- orrs r1, r0
- lsls r1, 16
- adds r3, 0x7
- adds r2, r3
- orrs r5, r4
- lsrs r4, r1, 16
- movs r0, 0x80
- lsls r0, 5
- cmp r4, r0
- bhi _080331B0
- ldr r0, _080331AC @ =0x040000d4
- str r2, [r0]
- str r5, [r0, 0x4]
- lsrs r1, 17
- movs r2, 0x80
- lsls r2, 24
- orrs r1, r2
- str r1, [r0, 0x8]
- ldr r0, [r0, 0x8]
- b _080331DC
- .align 2, 0
-_080331A4: .4byte gBattleBufferA
-_080331A8: .4byte gActiveBattler
-_080331AC: .4byte 0x040000d4
-_080331B0:
- ldr r3, _080331E8 @ =0x040000d4
- str r2, [r3]
- str r5, [r3, 0x4]
- ldr r0, _080331EC @ =0x80000800
- str r0, [r3, 0x8]
- ldr r0, [r3, 0x8]
- movs r0, 0x80
- lsls r0, 5
- adds r2, r0
- adds r5, r0
- ldr r1, _080331F0 @ =0xfffff000
- adds r4, r1
- cmp r4, r0
- bhi _080331B0
- str r2, [r3]
- str r5, [r3, 0x4]
- lsrs r0, r4, 1
- movs r1, 0x80
- lsls r1, 24
- orrs r0, r1
- str r0, [r3, 0x8]
- ldr r0, [r3, 0x8]
-_080331DC:
- bl PlayerBufferExecCompleted
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080331E8: .4byte 0x040000d4
-_080331EC: .4byte 0x80000800
-_080331F0: .4byte 0xfffff000
- thumb_func_end PlayerHandleDMA3Transfer
-
- thumb_func_start PlayerHandlePlayBGM
-PlayerHandlePlayBGM: @ 80331F4
- push {lr}
- ldr r2, _0803321C @ =gBattleBufferA
- ldr r0, _08033220 @ =gActiveBattler
- ldrb r1, [r0]
- lsls r1, 9
- adds r0, r2, 0x1
- adds r0, r1, r0
- ldrb r0, [r0]
- adds r2, 0x2
- adds r1, r2
- ldrb r1, [r1]
- lsls r1, 8
- orrs r0, r1
- bl PlayBGM
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_0803321C: .4byte gBattleBufferA
-_08033220: .4byte gActiveBattler
- thumb_func_end PlayerHandlePlayBGM
-
- thumb_func_start sub_8033224
-sub_8033224: @ 8033224
- push {lr}
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8033224
-
- thumb_func_start PlayerHandleTwoReturnValues
-PlayerHandleTwoReturnValues: @ 8033230
- push {lr}
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- bl BtlController_EmitTwoReturnValues
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end PlayerHandleTwoReturnValues
-
- thumb_func_start PlayerHandleChosenMonReturnValue
-PlayerHandleChosenMonReturnValue: @ 8033244
- push {lr}
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- bl BtlController_EmitChosenMonReturnValue
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end PlayerHandleChosenMonReturnValue
-
- thumb_func_start PlayerHandleOneReturnValue
-PlayerHandleOneReturnValue: @ 8033258
- push {lr}
- movs r0, 0x1
- movs r1, 0
- bl BtlController_EmitOneReturnValue
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end PlayerHandleOneReturnValue
-
- thumb_func_start PlayerHandleOneReturnValue_Duplicate
-PlayerHandleOneReturnValue_Duplicate: @ 803326C
- push {lr}
- movs r0, 0x1
- movs r1, 0
- bl BtlController_EmitOneReturnValue_Duplicate
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end PlayerHandleOneReturnValue_Duplicate
-
- thumb_func_start PlayerHandleCmd37
-PlayerHandleCmd37: @ 8033280
- push {lr}
- ldr r2, _08033298 @ =gUnknown_2022870
- ldrb r1, [r2]
- movs r0, 0x80
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_08033298: .4byte gUnknown_2022870
- thumb_func_end PlayerHandleCmd37
-
- thumb_func_start PlayerHandleCmd38
-PlayerHandleCmd38: @ 803329C
- push {lr}
- ldr r3, _080332C8 @ =gUnknown_2022870
- ldr r1, _080332CC @ =gBattleBufferA
- ldr r0, _080332D0 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- movs r1, 0x7F
- ands r1, r0
- ldrb r2, [r3]
- movs r0, 0x80
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_080332C8: .4byte gUnknown_2022870
-_080332CC: .4byte gBattleBufferA
-_080332D0: .4byte gActiveBattler
- thumb_func_end PlayerHandleCmd38
-
- thumb_func_start PlayerHandleCmd39
-PlayerHandleCmd39: @ 80332D4
- push {lr}
- ldr r2, _080332E8 @ =gUnknown_2022870
- ldrb r1, [r2]
- movs r0, 0x7F
- ands r0, r1
- strb r0, [r2]
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_080332E8: .4byte gUnknown_2022870
- thumb_func_end PlayerHandleCmd39
-
- thumb_func_start PlayerHandleCmd40
-PlayerHandleCmd40: @ 80332EC
- push {lr}
- ldr r3, _08033310 @ =gUnknown_2022870
- ldr r1, [r3]
- lsls r1, 24
- lsrs r1, 31
- movs r0, 0x1
- eors r1, r0
- lsls r1, 7
- ldrb r2, [r3]
- movs r0, 0x7F
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_08033310: .4byte gUnknown_2022870
- thumb_func_end PlayerHandleCmd40
-
- thumb_func_start PlayerHandleHitAnimation
-PlayerHandleHitAnimation: @ 8033314
- push {r4,lr}
- ldr r3, _0803333C @ =gSprites
- ldr r2, _08033340 @ =gBattlerSpriteIds
- ldr r4, _08033344 @ =gActiveBattler
- ldrb r0, [r4]
- adds r0, r2
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- adds r0, 0x3E
- ldrb r0, [r0]
- lsls r0, 29
- cmp r0, 0
- bge _08033348
- bl PlayerBufferExecCompleted
- b _08033372
- .align 2, 0
-_0803333C: .4byte gSprites
-_08033340: .4byte gBattlerSpriteIds
-_08033344: .4byte gActiveBattler
-_08033348:
- ldr r1, _08033378 @ =gDoingBattleAnim
- movs r0, 0x1
- strb r0, [r1]
- ldrb r0, [r4]
- adds r0, r2
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- movs r1, 0
- strh r1, [r0, 0x30]
- ldrb r0, [r4]
- bl DoHitAnimHealthboxEffect
- ldr r1, _0803337C @ =gBattlerControllerFuncs
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08033380 @ =DoHitAnimBlinkSpriteEffect
- str r1, [r0]
-_08033372:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08033378: .4byte gDoingBattleAnim
-_0803337C: .4byte gBattlerControllerFuncs
-_08033380: .4byte DoHitAnimBlinkSpriteEffect
- thumb_func_end PlayerHandleHitAnimation
-
- thumb_func_start sub_8033384
-sub_8033384: @ 8033384
- push {lr}
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8033384
-
- thumb_func_start PlayerHandlePlaySE
-PlayerHandlePlaySE: @ 8033390
- push {r4,lr}
- ldr r4, _080333CC @ =gActiveBattler
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- movs r3, 0x3F
- cmp r0, 0
- bne _080333A4
- movs r3, 0xC0
-_080333A4:
- ldr r2, _080333D0 @ =gBattleBufferA
- ldrb r1, [r4]
- lsls r1, 9
- adds r0, r2, 0x1
- adds r0, r1, r0
- ldrb r0, [r0]
- adds r2, 0x2
- adds r1, r2
- ldrb r1, [r1]
- lsls r1, 8
- orrs r0, r1
- lsls r1, r3, 24
- asrs r1, 24
- bl PlaySE12WithPanning
- bl PlayerBufferExecCompleted
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080333CC: .4byte gActiveBattler
-_080333D0: .4byte gBattleBufferA
- thumb_func_end PlayerHandlePlaySE
-
- thumb_func_start PlayerHandlecmd44
-PlayerHandlecmd44: @ 80333D4
- push {lr}
- ldr r2, _080333FC @ =gBattleBufferA
- ldr r0, _08033400 @ =gActiveBattler
- 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 PlayerBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_080333FC: .4byte gBattleBufferA
-_08033400: .4byte gActiveBattler
- thumb_func_end PlayerHandlecmd44
-
- thumb_func_start PlayerHandleFaintingCry
-PlayerHandleFaintingCry: @ 8033404
- push {lr}
- ldr r1, _08033438 @ =gBattlerPartyIndexes
- ldr r0, _0803343C @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08033440 @ =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x19
- negs r1, r1
- movs r2, 0x5
- bl PlayCry3
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_08033438: .4byte gBattlerPartyIndexes
-_0803343C: .4byte gActiveBattler
-_08033440: .4byte gPlayerParty
- thumb_func_end PlayerHandleFaintingCry
-
- thumb_func_start PlayerHandleIntroSlide
-PlayerHandleIntroSlide: @ 8033444
- push {lr}
- ldr r1, _0803346C @ =gBattleBufferA
- ldr r0, _08033470 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- bl HandleIntroSlide
- ldr r2, _08033474 @ =gIntroSlideFlags
- ldrh r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strh r0, [r2]
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_0803346C: .4byte gBattleBufferA
-_08033470: .4byte gActiveBattler
-_08033474: .4byte gIntroSlideFlags
- thumb_func_end PlayerHandleIntroSlide
-
- thumb_func_start PlayerHandleIntroTrainerBallThrow
-PlayerHandleIntroTrainerBallThrow: @ 8033478
- push {r4-r7,lr}
- ldr r6, _080335B8 @ =gBattlerSpriteIds
- ldr r7, _080335BC @ =gActiveBattler
- ldrb r0, [r7]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r5, _080335C0 @ =gSprites
- adds r0, r5
- bl SetSpritePrimaryCoordsFromSecondaryCoords
- ldrb r0, [r7]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r1, 0x32
- strh r1, [r0, 0x2E]
- ldrb r0, [r7]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, _080335C4 @ =0x0000ffd8
- strh r1, [r0, 0x32]
- ldrb r0, [r7]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldrh r1, [r0, 0x22]
- strh r1, [r0, 0x36]
- ldrb r0, [r7]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r5, 0
- adds r1, 0x1C
- adds r0, r1
- ldr r1, _080335C8 @ =sub_80755B8
- str r1, [r0]
- ldrb r2, [r7]
- adds r0, r2, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r2, [r0, 0x38]
- ldrb r0, [r7]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, _080335CC @ =sub_80335F8
- bl StoreSpriteCallbackInData6
- ldrb r0, [r7]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r1, 0x1
- bl StartSpriteAnim
- ldr r0, _080335D0 @ =0x0000d6f8
- bl AllocSpritePalette
- adds r4, r0, 0
- lsls r4, 24
- ldr r1, _080335D4 @ =gUnknown_8239FD4
- ldr r0, _080335D8 @ =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- lsls r0, 3
- adds r0, r1
- ldr r0, [r0]
- lsrs r4, 20
- movs r2, 0x80
- lsls r2, 1
- adds r1, r4, r2
- movs r2, 0x20
- bl LoadCompressedPalette
- ldrb r0, [r7]
- adds r0, r6
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r4
- strb r0, [r1, 0x5]
- ldr r0, _080335DC @ =task05_08033660
- movs r1, 0x5
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r4, _080335E0 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r4
- ldrb r0, [r7]
- strh r0, [r1, 0x8]
- ldr r3, _080335E4 @ =gBattleSpritesDataPtr
- ldr r0, [r3]
- ldrb r2, [r7]
- ldr r1, [r0, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0803359A
- ldr r0, _080335E8 @ =gBattlerStatusSummaryTaskId
- adds r0, r2, r0
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r4
- ldr r1, _080335EC @ =Task_HidePartyStatusSummary
- str r1, [r0]
-_0803359A:
- ldr r0, [r3]
- ldr r2, [r0, 0x8]
- ldrb r0, [r2, 0x9]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2, 0x9]
- ldr r1, _080335F0 @ =gBattlerControllerFuncs
- ldrb r0, [r7]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080335F4 @ =nullsub_13
- str r1, [r0]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080335B8: .4byte gBattlerSpriteIds
-_080335BC: .4byte gActiveBattler
-_080335C0: .4byte gSprites
-_080335C4: .4byte 0x0000ffd8
-_080335C8: .4byte sub_80755B8
-_080335CC: .4byte sub_80335F8
-_080335D0: .4byte 0x0000d6f8
-_080335D4: .4byte gUnknown_8239FD4
-_080335D8: .4byte gSaveBlock2Ptr
-_080335DC: .4byte task05_08033660
-_080335E0: .4byte gTasks
-_080335E4: .4byte gBattleSpritesDataPtr
-_080335E8: .4byte gBattlerStatusSummaryTaskId
-_080335EC: .4byte Task_HidePartyStatusSummary
-_080335F0: .4byte gBattlerControllerFuncs
-_080335F4: .4byte nullsub_13
- thumb_func_end PlayerHandleIntroTrainerBallThrow
-
- thumb_func_start sub_80335F8
-sub_80335F8: @ 80335F8
- push {r4,r5,lr}
- adds r5, r0, 0
- ldrh r4, [r5, 0x38]
- lsls r4, 24
- lsrs r4, 24
- bl FreeSpriteOamMatrix
- ldrb r0, [r5, 0x5]
- lsrs r0, 4
- bl GetSpritePaletteTagByPaletteNum
- lsls r0, 16
- lsrs r0, 16
- bl FreeSpritePaletteByTag
- adds r0, r5, 0
- bl DestroySprite
- ldr r1, _08033650 @ =gBattlerPartyIndexes
- lsls r0, r4, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08033654 @ =gPlayerParty
- adds r0, r1
- adds r1, r4, 0
- bl BattleLoadPlayerMonSpriteGfx
- ldr r0, _08033658 @ =gBattlerSpriteIds
- adds r4, r0
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0803365C @ =gSprites
- adds r0, r1
- movs r1, 0
- bl StartSpriteAnim
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08033650: .4byte gBattlerPartyIndexes
-_08033654: .4byte gPlayerParty
-_08033658: .4byte gBattlerSpriteIds
-_0803365C: .4byte gSprites
- thumb_func_end sub_80335F8
-
- thumb_func_start task05_08033660
-task05_08033660: @ 8033660
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r1, _08033688 @ =gTasks
- lsls r0, 2
- add r0, r8
- lsls r0, 3
- adds r1, r0, r1
- ldrh r2, [r1, 0xA]
- movs r3, 0xA
- ldrsh r0, [r1, r3]
- cmp r0, 0x1E
- bgt _0803368C
- adds r0, r2, 0x1
- strh r0, [r1, 0xA]
- b _08033748
- .align 2, 0
-_08033688: .4byte gTasks
-_0803368C:
- ldr r7, _080336CC @ =gActiveBattler
- ldrb r0, [r7]
- mov r9, r0
- ldrh r0, [r1, 0x8]
- strb r0, [r7]
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _080336AC
- ldr r0, _080336D0 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _080336DC
-_080336AC:
- ldr r0, _080336D4 @ =gBattleBufferA
- ldrb r1, [r7]
- lsls r2, r1, 9
- adds r0, 0x1
- adds r2, r0
- ldr r0, _080336D8 @ =gBattlerPartyIndexes
- lsls r1, 1
- adds r1, r0
- ldrh r0, [r1]
- strb r0, [r2]
- ldrb r0, [r7]
- movs r1, 0
- bl sub_8031FF4
- b _08033730
- .align 2, 0
-_080336CC: .4byte gActiveBattler
-_080336D0: .4byte gBattleTypeFlags
-_080336D4: .4byte gBattleBufferA
-_080336D8: .4byte gBattlerPartyIndexes
-_080336DC:
- ldr r4, _08033754 @ =gBattleBufferA
- ldrb r0, [r7]
- lsls r1, r0, 9
- adds r4, 0x1
- adds r1, r4
- ldr r5, _08033758 @ =gBattlerPartyIndexes
- lsls r0, 1
- adds r0, r5
- ldrh r0, [r0]
- strb r0, [r1]
- ldrb r0, [r7]
- movs r1, 0
- bl sub_8031FF4
- ldrb r0, [r7]
- movs r6, 0x2
- eors r0, r6
- strb r0, [r7]
- ldrb r0, [r7]
- lsls r1, r0, 9
- adds r1, r4
- lsls r0, 1
- adds r0, r5
- ldrh r0, [r0]
- strb r0, [r1]
- ldrb r1, [r7]
- lsls r0, r1, 1
- adds r0, r5
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, _0803375C @ =gPlayerParty
- adds r0, r2
- bl BattleLoadPlayerMonSpriteGfx
- ldrb r0, [r7]
- movs r1, 0
- bl sub_8031FF4
- ldrb r0, [r7]
- eors r0, r6
- strb r0, [r7]
-_08033730:
- ldr r1, _08033760 @ =gBattlerControllerFuncs
- ldr r2, _08033764 @ =gActiveBattler
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08033768 @ =sub_802FA58
- str r1, [r0]
- mov r3, r9
- strb r3, [r2]
- mov r0, r8
- bl DestroyTask
-_08033748:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08033754: .4byte gBattleBufferA
-_08033758: .4byte gBattlerPartyIndexes
-_0803375C: .4byte gPlayerParty
-_08033760: .4byte gBattlerControllerFuncs
-_08033764: .4byte gActiveBattler
-_08033768: .4byte sub_802FA58
- thumb_func_end task05_08033660
-
- thumb_func_start PlayerHandleDrawPartyStatusSummary
-PlayerHandleDrawPartyStatusSummary: @ 803376C
- push {r4-r6,lr}
- ldr r1, _08033794 @ =gBattleBufferA
- ldr r0, _08033798 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r0, r2, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _0803379C
- adds r0, r2, 0
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _0803379C
- bl PlayerBufferExecCompleted
- b _08033810
- .align 2, 0
-_08033794: .4byte gBattleBufferA
-_08033798: .4byte gActiveBattler
-_0803379C:
- ldr r6, _08033818 @ =gBattleSpritesDataPtr
- ldr r0, [r6]
- ldr r5, _0803381C @ =gActiveBattler
- ldrb r1, [r5]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r2, 0x1
- orrs r1, r2
- strb r1, [r0]
- ldrb r0, [r5]
- lsls r3, r0, 9
- ldr r4, _08033820 @ =gUnknown_2022BC8
- adds r1, r3, r4
- subs r2, r4, 0x3
- adds r2, r3, r2
- ldrb r2, [r2]
- subs r4, 0x2
- adds r3, r4
- ldrb r3, [r3]
- bl CreatePartyStatusSummarySprites
- ldr r2, _08033824 @ =gBattlerStatusSummaryTaskId
- ldrb r1, [r5]
- adds r1, r2
- movs r3, 0
- strb r0, [r1]
- ldr r0, [r6]
- ldrb r1, [r5]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- strb r3, [r0, 0x5]
- ldrb r2, [r5]
- lsls r0, r2, 9
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0
- beq _08033804
- ldr r0, [r6]
- ldr r1, [r0, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- movs r1, 0x5D
- strb r1, [r0, 0x5]
-_08033804:
- ldr r0, _08033828 @ =gBattlerControllerFuncs
- ldrb r1, [r5]
- lsls r1, 2
- adds r1, r0
- ldr r0, _0803382C @ =sub_8033830
- str r0, [r1]
-_08033810:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08033818: .4byte gBattleSpritesDataPtr
-_0803381C: .4byte gActiveBattler
-_08033820: .4byte gUnknown_2022BC8
-_08033824: .4byte gBattlerStatusSummaryTaskId
-_08033828: .4byte gBattlerControllerFuncs
-_0803382C: .4byte sub_8033830
- thumb_func_end PlayerHandleDrawPartyStatusSummary
-
- thumb_func_start sub_8033830
-sub_8033830: @ 8033830
- push {r4,lr}
- ldr r4, _08033870 @ =gBattleSpritesDataPtr
- ldr r0, [r4]
- ldr r3, _08033874 @ =gActiveBattler
- ldrb r1, [r3]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x5]
- adds r2, r1, 0x1
- strb r2, [r0, 0x5]
- lsls r1, 24
- lsrs r1, 24
- cmp r1, 0x5C
- bls _08033868
- ldr r0, [r4]
- ldrb r1, [r3]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0
- strb r1, [r0, 0x5]
- bl PlayerBufferExecCompleted
-_08033868:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08033870: .4byte gBattleSpritesDataPtr
-_08033874: .4byte gActiveBattler
- thumb_func_end sub_8033830
-
- thumb_func_start PlayerHandleCmd49
-PlayerHandleCmd49: @ 8033878
- push {lr}
- ldr r0, _080338B4 @ =gBattleSpritesDataPtr
- ldr r1, [r0]
- ldr r0, _080338B8 @ =gActiveBattler
- ldrb r3, [r0]
- ldr r1, [r1, 0x4]
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080338AA
- ldr r2, _080338BC @ =gTasks
- ldr r0, _080338C0 @ =gBattlerStatusSummaryTaskId
- adds r0, r3, r0
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- ldr r1, _080338C4 @ =Task_HidePartyStatusSummary
- str r1, [r0]
-_080338AA:
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_080338B4: .4byte gBattleSpritesDataPtr
-_080338B8: .4byte gActiveBattler
-_080338BC: .4byte gTasks
-_080338C0: .4byte gBattlerStatusSummaryTaskId
-_080338C4: .4byte Task_HidePartyStatusSummary
- thumb_func_end PlayerHandleCmd49
-
- thumb_func_start sub_80338C8
-sub_80338C8: @ 80338C8
- push {r4,lr}
- ldr r4, _080338E8 @ =gActiveBattler
- ldrb r0, [r4]
- movs r1, 0x1
- bl dp11b_obj_free
- ldrb r0, [r4]
- movs r1, 0
- bl dp11b_obj_free
- bl PlayerBufferExecCompleted
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080338E8: .4byte gActiveBattler
- thumb_func_end sub_80338C8
-
- thumb_func_start PlayerHandleSpriteInvisibility
-PlayerHandleSpriteInvisibility: @ 80338EC
- push {r4,lr}
- ldr r4, _0803393C @ =gActiveBattler
- ldrb r0, [r4]
- bl IsBattlerSpritePresent
- lsls r0, 24
- cmp r0, 0
- beq _08033932
- ldr r3, _08033940 @ =gSprites
- ldr r0, _08033944 @ =gBattlerSpriteIds
- ldrb r1, [r4]
- adds r0, r1, r0
- ldrb r0, [r0]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r3
- ldr r0, _08033948 @ =gBattleBufferA
- lsls r1, 9
- adds r0, 0x1
- adds r1, r0
- adds r2, 0x3E
- movs r0, 0x1
- ldrb r1, [r1]
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2]
- ldrb r0, [r4]
- bl CopyBattleSpriteInvisibility
-_08033932:
- bl PlayerBufferExecCompleted
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0803393C: .4byte gActiveBattler
-_08033940: .4byte gSprites
-_08033944: .4byte gBattlerSpriteIds
-_08033948: .4byte gBattleBufferA
- thumb_func_end PlayerHandleSpriteInvisibility
-
- thumb_func_start PlayerHandleBattleAnimation
-PlayerHandleBattleAnimation: @ 803394C
- push {r4-r6,lr}
- sub sp, 0x4
- ldr r6, _08033990 @ =gActiveBattler
- ldrb r0, [r6]
- bl mplay_80342A4
- lsls r0, 24
- cmp r0, 0
- bne _080339A4
- ldr r5, _08033994 @ =gBattleBufferA
- ldrb r2, [r6]
- lsls r1, r2, 9
- adds r0, r5, 0x1
- adds r0, r1, r0
- ldrb r3, [r0]
- adds r0, r5, 0x2
- adds r0, r1, r0
- ldrb r4, [r0]
- adds r5, 0x3
- adds r1, r5
- ldrb r0, [r1]
- lsls r0, 8
- orrs r4, r0
- str r4, [sp]
- adds r0, r2, 0
- adds r1, r2, 0
- bl TryHandleLaunchBattleTableAnimation
- lsls r0, 24
- cmp r0, 0
- beq _08033998
- bl PlayerBufferExecCompleted
- b _080339A4
- .align 2, 0
-_08033990: .4byte gActiveBattler
-_08033994: .4byte gBattleBufferA
-_08033998:
- ldr r0, _080339AC @ =gBattlerControllerFuncs
- ldrb r1, [r6]
- lsls r1, 2
- adds r1, r0
- ldr r0, _080339B0 @ =CompleteOnFinishedBattleAnimation
- str r0, [r1]
-_080339A4:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080339AC: .4byte gBattlerControllerFuncs
-_080339B0: .4byte CompleteOnFinishedBattleAnimation
- thumb_func_end PlayerHandleBattleAnimation
-
- thumb_func_start PlayerHandleLinkStandbyMsg
-PlayerHandleLinkStandbyMsg: @ 80339B4
- push {r4,lr}
- ldr r1, _080339D4 @ =gBattleBufferA
- ldr r0, _080339D8 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _080339E6
- cmp r0, 0x1
- bgt _080339DC
- cmp r0, 0
- beq _080339E2
- b _08033A04
- .align 2, 0
-_080339D4: .4byte gBattleBufferA
-_080339D8: .4byte gActiveBattler
-_080339DC:
- cmp r0, 0x2
- beq _08033A00
- b _08033A04
-_080339E2:
- bl PrintLinkStandbyMsg
-_080339E6:
- ldr r4, _080339FC @ =gActiveBattler
- ldrb r0, [r4]
- movs r1, 0x1
- bl dp11b_obj_free
- ldrb r0, [r4]
- movs r1, 0
- bl dp11b_obj_free
- b _08033A04
- .align 2, 0
-_080339FC: .4byte gActiveBattler
-_08033A00:
- bl PrintLinkStandbyMsg
-_08033A04:
- bl PlayerBufferExecCompleted
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end PlayerHandleLinkStandbyMsg
-
- thumb_func_start PlayerHandleResetActionMoveSelection
-PlayerHandleResetActionMoveSelection: @ 8033A10
- push {r4,lr}
- ldr r1, _08033A30 @ =gBattleBufferA
- ldr r4, _08033A34 @ =gActiveBattler
- ldrb r3, [r4]
- lsls r0, r3, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r2, [r0]
- cmp r2, 0x1
- beq _08033A58
- cmp r2, 0x1
- bgt _08033A38
- cmp r2, 0
- beq _08033A3E
- b _08033A68
- .align 2, 0
-_08033A30: .4byte gBattleBufferA
-_08033A34: .4byte gActiveBattler
-_08033A38:
- cmp r2, 0x2
- beq _08033A60
- b _08033A68
-_08033A3E:
- ldr r0, _08033A50 @ =gActionSelectionCursor
- adds r0, r3, r0
- strb r2, [r0]
- ldr r1, _08033A54 @ =gMoveSelectionCursor
- ldrb r0, [r4]
- adds r0, r1
- strb r2, [r0]
- b _08033A68
- .align 2, 0
-_08033A50: .4byte gActionSelectionCursor
-_08033A54: .4byte gMoveSelectionCursor
-_08033A58:
- ldr r0, _08033A5C @ =gActionSelectionCursor
- b _08033A62
- .align 2, 0
-_08033A5C: .4byte gActionSelectionCursor
-_08033A60:
- ldr r0, _08033A74 @ =gMoveSelectionCursor
-_08033A62:
- adds r0, r3, r0
- movs r1, 0
- strb r1, [r0]
-_08033A68:
- bl PlayerBufferExecCompleted
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08033A74: .4byte gMoveSelectionCursor
- thumb_func_end PlayerHandleResetActionMoveSelection
-
- thumb_func_start PlayerHandlecmd55
-PlayerHandlecmd55: @ 8033A78
- push {r4,lr}
- ldr r2, _08033AB0 @ =gBattleOutcome
- ldr r1, _08033AB4 @ =gBattleBufferA
- ldr r4, _08033AB8 @ =gActiveBattler
- 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 PlayerBufferExecCompleted
- ldr r1, _08033ABC @ =gBattlerControllerFuncs
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08033AC0 @ =sub_802F6A8
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08033AB0: .4byte gBattleOutcome
-_08033AB4: .4byte gBattleBufferA
-_08033AB8: .4byte gActiveBattler
-_08033ABC: .4byte gBattlerControllerFuncs
-_08033AC0: .4byte sub_802F6A8
- thumb_func_end PlayerHandlecmd55
-
- thumb_func_start nullsub_15
-nullsub_15: @ 8033AC4
- bx lr
- thumb_func_end nullsub_15
-
- thumb_func_start sub_8033AC8
-sub_8033AC8: @ 8033AC8
- push {r4-r6,lr}
- sub sp, 0x4
- movs r5, 0
- movs r6, 0
- ldr r0, _08033B14 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- bne _08033ADE
- b _08033DA2
-_08033ADE:
- ldr r3, _08033B18 @ =gActiveBattler
- ldrb r1, [r3]
- lsls r2, r1, 9
- ldr r0, _08033B1C @ =gUnknown_2022BC8
- adds r2, r0
- ldr r0, _08033B20 @ =gMoveSelectionCursor
- adds r1, r0
- ldrb r0, [r1]
- lsls r0, 1
- adds r0, r2, r0
- ldrh r4, [r0]
- cmp r4, 0xAE
- bne _08033B24
- ldrb r0, [r2, 0x12]
- movs r1, 0
- cmp r0, 0x7
- beq _08033B30
- ldrb r1, [r2, 0x13]
- movs r0, 0x7
- eors r1, r0
- negs r0, r1
- orrs r0, r1
- asrs r1, r0, 31
- movs r0, 0x10
- ands r1, r0
- b _08033B30
- .align 2, 0
-_08033B14: .4byte gBattleTypeFlags
-_08033B18: .4byte gActiveBattler
-_08033B1C: .4byte gUnknown_2022BC8
-_08033B20: .4byte gMoveSelectionCursor
-_08033B24:
- ldr r1, _08033B40 @ =gBattleMoves
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x6]
-_08033B30:
- cmp r1, 0x40
- bls _08033B36
- b _08033D92
-_08033B36:
- lsls r0, r1, 2
- ldr r1, _08033B44 @ =_08033B48
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08033B40: .4byte gBattleMoves
-_08033B44: .4byte _08033B48
- .align 2, 0
-_08033B48:
- .4byte _08033C4C
- .4byte _08033C4C
- .4byte _08033C4C
- .4byte _08033D92
- .4byte _08033C4C
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033C54
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033C80
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D4C
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033C54
-_08033C4C:
- movs r5, 0xF0
- lsls r5, 12
- movs r6, 0
- b _08033D92
-_08033C54:
- movs r0, 0x1
- bl GetBattlerAtPosition
- adds r4, r0, 0
- movs r0, 0x3
- bl GetBattlerAtPosition
- ldr r1, _08033C7C @ =gBitTable
- lsls r4, 24
- lsrs r4, 22
- adds r4, r1
- lsls r0, 24
- lsrs r0, 22
- adds r0, r1
- ldr r1, [r4]
- ldr r0, [r0]
- orrs r1, r0
- lsls r5, r1, 16
- b _08033D90
- .align 2, 0
-_08033C7C: .4byte gBitTable
-_08033C80:
- cmp r4, 0xDB
- beq _08033CEA
- cmp r4, 0xDB
- bgt _08033CB2
- cmp r4, 0x73
- beq _08033CEA
- cmp r4, 0x73
- bgt _08033C9E
- cmp r4, 0x71
- beq _08033CEA
- cmp r4, 0x71
- bgt _08033CE4
- cmp r4, 0x36
- beq _08033CEA
- b _08033D38
-_08033C9E:
- cmp r4, 0xC9
- beq _08033CE4
- cmp r4, 0xC9
- bgt _08033CAC
- cmp r4, 0xC3
- beq _08033CE4
- b _08033D38
-_08033CAC:
- cmp r4, 0xD7
- beq _08033CEA
- b _08033D38
-_08033CB2:
- movs r0, 0x87
- lsls r0, 1
- cmp r4, r0
- beq _08033D14
- cmp r4, r0
- bgt _08033CC8
- cmp r4, 0xF0
- blt _08033D38
- cmp r4, 0xF1
- ble _08033CE4
- b _08033CD4
-_08033CC8:
- movs r0, 0x9C
- lsls r0, 1
- cmp r4, r0
- beq _08033CEA
- cmp r4, r0
- bgt _08033CDC
-_08033CD4:
- subs r0, 0xC
- cmp r4, r0
- beq _08033CE4
- b _08033D38
-_08033CDC:
- movs r0, 0xAD
- lsls r0, 1
- cmp r4, r0
- bne _08033D38
-_08033CE4:
- movs r5, 0xF0
- lsls r5, 12
- b _08033D90
-_08033CEA:
- movs r0, 0
- bl GetBattlerAtPosition
- adds r4, r0, 0
- movs r0, 0x2
- bl GetBattlerAtPosition
- ldr r1, _08033D10 @ =gBitTable
- lsls r4, 24
- lsrs r4, 22
- adds r4, r1
- lsls r0, 24
- lsrs r0, 22
- adds r0, r1
- ldr r1, [r4]
- ldr r0, [r0]
- orrs r1, r0
- lsls r5, r1, 16
- b _08033D90
- .align 2, 0
-_08033D10: .4byte gBitTable
-_08033D14:
- ldrb r0, [r3]
- bl GetBattlerPosition
- movs r1, 0x2
- eors r0, r1
- lsls r0, 24
- lsrs r0, 24
- bl GetBattlerAtPosition
- ldr r1, _08033D34 @ =gBitTable
- lsls r0, 24
- lsrs r0, 22
- adds r0, r1
- ldr r0, [r0]
- b _08033D42
- .align 2, 0
-_08033D34: .4byte gBitTable
-_08033D38:
- ldr r0, _08033D48 @ =gBitTable
- ldrb r1, [r3]
- lsls r1, 2
- adds r1, r0
- ldr r0, [r1]
-_08033D42:
- lsls r5, r0, 16
- b _08033D90
- .align 2, 0
-_08033D48: .4byte gBitTable
-_08033D4C:
- movs r0, 0x1
- bl GetBattlerAtPosition
- adds r5, r0, 0
- ldr r0, _08033DAC @ =gActiveBattler
- ldrb r0, [r0]
- bl GetBattlerPosition
- movs r1, 0x2
- eors r0, r1
- lsls r0, 24
- lsrs r0, 24
- bl GetBattlerAtPosition
- adds r4, r0, 0
- movs r0, 0x3
- bl GetBattlerAtPosition
- ldr r3, _08033DB0 @ =gBitTable
- lsls r5, 24
- lsrs r5, 22
- adds r5, r3
- lsls r4, 24
- lsrs r4, 22
- adds r4, r3
- ldr r2, [r5]
- ldr r1, [r4]
- orrs r2, r1
- lsls r0, 24
- lsrs r0, 22
- adds r0, r3
- ldr r0, [r0]
- orrs r2, r0
- lsls r5, r2, 16
-_08033D90:
- movs r6, 0x8
-_08033D92:
- ldr r0, _08033DB4 @ =0x00007fff
- str r0, [sp]
- adds r0, r5, 0
- movs r1, 0x8
- adds r2, r6, 0
- movs r3, 0
- bl BeginNormalPaletteFade
-_08033DA2:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08033DAC: .4byte gActiveBattler
-_08033DB0: .4byte gBitTable
-_08033DB4: .4byte 0x00007fff
- thumb_func_end sub_8033AC8
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/battle_controller_pokedude.s b/asm/battle_controller_pokedude.s
index 35684558a..1857d92c8 100644
--- a/asm/battle_controller_pokedude.s
+++ b/asm/battle_controller_pokedude.s
@@ -5191,7 +5191,7 @@ _08158B8E:
ldrb r0, [r0]
movs r1, 0
bl ActionSelectionCreateCursorAt
- ldr r0, _08158BD4 @ =gUnknown_83FE6D5
+ ldr r0, _08158BD4 @ =gText_WhatWillPkmnDo
bl BattleStringExpandPlaceholdersToDisplayedString
ldr r0, _08158BD8 @ =gDisplayedStringBattle
movs r1, 0x1
@@ -5204,7 +5204,7 @@ _08158BC4: .4byte sub_8158B20
_08158BC8: .4byte gUnknown_83FDA4C
_08158BCC: .4byte gUnknown_83FE725
_08158BD0: .4byte gActionSelectionCursor
-_08158BD4: .4byte gUnknown_83FE6D5
+_08158BD4: .4byte gText_WhatWillPkmnDo
_08158BD8: .4byte gDisplayedStringBattle
_08158BDC:
ldr r0, _08158BF0 @ =gBattlerControllerFuncs
@@ -5272,7 +5272,7 @@ sub_8158C48: @ 8158C48
lsls r0, 24
cmp r0, 0
bne _08158C74
- bl sub_8032CB4
+ bl InitMoveSelectionsVarsAndStrings
ldr r0, _08158C6C @ =gBattlerControllerFuncs
ldrb r1, [r4]
lsls r1, 2
@@ -6198,7 +6198,7 @@ sub_8159304: @ 8159304
bl AllocSpritePalette
adds r4, r0, 0
lsls r4, 24
- ldr r0, _08159458 @ =gUnknown_8239FD4
+ ldr r0, _08159458 @ =gTrainerBackPicPaletteTable
ldr r0, [r0, 0x20]
lsrs r4, 20
movs r2, 0x80
@@ -6276,7 +6276,7 @@ _08159448: .4byte 0x0000ffd8
_0815944C: .4byte StartAnimLinearTranslation
_08159450: .4byte sub_80335F8
_08159454: .4byte 0x0000d6f8
-_08159458: .4byte gUnknown_8239FD4
+_08159458: .4byte gTrainerBackPicPaletteTable
_0815945C: .4byte sub_81595EC
_08159460: .4byte gTasks
_08159464: .4byte gBattleSpritesDataPtr
@@ -6591,10 +6591,10 @@ sub_81596F0: @ 81596F0
ldr r4, _08159710 @ =gActiveBattler
ldrb r0, [r4]
movs r1, 0x1
- bl dp11b_obj_free
+ bl EndBounceEffect
ldrb r0, [r4]
movs r1, 0
- bl dp11b_obj_free
+ bl EndBounceEffect
bl PlayerPartnerBufferExecCompleted
pop {r4}
pop {r0}
@@ -6675,10 +6675,10 @@ sub_815977C: @ 815977C
bgt _081597A4
adds r0, r2, 0
movs r1, 0x1
- bl dp11b_obj_free
+ bl EndBounceEffect
ldrb r0, [r4]
movs r1, 0
- bl dp11b_obj_free
+ bl EndBounceEffect
_081597A4:
bl PlayerPartnerBufferExecCompleted
pop {r4}
@@ -6765,12 +6765,12 @@ sub_8159824: @ 8159824
movs r1, 0x1
movs r2, 0x7
movs r3, 0x1
- bl dp11b_obj_instanciate
+ bl DoBounceEffect
ldrb r0, [r4]
movs r1, 0
movs r2, 0x7
movs r3, 0x1
- bl dp11b_obj_instanciate
+ bl DoBounceEffect
_0815985C:
ldr r6, _081598C0 @ =gUnknown_3005EE0
ldrb r2, [r4]
diff --git a/asm/battle_interface.s b/asm/battle_interface.s
index 3e8044d2a..3de518630 100644
--- a/asm/battle_interface.s
+++ b/asm/battle_interface.s
@@ -1945,8 +1945,8 @@ _08048A44: .4byte 0x060100c0
_08048A48: .4byte 0x04000008
thumb_func_end sub_80487F8
- thumb_func_start sub_8048A4C
-sub_8048A4C: @ 8048A4C
+ thumb_func_start SwapHpBarsWithHpText
+SwapHpBarsWithHpText: @ 8048A4C
push {r4-r7,lr}
mov r7, r10
mov r6, r9
@@ -2277,7 +2277,7 @@ _08048D04: .4byte gEnemyParty
_08048D08: .4byte gBattleTypeFlags
_08048D0C: .4byte gHealthboxSpriteIds
_08048D10: .4byte gBattlersCount
- thumb_func_end sub_8048A4C
+ thumb_func_end SwapHpBarsWithHpText
thumb_func_start CreatePartyStatusSummarySprites
CreatePartyStatusSummarySprites: @ 8048D14
diff --git a/asm/battle_message.s b/asm/battle_message.s
index b4a9e7a51..d3a688507 100644
--- a/asm/battle_message.s
+++ b/asm/battle_message.s
@@ -2304,10 +2304,10 @@ _080D8504:
ldrb r0, [r0, 0x1]
lsls r1, r0, 3
subs r1, r0
- ldr r0, _080D8510 @ =gUnknown_824F1A0
+ ldr r0, _080D8510 @ =gTypeNames
b _080D8616
.align 2, 0
-_080D8510: .4byte gUnknown_824F1A0
+_080D8510: .4byte gTypeNames
_080D8514:
ldrb r0, [r4, 0x1]
bl GetBattlerSide
diff --git a/asm/item_menu.s b/asm/item_menu.s
index e85f63872..46fa08f33 100644
--- a/asm/item_menu.s
+++ b/asm/item_menu.s
@@ -154,14 +154,14 @@ _08107EC8: .4byte sub_80568A8
thumb_func_start sub_8107ECC
sub_8107ECC: @ 8107ECC
push {lr}
- ldr r2, _08107EDC @ =sub_8030AEC
+ ldr r2, _08107EDC @ =SetCB2ToReshowScreenAfterMenu2
movs r0, 0x5
movs r1, 0x3
bl sub_8107DB4
pop {r0}
bx r0
.align 2, 0
-_08107EDC: .4byte sub_8030AEC
+_08107EDC: .4byte SetCB2ToReshowScreenAfterMenu2
thumb_func_end sub_8107ECC
thumb_func_start sub_8107EE0
@@ -6124,14 +6124,14 @@ sub_810AF74: @ 810AF74
movs r0, 0x4
movs r1, 0x1
bl AddBagItem
- ldr r2, _0810AF98 @ =sub_8030AEC
+ ldr r2, _0810AF98 @ =SetCB2ToReshowScreenAfterMenu2
movs r0, 0x6
movs r1, 0
bl sub_8107DB4
pop {r0}
bx r0
.align 2, 0
-_0810AF98: .4byte sub_8030AEC
+_0810AF98: .4byte SetCB2ToReshowScreenAfterMenu2
thumb_func_end sub_810AF74
thumb_func_start sub_810AF9C
@@ -6348,13 +6348,13 @@ sub_810B108: @ 810B108
.align 2, 0
_0810B15C: .4byte CB2_ReturnToTeachyTV
_0810B160:
- ldr r2, _0810B168 @ =sub_8030AEC
+ ldr r2, _0810B168 @ =SetCB2ToReshowScreenAfterMenu2
movs r0, 0x7
b _0810B170
.align 2, 0
-_0810B168: .4byte sub_8030AEC
+_0810B168: .4byte SetCB2ToReshowScreenAfterMenu2
_0810B16C:
- ldr r2, _0810B17C @ =sub_8030AEC
+ ldr r2, _0810B17C @ =SetCB2ToReshowScreenAfterMenu2
movs r0, 0x8
_0810B170:
movs r1, 0
@@ -6363,7 +6363,7 @@ _0810B170:
pop {r0}
bx r0
.align 2, 0
-_0810B17C: .4byte sub_8030AEC
+_0810B17C: .4byte SetCB2ToReshowScreenAfterMenu2
thumb_func_end sub_810B108
thumb_func_start sub_810B180
diff --git a/asm/link_rfu_3.s b/asm/link_rfu_3.s
index a109515d6..f65efc5f7 100644
--- a/asm/link_rfu_3.s
+++ b/asm/link_rfu_3.s
@@ -7242,7 +7242,7 @@ _081196EC:
lsrs r2, 2
lsls r1, r2, 3
subs r1, r2
- ldr r2, _0811972C @ =gUnknown_824F1A0
+ ldr r2, _0811972C @ =gTypeNames
adds r1, r2
bl StringCopy
ldr r1, _08119730 @ =gUnknown_8458ED0
@@ -7250,7 +7250,7 @@ _081196EC:
.align 2, 0
_08119724: .4byte gStringVar1
_08119728: .4byte gStringVar2
-_0811972C: .4byte gUnknown_824F1A0
+_0811972C: .4byte gTypeNames
_08119730: .4byte gUnknown_8458ED0
_08119734:
ldr r4, _08119774 @ =gStringVar1
@@ -7273,7 +7273,7 @@ _08119734:
lsrs r2, 2
lsls r1, r2, 3
subs r1, r2
- ldr r2, _0811977C @ =gUnknown_824F1A0
+ ldr r2, _0811977C @ =gTypeNames
adds r1, r2
bl StringCopy
ldr r1, _08119780 @ =gUnknown_8458F04
@@ -7284,7 +7284,7 @@ _0811976A:
.align 2, 0
_08119774: .4byte gStringVar1
_08119778: .4byte gStringVar2
-_0811977C: .4byte gUnknown_824F1A0
+_0811977C: .4byte gTypeNames
_08119780: .4byte gUnknown_8458F04
_08119784:
adds r0, r6, 0
diff --git a/asm/party_menu.s b/asm/party_menu.s
index 89c03fcff..c6cdfb567 100644
--- a/asm/party_menu.s
+++ b/asm/party_menu.s
@@ -17930,8 +17930,8 @@ _081278D6:
bx r1
thumb_func_end sub_81278B4
- thumb_func_start sub_81278DC
-sub_81278DC: @ 81278DC
+ thumb_func_start OpenPartyMenuInBattle
+OpenPartyMenuInBattle: @ 81278DC
push {r4,lr}
sub sp, 0xC
lsls r0, 24
@@ -17955,7 +17955,7 @@ sub_81278DC: @ 81278DC
str r0, [sp]
ldr r0, _08127928 @ =sub_8120C3C
str r0, [sp, 0x4]
- ldr r0, _0812792C @ =sub_8030ADC
+ ldr r0, _0812792C @ =SetCB2ToReshowScreenAfterMenu
str r0, [sp, 0x8]
movs r0, 0x1
adds r2, r4, 0
@@ -17967,7 +17967,7 @@ sub_81278DC: @ 81278DC
.align 2, 0
_08127924: .4byte gBattleTypeFlags
_08127928: .4byte sub_8120C3C
-_0812792C: .4byte sub_8030ADC
+_0812792C: .4byte SetCB2ToReshowScreenAfterMenu
_08127930:
bl sub_81278B4
adds r1, r0, 0
@@ -17977,7 +17977,7 @@ _08127930:
str r0, [sp]
ldr r0, _08127960 @ =sub_811FB28
str r0, [sp, 0x4]
- ldr r0, _08127964 @ =sub_8030ADC
+ ldr r0, _08127964 @ =SetCB2ToReshowScreenAfterMenu
str r0, [sp, 0x8]
movs r0, 0x1
adds r2, r4, 0
@@ -17992,8 +17992,8 @@ _08127950:
bx r0
.align 2, 0
_08127960: .4byte sub_811FB28
-_08127964: .4byte sub_8030ADC
- thumb_func_end sub_81278DC
+_08127964: .4byte SetCB2ToReshowScreenAfterMenu
+ thumb_func_end OpenPartyMenuInBattle
thumb_func_start sub_8127968
sub_8127968: @ 8127968
@@ -18007,7 +18007,7 @@ sub_8127968: @ 8127968
str r0, [sp]
ldr r0, _0812799C @ =sub_8120EBC
str r0, [sp, 0x4]
- ldr r0, _081279A0 @ =sub_8030ADC
+ ldr r0, _081279A0 @ =SetCB2ToReshowScreenAfterMenu
str r0, [sp, 0x8]
movs r0, 0x1
movs r2, 0
@@ -18020,7 +18020,7 @@ sub_8127968: @ 8127968
bx r0
.align 2, 0
_0812799C: .4byte sub_8120EBC
-_081279A0: .4byte sub_8030ADC
+_081279A0: .4byte SetCB2ToReshowScreenAfterMenu
thumb_func_end sub_8127968
thumb_func_start sub_81279A4
@@ -19046,12 +19046,12 @@ _0812817A:
sub_8128184: @ 8128184
push {lr}
bl sub_8108CF0
- ldr r0, _08128194 @ =sub_8030ADC
+ ldr r0, _08128194 @ =SetCB2ToReshowScreenAfterMenu
bl SetMainCallback2
pop {r0}
bx r0
.align 2, 0
-_08128194: .4byte sub_8030ADC
+_08128194: .4byte SetCB2ToReshowScreenAfterMenu
thumb_func_end sub_8128184
thumb_func_start sub_8128198
diff --git a/data/data.s b/data/data.s
index 83621f378..cc024364c 100644
--- a/data/data.s
+++ b/data/data.s
@@ -163,7 +163,7 @@ gTrainerBackPicCoords:: @ 8239F8C
gTrainerBackPicTable:: @ 8239FA4
.incbin "baserom.gba", 0x239FA4, 0x30
-gUnknown_8239FD4:: @ 8239FD4
+gTrainerBackPicPaletteTable:: @ 8239FD4
.incbin "baserom.gba", 0x239FD4, 0x30
gEnemyMonElevation:: @ 823A004
@@ -236,7 +236,7 @@ gUnknown_824F048:: @ 824F048
gTypeEffectiveness:: @ 824F050
.incbin "baserom.gba", 0x24F050, 0x150
-gUnknown_824F1A0:: @ 824F1A0
+gTypeNames:: @ 824F1A0
.incbin "baserom.gba", 0x24F1A0, 0x80
gUnknown_824F220:: @ 824F220
@@ -329,11 +329,7 @@ gUnknown_8250888:: @ 8250888
gUnknown_8250892:: @ 8250892
.incbin "baserom.gba", 0x250892, 0xA
-gUnknown_825089C:: @ 825089C
- .incbin "baserom.gba", 0x25089C, 0xE4
-
-gUnknown_8250980:: @ 8250980
- .incbin "baserom.gba", 0x250980, 0xC
+ .section .rodata.825098C
gUnknown_825098C:: @ 825098C
.incbin "baserom.gba", 0x25098C, 0x8
diff --git a/data/data_83F5738.s b/data/data_83F5738.s
index dc09b0532..2b5b1d1f9 100644
--- a/data/data_83F5738.s
+++ b/data/data_83F5738.s
@@ -387,7 +387,7 @@ gUnknown_83FE6B5:: @ 83FE6B5
gUnknown_83FE6D0:: @ 83FE6D0
.incbin "baserom.gba", 0x3FE6D0, 0x5
-gUnknown_83FE6D5:: @ 83FE6D5
+gText_WhatWillPkmnDo:: @ 83FE6D5
.incbin "baserom.gba", 0x3FE6D5, 0x11
gUnknown_83FE6E6:: @ 83FE6E6
@@ -396,7 +396,7 @@ gUnknown_83FE6E6:: @ 83FE6E6
gUnknown_83FE6FA:: @ 83FE6FA
.incbin "baserom.gba", 0x3FE6FA, 0x1A
-gUnknown_83FE714:: @ 83FE714
+gText_LinkStandby:: @ 83FE714
.incbin "baserom.gba", 0x3FE714, 0x11
gUnknown_83FE725:: @ 83FE725
@@ -405,10 +405,10 @@ gUnknown_83FE725:: @ 83FE725
gUnknown_83FE747:: @ 83FE747
.incbin "baserom.gba", 0x3FE747, 0x1F
-gUnknown_83FE766:: @ 83FE766
+gText_MoveInterfacePP:: @ 83FE766
.incbin "baserom.gba", 0x3FE766, 0x4
-gUnknown_83FE76A:: @ 83FE76A
+gText_MoveInterfaceType:: @ 83FE76A
.incbin "baserom.gba", 0x3FE76A, 0x6
gUnknown_83FE770:: @ 83FE770
@@ -417,7 +417,7 @@ gUnknown_83FE770:: @ 83FE770
gUnknown_83FE791:: @ 83FE791
.incbin "baserom.gba", 0x3FE791, 0xF
-gUnknown_83FE7A0:: @ 83FE7A0
+gText_BattleSwitchWhich:: @ 83FE7A0
.incbin "baserom.gba", 0x3FE7A0, 0x6C
gUnknown_83FE80C:: @ 83FE80C
diff --git a/include/battle.h b/include/battle.h
index e8731ddfb..78b5f4c20 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -5,7 +5,7 @@
#include "constants/battle.h"
#include "battle_util.h"
#include "battle_script_commands.h"
-#include "battle_2.h"
+#include "battle_main.h"
#include "battle_ai_switch_items.h"
#include "battle_gfx_sfx_util.h"
#include "battle_util2.h"
@@ -385,10 +385,6 @@ extern u8 gActiveBattler;
extern u8 gBattlerTarget;
extern u8 gAbsentBattlerFlags;
-// TODO: move these to constants/battle.h
-#define MAX_BATTLERS_COUNT 4
-#define BIT_FLANK 2
-
// script's table id to bit
#define AI_SCRIPT_CHECK_BAD_MOVE (1 << 0)
#define AI_SCRIPT_TRY_TO_FAINT (1 << 1)
@@ -984,5 +980,7 @@ extern u8 gBattlerStatusSummaryTaskId[MAX_BATTLERS_COUNT];
extern u16 gDynamicBasePower;
extern u16 gLastLandedMoves[MAX_BATTLERS_COUNT];
extern u8 gLastHitBy[MAX_BATTLERS_COUNT];
+extern u8 gMultiUsePlayerCursor;
+extern u8 gNumberOfMovesToChoose;
#endif // GUARD_BATTLE_H
diff --git a/include/battle_anim.h b/include/battle_anim.h
index ef179cdd1..35d144bac 100644
--- a/include/battle_anim.h
+++ b/include/battle_anim.h
@@ -133,6 +133,8 @@ u8 GetBattlerSpriteDefault_Y(u8 bank);
u8 sub_80A82E4(u8 bank);
u8 GetSubstituteSpriteDefault_Y(u8 bank);
u8 GetGhostSpriteDefault_Y(u8 battlerId);
+void sub_8072E48(u8 battlerId, u8);
+void sub_8073128(u8);
// battle_anim_80A9C70.s
void LaunchStatusAnimation(u8 bank, u8 statusAnimId);
@@ -154,6 +156,8 @@ void sub_80759DC(u8 spriteId);
bool8 IsBattlerSpritePresent(u8 battlerId);
u8 GetBattlerSpriteSubpriority(u8 battlerId);
void StartAnimLinearTranslation(struct Sprite *sprite);
+void sub_80755B8(struct Sprite *sprite);
+u8 sub_80768B0(u8 battlerId);
// battle_anim_mon_movement.c
void AnimTask_ShakeMon(u8 taskId);
diff --git a/include/battle_controllers.h b/include/battle_controllers.h
index e49911cf1..4ed292e04 100644
--- a/include/battle_controllers.h
+++ b/include/battle_controllers.h
@@ -82,6 +82,9 @@ enum
#define INSTANT_HP_BAR_DROP 32767
+// Special return values in gBattleBufferB from Battle Controller functions.
+#define RET_VALUE_LEVELED_UP 11
+
struct UnusedControllerStruct
{
u8 field_0 : 7;
@@ -227,17 +230,20 @@ void BtlController_EmitResetActionMoveSelection(u8 bufferId, u8 caseId);
void BtlController_EmitCmd55(u8 bufferId, u8 arg1);
// player controller
+void nullsub_13(void);
void SetControllerToPlayer(void);
void PlayerHandleGetRawMonData(void);
-void sub_80587B0(void);
-void sub_805CC00(struct Sprite *sprite);
+void sub_80335F8(struct Sprite *sprite);
void SetCB2ToReshowScreenAfterMenu(void);
void SetCB2ToReshowScreenAfterMenu2(void);
void c3_0802FDF4(u8 taskId);
void ActionSelectionCreateCursorAt(u8 cursorPos, u8 unused);
void ActionSelectionDestroyCursorAt(u8 cursorPos);
void InitMoveSelectionsVarsAndStrings(void);
-void nullsub_13(void);
+void sub_802F6A8(void);
+void MoveSelectionCreateCursorAt(u8 cursorPos, u8 arg1);
+void MoveSelectionDestroyCursorAt(u8 cursorPos);
+void HandleInputChooseMove(void);
// recorded player controller
void SetControllerToRecordedPlayer(void);
@@ -262,6 +268,7 @@ void sub_80EB2F4(u8);
void sub_80E8570(void);
void sub_80E85C0(void);
void sub_80E8598(void);
+void sub_80E7988(void);
// link opponent
void SetControllerToLinkOpponent(void);
diff --git a/include/battle_2.h b/include/battle_main.h
index 19f59fc75..f05c08df2 100644
--- a/include/battle_2.h
+++ b/include/battle_main.h
@@ -1,8 +1,47 @@
-#ifndef GUARD_BATTLE_2_H
-#define GUARD_BATTLE_2_H
+#ifndef GUARD_BATTLE_MAIN_H
+#define GUARD_BATTLE_MAIN_H
-#include "global.h"
-#include "sprite.h"
+struct TrainerMoney
+{
+ u8 classId;
+ u8 value;
+};
+
+struct UnknownPokemonStruct4
+{
+ /*0x00*/ u16 species;
+ /*0x02*/ u16 heldItem;
+ /*0x04*/ u8 nickname[POKEMON_NAME_LENGTH + 1];
+ /*0x0F*/ u8 level;
+ /*0x10*/ u16 hp;
+ /*0x12*/ u16 maxhp;
+ /*0x14*/ u32 status;
+ /*0x18*/ u32 personality;
+ /*0x1C*/ u8 gender;
+ /*0x1D*/ u8 language;
+};
+
+#define TYPE_NAME_LENGTH 6
+#define ABILITY_NAME_LENGTH 12
+
+// defines for the u8 array gTypeEffectiveness
+#define TYPE_EFFECT_ATK_TYPE(i)((gTypeEffectiveness[i + 0]))
+#define TYPE_EFFECT_DEF_TYPE(i)((gTypeEffectiveness[i + 1]))
+#define TYPE_EFFECT_MULTIPLIER(i)((gTypeEffectiveness[i + 2]))
+
+// defines for the gTypeEffectiveness multipliers
+#define TYPE_MUL_NO_EFFECT 0
+#define TYPE_MUL_NOT_EFFECTIVE 5
+#define TYPE_MUL_NORMAL 10
+#define TYPE_MUL_SUPER_EFFECTIVE 20
+
+// special type table Ids
+#define TYPE_FORESIGHT 0xFE
+#define TYPE_ENDTABLE 0xFF
+
+// defines for the 'DoBounceEffect' function
+#define BOUNCE_MON 0x0
+#define BOUNCE_HEALTHBOX 0x1
void CB2_InitBattle(void);
void BattleMainCB2(void);
@@ -11,20 +50,20 @@ void sub_8038528(struct Sprite* sprite);
void sub_8038A04(void); // unused
void VBlankCB_Battle(void);
void sub_8038B74(struct Sprite *sprite);
-void sub_8038D64(void);
+void sub_8011A1C(void);
u32 sub_80391E0(u8 arrayId, u8 caseId);
u32 sub_80397C4(u32 setId, u32 tableId);
void oac_poke_opponent(struct Sprite *sprite);
void SpriteCallbackDummy_2(struct Sprite *sprite);
void sub_8039934(struct Sprite *sprite);
-void sub_8039AD8(struct Sprite *sprite);
-void sub_8039B2C(struct Sprite *sprite);
+void sub_8012098(struct Sprite *sprite);
+void sub_8012044(struct Sprite *sprite);
void sub_8039B58(struct Sprite *sprite);
void sub_8039BB4(struct Sprite *sprite);
void sub_80105DC(struct Sprite *sprite);
-void sub_8039C00(struct Sprite *sprite);
-void dp11b_obj_instanciate(u8 bank, u8 b, s8 c, s8 d);
-void dp11b_obj_free(u8 bank, bool8 b);
+void sub_8012110(struct Sprite *sprite);
+void DoBounceEffect(u8 bank, u8 b, s8 c, s8 d);
+void EndBounceEffect(u8 bank, bool8 b);
void sub_8039E44(struct Sprite *sprite);
void sub_8039E60(struct Sprite *sprite);
void sub_8039E84(struct Sprite *sprite);
@@ -61,4 +100,4 @@ extern const u8 * const gStatusConditionStringsTable[7][2];
extern const u8 gTypeEffectiveness[336];
-#endif // GUARD_BATTLE_2_H
+#endif // GUARD_BATTLE_MAIN_H
diff --git a/include/battle_script_commands.h b/include/battle_script_commands.h
index d4cb75e91..6ff287872 100644
--- a/include/battle_script_commands.h
+++ b/include/battle_script_commands.h
@@ -61,6 +61,7 @@ void BattleCreateYesNoCursorAt(u8 cursorPosition);
void BufferMoveToLearnIntoBattleTextBuff2(void);
void HandleBattleWindow(u8 xStart, u8 yStart, u8 xEnd, u8 yEnd, u8 flags);
bool8 UproarWakeUpCheck(u8 bank);
+bool32 IsMonGettingExpSentOut(void);
extern void (* const gBattleScriptingCommandsTable[])(void);
extern const u8 gUnknown_0831C494[][4];
diff --git a/include/data2.h b/include/data2.h
index 4378e8226..1035d78dc 100644
--- a/include/data2.h
+++ b/include/data2.h
@@ -30,7 +30,7 @@ extern const struct CompressedSpritePalette gMonPaletteTable[];
extern const struct CompressedSpritePalette gMonShinyPaletteTable[];
extern const struct CompressedSpriteSheet gTrainerFrontPicTable[];
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
-extern const struct CompressedSpritePalette gUnknown_8239FD4[];
+extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
extern const struct CompressedSpriteSheet gSpriteSheet_EnemyShadow;
extern const struct SpriteTemplate gSpriteTemplate_EnemyShadow;
diff --git a/include/link.h b/include/link.h
index d816cfcf9..5f8d8f161 100644
--- a/include/link.h
+++ b/include/link.h
@@ -192,14 +192,14 @@ void sub_800E0E8(void);
bool8 sub_800A520(void);
bool8 sub_8010500(void);
void sub_800DFB4(u8, u8);
-void sub_800ADF8(void);
+void sub_800AB9C(void);
void sub_800B488(void);
void sub_8009734(void);
void sub_800A620(void);
void sub_8011BD0(void);
u8 sub_800ABAC(void);
u8 sub_800ABBC(void);
-void sub_800AC34(void);
+void sub_800AAC0(void);
void OpenLink(void);
bool8 IsLinkMaster(void);
void CheckShouldAdvanceLinkState(void);
diff --git a/include/party_menu.h b/include/party_menu.h
index 3c88f75e0..84d9edb76 100644
--- a/include/party_menu.h
+++ b/include/party_menu.h
@@ -29,7 +29,9 @@ struct Struct203B0A0
};
extern struct Struct203B0A0 gUnknown_203B0A0;
-
+extern u8 gUnknown_203B0C0;
+extern u8 gUnknown_203B0C1;
+extern u8 gUnknown_203B0DC[3];
extern void (*gUnknown_3005E98)(u8 taskId, TaskFunc func);
bool8 FieldCallback_PrepareFadeInFromMenu(void);
@@ -64,5 +66,6 @@ u8 GetItemEffectType(u16 itemId);
u8 pokemon_order_func(u8);
void sub_8127CAC(void);
void sub_8127DA8(u8 battlerId, u8 multiplayerFlag);
+void OpenPartyMenuInBattle(u8 arg);
#endif // GUARD_PARTY_MENU_H
diff --git a/include/pokemon.h b/include/pokemon.h
index d3a7522c9..ae966feb2 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -94,6 +94,8 @@
#define MON_DATA_SPATK2 87
#define MON_DATA_SPDEF2 88
+#define MAX_LEVEL 100
+
#define OT_ID_RANDOM_NO_SHINY 2
#define OT_ID_PRESET 1
#define OT_ID_PLAYER_ID 0
diff --git a/include/pokemon_special_anim.h b/include/pokemon_special_anim.h
new file mode 100644
index 000000000..4ccccaada
--- /dev/null
+++ b/include/pokemon_special_anim.h
@@ -0,0 +1,9 @@
+#ifndef GUARD_POKEMON_SPECIAL_ANIM_H
+#define GUARD_POKEMON_SPECIAL_ANIM_H
+
+#include "global.h"
+
+void sub_811E5B8(u16, u16, u16, u16, u16, u16);
+bool8 sub_811E680(void);
+
+#endif // GUARD_POKEMON_SPECIAL_ANIM_H
diff --git a/include/strings.h b/include/strings.h
index 5197a56f7..2b914dfc8 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -213,4 +213,14 @@ extern const u8 gUnknown_83FDA4C[];
extern const u8 gUnknown_83FE747[];
extern const u8 gUnknown_83FE6E6[];
+// battle_controller_player
+extern const u8 gText_BattleSwitchWhich[];
+extern const u8 gUnknown_83FE770[];
+extern const u8 gText_MoveInterfacePP[];
+extern const u8 gUnknown_83FE770[];
+extern const u8 gText_MoveInterfaceType[];
+extern const u8 gText_LinkStandby[];
+extern const u8 gUnknown_83FE725[];
+extern const u8 gText_WhatWillPkmnDo[];
+
#endif //GUARD_STRINGS_H
diff --git a/ld_script.txt b/ld_script.txt
index 9d1ed1469..019190be4 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -70,7 +70,7 @@ SECTIONS {
src/battle_util.o(.text);
asm/battle_script_commands.o(.text);
src/battle_util2.o(.text);
- asm/battle_controller_player.o(.text);
+ src/battle_controller_player.o(.text);
src/battle_gfx_sfx_util.o(.text);
src/battle_controller_opponent.o(.text);
src/battle_ai_switch_items.o(.text);
@@ -382,6 +382,8 @@ SECTIONS {
data/data.o(.rodata);
src/battle_util.o(.rodata);
data/data.o(.rodata.825011C);
+ src/battle_controller_player.o(.rodata);
+ data/data.o(.rodata.825098C);
src/battle_controller_opponent.o(.rodata);
data/data.o(.rodata.8250B20);
src/pokemon.o(.rodata);
diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c
index c675e45fe..ce1b081e7 100644
--- a/src/battle_ai_script_commands.c
+++ b/src/battle_ai_script_commands.c
@@ -1,6 +1,6 @@
#include "global.h"
#include "battle.h"
-#include "battle_2.h"
+#include "battle_main.h"
#include "util.h"
#include "item.h"
#include "random.h"
diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c
index cd0cc70ad..c925e3af1 100644
--- a/src/battle_controller_opponent.c
+++ b/src/battle_controller_opponent.c
@@ -530,7 +530,7 @@ static u32 GetOpponentMonData(u8 monId, u8 *dst)
moveData.pp[size] = GetMonData(&gEnemyParty[monId], MON_DATA_PP1 + size);
}
moveData.ppBonuses = GetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES);
- src = (u8*)(&moveData);
+ src = (u8 *)(&moveData);
for (size = 0; size < sizeof(moveData); ++size)
dst[size] = src[size];
break;
diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c
new file mode 100644
index 000000000..efa2b0d95
--- /dev/null
+++ b/src/battle_controller_player.c
@@ -0,0 +1,2975 @@
+#include "global.h"
+#include "bg.h"
+#include "data2.h"
+#include "item.h"
+#include "item_menu.h"
+#include "link.h"
+#include "main.h"
+#include "m4a.h"
+#include "palette.h"
+#include "party_menu.h"
+#include "pokeball.h"
+#include "pokemon.h"
+#include "random.h"
+#include "sound.h"
+#include "strings.h"
+#include "string_util.h"
+#include "pokemon_special_anim.h"
+#include "task.h"
+#include "text.h"
+#include "util.h"
+#include "window.h"
+#include "battle.h"
+#include "battle_anim.h"
+#include "battle_controllers.h"
+#include "battle_interface.h"
+#include "battle_message.h"
+#include "battle_setup.h"
+#include "battle_script_commands.h"
+#include "reshow_battle_screen.h"
+#include "constants/battle_anim.h"
+#include "constants/items.h"
+#include "constants/moves.h"
+#include "constants/songs.h"
+
+static void PlayerHandleGetMonData(void);
+static void PlayerHandleSetMonData(void);
+static void PlayerHandleSetRawMonData(void);
+static void PlayerHandleLoadMonSprite(void);
+static void PlayerHandleSwitchInAnim(void);
+static void PlayerHandleReturnMonToBall(void);
+static void PlayerHandleDrawTrainerPic(void);
+static void PlayerHandleTrainerSlide(void);
+static void PlayerHandleTrainerSlideBack(void);
+static void PlayerHandleFaintAnimation(void);
+static void PlayerHandlePaletteFade(void);
+static void PlayerHandleSuccessBallThrowAnim(void);
+static void PlayerHandleBallThrowAnim(void);
+static void PlayerHandlePause(void);
+static void PlayerHandleMoveAnimation(void);
+static void PlayerHandlePrintString(void);
+static void PlayerHandlePrintSelectionString(void);
+static void PlayerHandleChooseAction(void);
+static void PlayerHandleUnknownYesNoBox(void);
+static void PlayerHandleChooseMove(void);
+static void PlayerHandleChooseItem(void);
+static void PlayerHandleChoosePokemon(void);
+static void PlayerHandleCmd23(void);
+static void PlayerHandleHealthBarUpdate(void);
+static void PlayerHandleExpUpdate(void);
+static void PlayerHandleStatusIconUpdate(void);
+static void PlayerHandleStatusAnimation(void);
+static void PlayerHandleStatusXor(void);
+static void PlayerHandleDataTransfer(void);
+static void PlayerHandleDMA3Transfer(void);
+static void PlayerHandlePlayBGM(void);
+static void PlayerHandleCmd32(void);
+static void PlayerHandleTwoReturnValues(void);
+static void PlayerHandleChosenMonReturnValue(void);
+static void PlayerHandleOneReturnValue(void);
+static void PlayerHandleOneReturnValue_Duplicate(void);
+static void PlayerHandleCmd37(void);
+static void PlayerHandleCmd38(void);
+static void PlayerHandleCmd39(void);
+static void PlayerHandleCmd40(void);
+static void PlayerHandleHitAnimation(void);
+static void PlayerHandleCmd42(void);
+static void PlayerHandlePlaySE(void);
+static void PlayerHandlePlayFanfare(void);
+static void PlayerHandleFaintingCry(void);
+static void PlayerHandleIntroSlide(void);
+static void PlayerHandleIntroTrainerBallThrow(void);
+static void PlayerHandleDrawPartyStatusSummary(void);
+static void PlayerHandleHidePartyStatusSummary(void);
+static void PlayerHandleEndBounceEffect(void);
+static void PlayerHandleSpriteInvisibility(void);
+static void PlayerHandleBattleAnimation(void);
+static void PlayerHandleLinkStandbyMsg(void);
+static void PlayerHandleResetActionMoveSelection(void);
+static void PlayerHandleCmd55(void);
+static void PlayerCmdEnd(void);
+
+static void PlayerBufferRunCommand(void);
+static void HandleInputChooseTarget(void);
+static void MoveSelectionDisplayPpNumber(void);
+static void MoveSelectionDisplayPpString(void);
+static void MoveSelectionDisplayMoveType(void);
+static void MoveSelectionDisplayMoveNames(void);
+static void HandleMoveSwitching(void);
+static void WaitForMonSelection(void);
+static void CompleteWhenChoseItem(void);
+static void Task_LaunchLvlUpAnim(u8 taskId);
+static void Task_PrepareToGiveExpWithExpBar(u8 taskId);
+static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8 taskId);
+static void Task_UpdateLvlInHealthbox(u8 taskId);
+static void PrintLinkStandbyMsg(void);
+static u32 CopyPlayerMonData(u8 monId, u8 *dst);
+static void SetPlayerMonData(u8 monId);
+static void DoSwitchOutAnimation(void);
+static void PlayerDoMoveAnimation(void);
+static void task05_08033660(u8 taskId);
+static void sub_8033AC8(void);
+static void sub_802FCAC(void);
+static void sub_80300F4(u8 taskId);
+static void sub_80303A8(u8 taskId);
+static void sub_8031FF4(u8 battlerId, bool8 dontClearSubstituteBit);
+static void sub_8033830(void);
+
+static void (*const sPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
+{
+ PlayerHandleGetMonData,
+ PlayerHandleGetRawMonData,
+ PlayerHandleSetMonData,
+ PlayerHandleSetRawMonData,
+ PlayerHandleLoadMonSprite,
+ PlayerHandleSwitchInAnim,
+ PlayerHandleReturnMonToBall,
+ PlayerHandleDrawTrainerPic,
+ PlayerHandleTrainerSlide,
+ PlayerHandleTrainerSlideBack,
+ PlayerHandleFaintAnimation,
+ PlayerHandlePaletteFade,
+ PlayerHandleSuccessBallThrowAnim,
+ PlayerHandleBallThrowAnim,
+ PlayerHandlePause,
+ PlayerHandleMoveAnimation,
+ PlayerHandlePrintString,
+ PlayerHandlePrintSelectionString,
+ PlayerHandleChooseAction,
+ PlayerHandleUnknownYesNoBox,
+ PlayerHandleChooseMove,
+ PlayerHandleChooseItem,
+ PlayerHandleChoosePokemon,
+ PlayerHandleCmd23,
+ PlayerHandleHealthBarUpdate,
+ PlayerHandleExpUpdate,
+ PlayerHandleStatusIconUpdate,
+ PlayerHandleStatusAnimation,
+ PlayerHandleStatusXor,
+ PlayerHandleDataTransfer,
+ PlayerHandleDMA3Transfer,
+ PlayerHandlePlayBGM,
+ PlayerHandleCmd32,
+ PlayerHandleTwoReturnValues,
+ PlayerHandleChosenMonReturnValue,
+ PlayerHandleOneReturnValue,
+ PlayerHandleOneReturnValue_Duplicate,
+ PlayerHandleCmd37,
+ PlayerHandleCmd38,
+ PlayerHandleCmd39,
+ PlayerHandleCmd40,
+ PlayerHandleHitAnimation,
+ PlayerHandleCmd42,
+ PlayerHandlePlaySE,
+ PlayerHandlePlayFanfare,
+ PlayerHandleFaintingCry,
+ PlayerHandleIntroSlide,
+ PlayerHandleIntroTrainerBallThrow,
+ PlayerHandleDrawPartyStatusSummary,
+ PlayerHandleHidePartyStatusSummary,
+ PlayerHandleEndBounceEffect,
+ PlayerHandleSpriteInvisibility,
+ PlayerHandleBattleAnimation,
+ PlayerHandleLinkStandbyMsg,
+ PlayerHandleResetActionMoveSelection,
+ PlayerHandleCmd55,
+ PlayerCmdEnd,
+};
+
+static const u8 sTargetIdentities[] = { B_POSITION_PLAYER_LEFT, B_POSITION_PLAYER_RIGHT, B_POSITION_OPPONENT_RIGHT, B_POSITION_OPPONENT_LEFT };
+
+// not used
+static const u8 gUnknown_8250984[] = { 0x48, 0x48, 0x20, 0x5a, 0x50, 0x50, 0x50, 0x58 };
+
+void nullsub_13(void)
+{
+}
+
+void SetControllerToPlayer(void)
+{
+ gBattlerControllerFuncs[gActiveBattler] = PlayerBufferRunCommand;
+ gDoingBattleAnim = FALSE;
+}
+
+static void PlayerBufferExecCompleted(void)
+{
+ gBattlerControllerFuncs[gActiveBattler] = PlayerBufferRunCommand;
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ u8 playerId = GetMultiplayerId();
+
+ PrepareBufferDataTransferLink(2, 4, &playerId);
+ gBattleBufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP;
+ }
+ else
+ {
+ gBattleControllerExecFlags &= ~gBitTable[gActiveBattler];
+ }
+}
+
+static void PlayerBufferRunCommand(void)
+{
+ if (gBattleControllerExecFlags & gBitTable[gActiveBattler])
+ {
+ if (gBattleBufferA[gActiveBattler][0] < ARRAY_COUNT(sPlayerBufferCommands))
+ sPlayerBufferCommands[gBattleBufferA[gActiveBattler][0]]();
+ else
+ PlayerBufferExecCompleted();
+ }
+}
+
+static void CompleteOnBattlerSpritePosX_0(void)
+{
+ if (gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x == 0)
+ PlayerBufferExecCompleted();
+}
+
+static void HandleInputChooseAction(void)
+{
+ u16 itemId = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8);
+
+ DoBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX, 7, 1);
+ DoBounceEffect(gActiveBattler, BOUNCE_MON, 7, 1);
+ if (JOY_NEW(A_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+
+ switch (gActionSelectionCursor[gActiveBattler])
+ {
+ case 0:
+ BtlController_EmitTwoReturnValues(1, B_ACTION_USE_MOVE, 0);
+ break;
+ case 1:
+ BtlController_EmitTwoReturnValues(1, B_ACTION_USE_ITEM, 0);
+ break;
+ case 2:
+ BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0);
+ break;
+ case 3:
+ BtlController_EmitTwoReturnValues(1, B_ACTION_RUN, 0);
+ break;
+ }
+ PlayerBufferExecCompleted();
+ }
+ else if (JOY_NEW(DPAD_LEFT))
+ {
+ if (gActionSelectionCursor[gActiveBattler] & 1) // if is B_ACTION_USE_ITEM or B_ACTION_RUN
+ {
+ PlaySE(SE_SELECT);
+ ActionSelectionDestroyCursorAt(gActionSelectionCursor[gActiveBattler]);
+ gActionSelectionCursor[gActiveBattler] ^= 1;
+ ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0);
+ }
+ }
+ else if (JOY_NEW(DPAD_RIGHT))
+ {
+ if (!(gActionSelectionCursor[gActiveBattler] & 1)) // if is B_ACTION_USE_MOVE or B_ACTION_SWITCH
+ {
+ PlaySE(SE_SELECT);
+ ActionSelectionDestroyCursorAt(gActionSelectionCursor[gActiveBattler]);
+ gActionSelectionCursor[gActiveBattler] ^= 1;
+ ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0);
+ }
+ }
+ else if (JOY_NEW(DPAD_UP))
+ {
+ if (gActionSelectionCursor[gActiveBattler] & 2) // if is B_ACTION_SWITCH or B_ACTION_RUN
+ {
+ PlaySE(SE_SELECT);
+ ActionSelectionDestroyCursorAt(gActionSelectionCursor[gActiveBattler]);
+ gActionSelectionCursor[gActiveBattler] ^= 2;
+ ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0);
+ }
+ }
+ else if (JOY_NEW(DPAD_DOWN))
+ {
+ if (!(gActionSelectionCursor[gActiveBattler] & 2)) // if is B_ACTION_USE_MOVE or B_ACTION_USE_ITEM
+ {
+ PlaySE(SE_SELECT);
+ ActionSelectionDestroyCursorAt(gActionSelectionCursor[gActiveBattler]);
+ gActionSelectionCursor[gActiveBattler] ^= 2;
+ ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0);
+ }
+ }
+ else if (JOY_NEW(B_BUTTON))
+ {
+ if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ && GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_RIGHT
+ && !(gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)])
+ && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ {
+ if (gBattleBufferA[gActiveBattler][1] == B_ACTION_USE_ITEM)
+ {
+ // Add item to bag if it is a ball
+ if (itemId <= ITEM_PREMIER_BALL)
+ AddBagItem(itemId, 1);
+ else
+ return;
+ }
+ PlaySE(SE_SELECT);
+ BtlController_EmitTwoReturnValues(1, B_ACTION_CANCEL_PARTNER, 0);
+ PlayerBufferExecCompleted();
+ }
+ }
+ else if (JOY_NEW(START_BUTTON))
+ {
+ SwapHpBarsWithHpText();
+ }
+}
+
+static void sub_802E640(void)
+{
+ EndBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX);
+ EndBounceEffect(gActiveBattler, BOUNCE_MON);
+ gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseTarget;
+}
+
+static void HandleInputChooseTarget(void)
+{
+ s32 i;
+ u8 identities[4];
+
+ memcpy(identities, sTargetIdentities, ARRAY_COUNT(sTargetIdentities));
+ DoBounceEffect(gMultiUsePlayerCursor, BOUNCE_HEALTHBOX, 15, 1);
+ i = 0;
+ if (gBattlersCount != 0)
+ {
+ do
+ {
+ if (i != gMultiUsePlayerCursor)
+ EndBounceEffect(i, BOUNCE_HEALTHBOX);
+ ++i;
+ }
+ while (i < gBattlersCount);
+ }
+ if (JOY_NEW(A_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = sub_8012098;
+ BtlController_EmitTwoReturnValues(1, 10, gMoveSelectionCursor[gActiveBattler] | (gMultiUsePlayerCursor << 8));
+ EndBounceEffect(gMultiUsePlayerCursor, BOUNCE_HEALTHBOX);
+ PlayerBufferExecCompleted();
+ }
+ else if (JOY_NEW(B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = sub_8012098;
+ gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseMove;
+ DoBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX, 7, 1);
+ DoBounceEffect(gActiveBattler, BOUNCE_MON, 7, 1);
+ EndBounceEffect(gMultiUsePlayerCursor, BOUNCE_HEALTHBOX);
+ }
+ else if (JOY_NEW(DPAD_LEFT | DPAD_UP))
+ {
+ PlaySE(SE_SELECT);
+ gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = sub_8012098;
+
+ do
+ {
+ u8 currSelIdentity = GetBattlerPosition(gMultiUsePlayerCursor);
+
+ for (i = 0; i < MAX_BATTLERS_COUNT; ++i)
+ if (currSelIdentity == identities[i])
+ break;
+ do
+ {
+ if (--i < 0)
+ i = MAX_BATTLERS_COUNT; // UB: array out of range
+ gMultiUsePlayerCursor = GetBattlerAtPosition(identities[i]);
+ }
+ while (gMultiUsePlayerCursor == gBattlersCount);
+ i = 0;
+ switch (GetBattlerPosition(gMultiUsePlayerCursor))
+ {
+ case B_POSITION_PLAYER_LEFT:
+ case B_POSITION_PLAYER_RIGHT:
+ if (gActiveBattler != gMultiUsePlayerCursor)
+ ++i;
+ else if (gBattleMoves[GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MOVE1 + gMoveSelectionCursor[gActiveBattler])].target & MOVE_TARGET_USER_OR_SELECTED)
+ ++i;
+ break;
+ case B_POSITION_OPPONENT_LEFT:
+ case B_POSITION_OPPONENT_RIGHT:
+ ++i;
+ break;
+ }
+ if (gAbsentBattlerFlags & gBitTable[gMultiUsePlayerCursor])
+ i = 0;
+ }
+ while (i == 0);
+ gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = sub_8012044;
+ }
+ else if (JOY_NEW(DPAD_RIGHT | DPAD_DOWN))
+ {
+ PlaySE(SE_SELECT);
+ gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = sub_8012098;
+
+ do
+ {
+ u8 currSelIdentity = GetBattlerPosition(gMultiUsePlayerCursor);
+
+ for (i = 0; i < MAX_BATTLERS_COUNT; ++i)
+ if (currSelIdentity == identities[i])
+ break;
+ do
+ {
+ if (++i > 3)
+ i = 0;
+ gMultiUsePlayerCursor = GetBattlerAtPosition(identities[i]);
+ }
+ while (gMultiUsePlayerCursor == gBattlersCount);
+ i = 0;
+ switch (GetBattlerPosition(gMultiUsePlayerCursor))
+ {
+ case B_POSITION_PLAYER_LEFT:
+ case B_POSITION_PLAYER_RIGHT:
+ if (gActiveBattler != gMultiUsePlayerCursor)
+ ++i;
+ else if (gBattleMoves[GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MOVE1 + gMoveSelectionCursor[gActiveBattler])].target & MOVE_TARGET_USER_OR_SELECTED)
+ ++i;
+ break;
+ case B_POSITION_OPPONENT_LEFT:
+ case B_POSITION_OPPONENT_RIGHT:
+ ++i;
+ break;
+ }
+ if (gAbsentBattlerFlags & gBitTable[gMultiUsePlayerCursor])
+ i = 0;
+ }
+ while (i == 0);
+ gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = sub_8012044;
+ }
+}
+
+void HandleInputChooseMove(void)
+{
+ bool32 canSelectTarget = FALSE;
+ struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleBufferA[gActiveBattler][4]);
+
+ sub_8033AC8();
+ if (JOY_NEW(A_BUTTON))
+ {
+ u8 moveTarget;
+
+ PlaySE(SE_SELECT);
+ if (moveInfo->moves[gMoveSelectionCursor[gActiveBattler]] == MOVE_CURSE)
+ {
+ if (moveInfo->monType1 != TYPE_GHOST && moveInfo->monType2 != TYPE_GHOST)
+ moveTarget = MOVE_TARGET_USER;
+ else
+ moveTarget = MOVE_TARGET_SELECTED;
+ }
+ else
+ {
+ moveTarget = gBattleMoves[moveInfo->moves[gMoveSelectionCursor[gActiveBattler]]].target;
+ }
+
+ if (moveTarget & MOVE_TARGET_USER)
+ gMultiUsePlayerCursor = gActiveBattler;
+ else
+ gMultiUsePlayerCursor = GetBattlerAtPosition((GetBattlerPosition(gActiveBattler) & BIT_SIDE) ^ BIT_SIDE);
+
+ if (!gBattleBufferA[gActiveBattler][1]) // not a double battle
+ {
+ if (moveTarget & MOVE_TARGET_USER_OR_SELECTED && !gBattleBufferA[gActiveBattler][2])
+ ++canSelectTarget;
+ }
+ else // double battle
+ {
+ if (!(moveTarget & (MOVE_TARGET_RANDOM | MOVE_TARGET_BOTH | MOVE_TARGET_DEPENDS | MOVE_TARGET_FOES_AND_ALLY | MOVE_TARGET_OPPONENTS_FIELD | MOVE_TARGET_USER)))
+ ++canSelectTarget; // either selected or user
+ if (moveInfo->currentPp[gMoveSelectionCursor[gActiveBattler]] == 0)
+ {
+ canSelectTarget = FALSE;
+ }
+ else if (!(moveTarget & (MOVE_TARGET_USER | MOVE_TARGET_USER_OR_SELECTED)) && CountAliveMonsInBattle(BATTLE_ALIVE_EXCEPT_ACTIVE) <= 1)
+ {
+ gMultiUsePlayerCursor = GetDefaultMoveTarget(gActiveBattler);
+ canSelectTarget = FALSE;
+ }
+ }
+ ResetPaletteFadeControl();
+ BeginNormalPaletteFade(0xF0000, 0, 0, 0, RGB_WHITE);
+ if (!canSelectTarget)
+ {
+ BtlController_EmitTwoReturnValues(1, 10, gMoveSelectionCursor[gActiveBattler] | (gMultiUsePlayerCursor << 8));
+ PlayerBufferExecCompleted();
+ }
+ else
+ {
+ gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseTarget;
+ if (moveTarget & (MOVE_TARGET_USER | MOVE_TARGET_USER_OR_SELECTED))
+ gMultiUsePlayerCursor = gActiveBattler;
+ else if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)])
+ gMultiUsePlayerCursor = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
+ else
+ gMultiUsePlayerCursor = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = sub_8012044;
+ }
+ }
+ else if (JOY_NEW(B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ BtlController_EmitTwoReturnValues(1, 10, 0xFFFF);
+ PlayerBufferExecCompleted();
+ ResetPaletteFadeControl();
+ BeginNormalPaletteFade(0xF0000, 0, 0, 0, RGB_WHITE);
+ }
+ else if (JOY_NEW(DPAD_LEFT))
+ {
+ if (gMoveSelectionCursor[gActiveBattler] & 1)
+ {
+ MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBattler]);
+ gMoveSelectionCursor[gActiveBattler] ^= 1;
+ PlaySE(SE_SELECT);
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0);
+ MoveSelectionDisplayPpNumber();
+ MoveSelectionDisplayMoveType();
+ BeginNormalPaletteFade(0xF0000, 0, 0, 0, RGB_WHITE);
+ }
+ }
+ else if (JOY_NEW(DPAD_RIGHT))
+ {
+ if (!(gMoveSelectionCursor[gActiveBattler] & 1)
+ && (gMoveSelectionCursor[gActiveBattler] ^ 1) < gNumberOfMovesToChoose)
+ {
+ MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBattler]);
+ gMoveSelectionCursor[gActiveBattler] ^= 1;
+ PlaySE(SE_SELECT);
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0);
+ MoveSelectionDisplayPpNumber();
+ MoveSelectionDisplayMoveType();
+ BeginNormalPaletteFade(0xF0000, 0, 0, 0, RGB_WHITE);
+ }
+ }
+ else if (JOY_NEW(DPAD_UP))
+ {
+ if (gMoveSelectionCursor[gActiveBattler] & 2)
+ {
+ MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBattler]);
+ gMoveSelectionCursor[gActiveBattler] ^= 2;
+ PlaySE(SE_SELECT);
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0);
+ MoveSelectionDisplayPpNumber();
+ MoveSelectionDisplayMoveType();
+ BeginNormalPaletteFade(0xF0000, 0, 0, 0, RGB_WHITE);
+ }
+ }
+ else if (JOY_NEW(DPAD_DOWN))
+ {
+ if (!(gMoveSelectionCursor[gActiveBattler] & 2)
+ && (gMoveSelectionCursor[gActiveBattler] ^ 2) < gNumberOfMovesToChoose)
+ {
+ MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBattler]);
+ gMoveSelectionCursor[gActiveBattler] ^= 2;
+ PlaySE(SE_SELECT);
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0);
+ MoveSelectionDisplayPpNumber();
+ MoveSelectionDisplayMoveType();
+ BeginNormalPaletteFade(0xF0000, 0, 0, 0, RGB_WHITE);
+ }
+ }
+ else if (JOY_NEW(SELECT_BUTTON))
+ {
+ if (gNumberOfMovesToChoose > 1 && !(gBattleTypeFlags & BATTLE_TYPE_LINK))
+ {
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 29);
+ if (gMoveSelectionCursor[gActiveBattler] != 0)
+ gMultiUsePlayerCursor = 0;
+ else
+ gMultiUsePlayerCursor = gMoveSelectionCursor[gActiveBattler] + 1;
+ MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 27);
+ BattlePutTextOnWindow(gText_BattleSwitchWhich, 0xB);
+ gBattlerControllerFuncs[gActiveBattler] = HandleMoveSwitching;
+ }
+ }
+}
+
+// not used
+static u32 sub_802EDDC(void)
+{
+ u32 var = 0;
+
+ if (JOY_NEW(A_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ var = 1;
+ }
+ if (JOY_NEW(B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ gBattle_BG0_X = 0;
+ gBattle_BG0_Y = 0x140;
+ var = 0xFF;
+ }
+ if (JOY_NEW(DPAD_LEFT) && gMoveSelectionCursor[gActiveBattler] & 1)
+ {
+ MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBattler]);
+ gMoveSelectionCursor[gActiveBattler] ^= 1;
+ PlaySE(SE_SELECT);
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0);
+ }
+ if (JOY_NEW(DPAD_RIGHT) && !(gMoveSelectionCursor[gActiveBattler] & 1)
+ && (gMoveSelectionCursor[gActiveBattler] ^ 1) < gNumberOfMovesToChoose)
+ {
+ MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBattler]);
+ gMoveSelectionCursor[gActiveBattler] ^= 1;
+ PlaySE(SE_SELECT);
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0);
+ }
+ if (JOY_NEW(DPAD_UP) && gMoveSelectionCursor[gActiveBattler] & 2)
+ {
+ MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBattler]);
+ gMoveSelectionCursor[gActiveBattler] ^= 2;
+ PlaySE(SE_SELECT);
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0);
+ }
+ if (JOY_NEW(DPAD_DOWN) && !(gMoveSelectionCursor[gActiveBattler] & 2)
+ && (gMoveSelectionCursor[gActiveBattler] ^ 2) < gNumberOfMovesToChoose)
+ {
+ MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBattler]);
+ gMoveSelectionCursor[gActiveBattler] ^= 2;
+ PlaySE(SE_SELECT);
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0);
+ }
+ return var;
+}
+
+static void HandleMoveSwitching(void)
+{
+ u8 perMovePPBonuses[4];
+ struct ChooseMoveStruct moveStruct;
+ u8 totalPPBonuses;
+
+ if (JOY_NEW(A_BUTTON | SELECT_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+
+ if (gMoveSelectionCursor[gActiveBattler] != gMultiUsePlayerCursor)
+ {
+ struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleBufferA[gActiveBattler][4]);
+ s32 i;
+
+ // swap moves and pp
+ i = moveInfo->moves[gMoveSelectionCursor[gActiveBattler]];
+ moveInfo->moves[gMoveSelectionCursor[gActiveBattler]] = moveInfo->moves[gMultiUsePlayerCursor];
+ moveInfo->moves[gMultiUsePlayerCursor] = i;
+ i = moveInfo->currentPp[gMoveSelectionCursor[gActiveBattler]];
+ moveInfo->currentPp[gMoveSelectionCursor[gActiveBattler]] = moveInfo->currentPp[gMultiUsePlayerCursor];
+ moveInfo->currentPp[gMultiUsePlayerCursor] = i;
+ i = moveInfo->maxPp[gMoveSelectionCursor[gActiveBattler]];
+ moveInfo->maxPp[gMoveSelectionCursor[gActiveBattler]] = moveInfo->maxPp[gMultiUsePlayerCursor];
+ moveInfo->maxPp[gMultiUsePlayerCursor] = i;
+ if (gDisableStructs[gActiveBattler].mimickedMoves & gBitTable[gMoveSelectionCursor[gActiveBattler]])
+ {
+ gDisableStructs[gActiveBattler].mimickedMoves &= (~gBitTable[gMoveSelectionCursor[gActiveBattler]]);
+ gDisableStructs[gActiveBattler].mimickedMoves |= gBitTable[gMultiUsePlayerCursor];
+ }
+ MoveSelectionDisplayMoveNames();
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ perMovePPBonuses[i] = (gBattleMons[gActiveBattler].ppBonuses & (3 << (i * 2))) >> (i * 2);
+
+ totalPPBonuses = perMovePPBonuses[gMoveSelectionCursor[gActiveBattler]];
+ perMovePPBonuses[gMoveSelectionCursor[gActiveBattler]] = perMovePPBonuses[gMultiUsePlayerCursor];
+ perMovePPBonuses[gMultiUsePlayerCursor] = totalPPBonuses;
+ totalPPBonuses = 0;
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ totalPPBonuses |= perMovePPBonuses[i] << (i * 2);
+
+ gBattleMons[gActiveBattler].ppBonuses = totalPPBonuses;
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ gBattleMons[gActiveBattler].moves[i] = moveInfo->moves[i];
+ gBattleMons[gActiveBattler].pp[i] = moveInfo->currentPp[i];
+ }
+ if (!(gBattleMons[gActiveBattler].status2 & STATUS2_TRANSFORMED))
+ {
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ moveStruct.moves[i] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MOVE1 + i);
+ moveStruct.currentPp[i] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_PP1 + i);
+ }
+
+ totalPPBonuses = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_PP_BONUSES);
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ perMovePPBonuses[i] = (totalPPBonuses & (3 << (i * 2))) >> (i * 2);
+ i = moveStruct.moves[gMoveSelectionCursor[gActiveBattler]];
+ moveStruct.moves[gMoveSelectionCursor[gActiveBattler]] = moveStruct.moves[gMultiUsePlayerCursor];
+ moveStruct.moves[gMultiUsePlayerCursor] = i;
+ i = moveStruct.currentPp[gMoveSelectionCursor[gActiveBattler]];
+ moveStruct.currentPp[gMoveSelectionCursor[gActiveBattler]] = moveStruct.currentPp[gMultiUsePlayerCursor];
+ moveStruct.currentPp[gMultiUsePlayerCursor] = i;
+ totalPPBonuses = perMovePPBonuses[gMoveSelectionCursor[gActiveBattler]];
+ perMovePPBonuses[gMoveSelectionCursor[gActiveBattler]] = perMovePPBonuses[gMultiUsePlayerCursor];
+ perMovePPBonuses[gMultiUsePlayerCursor] = totalPPBonuses;
+ totalPPBonuses = 0;
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ totalPPBonuses |= perMovePPBonuses[i] << (i * 2);
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ SetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MOVE1 + i, &moveStruct.moves[i]);
+ SetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_PP1 + i, &moveStruct.currentPp[i]);
+ }
+ SetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_PP_BONUSES, &totalPPBonuses);
+ }
+ }
+ if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE)
+ gBattlerControllerFuncs[gActiveBattler] = sub_80E7988;
+ else
+ gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseMove;
+ gMoveSelectionCursor[gActiveBattler] = gMultiUsePlayerCursor;
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0);
+ MoveSelectionDisplayPpString();
+ MoveSelectionDisplayPpNumber();
+ MoveSelectionDisplayMoveType();
+ }
+ if (JOY_NEW(B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ MoveSelectionDestroyCursorAt(gMultiUsePlayerCursor);
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0);
+ if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE)
+ gBattlerControllerFuncs[gActiveBattler] = sub_80E7988;
+ else
+ gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseMove;
+ MoveSelectionDisplayPpString();
+ MoveSelectionDisplayPpNumber();
+ MoveSelectionDisplayMoveType();
+ }
+ if (JOY_NEW(DPAD_LEFT))
+ {
+ if (gMultiUsePlayerCursor & 1)
+ {
+ if (gMultiUsePlayerCursor == gMoveSelectionCursor[gActiveBattler])
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 29);
+ else
+ MoveSelectionDestroyCursorAt(gMultiUsePlayerCursor);
+ gMultiUsePlayerCursor ^= 1;
+ PlaySE(SE_SELECT);
+
+ if (gMultiUsePlayerCursor == gMoveSelectionCursor[gActiveBattler])
+ MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 0);
+ else
+ MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 27);
+ }
+ }
+ if (JOY_NEW(DPAD_RIGHT))
+ {
+ if (!(gMultiUsePlayerCursor & 1) && (gMultiUsePlayerCursor ^ 1) < gNumberOfMovesToChoose)
+ {
+ if (gMultiUsePlayerCursor == gMoveSelectionCursor[gActiveBattler])
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 29);
+ else
+ MoveSelectionDestroyCursorAt(gMultiUsePlayerCursor);
+ gMultiUsePlayerCursor ^= 1;
+ PlaySE(SE_SELECT);
+
+ if (gMultiUsePlayerCursor == gMoveSelectionCursor[gActiveBattler])
+ MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 0);
+ else
+ MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 27);
+ }
+ }
+ if (JOY_NEW(DPAD_UP))
+ {
+ if (gMultiUsePlayerCursor & 2)
+ {
+ if (gMultiUsePlayerCursor == gMoveSelectionCursor[gActiveBattler])
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 29);
+ else
+ MoveSelectionDestroyCursorAt(gMultiUsePlayerCursor);
+ gMultiUsePlayerCursor ^= 2;
+ PlaySE(SE_SELECT);
+
+ if (gMultiUsePlayerCursor == gMoveSelectionCursor[gActiveBattler])
+ MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 0);
+ else
+ MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 27);
+ }
+ }
+ if (JOY_NEW(DPAD_DOWN))
+ {
+ if (!(gMultiUsePlayerCursor & 2) && (gMultiUsePlayerCursor ^ 2) < gNumberOfMovesToChoose)
+ {
+ if (gMultiUsePlayerCursor == gMoveSelectionCursor[gActiveBattler])
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 29);
+ else
+ MoveSelectionDestroyCursorAt(gMultiUsePlayerCursor);
+ gMultiUsePlayerCursor ^= 2;
+ PlaySE(SE_SELECT);
+
+ if (gMultiUsePlayerCursor == gMoveSelectionCursor[gActiveBattler])
+ MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 0);
+ else
+ MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 27);
+ }
+ }
+}
+
+static void sub_802F610(void)
+{
+ if (gWirelessCommType == 0)
+ {
+ if (gReceivedRemoteLinkPlayers == 0)
+ {
+ m4aSongNumStop(SE_T_OOAME);
+ gMain.inBattle = 0;
+ gMain.callback1 = gPreBattleCallback1;
+ SetMainCallback2(sub_8011A1C);
+ FreeAllWindowBuffers();
+ }
+ }
+ else if (IsLinkTaskFinished())
+ {
+ m4aSongNumStop(SE_T_OOAME);
+ gMain.inBattle = 0;
+ gMain.callback1 = gPreBattleCallback1;
+ SetMainCallback2(sub_8011A1C);
+ FreeAllWindowBuffers();
+ }
+}
+
+void sub_802F6A8(void)
+{
+ if (!gPaletteFade.active)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ if (gWirelessCommType == 0)
+ sub_800AAC0();
+ else
+ sub_800AB9C();
+ gBattlerControllerFuncs[gActiveBattler] = sub_802F610;
+ }
+ else
+ {
+ m4aSongNumStop(SE_T_OOAME);
+ gMain.inBattle = 0;
+ gMain.callback1 = gPreBattleCallback1;
+ SetMainCallback2(gMain.savedCallback);
+ }
+ }
+}
+
+static void CompleteOnBattlerSpriteCallbackDummy(void)
+{
+ if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
+ PlayerBufferExecCompleted();
+}
+
+static void CompleteOnBattlerSpriteCallbackDummy2(void)
+{
+ if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
+ PlayerBufferExecCompleted();
+}
+
+static void sub_802F7A0(void)
+{
+ if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
+ {
+ nullsub_16(gSaveBlock2Ptr->playerGender);
+ FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ PlayerBufferExecCompleted();
+ }
+}
+
+static void sub_802F810(void)
+{
+ if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 == 0xFF)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 = 0;
+ PlayerBufferExecCompleted();
+ }
+}
+
+static void sub_802F858(void)
+{
+ bool8 var = FALSE;
+
+ if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI)))
+ {
+ if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
+ var = TRUE;
+ }
+ else
+ {
+ if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy
+ && gSprites[gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]].callback == SpriteCallbackDummy)
+ var = TRUE;
+ }
+ if (IsCryPlayingOrClearCrySongs())
+ var = FALSE;
+ if (var && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1
+ && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1 = 0;
+ FreeSpriteTilesByTag(0x27F9);
+ FreeSpritePaletteByTag(0x27F9);
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ m4aMPlayContinue(&gMPlayInfo_BGM);
+ else
+ m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 256);
+ HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
+ if (IsDoubleBattle())
+ HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]], gActiveBattler ^ BIT_FLANK);
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 = 3;
+ gBattlerControllerFuncs[gActiveBattler] = sub_802F810;
+ }
+}
+
+static void sub_802FA58(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive)
+ {
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80)
+ sub_80F1720(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]);
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80)
+ sub_80F1720(gActiveBattler ^ BIT_FLANK, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]);
+ if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ {
+ DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler ^ BIT_FLANK]]);
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK],
+ &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]],
+ HEALTHBOX_ALL);
+ sub_804BD94(gActiveBattler ^ BIT_FLANK);
+ SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]);
+ }
+ DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler]]);
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler],
+ &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]],
+ HEALTHBOX_ALL);
+ sub_804BD94(gActiveBattler);
+ SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
+ gBattleSpritesDataPtr->animationData->field_9_x1 = 0;
+ gBattlerControllerFuncs[gActiveBattler] = sub_802F858;
+ }
+}
+
+static void sub_802FBF4(void)
+{
+ if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy
+ && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0;
+ FreeSpriteTilesByTag(0x27F9);
+ FreeSpritePaletteByTag(0x27F9);
+ if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute)
+ InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE);
+ gBattlerControllerFuncs[gActiveBattler] = sub_802FCAC;
+ }
+}
+
+static void sub_802FCAC(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive
+ && !IsCryPlayingOrClearCrySongs())
+ {
+ m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100);
+ HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
+ PlayerBufferExecCompleted();
+ }
+}
+
+static void sub_802FD18(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
+ sub_80F1720(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]);
+ if (gSprites[gUnknown_3004FFC[gActiveBattler]].callback == SpriteCallbackDummy
+ && !(gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive))
+ {
+ DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler]]);
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler],
+ &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]],
+ HEALTHBOX_ALL);
+ sub_804BD94(gActiveBattler);
+ SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
+ CopyBattleSpriteInvisibility(gActiveBattler);
+ gBattlerControllerFuncs[gActiveBattler] = sub_802FBF4;
+ }
+}
+
+void c3_0802FDF4(u8 taskId)
+{
+ if (!IsCryPlayingOrClearCrySongs())
+ {
+ m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100);
+ DestroyTask(taskId);
+ }
+}
+
+static void CompleteOnHealthbarDone(void)
+{
+ s16 hpValue = MoveBattleBar(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0);
+
+ SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
+
+ if (hpValue != -1)
+ {
+ UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], hpValue, HP_CURRENT);
+ }
+ else
+ {
+ HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
+ PlayerBufferExecCompleted();
+ }
+}
+
+void CompleteOnInactiveTextPrinter(void)
+{
+ if (!IsTextPrinterActive(0))
+ PlayerBufferExecCompleted();
+}
+
+#define tExpTask_monId data[0]
+#define tExpTask_gainedExp data[1]
+#define tExpTask_battler data[2]
+#define tExpTask_frames data[10]
+// TODO: document other used fields
+
+static void Task_GiveExpToMon(u8 taskId)
+{
+ u32 monId = (u8)(gTasks[taskId].tExpTask_monId);
+ u8 battlerId = gTasks[taskId].tExpTask_battler;
+ s16 gainedExp = gTasks[taskId].tExpTask_gainedExp;
+
+ if (IsDoubleBattle() == TRUE || monId != gBattlerPartyIndexes[battlerId]) // Give exp without moving the expbar.
+ {
+ struct Pokemon *mon = &gPlayerParty[monId];
+ u16 species = GetMonData(mon, MON_DATA_SPECIES);
+ u8 level = GetMonData(mon, MON_DATA_LEVEL);
+ u32 currExp = GetMonData(mon, MON_DATA_EXP);
+ u32 nextLvlExp = gExperienceTables[gBaseStats[species].growthRate][level + 1];
+
+ if (currExp + gainedExp >= nextLvlExp)
+ {
+ u8 savedActiveBattler;
+
+ SetMonData(mon, MON_DATA_EXP, &nextLvlExp);
+ CalculateMonStats(mon);
+ gainedExp -= nextLvlExp - currExp;
+ savedActiveBattler = gActiveBattler;
+ gActiveBattler = battlerId;
+ BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELED_UP, gainedExp);
+ gActiveBattler = savedActiveBattler;
+
+ if (IsDoubleBattle() == TRUE
+ && ((u16)(monId) == gBattlerPartyIndexes[battlerId] || (u16)(monId) == gBattlerPartyIndexes[battlerId ^ BIT_FLANK]))
+ gTasks[taskId].func = Task_LaunchLvlUpAnim;
+ else
+ gTasks[taskId].func = DestroyExpTaskAndCompleteOnInactiveTextPrinter;
+ }
+ else
+ {
+ currExp += gainedExp;
+ SetMonData(mon, MON_DATA_EXP, &currExp);
+ gBattlerControllerFuncs[battlerId] = CompleteOnInactiveTextPrinter;
+ DestroyTask(taskId);
+ }
+ }
+ else
+ {
+ gTasks[taskId].func = Task_PrepareToGiveExpWithExpBar;
+ }
+}
+
+static void Task_PrepareToGiveExpWithExpBar(u8 taskId)
+{
+ u8 monIndex = gTasks[taskId].tExpTask_monId;
+ s32 gainedExp = gTasks[taskId].tExpTask_gainedExp;
+ u8 battlerId = gTasks[taskId].tExpTask_battler;
+ struct Pokemon *mon = &gPlayerParty[monIndex];
+ u8 level = GetMonData(mon, MON_DATA_LEVEL);
+ u16 species = GetMonData(mon, MON_DATA_SPECIES);
+ u32 exp = GetMonData(mon, MON_DATA_EXP);
+ u32 currLvlExp = gExperienceTables[gBaseStats[species].growthRate][level];
+ u32 expToNextLvl;
+
+ exp -= currLvlExp;
+ expToNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLvlExp;
+ SetBattleBarStruct(battlerId, gHealthboxSpriteIds[battlerId], expToNextLvl, exp, -gainedExp);
+ PlaySE(SE_U);
+ gTasks[taskId].func = sub_80300F4;
+}
+
+static void sub_80300F4(u8 taskId)
+{
+ if (gTasks[taskId].tExpTask_frames < 13)
+ {
+ ++gTasks[taskId].tExpTask_frames;
+ }
+ else
+ {
+ u8 monId = gTasks[taskId].tExpTask_monId;
+ s16 gainedExp = gTasks[taskId].tExpTask_gainedExp;
+ u8 battlerId = gTasks[taskId].tExpTask_battler;
+ s16 newExpPoints;
+
+ newExpPoints = MoveBattleBar(battlerId, gHealthboxSpriteIds[battlerId], EXP_BAR, 0);
+ SetHealthboxSpriteVisible(gHealthboxSpriteIds[battlerId]);
+ if (newExpPoints == -1) // The bar has been filled with given exp points.
+ {
+ u8 level;
+ s32 currExp;
+ u16 species;
+ s32 expOnNextLvl;
+
+ m4aSongNumStop(SE_U);
+ level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL);
+ currExp = GetMonData(&gPlayerParty[monId], MON_DATA_EXP);
+ species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES);
+ expOnNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1];
+ if (currExp + gainedExp >= expOnNextLvl)
+ {
+ u8 savedActiveBattler;
+
+ SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &expOnNextLvl);
+ CalculateMonStats(&gPlayerParty[monId]);
+ gainedExp -= expOnNextLvl - currExp;
+ savedActiveBattler = gActiveBattler;
+ gActiveBattler = battlerId;
+ BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELED_UP, gainedExp);
+ gActiveBattler = savedActiveBattler;
+ gTasks[taskId].func = Task_LaunchLvlUpAnim;
+ }
+ else
+ {
+ currExp += gainedExp;
+ SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &currExp);
+ gBattlerControllerFuncs[battlerId] = CompleteOnInactiveTextPrinter;
+ DestroyTask(taskId);
+ }
+ }
+ }
+}
+
+static void Task_LaunchLvlUpAnim(u8 taskId)
+{
+ u8 battlerId = gTasks[taskId].tExpTask_battler;
+ u8 monIndex = gTasks[taskId].tExpTask_monId;
+
+ if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[battlerId ^ BIT_FLANK])
+ battlerId ^= BIT_FLANK;
+ InitAndLaunchSpecialAnimation(battlerId, battlerId, battlerId, B_ANIM_LVL_UP);
+ gTasks[taskId].func = Task_UpdateLvlInHealthbox;
+}
+
+static void Task_UpdateLvlInHealthbox(u8 taskId)
+{
+ u8 battlerId = gTasks[taskId].tExpTask_battler;
+
+ if (!gBattleSpritesDataPtr->healthBoxesData[battlerId].specialAnimActive)
+ {
+ u8 monIndex = gTasks[taskId].tExpTask_monId;
+
+ GetMonData(&gPlayerParty[monIndex], MON_DATA_LEVEL); // Unused return value.
+ if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[battlerId ^ BIT_FLANK])
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[battlerId ^ BIT_FLANK], &gPlayerParty[monIndex], HEALTHBOX_ALL);
+ else
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[battlerId], &gPlayerParty[monIndex], HEALTHBOX_ALL);
+ gTasks[taskId].func = DestroyExpTaskAndCompleteOnInactiveTextPrinter;
+ }
+}
+
+static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8 taskId)
+{
+ u8 monIndex;
+ s32 battlerId = gTasks[taskId].tExpTask_battler;
+
+ if (IsBattlerSpriteVisible((u8)battlerId) == TRUE)
+ {
+ gTasks[taskId].func = sub_80303A8;
+ gTasks[taskId].data[15] = 0;
+ }
+ else
+ {
+ gBattlerControllerFuncs[battlerId] = CompleteOnInactiveTextPrinter;
+ DestroyTask(taskId);
+ }
+}
+
+static void sub_80303A8(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+ u8 battlerId = tExpTask_battler;
+ u16 v5 = sub_80768B0(battlerId);
+ u32 v6 = ((v5 ^ BIT_SIDE)) != B_SIDE_PLAYER;
+ struct Sprite *sprite = &gSprites[gBattlerSpriteIds[battlerId]];
+
+ switch (data[15])
+ {
+ case 0:
+ if (!IsTextPrinterActive(0))
+ {
+ if (!v6)
+ {
+ data[14] = gBattle_BG1_X;
+ data[13] = gBattle_BG1_Y;
+ gBattle_BG1_X = -(sprite->pos1.x + sprite->pos2.x) + 32;
+ gBattle_BG1_Y = -(sprite->pos1.y + sprite->pos2.y) + 32;
+ }
+ else
+ {
+ data[14] = gBattle_BG2_X;
+ data[13] = gBattle_BG2_Y;
+ gBattle_BG2_X = -(sprite->pos1.x + sprite->pos2.x) + 32;
+ gBattle_BG2_Y = -(sprite->pos1.y + sprite->pos2.y) + 32;
+ }
+ ++data[15];
+ }
+ break;
+ case 1:
+ {
+ u32 battlerIdAlt = battlerId;
+ u32 v6Alt = v6;
+
+ sub_8072E48(battlerIdAlt, v6Alt);
+ }
+ ++data[15];
+ break;
+ case 2:
+ PlaySE(SE_T_KAMI2);
+ if (IsMonGettingExpSentOut())
+ sub_811E5B8(sprite->pos1.x + sprite->pos2.x,
+ sprite->pos1.y + sprite->pos2.y,
+ 10000,
+ 10000,
+ 1,
+ 0);
+ ++data[15];
+ break;
+ case 3:
+ if (!sub_811E680())
+ {
+ sprite->invisible = FALSE;
+ ++data[15];
+ }
+ break;
+ case 5:
+ sub_8073128(v6);
+ ++data[15];
+ break;
+ case 4:
+ ++data[15];
+ break;
+ case 6:
+ if (!v6)
+ {
+ gBattle_BG1_X = data[14];
+ gBattle_BG1_Y = data[13];
+ }
+ else
+ {
+ gBattle_BG2_X = data[14];
+ gBattle_BG2_Y = data[13];
+ }
+ gBattlerControllerFuncs[battlerId] = CompleteOnInactiveTextPrinter;
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+static void sub_8030538(void)
+{
+ if (gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y + gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.y > DISPLAY_HEIGHT)
+ {
+ FreeOamMatrix(gSprites[gBattlerSpriteIds[gActiveBattler]].oam.matrixNum);
+ DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]);
+ PlayerBufferExecCompleted();
+ }
+}
+
+static void sub_80305A0(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
+ {
+ FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]);
+ PlayerBufferExecCompleted();
+ }
+}
+
+static void CompleteOnInactiveTextPrinter2(void)
+{
+ if (!IsTextPrinterActive(0))
+ PlayerBufferExecCompleted();
+}
+
+static void OpenPartyMenuToChooseMon(void)
+{
+ if (!gPaletteFade.active)
+ {
+ u8 caseId;
+
+ gBattlerControllerFuncs[gActiveBattler] = WaitForMonSelection;
+ caseId = gTasks[gUnknown_3004FFC[gActiveBattler]].data[0];
+ DestroyTask(gUnknown_3004FFC[gActiveBattler]);
+ FreeAllWindowBuffers();
+ OpenPartyMenuInBattle(caseId);
+ }
+}
+
+static void WaitForMonSelection(void)
+{
+ if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active)
+ {
+ if (gUnknown_203B0C0 == 1)
+ BtlController_EmitChosenMonReturnValue(1, gUnknown_203B0C1, gUnknown_203B0DC);
+ else
+ BtlController_EmitChosenMonReturnValue(1, 6, NULL);
+
+ if ((gBattleBufferA[gActiveBattler][1] & 0xF) == 1)
+ PrintLinkStandbyMsg();
+ PlayerBufferExecCompleted();
+ }
+}
+
+static void OpenBagAndChooseItem(void)
+{
+ if (!gPaletteFade.active)
+ {
+ gBattlerControllerFuncs[gActiveBattler] = CompleteWhenChoseItem;
+ nullsub_44();
+ FreeAllWindowBuffers();
+ sub_8107ECC();
+ }
+}
+
+static void CompleteWhenChoseItem(void)
+{
+ if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active)
+ {
+ BtlController_EmitOneReturnValue(1, gSpecialVar_ItemId);
+ PlayerBufferExecCompleted();
+ }
+}
+
+static void CompleteOnSpecialAnimDone(void)
+{
+ if (!gDoingBattleAnim || !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
+ PlayerBufferExecCompleted();
+}
+
+static void DoHitAnimBlinkSpriteEffect(void)
+{
+ u8 spriteId = gBattlerSpriteIds[gActiveBattler];
+
+ if (gSprites[spriteId].data[1] == 32)
+ {
+ gSprites[spriteId].data[1] = 0;
+ gSprites[spriteId].invisible = FALSE;
+ gDoingBattleAnim = FALSE;
+ PlayerBufferExecCompleted();
+ }
+ else
+ {
+ if ((gSprites[spriteId].data[1] % 4) == 0)
+ gSprites[spriteId].invisible ^= 1;
+ ++gSprites[spriteId].data[1];
+ }
+}
+
+static void MoveSelectionDisplayMoveNames(void)
+{
+ s32 i;
+ struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleBufferA[gActiveBattler][4]);
+ gNumberOfMovesToChoose = 0;
+
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ MoveSelectionDestroyCursorAt(i);
+ StringCopy(gDisplayedStringBattle, gUnknown_83FE770);
+ StringAppend(gDisplayedStringBattle, gMoveNames[moveInfo->moves[i]]);
+ BattlePutTextOnWindow(gDisplayedStringBattle, i + 3);
+ if (moveInfo->moves[i] != MOVE_NONE)
+ ++gNumberOfMovesToChoose;
+ }
+}
+
+static void MoveSelectionDisplayPpString(void)
+{
+ StringCopy(gDisplayedStringBattle, gText_MoveInterfacePP);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 7);
+}
+
+static void MoveSelectionDisplayPpNumber(void)
+{
+ u8 *txtPtr;
+ struct ChooseMoveStruct *moveInfo;
+
+ if (gBattleBufferA[gActiveBattler][2] == TRUE) // check if we didn't want to display pp number
+ return;
+ SetPpNumbersPaletteInMoveSelection();
+ moveInfo = (struct ChooseMoveStruct*)(&gBattleBufferA[gActiveBattler][4]);
+ txtPtr = ConvertIntToDecimalStringN(gDisplayedStringBattle, moveInfo->currentPp[gMoveSelectionCursor[gActiveBattler]], STR_CONV_MODE_RIGHT_ALIGN, 2);
+ *txtPtr = CHAR_SLASH;
+ ConvertIntToDecimalStringN(++txtPtr, moveInfo->maxPp[gMoveSelectionCursor[gActiveBattler]], STR_CONV_MODE_RIGHT_ALIGN, 2);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 9);
+}
+
+static void MoveSelectionDisplayMoveType(void)
+{
+ u8 *txtPtr;
+ struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleBufferA[gActiveBattler][4]);
+
+ txtPtr = StringCopy(gDisplayedStringBattle, gText_MoveInterfaceType);
+ *txtPtr++ = EXT_CTRL_CODE_BEGIN;
+ *txtPtr++ = 6;
+ *txtPtr++ = 1;
+ txtPtr = StringCopy(txtPtr, gUnknown_83FE770);
+ StringCopy(txtPtr, gTypeNames[gBattleMoves[moveInfo->moves[gMoveSelectionCursor[gActiveBattler]]].type]);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 8);
+}
+
+void MoveSelectionCreateCursorAt(u8 cursorPosition, u8 arg1)
+{
+ u16 src[2];
+
+ src[0] = arg1 + 1;
+ src[1] = arg1 + 2;
+ CopyToBgTilemapBufferRect_ChangePalette(0, src, 9 * (cursorPosition & 1) + 1, 55 + (cursorPosition & 2), 1, 2, 0x11);
+ CopyBgTilemapBufferToVram(0);
+}
+
+void MoveSelectionDestroyCursorAt(u8 cursorPosition)
+{
+ u16 src[2];
+
+ src[0] = 32;
+ src[1] = 32;
+ CopyToBgTilemapBufferRect_ChangePalette(0, src, 9 * (cursorPosition & 1) + 1, 55 + (cursorPosition & 2), 1, 2, 0x11);
+ CopyBgTilemapBufferToVram(0);
+}
+
+void ActionSelectionCreateCursorAt(u8 cursorPosition, u8 arg1)
+{
+ u16 src[2];
+
+ src[0] = 1;
+ src[1] = 2;
+ CopyToBgTilemapBufferRect_ChangePalette(0, src, 7 * (cursorPosition & 1) + 16, 35 + (cursorPosition & 2), 1, 2, 0x11);
+ CopyBgTilemapBufferToVram(0);
+}
+
+void ActionSelectionDestroyCursorAt(u8 cursorPosition)
+{
+ u16 src[2];
+
+ src[0] = 32;
+ src[1] = 32;
+ CopyToBgTilemapBufferRect_ChangePalette(0, src, 7 * (cursorPosition & 1) + 16, 35 + (cursorPosition & 2), 1, 2, 0x11);
+ CopyBgTilemapBufferToVram(0);
+}
+
+void SetCB2ToReshowScreenAfterMenu(void)
+{
+ SetMainCallback2(ReshowBattleScreenAfterMenu);
+}
+
+void SetCB2ToReshowScreenAfterMenu2(void)
+{
+ SetMainCallback2(ReshowBattleScreenAfterMenu);
+}
+
+static void CompleteOnFinishedStatusAnimation(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].statusAnimActive)
+ PlayerBufferExecCompleted();
+}
+
+static void CompleteOnFinishedBattleAnimation(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animFromTableActive)
+ PlayerBufferExecCompleted();
+}
+
+static void PrintLinkStandbyMsg(void)
+{
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ gBattle_BG0_X = 0;
+ gBattle_BG0_Y = 0;
+ BattlePutTextOnWindow(gText_LinkStandby, 0);
+ }
+}
+
+static void PlayerHandleGetMonData(void)
+{
+ u8 monData[sizeof(struct Pokemon) * 2 + 56]; // this allows to get full data of two pokemon, trying to get more will result in overwriting data
+ u32 size = 0;
+ u8 monToCheck;
+ s32 i;
+
+ if (gBattleBufferA[gActiveBattler][2] == 0)
+ {
+ size += CopyPlayerMonData(gBattlerPartyIndexes[gActiveBattler], monData);
+ }
+ else
+ {
+ monToCheck = gBattleBufferA[gActiveBattler][2];
+ for (i = 0; i < PARTY_SIZE; ++i)
+ {
+ if (monToCheck & 1)
+ size += CopyPlayerMonData(i, monData + size);
+ monToCheck >>= 1;
+ }
+ }
+ BtlController_EmitDataTransfer(1, size, monData);
+ PlayerBufferExecCompleted();
+}
+
+static u32 CopyPlayerMonData(u8 monId, u8 *dst)
+{
+ struct BattlePokemon battleMon;
+ struct MovePpInfo moveData;
+ u8 nickname[20];
+ u8 *src;
+ s16 data16;
+ u32 data32;
+ s32 size = 0;
+
+ switch (gBattleBufferA[gActiveBattler][1])
+ {
+ case REQUEST_ALL_BATTLE:
+ battleMon.species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES);
+ battleMon.item = GetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM);
+ for (size = 0; size < MAX_MON_MOVES; ++size)
+ {
+ battleMon.moves[size] = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + size);
+ battleMon.pp[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size);
+ }
+ battleMon.ppBonuses = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES);
+ battleMon.friendship = GetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP);
+ battleMon.experience = GetMonData(&gPlayerParty[monId], MON_DATA_EXP);
+ battleMon.hpIV = GetMonData(&gPlayerParty[monId], MON_DATA_HP_IV);
+ battleMon.attackIV = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV);
+ battleMon.defenseIV = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV);
+ battleMon.speedIV = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV);
+ battleMon.spAttackIV = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV);
+ battleMon.spDefenseIV = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV);
+ battleMon.personality = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY);
+ battleMon.status1 = GetMonData(&gPlayerParty[monId], MON_DATA_STATUS);
+ battleMon.level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL);
+ battleMon.hp = GetMonData(&gPlayerParty[monId], MON_DATA_HP);
+ battleMon.maxHP = GetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP);
+ battleMon.attack = GetMonData(&gPlayerParty[monId], MON_DATA_ATK);
+ battleMon.defense = GetMonData(&gPlayerParty[monId], MON_DATA_DEF);
+ battleMon.speed = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED);
+ battleMon.spAttack = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK);
+ battleMon.spDefense = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF);
+ battleMon.isEgg = GetMonData(&gPlayerParty[monId], MON_DATA_IS_EGG);
+ battleMon.abilityNum = GetMonData(&gPlayerParty[monId], MON_DATA_ABILITY_NUM);
+ battleMon.otId = GetMonData(&gPlayerParty[monId], MON_DATA_OT_ID);
+ GetMonData(&gPlayerParty[monId], MON_DATA_NICKNAME, nickname);
+ StringCopy10(battleMon.nickname, nickname);
+ GetMonData(&gPlayerParty[monId], MON_DATA_OT_NAME, battleMon.otName);
+ src = (u8 *)&battleMon;
+ for (size = 0; size < sizeof(battleMon); ++size)
+ dst[size] = src[size];
+ break;
+ case REQUEST_SPECIES_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_HELDITEM_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_MOVES_PP_BATTLE:
+ for (size = 0; size < MAX_MON_MOVES; ++size)
+ {
+ moveData.moves[size] = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + size);
+ moveData.pp[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size);
+ }
+ moveData.ppBonuses = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES);
+ src = (u8 *)(&moveData);
+ for (size = 0; size < sizeof(moveData); ++size)
+ dst[size] = src[size];
+ break;
+ case REQUEST_MOVE1_BATTLE:
+ case REQUEST_MOVE2_BATTLE:
+ case REQUEST_MOVE3_BATTLE:
+ case REQUEST_MOVE4_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_PP_DATA_BATTLE:
+ for (size = 0; size < MAX_MON_MOVES; ++size)
+ dst[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size);
+ dst[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES);
+ ++size;
+ break;
+ case REQUEST_PPMOVE1_BATTLE:
+ case REQUEST_PPMOVE2_BATTLE:
+ case REQUEST_PPMOVE3_BATTLE:
+ case REQUEST_PPMOVE4_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE);
+ size = 1;
+ break;
+ case REQUEST_OTID_BATTLE:
+ data32 = GetMonData(&gPlayerParty[monId], MON_DATA_OT_ID);
+ dst[0] = (data32 & 0x000000FF);
+ dst[1] = (data32 & 0x0000FF00) >> 8;
+ dst[2] = (data32 & 0x00FF0000) >> 16;
+ size = 3;
+ break;
+ case REQUEST_EXP_BATTLE:
+ data32 = GetMonData(&gPlayerParty[monId], MON_DATA_EXP);
+ dst[0] = (data32 & 0x000000FF);
+ dst[1] = (data32 & 0x0000FF00) >> 8;
+ dst[2] = (data32 & 0x00FF0000) >> 16;
+ size = 3;
+ break;
+ case REQUEST_HP_EV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_HP_EV);
+ size = 1;
+ break;
+ case REQUEST_ATK_EV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_EV);
+ size = 1;
+ break;
+ case REQUEST_DEF_EV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_EV);
+ size = 1;
+ break;
+ case REQUEST_SPEED_EV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED_EV);
+ size = 1;
+ break;
+ case REQUEST_SPATK_EV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_EV);
+ size = 1;
+ break;
+ case REQUEST_SPDEF_EV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_EV);
+ size = 1;
+ break;
+ case REQUEST_FRIENDSHIP_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP);
+ size = 1;
+ break;
+ case REQUEST_POKERUS_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_POKERUS);
+ size = 1;
+ break;
+ case REQUEST_MET_LOCATION_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_MET_LOCATION);
+ size = 1;
+ break;
+ case REQUEST_MET_LEVEL_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL);
+ size = 1;
+ break;
+ case REQUEST_MET_GAME_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_MET_GAME);
+ size = 1;
+ break;
+ case REQUEST_POKEBALL_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_POKEBALL);
+ size = 1;
+ break;
+ case REQUEST_ALL_IVS_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_HP_IV);
+ dst[1] = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV);
+ dst[2] = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV);
+ dst[3] = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV);
+ dst[4] = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV);
+ dst[5] = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV);
+ size = 6;
+ break;
+ case REQUEST_HP_IV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_HP_IV);
+ size = 1;
+ break;
+ case REQUEST_ATK_IV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV);
+ size = 1;
+ break;
+ case REQUEST_DEF_IV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV);
+ size = 1;
+ break;
+ case REQUEST_SPEED_IV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV);
+ size = 1;
+ break;
+ case REQUEST_SPATK_IV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV);
+ size = 1;
+ break;
+ case REQUEST_SPDEF_IV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV);
+ size = 1;
+ break;
+ case REQUEST_PERSONALITY_BATTLE:
+ data32 = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY);
+ dst[0] = (data32 & 0x000000FF);
+ dst[1] = (data32 & 0x0000FF00) >> 8;
+ dst[2] = (data32 & 0x00FF0000) >> 16;
+ dst[3] = (data32 & 0xFF000000) >> 24;
+ size = 4;
+ break;
+ case REQUEST_CHECKSUM_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_CHECKSUM);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_STATUS_BATTLE:
+ data32 = GetMonData(&gPlayerParty[monId], MON_DATA_STATUS);
+ dst[0] = (data32 & 0x000000FF);
+ dst[1] = (data32 & 0x0000FF00) >> 8;
+ dst[2] = (data32 & 0x00FF0000) >> 16;
+ dst[3] = (data32 & 0xFF000000) >> 24;
+ size = 4;
+ break;
+ case REQUEST_LEVEL_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL);
+ size = 1;
+ break;
+ case REQUEST_HP_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_HP);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_MAX_HP_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_ATK_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_ATK);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_DEF_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_DEF);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_SPEED_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_SPATK_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_SPDEF_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_COOL_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_COOL);
+ size = 1;
+ break;
+ case REQUEST_BEAUTY_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY);
+ size = 1;
+ break;
+ case REQUEST_CUTE_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_CUTE);
+ size = 1;
+ break;
+ case REQUEST_SMART_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SMART);
+ size = 1;
+ break;
+ case REQUEST_TOUGH_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_TOUGH);
+ size = 1;
+ break;
+ case REQUEST_SHEEN_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SHEEN);
+ size = 1;
+ break;
+ case REQUEST_COOL_RIBBON_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_COOL_RIBBON);
+ size = 1;
+ break;
+ case REQUEST_BEAUTY_RIBBON_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY_RIBBON);
+ size = 1;
+ break;
+ case REQUEST_CUTE_RIBBON_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_CUTE_RIBBON);
+ size = 1;
+ break;
+ case REQUEST_SMART_RIBBON_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SMART_RIBBON);
+ size = 1;
+ break;
+ case REQUEST_TOUGH_RIBBON_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON);
+ size = 1;
+ break;
+ }
+ return size;
+}
+
+void PlayerHandleGetRawMonData(void)
+{
+ struct BattlePokemon battleMon;
+ u8 *src = (u8 *)&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleBufferA[gActiveBattler][1];
+ u8 *dst = (u8 *)&battleMon + gBattleBufferA[gActiveBattler][1];
+ u8 i;
+
+ for (i = 0; i < gBattleBufferA[gActiveBattler][2]; ++i)
+ dst[i] = src[i];
+
+ BtlController_EmitDataTransfer(1, gBattleBufferA[gActiveBattler][2], dst);
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleSetMonData(void)
+{
+ u8 monToCheck;
+ u8 i;
+
+ if (gBattleBufferA[gActiveBattler][2] == 0)
+ {
+ SetPlayerMonData(gBattlerPartyIndexes[gActiveBattler]);
+ }
+ else
+ {
+ monToCheck = gBattleBufferA[gActiveBattler][2];
+ for (i = 0; i < PARTY_SIZE; ++i)
+ {
+ if (monToCheck & 1)
+ SetPlayerMonData(i);
+ monToCheck >>= 1;
+ }
+ }
+ PlayerBufferExecCompleted();
+}
+
+static void SetPlayerMonData(u8 monId)
+{
+ struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleBufferA[gActiveBattler][3];
+ struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleBufferA[gActiveBattler][3];
+ s32 i;
+
+ switch (gBattleBufferA[gActiveBattler][1])
+ {
+ case REQUEST_ALL_BATTLE:
+ {
+ u8 iv;
+
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &battlePokemon->species);
+ SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &battlePokemon->item);
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + i, &battlePokemon->moves[i]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + i, &battlePokemon->pp[i]);
+ }
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &battlePokemon->ppBonuses);
+ SetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP, &battlePokemon->friendship);
+ SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &battlePokemon->experience);
+ iv = battlePokemon->hpIV;
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &iv);
+ iv = battlePokemon->attackIV;
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &iv);
+ iv = battlePokemon->defenseIV;
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &iv);
+ iv = battlePokemon->speedIV;
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &iv);
+ iv = battlePokemon->spAttackIV;
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &iv);
+ iv = battlePokemon->spDefenseIV;
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &iv);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY, &battlePokemon->personality);
+ SetMonData(&gPlayerParty[monId], MON_DATA_STATUS, &battlePokemon->status1);
+ SetMonData(&gPlayerParty[monId], MON_DATA_LEVEL, &battlePokemon->level);
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP, &battlePokemon->hp);
+ SetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP, &battlePokemon->maxHP);
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK, &battlePokemon->attack);
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF, &battlePokemon->defense);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPEED, &battlePokemon->speed);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK, &battlePokemon->spAttack);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF, &battlePokemon->spDefense);
+ }
+ break;
+ case REQUEST_SPECIES_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_HELDITEM_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_MOVES_PP_BATTLE:
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + i, &moveData->moves[i]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + i, &moveData->pp[i]);
+ }
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &moveData->ppBonuses);
+ break;
+ case REQUEST_MOVE1_BATTLE:
+ case REQUEST_MOVE2_BATTLE:
+ case REQUEST_MOVE3_BATTLE:
+ case REQUEST_MOVE4_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_PP_DATA_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP1, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP2, &gBattleBufferA[gActiveBattler][4]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP3, &gBattleBufferA[gActiveBattler][5]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP4, &gBattleBufferA[gActiveBattler][6]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &gBattleBufferA[gActiveBattler][7]);
+ break;
+ case REQUEST_PPMOVE1_BATTLE:
+ case REQUEST_PPMOVE2_BATTLE:
+ case REQUEST_PPMOVE3_BATTLE:
+ case REQUEST_PPMOVE4_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_OTID_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_OT_ID, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_EXP_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_HP_EV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP_EV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_ATK_EV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK_EV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_DEF_EV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPEED_EV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_EV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPATK_EV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPDEF_EV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_EV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_FRIENDSHIP_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_POKERUS_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_POKERUS, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_MET_LOCATION_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_MET_LOCATION, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_MET_LEVEL_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_MET_GAME_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_MET_GAME, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_POKEBALL_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_POKEBALL, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_ALL_IVS_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][4]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][5]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][6]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][7]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][8]);
+ break;
+ case REQUEST_HP_IV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_ATK_IV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_DEF_IV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPEED_IV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPATK_IV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPDEF_IV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_PERSONALITY_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_CHECKSUM_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_CHECKSUM, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_STATUS_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_STATUS, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_LEVEL_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_LEVEL, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_HP_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_MAX_HP_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_ATK_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_DEF_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPEED_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPEED, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPATK_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPDEF_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_COOL_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_COOL, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_BEAUTY_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_CUTE_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_CUTE, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SMART_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SMART, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_TOUGH_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SHEEN_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SHEEN, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_COOL_RIBBON_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_COOL_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_BEAUTY_RIBBON_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_CUTE_RIBBON_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_CUTE_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SMART_RIBBON_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SMART_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_TOUGH_RIBBON_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ }
+ HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
+}
+
+static void PlayerHandleSetRawMonData(void)
+{
+ u8 *dst = (u8 *)&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleBufferA[gActiveBattler][1];
+ u8 i;
+
+ for (i = 0; i < gBattleBufferA[gActiveBattler][2]; ++i)
+ dst[i] = gBattleBufferA[gActiveBattler][3 + i];
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleLoadMonSprite(void)
+{
+ BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
+ gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpritePosX_0;
+}
+
+static void PlayerHandleSwitchInAnim(void)
+{
+ ClearTemporarySpeciesSpriteData(gActiveBattler, gBattleBufferA[gActiveBattler][2]);
+ gBattlerPartyIndexes[gActiveBattler] = gBattleBufferA[gActiveBattler][1];
+ BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
+ gActionSelectionCursor[gActiveBattler] = 0;
+ gMoveSelectionCursor[gActiveBattler] = 0;
+ sub_8031FF4(gActiveBattler, gBattleBufferA[gActiveBattler][2]);
+ gBattlerControllerFuncs[gActiveBattler] = sub_802FD18;
+}
+
+static void sub_8031FF4(u8 battlerId, bool8 dontClearSubstituteBit)
+{
+ u16 species;
+
+ ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit);
+ gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
+ species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
+ gUnknown_3004FFC[battlerId] = CreateInvisibleSpriteWithCallback(sub_8033E3C);
+ SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
+ gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate,
+ GetBattlerSpriteCoord(battlerId, 2),
+ GetBattlerSpriteDefault_Y(battlerId),
+ GetBattlerSpriteSubpriority(battlerId));
+ gSprites[gUnknown_3004FFC[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
+ gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId;
+ gSprites[gBattlerSpriteIds[battlerId]].data[2] = species;
+ gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId;
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]);
+ gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE;
+ gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy;
+ gSprites[gUnknown_3004FFC[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT);
+}
+
+static void PlayerHandleReturnMonToBall(void)
+{
+ if (gBattleBufferA[gActiveBattler][1] == 0)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
+ gBattlerControllerFuncs[gActiveBattler] = DoSwitchOutAnimation;
+ }
+ else
+ {
+ FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]);
+ PlayerBufferExecCompleted();
+ }
+}
+
+static void DoSwitchOutAnimation(void)
+{
+ switch (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState)
+ {
+ case 0:
+ if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute)
+ InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON);
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 1;
+ break;
+ case 1:
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
+ InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SWITCH_OUT_PLAYER_MON);
+ gBattlerControllerFuncs[gActiveBattler] = sub_80305A0;
+ }
+ break;
+ }
+}
+
+static void PlayerHandleDrawTrainerPic(void)
+{
+ s16 xPos;
+ u32 trainerPicId;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ {
+ if ((GetBattlerPosition(gActiveBattler) & BIT_FLANK) != B_FLANK_LEFT) // Second mon, on the right.
+ xPos = 90;
+ else // First mon, on the left.
+ xPos = 32;
+
+ }
+ else
+ {
+ xPos = 80;
+ }
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ if ((gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_RUBY
+ || (gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_SAPPHIRE
+ || (gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_EMERALD)
+ trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + 2;
+ else
+ trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + 0;
+ }
+ else
+ {
+ trainerPicId = gSaveBlock2Ptr->playerGender + 0;
+ }
+ DecompressTrainerBackPalette(trainerPicId, gActiveBattler);
+ SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
+ xPos,
+ (8 - gTrainerBackPicCoords[trainerPicId].size) * 4 + 80,
+ GetBattlerSpriteSubpriority(gActiveBattler));
+ gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8033EEC;
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
+}
+
+static void PlayerHandleTrainerSlide(void)
+{
+ u32 trainerPicId;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ if ((gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_RUBY
+ || (gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_SAPPHIRE
+ || (gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_EMERALD)
+ trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + 2;
+ else
+ trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + 0;
+ }
+ else
+ {
+ trainerPicId = gSaveBlock2Ptr->playerGender + 0;
+ }
+ DecompressTrainerBackPalette(trainerPicId, gActiveBattler);
+ SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
+ 80,
+ (8 - gTrainerBackPicCoords[trainerPicId].size) * 4 + 80,
+ 30);
+ gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -96;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 2;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8033EEC;
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy2;
+}
+
+static void PlayerHandleTrainerSlideBack(void)
+{
+ SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 50;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = -40;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCallbackDummy);
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1);
+ gBattlerControllerFuncs[gActiveBattler] = sub_802F7A0;
+}
+
+static void PlayerHandleFaintAnimation(void)
+{
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState == 0)
+ {
+ if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute)
+ InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON);
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState++;
+ }
+ else
+ {
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
+ HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
+ PlaySE12WithPanning(SE_POKE_DEAD, SOUND_PAN_ATTACKER);
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 5;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8012110;
+ gBattlerControllerFuncs[gActiveBattler] = sub_8030538;
+ }
+ }
+}
+
+static void PlayerHandlePaletteFade(void)
+{
+ BeginNormalPaletteFade(0xFFFFFFFF, 2, 0, 16, RGB_BLACK);
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleSuccessBallThrowAnim(void)
+{
+ gBattleSpritesDataPtr->animationData->ballThrowCaseId = BALL_3_SHAKES_SUCCESS;
+ gDoingBattleAnim = TRUE;
+ InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_BALL_THROW);
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnSpecialAnimDone;
+}
+
+static void PlayerHandleBallThrowAnim(void)
+{
+ u8 ballThrowCaseId = gBattleBufferA[gActiveBattler][1];
+
+ gBattleSpritesDataPtr->animationData->ballThrowCaseId = ballThrowCaseId;
+ gDoingBattleAnim = TRUE;
+ InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_BALL_THROW);
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnSpecialAnimDone;
+}
+
+static void PlayerHandlePause(void)
+{
+ u8 var = gBattleBufferA[gActiveBattler][1];
+
+ while (var)
+ --var;
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleMoveAnimation(void)
+{
+ if (!mplay_80342A4(gActiveBattler))
+ {
+ u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8);
+
+ gAnimMoveTurn = gBattleBufferA[gActiveBattler][3];
+ gAnimMovePower = gBattleBufferA[gActiveBattler][4] | (gBattleBufferA[gActiveBattler][5] << 8);
+ gAnimMoveDmg = gBattleBufferA[gActiveBattler][6] | (gBattleBufferA[gActiveBattler][7] << 8) | (gBattleBufferA[gActiveBattler][8] << 16) | (gBattleBufferA[gActiveBattler][9] << 24);
+ gAnimFriendship = gBattleBufferA[gActiveBattler][10];
+ gWeatherMoveAnim = gBattleBufferA[gActiveBattler][12] | (gBattleBufferA[gActiveBattler][13] << 8);
+ gAnimDisableStructPtr = (struct DisableStruct *)&gBattleBufferA[gActiveBattler][16];
+ gTransformedPersonalities[gActiveBattler] = gAnimDisableStructPtr->transformedMonPersonality;
+ if (IsMoveWithoutAnimation(move, gAnimMoveTurn)) // Always returns FALSE.
+ {
+ PlayerBufferExecCompleted();
+ }
+ else
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
+ gBattlerControllerFuncs[gActiveBattler] = PlayerDoMoveAnimation;
+ }
+ }
+}
+
+static void PlayerDoMoveAnimation(void)
+{
+ u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8);
+ u8 multihit = gBattleBufferA[gActiveBattler][11];
+
+ switch (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState)
+ {
+ case 0:
+ if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute
+ && !gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8)
+ {
+ gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8 = 1;
+ InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON);
+ }
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 1;
+ break;
+ case 1:
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
+ {
+ sub_8035450(0);
+ DoMoveAnim(move);
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2;
+ }
+ break;
+ case 2:
+ gAnimScriptCallback();
+ if (!gAnimScriptActive)
+ {
+ sub_8035450(1);
+ if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute && multihit < 2)
+ {
+ InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE);
+ gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8 = 0;
+ }
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 3;
+ }
+ break;
+ case 3:
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
+ {
+ CopyAllBattleSpritesInvisibilities();
+ TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8));
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
+ PlayerBufferExecCompleted();
+ }
+ break;
+ }
+}
+
+static void PlayerHandlePrintString(void)
+{
+ u16 *stringId;
+
+ gBattle_BG0_X = 0;
+ gBattle_BG0_Y = 0;
+ stringId = (u16 *)(&gBattleBufferA[gActiveBattler][2]);
+ BufferStringBattle(*stringId);
+ if (sub_80D89B0(*stringId))
+ BattlePutTextOnWindow(gDisplayedStringBattle, 64);
+ else
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter2;
+}
+
+static void PlayerHandlePrintSelectionString(void)
+{
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ PlayerHandlePrintString();
+ else
+ PlayerBufferExecCompleted();
+}
+
+static void HandleChooseActionAfterDma3(void)
+{
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ gBattle_BG0_X = 0;
+ gBattle_BG0_Y = 160;
+ gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseAction;
+ }
+}
+
+static void PlayerHandleChooseAction(void)
+{
+ s32 i;
+
+ gBattlerControllerFuncs[gActiveBattler] = HandleChooseActionAfterDma3;
+ BattlePutTextOnWindow(gUnknown_83FDA4C, 0);
+ BattlePutTextOnWindow(gUnknown_83FE725, 2);
+ for (i = 0; i < 4; ++i)
+ ActionSelectionDestroyCursorAt(i);
+ ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0);
+ BattleStringExpandPlaceholdersToDisplayedString(gText_WhatWillPkmnDo);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 1);
+}
+
+static void PlayerHandleUnknownYesNoBox(void)
+{
+}
+
+static void HandleChooseMoveAfterDma3(void)
+{
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ gBattle_BG0_X = 0;
+ gBattle_BG0_Y = 320;
+ gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseMove;
+ }
+}
+
+static void PlayerHandleChooseMove(void)
+{
+ InitMoveSelectionsVarsAndStrings();
+ gBattlerControllerFuncs[gActiveBattler] = HandleChooseMoveAfterDma3;
+}
+
+void InitMoveSelectionsVarsAndStrings(void)
+{
+ MoveSelectionDisplayMoveNames();
+ gMultiUsePlayerCursor = 0xFF;
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0);
+ MoveSelectionDisplayPpString();
+ MoveSelectionDisplayPpNumber();
+ MoveSelectionDisplayMoveType();
+}
+
+static void PlayerHandleChooseItem(void)
+{
+ s32 i;
+
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
+ gBattlerControllerFuncs[gActiveBattler] = OpenBagAndChooseItem;
+ gBattlerInMenuId = gActiveBattler;
+ for (i = 0; i < 3; ++i)
+ gUnknown_203B0DC[i] = gBattleBufferA[gActiveBattler][1 + i];
+}
+
+static void PlayerHandleChoosePokemon(void)
+{
+ s32 i;
+
+ gUnknown_3004FFC[gActiveBattler] = CreateTask(TaskDummy, 0xFF);
+ gTasks[gUnknown_3004FFC[gActiveBattler]].data[0] = gBattleBufferA[gActiveBattler][1] & 0xF;
+ *(&gBattleStruct->battlerPreventingSwitchout) = gBattleBufferA[gActiveBattler][1] >> 4;
+ *(&gBattleStruct->field_8B) = gBattleBufferA[gActiveBattler][2];
+ *(&gBattleStruct->abilityPreventingSwitchout) = gBattleBufferA[gActiveBattler][3];
+ for (i = 0; i < 3; ++i)
+ gUnknown_203B0DC[i] = gBattleBufferA[gActiveBattler][4 + i];
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
+ gBattlerControllerFuncs[gActiveBattler] = OpenPartyMenuToChooseMon;
+ gBattlerInMenuId = gActiveBattler;
+}
+
+static void PlayerHandleCmd23(void)
+{
+ BattleStopLowHpSound();
+ BeginNormalPaletteFade(0xFFFFFFFF, 2, 0, 16, RGB_BLACK);
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleHealthBarUpdate(void)
+{
+ s16 hpVal;
+
+ LoadBattleBarGfx(0);
+ hpVal = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8);
+ if (hpVal != INSTANT_HP_BAR_DROP)
+ {
+ u32 maxHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP);
+ u32 curHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_HP);
+
+ SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, curHP, hpVal);
+ }
+ else
+ {
+ u32 maxHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP);
+
+ SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, 0, hpVal);
+ UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], 0, HP_CURRENT);
+ }
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnHealthbarDone;
+}
+
+static void PlayerHandleExpUpdate(void)
+{
+ u8 monId = gBattleBufferA[gActiveBattler][1];
+
+ if (GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL) >= MAX_LEVEL)
+ {
+ PlayerBufferExecCompleted();
+ }
+ else
+ {
+ s16 expPointsToGive;
+ u8 taskId;
+
+ LoadBattleBarGfx(1);
+ GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES); // Unused return value.
+ expPointsToGive = T1_READ_16(&gBattleBufferA[gActiveBattler][2]);
+ taskId = CreateTask(Task_GiveExpToMon, 10);
+ gTasks[taskId].tExpTask_monId = monId;
+ gTasks[taskId].tExpTask_gainedExp = expPointsToGive;
+ gTasks[taskId].tExpTask_battler = gActiveBattler;
+ gBattlerControllerFuncs[gActiveBattler] = nullsub_13;
+ }
+}
+
+static void PlayerHandleStatusIconUpdate(void)
+{
+ if (!mplay_80342A4(gActiveBattler))
+ {
+ u8 battlerId;
+
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_STATUS_ICON);
+ battlerId = gActiveBattler;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = 0;
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation;
+ }
+}
+
+static void PlayerHandleStatusAnimation(void)
+{
+ if (!mplay_80342A4(gActiveBattler))
+ {
+ InitAndLaunchChosenStatusAnimation(gBattleBufferA[gActiveBattler][1],
+ gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8) | (gBattleBufferA[gActiveBattler][4] << 16) | (gBattleBufferA[gActiveBattler][5] << 24));
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation;
+ }
+}
+
+static void PlayerHandleStatusXor(void)
+{
+ u8 val = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_STATUS) ^ gBattleBufferA[gActiveBattler][1];
+
+ SetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_STATUS, &val);
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleDataTransfer(void)
+{
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleDMA3Transfer(void)
+{
+ u32 dstArg = gBattleBufferA[gActiveBattler][1]
+ | (gBattleBufferA[gActiveBattler][2] << 8)
+ | (gBattleBufferA[gActiveBattler][3] << 16)
+ | (gBattleBufferA[gActiveBattler][4] << 24);
+ u16 sizeArg = gBattleBufferA[gActiveBattler][5] | (gBattleBufferA[gActiveBattler][6] << 8);
+ const u8 *src = &gBattleBufferA[gActiveBattler][7];
+ u8 *dst = (u8*)(dstArg);
+ u32 size = sizeArg;
+
+ while (TRUE)
+ {
+ if (size <= 0x1000)
+ {
+ DmaCopy16(3, src, dst, size);
+ break;
+ }
+ DmaCopy16(3, src, dst, 0x1000);
+ src += 0x1000;
+ dst += 0x1000;
+ size -= 0x1000;
+ }
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandlePlayBGM(void)
+{
+ PlayBGM(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8));
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleCmd32(void)
+{
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleTwoReturnValues(void)
+{
+ BtlController_EmitTwoReturnValues(1, 0, 0);
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleChosenMonReturnValue(void)
+{
+ BtlController_EmitChosenMonReturnValue(1, 0, NULL);
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleOneReturnValue(void)
+{
+ BtlController_EmitOneReturnValue(1, 0);
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleOneReturnValue_Duplicate(void)
+{
+ BtlController_EmitOneReturnValue_Duplicate(1, 0);
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleCmd37(void)
+{
+ gUnknown_2022870.field_0 = 0;
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleCmd38(void)
+{
+ gUnknown_2022870.field_0 = gBattleBufferA[gActiveBattler][1];
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleCmd39(void)
+{
+ gUnknown_2022870.flag_x80 = 0;
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleCmd40(void)
+{
+ gUnknown_2022870.flag_x80 ^= 1;
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleHitAnimation(void)
+{
+ if (gSprites[gBattlerSpriteIds[gActiveBattler]].invisible == TRUE)
+ {
+ PlayerBufferExecCompleted();
+ }
+ else
+ {
+ gDoingBattleAnim = TRUE;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0;
+ DoHitAnimHealthboxEffect(gActiveBattler);
+ gBattlerControllerFuncs[gActiveBattler] = DoHitAnimBlinkSpriteEffect;
+ }
+}
+
+static void PlayerHandleCmd42(void)
+{
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandlePlaySE(void)
+{
+ s8 pan;
+
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ pan = SOUND_PAN_ATTACKER;
+ else
+ pan = SOUND_PAN_TARGET;
+ PlaySE12WithPanning(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8), pan);
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandlePlayFanfare(void)
+{
+ PlayFanfare(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8));
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleFaintingCry(void)
+{
+ PlayCry3(GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES), -25, 5);
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleIntroSlide(void)
+{
+ HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
+ gIntroSlideFlags |= 1;
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleIntroTrainerBallThrow(void)
+{
+ u8 paletteNum;
+ u8 taskId;
+
+ SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 50;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = -40;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_80755B8;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gActiveBattler;
+ StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], sub_80335F8);
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1);
+ paletteNum = AllocSpritePalette(0xD6F8);
+ LoadCompressedPalette(gTrainerBackPicPaletteTable[gSaveBlock2Ptr->playerGender].data, 0x100 + paletteNum * 16, 32);
+ gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = paletteNum;
+ taskId = CreateTask(task05_08033660, 5);
+ gTasks[taskId].data[0] = gActiveBattler;
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
+ gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
+ gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
+ gBattlerControllerFuncs[gActiveBattler] = nullsub_13;
+}
+
+void sub_80335F8(struct Sprite *sprite)
+{
+ u8 battlerId = sprite->data[5];
+
+ FreeSpriteOamMatrix(sprite);
+ FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum));
+ DestroySprite(sprite);
+ BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battlerId]], battlerId);
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], 0);
+}
+
+static void task05_08033660(u8 taskId)
+{
+ if (gTasks[taskId].data[1] < 31)
+ {
+ ++gTasks[taskId].data[1];
+ }
+ else
+ {
+ u8 savedActiveBattler = gActiveBattler;
+
+ gActiveBattler = gTasks[taskId].data[0];
+ if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ {
+ gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
+ sub_8031FF4(gActiveBattler, FALSE);
+ }
+ else
+ {
+ gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
+ sub_8031FF4(gActiveBattler, FALSE);
+ gActiveBattler ^= BIT_FLANK;
+ gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
+ BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
+ sub_8031FF4(gActiveBattler, FALSE);
+ gActiveBattler ^= BIT_FLANK;
+ }
+ gBattlerControllerFuncs[gActiveBattler] = sub_802FA58;
+ gActiveBattler = savedActiveBattler;
+ DestroyTask(taskId);
+ }
+}
+
+static void PlayerHandleDrawPartyStatusSummary(void)
+{
+ if (gBattleBufferA[gActiveBattler][1] && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ {
+ PlayerBufferExecCompleted();
+ }
+ else
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1;
+ gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0;
+ if (gBattleBufferA[gActiveBattler][2] != 0)
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0x5D;
+ gBattlerControllerFuncs[gActiveBattler] = sub_8033830;
+ }
+}
+
+static void sub_8033830(void)
+{
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5++ > 0x5C)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0;
+ PlayerBufferExecCompleted();
+ }
+}
+
+static void PlayerHandleHidePartyStatusSummary(void)
+{
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
+ gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleEndBounceEffect(void)
+{
+ EndBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX);
+ EndBounceEffect(gActiveBattler, BOUNCE_MON);
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleSpriteInvisibility(void)
+{
+ if (IsBattlerSpritePresent(gActiveBattler))
+ {
+ gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleBufferA[gActiveBattler][1];
+ CopyBattleSpriteInvisibility(gActiveBattler);
+ }
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleBattleAnimation(void)
+{
+ if (!mplay_80342A4(gActiveBattler))
+ {
+ u8 animationId = gBattleBufferA[gActiveBattler][1];
+ u16 argument = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8);
+
+ if (TryHandleLaunchBattleTableAnimation(gActiveBattler, gActiveBattler, gActiveBattler, animationId, argument))
+ PlayerBufferExecCompleted();
+ else
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedBattleAnimation;
+ }
+}
+
+static void PlayerHandleLinkStandbyMsg(void)
+{
+ switch (gBattleBufferA[gActiveBattler][1])
+ {
+ case 0:
+ PrintLinkStandbyMsg();
+ // fall through
+ case 1:
+ EndBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX);
+ EndBounceEffect(gActiveBattler, BOUNCE_MON);
+ break;
+ case 2:
+ PrintLinkStandbyMsg();
+ break;
+ }
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleResetActionMoveSelection(void)
+{
+ switch (gBattleBufferA[gActiveBattler][1])
+ {
+ case RESET_ACTION_MOVE_SELECTION:
+ gActionSelectionCursor[gActiveBattler] = 0;
+ gMoveSelectionCursor[gActiveBattler] = 0;
+ break;
+ case RESET_ACTION_SELECTION:
+ gActionSelectionCursor[gActiveBattler] = 0;
+ break;
+ case RESET_MOVE_SELECTION:
+ gMoveSelectionCursor[gActiveBattler] = 0;
+ break;
+ }
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleCmd55(void)
+{
+ gBattleOutcome = gBattleBufferA[gActiveBattler][1];
+ FadeOutMapMusic(5);
+ BeginFastPaletteFade(3);
+ PlayerBufferExecCompleted();
+ gBattlerControllerFuncs[gActiveBattler] = sub_802F6A8;
+}
+
+static void PlayerCmdEnd(void)
+{
+}
+
+static void sub_8033AC8(void)
+{
+ u32 bitMask = 0;
+ u8 startY = 0;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ {
+ u8 moveTarget;
+ struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleBufferA[gActiveBattler][4]);
+ u16 move = moveInfo->moves[gMoveSelectionCursor[gActiveBattler]];
+
+ if (move == MOVE_CURSE)
+ {
+ if (moveInfo->monType1 != TYPE_GHOST && moveInfo->monType2 != TYPE_GHOST)
+ moveTarget = MOVE_TARGET_USER;
+ else
+ moveTarget = MOVE_TARGET_SELECTED;
+ }
+ else
+ {
+ moveTarget = gBattleMoves[moveInfo->moves[gMoveSelectionCursor[gActiveBattler]]].target;
+ }
+ switch (moveTarget)
+ {
+ case 0:
+ case 1:
+ case 2:
+ case 4:
+ bitMask = 0xF0000;
+ startY = 0;
+ break;
+ case 8:
+ case 64:
+ bitMask = (gBitTable[GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)]
+ | gBitTable[GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)]) << 16;
+ startY = 8;
+ break;
+ case 16:
+ switch (move)
+ {
+ case MOVE_HAZE:
+ case MOVE_SANDSTORM:
+ case MOVE_PERISH_SONG:
+ case MOVE_RAIN_DANCE:
+ case MOVE_SUNNY_DAY:
+ case MOVE_HAIL:
+ case MOVE_MUD_SPORT:
+ case MOVE_WATER_SPORT:
+ bitMask = 0xF0000;
+ break;
+ case MOVE_SAFEGUARD:
+ case MOVE_REFLECT:
+ case MOVE_LIGHT_SCREEN:
+ case MOVE_MIST:
+ case MOVE_HEAL_BELL:
+ case MOVE_AROMATHERAPY:
+ bitMask = (gBitTable[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]
+ | gBitTable[GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT)]) << 16;
+ break;
+ case MOVE_HELPING_HAND:
+ bitMask = (gBitTable[GetBattlerAtPosition(GetBattlerPosition(gActiveBattler) ^ BIT_FLANK)]) << 16;
+ break;
+ default:
+ bitMask = (gBitTable[gActiveBattler]) << 16;
+ break;
+ }
+ startY = 8;
+ break;
+ case 32:
+ bitMask = (gBitTable[GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)]
+ | gBitTable[GetBattlerAtPosition(GetBattlerPosition(gActiveBattler) ^ BIT_FLANK)]
+ | gBitTable[GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)]) << 16;
+ startY = 8;
+ break;
+ }
+ BeginNormalPaletteFade(bitMask, 8, startY, 0, RGB_WHITE);
+ }
+}
diff --git a/src/battle_controllers.c b/src/battle_controllers.c
index 509a00824..96790a52d 100644
--- a/src/battle_controllers.c
+++ b/src/battle_controllers.c
@@ -1,6 +1,6 @@
#include "global.h"
#include "battle.h"
-#include "battle_2.h"
+#include "battle_main.h"
#include "battle_ai_script_commands.h"
#include "battle_anim.h"
#include "battle_util.h"
diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c
index 3789b04c2..315696388 100644
--- a/src/battle_gfx_sfx_util.c
+++ b/src/battle_gfx_sfx_util.c
@@ -12,7 +12,7 @@
#include "util.h"
#include "party_menu.h"
#include "battle.h"
-#include "battle_2.h"
+#include "battle_main.h"
#include "battle_controllers.h"
#include "battle_ai_script_commands.h"
#include "battle_anim.h"
@@ -450,7 +450,7 @@ void DecompressTrainerFrontPic(u16 frontPicId, u8 battlerId)
void DecompressTrainerBackPalette(u16 index, u8 palette)
{
- LoadCompressedPalette(gUnknown_8239FD4[index].data, (palette + 16) * 16, 0x20);
+ LoadCompressedPalette(gTrainerBackPicPaletteTable[index].data, (palette + 16) * 16, 0x20);
}
void nullsub_16(u8 a1)
diff --git a/src/pokemon.c b/src/pokemon.c
index 5f26881ab..94cf8f607 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -8,7 +8,7 @@
#include "data2.h"
#include "string_util.h"
#include "battle.h"
-#include "battle_2.h"
+#include "battle_main.h"
#include "item.h"
#include "event_data.h"
#include "util.h"
diff --git a/src/teachy_tv.c b/src/teachy_tv.c
index 3594c79a2..fa687fbef 100644
--- a/src/teachy_tv.c
+++ b/src/teachy_tv.c
@@ -23,7 +23,7 @@
#include "event_data.h"
#include "load_save.h"
#include "battle_transition.h"
-#include "battle_2.h"
+#include "battle_main.h"
#include "battle.h"
#include "global.fieldmap.h"
#include "teachy_tv.h"
diff --git a/src/trainer_tower.c b/src/trainer_tower.c
index a1eedf2ac..054a0da2f 100644
--- a/src/trainer_tower.c
+++ b/src/trainer_tower.c
@@ -17,7 +17,7 @@
#include "battle_setup.h"
#include "battle_transition.h"
#include "battle.h"
-#include "battle_2.h"
+#include "battle_main.h"
#include "overworld.h"
#include "item.h"
#include "window.h"
diff --git a/sym_common.txt b/sym_common.txt
index a8a434559..3c9c8f56f 100644
--- a/sym_common.txt
+++ b/sym_common.txt
@@ -123,10 +123,10 @@ gBattlerControllerFuncs: @ 3004FE0
gHealthboxSpriteIds: @ 3004FF0
.space 0x4
-gUnknown_3004FF4: @ 3004FF4
+gMultiUsePlayerCursor: @ 3004FF4
.space 0x4
-gUnknown_3004FF8: @ 3004FF8
+gNumberOfMovesToChoose: @ 3004FF8
.space 0x4
gUnknown_3004FFC: @ 3004FFC