diff options
-rw-r--r-- | asm/battle_8.s | 1183 | ||||
-rw-r--r-- | include/battle_ai.h | 1 | ||||
-rw-r--r-- | src/battle_10.c | 3 | ||||
-rw-r--r-- | src/battle_8.c | 510 |
4 files changed, 513 insertions, 1184 deletions
diff --git a/asm/battle_8.s b/asm/battle_8.s index 68852085b..8e5c6be01 100644 --- a/asm/battle_8.s +++ b/asm/battle_8.s @@ -6,1189 +6,6 @@ .text - thumb_func_start OpponentHandleTrainerThrow -OpponentHandleTrainerThrow: @ 8034BFC - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - ldr r3, _08034C18 @ =gTrainerBattleOpponent - ldrh r1, [r3] - movs r0, 0x80 - lsls r0, 3 - cmp r1, r0 - bne _08034C1C - bl GetSecretBaseTrainerPicIndex - b _08034C42 - .align 2, 0 -_08034C18: .4byte gTrainerBattleOpponent -_08034C1C: - ldr r0, _08034C30 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x80 - lsls r0, 1 - ands r0, r1 - cmp r0, 0 - beq _08034C34 - bl get_trainer_class_pic_index - b _08034C42 - .align 2, 0 -_08034C30: .4byte gBattleTypeFlags -_08034C34: - movs r0, 0x80 - lsls r0, 4 - ands r0, r1 - cmp r0, 0 - beq _08034C48 - bl sub_8135FBC -_08034C42: - lsls r0, 24 - lsrs r0, 24 - b _08034C56 -_08034C48: - ldr r2, _08034D88 @ =gTrainers - ldrh r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - ldrb r0, [r0, 0x3] -_08034C56: - mov r9, r0 - ldr r0, _08034D8C @ =gActiveBank - mov r8, r0 - ldrb r1, [r0] - mov r0, r9 - bl sub_8031A6C - mov r1, r8 - ldrb r0, [r1] - bl GetBankIdentity - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - mov r0, r9 - bl GetMonSpriteTemplate_803C5A0 - ldr r5, _08034D90 @ =gUnknown_02024E8C - ldr r1, _08034D94 @ =gTrainerFrontPicCoords - mov r2, r9 - lsls r0, r2, 2 - adds r0, r1 - ldrb r0, [r0] - movs r4, 0x8 - subs r4, r0 - lsls r4, 18 - movs r0, 0xA0 - lsls r0, 14 - adds r4, r0 - asrs r4, 16 - mov r1, r8 - ldrb r0, [r1] - bl sub_8079E90 - adds r3, r0, 0 - lsls r3, 24 - lsrs r3, 24 - adds r0, r5, 0 - movs r1, 0xB0 - adds r2, r4, 0 - bl CreateSprite - ldr r5, _08034D98 @ =gObjectBankIDs - mov r2, r8 - ldrb r1, [r2] - adds r1, r5 - strb r0, [r1] - ldr r4, _08034D9C @ =gSprites - ldrb r0, [r2] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldr r1, _08034DA0 @ =0x0000ff10 - strh r1, [r0, 0x24] - ldrb r0, [r2] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0x2 - strh r1, [r0, 0x2E] - ldr r0, _08034DA4 @ =gTrainerFrontPicPaletteTable - mov r1, r9 - lsls r6, r1, 3 - adds r0, r6, r0 - ldrh r0, [r0, 0x4] - bl IndexOfSpritePaletteTag - mov r2, r8 - ldrb r1, [r2] - adds r1, r5 - ldrb r1, [r1] - lsls r2, r1, 4 - adds r2, r1 - lsls r2, 2 - adds r2, r4 - lsls r0, 4 - ldrb r3, [r2, 0x5] - movs r1, 0xF - ands r1, r3 - orrs r1, r0 - strb r1, [r2, 0x5] - mov r1, r8 - ldrb r0, [r1] - adds r0, r5 - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - ldrh r0, [r1, 0x4] - lsls r0, 22 - lsrs r0, 22 - strh r0, [r1, 0x38] - ldr r0, _08034DA8 @ =gTrainerFrontPicTable - adds r6, r0 - ldrh r0, [r6, 0x6] - bl GetSpriteTileStartByTag - mov r2, r8 - ldrb r1, [r2] - adds r1, r5 - ldrb r2, [r1] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r4 - ldr r2, _08034DAC @ =0x000003ff - ands r2, r0 - ldrh r3, [r1, 0x4] - ldr r0, _08034DB0 @ =0xfffffc00 - ands r0, r3 - orrs r0, r2 - strh r0, [r1, 0x4] - mov r1, r8 - ldrb r0, [r1] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - mov r2, r9 - strh r2, [r0, 0x6] - mov r1, r8 - ldrb r0, [r1] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r4, 0x1C - adds r0, r4 - ldr r1, _08034DB4 @ =sub_80313A0 - str r1, [r0] - ldr r1, _08034DB8 @ =gBattleBankFunc - mov r2, r8 - ldrb r0, [r2] - lsls r0, 2 - adds r0, r1 - ldr r1, _08034DBC @ =sub_8032B4C - str r1, [r0] - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08034D88: .4byte gTrainers -_08034D8C: .4byte gActiveBank -_08034D90: .4byte gUnknown_02024E8C -_08034D94: .4byte gTrainerFrontPicCoords -_08034D98: .4byte gObjectBankIDs -_08034D9C: .4byte gSprites -_08034DA0: .4byte 0x0000ff10 -_08034DA4: .4byte gTrainerFrontPicPaletteTable -_08034DA8: .4byte gTrainerFrontPicTable -_08034DAC: .4byte 0x000003ff -_08034DB0: .4byte 0xfffffc00 -_08034DB4: .4byte sub_80313A0 -_08034DB8: .4byte gBattleBankFunc -_08034DBC: .4byte sub_8032B4C - thumb_func_end OpponentHandleTrainerThrow - - thumb_func_start OpponentHandleTrainerSlide -OpponentHandleTrainerSlide: @ 8034DC0 - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - ldr r3, _08034DDC @ =gTrainerBattleOpponent - ldrh r1, [r3] - movs r0, 0x80 - lsls r0, 3 - cmp r1, r0 - bne _08034DE0 - bl GetSecretBaseTrainerPicIndex - b _08034E06 - .align 2, 0 -_08034DDC: .4byte gTrainerBattleOpponent -_08034DE0: - ldr r0, _08034DF4 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x80 - lsls r0, 1 - ands r0, r1 - cmp r0, 0 - beq _08034DF8 - bl get_trainer_class_pic_index - b _08034E06 - .align 2, 0 -_08034DF4: .4byte gBattleTypeFlags -_08034DF8: - movs r0, 0x80 - lsls r0, 4 - ands r0, r1 - cmp r0, 0 - beq _08034E0C - bl sub_8135FBC -_08034E06: - lsls r0, 24 - lsrs r0, 24 - b _08034E1A -_08034E0C: - ldr r2, _08034F4C @ =gTrainers - ldrh r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - ldrb r0, [r0, 0x3] -_08034E1A: - mov r9, r0 - ldr r0, _08034F50 @ =gActiveBank - mov r8, r0 - ldrb r1, [r0] - mov r0, r9 - bl sub_8031A6C - mov r1, r8 - ldrb r0, [r1] - bl GetBankIdentity - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - mov r0, r9 - bl GetMonSpriteTemplate_803C5A0 - ldr r0, _08034F54 @ =gUnknown_02024E8C - ldr r2, _08034F58 @ =gTrainerFrontPicCoords - mov r3, r9 - lsls r1, r3, 2 - adds r1, r2 - ldrb r1, [r1] - movs r2, 0x8 - subs r2, r1 - lsls r2, 18 - movs r1, 0xA0 - lsls r1, 14 - adds r2, r1 - asrs r2, 16 - movs r1, 0xB0 - movs r3, 0x1E - bl CreateSprite - ldr r5, _08034F5C @ =gObjectBankIDs - mov r2, r8 - ldrb r1, [r2] - adds r1, r5 - strb r0, [r1] - ldr r4, _08034F60 @ =gSprites - ldrb r0, [r2] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0x60 - strh r1, [r0, 0x24] - ldrb r0, [r2] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrh r1, [r0, 0x20] - adds r1, 0x20 - strh r1, [r0, 0x20] - ldrb r0, [r2] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldr r1, _08034F64 @ =0x0000fffe - strh r1, [r0, 0x2E] - ldr r0, _08034F68 @ =gTrainerFrontPicPaletteTable - mov r3, r9 - lsls r6, r3, 3 - adds r0, r6, r0 - ldrh r0, [r0, 0x4] - bl IndexOfSpritePaletteTag - mov r2, r8 - ldrb r1, [r2] - adds r1, r5 - ldrb r1, [r1] - lsls r2, r1, 4 - adds r2, r1 - lsls r2, 2 - adds r2, r4 - lsls r0, 4 - ldrb r3, [r2, 0x5] - movs r1, 0xF - ands r1, r3 - orrs r1, r0 - strb r1, [r2, 0x5] - mov r3, r8 - ldrb r0, [r3] - adds r0, r5 - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - ldrh r0, [r1, 0x4] - lsls r0, 22 - lsrs r0, 22 - strh r0, [r1, 0x38] - ldr r0, _08034F6C @ =gTrainerFrontPicTable - adds r6, r0 - ldrh r0, [r6, 0x6] - bl GetSpriteTileStartByTag - mov r2, r8 - ldrb r1, [r2] - adds r1, r5 - ldrb r2, [r1] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r4 - ldr r2, _08034F70 @ =0x000003ff - ands r2, r0 - ldrh r3, [r1, 0x4] - ldr r0, _08034F74 @ =0xfffffc00 - ands r0, r3 - orrs r0, r2 - strh r0, [r1, 0x4] - mov r3, r8 - ldrb r0, [r3] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - mov r1, r9 - strh r1, [r0, 0x6] - ldrb r0, [r3] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r4, 0x1C - adds r0, r4 - ldr r1, _08034F78 @ =sub_80313A0 - str r1, [r0] - ldr r1, _08034F7C @ =gBattleBankFunc - ldrb r0, [r3] - lsls r0, 2 - adds r0, r1 - ldr r1, _08034F80 @ =sub_8032B84 - str r1, [r0] - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08034F4C: .4byte gTrainers -_08034F50: .4byte gActiveBank -_08034F54: .4byte gUnknown_02024E8C -_08034F58: .4byte gTrainerFrontPicCoords -_08034F5C: .4byte gObjectBankIDs -_08034F60: .4byte gSprites -_08034F64: .4byte 0x0000fffe -_08034F68: .4byte gTrainerFrontPicPaletteTable -_08034F6C: .4byte gTrainerFrontPicTable -_08034F70: .4byte 0x000003ff -_08034F74: .4byte 0xfffffc00 -_08034F78: .4byte sub_80313A0 -_08034F7C: .4byte gBattleBankFunc -_08034F80: .4byte sub_8032B84 - thumb_func_end OpponentHandleTrainerSlide - - thumb_func_start OpponentHandleTrainerSlideBack -OpponentHandleTrainerSlideBack: @ 8034F84 - push {r4-r6,lr} - ldr r6, _08035014 @ =gObjectBankIDs - ldr r4, _08035018 @ =gActiveBank - ldrb r0, [r4] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r5, _0803501C @ =gSprites - adds r0, r5 - bl oamt_add_pos2_onto_pos1 - ldrb r0, [r4] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - movs r1, 0x23 - strh r1, [r0, 0x2E] - ldrb r0, [r4] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - movs r1, 0x8C - lsls r1, 1 - strh r1, [r0, 0x32] - ldrb r0, [r4] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldrh r1, [r0, 0x22] - strh r1, [r0, 0x36] - ldrb r0, [r4] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r5, 0 - adds r1, 0x1C - adds r0, r1 - ldr r1, _08035020 @ =sub_8078B34 - str r1, [r0] - ldrb r0, [r4] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldr r1, _08035024 @ =SpriteCallbackDummy - bl oamt_set_x3A_32 - ldr r1, _08035028 @ =gBattleBankFunc - ldrb r0, [r4] - lsls r0, 2 - adds r0, r1 - ldr r1, _0803502C @ =sub_8032BBC - str r1, [r0] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08035014: .4byte gObjectBankIDs -_08035018: .4byte gActiveBank -_0803501C: .4byte gSprites -_08035020: .4byte sub_8078B34 -_08035024: .4byte SpriteCallbackDummy -_08035028: .4byte gBattleBankFunc -_0803502C: .4byte sub_8032BBC - thumb_func_end OpponentHandleTrainerSlideBack - - thumb_func_start sub_8035030 -sub_8035030: @ 8035030 - push {r4,r5,lr} - ldr r5, _08035074 @ =gActiveBank - ldrb r2, [r5] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - ldr r4, _08035078 @ =0x02017810 - adds r3, r0, r4 - ldrb r0, [r3, 0x4] - cmp r0, 0 - bne _0803507C - lsls r0, r2, 2 - adds r1, r4, 0 - subs r1, 0x10 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _08035062 - adds r0, r2, 0 - adds r1, r2, 0 - movs r3, 0x5 - bl move_anim_start_t4 -_08035062: - ldrb r0, [r5] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - ldrb r0, [r1, 0x4] - adds r0, 0x1 - strb r0, [r1, 0x4] - b _080350B8 - .align 2, 0 -_08035074: .4byte gActiveBank -_08035078: .4byte 0x02017810 -_0803507C: - ldrb r1, [r3] - movs r0, 0x40 - ands r0, r1 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - bne _080350B8 - strb r0, [r3, 0x4] - movs r0, 0x10 - movs r1, 0x3F - bl PlaySE12WithPanning - ldr r2, _080350C0 @ =gSprites - ldr r1, _080350C4 @ =gObjectBankIDs - 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, _080350C8 @ =sub_8010384 - str r1, [r0] - ldr r1, _080350CC @ =gBattleBankFunc - ldrb r0, [r5] - lsls r0, 2 - adds r0, r1 - ldr r1, _080350D0 @ =sub_803311C - str r1, [r0] -_080350B8: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080350C0: .4byte gSprites -_080350C4: .4byte gObjectBankIDs -_080350C8: .4byte sub_8010384 -_080350CC: .4byte gBattleBankFunc -_080350D0: .4byte sub_803311C - thumb_func_end sub_8035030 - - thumb_func_start sub_80350D4 -sub_80350D4: @ 80350D4 - push {lr} - bl OpponentBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_80350D4 - - thumb_func_start sub_80350E0 -sub_80350E0: @ 80350E0 - push {lr} - bl OpponentBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_80350E0 - - thumb_func_start OpponentHandleBallThrow -OpponentHandleBallThrow: @ 80350EC - push {lr} - bl OpponentBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end OpponentHandleBallThrow - - thumb_func_start OpponentHandlePause -OpponentHandlePause: @ 80350F8 - push {lr} - bl OpponentBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end OpponentHandlePause - - thumb_func_start OpponentHandleMoveAnimation -OpponentHandleMoveAnimation: @ 8035104 - push {r4-r6,lr} - ldr r6, _080351E8 @ =gActiveBank - ldrb r0, [r6] - bl mplay_80342A4 - lsls r0, 24 - cmp r0, 0 - beq _08035116 - b _08035226 -_08035116: - ldr r0, _080351EC @ =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, _080351F0 @ =gUnknown_0202F7C4 - mov r1, r12 - adds r1, 0x3 - adds r2, r1 - ldrb r1, [r2] - strb r1, [r5] - ldr r4, _080351F4 @ =gMovePowerMoveAnim - 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, _080351F8 @ =gMoveDmgMoveAnim - 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, _080351FC @ =gHappinessMoveAnim - ldrb r1, [r6] - lsls r1, 9 - mov r2, r12 - adds r2, 0xA - adds r1, r2 - ldrb r1, [r1] - strb r1, [r3] - ldr r4, _08035200 @ =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, _08035204 @ =gDisableStructMoveAnim - ldrb r2, [r6] - lsls r2, 9 - mov r1, r12 - adds r1, 0x10 - adds r2, r1 - str r2, [r3] - ldr r3, _08035208 @ =gPID_perBank - ldrb r1, [r6] - lsls r1, 2 - adds r1, r3 - ldr r2, [r2] - str r2, [r1] - ldrb r1, [r5] - bl sub_8031720 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0 - beq _0803520C - bl OpponentBufferExecCompleted - b _08035226 - .align 2, 0 -_080351E8: .4byte gActiveBank -_080351EC: .4byte gBattleBufferA -_080351F0: .4byte gUnknown_0202F7C4 -_080351F4: .4byte gMovePowerMoveAnim -_080351F8: .4byte gMoveDmgMoveAnim -_080351FC: .4byte gHappinessMoveAnim -_08035200: .4byte gWeatherMoveAnim -_08035204: .4byte gDisableStructMoveAnim -_08035208: .4byte gPID_perBank -_0803520C: - ldrb r1, [r6] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - ldr r1, _0803522C @ =0x02017810 - adds r0, r1 - strb r2, [r0, 0x4] - ldr r1, _08035230 @ =gBattleBankFunc - ldrb r0, [r6] - lsls r0, 2 - adds r0, r1 - ldr r1, _08035234 @ =sub_8035238 - str r1, [r0] -_08035226: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0803522C: .4byte 0x02017810 -_08035230: .4byte gBattleBankFunc -_08035234: .4byte sub_8035238 - thumb_func_end OpponentHandleMoveAnimation - - thumb_func_start sub_8035238 -sub_8035238: @ 8035238 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - ldr r2, _0803527C @ =gBattleBufferA - ldr r5, _08035280 @ =gActiveBank - ldrb r3, [r5] - lsls r1, r3, 9 - adds r0, r2, 0x1 - mov r9, r0 - adds r0, r1, r0 - ldrb r4, [r0] - adds r6, r2, 0x2 - mov r8, r6 - adds r0, r1, r6 - ldrb r0, [r0] - lsls r0, 8 - orrs r4, r0 - adds r2, 0xB - adds r1, r2 - ldrb r7, [r1] - lsls r0, r3, 1 - adds r0, r3 - lsls r0, 2 - ldr r6, _08035284 @ =0x02017810 - adds r0, r6 - ldrb r2, [r0, 0x4] - cmp r2, 0x1 - beq _080352C6 - cmp r2, 0x1 - bgt _08035288 - cmp r2, 0 - beq _08035292 - b _08035390 - .align 2, 0 -_0803527C: .4byte gBattleBufferA -_08035280: .4byte gActiveBank -_08035284: .4byte 0x02017810 -_08035288: - cmp r2, 0x2 - beq _080352EC - cmp r2, 0x3 - beq _08035358 - b _08035390 -_08035292: - lsls r1, r3, 2 - adds r0, r6, 0 - subs r0, 0x10 - adds r1, r0 - ldrb r2, [r1] - movs r0, 0xC - ands r0, r2 - cmp r0, 0x4 - bne _080352B6 - movs r0, 0x8 - orrs r0, r2 - strb r0, [r1] - ldrb r2, [r5] - adds r0, r2, 0 - adds r1, r2, 0 - movs r3, 0x5 - bl move_anim_start_t4 -_080352B6: - ldrb r0, [r5] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r1, r6 - movs r0, 0x1 - strb r0, [r1, 0x4] - b _08035390 -_080352C6: - ldrb r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - bne _08035390 - movs r0, 0 - bl sub_80326EC - adds r0, r4, 0 - bl ExecuteMoveAnim - ldrb r0, [r5] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r1, r6 - movs r0, 0x2 - strb r0, [r1, 0x4] - b _08035390 -_080352EC: - ldr r0, _08035348 @ =gAnimScriptCallback - ldr r0, [r0] - bl _call_via_r0 - ldr r0, _0803534C @ =gAnimScriptActive - ldrb r0, [r0] - cmp r0, 0 - bne _08035390 - movs r0, 0x1 - bl sub_80326EC - ldrb r2, [r5] - lsls r0, r2, 2 - adds r4, r6, 0 - subs r4, 0x10 - adds r0, r4 - ldrb r1, [r0] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _08035334 - cmp r7, 0x1 - bhi _08035334 - adds r0, r2, 0 - adds r1, r2, 0 - movs r3, 0x6 - bl move_anim_start_t4 - ldrb r0, [r5] - lsls r0, 2 - adds r0, r4 - ldrb r2, [r0] - movs r1, 0x9 - negs r1, r1 - ands r1, r2 - strb r1, [r0] -_08035334: - ldr r0, _08035350 @ =gActiveBank - ldrb r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - ldr r1, _08035354 @ =0x02017810 - adds r0, r1 - movs r1, 0x3 - strb r1, [r0, 0x4] - b _08035390 - .align 2, 0 -_08035348: .4byte gAnimScriptCallback -_0803534C: .4byte gAnimScriptActive -_08035350: .4byte gActiveBank -_08035354: .4byte 0x02017810 -_08035358: - ldrb r1, [r0] - movs r0, 0x40 - ands r0, r1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - bne _08035390 - bl sub_8031F24 - ldrb r0, [r5] - lsls r2, r0, 9 - mov r3, r9 - adds r1, r2, r3 - ldrb r1, [r1] - add r2, r8 - ldrb r2, [r2] - lsls r2, 8 - orrs r1, r2 - bl sub_80324BC - ldrb r1, [r5] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - strb r4, [r0, 0x4] - bl OpponentBufferExecCompleted -_08035390: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8035238 - - thumb_func_start OpponentHandlePrintString -OpponentHandlePrintString: @ 803539C - push {r4,lr} - sub sp, 0x4 - ldr r0, _080353E0 @ =gUnknown_030042A4 - movs r1, 0 - strh r1, [r0] - ldr r0, _080353E4 @ =gUnknown_030042A0 - strh r1, [r0] - ldr r4, _080353E8 @ =gActiveBank - ldrb r0, [r4] - lsls r0, 9 - ldr r1, _080353EC @ =gUnknown_02023A62 - adds r0, r1 - ldrh r0, [r0] - bl BufferStringBattle - ldr r0, _080353F0 @ =gUnknown_03004210 - ldr r1, _080353F4 @ =gDisplayedStringBattle - movs r2, 0xF - str r2, [sp] - movs r2, 0x90 - movs r3, 0x2 - bl sub_8002EB0 - ldr r1, _080353F8 @ =gBattleBankFunc - ldrb r0, [r4] - lsls r0, 2 - adds r0, r1 - ldr r1, _080353FC @ =sub_80331D0 - str r1, [r0] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080353E0: .4byte gUnknown_030042A4 -_080353E4: .4byte gUnknown_030042A0 -_080353E8: .4byte gActiveBank -_080353EC: .4byte gUnknown_02023A62 -_080353F0: .4byte gUnknown_03004210 -_080353F4: .4byte gDisplayedStringBattle -_080353F8: .4byte gBattleBankFunc -_080353FC: .4byte sub_80331D0 - thumb_func_end OpponentHandlePrintString - - thumb_func_start OpponentHandlePrintStringPlayerOnly -OpponentHandlePrintStringPlayerOnly: @ 8035400 - push {lr} - bl OpponentBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end OpponentHandlePrintStringPlayerOnly - - thumb_func_start sub_803540C -sub_803540C: @ 803540C - push {lr} - bl sub_8036B0C - bl OpponentBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_803540C - - thumb_func_start sub_803541C -sub_803541C: @ 803541C - push {lr} - bl OpponentBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_803541C - - thumb_func_start sub_8035428 -sub_8035428: @ 8035428 - push {r4-r6,lr} - ldr r6, _0803545C @ =gActiveBank - ldrb r0, [r6] - lsls r0, 9 - ldr r1, _08035460 @ =gUnknown_02023A64 - adds r5, r0, r1 - ldr r0, _08035464 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x93 - lsls r0, 3 - ands r0, r1 - cmp r0, 0 - beq _080354F8 - bl BattleAI_SetupAIData - bl BattleAI_GetAIActionToUse - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x4 - beq _08035468 - cmp r4, 0x5 - bne _08035474 - movs r0, 0x1 - movs r1, 0x4 - b _0803546C - .align 2, 0 -_0803545C: .4byte gActiveBank -_08035460: .4byte gUnknown_02023A64 -_08035464: .4byte gBattleTypeFlags -_08035468: - movs r0, 0x1 - movs r1, 0x3 -_0803546C: - movs r2, 0 - bl dp01_build_cmdbuf_x21_a_bb - b _080354E0 -_08035474: - ldr r3, _080354E8 @ =gBattleMoves - lsls r0, r4, 1 - adds r2, r5, r0 - ldrh r1, [r2] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - ldrb r1, [r0, 0x6] - movs r0, 0x12 - ands r0, r1 - cmp r0, 0 - beq _08035494 - ldr r1, _080354EC @ =gBankTarget - ldrb r0, [r6] - strb r0, [r1] -_08035494: - ldrh r1, [r2] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - ldrb r1, [r0, 0x6] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _080354CE - movs r0, 0 - bl GetBankByPlayerAI - ldr r5, _080354EC @ =gBankTarget - strb r0, [r5] - ldr r0, _080354F0 @ =gAbsentBankFlags - ldrb r1, [r0] - ldr r2, _080354F4 @ =gBitTable - ldrb r0, [r5] - lsls r0, 2 - adds r0, r2 - ldr r0, [r0] - ands r1, r0 - cmp r1, 0 - beq _080354CE - movs r0, 0x2 - bl GetBankByPlayerAI - strb r0, [r5] -_080354CE: - ldr r0, _080354EC @ =gBankTarget - ldrb r0, [r0] - lsls r0, 8 - orrs r4, r0 - movs r0, 0x1 - movs r1, 0xA - adds r2, r4, 0 - bl dp01_build_cmdbuf_x21_a_bb -_080354E0: - bl OpponentBufferExecCompleted - b _0803558A - .align 2, 0 -_080354E8: .4byte gBattleMoves -_080354EC: .4byte gBankTarget -_080354F0: .4byte gAbsentBankFlags -_080354F4: .4byte gBitTable -_080354F8: - movs r6, 0x3 -_080354FA: - bl Random - adds r4, r0, 0 - ands r4, r6 - lsls r0, r4, 1 - adds r0, r5, r0 - ldrh r2, [r0] - cmp r2, 0 - beq _080354FA - ldr r1, _08035534 @ =gBattleMoves - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - adds r0, r1 - ldrb r1, [r0, 0x6] - movs r0, 0x12 - ands r0, r1 - cmp r0, 0 - beq _0803553C - ldr r0, _08035538 @ =gActiveBank - ldrb r0, [r0] - lsls r0, 8 - orrs r4, r0 - movs r0, 0x1 - movs r1, 0xA - adds r2, r4, 0 - bl dp01_build_cmdbuf_x21_a_bb - b _08035586 - .align 2, 0 -_08035534: .4byte gBattleMoves -_08035538: .4byte gActiveBank -_0803553C: - ldr r0, _0803556C @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08035570 - bl Random - movs r1, 0x2 - ands r1, r0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r1, 0 - bl GetBankByPlayerAI - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 16 - orrs r2, r4 - movs r0, 0x1 - movs r1, 0xA - bl dp01_build_cmdbuf_x21_a_bb - b _08035586 - .align 2, 0 -_0803556C: .4byte gBattleTypeFlags -_08035570: - movs r0, 0 - bl GetBankByPlayerAI - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 16 - orrs r2, r4 - movs r0, 0x1 - movs r1, 0xA - bl dp01_build_cmdbuf_x21_a_bb -_08035586: - bl OpponentBufferExecCompleted -_0803558A: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8035428 - thumb_func_start sub_8035590 sub_8035590: @ 8035590 push {lr} diff --git a/include/battle_ai.h b/include/battle_ai.h index 028da2c27..2922da0b3 100644 --- a/include/battle_ai.h +++ b/include/battle_ai.h @@ -23,6 +23,7 @@ enum // battle_ai void BattleAI_SetupAIData(void); +u8 BattleAI_GetAIActionToUse(void); void BattleAI_DoAIProcessing(void); void sub_810745C(void); void AIStackPushVar(u8 *); diff --git a/src/battle_10.c b/src/battle_10.c index 34e4f75b1..0237bab4b 100644 --- a/src/battle_10.c +++ b/src/battle_10.c @@ -72,7 +72,7 @@ extern void sub_80375B4(void); extern void sub_8010384(struct Sprite *); extern void sub_8037B78(void); extern u8 sub_8031720(); -extern u8 mplay_80342A4(); +extern bool8 mplay_80342A4(u8); extern void ExecuteMoveAnim(); extern void sub_80326EC(); extern void sub_8031F24(void); @@ -887,6 +887,7 @@ void sub_8039A30(void) gDisableStructMoveAnim = (u32 *)&gBattleBufferA[gActiveBank][16]; gPID_perBank[gActiveBank] = *gDisableStructMoveAnim; + // Dead code. sub_8031720 always returns 0. if (sub_8031720(r0, gUnknown_0202F7C4) != 0) { dp01_tbl4_exec_completed(); diff --git a/src/battle_8.c b/src/battle_8.c index 0355af6e2..3e499a289 100644 --- a/src/battle_8.c +++ b/src/battle_8.c @@ -1,7 +1,15 @@ #include "global.h" #include "battle.h" +#include "battle_ai.h" +#include "data2.h" +#include "graphics.h" +#include "pokemon.h" +#include "rng.h" #include "rom3.h" +#include "songs.h" +#include "sound.h" #include "string_util.h" +#include "text.h" #include "util.h" struct UnknownStruct3 @@ -20,6 +28,23 @@ extern struct SpriteTemplate gUnknown_02024E8C; extern void (*gBattleBankFunc[])(void); extern u8 gUnknown_0300434C[]; extern u8 gHealthboxIDs[]; +extern u16 gBattleTypeFlags; +extern u16 gTrainerBattleOpponent; +extern u32 *gDisableStructMoveAnim; +extern u32 gMoveDmgMoveAnim; +extern u16 gMovePowerMoveAnim; +extern u8 gHappinessMoveAnim; +extern u16 gWeatherMoveAnim; +extern u32 gPID_perBank[]; +extern u8 gUnknown_0202F7C4; +extern u8 gAnimScriptActive; +extern void (*gAnimScriptCallback)(void); +extern struct Window gUnknown_03004210; +extern u16 gUnknown_030042A0; +extern u16 gUnknown_030042A4; +extern u8 gDisplayedStringBattle[]; +extern u8 gBankTarget; +extern u8 gAbsentBankFlags; extern u8 sub_8077ABC(); extern u8 sub_8077F68(); @@ -34,11 +59,34 @@ extern u8 sub_8046400(); extern void sub_8032A08(); extern void sub_8043DB0(); extern void sub_8033160(void); +extern u8 sub_8135FBC(void); +extern u8 get_trainer_class_pic_index(void); +extern void sub_80313A0(struct Sprite *); +extern void sub_8032B4C(void); +extern void sub_8031A6C(u16, u8); +extern void sub_8032B84(void); +extern void sub_8078B34(struct Sprite *); +extern void sub_8032BBC(void); +extern void oamt_add_pos2_onto_pos1(); +extern void oamt_set_x3A_32(); +extern void sub_803311C(void); +extern void sub_8010384(struct Sprite *); +extern bool8 mplay_80342A4(u8); +extern u8 sub_8031720(); +extern void ExecuteMoveAnim(); +extern void sub_80326EC(); +extern void sub_8031F24(void); +extern void sub_80324BC(); +extern void BufferStringBattle(); +extern void sub_80331D0(void); +extern void sub_8036B0C(void); +extern u8 GetBankByPlayerAI(u8); u32 sub_8033598(u8, u8 *); void sub_8033E24(u8); void sub_803495C(u8, u8); void sub_8034B74(void); +void sub_8035238(void); void OpponentBufferExecCompleted(void); void OpponentHandleGetAttributes(void) @@ -722,3 +770,465 @@ void sub_8034B74(void) break; } } + +void OpponentHandleTrainerThrow(void) +{ + u32 trainerPicIndex; + + if (gTrainerBattleOpponent == 0x400) + trainerPicIndex = GetSecretBaseTrainerPicIndex(); + else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) + trainerPicIndex = get_trainer_class_pic_index(); + else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER) + trainerPicIndex = sub_8135FBC(); + else + trainerPicIndex = gTrainers[gTrainerBattleOpponent].trainerPic; + + sub_8031A6C(trainerPicIndex, gActiveBank); + GetMonSpriteTemplate_803C5A0(trainerPicIndex, GetBankIdentity(gActiveBank)); + gObjectBankIDs[gActiveBank] = CreateSprite( + &gUnknown_02024E8C, + 0xB0, + 40 + 4 * (8 - gTrainerFrontPicCoords[trainerPicIndex].coords), + sub_8079E90(gActiveBank)); + gSprites[gObjectBankIDs[gActiveBank]].pos2.x = -240; + gSprites[gObjectBankIDs[gActiveBank]].data0 = 2; + gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicIndex].tag); + gSprites[gObjectBankIDs[gActiveBank]].data5 = gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum; + gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum = GetSpriteTileStartByTag(gTrainerFrontPicTable[trainerPicIndex].tag); + gSprites[gObjectBankIDs[gActiveBank]].oam.affineParam = trainerPicIndex; + gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0; + gBattleBankFunc[gActiveBank] = sub_8032B4C; +} + +void OpponentHandleTrainerSlide(void) +{ + u32 trainerPicIndex; + + if (gTrainerBattleOpponent == 0x400) + trainerPicIndex = GetSecretBaseTrainerPicIndex(); + else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) + trainerPicIndex = get_trainer_class_pic_index(); + else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER) + trainerPicIndex = sub_8135FBC(); + else + trainerPicIndex = gTrainers[gTrainerBattleOpponent].trainerPic; + + sub_8031A6C(trainerPicIndex, gActiveBank); + GetMonSpriteTemplate_803C5A0(trainerPicIndex, GetBankIdentity(gActiveBank)); + gObjectBankIDs[gActiveBank] = CreateSprite( + &gUnknown_02024E8C, + 0xB0, + 40 + 4 * (8 - gTrainerFrontPicCoords[trainerPicIndex].coords), + 0x1E); + gSprites[gObjectBankIDs[gActiveBank]].pos2.x = 96; + gSprites[gObjectBankIDs[gActiveBank]].pos1.x += 32; + gSprites[gObjectBankIDs[gActiveBank]].data0 = -2; + gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicIndex].tag); + gSprites[gObjectBankIDs[gActiveBank]].data5 = gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum; + gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum = GetSpriteTileStartByTag(gTrainerFrontPicTable[trainerPicIndex].tag); + gSprites[gObjectBankIDs[gActiveBank]].oam.affineParam = trainerPicIndex; + gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0; + gBattleBankFunc[gActiveBank] = sub_8032B84; +} + +void OpponentHandleTrainerSlideBack(void) +{ + oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]); + gSprites[gObjectBankIDs[gActiveBank]].data0 = 35; + gSprites[gObjectBankIDs[gActiveBank]].data2 = 280; + gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; + gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34; + oamt_set_x3A_32(&gSprites[gObjectBankIDs[gActiveBank]], SpriteCallbackDummy); + gBattleBankFunc[gActiveBank] = sub_8032BBC; +} + +void sub_8035030(void) +{ + if (ewram17810[gActiveBank].unk4 == 0) + { + if (ewram17800[gActiveBank].unk0_2) + move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); + ewram17810[gActiveBank].unk4++; + } + else if (!ewram17810[gActiveBank].unk0_6) + { + ewram17810[gActiveBank].unk4 = 0; + PlaySE12WithPanning(SE_POKE_DEAD, 63); + gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8010384; + gBattleBankFunc[gActiveBank] = sub_803311C; + } +} + +void sub_80350D4(void) +{ + OpponentBufferExecCompleted(); +} + +void sub_80350E0(void) +{ + OpponentBufferExecCompleted(); +} + +void OpponentHandleBallThrow(void) +{ + OpponentBufferExecCompleted(); +} + +void OpponentHandlePause(void) +{ + OpponentBufferExecCompleted(); +} + +void OpponentHandleMoveAnimation(void) +{ + if (!mplay_80342A4(gActiveBank)) + { + u32 r0 = gBattleBufferA[gActiveBank][1] + | (gBattleBufferA[gActiveBank][2] << 8); + + gUnknown_0202F7C4 = gBattleBufferA[gActiveBank][3]; + gMovePowerMoveAnim = gBattleBufferA[gActiveBank][4] + | (gBattleBufferA[gActiveBank][5] << 8); + gMoveDmgMoveAnim = gBattleBufferA[gActiveBank][6] + | (gBattleBufferA[gActiveBank][7] << 8) + | (gBattleBufferA[gActiveBank][8] << 16) + | (gBattleBufferA[gActiveBank][9] << 24); + gHappinessMoveAnim = gBattleBufferA[gActiveBank][10]; + gWeatherMoveAnim = gBattleBufferA[gActiveBank][12] + | (gBattleBufferA[gActiveBank][13] << 8); + gDisableStructMoveAnim = (u32 *)&gBattleBufferA[gActiveBank][16]; + gPID_perBank[gActiveBank] = *gDisableStructMoveAnim; + + // Dead code. sub_8031720 always returns 0. + if (sub_8031720(r0, gUnknown_0202F7C4) != 0) + { + OpponentBufferExecCompleted(); + } + else + { + ewram17810[gActiveBank].unk4 = 0; + gBattleBankFunc[gActiveBank] = sub_8035238; + } + } +} + +void sub_8035238(void) +{ + u16 r4 = gBattleBufferA[gActiveBank][1] + | (gBattleBufferA[gActiveBank][2] << 8); + u8 r7 = gBattleBufferA[gActiveBank][11]; + + switch (ewram17810[gActiveBank].unk4) + { + case 0: + if (ewram17800[gActiveBank].unk0_2 && !ewram17800[gActiveBank].unk0_3) + { + ewram17800[gActiveBank].unk0_3 = 1; + move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); + } + ewram17810[gActiveBank].unk4 = 1; + break; + case 1: + if (!ewram17810[gActiveBank].unk0_6) + { + sub_80326EC(0); + ExecuteMoveAnim(r4); + ewram17810[gActiveBank].unk4 = 2; + } + break; + case 2: + gAnimScriptCallback(); + if (!gAnimScriptActive) + { + sub_80326EC(1); + if ((ewram17800[gActiveBank].unk0_2) && r7 <= 1) + { + move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6); + ewram17800[gActiveBank].unk0_3 = 0; + } + ewram17810[gActiveBank].unk4 = 3; + } + break; + case 3: + if (!ewram17810[gActiveBank].unk0_6) + { + sub_8031F24(); + sub_80324BC( + gActiveBank, + gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8)); + ewram17810[gActiveBank].unk4 = 0; + OpponentBufferExecCompleted(); + } + break; + } +} + +void OpponentHandlePrintString(void) +{ + gUnknown_030042A4 = 0; + gUnknown_030042A0 = 0; + BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBank][2]); + sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + gBattleBankFunc[gActiveBank] = sub_80331D0; +} + +void OpponentHandlePrintStringPlayerOnly(void) +{ + OpponentBufferExecCompleted(); +} + +void sub_803540C(void) +{ + sub_8036B0C(); + OpponentBufferExecCompleted(); +} + +void sub_803541C(void) +{ + OpponentBufferExecCompleted(); +} + +#ifdef NONMATCHING +void sub_8035428(void) +{ + u16 r4; + // Needed to match closer + struct {u16 moves[4];} *r5 = (void *)&gBattleBufferA[gActiveBank][4]; + + if (gBattleTypeFlags & 0x498) + { + BattleAI_SetupAIData(); + r4 = BattleAI_GetAIActionToUse(); + switch (r4) + { + case 5: + dp01_build_cmdbuf_x21_a_bb(1, 4, 0); + break; + case 4: + dp01_build_cmdbuf_x21_a_bb(1, 3, 0); + break; + default: + if (gBattleMoves[r5->moves[r4]].target & 0x12) + gBankTarget = gActiveBank; + if (gBattleMoves[r5->moves[r4]].target & 8) + { + gBankTarget = GetBankByPlayerAI(0); + if (gAbsentBankFlags & gBitTable[gBankTarget]) + gBankTarget = GetBankByPlayerAI(2); + } + r4 |= gBankTarget << 8; + dp01_build_cmdbuf_x21_a_bb(1, 10, r4); + break; + } + OpponentBufferExecCompleted(); + } + else + { + u16 r2; + + do + { + // Can't for the life of me get this to match. + r4 = Random() % 4; + r2 = r5->moves[r4]; + } while (r2 == 0); + + if (gBattleMoves[r2].target & 0x12) + { + r4 |= gActiveBank << 8; + dp01_build_cmdbuf_x21_a_bb(1, 10, r4); + } + else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { + u16 r2 = GetBankByPlayerAI(Random() & 2) << 8; + + dp01_build_cmdbuf_x21_a_bb(1, 10, r4 | r2); + } + else + { + u16 r2 = GetBankByPlayerAI(0) << 8; + + dp01_build_cmdbuf_x21_a_bb(1, 10, r4 | r2); + } + OpponentBufferExecCompleted(); + } +} +#else +__attribute__((naked)) +void sub_8035428(void) +{ + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + ldr r6, _0803545C @ =gActiveBank\n\ + ldrb r0, [r6]\n\ + lsls r0, 9\n\ + ldr r1, _08035460 @ =gUnknown_02023A64\n\ + adds r5, r0, r1\n\ + ldr r0, _08035464 @ =gBattleTypeFlags\n\ + ldrh r1, [r0]\n\ + movs r0, 0x93\n\ + lsls r0, 3\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080354F8\n\ + bl BattleAI_SetupAIData\n\ + bl BattleAI_GetAIActionToUse\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + cmp r4, 0x4\n\ + beq _08035468\n\ + cmp r4, 0x5\n\ + bne _08035474\n\ + movs r0, 0x1\n\ + movs r1, 0x4\n\ + b _0803546C\n\ + .align 2, 0\n\ +_0803545C: .4byte gActiveBank\n\ +_08035460: .4byte gUnknown_02023A64\n\ +_08035464: .4byte gBattleTypeFlags\n\ +_08035468:\n\ + movs r0, 0x1\n\ + movs r1, 0x3\n\ +_0803546C:\n\ + movs r2, 0\n\ + bl dp01_build_cmdbuf_x21_a_bb\n\ + b _080354E0\n\ +_08035474:\n\ + ldr r3, _080354E8 @ =gBattleMoves\n\ + lsls r0, r4, 1\n\ + adds r2, r5, r0\n\ + ldrh r1, [r2]\n\ + lsls r0, r1, 1\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r3\n\ + ldrb r1, [r0, 0x6]\n\ + movs r0, 0x12\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08035494\n\ + ldr r1, _080354EC @ =gBankTarget\n\ + ldrb r0, [r6]\n\ + strb r0, [r1]\n\ +_08035494:\n\ + ldrh r1, [r2]\n\ + lsls r0, r1, 1\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r3\n\ + ldrb r1, [r0, 0x6]\n\ + movs r0, 0x8\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080354CE\n\ + movs r0, 0\n\ + bl GetBankByPlayerAI\n\ + ldr r5, _080354EC @ =gBankTarget\n\ + strb r0, [r5]\n\ + ldr r0, _080354F0 @ =gAbsentBankFlags\n\ + ldrb r1, [r0]\n\ + ldr r2, _080354F4 @ =gBitTable\n\ + ldrb r0, [r5]\n\ + lsls r0, 2\n\ + adds r0, r2\n\ + ldr r0, [r0]\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + beq _080354CE\n\ + movs r0, 0x2\n\ + bl GetBankByPlayerAI\n\ + strb r0, [r5]\n\ +_080354CE:\n\ + ldr r0, _080354EC @ =gBankTarget\n\ + ldrb r0, [r0]\n\ + lsls r0, 8\n\ + orrs r4, r0\n\ + movs r0, 0x1\n\ + movs r1, 0xA\n\ + adds r2, r4, 0\n\ + bl dp01_build_cmdbuf_x21_a_bb\n\ +_080354E0:\n\ + bl OpponentBufferExecCompleted\n\ + b _0803558A\n\ + .align 2, 0\n\ +_080354E8: .4byte gBattleMoves\n\ +_080354EC: .4byte gBankTarget\n\ +_080354F0: .4byte gAbsentBankFlags\n\ +_080354F4: .4byte gBitTable\n\ +_080354F8:\n\ + movs r6, 0x3\n\ +_080354FA:\n\ + bl Random\n\ + adds r4, r0, 0\n\ + ands r4, r6\n\ + lsls r0, r4, 1\n\ + adds r0, r5, r0\n\ + ldrh r2, [r0]\n\ + cmp r2, 0\n\ + beq _080354FA\n\ + ldr r1, _08035534 @ =gBattleMoves\n\ + lsls r0, r2, 1\n\ + adds r0, r2\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldrb r1, [r0, 0x6]\n\ + movs r0, 0x12\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0803553C\n\ + ldr r0, _08035538 @ =gActiveBank\n\ + ldrb r0, [r0]\n\ + lsls r0, 8\n\ + orrs r4, r0\n\ + movs r0, 0x1\n\ + movs r1, 0xA\n\ + adds r2, r4, 0\n\ + bl dp01_build_cmdbuf_x21_a_bb\n\ + b _08035586\n\ + .align 2, 0\n\ +_08035534: .4byte gBattleMoves\n\ +_08035538: .4byte gActiveBank\n\ +_0803553C:\n\ + ldr r0, _0803556C @ =gBattleTypeFlags\n\ + ldrh r1, [r0]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08035570\n\ + bl Random\n\ + movs r1, 0x2\n\ + ands r1, r0\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + adds r0, r1, 0\n\ + bl GetBankByPlayerAI\n\ + adds r2, r0, 0\n\ + lsls r2, 24\n\ + lsrs r2, 16\n\ + orrs r2, r4\n\ + movs r0, 0x1\n\ + movs r1, 0xA\n\ + bl dp01_build_cmdbuf_x21_a_bb\n\ + b _08035586\n\ + .align 2, 0\n\ +_0803556C: .4byte gBattleTypeFlags\n\ +_08035570:\n\ + movs r0, 0\n\ + bl GetBankByPlayerAI\n\ + adds r2, r0, 0\n\ + lsls r2, 24\n\ + lsrs r2, 16\n\ + orrs r2, r4\n\ + movs r0, 0x1\n\ + movs r1, 0xA\n\ + bl dp01_build_cmdbuf_x21_a_bb\n\ +_08035586:\n\ + bl OpponentBufferExecCompleted\n\ +_0803558A:\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided\n"); +} +#endif |