diff options
author | Marcus Huderle <huderlem@gmail.com> | 2018-07-03 17:43:14 -0500 |
---|---|---|
committer | Marcus Huderle <huderlem@gmail.com> | 2018-07-03 17:49:14 -0500 |
commit | ee6951e331df29718355891598fe46285932209e (patch) | |
tree | c6db27ae5b9ae3ad1469ddff799e8d340cbead42 | |
parent | 905fa7bfbf89e965456ce3d29f71861ebe261e29 (diff) |
Decompile ghost.s
-rw-r--r-- | asm/ghost.s | 2278 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/battle/anim/ghost.c | 871 |
3 files changed, 812 insertions, 2338 deletions
diff --git a/asm/ghost.s b/asm/ghost.s deleted file mode 100644 index 36487210d..000000000 --- a/asm/ghost.s +++ /dev/null @@ -1,2278 +0,0 @@ - .include "constants/gba_constants.inc" - .include "include/macros.inc" - - .syntax unified - - .text - - @ ghost - - thumb_func_start sub_80DE3D4 -sub_80DE3D4: @ 80DE3D4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0xC - lsls r0, 24 - lsrs r4, r0, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r1, _080DE40C @ =gTasks - adds r5, r0, r1 - ldr r0, _080DE410 @ =gAnimBankTarget - ldrb r0, [r0] - bl GetBattlerPosition_permutated - lsls r0, 24 - lsrs r6, r0, 24 - movs r1, 0x26 - ldrsh r0, [r5, r1] - cmp r0, 0x4 - bls _080DE400 - b _080DE604 -_080DE400: - lsls r0, 2 - ldr r1, _080DE414 @ =_080DE418 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080DE40C: .4byte gTasks -_080DE410: .4byte gAnimBankTarget -_080DE414: .4byte _080DE418 - .align 2, 0 -_080DE418: - .4byte _080DE42C - .4byte _080DE500 - .4byte _080DE544 - .4byte _080DE5AC - .4byte _080DE5E0 -_080DE42C: - ldr r7, _080DE460 @ =0x00002771 - adds r0, r7, 0 - bl AllocSpritePalette - lsls r0, 24 - lsrs r0, 24 - movs r2, 0 - mov r8, r2 - strh r0, [r5, 0x24] - cmp r0, 0xFF - beq _080DE456 - movs r0, 0x1 - bl duplicate_obj_of_side_rel2move_in_transparent_mode - strh r0, [r5, 0x8] - lsls r0, 16 - cmp r0, 0 - bge _080DE464 - adds r0, r7, 0 - bl FreeSpritePaletteByTag -_080DE456: - adds r0, r4, 0 - bl DestroyAnimVisualTask - b _080DE60A - .align 2, 0 -_080DE460: .4byte 0x00002771 -_080DE464: - ldr r4, _080DE4E4 @ =gSprites - movs r3, 0x8 - ldrsh r0, [r5, r3] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - ldrh r2, [r5, 0x24] - lsls r2, 4 - ldrb r3, [r1, 0x5] - movs r0, 0xF - ands r0, r3 - orrs r0, r2 - strb r0, [r1, 0x5] - movs r1, 0x8 - ldrsh r0, [r5, r1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - ldrb r2, [r1, 0x1] - movs r0, 0xD - negs r0, r0 - ands r0, r2 - strb r0, [r1, 0x1] - movs r2, 0x8 - ldrsh r1, [r5, r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrb r1, [r0, 0x5] - movs r2, 0xC - orrs r1, r2 - strb r1, [r0, 0x5] - mov r3, r8 - strh r3, [r5, 0xA] - strh r3, [r5, 0xC] - movs r0, 0x10 - strh r0, [r5, 0xE] - movs r0, 0x1 - bl GetAnimBattlerSpriteId - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x22] - movs r0, 0x22 - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrb r0, [r0, 0x5] - lsrs r0, 4 - adds r0, 0x10 - lsls r0, 4 - strh r0, [r5, 0x10] - cmp r6, 0x1 - bne _080DE4EC - movs r2, 0x80 - lsls r2, 19 - ldrh r1, [r2] - ldr r0, _080DE4E8 @ =0x0000fdff - b _080DE4F4 - .align 2, 0 -_080DE4E4: .4byte gSprites -_080DE4E8: .4byte 0x0000fdff -_080DE4EC: - movs r2, 0x80 - lsls r2, 19 - ldrh r1, [r2] - ldr r0, _080DE4FC @ =0x0000fbff -_080DE4F4: - ands r0, r1 - strh r0, [r2] - b _080DE604 - .align 2, 0 -_080DE4FC: .4byte 0x0000fbff -_080DE500: - movs r1, 0x24 - ldrsh r0, [r5, r1] - adds r0, 0x10 - lsls r0, 4 - strh r0, [r5, 0x24] - movs r2, 0x10 - ldrsh r0, [r5, r2] - lsls r0, 1 - ldr r1, _080DE534 @ =gPlttBufferUnfaded - adds r0, r1 - movs r3, 0x24 - ldrsh r1, [r5, r3] - lsls r1, 1 - ldr r2, _080DE538 @ =gPlttBufferFaded - adds r1, r2 - ldr r2, _080DE53C @ =REG_BG0CNT - bl CpuSet - ldrh r0, [r5, 0x10] - ldr r3, _080DE540 @ =0x00003c0d - movs r1, 0x10 - movs r2, 0xA - bl BlendPalette - b _080DE604 - .align 2, 0 -_080DE534: .4byte gPlttBufferUnfaded -_080DE538: .4byte gPlttBufferFaded -_080DE53C: .4byte REG_BG0CNT -_080DE540: .4byte 0x00003c0d -_080DE544: - ldr r2, _080DE580 @ =gSprites - movs r0, 0x22 - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r0, 0x26] - ldrh r0, [r0, 0x22] - adds r1, r0 - subs r1, 0x20 - lsls r1, 16 - lsrs r2, r1, 16 - cmp r1, 0 - bge _080DE564 - movs r2, 0 -_080DE564: - cmp r6, 0x1 - bne _080DE584 - lsls r0, r2, 24 - lsrs r0, 24 - adds r1, r2, 0 - adds r1, 0x40 - lsls r1, 24 - lsrs r1, 24 - movs r2, 0 - str r2, [sp] - movs r2, 0x4 - str r2, [sp, 0x4] - str r6, [sp, 0x8] - b _080DE59C - .align 2, 0 -_080DE580: .4byte gSprites -_080DE584: - lsls r0, r2, 24 - lsrs r0, 24 - adds r1, r2, 0 - adds r1, 0x40 - lsls r1, 24 - lsrs r1, 24 - movs r2, 0 - str r2, [sp] - movs r2, 0x8 - str r2, [sp, 0x4] - movs r2, 0x1 - str r2, [sp, 0x8] -_080DE59C: - movs r2, 0x2 - movs r3, 0x6 - bl ScanlineEffect_InitWave - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x1C] - b _080DE604 -_080DE5AC: - cmp r6, 0x1 - bne _080DE5C0 - ldr r1, _080DE5B8 @ =REG_BLDCNT - ldr r2, _080DE5BC @ =0x00003f42 - adds r0, r2, 0 - b _080DE5C6 - .align 2, 0 -_080DE5B8: .4byte REG_BLDCNT -_080DE5BC: .4byte 0x00003f42 -_080DE5C0: - ldr r1, _080DE5D4 @ =REG_BLDCNT - ldr r3, _080DE5D8 @ =0x00003f44 - adds r0, r3, 0 -_080DE5C6: - strh r0, [r1] - ldr r1, _080DE5DC @ =REG_BLDALPHA - movs r2, 0x80 - lsls r2, 5 - adds r0, r2, 0 - strh r0, [r1] - b _080DE604 - .align 2, 0 -_080DE5D4: .4byte REG_BLDCNT -_080DE5D8: .4byte 0x00003f44 -_080DE5DC: .4byte REG_BLDALPHA -_080DE5E0: - cmp r6, 0x1 - bne _080DE5F0 - movs r0, 0x80 - lsls r0, 19 - ldrh r1, [r0] - movs r3, 0x80 - lsls r3, 2 - b _080DE5FA -_080DE5F0: - movs r0, 0x80 - lsls r0, 19 - ldrh r1, [r0] - movs r3, 0x80 - lsls r3, 3 -_080DE5FA: - adds r2, r3, 0 - orrs r1, r2 - strh r1, [r0] - ldr r0, _080DE618 @ =sub_80DE61C - str r0, [r5] -_080DE604: - ldrh r0, [r5, 0x26] - adds r0, 0x1 - strh r0, [r5, 0x26] -_080DE60A: - add sp, 0xC - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080DE618: .4byte sub_80DE61C - thumb_func_end sub_80DE3D4 - - thumb_func_start sub_80DE61C -sub_80DE61C: @ 80DE61C - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - adds r5, r0, 0 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _080DE6A0 @ =gTasks - adds r4, r0, r1 - ldrh r1, [r4, 0xA] - adds r1, 0x1 - strh r1, [r4, 0xA] - movs r0, 0x1 - ands r0, r1 - strh r0, [r4, 0x12] - cmp r0, 0 - bne _080DE654 - ldr r1, _080DE6A4 @ =gSineTable - movs r2, 0xA - ldrsh r0, [r4, r2] - lsls r0, 1 - adds r0, r1 - movs r1, 0 - ldrsh r0, [r0, r1] - movs r1, 0x12 - bl __divsi3 - strh r0, [r4, 0xC] -_080DE654: - movs r2, 0x12 - ldrsh r0, [r4, r2] - cmp r0, 0x1 - bne _080DE676 - ldr r1, _080DE6A4 @ =gSineTable - movs r2, 0xA - ldrsh r0, [r4, r2] - lsls r0, 1 - adds r0, r1 - movs r1, 0 - ldrsh r0, [r0, r1] - movs r1, 0x12 - bl __divsi3 - movs r1, 0x10 - subs r1, r0 - strh r1, [r4, 0xE] -_080DE676: - ldr r2, _080DE6A8 @ =REG_BLDALPHA - ldrh r0, [r4, 0xE] - lsls r0, 8 - ldrh r1, [r4, 0xC] - orrs r0, r1 - strh r0, [r2] - movs r2, 0xA - ldrsh r0, [r4, r2] - cmp r0, 0x80 - bne _080DE698 - movs r0, 0 - strh r0, [r4, 0x26] - ldr r1, _080DE6AC @ =sub_80DE6B0 - str r1, [r4] - adds r0, r5, 0 - bl _call_via_r1 -_080DE698: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080DE6A0: .4byte gTasks -_080DE6A4: .4byte gSineTable -_080DE6A8: .4byte REG_BLDALPHA -_080DE6AC: .4byte sub_80DE6B0 - thumb_func_end sub_80DE61C - - thumb_func_start sub_80DE6B0 -sub_80DE6B0: @ 80DE6B0 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _080DE6E0 @ =gTasks - adds r4, r0, r1 - ldr r0, _080DE6E4 @ =gAnimBankTarget - ldrb r0, [r0] - bl GetBattlerPosition_permutated - lsls r0, 24 - lsrs r6, r0, 24 - movs r1, 0x26 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _080DE72C - cmp r0, 0x1 - bgt _080DE6E8 - cmp r0, 0 - beq _080DE6EE - b _080DE7AA - .align 2, 0 -_080DE6E0: .4byte gTasks -_080DE6E4: .4byte gAnimBankTarget -_080DE6E8: - cmp r0, 0x2 - beq _080DE740 - b _080DE7AA -_080DE6EE: - ldr r1, _080DE710 @ =gScanlineEffect - movs r0, 0x3 - strb r0, [r1, 0x15] - movs r0, 0x1 - bl GetAnimBattlerSpriteId - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x24] - cmp r6, 0x1 - bne _080DE718 - movs r2, 0x80 - lsls r2, 19 - ldrh r1, [r2] - ldr r0, _080DE714 @ =0x0000fdff - b _080DE720 - .align 2, 0 -_080DE710: .4byte gScanlineEffect -_080DE714: .4byte 0x0000fdff -_080DE718: - movs r2, 0x80 - lsls r2, 19 - ldrh r1, [r2] - ldr r0, _080DE728 @ =0x0000fbff -_080DE720: - ands r0, r1 - strh r0, [r2] - b _080DE7AA - .align 2, 0 -_080DE728: .4byte 0x0000fbff -_080DE72C: - ldrh r0, [r4, 0x10] - ldr r3, _080DE73C @ =0x00003c0d - movs r1, 0x10 - movs r2, 0 - bl BlendPalette - b _080DE7AA - .align 2, 0 -_080DE73C: .4byte 0x00003c0d -_080DE740: - ldr r3, _080DE788 @ =gSprites - movs r0, 0x24 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - adds r0, 0x3E - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0] - movs r0, 0x8 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - bl obj_delete_but_dont_free_vram - ldr r0, _080DE78C @ =0x00002771 - bl FreeSpritePaletteByTag - ldr r0, _080DE790 @ =REG_BLDCNT - movs r1, 0 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - cmp r6, 0x1 - bne _080DE794 - subs r0, 0x52 - ldrh r1, [r0] - movs r3, 0x80 - lsls r3, 2 - b _080DE79E - .align 2, 0 -_080DE788: .4byte gSprites -_080DE78C: .4byte 0x00002771 -_080DE790: .4byte REG_BLDCNT -_080DE794: - movs r0, 0x80 - lsls r0, 19 - ldrh r1, [r0] - movs r3, 0x80 - lsls r3, 3 -_080DE79E: - adds r2, r3, 0 - orrs r1, r2 - strh r1, [r0] - adds r0, r5, 0 - bl DestroyAnimVisualTask -_080DE7AA: - ldrh r0, [r4, 0x26] - adds r0, 0x1 - strh r0, [r4, 0x26] - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_80DE6B0 - - thumb_func_start sub_80DE7B8 -sub_80DE7B8: @ 80DE7B8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - adds r7, r0, 0 - ldr r0, _080DE7F4 @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080DE800 - ldr r4, _080DE7F8 @ =gAnimBankAttacker - ldrb r0, [r4] - movs r1, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r6, r0, 24 - ldrb r0, [r4] - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 8 - movs r2, 0xE0 - lsls r2, 13 - adds r0, r2 - lsrs r5, r0, 16 - ldr r4, _080DE7FC @ =gAnimBankTarget - b _080DE824 - .align 2, 0 -_080DE7F4: .4byte gBattleAnimArgs -_080DE7F8: .4byte gAnimBankAttacker -_080DE7FC: .4byte gAnimBankTarget -_080DE800: - ldr r4, _080DE8C8 @ =gAnimBankTarget - ldrb r0, [r4] - movs r1, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r6, r0, 24 - ldrb r0, [r4] - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 8 - movs r2, 0xE0 - lsls r2, 13 - adds r0, r2 - lsrs r5, r0, 16 - ldr r4, _080DE8CC @ =gAnimBankAttacker -_080DE824: - ldrb r0, [r4] - movs r1, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - ldrb r0, [r4] - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 8 - movs r1, 0xE0 - lsls r1, 13 - adds r0, r1 - lsrs r0, 16 - mov r9, r0 - mov r8, r5 - mov r2, r9 - subs r4, r2, r5 - lsls r4, 16 - lsrs r4, 16 - lsls r0, r6, 4 - strh r0, [r7, 0x2E] - lsls r0, r5, 4 - strh r0, [r7, 0x30] - mov r1, r10 - subs r0, r1, r6 - lsls r0, 4 - ldr r5, _080DE8D0 @ =gBattleAnimArgs - movs r2, 0x2 - ldrsh r1, [r5, r2] - bl __divsi3 - strh r0, [r7, 0x32] - lsls r4, 16 - asrs r4, 12 - movs r0, 0x2 - ldrsh r1, [r5, r0] - adds r0, r4, 0 - bl __divsi3 - strh r0, [r7, 0x34] - ldrh r0, [r5, 0x2] - strh r0, [r7, 0x36] - mov r1, r10 - strh r1, [r7, 0x38] - mov r2, r9 - strh r2, [r7, 0x3A] - movs r1, 0x36 - ldrsh r0, [r7, r1] - lsrs r1, r0, 31 - adds r0, r1 - asrs r0, 1 - strh r0, [r7, 0x3C] - ldrb r1, [r7, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r1 - movs r1, 0x8 - orrs r0, r1 - strb r0, [r7, 0x5] - strh r6, [r7, 0x20] - mov r2, r8 - strh r2, [r7, 0x22] - ldr r0, _080DE8D4 @ =sub_80DE8D8 - str r0, [r7, 0x1C] - adds r2, r7, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080DE8C8: .4byte gAnimBankTarget -_080DE8CC: .4byte gAnimBankAttacker -_080DE8D0: .4byte gBattleAnimArgs -_080DE8D4: .4byte sub_80DE8D8 - thumb_func_end sub_80DE7B8 - - thumb_func_start sub_80DE8D8 -sub_80DE8D8: @ 80DE8D8 - push {r4,lr} - adds r2, r0, 0 - ldrh r3, [r2, 0x36] - movs r1, 0x36 - ldrsh r0, [r2, r1] - cmp r0, 0 - beq _080DE910 - ldrh r0, [r2, 0x32] - ldrh r4, [r2, 0x2E] - adds r0, r4 - strh r0, [r2, 0x2E] - ldrh r1, [r2, 0x34] - ldrh r4, [r2, 0x30] - adds r1, r4 - strh r1, [r2, 0x30] - lsls r0, 16 - asrs r0, 20 - strh r0, [r2, 0x20] - lsls r1, 16 - asrs r1, 20 - strh r1, [r2, 0x22] - subs r0, r3, 0x1 - strh r0, [r2, 0x36] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0 - bne _080DE910 - strh r0, [r2, 0x2E] -_080DE910: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80DE8D8 - - thumb_func_start sub_80DE918 -sub_80DE918: @ 80DE918 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x14 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _080DEA68 @ =gTasks - adds r1, r0 - str r1, [sp] - ldr r1, _080DEA6C @ =REG_BLDCNT - movs r2, 0xFD - lsls r2, 6 - adds r0, r2, 0 - strh r0, [r1] - adds r1, 0x2 - movs r3, 0x80 - lsls r3, 5 - adds r0, r3, 0 - strh r0, [r1] - movs r0, 0 - ldr r1, [sp] - strh r0, [r1, 0x12] - strh r0, [r1, 0x14] - strh r0, [r1, 0x16] - strh r0, [r1, 0x18] - movs r0, 0x10 - strh r0, [r1, 0x1A] - ldr r2, _080DEA70 @ =gBattleAnimArgs - ldrh r0, [r2] - strh r0, [r1, 0x1C] - ldr r4, _080DEA74 @ =gAnimBankAttacker - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x4] - ldrb r0, [r4] - movs r1, 0x3 - bl sub_807A100 - lsls r0, 16 - lsrs r0, 16 - str r0, [sp, 0x8] - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _080DE988 - b _080DEA88 -_080DE988: - movs r4, 0 -_080DE98A: - lsls r1, r4, 16 - asrs r3, r1, 16 - ldr r0, _080DEA74 @ =gAnimBankAttacker - ldrb r2, [r0] - str r1, [sp, 0x10] - cmp r3, r2 - beq _080DEA56 - movs r0, 0x2 - eors r2, r0 - cmp r3, r2 - beq _080DEA56 - lsls r0, r4, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl IsAnimBankSpriteVisible - lsls r0, 24 - cmp r0, 0 - beq _080DEA56 - ldr r6, [sp, 0x4] - ldr r3, [sp, 0x8] - lsls r0, r3, 16 - asrs r7, r0, 16 - ldr r0, _080DEA78 @ =gSpriteTemplate_83DAF08 - adds r1, r6, 0 - adds r2, r7, 0 - movs r3, 0x37 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - cmp r0, 0x40 - beq _080DEA56 - adds r0, r4, 0 - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - adds r0, r4, 0 - movs r1, 0x3 - bl sub_807A100 - lsls r0, 16 - lsrs r0, 16 - mov r9, r0 - mov r0, r8 - lsls r5, r0, 4 - add r5, r8 - lsls r5, 2 - ldr r1, _080DEA7C @ =gSprites - adds r4, r5, r1 - lsls r0, r6, 4 - strh r0, [r4, 0x2E] - lsls r0, r7, 4 - strh r0, [r4, 0x30] - mov r2, r10 - subs r0, r2, r6 - lsls r0, 4 - ldr r3, _080DEA70 @ =gBattleAnimArgs - movs r2, 0x2 - ldrsh r1, [r3, r2] - bl __divsi3 - strh r0, [r4, 0x32] - mov r3, r9 - lsls r0, r3, 16 - asrs r0, 16 - subs r0, r7 - lsls r0, 4 - ldr r2, _080DEA70 @ =gBattleAnimArgs - movs r3, 0x2 - ldrsh r1, [r2, r3] - bl __divsi3 - strh r0, [r4, 0x34] - ldr r1, _080DEA70 @ =gBattleAnimArgs - ldrh r0, [r1, 0x2] - strh r0, [r4, 0x36] - mov r2, r10 - strh r2, [r4, 0x38] - mov r3, r9 - strh r3, [r4, 0x3A] - ldr r0, _080DEA80 @ =gSprites + 0x1C - adds r5, r0 - ldr r0, _080DEA84 @ =sub_80DE8D8 - str r0, [r5] - ldr r2, [sp] - movs r3, 0x20 - ldrsh r1, [r2, r3] - adds r1, 0xD - lsls r1, 1 - adds r0, r2, 0 - adds r0, 0x8 - adds r0, r1 - mov r1, r8 - strh r1, [r0] - ldrh r0, [r2, 0x20] - adds r0, 0x1 - strh r0, [r2, 0x20] -_080DEA56: - ldr r2, [sp, 0x10] - movs r3, 0x80 - lsls r3, 9 - adds r0, r2, r3 - lsrs r4, r0, 16 - asrs r0, 16 - cmp r0, 0x3 - ble _080DE98A - b _080DEB0C - .align 2, 0 -_080DEA68: .4byte gTasks -_080DEA6C: .4byte REG_BLDCNT -_080DEA70: .4byte gBattleAnimArgs -_080DEA74: .4byte gAnimBankAttacker -_080DEA78: .4byte gSpriteTemplate_83DAF08 -_080DEA7C: .4byte gSprites -_080DEA80: .4byte gSprites + 0x1C -_080DEA84: .4byte sub_80DE8D8 -_080DEA88: - ldr r0, _080DEB24 @ =gSpriteTemplate_83DAF08 - ldr r7, [sp, 0x4] - ldr r2, [sp, 0x8] - lsls r1, r2, 16 - asrs r1, 16 - str r1, [sp, 0xC] - adds r1, r7, 0 - ldr r2, [sp, 0xC] - movs r3, 0x37 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - cmp r0, 0x40 - beq _080DEB0C - movs r3, 0x30 - mov r10, r3 - movs r0, 0x28 - mov r9, r0 - ldr r6, _080DEB28 @ =gSprites - mov r1, r8 - lsls r5, r1, 4 - add r5, r8 - lsls r5, 2 - adds r4, r5, r6 - lsls r0, r7, 4 - strh r0, [r4, 0x2E] - ldr r2, [sp, 0xC] - lsls r0, r2, 4 - strh r0, [r4, 0x30] - subs r0, r3, r7 - lsls r0, 4 - ldr r3, _080DEB2C @ =gBattleAnimArgs - movs r2, 0x2 - ldrsh r1, [r3, r2] - bl __divsi3 - strh r0, [r4, 0x32] - mov r3, r9 - ldr r1, [sp, 0xC] - subs r0, r3, r1 - lsls r0, 4 - ldr r2, _080DEB2C @ =gBattleAnimArgs - movs r3, 0x2 - ldrsh r1, [r2, r3] - bl __divsi3 - strh r0, [r4, 0x34] - ldr r1, _080DEB2C @ =gBattleAnimArgs - ldrh r0, [r1, 0x2] - strh r0, [r4, 0x36] - mov r2, r10 - strh r2, [r4, 0x38] - mov r3, r9 - strh r3, [r4, 0x3A] - adds r6, 0x1C - adds r5, r6 - ldr r0, _080DEB30 @ =sub_80DE8D8 - str r0, [r5] - mov r1, r8 - ldr r0, [sp] - strh r1, [r0, 0x22] - movs r0, 0x1 - ldr r2, [sp] - strh r0, [r2, 0x20] -_080DEB0C: - ldr r0, _080DEB34 @ =sub_80DEB38 - ldr r3, [sp] - str r0, [r3] - add sp, 0x14 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080DEB24: .4byte gSpriteTemplate_83DAF08 -_080DEB28: .4byte gSprites -_080DEB2C: .4byte gBattleAnimArgs -_080DEB30: .4byte sub_80DE8D8 -_080DEB34: .4byte sub_80DEB38 - thumb_func_end sub_80DE918 - - thumb_func_start sub_80DEB38 -sub_80DEB38: @ 80DEB38 - push {r4,r5,lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - ldr r1, _080DEB5C @ =gTasks - adds r4, r0, r1 - movs r0, 0x8 - ldrsh r1, [r4, r0] - cmp r1, 0x1 - beq _080DEBEE - cmp r1, 0x1 - bgt _080DEB60 - cmp r1, 0 - beq _080DEB6E - b _080DECA4 - .align 2, 0 -_080DEB5C: .4byte gTasks -_080DEB60: - cmp r1, 0x2 - bne _080DEB66 - b _080DEC80 -_080DEB66: - cmp r1, 0x3 - bne _080DEB6C - b _080DEC94 -_080DEB6C: - b _080DECA4 -_080DEB6E: - movs r2, 0x14 - ldrsh r0, [r4, r2] - cmp r0, 0 - bne _080DEBCE - ldrh r0, [r4, 0x12] - adds r0, 0x1 - strh r0, [r4, 0x12] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080DEBCE - strh r1, [r4, 0x12] - ldrh r0, [r4, 0x16] - adds r0, 0x1 - strh r0, [r4, 0x16] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080DEBA4 - ldrh r1, [r4, 0x18] - movs r2, 0x18 - ldrsh r0, [r4, r2] - cmp r0, 0xF - bgt _080DEBB2 - adds r0, r1, 0x1 - strh r0, [r4, 0x18] - b _080DEBB2 -_080DEBA4: - ldrh r1, [r4, 0x1A] - movs r2, 0x1A - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _080DEBB2 - subs r0, r1, 0x1 - strh r0, [r4, 0x1A] -_080DEBB2: - ldr r2, _080DEBE0 @ =REG_BLDALPHA - ldrh r0, [r4, 0x1A] - lsls r0, 8 - ldrh r1, [r4, 0x18] - orrs r0, r1 - strh r0, [r2] - movs r1, 0x16 - ldrsh r0, [r4, r1] - cmp r0, 0x17 - ble _080DEBCE - movs r0, 0 - strh r0, [r4, 0x16] - movs r0, 0x1 - strh r0, [r4, 0x14] -_080DEBCE: - ldrh r1, [r4, 0x1C] - movs r2, 0x1C - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _080DEBE4 - subs r0, r1, 0x1 - strh r0, [r4, 0x1C] - b _080DECA4 - .align 2, 0 -_080DEBE0: .4byte REG_BLDALPHA -_080DEBE4: - movs r1, 0x14 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080DECA4 - b _080DEC8C -_080DEBEE: - ldrh r0, [r4, 0x12] - adds r0, 0x1 - strh r0, [r4, 0x12] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080DECA4 - movs r0, 0 - strh r0, [r4, 0x12] - ldrh r0, [r4, 0x16] - adds r0, 0x1 - strh r0, [r4, 0x16] - ands r0, r1 - lsls r0, 16 - cmp r0, 0 - beq _080DEC1E - ldrh r1, [r4, 0x18] - movs r2, 0x18 - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _080DEC2C - subs r0, r1, 0x1 - strh r0, [r4, 0x18] - b _080DEC2C -_080DEC1E: - ldrh r1, [r4, 0x1A] - movs r2, 0x1A - ldrsh r0, [r4, r2] - cmp r0, 0xF - bgt _080DEC2C - adds r0, r1, 0x1 - strh r0, [r4, 0x1A] -_080DEC2C: - ldr r2, _080DEC48 @ =REG_BLDALPHA - ldrh r0, [r4, 0x1A] - lsls r0, 8 - ldrh r1, [r4, 0x18] - orrs r0, r1 - strh r0, [r2] - ldr r1, [r4, 0x18] - movs r0, 0x80 - lsls r0, 13 - cmp r1, r0 - bne _080DECA4 - movs r5, 0 - b _080DEC70 - .align 2, 0 -_080DEC48: .4byte REG_BLDALPHA -_080DEC4C: - adds r1, r5, 0 - adds r1, 0xD - lsls r1, 1 - adds r0, r4, 0 - adds r0, 0x8 - adds r0, r1 - movs r2, 0 - ldrsh r1, [r0, r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _080DEC7C @ =gSprites - adds r0, r1 - bl DestroySprite - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 -_080DEC70: - movs r1, 0x20 - ldrsh r0, [r4, r1] - cmp r5, r0 - blt _080DEC4C - b _080DEC8C - .align 2, 0 -_080DEC7C: .4byte gSprites -_080DEC80: - ldrh r0, [r4, 0x12] - adds r0, 0x1 - strh r0, [r4, 0x12] - lsls r0, 16 - cmp r0, 0 - ble _080DECA4 -_080DEC8C: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _080DECA4 -_080DEC94: - ldr r0, _080DECAC @ =REG_BLDCNT - movs r1, 0 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - adds r0, r2, 0 - bl DestroyAnimVisualTask -_080DECA4: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080DECAC: .4byte REG_BLDCNT - thumb_func_end sub_80DEB38 - - thumb_func_start sub_80DECB0 -sub_80DECB0: @ 80DECB0 - push {r4-r7,lr} - lsls r0, 24 - lsrs r7, r0, 24 - ldr r0, _080DECF8 @ =gBattle_WIN0H - movs r1, 0 - strh r1, [r0] - ldr r0, _080DECFC @ =gBattle_WIN0V - strh r1, [r0] - ldr r1, _080DED00 @ =REG_WININ - ldr r2, _080DED04 @ =0x00003f3f - adds r0, r2, 0 - strh r0, [r1] - adds r1, 0x2 - subs r2, 0x20 - adds r0, r2, 0 - strh r0, [r1] - adds r1, 0x6 - movs r0, 0xC8 - strh r0, [r1] - adds r1, 0x4 - movs r0, 0x10 - strh r0, [r1] - ldr r0, _080DED08 @ =gAnimBankAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _080DECF4 - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _080DED0C -_080DECF4: - movs r6, 0x28 - b _080DED0E - .align 2, 0 -_080DECF8: .4byte gBattle_WIN0H -_080DECFC: .4byte gBattle_WIN0V -_080DED00: .4byte REG_WININ -_080DED04: .4byte 0x00003f3f -_080DED08: .4byte gAnimBankAttacker -_080DED0C: - movs r6, 0xC8 -_080DED0E: - ldr r1, _080DED4C @ =gBattle_WIN0H - lsls r3, r6, 16 - asrs r2, r3, 16 - lsls r0, r2, 8 - orrs r0, r2 - strh r0, [r1] - ldr r1, _080DED50 @ =gBattle_WIN0V - movs r5, 0x28 - ldr r0, _080DED54 @ =0x00002828 - strh r0, [r1] - lsrs r3, 16 - movs r1, 0xF0 - subs r1, r2 - movs r4, 0x48 - ldr r2, _080DED58 @ =gTasks - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - adds r0, r2 - strh r3, [r0, 0xA] - strh r1, [r0, 0xC] - strh r5, [r0, 0xE] - strh r4, [r0, 0x10] - strh r6, [r0, 0x12] - strh r5, [r0, 0x14] - ldr r1, _080DED5C @ =sub_80DED60 - str r1, [r0] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080DED4C: .4byte gBattle_WIN0H -_080DED50: .4byte gBattle_WIN0V -_080DED54: .4byte 0x00002828 -_080DED58: .4byte gTasks -_080DED5C: .4byte sub_80DED60 - thumb_func_end sub_80DECB0 - - thumb_func_start sub_80DED60 -sub_80DED60: @ 80DED60 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x20 - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080DEE80 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 - ldrh r1, [r4, 0x8] - adds r0, r1, 0x1 - strh r0, [r4, 0x8] - ldrh r5, [r4, 0xA] - ldrh r7, [r4, 0xC] - ldrh r0, [r4, 0xE] - mov r10, r0 - ldrh r2, [r4, 0x10] - str r2, [sp, 0xC] - ldrh r0, [r4, 0x12] - ldrh r2, [r4, 0x14] - mov r8, r2 - lsls r1, 16 - asrs r6, r1, 16 - cmp r6, 0xF - ble _080DED9C - b _080DEE8C -_080DED9C: - lsls r0, 16 - asrs r0, 16 - bl __floatsidf - str r0, [sp, 0x10] - str r1, [sp, 0x14] - lsls r0, r5, 16 - asrs r0, 16 - bl __floatsidf - ldr r2, _080DEE84 @ =0x3fb00000 - ldr r3, _080DEE88 @ =0x00000000 - bl __muldf3 - adds r5, r1, 0 - adds r4, r0, 0 - adds r0, r6, 0 - bl __floatsidf - str r0, [sp, 0x18] - str r1, [sp, 0x1C] - adds r1, r5, 0 - adds r0, r4, 0 - ldr r2, [sp, 0x18] - ldr r3, [sp, 0x1C] - bl __muldf3 - adds r3, r1, 0 - adds r2, r0, 0 - ldr r0, [sp, 0x10] - ldr r1, [sp, 0x14] - bl __subdf3 - bl __fixunsdfsi - lsls r0, 16 - lsrs r0, 16 - mov r9, r0 - lsls r0, r7, 16 - asrs r0, 16 - bl __floatsidf - ldr r2, _080DEE84 @ =0x3fb00000 - ldr r3, _080DEE88 @ =0x00000000 - bl __muldf3 - ldr r2, [sp, 0x18] - ldr r3, [sp, 0x1C] - bl __muldf3 - adds r3, r1, 0 - adds r2, r0, 0 - ldr r0, [sp, 0x10] - ldr r1, [sp, 0x14] - bl __adddf3 - bl __fixunsdfsi - lsls r0, 16 - lsrs r7, r0, 16 - mov r1, r8 - lsls r0, r1, 16 - asrs r0, 16 - bl __floatsidf - adds r5, r1, 0 - adds r4, r0, 0 - mov r2, r10 - lsls r0, r2, 16 - asrs r0, 16 - bl __floatsidf - ldr r2, _080DEE84 @ =0x3fb00000 - ldr r3, _080DEE88 @ =0x00000000 - bl __muldf3 - ldr r2, [sp, 0x18] - ldr r3, [sp, 0x1C] - bl __muldf3 - adds r3, r1, 0 - adds r2, r0, 0 - adds r1, r5, 0 - adds r0, r4, 0 - bl __subdf3 - bl __fixunsdfsi - lsls r0, 16 - lsrs r6, r0, 16 - ldr r1, [sp, 0xC] - lsls r0, r1, 16 - asrs r0, 16 - bl __floatsidf - ldr r2, _080DEE84 @ =0x3fb00000 - ldr r3, _080DEE88 @ =0x00000000 - bl __muldf3 - ldr r2, [sp, 0x18] - ldr r3, [sp, 0x1C] - bl __muldf3 - adds r3, r1, 0 - adds r2, r0, 0 - adds r1, r5, 0 - adds r0, r4, 0 - bl __adddf3 - bl __fixunsdfsi - lsls r0, 16 - lsrs r5, r0, 16 - b _080DEEBA - .align 2, 0 -_080DEE80: .4byte gTasks -_080DEE84: .4byte 0x3fb00000 -_080DEE88: .4byte 0x00000000 -_080DEE8C: - movs r2, 0 - mov r9, r2 - movs r7, 0xF0 - movs r6, 0 - movs r5, 0x70 - str r6, [sp] - str r6, [sp, 0x4] - str r6, [sp, 0x8] - movs r0, 0x1 - movs r1, 0 - movs r3, 0 - bl sub_80791A8 - lsls r0, 16 - lsrs r0, 16 - str r6, [sp] - movs r1, 0 - movs r2, 0x10 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r0, _080DEEDC @ =sub_80DEEE8 - str r0, [r4] -_080DEEBA: - ldr r1, _080DEEE0 @ =gBattle_WIN0H - mov r2, r9 - lsls r0, r2, 8 - orrs r7, r0 - strh r7, [r1] - ldr r1, _080DEEE4 @ =gBattle_WIN0V - lsls r0, r6, 8 - orrs r5, r0 - strh r5, [r1] - add sp, 0x20 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080DEEDC: .4byte sub_80DEEE8 -_080DEEE0: .4byte gBattle_WIN0H -_080DEEE4: .4byte gBattle_WIN0V - thumb_func_end sub_80DED60 - - thumb_func_start sub_80DEEE8 -sub_80DEEE8: @ 80DEEE8 - push {r4,lr} - lsls r0, 24 - lsrs r3, r0, 24 - ldr r0, _080DEF28 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0 - bne _080DEF20 - ldr r0, _080DEF2C @ =gBattle_WIN0H - strh r2, [r0] - ldr r0, _080DEF30 @ =gBattle_WIN0V - strh r2, [r0] - ldr r0, _080DEF34 @ =REG_WININ - ldr r4, _080DEF38 @ =0x00003f3f - adds r1, r4, 0 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - adds r0, 0x6 - strh r2, [r0] - adds r0, 0x4 - strh r2, [r0] - adds r0, r3, 0 - bl DestroyAnimVisualTask -_080DEF20: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080DEF28: .4byte gPaletteFade -_080DEF2C: .4byte gBattle_WIN0H -_080DEF30: .4byte gBattle_WIN0V -_080DEF34: .4byte REG_WININ -_080DEF38: .4byte 0x00003f3f - thumb_func_end sub_80DEEE8 - - thumb_func_start sub_80DEF3C -sub_80DEF3C: @ 80DEF3C - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x1 - bl InitAnimSpritePos - ldr r0, _080DEF68 @ =gAnimBankAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _080DEF70 - movs r2, 0x18 - ldr r3, _080DEF6C @ =0x0000fffe - ldrb r0, [r4, 0x3] - movs r1, 0x3F - negs r1, r1 - ands r1, r0 - movs r0, 0x10 - orrs r1, r0 - strb r1, [r4, 0x3] - b _080DEF74 - .align 2, 0 -_080DEF68: .4byte gAnimBankAttacker -_080DEF6C: .4byte 0x0000fffe -_080DEF70: - ldr r2, _080DEF90 @ =0x0000ffe8 - movs r3, 0x2 -_080DEF74: - lsls r0, r2, 16 - asrs r0, 16 - ldrh r1, [r4, 0x20] - adds r0, r1 - strh r0, [r4, 0x20] - strh r3, [r4, 0x30] - movs r0, 0x3C - strh r0, [r4, 0x2E] - ldr r0, _080DEF94 @ =sub_80DEF98 - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080DEF90: .4byte 0x0000ffe8 -_080DEF94: .4byte sub_80DEF98 - thumb_func_end sub_80DEF3C - - thumb_func_start sub_80DEF98 -sub_80DEF98: @ 80DEF98 - push {r4,lr} - adds r3, r0, 0 - ldrh r1, [r3, 0x2E] - movs r2, 0x2E - ldrsh r0, [r3, r2] - cmp r0, 0 - ble _080DEFAA - subs r0, r1, 0x1 - b _080DF00E -_080DEFAA: - ldrh r0, [r3, 0x30] - ldrh r4, [r3, 0x24] - adds r1, r0, r4 - strh r1, [r3, 0x24] - adds r0, r1, 0x7 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0xE - bls _080DF010 - ldrh r0, [r3, 0x20] - adds r0, r1 - strh r0, [r3, 0x20] - movs r0, 0 - strh r0, [r3, 0x24] - ldrh r2, [r3, 0x4] - lsls r1, r2, 22 - lsrs r1, 22 - adds r1, 0x8 - ldr r4, _080DEFFC @ =0x000003ff - adds r0, r4, 0 - ands r1, r0 - ldr r0, _080DF000 @ =0xfffffc00 - ands r0, r2 - orrs r0, r1 - strh r0, [r3, 0x4] - ldrh r0, [r3, 0x32] - adds r0, 0x1 - strh r0, [r3, 0x32] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3 - bne _080DF00C - movs r0, 0x1E - strh r0, [r3, 0x2E] - ldr r0, _080DF004 @ =WaitAnimForDuration - str r0, [r3, 0x1C] - ldr r1, _080DF008 @ =sub_80DF018 - adds r0, r3, 0 - bl StoreSpriteCallbackInData - b _080DF010 - .align 2, 0 -_080DEFFC: .4byte 0x000003ff -_080DF000: .4byte 0xfffffc00 -_080DF004: .4byte WaitAnimForDuration -_080DF008: .4byte sub_80DF018 -_080DF00C: - movs r0, 0x28 -_080DF00E: - strh r0, [r3, 0x2E] -_080DF010: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80DEF98 - - thumb_func_start sub_80DF018 -sub_80DF018: @ 80DF018 - push {r4,lr} - adds r3, r0, 0 - movs r0, 0x2E - ldrsh r2, [r3, r0] - cmp r2, 0 - bne _080DF044 - ldr r1, _080DF040 @ =REG_BLDCNT - movs r4, 0xFD - lsls r4, 6 - adds r0, r4, 0 - strh r0, [r1] - adds r1, 0x2 - movs r0, 0x10 - strh r0, [r1] - ldrh r0, [r3, 0x2E] - adds r0, 0x1 - strh r0, [r3, 0x2E] - strh r2, [r3, 0x30] - strh r2, [r3, 0x32] - b _080DF082 - .align 2, 0 -_080DF040: .4byte REG_BLDCNT -_080DF044: - ldrh r1, [r3, 0x30] - movs r2, 0x30 - ldrsh r0, [r3, r2] - cmp r0, 0x1 - bgt _080DF054 - adds r0, r1, 0x1 - strh r0, [r3, 0x30] - b _080DF082 -_080DF054: - movs r0, 0 - strh r0, [r3, 0x30] - ldrh r0, [r3, 0x32] - adds r0, 0x1 - strh r0, [r3, 0x32] - ldr r2, _080DF088 @ =REG_BLDALPHA - movs r1, 0x10 - subs r1, r0 - lsls r0, 8 - orrs r1, r0 - strh r1, [r2] - movs r4, 0x32 - ldrsh r0, [r3, r4] - cmp r0, 0x10 - bne _080DF082 - adds r2, r3, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - ldr r0, _080DF08C @ =sub_80DF090 - str r0, [r3, 0x1C] -_080DF082: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080DF088: .4byte REG_BLDALPHA -_080DF08C: .4byte sub_80DF090 - thumb_func_end sub_80DF018 - - thumb_func_start sub_80DF090 -sub_80DF090: @ 80DF090 - push {lr} - ldr r1, _080DF0AC @ =REG_BLDCNT - movs r2, 0 - strh r2, [r1] - adds r1, 0x2 - strh r2, [r1] - ldr r1, _080DF0B0 @ =gBattle_WIN0H - strh r2, [r1] - ldr r1, _080DF0B4 @ =gBattle_WIN0V - strh r2, [r1] - bl DestroyAnimSprite - pop {r0} - bx r0 - .align 2, 0 -_080DF0AC: .4byte REG_BLDCNT -_080DF0B0: .4byte gBattle_WIN0H -_080DF0B4: .4byte gBattle_WIN0V - thumb_func_end sub_80DF090 - - thumb_func_start sub_80DF0B8 -sub_80DF0B8: @ 80DF0B8 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x2E - ldrsh r0, [r4, r1] - movs r1, 0xC - bl Sin - strh r0, [r4, 0x24] - ldr r0, _080DF120 @ =gAnimBankAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080DF0DC - ldrh r0, [r4, 0x24] - negs r0, r0 - strh r0, [r4, 0x24] -_080DF0DC: - ldrh r0, [r4, 0x2E] - adds r0, 0x6 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x2E] - movs r2, 0x80 - lsls r2, 1 - adds r0, r2, 0 - ldrh r1, [r4, 0x30] - adds r0, r1 - strh r0, [r4, 0x30] - lsls r0, 16 - asrs r0, 24 - negs r0, r0 - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x3C] - adds r0, 0x1 - strh r0, [r4, 0x3C] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - bne _080DF12C - ldr r0, _080DF124 @ =0x0000050b - strh r0, [r4, 0x3A] - ldr r1, _080DF128 @ =REG_BLDCNT - movs r2, 0xFD - lsls r2, 6 - adds r0, r2, 0 - strh r0, [r1] - adds r1, 0x2 - ldrh r0, [r4, 0x3A] - strh r0, [r1] - b _080DF17E - .align 2, 0 -_080DF120: .4byte gAnimBankAttacker -_080DF124: .4byte 0x0000050b -_080DF128: .4byte REG_BLDCNT -_080DF12C: - cmp r0, 0x1E - ble _080DF17E - ldrh r0, [r4, 0x32] - adds r0, 0x1 - strh r0, [r4, 0x32] - ldrh r1, [r4, 0x3A] - lsls r0, r1, 16 - asrs r0, 24 - lsls r0, 16 - movs r2, 0xFF - ands r2, r1 - movs r1, 0x80 - lsls r1, 9 - adds r0, r1 - lsrs r3, r0, 16 - cmp r3, 0x10 - bls _080DF150 - movs r3, 0x10 -_080DF150: - subs r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r0, 0 - bge _080DF15C - movs r2, 0 -_080DF15C: - ldr r1, _080DF184 @ =REG_BLDALPHA - lsls r0, r3, 8 - orrs r0, r2 - strh r0, [r1] - strh r0, [r4, 0x3A] - cmp r3, 0x10 - bne _080DF17E - cmp r2, 0 - bne _080DF17E - adds r2, r4, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - ldr r0, _080DF188 @ =sub_80DF18C - str r0, [r4, 0x1C] -_080DF17E: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080DF184: .4byte REG_BLDALPHA -_080DF188: .4byte sub_80DF18C - thumb_func_end sub_80DF0B8 - - thumb_func_start sub_80DF18C -sub_80DF18C: @ 80DF18C - push {lr} - ldr r1, _080DF1A0 @ =REG_BLDCNT - movs r2, 0 - strh r2, [r1] - adds r1, 0x2 - strh r2, [r1] - bl DestroyAnimSprite - pop {r0} - bx r0 - .align 2, 0 -_080DF1A0: .4byte REG_BLDCNT - thumb_func_end sub_80DF18C - - thumb_func_start sub_80DF1A4 -sub_80DF1A4: @ 80DF1A4 - push {r4-r6,lr} - mov r6, r8 - push {r6} - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - ldr r0, _080DF23C @ =gTasks - adds r4, r0 - movs r6, 0 - strh r6, [r4, 0x8] - movs r0, 0x10 - mov r8, r0 - mov r2, r8 - strh r2, [r4, 0xA] - ldr r5, _080DF240 @ =gAnimBankAttacker - ldrb r0, [r5] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x1A] - ldrb r0, [r5] - bl sub_8077FC0 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x1C] - ldrb r0, [r5] - movs r1, 0x1 - bl sub_807A100 - lsls r0, 16 - asrs r1, r0, 16 - lsrs r0, 31 - adds r1, r0 - asrs r1, 1 - adds r1, 0x8 - strh r1, [r4, 0x1E] - strh r6, [r4, 0x16] - ldrb r0, [r5] - bl sub_8079ED4 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x12] - ldrb r0, [r5] - bl sub_8079E90 - lsls r0, 24 - lsrs r0, 24 - subs r0, 0x2 - strh r0, [r4, 0x14] - strh r6, [r4, 0xE] - mov r0, r8 - strh r0, [r4, 0x10] - ldr r1, _080DF244 @ =REG_BLDCNT - movs r2, 0xFD - lsls r2, 6 - adds r0, r2, 0 - strh r0, [r1] - adds r1, 0x2 - movs r2, 0x80 - lsls r2, 5 - adds r0, r2, 0 - strh r0, [r1] - strh r6, [r4, 0x18] - ldr r0, _080DF248 @ =sub_80DF24C - str r0, [r4] - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080DF23C: .4byte gTasks -_080DF240: .4byte gAnimBankAttacker -_080DF244: .4byte REG_BLDCNT -_080DF248: .4byte sub_80DF24C - thumb_func_end sub_80DF1A4 - - thumb_func_start sub_80DF24C -sub_80DF24C: @ 80DF24C - push {r4-r7,lr} - lsls r0, 24 - lsrs r7, r0, 24 - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - ldr r1, _080DF270 @ =gTasks - adds r4, r0, r1 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0x5 - bls _080DF266 - b _080DF3CC -_080DF266: - lsls r0, 2 - ldr r1, _080DF274 @ =_080DF278 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080DF270: .4byte gTasks -_080DF274: .4byte _080DF278 - .align 2, 0 -_080DF278: - .4byte _080DF290 - .4byte _080DF300 - .4byte _080DF342 - .4byte _080DF356 - .4byte _080DF3AC - .4byte _080DF3BC -_080DF290: - movs r6, 0 -_080DF292: - movs r2, 0x1A - ldrsh r1, [r4, r2] - movs r0, 0x1C - ldrsh r2, [r4, r0] - ldrb r3, [r4, 0x14] - ldr r0, _080DF2F4 @ =gSpriteTemplate_83DAF80 - bl CreateSprite - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x40 - beq _080DF2E6 - ldr r1, _080DF2F8 @ =gSprites - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r5, r0, r1 - strh r7, [r5, 0x2E] - ldr r0, _080DF2FC @ =gAnimBankAttacker - ldrb r0, [r0] - bl GetBattlerSide - movs r1, 0 - lsls r0, 24 - cmp r0, 0 - bne _080DF2C8 - movs r1, 0x1 -_080DF2C8: - strh r1, [r5, 0x30] - movs r0, 0x2A - muls r0, r6 - movs r1, 0xFF - ands r0, r1 - strh r0, [r5, 0x32] - ldrh r0, [r4, 0x1E] - strh r0, [r5, 0x34] - lsls r0, r6, 1 - adds r0, r6 - lsls r0, 1 - strh r0, [r5, 0x38] - ldrh r0, [r4, 0x16] - adds r0, 0x1 - strh r0, [r4, 0x16] -_080DF2E6: - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - cmp r6, 0x5 - bls _080DF292 - b _080DF3B4 - .align 2, 0 -_080DF2F4: .4byte gSpriteTemplate_83DAF80 -_080DF2F8: .4byte gSprites -_080DF2FC: .4byte gAnimBankAttacker -_080DF300: - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080DF31E - ldrh r1, [r4, 0xE] - movs r2, 0xE - ldrsh r0, [r4, r2] - cmp r0, 0xD - bgt _080DF32C - adds r0, r1, 0x1 - strh r0, [r4, 0xE] - b _080DF32C -_080DF31E: - ldrh r1, [r4, 0x10] - movs r2, 0x10 - ldrsh r0, [r4, r2] - cmp r0, 0x4 - ble _080DF32C - subs r0, r1, 0x1 - strh r0, [r4, 0x10] -_080DF32C: - movs r1, 0xE - ldrsh r0, [r4, r1] - ldrh r3, [r4, 0xE] - ldrh r2, [r4, 0x10] - cmp r0, 0xE - bne _080DF39C - cmp r2, 0x4 - bne _080DF39C - movs r0, 0 - strh r0, [r4, 0xA] - b _080DF396 -_080DF342: - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1E - ble _080DF3CC - movs r0, 0 - strh r0, [r4, 0xA] - b _080DF3B4 -_080DF356: - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080DF374 - ldrh r1, [r4, 0xE] - movs r2, 0xE - ldrsh r0, [r4, r2] - cmp r0, 0 - ble _080DF382 - subs r0, r1, 0x1 - strh r0, [r4, 0xE] - b _080DF382 -_080DF374: - ldrh r1, [r4, 0x10] - movs r2, 0x10 - ldrsh r0, [r4, r2] - cmp r0, 0xF - bgt _080DF382 - adds r0, r1, 0x1 - strh r0, [r4, 0x10] -_080DF382: - movs r1, 0xE - ldrsh r0, [r4, r1] - ldrh r3, [r4, 0xE] - ldrh r2, [r4, 0x10] - cmp r0, 0 - bne _080DF39C - cmp r2, 0x10 - bne _080DF39C - movs r0, 0x1 - strh r0, [r4, 0x18] -_080DF396: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_080DF39C: - ldr r1, _080DF3A8 @ =REG_BLDALPHA - lsls r0, r2, 8 - orrs r0, r3 - strh r0, [r1] - b _080DF3CC - .align 2, 0 -_080DF3A8: .4byte REG_BLDALPHA -_080DF3AC: - movs r2, 0x16 - ldrsh r0, [r4, r2] - cmp r0, 0 - bne _080DF3CC -_080DF3B4: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _080DF3CC -_080DF3BC: - ldr r0, _080DF3D4 @ =REG_BLDCNT - movs r1, 0 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - adds r0, r7, 0 - bl DestroyAnimVisualTask -_080DF3CC: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080DF3D4: .4byte REG_BLDCNT - thumb_func_end sub_80DF24C - - thumb_func_start sub_80DF3D8 -sub_80DF3D8: @ 80DF3D8 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x30 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080DF3EA - ldrh r0, [r4, 0x32] - adds r0, 0x2 - b _080DF3EE -_080DF3EA: - ldrh r0, [r4, 0x32] - subs r0, 0x2 -_080DF3EE: - strh r0, [r4, 0x32] - ldrh r1, [r4, 0x32] - movs r0, 0xFF - ands r0, r1 - strh r0, [r4, 0x32] - movs r2, 0x32 - ldrsh r0, [r4, r2] - movs r2, 0x34 - ldrsh r1, [r4, r2] - bl Sin - strh r0, [r4, 0x24] - ldrh r0, [r4, 0x32] - subs r0, 0x41 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x7E - bhi _080DF430 - ldr r2, _080DF42C @ =gTasks - movs r0, 0x2E - ldrsh r1, [r4, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - ldrh r1, [r0, 0x12] - adds r1, 0x1 - movs r0, 0x3 - ands r1, r0 - b _080DF444 - .align 2, 0 -_080DF42C: .4byte gTasks -_080DF430: - ldr r2, _080DF498 @ =gTasks - movs r0, 0x2E - ldrsh r1, [r4, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - movs r2, 0x3 - ldrb r1, [r0, 0x12] - ands r1, r2 -_080DF444: - lsls r1, 2 - ldrb r2, [r4, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, 0x5] - ldrh r0, [r4, 0x38] - adds r0, 0x1 - strh r0, [r4, 0x38] - movs r1, 0x38 - ldrsh r0, [r4, r1] - lsls r0, 3 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x3A] - movs r2, 0x3A - ldrsh r0, [r4, r2] - movs r1, 0x7 - bl Sin - strh r0, [r4, 0x26] - ldr r2, _080DF498 @ =gTasks - movs r0, 0x2E - ldrsh r1, [r4, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r1, r0, r2 - movs r2, 0x18 - ldrsh r0, [r1, r2] - cmp r0, 0 - beq _080DF492 - ldrh r0, [r1, 0x16] - subs r0, 0x1 - strh r0, [r1, 0x16] - adds r0, r4, 0 - bl DestroySprite -_080DF492: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080DF498: .4byte gTasks - thumb_func_end sub_80DF3D8 - - thumb_func_start sub_80DF49C -sub_80DF49C: @ 80DF49C - adds r3, r0, 0 - adds r3, 0x3E - ldrb r1, [r3] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r3] - ldr r2, _080DF4E0 @ =gBankSpriteIds - ldr r1, _080DF4E4 @ =gAnimBankAttacker - ldrb r1, [r1] - adds r1, r2 - ldrb r1, [r1] - strh r1, [r0, 0x38] - movs r1, 0x80 - strh r1, [r0, 0x2E] - movs r1, 0xA - strh r1, [r0, 0x30] - ldr r2, _080DF4E8 @ =gBattleAnimArgs - ldrh r1, [r2] - strh r1, [r0, 0x32] - ldrh r1, [r2, 0x2] - strh r1, [r0, 0x34] - ldr r1, _080DF4EC @ =sub_80DF4F4 - str r1, [r0, 0x1C] - ldr r2, _080DF4F0 @ =gSprites - movs r3, 0x38 - ldrsh r1, [r0, r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r0, 0x22] - adds r1, 0x8 - strh r1, [r0, 0x22] - bx lr - .align 2, 0 -_080DF4E0: .4byte gBankSpriteIds -_080DF4E4: .4byte gAnimBankAttacker -_080DF4E8: .4byte gBattleAnimArgs -_080DF4EC: .4byte sub_80DF4F4 -_080DF4F0: .4byte gSprites - thumb_func_end sub_80DF49C - - thumb_func_start sub_80DF4F4 -sub_80DF4F4: @ 80DF4F4 - push {r4,r5,lr} - adds r5, r0, 0 - ldrh r0, [r5, 0x34] - movs r1, 0x34 - ldrsh r3, [r5, r1] - cmp r3, 0 - beq _080DF55C - subs r0, 0x1 - strh r0, [r5, 0x34] - movs r2, 0x2E - ldrsh r0, [r5, r2] - movs r2, 0x30 - ldrsh r1, [r5, r2] - bl Sin - ldr r4, _080DF554 @ =gSprites - movs r1, 0x38 - ldrsh r2, [r5, r1] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r4 - strh r0, [r1, 0x24] - movs r2, 0x2E - ldrsh r0, [r5, r2] - movs r2, 0x30 - ldrsh r1, [r5, r2] - bl Cos - movs r1, 0x38 - ldrsh r2, [r5, r1] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r4 - strh r0, [r1, 0x26] - ldrh r0, [r5, 0x32] - ldrh r2, [r5, 0x2E] - adds r1, r0, r2 - strh r1, [r5, 0x2E] - lsls r0, r1, 16 - asrs r0, 16 - cmp r0, 0xFF - ble _080DF590 - ldr r2, _080DF558 @ =0xffffff00 - adds r0, r1, r2 - strh r0, [r5, 0x2E] - b _080DF590 - .align 2, 0 -_080DF554: .4byte gSprites -_080DF558: .4byte 0xffffff00 -_080DF55C: - ldr r2, _080DF598 @ =gSprites - movs r0, 0x38 - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - strh r3, [r0, 0x24] - movs r0, 0x38 - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - strh r3, [r0, 0x26] - movs r0, 0x38 - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r0, 0x22] - subs r1, 0x8 - strh r1, [r0, 0x22] - ldr r0, _080DF59C @ =move_anim_8074EE0 - str r0, [r5, 0x1C] -_080DF590: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080DF598: .4byte gSprites -_080DF59C: .4byte move_anim_8074EE0 - thumb_func_end sub_80DF4F4 - - .align 2, 0 @ Don't pad with nop. diff --git a/ld_script.txt b/ld_script.txt index 27c6de433..189184da1 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -290,7 +290,6 @@ SECTIONS { src/battle/anim/bug.o(.text); src/battle/anim/rock.o(.text); src/battle/anim/ghost.o(.text); - asm/ghost.o(.text); src/battle/anim/dragon.o(.text); src/battle/anim/dark.o(.text); src/battle/anim/ground.o(.text); diff --git a/src/battle/anim/ghost.c b/src/battle/anim/ghost.c index 85879c86c..52d9c7e72 100644 --- a/src/battle/anim/ghost.c +++ b/src/battle/anim/ghost.c @@ -1,35 +1,53 @@ #include "global.h" +#include "battle.h" +#include "battle_anim.h" +#include "blend_palette.h" +#include "palette.h" +#include "rom_8077ABC.h" +#include "scanline_effect.h" #include "sound.h" -#include "constants/songs.h" #include "trig.h" -#include "rom_8077ABC.h" -#include "battle_anim.h" +#include "constants/battle_constants.h" +#include "constants/songs.h" extern s16 gBattleAnimArgs[]; +extern u8 gBankSpriteIds[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; extern u8 gUnknown_0202F7D2; -void sub_80DDB6C(struct Sprite *sprite); -void sub_80DDBD8(struct Sprite *); -void sub_80DDC4C(struct Sprite *); -void sub_80DDCC8(struct Sprite *); -void sub_80DDD58(struct Sprite *sprite); -void sub_80DDD78(struct Sprite *); -void sub_80DDE7C(u8 taskId); -void sub_80DDED0(u8 taskId); -void sub_80DDF40(struct Sprite *sprite); -void sub_80DDFE8(struct Sprite *); -void sub_80DE0FC(struct Sprite *sprite); -void sub_80DE114(struct Sprite *); -void sub_80DE2DC(u8 taskId); -void sub_80DE3D4(u8 taskId); -void sub_80DE7B8(struct Sprite *sprite); -void sub_80DEF3C(struct Sprite *sprite); -void sub_80DF0B8(struct Sprite *sprite); -void sub_80DF0B8(struct Sprite *sprite); -void sub_80DF3D8(struct Sprite *sprite); -void sub_80DF49C(struct Sprite *sprite); +static void sub_80DDB6C(struct Sprite *sprite); +static void sub_80DDBD8(struct Sprite *); +static void sub_80DDC4C(struct Sprite *); +static void sub_80DDCC8(struct Sprite *); +static void sub_80DDD58(struct Sprite *sprite); +static void sub_80DDD78(struct Sprite *); +static void sub_80DDE7C(u8 taskId); +static void sub_80DDED0(u8 taskId); +static void sub_80DDF40(struct Sprite *sprite); +static void sub_80DDFE8(struct Sprite *); +static void sub_80DE0FC(struct Sprite *sprite); +static void sub_80DE114(struct Sprite *); +static void sub_80DE2DC(u8 taskId); +static void sub_80DE3D4(u8 taskId); +static void sub_80DE7B8(struct Sprite *sprite); +static void sub_80DEF3C(struct Sprite *sprite); +static void sub_80DF0B8(struct Sprite *sprite); +static void sub_80DF3D8(struct Sprite *sprite); +static void sub_80DF49C(struct Sprite *sprite); +static void sub_80DE61C(u8 taskId); +static void sub_80DE6B0(u8 taskId); +static void sub_80DE8D8(struct Sprite *sprite); +static void sub_80DEB38(u8 taskId); +static void sub_80DED60(u8 taskId); +static void sub_80DEEE8(u8 taskId); +static void sub_80DEF98(struct Sprite *sprite); +static void sub_80DF018(struct Sprite *sprite); +static void sub_80DF090(struct Sprite *sprite); +static void sub_80DF18C(struct Sprite *sprite); +static void sub_80DF24C(u8 taskId); +static void sub_80DF4F4(struct Sprite *sprite); + const union AffineAnimCmd gSpriteAffineAnim_83DAE48[] = { @@ -204,7 +222,7 @@ const struct SpriteTemplate gSpriteTemplate_83DAF98 = .callback = sub_80DF49C, }; -void sub_80DDB6C(struct Sprite *sprite) +static void sub_80DDB6C(struct Sprite *sprite) { InitAnimSpritePos(sprite, 1); sprite->data[0] = gBattleAnimArgs[2]; @@ -219,7 +237,7 @@ void sub_80DDB6C(struct Sprite *sprite) REG_BLDALPHA = sprite->data[6]; } -void sub_80DDBD8(struct Sprite *sprite) +static void sub_80DDBD8(struct Sprite *sprite) { s16 r0; s16 r2; @@ -229,6 +247,7 @@ void sub_80DDBD8(struct Sprite *sprite) sprite->callback = sub_80DDC4C; return; } + sprite->pos2.x += Sin(sprite->data[5], 10); sprite->pos2.y += Cos(sprite->data[5], 15); r2 = sprite->data[5]; @@ -241,24 +260,26 @@ void sub_80DDBD8(struct Sprite *sprite) PlaySE12WithPanning(SE_W109, gUnknown_0202F7D2); } -void sub_80DDC4C(struct Sprite *sprite) +static void sub_80DDC4C(struct Sprite *sprite) { s16 r2; s16 r0; sprite->data[0] = 1; TranslateAnimSpriteByDeltas(sprite); - sprite->pos2.x += Sin(sprite->data[5],10); - sprite->pos2.y += Cos(sprite->data[5],15); + sprite->pos2.x += Sin(sprite->data[5], 10); + sprite->pos2.y += Cos(sprite->data[5], 15); r2 = sprite->data[5]; sprite->data[5] = (sprite->data[5] + 5) & 0xFF; r0 = sprite->data[5]; - if(r2 == 0 || r2 > 196) - if(r0 > 0) + if (r2 == 0 || r2 > 196) + { + if (r0 > 0) PlaySE(SE_W109); + } - if(sprite->data[6] == 0) + if (sprite->data[6] == 0) { sprite->invisible = TRUE; sprite->callback = sub_807861C; @@ -267,13 +288,13 @@ void sub_80DDC4C(struct Sprite *sprite) sub_80DDCC8(sprite); } -void sub_80DDCC8(struct Sprite *sprite) +static void sub_80DDCC8(struct Sprite *sprite) { s16 r0; - if(sprite->data[6] > 0xFF) + if (sprite->data[6] > 0xFF) { - if(++sprite->data[6] == 0x10d) + if (++sprite->data[6] == 0x10d) sprite->data[6] = 0; return; } @@ -281,32 +302,30 @@ void sub_80DDCC8(struct Sprite *sprite) r0 = sprite->data[7]; sprite->data[7]++; - if((r0 & 0xFF) == 0) + if ((r0 & 0xFF) == 0) { sprite->data[7] &= 0xff00; - if((sprite->data[7] & 0x100) != 0) + if ((sprite->data[7] & 0x100) != 0) sprite->data[6]++; else sprite->data[6]--; + + REG_BLDALPHA = BLDALPHA_BLEND(sprite->data[6], 16 - sprite->data[6]); + if (sprite->data[6] == 0 || sprite->data[6] == 16) + sprite->data[7] ^= 0x100; + if (sprite->data[6] == 0) + sprite->data[6] = 0x100; } - else - return; - - REG_BLDALPHA = BLDALPHA_BLEND(sprite->data[6], 16 - sprite->data[6]); - if(sprite->data[6] == 0 || sprite->data[6] == 16) - sprite->data[7] ^= 0x100; - if(sprite->data[6] == 0) - sprite->data[6] = 0x100; } -void sub_80DDD58(struct Sprite *sprite) +static void sub_80DDD58(struct Sprite *sprite) { sub_8078764(sprite, 1); sprite->callback = sub_80DDD78; sub_80DDD78(sprite); } -void sub_80DDD78(struct Sprite *sprite) +static void sub_80DDD78(struct Sprite *sprite) { u16 temp1; sprite->pos2.x = Sin(sprite->data[0], 32); @@ -340,7 +359,7 @@ void sub_80DDDF0(u8 taskId) gTasks[taskId].func = sub_80DDE7C; } -void sub_80DDE7C(u8 taskId) +static void sub_80DDE7C(u8 taskId) { gTasks[taskId].data[10] += 1; if (gTasks[taskId].data[10] == 3) @@ -351,11 +370,12 @@ void sub_80DDE7C(u8 taskId) REG_BLDALPHA = gTasks[taskId].data[3] << 8 | gTasks[taskId].data[2]; if (gTasks[taskId].data[2] != 9) return; + gTasks[taskId].func = sub_80DDED0; } } -void sub_80DDED0(u8 taskId) +static void sub_80DDED0(u8 taskId) { u8 spriteId; if (gTasks[taskId].data[1] > 0) @@ -363,20 +383,23 @@ void sub_80DDED0(u8 taskId) gTasks[taskId].data[1] -= 1; return; } + spriteId = GetAnimBattlerSpriteId(0); gTasks[taskId].data[0] += 8; if (gTasks[taskId].data[0] <= 0xFF) { obj_id_set_rotscale(spriteId, gTasks[taskId].data[0], gTasks[taskId].data[0], 0); - return; } - sub_8078F40(spriteId); - DestroyAnimVisualTask(taskId); - REG_BLDCNT = 0; - REG_BLDALPHA = 0; + else + { + sub_8078F40(spriteId); + DestroyAnimVisualTask(taskId); + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + } } -void sub_80DDF40(struct Sprite *sprite) +static void sub_80DDF40(struct Sprite *sprite) { u16 r5, r6; r5 = sprite->pos1.x; @@ -394,7 +417,7 @@ void sub_80DDF40(struct Sprite *sprite) sprite->callback = sub_80DDFE8; } -void sub_80DDFE8(struct Sprite *sprite) +static void sub_80DDFE8(struct Sprite *sprite) { switch (sprite->data[0]) { @@ -438,7 +461,7 @@ void sub_80DDFE8(struct Sprite *sprite) } } -void sub_80DE0FC(struct Sprite *sprite) +static void sub_80DE0FC(struct Sprite *sprite) { sub_8078764(sprite, 1); sprite->callback = sub_80DE114; @@ -446,7 +469,7 @@ void sub_80DE0FC(struct Sprite *sprite) /* NONMATCHING */ NAKED -void sub_80DE114(struct Sprite *sprite) +static void sub_80DE114(struct Sprite *sprite) { asm_unified("\tpush {r4-r6,lr}\n" "\tadds r3, r0, 0\n" @@ -570,7 +593,7 @@ void sub_80DE1B0(u8 taskId) task->func = sub_80DE2DC; } -void sub_80DE2DC(u8 taskId) +static void sub_80DE2DC(u8 taskId) { struct Task *task; @@ -613,5 +636,735 @@ void sub_80DE3AC(u8 taskId) task = &gTasks[taskId]; task->data[15] = 0; task->func = sub_80DE3D4; - sub_80DE3D4(taskId); + task->func(taskId); +} + +static void sub_80DE3D4(u8 taskId) +{ + s16 startLine; + struct Task *task = &gTasks[taskId]; + u8 position = GetBattlerPosition_permutated(gAnimBankTarget); + + switch (task->data[15]) + { + case 0: + task->data[14] = AllocSpritePalette(0x2771); + if (task->data[14] == 0xFF) + { + DestroyAnimVisualTask(taskId); + } + else + { + task->data[0] = duplicate_obj_of_side_rel2move_in_transparent_mode(1); + if (task->data[0] < 0) + { + FreeSpritePaletteByTag(0x2771); + DestroyAnimVisualTask(taskId); + } + else + { + gSprites[task->data[0]].oam.paletteNum = task->data[14]; + gSprites[task->data[0]].oam.objMode = ST_OAM_OBJ_NORMAL; + gSprites[task->data[0]].oam.priority = 3; + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 16; + task->data[13] = GetAnimBattlerSpriteId(1); + task->data[4] = (gSprites[task->data[13]].oam.paletteNum + 16) * 16; + if (position == 1) + REG_DISPCNT &= 0xFDFF; + else + REG_DISPCNT &= 0xFBFF; + + task->data[15]++; + } + } + break; + case 1: + task->data[14] = (task->data[14] + 16) * 16; + CpuSet(&gPlttBufferUnfaded[task->data[4]], &gPlttBufferFaded[task->data[14]], 0x4000008); + BlendPalette(task->data[4], 16, 10, RGB(13, 0, 15)); + task->data[15]++; + break; + case 2: + startLine = gSprites[task->data[13]].pos1.y + gSprites[task->data[13]].pos2.y - 32; + if (startLine < 0) + startLine = 0; + + if (position == 1) + task->data[10] = ScanlineEffect_InitWave(startLine, startLine + 64, 2, 6, 0, 4, 1); + else + task->data[10] = ScanlineEffect_InitWave(startLine, startLine + 64, 2, 6, 0, 8, 1); + + task->data[15]++; + break; + case 3: + if (position == 1) + REG_BLDCNT = 0x3F42; + else + REG_BLDCNT = 0x3F44; + + REG_BLDALPHA = 0x1000; + task->data[15]++; + break; + case 4: + if (position == 1) + REG_DISPCNT |= DISPCNT_BG1_ON; + else + REG_DISPCNT |= DISPCNT_BG2_ON; + + task->func = sub_80DE61C; + task->data[15]++; + break; + default: + task->data[15]++; + break; + } +} + +static void sub_80DE61C(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + task->data[1]++; + task->data[5] = task->data[1] & 1; + if (task->data[5] == 0) + task->data[2] = gSineTable[task->data[1]] / 18; + + if (task->data[5] == 1) + task->data[3] = 16 - (gSineTable[task->data[1]] / 18); + + REG_BLDALPHA = (task->data[3] << 8) | task->data[2]; + if (task->data[1] == 128) + { + task->data[15] = 0; + task->func = sub_80DE6B0; + task->func(taskId); + } +} + +static void sub_80DE6B0(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + u8 position = GetBattlerPosition_permutated(gAnimBankTarget); + + switch (task->data[15]) + { + case 0: + gScanlineEffect.state = 3; + task->data[14] = GetAnimBattlerSpriteId(1); + if (position == 1) + REG_DISPCNT &= 0xFDFF; + else + REG_DISPCNT &= 0xFBFF; + break; + case 1: + BlendPalette(task->data[4], 16, 0, RGB(13, 0, 15)); + break; + case 2: + gSprites[task->data[14]].invisible = 1; + obj_delete_but_dont_free_vram(&gSprites[task->data[0]]); + FreeSpritePaletteByTag(0x2771); + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + if (position == 1) + REG_DISPCNT |= DISPCNT_BG1_ON; + else + REG_DISPCNT |= DISPCNT_BG2_ON; + + DestroyAnimVisualTask(taskId); + break; + } + + task->data[15]++; +} + +static void sub_80DE7B8(struct Sprite *sprite) +{ + s16 battler1X, battler1Y; + s16 battler2X, battler2Y; + s16 yDiff; + + if (gBattleAnimArgs[0] == 0) + { + battler1X = GetBattlerSpriteCoord(gAnimBankAttacker, 0); + battler1Y = GetBattlerSpriteCoord(gAnimBankAttacker, 1) + 28; + battler2X = GetBattlerSpriteCoord(gAnimBankTarget, 0); + battler2Y = GetBattlerSpriteCoord(gAnimBankTarget, 1) + 28; + } + else + { + battler1X = GetBattlerSpriteCoord(gAnimBankTarget, 0); + battler1Y = GetBattlerSpriteCoord(gAnimBankTarget, 1) + 28; + battler2X = GetBattlerSpriteCoord(gAnimBankAttacker, 0); + battler2Y = GetBattlerSpriteCoord(gAnimBankAttacker, 1) + 28; + } + + yDiff = battler2Y - battler1Y; + sprite->data[0] = battler1X * 16; + sprite->data[1] = battler1Y * 16; + sprite->data[2] = ((battler2X - battler1X) * 16) / gBattleAnimArgs[1]; + sprite->data[3] = (yDiff * 16) / gBattleAnimArgs[1]; + sprite->data[4] = gBattleAnimArgs[1]; + sprite->data[5] = battler2X; + sprite->data[6] = battler2Y; + sprite->data[7] = sprite->data[4] / 2; + sprite->oam.priority = 2; + sprite->pos1.x = battler1X; + sprite->pos1.y = battler1Y; + sprite->callback = sub_80DE8D8; + sprite->invisible = 1; +} + +static void sub_80DE8D8(struct Sprite *sprite) +{ + if (sprite->data[4]) + { + sprite->data[0] += sprite->data[2]; + sprite->data[1] += sprite->data[3]; + sprite->pos1.x = sprite->data[0] >> 4; + sprite->pos1.y = sprite->data[1] >> 4; + if (--sprite->data[4] == 0) + sprite->data[0] = 0; + } +} + +void sub_80DE918(u8 taskId) +{ + struct Task *task; + s16 battler; + u8 spriteId; + s16 baseX, baseY; + s16 x, y; + + task = &gTasks[taskId]; + REG_BLDCNT = 0x3F40; + REG_BLDALPHA = 0x1000; + task->data[5] = 0; + task->data[6] = 0; + task->data[7] = 0; + task->data[8] = 0; + task->data[9] = 16; + task->data[10] = gBattleAnimArgs[0]; + + baseX = GetBattlerSpriteCoord(gAnimBankAttacker, 2); + baseY = sub_807A100(gAnimBankAttacker, 3); + if (!IsContest()) + { + for (battler = 0; battler < 4; battler++) + { + if (battler != gAnimBankAttacker + && battler != (gAnimBankAttacker ^ 2) + && IsAnimBankSpriteVisible(battler)) + { + spriteId = CreateSprite(&gSpriteTemplate_83DAF08, baseX, baseY, 55); + if (spriteId != MAX_SPRITES) + { + x = GetBattlerSpriteCoord(battler, 2); + y = sub_807A100(battler, 3); + gSprites[spriteId].data[0] = baseX << 4; + gSprites[spriteId].data[1] = baseY << 4; + gSprites[spriteId].data[2] = ((x - baseX) << 4) / gBattleAnimArgs[1]; + gSprites[spriteId].data[3] = ((y - baseY) << 4) / gBattleAnimArgs[1]; + gSprites[spriteId].data[4] = gBattleAnimArgs[1]; + gSprites[spriteId].data[5] = x; + gSprites[spriteId].data[6] = y; + gSprites[spriteId].callback = sub_80DE8D8; + + task->data[task->data[12] + 13] = spriteId; + task->data[12]++; + } + } + } + } + else + { + spriteId = CreateSprite(&gSpriteTemplate_83DAF08, baseX, baseY, 55); + if (spriteId != MAX_SPRITES) + { + x = 48; + y = 40; + gSprites[spriteId].data[0] = baseX << 4; + gSprites[spriteId].data[1] = baseY << 4; + gSprites[spriteId].data[2] = ((x - baseX) << 4) / gBattleAnimArgs[1]; + gSprites[spriteId].data[3] = ((y - baseY) << 4) / gBattleAnimArgs[1]; + gSprites[spriteId].data[4] = gBattleAnimArgs[1]; + gSprites[spriteId].data[5] = x; + gSprites[spriteId].data[6] = y; + gSprites[spriteId].callback = sub_80DE8D8; + + task->data[13] = spriteId; + task->data[12] = 1; + } + } + + task->func = sub_80DEB38; +} + +static void sub_80DEB38(u8 taskId) +{ + u16 i; + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + if (task->data[6] == 0) + { + if (++task->data[5] > 1) + { + task->data[5] = 0; + task->data[7]++; + if (task->data[7] & 1) + { + if (task->data[8] < 16) + task->data[8]++; + } + else + { + if (task->data[9]) + task->data[9]--; + } + + REG_BLDALPHA = (task->data[9] << 8) | task->data[8]; + if (task->data[7] >= 24) + { + task->data[7] = 0; + task->data[6] = 1; + } + } + } + + if (task->data[10]) + task->data[10]--; + else if (task->data[6]) + task->data[0]++; + break; + case 1: + if (++task->data[5] > 1) + { + task->data[5] = 0; + task->data[7]++; + if (task->data[7] & 1) + { + if (task->data[8]) + task->data[8]--; + } + else + { + if (task->data[9] < 16) + task->data[9]++; + } + + REG_BLDALPHA = (task->data[9] << 8) | task->data[8]; + if (task->data[8] == 0 && task->data[9] == 16) + { + for (i = 0; i < task->data[12]; i++) + DestroySprite(&gSprites[task->data[i + 13]]); + + task->data[0]++; + } + } + break; + case 2: + if (++task->data[5] > 0) + task->data[0]++; + break; + case 3: + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + DestroyAnimVisualTask(taskId); + break; + } +} + +void sub_80DECB0(u8 taskId) +{ + s16 startX, startY; + s16 leftDistance, topDistance, bottomDistance, rightDistance; + + gBattle_WIN0H = 0; + gBattle_WIN0V = 0; + REG_WININ = 0x3F3F; + REG_WINOUT = 0x3F1F; + REG_BLDCNT = 0xC8; + REG_BLDY = 0x10; + + if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER || IsContest()) + startX = 40; + else + startX = 200; + + gBattle_WIN0H = (startX << 8) | startX; + startY = 40; + gBattle_WIN0V = (startY << 8) | startY; + + leftDistance = startX; + rightDistance = 240 - startX; + topDistance = startY; + bottomDistance = 72; + gTasks[taskId].data[1] = leftDistance; + gTasks[taskId].data[2] = rightDistance; + gTasks[taskId].data[3] = topDistance; + gTasks[taskId].data[4] = bottomDistance; + gTasks[taskId].data[5] = startX; + gTasks[taskId].data[6] = startY; + gTasks[taskId].func = sub_80DED60; +} + +static void sub_80DED60(u8 taskId) +{ + s16 step; + s16 leftDistance, rightDistance, topDistance, bottomDistance; + s16 startX, startY; + u16 left, right, top, bottom; + u16 selectedPalettes; + + step = gTasks[taskId].data[0]; + gTasks[taskId].data[0]++; + leftDistance = gTasks[taskId].data[1]; + rightDistance = gTasks[taskId].data[2]; + topDistance = gTasks[taskId].data[3]; + bottomDistance = gTasks[taskId].data[4]; + startX = gTasks[taskId].data[5]; + startY = gTasks[taskId].data[6]; + + if (step < 16) + { + left = startX - (leftDistance * 0.0625) * step; + right = startX + (rightDistance * 0.0625) * step; + top = startY - (topDistance * 0.0625) * step; + bottom = startY + (bottomDistance * 0.0625) * step; + } + else + { + left = 0; + right = 240; + top = 0; + bottom = 112; + selectedPalettes = sub_80791A8(1, 0, 0, 0, 0, 0, 0); + BeginNormalPaletteFade(selectedPalettes, 0, 16, 16, RGB(0, 0, 0)); + gTasks[taskId].func = sub_80DEEE8; + } + + gBattle_WIN0H = (left << 8) | right; + gBattle_WIN0V = (top << 8) | bottom; +} + +static void sub_80DEEE8(u8 taskId) +{ + if (!gPaletteFade.active) + { + gBattle_WIN0H = 0; + gBattle_WIN0V = 0; + REG_WININ = 0x3F3F; + REG_WINOUT = 0x3F3F; + REG_BLDCNT = 0; + REG_BLDY = 0; + DestroyAnimVisualTask(taskId); + } +} + +static void sub_80DEF3C(struct Sprite *sprite) +{ + s16 xDelta; + s16 xDelta2; + + InitAnimSpritePos(sprite, 1); + if (GetBattlerSide(gAnimBankAttacker) == B_SIDE_PLAYER) + { + xDelta = 24; + xDelta2 = -2; + sprite->oam.matrixNum = 8; + } + else + { + xDelta = -24; + xDelta2 = 2; + } + + sprite->pos1.x += xDelta; + sprite->data[1] = xDelta2; + sprite->data[0] = 60; + sprite->callback = sub_80DEF98; +} + +static void sub_80DEF98(struct Sprite *sprite) +{ + u16 var0; + + if (sprite->data[0] > 0) + { + sprite->data[0]--; + } + else + { + sprite->pos2.x += sprite->data[1]; + var0 = sprite->pos2.x + 7; + if (var0 > 14) + { + sprite->pos1.x += sprite->pos2.x; + sprite->pos2.x = 0; + sprite->oam.tileNum += 8; + if (++sprite->data[2] == 3) + { + sprite->data[0] = 30; + sprite->callback = WaitAnimForDuration; + StoreSpriteCallbackInData(sprite, sub_80DF018); + } + else + { + sprite->data[0] = 40; + } + } + } +} + +static void sub_80DF018(struct Sprite *sprite) +{ + if (sprite->data[0] == 0) + { + REG_BLDCNT = 0x3F40; + REG_BLDALPHA = 0x0010; + sprite->data[0]++; + sprite->data[1] = 0; + sprite->data[2] = 0; + } + else if (sprite->data[1] < 2) + { + sprite->data[1]++; + } + else + { + sprite->data[1] = 0; + sprite->data[2]++; + REG_BLDALPHA = (16 - sprite->data[2]) | (sprite->data[2] << 8); + if (sprite->data[2] == 16) + { + sprite->invisible = 1; + sprite->callback = sub_80DF090; + } + } +} + +static void sub_80DF090(struct Sprite *sprite) +{ + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + gBattle_WIN0H = 0; + gBattle_WIN0V = 0; + DestroyAnimSprite(sprite); +} + +static void sub_80DF0B8(struct Sprite *sprite) +{ + u16 coeffB; + u16 coeffA; + + sprite->pos2.x = Sin(sprite->data[0], 12); + if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER) + sprite->pos2.x = -sprite->pos2.x; + + sprite->data[0] = (sprite->data[0] + 6) & 0xFF; + sprite->data[1] += 0x100; + sprite->pos2.y = -(sprite->data[1] >> 8); + + sprite->data[7]++; + if (sprite->data[7] == 1) + { + sprite->data[6] = 0x050B; + REG_BLDCNT = 0x3F40; + REG_BLDALPHA = sprite->data[6]; + } + else if (sprite->data[7] > 30) + { + sprite->data[2]++; + coeffB = sprite->data[6] >> 8; + coeffA = sprite->data[6] & 0xFF; + + if (++coeffB > 16) + coeffB = 16; + if (--(s16)coeffA < 0) + coeffA = 0; + + REG_BLDALPHA = (coeffB << 8) | coeffA; + sprite->data[6] = (coeffB << 8) | coeffA; + if (coeffB == 16 && coeffA == 0) + { + sprite->invisible = 1; + sprite->callback = sub_80DF18C; + } + } +} + +static void sub_80DF18C(struct Sprite *sprite) +{ + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + DestroyAnimSprite(sprite); +} + +void sub_80DF1A4(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + task->data[0] = 0; + task->data[1] = 16; + task->data[9] = GetBattlerSpriteCoord(gAnimBankAttacker, 2); + task->data[10] = sub_8077FC0(gAnimBankAttacker); + task->data[11] = (sub_807A100(gAnimBankAttacker, 1) / 2) + 8; + task->data[7] = 0; + task->data[5] = sub_8079ED4(gAnimBankAttacker); + task->data[6] = sub_8079E90(gAnimBankAttacker) - 2; + task->data[3] = 0; + task->data[4] = 16; + REG_BLDCNT = 0x3F40; + REG_BLDALPHA = 0x1000; + task->data[8] = 0; + task->func = sub_80DF24C; +} + +static void sub_80DF24C(u8 taskId) +{ + u16 i; + u8 spriteId; + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + for (i = 0; i < 6; i++) + { + spriteId = CreateSprite(&gSpriteTemplate_83DAF80, task->data[9], task->data[10], task->data[6]); + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].data[0] = taskId; + gSprites[spriteId].data[1] = GetBattlerSide(gAnimBankAttacker) == B_SIDE_PLAYER; + + gSprites[spriteId].data[2] = (i * 42) & 0xFF; + gSprites[spriteId].data[3] = task->data[11]; + gSprites[spriteId].data[5] = i * 6; + task->data[7]++; + } + } + + task->data[0]++; + break; + case 1: + if (++task->data[1] & 1) + { + if (task->data[3] < 14) + task->data[3]++; + } + else + { + if (task->data[4] > 4) + task->data[4]--; + } + + if (task->data[3] == 14 && task->data[4] == 4) + { + task->data[1] = 0; + task->data[0]++; + } + + REG_BLDALPHA = (task->data[4] << 8) | task->data[3]; + break; + case 2: + if (++task->data[1] > 30) + { + task->data[1] = 0; + task->data[0]++; + } + break; + case 3: + if (++task->data[1] & 1) + { + if (task->data[3] > 0) + task->data[3]--; + } + else + { + if (task->data[4] < 16) + task->data[4]++; + } + + if (task->data[3] == 0 && task->data[4] == 16) + { + task->data[8] = 1; + task->data[0]++; + } + + REG_BLDALPHA = (task->data[4] << 8) | task->data[3]; + break; + case 4: + if (task->data[7] == 0) + task->data[0]++; + break; + case 5: + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + DestroyAnimVisualTask(taskId); + break; + } +} + +static void sub_80DF3D8(struct Sprite *sprite) +{ + u16 index; + + if (sprite->data[1] == 0) + sprite->data[2] += 2; + else + sprite->data[2] -= 2; + + sprite->data[2] &= 0xFF; + sprite->pos2.x = Sin(sprite->data[2], sprite->data[3]); + + index = sprite->data[2] - 65; + if (index < 127) + sprite->oam.priority = gTasks[sprite->data[0]].data[5] + 1; + else + sprite->oam.priority = gTasks[sprite->data[0]].data[5]; + + sprite->data[5]++; + sprite->data[6] = (sprite->data[5] * 8) & 0xFF; + sprite->pos2.y = Sin(sprite->data[6], 7); + if (gTasks[sprite->data[0]].data[8]) + { + gTasks[sprite->data[0]].data[7]--; + DestroySprite(sprite); + } +} + +static void sub_80DF49C(struct Sprite *sprite) +{ + sprite->invisible = 1; + sprite->data[5] = gBankSpriteIds[gAnimBankAttacker]; + sprite->data[0] = 128; + sprite->data[1] = 10; + sprite->data[2] = gBattleAnimArgs[0]; + sprite->data[3] = gBattleAnimArgs[1]; + sprite->callback = sub_80DF4F4; + + gSprites[sprite->data[5]].pos1.y += 8; +} + +static void sub_80DF4F4(struct Sprite *sprite) +{ + if (sprite->data[3]) + { + sprite->data[3]--; + gSprites[sprite->data[5]].pos2.x = Sin(sprite->data[0], sprite->data[1]); + gSprites[sprite->data[5]].pos2.y = Cos(sprite->data[0], sprite->data[1]); + sprite->data[0] += sprite->data[2]; + if (sprite->data[0] > 255) + sprite->data[0] -= 256; + } + else + { + gSprites[sprite->data[5]].pos2.x = 0; + gSprites[sprite->data[5]].pos2.y = 0; + gSprites[sprite->data[5]].pos1.y -= 8; + sprite->callback = move_anim_8074EE0; + } } |