summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@gmail.com>2020-03-21 16:55:56 -0400
committerPikalaxALT <PikalaxALT@gmail.com>2020-03-21 16:55:56 -0400
commitd0be58d07700df1e1f000e24176e210e2038f34e (patch)
treed8d9bcb8bc1b47f6acf595f3223623a85eeeef5a
parent218555e72ceeb55ad21c942c55796130cc3eb864 (diff)
through sub_811E040
-rw-r--r--asm/pokemon_special_anim.s1264
-rw-r--r--data/pokemon_special_anim.s126
-rw-r--r--include/pokemon_special_anim_internal.h11
-rw-r--r--include/strings.h6
-rw-r--r--ld_script.txt1
-rw-r--r--src/pokemon_special_anim.c4
-rw-r--r--src/pokemon_special_anim_scene.c700
7 files changed, 706 insertions, 1406 deletions
diff --git a/asm/pokemon_special_anim.s b/asm/pokemon_special_anim.s
index 49fff6ca5..29241bf2b 100644
--- a/asm/pokemon_special_anim.s
+++ b/asm/pokemon_special_anim.s
@@ -5,1270 +5,6 @@
.text
- thumb_func_start sub_811D6EC
-sub_811D6EC: @ 811D6EC
- push {lr}
- bl sub_811D0A8
- movs r1, 0
- strh r1, [r0]
- pop {r0}
- bx r0
- thumb_func_end sub_811D6EC
-
- thumb_func_start sub_811D6FC
-sub_811D6FC: @ 811D6FC
- push {r4,lr}
- bl sub_811D0A8
- adds r4, r0, 0
- ldrh r0, [r4]
- cmp r0, 0
- beq _0811D710
- cmp r0, 0x1
- beq _0811D722
- b _0811D72C
-_0811D710:
- bl sub_811E10C
- movs r0, 0x1D
- bl PlaySE
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- b _0811D72C
-_0811D722:
- bl sub_811E138
- lsls r0, 24
- lsrs r0, 24
- b _0811D72E
-_0811D72C:
- movs r0, 0x1
-_0811D72E:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_811D6FC
-
- thumb_func_start sub_811D734
-sub_811D734: @ 811D734
- push {lr}
- sub sp, 0x8
- movs r0, 0x2
- str r0, [sp]
- movs r0, 0
- str r0, [sp, 0x4]
- movs r0, 0x78
- movs r1, 0x38
- movs r2, 0x4
- movs r3, 0x4
- bl sub_811E5B8
- add sp, 0x8
- pop {r0}
- bx r0
- thumb_func_end sub_811D734
-
- thumb_func_start sub_811D754
-sub_811D754: @ 811D754
- push {lr}
- bl sub_811E680
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end sub_811D754
-
- thumb_func_start sub_811D764
-sub_811D764: @ 811D764
- push {r4,r5,lr}
- sub sp, 0x8
- adds r4, r0, 0
- adds r5, r1, 0
- movs r0, 0x1
- movs r1, 0x1
- movs r2, 0xE
- bl DrawTextBorderOuter
- movs r0, 0x2
- str r0, [sp]
- movs r0, 0x3
- str r0, [sp, 0x4]
- movs r0, 0x1
- adds r1, r4, 0
- adds r2, r5, 0
- movs r3, 0x1
- bl DrawLevelUpWindowPg1
- movs r0, 0x1
- bl PutWindowTilemap
- movs r0, 0x1
- movs r1, 0x3
- bl CopyWindowToVram
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_811D764
-
- thumb_func_start sub_811D7A0
-sub_811D7A0: @ 811D7A0
- push {lr}
- sub sp, 0x4
- adds r1, r0, 0
- movs r0, 0x3
- str r0, [sp]
- movs r0, 0x1
- movs r2, 0x1
- movs r3, 0x2
- bl DrawLevelUpWindowPg2
- movs r0, 0x1
- movs r1, 0x2
- bl CopyWindowToVram
- add sp, 0x4
- pop {r0}
- bx r0
- thumb_func_end sub_811D7A0
-
- thumb_func_start sub_811D7C4
-sub_811D7C4: @ 811D7C4
- push {lr}
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end sub_811D7C4
-
- thumb_func_start sub_811D7D4
-sub_811D7D4: @ 811D7D4
- push {r4,lr}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- ldr r1, _0811D80C @ =gUnknown_845973C
- movs r0, 0x3
- movs r2, 0
- movs r3, 0
- bl CopyToBgTilemapBuffer
- ldr r1, _0811D810 @ =gUnknown_845967C
- movs r0, 0
- str r0, [sp]
- movs r0, 0x3
- movs r2, 0
- movs r3, 0
- bl DecompressAndCopyTileDataToVram
- cmp r4, 0x4
- beq _0811D818
- ldr r0, _0811D814 @ =gUnknown_845963C
- movs r1, 0
- movs r2, 0x20
- bl LoadPalette
- b _0811D822
- .align 2, 0
-_0811D80C: .4byte gUnknown_845973C
-_0811D810: .4byte gUnknown_845967C
-_0811D814: .4byte gUnknown_845963C
-_0811D818:
- ldr r0, _0811D82C @ =gUnknown_845965C
- movs r1, 0
- movs r2, 0x20
- bl LoadPalette
-_0811D822:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0811D82C: .4byte gUnknown_845965C
- thumb_func_end sub_811D7D4
-
- thumb_func_start sub_811D830
-sub_811D830: @ 811D830
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp]
- bl sub_811D0A8
- adds r5, r0, 0
- bl sub_811D094
- mov r8, r0
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r7, r0, 16
- mov r0, r8
- movs r1, 0
- bl GetMonData
- mov r10, r0
- adds r0, r7, 0
- mov r1, r10
- movs r2, 0x2
- bl sub_812EA78
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0xFF
- beq _0811D87E
- movs r0, 0x48
- strh r0, [r5, 0x6]
- adds r0, r1, 0
- adds r0, 0x30
- b _0811D884
-_0811D87E:
- movs r0, 0x48
- strh r0, [r5, 0x6]
- movs r0, 0x60
-_0811D884:
- strh r0, [r5, 0x8]
- movs r4, 0x80
- lsls r4, 6
- adds r0, r4, 0
- bl Alloc
- adds r6, r0, 0
- adds r0, r4, 0
- bl Alloc
- mov r9, r0
- movs r0, 0x80
- lsls r0, 1
- bl Alloc
- adds r4, r0, 0
- cmp r6, 0
- beq _0811D920
- mov r0, r9
- cmp r0, 0
- beq _0811D916
- cmp r4, 0
- beq _0811D916
- lsls r0, r7, 3
- ldr r1, _0811D900 @ =gMonFrontPicTable
- adds r0, r1
- adds r1, r6, 0
- adds r2, r7, 0
- mov r3, r10
- bl HandleLoadSpecialPokePic
- mov r0, r8
- bl GetMonFrontSpritePal
- adds r1, r4, 0
- bl LZ77UnCompWram
- adds r0, r6, 0
- adds r1, r4, 0
- bl sub_811DC14
- ldr r0, _0811D904 @ =gUnknown_8459A30
- movs r1, 0x6
- ldrsh r2, [r5, r1]
- movs r1, 0x78
- movs r3, 0x4
- bl CreateSprite
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x40
- beq _0811D90C
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0811D908 @ =gSprites
- adds r0, r1
- str r0, [r5, 0xC]
- ldr r1, [sp]
- bl sub_811DB14
- b _0811D910
- .align 2, 0
-_0811D900: .4byte gMonFrontPicTable
-_0811D904: .4byte gUnknown_8459A30
-_0811D908: .4byte gSprites
-_0811D90C:
- movs r0, 0
- str r0, [r5, 0xC]
-_0811D910:
- mov r0, sp
- ldrb r0, [r0]
- strb r0, [r5, 0xA]
-_0811D916:
- cmp r6, 0
- beq _0811D920
- adds r0, r6, 0
- bl Free
-_0811D920:
- mov r1, r9
- cmp r1, 0
- beq _0811D92C
- mov r0, r9
- bl Free
-_0811D92C:
- cmp r4, 0
- beq _0811D936
- adds r0, r4, 0
- bl Free
-_0811D936:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_811D830
-
- thumb_func_start sub_811D948
-sub_811D948: @ 811D948
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- bl sub_811D0A8
- adds r5, r0, 0
- ldrb r0, [r5, 0xA]
- cmp r6, r0
- beq _0811D99C
- ldr r0, _0811D990 @ =sub_811D9BC
- movs r1, 0x4
- bl CreateTask
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r2, [r5, 0xC]
- adds r0, r4, 0
- movs r1, 0x6
- bl SetWordTaskArg
- ldr r1, _0811D994 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r1, r0, r1
- ldrb r0, [r5, 0xA]
- strh r0, [r1, 0xA]
- strh r6, [r1, 0xC]
- movs r0, 0x6
- strh r0, [r1, 0x12]
- ldrb r5, [r5, 0xA]
- cmp r6, r5
- bls _0811D998
- movs r0, 0x1
- b _0811D99A
- .align 2, 0
-_0811D990: .4byte sub_811D9BC
-_0811D994: .4byte gTasks
-_0811D998:
- ldr r0, _0811D9A4 @ =0x0000ffff
-_0811D99A:
- strh r0, [r1, 0xE]
-_0811D99C:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0811D9A4: .4byte 0x0000ffff
- thumb_func_end sub_811D948
-
- thumb_func_start sub_811D9A8
-sub_811D9A8: @ 811D9A8
- push {lr}
- ldr r0, _0811D9B8 @ =sub_811D9BC
- bl FuncIsActiveTask
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_0811D9B8: .4byte sub_811D9BC
- thumb_func_end sub_811D9A8
-
- thumb_func_start sub_811D9BC
-sub_811D9BC: @ 811D9BC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r6, r0, 24
- mov r8, r6
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- ldr r1, _0811D9F0 @ =gTasks+0x8
- adds r4, r0, r1
- adds r0, r6, 0
- movs r1, 0x6
- bl GetWordTaskArg
- adds r5, r0, 0
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r0, 0x1
- beq _0811DA26
- cmp r0, 0x1
- bgt _0811D9F4
- cmp r0, 0
- beq _0811D9FA
- b _0811DA90
- .align 2, 0
-_0811D9F0: .4byte gTasks+0x8
-_0811D9F4:
- cmp r0, 0x2
- beq _0811DA7A
- b _0811DA90
-_0811D9FA:
- ldrb r1, [r4, 0x2]
- adds r0, r5, 0
- bl sub_811DA9C
- movs r2, 0x10
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _0811DA18
- adds r0, r6, 0
- movs r1, 0x9
- bl GetWordTaskArg
- ldrb r1, [r4, 0x2]
- bl sub_811DA9C
-_0811DA18:
- ldrh r0, [r4, 0x6]
- ldrh r1, [r4, 0x2]
- adds r0, r1
- strh r0, [r4, 0x2]
- ldrh r0, [r4]
- adds r0, 0x1
- b _0811DA8E
-_0811DA26:
- adds r0, r5, 0
- bl sub_811DAAC
- lsls r0, 24
- lsrs r7, r0, 24
- cmp r7, 0
- bne _0811DA90
- movs r0, 0x6D
- bl PlaySE
- ldrb r1, [r4, 0x2]
- adds r0, r5, 0
- bl sub_811DB14
- movs r2, 0x10
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _0811DA58
- adds r0, r6, 0
- movs r1, 0x9
- bl GetWordTaskArg
- ldrb r1, [r4, 0x2]
- bl sub_811DB48
-_0811DA58:
- movs r0, 0x2
- ldrsh r1, [r4, r0]
- movs r2, 0x4
- ldrsh r0, [r4, r2]
- cmp r1, r0
- bne _0811DA74
- bl sub_811D0A8
- ldrh r1, [r4, 0x4]
- strb r1, [r0, 0xA]
- mov r0, r8
- bl DestroyTask
- b _0811DA90
-_0811DA74:
- strh r7, [r4, 0x8]
- movs r0, 0x2
- b _0811DA8E
-_0811DA7A:
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- lsls r0, 16
- asrs r0, 16
- movs r2, 0xA
- ldrsh r1, [r4, r2]
- cmp r0, r1
- ble _0811DA90
- movs r0, 0
-_0811DA8E:
- strh r0, [r4]
-_0811DA90:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_811D9BC
-
- thumb_func_start sub_811DA9C
-sub_811DA9C: @ 811DA9C
- lsls r1, 24
- lsrs r1, 24
- movs r2, 0
- strh r2, [r0, 0x2E]
- strh r2, [r0, 0x30]
- strh r1, [r0, 0x32]
- bx lr
- thumb_func_end sub_811DA9C
-
- thumb_func_start sub_811DAAC
-sub_811DAAC: @ 811DAAC
- ldr r1, [r0, 0x1C]
- ldr r0, _0811DABC @ =SpriteCallbackDummy
- eors r1, r0
- negs r0, r1
- orrs r0, r1
- lsrs r0, 31
- bx lr
- .align 2, 0
-_0811DABC: .4byte SpriteCallbackDummy
- thumb_func_end sub_811DAAC
-
- thumb_func_start sub_811DAC0
-sub_811DAC0: @ 811DAC0
- lsls r1, 24
- lsls r0, 16
- asrs r0, 16
- ldr r2, _0811DAD8 @ =gUnknown_84599AA
- lsrs r1, 23
- adds r1, r2
- ldrh r1, [r1]
- muls r0, r1
- lsls r0, 8
- asrs r0, 16
- bx lr
- .align 2, 0
-_0811DAD8: .4byte gUnknown_84599AA
- thumb_func_end sub_811DAC0
-
- thumb_func_start sub_811DADC
-sub_811DADC: @ 811DADC
- push {r4,lr}
- lsls r0, 16
- lsrs r4, r0, 16
- bl sub_811D0A8
- ldrh r1, [r0, 0x8]
- ldrh r2, [r0, 0x6]
- subs r1, r2
- lsls r1, 16
- asrs r1, 8
- cmp r1, 0
- bge _0811DAF6
- adds r1, 0xFF
-_0811DAF6:
- asrs r1, 8
- ldr r3, _0811DB10 @ =0xffffff00
- adds r0, r4, r3
- muls r0, r1
- lsls r0, 8
- asrs r0, 16
- adds r0, r2
- lsls r0, 16
- lsrs r0, 16
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0811DB10: .4byte 0xffffff00
- thumb_func_end sub_811DADC
-
- thumb_func_start sub_811DB14
-sub_811DB14: @ 811DB14
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r1, 24
- lsrs r4, r1, 24
- cmp r4, 0x3
- bls _0811DB22
- movs r4, 0x3
-_0811DB22:
- bl sub_811D0A8
- adds r0, r5, 0
- adds r1, r4, 0
- bl StartSpriteAffineAnim
- ldr r1, _0811DB44 @ =gUnknown_84599AA
- lsls r0, r4, 1
- adds r0, r1
- ldrh r0, [r0]
- bl sub_811DADC
- strh r0, [r5, 0x22]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0811DB44: .4byte gUnknown_84599AA
- thumb_func_end sub_811DB14
-
- thumb_func_start sub_811DB48
-sub_811DB48: @ 811DB48
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r4, r1, 24
- lsrs r4, 24
- adds r1, r4, 0
- bl sub_811DB14
- ldrh r0, [r5, 0x3A]
- subs r0, 0x20
- lsls r0, 16
- asrs r0, 16
- adds r1, r4, 0
- bl sub_811DAC0
- strh r0, [r5, 0x24]
- ldrh r0, [r5, 0x3C]
- subs r0, 0x20
- lsls r0, 16
- asrs r0, 16
- adds r1, r4, 0
- bl sub_811DAC0
- strh r0, [r5, 0x26]
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_811DB48
-
- thumb_func_start sub_811DB7C
-sub_811DB7C: @ 811DB7C
- push {r4,lr}
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- lsls r3, 24
- lsrs r3, 24
- ldr r4, [r0, 0xC]
- strh r1, [r4, 0x2E]
- ldr r1, [r0, 0xC]
- strh r2, [r1, 0x30]
- ldr r1, [r0, 0xC]
- strh r3, [r1, 0x32]
- ldr r1, [r0, 0xC]
- ldr r0, _0811DBA4 @ =sub_811DBBC
- str r0, [r1, 0x1C]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0811DBA4: .4byte sub_811DBBC
- thumb_func_end sub_811DB7C
-
- thumb_func_start sub_811DBA8
-sub_811DBA8: @ 811DBA8
- ldr r2, [r0, 0xC]
- movs r1, 0
- strh r1, [r2, 0x24]
- ldr r1, [r0, 0xC]
- ldr r0, _0811DBB8 @ =SpriteCallbackDummy
- str r0, [r1, 0x1C]
- bx lr
- .align 2, 0
-_0811DBB8: .4byte SpriteCallbackDummy
- thumb_func_end sub_811DBA8
-
- thumb_func_start sub_811DBBC
-sub_811DBBC: @ 811DBBC
- push {r4,lr}
- adds r2, r0, 0
- ldrh r0, [r2, 0x3C]
- adds r0, 0x1
- movs r3, 0
- strh r0, [r2, 0x3C]
- lsls r0, 16
- asrs r0, 16
- movs r4, 0x2E
- ldrsh r1, [r2, r4]
- cmp r0, r1
- ble _0811DC0C
- strh r3, [r2, 0x3C]
- ldrh r0, [r2, 0x3A]
- adds r0, 0x1
- strh r0, [r2, 0x3A]
- movs r4, 0x30
- ldrsh r1, [r2, r4]
- cmp r1, 0
- beq _0811DBF8
- lsls r0, 16
- asrs r0, 16
- cmp r0, r1
- blt _0811DBF8
- strh r3, [r2, 0x24]
- ldr r0, _0811DBF4 @ =SpriteCallbackDummy
- str r0, [r2, 0x1C]
- b _0811DC0C
- .align 2, 0
-_0811DBF4: .4byte SpriteCallbackDummy
-_0811DBF8:
- ldrh r1, [r2, 0x3A]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0811DC06
- ldrh r0, [r2, 0x32]
- b _0811DC0A
-_0811DC06:
- ldrh r0, [r2, 0x32]
- negs r0, r0
-_0811DC0A:
- strh r0, [r2, 0x24]
-_0811DC0C:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_811DBBC
-
- thumb_func_start sub_811DC14
-sub_811DC14: @ 811DC14
- push {r4,lr}
- sub sp, 0x10
- str r0, [sp]
- ldr r3, _0811DC4C @ =0xffff0000
- ldr r0, [sp, 0x4]
- ands r0, r3
- movs r2, 0x80
- lsls r2, 4
- orrs r0, r2
- ldr r2, _0811DC50 @ =0x0000ffff
- ands r0, r2
- str r0, [sp, 0x4]
- str r1, [sp, 0x8]
- add r4, sp, 0x8
- ldr r0, [r4, 0x4]
- ands r0, r3
- str r0, [r4, 0x4]
- mov r0, sp
- bl LoadSpriteSheet
- adds r0, r4, 0
- bl LoadSpritePalette
- add sp, 0x10
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0811DC4C: .4byte 0xffff0000
-_0811DC50: .4byte 0x0000ffff
- thumb_func_end sub_811DC14
-
- thumb_func_start sub_811DC54
-sub_811DC54: @ 811DC54
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- mov r8, r2
- lsls r0, 16
- lsrs r7, r0, 16
- lsls r1, 24
- lsrs r6, r1, 24
- bl sub_811D0A8
- adds r5, r0, 0
- adds r0, r7, 0
- bl sub_811DD20
- adds r1, r0, 0
- str r1, [r5, 0x10]
- cmp r1, 0
- beq _0811DCD2
- adds r0, r5, 0
- adds r2, r6, 0
- bl sub_811E06C
- ldr r0, [r5, 0x10]
- adds r1, r6, 0
- bl StartSpriteAffineAnim
- ldr r1, [r5, 0x10]
- adds r1, 0x3E
- ldrb r0, [r1]
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r1]
- ldr r0, _0811DCDC @ =sub_811DDA4
- movs r1, 0x2
- bl CreateTask
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r2, [r5, 0x10]
- adds r0, r4, 0
- movs r1, 0x4
- bl SetWordTaskArg
- ldr r0, _0811DCE0 @ =gTasks
- lsls r5, r4, 2
- adds r5, r4
- lsls r5, 3
- adds r5, r0
- strh r6, [r5, 0xC]
- ldr r1, _0811DCE4 @ =gUnknown_84599AA
- lsls r0, r6, 1
- adds r0, r1
- ldrh r0, [r0]
- bl sub_811DADC
- strh r0, [r5, 0xE]
- mov r0, r8
- strh r0, [r5, 0x14]
- adds r0, r7, 0
- bl sub_811DCE8
- strh r0, [r5, 0x1A]
-_0811DCD2:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0811DCDC: .4byte sub_811DDA4
-_0811DCE0: .4byte gTasks
-_0811DCE4: .4byte gUnknown_84599AA
- thumb_func_end sub_811DC54
-
- thumb_func_start sub_811DCE8
-sub_811DCE8: @ 811DCE8
- ldr r0, _0811DCEC @ =0x00007fff
- bx lr
- .align 2, 0
-_0811DCEC: .4byte 0x00007fff
- thumb_func_end sub_811DCE8
-
- thumb_func_start sub_811DCF0
-sub_811DCF0: @ 811DCF0
- push {r4,r5,lr}
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- bl sub_811D0A8
- adds r5, r0, 0
- adds r0, r4, 0
- bl sub_811DD20
- str r0, [r5, 0x10]
- cmp r0, 0
- beq _0811DD1A
- movs r1, 0x3
- bl StartSpriteAffineAnim
- ldr r1, [r5, 0x10]
- adds r0, r5, 0
- movs r2, 0x3
- bl sub_811E06C
-_0811DD1A:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_811DCF0
-
- thumb_func_start sub_811DD20
-sub_811DD20: @ 811DD20
- push {r4,lr}
- adds r2, r0, 0
- lsls r2, 16
- lsrs r2, 16
- movs r0, 0x1
- movs r1, 0x1
- bl AddItemIconObject
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _0811DD88
- ldr r3, _0811DD7C @ =gSprites
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r4, r2, r3
- ldrb r0, [r4, 0x1]
- movs r1, 0x3
- orrs r0, r1
- strb r0, [r4, 0x1]
- ldrb r1, [r4, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r1
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r4, 0x5]
- adds r1, r4, 0
- adds r1, 0x43
- movs r0, 0x1
- strb r0, [r1]
- adds r0, r3, 0
- adds r0, 0x10
- adds r0, r2, r0
- ldr r1, _0811DD80 @ =gUnknown_8459A20
- str r1, [r0]
- adds r3, 0x1C
- adds r2, r3
- ldr r0, _0811DD84 @ =SpriteCallbackDummy
- str r0, [r2]
- adds r0, r4, 0
- bl InitSpriteAffineAnim
- adds r0, r4, 0
- b _0811DD8A
- .align 2, 0
-_0811DD7C: .4byte gSprites
-_0811DD80: .4byte gUnknown_8459A20
-_0811DD84: .4byte SpriteCallbackDummy
-_0811DD88:
- movs r0, 0
-_0811DD8A:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_811DD20
-
- thumb_func_start sub_811DD90
-sub_811DD90: @ 811DD90
- push {lr}
- ldr r0, _0811DDA0 @ =sub_811DDA4
- bl FuncIsActiveTask
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_0811DDA0: .4byte sub_811DDA4
- thumb_func_end sub_811DD90
-
- thumb_func_start sub_811DDA4
-sub_811DDA4: @ 811DDA4
- push {r4-r6,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- ldr r1, _0811DDD4 @ =gTasks+0x8
- adds r4, r0, r1
- adds r0, r6, 0
- movs r1, 0x4
- bl GetWordTaskArg
- adds r5, r0, 0
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r0, 0x4
- bls _0811DDCA
- b _0811DF0C
-_0811DDCA:
- lsls r0, 2
- ldr r1, _0811DDD8 @ =_0811DDDC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0811DDD4: .4byte gTasks+0x8
-_0811DDD8: .4byte _0811DDDC
- .align 2, 0
-_0811DDDC:
- .4byte _0811DDF0
- .4byte _0811DE2A
- .4byte _0811DE7C
- .4byte _0811DEA0
- .4byte _0811DEF0
-_0811DDF0:
- ldrh r0, [r4, 0x2]
- adds r0, 0x1
- strh r0, [r4, 0x2]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x14
- bgt _0811DE00
- b _0811DF0C
-_0811DE00:
- movs r0, 0
- strh r0, [r4, 0x2]
- movs r0, 0xBB
- bl PlaySE
- adds r2, r5, 0
- adds r2, 0x3E
- ldrb r1, [r2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- movs r2, 0x16
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bne _0811DE24
- bl sub_811E588
-_0811DE24:
- movs r0, 0x1
- strh r0, [r4]
- b _0811DF0C
-_0811DE2A:
- ldrh r0, [r4, 0x2]
- adds r0, 0x1
- strh r0, [r4, 0x2]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1E
- ble _0811DF0C
- movs r0, 0
- strh r0, [r4, 0x2]
- ldr r0, _0811DE78 @ =gUnknown_8459AA8
- str r0, [r5, 0x10]
- ldrb r1, [r4, 0x4]
- adds r0, r5, 0
- bl StartSpriteAffineAnim
- movs r0, 0x1
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 24
- movs r2, 0x80
- lsls r2, 9
- lsls r2, r0
- movs r1, 0x2
- negs r1, r1
- ldrh r0, [r4, 0x12]
- str r0, [sp]
- adds r0, r2, 0
- movs r2, 0
- movs r3, 0xC
- bl BeginNormalPaletteFade
- movs r0, 0x2
- strh r0, [r4]
- movs r0, 0xDA
- bl PlaySE
- b _0811DF0C
- .align 2, 0
-_0811DE78: .4byte gUnknown_8459AA8
-_0811DE7C:
- adds r0, r5, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0811DF0C
- adds r2, r5, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2]
- movs r0, 0x14
- strh r0, [r4, 0x14]
- movs r0, 0x3
- strh r0, [r4]
- b _0811DF0C
-_0811DEA0:
- ldrh r0, [r4, 0x2]
- adds r0, 0x1
- strh r0, [r4, 0x2]
- lsls r0, 16
- asrs r0, 16
- movs r2, 0x14
- ldrsh r1, [r4, r2]
- cmp r0, r1
- ble _0811DF0C
- movs r0, 0
- strh r0, [r4, 0x2]
- movs r1, 0x16
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _0811DEC8
- adds r0, r6, 0
- adds r1, r4, 0
- adds r2, r5, 0
- bl sub_811DF14
-_0811DEC8:
- movs r2, 0xE
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bne _0811DED6
- movs r0, 0xD2
- bl PlaySE
-_0811DED6:
- ldrh r0, [r4, 0xE]
- adds r0, 0x1
- strh r0, [r4, 0xE]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x2
- ble _0811DEEA
- movs r0, 0x4
- strh r0, [r4]
- b _0811DF0C
-_0811DEEA:
- movs r0, 0x8
- strh r0, [r4, 0x14]
- b _0811DF0C
-_0811DEF0:
- movs r1, 0x10
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _0811DF0C
- movs r2, 0xC
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _0811DF06
- adds r0, r5, 0
- bl DestroySprite
-_0811DF06:
- adds r0, r6, 0
- bl DestroyTask
-_0811DF0C:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_811DDA4
-
- thumb_func_start sub_811DF14
-sub_811DF14: @ 811DF14
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- adds r7, r1, 0
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- movs r0, 0x20
- ldrsh r5, [r2, r0]
- movs r1, 0x24
- ldrsh r0, [r2, r1]
- adds r5, r0
- subs r5, 0x4
- movs r0, 0x22
- ldrsh r4, [r2, r0]
- movs r1, 0x26
- ldrsh r0, [r2, r1]
- adds r4, r0
- subs r4, 0x4
- movs r0, 0x5
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x80
- lsls r1, 9
- lsls r1, r0
- ldrh r2, [r7, 0x12]
- adds r0, r1, 0
- movs r1, 0x10
- bl BlendPalettes
- movs r6, 0
- ldr r2, _0811DFB4 @ =gSprites
- mov r8, r2
- movs r0, 0x1C
- add r0, r8
- mov r10, r0
- lsls r5, 16
- lsls r4, 16
-_0811DF68:
- ldr r0, _0811DFB8 @ =gUnknown_8459B30
- asrs r1, r5, 16
- asrs r2, r4, 16
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _0811DFA0
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- mov r2, r8
- adds r0, r1, r2
- lsls r2, r6, 4
- strh r2, [r0, 0x30]
- mov r2, r9
- strh r2, [r0, 0x3C]
- add r1, r10
- ldr r2, _0811DFBC @ =sub_811DFC0
- str r2, [r1]
- movs r1, 0x1
- bl StartSpriteAnim
- ldrh r0, [r7, 0x10]
- adds r0, 0x1
- strh r0, [r7, 0x10]
-_0811DFA0:
- adds r6, 0x1
- cmp r6, 0xE
- ble _0811DF68
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0811DFB4: .4byte gSprites
-_0811DFB8: .4byte gUnknown_8459B30
-_0811DFBC: .4byte sub_811DFC0
- thumb_func_end sub_811DF14
-
- thumb_func_start sub_811DFC0
-sub_811DFC0: @ 811DFC0
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r3, r4, 0
- adds r3, 0x2E
- ldrh r1, [r4, 0x2E]
- movs r2, 0x2E
- ldrsh r0, [r4, r2]
- cmp r0, 0xF
- bgt _0811E01C
- adds r0, r1, 0x1
- strh r0, [r4, 0x2E]
- ldrh r0, [r3, 0x2]
- adds r0, 0x7
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r3, 0x2]
- ldrh r0, [r3, 0x4]
- adds r0, 0x4
- strh r0, [r3, 0x4]
- movs r5, 0x4
- ldrsh r1, [r3, r5]
- ldr r2, _0811E018 @ =gSineTable
- movs r5, 0x2
- ldrsh r0, [r3, r5]
- adds r0, 0x40
- lsls r0, 1
- adds r0, r2
- movs r5, 0
- ldrsh r0, [r0, r5]
- muls r0, r1
- asrs r0, 8
- strh r0, [r4, 0x24]
- movs r0, 0x4
- ldrsh r1, [r3, r0]
- movs r5, 0x2
- ldrsh r0, [r3, r5]
- lsls r0, 1
- adds r0, r2
- movs r2, 0
- ldrsh r0, [r0, r2]
- muls r0, r1
- asrs r0, 8
- strh r0, [r4, 0x26]
- b _0811E036
- .align 2, 0
-_0811E018: .4byte gSineTable
-_0811E01C:
- ldr r2, _0811E03C @ =gTasks
- movs r5, 0xE
- ldrsh r1, [r3, r5]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- ldrh r1, [r0, 0x18]
- subs r1, 0x1
- strh r1, [r0, 0x18]
- adds r0, r4, 0
- bl DestroySprite
-_0811E036:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0811E03C: .4byte gTasks
- thumb_func_end sub_811DFC0
-
- thumb_func_start sub_811E040
-sub_811E040: @ 811E040
- push {lr}
- ldr r0, _0811E064 @ =sub_811DDA4
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0xFF
- beq _0811E05E
- ldr r0, _0811E068 @ =gTasks
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 3
- adds r1, r0
- movs r0, 0x1
- strh r0, [r1, 0x1E]
-_0811E05E:
- pop {r0}
- bx r0
- .align 2, 0
-_0811E064: .4byte sub_811DDA4
-_0811E068: .4byte gTasks
- thumb_func_end sub_811E040
-
thumb_func_start sub_811E06C
sub_811E06C: @ 811E06C
push {r4-r7,lr}
diff --git a/data/pokemon_special_anim.s b/data/pokemon_special_anim.s
index b944a4aed..7f56c11ad 100644
--- a/data/pokemon_special_anim.s
+++ b/data/pokemon_special_anim.s
@@ -5,129 +5,3 @@
.include "constants/constants.inc"
.section .rodata
.align 2
-
-gUnknown_84599A4:: @ 84599A4
- .2byte 0x0000, 0x0010
-
-gUnknown_84599A8:: @ 84599A8 unref, data16?
- .2byte 0x0044
-
-gUnknown_84599AA:: @ 84599AA data16
- .2byte 0x0100, 0x0155, 0x01aa, 0x0200
-
-gUnknown_84599B2:: @ 84599B2 data8
- .byte 0xf8, 0xf8, 0x06, 0xf3, 0x08, 0xf8
-
-gUnknown_84599B8:: @ 84599B8 sprite_sheet
- obj_tiles gUnknown_84598C4, 0x0080, 2
-
-gUnknown_84599C0:: @ 84599C0 sprite_palette
- obj_pal gUnknown_84598A4, 2
-
-gUnknown_84599C8:: @ 84599C8 sprite_sheet
- obj_tiles gUnknown_8459960, 0x0060, 5
-
-gUnknown_84599D0:: @ 84599D0 sprite_palette
- obj_pal gUnknown_8459940, 5
-
-gUnknown_84599D8:: @ 84599D8
- .4byte 0xc0000300, 0x00000400
-
-gUnknown_84599E0:: @ 84599E0
- obj_rot_scal_anim_frame 256, 256, 0, 0
- obj_rot_scal_anim_end
-
-gUnknown_84599F0:: @ 84599F0
- obj_rot_scal_anim_frame 341, 341, 0, 0
- obj_rot_scal_anim_end
-
-gUnknown_8459A00:: @ 8459A00
- obj_rot_scal_anim_frame 426, 426, 0, 0
- obj_rot_scal_anim_end
-
-gUnknown_8459A10:: @ 8459A10
- obj_rot_scal_anim_frame 512, 512, 0, 0
- obj_rot_scal_anim_end
-
-gUnknown_8459A20:: @ 8459A20 dataptr
- .4byte gUnknown_84599E0
- .4byte gUnknown_84599F0
- .4byte gUnknown_8459A00
- .4byte gUnknown_8459A10
-
-gUnknown_8459A30:: @ 8459A30 spr_template
- spr_template 0, 0, gUnknown_84599D8, gDummySpriteAnimTable, NULL, gUnknown_8459A20, SpriteCallbackDummy
-
-gUnknown_8459A48:: @ 8459A48 affine_anim_cmd?
- obj_rot_scal_anim_frame 256, 256, 0, 0
- obj_rot_scal_anim_frame -28, -28, 0, 8
- obj_rot_scal_anim_end
-
-gUnknown_8459A60:: @ 459A60
- obj_rot_scal_anim_frame 341, 341, 0, 0
- obj_rot_scal_anim_frame -37, -37, 0, 8
- obj_rot_scal_anim_end
-
-gUnknown_8459A78:: @ 459A78
- obj_rot_scal_anim_frame 426, 426, 0, 0
- obj_rot_scal_anim_frame -47, -47, 0, 8
- obj_rot_scal_anim_end
-
-gUnknown_8459A90:: @ 459A90
- obj_rot_scal_anim_frame 512, 512, 0, 0
- obj_rot_scal_anim_frame -56, -56, 0, 8
- obj_rot_scal_anim_end
-
-gUnknown_8459AA8:: @ 8459AA8 dataptr
- .4byte gUnknown_8459A48
- .4byte gUnknown_8459A60
- .4byte gUnknown_8459A78
- .4byte gUnknown_8459A90
-
-gUnknown_8459AB8:: @ 8459AB8
- .4byte 0x00008400, 0x00000400
-
-gUnknown_8459AC0:: @ 8459AC0
- obj_image_anim_frame 0x0000, 3
- obj_image_anim_end
-
-gUnknown_8459AC8:: @ 8459AC8
- .4byte gUnknown_8459AC0
-
-gUnknown_8459ACC:: @ 8459ACC spr_template
- spr_template 0, 0, gUnknown_8459AB8, gUnknown_8459AC8, NULL, gDummySpriteAffineAnimTable, sub_811E7B4
-
-gUnknown_8459AE4:: @ 8459AE4
- .4byte 0x40000000, 0x00000400
-
-gUnknown_8459AEC:: @ 8459AEC spr_template
- spr_template 2, 2, gUnknown_8459AE4, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_811E300
-
-gUnknown_8459B04:: @ 8459B04
- .4byte 0x00000000, 0x00000000
-
-gUnknown_8459B0C:: @ 8459B0C
- obj_image_anim_frame 0x0000, 16
- obj_image_anim_frame 0x0001, 8
- obj_image_anim_frame 0x0002, 4
- obj_image_anim_end
-
-gUnknown_8459B1C:: @ 8459B1C
- obj_image_anim_frame 0x0001, 4
- obj_image_anim_frame 0x0000, 4
- obj_image_anim_end
-
-gUnknown_8459B28:: @ 8459B28
- .4byte gUnknown_8459B0C
- .4byte gUnknown_8459B1C
-
-gUnknown_8459B30:: @ 8459B30 spr_template
- spr_template 5, 5, gUnknown_8459B04, gUnknown_8459B28, NULL, gDummySpriteAffineAnimTable, sub_811E520
-
-gUnknown_8459B48:: @ 8459B48 dataptr
- .4byte gUnknown_841B2A9
- .4byte gUnknown_841B2B7
- .4byte gUnknown_841B2BE
- .4byte gUnknown_841B2CC
- .4byte gUnknown_841B2D4
- .4byte gUnknown_841B2C6
diff --git a/include/pokemon_special_anim_internal.h b/include/pokemon_special_anim_internal.h
index 07acd3443..0777d492b 100644
--- a/include/pokemon_special_anim_internal.h
+++ b/include/pokemon_special_anim_internal.h
@@ -8,7 +8,10 @@ struct PokemonSpecialAnimScene
u16 field_0000;
u8 filler_0002[2];
u16 field_0004;
- u8 filler_0006[0xA];
+ u16 field_0006;
+ u16 field_0008;
+ u8 field_000a;
+ struct Sprite * field_000c;
struct Sprite * field_0010;
u8 field_0014[0x900];
u8 field_0914[BG_SCREEN_SIZE];
@@ -57,7 +60,7 @@ bool8 sub_811D280(void);
void sub_811D29C(void);
void sub_811D2A8(void);
void sub_811D2D0(void);
-void sub_811D2EC(u8 a0);
+void sub_811D2EC(u8 messageId);
void sub_811D4D4(void);
bool8 sub_811D4EC(void);
void sub_811D4FC(void);
@@ -68,10 +71,10 @@ bool8 sub_811D5C0(void);
void sub_811D6EC(void);
bool8 sub_811D6FC(void);
bool8 sub_811D754(void);
-void sub_811D830(u8 a0);
+void sub_811D830(u8 closeness);
void sub_811D948(u8 closeness);
bool8 sub_811D9A8(void);
-void sub_811DC54(u16 itemId, u8 closeness, u8 a2);
+void sub_811DC54(u16 itemId, u8 closeness, bool32 a2);
void sub_811DCF0(u16 itemId);
bool8 sub_811DD90(void);
void sub_811E040(void);
diff --git a/include/strings.h b/include/strings.h
index 809a17d9d..3fd24516d 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -1454,5 +1454,11 @@ extern const u8 gUnknown_841B306[];
extern const u8 gUnknown_841B315[];
extern const u8 gUnknown_841B31B[];
extern const u8 gUnknown_841B329[];
+extern const u8 gUnknown_841B2A9[];
+extern const u8 gUnknown_841B2B7[];
+extern const u8 gUnknown_841B2BE[];
+extern const u8 gUnknown_841B2CC[];
+extern const u8 gUnknown_841B2D4[];
+extern const u8 gUnknown_841B2C6[];
#endif //GUARD_STRINGS_H
diff --git a/ld_script.txt b/ld_script.txt
index bd57e8664..40547541f 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -557,7 +557,6 @@ SECTIONS {
src/union_room_message.o(.rodata);
src/pokemon_special_anim.o(.rodata);
src/pokemon_special_anim_scene.o(.rodata);
- data/pokemon_special_anim.o(.rodata);
src/party_menu.o(.rodata);
src/union_room_chat.o(.rodata);
src/union_room_chat_display.o(.rodata);
diff --git a/src/pokemon_special_anim.c b/src/pokemon_special_anim.c
index b743d65a3..5dcb9821d 100644
--- a/src/pokemon_special_anim.c
+++ b/src/pokemon_special_anim.c
@@ -208,7 +208,7 @@ void sub_811C834(u8 taskId)
}
break;
case 6:
- sub_811DC54(ptr->itemId, ptr->closeness, 1);
+ sub_811DC54(ptr->itemId, ptr->closeness, TRUE);
ptr->state++;
break;
case 7:
@@ -414,7 +414,7 @@ void sub_811CBE4(u8 taskId)
ptr->state++;
break;
case 4:
- sub_811DC54(ptr->itemId, ptr->closeness, 0);
+ sub_811DC54(ptr->itemId, ptr->closeness, FALSE);
ptr->state++;
break;
case 5:
diff --git a/src/pokemon_special_anim_scene.c b/src/pokemon_special_anim_scene.c
index 50d546415..7184b5198 100644
--- a/src/pokemon_special_anim_scene.c
+++ b/src/pokemon_special_anim_scene.c
@@ -1,23 +1,46 @@
#include "global.h"
#include "gflib.h"
+#include "data.h"
+#include "decompress.h"
#include "dynamic_placeholder_text_util.h"
#include "item.h"
+#include "item_menu_icons.h"
#include "menu.h"
#include "new_menu_helpers.h"
#include "pokemon_special_anim_internal.h"
#include "strings.h"
#include "text_window.h"
+#include "trig.h"
#include "constants/songs.h"
void sub_811D7D4(u16 animType);
+void sub_811D9BC(u8 taskId);
+void sub_811DA9C(struct Sprite * sprite, u8 closeness);
+bool8 sub_811DAAC(struct Sprite * sprite);
+void sub_811DB14(struct Sprite * sprite, u8 closeness);
+void sub_811DB48(struct Sprite * sprite, u8 closeness);
void sub_811DB7C(struct PokemonSpecialAnimScene * scene, u8 a1, u8 a2, u8 a3);
void sub_811DBA8(struct PokemonSpecialAnimScene * scene);
+void sub_811DBBC(struct Sprite * sprite);
+void sub_811DC14(u16 *tilees, u16 *palette);
+struct Sprite * sub_811DD20(u16 itemId);
+u16 sub_811DCE8(u16 itemId);
+void sub_811DDA4(u8 taskId);
+void sub_811DF14(u8 taskId, s16 *data, struct Sprite * sprite);
+void sub_811DFC0(struct Sprite * sprite);
+void sub_811E06C(struct PokemonSpecialAnimScene * scene, struct Sprite * sprite, u8 closeness);
+void sub_811E10C(void);
+bool8 sub_811E138(void);
void sub_811E194(u8 a0);
void sub_811E204(struct PokemonSpecialAnimScene * scene);
bool8 sub_811E2F4(void);
+void sub_811E300(struct Sprite * sprite);
void sub_811E348(struct PokemonSpecialAnimScene * scene);
void sub_811E388(void);
+void sub_811E520(struct Sprite * sprite);
+void sub_811E588(void);
bool32 sub_811E5A4(void);
+void sub_811E7B4(struct Sprite * sprite);
const u16 gUnknown_845963C[] = INCBIN_U16("graphics/pokemon_special_anim/unk_845963C.gbapal");
const u16 gUnknown_845965C[] = INCBIN_U16("graphics/pokemon_special_anim/unk_845965C.gbapal");
@@ -68,6 +91,238 @@ const u8 *const gUnknown_8459998[] = {
gUnknown_841B2FF, // Poof!
};
+const u16 sUnref_84599A4[] = {
+ 0, 16, 68
+};
+
+const u16 gUnknown_84599AA[] = {
+ 0x100,
+ 0x155,
+ 0x1AA,
+ 0x200
+};
+
+const s8 gUnknown_84599B2[] = {
+ -8, -8, 6, -13, 8, -8
+};
+
+const struct CompressedSpriteSheet gUnknown_84599B8 = {
+ gUnknown_84598C4,
+ 0x80,
+ 2
+};
+
+const struct SpritePalette gUnknown_84599C0 = {
+ gUnknown_84598A4,
+ 2
+};
+
+const struct CompressedSpriteSheet gUnknown_84599C8 = {
+ gUnknown_8459960,
+ 0x60,
+ 5
+};
+
+const struct SpritePalette gUnknown_84599D0 = {
+ gUnknown_8459940,
+ 5
+};
+
+const struct OamData gUnknown_84599D8 = {
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_DOUBLE,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = FALSE,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(64x64),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(64x64),
+ .tileNum = 0x000,
+ .priority = 1,
+ .paletteNum = 0
+};
+
+
+const union AffineAnimCmd gUnknown_84599E0[] = {
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_END
+};
+
+const union AffineAnimCmd gUnknown_84599F0[] = {
+ AFFINEANIMCMD_FRAME(0x155, 0x155, 0, 0),
+ AFFINEANIMCMD_END
+};
+
+const union AffineAnimCmd gUnknown_8459A00[] = {
+ AFFINEANIMCMD_FRAME(0x1AA, 0x1AA, 0, 0),
+ AFFINEANIMCMD_END
+};
+
+const union AffineAnimCmd gUnknown_8459A10[] = {
+ AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0),
+ AFFINEANIMCMD_END
+};
+
+const union AffineAnimCmd *const gUnknown_8459A20[] = {
+ gUnknown_84599E0,
+ gUnknown_84599F0,
+ gUnknown_8459A00,
+ gUnknown_8459A10
+};
+
+const struct SpriteTemplate gUnknown_8459A30 = {
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &gUnknown_84599D8,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_8459A20,
+ .callback = SpriteCallbackDummy
+};
+
+const union AffineAnimCmd gUnknown_8459A48[] = {
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(-28, -28, 0, 8),
+ AFFINEANIMCMD_END
+};
+
+const union AffineAnimCmd gUnknown_8459A60[] = {
+ AFFINEANIMCMD_FRAME(0x155, 0x155, 0, 0),
+ AFFINEANIMCMD_FRAME(-37, -37, 0, 8),
+ AFFINEANIMCMD_END
+};
+
+const union AffineAnimCmd gUnknown_8459A78[] = {
+ AFFINEANIMCMD_FRAME(0x1AA, 0x1AA, 0, 0),
+ AFFINEANIMCMD_FRAME(-47, -47, 0, 8),
+ AFFINEANIMCMD_END
+};
+
+const union AffineAnimCmd gUnknown_8459A90[] = {
+ AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0),
+ AFFINEANIMCMD_FRAME(-56, -56, 0, 8),
+ AFFINEANIMCMD_END
+};
+
+const union AffineAnimCmd *const gUnknown_8459AA8[] = {
+ gUnknown_8459A48,
+ gUnknown_8459A60,
+ gUnknown_8459A78,
+ gUnknown_8459A90
+};
+
+const struct OamData gUnknown_8459AB8 = {
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_BLEND,
+ .mosaic = FALSE,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(8x16),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(8x16),
+ .tileNum = 0x000,
+ .priority = 1,
+ .paletteNum = 0
+};
+
+const union AnimCmd gUnknown_8459AC0[] = {
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_END
+};
+
+const union AnimCmd *const gUnknown_8459AC8[] = {
+ gUnknown_8459AC0
+};
+
+const struct SpriteTemplate gUnknown_8459ACC = {
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &gUnknown_8459AB8,
+ .anims = gUnknown_8459AC8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_811E7B4
+};
+
+const struct OamData gUnknown_8459AE4 = {
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = FALSE,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(16x16),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(16x16),
+ .tileNum = 0x000,
+ .priority = 1,
+ .paletteNum = 0
+};
+
+const struct SpriteTemplate gUnknown_8459AEC = {
+ .tileTag = 2,
+ .paletteTag = 2,
+ .oam = &gUnknown_8459AE4,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_811E300
+};
+
+const struct OamData gUnknown_8459B04 = {
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = FALSE,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(8x8),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(8x8),
+ .tileNum = 0x000,
+ .priority = 0,
+ .paletteNum = 0
+};
+
+const union AnimCmd gUnknown_8459B0C[] = {
+ ANIMCMD_FRAME(0, 16),
+ ANIMCMD_FRAME(1, 8),
+ ANIMCMD_FRAME(2, 4),
+ ANIMCMD_END
+};
+
+const union AnimCmd gUnknown_8459B1C[] = {
+ ANIMCMD_FRAME(1, 4),
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_END
+};
+
+const union AnimCmd *const gUnknown_8459B28[] = {
+ gUnknown_8459B0C,
+ gUnknown_8459B1C
+};
+
+const struct SpriteTemplate gUnknown_8459B30 = {
+ .tileTag = 5,
+ .paletteTag = 5,
+ .oam = &gUnknown_8459B04,
+ .anims = gUnknown_8459B28,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_811E520
+};
+
+const u8 *const gUnknown_8459B48[] = {
+ gUnknown_841B2A9,
+ gUnknown_841B2B7,
+ gUnknown_841B2BE,
+ gUnknown_841B2CC,
+ gUnknown_841B2D4,
+ gUnknown_841B2C6
+};
+
void sub_811D184(struct PokemonSpecialAnimScene * buffer, u16 animType)
{
FreeAllWindowBuffers();
@@ -126,18 +381,17 @@ void sub_811D2D0(void)
CopyWindowToVram(0, 1);
}
-void sub_811D2EC(u8 a0)
+void sub_811D2EC(u8 messageId)
{
- // a0 --> r5
- struct PokemonSpecialAnimScene * scene = sub_811D0A8(); // r4
- u16 itemId = sub_811D0B4(); // r7
- u16 strWidth = 0; // r8
- u8 textSpeed = GetTextSpeedSetting(); // r9
- struct Pokemon * pokemon = sub_811D094(); // r6
+ struct PokemonSpecialAnimScene * scene = sub_811D0A8();
+ u16 itemId = sub_811D0B4();
+ u16 strWidth = 0;
+ u8 textSpeed = GetTextSpeedSetting();
+ struct Pokemon * pokemon = sub_811D094();
u16 level;
u8 *str;
- switch (a0)
+ switch (messageId)
{
case 0: // Item was used on Mon
str = StringCopy(scene->field_0014, ItemId_GetName(itemId));
@@ -167,7 +421,7 @@ void sub_811D2EC(u8 a0)
strWidth += GetStringWidth(2, gUnknown_841B2ED, -1);
// fallthrough
case 2: // 1
- StringCopy(scene->field_0014, gUnknown_8459998[a0 - 2]);
+ StringCopy(scene->field_0014, gUnknown_8459998[messageId - 2]);
textSpeed = 1;
break;
case 5: // Mon forgot move
@@ -316,3 +570,431 @@ bool8 sub_811D5C0(void)
}
return TRUE;
}
+
+void sub_811D6EC(void)
+{
+ struct PokemonSpecialAnimScene * scene = sub_811D0A8();
+ scene->field_0000 = 0;
+}
+
+bool8 sub_811D6FC(void)
+{
+ struct PokemonSpecialAnimScene * scene = sub_811D0A8();
+
+ switch (scene->field_0000)
+ {
+ case 0:
+ sub_811E10C();
+ PlaySE(SE_MU_PACHI);
+ scene->field_0000++;
+ break;
+ case 1:
+ return sub_811E138();
+ }
+ return TRUE;
+}
+
+void sub_811D734(void)
+{
+ sub_811E5B8(120, 56, 4, 4, 2, 0);
+}
+
+bool8 sub_811D754(void)
+{
+ return sub_811E680();
+}
+
+void sub_811D764(u16 *statsBefore, u16 *statsAfter)
+{
+ DrawTextBorderOuter(1, 0x001, 0xE);
+ DrawLevelUpWindowPg1(1, statsBefore, statsAfter, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY);
+ PutWindowTilemap(1);
+ CopyWindowToVram(1, 3);
+}
+void sub_811D7A0(u16 *currStats)
+{
+ DrawLevelUpWindowPg2(1, currStats, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY);
+ CopyWindowToVram(1, 2);
+}
+
+bool8 sub_811D7C4(void)
+{
+ return IsDma3ManagerBusyWithBgCopy();
+}
+
+void sub_811D7D4(u16 animType)
+{
+ CopyToBgTilemapBuffer(3, gUnknown_845973C, 0, 0x000);
+ DecompressAndCopyTileDataToVram(3, gUnknown_845967C, 0, 0x000, 0);
+ if (animType != 4)
+ LoadPalette(gUnknown_845963C, 0x00, 0x20);
+ else
+ LoadPalette(gUnknown_845965C, 0x00, 0x20);
+}
+
+void sub_811D830(u8 closeness)
+{
+ struct PokemonSpecialAnimScene * scene = sub_811D0A8();
+ struct Pokemon * pokemon = sub_811D094();
+ u16 species = GetMonData(pokemon, MON_DATA_SPECIES);
+ u32 personality = GetMonData(pokemon, MON_DATA_PERSONALITY);
+ u8 r1 = sub_812EA78(species, personality, 2);
+ void * r6;
+ void * r9;
+ void * r4;
+ u8 spriteId;
+
+ if (r1 != 0xFF)
+ {
+ scene->field_0006 = 0x48;
+ scene->field_0008 = r1 + 0x30;
+ }
+ else
+ {
+ scene->field_0006 = 0x48;
+ scene->field_0008 = 0x60;
+ }
+
+ r6 = Alloc(0x2000);
+ r9 = Alloc(0x2000);
+ r4 = Alloc(0x100);
+ if (r6 != NULL && r9 != NULL && r4 != NULL)
+ {
+ HandleLoadSpecialPokePic(&gMonFrontPicTable[species], r6, species, personality);
+ LZ77UnCompWram(GetMonFrontSpritePal(pokemon), r4);
+ sub_811DC14(r6, r4);
+ spriteId = CreateSprite(&gUnknown_8459A30, 120, scene->field_0006, 4);
+ if (spriteId != MAX_SPRITES)
+ {
+ scene->field_000c = &gSprites[spriteId];
+ sub_811DB14(scene->field_000c, closeness);
+ }
+ else
+ scene->field_000c = NULL;
+ scene->field_000a = closeness;
+ }
+ if (r6 != NULL) Free(r6);
+ if (r9 != NULL) Free(r9);
+ if (r4 != NULL) Free(r4);
+}
+
+void sub_811D948(u8 closeness)
+{
+ struct PokemonSpecialAnimScene * scene = sub_811D0A8();
+ u8 taskId;
+ if (closeness != scene->field_000a)
+ {
+ taskId = CreateTask(sub_811D9BC, 4);
+ SetWordTaskArg(taskId, 6, (uintptr_t)scene->field_000c);
+ gTasks[taskId].data[1] = scene->field_000a;
+ gTasks[taskId].data[2] = closeness;
+ gTasks[taskId].data[5] = 6;
+ if (closeness > scene->field_000a)
+ gTasks[taskId].data[3] = 1;
+ else
+ gTasks[taskId].data[3] = -1;
+ }
+}
+
+bool8 sub_811D9A8(void)
+{
+ return FuncIsActiveTask(sub_811D9BC);
+}
+
+void sub_811D9BC(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+ struct Sprite * sprite = (void *)GetWordTaskArg(taskId, 6);
+ switch (data[0])
+ {
+ case 0:
+ sub_811DA9C(sprite, data[1]);
+ if (data[8])
+ sub_811DA9C((void *)GetWordTaskArg(taskId, 9), data[1]);
+ data[1] += data[3];
+ data[0]++;
+ break;
+ case 1:
+ if (!sub_811DAAC(sprite))
+ {
+ PlaySE(SE_TB_KARA);
+ sub_811DB14(sprite, data[1]);
+ if (data[8])
+ sub_811DB48((void *)GetWordTaskArg(taskId, 9), data[1]);
+ if (data[1] == data[2])
+ {
+ sub_811D0A8()->field_000a = data[2];
+ DestroyTask(taskId);
+ }
+ else
+ {
+ data[4] = 0;
+ data[0] = 2;
+ }
+ }
+ break;
+ case 2:
+ data[4]++;
+ if (data[4] > data[5])
+ data[0] = 0;
+ break;
+ }
+}
+
+void sub_811DA9C(struct Sprite * sprite, u8 closeness)
+{
+ sprite->data[0] = 0;
+ sprite->data[1] = 0;
+ sprite->data[2] = closeness;
+}
+
+bool8 sub_811DAAC(struct Sprite * sprite)
+{
+ return sprite->callback != SpriteCallbackDummy;
+}
+
+s16 sub_811DAC0(s16 pos, u8 closeness)
+{
+ return (pos * gUnknown_84599AA[closeness]) >> 8;
+}
+
+// FIXME: better math
+u16 sub_811DADC(u16 pos)
+{
+ struct PokemonSpecialAnimScene * scene = sub_811D0A8();
+ s32 v = ((((((scene->field_0008 - scene->field_0006) << 16) >> 8) / 256 * (pos - 256)) << 8) >> 16);
+ return v += scene->field_0006;
+}
+
+void sub_811DB14(struct Sprite * sprite, u8 closeness)
+{
+ if (closeness > 3)
+ closeness = 3;
+ sub_811D0A8(); // return value not used
+ StartSpriteAffineAnim(sprite, closeness);
+ sprite->pos1.y = sub_811DADC(gUnknown_84599AA[closeness]);
+}
+
+void sub_811DB48(struct Sprite * sprite, u8 closeness)
+{
+ sub_811DB14(sprite, closeness);
+ sprite->pos2.x = sub_811DAC0(sprite->data[6] - 32, closeness);
+ sprite->pos2.y = sub_811DAC0(sprite->data[7] - 32, closeness);
+}
+
+void sub_811DB7C(struct PokemonSpecialAnimScene * scene, u8 a1, u8 a2, u8 a3)
+{
+ scene->field_000c->data[0] = a1;
+ scene->field_000c->data[1] = a2;
+ scene->field_000c->data[2] = a3;
+ scene->field_000c->callback = sub_811DBBC;
+}
+
+void sub_811DBA8(struct PokemonSpecialAnimScene * scene)
+{
+ scene->field_000c->pos2.x = 0;
+ scene->field_000c->callback = SpriteCallbackDummy;
+}
+
+void sub_811DBBC(struct Sprite * sprite)
+{
+ sprite->data[7]++;
+ if (sprite->data[7] > sprite->data[0])
+ {
+ sprite->data[7] = 0;
+ sprite->data[6]++;
+ if (sprite->data[1] != 0 && sprite->data[6] >= sprite->data[1])
+ {
+ sprite->pos2.x = 0;
+ sprite->callback = SpriteCallbackDummy;
+ }
+ else if (sprite->data[6] & 1)
+ sprite->pos2.x = sprite->data[2];
+ else
+ sprite->pos2.x = -sprite->data[2];
+ }
+}
+
+void sub_811DC14(u16 *tiles, u16 *palette)
+{
+ struct SpriteSheet spriteSheet;
+ struct SpritePalette spritePalette;
+
+ spriteSheet.data = tiles;
+ spriteSheet.size = 0x800;
+ spriteSheet.tag = 0;
+ spritePalette.data = palette;
+ spritePalette.tag = 0;
+ LoadSpriteSheet(&spriteSheet);
+ LoadSpritePalette(&spritePalette);
+}
+
+void sub_811DC54(u16 itemId, u8 closeness, bool32 a2)
+{
+ struct PokemonSpecialAnimScene * scene = sub_811D0A8();
+ u8 taskId;
+ scene->field_0010 = sub_811DD20(itemId);
+ if (scene->field_0010 != NULL)
+ {
+ sub_811E06C(scene, scene->field_0010, closeness);
+ StartSpriteAffineAnim(scene->field_0010, closeness);
+ scene->field_0010->invisible = TRUE;
+ taskId = CreateTask(sub_811DDA4, 2);
+ SetWordTaskArg(taskId, 4, (uintptr_t)scene->field_0010);
+ gTasks[taskId].data[2] = closeness;
+ gTasks[taskId].data[3] = sub_811DADC(gUnknown_84599AA[closeness]);
+ gTasks[taskId].data[6] = a2;
+ gTasks[taskId].data[9] = sub_811DCE8(itemId);
+ }
+}
+
+u16 sub_811DCE8(u16 itemId)
+{
+ return RGB_WHITE;
+}
+
+void sub_811DCF0(u16 itemId)
+{
+ struct PokemonSpecialAnimScene * scene = sub_811D0A8();
+ scene->field_0010 = sub_811DD20(itemId);
+ if (scene->field_0010 != NULL)
+ {
+ StartSpriteAffineAnim(scene->field_0010, 3);
+ sub_811E06C(scene, scene->field_0010, 3);
+ }
+}
+
+struct Sprite * sub_811DD20(u16 itemId)
+{
+ u8 spriteId;
+ struct Sprite * sprite;
+ spriteId = AddItemIconObject(1, 1, itemId);
+ if (spriteId == MAX_SPRITES)
+ return NULL;
+ gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_DOUBLE;
+ gSprites[spriteId].oam.priority = 1;
+ gSprites[spriteId].subpriority = 1;
+ gSprites[spriteId].affineAnims = gUnknown_8459A20;
+ gSprites[spriteId].callback = SpriteCallbackDummy;
+ InitSpriteAffineAnim(&gSprites[spriteId]);
+ return &gSprites[spriteId];
+}
+
+bool8 sub_811DD90(void)
+{
+ return FuncIsActiveTask(sub_811DDA4);
+}
+
+void sub_811DDA4(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+ struct Sprite * sprite = (void *)GetWordTaskArg(taskId, 4);
+ switch (data[0])
+ {
+ case 0:
+ data[1]++;
+ if (data[1] > 20)
+ {
+ data[1] = 0;
+ PlaySE(SE_W207B);
+ sprite->invisible = FALSE;
+ if (!data[11])
+ sub_811E588();
+ data[0] = 1;
+ }
+ break;
+ case 1:
+ data[1]++;
+ if (data[1] > 30)
+ {
+ data[1] = 0;
+ sprite->affineAnims = gUnknown_8459AA8;
+ StartSpriteAffineAnim(sprite, data[2]);
+ BeginNormalPaletteFade(0x10000 << IndexOfSpritePaletteTag(1), -2, 0, 12, data[9]);
+ data[0] = 2;
+ PlaySE(SE_W208);
+ }
+ break;
+ case 2:
+ if (sprite->affineAnimEnded)
+ {
+ sprite->invisible = TRUE;
+ data[10] = 20;
+ data[0] = 3;
+ }
+ break;
+ case 3:
+ data[1]++;
+ if (data[1] > data[10])
+ {
+ data[1] = 0;
+ if (!data[11])
+ sub_811DF14(taskId, data, sprite);
+ if (data[7] == 0)
+ PlaySE(SE_W179);
+ data[7]++;
+ if (data[7] > 2)
+ data[0] = 4;
+ else
+ data[10] = 8;
+ }
+ break;
+ case 4:
+ if (data[8] == 0)
+ {
+ if (data[6] != 0)
+ DestroySprite(sprite);
+ DestroyTask(taskId);
+ }
+ break;
+ }
+}
+
+void sub_811DF14(u8 taskId, s16 *data, struct Sprite * sprite)
+{
+ int x = sprite->pos1.x + sprite->pos2.x - 4;
+ int y = sprite->pos1.y + sprite->pos2.y - 4;
+ u8 spriteId;
+ int i;
+ BlendPalettes(0x10000 << IndexOfSpritePaletteTag(5), 16, data[9]);
+ for (i = 0; i < 15; i++)
+ {
+ spriteId = CreateSprite(&gUnknown_8459B30, x, y, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].data[1] = i << 4;
+ gSprites[spriteId].data[7] = taskId;
+ gSprites[spriteId].callback = sub_811DFC0;
+ StartSpriteAnim(&gSprites[spriteId], 1);
+ data[8]++;
+ }
+ }
+}
+
+void sub_811DFC0(struct Sprite * sprite)
+{
+ s16 *data = sprite->data;
+ if (data[0] < 16)
+ {
+ data[0]++;
+ data[1] += 7;
+ data[1] &= 0xFF;
+ data[2] += 4;
+ sprite->pos2.x = (data[2] * gSineTable[data[1] + 0x40]) >> 8;
+ sprite->pos2.y = (data[2] * gSineTable[data[1]]) >> 8;
+ }
+ else
+ {
+ gTasks[data[7]].data[8]--;
+ DestroySprite(sprite);
+ }
+}
+
+void sub_811E040(void)
+{
+ u8 taskId = FindTaskIdByFunc(sub_811DDA4);
+ if (taskId != 0xFF)
+ {
+ gTasks[taskId].data[11] = TRUE;
+ }
+}