diff options
author | PikalaxALT <PikalaxALT@users.noreply.github.com> | 2019-06-22 14:24:04 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-06-22 14:24:04 -0400 |
commit | e33356d84108fedede79c683ccb704467b462097 (patch) | |
tree | bab377e9700435c005a8212185fc3ae619cc4e7c | |
parent | 8a301ce4b91fd81b2c2a6fa2733ea5d3ba63f47d (diff) | |
parent | 43d256370461121e3314765a7b98d9a00a9ffc95 (diff) |
Merge pull request #72 from pret/battle_anim_mon_movement
Battle anim mon movement
-rw-r--r-- | asm/battle_anim_mon_movement.s | 2588 | ||||
-rw-r--r-- | include/battle_anim.h | 18 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/battle_anim_mon_movement.c | 788 |
4 files changed, 804 insertions, 2591 deletions
diff --git a/asm/battle_anim_mon_movement.s b/asm/battle_anim_mon_movement.s deleted file mode 100644 index 14cc141cd..000000000 --- a/asm/battle_anim_mon_movement.s +++ /dev/null @@ -1,2588 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80989F8 -sub_80989F8: @ 80989F8 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r4, _08098A18 @ =gBattleAnimArgs - ldrb r0, [r4] - bl GetAnimBankSpriteId - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0xFF - bne _08098A1C - adds r0, r5, 0 - bl DestroyAnimVisualTask - b _08098A58 - .align 2, 0 -_08098A18: .4byte gBattleAnimArgs -_08098A1C: - ldr r1, _08098A60 @ =gSprites - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r0, r1 - ldrh r1, [r4, 0x2] - strh r1, [r0, 0x24] - ldrh r1, [r4, 0x4] - strh r1, [r0, 0x26] - ldr r1, _08098A64 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - strh r2, [r0, 0x8] - ldrh r1, [r4, 0x6] - strh r1, [r0, 0xA] - ldrh r1, [r4, 0x8] - strh r1, [r0, 0xC] - ldrh r1, [r4, 0x8] - strh r1, [r0, 0xE] - ldrh r1, [r4, 0x2] - strh r1, [r0, 0x10] - ldrh r1, [r4, 0x4] - strh r1, [r0, 0x12] - ldr r1, _08098A68 @ =sub_8098A6C - str r1, [r0] - adds r0, r5, 0 - bl _call_via_r1 -_08098A58: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08098A60: .4byte gSprites -_08098A64: .4byte gTasks -_08098A68: .4byte sub_8098A6C - thumb_func_end sub_80989F8 - - thumb_func_start sub_8098A6C -sub_8098A6C: @ 8098A6C - push {r4-r7,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r1, _08098AA8 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r3, r0, r1 - ldrh r0, [r3, 0xE] - movs r2, 0xE - ldrsh r5, [r3, r2] - adds r7, r1, 0 - cmp r5, 0 - bne _08098B12 - ldr r2, _08098AAC @ =gSprites - movs r6, 0x8 - ldrsh r1, [r3, r6] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r0, r2 - movs r6, 0x24 - ldrsh r0, [r1, r6] - adds r6, r2, 0 - cmp r0, 0 - bne _08098AB0 - ldrh r0, [r3, 0x10] - strh r0, [r1, 0x24] - b _08098AB2 - .align 2, 0 -_08098AA8: .4byte gTasks -_08098AAC: .4byte gSprites -_08098AB0: - strh r5, [r1, 0x24] -_08098AB2: - lsls r2, r4, 2 - adds r0, r2, r4 - lsls r0, 3 - adds r3, r0, r7 - movs r0, 0x8 - ldrsh r1, [r3, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r0, r6 - movs r5, 0x26 - ldrsh r0, [r1, r5] - cmp r0, 0 - bne _08098AD2 - ldrh r0, [r3, 0x12] - b _08098AD4 -_08098AD2: - movs r0, 0 -_08098AD4: - strh r0, [r1, 0x26] - adds r0, r2, r4 - lsls r0, 3 - adds r2, r0, r7 - ldrh r0, [r2, 0xC] - strh r0, [r2, 0xE] - ldrh r0, [r2, 0xA] - subs r0, 0x1 - strh r0, [r2, 0xA] - lsls r0, 16 - asrs r3, r0, 16 - cmp r3, 0 - bne _08098B16 - movs r0, 0x8 - ldrsh r1, [r2, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - strh r3, [r0, 0x24] - movs r5, 0x8 - ldrsh r1, [r2, r5] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - strh r3, [r0, 0x26] - adds r0, r4, 0 - bl DestroyAnimVisualTask - b _08098B16 -_08098B12: - subs r0, 0x1 - strh r0, [r3, 0xE] -_08098B16: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8098A6C - - thumb_func_start sub_8098B1C -sub_8098B1C: @ 8098B1C - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - movs r6, 0 - ldr r2, _08098B44 @ =gBattleAnimArgs - ldrh r0, [r2] - movs r3, 0 - ldrsh r1, [r2, r3] - cmp r1, 0x3 - bgt _08098B48 - lsls r0, 24 - lsrs r0, 24 - bl GetAnimBankSpriteId - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0xFF - bne _08098B9E - b _08098BA2 - .align 2, 0 -_08098B44: .4byte gBattleAnimArgs -_08098B48: - cmp r1, 0x8 - beq _08098B94 - movs r1, 0 - ldrsh r0, [r2, r1] - cmp r0, 0x5 - beq _08098B68 - cmp r0, 0x5 - bgt _08098B5E - cmp r0, 0x4 - beq _08098B64 - b _08098B70 -_08098B5E: - cmp r0, 0x6 - beq _08098B6C - b _08098B70 -_08098B64: - movs r0, 0 - b _08098B72 -_08098B68: - movs r0, 0x2 - b _08098B72 -_08098B6C: - movs r0, 0x1 - b _08098B72 -_08098B70: - movs r0, 0x3 -_08098B72: - bl GetBattlerAtPosition - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl sub_8072DF0 - lsls r0, 24 - cmp r0, 0 - bne _08098B88 - movs r6, 0x1 -_08098B88: - ldr r0, _08098B90 @ =gBattlerSpriteIds - adds r0, r4, r0 - b _08098B9C - .align 2, 0 -_08098B90: .4byte gBattlerSpriteIds -_08098B94: - ldr r1, _08098BAC @ =gBattlerSpriteIds - ldr r0, _08098BB0 @ =gBattleAnimAttacker - ldrb r0, [r0] - adds r0, r1 -_08098B9C: - ldrb r3, [r0] -_08098B9E: - cmp r6, 0 - beq _08098BB4 -_08098BA2: - adds r0, r5, 0 - bl DestroyAnimVisualTask - b _08098BF2 - .align 2, 0 -_08098BAC: .4byte gBattlerSpriteIds -_08098BB0: .4byte gBattleAnimAttacker -_08098BB4: - ldr r1, _08098BF8 @ =gSprites - lsls r0, r3, 4 - adds r0, r3 - lsls r0, 2 - adds r0, r1 - ldr r2, _08098BFC @ =gBattleAnimArgs - ldrh r1, [r2, 0x2] - strh r1, [r0, 0x24] - ldrh r1, [r2, 0x4] - strh r1, [r0, 0x26] - ldr r1, _08098C00 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - strh r3, [r0, 0x8] - ldrh r1, [r2, 0x6] - strh r1, [r0, 0xA] - ldrh r1, [r2, 0x8] - strh r1, [r0, 0xC] - ldrh r1, [r2, 0x8] - strh r1, [r0, 0xE] - ldrh r1, [r2, 0x2] - strh r1, [r0, 0x10] - ldrh r1, [r2, 0x4] - strh r1, [r0, 0x12] - ldr r1, _08098C04 @ =sub_8098C08 - str r1, [r0] - adds r0, r5, 0 - bl _call_via_r1 -_08098BF2: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08098BF8: .4byte gSprites -_08098BFC: .4byte gBattleAnimArgs -_08098C00: .4byte gTasks -_08098C04: .4byte sub_8098C08 - thumb_func_end sub_8098B1C - - thumb_func_start sub_8098C08 -sub_8098C08: @ 8098C08 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r6, r0, 24 - ldr r1, _08098C4C @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r3, r0, r1 - ldrh r2, [r3, 0xE] - movs r4, 0xE - ldrsh r0, [r3, r4] - mov r12, r1 - cmp r0, 0 - bne _08098CC0 - ldr r2, _08098C50 @ =gSprites - movs r7, 0x8 - ldrsh r1, [r3, r7] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r4, r0, r2 - movs r0, 0x24 - ldrsh r1, [r4, r0] - ldrh r5, [r3, 0x10] - movs r7, 0x10 - ldrsh r0, [r3, r7] - adds r7, r2, 0 - cmp r1, r0 - bne _08098C54 - negs r0, r5 - strh r0, [r4, 0x24] - b _08098C56 - .align 2, 0 -_08098C4C: .4byte gTasks -_08098C50: .4byte gSprites -_08098C54: - strh r5, [r4, 0x24] -_08098C56: - lsls r3, r6, 2 - adds r1, r3, r6 - lsls r1, 3 - add r1, r12 - movs r0, 0x8 - ldrsh r2, [r1, r0] - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r4, r0, r7 - movs r0, 0x26 - ldrsh r2, [r4, r0] - mov r8, r2 - ldrh r5, [r1, 0x12] - movs r2, 0x12 - ldrsh r0, [r1, r2] - cmp r8, r0 - bne _08098C80 - negs r0, r5 - strh r0, [r4, 0x26] - b _08098C82 -_08098C80: - strh r5, [r4, 0x26] -_08098C82: - adds r0, r3, r6 - lsls r0, 3 - mov r4, r12 - adds r3, r0, r4 - ldrh r0, [r3, 0xC] - strh r0, [r3, 0xE] - ldrh r0, [r3, 0xA] - subs r0, 0x1 - strh r0, [r3, 0xA] - lsls r0, 16 - asrs r2, r0, 16 - cmp r2, 0 - bne _08098CC4 - movs r0, 0x8 - ldrsh r1, [r3, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r7 - strh r2, [r0, 0x24] - movs r4, 0x8 - ldrsh r1, [r3, r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r7 - strh r2, [r0, 0x26] - adds r0, r6, 0 - bl DestroyAnimVisualTask - b _08098CC4 -_08098CC0: - subs r0, r2, 0x1 - strh r0, [r3, 0xE] -_08098CC4: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8098C08 - - thumb_func_start sub_8098CD0 -sub_8098CD0: @ 8098CD0 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r4, _08098CF0 @ =gBattleAnimArgs - ldrb r0, [r4] - bl GetAnimBankSpriteId - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0xFF - bne _08098CF4 - adds r0, r5, 0 - bl DestroyAnimVisualTask - b _08098D42 - .align 2, 0 -_08098CF0: .4byte gBattleAnimArgs -_08098CF4: - ldr r0, _08098D48 @ =gSprites - lsls r1, r3, 4 - adds r1, r3 - lsls r1, 2 - adds r1, r0 - ldrh r0, [r4, 0x2] - ldrh r2, [r1, 0x24] - adds r0, r2 - movs r2, 0 - strh r0, [r1, 0x24] - ldrh r0, [r4, 0x4] - ldrh r6, [r1, 0x26] - adds r0, r6 - strh r0, [r1, 0x26] - ldr r0, _08098D4C @ =gTasks - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 3 - adds r1, r0 - strh r3, [r1, 0x8] - strh r2, [r1, 0xA] - ldrh r0, [r4, 0x6] - strh r0, [r1, 0xC] - strh r2, [r1, 0xE] - ldrh r0, [r4, 0x8] - strh r0, [r1, 0x10] - movs r2, 0x2 - ldrsh r0, [r4, r2] - lsls r0, 1 - strh r0, [r1, 0x12] - movs r6, 0x4 - ldrsh r0, [r4, r6] - lsls r0, 1 - strh r0, [r1, 0x14] - ldr r2, _08098D50 @ =sub_8098D54 - str r2, [r1] - adds r0, r5, 0 - bl _call_via_r2 -_08098D42: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08098D48: .4byte gSprites -_08098D4C: .4byte gTasks -_08098D50: .4byte sub_8098D54 - thumb_func_end sub_8098CD0 - - thumb_func_start sub_8098D54 -sub_8098D54: @ 8098D54 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _08098DAC @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r4, r0, r1 - ldrh r2, [r4, 0xE] - movs r3, 0xE - ldrsh r0, [r4, r3] - adds r6, r1, 0 - cmp r0, 0 - beq _08098D72 - b _08098E84 -_08098D72: - ldrh r1, [r4, 0xA] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08098DB4 - ldr r2, _08098DB0 @ =gSprites - movs r0, 0x8 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r4, 0x12] - ldrh r3, [r0, 0x24] - adds r1, r3 - strh r1, [r0, 0x24] - movs r0, 0x8 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r4, 0x14] - ldrh r3, [r0, 0x26] - adds r1, r3 - strh r1, [r0, 0x26] - adds r3, r2, 0 - b _08098DDE - .align 2, 0 -_08098DAC: .4byte gTasks -_08098DB0: .4byte gSprites -_08098DB4: - ldr r3, _08098E40 @ =gSprites - movs r0, 0x8 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - ldrh r1, [r0, 0x24] - ldrh r2, [r4, 0x12] - subs r1, r2 - strh r1, [r0, 0x24] - movs r2, 0x8 - ldrsh r1, [r4, r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - ldrh r1, [r0, 0x26] - ldrh r2, [r4, 0x14] - subs r1, r2 - strh r1, [r0, 0x26] -_08098DDE: - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r4, r0, r6 - ldrh r0, [r4, 0x10] - strh r0, [r4, 0xE] - ldrh r0, [r4, 0xA] - adds r2, r0, 0x1 - strh r2, [r4, 0xA] - lsls r0, r2, 16 - asrs r0, 16 - movs r6, 0xC - ldrsh r1, [r4, r6] - cmp r0, r1 - blt _08098E88 - movs r0, 0x1 - ands r2, r0 - cmp r2, 0 - beq _08098E44 - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r3 - movs r2, 0x12 - ldrsh r0, [r4, r2] - lsrs r2, r0, 31 - adds r0, r2 - asrs r0, 1 - ldrh r6, [r1, 0x24] - adds r0, r6 - strh r0, [r1, 0x24] - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r3 - movs r2, 0x14 - ldrsh r0, [r4, r2] - lsrs r2, r0, 31 - adds r0, r2 - asrs r0, 1 - ldrh r3, [r1, 0x26] - adds r0, r3 - strh r0, [r1, 0x26] - b _08098E7C - .align 2, 0 -_08098E40: .4byte gSprites -_08098E44: - movs r6, 0x8 - ldrsh r0, [r4, r6] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r3 - movs r0, 0x12 - ldrsh r1, [r4, r0] - lsrs r0, r1, 31 - adds r1, r0 - asrs r1, 1 - ldrh r0, [r2, 0x24] - subs r0, r1 - strh r0, [r2, 0x24] - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r3 - movs r3, 0x14 - ldrsh r1, [r4, r3] - lsrs r0, r1, 31 - adds r1, r0 - asrs r1, 1 - ldrh r0, [r2, 0x26] - subs r0, r1 - strh r0, [r2, 0x26] -_08098E7C: - adds r0, r5, 0 - bl DestroyAnimVisualTask - b _08098E88 -_08098E84: - subs r0, r2, 0x1 - strh r0, [r4, 0xE] -_08098E88: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8098D54 - - thumb_func_start sub_8098E90 -sub_8098E90: @ 8098E90 - push {r4,r5,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r5, _08098EE0 @ =gBattleAnimArgs - ldrb r0, [r5] - bl GetAnimBankSpriteId - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08098EE4 @ =gSprites - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - ldrh r2, [r5, 0x2] - strh r2, [r1, 0x24] - ldr r2, _08098EE8 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r2 - strh r0, [r1, 0x8] - ldrh r0, [r5, 0x2] - strh r0, [r1, 0xA] - ldrh r0, [r5, 0x4] - strh r0, [r1, 0xC] - ldrh r0, [r5, 0x6] - strh r0, [r1, 0xE] - ldrh r0, [r5, 0x8] - strh r0, [r1, 0x10] - ldr r2, _08098EEC @ =sub_8098EF0 - str r2, [r1] - adds r0, r4, 0 - bl _call_via_r2 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08098EE0: .4byte gBattleAnimArgs -_08098EE4: .4byte gSprites -_08098EE8: .4byte gTasks -_08098EEC: .4byte sub_8098EF0 - thumb_func_end sub_8098E90 - - thumb_func_start sub_8098EF0 -sub_8098EF0: @ 8098EF0 - push {r4-r7,lr} - lsls r0, 24 - lsrs r6, r0, 24 - ldr r2, _08098F7C @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r3, r0, r2 - ldrb r5, [r3, 0x8] - ldrh r4, [r3, 0xA] - ldrh r1, [r3, 0x18] - adds r0, r1, 0x1 - strh r0, [r3, 0x18] - movs r7, 0xC - ldrsh r0, [r3, r7] - lsls r1, 16 - asrs r1, 16 - mov r12, r2 - ldr r7, _08098F80 @ =gSprites - cmp r0, r1 - bne _08098F42 - movs r0, 0 - strh r0, [r3, 0x18] - lsls r0, r5, 4 - adds r0, r5 - lsls r0, 2 - adds r1, r0, r7 - ldrh r3, [r1, 0x24] - movs r0, 0x24 - ldrsh r2, [r1, r0] - lsls r0, r4, 16 - asrs r0, 16 - cmp r2, r0 - bne _08098F3A - negs r0, r2 - lsls r0, 16 - lsrs r4, r0, 16 -_08098F3A: - lsls r0, r4, 16 - asrs r0, 16 - adds r0, r3 - strh r0, [r1, 0x24] -_08098F42: - lsls r2, r6, 2 - adds r2, r6 - lsls r2, 3 - add r2, r12 - strh r4, [r2, 0xA] - ldrh r1, [r2, 0xE] - ldrh r0, [r2, 0x1A] - adds r1, r0 - strh r1, [r2, 0x1A] - lsls r0, r5, 4 - adds r0, r5 - lsls r0, 2 - adds r0, r7 - lsls r1, 16 - asrs r1, 24 - strh r1, [r0, 0x26] - ldrh r0, [r2, 0x10] - subs r0, 0x1 - strh r0, [r2, 0x10] - lsls r0, 16 - cmp r0, 0 - bne _08098F74 - adds r0, r6, 0 - bl DestroyAnimVisualTask -_08098F74: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08098F7C: .4byte gTasks -_08098F80: .4byte gSprites - thumb_func_end sub_8098EF0 - - thumb_func_start sub_8098F84 -sub_8098F84: @ 8098F84 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r5, r0, 24 - movs r6, 0x1 - ldr r4, _08098FF8 @ =gBattleAnimArgs - ldrb r0, [r4] - bl GetAnimBankSpriteId - lsls r0, 24 - lsrs r7, r0, 24 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0x5 - ble _08098FA8 - movs r0, 0x5 - strh r0, [r4, 0x8] -_08098FA8: - movs r1, 0 - movs r2, 0x8 - ldrsh r0, [r4, r2] - adds r3, r4, 0 - ldr r2, _08098FFC @ =gTasks - mov r12, r2 - lsls r4, r5, 2 - ldr r2, _08099000 @ =sub_8099004 - mov r8, r2 - cmp r1, r0 - bge _08098FCE - adds r2, r0, 0 -_08098FC0: - lsls r0, r6, 25 - lsrs r6, r0, 24 - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, r2 - blt _08098FC0 -_08098FCE: - adds r0, r4, r5 - lsls r0, 3 - add r0, r12 - strh r7, [r0, 0x8] - ldrh r1, [r3, 0x2] - strh r1, [r0, 0xA] - ldrh r1, [r3, 0x4] - strh r1, [r0, 0xC] - ldrh r1, [r3, 0x6] - strh r1, [r0, 0xE] - strh r6, [r0, 0x10] - mov r1, r8 - str r1, [r0] - adds r0, r5, 0 - bl _call_via_r8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08098FF8: .4byte gBattleAnimArgs -_08098FFC: .4byte gTasks -_08099000: .4byte sub_8099004 - thumb_func_end sub_8098F84 - - thumb_func_start sub_8099004 -sub_8099004: @ 8099004 - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - adds r6, r0, 0 - ldr r1, _08099074 @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r5, r0, r1 - ldrb r4, [r5, 0x8] - movs r1, 0x12 - ldrsh r0, [r5, r1] - movs r2, 0xA - ldrsh r1, [r5, r2] - bl Sin - ldr r2, _08099078 @ =gSprites - lsls r1, r4, 4 - adds r1, r4 - lsls r1, 2 - adds r4, r1, r2 - strh r0, [r4, 0x24] - movs r1, 0x12 - ldrsh r0, [r5, r1] - movs r2, 0xC - ldrsh r1, [r5, r2] - bl Cos - negs r0, r0 - strh r0, [r4, 0x26] - ldrh r1, [r5, 0xC] - adds r0, r1 - strh r0, [r4, 0x26] - ldrh r0, [r5, 0x10] - ldrh r1, [r5, 0x12] - adds r0, r1 - movs r1, 0xFF - ands r0, r1 - strh r0, [r5, 0x12] - cmp r0, 0 - bne _0809905C - ldrh r0, [r5, 0xE] - subs r0, 0x1 - strh r0, [r5, 0xE] -_0809905C: - movs r2, 0xE - ldrsh r0, [r5, r2] - cmp r0, 0 - bne _0809906E - strh r0, [r4, 0x24] - strh r0, [r4, 0x26] - adds r0, r6, 0 - bl DestroyAnimVisualTask -_0809906E: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08099074: .4byte gTasks -_08099078: .4byte gSprites - thumb_func_end sub_8099004 - - thumb_func_start sub_809907C -sub_809907C: @ 809907C - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080990A4 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _08099098 - ldr r1, _080990A8 @ =gBattleAnimArgs - ldrh r0, [r1, 0x2] - negs r0, r0 - strh r0, [r1, 0x2] -_08099098: - adds r0, r4, 0 - bl sub_8098F84 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080990A4: .4byte gBattleAnimAttacker -_080990A8: .4byte gBattleAnimArgs - thumb_func_end sub_809907C - - thumb_func_start sub_80990AC -sub_80990AC: @ 80990AC - push {r4,lr} - adds r4, r0, 0 - adds r2, r4, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - ldr r0, _080990D4 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080990DC - ldr r1, _080990D8 @ =gBattleAnimArgs - ldrh r0, [r1, 0x2] - negs r0, r0 - b _080990E0 - .align 2, 0 -_080990D4: .4byte gBattleAnimAttacker -_080990D8: .4byte gBattleAnimArgs -_080990DC: - ldr r1, _0809910C @ =gBattleAnimArgs - ldrh r0, [r1, 0x2] -_080990E0: - strh r0, [r4, 0x30] - ldrh r2, [r1] - movs r0, 0 - strh r2, [r4, 0x2E] - strh r0, [r4, 0x32] - ldr r1, _08099110 @ =gBattlerSpriteIds - ldr r0, _08099114 @ =gBattleAnimAttacker - ldrb r0, [r0] - adds r0, r1 - ldrb r0, [r0] - strh r0, [r4, 0x34] - strh r2, [r4, 0x36] - ldr r1, _08099118 @ =sub_8099120 - adds r0, r4, 0 - bl StoreSpriteCallbackInData6 - ldr r0, _0809911C @ =sub_8074DC4 - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0809910C: .4byte gBattleAnimArgs -_08099110: .4byte gBattlerSpriteIds -_08099114: .4byte gBattleAnimAttacker -_08099118: .4byte sub_8099120 -_0809911C: .4byte sub_8074DC4 - thumb_func_end sub_80990AC - - thumb_func_start sub_8099120 -sub_8099120: @ 8099120 - push {lr} - ldrh r1, [r0, 0x36] - strh r1, [r0, 0x2E] - ldrh r1, [r0, 0x30] - negs r1, r1 - strh r1, [r0, 0x30] - ldr r1, _0809913C @ =sub_8074DC4 - str r1, [r0, 0x1C] - ldr r1, _08099140 @ =DestroyAnimSprite - bl StoreSpriteCallbackInData6 - pop {r0} - bx r0 - .align 2, 0 -_0809913C: .4byte sub_8074DC4 -_08099140: .4byte DestroyAnimSprite - thumb_func_end sub_8099120 - - thumb_func_start sub_8099144 -sub_8099144: @ 8099144 - push {r4,r5,lr} - adds r4, r0, 0 - adds r2, r4, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - ldr r5, _08099184 @ =gBattleAnimArgs - ldrb r0, [r5, 0x4] - bl GetAnimBankSpriteId - lsls r0, 24 - lsrs r0, 24 - ldrh r2, [r5] - movs r1, 0 - strh r2, [r4, 0x2E] - strh r1, [r4, 0x30] - ldrh r1, [r5, 0x2] - strh r1, [r4, 0x32] - strh r0, [r4, 0x34] - strh r2, [r4, 0x36] - ldr r1, _08099188 @ =sub_8099190 - adds r0, r4, 0 - bl StoreSpriteCallbackInData6 - ldr r0, _0809918C @ =sub_8074DC4 - str r0, [r4, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08099184: .4byte gBattleAnimArgs -_08099188: .4byte sub_8099190 -_0809918C: .4byte sub_8074DC4 - thumb_func_end sub_8099144 - - thumb_func_start sub_8099190 -sub_8099190: @ 8099190 - push {lr} - ldrh r1, [r0, 0x36] - strh r1, [r0, 0x2E] - ldrh r1, [r0, 0x32] - negs r1, r1 - strh r1, [r0, 0x32] - ldr r1, _080991AC @ =sub_8074DC4 - str r1, [r0, 0x1C] - ldr r1, _080991B0 @ =DestroyAnimSprite - bl StoreSpriteCallbackInData6 - pop {r0} - bx r0 - .align 2, 0 -_080991AC: .4byte sub_8074DC4 -_080991B0: .4byte DestroyAnimSprite - thumb_func_end sub_8099190 - - thumb_func_start sub_80991B4 -sub_80991B4: @ 80991B4 - push {r4-r7,lr} - sub sp, 0x4 - adds r6, r0, 0 - ldr r0, _080991CC @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080991D8 - ldr r1, _080991D0 @ =gBattlerSpriteIds - ldr r0, _080991D4 @ =gBattleAnimAttacker - b _080991DC - .align 2, 0 -_080991CC: .4byte gBattleAnimArgs -_080991D0: .4byte gBattlerSpriteIds -_080991D4: .4byte gBattleAnimAttacker -_080991D8: - ldr r1, _0809923C @ =gBattlerSpriteIds - ldr r0, _08099240 @ =gBattleAnimTarget -_080991DC: - ldrb r0, [r0] - adds r0, r1 - ldrb r7, [r0] - ldr r5, _08099244 @ =gBattleAnimArgs - ldrh r0, [r5, 0x4] - movs r3, 0 - strh r0, [r6, 0x2E] - ldr r0, _08099248 @ =gSprites - lsls r4, r7, 4 - adds r4, r7 - lsls r4, 2 - adds r4, r0 - ldrh r0, [r4, 0x24] - ldrh r1, [r4, 0x20] - adds r0, r1 - strh r0, [r6, 0x30] - ldrh r0, [r4, 0x20] - strh r0, [r6, 0x32] - ldrh r0, [r4, 0x26] - ldrh r1, [r4, 0x22] - adds r0, r1 - strh r0, [r6, 0x34] - ldrh r0, [r4, 0x22] - strh r0, [r6, 0x36] - adds r0, r6, 0 - str r3, [sp] - bl sub_80754B8 - ldr r3, [sp] - strh r3, [r6, 0x34] - strh r3, [r6, 0x36] - ldrh r0, [r4, 0x24] - strh r0, [r6, 0x38] - ldrh r0, [r4, 0x26] - strh r0, [r6, 0x3A] - adds r2, r6, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - movs r1, 0x2 - ldrsh r0, [r5, r1] - cmp r0, 0x1 - bne _0809924C - strh r3, [r6, 0x32] - b _08099252 - .align 2, 0 -_0809923C: .4byte gBattlerSpriteIds -_08099240: .4byte gBattleAnimTarget -_08099244: .4byte gBattleAnimArgs -_08099248: .4byte gSprites -_0809924C: - cmp r0, 0x2 - bne _08099252 - strh r3, [r6, 0x30] -_08099252: - ldr r0, _08099268 @ =gBattleAnimArgs - ldrh r1, [r0, 0x2] - lsls r0, r7, 8 - orrs r0, r1 - strh r0, [r6, 0x3C] - ldr r0, _0809926C @ =sub_8099270 - str r0, [r6, 0x1C] - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08099268: .4byte gBattleAnimArgs -_0809926C: .4byte sub_8099270 - thumb_func_end sub_80991B4 - - thumb_func_start sub_8099270 -sub_8099270: @ 8099270 - push {r4-r6,lr} - adds r2, r0, 0 - ldrh r0, [r2, 0x3C] - lsls r1, r0, 24 - lsrs r4, r1, 24 - adds r5, r4, 0 - lsls r0, 16 - asrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _080992AC @ =gSprites - adds r3, r1, r0 - ldrh r0, [r2, 0x2E] - movs r6, 0x2E - ldrsh r1, [r2, r6] - cmp r1, 0 - bne _080992B0 - cmp r4, 0x1 - bhi _0809929A - strh r1, [r3, 0x24] -_0809929A: - cmp r5, 0x2 - beq _080992A2 - cmp r5, 0 - bne _080992A4 -_080992A2: - strh r1, [r3, 0x26] -_080992A4: - adds r0, r2, 0 - bl DestroyAnimSprite - b _080992DA - .align 2, 0 -_080992AC: .4byte gSprites -_080992B0: - subs r0, 0x1 - strh r0, [r2, 0x2E] - ldrh r1, [r2, 0x30] - ldrh r0, [r2, 0x34] - adds r1, r0 - strh r1, [r2, 0x34] - ldrh r0, [r2, 0x32] - ldrh r4, [r2, 0x36] - adds r0, r4 - strh r0, [r2, 0x36] - lsls r1, 16 - asrs r1, 24 - ldrh r6, [r2, 0x38] - adds r1, r6 - strh r1, [r3, 0x24] - ldrh r0, [r2, 0x36] - lsls r0, 16 - asrs r0, 24 - ldrh r2, [r2, 0x3A] - adds r0, r2 - strh r0, [r3, 0x26] -_080992DA: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8099270 - - thumb_func_start sub_80992E0 -sub_80992E0: @ 80992E0 - push {r4-r6,lr} - adds r5, r0, 0 - ldr r0, _080992F4 @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080992FC - ldr r0, _080992F8 @ =gBattleAnimAttacker - b _080992FE - .align 2, 0 -_080992F4: .4byte gBattleAnimArgs -_080992F8: .4byte gBattleAnimAttacker -_080992FC: - ldr r0, _0809937C @ =gBattleAnimTarget -_080992FE: - ldrb r2, [r0] - ldr r0, _08099380 @ =gBattlerSpriteIds - adds r0, r2, r0 - ldrb r6, [r0] - adds r0, r2, 0 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _08099328 - ldr r1, _08099384 @ =gBattleAnimArgs - ldrh r0, [r1, 0x2] - negs r0, r0 - strh r0, [r1, 0x2] - movs r2, 0x6 - ldrsh r0, [r1, r2] - cmp r0, 0x1 - bne _08099328 - ldrh r0, [r1, 0x4] - negs r0, r0 - strh r0, [r1, 0x4] -_08099328: - ldr r2, _08099384 @ =gBattleAnimArgs - ldrh r0, [r2, 0x8] - movs r4, 0 - strh r0, [r5, 0x2E] - ldr r0, _08099388 @ =gSprites - lsls r1, r6, 4 - adds r1, r6 - lsls r1, 2 - adds r1, r0 - ldrh r0, [r1, 0x20] - strh r0, [r5, 0x30] - ldrh r0, [r2, 0x2] - ldrh r3, [r1, 0x20] - adds r0, r3 - strh r0, [r5, 0x32] - ldrh r0, [r1, 0x22] - strh r0, [r5, 0x34] - ldrh r0, [r2, 0x4] - ldrh r1, [r1, 0x22] - adds r0, r1 - strh r0, [r5, 0x36] - adds r0, r5, 0 - bl sub_80754B8 - strh r4, [r5, 0x34] - strh r4, [r5, 0x36] - strh r6, [r5, 0x38] - adds r2, r5, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - ldr r1, _0809938C @ =DestroyAnimSprite - adds r0, r5, 0 - bl StoreSpriteCallbackInData6 - ldr r0, _08099390 @ =sub_8074E14 - str r0, [r5, 0x1C] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0809937C: .4byte gBattleAnimTarget -_08099380: .4byte gBattlerSpriteIds -_08099384: .4byte gBattleAnimArgs -_08099388: .4byte gSprites -_0809938C: .4byte DestroyAnimSprite -_08099390: .4byte sub_8074E14 - thumb_func_end sub_80992E0 - - thumb_func_start sub_8099394 -sub_8099394: @ 8099394 - push {r4-r7,lr} - adds r6, r0, 0 - adds r2, r6, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - ldr r0, _080993B4 @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080993BC - ldr r0, _080993B8 @ =gBattleAnimAttacker - b _080993BE - .align 2, 0 -_080993B4: .4byte gBattleAnimArgs -_080993B8: .4byte gBattleAnimAttacker -_080993BC: - ldr r0, _0809943C @ =gBattleAnimTarget -_080993BE: - ldrb r1, [r0] - ldr r0, _08099440 @ =gBattlerSpriteIds - adds r0, r1, r0 - ldrb r7, [r0] - adds r0, r1, 0 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080993E8 - ldr r1, _08099444 @ =gBattleAnimArgs - ldrh r0, [r1, 0x2] - negs r0, r0 - strh r0, [r1, 0x2] - movs r2, 0x6 - ldrsh r0, [r1, r2] - cmp r0, 0x1 - bne _080993E8 - ldrh r0, [r1, 0x4] - negs r0, r0 - strh r0, [r1, 0x4] -_080993E8: - ldr r5, _08099444 @ =gBattleAnimArgs - ldrh r0, [r5, 0x8] - strh r0, [r6, 0x2E] - ldr r0, _08099448 @ =gSprites - lsls r4, r7, 4 - adds r4, r7 - lsls r4, 2 - adds r4, r0 - ldrh r0, [r4, 0x24] - ldrh r1, [r4, 0x20] - adds r0, r1 - strh r0, [r6, 0x30] - ldrh r1, [r5, 0x2] - adds r0, r1 - strh r0, [r6, 0x32] - ldrh r0, [r4, 0x26] - ldrh r2, [r4, 0x22] - adds r0, r2 - strh r0, [r6, 0x34] - ldrh r1, [r5, 0x4] - adds r0, r1 - strh r0, [r6, 0x36] - adds r0, r6, 0 - bl sub_80754B8 - ldrh r0, [r4, 0x24] - lsls r0, 8 - strh r0, [r6, 0x34] - ldrh r0, [r4, 0x26] - lsls r0, 8 - strh r0, [r6, 0x36] - strh r7, [r6, 0x38] - ldrh r0, [r5, 0xA] - strh r0, [r6, 0x3A] - lsls r0, 16 - cmp r0, 0 - bne _08099450 - ldr r1, _0809944C @ =DestroyAnimSprite - adds r0, r6, 0 - bl StoreSpriteCallbackInData6 - b _08099458 - .align 2, 0 -_0809943C: .4byte gBattleAnimTarget -_08099440: .4byte gBattlerSpriteIds -_08099444: .4byte gBattleAnimArgs -_08099448: .4byte gSprites -_0809944C: .4byte DestroyAnimSprite -_08099450: - ldr r1, _08099464 @ =sub_809946C - adds r0, r6, 0 - bl StoreSpriteCallbackInData6 -_08099458: - ldr r0, _08099468 @ =sub_8074E14 - str r0, [r6, 0x1C] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08099464: .4byte sub_809946C -_08099468: .4byte sub_8074E14 - thumb_func_end sub_8099394 - - thumb_func_start sub_809946C -sub_809946C: @ 809946C - push {r4,lr} - ldr r4, _08099498 @ =gSprites - movs r1, 0x38 - ldrsh r2, [r0, r1] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r4 - movs r3, 0 - strh r3, [r1, 0x24] - movs r1, 0x38 - ldrsh r2, [r0, r1] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r4 - strh r3, [r1, 0x26] - bl DestroyAnimSprite - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08099498: .4byte gSprites - thumb_func_end sub_809946C - - thumb_func_start sub_809949C -sub_809949C: @ 809949C - push {r4-r7,lr} - lsls r0, 24 - lsrs r6, r0, 24 - ldr r5, _08099520 @ =gBattleAnimArgs - movs r0, 0x6 - ldrsh r1, [r5, r0] - movs r0, 0x80 - lsls r0, 8 - bl __divsi3 - lsls r0, 16 - lsrs r7, r0, 16 - ldr r0, _08099524 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080994CE - ldrh r0, [r5, 0x2] - negs r0, r0 - strh r0, [r5, 0x2] - ldrh r0, [r5, 0xA] - negs r0, r0 - strh r0, [r5, 0xA] -_080994CE: - ldrb r0, [r5] - bl GetAnimBankSpriteId - ldr r1, _08099528 @ =gTasks - lsls r4, r6, 2 - adds r4, r6 - lsls r4, 3 - adds r4, r1 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x8] - movs r1, 0x2 - ldrsh r0, [r5, r1] - lsls r0, 8 - movs r2, 0x6 - ldrsh r1, [r5, r2] - bl __divsi3 - strh r0, [r4, 0xA] - ldrh r0, [r5, 0x4] - strh r0, [r4, 0xC] - ldrh r0, [r5, 0x6] - strh r0, [r4, 0xE] - ldrh r0, [r5, 0x8] - strh r0, [r4, 0x10] - movs r1, 0xA - ldrsh r0, [r5, r1] - lsls r0, 8 - movs r2, 0xC - ldrsh r1, [r5, r2] - bl __divsi3 - strh r0, [r4, 0x12] - ldrh r0, [r5, 0xC] - strh r0, [r4, 0x14] - strh r7, [r4, 0x16] - ldr r0, _0809952C @ =sub_8099530 - str r0, [r4] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08099520: .4byte gBattleAnimArgs -_08099524: .4byte gBattleAnimAttacker -_08099528: .4byte gTasks -_0809952C: .4byte sub_8099530 - thumb_func_end sub_809949C - - thumb_func_start sub_8099530 -sub_8099530: @ 8099530 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08099588 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r5, r1, r2 - ldrb r1, [r5, 0x8] - ldrh r0, [r5, 0xA] - ldrh r2, [r5, 0x1E] - adds r0, r2 - strh r0, [r5, 0x1E] - ldr r2, _0809958C @ =gSprites - lsls r4, r1, 4 - adds r4, r1 - lsls r4, 2 - adds r4, r2 - lsls r0, 16 - asrs r0, 24 - strh r0, [r4, 0x24] - ldrh r0, [r5, 0x1C] - lsrs r0, 8 - movs r2, 0xC - ldrsh r1, [r5, r2] - bl Sin - strh r0, [r4, 0x26] - ldrh r0, [r5, 0x16] - ldrh r1, [r5, 0x1C] - adds r0, r1 - strh r0, [r5, 0x1C] - ldrh r0, [r5, 0xE] - subs r0, 0x1 - strh r0, [r5, 0xE] - lsls r0, 16 - cmp r0, 0 - bne _08099580 - ldr r0, _08099590 @ =sub_8099594 - str r0, [r5] -_08099580: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08099588: .4byte gTasks -_0809958C: .4byte gSprites -_08099590: .4byte sub_8099594 - thumb_func_end sub_8099530 - - thumb_func_start sub_8099594 -sub_8099594: @ 8099594 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - adds r5, r0, 0 - ldr r1, _080995B8 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r4, r0, r1 - ldrh r1, [r4, 0x10] - movs r2, 0x10 - ldrsh r0, [r4, r2] - cmp r0, 0 - ble _080995BC - subs r0, r1, 0x1 - strh r0, [r4, 0x10] - b _080995F0 - .align 2, 0 -_080995B8: .4byte gTasks -_080995BC: - ldrb r0, [r4, 0x8] - ldrh r2, [r4, 0x12] - ldrh r1, [r4, 0x20] - adds r2, r1 - strh r2, [r4, 0x20] - ldr r3, _080995F8 @ =gSprites - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r3 - lsls r2, 16 - asrs r2, 24 - ldrh r0, [r4, 0x1E] - lsls r0, 16 - asrs r0, 24 - adds r2, r0 - strh r2, [r1, 0x24] - ldrh r0, [r4, 0x14] - subs r0, 0x1 - strh r0, [r4, 0x14] - lsls r0, 16 - cmp r0, 0 - bne _080995F0 - adds r0, r5, 0 - bl DestroyAnimVisualTask -_080995F0: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080995F8: .4byte gSprites - thumb_func_end sub_8099594 - - thumb_func_start sub_80995FC -sub_80995FC: @ 80995FC - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - ldr r1, _08099620 @ =gBattleAnimArgs - movs r2, 0 - ldrsh r0, [r1, r2] - cmp r0, 0x2 - beq _0809962A - cmp r0, 0x2 - bgt _08099624 - cmp r0, 0 - blt _0809965C - ldrb r0, [r1] - bl GetAnimBankSpriteId - lsls r0, 24 - lsrs r2, r0, 24 - b _08099664 - .align 2, 0 -_08099620: .4byte gBattleAnimArgs -_08099624: - cmp r0, 0x3 - beq _08099634 - b _0809965C -_0809962A: - ldr r5, _08099630 @ =gBattleAnimAttacker - b _08099636 - .align 2, 0 -_08099630: .4byte gBattleAnimAttacker -_08099634: - ldr r5, _08099654 @ =gBattleAnimTarget -_08099636: - ldrb r0, [r5] - movs r4, 0x2 - eors r0, r4 - bl sub_8072DF0 - lsls r0, 24 - cmp r0, 0 - beq _0809965C - ldr r1, _08099658 @ =gBattlerSpriteIds - ldrb r0, [r5] - eors r0, r4 - adds r0, r1 - ldrb r2, [r0] - b _08099664 - .align 2, 0 -_08099654: .4byte gBattleAnimTarget -_08099658: .4byte gBattlerSpriteIds -_0809965C: - adds r0, r6, 0 - bl DestroyAnimVisualTask - b _080996A4 -_08099664: - ldr r1, _08099684 @ =gTasks - lsls r4, r6, 2 - adds r0, r4, r6 - lsls r0, 3 - adds r5, r0, r1 - strh r2, [r5, 0x8] - ldr r0, _08099688 @ =gBattleAnimTarget - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _08099690 - ldr r0, _0809968C @ =gBattleAnimArgs - ldrh r0, [r0, 0x2] - b _08099696 - .align 2, 0 -_08099684: .4byte gTasks -_08099688: .4byte gBattleAnimTarget -_0809968C: .4byte gBattleAnimArgs -_08099690: - ldr r0, _080996AC @ =gBattleAnimArgs - ldrh r0, [r0, 0x2] - negs r0, r0 -_08099696: - strh r0, [r5, 0xA] - ldr r0, _080996B0 @ =gTasks - adds r1, r4, r6 - lsls r1, 3 - adds r1, r0 - ldr r0, _080996B4 @ =sub_80996B8 - str r0, [r1] -_080996A4: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080996AC: .4byte gBattleAnimArgs -_080996B0: .4byte gTasks -_080996B4: .4byte sub_80996B8 - thumb_func_end sub_80995FC - - thumb_func_start sub_80996B8 -sub_80996B8: @ 80996B8 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080996FC @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldrb r2, [r1, 0x8] - ldr r3, _08099700 @ =gSprites - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r0, r3 - ldrh r1, [r1, 0xA] - ldrh r2, [r0, 0x24] - adds r1, r2 - strh r1, [r0, 0x24] - movs r2, 0x24 - ldrsh r1, [r0, r2] - movs r2, 0x20 - ldrsh r0, [r0, r2] - adds r1, r0 - adds r1, 0x20 - movs r0, 0x98 - lsls r0, 1 - cmp r1, r0 - bls _080996F6 - adds r0, r4, 0 - bl DestroyAnimVisualTask -_080996F6: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080996FC: .4byte gTasks -_08099700: .4byte gSprites - thumb_func_end sub_80996B8 - - thumb_func_start sub_8099704 -sub_8099704: @ 8099704 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r6, _08099754 @ =gBattleAnimAttacker - ldrb r0, [r6] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _08099720 - ldr r1, _08099758 @ =gBattleAnimArgs - ldrh r0, [r1, 0x2] - negs r0, r0 - strh r0, [r1, 0x2] -_08099720: - ldr r4, _08099758 @ =gBattleAnimArgs - ldrb r0, [r4, 0x8] - bl GetAnimBankSpriteId - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0809975C @ =gTasks - lsls r3, r5, 2 - adds r1, r3, r5 - lsls r1, 3 - adds r2, r1, r2 - ldrh r1, [r4] - strh r1, [r2, 0x8] - ldrh r1, [r4, 0x2] - strh r1, [r2, 0xA] - ldrh r1, [r4, 0x4] - strh r1, [r2, 0xC] - ldrh r1, [r4, 0x6] - strh r1, [r2, 0xE] - strh r0, [r2, 0x10] - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _08099760 - ldrb r0, [r6] - b _08099764 - .align 2, 0 -_08099754: .4byte gBattleAnimAttacker -_08099758: .4byte gBattleAnimArgs -_0809975C: .4byte gTasks -_08099760: - ldr r0, _0809977C @ =gBattleAnimTarget - ldrb r0, [r0] -_08099764: - strh r0, [r2, 0x12] - ldr r1, _08099780 @ =gTasks - adds r0, r3, r5 - lsls r0, 3 - adds r0, r1 - movs r1, 0x1 - strh r1, [r0, 0x20] - ldr r1, _08099784 @ =sub_8099788 - str r1, [r0] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0809977C: .4byte gBattleAnimTarget -_08099780: .4byte gTasks -_08099784: .4byte sub_8099788 - thumb_func_end sub_8099704 - - thumb_func_start sub_8099788 -sub_8099788: @ 8099788 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - lsls r0, 24 - lsrs r6, r0, 24 - ldr r1, _080997D8 @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r4, r0, r1 - ldrb r7, [r4, 0x10] - ldrh r0, [r4, 0xC] - ldrh r1, [r4, 0x1C] - adds r0, r1 - lsls r1, r0, 16 - strh r0, [r4, 0x1C] - lsrs r1, 24 - mov r8, r1 - mov r0, r8 - movs r2, 0xA - ldrsh r1, [r4, r2] - bl Sin - lsls r0, 16 - lsrs r5, r0, 16 - mov r9, r5 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080997E0 - ldr r0, _080997DC @ =gSprites - lsls r2, r7, 4 - adds r1, r2, r7 - lsls r1, 2 - adds r1, r0 - strh r5, [r1, 0x24] - mov r9, r0 - adds r4, r2, 0 - b _08099826 - .align 2, 0 -_080997D8: .4byte gTasks -_080997DC: .4byte gSprites -_080997E0: - ldrb r0, [r4, 0x12] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08099808 - ldr r1, _08099804 @ =gSprites - lsls r2, r7, 4 - adds r0, r2, r7 - lsls r0, 2 - adds r3, r0, r1 - lsls r0, r5, 16 - asrs r0, 16 - mov r9, r1 - adds r4, r2, 0 - cmp r0, 0 - bge _08099824 - b _08099822 - .align 2, 0 -_08099804: .4byte gSprites -_08099808: - ldr r1, _080998A8 @ =gSprites - lsls r2, r7, 4 - adds r0, r2, r7 - lsls r0, 2 - adds r3, r0, r1 - mov r4, r9 - lsls r0, r4, 16 - asrs r0, 16 - mov r9, r1 - adds r4, r2, 0 - cmp r0, 0 - bge _08099822 - negs r0, r0 -_08099822: - negs r0, r0 -_08099824: - strh r0, [r3, 0x26] -_08099826: - mov r5, r8 - cmp r5, 0x7F - bls _08099848 - ldr r1, _080998AC @ =gTasks - lsls r2, r6, 2 - adds r0, r2, r6 - lsls r0, 3 - adds r3, r0, r1 - movs r5, 0x1E - ldrsh r0, [r3, r5] - adds r5, r1, 0 - cmp r0, 0 - bne _08099848 - movs r1, 0x20 - ldrsh r0, [r3, r1] - cmp r0, 0x1 - beq _0809986A -_08099848: - mov r2, r8 - cmp r2, 0x7E - bhi _0809989C - ldr r1, _080998AC @ =gTasks - lsls r2, r6, 2 - adds r0, r2, r6 - lsls r0, 3 - adds r3, r0, r1 - movs r5, 0x1E - ldrsh r0, [r3, r5] - adds r5, r1, 0 - cmp r0, 0x1 - bne _0809989C - movs r1, 0x20 - ldrsh r0, [r3, r1] - cmp r0, 0 - bne _0809989C -_0809986A: - adds r1, r2, r6 - lsls r1, 3 - adds r1, r5 - ldrh r0, [r1, 0x1E] - movs r2, 0x1 - eors r0, r2 - strh r0, [r1, 0x1E] - ldrh r0, [r1, 0x20] - eors r0, r2 - strh r0, [r1, 0x20] - ldrh r0, [r1, 0xE] - subs r0, 0x1 - strh r0, [r1, 0xE] - lsls r0, 16 - asrs r3, r0, 16 - cmp r3, 0 - bne _0809989C - adds r0, r4, r7 - lsls r0, 2 - add r0, r9 - strh r3, [r0, 0x24] - strh r3, [r0, 0x26] - adds r0, r6, 0 - bl DestroyAnimVisualTask -_0809989C: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080998A8: .4byte gSprites -_080998AC: .4byte gTasks - thumb_func_end sub_8099788 - - thumb_func_start sub_80998B0 -sub_80998B0: @ 80998B0 - push {r4-r6,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r6, _080998FC @ =gBattleAnimArgs - ldrb r0, [r6, 0x6] - bl GetAnimBankSpriteId - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - ldrb r1, [r6, 0x8] - adds r0, r5, 0 - bl sub_80758E0 - ldr r1, _08099900 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldrh r1, [r6] - strh r1, [r0, 0x8] - ldrh r1, [r6, 0x2] - strh r1, [r0, 0xA] - ldrh r1, [r6, 0x4] - strh r1, [r0, 0xC] - ldrh r1, [r6, 0x4] - strh r1, [r0, 0xE] - strh r5, [r0, 0x10] - movs r1, 0x80 - lsls r1, 1 - strh r1, [r0, 0x1C] - strh r1, [r0, 0x1E] - ldr r1, _08099904 @ =sub_8099908 - str r1, [r0] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080998FC: .4byte gBattleAnimArgs -_08099900: .4byte gTasks -_08099904: .4byte sub_8099908 - thumb_func_end sub_80998B0 - - thumb_func_start sub_8099908 -sub_8099908: @ 8099908 - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - adds r5, r0, 0 - ldr r1, _08099968 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r4, r0, r1 - ldrh r0, [r4, 0x8] - ldrh r1, [r4, 0x1C] - adds r0, r1 - strh r0, [r4, 0x1C] - ldrh r0, [r4, 0xA] - ldrh r3, [r4, 0x1E] - adds r0, r3 - strh r0, [r4, 0x1E] - ldrb r0, [r4, 0x10] - adds r6, r0, 0 - movs r0, 0x1C - ldrsh r1, [r4, r0] - movs r3, 0x1E - ldrsh r2, [r4, r3] - adds r0, r6, 0 - movs r3, 0 - bl obj_id_set_rotscale - ldrh r0, [r4, 0xC] - subs r0, 0x1 - strh r0, [r4, 0xC] - lsls r0, 16 - asrs r1, r0, 16 - cmp r1, 0 - bne _08099978 - ldrh r2, [r4, 0xE] - movs r3, 0xE - ldrsh r0, [r4, r3] - cmp r0, 0 - ble _0809996C - ldrh r0, [r4, 0x8] - negs r0, r0 - strh r0, [r4, 0x8] - ldrh r0, [r4, 0xA] - negs r0, r0 - strh r0, [r4, 0xA] - strh r2, [r4, 0xC] - strh r1, [r4, 0xE] - b _08099978 - .align 2, 0 -_08099968: .4byte gTasks -_0809996C: - adds r0, r6, 0 - bl sub_8075980 - adds r0, r5, 0 - bl DestroyAnimVisualTask -_08099978: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8099908 - - thumb_func_start sub_8099980 -sub_8099980: @ 8099980 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r7, r0, 24 - ldr r4, _080999BC @ =gBattleAnimArgs - ldrb r0, [r4, 0x4] - bl GetAnimBankSpriteId - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - movs r1, 0 - bl sub_80758E0 - ldr r1, _080999C0 @ =gTasks - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - adds r2, r0, r1 - movs r1, 0 - strh r1, [r2, 0xA] - ldrh r0, [r4] - strh r0, [r2, 0xC] - movs r3, 0x6 - ldrsh r0, [r4, r3] - cmp r0, 0x1 - beq _080999C4 - strh r1, [r2, 0xE] - b _080999D0 - .align 2, 0 -_080999BC: .4byte gBattleAnimArgs -_080999C0: .4byte gTasks -_080999C4: - ldrh r0, [r4] - ldrh r1, [r4, 0x2] - adds r3, r0, 0 - muls r3, r1 - adds r0, r3, 0 - strh r0, [r2, 0xE] -_080999D0: - ldr r1, _080999FC @ =gTasks - lsls r4, r7, 2 - adds r0, r4, r7 - lsls r0, 3 - adds r5, r0, r1 - ldr r6, _08099A00 @ =gBattleAnimArgs - ldrh r0, [r6, 0x2] - strh r0, [r5, 0x10] - mov r0, r8 - strh r0, [r5, 0x12] - ldrh r0, [r6, 0x6] - strh r0, [r5, 0x14] - bl sub_8073788 - lsls r0, 24 - mov r8, r4 - cmp r0, 0 - beq _08099A04 - movs r0, 0x1 - strh r0, [r5, 0x16] - b _08099A28 - .align 2, 0 -_080999FC: .4byte gTasks -_08099A00: .4byte gBattleAnimArgs -_08099A04: - movs r1, 0x4 - ldrsh r0, [r6, r1] - cmp r0, 0 - bne _08099A14 - ldr r0, _08099A10 @ =gBattleAnimAttacker - b _08099A16 - .align 2, 0 -_08099A10: .4byte gBattleAnimAttacker -_08099A14: - ldr r0, _08099A6C @ =gBattleAnimTarget -_08099A16: - ldrb r0, [r0] - bl GetBattlerSide - movs r1, 0 - lsls r0, 24 - cmp r0, 0 - bne _08099A26 - movs r1, 0x1 -_08099A26: - strh r1, [r5, 0x16] -_08099A28: - ldr r0, _08099A70 @ =gTasks - mov r2, r8 - adds r1, r2, r7 - lsls r1, 3 - adds r4, r1, r0 - movs r3, 0x16 - ldrsh r0, [r4, r3] - cmp r0, 0 - beq _08099A54 - bl sub_8073788 - lsls r0, 24 - cmp r0, 0 - bne _08099A54 - movs r1, 0xE - ldrsh r0, [r4, r1] - negs r0, r0 - strh r0, [r4, 0xE] - movs r2, 0x10 - ldrsh r0, [r4, r2] - negs r0, r0 - strh r0, [r4, 0x10] -_08099A54: - ldr r0, _08099A70 @ =gTasks - mov r3, r8 - adds r1, r3, r7 - lsls r1, 3 - adds r1, r0 - ldr r0, _08099A74 @ =sub_8099B54 - str r0, [r1] - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08099A6C: .4byte gBattleAnimTarget -_08099A70: .4byte gTasks -_08099A74: .4byte sub_8099B54 - thumb_func_end sub_8099980 - - thumb_func_start sub_8099A78 -sub_8099A78: @ 8099A78 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r4, _08099AB4 @ =gBattleAnimArgs - ldrb r0, [r4, 0x4] - bl GetAnimBankSpriteId - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - movs r1, 0 - bl sub_80758E0 - ldr r1, _08099AB8 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - movs r1, 0 - strh r1, [r0, 0xA] - ldrh r1, [r4] - strh r1, [r0, 0xC] - movs r1, 0x4 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _08099AC0 - ldr r0, _08099ABC @ =gBattleAnimAttacker - b _08099AC2 - .align 2, 0 -_08099AB4: .4byte gBattleAnimArgs -_08099AB8: .4byte gTasks -_08099ABC: .4byte gBattleAnimAttacker -_08099AC0: - ldr r0, _08099AF0 @ =gBattleAnimTarget -_08099AC2: - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _08099AD4 - ldrh r0, [r4, 0x2] - negs r0, r0 - strh r0, [r4, 0x2] -_08099AD4: - ldr r0, _08099AF4 @ =gBattleAnimArgs - movs r2, 0x6 - ldrsh r1, [r0, r2] - adds r6, r0, 0 - cmp r1, 0x1 - beq _08099AFC - ldr r2, _08099AF8 @ =gTasks - lsls r3, r5, 2 - adds r0, r3, r5 - lsls r0, 3 - adds r0, r2 - movs r1, 0 - strh r1, [r0, 0xE] - b _08099B16 - .align 2, 0 -_08099AF0: .4byte gBattleAnimTarget -_08099AF4: .4byte gBattleAnimArgs -_08099AF8: .4byte gTasks -_08099AFC: - ldr r3, _08099B4C @ =gTasks - lsls r4, r5, 2 - adds r0, r4, r5 - lsls r0, 3 - adds r0, r3 - ldrh r2, [r6] - ldrh r1, [r6, 0x2] - adds r7, r2, 0 - muls r7, r1 - adds r1, r7, 0 - strh r1, [r0, 0xE] - adds r2, r3, 0 - adds r3, r4, 0 -_08099B16: - adds r1, r3, r5 - lsls r1, 3 - adds r1, r2 - ldrh r0, [r6, 0x2] - strh r0, [r1, 0x10] - mov r0, r8 - strh r0, [r1, 0x12] - ldrh r0, [r6, 0x6] - strh r0, [r1, 0x14] - movs r0, 0x1 - strh r0, [r1, 0x16] - movs r2, 0xE - ldrsh r0, [r1, r2] - negs r0, r0 - strh r0, [r1, 0xE] - movs r7, 0x10 - ldrsh r0, [r1, r7] - negs r0, r0 - strh r0, [r1, 0x10] - ldr r0, _08099B50 @ =sub_8099B54 - str r0, [r1] - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08099B4C: .4byte gTasks -_08099B50: .4byte sub_8099B54 - thumb_func_end sub_8099A78 - - thumb_func_start sub_8099B54 -sub_8099B54: @ 8099B54 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _08099BAC @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r4, r0, r1 - ldrh r0, [r4, 0x10] - ldrh r1, [r4, 0xE] - adds r0, r1 - strh r0, [r4, 0xE] - ldrb r0, [r4, 0x12] - movs r2, 0x80 - lsls r2, 1 - ldrh r3, [r4, 0xE] - adds r1, r2, 0 - bl obj_id_set_rotscale - movs r2, 0x16 - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _08099B88 - ldrb r0, [r4, 0x12] - bl sub_80759DC -_08099B88: - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - lsls r0, 16 - asrs r0, 16 - movs r2, 0xC - ldrsh r1, [r4, r2] - cmp r0, r1 - blt _08099BCE - movs r1, 0x14 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _08099BB0 - cmp r0, 0x1 - ble _08099BB6 - cmp r0, 0x2 - beq _08099BBE - b _08099BB6 - .align 2, 0 -_08099BAC: .4byte gTasks -_08099BB0: - ldrb r0, [r4, 0x12] - bl sub_8075980 -_08099BB6: - adds r0, r5, 0 - bl DestroyAnimVisualTask - b _08099BCE -_08099BBE: - movs r0, 0 - strh r0, [r4, 0xA] - movs r2, 0x10 - ldrsh r0, [r4, r2] - negs r0, r0 - strh r0, [r4, 0x10] - movs r0, 0x1 - strh r0, [r4, 0x14] -_08099BCE: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8099B54 - - thumb_func_start sub_8099BD4 -sub_8099BD4: @ 8099BD4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r7, r0, 24 - ldr r0, _08099C00 @ =gBattleAnimArgs - movs r2, 0 - ldrsh r1, [r0, r2] - mov r8, r0 - cmp r1, 0 - bne _08099C0C - ldr r4, _08099C04 @ =gTasks - lsls r5, r7, 2 - adds r0, r5, r7 - lsls r0, 3 - adds r6, r0, r4 - ldr r0, _08099C08 @ =gUnknown_2037EEC - ldrh r0, [r0] - movs r1, 0xC - bl __udivsi3 - b _08099C20 - .align 2, 0 -_08099C00: .4byte gBattleAnimArgs -_08099C04: .4byte gTasks -_08099C08: .4byte gUnknown_2037EEC -_08099C0C: - ldr r4, _08099CA8 @ =gTasks - lsls r5, r7, 2 - adds r0, r5, r7 - lsls r0, 3 - adds r6, r0, r4 - ldr r0, _08099CAC @ =gUnknown_2037EE8 - ldr r0, [r0] - movs r1, 0xC - bl __divsi3 -_08099C20: - strh r0, [r6, 0x26] - lsls r0, 16 - adds r1, r4, 0 - cmp r0, 0 - bgt _08099C2E - movs r0, 0x1 - strh r0, [r6, 0x26] -_08099C2E: - movs r2, 0x26 - ldrsh r0, [r6, r2] - cmp r0, 0x10 - ble _08099C3A - movs r0, 0x10 - strh r0, [r6, 0x26] -_08099C3A: - adds r4, r5, r7 - lsls r4, 3 - adds r4, r1 - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsrs r0, r1, 31 - adds r1, r0 - asrs r1, 1 - movs r5, 0 - strh r1, [r4, 0x24] - ldrh r2, [r4, 0x26] - movs r0, 0x1 - ands r0, r2 - adds r1, r0 - strh r1, [r4, 0x22] - strh r5, [r4, 0x20] - mov r1, r8 - ldrh r0, [r1, 0x6] - strh r0, [r4, 0x1C] - ldrh r0, [r1, 0x8] - strh r0, [r4, 0x1E] - movs r0, 0x1 - bl GetAnimBankSpriteId - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x16] - ldr r2, _08099CB0 @ =gSprites - movs r0, 0x16 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r0, [r0, 0x24] - strh r0, [r4, 0x18] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r0, [r0, 0x26] - strh r0, [r4, 0x1A] - strh r5, [r4, 0x8] - mov r1, r8 - ldrh r0, [r1, 0x2] - strh r0, [r4, 0xA] - ldrh r0, [r1, 0x4] - strh r0, [r4, 0xC] - ldr r0, _08099CB4 @ =sub_8099CB8 - str r0, [r4] - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08099CA8: .4byte gTasks -_08099CAC: .4byte gUnknown_2037EE8 -_08099CB0: .4byte gSprites -_08099CB4: .4byte sub_8099CB8 - thumb_func_end sub_8099BD4 - - thumb_func_start sub_8099CB8 -sub_8099CB8: @ 8099CB8 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _08099D0C @ =gTasks - adds r3, r0, r1 - ldrh r0, [r3, 0x8] - adds r0, 0x1 - strh r0, [r3, 0x8] - lsls r0, 16 - asrs r0, 16 - movs r2, 0xA - ldrsh r1, [r3, r2] - cmp r0, r1 - ble _08099D96 - movs r0, 0 - strh r0, [r3, 0x8] - ldrh r0, [r3, 0x20] - adds r1, r0, 0x1 - movs r0, 0x1 - ands r1, r0 - strh r1, [r3, 0x20] - movs r2, 0x1C - ldrsh r0, [r3, r2] - cmp r0, 0 - beq _08099D2A - cmp r1, 0 - beq _08099D14 - ldr r2, _08099D10 @ =gSprites - movs r0, 0x16 - ldrsh r1, [r3, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r3, 0x22] - ldrh r2, [r3, 0x18] - adds r1, r2 - b _08099D28 - .align 2, 0 -_08099D0C: .4byte gTasks -_08099D10: .4byte gSprites -_08099D14: - ldr r2, _08099D50 @ =gSprites - movs r0, 0x16 - ldrsh r1, [r3, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r3, 0x18] - ldrh r2, [r3, 0x24] - subs r1, r2 -_08099D28: - strh r1, [r0, 0x24] -_08099D2A: - movs r1, 0x1E - ldrsh r0, [r3, r1] - cmp r0, 0 - beq _08099D64 - movs r2, 0x20 - ldrsh r4, [r3, r2] - cmp r4, 0 - beq _08099D54 - ldr r2, _08099D50 @ =gSprites - movs r0, 0x16 - ldrsh r1, [r3, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r3, 0x26] - strh r1, [r0, 0x26] - b _08099D64 - .align 2, 0 -_08099D50: .4byte gSprites -_08099D54: - ldr r2, _08099D9C @ =gSprites - movs r0, 0x16 - ldrsh r1, [r3, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - strh r4, [r0, 0x26] -_08099D64: - ldrh r0, [r3, 0xC] - subs r0, 0x1 - strh r0, [r3, 0xC] - lsls r0, 16 - asrs r4, r0, 16 - cmp r4, 0 - bne _08099D96 - ldr r2, _08099D9C @ =gSprites - movs r0, 0x16 - ldrsh r1, [r3, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - strh r4, [r0, 0x24] - movs r0, 0x16 - ldrsh r1, [r3, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - strh r4, [r0, 0x26] - adds r0, r5, 0 - bl DestroyAnimVisualTask -_08099D96: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08099D9C: .4byte gSprites - thumb_func_end sub_8099CB8 - - .align 2, 0 @ Don't pad with nop. diff --git a/include/battle_anim.h b/include/battle_anim.h index 4ea3bdead..5929a318e 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -59,10 +59,13 @@ extern u8 gAnimFriendship; extern u16 gWeatherMoveAnim; extern s16 gBattleAnimArgs[ANIM_ARGS_COUNT]; extern u8 gAnimMoveTurn; -extern u8 gAnimBankAttacker; -extern u8 gAnimBankTarget; +extern u8 gBattleAnimAttacker; +extern u8 gBattleAnimTarget; extern u16 gAnimSpeciesByBanks[BATTLE_BANKS_COUNT]; extern u8 gUnknown_02038440; +extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT]; +extern u16 gUnknown_2037EEC; +extern s32 gUnknown_2037EE8; void ClearBattleAnimationVars(void); void DoMoveAnim(u16 move); @@ -77,6 +80,7 @@ s8 BattleAnimAdjustPanning(s8 pan); s8 BattleAnimAdjustPanning2(s8 pan); s16 sub_80A52EC(s16 a); s16 CalculatePanIncrement(s16 sourcePan, s16 targetPan, s16 incrementPan); +bool8 sub_8072DF0(u8 battlerId); // battle_anim_80FE840.s void SetAnimBgAttribute(u8 bgId, u8 attributeId, u8 value); @@ -121,4 +125,14 @@ u8 ItemIdToBallId(u16 itemId); u8 LaunchBallStarsTask(u8 x, u8 y, u8 kindOfStars, u8 arg3, u8 ballId); u8 LaunchBallFadeMonTask(bool8 unFadeLater, u8 bank, u32 arg2, u8 ballId); +// battle_anim_mons.s +void sub_8074DC4(struct Sprite * sprite); +void sub_8074E14(struct Sprite * sprite); +void sub_80754B8(struct Sprite * sprite); +void sub_80758E0(u8 spriteId, u8 b); +void sub_8075980(u8 spriteId); +void obj_id_set_rotscale(u8 spriteId, s16 xScale, s16 yScale, u16 rotation); +bool8 sub_8073788(void); +void sub_80759DC(u8 spriteId); + #endif // GUARD_BATTLE_ANIM_H diff --git a/ld_script.txt b/ld_script.txt index b4fd52516..5bb0940ac 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -139,7 +139,6 @@ SECTIONS { asm/map_name_popup.o(.text); src/item_menu_icons.o(.text); src/battle_anim_mon_movement.o(.text); - asm/battle_anim_mon_movement.o(.text); src/item.o(.text); asm/shop.o(.text); src/berry.o(.text); diff --git a/src/battle_anim_mon_movement.c b/src/battle_anim_mon_movement.c index 30d796758..27e6ef28c 100644 --- a/src/battle_anim_mon_movement.c +++ b/src/battle_anim_mon_movement.c @@ -1,10 +1,32 @@ #include "global.h" +#include "battle.h" +#include "battle_anim.h" +#include "task.h" +#include "trig.h" +#define abs(x) ((x) < 0 ? -(x) : (x)) + +void sub_8098A6C(u8 taskId); +void sub_8098C08(u8 taskId); +void sub_8098D54(u8 taskId); +void sub_8098EF0(u8 taskId); +void sub_8099004(u8 taskId); void sub_80990AC(struct Sprite * sprite); +void sub_8099120(struct Sprite * sprite); void sub_8099144(struct Sprite * sprite); +void sub_8099190(struct Sprite * sprite); void sub_80991B4(struct Sprite * sprite); +void sub_8099270(struct Sprite * sprite); void sub_80992E0(struct Sprite * sprite); void sub_8099394(struct Sprite * sprite); +void sub_809946C(struct Sprite * sprite); +void sub_8099530(u8 taskId); +void sub_8099594(u8 taskId); +void sub_80996B8(u8 taskId); +void sub_8099788(u8 taskId); +void sub_8099908(u8 taskId); +void sub_8099B54(u8 taskId); +void sub_8099CB8(u8 taskId); const struct SpriteTemplate gUnknown_83D4E4C[] = { { @@ -19,3 +41,769 @@ const struct SpriteTemplate gUnknown_83D4E4C[] = { 0, 0, &gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_8099394 } }; + +void sub_80989F8(u8 taskId) +{ + u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[0]); + + if (spriteId == 0xFF) + DestroyAnimVisualTask(taskId); + else + { + gSprites[spriteId].pos2.x = gBattleAnimArgs[1]; + gSprites[spriteId].pos2.y = gBattleAnimArgs[2]; + gTasks[taskId].data[0] = spriteId; + gTasks[taskId].data[1] = gBattleAnimArgs[3]; + gTasks[taskId].data[2] = gBattleAnimArgs[4]; + gTasks[taskId].data[3] = gBattleAnimArgs[4]; + gTasks[taskId].data[4] = gBattleAnimArgs[1]; + gTasks[taskId].data[5] = gBattleAnimArgs[2]; + gTasks[taskId].func = sub_8098A6C; + gTasks[taskId].func(taskId); + } +} + +void sub_8098A6C(u8 taskId) +{ + if (gTasks[taskId].data[3] == 0) + { + if (gSprites[gTasks[taskId].data[0]].pos2.x == 0) + gSprites[gTasks[taskId].data[0]].pos2.x = gTasks[taskId].data[4]; + else + gSprites[gTasks[taskId].data[0]].pos2.x = 0; + if (gSprites[gTasks[taskId].data[0]].pos2.y == 0) + gSprites[gTasks[taskId].data[0]].pos2.y = gTasks[taskId].data[5]; + else + gSprites[gTasks[taskId].data[0]].pos2.y = 0; + gTasks[taskId].data[3] = gTasks[taskId].data[2]; + if (--gTasks[taskId].data[1] == 0) + { + gSprites[gTasks[taskId].data[0]].pos2.x = 0; + gSprites[gTasks[taskId].data[0]].pos2.y = 0; + DestroyAnimVisualTask(taskId); + } + } + else + gTasks[taskId].data[3]--; +} + +void sub_8098B1C(u8 taskId) +{ + bool8 abort = FALSE; + u8 spriteId; + u8 battlerId; + + if (gBattleAnimArgs[0] < MAX_BATTLERS_COUNT) + { + spriteId = GetAnimBankSpriteId(gBattleAnimArgs[0]); + if (spriteId == 0xFF) + abort = TRUE; + } + else if (gBattleAnimArgs[0] != 8) + { + switch (gBattleAnimArgs[0]) + { + case 4: + battlerId = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); + break; + case 5: + battlerId = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); + break; + case 6: + battlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + break; + default: + battlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); + break; + } + if (!sub_8072DF0(battlerId)) + abort = TRUE; + spriteId = gBattlerSpriteIds[battlerId]; + } + else + spriteId = gBattlerSpriteIds[gBattleAnimAttacker]; + if (abort) + DestroyAnimVisualTask(taskId); + else + { + gSprites[spriteId].pos2.x = gBattleAnimArgs[1]; + gSprites[spriteId].pos2.y = gBattleAnimArgs[2]; + gTasks[taskId].data[0] = spriteId; + gTasks[taskId].data[1] = gBattleAnimArgs[3]; + gTasks[taskId].data[2] = gBattleAnimArgs[4]; + gTasks[taskId].data[3] = gBattleAnimArgs[4]; + gTasks[taskId].data[4] = gBattleAnimArgs[1]; + gTasks[taskId].data[5] = gBattleAnimArgs[2]; + gTasks[taskId].func = sub_8098C08; + gTasks[taskId].func(taskId); + } +} + +void sub_8098C08(u8 taskId) +{ + if (gTasks[taskId].data[3] == 0) + { + if (gSprites[gTasks[taskId].data[0]].pos2.x == gTasks[taskId].data[4]) + gSprites[gTasks[taskId].data[0]].pos2.x = -gTasks[taskId].data[4]; + else + gSprites[gTasks[taskId].data[0]].pos2.x = gTasks[taskId].data[4]; + if (gSprites[gTasks[taskId].data[0]].pos2.y == gTasks[taskId].data[5]) + gSprites[gTasks[taskId].data[0]].pos2.y = -gTasks[taskId].data[5]; + else + gSprites[gTasks[taskId].data[0]].pos2.y = gTasks[taskId].data[5]; + gTasks[taskId].data[3] = gTasks[taskId].data[2]; + if (--gTasks[taskId].data[1] == 0) + { + gSprites[gTasks[taskId].data[0]].pos2.x = 0; + gSprites[gTasks[taskId].data[0]].pos2.y = 0; + DestroyAnimVisualTask(taskId); + } + } + else + gTasks[taskId].data[3]--; +} + +void sub_8098CD0(u8 taskId) +{ + u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[0]); + + if (spriteId == 0xFF) + DestroyAnimVisualTask(taskId); + else + { + gSprites[spriteId].pos2.x += gBattleAnimArgs[1]; + gSprites[spriteId].pos2.y += gBattleAnimArgs[2]; + gTasks[taskId].data[0] = spriteId; + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[2] = gBattleAnimArgs[3]; + gTasks[taskId].data[3] = 0; + gTasks[taskId].data[4] = gBattleAnimArgs[4]; + gTasks[taskId].data[5] = gBattleAnimArgs[1] * 2; + gTasks[taskId].data[6] = gBattleAnimArgs[2] * 2; + gTasks[taskId].func = sub_8098D54; + gTasks[taskId].func(taskId); + } +} + +void sub_8098D54(u8 taskId) +{ + if (gTasks[taskId].data[3] == 0) + { + if (gTasks[taskId].data[1] & 1) + { + gSprites[gTasks[taskId].data[0]].pos2.x += gTasks[taskId].data[5]; + gSprites[gTasks[taskId].data[0]].pos2.y += gTasks[taskId].data[6]; + } + else + { + gSprites[gTasks[taskId].data[0]].pos2.x -= gTasks[taskId].data[5]; + gSprites[gTasks[taskId].data[0]].pos2.y -= gTasks[taskId].data[6]; + } + gTasks[taskId].data[3] = gTasks[taskId].data[4]; + if (++gTasks[taskId].data[1] >= gTasks[taskId].data[2]) + { + if (gTasks[taskId].data[1] & 1) + { + gSprites[gTasks[taskId].data[0]].pos2.x += gTasks[taskId].data[5] / 2; + gSprites[gTasks[taskId].data[0]].pos2.y += gTasks[taskId].data[6] / 2; + } + else + { + gSprites[gTasks[taskId].data[0]].pos2.x -= gTasks[taskId].data[5] / 2; + gSprites[gTasks[taskId].data[0]].pos2.y -= gTasks[taskId].data[6] / 2; + } + DestroyAnimVisualTask(taskId); + } + } + else + gTasks[taskId].data[3]--; +} + +void sub_8098E90(u8 taskId) +{ + u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[0]); + + gSprites[spriteId].pos2.x = gBattleAnimArgs[1]; + gTasks[taskId].data[0] = spriteId; + gTasks[taskId].data[1] = gBattleAnimArgs[1]; + gTasks[taskId].data[2] = gBattleAnimArgs[2]; + gTasks[taskId].data[3] = gBattleAnimArgs[3]; + gTasks[taskId].data[4] = gBattleAnimArgs[4]; + gTasks[taskId].func = sub_8098EF0; + gTasks[taskId].func(taskId); +} + +void sub_8098EF0(u8 taskId) +{ + u8 spriteId = gTasks[taskId].data[0]; + s16 data1 = gTasks[taskId].data[1]; + if (gTasks[taskId].data[2] == gTasks[taskId].data[8]++) + { + gTasks[taskId].data[8] = 0; + if (gSprites[spriteId].pos2.x == data1) + data1 = -data1; + gSprites[spriteId].pos2.x += data1; + } + gTasks[taskId].data[1] = data1; + gTasks[taskId].data[9] += gTasks[taskId].data[3]; + gSprites[spriteId].pos2.y = gTasks[taskId].data[9] >> 8; + if (--gTasks[taskId].data[4] == 0) + DestroyAnimVisualTask(taskId); +} + +void sub_8098F84(u8 taskId) +{ + u8 r6 = 1; + u8 i; + u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[0]); + if (gBattleAnimArgs[4] > 5) + gBattleAnimArgs[4] = 5; + for (i = 0; i < gBattleAnimArgs[4]; i++) + r6 *= 2; + gTasks[taskId].data[0] = spriteId; + gTasks[taskId].data[1] = gBattleAnimArgs[1]; + gTasks[taskId].data[2] = gBattleAnimArgs[2]; + gTasks[taskId].data[3] = gBattleAnimArgs[3]; + gTasks[taskId].data[4] = r6; + gTasks[taskId].func = sub_8099004; + gTasks[taskId].func(taskId); +} + +void sub_8099004(u8 taskId) +{ + u8 spriteId = gTasks[taskId].data[0]; + gSprites[spriteId].pos2.x = Sin(gTasks[taskId].data[5], gTasks[taskId].data[1]); + gSprites[spriteId].pos2.y = -Cos(gTasks[taskId].data[5], gTasks[taskId].data[2]); + gSprites[spriteId].pos2.y += gTasks[taskId].data[2]; + gTasks[taskId].data[5] += gTasks[taskId].data[4]; + gTasks[taskId].data[5] &= 0xFF; + if (gTasks[taskId].data[5] == 0) + gTasks[taskId].data[3]--; + if (gTasks[taskId].data[3] == 0) + { + gSprites[spriteId].pos2.x = 0; + gSprites[spriteId].pos2.y = 0; + DestroyAnimVisualTask(taskId); + } +} + +void sub_809907C(u8 taskId) +{ + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + sub_8098F84(taskId); +} + +void sub_80990AC(struct Sprite * sprite) +{ + sprite->invisible = TRUE; + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + sprite->data[1] = -gBattleAnimArgs[1]; + else + sprite->data[1] = gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[0]; + sprite->data[2] = 0; + sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker]; + sprite->data[4] = gBattleAnimArgs[0]; + StoreSpriteCallbackInData6(sprite, sub_8099120); + sprite->callback = sub_8074DC4; +} + +void sub_8099120(struct Sprite * sprite) +{ + sprite->data[0] = sprite->data[4]; + sprite->data[1] = -sprite->data[1]; + sprite->callback = sub_8074DC4; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +void sub_8099144(struct Sprite * sprite) +{ + u8 spriteId; + sprite->invisible = TRUE; + spriteId = GetAnimBankSpriteId(gBattleAnimArgs[2]); + sprite->data[0] = gBattleAnimArgs[0]; + sprite->data[1] = 0; + sprite->data[2] = gBattleAnimArgs[1]; + sprite->data[3] = spriteId; + sprite->data[4] = gBattleAnimArgs[0]; + StoreSpriteCallbackInData6(sprite, sub_8099190); + sprite->callback = sub_8074DC4; +} + +void sub_8099190(struct Sprite * sprite) +{ + sprite->data[0] = sprite->data[4]; + sprite->data[2] = -sprite->data[2]; + sprite->callback = sub_8074DC4; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +void sub_80991B4(struct Sprite * sprite) +{ + u8 spriteId; + if (gBattleAnimArgs[0] == 0) + spriteId = gBattlerSpriteIds[gBattleAnimAttacker]; + else + spriteId = gBattlerSpriteIds[gBattleAnimTarget]; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x; + sprite->data[2] = gSprites[spriteId].pos1.x; + sprite->data[3] = gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y; + sprite->data[4] = gSprites[spriteId].pos1.y; + sub_80754B8(sprite); + sprite->data[3] = 0; + sprite->data[4] = 0; + sprite->data[5] = gSprites[spriteId].pos2.x; + sprite->data[6] = gSprites[spriteId].pos2.y; + sprite->invisible = TRUE; + if (gBattleAnimArgs[1] == 1) + sprite->data[2] = 0; + else if (gBattleAnimArgs[1] == 2) + sprite->data[1] = 0; + sprite->data[7] = gBattleAnimArgs[1]; + sprite->data[7] |= spriteId << 8; + sprite->callback = sub_8099270; +} + +void sub_8099270(struct Sprite * sprite) +{ + u8 data7 = sprite->data[7]; + struct Sprite *otherSprite = &gSprites[sprite->data[7] >> 8]; + if (sprite->data[0] == 0) + { + if (data7 == 1 || data7 == 0) + otherSprite->pos2.x = 0; + if (data7 == 2 || data7 == 0) + otherSprite->pos2.y = 0; + DestroyAnimSprite(sprite); + } + else + { + sprite->data[0]--; + sprite->data[3] += sprite->data[1]; + sprite->data[4] += sprite->data[2]; + otherSprite->pos2.x = (sprite->data[3] >> 8) + sprite->data[5]; + otherSprite->pos2.y = (sprite->data[4] >> 8) + sprite->data[6]; + } +} + +void sub_80992E0(struct Sprite * sprite) +{ + u8 battlerId; + u8 spriteId; + if (gBattleAnimArgs[0] == 0) + battlerId = gBattleAnimAttacker; + else + battlerId = gBattleAnimTarget; + spriteId = gBattlerSpriteIds[battlerId]; + if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) + { + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + if (gBattleAnimArgs[3] == 1) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + } + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[1] = gSprites[spriteId].pos1.x; + sprite->data[2] = gSprites[spriteId].pos1.x + gBattleAnimArgs[1]; + sprite->data[3] = gSprites[spriteId].pos1.y; + sprite->data[4] = gSprites[spriteId].pos1.y + gBattleAnimArgs[2]; + sub_80754B8(sprite); + sprite->data[3] = 0; + sprite->data[4] = 0; + sprite->data[5] = spriteId; + sprite->invisible = TRUE; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); + sprite->callback = sub_8074E14; +} + +void sub_8099394(struct Sprite * sprite) +{ + u8 battlerId; + u8 spriteId; + sprite->invisible = TRUE; + if (gBattleAnimArgs[0] == 0) + battlerId = gBattleAnimAttacker; + else + battlerId = gBattleAnimTarget; + spriteId = gBattlerSpriteIds[battlerId]; + if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) + { + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + if (gBattleAnimArgs[3] == 1) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + } + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[1] = gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x; + sprite->data[2] = sprite->data[1] + gBattleAnimArgs[1]; + sprite->data[3] = gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y; + sprite->data[4] = sprite->data[3] + gBattleAnimArgs[2]; + sub_80754B8(sprite); + sprite->data[3] = gSprites[spriteId].pos2.x << 8; + sprite->data[4] = gSprites[spriteId].pos2.y << 8; + sprite->data[5] = spriteId; + sprite->data[6] = gBattleAnimArgs[5]; + if (gBattleAnimArgs[5] == 0) + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); + else + StoreSpriteCallbackInData6(sprite, sub_809946C); + sprite->callback = sub_8074E14; +} + +void sub_809946C(struct Sprite * sprite) +{ + gSprites[sprite->data[5]].pos2.x = 0; + gSprites[sprite->data[5]].pos2.y = 0; + DestroyAnimSprite(sprite); +} + +void sub_809949C(u8 taskId) +{ + u16 r7 = 0x8000 / gBattleAnimArgs[3]; + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + { + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + gBattleAnimArgs[5] = -gBattleAnimArgs[5]; + } + gTasks[taskId].data[0] = GetAnimBankSpriteId(gBattleAnimArgs[0]); + gTasks[taskId].data[1] = gBattleAnimArgs[1] * 256 / gBattleAnimArgs[3]; + gTasks[taskId].data[2] = gBattleAnimArgs[2]; + gTasks[taskId].data[3] = gBattleAnimArgs[3]; + gTasks[taskId].data[4] = gBattleAnimArgs[4]; + gTasks[taskId].data[5] = gBattleAnimArgs[5] * 256 / gBattleAnimArgs[6]; + gTasks[taskId].data[6] = gBattleAnimArgs[6]; + gTasks[taskId].data[7] = r7; + gTasks[taskId].func = sub_8099530; +} + +void sub_8099530(u8 taskId) +{ + u8 spriteId = gTasks[taskId].data[0]; + gTasks[taskId].data[11] += gTasks[taskId].data[1]; + gSprites[spriteId].pos2.x = gTasks[taskId].data[11] >> 8; + gSprites[spriteId].pos2.y = Sin((u8)(gTasks[taskId].data[10] >> 8), gTasks[taskId].data[2]); + gTasks[taskId].data[10] += gTasks[taskId].data[7]; + if (--gTasks[taskId].data[3] == 0) + gTasks[taskId].func = sub_8099594; +} + +void sub_8099594(u8 taskId) +{ + u8 spriteId; + + if (gTasks[taskId].data[4] > 0) + gTasks[taskId].data[4]--; + else + { + spriteId = gTasks[taskId].data[0]; + gTasks[taskId].data[12] += gTasks[taskId].data[5]; + gSprites[spriteId].pos2.x = (gTasks[taskId].data[12] >> 8) + (gTasks[taskId].data[11] >> 8); + if (--gTasks[taskId].data[6] == 0) + DestroyAnimVisualTask(taskId); + } +} + +void sub_80995FC(u8 taskId) +{ + u8 spriteId; + + switch (gBattleAnimArgs[0]) + { + case 0: + case 1: + spriteId = GetAnimBankSpriteId(gBattleAnimArgs[0]); + break; + case 2: + if (!sub_8072DF0(gBattleAnimAttacker ^ BIT_FLANK)) + { + DestroyAnimVisualTask(taskId); + return; + } + spriteId = gBattlerSpriteIds[gBattleAnimAttacker ^ BIT_FLANK]; + break; + case 3: + if (!sub_8072DF0(gBattleAnimTarget ^ BIT_FLANK)) + { + DestroyAnimVisualTask(taskId); + return; + } + spriteId = gBattlerSpriteIds[gBattleAnimTarget ^ BIT_FLANK]; + break; + default: + DestroyAnimVisualTask(taskId); + return; + } + gTasks[taskId].data[0] = spriteId; + if (GetBattlerSide(gBattleAnimTarget) != B_SIDE_PLAYER) + gTasks[taskId].data[1] = gBattleAnimArgs[1]; + else + gTasks[taskId].data[1] = -gBattleAnimArgs[1]; + gTasks[taskId].func = sub_80996B8; +} + +void sub_80996B8(u8 taskId) +{ + u8 spriteId = gTasks[taskId].data[0]; + gSprites[spriteId].pos2.x += gTasks[taskId].data[1]; + if (gSprites[spriteId].pos2.x + gSprites[spriteId].pos1.x < -0x20 || gSprites[spriteId].pos2.x + gSprites[spriteId].pos1.x > 0x110) + DestroyAnimVisualTask(taskId); +} + +void sub_8099704(u8 taskId) +{ + u8 spriteId; + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + spriteId = GetAnimBankSpriteId(gBattleAnimArgs[4]); + gTasks[taskId].data[0] = gBattleAnimArgs[0]; + gTasks[taskId].data[1] = gBattleAnimArgs[1]; + gTasks[taskId].data[2] = gBattleAnimArgs[2]; + gTasks[taskId].data[3] = gBattleAnimArgs[3]; + gTasks[taskId].data[4] = spriteId; + if (gBattleAnimArgs[4] == 0) + gTasks[taskId].data[5] = gBattleAnimAttacker; + else + gTasks[taskId].data[5] = gBattleAnimTarget; + gTasks[taskId].data[12] = 1; + gTasks[taskId].func = sub_8099788; +} + +void sub_8099788(u8 taskId) +{ + u8 spriteId; + u32 r8; + s16 r5; + u16 tmp; + + spriteId = gTasks[taskId].data[4]; + tmp = gTasks[taskId].data[10] + gTasks[taskId].data[2]; + gTasks[taskId].data[10] = tmp; + r8 = tmp >> 8; + r5 = Sin(r8, gTasks[taskId].data[1]); + if (gTasks[taskId].data[0] == 0) + { + gSprites[spriteId].pos2.x = r5; + } + else if (GetBattlerSide(gTasks[taskId].data[5]) == B_SIDE_PLAYER) + { + gSprites[spriteId].pos2.y = abs(r5); + } + else + gSprites[spriteId].pos2.y = -abs(r5); + if ((r8 > 0x7F && gTasks[taskId].data[11] == 0 && gTasks[taskId].data[12] == 1) || (r8 < 0x7F && gTasks[taskId].data[11] == 1 && gTasks[taskId].data[12] == 0)) + { + gTasks[taskId].data[11] ^= 1; + gTasks[taskId].data[12] ^= 1; + if (--gTasks[taskId].data[3] == 0) + { + gSprites[spriteId].pos2.x = 0; + gSprites[spriteId].pos2.y = 0; + DestroyAnimVisualTask(taskId); + } + } +} + +void sub_80998B0(u8 taskId) +{ + u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[3]); + sub_80758E0(spriteId, gBattleAnimArgs[4]); + gTasks[taskId].data[0] = gBattleAnimArgs[0]; + gTasks[taskId].data[1] = gBattleAnimArgs[1]; + gTasks[taskId].data[2] = gBattleAnimArgs[2]; + gTasks[taskId].data[3] = gBattleAnimArgs[2]; + gTasks[taskId].data[4] = spriteId; + gTasks[taskId].data[10] = 0x100; + gTasks[taskId].data[11] = 0x100; + gTasks[taskId].func = sub_8099908; +} + +void sub_8099908(u8 taskId) +{ + u8 spriteId; + gTasks[taskId].data[10] += gTasks[taskId].data[0]; + gTasks[taskId].data[11] += gTasks[taskId].data[1]; + spriteId = gTasks[taskId].data[4]; + obj_id_set_rotscale(spriteId, gTasks[taskId].data[10], gTasks[taskId].data[11], 0); + if (--gTasks[taskId].data[2] == 0) + { + if (gTasks[taskId].data[3] > 0) + { + gTasks[taskId].data[0] = -gTasks[taskId].data[0]; + gTasks[taskId].data[1] = -gTasks[taskId].data[1]; + gTasks[taskId].data[2] = gTasks[taskId].data[3]; + gTasks[taskId].data[3] = 0; + } + else + { + sub_8075980(spriteId); + DestroyAnimVisualTask(taskId); + } + } +} + +void sub_8099980(u8 taskId) +{ + u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[2]); + sub_80758E0(spriteId, 0); + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[2] = gBattleAnimArgs[0]; + if (gBattleAnimArgs[3] != 1) + gTasks[taskId].data[3] = 0; + else + gTasks[taskId].data[3] = gBattleAnimArgs[0] * gBattleAnimArgs[1]; + gTasks[taskId].data[4] = gBattleAnimArgs[1]; + gTasks[taskId].data[5] = spriteId; + gTasks[taskId].data[6] = gBattleAnimArgs[3]; + if (sub_8073788()) + gTasks[taskId].data[7] = 1; + else + { + if (gBattleAnimArgs[2] == 0) + gTasks[taskId].data[7] = GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER ? 1 : 0; + else + gTasks[taskId].data[7] = GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER ? 1 : 0; + } + if (gTasks[taskId].data[7] && !sub_8073788()) + { + s16 tmp; + tmp = gTasks[taskId].data[3]; + gTasks[taskId].data[3] = -tmp; + tmp = gTasks[taskId].data[4]; + gTasks[taskId].data[4] = -tmp; + } + gTasks[taskId].func = sub_8099B54; +} + +void sub_8099A78(u8 taskId) +{ + u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[2]); + sub_80758E0(spriteId, 0); + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[2] = gBattleAnimArgs[0]; + if (gBattleAnimArgs[2] == 0) + { + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + } + else + { + if (GetBattlerSide(gBattleAnimTarget) != B_SIDE_PLAYER) + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + } + if (gBattleAnimArgs[3] != 1) + gTasks[taskId].data[3] = 0; + else + gTasks[taskId].data[3] = gBattleAnimArgs[0] * gBattleAnimArgs[1]; + gTasks[taskId].data[4] = gBattleAnimArgs[1]; + gTasks[taskId].data[5] = spriteId; + gTasks[taskId].data[6] = gBattleAnimArgs[3]; + gTasks[taskId].data[7] = 1; + if (gTasks[taskId].data[7] ) + { + s16 tmp; + tmp = gTasks[taskId].data[3]; + gTasks[taskId].data[3] = -tmp; + tmp = gTasks[taskId].data[4]; + gTasks[taskId].data[4] = -tmp; + } + gTasks[taskId].func = sub_8099B54; +} + +void sub_8099B54(u8 taskId) +{ + s16 tmp; + gTasks[taskId].data[3] += gTasks[taskId].data[4]; + obj_id_set_rotscale(gTasks[taskId].data[5], 0x100, 0x100, gTasks[taskId].data[3]); + if (gTasks[taskId].data[7]) + sub_80759DC(gTasks[taskId].data[5]); + if (++gTasks[taskId].data[1] >= gTasks[taskId].data[2]) + { + switch (gTasks[taskId].data[6]) + { + case 1: + sub_8075980(gTasks[taskId].data[5]); + // fallthrough + case 0: + default: + DestroyAnimVisualTask(taskId); + break; + case 2: + gTasks[taskId].data[1] = 0; + tmp = gTasks[taskId].data[4]; + gTasks[taskId].data[4] = -tmp; + gTasks[taskId].data[6] = 1; + break; + } + } +} + +void sub_8099BD4(u8 taskId) +{ + if (gBattleAnimArgs[0] == 0) + { + gTasks[taskId].data[15] = gUnknown_2037EEC / 12; + if (gTasks[taskId].data[15] < 1) + gTasks[taskId].data[15] = 1; + if (gTasks[taskId].data[15] > 16) + gTasks[taskId].data[15] = 16; + } + else + { + gTasks[taskId].data[15] = gUnknown_2037EE8 / 12; + if (gTasks[taskId].data[15] < 1) + gTasks[taskId].data[15] = 1; + if (gTasks[taskId].data[15] > 16) + gTasks[taskId].data[15] = 16; + } + gTasks[taskId].data[14] = gTasks[taskId].data[15] / 2; + gTasks[taskId].data[13] = gTasks[taskId].data[14] + (gTasks[taskId].data[15] & 1); + gTasks[taskId].data[12] = 0; + gTasks[taskId].data[10] = gBattleAnimArgs[3]; + gTasks[taskId].data[11] = gBattleAnimArgs[4]; + gTasks[taskId].data[7] = GetAnimBankSpriteId(1); + gTasks[taskId].data[8] = gSprites[gTasks[taskId].data[7]].pos2.x; + gTasks[taskId].data[9] = gSprites[gTasks[taskId].data[7]].pos2.y; + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = gBattleAnimArgs[1]; + gTasks[taskId].data[2] = gBattleAnimArgs[2]; + gTasks[taskId].func = sub_8099CB8; +} + +void sub_8099CB8(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + if (++task->data[0] > task->data[1]) + { + task->data[0] = 0; + task->data[12] = (task->data[12] + 1) & 1; + if (task->data[10]) + { + if (task->data[12]) + { + gSprites[task->data[7]].pos2.x = task->data[8] + task->data[13]; + } + else + { + gSprites[task->data[7]].pos2.x = task->data[8] - task->data[14]; + } + } + if (task->data[11]) + { + if (task->data[12]) + { + gSprites[task->data[7]].pos2.y = task->data[15]; + } + else + { + gSprites[task->data[7]].pos2.y = 0; + } + } + if (!--task->data[2]) + { + gSprites[task->data[7]].pos2.x = 0; + gSprites[task->data[7]].pos2.y = 0; + DestroyAnimVisualTask(taskId); + return; + } + } +} |