diff options
-rw-r--r-- | asm/battle_anim_80CA710.s | 1606 | ||||
-rwxr-xr-x | src/battle_anim_80CA710.c | 1415 |
2 files changed, 766 insertions, 2255 deletions
diff --git a/asm/battle_anim_80CA710.s b/asm/battle_anim_80CA710.s index 37345f41a..6052bda71 100644 --- a/asm/battle_anim_80CA710.s +++ b/asm/battle_anim_80CA710.s @@ -6,1612 +6,6 @@ .text - thumb_func_start sub_80CFB04 -sub_80CFB04: @ 80CFB04 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - lsls r0, 24 - lsrs r7, r0, 24 - movs r0, 0 - mov r9, r0 - movs r5, 0 - mov r0, sp - mov r1, r9 - strh r1, [r0] - mov r4, sp - adds r4, 0x2 - strh r1, [r4] - bl IsContest - lsls r0, 24 - mov r10, r4 - cmp r0, 0 - beq _080CFB70 - ldr r1, _080CFB60 @ =gTasks - lsls r2, r7, 2 - adds r0, r2, r7 - lsls r0, 3 - adds r0, r1 - movs r1, 0x2 - strh r1, [r0, 0x10] - ldr r3, _080CFB64 @ =gBattleAnimArgs - ldrh r0, [r3] - negs r0, r0 - strh r0, [r3] - ldrh r1, [r3, 0x4] - movs r0, 0x1 - ands r0, r1 - mov r8, r2 - cmp r0, 0 - beq _080CFB68 - movs r0, 0x2 - negs r0, r0 - ands r0, r1 - strh r0, [r3, 0x4] - b _080CFBCA - .align 2, 0 -_080CFB60: .4byte gTasks -_080CFB64: .4byte gBattleAnimArgs -_080CFB68: - movs r0, 0x1 - orrs r0, r1 - strh r0, [r3, 0x4] - b _080CFBCA -_080CFB70: - ldr r1, _080CFBB4 @ =gBanksBySide - ldr r0, _080CFBB8 @ =gBattleAnimEnemyMonIndex - ldrb r0, [r0] - adds r0, r1 - ldrb r1, [r0] - movs r3, 0x1 - adds r0, r3, 0 - ands r0, r1 - lsls r2, r7, 2 - mov r8, r2 - cmp r0, 0 - bne _080CFBCA - ldr r1, _080CFBBC @ =gTasks - adds r0, r2, r7 - lsls r0, 3 - adds r0, r1 - strh r3, [r0, 0x10] - ldr r2, _080CFBC0 @ =gBattleAnimArgs - ldrh r0, [r2] - negs r0, r0 - strh r0, [r2] - ldrh r0, [r2, 0x2] - negs r0, r0 - strh r0, [r2, 0x2] - ldrh r1, [r2, 0x4] - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _080CFBC4 - movs r0, 0x2 - negs r0, r0 - ands r0, r1 - b _080CFBC8 - .align 2, 0 -_080CFBB4: .4byte gBanksBySide -_080CFBB8: .4byte gBattleAnimEnemyMonIndex -_080CFBBC: .4byte gTasks -_080CFBC0: .4byte gBattleAnimArgs -_080CFBC4: - movs r0, 0x1 - orrs r0, r1 -_080CFBC8: - strh r0, [r2, 0x4] -_080CFBCA: - ldr r5, _080CFC24 @ =gBattleAnimPlayerMonIndex - ldrb r0, [r5] - movs r1, 0 - bl sub_8077ABC - ldr r1, _080CFC28 @ =gTasks - mov r3, r8 - adds r4, r3, r7 - lsls r4, 3 - adds r4, r1 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x1A] - adds r6, r0, 0 - ldrb r0, [r5] - movs r1, 0x1 - bl sub_8077ABC - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x1C] - mov r9, r0 - ldr r0, _080CFC2C @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080CFC34 - ldr r4, _080CFC30 @ =gBattleAnimEnemyMonIndex - ldrb r1, [r4] - movs r0, 0x2 - eors r0, r1 - bl b_side_obj__get_some_boolean - lsls r0, 24 - cmp r0, 0 - beq _080CFC34 - ldrb r0, [r4] - movs r1, 0 - mov r2, sp - mov r3, r10 - bl sub_807A3FC - b _080CFC56 - .align 2, 0 -_080CFC24: .4byte gBattleAnimPlayerMonIndex -_080CFC28: .4byte gTasks -_080CFC2C: .4byte gBattleTypeFlags -_080CFC30: .4byte gBattleAnimEnemyMonIndex -_080CFC34: - mov r5, sp - ldr r4, _080CFC90 @ =gBattleAnimEnemyMonIndex - ldrb r0, [r4] - movs r1, 0 - bl sub_8077ABC - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5] - ldrb r0, [r4] - movs r1, 0x1 - bl sub_8077ABC - lsls r0, 24 - lsrs r0, 24 - mov r1, r10 - strh r0, [r1] -_080CFC56: - mov r4, sp - ldr r0, _080CFC94 @ =gTasks - mov r2, r8 - adds r1, r2, r7 - lsls r1, 3 - adds r1, r0 - mov r2, sp - ldr r3, _080CFC98 @ =gBattleAnimArgs - ldrh r0, [r3] - ldrh r2, [r2] - adds r0, r2 - strh r0, [r1, 0x1E] - strh r0, [r4] - ldrh r0, [r3, 0x2] - mov r3, r10 - ldrh r3, [r3] - adds r0, r3 - strh r0, [r1, 0x20] - mov r1, r10 - strh r0, [r1] - mov r0, sp - ldrh r2, [r0] @loads sp1 into r2 - movs r3, 0 - ldrsh r0, [r0, r3] @loads sp1 into r0 as well - adds r1, r6, 0 - cmp r0, r1 - blt _080CFC9C - subs r0, r2, r1 - b _080CFC9E - .align 2, 0 -_080CFC90: .4byte gBattleAnimEnemyMonIndex -_080CFC94: .4byte gTasks -_080CFC98: .4byte gBattleAnimArgs -_080CFC9C: - subs r0, r1, r2 -_080CFC9E: - lsls r0, 16 - lsrs r0, 16 - lsls r4, r0, 16 - asrs r4, 16 - ldr r5, _080CFD14 @ =gBattleAnimArgs - ldrh r1, [r5, 0x4] - movs r0, 0x2 - negs r0, r0 - ands r0, r1 - lsls r0, 16 - asrs r0, 16 - bl sub_81174E0 - adds r1, r0, 0 - lsls r1, 16 - asrs r1, 16 - adds r0, r4, 0 - bl sub_81174C4 - ldr r2, _080CFD18 @ =gTasks - mov r3, r8 - adds r1, r3, r7 - lsls r1, 3 - adds r6, r1, r2 - strh r0, [r6, 0x12] - movs r1, 0x12 - ldrsh r0, [r6, r1] - movs r1, 0x80 - bl sub_81174C4 - strh r0, [r6, 0x14] - ldrh r0, [r5, 0x4] - strh r0, [r6, 0x16] - mov r2, r10 - ldrh r1, [r2] @loads sp2 into r1 - movs r3, 0 - ldrsh r0, [r2, r3] @and into r0 - mov r4, r9 - cmp r0, r4 - blt _080CFD1C - subs r4, r1, r4 - lsls r4, 16 - asrs r4, 16 - movs r1, 0x12 - ldrsh r0, [r6, r1] - bl sub_81174E0 - adds r1, r0, 0 - lsls r1, 16 - asrs r1, 16 - adds r0, r4, 0 - bl sub_81174C4 - movs r1, 0x2 - negs r1, r1 - ands r1, r0 - strh r1, [r6, 0x18] - b _080CFD3C - .align 2, 0 -_080CFD14: .4byte gBattleAnimArgs -_080CFD18: .4byte gTasks -_080CFD1C: - subs r4, r1 - lsls r4, 16 - asrs r4, 16 - movs r2, 0x12 - ldrsh r0, [r6, r2] - bl sub_81174E0 - adds r1, r0, 0 - lsls r1, 16 - asrs r1, 16 - adds r0, r4, 0 - bl sub_81174C4 - movs r1, 0x1 - orrs r0, r1 - strh r0, [r6, 0x18] -_080CFD3C: - ldr r1, _080CFD7C @ =gTasks - mov r3, r8 - adds r0, r3, r7 - lsls r0, 3 - adds r5, r0, r1 - ldr r4, _080CFD80 @ =gBattleAnimArgs - ldrh r0, [r4, 0x6] - strh r0, [r5, 0xE] - ldrh r1, [r4, 0x8] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080CFD8C - movs r0, 0x80 - eors r0, r1 - strh r0, [r4, 0x8] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3F - ble _080CFDB4 - ldr r0, _080CFD84 @ =gBattleAnimEnemyMonIndex - ldrb r0, [r0] - bl sub_8079E90 - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080CFD88 @ =0x0000ffc0 - adds r1, r2, 0 - ldrh r4, [r4, 0x8] - adds r1, r4 - adds r0, r1 - b _080CFDC4 - .align 2, 0 -_080CFD7C: .4byte gTasks -_080CFD80: .4byte gBattleAnimArgs -_080CFD84: .4byte gBattleAnimEnemyMonIndex -_080CFD88: .4byte 0x0000ffc0 -_080CFD8C: - lsls r0, r1, 16 - asrs r0, 16 - cmp r0, 0x3F - ble _080CFDB4 - ldr r0, _080CFDAC @ =gBattleAnimEnemyMonIndex - ldrb r0, [r0] - bl sub_8079E90 - lsls r0, 24 - lsrs r0, 24 - ldr r3, _080CFDB0 @ =0x0000ffc0 - adds r1, r3, 0 - ldrh r4, [r4, 0x8] - adds r1, r4 - adds r0, r1 - b _080CFDC4 - .align 2, 0 -_080CFDAC: .4byte gBattleAnimEnemyMonIndex -_080CFDB0: .4byte 0x0000ffc0 -_080CFDB4: - ldr r0, _080CFDF0 @ =gBattleAnimEnemyMonIndex - ldrb r0, [r0] - bl sub_8079E90 - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r4, 0x8] - subs r0, r1 -_080CFDC4: - strh r0, [r5, 0xC] - ldr r0, _080CFDF4 @ =gTasks - mov r2, r8 - adds r1, r2, r7 - lsls r1, 3 - adds r1, r0 - movs r3, 0xC - ldrsh r0, [r1, r3] - cmp r0, 0x2 - bgt _080CFDDC - movs r0, 0x3 - strh r0, [r1, 0xC] -_080CFDDC: - ldr r0, _080CFDF8 @ =sub_80CFA20 - str r0, [r1] - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080CFDF0: .4byte gBattleAnimEnemyMonIndex -_080CFDF4: .4byte gTasks -_080CFDF8: .4byte sub_80CFA20 - thumb_func_end sub_80CFB04 - - thumb_func_start sub_80CFDFC -sub_80CFDFC: @ 80CFDFC - push {r4,lr} - adds r4, r0, 0 - movs r1, 0 - bl sub_80787B0 - ldr r0, _080CFE24 @ =gSpriteTemplate_83D75AC - ldrh r0, [r0, 0x2] - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 20 - movs r1, 0x80 - lsls r1, 1 - adds r0, r1 - strh r0, [r4, 0x2E] - ldr r0, _080CFE28 @ =sub_80CFE2C - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080CFE24: .4byte gSpriteTemplate_83D75AC -_080CFE28: .4byte sub_80CFE2C - thumb_func_end sub_80CFDFC - - thumb_func_start sub_80CFE2C -sub_80CFE2C: @ 80CFE2C - push {r4-r7,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x30] - adds r0, 0x1 - strh r0, [r4, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x2 - bne _080CFE90 - movs r0, 0 - strh r0, [r4, 0x30] - ldrh r5, [r4, 0x2E] - ldr r1, _080CFE98 @ =gPlttBufferFaded - adds r0, r5, 0 - adds r0, 0x8 - lsls r0, 1 - adds r0, r1 - ldrh r7, [r0] - adds r6, r1, 0 - adds r1, r5, 0 - adds r1, 0x9 - lsls r0, r5, 1 - adds r0, r6 - adds r2, r0, 0 - adds r2, 0x10 - movs r3, 0x7 - lsls r1, 1 - adds r1, r6 -_080CFE64: - ldrh r0, [r1] - strh r0, [r2] - adds r1, 0x2 - adds r2, 0x2 - subs r3, 0x1 - cmp r3, 0 - bge _080CFE64 - adds r0, r5, 0 - adds r0, 0xF - lsls r0, 1 - adds r0, r6 - strh r7, [r0] - ldrh r0, [r4, 0x32] - adds r0, 0x1 - strh r0, [r4, 0x32] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x18 - bne _080CFE90 - adds r0, r4, 0 - bl move_anim_8072740 -_080CFE90: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080CFE98: .4byte gPlttBufferFaded - thumb_func_end sub_80CFE2C - - thumb_func_start sub_80CFE9C -sub_80CFE9C: @ 80CFE9C - push {r4-r7,lr} - sub sp, 0x4 - adds r5, r0, 0 - movs r1, 0x1 - bl sub_80787B0 - ldr r4, _080CFF3C @ =gBattleAnimEnemyMonIndex - ldrb r0, [r4] - movs r1, 0x2 - bl sub_8077ABC - lsls r0, 24 - lsrs r6, r0, 24 - ldrb r0, [r4] - movs r1, 0x3 - bl sub_8077ABC - lsls r0, 24 - ldr r4, _080CFF40 @ =gBattleAnimArgs - lsrs r0, 24 - ldrh r1, [r4, 0x6] - adds r0, r1 - lsls r0, 16 - lsrs r7, r0, 16 - ldr r0, _080CFF44 @ =gBattleAnimPlayerMonIndex - ldrb r0, [r0] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - beq _080CFEE0 - ldrh r0, [r4, 0x4] - negs r0, r0 - strh r0, [r4, 0x4] -_080CFEE0: - lsls r0, r6, 16 - asrs r0, 16 - ldrh r1, [r4, 0x4] - adds r0, r1 - lsls r0, 16 - ldrh r1, [r5, 0x20] - lsrs r6, r0, 16 - asrs r0, 16 - subs r0, r1 - lsls r0, 16 - asrs r0, 16 - ldrh r2, [r5, 0x22] - lsls r1, r7, 16 - asrs r1, 16 - subs r1, r2 - lsls r1, 16 - asrs r1, 16 - bl sub_80790F0 - lsls r0, 16 - movs r1, 0xC0 - lsls r1, 24 - adds r0, r1 - lsrs r0, 16 - movs r3, 0x80 - lsls r3, 1 - str r0, [sp] - adds r0, r5, 0 - movs r1, 0 - adds r2, r3, 0 - bl sub_8078FDC - ldrh r0, [r4, 0x8] - strh r0, [r5, 0x2E] - strh r6, [r5, 0x32] - strh r7, [r5, 0x36] - ldr r0, _080CFF48 @ =sub_8078C00 - str r0, [r5, 0x1C] - ldr r1, _080CFF4C @ =move_anim_8072740 - adds r0, r5, 0 - bl oamt_set_x3A_32 - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080CFF3C: .4byte gBattleAnimEnemyMonIndex -_080CFF40: .4byte gBattleAnimArgs -_080CFF44: .4byte gBattleAnimPlayerMonIndex -_080CFF48: .4byte sub_8078C00 -_080CFF4C: .4byte move_anim_8072740 - thumb_func_end sub_80CFE9C - - thumb_func_start sub_80CFF50 -sub_80CFF50: @ 80CFF50 - ldr r1, _080CFF60 @ =0x0000fff0 - strh r1, [r0, 0x32] - ldrh r1, [r0, 0x22] - adds r1, 0x8 - strh r1, [r0, 0x22] - ldr r1, _080CFF64 @ =sub_80CFF68 - str r1, [r0, 0x1C] - bx lr - .align 2, 0 -_080CFF60: .4byte 0x0000fff0 -_080CFF64: .4byte sub_80CFF68 - thumb_func_end sub_80CFF50 - - thumb_func_start sub_80CFF68 -sub_80CFF68: @ 80CFF68 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x2E] - adds r0, 0x80 - strh r0, [r4, 0x2E] - lsls r0, 16 - asrs r0, 24 - strh r0, [r4, 0x24] - ldr r0, _080CFFD4 @ =gBattleAnimPlayerMonIndex - ldrb r0, [r0] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - bne _080CFF8C - ldrh r0, [r4, 0x24] - negs r0, r0 - strh r0, [r4, 0x24] -_080CFF8C: - movs r1, 0x30 - ldrsh r0, [r4, r1] - movs r2, 0x32 - ldrsh r1, [r4, r2] - bl Sin - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x30] - adds r0, 0x5 - strh r0, [r4, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x7E - ble _080CFFCC - movs r0, 0 - strh r0, [r4, 0x30] - movs r1, 0x32 - ldrsh r0, [r4, r1] - lsrs r1, r0, 31 - adds r0, r1 - asrs r0, 1 - strh r0, [r4, 0x32] - ldrh r0, [r4, 0x34] - adds r0, 0x1 - strh r0, [r4, 0x34] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x2 - bne _080CFFCC - adds r0, r4, 0 - bl move_anim_8072740 -_080CFFCC: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080CFFD4: .4byte gBattleAnimPlayerMonIndex - thumb_func_end sub_80CFF68 - - thumb_func_start sub_80CFFD8 -sub_80CFFD8: @ 80CFFD8 - push {r4,r5,lr} - adds r4, r0, 0 - movs r1, 0x1 - bl sub_80787B0 - movs r0, 0x14 - strh r0, [r4, 0x2E] - ldr r5, _080D0024 @ =gBattleAnimEnemyMonIndex - ldrb r0, [r5] - movs r1, 0x2 - bl sub_8077ABC - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x32] - ldrb r0, [r5] - movs r1, 0x3 - bl sub_8077ABC - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x36] - ldr r0, _080D0028 @ =sub_8078B34 - str r0, [r4, 0x1C] - adds r2, r4, 0 - adds r2, 0x2C - ldrb r0, [r2] - movs r1, 0x80 - orrs r0, r1 - strb r0, [r2] - ldr r1, _080D002C @ =sub_80D0030 - adds r0, r4, 0 - bl oamt_set_x3A_32 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D0024: .4byte gBattleAnimEnemyMonIndex -_080D0028: .4byte sub_8078B34 -_080D002C: .4byte sub_80D0030 - thumb_func_end sub_80CFFD8 - - thumb_func_start sub_80D0030 -sub_80D0030: @ 80D0030 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x3F - bl sub_8076F98 - adds r1, r0, 0 - lsls r1, 24 - asrs r1, 24 - movs r0, 0xA6 - bl PlaySE12WithPanning - ldrh r0, [r4, 0x24] - ldrh r1, [r4, 0x20] - adds r0, r1 - movs r1, 0 - strh r0, [r4, 0x20] - ldrh r0, [r4, 0x26] - ldrh r2, [r4, 0x22] - adds r0, r2 - strh r0, [r4, 0x22] - strh r1, [r4, 0x26] - strh r1, [r4, 0x24] - movs r2, 0 - movs r1, 0x7 - adds r0, r4, 0 - adds r0, 0x3C -_080D0064: - strh r2, [r0] - subs r0, 0x2 - subs r1, 0x1 - cmp r1, 0 - bge _080D0064 - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x7 - ands r0, r1 - ldr r2, _080D00AC @ =0x0000fff4 - adds r1, r2, 0 - subs r1, r0 - strh r1, [r4, 0x3A] - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0xA0 - bl __umodsi3 - adds r0, 0xA0 - strh r0, [r4, 0x3C] - ldr r0, _080D00B0 @ =sub_80D00B4 - str r0, [r4, 0x1C] - adds r2, r4, 0 - adds r2, 0x2C - ldrb r1, [r2] - movs r0, 0x7F - ands r0, r1 - strb r0, [r2] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080D00AC: .4byte 0x0000fff4 -_080D00B0: .4byte sub_80D00B4 - thumb_func_end sub_80D0030 - - thumb_func_start sub_80D00B4 -sub_80D00B4: @ 80D00B4 - push {r4,lr} - adds r4, r0, 0 - ldrh r1, [r4, 0x3C] - ldrh r2, [r4, 0x2E] - adds r0, r1, r2 - strh r0, [r4, 0x2E] - lsls r0, 16 - asrs r2, r0, 24 - strh r2, [r4, 0x24] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080D00D2 - negs r0, r2 - strh r0, [r4, 0x24] -_080D00D2: - movs r1, 0x30 - ldrsh r0, [r4, r1] - movs r2, 0x3A - ldrsh r1, [r4, r2] - bl Sin - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x30] - adds r0, 0x8 - strh r0, [r4, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x7E - ble _080D0112 - movs r0, 0 - strh r0, [r4, 0x30] - movs r1, 0x32 - ldrsh r0, [r4, r1] - lsrs r1, r0, 31 - adds r0, r1 - asrs r0, 1 - strh r0, [r4, 0x32] - ldrh r0, [r4, 0x34] - adds r0, 0x1 - strh r0, [r4, 0x34] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - bne _080D0112 - adds r0, r4, 0 - bl move_anim_8072740 -_080D0112: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80D00B4 - - thumb_func_start sub_80D0118 -sub_80D0118: @ 80D0118 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0 - bl sub_80787B0 - ldr r0, _080D0168 @ =gBattleAnimPlayerMonIndex - ldrb r0, [r0] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - bne _080D0136 - ldrh r0, [r4, 0x22] - adds r0, 0x10 - strh r0, [r4, 0x22] -_080D0136: - ldr r1, _080D016C @ =gBattleAnimArgs - ldrh r0, [r1, 0x8] - strh r0, [r4, 0x2E] - ldrh r0, [r1, 0x4] - strh r0, [r4, 0x30] - ldrh r0, [r1, 0xA] - strh r0, [r4, 0x32] - ldrh r0, [r1, 0xC] - strh r0, [r4, 0x34] - ldrh r0, [r1, 0x6] - strh r0, [r4, 0x36] - ldr r0, _080D0170 @ =sub_8078114 - str r0, [r4, 0x1C] - ldr r1, _080D0174 @ =move_anim_8072740 - adds r0, r4, 0 - bl oamt_set_x3A_32 - ldr r1, [r4, 0x1C] - adds r0, r4, 0 - bl _call_via_r1 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080D0168: .4byte gBattleAnimPlayerMonIndex -_080D016C: .4byte gBattleAnimArgs -_080D0170: .4byte sub_8078114 -_080D0174: .4byte move_anim_8072740 - thumb_func_end sub_80D0118 - - thumb_func_start sub_80D0178 -sub_80D0178: @ 80D0178 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r5, r0, 0 - movs r7, 0x20 - ldr r4, _080D01F4 @ =0x0000ffe0 - movs r0, 0x10 - mov r8, r0 - ldr r6, _080D01F8 @ =0x0000fff0 - ldr r0, _080D01FC @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - beq _080D01A4 - adds r7, r4, 0 - movs r4, 0x20 - mov r8, r6 - movs r6, 0x10 - adds r0, r5, 0 - movs r1, 0x1 - bl StartSpriteAnim -_080D01A4: - lsls r0, r7, 16 - asrs r0, 16 - ldrh r1, [r5, 0x20] - adds r0, r1 - strh r0, [r5, 0x20] - lsls r0, r4, 16 - asrs r0, 16 - ldrh r1, [r5, 0x22] - adds r0, r1 - strh r0, [r5, 0x22] - movs r0, 0x6 - strh r0, [r5, 0x2E] - ldr r4, _080D0200 @ =gBattleAnimEnemyMonIndex - ldrb r0, [r4] - movs r1, 0x2 - bl sub_8077ABC - lsls r0, 24 - lsrs r0, 24 - add r0, r8 - strh r0, [r5, 0x32] - ldrb r0, [r4] - movs r1, 0x3 - bl sub_8077ABC - lsls r0, 24 - lsrs r0, 24 - adds r0, r6 - strh r0, [r5, 0x36] - ldr r0, _080D0204 @ =sub_8078B34 - str r0, [r5, 0x1C] - ldr r1, _080D0208 @ =sub_80D020C - adds r0, r5, 0 - bl oamt_set_x3A_32 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080D01F4: .4byte 0x0000ffe0 -_080D01F8: .4byte 0x0000fff0 -_080D01FC: .4byte gBattleAnimArgs -_080D0200: .4byte gBattleAnimEnemyMonIndex -_080D0204: .4byte sub_8078B34 -_080D0208: .4byte sub_80D020C - thumb_func_end sub_80D0178 - - thumb_func_start sub_80D020C -sub_80D020C: @ 80D020C - push {lr} - adds r2, r0, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _080D0222 - adds r0, r2, 0 - bl move_anim_8072740 -_080D0222: - pop {r0} - bx r0 - thumb_func_end sub_80D020C - - thumb_func_start sub_80D0228 -sub_80D0228: @ 80D0228 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - adds r5, r0, 0 - movs r0, 0x20 - mov r8, r0 - ldr r4, _080D02BC @ =0x0000ffe0 - movs r2, 0x10 - mov r9, r2 - ldr r6, _080D02C0 @ =0x0000fff0 - ldr r7, _080D02C4 @ =gBattleAnimArgs - ldrh r1, [r7] - movs r2, 0 - ldrsh r0, [r7, r2] - cmp r0, 0 - beq _080D025C - mov r8, r4 - movs r4, 0x20 - mov r9, r6 - movs r6, 0x10 - lsls r1, 24 - lsrs r1, 24 - adds r0, r5, 0 - bl StartSpriteAnim -_080D025C: - mov r0, r8 - lsls r1, r0, 16 - asrs r1, 16 - ldrh r2, [r5, 0x20] - adds r1, r2 - strh r1, [r5, 0x20] - lsls r0, r4, 16 - asrs r0, 16 - ldrh r2, [r5, 0x22] - adds r0, r2 - strh r0, [r5, 0x22] - movs r0, 0x6 - strh r0, [r5, 0x2E] - strh r1, [r5, 0x30] - ldr r4, _080D02C8 @ =gBattleAnimEnemyMonIndex - ldrb r0, [r4] - movs r1, 0x2 - bl sub_8077ABC - lsls r0, 24 - lsrs r0, 24 - add r0, r9 - strh r0, [r5, 0x32] - ldrh r0, [r5, 0x22] - strh r0, [r5, 0x34] - ldrb r0, [r4] - movs r1, 0x3 - bl sub_8077ABC - lsls r0, 24 - lsrs r0, 24 - adds r0, r6 - strh r0, [r5, 0x36] - adds r0, r5, 0 - bl obj_translate_based_on_private_1_2_3_4 - ldrh r0, [r7] - strh r0, [r5, 0x38] - ldrh r0, [r5, 0x2E] - strh r0, [r5, 0x3A] - ldr r0, _080D02CC @ =sub_80D02D0 - str r0, [r5, 0x1C] - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080D02BC: .4byte 0x0000ffe0 -_080D02C0: .4byte 0x0000fff0 -_080D02C4: .4byte gBattleAnimArgs -_080D02C8: .4byte gBattleAnimEnemyMonIndex -_080D02CC: .4byte sub_80D02D0 - thumb_func_end sub_80D0228 - - thumb_func_start sub_80D02D0 -sub_80D02D0: @ 80D02D0 - push {r4,lr} - adds r4, r0, 0 - bl sub_8078B5C - lsls r0, 24 - cmp r0, 0 - beq _080D0334 - adds r0, r4, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _080D0334 - adds r0, r4, 0 - movs r1, 0 - bl SeekSpriteAnim - adds r2, r4, 0 - adds r2, 0x2C - ldrb r0, [r2] - movs r1, 0x40 - orrs r0, r1 - strb r0, [r2] - ldrh r0, [r4, 0x24] - ldrh r1, [r4, 0x20] - adds r0, r1 - movs r2, 0 - strh r0, [r4, 0x20] - ldrh r0, [r4, 0x26] - ldrh r1, [r4, 0x22] - adds r0, r1 - strh r0, [r4, 0x22] - movs r0, 0x2 - strh r0, [r4, 0x24] - ldr r0, _080D033C @ =0x0000fffe - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x3A] - strh r0, [r4, 0x2E] - ldrh r0, [r4, 0x30] - movs r1, 0x1 - eors r0, r1 - strh r0, [r4, 0x30] - ldrh r0, [r4, 0x32] - eors r0, r1 - strh r0, [r4, 0x32] - strh r2, [r4, 0x36] - strh r2, [r4, 0x34] - ldr r0, _080D0340 @ =sub_80D0344 - str r0, [r4, 0x1C] -_080D0334: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080D033C: .4byte 0x0000fffe -_080D0340: .4byte sub_80D0344 - thumb_func_end sub_80D02D0 - - thumb_func_start sub_80D0344 -sub_80D0344: @ 80D0344 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x34 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080D035C - ldrh r0, [r4, 0x24] - negs r0, r0 - strh r0, [r4, 0x24] - ldrh r0, [r4, 0x26] - negs r0, r0 - strh r0, [r4, 0x26] -_080D035C: - ldrh r0, [r4, 0x34] - movs r1, 0x1 - eors r0, r1 - movs r1, 0 - strh r0, [r4, 0x34] - ldrh r0, [r4, 0x36] - adds r0, 0x1 - strh r0, [r4, 0x36] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x33 - bne _080D039E - strh r1, [r4, 0x26] - strh r1, [r4, 0x24] - strh r1, [r4, 0x36] - strh r1, [r4, 0x34] - adds r2, r4, 0 - adds r2, 0x2C - ldrb r1, [r2] - movs r0, 0x41 - negs r0, r0 - ands r0, r1 - strb r0, [r2] - ldrh r0, [r4, 0x38] - movs r1, 0x1 - eors r1, r0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl StartSpriteAnim - ldr r0, _080D03A4 @ =sub_80D03A8 - str r0, [r4, 0x1C] -_080D039E: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080D03A4: .4byte sub_80D03A8 - thumb_func_end sub_80D0344 - - thumb_func_start sub_80D03A8 -sub_80D03A8: @ 80D03A8 - push {r4,lr} - adds r4, r0, 0 - bl sub_8078B5C - lsls r0, 24 - cmp r0, 0 - beq _080D03BC - adds r0, r4, 0 - bl move_anim_8072740 -_080D03BC: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80D03A8 - - thumb_func_start sub_80D03C4 -sub_80D03C4: @ 80D03C4 - push {r4,r5,lr} - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - movs r0, 0x1 - bl obj_id_for_side_relative_to_move - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - movs r1, 0x1 - bl sub_8078E70 - adds r0, r4, 0 - movs r1, 0xD0 - movs r2, 0xD0 - movs r3, 0 - bl obj_id_set_rotscale - ldr r1, _080D041C @ =gSprites - lsls r0, r4, 4 - adds r0, r4 - lsls r0, 2 - adds r0, r1 - ldrb r0, [r0, 0x5] - lsrs r0, 4 - adds r0, 0x10 - movs r1, 0 - bl sub_8079108 - ldr r1, _080D0420 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - movs r1, 0x50 - strh r1, [r0, 0x8] - ldr r1, _080D0424 @ =sub_80D0428 - str r1, [r0] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D041C: .4byte gSprites -_080D0420: .4byte gTasks -_080D0424: .4byte sub_80D0428 - thumb_func_end sub_80D03C4 - - thumb_func_start sub_80D0428 -sub_80D0428: @ 80D0428 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _080D0480 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - ldrh r1, [r0, 0x8] - subs r1, 0x1 - strh r1, [r0, 0x8] - lsls r1, 16 - asrs r1, 16 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - bne _080D0478 - movs r0, 0x1 - bl obj_id_for_side_relative_to_move - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - bl sub_8078F40 - ldr r1, _080D0484 @ =gSprites - lsls r0, r4, 4 - adds r0, r4 - lsls r0, 2 - adds r0, r1 - ldrb r0, [r0, 0x5] - lsrs r0, 4 - adds r0, 0x10 - movs r1, 0x1 - bl sub_8079108 - adds r0, r5, 0 - bl DestroyAnimVisualTask -_080D0478: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D0480: .4byte gTasks -_080D0484: .4byte gSprites - thumb_func_end sub_80D0428 - - thumb_func_start sub_80D0488 -sub_80D0488: @ 80D0488 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - ldr r0, _080D04D4 @ =gTasks - adds r4, r0 - movs r0, 0 - bl obj_id_for_side_relative_to_move - lsls r0, 24 - lsrs r0, 24 - movs r5, 0 - strh r0, [r4, 0x8] - movs r1, 0 - bl sub_8078E70 - strh r5, [r4, 0xA] - strh r5, [r4, 0xC] - strh r5, [r4, 0xE] - movs r0, 0x80 - lsls r0, 1 - strh r0, [r4, 0x10] - strh r5, [r4, 0x12] - strh r5, [r4, 0x14] - ldr r0, _080D04D8 @ =gBattleAnimPlayerMonIndex - ldrb r0, [r0] - bl sub_8079E90 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x16] - ldr r0, _080D04DC @ =sub_80D04E0 - str r0, [r4] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D04D4: .4byte gTasks -_080D04D8: .4byte gBattleAnimPlayerMonIndex -_080D04DC: .4byte sub_80D04E0 - thumb_func_end sub_80D0488 - - thumb_func_start sub_80D04E0 -sub_80D04E0: @ 80D04E0 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _080D0504 @ =gTasks - adds r4, r0, r1 - movs r1, 0xA - ldrsh r0, [r4, r1] - cmp r0, 0x5 - bls _080D04FA - b _080D060A -_080D04FA: - lsls r0, 2 - ldr r1, _080D0508 @ =_080D050C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080D0504: .4byte gTasks -_080D0508: .4byte _080D050C - .align 2, 0 -_080D050C: - .4byte _080D0524 - .4byte _080D056C - .4byte _080D05A2 - .4byte _080D05A8 - .4byte _080D05B8 - .4byte _080D05EC -_080D0524: - movs r2, 0xC - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _080D0534 - cmp r0, 0x3 - beq _080D0534 - cmp r0, 0x6 - bne _080D053C -_080D0534: - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_80D0614 -_080D053C: - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] - ldrh r0, [r4, 0x10] - adds r0, 0x28 - strh r0, [r4, 0x10] - ldrb r0, [r4, 0x8] - movs r1, 0x10 - ldrsh r2, [r4, r1] - adds r1, r2, 0 - movs r3, 0 - bl obj_id_set_rotscale - ldrb r0, [r4, 0x8] - bl sub_8079A64 - movs r2, 0xC - ldrsh r0, [r4, r2] - cmp r0, 0x20 - bne _080D060A - ldrh r0, [r4, 0x12] - adds r0, 0x1 - strh r0, [r4, 0x12] - b _080D05E4 -_080D056C: - movs r1, 0x14 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080D060A - movs r2, 0x12 - ldrsh r1, [r4, r2] - cmp r1, 0x3 - bne _080D0582 - strh r0, [r4, 0xC] - strh r1, [r4, 0xA] - b _080D060A -_080D0582: - strh r0, [r4, 0xC] - strh r0, [r4, 0xE] - movs r2, 0x80 - lsls r2, 1 - strh r2, [r4, 0x10] - ldrb r0, [r4, 0x8] - adds r1, r2, 0 - movs r3, 0 - bl obj_id_set_rotscale - ldrb r0, [r4, 0x8] - bl sub_8079A64 - movs r0, 0x2 - strh r0, [r4, 0xA] - b _080D060A -_080D05A2: - movs r0, 0 - strh r0, [r4, 0xA] - b _080D060A -_080D05A8: - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x20 - ble _080D060A - b _080D05E0 -_080D05B8: - ldrh r0, [r4, 0xC] - adds r0, 0x2 - strh r0, [r4, 0xC] - ldrh r0, [r4, 0x10] - subs r0, 0x50 - strh r0, [r4, 0x10] - ldrb r0, [r4, 0x8] - movs r1, 0x10 - ldrsh r2, [r4, r1] - adds r1, r2, 0 - movs r3, 0 - bl obj_id_set_rotscale - ldrb r0, [r4, 0x8] - bl sub_8079A64 - movs r2, 0xC - ldrsh r0, [r4, r2] - cmp r0, 0x20 - bne _080D060A -_080D05E0: - movs r0, 0 - strh r0, [r4, 0xC] -_080D05E4: - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - b _080D060A -_080D05EC: - ldrb r0, [r4, 0x8] - bl sub_8078F40 - ldr r2, _080D0610 @ =gSprites - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - movs r1, 0 - strh r1, [r0, 0x26] - adds r0, r5, 0 - bl DestroyAnimVisualTask -_080D060A: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D0610: .4byte gSprites - thumb_func_end sub_80D04E0 - - thumb_func_start sub_80D0614 -sub_80D0614: @ 80D0614 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - adds r7, r0, 0 - lsls r1, 24 - lsrs r1, 24 - mov r9, r1 - movs r0, 0 - bl duplicate_obj_of_side_rel2move_in_transparent_mode - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - lsls r0, 16 - asrs r4, r0, 16 - cmp r4, 0 - blt _080D06EE - bl AllocOamMatrix - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0xFF - bne _080D0658 - lsls r0, r4, 4 - adds r0, r4 - lsls r0, 2 - ldr r1, _080D0654 @ =gSprites - adds r0, r1 - bl obj_delete_but_dont_free_vram - b _080D06EE - .align 2, 0 -_080D0654: .4byte gSprites -_080D0658: - ldr r5, _080D06FC @ =gSprites - lsls r3, r4, 4 - adds r3, r4 - lsls r3, 2 - adds r4, r3, r5 - ldrb r1, [r4, 0x1] - movs r0, 0xD - negs r0, r0 - ands r0, r1 - movs r1, 0x4 - orrs r0, r1 - movs r1, 0x3 - orrs r0, r1 - strb r0, [r4, 0x1] - adds r2, r4, 0 - adds r2, 0x2C - ldrb r0, [r2] - movs r1, 0x80 - orrs r0, r1 - strb r0, [r2] - movs r0, 0x1F - ands r6, r0 - lsls r2, r6, 1 - ldrb r1, [r4, 0x3] - movs r0, 0x3F - negs r0, r0 - ands r0, r1 - orrs r0, r2 - strb r0, [r4, 0x3] - ldrb r0, [r7, 0x16] - ldrb r1, [r7, 0xE] - subs r0, r1 - adds r1, r4, 0 - adds r1, 0x43 - strb r0, [r1] - ldrh r0, [r7, 0xE] - adds r0, 0x1 - strh r0, [r7, 0xE] - ldrh r0, [r7, 0x14] - adds r0, 0x1 - strh r0, [r7, 0x14] - movs r0, 0x10 - strh r0, [r4, 0x2E] - mov r0, r9 - strh r0, [r4, 0x30] - movs r0, 0x6 - strh r0, [r4, 0x32] - adds r5, 0x1C - adds r3, r5 - ldr r0, _080D0700 @ =sub_80D0704 - str r0, [r3] - mov r1, r8 - lsls r0, r1, 24 - lsrs r0, 24 - movs r1, 0x10 - ldrsh r2, [r7, r1] - adds r1, r2, 0 - movs r3, 0 - bl obj_id_set_rotscale - ldrb r0, [r4, 0x1] - movs r3, 0x4 - negs r3, r3 - ands r3, r0 - movs r0, 0x1 - orrs r3, r0 - strb r3, [r4, 0x1] - lsrs r1, r3, 6 - ldrb r2, [r4, 0x3] - lsrs r2, 6 - lsls r3, 30 - lsrs r3, 30 - adds r0, r4, 0 - bl CalcCenterToCornerVec -_080D06EE: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080D06FC: .4byte gSprites -_080D0700: .4byte sub_80D0704 - thumb_func_end sub_80D0614 - - thumb_func_start sub_80D0704 -sub_80D0704: @ 80D0704 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x2E] - subs r0, 0x1 - strh r0, [r4, 0x2E] - lsls r0, 16 - cmp r0, 0 - bne _080D0742 - ldr r3, _080D0748 @ =gTasks - movs r0, 0x32 - ldrsh r1, [r4, r0] - lsls r1, 1 - movs r0, 0x30 - ldrsh r2, [r4, r0] - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r1, r0 - adds r3, 0x8 - adds r1, r3 - ldrh r0, [r1] - subs r0, 0x1 - strh r0, [r1] - ldrb r0, [r4, 0x3] - lsls r0, 26 - lsrs r0, 27 - bl FreeOamMatrix - adds r0, r4, 0 - bl obj_delete_but_dont_free_vram -_080D0742: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080D0748: .4byte gTasks - thumb_func_end sub_80D0704 - - thumb_func_start sub_80D074C -sub_80D074C: @ 80D074C - push {r4,r5,lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - ldr r1, _080D0770 @ =gTasks - adds r4, r0, r1 - ldr r5, _080D0774 @ =gBattleAnimArgs - movs r1, 0x2 - ldrsh r0, [r5, r1] - cmp r0, 0 - bne _080D0778 - adds r0, r2, 0 - bl DestroyAnimVisualTask - b _080D079E - .align 2, 0 -_080D0770: .4byte gTasks -_080D0774: .4byte gBattleAnimArgs -_080D0778: - ldrb r0, [r5] - bl obj_id_for_side_relative_to_move - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - movs r2, 0 - strh r1, [r4, 0x8] - strh r2, [r4, 0xA] - ldrh r0, [r5, 0x2] - strh r0, [r4, 0xC] - strh r2, [r4, 0xE] - strh r2, [r4, 0x10] - ldr r2, _080D07A4 @ =gUnknown_083D76F4 - adds r0, r4, 0 - bl sub_80798F4 - ldr r0, _080D07A8 @ =sub_80D07AC - str r0, [r4] -_080D079E: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D07A4: .4byte gUnknown_083D76F4 -_080D07A8: .4byte sub_80D07AC - thumb_func_end sub_80D074C - thumb_func_start sub_80D07AC sub_80D07AC: @ 80D07AC push {r4-r6,lr} diff --git a/src/battle_anim_80CA710.c b/src/battle_anim_80CA710.c index 74f28c83e..76c74c89a 100755 --- a/src/battle_anim_80CA710.c +++ b/src/battle_anim_80CA710.c @@ -6,6 +6,7 @@ #include "palette.h" #include "rng.h" #include "rom_8077ABC.h" +#include "songs.h" #include "sound.h" #include "sprite.h" #include "task.h" @@ -22,8 +23,10 @@ extern u8 gBattleAnimEnemyMonIndex; extern struct SpriteTemplate gSpriteTemplate_83D631C; extern struct SpriteTemplate gSpriteTemplate_83D6884; extern struct SpriteTemplate gSpriteTemplate_83D74BC; +extern struct SpriteTemplate gSpriteTemplate_83D75AC; extern struct SpriteTemplate gBattleAnimSpriteTemplate_83D6FC8; extern struct SpriteTemplate gBattleAnimSpriteTemplate_83D6FF8; +extern struct AffineAnimFrameCmd gUnknown_083D76F4; extern s16 gUnknown_03000728[]; extern s8 gUnknown_083D680C[11][3]; extern u16 gUnknown_083D6984[]; @@ -100,6 +103,15 @@ void sub_80CF310(struct Sprite* sprite); void sub_80CF490(struct Sprite* sprite); void sub_80CF4B8(struct Sprite* sprite); void sub_80CF6B4(struct Sprite* sprite); +void sub_80CFE2C(struct Sprite* sprite); +void sub_80CFF68(struct Sprite* sprite); +void sub_80D0030(struct Sprite* sprite); +void sub_80D00B4(struct Sprite* sprite); +void sub_80D020C(struct Sprite* sprite); +void sub_80D02D0(struct Sprite* sprite); +void sub_80D0344(struct Sprite* sprite); +void sub_80D03A8(struct Sprite* sprite); +void sub_80D0704(struct Sprite* sprite); s16 sub_80CC338(struct Sprite* sprite); @@ -117,6 +129,9 @@ void sub_8078650(struct Sprite *sprite); void sub_8078394(struct Sprite *sprite); void sub_80785E4(struct Sprite *sprite); void sub_8078278(struct Sprite *sprite); +void sub_8078C00(struct Sprite *sprite); +void sub_8078114(struct Sprite *sprite); + extern void sub_8043DB0(); extern void sub_8043DFC(); @@ -135,6 +150,8 @@ s16 duplicate_obj_of_side_rel2move_in_transparent_mode(u8 a1); void obj_delete_but_dont_free_vram(struct Sprite *sprite); s16 sub_81174E0(s16 a); s16 sub_81174C4(s16 a, s16 b); +void sub_8079108(u16 a1, bool8 a2); +void sub_80798F4(struct Task *task, u8 a2, void *a3); void move_anim_8074EE0(struct Sprite *sprite); bool8 sub_8078718(struct Sprite *sprite); @@ -148,9 +165,13 @@ void sub_80CDD20(u8 taskId); void sub_80CE4D4(u8 taskId); void sub_80CE910(u8 taskId); void sub_80CF514(u8 taskId); - +void sub_80D0428(u8 taskId); +void sub_80D04E0(u8 taskId); +void sub_80D07AC(u8 taskId); void sub_80CC358(struct Task* task, u8 taskId); +void sub_80D0614(struct Task* task, u8 taskId); + void sub_80CEBC4(s16 a, s16 b, s16* c, s16* d, s8 e); void sub_80CA710(struct Sprite* sprite) @@ -876,126 +897,34 @@ void sub_80CB7EC(struct Sprite* sprite, s16 c) sprite->data7 = c; } -#ifdef NONMATCHING bool8 sub_80CB814(struct Sprite* sprite) { - s32 r10 = (u8)(sprite->data5 >> 8); - s32 r9 = (u8)sprite->data5; + u16 r10 = (u8)(sprite->data5 >> 8); + u16 r9 = (u8)sprite->data5; s32 r2 = (u8)(sprite->data6 >> 8); - s16 r4 = (u8)sprite->data6; - u16 r6 = sprite->data7 >> 8; + s32 r4 = (u8)sprite->data6; + s16 r6 = sprite->data7 >> 8; s16 r3 = sprite->data7 & 0xFF; + s16 r4_2; + s16 r0; s32 var1; s32 var2; - + if (r2 == 0) r2 = -32; else if (r2 == 255) r2 = 0x110; - - r4 -= r9; - var1 = (r2 - r10) * r3 / r6; - var2 = r4 * r3 / r6; + r4_2 = r4 - r9; + r0 = r2 - r10; + var1 = r0 * r3 / r6; + var2 = r4_2 * r3 / r6; sprite->pos1.x = var1 + r10; - sprite->pos2.y = var2 + r9; - r3++; - if ((u16)r3 == r6) + sprite->pos1.y = var2 + r9; + if (++r3 == r6) return TRUE; - sprite->data7 = r3 | (r6 << 8); + sprite->data7 = (r6 << 8) | r3; return FALSE; } -#else -__attribute__((naked)) -bool8 sub_80CB814(struct Sprite* sprite) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - mov r8, r0\n\ - ldrh r0, [r0, 0x38]\n\ - lsrs r1, r0, 8\n\ - mov r10, r1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r9, r0\n\ - mov r1, r8\n\ - ldrh r0, [r1, 0x3A]\n\ - lsrs r2, r0, 8\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - ldrh r1, [r1, 0x3C]\n\ - lsls r0, r1, 16\n\ - asrs r0, 24\n\ - lsls r0, 16\n\ - lsrs r6, r0, 16\n\ - movs r3, 0xFF\n\ - ands r3, r1\n\ - cmp r2, 0\n\ - bne _080CB84E\n\ - movs r2, 0x20\n\ - negs r2, r2\n\ - b _080CB856\n\ -_080CB84E:\n\ - cmp r2, 0xFF\n\ - bne _080CB856\n\ - movs r2, 0x88\n\ - lsls r2, 1\n\ -_080CB856:\n\ - mov r0, r9\n\ - subs r4, r0\n\ - lsls r4, 16\n\ - lsrs r4, 16\n\ - mov r1, r10\n\ - subs r0, r2, r1\n\ - lsls r5, r3, 16\n\ - asrs r5, 16\n\ - muls r0, r5\n\ - lsls r1, r6, 16\n\ - asrs r7, r1, 16\n\ - adds r1, r7, 0\n\ - bl __divsi3\n\ - adds r6, r0, 0\n\ - lsls r4, 16\n\ - asrs r4, 16\n\ - adds r0, r4, 0\n\ - muls r0, r5\n\ - adds r1, r7, 0\n\ - bl __divsi3\n\ - add r6, r10\n\ - mov r1, r8\n\ - strh r6, [r1, 0x20]\n\ - add r0, r9\n\ - strh r0, [r1, 0x22]\n\ - adds r5, 0x1\n\ - lsls r5, 16\n\ - lsrs r3, r5, 16\n\ - asrs r5, 16\n\ - cmp r5, r7\n\ - beq _080CB8A8\n\ - lsls r1, r7, 8\n\ - lsls r0, r3, 16\n\ - asrs r0, 16\n\ - orrs r0, r1\n\ - mov r1, r8\n\ - strh r0, [r1, 0x3C]\n\ - movs r0, 0\n\ - b _080CB8AA\n\ -_080CB8A8:\n\ - movs r0, 0x1\n\ -_080CB8AA:\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r1}\n\ - bx r1\n\ - .syntax divided\n"); -} -#endif void sub_80CB8B8(struct Sprite* sprite) { @@ -1007,82 +936,22 @@ void sub_80CB8B8(struct Sprite* sprite) if(sprite->data0 > 50) move_anim_8072740(sprite); } -#ifdef NONMATCHING void sub_80CB8E8(struct Sprite* sprite) { - int temp = ((sprite->data3 * 128) / sprite->data4) + sprite->data0; - int zero = 0; - sprite->data0 = temp; - if(sprite->data0 > 0x7F) + sprite->data0 += sprite->data3 * 128 / sprite->data4; + if (sprite->data0 >= 128) { sprite->data1++; - sprite->data0 = zero; + sprite->data0 = 0; } - sprite->pos2.y = Sin(sprite->data0 + 0x80, (sprite->data1 * 8) - 30); - if(!sub_80CB814(sprite)) + sprite->pos2.y = Sin(sprite->data0 + 128, 30 - sprite->data1 * 8); + if (sub_80CB814(sprite)) { - sprite->pos2.y = zero; - sprite->data0 = zero; + sprite->pos2.y = 0; + sprite->data0 = 0; sprite->callback = sub_80CB8B8; } } -#else -__attribute__((naked)) -void sub_80CB8E8(struct Sprite* sprite) -{ - asm(".syntax unified\n\ - push {r4,r5,lr}\n\ - adds r4, r0, 0\n\ - movs r1, 0x34\n\ - ldrsh r0, [r4, r1]\n\ - lsls r0, 7\n\ - movs r2, 0x36\n\ - ldrsh r1, [r4, r2]\n\ - bl __divsi3\n\ - ldrh r1, [r4, 0x2E]\n\ - adds r1, r0\n\ - movs r5, 0\n\ - strh r1, [r4, 0x2E]\n\ - lsls r1, 16\n\ - asrs r1, 16\n\ - cmp r1, 0x7F\n\ - ble _080CB912\n\ - ldrh r0, [r4, 0x30]\n\ - adds r0, 0x1\n\ - strh r0, [r4, 0x30]\n\ - strh r5, [r4, 0x2E]\n\ -_080CB912:\n\ - ldrh r0, [r4, 0x2E]\n\ - adds r0, 0x80\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - movs r1, 0x30\n\ - ldrsh r2, [r4, r1]\n\ - lsls r2, 3\n\ - movs r1, 0x1E\n\ - subs r1, r2\n\ - lsls r1, 16\n\ - asrs r1, 16\n\ - bl Sin\n\ - strh r0, [r4, 0x26]\n\ - adds r0, r4, 0\n\ - bl sub_80CB814\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _080CB942\n\ - strh r5, [r4, 0x26]\n\ - strh r5, [r4, 0x2E]\n\ - ldr r0, _080CB948 @ =sub_80CB8B8\n\ - str r0, [r4, 0x1C]\n\ -_080CB942:\n\ - pop {r4,r5}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080CB948: .4byte sub_80CB8B8\n\ - .syntax divided\n"); -} -#endif void sub_80CB94C(struct Sprite* sprite) { @@ -1735,27 +1604,31 @@ void sub_80CC5F8(u8 taskId) if(gBattleAnimArgs[7] == -1) DestroyAnimVisualTask(taskId); } -#ifdef NONMATCHING void sub_80CC6CC(struct Sprite* sprite) { u8 a; u8 b; - u8 bank; - int c; + u16 c; u16 x; u16 y; + if (gBattleAnimArgs[4] == 0) { move_anim_8072740(sprite); } else { - - if (gBattleAnimArgs[0] == 0) bank = gBattleAnimPlayerMonIndex; + + if (gBattleAnimArgs[0] == 0) + { + a = sub_8077ABC(gBattleAnimPlayerMonIndex, 2); + b = sub_8077ABC(gBattleAnimPlayerMonIndex, 3); + } else - bank = gBattleAnimEnemyMonIndex; - a = sub_8077ABC(bank, 2); - b = sub_8077ABC(bank, 3); + { + a = sub_8077ABC(gBattleAnimEnemyMonIndex, 2); + b = sub_8077ABC(gBattleAnimEnemyMonIndex, 3); + } sprite->data0 = gBattleAnimArgs[4]; if (gBattleAnimArgs[1] == 0) { @@ -1775,150 +1648,15 @@ void sub_80CC6CC(struct Sprite* sprite) sprite->data1 = x * 16; y = sprite->pos1.y; sprite->data2 = y * 16; - sprite->data3 = ((sprite->data5 - sprite->pos1.x) * 16) / gBattleAnimArgs[4]; - sprite->data4 = ((sprite->data6 - sprite->pos1.y) * 16) / gBattleAnimArgs[4]; + sprite->data3 = (sprite->data5 - sprite->pos1.x) * 16 / gBattleAnimArgs[4]; + sprite->data4 = (sprite->data6 - sprite->pos1.y) * 16 / gBattleAnimArgs[4]; c = sub_80790F0(sprite->data5 - x, sprite->data6 - y); - if(IsContest() != 0) c = c + -0x8000; + if (IsContest()) + c -= 0x8000; sub_8078FDC(sprite, 0, 0x100, 0x100, c); sprite->callback = sub_80CC7D4; } } -#else -__attribute__((naked)) -void sub_80CC6CC(struct Sprite* sprite) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - sub sp, 0x4\n\ - adds r6, r0, 0\n\ - ldr r1, _080CC6E4 @ =gBattleAnimArgs\n\ - movs r2, 0x8\n\ - ldrsh r0, [r1, r2]\n\ - cmp r0, 0\n\ - bne _080CC6E8\n\ - adds r0, r6, 0\n\ - bl move_anim_8072740\n\ - b _080CC7C2\n\ - .align 2, 0\n\ -_080CC6E4: .4byte gBattleAnimArgs\n\ -_080CC6E8:\n\ - movs r3, 0\n\ - ldrsh r0, [r1, r3]\n\ - cmp r0, 0\n\ - bne _080CC6F8\n\ - ldr r4, _080CC6F4 @ =gBattleAnimPlayerMonIndex\n\ - b _080CC6FA\n\ - .align 2, 0\n\ -_080CC6F4: .4byte gBattleAnimPlayerMonIndex\n\ -_080CC6F8:\n\ - ldr r4, _080CC734 @ =gBattleAnimEnemyMonIndex\n\ -_080CC6FA:\n\ - ldrb r0, [r4]\n\ - movs r1, 0x2\n\ - bl sub_8077ABC\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - ldrb r0, [r4]\n\ - movs r1, 0x3\n\ - bl sub_8077ABC\n\ - lsls r0, 24\n\ - lsrs r2, r0, 24\n\ - ldr r0, _080CC738 @ =gBattleAnimArgs\n\ - ldrh r1, [r0, 0x8]\n\ - strh r1, [r6, 0x2E]\n\ - movs r3, 0x2\n\ - ldrsh r1, [r0, r3]\n\ - adds r7, r0, 0\n\ - cmp r1, 0\n\ - bne _080CC73C\n\ - ldrh r0, [r7, 0x4]\n\ - adds r0, r5\n\ - strh r0, [r6, 0x20]\n\ - ldrh r0, [r7, 0x6]\n\ - adds r0, r2\n\ - strh r0, [r6, 0x22]\n\ - strh r5, [r6, 0x38]\n\ - strh r2, [r6, 0x3A]\n\ - b _080CC74C\n\ - .align 2, 0\n\ -_080CC734: .4byte gBattleAnimEnemyMonIndex\n\ -_080CC738: .4byte gBattleAnimArgs\n\ -_080CC73C:\n\ - strh r5, [r6, 0x20]\n\ - strh r2, [r6, 0x22]\n\ - ldrh r0, [r7, 0x4]\n\ - adds r0, r5\n\ - strh r0, [r6, 0x38]\n\ - ldrh r0, [r7, 0x6]\n\ - adds r0, r2\n\ - strh r0, [r6, 0x3A]\n\ -_080CC74C:\n\ - ldrh r4, [r6, 0x20]\n\ - lsls r0, r4, 4\n\ - strh r0, [r6, 0x30]\n\ - ldrh r5, [r6, 0x22]\n\ - lsls r0, r5, 4\n\ - strh r0, [r6, 0x32]\n\ - movs r1, 0x38\n\ - ldrsh r0, [r6, r1]\n\ - movs r2, 0x20\n\ - ldrsh r1, [r6, r2]\n\ - subs r0, r1\n\ - lsls r0, 4\n\ - movs r3, 0x8\n\ - ldrsh r1, [r7, r3]\n\ - bl __divsi3\n\ - strh r0, [r6, 0x34]\n\ - movs r1, 0x3A\n\ - ldrsh r0, [r6, r1]\n\ - movs r2, 0x22\n\ - ldrsh r1, [r6, r2]\n\ - subs r0, r1\n\ - lsls r0, 4\n\ - movs r3, 0x8\n\ - ldrsh r1, [r7, r3]\n\ - bl __divsi3\n\ - strh r0, [r6, 0x36]\n\ - ldrh r0, [r6, 0x38]\n\ - subs r0, r4\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - ldrh r1, [r6, 0x3A]\n\ - subs r1, r5\n\ - lsls r1, 16\n\ - asrs r1, 16\n\ - bl sub_80790F0\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ - bl IsContest\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _080CC7AE\n\ - ldr r1, _080CC7CC @ =0xffff8000\n\ - adds r0, r4, r1\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ -_080CC7AE:\n\ - movs r3, 0x80\n\ - lsls r3, 1\n\ - str r4, [sp]\n\ - adds r0, r6, 0\n\ - movs r1, 0\n\ - adds r2, r3, 0\n\ - bl sub_8078FDC\n\ - ldr r0, _080CC7D0 @ =sub_80CC7D4\n\ - str r0, [r6, 0x1C]\n\ -_080CC7C2:\n\ - add sp, 0x4\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080CC7CC: .4byte 0xffff8000\n\ -_080CC7D0: .4byte sub_80CC7D4\n\ - .syntax divided\n"); -} -#endif void sub_80CC7D4(struct Sprite* sprite) { @@ -2972,14 +2710,17 @@ void sub_80CDFB0(struct Sprite* sprite) sprite->callback = sub_80CE000; } -#ifdef NONMATCHING void sub_80CE000(struct Sprite* sprite) { if (++sprite->data0 >= sprite->data1) { sprite->invisible = !sprite->invisible; - if (!sprite->invisible && !(++sprite->data4 & 1)) - PlaySE12WithPanning(0xC2, sprite->data5); + if (!sprite->invisible) + { + sprite->data4++; + if (!(sprite->data4 & 1)) + PlaySE12WithPanning(SE_W207B, sprite->data5); + } sprite->data0 = 0; if (++sprite->data2 > 1) { @@ -2990,93 +2731,6 @@ void sub_80CE000(struct Sprite* sprite) if (sprite->animEnded && sprite->data1 > 16 && sprite->invisible) move_anim_8072740(sprite); } -#else -__attribute__((naked)) -void sub_80CE000(struct Sprite* sprite) -{ - asm(".syntax unified\n\ - push {r4,lr}\n\ - adds r4, r0, 0\n\ - ldrh r0, [r4, 0x2E]\n\ - adds r0, 0x1\n\ - strh r0, [r4, 0x2E]\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - movs r2, 0x30\n\ - ldrsh r1, [r4, r2]\n\ - cmp r0, r1\n\ - blt _080CE06C\n\ - adds r3, r4, 0\n\ - adds r3, 0x3E\n\ - ldrb r2, [r3]\n\ - lsrs r1, r2, 2\n\ - movs r0, 0x1\n\ - eors r1, r0\n\ - ands r1, r0\n\ - lsls r1, 2\n\ - movs r0, 0x5\n\ - negs r0, r0\n\ - ands r0, r2\n\ - orrs r0, r1\n\ - strb r0, [r3]\n\ - movs r1, 0x4\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _080CE052\n\ - ldrh r0, [r4, 0x36]\n\ - adds r0, 0x1\n\ - strh r0, [r4, 0x36]\n\ - movs r1, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _080CE052\n\ - ldrh r1, [r4, 0x38]\n\ - lsls r1, 24\n\ - asrs r1, 24\n\ - movs r0, 0xC2\n\ - bl PlaySE12WithPanning\n\ -_080CE052:\n\ - movs r1, 0\n\ - strh r1, [r4, 0x2E]\n\ - ldrh r0, [r4, 0x32]\n\ - adds r0, 0x1\n\ - strh r0, [r4, 0x32]\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x1\n\ - ble _080CE06C\n\ - strh r1, [r4, 0x32]\n\ - ldrh r0, [r4, 0x30]\n\ - adds r0, 0x1\n\ - strh r0, [r4, 0x30]\n\ -_080CE06C:\n\ - adds r0, r4, 0\n\ - adds r0, 0x3F\n\ - ldrb r1, [r0]\n\ - movs r0, 0x10\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080CE096\n\ - movs r1, 0x30\n\ - ldrsh r0, [r4, r1]\n\ - cmp r0, 0x10\n\ - ble _080CE096\n\ - adds r0, r4, 0\n\ - adds r0, 0x3E\n\ - ldrb r1, [r0]\n\ - movs r0, 0x4\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080CE096\n\ - adds r0, r4, 0\n\ - bl move_anim_8072740\n\ -_080CE096:\n\ - pop {r4}\n\ - pop {r0}\n\ - bx r0\n\ - .syntax divided\n"); -} -#endif void sub_80CE09C(struct Sprite* sprite) { @@ -3461,131 +3115,31 @@ void sub_80CEA04(struct Sprite* sprite) } // grasswhistle -#ifdef NONMATCHING void sub_80CEA20(u8 taskId) { u16 i; u16 j; - u16 a; u16 index; - if ((index = IndexOfSpritePaletteTag(gUnknown_083D712C[0][0])) != 0xFF) + + index = IndexOfSpritePaletteTag(gUnknown_083D712C[0][0]); + if (index != 0xFF) { index = (index << 4) + 0x100; for (i = 1; i < 6; i++) gPlttBufferFaded[index + i] = gUnknown_083D712C[0][i]; } - for (i = 1; i < 4; i++) + for (j = 1; j < 4; j++) { - a = AllocSpritePalette(gUnknown_083D712C[i][0]); - if (a != 0xFF) + index = AllocSpritePalette(gUnknown_083D712C[j][0]); + if (index != 0xFF) { - a = (a << 4) + 0x100; - for (j = 1; j < 6; j++) - gPlttBufferFaded[a + j] = gUnknown_083D712C[i][j]; + index = (index << 4) + 0x100; + for (i = 1; i < 6; i++) + gPlttBufferFaded[index + i] = gUnknown_083D712C[j][i]; } } DestroyAnimVisualTask(taskId); } -#else -__attribute__((naked)) -void sub_80CEA20(u8 taskId) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r9\n\ - mov r6, r8\n\ - push {r6,r7}\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r9, r0\n\ - ldr r4, _080CEAD0 @ =gUnknown_083D712C\n\ - ldrh r0, [r4]\n\ - bl IndexOfSpritePaletteTag\n\ - lsls r0, 24\n\ - lsrs r3, r0, 24\n\ - cmp r3, 0xFF\n\ - beq _080CEA64\n\ - lsls r0, r3, 20\n\ - movs r1, 0x80\n\ - lsls r1, 17\n\ - adds r0, r1\n\ - lsrs r3, r0, 16\n\ - movs r2, 0x1\n\ - ldr r5, _080CEAD4 @ =gPlttBufferFaded\n\ -_080CEA4C:\n\ - adds r1, r3, r2\n\ - lsls r1, 1\n\ - adds r1, r5\n\ - lsls r0, r2, 1\n\ - adds r0, r4\n\ - ldrh r0, [r0]\n\ - strh r0, [r1]\n\ - adds r0, r2, 0x1\n\ - lsls r0, 16\n\ - lsrs r2, r0, 16\n\ - cmp r2, 0x5\n\ - bls _080CEA4C\n\ -_080CEA64:\n\ - movs r4, 0x1\n\ - ldr r0, _080CEAD0 @ =gUnknown_083D712C\n\ - mov r8, r0\n\ -_080CEA6A:\n\ - lsls r0, r4, 1\n\ - adds r0, r4\n\ - lsls r5, r0, 2\n\ - mov r1, r8\n\ - adds r0, r5, r1\n\ - ldrh r0, [r0]\n\ - bl AllocSpritePalette\n\ - lsls r0, 24\n\ - lsrs r3, r0, 24\n\ - adds r4, 0x1\n\ - mov r12, r4\n\ - cmp r3, 0xFF\n\ - beq _080CEAB2\n\ - lsls r0, r3, 20\n\ - movs r1, 0x80\n\ - lsls r1, 17\n\ - adds r0, r1\n\ - lsrs r3, r0, 16\n\ - movs r2, 0x1\n\ - ldr r7, _080CEAD4 @ =gPlttBufferFaded\n\ - ldr r6, _080CEAD0 @ =gUnknown_083D712C\n\ - adds r4, r5, 0\n\ -_080CEA98:\n\ - adds r1, r3, r2\n\ - lsls r1, 1\n\ - adds r1, r7\n\ - lsls r0, r2, 1\n\ - adds r0, r4\n\ - adds r0, r6\n\ - ldrh r0, [r0]\n\ - strh r0, [r1]\n\ - adds r0, r2, 0x1\n\ - lsls r0, 16\n\ - lsrs r2, r0, 16\n\ - cmp r2, 0x5\n\ - bls _080CEA98\n\ -_080CEAB2:\n\ - mov r1, r12\n\ - lsls r0, r1, 16\n\ - lsrs r4, r0, 16\n\ - cmp r4, 0x3\n\ - bls _080CEA6A\n\ - mov r0, r9\n\ - bl DestroyAnimVisualTask\n\ - pop {r3,r4}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080CEAD0: .4byte gUnknown_083D712C\n\ -_080CEAD4: .4byte gPlttBufferFaded\n\ -.syntax divided\n"); -} -#endif void sub_80CEAD8(u8 taskId) { @@ -4109,13 +3663,13 @@ void sub_80CF6B4(struct Sprite* sprite) } //sonic boom -#ifdef NONMATCHING void sub_80CF6DC(struct Sprite* sprite) { s16 a; s16 b; - s16 c; - if (IsContest() != 0) + u16 c; + + if (IsContest()) gBattleAnimArgs[2] = -gBattleAnimArgs[2]; else if (GetBankSide(gBattleAnimPlayerMonIndex) != 0) { @@ -4128,7 +3682,7 @@ void sub_80CF6DC(struct Sprite* sprite) b = sub_8077ABC(gBattleAnimEnemyMonIndex, 3) + gBattleAnimArgs[3]; c = sub_80790F0(a - sprite->pos1.x, b - sprite->pos1.y); c += 0xF000; - if (IsContest() != 0) + if (IsContest()) c -= 0x6000; sub_8078FDC(sprite, 0, 0x100, 0x100, c); sprite->data0 = gBattleAnimArgs[4]; @@ -4137,131 +3691,6 @@ void sub_80CF6DC(struct Sprite* sprite) sprite->callback = sub_8078B34; oamt_set_x3A_32(sprite, move_anim_8072740); } -#else -__attribute__((naked)) -void sub_80CF6DC(struct Sprite* sprite) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r8\n\ - push {r7}\n\ - sub sp, 0x4\n\ - adds r5, r0, 0\n\ - bl IsContest\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _080CF700\n\ - ldr r1, _080CF6FC @ =gBattleAnimArgs\n\ - ldrh r0, [r1, 0x4]\n\ - negs r0, r0\n\ - strh r0, [r1, 0x4]\n\ - b _080CF722\n\ - .align 2, 0\n\ -_080CF6FC: .4byte gBattleAnimArgs\n\ -_080CF700:\n\ - ldr r0, _080CF7C8 @ =gBattleAnimPlayerMonIndex\n\ - ldrb r0, [r0]\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _080CF722\n\ - ldr r1, _080CF7CC @ =gBattleAnimArgs\n\ - ldrh r0, [r1, 0x4]\n\ - negs r0, r0\n\ - strh r0, [r1, 0x4]\n\ - ldrh r0, [r1, 0x2]\n\ - negs r0, r0\n\ - strh r0, [r1, 0x2]\n\ - ldrh r0, [r1, 0x6]\n\ - negs r0, r0\n\ - strh r0, [r1, 0x6]\n\ -_080CF722:\n\ - adds r0, r5, 0\n\ - movs r1, 0x1\n\ - bl sub_80787B0\n\ - ldr r4, _080CF7D0 @ =gBattleAnimEnemyMonIndex\n\ - ldrb r0, [r4]\n\ - movs r1, 0x2\n\ - bl sub_8077ABC\n\ - lsls r0, 24\n\ - ldr r6, _080CF7CC @ =gBattleAnimArgs\n\ - lsrs r0, 24\n\ - ldrh r1, [r6, 0x4]\n\ - adds r0, r1\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - mov r8, r0\n\ - ldrb r0, [r4]\n\ - movs r1, 0x3\n\ - bl sub_8077ABC\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - ldrh r2, [r6, 0x6]\n\ - adds r0, r2\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - adds r7, r0, 0\n\ - ldrh r1, [r5, 0x20]\n\ - mov r2, r8\n\ - lsls r0, r2, 16\n\ - asrs r0, 16\n\ - subs r0, r1\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - ldrh r2, [r5, 0x22]\n\ - lsls r1, r7, 16\n\ - asrs r1, 16\n\ - subs r1, r2\n\ - lsls r1, 16\n\ - asrs r1, 16\n\ - bl sub_80790F0\n\ - lsls r0, 16\n\ - movs r1, 0xF0\n\ - lsls r1, 24\n\ - adds r0, r1\n\ - lsrs r4, r0, 16\n\ - bl IsContest\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _080CF794\n\ - ldr r2, _080CF7D4 @ =0xffffa000\n\ - adds r0, r4, r2\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ -_080CF794:\n\ - movs r3, 0x80\n\ - lsls r3, 1\n\ - str r4, [sp]\n\ - adds r0, r5, 0\n\ - movs r1, 0\n\ - adds r2, r3, 0\n\ - bl sub_8078FDC\n\ - ldrh r0, [r6, 0x8]\n\ - strh r0, [r5, 0x2E]\n\ - mov r0, r8\n\ - strh r0, [r5, 0x32]\n\ - strh r7, [r5, 0x36]\n\ - ldr r0, _080CF7D8 @ =sub_8078B34\n\ - str r0, [r5, 0x1C]\n\ - ldr r1, _080CF7DC @ =move_anim_8072740\n\ - adds r0, r5, 0\n\ - bl oamt_set_x3A_32\n\ - add sp, 0x4\n\ - pop {r3}\n\ - mov r8, r3\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080CF7C8: .4byte gBattleAnimPlayerMonIndex\n\ -_080CF7CC: .4byte gBattleAnimArgs\n\ -_080CF7D0: .4byte gBattleAnimEnemyMonIndex\n\ -_080CF7D4: .4byte 0xffffa000\n\ -_080CF7D8: .4byte sub_8078B34\n\ -_080CF7DC: .4byte move_anim_8072740\n\ - .syntax divided\n"); -} -#endif void sub_80CF7E0(struct Sprite* sprite) { @@ -4379,3 +3808,691 @@ void sub_80CFA20(u8 taskId) gTasks[taskId].func = sub_80CF9F8; } } + +void sub_80CFB04(u8 taskId) +{ + s16 r9 = 0; + s16 r6 = 0; + s16 sp1 = 0; + s16 sp2 = 0; + s16 r4; + + if (IsContest()) + { + gTasks[taskId].data[4] = 2; + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + if (gBattleAnimArgs[2] & 1) + gBattleAnimArgs[2] &= ~1; + else + gBattleAnimArgs[2] |= 1; + } + else + { + if ((gBanksBySide[gBattleAnimEnemyMonIndex] & 1) == 0) + { + gTasks[taskId].data[4] = 1; + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + if (gBattleAnimArgs[2] & 1) + gBattleAnimArgs[2] &= ~1; + else + gBattleAnimArgs[2] |= 1; + } + } + r6 = gTasks[taskId].data[9] = sub_8077ABC(gBattleAnimPlayerMonIndex, 0); + r9 = gTasks[taskId].data[10] = sub_8077ABC(gBattleAnimPlayerMonIndex, 1); + if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + && b_side_obj__get_some_boolean(gBattleAnimEnemyMonIndex ^ 2)) + { + sub_807A3FC(gBattleAnimEnemyMonIndex, 0, &sp1, &sp2); + } + else + { + sp1 = sub_8077ABC(gBattleAnimEnemyMonIndex, 0); + sp2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 1); + } + sp1 = gTasks[taskId].data[11] = sp1 + gBattleAnimArgs[0]; + sp2 = gTasks[taskId].data[12] = sp2 + gBattleAnimArgs[1]; + if (sp1 >= r6) + r4 = sp1 - r6; + else + r4 = r6 - sp1; + gTasks[taskId].data[5] = sub_81174C4(r4, sub_81174E0(gBattleAnimArgs[2] & ~1)); + gTasks[taskId].data[6] = sub_81174C4(gTasks[taskId].data[5], 0x80); + gTasks[taskId].data[7] = gBattleAnimArgs[2]; + if (sp2 >= r9) + { + r4 = sp2 - r9; + gTasks[taskId].data[8] = sub_81174C4(r4, sub_81174E0(gTasks[taskId].data[5])) & ~1; + } + else + { + r4 = r9 - sp2; + gTasks[taskId].data[8] = sub_81174C4(r4, sub_81174E0(gTasks[taskId].data[5])) | 1; + } + gTasks[taskId].data[3] = gBattleAnimArgs[3]; + if (gBattleAnimArgs[4] & 0x80) + { + gBattleAnimArgs[4] ^= 0x80; + if (gBattleAnimArgs[4] >= 64) + { + u16 var = sub_8079E90(gBattleAnimEnemyMonIndex) + (gBattleAnimArgs[4] - 64); + gTasks[taskId].data[2] = var; + } + else + { + u16 var = sub_8079E90(gBattleAnimEnemyMonIndex) - gBattleAnimArgs[4]; + gTasks[taskId].data[2] = var; + } + } + else + { + if (gBattleAnimArgs[4] >= 64) + { + u16 var = sub_8079E90(gBattleAnimEnemyMonIndex) + (gBattleAnimArgs[4] - 64); + gTasks[taskId].data[2] = var; + } + else + { + u16 var = sub_8079E90(gBattleAnimEnemyMonIndex) - gBattleAnimArgs[4]; + gTasks[taskId].data[2] = var; + } + } + if (gTasks[taskId].data[2] < 3) + gTasks[taskId].data[2] = 3; + gTasks[taskId].func = sub_80CFA20; +} + +void sub_80CFDFC(struct Sprite* sprite) +{ + sub_80787B0(sprite, 0); + sprite->data0 = 0x100 + (IndexOfSpritePaletteTag(gSpriteTemplate_83D75AC.paletteTag) << 4); + sprite->callback = sub_80CFE2C; +} + +#ifdef NONMATCHING +void sub_80CFE2C(struct Sprite* sprite) +{ + u16 r7; + u16* r1; + u16* r2; + int i; + if (++sprite->data1 == 2) + { + sprite->data1 = 0; + r7 = gPlttBufferFaded[sprite->data0 + 8]; + r2 = &gPlttBufferFaded[0x10]; + r1 = &gPlttBufferFaded[sprite->data0 + 9]; + for (i = 7; i >= 0; i--) + { + *r2 = *r1; + r1++; + r2++; + } + gPlttBufferFaded[sprite->data0 + 15] = r7; + if (++sprite->data2 == 0x18) + move_anim_8072740(sprite); + } +} +#else +__attribute__((naked)) +void sub_80CFE2C(struct Sprite* sprite) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + adds r4, r0, 0\n\ + ldrh r0, [r4, 0x30]\n\ + adds r0, 0x1\n\ + strh r0, [r4, 0x30]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x2\n\ + bne _080CFE90\n\ + movs r0, 0\n\ + strh r0, [r4, 0x30]\n\ + ldrh r5, [r4, 0x2E]\n\ + ldr r1, _080CFE98 @ =gPlttBufferFaded\n\ + adds r0, r5, 0\n\ + adds r0, 0x8\n\ + lsls r0, 1\n\ + adds r0, r1\n\ + ldrh r7, [r0]\n\ + adds r6, r1, 0 @puts gPlttBufferFaded in r6\n\ + adds r1, r5, 0\n\ + adds r1, 0x9\n\ + lsls r0, r5, 1\n\ + adds r0, r6 \n\ + adds r2, r0, 0\n\ + adds r2, 0x10\n\ + movs r3, 0x7\n\ + lsls r1, 1\n\ + adds r1, r6 \n\ +_080CFE64:\n\ + ldrh r0, [r1]\n\ + strh r0, [r2]\n\ + adds r1, 0x2\n\ + adds r2, 0x2\n\ + subs r3, 0x1\n\ + cmp r3, 0\n\ + bge _080CFE64\n\ + adds r0, r5, 0\n\ + adds r0, 0xF\n\ + lsls r0, 1\n\ + adds r0, r6\n\ + strh r7, [r0]\n\ + ldrh r0, [r4, 0x32]\n\ + adds r0, 0x1\n\ + strh r0, [r4, 0x32]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x18\n\ + bne _080CFE90\n\ + adds r0, r4, 0\n\ + bl move_anim_8072740\n\ +_080CFE90:\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080CFE98: .4byte gPlttBufferFaded\n\ +.syntax divided\n"); +} +#endif + +void sub_80CFE9C(struct Sprite* sprite) +{ + s16 r6; + s16 r7; + u16 var; + + sub_80787B0(sprite, 1); + r6 = sub_8077ABC(gBattleAnimEnemyMonIndex, 2); + r7 = sub_8077ABC(gBattleAnimEnemyMonIndex, 3) + gBattleAnimArgs[3]; + if (GetBankSide(gBattleAnimPlayerMonIndex) != 0) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + r6 += gBattleAnimArgs[2]; + var = sub_80790F0(r6 - sprite->pos1.x, r7 - sprite->pos1.y); + var += 0xC000; + sub_8078FDC(sprite, 0, 0x100, 0x100, var); + sprite->data0 = gBattleAnimArgs[4]; + sprite->data2 = r6; + sprite->data4 = r7; + sprite->callback = sub_8078C00; + oamt_set_x3A_32(sprite, move_anim_8072740); +} + +void sub_80CFF50(struct Sprite* sprite) +{ + sprite->data2 = -16; + sprite->pos1.y += 8; + sprite->callback = sub_80CFF68; +} + +void sub_80CFF68(struct Sprite* sprite) +{ + sprite->data0 += 0x80; + sprite->pos2.x = sprite->data0 >> 8; + if (GetBankSide(gBattleAnimPlayerMonIndex) == 0) + sprite->pos2.x = -sprite->pos2.x; + sprite->pos2.y = Sin(sprite->data1, sprite->data2); + sprite->data1 += 5; + if (sprite->data1 > 0x7E) + { + sprite->data1 = 0; + sprite->data2 /= 2; + if (++sprite->data3 == 2) + move_anim_8072740(sprite); + } +} + +void sub_80CFFD8(struct Sprite* sprite) +{ + sub_80787B0(sprite, 1); + sprite->data0 = 20; + sprite->data2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 2); + sprite->data4 = sub_8077ABC(gBattleAnimEnemyMonIndex, 3); + sprite->callback = sub_8078B34; + sprite->affineAnimPaused = 1; + oamt_set_x3A_32(sprite, sub_80D0030); +} + +void sub_80D0030(struct Sprite* sprite) +{ + int i; + u16 rand; + s16* ptr; + PlaySE12WithPanning(0xA6, sub_8076F98(0x3F)); + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + ptr = &sprite->data7; + for (i = 0; i < 8; i++) { + ptr[i - 7] = 0; + } + rand = Random(); + sprite->data6 = 0xFFF4 - (rand & 7); + rand = Random(); + sprite->data7 = (rand % 0xA0) + 0xA0; + sprite->callback = sub_80D00B4; + sprite->affineAnimPaused = 0; +} + +void sub_80D00B4(struct Sprite* sprite) +{ + sprite->data0 += sprite->data7; + sprite->pos2.x = sprite->data0 >> 8; + if (sprite->data7 & 1) + sprite->pos2.x = -sprite->pos2.x; + sprite->pos2.y = Sin(sprite->data1, sprite->data6); + sprite->data1 += 8; + if (sprite->data1 > 0x7E) + { + sprite->data1 = 0; + sprite->data2 /= 2; + if (++sprite->data3 == 1) + move_anim_8072740(sprite); + } +} + +void sub_80D0118(struct Sprite* sprite) +{ + sub_80787B0(sprite, 0); + if (GetBankSide(gBattleAnimPlayerMonIndex) == 0) + sprite->pos1.y += 16; + sprite->data0 = gBattleAnimArgs[4]; + sprite->data1 = gBattleAnimArgs[2]; + sprite->data2 = gBattleAnimArgs[5]; + sprite->data3 = gBattleAnimArgs[6]; + sprite->data4 = gBattleAnimArgs[3]; + sprite->callback = sub_8078114; + oamt_set_x3A_32(sprite, move_anim_8072740); + sprite->callback(sprite); +} + +void sub_80D0178(struct Sprite* sprite) +{ + s16 r7 = 32; + s16 r4 = -32; + s16 r8 = 16; + s16 r6 = -16; + if (gBattleAnimArgs[0] != 0) + { + r7 = r4; + r4 = 32; + r8 = r6; + r6 = 16; + StartSpriteAnim(sprite, 1); + } + sprite->pos1.x += r7; + sprite->pos1.y += r4; + sprite->data0 = 6; + sprite->data2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 2) + r8; + sprite->data4 = sub_8077ABC(gBattleAnimEnemyMonIndex, 3) + r6; + sprite->callback = sub_8078B34; + oamt_set_x3A_32(sprite, sub_80D020C); +} + +void sub_80D020C(struct Sprite* sprite) +{ + if (sprite->animEnded == 1) + move_anim_8072740(sprite); +} + +void sub_80D0228(struct Sprite* sprite) +{ + s16 r8 = 32; + s16 r4 = -32; + s16 r9 = 16; + s16 r6 = -16; + if (gBattleAnimArgs[0] != 0) + { + r8 = r4; + r4 = 32; + r9 = r6; + r6 = 16; + StartSpriteAnim(sprite, gBattleAnimArgs[0]); + } + sprite->pos1.x += r8; + sprite->pos1.y += r4; + sprite->data0 = 6; + sprite->data1 = sprite->pos1.x; + sprite->data2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 2) + r9; + sprite->data3 = sprite->pos1.y; + sprite->data4 = sub_8077ABC(gBattleAnimEnemyMonIndex, 3) + r6; + obj_translate_based_on_private_1_2_3_4(sprite); + sprite->data5 = gBattleAnimArgs[0]; + sprite->data6 = sprite->data0; + sprite->callback = sub_80D02D0; +} + +void sub_80D02D0(struct Sprite* sprite) +{ + if (sub_8078B5C(sprite) && sprite->animEnded == 1) + { + SeekSpriteAnim(sprite, 0); + sprite->animPaused = 1; + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 2; + sprite->pos2.y = -2; + sprite->data0 = sprite->data6; + sprite->data1 ^= 1; + sprite->data2 ^= 1; + sprite->data4 = 0; + sprite->data3 = 0; + sprite->callback = sub_80D0344; + } +} + +void sub_80D0344(struct Sprite* sprite) +{ + if (sprite->data3) + { + sprite->pos2.x = -sprite->pos2.x; + sprite->pos2.y = -sprite->pos2.y; + } + sprite->data3 ^= 1; + if (++sprite->data4 == 0x33) + { + sprite->pos2.y = 0; + sprite->pos2.x = 0; + sprite->data4 = 0; + sprite->data3 = 0; + sprite->animPaused = 0; + StartSpriteAnim(sprite, sprite->data5 ^ 1); + sprite->callback = sub_80D03A8; + } +} + +void sub_80D03A8(struct Sprite* sprite) +{ + if (sub_8078B5C(sprite) != 0) + move_anim_8072740(sprite); +} + +void sub_80D03C4(u8 taskId) +{ + u8 spriteId = obj_id_for_side_relative_to_move(1); + sub_8078E70(spriteId, 1); + obj_id_set_rotscale(spriteId, 0xD0, 0xD0, 0); + sub_8079108(gSprites[spriteId].oam.paletteNum + 16, 0); + gTasks[taskId].data[0] = 0x50; + gTasks[taskId].func = sub_80D0428; +} + +void sub_80D0428(u8 taskId) +{ + if (--gTasks[taskId].data[0] == -1) + { + u8 spriteId = obj_id_for_side_relative_to_move(1); + sub_8078F40(spriteId); + sub_8079108(gSprites[spriteId].oam.paletteNum + 16, 1); + DestroyAnimVisualTask(taskId); + } +} + +void sub_80D0488(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + u8 spriteId = obj_id_for_side_relative_to_move(0); + task->data[0] = spriteId; + sub_8078E70(spriteId, 0); + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 0; + task->data[4] = 0x100; + task->data[5] = 0; + task->data[6] = 0; + task->data[7] = sub_8079E90(gBattleAnimPlayerMonIndex); + task->func = sub_80D04E0; +} + +void sub_80D04E0(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + switch (task->data[1]) + { + case 0: + if (task->data[2] == 0 || task->data[2] == 3 || task->data[2] == 6) + sub_80D0614(task, taskId); + task->data[2]++; + task->data[4] += 0x28; + obj_id_set_rotscale(task->data[0], task->data[4], task->data[4], 0); + sub_8079A64(task->data[0]); + if (task->data[2] == 32) + { + task->data[5]++; + task->data[1]++; + } + break; + case 1: + if (task->data[6] == 0) + { + if (task->data[5] == 3) + { + task->data[2] = 0; + task->data[1] = 3; + } + else + { + task->data[2] = 0; + task->data[3] = 0; + task->data[4] = 0x100; + obj_id_set_rotscale(task->data[0], task->data[4], task->data[4], 0); + sub_8079A64(task->data[0]); + task->data[1] = 2; + } + } + break; + case 2: + task->data[1] = 0; + break; + case 3: + if (++task->data[2] > 32) + { + task->data[2] = 0; + task->data[1]++; + } + break; + case 4: + task->data[2] += 2; + task->data[4] -= 0x50; + obj_id_set_rotscale(task->data[0], task->data[4], task->data[4], 0); + sub_8079A64(task->data[0]); + if (task->data[2] == 32) + { + task->data[2] = 0; + task->data[1]++; + } + break; + case 5: + sub_8078F40(task->data[0]); + gSprites[task->data[15]].pos2.y = 0; + DestroyAnimVisualTask(taskId); + break; + } +} + +#ifdef NONMATCHING +void sub_80D0614(struct Task* task, u8 taskId) +{ + s16 r8 = duplicate_obj_of_side_rel2move_in_transparent_mode(0); + if (r8 >= 0) + { + u8 r6 = AllocOamMatrix(); + if (r6 == 0xFF) + obj_delete_but_dont_free_vram(&gSprites[r8]); + else + { + gSprites[r8].oam.objMode = 1; + gSprites[r8].oam.affineMode = 3; + gSprites[r8].affineAnimPaused = 1; + gSprites[r8].oam.matrixNum = r6; + gSprites[r8].subpriority = task->data[7] - task->data[3]; + task->data[3]++; + task->data[6]++; + gSprites[r8].data0 = 16; + gSprites[r8].data1 = taskId; + gSprites[r8].data2 = 6; + gSprites[r8].callback = sub_80D0704; + obj_id_set_rotscale(r8, task->data[4], task->data[4], 0); + gSprites[r8].oam.affineMode = 1; + CalcCenterToCornerVec(&gSprites[r8], gSprites[r8].oam.shape, gSprites[r8].oam.size, gSprites[r8].oam.affineMode); + } + } +} +#else +__attribute__((naked)) +void sub_80D0614(struct Task* task, u8 taskId) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r9\n\ + mov r6, r8\n\ + push {r6,r7}\n\ + adds r7, r0, 0 @r7 is task\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + mov r9, r1 @r9 is taskId\n\ + movs r0, 0\n\ + bl duplicate_obj_of_side_rel2move_in_transparent_mode\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + mov r8, r0\n\ + lsls r0, 16\n\ + asrs r4, r0, 16\n\ + cmp r4, 0\n\ + blt _080D06EE @jump to bottom\n\ + bl AllocOamMatrix\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ + cmp r6, 0xFF\n\ + bne _080D0658\n\ + lsls r0, r4, 4\n\ + adds r0, r4\n\ + lsls r0, 2\n\ + ldr r1, _080D0654 @ =gSprites\n\ + adds r0, r1\n\ + bl obj_delete_but_dont_free_vram\n\ + b _080D06EE @ jump to bottom\n\ + .align 2, 0\n\ +_080D0654: .4byte gSprites\n\ +_080D0658:\n\ + ldr r5, _080D06FC @ =gSprites\n\ + lsls r3, r4, 4\n\ + adds r3, r4\n\ + lsls r3, 2\n\ + adds r4, r3, r5\n\ + ldrb r1, [r4, 0x1]\n\ + movs r0, 0xD\n\ + negs r0, r0\n\ + ands r0, r1\n\ + movs r1, 0x4\n\ + orrs r0, r1\n\ + movs r1, 0x3\n\ + orrs r0, r1\n\ + strb r0, [r4, 0x1]\n\ + adds r2, r4, 0\n\ + adds r2, 0x2C\n\ + ldrb r0, [r2]\n\ + movs r1, 0x80\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ + movs r0, 0x1F\n\ + ands r6, r0\n\ + lsls r2, r6, 1\n\ + ldrb r1, [r4, 0x3]\n\ + movs r0, 0x3F\n\ + negs r0, r0\n\ + ands r0, r1\n\ + orrs r0, r2\n\ + strb r0, [r4, 0x3]\n\ + ldrb r0, [r7, 0x16]\n\ + ldrb r1, [r7, 0xE]\n\ + subs r0, r1\n\ + adds r1, r4, 0\n\ + adds r1, 0x43\n\ + strb r0, [r1]\n\ + ldrh r0, [r7, 0xE]\n\ + adds r0, 0x1\n\ + strh r0, [r7, 0xE]\n\ + ldrh r0, [r7, 0x14]\n\ + adds r0, 0x1\n\ + strh r0, [r7, 0x14]\n\ + movs r0, 0x10\n\ + strh r0, [r4, 0x2E]\n\ + mov r0, r9\n\ + strh r0, [r4, 0x30]\n\ + movs r0, 0x6\n\ + strh r0, [r4, 0x32]\n\ + adds r5, 0x1C\n\ + adds r3, r5\n\ + ldr r0, _080D0700 @ =sub_80D0704\n\ + str r0, [r3]\n\ + mov r1, r8 @duplicate_obj_of_side_rel2move_in_transparent_mode(0)\n\ + lsls r0, r1, 24\n\ + lsrs r0, 24\n\ + movs r1, 0x10\n\ + ldrsh r2, [r7, r1]\n\ + adds r1, r2, 0\n\ + movs r3, 0\n\ + bl obj_id_set_rotscale\n\ + ldrb r0, [r4, 0x1]\n\ + movs r3, 0x4\n\ + negs r3, r3\n\ + ands r3, r0\n\ + movs r0, 0x1\n\ + orrs r3, r0\n\ + strb r3, [r4, 0x1]\n\ + lsrs r1, r3, 6\n\ + ldrb r2, [r4, 0x3]\n\ + lsrs r2, 6\n\ + lsls r3, 30\n\ + lsrs r3, 30\n\ + adds r0, r4, 0\n\ + bl CalcCenterToCornerVec\n\ +_080D06EE:\n\ + pop {r3,r4}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080D06FC: .4byte gSprites\n\ +_080D0700: .4byte sub_80D0704\n\ +.syntax divided\n"); +} +#endif + +void sub_80D0704(struct Sprite* sprite) +{ + if (--sprite->data0 == 0) + { + gTasks[sprite->data1].data[sprite->data2]--; + FreeOamMatrix(sprite->oam.matrixNum); + obj_delete_but_dont_free_vram(sprite); + } +} + +void sub_80D074C(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + if (gBattleAnimArgs[1] == 0) + DestroyAnimVisualTask(taskId); + else + { + u8 spriteId = obj_id_for_side_relative_to_move(gBattleAnimArgs[0]); + task->data[0] = spriteId; + task->data[1] = 0; + task->data[2] = gBattleAnimArgs[1]; + task->data[3] = 0; + task->data[4] = 0; + sub_80798F4(task, spriteId, &gUnknown_083D76F4); + task->func = sub_80D07AC; + } +} + + +
\ No newline at end of file |