diff options
author | PikalaxALT <PikalaxALT@gmail.com> | 2020-03-19 20:40:26 -0400 |
---|---|---|
committer | PikalaxALT <PikalaxALT@gmail.com> | 2020-03-19 20:40:26 -0400 |
commit | b36ea2db9873f4a52c5245328b8c846e08757fa3 (patch) | |
tree | a943513fc2e1458952e86194eba196a60be699eb | |
parent | 33b65b547000387fcdce9fe497da9b217544ece6 (diff) |
through sub_811CA20
-rw-r--r-- | asm/pokemon_special_anim.s | 814 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/pokemon_special_anim.c | 412 |
3 files changed, 414 insertions, 814 deletions
diff --git a/asm/pokemon_special_anim.s b/asm/pokemon_special_anim.s index b499f0999..76488e170 100644 --- a/asm/pokemon_special_anim.s +++ b/asm/pokemon_special_anim.s @@ -5,820 +5,6 @@ .text - thumb_func_start sub_811C540 -sub_811C540: @ 811C540 - push {r4,lr} - adds r4, r2, 0 - lsls r0, 24 - lsrs r0, 24 - lsls r1, 16 - lsrs r1, 16 - bl sub_811C5D4 - cmp r0, 0 - bne _0811C55C - adds r0, r4, 0 - bl SetMainCallback2 - b _0811C560 -_0811C55C: - bl sub_811C748 -_0811C560: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_811C540 - - thumb_func_start sub_811C568 -sub_811C568: @ 811C568 - push {r4-r6,lr} - adds r5, r3, 0 - lsls r0, 24 - lsrs r0, 24 - lsls r1, 16 - lsrs r1, 16 - lsls r2, 16 - lsrs r6, r2, 16 - adds r2, r5, 0 - bl sub_811C5D4 - adds r4, r0, 0 - cmp r4, 0 - bne _0811C58C - adds r0, r5, 0 - bl SetMainCallback2 - b _0811C5A2 -_0811C58C: - adds r0, r4, 0 - adds r0, 0x77 - movs r1, 0xD - muls r1, r6 - ldr r2, _0811C5A8 @ =gMoveNames - adds r1, r2 - bl StringCopy - adds r0, r4, 0 - bl sub_811C7BC -_0811C5A2: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0811C5A8: .4byte gMoveNames - thumb_func_end sub_811C568 - - thumb_func_start sub_811C5AC -sub_811C5AC: @ 811C5AC - push {r4,lr} - adds r4, r2, 0 - lsls r0, 24 - lsrs r0, 24 - lsls r1, 16 - lsrs r1, 16 - bl sub_811C5D4 - cmp r0, 0 - bne _0811C5C8 - adds r0, r4, 0 - bl SetMainCallback2 - b _0811C5CC -_0811C5C8: - bl sub_811C7FC -_0811C5CC: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_811C5AC - - thumb_func_start sub_811C5D4 -sub_811C5D4: @ 811C5D4 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - adds r5, r2, 0 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - lsls r1, 16 - lsrs r6, r1, 16 - ldr r0, _0811C61C @ =gMain - ldr r1, _0811C620 @ =0x00000439 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _0811C5FC - bl ResetTasks -_0811C5FC: - bl ResetSpriteData - bl FreeAllSpritePalettes - ldr r0, _0811C624 @ =0x000028dc - bl Alloc - adds r7, r0, 0 - cmp r7, 0 - bne _0811C628 - adds r0, r5, 0 - bl SetMainCallback2 - movs r0, 0 - b _0811C6D2 - .align 2, 0 -_0811C61C: .4byte gMain -_0811C620: .4byte 0x00000439 -_0811C624: .4byte 0x000028dc -_0811C628: - movs r0, 0x64 - mov r4, r8 - muls r4, r0 - ldr r0, _0811C6E0 @ =gPlayerParty - adds r4, r0 - adds r0, r7, 0 - adds r0, 0x92 - movs r1, 0 - mov r9, r1 - mov r1, r9 - strh r1, [r0] - str r5, [r7, 0x4] - adds r0, r4, 0 - movs r1, 0xB - bl GetMonData - adds r1, r7, 0 - adds r1, 0x94 - strh r0, [r1] - adds r0, r4, 0 - movs r1, 0x20 - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - bl sub_811D058 - lsls r0, 24 - lsrs r0, 24 - adds r1, r7, 0 - adds r1, 0x9C - strh r0, [r1] - adds r0, r4, 0 - movs r1, 0 - bl GetMonData - adds r1, r7, 0 - adds r1, 0xA0 - str r0, [r1] - adds r0, r7, 0 - adds r0, 0x9A - mov r1, r8 - strh r1, [r0] - subs r0, 0x4 - strh r6, [r0] - adds r0, r6, 0 - bl sub_811D018 - adds r5, r7, 0 - adds r5, 0x98 - strh r0, [r5] - adds r0, r7, 0 - adds r0, 0x8 - adds r1, r4, 0 - movs r2, 0x64 - bl memcpy - adds r0, r7, 0 - adds r0, 0xA4 - mov r1, r9 - str r1, [r0] - adds r2, r7, 0 - adds r2, 0x6C - adds r0, r4, 0 - movs r1, 0x2 - bl GetMonData - ldrh r0, [r5] - cmp r0, 0x4 - bne _0811C6D0 - adds r0, r6, 0 - bl ItemIdToBattleMoveId - lsls r0, 16 - lsrs r0, 16 - adds r2, r7, 0 - adds r2, 0x84 - movs r1, 0xD - muls r1, r0 - ldr r0, _0811C6E4 @ =gMoveNames - adds r1, r0 - adds r0, r2, 0 - bl StringCopy -_0811C6D0: - adds r0, r7, 0 -_0811C6D2: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0811C6E0: .4byte gPlayerParty -_0811C6E4: .4byte gMoveNames - thumb_func_end sub_811C5D4 - - thumb_func_start sub_811C6E8 -sub_811C6E8: @ 811C6E8 - push {lr} - bl TransferPlttBuffer - bl LoadOam - bl ProcessSpriteCopyRequests - pop {r0} - bx r0 - thumb_func_end sub_811C6E8 - - thumb_func_start sub_811C6FC -sub_811C6FC: @ 811C6FC - push {lr} - bl RunTextPrinters - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - pop {r0} - bx r0 - thumb_func_end sub_811C6FC - - thumb_func_start sub_811C718 -sub_811C718: @ 811C718 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - movs r1, 0 - bl GetWordTaskArg - adds r0, 0x92 - movs r1, 0 - strh r1, [r0] - ldr r1, _0811C744 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - str r5, [r0] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0811C744: .4byte gTasks - thumb_func_end sub_811C718 - - thumb_func_start sub_811C748 -sub_811C748: @ 811C748 - push {r4,r5,lr} - adds r5, r0, 0 - adds r0, 0x98 - ldrh r0, [r0] - cmp r0, 0x3 - beq _0811C766 - cmp r0, 0x3 - ble _0811C75E - cmp r0, 0x4 - beq _0811C770 - b _0811C784 -_0811C75E: - cmp r0, 0x1 - bgt _0811C784 - cmp r0, 0 - blt _0811C784 -_0811C766: - ldr r0, _0811C76C @ =sub_811C834 - b _0811C772 - .align 2, 0 -_0811C76C: .4byte sub_811C834 -_0811C770: - ldr r0, _0811C780 @ =sub_811CD68 -_0811C772: - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r4, r0, 24 - b _0811C792 - .align 2, 0 -_0811C780: .4byte sub_811CD68 -_0811C784: - ldr r0, [r5, 0x4] - bl SetMainCallback2 - adds r0, r5, 0 - bl Free - b _0811C7AE -_0811C792: - adds r1, r5, 0 - adds r1, 0x91 - movs r0, 0 - strb r0, [r1] - adds r0, r4, 0 - movs r1, 0 - adds r2, r5, 0 - bl SetWordTaskArg - ldr r0, _0811C7B4 @ =sub_811C6FC - bl SetMainCallback2 - ldr r0, _0811C7B8 @ =gUnknown_203B094 - strb r4, [r0] -_0811C7AE: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0811C7B4: .4byte sub_811C6FC -_0811C7B8: .4byte gUnknown_203B094 - thumb_func_end sub_811C748 - - thumb_func_start sub_811C7BC -sub_811C7BC: @ 811C7BC - push {r4,r5,lr} - adds r5, r0, 0 - ldr r0, _0811C7F0 @ =sub_811CA20 - movs r1, 0 - bl CreateTask - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - movs r1, 0 - adds r2, r5, 0 - bl SetWordTaskArg - ldr r0, _0811C7F4 @ =sub_811C6FC - bl SetMainCallback2 - ldr r0, _0811C7F8 @ =gUnknown_203B094 - strb r4, [r0] - adds r5, 0x91 - movs r0, 0 - strb r0, [r5] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0811C7F0: .4byte sub_811CA20 -_0811C7F4: .4byte sub_811C6FC -_0811C7F8: .4byte gUnknown_203B094 - thumb_func_end sub_811C7BC - - thumb_func_start sub_811C7FC -sub_811C7FC: @ 811C7FC - push {r4,r5,lr} - adds r5, r0, 0 - ldr r0, _0811C828 @ =sub_811CBE4 - movs r1, 0 - bl CreateTask - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - movs r1, 0 - adds r2, r5, 0 - bl SetWordTaskArg - ldr r0, _0811C82C @ =sub_811C6FC - bl SetMainCallback2 - ldr r0, _0811C830 @ =gUnknown_203B094 - strb r4, [r0] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0811C828: .4byte sub_811CBE4 -_0811C82C: .4byte sub_811C6FC -_0811C830: .4byte gUnknown_203B094 - thumb_func_end sub_811C7FC - - thumb_func_start sub_811C834 -sub_811C834: @ 811C834 - push {r4-r6,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r6, r0, 24 - adds r0, r6, 0 - movs r1, 0 - bl GetWordTaskArg - adds r4, r0, 0 - adds r0, 0x91 - ldrb r0, [r0] - cmp r0, 0 - bne _0811C870 - ldr r0, _0811C868 @ =gMain - ldrh r1, [r0, 0x2C] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0 - beq _0811C870 - bl sub_811E040 - ldr r1, _0811C86C @ =sub_811CF88 - adds r0, r6, 0 - bl sub_811C718 - b _0811CA16 - .align 2, 0 -_0811C868: .4byte gMain -_0811C86C: .4byte sub_811CF88 -_0811C870: - adds r0, r4, 0 - adds r0, 0x92 - ldrh r1, [r0] - adds r5, r0, 0 - cmp r1, 0xE - bls _0811C87E - b _0811CA16 -_0811C87E: - lsls r0, r1, 2 - ldr r1, _0811C888 @ =_0811C88C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0811C888: .4byte _0811C88C - .align 2, 0 -_0811C88C: - .4byte _0811C8C8 - .4byte _0811C8E4 - .4byte _0811C9E8 - .4byte _0811C914 - .4byte _0811C920 - .4byte _0811C934 - .4byte _0811C93C - .4byte _0811C950 - .4byte _0811C97E - .4byte _0811C986 - .4byte _0811C98E - .4byte _0811C996 - .4byte _0811C9AA - .4byte _0811C9E8 - .4byte _0811CA00 -_0811C8C8: - movs r0, 0 - bl SetVBlankCallback - adds r0, r4, 0 - adds r0, 0xA8 - adds r1, r4, 0 - adds r1, 0x98 - ldrh r1, [r1] - bl sub_811D184 - movs r0, 0 - bl sub_811D830 - b _0811C9F4 -_0811C8E4: - bl sub_811D280 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _0811C8F2 - b _0811CA16 -_0811C8F2: - movs r1, 0x1 - negs r1, r1 - str r0, [sp] - adds r0, r1, 0 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - ldrh r0, [r5] - adds r0, 0x1 - strh r0, [r5] - ldr r0, _0811C910 @ =sub_811C6E8 - bl SetVBlankCallback - b _0811CA16 - .align 2, 0 -_0811C910: .4byte sub_811C6E8 -_0811C914: - adds r0, r4, 0 - adds r0, 0x9C - ldrb r0, [r0] - bl sub_811D948 - b _0811C9F4 -_0811C920: - bl sub_811D9A8 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - bne _0811CA16 - adds r0, r4, 0 - adds r0, 0x9E - strh r1, [r0] - b _0811C9F4 -_0811C934: - bl sub_811D754 - lsls r0, 24 - b _0811C9F0 -_0811C93C: - adds r0, r4, 0 - adds r0, 0x96 - ldrh r0, [r0] - adds r1, r4, 0 - adds r1, 0x9C - ldrb r1, [r1] - movs r2, 0x1 - bl sub_811DC54 - b _0811C9F4 -_0811C950: - bl sub_811DD90 - lsls r0, 24 - cmp r0, 0 - bne _0811CA16 - adds r1, r4, 0 - adds r1, 0x91 - movs r0, 0x1 - strb r0, [r1] - adds r0, r4, 0 - adds r0, 0x9C - ldrh r0, [r0] - cmp r0, 0x3 - bne _0811C978 - adds r0, r4, 0 - adds r0, 0x94 - ldrh r0, [r0] - movs r1, 0 - bl PlayCry1 -_0811C978: - bl sub_811D2A8 - b _0811C9F4 -_0811C97E: - movs r0, 0 - bl sub_811D2EC - b _0811C9F4 -_0811C986: - bl sub_811D4EC - lsls r0, 24 - b _0811C9F0 -_0811C98E: - movs r0, 0 - bl sub_811D948 - b _0811C9F4 -_0811C996: - bl sub_811D9A8 - lsls r0, 24 - cmp r0, 0 - bne _0811CA16 - adds r1, r4, 0 - adds r1, 0x91 - movs r0, 0x1 - strb r0, [r1] - b _0811C9F4 -_0811C9AA: - ldr r0, _0811C9DC @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0 - beq _0811CA16 - adds r0, r4, 0 - adds r0, 0x96 - ldrh r0, [r0] - bl CheckIfItemIsTMHMOrEvolutionStone - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - beq _0811C9E0 - movs r1, 0x1 - negs r1, r1 - movs r0, 0 - str r0, [sp] - adds r0, r1, 0 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - b _0811C9F4 - .align 2, 0 -_0811C9DC: .4byte gMain -_0811C9E0: - ldrh r0, [r5] - adds r0, 0x2 - strh r0, [r5] - b _0811CA16 -_0811C9E8: - ldr r0, _0811C9FC @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 -_0811C9F0: - cmp r0, 0 - bne _0811CA16 -_0811C9F4: - ldrh r0, [r5] - adds r0, 0x1 - strh r0, [r5] - b _0811CA16 - .align 2, 0 -_0811C9FC: .4byte gPaletteFade -_0811CA00: - ldr r0, [r4, 0x4] - bl SetMainCallback2 - bl sub_811D29C - adds r0, r4, 0 - bl Free - adds r0, r6, 0 - bl DestroyTask -_0811CA16: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_811C834 - - thumb_func_start sub_811CA20 -sub_811CA20: @ 811CA20 - push {r4,r5,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - movs r1, 0 - bl GetWordTaskArg - adds r5, r0, 0 - adds r0, 0x92 - ldrh r0, [r0] - cmp r0, 0xD - bls _0811CA3C - b _0811CBD6 -_0811CA3C: - lsls r0, 2 - ldr r1, _0811CA48 @ =_0811CA4C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0811CA48: .4byte _0811CA4C - .align 2, 0 -_0811CA4C: - .4byte _0811CA84 - .4byte _0811CAA0 - .4byte _0811CAD4 - .4byte _0811CAF4 - .4byte _0811CB0C - .4byte _0811CB14 - .4byte _0811CB2A - .4byte _0811CB44 - .4byte _0811CB5A - .4byte _0811CB7E - .4byte _0811CB9A - .4byte _0811CBA2 - .4byte _0811CBB4 - .4byte _0811CBCE -_0811CA84: - movs r0, 0 - bl SetVBlankCallback - adds r0, r5, 0 - adds r0, 0xA8 - adds r1, r5, 0 - adds r1, 0x98 - ldrh r1, [r1] - bl sub_811D184 - movs r0, 0x3 - bl sub_811D830 - b _0811CBC2 -_0811CAA0: - bl sub_811D280 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _0811CAAE - b _0811CBD6 -_0811CAAE: - movs r1, 0x1 - negs r1, r1 - str r0, [sp] - adds r0, r1, 0 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - adds r1, r5, 0 - adds r1, 0x92 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - ldr r0, _0811CAD0 @ =sub_811C6E8 - bl SetVBlankCallback - b _0811CBD6 - .align 2, 0 -_0811CAD0: .4byte sub_811C6E8 -_0811CAD4: - ldr r0, _0811CAF0 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - bne _0811CBD6 - adds r1, r5, 0 - adds r1, 0x9E - strh r0, [r1] - subs r1, 0xC - b _0811CBC6 - .align 2, 0 -_0811CAF0: .4byte gPaletteFade -_0811CAF4: - adds r1, r5, 0 - adds r1, 0x9E - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1E - bls _0811CBD6 - bl sub_811D2A8 - b _0811CBC2 -_0811CB0C: - movs r0, 0x2 - bl sub_811D2EC - b _0811CBC2 -_0811CB14: - bl sub_811D4EC - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - bne _0811CBD6 - adds r1, r5, 0 - adds r1, 0x9E - strh r0, [r1] - subs r1, 0xC - b _0811CBC6 -_0811CB2A: - adds r1, r5, 0 - adds r1, 0x9E - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1E - bls _0811CBD6 - movs r0, 0x3 - bl sub_811D2EC - b _0811CBC2 -_0811CB44: - bl sub_811D4EC - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - bne _0811CBD6 - adds r1, r5, 0 - adds r1, 0x9E - strh r0, [r1] - subs r1, 0xC - b _0811CBC6 -_0811CB5A: - adds r1, r5, 0 - adds r1, 0x9E - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1E - bls _0811CBD6 - movs r0, 0xE1 - bl PlaySE - movs r0, 0x4 - bl sub_811D2EC - bl sub_811D4FC - b _0811CBC2 -_0811CB7E: - bl sub_811D530 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl sub_811D4EC - orrs r4, r0 - lsls r4, 24 - cmp r4, 0 - bne _0811CBD6 - bl sub_811D4D4 - b _0811CBC2 -_0811CB9A: - movs r0, 0x5 - bl sub_811D2EC - b _0811CBC2 -_0811CBA2: - bl sub_811D4EC - lsls r0, 24 - cmp r0, 0 - bne _0811CBD6 - movs r0, 0x6 - bl sub_811D2EC - b _0811CBC2 -_0811CBB4: - bl sub_811D4EC - lsls r0, 24 - cmp r0, 0 - bne _0811CBD6 - bl sub_811D2D0 -_0811CBC2: - adds r1, r5, 0 - adds r1, 0x92 -_0811CBC6: - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - b _0811CBD6 -_0811CBCE: - ldr r1, _0811CBE0 @ =sub_811CE4C - adds r0, r4, 0 - bl sub_811C718 -_0811CBD6: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0811CBE0: .4byte sub_811CE4C - thumb_func_end sub_811CA20 - thumb_func_start sub_811CBE4 sub_811CBE4: @ 811CBE4 push {r4-r6,lr} diff --git a/ld_script.txt b/ld_script.txt index c92132b90..b9de60577 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -251,6 +251,7 @@ SECTIONS { src/union_room.o(.text); src/rfu_union_tool.o(.text); src/union_room_battle.o(.text); + src/pokemon_special_anim.o(.text); asm/pokemon_special_anim.o(.text); src/party_menu.o(.text); src/union_room_chat.o(.text); @@ -553,6 +554,7 @@ SECTIONS { src/rfu_union_tool.o(.rodata); src/union_room_battle.o(.rodata); src/union_room_message.o(.rodata); + src/pokemon_special_anim.o(.rodata); data/pokemon_special_anim.o(.rodata); src/party_menu.o(.rodata); src/union_room_chat.o(.rodata); diff --git a/src/pokemon_special_anim.c b/src/pokemon_special_anim.c new file mode 100644 index 000000000..244b9bdde --- /dev/null +++ b/src/pokemon_special_anim.c @@ -0,0 +1,412 @@ +#include "global.h" +#include "gflib.h" +#include "data.h" +#include "party_menu.h" +#include "item_use.h" +#include "task.h" +#include "constants/songs.h" + +// Functions related to the special anims Pokemon +// make when using an item on them in the field. + +struct PokemonSpecialAnim +{ + /*0x0000*/ u8 filler_0000[0x4]; + /*0x0004*/ MainCallback savedCallback; + /*0x0008*/ struct Pokemon pokemon; + /*0x006c*/ u8 nickname[POKEMON_NAME_LENGTH + 1]; + /*0x0077*/ u8 nameOfMoveForgotten[13]; + /*0x0084*/ u8 nameOfMoveToTeach[13]; + /*0x0091*/ bool8 cancelDisabled; + /*0x0092*/ u16 state; + /*0x0094*/ u16 species; + /*0x0096*/ u16 itemId; + /*0x0098*/ u16 animType; + /*0x009a*/ u16 slotId; + /*0x009c*/ u16 closeness; + /*0x009e*/ u16 field_009e; + /*0x00a0*/ u32 personality; + /*0x00a4*/ u32 field_00a4; + /*0x00a8*/ u8 field_00a8[0x2834]; +}; // size=0x28dc + +EWRAM_DATA u8 gUnknown_203B094 = 0; + +struct PokemonSpecialAnim * sub_811C5D4(u8 slotId, u16 itemId, MainCallback callback); +void sub_811C748(struct PokemonSpecialAnim * ptr); +void sub_811C7BC(struct PokemonSpecialAnim * ptr); +void sub_811C7FC(struct PokemonSpecialAnim * ptr); +void sub_811C834(u8 taskId); +void sub_811CA20(u8 taskId); +void sub_811CBE4(u8 taskId); +void sub_811CD68(u8 taskId); +void sub_811CE4C(u8 taskId); +void sub_811CF88(u8 taskId); +u8 sub_811D058(u16 friendship); +u16 sub_811D018(u16 itemId); +void sub_811D184(u8 *buffer, u16 animType); +bool8 sub_811D280(void); +void sub_811D29C(void); +void sub_811D2A8(void); +void sub_811D2D0(void); +void sub_811D2EC(u8 a0); +void sub_811D4D4(void); +bool8 sub_811D4EC(void); +void sub_811D4FC(void); +bool8 sub_811D530(void); +bool8 sub_811D754(void); +void sub_811D830(u8 a0); +void sub_811D948(u8 closeness); +bool8 sub_811D9A8(void); +void sub_811DC54(u16 itemId, u8 closeness, u8 a2); +bool8 sub_811DD90(void); +void sub_811E040(void); + +void sub_811C540(u8 slotId, u16 itemId, MainCallback callback) +{ + struct PokemonSpecialAnim * ptr = sub_811C5D4(slotId, itemId, callback); + if (ptr == NULL) + SetMainCallback2(callback); + else + sub_811C748(ptr); +} + +void sub_811C568(u8 slotId, u16 itemId, u16 moveId, MainCallback callback) +{ + struct PokemonSpecialAnim * ptr = sub_811C5D4(slotId, itemId, callback); + if (ptr == NULL) + SetMainCallback2(callback); + else + { + StringCopy(ptr->nameOfMoveForgotten, gMoveNames[moveId]); + sub_811C7BC(ptr); + } +} + +void sub_811C5AC(u8 slotId, u16 itemId, MainCallback callback) +{ + struct PokemonSpecialAnim * ptr = sub_811C5D4(slotId, itemId, callback); + if (ptr == NULL) + SetMainCallback2(callback); + else + sub_811C7FC(ptr); +} + +struct PokemonSpecialAnim * sub_811C5D4(u8 slotId, u16 itemId, MainCallback callback) +{ + struct PokemonSpecialAnim * ptr; + struct Pokemon * pokemon; + u16 moveId; + + if (!gMain.inBattle) + ResetTasks(); + ResetSpriteData(); + FreeAllSpritePalettes(); + ptr = Alloc(sizeof(struct PokemonSpecialAnim)); + if (ptr == NULL) + { + SetMainCallback2(callback); + return NULL; + } + pokemon = &gPlayerParty[slotId]; + ptr->state = 0; + ptr->savedCallback = callback; + ptr->species = GetMonData(pokemon, MON_DATA_SPECIES); + ptr->closeness = sub_811D058(GetMonData(pokemon, MON_DATA_FRIENDSHIP)); + ptr->personality = GetMonData(pokemon, MON_DATA_PERSONALITY); + ptr->slotId = slotId; + ptr->itemId = itemId; + ptr->animType = sub_811D018(itemId); + ptr->pokemon = *pokemon; + ptr->field_00a4 = 0; + GetMonData(pokemon, MON_DATA_NICKNAME, ptr->nickname); + if (ptr->animType == 4) + { + moveId = ItemIdToBattleMoveId(itemId); + StringCopy(ptr->nameOfMoveToTeach, gMoveNames[moveId]); + } + return ptr; +} + +void sub_811C6E8(void) +{ + TransferPlttBuffer(); + LoadOam(); + ProcessSpriteCopyRequests(); +} + +void sub_811C6FC(void) +{ + RunTextPrinters(); + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_811C718(u8 taskId, TaskFunc func) +{ + struct PokemonSpecialAnim * ptr = (void *)GetWordTaskArg(taskId, 0); + ptr->state = 0; + gTasks[taskId].func = func; +} + +void sub_811C748(struct PokemonSpecialAnim * ptr) +{ + u8 taskId; + switch (ptr->animType) + { + case 0: + case 1: + case 3: + taskId = CreateTask(sub_811C834, 0); + break; + case 4: + taskId = CreateTask(sub_811CD68, 0); + break; + default: + SetMainCallback2(ptr->savedCallback); + Free(ptr); + return; + } + ptr->cancelDisabled = FALSE; + SetWordTaskArg(taskId, 0, (uintptr_t)ptr); + SetMainCallback2(sub_811C6FC); + gUnknown_203B094 = taskId; +} + +void sub_811C7BC(struct PokemonSpecialAnim * ptr) +{ + u8 taskId = CreateTask(sub_811CA20, 0); + SetWordTaskArg(taskId, 0, (uintptr_t)ptr); + SetMainCallback2(sub_811C6FC); + gUnknown_203B094 = taskId; + ptr->cancelDisabled = FALSE; +} + +void sub_811C7FC(struct PokemonSpecialAnim * ptr) +{ + u8 taskId = CreateTask(sub_811CBE4, 0); + SetWordTaskArg(taskId, 0, (uintptr_t)ptr); + SetMainCallback2(sub_811C6FC); + gUnknown_203B094 = taskId; +} + +void sub_811C834(u8 taskId) +{ + struct PokemonSpecialAnim * ptr = (void *)GetWordTaskArg(taskId, 0); + if (!ptr->cancelDisabled && JOY_HELD(A_BUTTON | B_BUTTON)) + { + sub_811E040(); + sub_811C718(taskId, sub_811CF88); + return; + } + + switch (ptr->state) + { + case 0: + SetVBlankCallback(NULL); + sub_811D184(ptr->field_00a8, ptr->animType); + sub_811D830(0); + ptr->state++; + break; + case 1: + if (!sub_811D280()) + { + BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); + ptr->state++; + SetVBlankCallback(sub_811C6E8); + } + break; + case 2: + if (!gPaletteFade.active) + { + ptr->state++; + } + break; + case 3: + sub_811D948(ptr->closeness); + ptr->state++; + break; + case 4: + if (!sub_811D9A8()) + { + ptr->field_009e = 0; + ptr->state++; + } + break; + case 5: + if (!sub_811D754()) + { + ptr->state++; + } + break; + case 6: + sub_811DC54(ptr->itemId, ptr->closeness, 1); + ptr->state++; + break; + case 7: + if (!sub_811DD90()) + { + ptr->cancelDisabled = TRUE; + if (ptr->closeness == 3) + { + PlayCry1(ptr->species, 0); + } + sub_811D2A8(); + ptr->state++; + } + break; + case 8: + sub_811D2EC(0); + ptr->state++; + break; + case 9: + if (!sub_811D4EC()) + { + ptr->state++; + } + break; + case 10: + sub_811D948(0); + ptr->state++; + break; + case 11: + if (!sub_811D9A8()) + { + ptr->cancelDisabled = TRUE; + ptr->state++; + } + break; + case 12: + if (JOY_NEW(A_BUTTON | B_BUTTON)) + { + if (CheckIfItemIsTMHMOrEvolutionStone(ptr->itemId) != 2) // evo stone + { + BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); + ptr->state++; + } + else + { + ptr->state += 2; + } + } + break; + case 13: + if (!gPaletteFade.active) + { + ptr->state++; + } + break; + case 14: + SetMainCallback2(ptr->savedCallback); + sub_811D29C(); + Free(ptr); + DestroyTask(taskId); + break; + } +} + +void sub_811CA20(u8 taskId) +{ + struct PokemonSpecialAnim * ptr = (void *)GetWordTaskArg(taskId, 0); + u8 r4; + + switch (ptr->state) + { + case 0: + SetVBlankCallback(NULL); + sub_811D184(ptr->field_00a8, ptr->animType); + sub_811D830(3); + ptr->state++; + break; + case 1: + if (!sub_811D280()) + { + BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); + ptr->state++; + SetVBlankCallback(sub_811C6E8); + } + break; + case 2: + if (!gPaletteFade.active) + { + ptr->field_009e = 0; + ptr->state++; + } + break; + case 3: + ptr->field_009e++; + if (ptr->field_009e > 30) + { + sub_811D2A8(); + ptr->state++; + } + break; + case 4: + sub_811D2EC(2); + ptr->state++; + break; + case 5: + if (!sub_811D4EC()) + { + ptr->field_009e = 0; + ptr->state++; + } + break; + case 6: + ptr->field_009e++; + if (ptr->field_009e > 30) + { + sub_811D2EC(3); + ptr->state++; + } + break; + case 7: + if (!sub_811D4EC()) + { + ptr->field_009e = 0; + ptr->state++; + } + break; + case 8: + ptr->field_009e++; + if (ptr->field_009e > 30) + { + PlaySE(SE_W255); + sub_811D2EC(4); + sub_811D4FC(); + ptr->state++; + } + break; + case 9: + r4 = sub_811D530(); + if (!(r4 | sub_811D4EC())) + { + sub_811D4D4(); + ptr->state++; + } + break; + case 10: + sub_811D2EC(5); + ptr->state++; + break; + case 11: + if (!sub_811D4EC()) + { + sub_811D2EC(6); + ptr->state++; + } + break; + case 12: + if (!sub_811D4EC()) + { + sub_811D2D0(); + ptr->state++; + } + break; + case 13: + sub_811C718(taskId, sub_811CE4C); + break; + } +} |