diff options
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 | 
