summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/battle_anim_813F0F4.s1299
-rw-r--r--include/battle.h1
-rw-r--r--ld_script.txt1
-rwxr-xr-xsrc/battle/battle_anim_813F0F4.c369
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;
+}