diff options
author | camthesaxman <cameronghall@cox.net> | 2017-06-20 19:20:11 -0500 |
---|---|---|
committer | camthesaxman <cameronghall@cox.net> | 2017-06-20 19:20:11 -0500 |
commit | 6046f214e335e124200441f27f5fa0b3eae6cc76 (patch) | |
tree | e8ea6aeb57ccc6b52774d1b1f3c2dc8c77e24523 | |
parent | 4a71715100ca2718b5e5d68cf818d011114e06f0 (diff) |
decompile sub_8030A3C - PlayerHandleLinkStandbyMsg
-rw-r--r-- | asm/battle_6.s | 1005 | ||||
-rw-r--r-- | include/battle.h | 8 | ||||
-rw-r--r-- | include/rom3.h | 40 | ||||
-rw-r--r-- | src/battle_6.c | 520 | ||||
-rw-r--r-- | src/battle_811DA74.c | 8 |
5 files changed, 451 insertions, 1130 deletions
diff --git a/asm/battle_6.s b/asm/battle_6.s index 5d6319467..ddbb9f2ce 100644 --- a/asm/battle_6.s +++ b/asm/battle_6.s @@ -3675,1011 +3675,6 @@ _08030378: .section .text_8030464 - thumb_func_start sub_8030A3C -sub_8030A3C: @ 8030A3C - push {lr} - ldr r2, _08030A64 @ =gBattleBufferA - ldr r0, _08030A68 @ =gActiveBank - ldrb r1, [r0] - lsls r1, 9 - adds r0, r2, 0x1 - adds r0, r1, r0 - ldrb r0, [r0] - adds r2, 0x2 - adds r1, r2 - ldrb r1, [r1] - lsls r1, 8 - orrs r0, r1 - bl PlayBGM - bl PlayerBufferExecCompleted - pop {r0} - bx r0 - .align 2, 0 -_08030A64: .4byte gBattleBufferA -_08030A68: .4byte gActiveBank - thumb_func_end sub_8030A3C - - thumb_func_start sub_8030A6C -sub_8030A6C: @ 8030A6C - push {lr} - bl PlayerBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_8030A6C - - thumb_func_start sub_8030A78 -sub_8030A78: @ 8030A78 - push {lr} - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl dp01_build_cmdbuf_x21_a_bb - bl PlayerBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_8030A78 - - thumb_func_start sub_8030A8C -sub_8030A8C: @ 8030A8C - push {lr} - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl dp01_build_cmdbuf_x22_a_three_bytes - bl PlayerBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_8030A8C - - thumb_func_start sub_8030AA0 -sub_8030AA0: @ 8030AA0 - push {lr} - movs r0, 0x1 - movs r1, 0 - bl dp01_build_cmdbuf_x23_aa_0 - bl PlayerBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_8030AA0 - - thumb_func_start sub_8030AB4 -sub_8030AB4: @ 8030AB4 - push {lr} - movs r0, 0x1 - movs r1, 0 - bl dp01_build_cmdbuf_x24_aa_0 - bl PlayerBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_8030AB4 - - thumb_func_start sub_8030AC8 -sub_8030AC8: @ 8030AC8 - push {lr} - ldr r2, _08030AE0 @ =gUnknown_020238C8 - ldrb r1, [r2] - movs r0, 0x80 - negs r0, r0 - ands r0, r1 - strb r0, [r2] - bl PlayerBufferExecCompleted - pop {r0} - bx r0 - .align 2, 0 -_08030AE0: .4byte gUnknown_020238C8 - thumb_func_end sub_8030AC8 - - thumb_func_start sub_8030AE4 -sub_8030AE4: @ 8030AE4 - push {lr} - ldr r3, _08030B10 @ =gUnknown_020238C8 - ldr r1, _08030B14 @ =gBattleBufferA - ldr r0, _08030B18 @ =gActiveBank - ldrb r0, [r0] - lsls r0, 9 - adds r1, 0x1 - adds r0, r1 - ldrb r0, [r0] - movs r1, 0x7F - ands r1, r0 - ldrb r2, [r3] - movs r0, 0x80 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - bl PlayerBufferExecCompleted - pop {r0} - bx r0 - .align 2, 0 -_08030B10: .4byte gUnknown_020238C8 -_08030B14: .4byte gBattleBufferA -_08030B18: .4byte gActiveBank - thumb_func_end sub_8030AE4 - - thumb_func_start sub_8030B1C -sub_8030B1C: @ 8030B1C - push {lr} - ldr r2, _08030B30 @ =gUnknown_020238C8 - ldrb r1, [r2] - movs r0, 0x7F - ands r0, r1 - strb r0, [r2] - bl PlayerBufferExecCompleted - pop {r0} - bx r0 - .align 2, 0 -_08030B30: .4byte gUnknown_020238C8 - thumb_func_end sub_8030B1C - - thumb_func_start sub_8030B34 -sub_8030B34: @ 8030B34 - push {lr} - ldr r3, _08030B58 @ =gUnknown_020238C8 - 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 -_08030B58: .4byte gUnknown_020238C8 - thumb_func_end sub_8030B34 - - thumb_func_start PlayerHandleHitAnimation -PlayerHandleHitAnimation: @ 8030B5C - push {r4,lr} - ldr r3, _08030B84 @ =gSprites - ldr r2, _08030B88 @ =gObjectBankIDs - ldr r4, _08030B8C @ =gActiveBank - ldrb r0, [r4] - adds r0, r2 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - adds r0, 0x3E - ldrb r0, [r0] - lsls r0, 29 - cmp r0, 0 - bge _08030B90 - bl PlayerBufferExecCompleted - b _08030BBA - .align 2, 0 -_08030B84: .4byte gSprites -_08030B88: .4byte gObjectBankIDs -_08030B8C: .4byte gActiveBank -_08030B90: - ldr r1, _08030BC0 @ =gDoingBattleAnim - movs r0, 0x1 - strb r0, [r1] - ldrb r0, [r4] - adds r0, r2 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - movs r1, 0 - strh r1, [r0, 0x30] - ldrb r0, [r4] - bl sub_8047858 - ldr r1, _08030BC4 @ =gBattleBankFunc - ldrb r0, [r4] - lsls r0, 2 - adds r0, r1 - ldr r1, _08030BC8 @ =bx_blink_t1 - str r1, [r0] -_08030BBA: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08030BC0: .4byte gDoingBattleAnim -_08030BC4: .4byte gBattleBankFunc -_08030BC8: .4byte bx_blink_t1 - thumb_func_end PlayerHandleHitAnimation - - thumb_func_start sub_8030BCC -sub_8030BCC: @ 8030BCC - push {lr} - bl PlayerBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_8030BCC - - thumb_func_start PlayerHandleEffectivenessSound -PlayerHandleEffectivenessSound: @ 8030BD8 - push {r4,lr} - ldr r4, _08030C14 @ =gActiveBank - ldrb r0, [r4] - bl GetBankSide - lsls r0, 24 - movs r3, 0x3F - cmp r0, 0 - bne _08030BEC - movs r3, 0xC0 -_08030BEC: - ldr r2, _08030C18 @ =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 -_08030C14: .4byte gActiveBank -_08030C18: .4byte gBattleBufferA - thumb_func_end PlayerHandleEffectivenessSound - - thumb_func_start sub_8030C1C -sub_8030C1C: @ 8030C1C - push {lr} - ldr r2, _08030C44 @ =gBattleBufferA - ldr r0, _08030C48 @ =gActiveBank - ldrb r1, [r0] - lsls r1, 9 - adds r0, r2, 0x1 - adds r0, r1, r0 - ldrb r0, [r0] - adds r2, 0x2 - adds r1, r2 - ldrb r1, [r1] - lsls r1, 8 - orrs r0, r1 - bl PlayFanfare - bl PlayerBufferExecCompleted - pop {r0} - bx r0 - .align 2, 0 -_08030C44: .4byte gBattleBufferA -_08030C48: .4byte gActiveBank - thumb_func_end sub_8030C1C - - thumb_func_start PlayerHandleFaintingCry -PlayerHandleFaintingCry: @ 8030C4C - push {lr} - ldr r1, _08030C80 @ =gBattlePartyID - ldr r0, _08030C84 @ =gActiveBank - ldrb r0, [r0] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08030C88 @ =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 -_08030C80: .4byte gBattlePartyID -_08030C84: .4byte gActiveBank -_08030C88: .4byte gPlayerParty - thumb_func_end PlayerHandleFaintingCry - - thumb_func_start PlayerHandleIntroSlide -PlayerHandleIntroSlide: @ 8030C8C - push {lr} - ldr r1, _08030CB4 @ =gBattleBufferA - ldr r0, _08030CB8 @ =gActiveBank - ldrb r0, [r0] - lsls r0, 9 - adds r1, 0x1 - adds r0, r1 - ldrb r0, [r0] - bl sub_80E43C0 - ldr r2, _08030CBC @ =gUnknown_02024DE8 - ldrh r0, [r2] - movs r1, 0x1 - orrs r0, r1 - strh r0, [r2] - bl PlayerBufferExecCompleted - pop {r0} - bx r0 - .align 2, 0 -_08030CB4: .4byte gBattleBufferA -_08030CB8: .4byte gActiveBank -_08030CBC: .4byte gUnknown_02024DE8 - thumb_func_end PlayerHandleIntroSlide - - thumb_func_start PlayerHandleTrainerBallThrow -PlayerHandleTrainerBallThrow: @ 8030CC0 - push {r4-r7,lr} - ldr r6, _08030DF8 @ =gObjectBankIDs - ldr r7, _08030DFC @ =gActiveBank - ldrb r0, [r7] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r5, _08030E00 @ =gSprites - adds r0, r5 - bl oamt_add_pos2_onto_pos1 - ldrb r0, [r7] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - movs r1, 0x32 - strh r1, [r0, 0x2E] - ldrb r0, [r7] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldr r1, _08030E04 @ =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, _08030E08 @ =sub_8078B34 - 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, _08030E0C @ =sub_8030E38 - bl oamt_set_x3A_32 - 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, _08030E10 @ =0x0000d6f8 - bl AllocSpritePalette - adds r4, r0, 0 - lsls r4, 24 - ldr r1, _08030E14 @ =gTrainerBackPicPaletteTable - ldr r0, _08030E18 @ =gSaveBlock2 - 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, _08030E1C @ =task05_08033660 - movs r1, 0x5 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r4, _08030E20 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r4 - ldrb r0, [r7] - strh r0, [r1, 0x8] - ldrb r3, [r7] - lsls r0, r3, 1 - adds r0, r3 - lsls r0, 2 - ldr r2, _08030E24 @ =0x02017810 - adds r0, r2 - ldrb r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08030DDC - ldr r0, _08030E28 @ =gUnknown_02024E68 - adds r0, r3, r0 - ldrb r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r4 - ldr r1, _08030E2C @ =sub_8044CA0 - str r1, [r0] -_08030DDC: - adds r2, 0x30 - ldrb r0, [r2, 0x9] - movs r1, 0x1 - orrs r0, r1 - strb r0, [r2, 0x9] - ldr r1, _08030E30 @ =gBattleBankFunc - ldrb r0, [r7] - lsls r0, 2 - adds r0, r1 - ldr r1, _08030E34 @ =nullsub_91 - str r1, [r0] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08030DF8: .4byte gObjectBankIDs -_08030DFC: .4byte gActiveBank -_08030E00: .4byte gSprites -_08030E04: .4byte 0x0000ffd8 -_08030E08: .4byte sub_8078B34 -_08030E0C: .4byte sub_8030E38 -_08030E10: .4byte 0x0000d6f8 -_08030E14: .4byte gTrainerBackPicPaletteTable -_08030E18: .4byte gSaveBlock2 -_08030E1C: .4byte task05_08033660 -_08030E20: .4byte gTasks -_08030E24: .4byte 0x02017810 -_08030E28: .4byte gUnknown_02024E68 -_08030E2C: .4byte sub_8044CA0 -_08030E30: .4byte gBattleBankFunc -_08030E34: .4byte nullsub_91 - thumb_func_end PlayerHandleTrainerBallThrow - - thumb_func_start sub_8030E38 -sub_8030E38: @ 8030E38 - 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, _08030E90 @ =gBattlePartyID - lsls r0, r4, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08030E94 @ =gPlayerParty - adds r0, r1 - adds r1, r4, 0 - bl sub_80318FC - ldr r0, _08030E98 @ =gObjectBankIDs - adds r4, r0 - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08030E9C @ =gSprites - adds r0, r1 - movs r1, 0 - bl StartSpriteAnim - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08030E90: .4byte gBattlePartyID -_08030E94: .4byte gPlayerParty -_08030E98: .4byte gObjectBankIDs -_08030E9C: .4byte gSprites - thumb_func_end sub_8030E38 - - thumb_func_start task05_08033660 -task05_08033660: @ 8030EA0 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldr r1, _08030EC8 @ =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 _08030ECC - adds r0, r2, 0x1 - strh r0, [r1, 0xA] - b _08030F88 - .align 2, 0 -_08030EC8: .4byte gTasks -_08030ECC: - ldr r7, _08030F0C @ =gActiveBank - ldrb r0, [r7] - mov r9, r0 - ldrh r0, [r1, 0x8] - strb r0, [r7] - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - beq _08030EEC - ldr r0, _08030F10 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08030F1C -_08030EEC: - ldr r0, _08030F14 @ =gBattleBufferA - ldrb r1, [r7] - lsls r2, r1, 9 - adds r0, 0x1 - adds r2, r0 - ldr r0, _08030F18 @ =gBattlePartyID - lsls r1, 1 - adds r1, r0 - ldrh r0, [r1] - strb r0, [r2] - ldrb r0, [r7] - movs r1, 0 - bl sub_802F934 - b _08030F70 - .align 2, 0 -_08030F0C: .4byte gActiveBank -_08030F10: .4byte gBattleTypeFlags -_08030F14: .4byte gBattleBufferA -_08030F18: .4byte gBattlePartyID -_08030F1C: - ldr r4, _08030F94 @ =gBattleBufferA - ldrb r0, [r7] - lsls r1, r0, 9 - adds r4, 0x1 - adds r1, r4 - ldr r5, _08030F98 @ =gBattlePartyID - lsls r0, 1 - adds r0, r5 - ldrh r0, [r0] - strb r0, [r1] - ldrb r0, [r7] - movs r1, 0 - bl sub_802F934 - 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, _08030F9C @ =gPlayerParty - adds r0, r2 - bl sub_80318FC - ldrb r0, [r7] - movs r1, 0 - bl sub_802F934 - ldrb r0, [r7] - eors r0, r6 - strb r0, [r7] -_08030F70: - ldr r1, _08030FA0 @ =gBattleBankFunc - ldr r2, _08030FA4 @ =gActiveBank - ldrb r0, [r2] - lsls r0, 2 - adds r0, r1 - ldr r1, _08030FA8 @ =sub_802D500 - str r1, [r0] - mov r3, r9 - strb r3, [r2] - mov r0, r8 - bl DestroyTask -_08030F88: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08030F94: .4byte gBattleBufferA -_08030F98: .4byte gBattlePartyID -_08030F9C: .4byte gPlayerParty -_08030FA0: .4byte gBattleBankFunc -_08030FA4: .4byte gActiveBank -_08030FA8: .4byte sub_802D500 - thumb_func_end task05_08033660 - - thumb_func_start sub_8030FAC -sub_8030FAC: @ 8030FAC - push {r4-r6,lr} - ldr r1, _08030FD4 @ =gBattleBufferA - ldr r0, _08030FD8 @ =gActiveBank - ldrb r2, [r0] - lsls r0, r2, 9 - adds r1, 0x1 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _08030FDC - adds r0, r2, 0 - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - bne _08030FDC - bl PlayerBufferExecCompleted - b _08031044 - .align 2, 0 -_08030FD4: .4byte gBattleBufferA -_08030FD8: .4byte gActiveBank -_08030FDC: - ldr r5, _0803104C @ =gActiveBank - ldrb r1, [r5] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - ldr r6, _08031050 @ =0x02017810 - adds r0, r6 - ldrb r1, [r0] - movs r2, 0x1 - orrs r1, r2 - strb r1, [r0] - ldrb r0, [r5] - lsls r3, r0, 9 - ldr r4, _08031054 @ =gUnknown_02023A64 - 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 sub_8044804 - ldr r2, _08031058 @ =gUnknown_02024E68 - ldrb r1, [r5] - adds r1, r2 - movs r2, 0 - strb r0, [r1] - ldrb r1, [r5] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - strb r2, [r0, 0x5] - ldrb r1, [r5] - lsls r0, r1, 9 - adds r0, r4 - ldrb r0, [r0] - cmp r0, 0 - beq _08031038 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - movs r1, 0x5D - strb r1, [r0, 0x5] -_08031038: - ldr r0, _0803105C @ =gBattleBankFunc - ldrb r1, [r5] - lsls r1, 2 - adds r1, r0 - ldr r0, _08031060 @ =sub_8031064 - str r0, [r1] -_08031044: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0803104C: .4byte gActiveBank -_08031050: .4byte 0x02017810 -_08031054: .4byte gUnknown_02023A64 -_08031058: .4byte gUnknown_02024E68 -_0803105C: .4byte gBattleBankFunc -_08031060: .4byte sub_8031064 - thumb_func_end sub_8030FAC - - thumb_func_start sub_8031064 -sub_8031064: @ 8031064 - push {r4,lr} - ldr r4, _0803109C @ =gActiveBank - ldrb r1, [r4] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - ldr r3, _080310A0 @ =0x02017810 - adds r0, r3 - ldrb r1, [r0, 0x5] - adds r2, r1, 0x1 - strb r2, [r0, 0x5] - lsls r1, 24 - lsrs r1, 24 - cmp r1, 0x5C - bls _08031094 - ldrb r0, [r4] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r1, r3 - movs r0, 0 - strb r0, [r1, 0x5] - bl PlayerBufferExecCompleted -_08031094: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0803109C: .4byte gActiveBank -_080310A0: .4byte 0x02017810 - thumb_func_end sub_8031064 - - thumb_func_start sub_80310A4 -sub_80310A4: @ 80310A4 - push {lr} - ldr r0, _080310DC @ =gActiveBank - ldrb r3, [r0] - lsls r0, r3, 1 - adds r0, r3 - lsls r0, 2 - ldr r1, _080310E0 @ =0x02017810 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080310D2 - ldr r2, _080310E4 @ =gTasks - ldr r0, _080310E8 @ =gUnknown_02024E68 - adds r0, r3, r0 - ldrb r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - ldr r1, _080310EC @ =sub_8044CA0 - str r1, [r0] -_080310D2: - bl PlayerBufferExecCompleted - pop {r0} - bx r0 - .align 2, 0 -_080310DC: .4byte gActiveBank -_080310E0: .4byte 0x02017810 -_080310E4: .4byte gTasks -_080310E8: .4byte gUnknown_02024E68 -_080310EC: .4byte sub_8044CA0 - thumb_func_end sub_80310A4 - - thumb_func_start sub_80310F0 -sub_80310F0: @ 80310F0 - push {r4,lr} - ldr r4, _08031110 @ =gActiveBank - ldrb r0, [r4] - movs r1, 0x1 - bl dp11b_obj_free - ldrb r0, [r4] - movs r1, 0 - bl dp11b_obj_free - bl PlayerBufferExecCompleted - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08031110: .4byte gActiveBank - thumb_func_end sub_80310F0 - - thumb_func_start PlayerHandleSpriteInvisibility -PlayerHandleSpriteInvisibility: @ 8031114 - push {r4,lr} - ldr r4, _08031164 @ =gActiveBank - ldrb r0, [r4] - bl sub_8078874 - lsls r0, 24 - cmp r0, 0 - beq _0803115A - ldr r3, _08031168 @ =gSprites - ldr r0, _0803116C @ =gObjectBankIDs - 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, _08031170 @ =gBattleBufferA - lsls r1, 9 - adds r0, 0x1 - adds r1, r0 - adds r2, 0x3E - movs r0, 0x1 - ldrb r1, [r1] - ands r1, r0 - lsls r1, 2 - ldrb r3, [r2] - movs r0, 0x5 - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2] - ldrb r0, [r4] - bl sub_8031F88 -_0803115A: - bl PlayerBufferExecCompleted - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08031164: .4byte gActiveBank -_08031168: .4byte gSprites -_0803116C: .4byte gObjectBankIDs -_08031170: .4byte gBattleBufferA - thumb_func_end PlayerHandleSpriteInvisibility - - thumb_func_start PlayerHandleBattleAnimation -PlayerHandleBattleAnimation: @ 8031174 - push {r4-r6,lr} - sub sp, 0x4 - ldr r6, _080311B8 @ =gActiveBank - ldrb r0, [r6] - bl mplay_80342A4 - lsls r0, 24 - cmp r0, 0 - bne _080311CC - ldr r5, _080311BC @ =gBattleBufferA - ldrb r2, [r6] - lsls r1, r2, 9 - adds r0, r5, 0x1 - adds r0, r1, r0 - ldrb r3, [r0] - adds r0, r5, 0x2 - adds r0, r1, r0 - ldrb r4, [r0] - adds r5, 0x3 - adds r1, r5 - ldrb r0, [r1] - lsls r0, 8 - orrs r4, r0 - str r4, [sp] - adds r0, r2, 0 - adds r1, r2, 0 - bl move_anim_start_t3 - lsls r0, 24 - cmp r0, 0 - beq _080311C0 - bl PlayerBufferExecCompleted - b _080311CC - .align 2, 0 -_080311B8: .4byte gActiveBank -_080311BC: .4byte gBattleBufferA -_080311C0: - ldr r0, _080311D4 @ =gBattleBankFunc - ldrb r1, [r6] - lsls r1, 2 - adds r1, r0 - ldr r0, _080311D8 @ =sub_802E460 - str r0, [r1] -_080311CC: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080311D4: .4byte gBattleBankFunc -_080311D8: .4byte sub_802E460 - thumb_func_end PlayerHandleBattleAnimation - - thumb_func_start PlayerHandleLinkStandbyMsg -PlayerHandleLinkStandbyMsg: @ 80311DC - push {r4,lr} - ldr r1, _080311FC @ =gBattleBufferA - ldr r0, _08031200 @ =gActiveBank - ldrb r0, [r0] - lsls r0, 9 - adds r1, 0x1 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x1 - beq _0803120E - cmp r0, 0x1 - bgt _08031204 - cmp r0, 0 - beq _0803120A - b _0803122C - .align 2, 0 -_080311FC: .4byte gBattleBufferA -_08031200: .4byte gActiveBank -_08031204: - cmp r0, 0x2 - beq _08031228 - b _0803122C -_0803120A: - bl b_link_standby_message -_0803120E: - ldr r4, _08031224 @ =gActiveBank - ldrb r0, [r4] - movs r1, 0x1 - bl dp11b_obj_free - ldrb r0, [r4] - movs r1, 0 - bl dp11b_obj_free - b _0803122C - .align 2, 0 -_08031224: .4byte gActiveBank -_08031228: - bl b_link_standby_message -_0803122C: - bl PlayerBufferExecCompleted - pop {r4} - pop {r0} - bx r0 - thumb_func_end PlayerHandleLinkStandbyMsg - thumb_func_start PlayerHandleResetActionMoveSelection PlayerHandleResetActionMoveSelection: @ 8031238 push {r4,lr} diff --git a/include/battle.h b/include/battle.h index 395cf042a..a02842ede 100644 --- a/include/battle.h +++ b/include/battle.h @@ -185,7 +185,6 @@ struct Struct2017810 u8 unk1_0:1; u8 unk2; u8 unk3; - //u8 filler2[2]; u8 unk4; u8 unk5; u8 unk6; @@ -202,9 +201,16 @@ struct Struct2017840 u8 unk9_0:1; }; +struct Struct20238C8 +{ + u8 unk0_0:7; + u8 unk0_7:1; +}; + extern struct UnkBattleStruct1 unk_2016A00; extern struct UnkBattleStruct4 gDisableStructs[]; extern struct AI_ThinkingStruct gAIThinkingSpace; +extern struct Struct20238C8 gUnknown_020238C8; // TODO: move ewram to global.h extern u8 ewram[]; diff --git a/include/rom3.h b/include/rom3.h index 8e99f8de4..a45ec7dc4 100644 --- a/include/rom3.h +++ b/include/rom3.h @@ -13,13 +13,53 @@ void sub_800C1A8(u8); void sub_800C35C(void); void sub_800C47C(u8); void EmitGetAttributes(u8 a, u8 b, u8 c); +void dp01_build_cmdbuf_x01_a_b_0(u8 a, u8 b, u8 c); +void EmitSetAttributes(u8 a, u8 b, u8 c, u8 d, u8 *e); void dp01_build_cmdbuf_x04_4_4_4(u8 a); void sub_800C704(u8, u8, u8); +void dp01_build_cmdbuf_x06_a(u8 a, u8 b); void dp01_build_cmdbuf_x07_7_7_7(u8 a); +void dp01_build_cmdbuf_x08_8_8_8(u8 a); +void dp01_build_cmdbuf_x09_9_9_9(u8 a); +void EmitFaintAnimation(u8 a); +void dp01_build_cmdbuf_x0B_B_B_B(u8 a); +void dp01_build_cmdbuf_x0C_C_C_C(u8 a); +void dp01_build_cmdbuf_x0D_a(u8 a, u8 b); +void EmitMoveAnimation(u8 a, u16 b, u8 c, u16 d, s32 e, u8 f, u8 *g); +void EmitPrintString(u8 a, u16 b); void dp01_build_cmdbuf_x12_a_bb(u8 a, u8 b, u16 c); +void sub_800CBA4(u8 a, u8 b, u8 c, u8 *d); +void sub_800CBE0(u8 a, u8 *b); +void dp01_build_cmdbuf_x16_a_b_c_ptr_d_e_f(u8 a, u8 b, u8 c, u8 d, u8 *e); +void dp01_build_cmdbuf_x17_17_17_17(u8 a); +void EmitHealthBarUpdate(u8 a, s16 b); +void EmitExpBarUpdate(u8 a, u8 b, s16 c); +void EmitStatusIconUpdate(u8 a, u32 b, u32 c); +void EmitStatusAnimation(u8 a, u8 b, u32 c); +void EmitStatusXor(u8 a, u8 b); void dp01_build_cmdbuf_x1D_1D_numargs_varargs(u8, u16, u8 *); +void dp01_build_cmdbuf_x21_a_bb(u8 a, u8 b, u16 c); +void dp01_build_cmdbuf_x22_a_three_bytes(u8 a, u8 b, u8 *c); +void dp01_build_cmdbuf_x23_aa_0(u8 a, u16 b); +void dp01_build_cmdbuf_x24_aa_0(u8 a, u16 b); +void dp01_build_cmdbuf_x25_25_25_25(u8 a); +void dp01_build_cmdbuf_x26_a(u8 a, u8 b); +void dp01_build_cmdbuf_x27_27_27_27(u8 a); +void dp01_build_cmdbuf_x28_28_28_28(u8 a); +void EmitHitAnimation(u8 a); +void dp01_build_cmdbuf_x2A_2A_2A_2A(u8 a); +void EmitEffectivenessSound(u8 a, u16 b); +void sub_800D074(u8 a, u16 b); +void EmitFaintingCry(u8 a); void EmitBattleIntroSlide(u8 a, u8 b); void dp01_build_cmdbuf_x2F_2F_2F_2F(u8 a); void dp01_build_cmdbuf_x30_TODO(u8 a, u8 *b, u8 c); +void dp01_build_cmdbuf_x31_31_31_31(u8 a); +void dp01_build_cmdbuf_x32_32_32_32(u8 a); +void EmitSpriteInvisibility(u8 a, u8 b); +void EmitBattleAnimation(u8 a, u8 b, u16 c); +void EmitLinkStandbyMsg(u8 a, u8 b); +void EmitResetActionMoveSelection(u8 a, u8 b); +void dp01_build_cmdbuf_x37_a(u8 a, u8 b); #endif // GUARD_ROM3_H diff --git a/src/battle_6.c b/src/battle_6.c index e835f79e9..50373ac5d 100644 --- a/src/battle_6.c +++ b/src/battle_6.c @@ -2,9 +2,13 @@ #include "battle.h" #include "battle_interface.h" #include "battle_message.h" +#include "data2.h" #include "menu_cursor.h" #include "palette.h" #include "pokemon.h" +#include "rom3.h" +#include "sound.h" +#include "sprite.h" #include "task.h" #include "text.h" @@ -23,7 +27,11 @@ extern u8 gBattleBufferA[][0x200]; extern u8 gBankInMenu; extern u16 gBattlePartyID[]; extern u8 gHealthboxIDs[]; - +extern u8 gDoingBattleAnim; +extern u8 gObjectBankIDs[]; +extern u16 gBattleTypeFlags; +extern u16 gUnknown_02024DE8; +extern u8 gUnknown_02024E68[]; extern u8 gUnknown_02038470[]; extern u16 gUnknown_030041B0; extern u16 gUnknown_030041B4; @@ -60,8 +68,27 @@ extern void sub_802D924(u8); extern void sub_802E434(void); extern bool8 mplay_80342A4(u8); extern void move_anim_start_t2_for_situation(); +extern void bx_blink_t1(void); +extern void sub_8047858(); +extern u8 GetBankSide(u8); +extern void sub_80E43C0(); +extern void oamt_add_pos2_onto_pos1(); +extern void sub_8078B34(struct Sprite *); +extern void oamt_set_x3A_32(); +extern void sub_80318FC(); +extern bool8 IsDoubleBattle(void); +extern void sub_802F934(); +extern void sub_802D500(void); +extern void dp11b_obj_free(); +extern bool8 sub_8078874(u8); +extern bool8 move_anim_start_t3(); +extern void sub_802E460(void); +extern void b_link_standby_message(void); void sub_80304A8(void); +void sub_8030E38(struct Sprite *); +void task05_08033660(u8); +void sub_8031064(void); void sub_803037C(void) { @@ -94,165 +121,426 @@ void nullsub_42() void sub_8030468(void) { - sub_814A5C0(0, 0xFFFF, 12, 0x2D9F, 0); - sub_80304A8(); - gBattleBankFunc[gActiveBank] = sub_802C68C; + sub_814A5C0(0, 0xFFFF, 12, 0x2D9F, 0); + sub_80304A8(); + gBattleBankFunc[gActiveBank] = sub_802C68C; } void sub_80304A8(void) { - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 320; - sub_802E1B0(); - gUnknown_03004344 = 0xFF; - sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0); - if (gBattleBufferA[gActiveBank][2] != 1) - { - InitWindow(&gUnknown_03004210, gUnknown_08400D38, 656, 23, 55); - sub_8002F44(&gUnknown_03004210); - } - sub_802E220(); - sub_802E2D4(); + gUnknown_030042A4 = 0; + gUnknown_030042A0 = 320; + sub_802E1B0(); + gUnknown_03004344 = 0xFF; + sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0); + if (gBattleBufferA[gActiveBank][2] != 1) + { + InitWindow(&gUnknown_03004210, gUnknown_08400D38, 656, 23, 55); + sub_8002F44(&gUnknown_03004210); + } + sub_802E220(); + sub_802E2D4(); } void PlayerHandleOpenBag(void) { - s32 i; + s32 i; - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - gBattleBankFunc[gActiveBank] = sub_802E004; - gBankInMenu = gActiveBank; - for (i = 0; i < 3; i++) - gUnknown_02038470[i] = gBattleBufferA[gActiveBank][1 + i]; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gBattleBankFunc[gActiveBank] = sub_802E004; + gBankInMenu = gActiveBank; + for (i = 0; i < 3; i++) + gUnknown_02038470[i] = gBattleBufferA[gActiveBank][1 + i]; } void sub_8030594(void) { - s32 i; - - gUnknown_0300434C[gActiveBank] = CreateTask(TaskDummy, 0xFF); - gTasks[gUnknown_0300434C[gActiveBank]].data[0] = gBattleBufferA[gActiveBank][1] & 0xF; - ewram[0x16054] = gBattleBufferA[gActiveBank][1] >> 4; - ewram[0x1609D] = gBattleBufferA[gActiveBank][2]; - ewram[0x160C0] = gBattleBufferA[gActiveBank][3]; - for (i = 0; i < 3; i++) - gUnknown_02038470[i] = gBattleBufferA[gActiveBank][4 + i]; - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - gBattleBankFunc[gActiveBank] = sub_802DF30; - gBankInMenu = gActiveBank; + s32 i; + + gUnknown_0300434C[gActiveBank] = CreateTask(TaskDummy, 0xFF); + gTasks[gUnknown_0300434C[gActiveBank]].data[0] = gBattleBufferA[gActiveBank][1] & 0xF; + ewram[0x16054] = gBattleBufferA[gActiveBank][1] >> 4; + ewram[0x1609D] = gBattleBufferA[gActiveBank][2]; + ewram[0x160C0] = gBattleBufferA[gActiveBank][3]; + for (i = 0; i < 3; i++) + gUnknown_02038470[i] = gBattleBufferA[gActiveBank][4 + i]; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gBattleBankFunc[gActiveBank] = sub_802DF30; + gBankInMenu = gActiveBank; } void sub_8030674(void) { - sub_80325B8(); - BeginNormalPaletteFade(0xFFFFFFFF, 2, 0, 16, 0); - PlayerBufferExecCompleted(); + sub_80325B8(); + BeginNormalPaletteFade(0xFFFFFFFF, 2, 0, 16, 0); + PlayerBufferExecCompleted(); } void PlayerHandleHealthBarUpdate(void) { - s16 r7; - - load_gfxc_health_bar(0); - r7 = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8); - if (r7 != 0x7FFF) - { - u32 maxHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP); - u32 curHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_HP); - - sub_8043D84(gActiveBank, gHealthboxIDs[gActiveBank], maxHP, curHP, r7); - } - else - { - u32 maxHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP); - - sub_8043D84(gActiveBank, gHealthboxIDs[gActiveBank], maxHP, 0, r7); - sub_80440EC(gHealthboxIDs[gActiveBank], 0, 0); - } - gBattleBankFunc[gActiveBank] = bx_t1_healthbar_update; + s16 r7; + + load_gfxc_health_bar(0); + r7 = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8); + if (r7 != 0x7FFF) + { + u32 maxHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP); + u32 curHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_HP); + + sub_8043D84(gActiveBank, gHealthboxIDs[gActiveBank], maxHP, curHP, r7); + } + else + { + u32 maxHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP); + + sub_8043D84(gActiveBank, gHealthboxIDs[gActiveBank], maxHP, 0, r7); + sub_80440EC(gHealthboxIDs[gActiveBank], 0, 0); + } + gBattleBankFunc[gActiveBank] = bx_t1_healthbar_update; } void PlayerHandleExpBarUpdate(void) { - u8 r7 = gBattleBufferA[gActiveBank][1]; - - if (GetMonData(&gPlayerParty[r7], MON_DATA_LEVEL) >= 100) - { - PlayerBufferExecCompleted(); - } - else - { - u16 r4; - u8 taskId; - - load_gfxc_health_bar(1); - GetMonData(&gPlayerParty[r7], MON_DATA_SPECIES); // unused return value - r4 = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8); - taskId = CreateTask(sub_802D924, 10); - gTasks[taskId].data[0] = r7; - gTasks[taskId].data[1] = r4; - gTasks[taskId].data[2] = gActiveBank; - gBattleBankFunc[gActiveBank] = nullsub_91; - } + u8 r7 = gBattleBufferA[gActiveBank][1]; + + if (GetMonData(&gPlayerParty[r7], MON_DATA_LEVEL) >= 100) + { + PlayerBufferExecCompleted(); + } + else + { + u16 r4; + u8 taskId; + + load_gfxc_health_bar(1); + GetMonData(&gPlayerParty[r7], MON_DATA_SPECIES); // unused return value + r4 = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8); + taskId = CreateTask(sub_802D924, 10); + gTasks[taskId].data[0] = r7; + gTasks[taskId].data[1] = r4; + gTasks[taskId].data[2] = gActiveBank; + gBattleBankFunc[gActiveBank] = nullsub_91; + } } void PlayerHandleStatusIconUpdate(void) { - if (!mplay_80342A4(gActiveBank)) - { - sub_8045A5C(gHealthboxIDs[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], 9); - ewram17810[gActiveBank].unk0_4 = 0; - gBattleBankFunc[gActiveBank] = sub_802E434; - } + if (!mplay_80342A4(gActiveBank)) + { + sub_8045A5C(gHealthboxIDs[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], 9); + ewram17810[gActiveBank].unk0_4 = 0; + gBattleBankFunc[gActiveBank] = sub_802E434; + } } void PlayerHandleStatusAnimation(void) { - if (!mplay_80342A4(gActiveBank)) - { - move_anim_start_t2_for_situation( - gBattleBufferA[gActiveBank][1], - gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8) | (gBattleBufferA[gActiveBank][4] << 16) | (gBattleBufferA[gActiveBank][5] << 24)); - gBattleBankFunc[gActiveBank] = sub_802E434; - } + if (!mplay_80342A4(gActiveBank)) + { + move_anim_start_t2_for_situation( + gBattleBufferA[gActiveBank][1], + gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8) | (gBattleBufferA[gActiveBank][4] << 16) | (gBattleBufferA[gActiveBank][5] << 24)); + gBattleBankFunc[gActiveBank] = sub_802E434; + } } void PlayerHandleStatusXor(void) { - u8 val = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_STATUS) ^ gBattleBufferA[gActiveBank][1]; + u8 val = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_STATUS) ^ gBattleBufferA[gActiveBank][1]; - SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_STATUS, &val); - PlayerBufferExecCompleted(); + SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_STATUS, &val); + PlayerBufferExecCompleted(); } void sub_803097C(void) { - PlayerBufferExecCompleted(); + PlayerBufferExecCompleted(); } void PlayerHandleDMATransfer(void) { - u32 val1 = gBattleBufferA[gActiveBank][1] - | (gBattleBufferA[gActiveBank][2] << 8) - | (gBattleBufferA[gActiveBank][3] << 16) - | (gBattleBufferA[gActiveBank][4] << 24); - u16 val2 = gBattleBufferA[gActiveBank][5] | (gBattleBufferA[gActiveBank][6] << 8); - - const u8 *src = &gBattleBufferA[gActiveBank][7]; - u8 *dst = (u8 *)val1; - u32 size = val2; - - while (1) - { - if (size <= 0x1000) - { - DmaCopy16(3, src, dst, size); - break; - } - DmaCopy16(3, src, dst, 0x1000); - src += 0x1000; - dst += 0x1000; - size -= 0x1000; - } - PlayerBufferExecCompleted(); + u32 val1 = gBattleBufferA[gActiveBank][1] + | (gBattleBufferA[gActiveBank][2] << 8) + | (gBattleBufferA[gActiveBank][3] << 16) + | (gBattleBufferA[gActiveBank][4] << 24); + u16 val2 = gBattleBufferA[gActiveBank][5] | (gBattleBufferA[gActiveBank][6] << 8); + + const u8 *src = &gBattleBufferA[gActiveBank][7]; + u8 *dst = (u8 *)val1; + u32 size = val2; + + while (1) + { + if (size <= 0x1000) + { + DmaCopy16(3, src, dst, size); + break; + } + DmaCopy16(3, src, dst, 0x1000); + src += 0x1000; + dst += 0x1000; + size -= 0x1000; + } + PlayerBufferExecCompleted(); +} + +void sub_8030A3C(void) +{ + PlayBGM(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8)); + PlayerBufferExecCompleted(); +} + +void sub_8030A6C(void) +{ + PlayerBufferExecCompleted(); +} + +void sub_8030A78(void) +{ + dp01_build_cmdbuf_x21_a_bb(1, 0, 0); + PlayerBufferExecCompleted(); +} + +void sub_8030A8C(void) +{ + dp01_build_cmdbuf_x22_a_three_bytes(1, 0, 0); + PlayerBufferExecCompleted(); +} + +void sub_8030AA0(void) +{ + dp01_build_cmdbuf_x23_aa_0(1, 0); + PlayerBufferExecCompleted(); +} + +void sub_8030AB4(void) +{ + dp01_build_cmdbuf_x24_aa_0(1, 0); + PlayerBufferExecCompleted(); +} + +void sub_8030AC8(void) +{ + gUnknown_020238C8.unk0_0 = 0; + PlayerBufferExecCompleted(); +} + +void sub_8030AE4(void) +{ + gUnknown_020238C8.unk0_0 = gBattleBufferA[gActiveBank][1]; + PlayerBufferExecCompleted(); +} + +void sub_8030B1C(void) +{ + gUnknown_020238C8.unk0_7 = 0; + PlayerBufferExecCompleted(); +} + +void sub_8030B34(void) +{ + gUnknown_020238C8.unk0_7 ^= 1; + PlayerBufferExecCompleted(); +} + +void PlayerHandleHitAnimation(void) +{ + if (gSprites[gObjectBankIDs[gActiveBank]].invisible == TRUE) + { + PlayerBufferExecCompleted(); + } + else + { + gDoingBattleAnim = 1; + gSprites[gObjectBankIDs[gActiveBank]].data1 = 0; + sub_8047858(gActiveBank); + gBattleBankFunc[gActiveBank] = bx_blink_t1; + } +} + +void sub_8030BCC(void) +{ + PlayerBufferExecCompleted(); +} + +void PlayerHandleEffectivenessSound(void) +{ + s8 pan; + + if (GetBankSide(gActiveBank) == 0) + pan = -64; + else + pan = 63; + PlaySE12WithPanning(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8), pan); + PlayerBufferExecCompleted(); +} + +void sub_8030C1C(void) +{ + PlayFanfare(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8)); + PlayerBufferExecCompleted(); +} + +void PlayerHandleFaintingCry(void) +{ + u16 species = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES); + + PlayCry3(species, -25, 5); + PlayerBufferExecCompleted(); +} + +void PlayerHandleIntroSlide(void) +{ + sub_80E43C0(gBattleBufferA[gActiveBank][1]); + gUnknown_02024DE8 |= 1; + PlayerBufferExecCompleted(); +} + +void PlayerHandleTrainerBallThrow(void) +{ + u8 paletteNum; + u8 taskId; + + oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]); + gSprites[gObjectBankIDs[gActiveBank]].data0 = 50; + gSprites[gObjectBankIDs[gActiveBank]].data2 = -40; + gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; + gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34; + gSprites[gObjectBankIDs[gActiveBank]].data5 = gActiveBank; + oamt_set_x3A_32(&gSprites[gObjectBankIDs[gActiveBank]], sub_8030E38); + StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 1); + paletteNum = AllocSpritePalette(0xD6F8); + LoadCompressedPalette(gTrainerBackPicPaletteTable[gSaveBlock2.playerGender].data, 0x100 + paletteNum * 16, 32); + gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = paletteNum; + taskId = CreateTask(task05_08033660, 5); + gTasks[taskId].data[0] = gActiveBank; + if (ewram17810[gActiveBank].unk0_0) + gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0; + ewram17810[4].unk9 |= 1; + gBattleBankFunc[gActiveBank] = nullsub_91; +} + +void sub_8030E38(struct Sprite *sprite) +{ + u8 r4 = sprite->data5; + + FreeSpriteOamMatrix(sprite); + FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum)); + DestroySprite(sprite); + sub_80318FC(&gPlayerParty[gBattlePartyID[r4]], r4); + StartSpriteAnim(&gSprites[gObjectBankIDs[r4]], 0); +} + +void task05_08033660(u8 taskId) +{ + if (gTasks[taskId].data[1] < 31) + { + gTasks[taskId].data[1]++; + } + else + { + u8 savedActiveBank = gActiveBank; + + gActiveBank = gTasks[taskId].data[0]; + if (!IsDoubleBattle() || (gBattleTypeFlags & 0x40)) + { + gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank]; + sub_802F934(gActiveBank, 0); + } + else + { + gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank]; + sub_802F934(gActiveBank, 0); + gActiveBank ^= 2; + gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank]; + sub_80318FC(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + sub_802F934(gActiveBank, 0); + gActiveBank ^= 2; + } + gBattleBankFunc[gActiveBank] = sub_802D500; + gActiveBank = savedActiveBank; + DestroyTask(taskId); + } +} + +void sub_8030FAC(void) +{ + if (gBattleBufferA[gActiveBank][1] != 0 && GetBankSide(gActiveBank) == 0) + { + PlayerBufferExecCompleted(); + } + else + { + ewram17810[gActiveBank].unk0_0 = 1; + gUnknown_02024E68[gActiveBank] = sub_8044804(gActiveBank, (struct BattleInterfaceStruct2 *)&gBattleBufferA[gActiveBank][4], gBattleBufferA[gActiveBank][1], gBattleBufferA[gActiveBank][2]); + ewram17810[gActiveBank].unk5 = 0; + if (gBattleBufferA[gActiveBank][2] != 0) + ewram17810[gActiveBank].unk5 = 0x5D; + gBattleBankFunc[gActiveBank] = sub_8031064; + } +} + +void sub_8031064(void) +{ + if (ewram17810[gActiveBank].unk5++ > 0x5C) + { + ewram17810[gActiveBank].unk5 = 0; + PlayerBufferExecCompleted(); + } +} + +void sub_80310A4(void) +{ + if (ewram17810[gActiveBank].unk0_0) + gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0; + PlayerBufferExecCompleted(); +} + +void sub_80310F0(void) +{ + dp11b_obj_free(gActiveBank, 1); + dp11b_obj_free(gActiveBank, 0); + PlayerBufferExecCompleted(); +} + +void PlayerHandleSpriteInvisibility(void) +{ + if (sub_8078874(gActiveBank)) + { + gSprites[gObjectBankIDs[gActiveBank]].invisible = gBattleBufferA[gActiveBank][1]; + sub_8031F88(gActiveBank); + } + PlayerBufferExecCompleted(); +} + +void PlayerHandleBattleAnimation(void) +{ + if (!mplay_80342A4(gActiveBank)) + { + u8 val2 = gBattleBufferA[gActiveBank][1]; + u16 val = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8); + + if (move_anim_start_t3(gActiveBank, gActiveBank, gActiveBank, val2, val)) + PlayerBufferExecCompleted(); + else + gBattleBankFunc[gActiveBank] = sub_802E460; + } +} + +void PlayerHandleLinkStandbyMsg(void) +{ + switch (gBattleBufferA[gActiveBank][1]) + { + case 0: + b_link_standby_message(); + // fall through + case 1: + dp11b_obj_free(gActiveBank, 1); + dp11b_obj_free(gActiveBank, 0); + break; + case 2: + b_link_standby_message(); + break; + } + PlayerBufferExecCompleted(); } diff --git a/src/battle_811DA74.c b/src/battle_811DA74.c index 743dd2554..f448231be 100644 --- a/src/battle_811DA74.c +++ b/src/battle_811DA74.c @@ -35,15 +35,7 @@ struct UnknownStruct3 u8 ppBonuses; }; -struct UnknownStruct5 -{ - u8 unk0_0:7; - u8 unk0_7:1; -}; - extern u16 gBattleTypeFlags; - -extern struct UnknownStruct5 gUnknown_020238C8; extern u8 gDisplayedStringBattle[]; extern u8 gBattleBufferA[][0x200]; extern u8 gActiveBank; |