diff options
author | U-User-PC\User <golemgalvanize@github.com> | 2017-08-23 13:18:26 -0400 |
---|---|---|
committer | U-User-PC\User <golemgalvanize@github.com> | 2017-08-23 13:18:26 -0400 |
commit | b6e4bb07de08ae72b95b352b0243aef4b870af4c (patch) | |
tree | edb3bf042352c17703d46ca7204f825ca0ea774a | |
parent | f5dd2d9922067b02a8cb304dfb46e649aab51a81 (diff) |
decompiled up to sub_80CEAD8
-rw-r--r-- | asm/battle_anim_80CA710.s | 819 | ||||
-rwxr-xr-x | src/battle_anim_80CA710.c | 355 |
2 files changed, 354 insertions, 820 deletions
diff --git a/asm/battle_anim_80CA710.s b/asm/battle_anim_80CA710.s index 2a3ef3754..c4f68ee3e 100644 --- a/asm/battle_anim_80CA710.s +++ b/asm/battle_anim_80CA710.s @@ -6,825 +6,6 @@ .text - thumb_func_start sub_80CE4D4 -sub_80CE4D4: @ 80CE4D4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - lsls r0, 24 - lsrs r2, r0, 24 - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - ldr r1, _080CE4FC @ =gTasks - adds r4, r0, r1 - movs r0, 0x8 - ldrsh r1, [r4, r0] - cmp r1, 0x1 - beq _080CE5C0 - cmp r1, 0x1 - bgt _080CE500 - cmp r1, 0 - beq _080CE50E - b _080CE65E - .align 2, 0 -_080CE4FC: .4byte gTasks -_080CE500: - cmp r1, 0x2 - bne _080CE506 - b _080CE618 -_080CE506: - cmp r1, 0x3 - bne _080CE50C - b _080CE64C -_080CE50C: - b _080CE65E -_080CE50E: - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - lsls r0, 16 - cmp r0, 0 - bgt _080CE51C - b _080CE65E -_080CE51C: - strh r1, [r4, 0xA] - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xF - bgt _080CE568 - ldrh r0, [r4, 0x16] - ldrh r1, [r4, 0x10] - adds r0, r1 - strh r0, [r4, 0x10] - ldrh r2, [r4, 0x18] - ldrh r3, [r4, 0x12] - adds r2, r3 - strh r2, [r4, 0x12] - ldrh r1, [r4, 0x1A] - ldrh r5, [r4, 0x14] - adds r1, r5 - strh r1, [r4, 0x14] - lsls r0, 16 - asrs r0, 19 - lsls r0, 16 - lsrs r0, 16 - lsls r2, 16 - asrs r2, 19 - lsls r2, 16 - lsls r1, 16 - asrs r1, 19 - lsls r1, 16 - lsrs r2, 11 - orrs r0, r2 - lsrs r1, 6 - orrs r0, r1 - lsls r0, 16 - lsrs r0, 16 - mov r12, r0 - b _080CE572 -_080CE568: - ldr r7, _080CE5B8 @ =0x00007fbb - mov r12, r7 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_080CE572: - movs r2, 0x1 - movs r3, 0 - movs r1, 0 -_080CE578: - movs r5, 0xE - ldrsh r0, [r4, r5] - ands r0, r2 - lsls r5, r2, 17 - adds r6, r3, 0 - adds r6, 0x10 - adds r1, 0x1 - mov r8, r1 - cmp r0, 0 - beq _080CE5A4 - movs r1, 0x1 - ldr r2, _080CE5BC @ =gPlttBufferFaded -_080CE590: - adds r0, r3, r1 - lsls r0, 1 - adds r0, r2 - mov r7, r12 - strh r7, [r0] - adds r0, r1, 0x1 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0xF - bls _080CE590 -_080CE5A4: - lsrs r2, r5, 16 - lsls r0, r6, 16 - lsrs r3, r0, 16 - mov r1, r8 - lsls r0, r1, 16 - lsrs r1, r0, 16 - cmp r1, 0xF - bls _080CE578 - b _080CE65E - .align 2, 0 -_080CE5B8: .4byte 0x00007fbb -_080CE5BC: .4byte gPlttBufferFaded -_080CE5C0: - ldr r0, _080CE608 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080CE65E - movs r2, 0 - ldr r3, _080CE60C @ =gSprites - movs r5, 0x14 - adds r5, r3 - mov r12, r5 - ldr r7, _080CE610 @ =gBattleAnimSpriteTemplate_83D6FC8 - mov r8, r7 - ldr r6, _080CE614 @ =gBattleAnimSpriteTemplate_83D6FF8 - movs r5, 0x1 -_080CE5DE: - lsls r0, r2, 4 - adds r0, r2 - lsls r1, r0, 2 - mov r7, r12 - adds r0, r1, r7 - ldr r0, [r0] - cmp r0, r8 - beq _080CE5F2 - cmp r0, r6 - bne _080CE5F6 -_080CE5F2: - adds r0, r1, r3 - strh r5, [r0, 0x2E] -_080CE5F6: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x3F - bls _080CE5DE - movs r0, 0 - strh r0, [r4, 0xA] - b _080CE640 - .align 2, 0 -_080CE608: .4byte gPaletteFade -_080CE60C: .4byte gSprites -_080CE610: .4byte gBattleAnimSpriteTemplate_83D6FC8 -_080CE614: .4byte gBattleAnimSpriteTemplate_83D6FF8 -_080CE618: - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1E - ble _080CE65E - movs r1, 0x24 - ldrsh r0, [r4, r1] - movs r2, 0x26 - ldrsh r1, [r4, r2] - bl sub_8079BFC - ldr r1, _080CE648 @ =0x00007fbb - str r1, [sp] - movs r1, 0 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade -_080CE640: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _080CE65E - .align 2, 0 -_080CE648: .4byte 0x00007fbb -_080CE64C: - ldr r0, _080CE66C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080CE65E - adds r0, r2, 0 - bl DestroyAnimVisualTask -_080CE65E: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080CE66C: .4byte gPaletteFade - thumb_func_end sub_80CE4D4 - - thumb_func_start sub_80CE670 -sub_80CE670: @ 80CE670 - push {r4-r6,lr} - adds r5, r0, 0 - ldr r6, _080CE6F4 @ =gBattleAnimArgs - movs r1, 0x4 - ldrsh r0, [r6, r1] - cmp r0, 0x1 - bgt _080CE682 - movs r0, 0x2 - strh r0, [r6, 0x4] -_080CE682: - movs r1, 0x4 - ldrsh r0, [r6, r1] - cmp r0, 0x7F - ble _080CE68E - movs r0, 0x7F - strh r0, [r6, 0x4] -_080CE68E: - movs r0, 0 - strh r0, [r5, 0x2E] - ldrh r0, [r6, 0x4] - strh r0, [r5, 0x30] - ldr r4, _080CE6F8 @ =gBattleAnimEnemyMonIndex - ldrb r0, [r4] - movs r1, 0x2 - bl sub_8077ABC - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r6] - adds r0, r1 - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x3 - bl sub_8077ABC - lsls r0, 24 - lsrs r0, 24 - ldrh r6, [r6, 0x2] - adds r0, r6 - strh r0, [r5, 0x22] - ldrh r1, [r5, 0x20] - strh r1, [r5, 0x3A] - strh r0, [r5, 0x3C] - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _080CE700 - ldrb r1, [r5, 0x3] - movs r0, 0x3F - negs r0, r0 - ands r0, r1 - movs r1, 0x10 - orrs r0, r1 - strb r0, [r5, 0x3] - ldrh r0, [r5, 0x20] - adds r0, 0x28 - strh r0, [r5, 0x20] - ldrh r4, [r5, 0x22] - adds r4, 0x14 - strh r4, [r5, 0x22] - lsls r0, 7 - strh r0, [r5, 0x32] - movs r0, 0x30 - ldrsh r1, [r5, r0] - ldr r0, _080CE6FC @ =0xffffec00 - b _080CE726 - .align 2, 0 -_080CE6F4: .4byte gBattleAnimArgs -_080CE6F8: .4byte gBattleAnimEnemyMonIndex -_080CE6FC: .4byte 0xffffec00 -_080CE700: - ldr r0, _080CE740 @ =gBattleAnimPlayerMonIndex - ldrb r0, [r0] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - bne _080CE748 - ldrh r0, [r5, 0x20] - subs r0, 0x28 - strh r0, [r5, 0x20] - ldrh r4, [r5, 0x22] - adds r4, 0x14 - strh r4, [r5, 0x22] - lsls r0, 7 - strh r0, [r5, 0x32] - movs r0, 0x30 - ldrsh r1, [r5, r0] - movs r0, 0xA0 - lsls r0, 5 -_080CE726: - bl __divsi3 - strh r0, [r5, 0x34] - lsls r4, 7 - strh r4, [r5, 0x36] - movs r0, 0x30 - ldrsh r1, [r5, r0] - ldr r0, _080CE744 @ =0xfffff600 - bl __divsi3 - strh r0, [r5, 0x38] - b _080CE784 - .align 2, 0 -_080CE740: .4byte gBattleAnimPlayerMonIndex -_080CE744: .4byte 0xfffff600 -_080CE748: - ldrh r0, [r5, 0x20] - adds r0, 0x28 - strh r0, [r5, 0x20] - ldrh r4, [r5, 0x22] - subs r4, 0x14 - strh r4, [r5, 0x22] - lsls r0, 7 - strh r0, [r5, 0x32] - movs r0, 0x30 - ldrsh r1, [r5, r0] - ldr r0, _080CE790 @ =0xffffec00 - bl __divsi3 - strh r0, [r5, 0x34] - lsls r4, 7 - strh r4, [r5, 0x36] - movs r0, 0x30 - ldrsh r1, [r5, r0] - movs r0, 0xA0 - lsls r0, 4 - bl __divsi3 - strh r0, [r5, 0x38] - ldrb r1, [r5, 0x3] - movs r0, 0x3F - negs r0, r0 - ands r0, r1 - movs r1, 0x30 - orrs r0, r1 - strb r0, [r5, 0x3] -_080CE784: - ldr r0, _080CE794 @ =sub_80CE798 - str r0, [r5, 0x1C] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080CE790: .4byte 0xffffec00 -_080CE794: .4byte sub_80CE798 - thumb_func_end sub_80CE670 - - thumb_func_start sub_80CE798 -sub_80CE798: @ 80CE798 - push {lr} - adds r2, r0, 0 - ldrh r0, [r2, 0x34] - ldrh r1, [r2, 0x32] - adds r0, r1 - strh r0, [r2, 0x32] - ldrh r1, [r2, 0x38] - ldrh r3, [r2, 0x36] - adds r1, r3 - strh r1, [r2, 0x36] - lsls r0, 16 - asrs r0, 23 - strh r0, [r2, 0x20] - lsls r1, 16 - asrs r1, 23 - strh r1, [r2, 0x22] - ldrh r0, [r2, 0x30] - subs r0, 0x1 - strh r0, [r2, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - bne _080CE7CE - ldrh r0, [r2, 0x3A] - strh r0, [r2, 0x20] - ldrh r0, [r2, 0x3C] - strh r0, [r2, 0x22] -_080CE7CE: - movs r1, 0x30 - ldrsh r0, [r2, r1] - cmp r0, 0 - bne _080CE7DC - adds r0, r2, 0 - bl move_anim_8072740 -_080CE7DC: - pop {r0} - bx r0 - thumb_func_end sub_80CE798 - - thumb_func_start sub_80CE7E0 -sub_80CE7E0: @ 80CE7E0 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - lsls r0, 2 - add r0, r8 - lsls r0, 3 - ldr r1, _080CE870 @ =gTasks - adds r6, r0, r1 - movs r0, 0 - bl obj_id_for_side_relative_to_move - lsls r0, 24 - lsrs r0, 24 - strh r0, [r6, 0x8] - ldr r0, _080CE874 @ =0x00002771 - bl AllocSpritePalette - lsls r0, 24 - lsrs r0, 24 - strh r0, [r6, 0xA] - movs r1, 0xA - ldrsh r0, [r6, r1] - lsls r0, 20 - movs r1, 0x80 - lsls r1, 17 - adds r0, r1 - lsrs r3, r0, 16 - ldr r2, _080CE878 @ =gSprites - movs r0, 0x8 - ldrsh r1, [r6, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0, 0x5] - lsrs r0, 4 - adds r0, 0x10 - lsls r4, r0, 4 - movs r5, 0x1 - ldr r2, _080CE87C @ =gPlttBufferUnfaded -_080CE838: - adds r1, r3, r5 - lsls r1, 1 - adds r1, r2 - adds r0, r4, r5 - lsls r0, 1 - adds r0, r2 - ldrh r0, [r0] - strh r0, [r1] - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0xF - bls _080CE838 - adds r0, r3, 0 - movs r1, 0x10 - movs r2, 0xB - movs r3, 0 - bl BlendPalette - movs r0, 0 - strh r0, [r6, 0xE] - movs r5, 0 - ldr r7, _080CE878 @ =gSprites - movs r1, 0x1C - adds r1, r7 - mov r9, r1 - b _080CE8B4 - .align 2, 0 -_080CE870: .4byte gTasks -_080CE874: .4byte 0x00002771 -_080CE878: .4byte gSprites -_080CE87C: .4byte gPlttBufferUnfaded -_080CE880: - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r4, r2, r7 - ldrb r1, [r6, 0xA] - lsls r1, 4 - ldrb r3, [r4, 0x5] - movs r0, 0xF - ands r0, r3 - orrs r0, r1 - strb r0, [r4, 0x5] - movs r0, 0 - strh r0, [r4, 0x2E] - lsls r0, r5, 7 - strh r0, [r4, 0x30] - mov r0, r8 - strh r0, [r4, 0x32] - add r2, r9 - ldr r0, _080CE8E4 @ =sub_80CE974 - str r0, [r2] - ldrh r0, [r6, 0xE] - adds r0, 0x1 - strh r0, [r6, 0xE] - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 -_080CE8B4: - cmp r5, 0x1 - bhi _080CE8C6 - movs r0, 0 - bl duplicate_obj_of_side_rel2move_in_transparent_mode - lsls r0, 16 - asrs r0, 16 - cmp r0, 0 - bge _080CE880 -_080CE8C6: - ldr r0, _080CE8E8 @ =sub_80CE910 - str r0, [r6] - ldr r0, _080CE8EC @ =gBattleAnimPlayerMonIndex - ldrb r0, [r0] - bl GetBankIdentity_permutated - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080CE8F4 - movs r2, 0x80 - lsls r2, 19 - ldrh r1, [r2] - ldr r0, _080CE8F0 @ =0x0000fdff - b _080CE8FC - .align 2, 0 -_080CE8E4: .4byte sub_80CE974 -_080CE8E8: .4byte sub_80CE910 -_080CE8EC: .4byte gBattleAnimPlayerMonIndex -_080CE8F0: .4byte 0x0000fdff -_080CE8F4: - movs r2, 0x80 - lsls r2, 19 - ldrh r1, [r2] - ldr r0, _080CE90C @ =0x0000fbff -_080CE8FC: - ands r0, r1 - strh r0, [r2] - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080CE90C: .4byte 0x0000fbff - thumb_func_end sub_80CE7E0 - - thumb_func_start sub_80CE910 -sub_80CE910: @ 80CE910 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r1, _080CE944 @ =gTasks - adds r0, r1 - movs r1, 0xE - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080CE968 - ldr r0, _080CE948 @ =gBattleAnimPlayerMonIndex - ldrb r0, [r0] - bl GetBankIdentity_permutated - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080CE94C - movs r0, 0x80 - lsls r0, 19 - ldrh r1, [r0] - movs r3, 0x80 - lsls r3, 2 - b _080CE956 - .align 2, 0 -_080CE944: .4byte gTasks -_080CE948: .4byte gBattleAnimPlayerMonIndex -_080CE94C: - movs r0, 0x80 - lsls r0, 19 - ldrh r1, [r0] - movs r3, 0x80 - lsls r3, 3 -_080CE956: - adds r2, r3, 0 - orrs r1, r2 - strh r1, [r0] - ldr r0, _080CE970 @ =0x00002771 - bl FreeSpritePaletteByTag - adds r0, r4, 0 - bl DestroyAnimVisualTask -_080CE968: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080CE970: .4byte 0x00002771 - thumb_func_end sub_80CE910 - - thumb_func_start sub_80CE974 -sub_80CE974: @ 80CE974 - push {r4,r5,lr} - adds r5, r0, 0 - ldrh r0, [r5, 0x34] - adds r0, 0x1 - strh r0, [r5, 0x34] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080CE990 - movs r0, 0 - strh r0, [r5, 0x34] - ldrh r0, [r5, 0x2E] - adds r0, 0x1 - strh r0, [r5, 0x2E] -_080CE990: - movs r1, 0x2E - ldrsh r0, [r5, r1] - cmp r0, 0x40 - ble _080CE9B8 - ldr r2, _080CE9B4 @ =gTasks - movs r0, 0x32 - ldrsh r1, [r5, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - ldrh r1, [r0, 0xE] - subs r1, 0x1 - strh r1, [r0, 0xE] - adds r0, r5, 0 - bl obj_delete_but_dont_free_vram - b _080CE9FA - .align 2, 0 -_080CE9B4: .4byte gTasks -_080CE9B8: - ldr r4, _080CEA00 @ =gSineTable - movs r1, 0x2E - ldrsh r0, [r5, r1] - lsls r0, 1 - adds r0, r4 - movs r2, 0 - ldrsh r0, [r0, r2] - movs r1, 0x6 - bl __divsi3 - strh r0, [r5, 0x36] - movs r1, 0x2E - ldrsh r0, [r5, r1] - lsls r0, 1 - adds r0, r4 - movs r2, 0 - ldrsh r0, [r0, r2] - movs r1, 0xD - bl __divsi3 - strh r0, [r5, 0x38] - ldrh r1, [r5, 0x30] - adds r1, r0 - movs r0, 0xFF - ands r1, r0 - strh r1, [r5, 0x30] - movs r1, 0x30 - ldrsh r0, [r5, r1] - movs r2, 0x36 - ldrsh r1, [r5, r2] - bl Sin - strh r0, [r5, 0x24] -_080CE9FA: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080CEA00: .4byte gSineTable - thumb_func_end sub_80CE974 - - thumb_func_start sub_80CEA04 -sub_80CEA04: @ 80CEA04 - push {r4,lr} - adds r4, r0, 0 - ldr r1, _080CEA18 @ =move_anim_8072740 - bl oamt_set_x3A_32 - ldr r0, _080CEA1C @ =sub_8078600 - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080CEA18: .4byte move_anim_8072740 -_080CEA1C: .4byte sub_8078600 - thumb_func_end sub_80CEA04 - - thumb_func_start sub_80CEA20 -sub_80CEA20: @ 80CEA20 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - ldr r4, _080CEAD0 @ =gUnknown_083D712C - ldrh r0, [r4] - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0xFF - beq _080CEA64 - lsls r0, r3, 20 - movs r1, 0x80 - lsls r1, 17 - adds r0, r1 - lsrs r3, r0, 16 - movs r2, 0x1 - ldr r5, _080CEAD4 @ =gPlttBufferFaded -_080CEA4C: - adds r1, r3, r2 - lsls r1, 1 - adds r1, r5 - lsls r0, r2, 1 - adds r0, r4 - ldrh r0, [r0] - strh r0, [r1] - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, 0x5 - bls _080CEA4C -_080CEA64: - movs r4, 0x1 - ldr r0, _080CEAD0 @ =gUnknown_083D712C - mov r8, r0 -_080CEA6A: - lsls r0, r4, 1 - adds r0, r4 - lsls r5, r0, 2 - mov r1, r8 - adds r0, r5, r1 - ldrh r0, [r0] - bl AllocSpritePalette - lsls r0, 24 - lsrs r3, r0, 24 - adds r4, 0x1 - mov r12, r4 - cmp r3, 0xFF - beq _080CEAB2 - lsls r0, r3, 20 - movs r1, 0x80 - lsls r1, 17 - adds r0, r1 - lsrs r3, r0, 16 - movs r2, 0x1 - ldr r7, _080CEAD4 @ =gPlttBufferFaded - ldr r6, _080CEAD0 @ =gUnknown_083D712C - adds r4, r5, 0 -_080CEA98: - adds r1, r3, r2 - lsls r1, 1 - adds r1, r7 - lsls r0, r2, 1 - adds r0, r4 - adds r0, r6 - ldrh r0, [r0] - strh r0, [r1] - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, 0x5 - bls _080CEA98 -_080CEAB2: - mov r1, r12 - lsls r0, r1, 16 - lsrs r4, r0, 16 - cmp r4, 0x3 - bls _080CEA6A - mov r0, r9 - bl DestroyAnimVisualTask - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080CEAD0: .4byte gUnknown_083D712C -_080CEAD4: .4byte gPlttBufferFaded - thumb_func_end sub_80CEA20 - - thumb_func_start sub_80CEAD8 -sub_80CEAD8: @ 80CEAD8 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - movs r4, 0x1 - ldr r6, _080CEB08 @ =gUnknown_083D712C -_080CEAE2: - lsls r0, r4, 1 - adds r0, r4 - lsls r0, 2 - adds r0, r6 - ldrh r0, [r0] - bl FreeSpritePaletteByTag - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x3 - bls _080CEAE2 - adds r0, r5, 0 - bl DestroyAnimVisualTask - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080CEB08: .4byte gUnknown_083D712C - thumb_func_end sub_80CEAD8 - thumb_func_start sub_80CEB0C sub_80CEB0C: @ 80CEB0C push {r4-r6,lr} diff --git a/src/battle_anim_80CA710.c b/src/battle_anim_80CA710.c index 0146a551d..7b54b9e7c 100755 --- a/src/battle_anim_80CA710.c +++ b/src/battle_anim_80CA710.c @@ -20,6 +20,8 @@ extern u8 gBattleAnimPlayerMonIndex; extern u8 gBattleAnimEnemyMonIndex; extern struct SpriteTemplate gSpriteTemplate_83D631C; extern struct SpriteTemplate gSpriteTemplate_83D6884; +extern struct SpriteTemplate gBattleAnimSpriteTemplate_83D6FC8; +extern struct SpriteTemplate gBattleAnimSpriteTemplate_83D6FF8; extern s16 gUnknown_03000728[]; extern s8 gUnknown_083D680C[11][3]; extern u16 gUnknown_083D6984[]; @@ -27,6 +29,7 @@ extern s8 gUnknown_083D6DDC[4][2]; extern u8 gObjectBankIDs[]; extern u8 gNoOfAllBanks; extern u8 gHealthboxIDs[]; +extern u16 gUnknown_083D712C[4][6]; void sub_80CA768(struct Sprite* sprite); void sub_80CA8B4(struct Sprite* sprite); @@ -79,6 +82,8 @@ void sub_80CE000(struct Sprite* sprite); void sub_80CE1AC(struct Sprite* sprite); void sub_80CE354(struct Sprite* sprite); void sub_80CE3B0(struct Sprite* sprite); +void sub_80CE798(struct Sprite* sprite); +void sub_80CE974(struct Sprite* sprite); s16 sub_80CC338(struct Sprite* sprite); @@ -108,6 +113,8 @@ void sub_807867C(struct Sprite *sprite, s16 a2); u8 sub_8077EE4(u8 slot, u8 a2); u32 sub_80791A8(u8 a1, u8 a2, u8 a3, u8 a4, u8 a5, u8 a6, u8 a7); u32 sub_80792C0(u8 a1, u8 a2, u8 a3, u8 a4); +s16 duplicate_obj_of_side_rel2move_in_transparent_mode(u8 a1); +void obj_delete_but_dont_free_vram(struct Sprite *sprite); void move_anim_8074EE0(struct Sprite *sprite); bool8 sub_8078718(struct Sprite *sprite); @@ -119,6 +126,7 @@ void sub_80CBF5C(u8 taskId); void sub_80CDB60(u8 taskId); void sub_80CDD20(u8 taskId); void sub_80CE4D4(u8 taskId); +void sub_80CE910(u8 taskId); void sub_80CC358(struct Task* task, u8 taskId); @@ -3216,5 +3224,350 @@ void sub_80CE3EC(u8 taskId) BeginNormalPaletteFade((0x10000 << d) | b, 0, 0, 0x10, 32699); gTasks[taskId].func = sub_80CE4D4; sub_80CE4D4(taskId); - +} + +void sub_80CE4D4(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + switch (task->data[0]) + { + case 0: + if (++task->data[1] > 0) + { + u16 color; + u16 bitmask; + u16 r3; + u16 i; + u16 j; + task->data[1] = 0; + if (++task->data[2] <= 15) + { + u16 red; + u16 green; + u16 blue; + task->data[4] += task->data[7]; + task->data[5] += task->data[8]; + task->data[6] += task->data[9]; + red = task->data[4] >> 3; + green = task->data[5] >> 3; + blue = task->data[6] >> 3; + color = RGB(red, green, blue); + } + else + { + color = RGB(27, 29, 31); + task->data[0]++; + } + bitmask = 1; + r3 = 0; + for (i = 0; i <= 15; i++) + { + if (task->data[3] & bitmask) + { + for (j = 1; j <= 15; j++) + gPlttBufferFaded[r3 + j] = color; + } + bitmask <<= 1; + r3 += 16; + } + } + break; + case 1: + if (!gPaletteFade.active) + { + u8 spriteId; + for (spriteId = 0; spriteId < MAX_SPRITES; spriteId++) + { + if (gSprites[spriteId].template == &gBattleAnimSpriteTemplate_83D6FC8 || gSprites[spriteId].template == &gBattleAnimSpriteTemplate_83D6FF8) + gSprites[spriteId].data0 = 1; + } + task->data[1] = 0; + task->data[0]++; + } + break; + case 2: + if (++task->data[1] > 30) + { + BeginNormalPaletteFade((u32)sub_8079BFC(task->data[14], task->data[15]), 0, 16, 0, RGB(27, 29, 31)); + task->data[0]++; + } + break; + case 3: + if (!gPaletteFade.active) + DestroyAnimVisualTask(taskId); + break; + } +} + +void sub_80CE670(struct Sprite* sprite) +{ + if (gBattleAnimArgs[2] <= 1) + gBattleAnimArgs[2] = 2; + if (gBattleAnimArgs[2] > 0x7F) + gBattleAnimArgs[2] = 0x7F; + sprite->data0 = 0; + sprite->data1 = gBattleAnimArgs[2]; + sprite->pos1.x = sub_8077ABC(gBattleAnimEnemyMonIndex, 2) + gBattleAnimArgs[0]; + sprite->pos1.y = sub_8077ABC(gBattleAnimEnemyMonIndex, 3) + gBattleAnimArgs[1]; + sprite->data6 = sprite->pos1.x; + sprite->data7 = sprite->pos1.y; + if (IsContest() != 0) + { + sprite->oam.matrixNum = 8; + sprite->pos1.x += 40; + sprite->pos1.y += 20; + sprite->data2 = sprite->pos1.x << 7; + sprite->data3 = -0x1400 / sprite->data1; + sprite->data4 = sprite->pos1.y << 7; + sprite->data5 = -0xA00 / sprite->data1; + } + else if (GetBankSide(gBattleAnimPlayerMonIndex) == 0) + { + sprite->pos1.x -= 40; + sprite->pos1.y += 20; + sprite->data2 = sprite->pos1.x << 7; + sprite->data3 = 0x1400 / sprite->data1; + sprite->data4 = sprite->pos1.y << 7; + sprite->data5 = -0xA00 / sprite->data1; + } + else + { + sprite->pos1.x += 40; + sprite->pos1.y -= 20; + sprite->data2 = sprite->pos1.x << 7; + sprite->data3 = -0x1400 / sprite->data1; + sprite->data4 = sprite->pos1.y << 7; + sprite->data5 = 0xA00 / sprite->data1; + sprite->oam.matrixNum = 24; + } + sprite->callback = sub_80CE798; +} + +void sub_80CE798(struct Sprite* sprite) +{ + sprite->data2 += sprite->data3; + sprite->data4 += sprite->data5; + sprite->pos1.x = sprite->data2 >> 7; + sprite->pos1.y = sprite->data4 >> 7; + if (--sprite->data1 == 1) + { + sprite->pos1.x = sprite->data6; + sprite->pos1.y = sprite->data7; + } + if (sprite->data1 == 0) + move_anim_8072740(sprite); +} + +// double team +void sub_80CE7E0(u8 taskId) +{ + u16 i; + int obj; + u16 r3; + u16 r4; + struct Task* task = &gTasks[taskId]; + task->data[0] = obj_id_for_side_relative_to_move(0); + task->data[1] = AllocSpritePalette(0x2771); + r3 = (task->data[1] * 16) + 0x100; + r4 = (gSprites[task->data[0]].oam.paletteNum + 16) << 4; + for (i = 1; i < 16; i++) + { + gPlttBufferUnfaded[r3 + i] = gPlttBufferUnfaded[r4 + i]; + } + BlendPalette(r3, 16, 11, 0); + task->data[3] = 0; + i = 0; + while (i <= 1 && (obj = duplicate_obj_of_side_rel2move_in_transparent_mode(0)) >= 0) + { + gSprites[obj].oam.paletteNum = task->data[1]; + gSprites[obj].data0 = 0; + gSprites[obj].data1 = i << 7; + gSprites[obj].data2 = taskId; + gSprites[obj].callback = sub_80CE974; + task->data[3]++; + i++; + } + task->func = sub_80CE910; + if (GetBankIdentity_permutated(gBattleAnimPlayerMonIndex) == 1) + { + REG_DISPCNT &= 0xFDFF; + } + else + REG_DISPCNT &= 0xFBFF; +} + +void sub_80CE910(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + if (!task->data[3]) + { + if (GetBankIdentity_permutated(gBattleAnimPlayerMonIndex) == 1) + REG_DISPCNT |= 0x200; + else + REG_DISPCNT |= 0x400; + FreeSpritePaletteByTag(0x2771); + DestroyAnimVisualTask(taskId); + } +} + +void sub_80CE974(struct Sprite* sprite) +{ + if (++sprite->data3 > 1) + { + sprite->data3 = 0; + sprite->data0++; + } + if (sprite->data0 > 0x40) + { + gTasks[sprite->data2].data[3]--; + obj_delete_but_dont_free_vram(sprite); + } + else + { + sprite->data4 = gSineTable[sprite->data0] / 6; + sprite->data5 = gSineTable[sprite->data0] / 13; + sprite->data1 = (sprite->data1 + sprite->data5) & 0xFF; + sprite->pos2.x = Sin(sprite->data1, sprite->data4); + } +} + +void sub_80CEA04(struct Sprite* sprite) +{ + oamt_set_x3A_32(sprite, move_anim_8072740); + sprite->callback = sub_8078600; +} + +// grasswhistle +#ifdef NONMATCHING +void sub_80CEA20(u8 taskId) +{ + u16 i; + u16 j; + u16 a; + u16 index; + if ((index = IndexOfSpritePaletteTag(gUnknown_083D712C[0][0])) != 0xFF) + { + index = (index << 4) + 0x100; + for (i = 1; i < 6; i++) + gPlttBufferFaded[index + i] = gUnknown_083D712C[0][i]; + } + for (i = 1; i < 4; i++) + { + a = AllocSpritePalette(gUnknown_083D712C[i][0]); + if (a != 0xFF) + { + a = (a << 4) + 0x100; + for (j = 1; j < 6; j++) + gPlttBufferFaded[a + j] = gUnknown_083D712C[i][j]; + } + } + DestroyAnimVisualTask(taskId); +} +#else +__attribute__((naked)) +void sub_80CEA20(u8 taskId) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r9\n\ + mov r6, r8\n\ + push {r6,r7}\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r9, r0\n\ + ldr r4, _080CEAD0 @ =gUnknown_083D712C\n\ + ldrh r0, [r4]\n\ + bl IndexOfSpritePaletteTag\n\ + lsls r0, 24\n\ + lsrs r3, r0, 24\n\ + cmp r3, 0xFF\n\ + beq _080CEA64\n\ + lsls r0, r3, 20\n\ + movs r1, 0x80\n\ + lsls r1, 17\n\ + adds r0, r1\n\ + lsrs r3, r0, 16\n\ + movs r2, 0x1\n\ + ldr r5, _080CEAD4 @ =gPlttBufferFaded\n\ +_080CEA4C:\n\ + adds r1, r3, r2\n\ + lsls r1, 1\n\ + adds r1, r5\n\ + lsls r0, r2, 1\n\ + adds r0, r4\n\ + ldrh r0, [r0]\n\ + strh r0, [r1]\n\ + adds r0, r2, 0x1\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + cmp r2, 0x5\n\ + bls _080CEA4C\n\ +_080CEA64:\n\ + movs r4, 0x1\n\ + ldr r0, _080CEAD0 @ =gUnknown_083D712C\n\ + mov r8, r0\n\ +_080CEA6A:\n\ + lsls r0, r4, 1\n\ + adds r0, r4\n\ + lsls r5, r0, 2\n\ + mov r1, r8\n\ + adds r0, r5, r1\n\ + ldrh r0, [r0]\n\ + bl AllocSpritePalette\n\ + lsls r0, 24\n\ + lsrs r3, r0, 24\n\ + adds r4, 0x1\n\ + mov r12, r4\n\ + cmp r3, 0xFF\n\ + beq _080CEAB2\n\ + lsls r0, r3, 20\n\ + movs r1, 0x80\n\ + lsls r1, 17\n\ + adds r0, r1\n\ + lsrs r3, r0, 16\n\ + movs r2, 0x1\n\ + ldr r7, _080CEAD4 @ =gPlttBufferFaded\n\ + ldr r6, _080CEAD0 @ =gUnknown_083D712C\n\ + adds r4, r5, 0\n\ +_080CEA98:\n\ + adds r1, r3, r2\n\ + lsls r1, 1\n\ + adds r1, r7\n\ + lsls r0, r2, 1\n\ + adds r0, r4\n\ + adds r0, r6\n\ + ldrh r0, [r0]\n\ + strh r0, [r1]\n\ + adds r0, r2, 0x1\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + cmp r2, 0x5\n\ + bls _080CEA98\n\ +_080CEAB2:\n\ + mov r1, r12\n\ + lsls r0, r1, 16\n\ + lsrs r4, r0, 16\n\ + cmp r4, 0x3\n\ + bls _080CEA6A\n\ + mov r0, r9\n\ + bl DestroyAnimVisualTask\n\ + pop {r3,r4}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080CEAD0: .4byte gUnknown_083D712C\n\ +_080CEAD4: .4byte gPlttBufferFaded\n\ +.syntax divided\n"); +} +#endif + +void sub_80CEAD8(u8 taskId) +{ + u16 i; + for (i = 1; i < 4; i++) + FreeSpritePaletteByTag(gUnknown_083D712C[i][0]); + DestroyAnimVisualTask(taskId); }
\ No newline at end of file |