diff options
-rw-r--r-- | asm/battle_anim_812C144.s | 4783 | ||||
-rw-r--r-- | src/battle/battle_anim_812C144.c | 1589 | ||||
-rw-r--r-- | src/contest_effect.c | 26 |
3 files changed, 1602 insertions, 4796 deletions
diff --git a/asm/battle_anim_812C144.s b/asm/battle_anim_812C144.s index 4fea7049b..8a062e352 100644 --- a/asm/battle_anim_812C144.s +++ b/asm/battle_anim_812C144.s @@ -5,4789 +5,6 @@ .text - thumb_func_start sub_812F474 -sub_812F474: @ 812F474 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x14 - lsls r0, 24 - lsrs r4, r0, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r1, _0812F4A8 @ =gTasks - adds r6, r0, r1 - ldrb r0, [r6, 0x12] - bl GetBattlerPosition_permutated - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0812F4B4 - ldr r0, _0812F4AC @ =gBattle_BG1_X - ldrh r0, [r0] - str r0, [sp, 0x4] - ldr r0, _0812F4B0 @ =gBattle_BG1_Y - b _0812F4BC - .align 2, 0 -_0812F4A8: .4byte gTasks -_0812F4AC: .4byte gBattle_BG1_X -_0812F4B0: .4byte gBattle_BG1_Y -_0812F4B4: - ldr r0, _0812F4D4 @ =gBattle_BG2_X - ldrh r0, [r0] - str r0, [sp, 0x4] - ldr r0, _0812F4D8 @ =gBattle_BG2_Y -_0812F4BC: - ldrh r0, [r0] - str r0, [sp, 0x8] - movs r1, 0x8 - ldrsh r0, [r6, r1] - cmp r0, 0x1 - bne _0812F4CA - b _0812F6A6 -_0812F4CA: - cmp r0, 0x1 - bgt _0812F4DC - cmp r0, 0 - beq _0812F4EA - b _0812F712 - .align 2, 0 -_0812F4D4: .4byte gBattle_BG2_X -_0812F4D8: .4byte gBattle_BG2_Y -_0812F4DC: - cmp r0, 0x2 - bne _0812F4E2 - b _0812F6C4 -_0812F4E2: - cmp r0, 0x3 - bne _0812F4E8 - b _0812F70C -_0812F4E8: - b _0812F712 -_0812F4EA: - movs r2, 0x24 - ldrsh r0, [r6, r2] - lsls r0, 17 - lsrs r5, r0, 16 - movs r3, 0 - str r3, [sp] - mov r9, r3 - movs r4, 0 - ldrh r0, [r6, 0xA] - adds r0, 0x2 - movs r1, 0xFF - ands r0, r1 - strh r0, [r6, 0xA] - ldrh r7, [r6, 0xA] - mov r8, r7 - movs r0, 0x14 - ldrsh r1, [r6, r0] - movs r0, 0xFC - lsls r0, 3 - bl __divsi3 - strh r0, [r6, 0x1A] - movs r1, 0x16 - ldrsh r0, [r6, r1] - lsls r0, 1 - movs r2, 0x1A - ldrsh r1, [r6, r2] - bl __divsi3 - negs r0, r0 - strh r0, [r6, 0x1C] - ldrh r0, [r6, 0x16] - strh r0, [r6, 0x1E] - lsls r0, 16 - asrs r0, 21 - lsls r0, 16 - lsrs r7, r0, 16 - strh r7, [r6, 0x20] - ldrh r2, [r6, 0x24] - lsls r3, r2, 16 - mov r12, r3 - asrs r1, r3, 16 - movs r3, 0x22 - ldrsh r0, [r6, r3] - cmp r1, r0 - ble _0812F60A - ldr r0, _0812F660 @ =gScanlineEffect - mov r10, r0 - ldr r1, [sp, 0x4] - lsls r0, r1, 16 - asrs r0, 16 - str r0, [sp, 0x10] - ldr r2, [sp, 0x8] - lsls r0, r2, 16 - asrs r0, 16 - str r0, [sp, 0xC] -_0812F55A: - lsls r5, 16 - asrs r5, 16 - adds r2, r5, 0x1 - lsls r2, 1 - mov r3, r10 - ldrb r1, [r3, 0x14] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 7 - adds r2, r0 - ldr r0, _0812F664 @ =gScanlineEffectRegBuffers - adds r2, r0 - lsls r4, 16 - asrs r4, 16 - mov r1, r9 - lsls r0, r1, 16 - asrs r0, 16 - subs r0, r4, r0 - ldr r3, [sp, 0xC] - adds r0, r3, r0 - strh r0, [r2] - lsls r3, r5, 1 - mov r0, r10 - ldrb r1, [r0, 0x14] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 7 - adds r3, r0 - ldr r1, _0812F664 @ =gScanlineEffectRegBuffers - adds r3, r1 - lsls r1, r7, 16 - asrs r1, 16 - ldr r2, [sp, 0x10] - adds r1, r2, r1 - mov r7, r8 - lsls r2, r7, 16 - asrs r2, 16 - lsls r0, r2, 1 - ldr r7, _0812F668 @ =gSineTable - adds r0, r7 - ldrh r0, [r0] - lsls r0, 16 - asrs r0, 21 - adds r1, r0 - strh r1, [r3] - adds r2, 0xA - mov r8, r2 - movs r0, 0xFF - mov r1, r8 - ands r1, r0 - mov r8, r1 - ldrh r0, [r6, 0x1C] - ldrh r2, [r6, 0x1E] - adds r0, r2 - strh r0, [r6, 0x1E] - lsls r0, 16 - asrs r0, 21 - lsls r0, 16 - lsrs r7, r0, 16 - strh r7, [r6, 0x20] - adds r4, 0x1 - lsls r4, 16 - lsrs r4, 16 - subs r5, 0x2 - lsls r5, 16 - lsrs r5, 16 - ldr r3, [sp] - lsls r0, r3, 16 - asrs r0, 16 - ldrh r1, [r6, 0x14] - adds r0, r1 - lsls r0, 16 - lsrs r2, r0, 16 - str r2, [sp] - asrs r0, 21 - lsls r0, 16 - lsrs r0, 16 - mov r9, r0 - ldr r0, _0812F66C @ =0xffff0000 - add r0, r12 - lsrs r2, r0, 16 - lsls r3, r2, 16 - mov r12, r3 - asrs r1, r3, 16 - movs r3, 0x22 - ldrsh r0, [r6, r3] - cmp r1, r0 - bgt _0812F55A -_0812F60A: - lsls r1, r2, 17 - cmp r1, 0 - blt _0812F636 - ldr r4, _0812F664 @ =gScanlineEffectRegBuffers - ldr r7, [sp, 0x4] - lsls r0, r7, 16 - asrs r0, 16 - adds r3, r0, 0 - adds r3, 0xF0 - movs r0, 0xF0 - lsls r0, 3 - adds r5, r4, r0 -_0812F622: - asrs r2, r1, 16 - lsls r1, r2, 1 - adds r0, r1, r4 - strh r3, [r0] - adds r1, r5 - strh r3, [r1] - subs r2, 0x2 - lsls r1, r2, 16 - cmp r1, 0 - bge _0812F622 -_0812F636: - ldrh r0, [r6, 0x14] - adds r0, 0x1 - strh r0, [r6, 0x14] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3F - ble _0812F69C - movs r0, 0x40 - strh r0, [r6, 0x14] - ldrh r0, [r6, 0xC] - adds r0, 0x1 - strh r0, [r6, 0xC] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0812F670 - ldrh r0, [r6, 0xE] - subs r0, 0x1 - strh r0, [r6, 0xE] - b _0812F676 - .align 2, 0 -_0812F660: .4byte gScanlineEffect -_0812F664: .4byte gScanlineEffectRegBuffers -_0812F668: .4byte gSineTable -_0812F66C: .4byte 0xffff0000 -_0812F670: - ldrh r0, [r6, 0x10] - adds r0, 0x1 - strh r0, [r6, 0x10] -_0812F676: - ldr r0, _0812F698 @ =REG_BLDALPHA - ldrh r1, [r6, 0x10] - lsls r1, 8 - ldrh r2, [r6, 0xE] - orrs r1, r2 - strh r1, [r0] - movs r2, 0xE - ldrsh r1, [r6, r2] - cmp r1, 0 - bne _0812F712 - movs r3, 0x10 - ldrsh r0, [r6, r3] - cmp r0, 0x10 - bne _0812F712 - strh r1, [r6, 0xC] - strh r1, [r6, 0xE] - b _0812F700 - .align 2, 0 -_0812F698: .4byte REG_BLDALPHA -_0812F69C: - ldrh r0, [r6, 0x18] - ldrh r7, [r6, 0x16] - adds r0, r7 - strh r0, [r6, 0x16] - b _0812F712 -_0812F6A6: - ldrh r0, [r6, 0xC] - adds r0, 0x1 - strh r0, [r6, 0xC] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xC - ble _0812F712 - ldr r1, _0812F6C0 @ =gScanlineEffect - movs r0, 0x3 - strb r0, [r1, 0x15] - movs r0, 0 - strh r0, [r6, 0xC] - b _0812F700 - .align 2, 0 -_0812F6C0: .4byte gScanlineEffect -_0812F6C4: - ldrh r0, [r6, 0xC] - adds r0, 0x1 - strh r0, [r6, 0xC] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0812F6DA - ldrh r0, [r6, 0xE] - adds r0, 0x1 - strh r0, [r6, 0xE] - b _0812F6E0 -_0812F6DA: - ldrh r0, [r6, 0x10] - subs r0, 0x1 - strh r0, [r6, 0x10] -_0812F6E0: - ldr r2, _0812F708 @ =REG_BLDALPHA - ldrh r0, [r6, 0x10] - lsls r0, 8 - ldrh r1, [r6, 0xE] - orrs r0, r1 - strh r0, [r2] - movs r1, 0xE - ldrsh r0, [r6, r1] - cmp r0, 0x10 - bne _0812F712 - movs r2, 0x10 - ldrsh r0, [r6, r2] - cmp r0, 0 - bne _0812F712 - strh r0, [r6, 0xC] - strh r0, [r6, 0xE] -_0812F700: - ldrh r0, [r6, 0x8] - adds r0, 0x1 - strh r0, [r6, 0x8] - b _0812F712 - .align 2, 0 -_0812F708: .4byte REG_BLDALPHA -_0812F70C: - adds r0, r4, 0 - bl DestroyAnimVisualTask -_0812F712: - add sp, 0x14 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_812F474 - - thumb_func_start sub_812F724 -sub_812F724: @ 812F724 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - ldr r0, _0812F75C @ =gTasks - adds r4, r0 - movs r0, 0 - strh r0, [r4, 0x8] - ldr r0, _0812F760 @ =gBattleAnimArgs - ldrb r0, [r0] - bl GetAnimBattlerSpriteId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - strh r1, [r4, 0x26] - ldr r2, _0812F764 @ =gUnknown_08402750 - adds r0, r4, 0 - bl sub_80798F4 - ldr r0, _0812F768 @ =sub_812F76C - str r0, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812F75C: .4byte gTasks -_0812F760: .4byte gBattleAnimArgs -_0812F764: .4byte gUnknown_08402750 -_0812F768: .4byte sub_812F76C - thumb_func_end sub_812F724 - - thumb_func_start sub_812F76C -sub_812F76C: @ 812F76C - push {r4-r6,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r2, _0812F7C4 @ =gTasks - adds r3, r0, r2 - ldrh r0, [r3, 0x8] - adds r1, r0, 0x1 - movs r5, 0 - strh r1, [r3, 0x8] - subs r0, 0x14 - lsls r0, 16 - lsrs r0, 16 - adds r6, r2, 0 - cmp r0, 0x16 - bhi _0812F7D0 - ldrh r0, [r3, 0xA] - adds r0, 0x1 - strh r0, [r3, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _0812F7E0 - strh r5, [r3, 0xA] - ldrh r0, [r3, 0xC] - adds r0, 0x1 - strh r0, [r3, 0xC] - movs r5, 0x1 - ands r0, r5 - cmp r0, 0 - bne _0812F7D0 - ldr r2, _0812F7C8 @ =gSprites - movs r0, 0x26 - ldrsh r1, [r3, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldr r1, _0812F7CC @ =0x0000ffff - strh r1, [r0, 0x24] - b _0812F7E0 - .align 2, 0 -_0812F7C4: .4byte gTasks -_0812F7C8: .4byte gSprites -_0812F7CC: .4byte 0x0000ffff -_0812F7D0: - ldr r2, _0812F800 @ =gSprites - movs r0, 0x26 - ldrsh r1, [r3, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - strh r5, [r0, 0x24] -_0812F7E0: - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r6 - bl sub_807992C - lsls r0, 24 - cmp r0, 0 - bne _0812F7F8 - adds r0, r4, 0 - bl DestroyAnimVisualTask -_0812F7F8: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0812F800: .4byte gSprites - thumb_func_end sub_812F76C - - thumb_func_start sub_812F804 -sub_812F804: @ 812F804 - push {r4-r6,lr} - mov r6, r8 - push {r6} - mov r8, r0 - adds r5, r2, 0 - adds r0, r3, 0 - ldr r4, [sp, 0x14] - ldr r6, [sp, 0x18] - lsls r1, 16 - lsrs r1, 16 - lsls r5, 16 - lsrs r5, 16 - lsls r4, 16 - lsrs r4, 16 - lsls r6, 16 - lsrs r6, 16 - mov r2, r8 - strh r1, [r2, 0x20] - strh r5, [r2, 0x22] - lsls r1, 16 - asrs r1, 16 - lsls r2, r1, 4 - mov r3, r8 - strh r2, [r3, 0x36] - lsls r5, 16 - asrs r5, 16 - lsls r2, r5, 4 - strh r2, [r3, 0x38] - lsls r0, 16 - asrs r0, 16 - subs r0, r1 - lsls r0, 4 - adds r1, r6, 0 - bl __divsi3 - mov r1, r8 - strh r0, [r1, 0x3A] - lsls r4, 16 - asrs r4, 16 - subs r4, r5 - lsls r4, 4 - adds r0, r4, 0 - adds r1, r6, 0 - bl __divsi3 - mov r2, r8 - strh r0, [r2, 0x3C] - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_812F804 - - thumb_func_start sub_812F86C -sub_812F86C: @ 812F86C - ldrh r1, [r0, 0x3A] - ldrh r2, [r0, 0x36] - adds r1, r2 - strh r1, [r0, 0x36] - ldrh r2, [r0, 0x3C] - ldrh r3, [r0, 0x38] - adds r2, r3 - strh r2, [r0, 0x38] - lsls r1, 16 - asrs r1, 20 - strh r1, [r0, 0x20] - lsls r2, 16 - asrs r2, 20 - strh r2, [r0, 0x22] - bx lr - thumb_func_end sub_812F86C - - thumb_func_start sub_812F88C -sub_812F88C: @ 812F88C - push {r4-r6,lr} - sub sp, 0x8 - adds r4, r0, 0 - ldrh r6, [r4, 0x20] - ldrh r5, [r4, 0x22] - bl sub_8078650 - ldr r0, _0812F8D4 @ =gBattleAnimArgs - ldrb r1, [r0] - adds r0, r4, 0 - bl StartSpriteAffineAnim - movs r0, 0x20 - ldrsh r1, [r4, r0] - movs r0, 0x22 - ldrsh r2, [r4, r0] - lsls r6, 16 - asrs r6, 16 - lsls r5, 16 - asrs r5, 16 - str r5, [sp] - movs r0, 0x40 - str r0, [sp, 0x4] - adds r0, r4, 0 - adds r3, r6, 0 - bl sub_812F804 - movs r0, 0 - strh r0, [r4, 0x2E] - ldr r0, _0812F8D8 @ =sub_812F8DC - str r0, [r4, 0x1C] - add sp, 0x8 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0812F8D4: .4byte gBattleAnimArgs -_0812F8D8: .4byte sub_812F8DC - thumb_func_end sub_812F88C - - thumb_func_start sub_812F8DC -sub_812F8DC: @ 812F8DC - push {r4,r5,lr} - adds r5, r0, 0 - ldrh r0, [r5, 0x2E] - adds r0, 0x1 - strh r0, [r5, 0x2E] - movs r0, 0x2E - ldrsh r4, [r5, r0] - lsls r4, 3 - movs r0, 0xFF - ands r4, r0 - adds r0, r5, 0 - bl sub_812F86C - adds r0, r4, 0 - movs r1, 0x8 - bl Sin - strh r0, [r5, 0x26] - movs r1, 0x2E - ldrsh r0, [r5, r1] - cmp r0, 0x3A - ble _0812F942 - ldrh r0, [r5, 0x30] - adds r0, 0x1 - strh r0, [r5, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _0812F942 - movs r0, 0 - strh r0, [r5, 0x30] - ldrh r1, [r5, 0x32] - adds r1, 0x1 - strh r1, [r5, 0x32] - movs r0, 0x1 - ands r1, r0 - adds r3, r5, 0 - adds r3, 0x3E - lsls r1, 2 - ldrb r2, [r3] - subs r0, 0x6 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - movs r1, 0x32 - ldrsh r0, [r5, r1] - cmp r0, 0x3 - ble _0812F942 - adds r0, r5, 0 - bl move_anim_8074EE0 -_0812F942: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_812F8DC - - thumb_func_start sub_812F948 -sub_812F948: @ 812F948 - push {r4-r6,lr} - adds r5, r0, 0 - ldr r6, _0812F9A0 @ =gBattleAnimArgs - ldrh r0, [r6, 0x6] - strh r0, [r5, 0x2E] - ldrb r1, [r6] - adds r0, r5, 0 - bl StartSpriteAffineAnim - ldr r0, _0812F9A4 @ =gAnimBankTarget - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _0812F96E - ldrh r0, [r6, 0x2] - negs r0, r0 - strh r0, [r6, 0x2] -_0812F96E: - ldr r4, _0812F9A8 @ =gAnimBankAttacker - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r6, 0x2] - adds r0, r1 - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r6, [r6, 0x4] - adds r0, r6 - strh r0, [r5, 0x22] - ldr r0, _0812F9AC @ =sub_80DA48C - str r0, [r5, 0x1C] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0812F9A0: .4byte gBattleAnimArgs -_0812F9A4: .4byte gAnimBankTarget -_0812F9A8: .4byte gAnimBankAttacker -_0812F9AC: .4byte sub_80DA48C - thumb_func_end sub_812F948 - - thumb_func_start sub_812F9B0 -sub_812F9B0: @ 812F9B0 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r5, r0, 24 - movs r7, 0 - ldr r2, _0812FA00 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r3, r0, r2 - ldrh r0, [r3, 0x8] - subs r0, 0x1 - strh r0, [r3, 0x8] - movs r1, 0x14 - ldrsh r0, [r3, r1] - movs r1, 0x80 - lsls r1, 8 - ands r0, r1 - mov r8, r2 - cmp r0, 0 - beq _0812FA32 - ldrh r0, [r3, 0xA] - subs r0, 0x1 - strh r0, [r3, 0xA] - lsls r0, 16 - asrs r0, 16 - movs r1, 0x1 - negs r1, r1 - cmp r0, r1 - bne _0812FA32 - movs r2, 0x1A - ldrsh r0, [r3, r2] - cmp r0, 0 - bne _0812FA04 - ldrh r0, [r3, 0x10] - strh r0, [r3, 0x1A] - negs r0, r0 - strh r0, [r3, 0x10] - b _0812FA06 - .align 2, 0 -_0812FA00: .4byte gTasks -_0812FA04: - strh r7, [r3, 0x1A] -_0812FA06: - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - mov r2, r8 - adds r1, r0, r2 - movs r2, 0x1C - ldrsh r0, [r1, r2] - cmp r0, 0 - bne _0812FA22 - ldrh r0, [r1, 0x12] - strh r0, [r1, 0x1C] - negs r0, r0 - strh r0, [r1, 0x12] - b _0812FA26 -_0812FA22: - movs r0, 0 - strh r0, [r1, 0x1C] -_0812FA26: - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - add r0, r8 - ldrh r1, [r0, 0x22] - strh r1, [r0, 0xA] -_0812FA32: - lsls r2, r5, 2 - adds r0, r2, r5 - lsls r0, 3 - mov r1, r8 - adds r4, r0, r1 - ldrh r6, [r4, 0x16] - ldrh r7, [r4, 0x18] - movs r1, 0xC - ldrsh r0, [r4, r1] - movs r1, 0x80 - lsls r1, 8 - ands r0, r1 - mov r12, r2 - cmp r0, 0 - beq _0812FA70 - ldr r3, _0812FA6C @ =gSprites - movs r2, 0x26 - ldrsh r0, [r4, r2] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r3 - lsrs r2, r6, 8 - ldrh r0, [r4, 0x1A] - subs r0, r2 - strh r0, [r1, 0x24] - adds r2, r3, 0 - b _0812FA86 - .align 2, 0 -_0812FA6C: .4byte gSprites -_0812FA70: - ldr r2, _0812FAB4 @ =gSprites - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - lsrs r1, r6, 8 - ldrh r4, [r4, 0x1A] - adds r1, r4 - strh r1, [r0, 0x24] -_0812FA86: - mov r1, r12 - adds r0, r1, r5 - lsls r0, 3 - mov r1, r8 - adds r4, r0, r1 - movs r1, 0xE - ldrsh r0, [r4, r1] - movs r1, 0x80 - lsls r1, 8 - ands r0, r1 - cmp r0, 0 - beq _0812FAB8 - movs r1, 0x26 - ldrsh r0, [r4, r1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - lsrs r2, r7, 8 - ldrh r0, [r4, 0x1C] - subs r0, r2 - b _0812FACA - .align 2, 0 -_0812FAB4: .4byte gSprites -_0812FAB8: - movs r1, 0x26 - ldrsh r0, [r4, r1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - lsrs r0, r7, 8 - ldrh r4, [r4, 0x1C] - adds r0, r4 -_0812FACA: - strh r0, [r1, 0x26] - mov r2, r12 - adds r0, r2, r5 - lsls r0, 3 - add r0, r8 - movs r1, 0x8 - ldrsh r0, [r0, r1] - cmp r0, 0 - bgt _0812FAEA - adds r0, r5, 0 - bl DestroyTask - ldr r1, _0812FAF4 @ =gAnimVisualTaskCount - ldrb r0, [r1] - subs r0, 0x1 - strb r0, [r1] -_0812FAEA: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0812FAF4: .4byte gAnimVisualTaskCount - thumb_func_end sub_812F9B0 - - thumb_func_start sub_812FAF8 -sub_812FAF8: @ 812FAF8 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - lsls r0, 24 - lsrs r6, r0, 24 - movs r7, 0 - ldr r2, _0812FB4C @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r3, r0, r2 - ldrh r0, [r3, 0x8] - subs r0, 0x1 - strh r0, [r3, 0x8] - movs r1, 0x14 - ldrsh r0, [r3, r1] - movs r1, 0x80 - lsls r1, 8 - ands r0, r1 - mov r8, r2 - cmp r0, 0 - beq _0812FB7E - ldrh r0, [r3, 0xA] - subs r0, 0x1 - strh r0, [r3, 0xA] - lsls r0, 16 - asrs r0, 16 - movs r1, 0x1 - negs r1, r1 - cmp r0, r1 - bne _0812FB7E - movs r2, 0x1A - ldrsh r0, [r3, r2] - cmp r0, 0 - bne _0812FB50 - ldrh r0, [r3, 0x10] - strh r0, [r3, 0x1A] - negs r0, r0 - strh r0, [r3, 0x10] - b _0812FB52 - .align 2, 0 -_0812FB4C: .4byte gTasks -_0812FB50: - strh r7, [r3, 0x1A] -_0812FB52: - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - mov r2, r8 - adds r1, r0, r2 - movs r2, 0x1C - ldrsh r0, [r1, r2] - cmp r0, 0 - bne _0812FB6E - ldrh r0, [r1, 0x12] - strh r0, [r1, 0x1C] - negs r0, r0 - strh r0, [r1, 0x12] - b _0812FB72 -_0812FB6E: - movs r0, 0 - strh r0, [r1, 0x1C] -_0812FB72: - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - add r0, r8 - ldrh r1, [r0, 0x22] - strh r1, [r0, 0xA] -_0812FB7E: - lsls r3, r6, 2 - adds r0, r3, r6 - lsls r0, 3 - mov r1, r8 - adds r4, r0, r1 - ldrh r2, [r4, 0xC] - ldr r1, _0812FBD0 @ =0x00007fff - adds r0, r1, 0 - ands r0, r2 - ldrh r2, [r4, 0x16] - adds r0, r2 - lsls r5, r0, 16 - lsrs r0, r5, 16 - mov r9, r0 - ldrh r0, [r4, 0xE] - ands r1, r0 - ldrh r2, [r4, 0x18] - adds r1, r2 - lsls r1, 16 - lsrs r7, r1, 16 - movs r1, 0xC - ldrsh r0, [r4, r1] - movs r1, 0x80 - lsls r1, 8 - ands r0, r1 - mov r12, r3 - cmp r0, 0 - beq _0812FBD8 - ldr r3, _0812FBD4 @ =gSprites - movs r2, 0x26 - ldrsh r0, [r4, r2] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r3 - lsrs r2, r5, 24 - ldrh r0, [r4, 0x1A] - subs r0, r2 - strh r0, [r1, 0x24] - adds r2, r3, 0 - b _0812FBEE - .align 2, 0 -_0812FBD0: .4byte 0x00007fff -_0812FBD4: .4byte gSprites -_0812FBD8: - ldr r2, _0812FC1C @ =gSprites - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - lsrs r1, r5, 24 - ldrh r4, [r4, 0x1A] - adds r1, r4 - strh r1, [r0, 0x24] -_0812FBEE: - mov r1, r12 - adds r0, r1, r6 - lsls r0, 3 - mov r1, r8 - adds r4, r0, r1 - movs r1, 0xE - ldrsh r0, [r4, r1] - movs r1, 0x80 - lsls r1, 8 - ands r0, r1 - cmp r0, 0 - beq _0812FC20 - movs r1, 0x26 - ldrsh r0, [r4, r1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - lsrs r2, r7, 8 - ldrh r0, [r4, 0x1C] - subs r0, r2 - b _0812FC32 - .align 2, 0 -_0812FC1C: .4byte gSprites -_0812FC20: - movs r1, 0x26 - ldrsh r0, [r4, r1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - lsrs r0, r7, 8 - ldrh r4, [r4, 0x1C] - adds r0, r4 -_0812FC32: - strh r0, [r1, 0x26] - mov r2, r12 - adds r0, r2, r6 - lsls r0, 3 - mov r1, r8 - adds r2, r0, r1 - mov r0, r9 - strh r0, [r2, 0x16] - strh r7, [r2, 0x18] - movs r1, 0x8 - ldrsh r0, [r2, r1] - cmp r0, 0 - bgt _0812FC58 - movs r0, 0x1E - strh r0, [r2, 0x8] - movs r0, 0 - strh r0, [r2, 0x22] - ldr r0, _0812FC64 @ =sub_812F9B0 - str r0, [r2] -_0812FC58: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0812FC64: .4byte sub_812F9B0 - thumb_func_end sub_812FAF8 - - thumb_func_start sub_812FC68 -sub_812FC68: @ 812FC68 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r6, r0, 24 - ldr r0, _0812FCC8 @ =gTasks - mov r8, r0 - lsls r7, r6, 2 - adds r0, r7, r6 - lsls r0, 3 - mov r1, r8 - adds r4, r0, r1 - ldr r1, _0812FCCC @ =gBankSpriteIds - ldr r2, _0812FCD0 @ =gAnimBankAttacker - ldrb r0, [r2] - adds r0, r1 - ldrb r0, [r0] - strh r0, [r4, 0x26] - ldr r5, _0812FCD4 @ =gBattleAnimArgs - ldrh r0, [r5] - strh r0, [r4, 0x24] - ldrh r0, [r5] - strh r0, [r4, 0x8] - ldrh r0, [r5, 0xC] - strh r0, [r4, 0x22] - movs r3, 0x6 - ldrsh r0, [r5, r3] - cmp r0, 0 - beq _0812FCAC - ldrh r0, [r4, 0x14] - ldr r3, _0812FCD8 @ =0xffff8000 - adds r1, r3, 0 - orrs r0, r1 - strh r0, [r4, 0x14] -_0812FCAC: - ldrb r0, [r2] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _0812FCDC - ldrh r0, [r5, 0x2] - strh r0, [r4, 0xC] - ldrh r0, [r5, 0x4] - strh r0, [r4, 0xE] - mov r3, r8 - adds r4, r7, 0 - b _0812FD4C - .align 2, 0 -_0812FCC8: .4byte gTasks -_0812FCCC: .4byte gBankSpriteIds -_0812FCD0: .4byte gAnimBankAttacker -_0812FCD4: .4byte gBattleAnimArgs -_0812FCD8: .4byte 0xffff8000 -_0812FCDC: - movs r7, 0x2 - ldrsh r0, [r5, r7] - movs r1, 0x80 - lsls r1, 8 - ands r0, r1 - cmp r0, 0 - beq _0812FCF8 - ldrh r1, [r5, 0x2] - ldr r0, _0812FCF4 @ =0x00007fff - ands r0, r1 - b _0812FD00 - .align 2, 0 -_0812FCF4: .4byte 0x00007fff -_0812FCF8: - ldrh r0, [r5, 0x2] - ldr r2, _0812FD28 @ =0xffff8000 - adds r1, r2, 0 - orrs r0, r1 -_0812FD00: - strh r0, [r4, 0xC] - ldr r0, _0812FD2C @ =gBattleAnimArgs - movs r3, 0x4 - ldrsh r1, [r0, r3] - movs r2, 0x80 - lsls r2, 8 - ands r1, r2 - adds r5, r0, 0 - cmp r1, 0 - beq _0812FD38 - ldr r3, _0812FD30 @ =gTasks - lsls r4, r6, 2 - adds r1, r4, r6 - lsls r1, 3 - adds r1, r3 - ldrh r2, [r5, 0x4] - ldr r0, _0812FD34 @ =0x00007fff - ands r0, r2 - b _0812FD4A - .align 2, 0 -_0812FD28: .4byte 0xffff8000 -_0812FD2C: .4byte gBattleAnimArgs -_0812FD30: .4byte gTasks -_0812FD34: .4byte 0x00007fff -_0812FD38: - ldr r3, _0812FD70 @ =gTasks - lsls r4, r6, 2 - adds r1, r4, r6 - lsls r1, 3 - adds r1, r3 - ldrh r2, [r5, 0x4] - ldr r7, _0812FD74 @ =0xffff8000 - adds r0, r7, 0 - orrs r0, r2 -_0812FD4A: - strh r0, [r1, 0xE] -_0812FD4C: - adds r0, r4, r6 - lsls r0, 3 - adds r0, r3 - movs r1, 0 - strh r1, [r0, 0x18] - strh r1, [r0, 0x16] - ldrh r1, [r5, 0x8] - strh r1, [r0, 0x10] - ldrh r1, [r5, 0xA] - strh r1, [r0, 0x12] - ldr r1, _0812FD78 @ =sub_812FAF8 - str r1, [r0] - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0812FD70: .4byte gTasks -_0812FD74: .4byte 0xffff8000 -_0812FD78: .4byte sub_812FAF8 - thumb_func_end sub_812FC68 - - thumb_func_start sub_812FD7C -sub_812FD7C: @ 812FD7C - push {r4,r5,lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - ldr r1, _0812FDB4 @ =gTasks - adds r5, r0, r1 - ldr r4, _0812FDB8 @ =gBattleAnimArgs - movs r1, 0x2 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _0812FD9C - adds r0, r2, 0 - bl DestroyAnimVisualTask -_0812FD9C: - movs r0, 0 - strh r0, [r5, 0x8] - strh r0, [r5, 0xA] - strh r0, [r5, 0xC] - ldrh r0, [r4, 0x2] - strh r0, [r5, 0xE] - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _0812FDC0 - ldr r0, _0812FDBC @ =gAnimBankAttacker - b _0812FDC2 - .align 2, 0 -_0812FDB4: .4byte gTasks -_0812FDB8: .4byte gBattleAnimArgs -_0812FDBC: .4byte gAnimBankAttacker -_0812FDC0: - ldr r0, _0812FE10 @ =gAnimBankTarget -_0812FDC2: - ldrb r4, [r0] - adds r0, r4, 0 - movs r1, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x10] - adds r0, r4, 0 - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x12] - adds r0, r4, 0 - bl sub_8079E90 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x14] - ldr r0, _0812FE14 @ =gBattleAnimArgs - ldrb r0, [r0] - bl GetAnimBattlerSpriteId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - strh r1, [r5, 0x26] - ldr r2, _0812FE18 @ =gUnknown_084028AC - adds r0, r5, 0 - bl sub_80798F4 - ldr r0, _0812FE1C @ =sub_812FE20 - str r0, [r5] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0812FE10: .4byte gAnimBankTarget -_0812FE14: .4byte gBattleAnimArgs -_0812FE18: .4byte gUnknown_084028AC -_0812FE1C: .4byte sub_812FE20 - thumb_func_end sub_812FD7C - - thumb_func_start sub_812FE20 -sub_812FE20: @ 812FE20 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _0812FE40 @ =gTasks - adds r4, r0, r1 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _0812FE44 - cmp r0, 0x1 - beq _0812FEA4 - b _0812FEB2 - .align 2, 0 -_0812FE40: .4byte gTasks -_0812FE44: - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x6 - bne _0812FE5A - adds r0, r5, 0 - movs r1, 0x1 - bl sub_812FEB8 -_0812FE5A: - movs r1, 0xA - ldrsh r0, [r4, r1] - cmp r0, 0x12 - bne _0812FE6A - adds r0, r5, 0 - movs r1, 0 - bl sub_812FEB8 -_0812FE6A: - adds r0, r4, 0 - bl sub_807992C - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - bne _0812FEB2 - ldrh r0, [r4, 0xE] - subs r0, 0x1 - strh r0, [r4, 0xE] - lsls r0, 16 - cmp r0, 0 - bne _0812FE8C - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _0812FEB2 -_0812FE8C: - strh r1, [r4, 0xA] - ldrh r1, [r4, 0x26] - lsls r1, 24 - lsrs r1, 24 - ldr r2, _0812FEA0 @ =gUnknown_084028AC - adds r0, r4, 0 - bl sub_80798F4 - b _0812FEB2 - .align 2, 0 -_0812FEA0: .4byte gUnknown_084028AC -_0812FEA4: - movs r1, 0xC - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _0812FEB2 - adds r0, r5, 0 - bl DestroyAnimVisualTask -_0812FEB2: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_812FE20 - - thumb_func_start sub_812FEB8 -sub_812FEB8: @ 812FEB8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0xC - lsls r0, 24 - lsrs r6, r0, 24 - lsls r1, 24 - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - ldr r2, _0812FEDC @ =gTasks - adds r4, r0, r2 - cmp r1, 0 - bne _0812FEE0 - movs r1, 0x12 - movs r3, 0xEC - b _0812FEE4 - .align 2, 0 -_0812FEDC: .4byte gTasks -_0812FEE0: - movs r1, 0x1E - movs r3, 0x14 -_0812FEE4: - mov r2, sp - ldrh r0, [r4, 0x10] - subs r0, r1 - strh r0, [r2] - ldrh r0, [r4, 0x10] - subs r0, r1 - subs r0, 0x4 - strh r0, [r2, 0x2] - ldrh r0, [r4, 0x10] - adds r0, r1 - strh r0, [r2, 0x4] - ldrh r0, [r4, 0x10] - adds r0, r1 - adds r0, 0x4 - strh r0, [r2, 0x6] - add r2, sp, 0x8 - lsls r1, r3, 24 - asrs r1, 24 - ldrh r0, [r4, 0x12] - adds r0, r1 - strh r0, [r2] - ldrh r0, [r4, 0x12] - adds r0, r1 - adds r0, 0x6 - strh r0, [r2, 0x2] - movs r5, 0 - mov r8, r2 - ldr r7, _0812FF88 @ =gSprites -_0812FF1C: - lsls r0, r5, 1 - add r0, sp - movs r2, 0 - ldrsh r1, [r0, r2] - movs r0, 0x1 - ands r0, r5 - lsls r0, 1 - add r0, r8 - movs r3, 0 - ldrsh r2, [r0, r3] - ldrb r3, [r4, 0x14] - subs r3, 0x5 - lsls r3, 24 - lsrs r3, 24 - ldr r0, _0812FF8C @ =gSpriteTemplate_84028CC - bl CreateSprite - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x40 - beq _0812FF70 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r0, r7 - movs r0, 0 - strh r0, [r1, 0x2E] - movs r0, 0x2 - cmp r5, 0x1 - bhi _0812FF5E - movs r2, 0x2 - negs r2, r2 - adds r0, r2, 0 -_0812FF5E: - strh r0, [r1, 0x30] - ldr r0, _0812FF90 @ =0x0000ffff - strh r0, [r1, 0x32] - strh r6, [r1, 0x34] - movs r0, 0x2 - strh r0, [r1, 0x36] - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] -_0812FF70: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x3 - bls _0812FF1C - add sp, 0xC - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0812FF88: .4byte gSprites -_0812FF8C: .4byte gSpriteTemplate_84028CC -_0812FF90: .4byte 0x0000ffff - thumb_func_end sub_812FEB8 - - thumb_func_start sub_812FF94 -sub_812FF94: @ 812FF94 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x30] - ldrh r1, [r4, 0x20] - adds r0, r1 - strh r0, [r4, 0x20] - ldrh r0, [r4, 0x32] - ldrh r1, [r4, 0x22] - adds r0, r1 - strh r0, [r4, 0x22] - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x6 - ble _0812FFDA - ldr r3, _0812FFE0 @ =gTasks - movs r0, 0x36 - ldrsh r1, [r4, r0] - lsls r1, 1 - movs r0, 0x34 - 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] - adds r0, r4, 0 - bl DestroySprite -_0812FFDA: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812FFE0: .4byte gTasks - thumb_func_end sub_812FF94 - - thumb_func_start sub_812FFE4 -sub_812FFE4: @ 812FFE4 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0813002C @ =gTasks - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - adds r4, r1 - movs r0, 0 - strh r0, [r4, 0x8] - ldr r1, _08130030 @ =gBattleAnimArgs - ldrh r0, [r1, 0x2] - strh r0, [r4, 0xA] - ldrb r0, [r1] - bl GetAnimBattlerSpriteId - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08130034 @ =gSprites - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - ldrb r0, [r1, 0x5] - lsrs r0, 4 - lsls r0, 4 - movs r2, 0x80 - lsls r2, 1 - adds r1, r2, 0 - adds r0, r1 - strh r0, [r4, 0xC] - ldr r0, _08130038 @ =sub_813003C - str r0, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813002C: .4byte gTasks -_08130030: .4byte gBattleAnimArgs -_08130034: .4byte gSprites -_08130038: .4byte sub_813003C - thumb_func_end sub_812FFE4 - - thumb_func_start sub_813003C -sub_813003C: @ 813003C - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _08130084 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r4, r0, r1 - movs r1, 0xA - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _0813008C - ldrh r0, [r4, 0xC] - ldr r2, _08130088 @ =gUnknown_084028E4 - movs r3, 0x8 - ldrsh r1, [r4, r3] - lsls r1, 1 - adds r1, r2 - ldrh r3, [r1] - movs r1, 0x10 - movs r2, 0x8 - bl BlendPalette - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x17 - ble _0813007C - movs r0, 0 - strh r0, [r4, 0x8] -_0813007C: - ldrh r0, [r4, 0xA] - subs r0, 0x1 - strh r0, [r4, 0xA] - b _0813009E - .align 2, 0 -_08130084: .4byte gTasks -_08130088: .4byte gUnknown_084028E4 -_0813008C: - ldrh r0, [r4, 0xC] - movs r1, 0x10 - movs r2, 0 - movs r3, 0 - bl BlendPalette - adds r0, r5, 0 - bl DestroyAnimVisualTask -_0813009E: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_813003C - - thumb_func_start sub_81300A4 -sub_81300A4: @ 81300A4 - push {lr} - sub sp, 0x1C - lsls r0, 24 - lsrs r0, 24 - movs r2, 0xD0 - lsls r2, 1 - ldr r1, _081300E0 @ =gAnimBankAttacker - ldrb r3, [r1] - ldr r1, _081300E4 @ =gBattleAnimArgs - ldrb r1, [r1] - str r1, [sp] - movs r1, 0xA - str r1, [sp, 0x4] - movs r1, 0x2 - str r1, [sp, 0x8] - movs r1, 0x1E - str r1, [sp, 0xC] - ldr r1, _081300E8 @ =gUnknown_08D2E014 - str r1, [sp, 0x10] - ldr r1, _081300EC @ =gUnknown_08D2E170 - str r1, [sp, 0x14] - ldr r1, _081300F0 @ =gUnknown_08D2E150 - str r1, [sp, 0x18] - movs r1, 0 - bl sub_80E3C4C - add sp, 0x1C - pop {r0} - bx r0 - .align 2, 0 -_081300E0: .4byte gAnimBankAttacker -_081300E4: .4byte gBattleAnimArgs -_081300E8: .4byte gUnknown_08D2E014 -_081300EC: .4byte gUnknown_08D2E170 -_081300F0: .4byte gUnknown_08D2E150 - thumb_func_end sub_81300A4 - - thumb_func_start sub_81300F4 -sub_81300F4: @ 81300F4 - push {r4-r6,lr} - adds r5, r0, 0 - ldr r6, _0813014C @ =gAnimBankAttacker - ldrb r0, [r6] - bl GetBattlerSide - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08130110 - ldr r1, _08130150 @ =gBattleAnimArgs - ldrh r0, [r1] - negs r0, r0 - strh r0, [r1] -_08130110: - ldrb r0, [r6] - movs r1, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - ldr r4, _08130150 @ =gBattleAnimArgs - lsrs r0, 24 - ldrh r1, [r4] - adds r0, r1 - strh r0, [r5, 0x20] - ldrb r0, [r6] - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r4, 0x2] - adds r0, r1 - strh r0, [r5, 0x22] - movs r1, 0x4 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _08130158 - movs r0, 0xA0 - lsls r0, 2 - strh r0, [r5, 0x2E] - ldr r0, _08130154 @ =0x0000fd80 - strh r0, [r5, 0x30] - b _08130180 - .align 2, 0 -_0813014C: .4byte gAnimBankAttacker -_08130150: .4byte gBattleAnimArgs -_08130154: .4byte 0x0000fd80 -_08130158: - cmp r0, 0x1 - bne _08130172 - adds r2, r5, 0 - adds r2, 0x3F - ldrb r0, [r2] - movs r1, 0x2 - orrs r0, r1 - strb r0, [r2] - movs r0, 0xA0 - lsls r0, 2 - strh r0, [r5, 0x2E] - strh r0, [r5, 0x30] - b _08130180 -_08130172: - adds r0, r5, 0 - movs r1, 0x1 - bl StartSpriteAnim - movs r0, 0xA0 - lsls r0, 2 - strh r0, [r5, 0x2E] -_08130180: - ldr r0, _081301AC @ =gAnimBankAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _081301A0 - ldrh r0, [r5, 0x2E] - negs r0, r0 - strh r0, [r5, 0x2E] - adds r2, r5, 0 - adds r2, 0x3F - ldrb r0, [r2] - movs r1, 0x1 - orrs r0, r1 - strb r0, [r2] -_081301A0: - ldr r0, _081301B0 @ =sub_81301B4 - str r0, [r5, 0x1C] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_081301AC: .4byte gAnimBankAttacker -_081301B0: .4byte sub_81301B4 - thumb_func_end sub_81300F4 - - thumb_func_start sub_81301B4 -sub_81301B4: @ 81301B4 - push {lr} - adds r2, r0, 0 - ldrh r0, [r2, 0x2E] - ldrh r1, [r2, 0x3A] - adds r0, r1 - strh r0, [r2, 0x3A] - ldrh r1, [r2, 0x30] - ldrh r3, [r2, 0x3C] - adds r1, r3 - strh r1, [r2, 0x3C] - lsls r0, 16 - asrs r0, 24 - strh r0, [r2, 0x24] - lsls r1, 16 - asrs r1, 24 - strh r1, [r2, 0x26] - ldrh r0, [r2, 0x38] - adds r0, 0x1 - strh r0, [r2, 0x38] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xE - bne _081301E8 - adds r0, r2, 0 - bl DestroyAnimSprite -_081301E8: - pop {r0} - bx r0 - thumb_func_end sub_81301B4 - - thumb_func_start sub_81301EC -sub_81301EC: @ 81301EC - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _08130218 @ =gTasks - adds r6, r1, r0 - bl IsContest - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - beq _0813021C - movs r0, 0x8 - strh r0, [r6, 0x12] - movs r0, 0x3 - strh r0, [r6, 0x14] - movs r0, 0x1 - strh r0, [r6, 0x16] - b _08130226 - .align 2, 0 -_08130218: .4byte gTasks -_0813021C: - movs r0, 0xC - strh r0, [r6, 0x12] - movs r0, 0x3 - strh r0, [r6, 0x14] - strh r1, [r6, 0x16] -_08130226: - ldr r5, _0813025C @ =gAnimBankAttacker - ldrb r0, [r5] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08130260 - ldrb r0, [r5] - movs r1, 0x2 - bl GetBattlerSpriteCoord - adds r4, r0, 0 - ldrb r0, [r5] - movs r1, 0 - bl sub_807A100 - lsls r4, 24 - lsrs r4, 24 - lsls r0, 16 - asrs r0, 16 - cmp r0, 0 - bge _08130254 - adds r0, 0x3 -_08130254: - asrs r0, 2 - adds r0, r4, r0 - b _08130284 - .align 2, 0 -_0813025C: .4byte gAnimBankAttacker -_08130260: - ldrb r0, [r5] - movs r1, 0x2 - bl GetBattlerSpriteCoord - adds r4, r0, 0 - ldrb r0, [r5] - movs r1, 0 - bl sub_807A100 - lsls r4, 24 - lsrs r4, 24 - lsls r0, 16 - asrs r0, 16 - cmp r0, 0 - bge _08130280 - adds r0, 0x3 -_08130280: - asrs r0, 2 - subs r0, r4, r0 -_08130284: - strh r0, [r6, 0x1E] - ldr r5, _081302D8 @ =gAnimBankAttacker - ldrb r0, [r5] - movs r1, 0x3 - bl GetBattlerSpriteCoord - adds r4, r0, 0 - ldrb r0, [r5] - movs r1, 0 - bl sub_807A100 - lsls r4, 24 - lsrs r4, 24 - lsls r0, 16 - asrs r0, 16 - cmp r0, 0 - bge _081302A8 - adds r0, 0x3 -_081302A8: - asrs r0, 2 - subs r0, r4, r0 - strh r0, [r6, 0x20] - ldr r4, _081302DC @ =gAnimBankTarget - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r6, 0x22] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r6, 0x24] - ldr r0, _081302E0 @ =sub_81302E4 - str r0, [r6] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_081302D8: .4byte gAnimBankAttacker -_081302DC: .4byte gAnimBankTarget -_081302E0: .4byte sub_81302E4 - thumb_func_end sub_81301EC - - thumb_func_start sub_81302E4 -sub_81302E4: @ 81302E4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x14 - lsls r0, 24 - lsrs r7, r0, 24 - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - ldr r1, _0813030C @ =gTasks - adds r5, r0, r1 - movs r0, 0x8 - ldrsh r1, [r5, r0] - cmp r1, 0 - beq _08130310 - cmp r1, 0x1 - bne _08130308 - b _08130408 -_08130308: - b _08130416 - .align 2, 0 -_0813030C: .4byte gTasks -_08130310: - ldrh r0, [r5, 0xA] - adds r0, 0x1 - strh r0, [r5, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3 - ble _08130416 - strh r1, [r5, 0xA] - movs r1, 0x1E - ldrsh r0, [r5, r1] - movs r2, 0x20 - ldrsh r1, [r5, r2] - movs r3, 0x22 - ldrsh r2, [r5, r3] - movs r4, 0x24 - ldrsh r3, [r5, r4] - ldrb r4, [r5, 0x12] - str r4, [sp] - ldrb r4, [r5, 0xC] - str r4, [sp, 0x4] - add r4, sp, 0x10 - str r4, [sp, 0x8] - adds r4, 0x2 - str r4, [sp, 0xC] - bl sub_8130424 - movs r6, 0 - mov r8, r4 - ldr r4, _08130384 @ =gSprites -_0813034A: - add r0, sp, 0x10 - movs r2, 0 - ldrsh r1, [r0, r2] - mov r3, r8 - movs r0, 0 - ldrsh r2, [r3, r0] - ldr r0, _08130388 @ =gSpriteTemplate_840294C - movs r3, 0x23 - bl CreateSprite - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x40 - beq _081303DE - movs r1, 0x16 - ldrsh r0, [r5, r1] - cmp r0, 0 - bne _0813039E - cmp r6, 0 - bne _0813038C - lsls r2, r3, 4 - adds r1, r2, r3 - lsls r1, 2 - adds r1, r4 - ldrh r0, [r5, 0x14] - negs r0, r0 - strh r0, [r1, 0x26] - strh r0, [r1, 0x24] - b _081303C6 - .align 2, 0 -_08130384: .4byte gSprites -_08130388: .4byte gSpriteTemplate_840294C -_0813038C: - lsls r2, r3, 4 - adds r1, r2, r3 - lsls r1, 2 - adds r1, r4 - ldrh r0, [r5, 0x14] - strh r0, [r1, 0x26] - ldrh r0, [r5, 0x14] - strh r0, [r1, 0x24] - b _081303C6 -_0813039E: - cmp r6, 0 - bne _081303B4 - lsls r2, r3, 4 - adds r1, r2, r3 - lsls r1, 2 - adds r1, r4 - ldrh r0, [r5, 0x14] - negs r0, r0 - strh r0, [r1, 0x24] - ldrh r0, [r5, 0x14] - b _081303C4 -_081303B4: - lsls r2, r3, 4 - adds r1, r2, r3 - lsls r1, 2 - adds r1, r4 - ldrh r0, [r5, 0x14] - strh r0, [r1, 0x24] - ldrh r0, [r5, 0x14] - negs r0, r0 -_081303C4: - strh r0, [r1, 0x26] -_081303C6: - ldr r1, _08130404 @ =gSprites - adds r0, r2, r3 - lsls r0, 2 - adds r0, r1 - movs r1, 0 - strh r1, [r0, 0x2E] - strh r7, [r0, 0x30] - movs r1, 0xA - strh r1, [r0, 0x32] - ldrh r0, [r5, 0x1C] - adds r0, 0x1 - strh r0, [r5, 0x1C] -_081303DE: - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0x1 - bls _0813034A - ldrh r2, [r5, 0xC] - movs r3, 0xC - ldrsh r1, [r5, r3] - movs r4, 0x12 - ldrsh r0, [r5, r4] - cmp r1, r0 - bne _081303FC - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] -_081303FC: - adds r0, r2, 0x1 - strh r0, [r5, 0xC] - b _08130416 - .align 2, 0 -_08130404: .4byte gSprites -_08130408: - movs r1, 0x1C - ldrsh r0, [r5, r1] - cmp r0, 0 - bne _08130416 - adds r0, r7, 0 - bl DestroyAnimVisualTask -_08130416: - add sp, 0x14 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_81302E4 - - thumb_func_start sub_8130424 -sub_8130424: @ 8130424 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - ldr r4, [sp, 0x28] - ldr r5, [sp, 0x2C] - ldr r6, [sp, 0x30] - mov r9, r6 - ldr r6, [sp, 0x34] - mov r10, r6 - lsls r0, 16 - lsrs r0, 16 - mov r12, r0 - lsls r1, 16 - lsrs r1, 16 - str r1, [sp] - lsls r2, 16 - lsrs r2, 16 - adds r7, r2, 0 - lsls r3, 16 - lsrs r3, 16 - str r3, [sp, 0x4] - lsls r4, 24 - lsrs r6, r4, 24 - lsls r5, 24 - lsrs r5, 24 - mov r8, r5 - cmp r5, 0 - bne _0813046C - mov r2, r9 - strh r0, [r2] - mov r6, r10 - strh r1, [r6] - b _081304CA -_0813046C: - cmp r5, r6 - bcc _0813047A - mov r0, r9 - strh r2, [r0] - mov r1, r10 - strh r3, [r1] - b _081304CA -_0813047A: - subs r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - mov r2, r12 - lsls r1, r2, 16 - asrs r1, 16 - lsls r5, r1, 8 - lsls r0, r7, 16 - asrs r0, 16 - subs r0, r1 - lsls r0, 8 - adds r1, r6, 0 - bl __divsi3 - mov r1, r8 - muls r1, r0 - adds r0, r1, 0 - adds r5, r0 - ldr r2, [sp] - lsls r1, r2, 16 - asrs r1, 16 - lsls r4, r1, 8 - ldr r2, [sp, 0x4] - lsls r0, r2, 16 - asrs r0, 16 - subs r0, r1 - lsls r0, 8 - adds r1, r6, 0 - bl __divsi3 - mov r6, r8 - muls r6, r0 - adds r0, r6, 0 - adds r4, r0 - asrs r5, 8 - mov r0, r9 - strh r5, [r0] - asrs r4, 8 - mov r1, r10 - strh r4, [r1] -_081304CA: - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8130424 - - thumb_func_start sub_81304DC -sub_81304DC: @ 81304DC - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x24 - ble _08130512 - ldr r3, _08130518 @ =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] - adds r0, r4, 0 - bl DestroySprite -_08130512: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08130518: .4byte gTasks - thumb_func_end sub_81304DC - - thumb_func_start sub_813051C -sub_813051C: @ 813051C - push {r4,lr} - adds r4, r0, 0 - ldr r1, _08130548 @ =gBattleAnimArgs - ldrh r0, [r1] - strh r0, [r4, 0x20] - ldrh r0, [r1, 0x2] - strh r0, [r4, 0x22] - ldrh r0, [r1, 0x4] - strh r0, [r4, 0x32] - ldrh r0, [r1, 0x6] - strh r0, [r4, 0x36] - ldrh r0, [r1, 0x8] - strh r0, [r4, 0x2E] - ldr r1, _0813054C @ =DestroyAnimSprite - adds r0, r4, 0 - bl StoreSpriteCallbackInData - ldr r0, _08130550 @ =sub_8078CC0 - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08130548: .4byte gBattleAnimArgs -_0813054C: .4byte DestroyAnimSprite -_08130550: .4byte sub_8078CC0 - thumb_func_end sub_813051C - - thumb_func_start sub_8130554 -sub_8130554: @ 8130554 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - lsls r0, 2 - add r0, r9 - lsls r0, 3 - ldr r1, _08130674 @ =gTasks - adds r7, r0, r1 - ldr r0, _08130678 @ =gAnimBankAttacker - mov r10, r0 - ldrb r0, [r0] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r7, 0x1E] - mov r1, r10 - ldrb r0, [r1] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r7, 0x20] - ldr r0, _0813067C @ =gAnimBankTarget - mov r8, r0 - ldrb r0, [r0] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r7, 0x22] - mov r1, r8 - ldrb r0, [r1] - movs r1, 0x3 - bl GetBattlerSpriteCoord - adds r4, r0, 0 - mov r1, r8 - ldrb r0, [r1] - movs r1, 0 - bl sub_807A100 - lsls r4, 24 - lsrs r4, 24 - lsls r0, 16 - asrs r0, 16 - cmp r0, 0 - bge _081305C6 - adds r0, 0x3 -_081305C6: - asrs r0, 2 - adds r0, r4, r0 - strh r0, [r7, 0x24] - ldr r4, _08130680 @ =gSpriteTemplate_84029AC - movs r0, 0x1E - ldrsh r5, [r7, r0] - movs r1, 0x20 - ldrsh r6, [r7, r1] - mov r1, r8 - ldrb r0, [r1] - bl sub_8079E90 - adds r3, r0, 0 - subs r3, 0x5 - lsls r3, 24 - lsrs r3, 24 - adds r0, r4, 0 - adds r1, r5, 0 - adds r2, r6, 0 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - strh r0, [r7, 0x26] - cmp r0, 0x40 - beq _08130690 - ldr r4, _08130684 @ =gSprites - movs r0, 0x26 - ldrsh r1, [r7, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0x10 - strh r1, [r0, 0x2E] - movs r0, 0x26 - ldrsh r1, [r7, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrh r1, [r7, 0x22] - strh r1, [r0, 0x32] - movs r0, 0x26 - ldrsh r1, [r7, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrh r1, [r7, 0x24] - strh r1, [r0, 0x36] - movs r0, 0x26 - ldrsh r1, [r7, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldr r1, _08130688 @ =0x0000ffe0 - strh r1, [r0, 0x38] - movs r0, 0x26 - ldrsh r1, [r7, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl InitAnimArcTranslation - mov r1, r10 - ldrb r0, [r1] - bl GetBattlerSide - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0813066E - movs r0, 0x26 - ldrsh r1, [r7, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0x1 - bl StartSpriteAffineAnim -_0813066E: - ldr r0, _0813068C @ =sub_81306A4 - str r0, [r7] - b _08130696 - .align 2, 0 -_08130674: .4byte gTasks -_08130678: .4byte gAnimBankAttacker -_0813067C: .4byte gAnimBankTarget -_08130680: .4byte gSpriteTemplate_84029AC -_08130684: .4byte gSprites -_08130688: .4byte 0x0000ffe0 -_0813068C: .4byte sub_81306A4 -_08130690: - mov r0, r9 - bl DestroyAnimVisualTask -_08130696: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8130554 - - thumb_func_start sub_81306A4 -sub_81306A4: @ 81306A4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - ldr r1, _081306C8 @ =gTasks - adds r4, r0, r1 - movs r0, 0x8 - ldrsh r1, [r4, r0] - cmp r1, 0x1 - beq _0813070C - cmp r1, 0x1 - bgt _081306CC - cmp r1, 0 - beq _081306D6 - b _081307AA - .align 2, 0 -_081306C8: .4byte gTasks -_081306CC: - cmp r1, 0x2 - beq _08130730 - cmp r1, 0x3 - beq _081307A4 - b _081307AA -_081306D6: - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _081307AA - strh r1, [r4, 0xA] - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08130708 @ =gSprites - adds r0, r1 - bl TranslateAnimArc - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x7 - ble _081307AA - b _08130796 - .align 2, 0 -_08130708: .4byte gSprites -_0813070C: - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0813072C @ =gSprites - adds r0, r1 - bl TranslateAnimArc - lsls r0, 24 - cmp r0, 0 - beq _081307AA - movs r0, 0 - strh r0, [r4, 0xA] - strh r0, [r4, 0xC] - b _08130796 - .align 2, 0 -_0813072C: .4byte gSprites -_08130730: - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _081307AA - movs r0, 0 - strh r0, [r4, 0xA] - ldrh r2, [r4, 0xC] - adds r2, 0x1 - strh r2, [r4, 0xC] - ldr r5, _081307A0 @ =gSprites - movs r1, 0x26 - ldrsh r0, [r4, r1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r5 - movs r0, 0x1 - ands r2, r0 - adds r1, 0x3E - lsls r2, 2 - ldrb r3, [r1] - subs r0, 0x6 - ands r0, r3 - orrs r0, r2 - strb r0, [r1] - movs r1, 0xC - ldrsh r0, [r4, r1] - cmp r0, 0x10 - bne _081307AA - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldrb r0, [r0, 0x3] - lsls r0, 26 - lsrs r0, 27 - bl FreeOamMatrix - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - bl DestroySprite -_08130796: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _081307AA - .align 2, 0 -_081307A0: .4byte gSprites -_081307A4: - adds r0, r2, 0 - bl DestroyAnimVisualTask -_081307AA: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_81306A4 - - thumb_func_start sub_81307B0 -sub_81307B0: @ 81307B0 - push {r4-r6,lr} - adds r4, r0, 0 - ldr r0, _081307C4 @ =gBattleAnimArgs - movs r2, 0 - ldrsh r1, [r0, r2] - adds r6, r0, 0 - cmp r1, 0 - bne _081307CC - ldr r0, _081307C8 @ =gAnimBankAttacker - b _081307CE - .align 2, 0 -_081307C4: .4byte gBattleAnimArgs -_081307C8: .4byte gAnimBankAttacker -_081307CC: - ldr r0, _08130834 @ =gAnimBankTarget -_081307CE: - ldrb r5, [r0] - ldrh r2, [r4, 0x4] - lsls r1, r2, 22 - lsrs r1, 22 - adds r1, 0x10 - ldr r3, _08130838 @ =0x000003ff - adds r0, r3, 0 - ands r1, r0 - ldr r0, _0813083C @ =0xfffffc00 - ands r0, r2 - orrs r0, r1 - strh r0, [r4, 0x4] - adds r1, r6, 0 - ldrh r0, [r1, 0x4] - strh r0, [r4, 0x3A] - movs r2, 0x2 - ldrsh r0, [r1, r2] - movs r1, 0x1 - cmp r0, 0 - bne _081307FC - movs r3, 0x1 - negs r3, r3 - adds r1, r3, 0 -_081307FC: - strh r1, [r4, 0x3C] - adds r0, r5, 0 - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x22] - movs r1, 0x2 - ldrsh r0, [r6, r1] - cmp r0, 0 - bne _08130840 - ldrb r2, [r4, 0x3] - lsls r1, r2, 26 - lsrs r1, 27 - movs r0, 0x8 - orrs r1, r0 - lsls r1, 1 - subs r0, 0x47 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, 0x3] - adds r0, r5, 0 - movs r1, 0x4 - bl sub_807A100 - subs r0, 0x8 - b _0813084A - .align 2, 0 -_08130834: .4byte gAnimBankTarget -_08130838: .4byte 0x000003ff -_0813083C: .4byte 0xfffffc00 -_08130840: - adds r0, r5, 0 - movs r1, 0x5 - bl sub_807A100 - adds r0, 0x8 -_0813084A: - strh r0, [r4, 0x20] - ldr r0, _08130858 @ =sub_813085C - str r0, [r4, 0x1C] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08130858: .4byte sub_813085C - thumb_func_end sub_81307B0 - - thumb_func_start sub_813085C -sub_813085C: @ 813085C - push {lr} - adds r2, r0, 0 - movs r0, 0x2E - ldrsh r1, [r2, r0] - cmp r1, 0x1 - beq _081308A4 - cmp r1, 0x1 - bgt _08130872 - cmp r1, 0 - beq _0813087C - b _08130914 -_08130872: - cmp r1, 0x2 - beq _081308B4 - cmp r1, 0x3 - beq _081308DA - b _08130914 -_0813087C: - ldrh r0, [r2, 0x30] - adds r0, 0x1 - strh r0, [r2, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _08130914 - strh r1, [r2, 0x30] - ldrh r0, [r2, 0x3C] - ldrh r1, [r2, 0x24] - adds r0, r1 - strh r0, [r2, 0x24] - ldrh r0, [r2, 0x32] - adds r0, 0x1 - strh r0, [r2, 0x32] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xC - bne _08130914 - b _081308D2 -_081308A4: - ldrh r0, [r2, 0x30] - adds r0, 0x1 - strh r0, [r2, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x8 - bne _08130914 - b _081308CE -_081308B4: - movs r0, 0x3C - ldrsh r1, [r2, r0] - lsls r1, 2 - ldrh r0, [r2, 0x24] - subs r0, r1 - strh r0, [r2, 0x24] - ldrh r0, [r2, 0x30] - adds r0, 0x1 - strh r0, [r2, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x6 - bne _08130914 -_081308CE: - movs r0, 0 - strh r0, [r2, 0x30] -_081308D2: - ldrh r0, [r2, 0x2E] - adds r0, 0x1 - strh r0, [r2, 0x2E] - b _08130914 -_081308DA: - movs r0, 0x3C - ldrsh r1, [r2, r0] - lsls r0, r1, 1 - adds r0, r1 - ldrh r1, [r2, 0x24] - adds r0, r1 - strh r0, [r2, 0x24] - ldrh r0, [r2, 0x30] - adds r0, 0x1 - strh r0, [r2, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x8 - bne _08130914 - ldrh r0, [r2, 0x3A] - subs r0, 0x1 - strh r0, [r2, 0x3A] - lsls r0, 16 - cmp r0, 0 - beq _0813090E - movs r0, 0 - strh r0, [r2, 0x30] - ldrh r0, [r2, 0x2E] - subs r0, 0x1 - strh r0, [r2, 0x2E] - b _08130914 -_0813090E: - adds r0, r2, 0 - bl DestroyAnimSprite -_08130914: - pop {r0} - bx r0 - thumb_func_end sub_813085C - - thumb_func_start sub_8130918 -sub_8130918: @ 8130918 - push {r4,lr} - lsls r0, 24 - lsrs r1, r0, 24 - ldr r2, _08130930 @ =gBattleAnimArgs - movs r3, 0 - ldrsh r0, [r2, r3] - cmp r0, 0 - bne _08130934 - adds r0, r1, 0 - bl DestroyAnimVisualTask - b _0813095C - .align 2, 0 -_08130930: .4byte gBattleAnimArgs -_08130934: - ldr r0, _08130964 @ =gTasks - lsls r4, r1, 2 - adds r4, r1 - lsls r4, 3 - adds r4, r0 - ldrh r0, [r2, 0x2] - strh r0, [r4, 0x8] - ldrb r0, [r2] - bl GetAnimBattlerSpriteId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - strh r1, [r4, 0x26] - ldr r2, _08130968 @ =gUnknown_084029DC - adds r0, r4, 0 - bl sub_80798F4 - ldr r0, _0813096C @ =sub_8130970 - str r0, [r4] -_0813095C: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08130964: .4byte gTasks -_08130968: .4byte gUnknown_084029DC -_0813096C: .4byte sub_8130970 - thumb_func_end sub_8130918 - - thumb_func_start sub_8130970 -sub_8130970: @ 8130970 - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - ldr r1, _081309B0 @ =gTasks - adds r4, r0, r1 - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _081309CA - movs r0, 0 - strh r0, [r4, 0xA] - ldrh r1, [r4, 0xC] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _081309B8 - ldr r2, _081309B4 @ =gSprites - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - movs r1, 0x2 - b _081309C8 - .align 2, 0 -_081309B0: .4byte gTasks -_081309B4: .4byte gSprites -_081309B8: - ldr r2, _08130A10 @ =gSprites - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldr r1, _08130A14 @ =0x0000fffe -_081309C8: - strh r1, [r0, 0x24] -_081309CA: - adds r0, r4, 0 - bl sub_807992C - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - bne _08130A26 - ldr r2, _08130A10 @ =gSprites - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - strh r5, [r0, 0x24] - ldrh r0, [r4, 0x8] - subs r0, 0x1 - strh r0, [r4, 0x8] - lsls r0, 16 - cmp r0, 0 - beq _08130A20 - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - ldr r1, _08130A18 @ =gTasks - adds r0, r1 - ldrh r1, [r0, 0x26] - lsls r1, 24 - lsrs r1, 24 - ldr r2, _08130A1C @ =gUnknown_084029DC - bl sub_80798F4 - strh r5, [r4, 0xA] - strh r5, [r4, 0xC] - b _08130A26 - .align 2, 0 -_08130A10: .4byte gSprites -_08130A14: .4byte 0x0000fffe -_08130A18: .4byte gTasks -_08130A1C: .4byte gUnknown_084029DC -_08130A20: - adds r0, r6, 0 - bl DestroyAnimVisualTask -_08130A26: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8130970 - - thumb_func_start sub_8130A2C -sub_8130A2C: @ 8130A2C - push {r4,r5,lr} - adds r5, r0, 0 - ldr r0, _08130A40 @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _08130A48 - ldr r4, _08130A44 @ =gAnimBankAttacker - b _08130A4A - .align 2, 0 -_08130A40: .4byte gBattleAnimArgs -_08130A44: .4byte gAnimBankAttacker -_08130A48: - ldr r4, _08130A88 @ =gAnimBankTarget -_08130A4A: - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x2 - bl sub_807A100 - strh r0, [r5, 0x22] - movs r1, 0x22 - ldrsh r0, [r5, r1] - cmp r0, 0x7 - bgt _08130A6E - movs r0, 0x8 - strh r0, [r5, 0x22] -_08130A6E: - movs r2, 0 - strh r2, [r5, 0x2E] - ldr r1, _08130A8C @ =gBattleAnimArgs - ldrh r0, [r1, 0x2] - strh r0, [r5, 0x30] - strh r2, [r5, 0x32] - ldrh r0, [r1, 0x4] - strh r0, [r5, 0x34] - ldr r0, _08130A90 @ =sub_8130A94 - str r0, [r5, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08130A88: .4byte gAnimBankTarget -_08130A8C: .4byte gBattleAnimArgs -_08130A90: .4byte sub_8130A94 - thumb_func_end sub_8130A2C - - thumb_func_start sub_8130A94 -sub_8130A94: @ 8130A94 - push {lr} - adds r3, r0, 0 - ldrh r0, [r3, 0x2E] - adds r0, 0x1 - strh r0, [r3, 0x2E] - lsls r0, 16 - asrs r0, 16 - movs r2, 0x30 - ldrsh r1, [r3, r2] - cmp r0, r1 - blt _08130AE8 - movs r0, 0 - strh r0, [r3, 0x2E] - ldrh r1, [r3, 0x32] - adds r1, 0x1 - movs r0, 0x1 - ands r1, r0 - strh r1, [r3, 0x32] - movs r0, 0x3E - adds r0, r3 - mov r12, r0 - lsls r1, 2 - ldrb r2, [r0] - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - mov r1, r12 - strb r0, [r1] - movs r2, 0x32 - ldrsh r0, [r3, r2] - cmp r0, 0 - beq _08130AE8 - ldrh r0, [r3, 0x34] - subs r0, 0x1 - strh r0, [r3, 0x34] - lsls r0, 16 - cmp r0, 0 - bne _08130AE8 - adds r0, r3, 0 - bl DestroyAnimSprite -_08130AE8: - pop {r0} - bx r0 - thumb_func_end sub_8130A94 - - thumb_func_start sub_8130AEC -sub_8130AEC: @ 8130AEC - push {lr} - adds r3, r0, 0 - ldr r0, _08130B18 @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _08130B1C - ldrb r2, [r3, 0x3] - lsls r1, r2, 26 - lsrs r1, 27 - movs r0, 0x8 - orrs r1, r0 - lsls r1, 1 - subs r0, 0x47 - ands r0, r2 - orrs r0, r1 - strb r0, [r3, 0x3] - movs r0, 0x64 - strh r0, [r3, 0x20] - movs r0, 0x1 - b _08130B22 - .align 2, 0 -_08130B18: .4byte gBattleAnimArgs -_08130B1C: - movs r0, 0x8C - strh r0, [r3, 0x20] - ldr r0, _08130B30 @ =0x0000ffff -_08130B22: - strh r0, [r3, 0x3C] - movs r0, 0x38 - strh r0, [r3, 0x22] - ldr r0, _08130B34 @ =sub_8130B38 - str r0, [r3, 0x1C] - pop {r0} - bx r0 - .align 2, 0 -_08130B30: .4byte 0x0000ffff -_08130B34: .4byte sub_8130B38 - thumb_func_end sub_8130AEC - - thumb_func_start sub_8130B38 -sub_8130B38: @ 8130B38 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0x8 - bls _08130B46 - b _08130D18 -_08130B46: - lsls r0, 2 - ldr r1, _08130B50 @ =_08130B54 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08130B50: .4byte _08130B54 - .align 2, 0 -_08130B54: - .4byte _08130B78 - .4byte _08130BAA - .4byte _08130BBC - .4byte _08130BFC - .4byte _08130C0E - .4byte _08130C4C - .4byte _08130CB0 - .4byte _08130CD0 - .4byte _08130CF6 -_08130B78: - movs r3, 0x3C - ldrsh r0, [r4, r3] - lsls r0, 1 - ldrh r1, [r4, 0x22] - subs r1, r0 - strh r1, [r4, 0x22] - ldrh r2, [r4, 0x30] - movs r0, 0x1 - ands r0, r2 - cmp r0, 0 - beq _08130B9A - movs r0, 0x3C - ldrsh r1, [r4, r0] - lsls r1, 1 - ldrh r0, [r4, 0x20] - subs r0, r1 - strh r0, [r4, 0x20] -_08130B9A: - adds r0, r2, 0x1 - strh r0, [r4, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x9 - beq _08130BA8 - b _08130D18 -_08130BA8: - b _08130CEA -_08130BAA: - ldrh r0, [r4, 0x30] - adds r0, 0x1 - strh r0, [r4, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - beq _08130BBA - b _08130D18 -_08130BBA: - b _08130CEA -_08130BBC: - ldrh r2, [r4, 0x30] - adds r2, 0x1 - strh r2, [r4, 0x30] - movs r3, 0x3C - ldrsh r1, [r4, r3] - lsls r0, r1, 1 - adds r0, r1 - ldrh r1, [r4, 0x22] - adds r0, r1 - strh r0, [r4, 0x22] - ldr r3, _08130BF8 @ =gSineTable - movs r0, 0x30 - ldrsh r1, [r4, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - ldrh r0, [r0] - lsls r0, 16 - asrs r0, 19 - ldrh r1, [r4, 0x3C] - muls r0, r1 - strh r0, [r4, 0x24] - lsls r2, 16 - asrs r2, 16 - cmp r2, 0xC - beq _08130BF4 - b _08130D18 -_08130BF4: - b _08130CEA - .align 2, 0 -_08130BF8: .4byte gSineTable -_08130BFC: - ldrh r0, [r4, 0x30] - adds r0, 0x1 - strh r0, [r4, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x2 - beq _08130C0C - b _08130D18 -_08130C0C: - b _08130CEA -_08130C0E: - ldrh r2, [r4, 0x30] - adds r2, 0x1 - strh r2, [r4, 0x30] - movs r1, 0x3C - ldrsh r0, [r4, r1] - lsls r1, r0, 1 - adds r1, r0 - ldrh r0, [r4, 0x22] - subs r0, r1 - strh r0, [r4, 0x22] - ldr r3, _08130C48 @ =gSineTable - movs r0, 0x30 - ldrsh r1, [r4, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - ldrh r0, [r0] - lsls r0, 16 - asrs r0, 19 - ldrh r1, [r4, 0x3C] - muls r0, r1 - strh r0, [r4, 0x24] - lsls r2, 16 - asrs r2, 16 - cmp r2, 0xC - bne _08130D18 - b _08130CEE - .align 2, 0 -_08130C48: .4byte gSineTable -_08130C4C: - ldrh r2, [r4, 0x30] - adds r2, 0x1 - strh r2, [r4, 0x30] - movs r3, 0x3C - ldrsh r1, [r4, r3] - lsls r0, r1, 1 - adds r0, r1 - ldrh r1, [r4, 0x22] - adds r0, r1 - strh r0, [r4, 0x22] - ldr r3, _08130CA4 @ =gSineTable - movs r0, 0x30 - ldrsh r1, [r4, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - ldrh r0, [r0] - lsls r0, 16 - asrs r0, 19 - ldrh r1, [r4, 0x3C] - muls r0, r1 - strh r0, [r4, 0x24] - lsls r2, 16 - asrs r2, 16 - cmp r2, 0xF - bne _08130C98 - ldrh r2, [r4, 0x4] - lsls r1, r2, 22 - lsrs r1, 22 - adds r1, 0x10 - ldr r3, _08130CA8 @ =0x000003ff - adds r0, r3, 0 - ands r1, r0 - ldr r0, _08130CAC @ =0xfffffc00 - ands r0, r2 - orrs r0, r1 - strh r0, [r4, 0x4] -_08130C98: - movs r1, 0x30 - ldrsh r0, [r4, r1] - cmp r0, 0x12 - bne _08130D18 - b _08130CEA - .align 2, 0 -_08130CA4: .4byte gSineTable -_08130CA8: .4byte 0x000003ff -_08130CAC: .4byte 0xfffffc00 -_08130CB0: - movs r3, 0x3C - ldrsh r0, [r4, r3] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 1 - ldrh r0, [r4, 0x20] - adds r1, r0 - strh r1, [r4, 0x20] - ldrh r0, [r4, 0x30] - adds r0, 0x1 - strh r0, [r4, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x9 - bne _08130D18 - b _08130CEA -_08130CD0: - movs r1, 0x3C - ldrsh r0, [r4, r1] - lsls r0, 1 - ldrh r3, [r4, 0x20] - adds r0, r3 - strh r0, [r4, 0x20] - ldrh r0, [r4, 0x30] - adds r0, 0x1 - strh r0, [r4, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - bne _08130D18 -_08130CEA: - movs r0, 0 - strh r0, [r4, 0x30] -_08130CEE: - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - b _08130D18 -_08130CF6: - movs r1, 0x3C - ldrsh r0, [r4, r1] - lsls r1, r0, 1 - adds r1, r0 - ldrh r0, [r4, 0x20] - subs r0, r1 - strh r0, [r4, 0x20] - ldrh r0, [r4, 0x30] - adds r0, 0x1 - strh r0, [r4, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x5 - bne _08130D18 - adds r0, r4, 0 - bl DestroyAnimSprite -_08130D18: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8130B38 - - thumb_func_start sub_8130D20 -sub_8130D20: @ 8130D20 - push {r4-r7,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _08130D7C @ =gTasks - adds r6, r1, r0 - movs r0, 0 - bl GetAnimBattlerSpriteId - lsls r0, 24 - lsrs r0, 24 - strh r0, [r6, 0x26] - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _08130DA8 - bl IsDoubleBattle - lsls r0, 24 - lsrs r7, r0, 24 - cmp r7, 0x1 - bne _08130D8C - ldr r5, _08130D80 @ =gAnimBankAttacker - ldrb r0, [r5] - movs r1, 0 - bl GetBattlerSpriteCoord - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldrb r1, [r5] - movs r0, 0x2 - eors r0, r1 - movs r1, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - cmp r4, r0 - ble _08130D84 - strh r7, [r6, 0x24] - b _08130DAC - .align 2, 0 -_08130D7C: .4byte gTasks -_08130D80: .4byte gAnimBankAttacker -_08130D84: - ldr r0, _08130D88 @ =0x0000ffff - b _08130DAA - .align 2, 0 -_08130D88: .4byte 0x0000ffff -_08130D8C: - ldr r0, _08130DA0 @ =gAnimBankAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08130DA8 - ldr r0, _08130DA4 @ =0x0000ffff - b _08130DAA - .align 2, 0 -_08130DA0: .4byte gAnimBankAttacker -_08130DA4: .4byte 0x0000ffff -_08130DA8: - movs r0, 0x1 -_08130DAA: - strh r0, [r6, 0x24] -_08130DAC: - ldr r0, _08130DB8 @ =sub_8130DBC - str r0, [r6] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08130DB8: .4byte sub_8130DBC - thumb_func_end sub_8130D20 - - thumb_func_start sub_8130DBC -sub_8130DBC: @ 8130DBC - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r1, _08130DE0 @ =gTasks - adds r3, r0, r1 - movs r1, 0x8 - ldrsh r0, [r3, r1] - cmp r0, 0x8 - bls _08130DD6 - b _08130F50 -_08130DD6: - lsls r0, 2 - ldr r1, _08130DE4 @ =_08130DE8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08130DE0: .4byte gTasks -_08130DE4: .4byte _08130DE8 - .align 2, 0 -_08130DE8: - .4byte _08130E0C - .4byte _08130E1E - .4byte _08130E50 - .4byte _08130E80 - .4byte _08130EA6 - .4byte _08130ED0 - .4byte _08130EE0 - .4byte _08130F00 - .4byte _08130F38 -_08130E0C: - ldrh r0, [r3, 0xA] - adds r0, 0x1 - strh r0, [r3, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xD - beq _08130E1C - b _08130F50 -_08130E1C: - b _08130F28 -_08130E1E: - ldr r2, _08130E4C @ =gSprites - movs r1, 0x26 - ldrsh r0, [r3, r1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - movs r2, 0x24 - ldrsh r0, [r3, r2] - lsls r2, r0, 1 - adds r2, r0 - ldrh r0, [r1, 0x24] - subs r0, r2 - strh r0, [r1, 0x24] - ldrh r0, [r3, 0xA] - adds r0, 0x1 - strh r0, [r3, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x6 - beq _08130E4A - b _08130F50 -_08130E4A: - b _08130F28 - .align 2, 0 -_08130E4C: .4byte gSprites -_08130E50: - ldr r2, _08130E7C @ =gSprites - movs r1, 0x26 - ldrsh r0, [r3, r1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - movs r0, 0x24 - ldrsh r2, [r3, r0] - lsls r0, r2, 1 - adds r0, r2 - ldrh r2, [r1, 0x24] - adds r0, r2 - strh r0, [r1, 0x24] - ldrh r0, [r3, 0xA] - adds r0, 0x1 - strh r0, [r3, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x6 - bne _08130F50 - b _08130F28 - .align 2, 0 -_08130E7C: .4byte gSprites -_08130E80: - ldrh r0, [r3, 0xA] - adds r0, 0x1 - strh r0, [r3, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x2 - bne _08130F50 - movs r0, 0 - strh r0, [r3, 0xA] - ldrh r1, [r3, 0xC] - movs r2, 0xC - ldrsh r0, [r3, r2] - cmp r0, 0 - bne _08130F2C - adds r0, r1, 0x1 - strh r0, [r3, 0xC] - movs r0, 0x1 - strh r0, [r3, 0x8] - b _08130F50 -_08130EA6: - ldr r2, _08130ECC @ =gSprites - movs r0, 0x26 - ldrsh r1, [r3, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r3, 0x24] - ldrh r2, [r0, 0x24] - adds r1, r2 - strh r1, [r0, 0x24] - ldrh r0, [r3, 0xA] - adds r0, 0x1 - strh r0, [r3, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3 - bne _08130F50 - b _08130F28 - .align 2, 0 -_08130ECC: .4byte gSprites -_08130ED0: - ldrh r0, [r3, 0xA] - adds r0, 0x1 - strh r0, [r3, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x6 - bne _08130F50 - b _08130F28 -_08130EE0: - ldr r2, _08130EFC @ =gSprites - movs r1, 0x26 - ldrsh r0, [r3, r1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - movs r0, 0x24 - ldrsh r2, [r3, r0] - lsls r2, 2 - ldrh r0, [r1, 0x24] - subs r0, r2 - b _08130F18 - .align 2, 0 -_08130EFC: .4byte gSprites -_08130F00: - ldr r2, _08130F34 @ =gSprites - movs r1, 0x26 - ldrsh r0, [r3, r1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - movs r2, 0x24 - ldrsh r0, [r3, r2] - lsls r0, 2 - ldrh r2, [r1, 0x24] - adds r0, r2 -_08130F18: - strh r0, [r1, 0x24] - ldrh r0, [r3, 0xA] - adds r0, 0x1 - strh r0, [r3, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x5 - bne _08130F50 -_08130F28: - movs r0, 0 - strh r0, [r3, 0xA] -_08130F2C: - ldrh r0, [r3, 0x8] - adds r0, 0x1 - strh r0, [r3, 0x8] - b _08130F50 - .align 2, 0 -_08130F34: .4byte gSprites -_08130F38: - ldr r2, _08130F58 @ =gSprites - movs r0, 0x26 - ldrsh r1, [r3, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - movs r1, 0 - strh r1, [r0, 0x24] - adds r0, r4, 0 - bl DestroyAnimVisualTask -_08130F50: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08130F58: .4byte gSprites - thumb_func_end sub_8130DBC - - thumb_func_start sub_8130F5C -sub_8130F5C: @ 8130F5C - push {r4,lr} - adds r4, r0, 0 - ldr r0, _08130F78 @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _08130F80 - adds r0, r4, 0 - movs r1, 0x1 - bl InitAnimSpritePos - ldr r0, _08130F7C @ =gAnimBankAttacker - b _08130F82 - .align 2, 0 -_08130F78: .4byte gBattleAnimArgs -_08130F7C: .4byte gAnimBankAttacker -_08130F80: - ldr r0, _08130FD8 @ =gAnimBankTarget -_08130F82: - ldrb r0, [r0] - strh r0, [r4, 0x3C] - ldrh r0, [r4, 0x3C] - lsls r0, 24 - lsrs r0, 24 - bl GetBattlerSide - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08130FA6 - ldrb r0, [r4, 0x3] - movs r1, 0x3F - negs r1, r1 - ands r1, r0 - movs r0, 0x10 - orrs r1, r0 - strb r1, [r4, 0x3] -_08130FA6: - ldrh r0, [r4, 0x3C] - lsls r0, 24 - lsrs r0, 24 - bl sub_8079ED4 - movs r2, 0x3 - ands r2, r0 - lsls r2, 2 - ldrb r3, [r4, 0x5] - movs r1, 0xD - negs r1, r1 - adds r0, r1, 0 - ands r0, r3 - orrs r0, r2 - strb r0, [r4, 0x5] - ldrb r0, [r4, 0x1] - ands r1, r0 - movs r0, 0x4 - orrs r1, r0 - strb r1, [r4, 0x1] - ldr r0, _08130FDC @ =sub_8130FE0 - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08130FD8: .4byte gAnimBankTarget -_08130FDC: .4byte sub_8130FE0 - thumb_func_end sub_8130F5C - - thumb_func_start sub_8130FE0 -sub_8130FE0: @ 8130FE0 - push {r4,r5,lr} - adds r4, r0, 0 - movs r1, 0x38 - ldrsh r0, [r4, r1] - cmp r0, 0x4 - bls _08130FEE - b _081311DE -_08130FEE: - lsls r0, 2 - ldr r1, _08130FF8 @ =_08130FFC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08130FF8: .4byte _08130FFC - .align 2, 0 -_08130FFC: - .4byte _08131010 - .4byte _08131110 - .4byte _08131178 - .4byte _0813118C - .4byte _081311D8 -_08131010: - movs r2, 0x3A - ldrsh r0, [r4, r2] - cmp r0, 0x5 - bhi _08131040 - lsls r0, 2 - ldr r1, _08131024 @ =_08131028 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08131024: .4byte _08131028 - .align 2, 0 -_08131028: - .4byte _08131044 - .4byte _08131060 - .4byte _08131082 - .4byte _0813109E - .4byte _08131044 - .4byte _081310C4 -_08131040: - movs r0, 0 - strh r0, [r4, 0x3A] -_08131044: - ldrh r0, [r4, 0x3C] - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x5 - bl sub_807A100 - subs r0, 0x4 - lsls r0, 16 - lsrs r5, r0, 16 - ldrh r0, [r4, 0x3C] - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x3 - b _081310B8 -_08131060: - ldrh r0, [r4, 0x3C] - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x5 - bl sub_807A100 - subs r0, 0x4 - lsls r0, 16 - lsrs r5, r0, 16 - ldrh r0, [r4, 0x3C] - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x2 - bl sub_807A100 - adds r0, 0x4 - b _081310BE -_08131082: - ldrh r0, [r4, 0x3C] - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x4 - bl sub_807A100 - adds r0, 0x4 - lsls r0, 16 - lsrs r5, r0, 16 - ldrh r0, [r4, 0x3C] - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x3 - b _081310B8 -_0813109E: - ldrh r0, [r4, 0x3C] - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x4 - bl sub_807A100 - adds r0, 0x4 - lsls r0, 16 - lsrs r5, r0, 16 - ldrh r0, [r4, 0x3C] - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x2 -_081310B8: - bl sub_807A100 - subs r0, 0x4 -_081310BE: - lsls r0, 16 - lsrs r1, r0, 16 - b _081310E4 -_081310C4: - ldrh r0, [r4, 0x3C] - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r5, r0, 24 - ldrh r0, [r4, 0x3C] - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r1, r0, 24 -_081310E4: - movs r2, 0x3A - ldrsh r0, [r4, r2] - cmp r0, 0x4 - bne _081310F0 - movs r0, 0x18 - b _081310FA -_081310F0: - cmp r0, 0x5 - bne _081310F8 - movs r0, 0x6 - b _081310FA -_081310F8: - movs r0, 0xC -_081310FA: - strh r0, [r4, 0x2E] - ldrh r0, [r4, 0x20] - strh r0, [r4, 0x30] - strh r5, [r4, 0x32] - ldrh r0, [r4, 0x22] - strh r0, [r4, 0x34] - strh r1, [r4, 0x36] - adds r0, r4, 0 - bl InitAnimLinearTranslation - b _081311CA -_08131110: - adds r0, r4, 0 - bl TranslateAnimLinear - lsls r0, 24 - cmp r0, 0 - beq _081311DE - movs r1, 0x3A - ldrsh r0, [r4, r1] - cmp r0, 0x4 - beq _08131148 - cmp r0, 0x5 - beq _08131168 - ldrh r0, [r4, 0x24] - ldrh r2, [r4, 0x20] - adds r0, r2 - 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] - strh r1, [r4, 0x2E] - ldrh r0, [r4, 0x38] - adds r0, 0x1 - strh r0, [r4, 0x38] - b _08131160 -_08131148: - 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] - strh r1, [r4, 0x38] -_08131160: - ldrh r0, [r4, 0x3A] - adds r0, 0x1 - strh r0, [r4, 0x3A] - b _081311DE -_08131168: - movs r0, 0 - strh r0, [r4, 0x2E] - movs r1, 0x10 - strh r1, [r4, 0x30] - strh r0, [r4, 0x32] - movs r0, 0x3 - strh r0, [r4, 0x38] - b _081311DE -_08131178: - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - bne _081311DE - movs r0, 0 - strh r0, [r4, 0x38] - b _081311DE -_0813118C: - ldrh r1, [r4, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _0813119E - ldrh r0, [r4, 0x30] - subs r0, 0x1 - strh r0, [r4, 0x30] - b _081311A4 -_0813119E: - ldrh r0, [r4, 0x32] - adds r0, 0x1 - strh r0, [r4, 0x32] -_081311A4: - ldr r2, _081311D4 @ =REG_BLDALPHA - ldrh r0, [r4, 0x32] - lsls r0, 8 - ldrh r1, [r4, 0x30] - orrs r0, r1 - strh r0, [r2] - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x20 - bne _081311DE - adds r2, r4, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] -_081311CA: - ldrh r0, [r4, 0x38] - adds r0, 0x1 - strh r0, [r4, 0x38] - b _081311DE - .align 2, 0 -_081311D4: .4byte REG_BLDALPHA -_081311D8: - adds r0, r4, 0 - bl DestroyAnimSprite -_081311DE: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8130FE0 - - thumb_func_start sub_81311E4 -sub_81311E4: @ 81311E4 - push {r4,r5,lr} - adds r4, r0, 0 - movs r1, 0x32 - ldrsh r0, [r4, r1] - movs r2, 0x2E - ldrsh r1, [r4, r2] - subs r0, r1 - movs r2, 0x38 - ldrsh r1, [r4, r2] - muls r0, r1 - movs r2, 0x36 - ldrsh r1, [r4, r2] - bl __divsi3 - adds r5, r0, 0 - strh r5, [r4, 0x24] - movs r1, 0x34 - ldrsh r0, [r4, r1] - movs r2, 0x30 - ldrsh r1, [r4, r2] - subs r0, r1 - movs r2, 0x38 - ldrsh r1, [r4, r2] - muls r0, r1 - movs r2, 0x36 - ldrsh r1, [r4, r2] - bl __divsi3 - adds r3, r0, 0 - strh r3, [r4, 0x26] - ldrh r1, [r4, 0x38] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08131242 - ldr r0, _08131260 @ =gSpriteTemplate_8402500 - ldrh r1, [r4, 0x20] - adds r1, r5 - lsls r1, 16 - asrs r1, 16 - ldrh r2, [r4, 0x22] - adds r2, r3 - lsls r2, 16 - asrs r2, 16 - movs r3, 0x5 - bl CreateSprite -_08131242: - movs r0, 0x38 - ldrsh r1, [r4, r0] - movs r2, 0x36 - ldrsh r0, [r4, r2] - cmp r1, r0 - bne _08131254 - adds r0, r4, 0 - bl DestroyAnimSprite -_08131254: - ldrh r0, [r4, 0x38] - adds r0, 0x1 - strh r0, [r4, 0x38] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08131260: .4byte gSpriteTemplate_8402500 - thumb_func_end sub_81311E4 - - thumb_func_start sub_8131264 -sub_8131264: @ 8131264 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r4, _081312A0 @ =gAnimBankTarget - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _08131290 - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _081312A8 -_08131290: - ldr r2, _081312A4 @ =gBattleAnimArgs - ldrh r1, [r5, 0x20] - ldrh r0, [r2] - subs r0, r1, r0 - strh r0, [r5, 0x2E] - ldrh r0, [r2, 0x4] - subs r1, r0 - b _081312B6 - .align 2, 0 -_081312A0: .4byte gAnimBankTarget -_081312A4: .4byte gBattleAnimArgs -_081312A8: - ldr r2, _081312DC @ =gBattleAnimArgs - ldrh r1, [r5, 0x20] - ldrh r0, [r2] - adds r0, r1, r0 - strh r0, [r5, 0x2E] - ldrh r0, [r2, 0x4] - adds r1, r0 -_081312B6: - strh r1, [r5, 0x32] - adds r3, r2, 0 - ldrh r1, [r5, 0x22] - ldrh r2, [r3, 0x2] - adds r2, r1, r2 - strh r2, [r5, 0x30] - ldrh r0, [r3, 0x6] - adds r1, r0 - strh r1, [r5, 0x34] - ldrh r0, [r3, 0x8] - strh r0, [r5, 0x36] - ldrh r0, [r5, 0x2E] - strh r0, [r5, 0x20] - strh r2, [r5, 0x22] - ldr r0, _081312E0 @ =sub_81311E4 - str r0, [r5, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_081312DC: .4byte gBattleAnimArgs -_081312E0: .4byte sub_81311E4 - thumb_func_end sub_8131264 - - thumb_func_start sub_81312E4 -sub_81312E4: @ 81312E4 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - lsls r0, 24 - lsrs r6, r0, 24 - movs r0, 0 - bl GetAnimBattlerSpriteId - lsls r0, 24 - lsrs r5, r0, 24 - adds r2, r5, 0 - ldr r0, _08131328 @ =gTasks - mov r9, r0 - lsls r7, r6, 2 - adds r0, r7, r6 - lsls r0, 3 - mov r8, r0 - mov r4, r8 - add r4, r9 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _0813132C - adds r0, r5, 0 - movs r1, 0 - bl sub_8078E70 - movs r0, 0x80 - lsls r0, 1 - strh r0, [r4, 0xA] - strh r0, [r4, 0xC] - b _08131378 - .align 2, 0 -_08131328: .4byte gTasks -_0813132C: - cmp r0, 0x1 - bne _08131384 - ldrh r0, [r4, 0xA] - adds r0, 0x60 - strh r0, [r4, 0xA] - ldrh r0, [r4, 0xC] - subs r0, 0xD - strh r0, [r4, 0xC] - movs r2, 0xA - ldrsh r1, [r4, r2] - movs r0, 0xC - ldrsh r2, [r4, r0] - adds r0, r5, 0 - movs r3, 0 - bl obj_id_set_rotscale - ldrh r0, [r4, 0xE] - adds r0, 0x1 - strh r0, [r4, 0xE] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x9 - bne _081313E8 - movs r0, 0 - strh r0, [r4, 0xE] - adds r0, r5, 0 - bl sub_8078F40 - ldr r1, _08131380 @ =gSprites - lsls r0, r5, 4 - adds r0, r5 - lsls r0, 2 - adds r0, r1 - adds r0, 0x3E - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0] -_08131378: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _081313E8 - .align 2, 0 -_08131380: .4byte gSprites -_08131384: - ldr r4, _081313F4 @ =gAnimBankAttacker - ldrb r0, [r4] - movs r1, 0 - bl refresh_graphics_maybe - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _081313C6 - ldr r3, _081313F8 @ =gSprites - ldr r2, _081313FC @ =gBankSpriteIds - ldrb r0, [r4] - adds r0, r2 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r3, 0 - adds r1, 0x10 - adds r0, r1 - ldr r1, _08131400 @ =gSpriteAffineAnimTable_81E7C18 - str r1, [r0] - ldrb r0, [r4] - adds r0, r2 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - movs r1, 0 - bl StartSpriteAffineAnim -_081313C6: - mov r4, r9 - adds r3, r7, 0 - ldr r5, _08131404 @ =sub_8131408 - movs r1, 0xF - mov r2, r8 - adds r0, r4, r2 - adds r0, 0x26 - movs r2, 0 -_081313D6: - strh r2, [r0] - subs r0, 0x2 - subs r1, 0x1 - cmp r1, 0 - bge _081313D6 - adds r0, r3, r6 - lsls r0, 3 - adds r0, r4 - str r5, [r0] -_081313E8: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081313F4: .4byte gAnimBankAttacker -_081313F8: .4byte gSprites -_081313FC: .4byte gBankSpriteIds -_08131400: .4byte gSpriteAffineAnimTable_81E7C18 -_08131404: .4byte sub_8131408 - thumb_func_end sub_81312E4 - - thumb_func_start sub_8131408 -sub_8131408: @ 8131408 - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - movs r0, 0 - bl GetAnimBattlerSpriteId - lsls r0, 24 - lsrs r3, r0, 24 - ldr r1, _08131434 @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r4, r0, r1 - movs r0, 0x8 - ldrsh r5, [r4, r0] - cmp r5, 0x1 - beq _0813146C - cmp r5, 0x1 - bgt _08131438 - cmp r5, 0 - beq _08131442 - b _0813155A - .align 2, 0 -_08131434: .4byte gTasks -_08131438: - cmp r5, 0x2 - beq _081314D8 - cmp r5, 0x3 - beq _08131514 - b _0813155A -_08131442: - ldr r0, _08131464 @ =gSprites - lsls r1, r3, 4 - adds r1, r3 - lsls r1, 2 - adds r1, r0 - ldr r0, _08131468 @ =0x0000ff38 - strh r0, [r1, 0x26] - movs r0, 0xC8 - strh r0, [r1, 0x24] - adds r1, 0x3E - ldrb r2, [r1] - subs r0, 0xCD - ands r0, r2 - strb r0, [r1] - strh r5, [r4, 0x1C] - b _08131506 - .align 2, 0 -_08131464: .4byte gSprites -_08131468: .4byte 0x0000ff38 -_0813146C: - ldrh r1, [r4, 0x1C] - adds r1, 0x70 - movs r5, 0 - strh r1, [r4, 0x1C] - ldr r2, _081314D0 @ =gSprites - lsls r0, r3, 4 - adds r0, r3 - lsls r0, 2 - adds r2, r0, r2 - lsls r1, 16 - asrs r1, 24 - ldrh r3, [r2, 0x26] - adds r1, r3 - strh r1, [r2, 0x26] - movs r1, 0x22 - ldrsh r0, [r2, r1] - movs r3, 0x26 - ldrsh r1, [r2, r3] - adds r0, r1 - movs r1, 0x20 - negs r1, r1 - cmp r0, r1 - blt _0813149C - strh r5, [r2, 0x24] -_0813149C: - movs r1, 0x26 - ldrsh r0, [r2, r1] - cmp r0, 0 - ble _081314A6 - strh r5, [r2, 0x26] -_081314A6: - movs r3, 0x26 - ldrsh r0, [r2, r3] - cmp r0, 0 - bne _0813155A - movs r0, 0x40 - negs r0, r0 - bl BattleAnimAdjustPanning - adds r1, r0, 0 - lsls r1, 24 - asrs r1, 24 - movs r0, 0x7D - bl PlaySE12WithPanning - ldr r1, _081314D4 @ =0xfffff800 - adds r0, r1, 0 - ldrh r2, [r4, 0x1C] - adds r0, r2 - strh r0, [r4, 0x1C] - b _08131506 - .align 2, 0 -_081314D0: .4byte gSprites -_081314D4: .4byte 0xfffff800 -_081314D8: - ldrh r0, [r4, 0x1C] - subs r0, 0x70 - strh r0, [r4, 0x1C] - lsls r0, 16 - cmp r0, 0 - bge _081314E8 - movs r0, 0 - strh r0, [r4, 0x1C] -_081314E8: - ldr r0, _08131510 @ =gSprites - lsls r1, r3, 4 - adds r1, r3 - lsls r1, 2 - adds r1, r0 - ldrh r2, [r4, 0x1C] - lsls r2, 16 - asrs r2, 24 - ldrh r0, [r1, 0x26] - subs r0, r2 - strh r0, [r1, 0x26] - movs r3, 0x1C - ldrsh r0, [r4, r3] - cmp r0, 0 - bne _0813155A -_08131506: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _0813155A - .align 2, 0 -_08131510: .4byte gSprites -_08131514: - ldrh r0, [r4, 0x1C] - adds r0, 0x70 - strh r0, [r4, 0x1C] - ldr r2, _08131560 @ =gSprites - lsls r1, r3, 4 - adds r1, r3 - lsls r1, 2 - adds r1, r2 - lsls r0, 16 - asrs r0, 24 - ldrh r2, [r1, 0x26] - adds r0, r2 - strh r0, [r1, 0x26] - lsls r0, 16 - cmp r0, 0 - ble _08131538 - movs r0, 0 - strh r0, [r1, 0x26] -_08131538: - movs r3, 0x26 - ldrsh r0, [r1, r3] - cmp r0, 0 - bne _0813155A - movs r0, 0x40 - negs r0, r0 - bl BattleAnimAdjustPanning - adds r1, r0, 0 - lsls r1, 24 - asrs r1, 24 - movs r0, 0x7D - bl PlaySE12WithPanning - adds r0, r6, 0 - bl DestroyAnimVisualTask -_0813155A: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08131560: .4byte gSprites - thumb_func_end sub_8131408 - - thumb_func_start sub_8131564 -sub_8131564: @ 8131564 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r4, _08131588 @ =gAnimBankTarget - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08131590 - ldrb r0, [r4] - bl sub_8079E90 - subs r0, 0x2 - adds r1, r5, 0 - adds r1, 0x43 - strb r0, [r1] - ldr r4, _0813158C @ =0x0000ff70 - b _081315A0 - .align 2, 0 -_08131588: .4byte gAnimBankTarget -_0813158C: .4byte 0x0000ff70 -_08131590: - ldrb r0, [r4] - bl sub_8079E90 - adds r0, 0x2 - adds r1, r5, 0 - adds r1, 0x43 - strb r0, [r1] - ldr r4, _081315BC @ =0x0000ffa0 -_081315A0: - ldr r0, _081315C0 @ =gAnimBankTarget - ldrb r0, [r0] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x22] - strh r4, [r5, 0x26] - ldr r0, _081315C4 @ =sub_81315C8 - str r0, [r5, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_081315BC: .4byte 0x0000ffa0 -_081315C0: .4byte gAnimBankTarget -_081315C4: .4byte sub_81315C8 - thumb_func_end sub_8131564 - - thumb_func_start sub_81315C8 -sub_81315C8: @ 81315C8 - push {r4,r5,lr} - adds r4, r0, 0 - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0x4 - bls _081315D6 - b _081316F2 -_081315D6: - lsls r0, 2 - ldr r1, _081315E0 @ =_081315E4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_081315E0: .4byte _081315E4 - .align 2, 0 -_081315E4: - .4byte _081315F8 - .4byte _0813161C - .4byte _0813165C - .4byte _0813168C - .4byte _081316B8 -_081315F8: - ldrh r0, [r4, 0x26] - adds r0, 0xA - strh r0, [r4, 0x26] - lsls r0, 16 - cmp r0, 0 - blt _081316F2 - movs r0, 0x3F - bl BattleAnimAdjustPanning - adds r1, r0, 0 - lsls r1, 24 - asrs r1, 24 - movs r0, 0xCD - bl PlaySE12WithPanning - movs r0, 0 - strh r0, [r4, 0x26] - b _081316B0 -_0813161C: - ldrh r1, [r4, 0x30] - adds r1, 0x4 - movs r5, 0 - strh r1, [r4, 0x30] - ldr r2, _08131658 @ =gSineTable - movs r3, 0x30 - ldrsh r0, [r4, r3] - lsls r0, 1 - adds r0, r2 - ldrh r0, [r0] - lsls r0, 16 - asrs r0, 19 - negs r0, r0 - strh r0, [r4, 0x26] - lsls r1, 16 - asrs r1, 16 - cmp r1, 0x7F - ble _081316F2 - movs r0, 0x3F - bl BattleAnimAdjustPanning - adds r1, r0, 0 - lsls r1, 24 - asrs r1, 24 - movs r0, 0xCD - bl PlaySE12WithPanning - strh r5, [r4, 0x30] - strh r5, [r4, 0x26] - b _081316B0 - .align 2, 0 -_08131658: .4byte gSineTable -_0813165C: - ldrh r1, [r4, 0x30] - adds r1, 0x6 - movs r3, 0 - strh r1, [r4, 0x30] - ldr r2, _08131688 @ =gSineTable - movs r5, 0x30 - ldrsh r0, [r4, r5] - lsls r0, 1 - adds r0, r2 - ldrh r0, [r0] - lsls r0, 16 - asrs r0, 20 - negs r0, r0 - strh r0, [r4, 0x26] - lsls r1, 16 - asrs r1, 16 - cmp r1, 0x7F - ble _081316F2 - strh r3, [r4, 0x30] - strh r3, [r4, 0x26] - b _081316B0 - .align 2, 0 -_08131688: .4byte gSineTable -_0813168C: - ldrh r0, [r4, 0x30] - adds r0, 0x1 - strh r0, [r4, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x8 - ble _081316F2 - movs r0, 0x3F - bl BattleAnimAdjustPanning - adds r1, r0, 0 - lsls r1, 24 - asrs r1, 24 - movs r0, 0xC0 - bl PlaySE12WithPanning - movs r0, 0 - strh r0, [r4, 0x30] -_081316B0: - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - b _081316F2 -_081316B8: - ldrh r0, [r4, 0x30] - adds r0, 0x1 - strh r0, [r4, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x8 - ble _081316F2 - movs r0, 0 - strh r0, [r4, 0x30] - ldrh r1, [r4, 0x32] - adds r1, 0x1 - strh r1, [r4, 0x32] - movs r0, 0x1 - ands r1, r0 - adds r3, r4, 0 - adds r3, 0x3E - lsls r1, 2 - ldrb r2, [r3] - subs r0, 0x6 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - movs r1, 0x32 - ldrsh r0, [r4, r1] - cmp r0, 0x7 - bne _081316F2 - adds r0, r4, 0 - bl DestroyAnimSprite -_081316F2: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_81315C8 - - thumb_func_start sub_81316F8 -sub_81316F8: @ 81316F8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r0, 24 - lsrs r4, r0, 24 - mov r10, r4 - bl IsContest - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - bne _0813173E - movs r0, 0x1 - bl duplicate_obj_of_side_rel2move_in_transparent_mode - lsls r0, 16 - asrs r7, r0, 16 - cmp r7, 0 - blt _0813173E - movs r0, 0x1 - bl duplicate_obj_of_side_rel2move_in_transparent_mode - lsls r0, 16 - asrs r0, 16 - cmp r0, 0 - bge _0813174C - lsls r0, r7, 4 - adds r0, r7 - lsls r0, 2 - ldr r1, _08131748 @ =gSprites - adds r0, r1 - bl obj_delete_but_dont_free_vram -_0813173E: - adds r0, r4, 0 - bl DestroyAnimVisualTask - b _081317EE - .align 2, 0 -_08131748: .4byte gSprites -_0813174C: - ldr r1, _081317FC @ =gSprites - mov r9, r1 - lsls r1, r0, 4 - mov r8, r1 - add r8, r0 - mov r0, r8 - lsls r0, 2 - mov r8, r0 - mov r4, r8 - add r4, r9 - ldrh r0, [r4, 0x24] - adds r0, 0x18 - strh r0, [r4, 0x24] - lsls r6, r7, 4 - adds r6, r7 - lsls r6, 2 - mov r1, r9 - adds r2, r6, r1 - ldrh r0, [r2, 0x24] - subs r0, 0x18 - strh r0, [r2, 0x24] - strh r5, [r4, 0x2E] - strh r5, [r2, 0x2E] - strh r5, [r4, 0x30] - strh r5, [r2, 0x30] - strh r5, [r4, 0x32] - strh r5, [r2, 0x32] - movs r0, 0x10 - strh r0, [r4, 0x34] - ldr r0, _08131800 @ =0x0000fff0 - strh r0, [r2, 0x34] - strh r5, [r4, 0x36] - movs r0, 0x80 - strh r0, [r2, 0x36] - movs r0, 0x18 - strh r0, [r4, 0x38] - strh r0, [r2, 0x38] - mov r0, r10 - strh r0, [r4, 0x3A] - strh r0, [r2, 0x3A] - strh r5, [r4, 0x3C] - strh r5, [r2, 0x3C] - ldr r0, _08131804 @ =gTasks - mov r1, r10 - lsls r3, r1, 2 - add r3, r10 - lsls r3, 3 - adds r3, r0 - movs r0, 0x2 - strh r0, [r3, 0x8] - adds r5, r4, 0 - adds r5, 0x3E - ldrb r1, [r5] - subs r0, 0x7 - ands r0, r1 - strb r0, [r5] - adds r5, r2, 0 - adds r5, 0x3E - ldrb r0, [r5] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r5] - ldrb r5, [r4, 0x1] - movs r1, 0xD - negs r1, r1 - adds r0, r1, 0 - ands r0, r5 - strb r0, [r4, 0x1] - ldrb r0, [r2, 0x1] - ands r1, r0 - strb r1, [r2, 0x1] - movs r0, 0x1C - add r9, r0 - add r8, r9 - ldr r0, _08131808 @ =sub_8131838 - mov r1, r8 - str r0, [r1] - add r6, r9 - str r0, [r6] - ldr r0, _0813180C @ =sub_8131810 - str r0, [r3] -_081317EE: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081317FC: .4byte gSprites -_08131800: .4byte 0x0000fff0 -_08131804: .4byte gTasks -_08131808: .4byte sub_8131838 -_0813180C: .4byte sub_8131810 - thumb_func_end sub_81316F8 - - thumb_func_start sub_8131810 -sub_8131810: @ 8131810 - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - ldr r1, _08131834 @ =gTasks - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r0, r1 - movs r1, 0x8 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _0813182E - adds r0, r2, 0 - bl DestroyAnimVisualTask -_0813182E: - pop {r0} - bx r0 - .align 2, 0 -_08131834: .4byte gTasks - thumb_func_end sub_8131810 - - thumb_func_start sub_8131838 -sub_8131838: @ 8131838 - push {r4,r5,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x30] - adds r0, 0x1 - movs r5, 0 - strh r0, [r4, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _08131868 - strh r5, [r4, 0x30] - adds r3, r4, 0 - adds r3, 0x3E - ldrb r2, [r3] - lsls r0, r2, 29 - lsrs r0, 31 - movs r1, 0x1 - eors r1, r0 - lsls r1, 2 - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] -_08131868: - ldrh r0, [r4, 0x34] - ldrh r1, [r4, 0x36] - adds r0, r1 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x36] - movs r2, 0x36 - ldrsh r0, [r4, r2] - movs r2, 0x38 - ldrsh r1, [r4, r2] - bl Cos - strh r0, [r4, 0x24] - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _08131890 - cmp r0, 0x1 - beq _081318A8 - b _081318E6 -_08131890: - ldrh r0, [r4, 0x32] - adds r0, 0x1 - strh r0, [r4, 0x32] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3C - bne _081318E6 - strh r5, [r4, 0x32] - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - b _081318E6 -_081318A8: - ldrh r0, [r4, 0x32] - adds r0, 0x1 - strh r0, [r4, 0x32] - lsls r0, 16 - cmp r0, 0 - ble _081318E6 - strh r5, [r4, 0x32] - ldrh r0, [r4, 0x38] - subs r0, 0x2 - strh r0, [r4, 0x38] - lsls r0, 16 - cmp r0, 0 - bge _081318E6 - ldr r3, _081318EC @ =gTasks - movs r2, 0x3C - ldrsh r1, [r4, r2] - lsls r1, 1 - movs r0, 0x3A - 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] - adds r0, r4, 0 - bl obj_delete_but_dont_free_vram -_081318E6: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_081318EC: .4byte gTasks - thumb_func_end sub_8131838 - thumb_func_start sub_81318F0 sub_81318F0: @ 81318F0 push {r4,lr} diff --git a/src/battle/battle_anim_812C144.c b/src/battle/battle_anim_812C144.c index 0e9c45023..6edc56549 100644 --- a/src/battle/battle_anim_812C144.c +++ b/src/battle/battle_anim_812C144.c @@ -1,6 +1,7 @@ #include "global.h" #include "battle.h" #include "battle_anim.h" +#include "blend_palette.h" #include "contest.h" #include "data2.h" #include "decompress.h" @@ -18,6 +19,7 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; extern u8 gAnimVisualTaskCount; +extern u8 gAnimFriendship; extern s32 gAnimMoveDmg; extern u16 gBattle_WIN0H; extern u16 gBattle_WIN0V; @@ -30,6 +32,9 @@ extern u16 gBattle_BG2_Y; extern const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7220; extern const struct SpriteTemplate gSpriteTemplate_8402500; +extern const struct SpriteTemplate gSpriteTemplate_84028CC; +extern const struct SpriteTemplate gSpriteTemplate_840294C; +extern const struct SpriteTemplate gSpriteTemplate_84029AC; extern const union AffineAnimCmd *const gSpriteAffineAnimTable_81E7C18[]; extern const union AffineAnimCmd *const gSpriteAffineAnimTable_81E7BEC[]; extern const union AffineAnimCmd gUnknown_08402400[]; @@ -38,6 +43,9 @@ extern const union AffineAnimCmd gUnknown_08402518[]; extern const union AffineAnimCmd gUnknown_08402540[]; extern const union AffineAnimCmd gUnknown_08402590[]; extern const union AffineAnimCmd gUnknown_08402610[]; +extern const union AffineAnimCmd gUnknown_08402750[]; +extern const union AffineAnimCmd gUnknown_084028AC[]; +extern const union AffineAnimCmd gUnknown_084029DC[]; extern const u32 gUnknown_08D2AA98[]; extern const u32 gUnknown_08D2A9E0[]; extern const u16 gUnknown_08D2AA80[]; @@ -45,11 +53,17 @@ extern const s8 gUnknown_084025C0[]; extern const s8 gUnknown_08402604[]; extern const u8 gUnknown_08402608[]; extern const struct SpriteTemplate gBattleAnimSpriteTemplate_84025EC; +extern const u8 gUnknown_08D2E014[]; +extern const u8 gUnknown_08D2E170[]; +extern const u16 gUnknown_08D2E150[]; extern u8 gBattleMonForms[]; extern u8 gBankSpriteIds[]; extern u16 gBattlerPartyIndexes[]; +extern s16 gUnknown_084028E4[]; extern u8 sub_8046234(s16 x, s16 y, u8 a3); +extern void sub_80DA48C(struct Sprite *); +extern void sub_80E3C4C(u8 taskId, int unused, u16 arg2, u8 battler1, u8 arg4, u8 arg5, u8 arg6, u8 arg7, const u8 *arg8, const u8 *arg9, const u16 *palette); static void sub_812C184(struct Sprite *sprite); static void sub_812C268(struct Sprite *sprite); @@ -82,7 +96,26 @@ static void sub_812EE00(struct Sprite *sprite); static void sub_812EEEC(struct Sprite *sprite); /*static*/ void sub_812F238(u8 taskId); static void sub_812F290(u8 taskId); -void sub_812F474(u8 taskId); +static void sub_812F474(u8 taskId); +static void sub_812F76C(u8 taskId); +static void sub_812F8DC(struct Sprite *sprite); +static void sub_812FE20(u8 taskId); +static void sub_812FEB8(u8, bool8); +static void sub_813003C(u8 taskId); +static void sub_81301B4(struct Sprite *sprite); +static void sub_81302E4(u8 taskId); +static void sub_8130424(s16, s16, s16, s16, u8, u8, s16*, s16*); +static void sub_81306A4(u8 taskId); +static void sub_813085C(struct Sprite *sprite); +static void sub_8130970(u8 taskId); +static void sub_8130A94(struct Sprite *sprite); +static void sub_8130B38(struct Sprite *sprite); +static void sub_8130DBC(u8 taskId); +static void sub_8130FE0(struct Sprite *sprite); +static void sub_8131408(u8 taskId); +static void sub_81315C8(struct Sprite *sprite); +static void sub_8131810(u8 taskId); +static void sub_8131838(struct Sprite *sprite); void sub_812C144(struct Sprite *sprite) @@ -2553,3 +2586,1557 @@ void sub_812F314(u8 taskId) ScanlineEffect_SetParams(scanlineParams); task->func = sub_812F474; } + +static void sub_812F474(u8 taskId) +{ + struct Task *task; + s16 var1; + s16 var2; + s16 bgX, bgY; + s16 offset; + s16 var0; + s16 i; + s16 sineIndex; + s16 var3; + + task = &gTasks[taskId]; + if (GetBattlerPosition_permutated(task->data[5]) == 1) + { + bgX = gBattle_BG1_X; + bgY = gBattle_BG1_Y; + } + else + { + bgX = gBattle_BG2_X; + bgY = gBattle_BG2_Y; + } + + switch (task->data[0]) + { + case 0: + offset = task->data[14] * 2; + var1 = 0; + var2 = 0; + i = 0; + task->data[1] = (task->data[1] + 2) & 0xFF; + sineIndex = task->data[1]; + task->data[9] = 0x7E0 / task->data[6]; + task->data[10] = -((task->data[7] * 2) / task->data[9]); + task->data[11] = task->data[7]; + var3 = task->data[11] >> 5; + task->data[12] = var3; + var0 = task->data[14]; + while (var0 > task->data[13]) + { + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][offset + 1] = (i - var2) + bgY; + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][offset] = bgX + var3 + (gSineTable[sineIndex] >> 5); + sineIndex = (sineIndex + 10) & 0xFF; + task->data[11] += task->data[10]; + var3 = task->data[11] >> 5; + task->data[12] = var3; + + i++; + offset -= 2; + var1 += task->data[6]; + var2 = var1 >> 5; + var0--; + } + + var0 *= 2; + while (var0 >= 0) + { + gScanlineEffectRegBuffers[0][var0] = bgX + 240; + gScanlineEffectRegBuffers[1][var0] = bgX + 240; + var0 -= 2; + } + + if (++task->data[6] > 63) + { + task->data[6] = 64; + task->data[2]++; + if (task->data[2] & 1) + task->data[3]--; + else + task->data[4]++; + + REG_BLDALPHA = (task->data[4] << 8) | task->data[3]; + if (task->data[3] == 0 && task->data[4] == 16) + { + task->data[2] = 0; + task->data[3] = 0; + task->data[0]++; + } + } + else + { + task->data[7] += task->data[8]; + } + break; + case 1: + if (++task->data[2] > 12) + { + gScanlineEffect.state = 3; + task->data[2] = 0; + task->data[0]++; + } + break; + case 2: + task->data[2]++; + if (task->data[2] & 1) + task->data[3]++; + else + task->data[4]--; + + REG_BLDALPHA = (task->data[4] << 8) | task->data[3]; + if (task->data[3] == 16 && task->data[4] == 0) + { + task->data[2] = 0; + task->data[3] = 0; + task->data[0]++; + } + break; + case 3: + DestroyAnimVisualTask(taskId); + break; + } +} + +void sub_812F724(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + task->data[0] = 0; + task->data[15] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); + sub_80798F4(&gTasks[taskId], task->data[15], &gUnknown_08402750); + task->func = sub_812F76C; +} + +static void sub_812F76C(u8 taskId) +{ + u16 var0; + + struct Task *task = &gTasks[taskId]; + var0 = task->data[0]; + task->data[0]++; + var0 -= 20; + if (var0 < 23) + { + if (++task->data[1] > 1) + { + task->data[1] = 0; + task->data[2]++; + if (task->data[2] & 1) + gSprites[task->data[15]].pos2.x = 1; + else + gSprites[task->data[15]].pos2.x = -1; + } + } + else + { + gSprites[task->data[15]].pos2.x = 0; + } + + if (!sub_807992C(&gTasks[taskId])) + DestroyAnimVisualTask(taskId); +} + +static void sub_812F804(struct Sprite *sprite, s16 b, s16 c, s16 d, s16 e, u16 f) +{ + sprite->pos1.x = b; + sprite->pos1.y = c; + sprite->data[4] = b << 4; + sprite->data[5] = c << 4; + sprite->data[6] = ((d - b) << 4) / f; + sprite->data[7] = ((e - c) << 4) / f; +} + +void sub_812F86C(struct Sprite *sprite) +{ + sprite->data[4] += sprite->data[6]; + sprite->data[5] += sprite->data[7]; + sprite->pos1.x = sprite->data[4] >> 4; + sprite->pos1.y = sprite->data[5] >> 4; +} + +void sub_812F88C(struct Sprite *sprite) +{ + s16 x = sprite->pos1.x; + s16 y = sprite->pos1.y; + + sub_8078650(sprite); + StartSpriteAffineAnim(sprite, gBattleAnimArgs[0]); + sub_812F804(sprite, sprite->pos1.x, sprite->pos1.y, x, y, 64); + sprite->data[0] = 0; + sprite->callback = sub_812F8DC; +} + +static void sub_812F8DC(struct Sprite *sprite) +{ + int index; + + sprite->data[0]++; + index = (sprite->data[0] * 8) & 0xFF; + sub_812F86C(sprite); + sprite->pos2.y = Sin(index, 8); + if (sprite->data[0] > 58) + { + if (++sprite->data[1] > 1) + { + sprite->data[1] = 0; + sprite->data[2]++; + sprite->invisible = sprite->data[2] & 1; + if (sprite->data[2] > 3) + move_anim_8074EE0(sprite); + } + } +} + +void sub_812F948(struct Sprite *sprite) +{ + sprite->data[0] = gBattleAnimArgs[3]; + StartSpriteAffineAnim(sprite, gBattleAnimArgs[0]); + if (GetBattlerSide(gAnimBankTarget) != B_SIDE_PLAYER) + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + + sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2) + gBattleAnimArgs[1]; + sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3) + gBattleAnimArgs[2]; + sprite->callback = sub_80DA48C; +} + +static void sub_812F9B0(u8 taskId) +{ + u16 var0 = 0; + u16 var1 = 0; + + gTasks[taskId].data[0]--; + if ((gTasks[taskId].data[6] & 0x8000) && (--gTasks[taskId].data[1] == -1)) + { + if (gTasks[taskId].data[9] == 0) + { + gTasks[taskId].data[9] = gTasks[taskId].data[4]; + gTasks[taskId].data[4] = -gTasks[taskId].data[4]; + } + else + { + gTasks[taskId].data[9] = 0; + } + + if (gTasks[taskId].data[10] == 0) + { + gTasks[taskId].data[10] = gTasks[taskId].data[5]; + gTasks[taskId].data[5] = -gTasks[taskId].data[5]; + } + else + { + gTasks[taskId].data[10] = 0; + } + + gTasks[taskId].data[1] = gTasks[taskId].data[13]; + } + + var0 = gTasks[taskId].data[7]; + var1 = gTasks[taskId].data[8]; + if (gTasks[taskId].data[2] & 0x8000) + gSprites[gTasks[taskId].data[15]].pos2.x = gTasks[taskId].data[9] - (var0 >> 8); + else + gSprites[gTasks[taskId].data[15]].pos2.x = gTasks[taskId].data[9] + (var0 >> 8); + + if (gTasks[taskId].data[3] & 0x8000) + gSprites[gTasks[taskId].data[15]].pos2.y = gTasks[taskId].data[10] - (var1 >> 8); + else + gSprites[gTasks[taskId].data[15]].pos2.y = gTasks[taskId].data[10] + (var1 >> 8); + + if (gTasks[taskId].data[0] < 1) + { + DestroyTask(taskId); + gAnimVisualTaskCount--; + } +} + +static void sub_812FAF8(u8 taskId) +{ + u16 var0 = 0; + u16 var1 = 0; + + gTasks[taskId].data[0]--; + if ((gTasks[taskId].data[6] & 0x8000) && (--gTasks[taskId].data[1] == -1)) + { + if (gTasks[taskId].data[9] == 0) + { + gTasks[taskId].data[9] = gTasks[taskId].data[4]; + gTasks[taskId].data[4] = -gTasks[taskId].data[4]; + } + else + { + gTasks[taskId].data[9] = var0; + } + + if (gTasks[taskId].data[10] == 0) + { + gTasks[taskId].data[10] = gTasks[taskId].data[5]; + gTasks[taskId].data[5] = -gTasks[taskId].data[5]; + } + else + { + gTasks[taskId].data[10] = 0; + } + + gTasks[taskId].data[1] = gTasks[taskId].data[13]; + } + + var0 = (gTasks[taskId].data[2] & 0x7FFF) + gTasks[taskId].data[7]; + var1 = (gTasks[taskId].data[3] & 0x7FFF) + gTasks[taskId].data[8]; + if (gTasks[taskId].data[2] & 0x8000) + gSprites[gTasks[taskId].data[15]].pos2.x = gTasks[taskId].data[9] - (var0 >> 8); + else + gSprites[gTasks[taskId].data[15]].pos2.x = gTasks[taskId].data[9] + (var0 >> 8); + + if (gTasks[taskId].data[3] & 0x8000) + gSprites[gTasks[taskId].data[15]].pos2.y = gTasks[taskId].data[10] - (var1 >> 8); + else + gSprites[gTasks[taskId].data[15]].pos2.y = gTasks[taskId].data[10] + (var1 >> 8); + + gTasks[taskId].data[7] = var0; + gTasks[taskId].data[8] = var1; + if (gTasks[taskId].data[0] < 1) + { + gTasks[taskId].data[0] = 30; + gTasks[taskId].data[13] = 0; + gTasks[taskId].func = sub_812F9B0; + } +} + +void sub_812FC68(u8 taskId) +{ + gTasks[taskId].data[15] = gBankSpriteIds[gAnimBankAttacker]; + gTasks[taskId].data[14] = gBattleAnimArgs[0]; + gTasks[taskId].data[0] = gBattleAnimArgs[0]; + gTasks[taskId].data[13] = gBattleAnimArgs[6]; + if (gBattleAnimArgs[3]) + gTasks[taskId].data[6] = gTasks[taskId].data[6] | -0x8000; + + if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER) + { + gTasks[taskId].data[2] = gBattleAnimArgs[1]; + gTasks[taskId].data[3] = gBattleAnimArgs[2]; + } + else + { + if (gBattleAnimArgs[1] & 0x8000) + gTasks[taskId].data[2] = gBattleAnimArgs[1] & 0x7FFF; + else + gTasks[taskId].data[2] = gBattleAnimArgs[1] | -0x8000; + + if (gBattleAnimArgs[2] & 0x8000) + gTasks[taskId].data[3] = gBattleAnimArgs[2] & 0x7FFF; + else + gTasks[taskId].data[3] = gBattleAnimArgs[2] | -0x8000; + } + + gTasks[taskId].data[8] = 0; + gTasks[taskId].data[7] = 0; + gTasks[taskId].data[4] = gBattleAnimArgs[4]; + gTasks[taskId].data[5] = gBattleAnimArgs[5]; + gTasks[taskId].func = sub_812FAF8; +} + +void sub_812FD7C(u8 taskId) +{ + u8 battler; + struct Task *task = &gTasks[taskId]; + + if (gBattleAnimArgs[1] == 0) + DestroyAnimVisualTask(taskId); + + task->data[0] = 0; + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = gBattleAnimArgs[1]; + if (gBattleAnimArgs[0] == 0) + battler = gAnimBankAttacker; + else + battler = gAnimBankTarget; + + task->data[4] = GetBattlerSpriteCoord(battler, 0); + task->data[5] = GetBattlerSpriteCoord(battler, 1); + task->data[6] = sub_8079E90(battler); + task->data[15] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); + sub_80798F4(task, task->data[15], &gUnknown_084028AC); + task->func = sub_812FE20; +} + +static void sub_812FE20(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + if (++task->data[1] == 6) + sub_812FEB8(taskId, TRUE); + + if (task->data[1] == 18) + sub_812FEB8(taskId, FALSE); + + if (!sub_807992C(task)) + { + if (--task->data[3] == 0) + { + task->data[0]++; + } + else + { + task->data[1] = 0; + sub_80798F4(task, task->data[15], &gUnknown_084028AC); + } + } + break; + case 1: + if (task->data[2] == 0) + DestroyAnimVisualTask(taskId); + break; + } +} + +static void sub_812FEB8(u8 taskId, bool8 arg1) +{ + u8 i; + s8 xOffset, yOffset; + struct Task *task; + s16 xCoords[4]; + s16 yCoords[2]; + + task = &gTasks[taskId]; + if (!arg1) + { + xOffset = 18; + yOffset = -20; + } + else + { + xOffset = 30; + yOffset = 20; + } + + xCoords[0] = task->data[4] - xOffset; + xCoords[1] = task->data[4] - xOffset - 4; + xCoords[2] = task->data[4] + xOffset; + xCoords[3] = task->data[4] + xOffset + 4; + yCoords[0] = task->data[5] + yOffset; + yCoords[1] = task->data[5] + yOffset + 6; + + for (i = 0; i < 4; i++) + { + u8 spriteId = CreateSprite(&gSpriteTemplate_84028CC, xCoords[i], yCoords[i & 1], task->data[6] - 5); + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].data[0] = 0; + gSprites[spriteId].data[1] = i < 2 ? -2 : 2; + gSprites[spriteId].data[2] = -1; + gSprites[spriteId].data[3] = taskId; + gSprites[spriteId].data[4] = 2; + task->data[2]++; + } + } +} + +void sub_812FF94(struct Sprite *sprite) +{ + sprite->pos1.x += sprite->data[1]; + sprite->pos1.y += sprite->data[2]; + if (++sprite->data[0] > 6) + { + gTasks[sprite->data[3]].data[sprite->data[4]]--; + DestroySprite(sprite); + } +} + +void sub_812FFE4(u8 taskId) +{ + u8 spriteId; + + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = gBattleAnimArgs[1]; + spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); + gTasks[taskId].data[2] = 0x100 + gSprites[spriteId].oam.paletteNum * 16; + gTasks[taskId].func = sub_813003C; +} + +static void sub_813003C(u8 taskId) +{ + if (gTasks[taskId].data[1]) + { + BlendPalette(gTasks[taskId].data[2], 16, 8, gUnknown_084028E4[gTasks[taskId].data[0]]); + if (++gTasks[taskId].data[0] > 23) + gTasks[taskId].data[0] = 0; + + gTasks[taskId].data[1]--; + } + else + { + BlendPalette(gTasks[taskId].data[2], 16, 0, RGB(0, 0, 0)); + DestroyAnimVisualTask(taskId); + } +} + +void sub_81300A4(u8 taskId) +{ + sub_80E3C4C( + taskId, + 0, + 0x1A0, + gAnimBankAttacker, + gBattleAnimArgs[0], + 10, + 2, + 30, + gUnknown_08D2E014, + gUnknown_08D2E170, + gUnknown_08D2E150); +} + +void sub_81300F4(struct Sprite *sprite) +{ + if (GetBattlerSide(gAnimBankAttacker) == B_SIDE_OPPONENT) + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + + sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 0) + gBattleAnimArgs[0]; + sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 1) + gBattleAnimArgs[1]; + if (gBattleAnimArgs[2] == 0) + { + sprite->data[0] = 640; + sprite->data[1] = -640; + } + else if (gBattleAnimArgs[2] == 1) + { + sprite->vFlip = 1; + sprite->data[0] = 640; + sprite->data[1] = 640; + } + else + { + StartSpriteAnim(sprite, 1); + sprite->data[0] = 640; + } + + if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER) + { + sprite->data[0] = -sprite->data[0]; + sprite->hFlip = 1; + } + + sprite->callback = sub_81301B4; +} + +static void sub_81301B4(struct Sprite *sprite) +{ + sprite->data[6] += sprite->data[0]; + sprite->data[7] += sprite->data[1]; + sprite->pos2.x = sprite->data[6] >> 8; + sprite->pos2.y = sprite->data[7] >> 8; + if (++sprite->data[5] == 14) + DestroyAnimSprite(sprite); +} + +void sub_81301EC(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + if (IsContest()) + { + task->data[5] = 8; + task->data[6] = 3; + task->data[7] = 1; + } + else + { + task->data[5] = 12; + task->data[6] = 3; + task->data[7] = 0; + } + + if (GetBattlerSide(gAnimBankAttacker) == B_SIDE_PLAYER) + task->data[11] = GetBattlerSpriteCoord(gAnimBankAttacker, 2) + sub_807A100(gAnimBankAttacker, 0) / 4; + else + task->data[11] = GetBattlerSpriteCoord(gAnimBankAttacker, 2) - sub_807A100(gAnimBankAttacker, 0) / 4; + + task->data[12] = GetBattlerSpriteCoord(gAnimBankAttacker, 3) - sub_807A100(gAnimBankAttacker, 0) / 4; + task->data[13] = GetBattlerSpriteCoord(gAnimBankTarget, 2); + task->data[14] = GetBattlerSpriteCoord(gAnimBankTarget, 3); + task->func = sub_81302E4; +} + +static void sub_81302E4(u8 taskId) +{ + u8 i; + s16 x, y; + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + if (++task->data[1] > 3) + { + task->data[1] = 0; + sub_8130424( + task->data[11], + task->data[12], + task->data[13], + task->data[14], + task->data[5], + task->data[2], + &x, + &y); + + for (i = 0; i < 2; i++) + { + u8 spriteId = CreateSprite(&gSpriteTemplate_840294C, x, y, 35); + if (spriteId != MAX_SPRITES) + { + if (task->data[7] == 0) + { + if (i == 0) + gSprites[spriteId].pos2.x = gSprites[spriteId].pos2.y = -task->data[6]; + else + gSprites[spriteId].pos2.x = gSprites[spriteId].pos2.y = task->data[6]; + } + else + { + if (i == 0) + { + gSprites[spriteId].pos2.x = -task->data[6]; + gSprites[spriteId].pos2.y = task->data[6]; + } + else + { + gSprites[spriteId].pos2.x = task->data[6]; + gSprites[spriteId].pos2.y = -task->data[6]; + } + } + + gSprites[spriteId].data[0] = 0; + gSprites[spriteId].data[1] = taskId; + gSprites[spriteId].data[2] = 10; + task->data[10]++; + } + } + + if (task->data[2] == task->data[5]) + task->data[0]++; + + task->data[2]++; + } + break; + case 1: + if (task->data[10] == 0) + DestroyAnimVisualTask(taskId); + break; + } +} + +static void sub_8130424(s16 arg0, s16 arg1, s16 arg2, s16 arg3, u8 arg4, u8 arg5, s16 *x, s16 *y) +{ + int x2; + int y2; + + if (arg5 == 0) + { + *x = arg0; + *y = arg1; + return; + } + + if (arg5 >= arg4) + { + *x = arg2; + *y = arg3; + return; + } + + arg4--; + x2 = (arg0 << 8) + arg5 * (((arg2 - arg0) << 8) / arg4); + y2 = (arg1 << 8) + arg5 * (((arg3 - arg1) << 8) / arg4); + *x = x2 >> 8; + *y = y2 >> 8; +} + +void sub_81304DC(struct Sprite *sprite) +{ + if (++sprite->data[0] > 36) + { + gTasks[sprite->data[1]].data[sprite->data[2]]--; + DestroySprite(sprite); + } +} + +void sub_813051C(struct Sprite *sprite) +{ + sprite->pos1.x = gBattleAnimArgs[0]; + sprite->pos1.y = gBattleAnimArgs[1]; + sprite->data[2] = gBattleAnimArgs[2]; + sprite->data[4] = gBattleAnimArgs[3]; + sprite->data[0] = gBattleAnimArgs[4]; + StoreSpriteCallbackInData(sprite, DestroyAnimSprite); + sprite->callback = sub_8078CC0; +} + +void sub_8130554(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + task->data[11] = GetBattlerSpriteCoord(gAnimBankAttacker, 2); + task->data[12] = GetBattlerSpriteCoord(gAnimBankAttacker, 3); + task->data[13] = GetBattlerSpriteCoord(gAnimBankTarget, 2); + task->data[14] = GetBattlerSpriteCoord(gAnimBankTarget, 3) + sub_807A100(gAnimBankTarget, 0) / 4; + task->data[15] = CreateSprite(&gSpriteTemplate_84029AC, task->data[11], task->data[12], sub_8079E90(gAnimBankTarget) - 5); + if (task->data[15] != MAX_SPRITES) + { + gSprites[task->data[15]].data[0] = 16; + gSprites[task->data[15]].data[2] = task->data[13]; + gSprites[task->data[15]].data[4] = task->data[14]; + gSprites[task->data[15]].data[5] = -32; + InitAnimArcTranslation(&gSprites[task->data[15]]); + if (GetBattlerSide(gAnimBankAttacker) == B_SIDE_OPPONENT) + StartSpriteAffineAnim(&gSprites[task->data[15]], 1); + + task->func = sub_81306A4; + } + else + { + DestroyAnimVisualTask(taskId); + } +} + +static void sub_81306A4(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + if (++task->data[1] > 1) + { + task->data[1] = 0; + TranslateAnimArc(&gSprites[task->data[15]]); + if (++task->data[2] > 7) + task->data[0]++; + } + break; + case 1: + if (TranslateAnimArc(&gSprites[task->data[15]])) + { + task->data[1] = 0; + task->data[2] = 0; + task->data[0]++; + } + break; + case 2: + if (++task->data[1] > 1) + { + task->data[1] = 0; + task->data[2]++; + gSprites[task->data[15]].invisible = task->data[2] & 1; + if (task->data[2] == 16) + { + FreeOamMatrix(gSprites[task->data[15]].oam.matrixNum); + DestroySprite(&gSprites[task->data[15]]); + task->data[0]++; + } + } + break; + case 3: + DestroyAnimVisualTask(taskId); + break; + } +} + +void sub_81307B0(struct Sprite *sprite) +{ + u8 battler; + + if (gBattleAnimArgs[0] == 0) + battler = gAnimBankAttacker; + else + battler = gAnimBankTarget; + + sprite->oam.tileNum += 16; + sprite->data[6] = gBattleAnimArgs[2]; + sprite->data[7] = gBattleAnimArgs[1] == 0 ? -1 : 1; + sprite->pos1.y = GetBattlerSpriteCoord(battler, 3); + if (gBattleAnimArgs[1] == 0) + { + sprite->oam.matrixNum |= 0x8; + sprite->pos1.x = sub_807A100(battler, 4) - 8; + } + else + { + sprite->pos1.x = sub_807A100(battler, 5) + 8; + } + + sprite->callback = sub_813085C; +} + +static void sub_813085C(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + if (++sprite->data[1] > 1) + { + sprite->data[1] = 0; + sprite->pos2.x += sprite->data[7]; + if (++sprite->data[2] == 12) + sprite->data[0]++; + } + break; + case 1: + if (++sprite->data[1] == 8) + { + sprite->data[1] = 0; + sprite->data[0]++; + } + break; + case 2: + sprite->pos2.x -= sprite->data[7] * 4; + if (++sprite->data[1] == 6) + { + sprite->data[1] = 0; + sprite->data[0]++; + } + break; + case 3: + sprite->pos2.x += sprite->data[7] * 3; + if (++sprite->data[1] == 8) + { + if (--sprite->data[6]) + { + sprite->data[1] = 0; + sprite->data[0]--; + } + else + { + DestroyAnimSprite(sprite); + } + } + break; + } +} + +void sub_8130918(u8 taskId) +{ + if (gBattleAnimArgs[0] == 0) + { + DestroyAnimVisualTask(taskId); + } + else + { + gTasks[taskId].data[0] = gBattleAnimArgs[1]; + gTasks[taskId].data[15] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); + sub_80798F4(&gTasks[taskId], gTasks[taskId].data[15], &gUnknown_084029DC); + gTasks[taskId].func = sub_8130970; + } +} + +static void sub_8130970(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + if (++task->data[1] > 1) + { + task->data[1] = 0; + if (!(task->data[2] & 1)) + gSprites[task->data[15]].pos2.x = 2; + else + gSprites[task->data[15]].pos2.x = -2; + } + + if (!sub_807992C(task)) + { + gSprites[task->data[15]].pos2.x = 0; + if (--task->data[0]) + { + sub_80798F4(&gTasks[taskId], gTasks[taskId].data[15], &gUnknown_084029DC); + task->data[1] = 0; + task->data[2] = 0; + } + else + { + DestroyAnimVisualTask(taskId); + } + } +} + +void sub_8130A2C(struct Sprite *sprite) +{ + if (gBattleAnimArgs[0] == 0) + { + sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2); + sprite->pos1.y = sub_807A100(gAnimBankAttacker, 2); + } + else + { + sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankTarget, 2); + sprite->pos1.y = sub_807A100(gAnimBankTarget, 2); + } + + if (sprite->pos1.y < 8) + sprite->pos1.y = 8; + + sprite->data[0] = 0; + sprite->data[1] = gBattleAnimArgs[1]; + sprite->data[2] = 0; + sprite->data[3] = gBattleAnimArgs[2]; + sprite->callback = sub_8130A94; +} + +static void sub_8130A94(struct Sprite *sprite) +{ + if (++sprite->data[0] >= sprite->data[1]) + { + sprite->data[0] = 0; + sprite->data[2] = (sprite->data[2] + 1) & 1; + sprite->invisible = sprite->data[2]; + if (sprite->data[2] && --sprite->data[3] == 0) + DestroyAnimSprite(sprite); + } +} + +void sub_8130AEC(struct Sprite *sprite) +{ + if (gBattleAnimArgs[0] == 0) + { + sprite->oam.matrixNum |= 0x8; + sprite->pos1.x = 100; + sprite->data[7] = 1; + } + else + { + sprite->pos1.x = 140; + sprite->data[7] = -1; + } + + sprite->pos1.y = 56; + sprite->callback = sub_8130B38; +} + +static void sub_8130B38(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->pos1.y -= sprite->data[7] * 2; + if (sprite->data[1] & 1) + sprite->pos1.x -= sprite->data[7] * 2; + + if (++sprite->data[1] == 9) + { + sprite->data[1] = 0; + sprite->data[0]++; + } + break; + case 1: + if (++sprite->data[1] == 4) + { + sprite->data[1] = 0; + sprite->data[0]++; + } + break; + case 2: + sprite->data[1]++; + sprite->pos1.y += sprite->data[7] * 3; + sprite->pos2.x = sprite->data[7] * (gSineTable[sprite->data[1] * 10] >> 3); + if (sprite->data[1] == 12) + { + sprite->data[1] = 0; + sprite->data[0]++; + } + break; + case 3: + if (++sprite->data[1] == 2) + { + sprite->data[1] = 0; + sprite->data[0]++; + } + break; + case 4: + sprite->data[1]++; + sprite->pos1.y -= sprite->data[7] * 3; + sprite->pos2.x = sprite->data[7] * (gSineTable[sprite->data[1] * 10] >> 3); + if (sprite->data[1] == 12) + sprite->data[0]++; + break; + case 5: + sprite->data[1]++; + sprite->pos1.y += sprite->data[7] * 3; + sprite->pos2.x = sprite->data[7] * (gSineTable[sprite->data[1] * 10] >> 3); + if (sprite->data[1] == 15) + sprite->oam.tileNum += 16; + + if (sprite->data[1] == 18) + { + sprite->data[1] = 0; + sprite->data[0]++; + } + break; + case 6: + sprite->pos1.x += sprite->data[7] * 6; + if (++sprite->data[1] == 9) + { + sprite->data[1] = 0; + sprite->data[0]++; + } + break; + case 7: + sprite->pos1.x += sprite->data[7] * 2; + if (++sprite->data[1] == 1) + { + sprite->data[1] = 0; + sprite->data[0]++; + } + break; + case 8: + sprite->pos1.x -= sprite->data[7] * 3; + if (++sprite->data[1] == 5) + DestroyAnimSprite(sprite); + break; + } +} + +void sub_8130D20(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + task->data[15] = GetAnimBattlerSpriteId(0); + if (!IsContest()) + { + if (IsDoubleBattle() == TRUE) + { + int x = GetBattlerSpriteCoord(gAnimBankAttacker, 0); + int y = GetBattlerSpriteCoord(gAnimBankAttacker ^ 2, 0); + if (x > y) + task->data[14] = 1; + else + task->data[14] = -1; + } + else + { + if (GetBattlerSide(gAnimBankAttacker) == B_SIDE_PLAYER) + task->data[14] = -1; + else + task->data[14] = 1; + } + } + else + { + task->data[14] = 1; + } + + task->func = sub_8130DBC; +} + +static void sub_8130DBC(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + if (++task->data[1] == 13) + { + task->data[1] = 0; + task->data[0]++; + } + break; + case 1: + gSprites[task->data[15]].pos2.x -= task->data[14] * 3; + if (++task->data[1] == 6) + { + task->data[1] = 0; + task->data[0]++; + } + break; + case 2: + gSprites[task->data[15]].pos2.x += task->data[14] * 3; + if (++task->data[1] == 6) + { + task->data[1] = 0; + task->data[0]++; + } + break; + case 3: + if (++task->data[1] == 2) + { + task->data[1] = 0; + if (task->data[2] == 0) + { + task->data[2]++; + task->data[0] = 1; + } + else + { + task->data[0]++; + } + } + break; + case 4: + gSprites[task->data[15]].pos2.x += task->data[14]; + if (++task->data[1] == 3) + { + task->data[1] = 0; + task->data[0]++; + } + break; + case 5: + if (++task->data[1] == 6) + { + task->data[1] = 0; + task->data[0]++; + } + break; + case 6: + gSprites[task->data[15]].pos2.x -= task->data[14] * 4; + if (++task->data[1] == 5) + { + task->data[1] = 0; + task->data[0]++; + } + break; + case 7: + gSprites[task->data[15]].pos2.x += task->data[14] * 4; + if (++task->data[1] == 5) + { + task->data[1] = 0; + task->data[0]++; + } + break; + case 8: + gSprites[task->data[15]].pos2.x = 0; + DestroyAnimVisualTask(taskId); + break; + } +} + +void sub_8130F5C(struct Sprite *sprite) +{ + if (gBattleAnimArgs[0] == 0) + { + InitAnimSpritePos(sprite, 1); + sprite->data[7] = gAnimBankAttacker; + } + else + { + sprite->data[7] = gAnimBankTarget; + } + + if (GetBattlerSide(sprite->data[7]) == B_SIDE_OPPONENT) + sprite->oam.matrixNum = 8; + + sprite->oam.priority = sub_8079ED4(sprite->data[7]); + sprite->oam.objMode = ST_OAM_OBJ_BLEND; + sprite->callback = sub_8130FE0; +} + +static void sub_8130FE0(struct Sprite *sprite) +{ + u16 x, y; + + switch (sprite->data[5]) + { + case 0: + switch (sprite->data[6]) + { + default: + sprite->data[6] = 0; + case 0: + case 4: + x = sub_807A100(sprite->data[7], 5) - 4; + y = sub_807A100(sprite->data[7], 3) - 4; + break; + case 1: + x = sub_807A100(sprite->data[7], 5) - 4; + y = sub_807A100(sprite->data[7], 2) + 4; + break; + case 2: + x = sub_807A100(sprite->data[7], 4) + 4; + y = sub_807A100(sprite->data[7], 3) - 4; + break; + case 3: + x = sub_807A100(sprite->data[7], 4) + 4; + y = sub_807A100(sprite->data[7], 2) - 4; + break; + case 5: + x = GetBattlerSpriteCoord(sprite->data[7], 2); + y = GetBattlerSpriteCoord(sprite->data[7], 3); + break; + } + + if (sprite->data[6] == 4) + sprite->data[0] = 24; + else if (sprite->data[6] == 5) + sprite->data[0] = 6; + else + sprite->data[0] = 12; + + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = x; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = y; + InitAnimLinearTranslation(sprite); + sprite->data[5]++; + break; + case 1: + if (TranslateAnimLinear(sprite)) + { + switch (sprite->data[6]) + { + default: + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + sprite->data[0] = 0; + sprite->data[5]++; + sprite->data[6]++; + break; + case 4: + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + sprite->data[5] = 0; + sprite->data[6]++; + break; + case 5: + sprite->data[0] = 0; + sprite->data[1] = 16; + sprite->data[2] = 0; + sprite->data[5] = 3; + break; + } + } + break; + case 2: + if (++sprite->data[0] == 4) + sprite->data[5] = 0; + break; + case 3: + if (!(sprite->data[0] & 1)) + sprite->data[1]--; + else + sprite->data[2]++; + + REG_BLDALPHA = (sprite->data[2] << 8) | sprite->data[1]; + if (++sprite->data[0] == 32) + { + sprite->invisible = 1; + sprite->data[5]++; + } + break; + case 4: + DestroyAnimSprite(sprite); + break; + } +} + +static void sub_81311E4(struct Sprite *sprite) +{ + sprite->pos2.x = ((sprite->data[2] - sprite->data[0]) * sprite->data[5]) / sprite->data[4]; + sprite->pos2.y = ((sprite->data[3] - sprite->data[1]) * sprite->data[5]) / sprite->data[4]; + if (!(sprite->data[5] & 1)) + { + CreateSprite( + &gSpriteTemplate_8402500, + sprite->pos1.x + sprite->pos2.x, + sprite->pos1.y + sprite->pos2.y, 5); + } + + if (sprite->data[5] == sprite->data[4]) + DestroyAnimSprite(sprite); + + sprite->data[5]++; +} + +void sub_8131264(struct Sprite *sprite) +{ + GetBattlerSpriteCoord(gAnimBankTarget, 2); // unused local variable + GetBattlerSpriteCoord(gAnimBankTarget, 3); // unused local variable + + if (GetBattlerSide(gAnimBankTarget) == B_SIDE_PLAYER || IsContest()) + { + sprite->data[0] = sprite->pos1.x - gBattleAnimArgs[0]; + sprite->data[2] = sprite->pos1.x - gBattleAnimArgs[2]; + } + else + { + sprite->data[0] = sprite->pos1.x + gBattleAnimArgs[0]; + sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[2]; + } + + sprite->data[1] = sprite->pos1.y + gBattleAnimArgs[1]; + sprite->data[3] = sprite->pos1.y + gBattleAnimArgs[3]; + sprite->data[4] = gBattleAnimArgs[4]; + sprite->pos1.x = sprite->data[0]; + sprite->pos1.y = sprite->data[1]; + sprite->callback = sub_81311E4; +} + +void sub_81312E4(u8 taskId) +{ + int i; + u8 spriteId = GetAnimBattlerSpriteId(0); + + if (gTasks[taskId].data[0] == 0) + { + sub_8078E70(spriteId, 0); + gTasks[taskId].data[1] = 0x100; + gTasks[taskId].data[2] = 0x100; + gTasks[taskId].data[0]++; + } + else if (gTasks[taskId].data[0] == 1) + { + gTasks[taskId].data[1] += 0x60; + gTasks[taskId].data[2] -= 0xD; + obj_id_set_rotscale(spriteId, gTasks[taskId].data[1], gTasks[taskId].data[2], 0); + if (++gTasks[taskId].data[3] == 9) + { + gTasks[taskId].data[3] = 0; + sub_8078F40(spriteId); + gSprites[spriteId].invisible = 1; + gTasks[taskId].data[0]++; + } + } + else + { + refresh_graphics_maybe(gAnimBankAttacker, 0, spriteId); + if (IsContest()) + { + gSprites[gBankSpriteIds[gAnimBankAttacker]].affineAnims = gSpriteAffineAnimTable_81E7C18; + StartSpriteAffineAnim(&gSprites[gBankSpriteIds[gAnimBankAttacker]], 0); + } + + for (i = 0; i < 16; i++) + gTasks[taskId].data[i] = 0; + + gTasks[taskId].func = sub_8131408; + } +} + +static void sub_8131408(u8 taskId) +{ + u8 spriteId = GetAnimBattlerSpriteId(0); + + switch (gTasks[taskId].data[0]) + { + case 0: + gSprites[spriteId].pos2.y = -200; + gSprites[spriteId].pos2.x = 200; + gSprites[spriteId].invisible = 0; + gTasks[taskId].data[10] = 0; + gTasks[taskId].data[0]++; + break; + case 1: + gTasks[taskId].data[10] += 112; + gSprites[spriteId].pos2.y += gTasks[taskId].data[10] >> 8; + if (gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y >= -32) + gSprites[spriteId].pos2.x = 0; + + if (gSprites[spriteId].pos2.y > 0) + gSprites[spriteId].pos2.y = 0; + + if (gSprites[spriteId].pos2.y == 0) + { + PlaySE12WithPanning(SE_W145B, BattleAnimAdjustPanning(-64)); + gTasks[taskId].data[10] -= 0x800; + gTasks[taskId].data[0]++; + } + break; + case 2: + gTasks[taskId].data[10] -= 112; + if (gTasks[taskId].data[10] < 0) + gTasks[taskId].data[10] = 0; + + gSprites[spriteId].pos2.y -= gTasks[taskId].data[10] >> 8; + if (gTasks[taskId].data[10] == 0) + gTasks[taskId].data[0]++; + break; + case 3: + gTasks[taskId].data[10] += 112; + gSprites[spriteId].pos2.y += gTasks[taskId].data[10] >> 8; + if (gSprites[spriteId].pos2.y > 0) + gSprites[spriteId].pos2.y = 0; + + if (gSprites[spriteId].pos2.y == 0) + { + PlaySE12WithPanning(SE_W145B, BattleAnimAdjustPanning(-64)); + DestroyAnimVisualTask(taskId); + } + break; + } +} + +void sub_8131564(struct Sprite *sprite) +{ + s16 y2; + + if (GetBattlerSide(gAnimBankTarget) == B_SIDE_PLAYER) + { + sprite->subpriority = sub_8079E90(gAnimBankTarget) - 2; + y2 = -144; + } + else + { + sprite->subpriority = sub_8079E90(gAnimBankTarget) + 2; + y2 = -96; + } + + sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankTarget, 3); + sprite->pos2.y = y2; + sprite->callback = sub_81315C8; +} + +static void sub_81315C8(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->pos2.y += 10; + if (sprite->pos2.y >= 0) + { + PlaySE12WithPanning(SE_W166, BattleAnimAdjustPanning(63)); + sprite->pos2.y = 0; + sprite->data[0]++; + } + break; + case 1: + sprite->data[1] += 4; + sprite->pos2.y = -(gSineTable[sprite->data[1]] >> 3); + if (sprite->data[1] > 127) + { + PlaySE12WithPanning(SE_W166, BattleAnimAdjustPanning(63)); + sprite->data[1] = 0; + sprite->pos2.y = 0; + sprite->data[0]++; + } + break; + case 2: + sprite->data[1] += 6; + sprite->pos2.y = -(gSineTable[sprite->data[1]] >> 4); + if (sprite->data[1] > 127) + { + sprite->data[1] = 0; + sprite->pos2.y = 0; + sprite->data[0]++; + } + break; + case 3: + if (++sprite->data[1] > 8) + { + PlaySE12WithPanning(SE_W043, BattleAnimAdjustPanning(63)); + sprite->data[1] = 0; + sprite->data[0]++; + } + break; + case 4: + if (++sprite->data[1] > 8) + { + sprite->data[1] = 0; + sprite->data[2]++; + sprite->invisible = sprite->data[2] & 1; + if (sprite->data[2] == 7) + DestroyAnimSprite(sprite); + } + break; + } +} + +void sub_81316F8(u8 taskId) +{ + s16 spriteId1, spriteId2; + + if (IsContest()) + { + DestroyAnimVisualTask(taskId); + return; + } + + spriteId1 = duplicate_obj_of_side_rel2move_in_transparent_mode(1); + if (spriteId1 < 0) + { + DestroyAnimVisualTask(taskId); + return; + } + + spriteId2 = duplicate_obj_of_side_rel2move_in_transparent_mode(1); + if (spriteId2 < 0) + { + obj_delete_but_dont_free_vram(&gSprites[spriteId1]); + DestroyAnimVisualTask(taskId); + return; + } + + gSprites[spriteId2].pos2.x += 24; + gSprites[spriteId1].pos2.x -= 24; + gSprites[spriteId2].data[0] = 0; + gSprites[spriteId1].data[0] = 0; + gSprites[spriteId2].data[1] = 0; + gSprites[spriteId1].data[1] = 0; + gSprites[spriteId2].data[2] = 0; + gSprites[spriteId1].data[2] = 0; + gSprites[spriteId2].data[3] = 16; + gSprites[spriteId1].data[3] = -16; + gSprites[spriteId2].data[4] = 0; + gSprites[spriteId1].data[4] = 128; + gSprites[spriteId2].data[5] = 24; + gSprites[spriteId1].data[5] = 24; + gSprites[spriteId2].data[6] = taskId; + gSprites[spriteId1].data[6] = taskId; + gSprites[spriteId2].data[7] = 0; + gSprites[spriteId1].data[7] = 0; + gTasks[taskId].data[0] = 2; + gSprites[spriteId2].invisible = 0; + gSprites[spriteId1].invisible = 1; + gSprites[spriteId2].oam.objMode = ST_OAM_OBJ_NORMAL; + gSprites[spriteId1].oam.objMode = ST_OAM_OBJ_NORMAL; + gSprites[spriteId2].callback = sub_8131838; + gSprites[spriteId1].callback = sub_8131838; + gTasks[taskId].func = sub_8131810; +} + +static void sub_8131810(u8 taskId) +{ + if (gTasks[taskId].data[0] == 0) + DestroyAnimVisualTask(taskId); +} + +static void sub_8131838(struct Sprite *sprite) +{ + if (++sprite->data[1] > 1) + { + sprite->data[1] = 0; + sprite->invisible ^= 1; + } + + sprite->data[4] = (sprite->data[4] + sprite->data[3]) & 0xFF; + sprite->pos2.x = Cos(sprite->data[4], sprite->data[5]); + switch (sprite->data[0]) + { + case 0: + if (++sprite->data[2] == 60) + { + sprite->data[2] = 0; + sprite->data[0]++; + } + break; + case 1: + if (++sprite->data[2] > 0) + { + sprite->data[2] = 0; + sprite->data[5] -= 2; + if (sprite->data[5] < 0) + { + gTasks[sprite->data[6]].data[sprite->data[7]]--; + obj_delete_but_dont_free_vram(sprite); + } + } + break; + } +} diff --git a/src/contest_effect.c b/src/contest_effect.c index a5615851f..d97f38138 100644 --- a/src/contest_effect.c +++ b/src/contest_effect.c @@ -158,10 +158,8 @@ static void ContestEffect_StartlePrevMons(void) u8 a = shared192D0.contestant; if (shared192D0.turnOrder[a] != 0) { - int i; - int j = 0; - - for (i = 0; i < 4; i++) + int i, j; + for (i = 0, j = 0; i < 4; i++) if (shared192D0.turnOrder[a] > shared192D0.turnOrder[i]) shared192D0.jamQueue[j++] = i; shared192D0.jamQueue[j] = 0xFF; @@ -1113,16 +1111,20 @@ static bool8 WasAtLeastOneOpponentJammed(void) shared192D0.jam2 = 10; SetContestantEffectStringID(contestant, CONTEST_STRING_LITTLE_DISTRACTED); } - else if ((shared192D0.jam2 -= sContestantStatus[contestant].jamReduction) <= 0) - { - shared192D0.jam2 = 0; - SetContestantEffectStringID(contestant, CONTEST_STRING_NOT_FAZED); - } else { - JamContestant(contestant, shared192D0.jam2); - SetStartledString(contestant, shared192D0.jam2); - jamBuffer[contestant] = shared192D0.jam2; + shared192D0.jam2 -= sContestantStatus[contestant].jamReduction; + if (shared192D0.jam2 <= 0) + { + shared192D0.jam2 = 0; + SetContestantEffectStringID(contestant, CONTEST_STRING_NOT_FAZED); + } + else + { + JamContestant(contestant, shared192D0.jam2); + SetStartledString(contestant, shared192D0.jam2); + jamBuffer[contestant] = shared192D0.jam2; + } } } } |