diff options
-rw-r--r-- | asm/battle_anim_813F0F4.s | 1299 | ||||
-rw-r--r-- | include/battle.h | 1 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rwxr-xr-x | src/battle/battle_anim_813F0F4.c | 369 |
4 files changed, 371 insertions, 1299 deletions
diff --git a/asm/battle_anim_813F0F4.s b/asm/battle_anim_813F0F4.s index df39aef31..595b319fb 100644 --- a/asm/battle_anim_813F0F4.s +++ b/asm/battle_anim_813F0F4.s @@ -5,1305 +5,6 @@ .text - thumb_func_start unref_sub_813F0F4 -unref_sub_813F0F4: @ 813F0F4 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x1C - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x10] - ldr r0, _0813F2AC @ =gAnimBankAttacker - ldrb r3, [r0] - ldr r0, _0813F2B0 @ =gBattle_WIN0H - movs r1, 0 - strh r1, [r0] - ldr r0, _0813F2B4 @ =gBattle_WIN0V - strh r1, [r0] - ldr r1, _0813F2B8 @ =REG_WININ - ldr r2, _0813F2BC @ =0x00003f3f - adds r0, r2, 0 - strh r0, [r1] - adds r1, 0x2 - ldr r4, _0813F2C0 @ =0x00003f3d - adds r0, r4, 0 - strh r0, [r1] - movs r2, 0x80 - lsls r2, 19 - ldrh r0, [r2] - movs r4, 0x80 - lsls r4, 8 - adds r1, r4, 0 - orrs r0, r1 - strh r0, [r2] - ldr r1, _0813F2C4 @ =REG_BLDCNT - ldr r2, _0813F2C8 @ =0x00003f42 - adds r0, r2, 0 - strh r0, [r1] - adds r1, 0x2 - movs r4, 0x80 - lsls r4, 5 - adds r0, r4, 0 - strh r0, [r1] - ldr r2, _0813F2CC @ =REG_BG1CNT - ldrb r1, [r2] - movs r0, 0x4 - negs r0, r0 - ands r0, r1 - strb r0, [r2] - ldrb r1, [r2, 0x1] - movs r0, 0x3F - ands r0, r1 - strb r0, [r2, 0x1] - ldrb r0, [r2, 0x1] - movs r1, 0x20 - orrs r0, r1 - strb r0, [r2, 0x1] - ldrb r1, [r2] - movs r0, 0xD - negs r0, r0 - mov r9, r0 - ands r0, r1 - movs r1, 0x4 - mov r8, r1 - mov r4, r8 - orrs r0, r4 - strb r0, [r2] - ldr r0, _0813F2D0 @ =gHealthboxIDs - adds r3, r0 - ldrb r0, [r3] - ldr r1, _0813F2D4 @ =gSprites - mov r10, r1 - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - add r4, r10 - ldrb r7, [r4, 0x6] - ldrh r6, [r4, 0x38] - lsls r6, 24 - lsrs r6, 24 - ldr r0, _0813F2D8 @ =SpriteCallbackDummy - bl CreateInvisibleSpriteWithCallback - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x14] - ldr r0, _0813F2D8 @ =SpriteCallbackDummy - bl CreateInvisibleSpriteWithCallback - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x18] - ldrb r1, [r4, 0x5] - mov r0, r9 - ands r0, r1 - mov r2, r8 - orrs r0, r2 - strb r0, [r4, 0x5] - lsls r5, r7, 4 - adds r5, r7 - lsls r5, 2 - add r5, r10 - ldrb r1, [r5, 0x5] - mov r0, r9 - ands r0, r1 - orrs r0, r2 - strb r0, [r5, 0x5] - lsls r1, r6, 4 - adds r1, r6 - lsls r1, 2 - add r1, r10 - ldrb r2, [r1, 0x5] - mov r0, r9 - ands r0, r2 - mov r2, r8 - orrs r0, r2 - strb r0, [r1, 0x5] - ldr r0, [sp, 0x14] - lsls r6, r0, 4 - adds r6, r0 - lsls r6, 2 - mov r1, r10 - adds r7, r6, r1 - adds r0, r7, 0 - adds r1, r4, 0 - movs r2, 0x44 - bl memcpy - ldr r2, [sp, 0x18] - lsls r4, r2, 4 - adds r4, r2 - lsls r4, 2 - adds r0, r4, 0 - add r0, r10 - mov r8, r0 - adds r1, r5, 0 - movs r2, 0x44 - bl memcpy - ldrb r1, [r7, 0x1] - mov r0, r9 - ands r0, r1 - movs r1, 0x8 - orrs r0, r1 - strb r0, [r7, 0x1] - mov r2, r8 - ldrb r0, [r2, 0x1] - mov r2, r9 - ands r2, r0 - orrs r2, r1 - mov r0, r8 - strb r2, [r0, 0x1] - movs r1, 0x1C - add r10, r1 - add r6, r10 - ldr r2, _0813F2D8 @ =SpriteCallbackDummy - str r2, [r6] - add r4, r10 - str r2, [r4] - mov r0, sp - bl sub_8078914 - ldr r1, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0xC] - ldr r2, _0813F2DC @ =0x040000d4 - add r0, sp, 0xC - str r0, [r2] - str r1, [r2, 0x4] - ldr r0, _0813F2E0 @ =0x85000400 - str r0, [r2, 0x8] - ldr r0, [r2, 0x8] - ldr r0, _0813F2E4 @ =gUnknown_08D2EE48 - bl LZDecompressVram - ldr r0, _0813F2E8 @ =gUnknown_08D2EDFC - ldr r1, [sp] - bl LZDecompressVram - ldr r0, _0813F2EC @ =gUnknown_08D2E150 - mov r1, sp - ldrb r1, [r1, 0x8] - lsls r1, 4 - movs r2, 0x20 - bl LoadCompressedPalette - ldr r1, _0813F2F0 @ =gBattle_BG1_X - ldrh r0, [r7, 0x20] - negs r0, r0 - adds r0, 0x20 - strh r0, [r1] - ldr r1, _0813F2F4 @ =gBattle_BG1_Y - ldrh r0, [r7, 0x22] - negs r0, r0 - subs r0, 0x20 - strh r0, [r1] - ldr r1, _0813F2F8 @ =gTasks - ldr r4, [sp, 0x10] - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - movs r1, 0xA0 - lsls r1, 2 - strh r1, [r0, 0xA] - mov r1, sp - ldrh r1, [r1, 0x14] - strh r1, [r0, 0x8] - mov r2, sp - ldrh r2, [r2, 0x18] - strh r2, [r0, 0xC] - ldr r1, _0813F2FC @ =sub_813F300 - str r1, [r0] - add sp, 0x1C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0813F2AC: .4byte gAnimBankAttacker -_0813F2B0: .4byte gBattle_WIN0H -_0813F2B4: .4byte gBattle_WIN0V -_0813F2B8: .4byte REG_WININ -_0813F2BC: .4byte 0x00003f3f -_0813F2C0: .4byte 0x00003f3d -_0813F2C4: .4byte REG_BLDCNT -_0813F2C8: .4byte 0x00003f42 -_0813F2CC: .4byte REG_BG1CNT -_0813F2D0: .4byte gHealthboxIDs -_0813F2D4: .4byte gSprites -_0813F2D8: .4byte SpriteCallbackDummy -_0813F2DC: .4byte 0x040000d4 -_0813F2E0: .4byte 0x85000400 -_0813F2E4: .4byte gUnknown_08D2EE48 -_0813F2E8: .4byte gUnknown_08D2EDFC -_0813F2EC: .4byte gUnknown_08D2E150 -_0813F2F0: .4byte gBattle_BG1_X -_0813F2F4: .4byte gBattle_BG1_Y -_0813F2F8: .4byte gTasks -_0813F2FC: .4byte sub_813F300 - thumb_func_end unref_sub_813F0F4 - - thumb_func_start sub_813F300 -sub_813F300: @ 813F300 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x10 - lsls r0, 24 - lsrs r7, r0, 24 - ldr r0, _0813F34C @ =gAnimBankAttacker - ldrb r0, [r0] - mov r9, r0 - ldr r1, _0813F350 @ =gTasks - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - adds r4, r0, r1 - ldrh r1, [r4, 0xA] - ldrh r0, [r4, 0x22] - adds r1, r0 - movs r3, 0 - strh r1, [r4, 0x22] - ldr r2, _0813F354 @ =gBattle_BG1_Y - lsls r0, r1, 16 - lsrs r0, 24 - ldrh r5, [r2] - adds r0, r5 - strh r0, [r2] - movs r0, 0xFF - ands r1, r0 - strh r1, [r4, 0x22] - movs r1, 0x26 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _0813F394 - cmp r0, 0x1 - bgt _0813F358 - cmp r0, 0 - beq _0813F35E - b _0813F4B2 - .align 2, 0 -_0813F34C: .4byte gAnimBankAttacker -_0813F350: .4byte gTasks -_0813F354: .4byte gBattle_BG1_Y -_0813F358: - cmp r0, 0x2 - beq _0813F3AC - b _0813F4B2 -_0813F35E: - ldrh r0, [r4, 0x1E] - adds r1, r0, 0x1 - strh r1, [r4, 0x1E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - bgt _0813F36E - b _0813F4B2 -_0813F36E: - strh r3, [r4, 0x1E] - ldrh r1, [r4, 0x20] - adds r1, 0x1 - strh r1, [r4, 0x20] - ldr r2, _0813F390 @ =REG_BLDALPHA - movs r0, 0x10 - subs r0, r1 - lsls r0, 8 - orrs r1, r0 - strh r1, [r2] - movs r2, 0x20 - ldrsh r0, [r4, r2] - cmp r0, 0x8 - beq _0813F38C - b _0813F4B2 -_0813F38C: - b _0813F3A4 - .align 2, 0 -_0813F390: .4byte REG_BLDALPHA -_0813F394: - ldrh r0, [r4, 0x1C] - adds r0, 0x1 - strh r0, [r4, 0x1C] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1E - beq _0813F3A4 - b _0813F4B2 -_0813F3A4: - ldrh r0, [r4, 0x26] - adds r0, 0x1 - strh r0, [r4, 0x26] - b _0813F4B2 -_0813F3AC: - ldrh r0, [r4, 0x1E] - adds r1, r0, 0x1 - strh r1, [r4, 0x1E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _0813F4B2 - strh r3, [r4, 0x1E] - ldrh r1, [r4, 0x20] - subs r1, 0x1 - strh r1, [r4, 0x20] - ldr r6, _0813F4C0 @ =REG_BLDALPHA - movs r0, 0x10 - subs r0, r1 - lsls r0, 8 - orrs r1, r0 - strh r1, [r6] - movs r3, 0x20 - ldrsh r5, [r4, r3] - cmp r5, 0 - bne _0813F4B2 - movs r0, 0 - bl sub_8076464 - ldr r0, _0813F4C4 @ =gBattle_WIN0H - strh r5, [r0] - ldr r0, _0813F4C8 @ =gBattle_WIN0V - strh r5, [r0] - ldr r0, _0813F4CC @ =REG_WININ - ldr r2, _0813F4D0 @ =0x00003f3f - adds r1, r2, 0 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _0813F406 - ldr r2, _0813F4D4 @ =REG_BG1CNT - ldrb r1, [r2] - movs r0, 0xD - negs r0, r0 - ands r0, r1 - strb r0, [r2] -_0813F406: - movs r2, 0x80 - lsls r2, 19 - ldrh r0, [r2] - movs r3, 0x80 - lsls r3, 8 - adds r1, r3, 0 - eors r0, r1 - strh r0, [r2] - ldr r0, _0813F4D8 @ =REG_BLDCNT - strh r5, [r0] - strh r5, [r6] - movs r0, 0x8 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0813F4DC @ =gSprites - mov r8, r1 - add r0, r8 - bl DestroySprite - movs r2, 0xC - ldrsh r1, [r4, r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - add r0, r8 - bl DestroySprite - mov r0, sp - bl sub_8078914 - ldr r2, [sp, 0x4] - str r5, [sp, 0xC] - ldr r1, _0813F4E0 @ =0x040000d4 - add r0, sp, 0xC - str r0, [r1] - str r2, [r1, 0x4] - ldr r0, _0813F4E4 @ =0x85000200 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - ldr r2, _0813F4D4 @ =REG_BG1CNT - ldrb r1, [r2, 0x1] - movs r0, 0x21 - negs r0, r0 - ands r0, r1 - strb r0, [r2, 0x1] - ldr r0, _0813F4E8 @ =gHealthboxIDs - add r0, r9 - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - add r1, r8 - ldrb r6, [r1, 0x6] - ldrh r4, [r1, 0x38] - lsls r4, 24 - lsrs r4, 24 - ldrb r3, [r1, 0x5] - movs r2, 0xD - negs r2, r2 - adds r0, r2, 0 - ands r0, r3 - movs r5, 0x4 - orrs r0, r5 - strb r0, [r1, 0x5] - lsls r1, r6, 4 - adds r1, r6 - lsls r1, 2 - add r1, r8 - ldrb r3, [r1, 0x5] - adds r0, r2, 0 - ands r0, r3 - orrs r0, r5 - strb r0, [r1, 0x5] - lsls r0, r4, 4 - adds r0, r4 - lsls r0, 2 - add r0, r8 - ldrb r1, [r0, 0x5] - ands r2, r1 - orrs r2, r5 - strb r2, [r0, 0x5] - adds r0, r7, 0 - bl DestroyAnimVisualTask -_0813F4B2: - add sp, 0x10 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0813F4C0: .4byte REG_BLDALPHA -_0813F4C4: .4byte gBattle_WIN0H -_0813F4C8: .4byte gBattle_WIN0V -_0813F4CC: .4byte REG_WININ -_0813F4D0: .4byte 0x00003f3f -_0813F4D4: .4byte REG_BG1CNT -_0813F4D8: .4byte REG_BLDCNT -_0813F4DC: .4byte gSprites -_0813F4E0: .4byte 0x040000d4 -_0813F4E4: .4byte 0x85000200 -_0813F4E8: .4byte gHealthboxIDs - thumb_func_end sub_813F300 - - thumb_func_start sub_813F4EC -sub_813F4EC: @ 813F4EC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - lsls r0, 24 - lsrs r0, 24 - str r0, [sp] - ldr r1, _0813F5D0 @ =gHealthboxIDs - ldr r0, _0813F5D4 @ =gAnimBankAttacker - ldrb r0, [r0] - adds r0, r1 - ldrb r0, [r0] - ldr r7, _0813F5D8 @ =gSprites - lsls r6, r0, 4 - adds r6, r0 - lsls r6, 2 - adds r6, r7 - ldrb r0, [r6, 0x6] - str r0, [sp, 0x4] - ldrh r4, [r6, 0x38] - lsls r4, 24 - lsrs r4, 24 - ldr r0, _0813F5DC @ =0x0000d709 - bl AllocSpritePalette - mov r8, r0 - mov r1, r8 - lsls r1, 24 - lsrs r1, 24 - mov r8, r1 - ldr r0, _0813F5E0 @ =0x0000d70a - bl AllocSpritePalette - mov r9, r0 - mov r2, r9 - lsls r2, 24 - lsrs r2, 24 - mov r9, r2 - ldrb r0, [r6, 0x5] - lsrs r0, 4 - lsls r0, 4 - movs r1, 0x80 - lsls r1, 1 - adds r3, r1, 0 - orrs r0, r3 - lsls r5, r4, 4 - adds r5, r4 - lsls r5, 2 - adds r5, r7 - ldrb r4, [r5, 0x5] - lsrs r4, 4 - lsls r4, 4 - orrs r4, r3 - lsls r0, 1 - ldr r2, _0813F5E4 @ =gPlttBufferUnfaded - mov r10, r2 - add r0, r10 - mov r1, r8 - lsls r1, 4 - mov r8, r1 - adds r1, r3, r1 - movs r2, 0x20 - str r3, [sp, 0x8] - bl LoadPalette - lsls r4, 1 - add r4, r10 - mov r2, r9 - lsls r2, 4 - mov r9, r2 - ldr r3, [sp, 0x8] - add r3, r9 - adds r0, r4, 0 - adds r1, r3, 0 - movs r2, 0x20 - bl LoadPalette - ldrb r1, [r6, 0x5] - movs r2, 0xF - adds r0, r2, 0 - ands r0, r1 - mov r3, r8 - orrs r0, r3 - strb r0, [r6, 0x5] - ldr r0, [sp, 0x4] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r7 - ldrb r3, [r1, 0x5] - adds r0, r2, 0 - ands r0, r3 - mov r3, r8 - orrs r0, r3 - strb r0, [r1, 0x5] - ldrb r0, [r5, 0x5] - ands r2, r0 - mov r0, r9 - orrs r2, r0 - strb r2, [r5, 0x5] - ldr r0, [sp] - bl DestroyAnimVisualTask - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0813F5D0: .4byte gHealthboxIDs -_0813F5D4: .4byte gAnimBankAttacker -_0813F5D8: .4byte gSprites -_0813F5DC: .4byte 0x0000d709 -_0813F5E0: .4byte 0x0000d70a -_0813F5E4: .4byte gPlttBufferUnfaded - thumb_func_end sub_813F4EC - - thumb_func_start sub_813F5E8 -sub_813F5E8: @ 813F5E8 - push {r4-r6,lr} - mov r6, r10 - mov r5, r9 - mov r4, r8 - push {r4-r6} - mov r8, r0 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldr r1, _0813F684 @ =gHealthboxIDs - ldr r0, _0813F688 @ =gAnimBankAttacker - ldrb r0, [r0] - adds r0, r1 - ldrb r0, [r0] - ldr r1, _0813F68C @ =gSprites - mov r9, r1 - lsls r5, r0, 4 - adds r5, r0 - lsls r5, 2 - add r5, r9 - ldrb r0, [r5, 0x6] - mov r10, r0 - ldrh r6, [r5, 0x38] - lsls r6, 24 - lsrs r6, 24 - ldr r0, _0813F690 @ =0x0000d709 - bl FreeSpritePaletteByTag - ldr r0, _0813F694 @ =0x0000d70a - bl FreeSpritePaletteByTag - ldr r0, _0813F698 @ =0x0000d6ff - bl IndexOfSpritePaletteTag - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _0813F69C @ =0x0000d704 - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsls r4, 4 - ldrb r2, [r5, 0x5] - movs r3, 0xF - adds r1, r3, 0 - ands r1, r2 - orrs r1, r4 - strb r1, [r5, 0x5] - mov r1, r10 - lsls r2, r1, 4 - add r2, r10 - lsls r2, 2 - add r2, r9 - ldrb r5, [r2, 0x5] - adds r1, r3, 0 - ands r1, r5 - orrs r1, r4 - strb r1, [r2, 0x5] - lsls r1, r6, 4 - adds r1, r6 - lsls r1, 2 - add r1, r9 - lsrs r0, 20 - ldrb r2, [r1, 0x5] - ands r3, r2 - orrs r3, r0 - strb r3, [r1, 0x5] - mov r0, r8 - bl DestroyAnimVisualTask - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0813F684: .4byte gHealthboxIDs -_0813F688: .4byte gAnimBankAttacker -_0813F68C: .4byte gSprites -_0813F690: .4byte 0x0000d709 -_0813F694: .4byte 0x0000d70a -_0813F698: .4byte 0x0000d6ff -_0813F69C: .4byte 0x0000d704 - thumb_func_end sub_813F5E8 - - thumb_func_start sub_813F6A0 -sub_813F6A0: @ 813F6A0 - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0813F6C0 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldr r2, _0813F6C4 @ =gBattleAnimArgs - ldrh r0, [r2] - strh r0, [r1, 0x1C] - ldrh r0, [r2, 0x2] - strh r0, [r1, 0x1E] - ldr r0, _0813F6C8 @ =sub_813F6CC - str r0, [r1] - bx lr - .align 2, 0 -_0813F6C0: .4byte gTasks -_0813F6C4: .4byte gBattleAnimArgs -_0813F6C8: .4byte sub_813F6CC - thumb_func_end sub_813F6A0 - - thumb_func_start sub_813F6CC -sub_813F6CC: @ 813F6CC - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _0813F718 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r4, r0, r1 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - movs r6, 0 - adds r1, r0, 0x1 - strh r1, [r4, 0x8] - lsls r0, 16 - asrs r0, 16 - movs r2, 0x1E - ldrsh r1, [r4, r2] - cmp r0, r1 - blt _0813F78C - strh r6, [r4, 0x8] - ldr r0, _0813F71C @ =0x0000d709 - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r2, r0, 24 - movs r3, 0x1C - ldrsh r0, [r4, r3] - movs r1, 0x2 - cmp r0, 0 - bne _0813F70A - movs r1, 0x6 -_0813F70A: - movs r3, 0xA - ldrsh r0, [r4, r3] - cmp r0, 0 - beq _0813F720 - cmp r0, 0x1 - beq _0813F75C - b _0813F78C - .align 2, 0 -_0813F718: .4byte gTasks -_0813F71C: .4byte 0x0000d709 -_0813F720: - ldrh r0, [r4, 0xC] - adds r0, 0x2 - strh r0, [r4, 0xC] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x10 - ble _0813F732 - movs r0, 0x10 - strh r0, [r4, 0xC] -_0813F732: - lsls r0, r2, 4 - movs r2, 0x80 - lsls r2, 1 - adds r0, r2 - orrs r0, r1 - ldrb r2, [r4, 0xC] - ldr r3, _0813F758 @ =0x00007f74 - movs r1, 0x1 - bl BlendPalette - movs r3, 0xC - ldrsh r0, [r4, r3] - cmp r0, 0x10 - bne _0813F78C - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - b _0813F78C - .align 2, 0 -_0813F758: .4byte 0x00007f74 -_0813F75C: - ldrh r0, [r4, 0xC] - subs r0, 0x2 - strh r0, [r4, 0xC] - lsls r0, 16 - cmp r0, 0 - bge _0813F76A - strh r6, [r4, 0xC] -_0813F76A: - lsls r0, r2, 4 - movs r2, 0x80 - lsls r2, 1 - adds r0, r2 - orrs r0, r1 - ldrb r2, [r4, 0xC] - ldr r3, _0813F794 @ =0x00007f74 - movs r1, 0x1 - bl BlendPalette - movs r3, 0xC - ldrsh r0, [r4, r3] - cmp r0, 0 - bne _0813F78C - adds r0, r5, 0 - bl DestroyAnimVisualTask -_0813F78C: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0813F794: .4byte 0x00007f74 - thumb_func_end sub_813F6CC - - thumb_func_start sub_813F798 -sub_813F798: @ 813F798 - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - ldr r1, _0813F7C4 @ =gBankSpriteIds - ldr r0, _0813F7C8 @ =gAnimBankAttacker - ldrb r0, [r0] - adds r0, r1 - ldrb r5, [r0] - ldr r1, _0813F7CC @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r4, r0, r1 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _0813F7E6 - cmp r0, 0x1 - bgt _0813F7D0 - cmp r0, 0 - beq _0813F7D6 - b _0813F838 - .align 2, 0 -_0813F7C4: .4byte gBankSpriteIds -_0813F7C8: .4byte gAnimBankAttacker -_0813F7CC: .4byte gTasks -_0813F7D0: - cmp r0, 0x2 - beq _0813F818 - b _0813F838 -_0813F7D6: - adds r0, r5, 0 - movs r1, 0 - bl sub_8078E70 - movs r0, 0x80 - lsls r0, 1 - strh r0, [r4, 0x1C] - b _0813F80A -_0813F7E6: - ldrh r0, [r4, 0x1C] - adds r0, 0x30 - strh r0, [r4, 0x1C] - movs r0, 0x1C - ldrsh r2, [r4, r0] - adds r0, r5, 0 - adds r1, r2, 0 - movs r3, 0 - bl obj_id_set_rotscale - adds r0, r5, 0 - bl sub_8079A64 - movs r0, 0x1C - ldrsh r1, [r4, r0] - ldr r0, _0813F814 @ =0x000002cf - cmp r1, r0 - ble _0813F838 -_0813F80A: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _0813F838 - .align 2, 0 -_0813F814: .4byte 0x000002cf -_0813F818: - adds r0, r5, 0 - bl sub_8078F40 - ldr r1, _0813F840 @ =gSprites - lsls r0, r5, 4 - adds r0, r5 - lsls r0, 2 - adds r0, r1 - adds r0, 0x3E - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0] - adds r0, r6, 0 - bl DestroyAnimVisualTask -_0813F838: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0813F840: .4byte gSprites - thumb_func_end sub_813F798 - - thumb_func_start sub_813F844 -sub_813F844: @ 813F844 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0xC - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _0813F87C @ =gBankSpriteIds - ldr r4, _0813F880 @ =gAnimBankAttacker - ldrb r0, [r4] - adds r1, r0, r1 - ldrb r1, [r1] - mov r9, r1 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _0813F88C - ldr r1, _0813F884 @ =gBattlerPartyIndexes - ldrb r0, [r4] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _0813F888 @ =gPlayerParty - b _0813F89C - .align 2, 0 -_0813F87C: .4byte gBankSpriteIds -_0813F880: .4byte gAnimBankAttacker -_0813F884: .4byte gBattlerPartyIndexes -_0813F888: .4byte gPlayerParty -_0813F88C: - ldr r1, _0813F8CC @ =gBattlerPartyIndexes - ldrb r0, [r4] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _0813F8D0 @ =gEnemyParty -_0813F89C: - adds r0, r1 - movs r1, 0x26 - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - bl ball_number_to_ball_processing_index - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldr r2, _0813F8D4 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r6, r0, r2 - movs r0, 0x8 - ldrsh r7, [r6, r0] - cmp r7, 0 - beq _0813F8D8 - cmp r7, 0x1 - beq _0813F958 - b _0813F982 - .align 2, 0 -_0813F8CC: .4byte gBattlerPartyIndexes -_0813F8D0: .4byte gEnemyParty -_0813F8D4: .4byte gTasks -_0813F8D8: - ldr r5, _0813F950 @ =gAnimBankAttacker - ldrb r0, [r5] - movs r1, 0 - bl GetBattlerSpriteCoord - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldrb r0, [r5] - movs r1, 0x1 - bl GetBattlerSpriteCoord - adds r1, r0, 0 - lsls r1, 24 - ldr r2, _0813F954 @ =gSprites - mov r3, r9 - lsls r0, r3, 4 - add r0, r9 - lsls r0, 2 - adds r0, r2 - ldrb r2, [r0, 0x5] - lsls r2, 28 - lsrs r2, 30 - adds r0, 0x43 - ldrb r3, [r0] - movs r0, 0x80 - lsls r0, 22 - adds r1, r0 - lsrs r1, 24 - mov r0, r8 - str r0, [sp] - adds r0, r4, 0 - bl sub_814086C - lsls r0, 24 - lsrs r0, 24 - strh r0, [r6, 0x1C] - str r7, [sp] - str r7, [sp, 0x4] - str r7, [sp, 0x8] - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl sub_80791A8 - adds r2, r0, 0 - ldrb r1, [r5] - movs r0, 0 - mov r3, r8 - bl sub_8141314 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r6, 0x1E] - ldrh r0, [r6, 0x8] - adds r0, 0x1 - strh r0, [r6, 0x8] - b _0813F982 - .align 2, 0 -_0813F950: .4byte gAnimBankAttacker -_0813F954: .4byte gSprites -_0813F958: - movs r1, 0x1C - ldrsh r0, [r6, r1] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldrb r0, [r1, 0x4] - cmp r0, 0 - bne _0813F982 - movs r3, 0x1E - ldrsh r0, [r6, r3] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldrb r0, [r1, 0x4] - cmp r0, 0 - bne _0813F982 - adds r0, r5, 0 - bl DestroyAnimVisualTask -_0813F982: - add sp, 0xC - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_813F844 - - thumb_func_start sub_813F990 -sub_813F990: @ 813F990 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _0813F9B4 @ =gLastUsedItem - ldrh r0, [r0] - bl ball_number_to_ball_processing_index - lsls r0, 24 - lsrs r0, 24 - bl sub_80478DC - adds r0, r4, 0 - bl DestroyAnimVisualTask - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813F9B4: .4byte gLastUsedItem - thumb_func_end sub_813F990 - - thumb_func_start sub_813F9B8 -sub_813F9B8: @ 813F9B8 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _0813F9DC @ =gLastUsedItem - ldrh r0, [r0] - bl ball_number_to_ball_processing_index - lsls r0, 24 - lsrs r0, 24 - bl sub_804794C - adds r0, r4, 0 - bl DestroyAnimVisualTask - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813F9DC: .4byte gLastUsedItem - thumb_func_end sub_813F9B8 - - thumb_func_start sub_813F9E0 -sub_813F9E0: @ 813F9E0 - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - ldr r0, _0813F9F4 @ =gSharedMem + 0x17840 - ldrb r0, [r0, 0x8] - cmp r0, 0x5 - bne _0813FA00 - ldr r1, _0813F9F8 @ =gBattleAnimArgs - ldr r0, _0813F9FC @ =0x0000ffff - b _0813FA04 - .align 2, 0 -_0813F9F4: .4byte gSharedMem + 0x17840 -_0813F9F8: .4byte gBattleAnimArgs -_0813F9FC: .4byte 0x0000ffff -_0813FA00: - ldr r1, _0813FA10 @ =gBattleAnimArgs - movs r0, 0 -_0813FA04: - strh r0, [r1, 0xE] - adds r0, r2, 0 - bl DestroyAnimVisualTask - pop {r0} - bx r0 - .align 2, 0 -_0813FA10: .4byte gBattleAnimArgs - thumb_func_end sub_813F9E0 - - thumb_func_start ball_number_to_ball_processing_index -ball_number_to_ball_processing_index: @ 813FA14 - push {lr} - lsls r0, 16 - lsrs r0, 16 - subs r0, 0x1 - cmp r0, 0xB - bhi _0813FA8C - lsls r0, 2 - ldr r1, _0813FA2C @ =_0813FA30 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0813FA2C: .4byte _0813FA30 - .align 2, 0 -_0813FA30: - .4byte _0813FA60 - .4byte _0813FA64 - .4byte _0813FA68 - .4byte _0813FA8C - .4byte _0813FA6C - .4byte _0813FA70 - .4byte _0813FA74 - .4byte _0813FA78 - .4byte _0813FA7C - .4byte _0813FA80 - .4byte _0813FA84 - .4byte _0813FA88 -_0813FA60: - movs r0, 0x4 - b _0813FA8E -_0813FA64: - movs r0, 0x3 - b _0813FA8E -_0813FA68: - movs r0, 0x1 - b _0813FA8E -_0813FA6C: - movs r0, 0x2 - b _0813FA8E -_0813FA70: - movs r0, 0x5 - b _0813FA8E -_0813FA74: - movs r0, 0x6 - b _0813FA8E -_0813FA78: - movs r0, 0x7 - b _0813FA8E -_0813FA7C: - movs r0, 0x8 - b _0813FA8E -_0813FA80: - movs r0, 0x9 - b _0813FA8E -_0813FA84: - movs r0, 0xA - b _0813FA8E -_0813FA88: - movs r0, 0xB - b _0813FA8E -_0813FA8C: - movs r0, 0 -_0813FA8E: - pop {r1} - bx r1 - thumb_func_end ball_number_to_ball_processing_index - - thumb_func_start sub_813FA94 -sub_813FA94: @ 813FA94 - push {r4-r6,lr} - mov r6, r10 - mov r5, r9 - mov r4, r8 - push {r4-r6} - mov r10, r0 - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - ldr r0, _0813FB58 @ =gLastUsedItem - ldrh r0, [r0] - bl ball_number_to_ball_processing_index - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - ldr r1, _0813FB5C @ =gBallSpriteTemplates - adds r0, r1 - movs r1, 0x20 - movs r2, 0x50 - movs r3, 0x1D - bl CreateSprite - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - ldr r1, _0813FB60 @ =gSprites - mov r9, r1 - lsls r4, r5, 4 - adds r4, r5 - lsls r4, 2 - adds r6, r4, r1 - movs r0, 0x22 - strh r0, [r6, 0x2E] - ldr r2, _0813FB64 @ =gAnimBankTarget - mov r8, r2 - ldrb r0, [r2] - movs r1, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r6, 0x30] - mov r1, r8 - ldrb r0, [r1] - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - subs r0, 0x10 - strh r0, [r6, 0x32] - mov r0, r9 - adds r0, 0x1C - adds r4, r0 - ldr r0, _0813FB68 @ =sub_813FD90 - str r0, [r4] - ldr r3, _0813FB6C @ =gSharedMem + 0x17840 - ldr r1, _0813FB70 @ =gBankSpriteIds - mov r2, r8 - ldrb r0, [r2] - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - add r0, r9 - adds r0, 0x3E - ldrb r1, [r0] - lsls r1, 29 - lsrs r1, 31 - lsls r1, 1 - ldrb r2, [r3, 0x9] - movs r0, 0x3 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3, 0x9] - ldr r1, _0813FB74 @ =gTasks - mov r2, r10 - lsls r0, r2, 2 - add r0, r10 - lsls r0, 3 - adds r0, r1 - strh r5, [r0, 0x8] - ldr r1, _0813FB78 @ =sub_813FB7C - str r1, [r0] - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0813FB58: .4byte gLastUsedItem -_0813FB5C: .4byte gBallSpriteTemplates -_0813FB60: .4byte gSprites -_0813FB64: .4byte gAnimBankTarget -_0813FB68: .4byte sub_813FD90 -_0813FB6C: .4byte gSharedMem + 0x17840 -_0813FB70: .4byte gBankSpriteIds -_0813FB74: .4byte gTasks -_0813FB78: .4byte sub_813FB7C - thumb_func_end sub_813FA94 - thumb_func_start sub_813FB7C sub_813FB7C: @ 813FB7C push {lr} diff --git a/include/battle.h b/include/battle.h index c9bbb56eb..25b3943f8 100644 --- a/include/battle.h +++ b/include/battle.h @@ -458,6 +458,7 @@ struct Struct2017840 u8 filler2[6]; u8 unk8; u8 unk9_0:1; + u8 unk9_1:1; }; struct Struct20238C8 diff --git a/ld_script.txt b/ld_script.txt index 189184da1..89879b2c6 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -364,6 +364,7 @@ SECTIONS { src/player_pc.o(.text); src/intro.o(.text); src/field_region_map.o(.text); + src/battle/battle_anim_813F0F4.o(.text); asm/battle_anim_813F0F4.o(.text); src/hall_of_fame.o(.text); src/credits.o(.text); diff --git a/src/battle/battle_anim_813F0F4.c b/src/battle/battle_anim_813F0F4.c new file mode 100755 index 000000000..785dd92b4 --- /dev/null +++ b/src/battle/battle_anim_813F0F4.c @@ -0,0 +1,369 @@ +#include "global.h" +#include "battle.h" +#include "battle_anim.h" +#include "blend_palette.h" +#include "decompress.h" +#include "ewram.h" +#include "palette.h" +#include "pokeball.h" +#include "rom_8077ABC.h" +#include "sprite.h" +#include "task.h" +#include "util.h" +#include "constants/items.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gAnimBankAttacker; +extern u8 gAnimBankTarget; +extern u8 gHealthboxIDs[]; +extern u8 gBankSpriteIds[]; +extern u16 gBattlerPartyIndexes[]; +extern u16 gLastUsedItem; + +extern const u8 gUnknown_08D2EE48[]; +extern const u8 gUnknown_08D2EDFC[]; +extern const u16 gUnknown_08D2E150[]; + +static void sub_813F300(u8 taskId); +static void sub_813F6CC(u8 taskId); +u8 ball_number_to_ball_processing_index(u16); +u8 sub_814086C(u8, u8, int, int, u8); +u8 sub_8141314(u8, u8, int, u8); +void sub_813FD90(struct Sprite *sprite); +void sub_813FB7C(u8 taskId); + + +void unref_sub_813F0F4(u8 taskId) +{ + struct Struct_sub_8078914 subStruct; + u8 healthBoxSpriteId; + u8 battler; + u8 spriteId1, spriteId2, spriteId3, spriteId4; + + battler = gAnimBankAttacker; + gBattle_WIN0H = 0; + gBattle_WIN0V = 0; + REG_WININ = 0x3F3F; + REG_WINOUT = 0x3F3D; + REG_DISPCNT |= DISPCNT_OBJWIN_ON; + REG_BLDCNT = 0x3F42; + REG_BLDALPHA = 0x1000; + REG_BG1CNT_BITFIELD.priority = 0; + REG_BG1CNT_BITFIELD.screenSize = 0; + REG_BG1CNT_BITFIELD.areaOverflowMode = 1; + REG_BG1CNT_BITFIELD.charBaseBlock = 1; + + healthBoxSpriteId = gHealthboxIDs[battler]; + spriteId1 = gSprites[healthBoxSpriteId].oam.affineParam; + spriteId2 = gSprites[healthBoxSpriteId].data[5]; + spriteId3 = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy); + spriteId4 = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy); + gSprites[healthBoxSpriteId].oam.priority = 1; + gSprites[spriteId1].oam.priority = 1; + gSprites[spriteId2].oam.priority = 1; + gSprites[spriteId3] = gSprites[healthBoxSpriteId]; + gSprites[spriteId4] = gSprites[spriteId1]; + gSprites[spriteId3].oam.objMode = ST_OAM_OBJ_WINDOW; + gSprites[spriteId4].oam.objMode = ST_OAM_OBJ_WINDOW; + gSprites[spriteId3].callback = SpriteCallbackDummy; + gSprites[spriteId4].callback = SpriteCallbackDummy; + + sub_8078914(&subStruct); + DmaFill32Defvars(3, 0, subStruct.field_4, 0x1000); + LZDecompressVram(&gUnknown_08D2EE48, subStruct.field_4); + LZDecompressVram(&gUnknown_08D2EDFC, subStruct.field_0); + LoadCompressedPalette(gUnknown_08D2E150, subStruct.field_8 << 4, 32); + + gBattle_BG1_X = -gSprites[spriteId3].pos1.x + 32; + gBattle_BG1_Y = -gSprites[spriteId3].pos1.y - 32; + gTasks[taskId].data[1] = 640; + gTasks[taskId].data[0] = spriteId3; + gTasks[taskId].data[2] = spriteId4; + gTasks[taskId].func = sub_813F300; +} + +static void sub_813F300(u8 taskId) +{ + struct Struct_sub_8078914 subStruct; + u8 spriteId1, spriteId2; + u8 battler; + + battler = gAnimBankAttacker; + gTasks[taskId].data[13] += gTasks[taskId].data[1]; + gBattle_BG1_Y += (u16)gTasks[taskId].data[13] >> 8; + gTasks[taskId].data[13] &= 0xFF; + + switch (gTasks[taskId].data[15]) + { + case 0: + if (gTasks[taskId].data[11]++ > 1) + { + gTasks[taskId].data[11] = 0; + gTasks[taskId].data[12]++; + REG_BLDALPHA = ((16 - gTasks[taskId].data[12]) << 8) | gTasks[taskId].data[12]; + if (gTasks[taskId].data[12] == 8) + gTasks[taskId].data[15]++; + } + break; + case 1: + if (++gTasks[taskId].data[10] == 30) + gTasks[taskId].data[15]++; + break; + case 2: + if (gTasks[taskId].data[11]++ > 1) + { + gTasks[taskId].data[11] = 0; + gTasks[taskId].data[12]--; + REG_BLDALPHA = ((16 - gTasks[taskId].data[12]) << 8) | gTasks[taskId].data[12]; + if (gTasks[taskId].data[12] == 0) + { + sub_8076464(0); + gBattle_WIN0H = 0; + gBattle_WIN0V = 0; + REG_WININ = 0x3F3F; + REG_WINOUT = 0x3F3F; + if (!IsContest()) + REG_BG1CNT_BITFIELD.charBaseBlock = 0; + + REG_DISPCNT ^= DISPCNT_OBJWIN_ON; + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + DestroySprite(&gSprites[gTasks[taskId].data[0]]); + DestroySprite(&gSprites[gTasks[taskId].data[2]]); + sub_8078914(&subStruct); + DmaFill32Defvars(3, 0, subStruct.field_4, 0x800); + REG_BG1CNT_BITFIELD.areaOverflowMode = 0; + spriteId1 = gSprites[gHealthboxIDs[battler]].oam.affineParam; + spriteId2 = gSprites[gHealthboxIDs[battler]].data[5]; + gSprites[gHealthboxIDs[battler]].oam.priority = 1; + gSprites[spriteId1].oam.priority = 1; + gSprites[spriteId2].oam.priority = 1; + DestroyAnimVisualTask(taskId); + } + } + break; + } +} + +void sub_813F4EC(u8 taskId) +{ + u8 healthBoxSpriteId; + u8 spriteId1, spriteId2; + u8 paletteNum1, paletteNum2; + u16 offset1, offset2; + + healthBoxSpriteId = gHealthboxIDs[gAnimBankAttacker]; + spriteId1 = gSprites[healthBoxSpriteId].oam.affineParam; + spriteId2 = gSprites[healthBoxSpriteId].data[5]; + paletteNum1 = AllocSpritePalette(0xD709); + paletteNum2 = AllocSpritePalette(0xD70A); + + offset1 = (gSprites[healthBoxSpriteId].oam.paletteNum * 16) + 0x100; + offset2 = (gSprites[spriteId2].oam.paletteNum * 16) + 0x100; + LoadPalette(&gPlttBufferUnfaded[offset1], paletteNum1 * 16 + 0x100, 0x20); + LoadPalette(&gPlttBufferUnfaded[offset2], paletteNum2 * 16 + 0x100, 0x20); + + gSprites[healthBoxSpriteId].oam.paletteNum = paletteNum1; + gSprites[spriteId1].oam.paletteNum = paletteNum1; + gSprites[spriteId2].oam.paletteNum = paletteNum2; + DestroyAnimVisualTask(taskId); +} + +void sub_813F5E8(u8 taskId) +{ + u8 healthBoxSpriteId; + u8 spriteId1, spriteId2; + u8 paletteIndex1, paletteIndex2; + + healthBoxSpriteId = gHealthboxIDs[gAnimBankAttacker]; + spriteId1 = gSprites[healthBoxSpriteId].oam.affineParam; + spriteId2 = gSprites[healthBoxSpriteId].data[5]; + + FreeSpritePaletteByTag(0xD709); + FreeSpritePaletteByTag(0xD70A); + paletteIndex1 = IndexOfSpritePaletteTag(0xD6FF); + paletteIndex2 = IndexOfSpritePaletteTag(0xD704); + gSprites[healthBoxSpriteId].oam.paletteNum = paletteIndex1; + gSprites[spriteId1].oam.paletteNum = paletteIndex1; + gSprites[spriteId2].oam.paletteNum = paletteIndex2; + + DestroyAnimVisualTask(taskId); +} + +void sub_813F6A0(u8 taskId) +{ + gTasks[taskId].data[10] = gBattleAnimArgs[0]; + gTasks[taskId].data[11] = gBattleAnimArgs[1]; + gTasks[taskId].func = sub_813F6CC; +} + +static void sub_813F6CC(u8 taskId) +{ + u8 paletteNum; + int paletteOffset, colorOffset; + + gTasks[taskId].data[0]++; + if (gTasks[taskId].data[0]++ >= gTasks[taskId].data[11]) + { + gTasks[taskId].data[0] = 0; + paletteNum = IndexOfSpritePaletteTag(0xD709); + colorOffset = gTasks[taskId].data[10] == 0 ? 6 : 2; + switch (gTasks[taskId].data[1]) + { + case 0: + gTasks[taskId].data[2] += 2; + if (gTasks[taskId].data[2] > 16) + gTasks[taskId].data[2] = 16; + + paletteOffset = paletteNum * 16 + 0x100; + BlendPalette(paletteOffset + colorOffset, 1, gTasks[taskId].data[2], RGB(20, 27, 31)); + if (gTasks[taskId].data[2] == 16) + gTasks[taskId].data[1]++; + break; + case 1: + gTasks[taskId].data[2] -= 2; + if (gTasks[taskId].data[2] < 0) + gTasks[taskId].data[2] = 0; + + paletteOffset = paletteNum * 16 + 0x100; + BlendPalette(paletteOffset + colorOffset, 1, gTasks[taskId].data[2], RGB(20, 27, 31)); + if (gTasks[taskId].data[2] == 0) + DestroyAnimVisualTask(taskId); + break; + } + } +} + +void sub_813F798(u8 taskId) +{ + u8 spriteId; + + spriteId = gBankSpriteIds[gAnimBankAttacker]; + switch (gTasks[taskId].data[0]) + { + case 0: + sub_8078E70(spriteId, 0); + gTasks[taskId].data[10] = 0x100; + gTasks[taskId].data[0]++; + break; + case 1: + gTasks[taskId].data[10] += 0x30; + obj_id_set_rotscale(spriteId, gTasks[taskId].data[10], gTasks[taskId].data[10], 0); + sub_8079A64(spriteId); + if (gTasks[taskId].data[10] >= 0x2D0) + gTasks[taskId].data[0]++; + break; + case 2: + sub_8078F40(spriteId); + gSprites[spriteId].invisible = 1; + DestroyAnimVisualTask(taskId); + break; + } +} + +void sub_813F844(u8 taskId) +{ + u8 spriteId; + u16 ball; + u8 ballIndex; + u8 x, y; + int priority, subpriority; + u32 selectedPalettes; + + spriteId = gBankSpriteIds[gAnimBankAttacker]; + if (GetBattlerSide(gAnimBankAttacker) == B_SIDE_PLAYER) + ball = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gAnimBankAttacker]], MON_DATA_POKEBALL); + else + ball = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gAnimBankAttacker]], MON_DATA_POKEBALL); + + ballIndex = ball_number_to_ball_processing_index(ball); + switch (gTasks[taskId].data[0]) + { + case 0: + x = GetBattlerSpriteCoord(gAnimBankAttacker, 0); + y = GetBattlerSpriteCoord(gAnimBankAttacker, 1); + priority = gSprites[spriteId].oam.priority; + subpriority = gSprites[spriteId].subpriority; + gTasks[taskId].data[10] = sub_814086C(x, y + 32, priority, subpriority, ballIndex); + selectedPalettes = sub_80791A8(1, 0, 0, 0, 0, 0, 0); + gTasks[taskId].data[11] = sub_8141314(0, gAnimBankAttacker, selectedPalettes, ballIndex); + gTasks[taskId].data[0]++; + break; + case 1: + if (!gTasks[gTasks[taskId].data[10]].isActive && !gTasks[gTasks[taskId].data[11]].isActive) + DestroyAnimVisualTask(taskId); + break; + } +} + +void sub_813F990(u8 taskId) +{ + u8 ballIndex = ball_number_to_ball_processing_index(gLastUsedItem); + sub_80478DC(ballIndex); + DestroyAnimVisualTask(taskId); +} + +void sub_813F9B8(u8 taskId) +{ + u8 ballIndex = ball_number_to_ball_processing_index(gLastUsedItem); + sub_804794C(ballIndex); + DestroyAnimVisualTask(taskId); +} + +void sub_813F9E0(u8 taskId) +{ + if (ewram17840.unk8 == 5) + gBattleAnimArgs[7] = -1; + else + gBattleAnimArgs[7] = 0; + + DestroyAnimVisualTask(taskId); +} + +u8 ball_number_to_ball_processing_index(u16 ballItem) +{ + switch (ballItem) + { + case ITEM_MASTER_BALL: + return 4; + case ITEM_ULTRA_BALL: + return 3; + case ITEM_GREAT_BALL: + return 1; + case ITEM_SAFARI_BALL: + return 2; + case ITEM_NET_BALL: + return 5; + case ITEM_DIVE_BALL: + return 6; + case ITEM_NEST_BALL: + return 7; + case ITEM_REPEAT_BALL: + return 8; + case ITEM_TIMER_BALL: + return 9; + case ITEM_LUXURY_BALL: + return 10; + case ITEM_PREMIER_BALL: + return 11; + case ITEM_POKE_BALL: + default: + return 0; + } +} + +void sub_813FA94(u8 taskId) +{ + u8 ballIndex; + u8 spriteId; + + ballIndex = ball_number_to_ball_processing_index(gLastUsedItem); + spriteId = CreateSprite(&gBallSpriteTemplates[ballIndex], 32, 80, 29); + gSprites[spriteId].data[0] = 34; + gSprites[spriteId].data[1] = GetBattlerSpriteCoord(gAnimBankTarget, 0); + gSprites[spriteId].data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 1) - 16; + gSprites[spriteId].callback = sub_813FD90; + ewram17840.unk9_1 = gSprites[gBankSpriteIds[gAnimBankTarget]].invisible; + gTasks[taskId].data[0] = spriteId; + gTasks[taskId].func = sub_813FB7C; +} |