From b36ea2db9873f4a52c5245328b8c846e08757fa3 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 19 Mar 2020 20:40:26 -0400 Subject: through sub_811CA20 --- asm/pokemon_special_anim.s | 814 --------------------------------------------- ld_script.txt | 2 + src/pokemon_special_anim.c | 412 +++++++++++++++++++++++ 3 files changed, 414 insertions(+), 814 deletions(-) create mode 100644 src/pokemon_special_anim.c 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; + } +} -- cgit v1.2.3 From fafb25254389039e163898fada192534754e1f58 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 20 Mar 2020 08:37:58 -0400 Subject: through sub_811CF88 --- asm/pokemon_special_anim.s | 508 --------------------------------------------- src/pokemon_special_anim.c | 228 ++++++++++++++++++++ 2 files changed, 228 insertions(+), 508 deletions(-) diff --git a/asm/pokemon_special_anim.s b/asm/pokemon_special_anim.s index 76488e170..676222f30 100644 --- a/asm/pokemon_special_anim.s +++ b/asm/pokemon_special_anim.s @@ -5,514 +5,6 @@ .text - thumb_func_start sub_811CBE4 -sub_811CBE4: @ 811CBE4 - push {r4-r6,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r6, r0, 24 - adds r0, r6, 0 - movs r1, 0 - bl GetWordTaskArg - adds r5, r0, 0 - adds r0, 0x91 - ldrb r0, [r0] - cmp r0, 0 - bne _0811CC1C - ldr r0, _0811CC14 @ =gMain - ldrh r1, [r0, 0x2C] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0811CC1C - ldr r1, _0811CC18 @ =sub_811CF88 - adds r0, r6, 0 - bl sub_811C718 - b _0811CD5A - .align 2, 0 -_0811CC14: .4byte gMain -_0811CC18: .4byte sub_811CF88 -_0811CC1C: - adds r0, r5, 0 - adds r0, 0x92 - ldrh r1, [r0] - adds r4, r0, 0 - cmp r1, 0x9 - bls _0811CC2A - b _0811CD5A -_0811CC2A: - lsls r0, r1, 2 - ldr r1, _0811CC34 @ =_0811CC38 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0811CC34: .4byte _0811CC38 - .align 2, 0 -_0811CC38: - .4byte _0811CC60 - .4byte _0811CC7C - .4byte _0811CCAC - .4byte _0811CCC0 - .4byte _0811CCCC - .4byte _0811CCE0 - .4byte _0811CCF0 - .4byte _0811CCF8 - .4byte _0811CD0C - .4byte _0811CD38 -_0811CC60: - 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, 0 - bl sub_811D830 - b _0811CD2A -_0811CC7C: - bl sub_811D280 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - bne _0811CD5A - movs r1, 0x1 - negs r1, r1 - str r0, [sp] - adds r0, r1, 0 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - ldr r0, _0811CCA8 @ =sub_811C6E8 - bl SetVBlankCallback - b _0811CD5A - .align 2, 0 -_0811CCA8: .4byte sub_811C6E8 -_0811CCAC: - ldr r0, _0811CCBC @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0811CD5A - b _0811CD2A - .align 2, 0 -_0811CCBC: .4byte gPaletteFade -_0811CCC0: - adds r0, r5, 0 - adds r0, 0x9C - ldrb r0, [r0] - bl sub_811D948 - b _0811CD2A -_0811CCCC: - adds r0, r5, 0 - adds r0, 0x96 - ldrh r0, [r0] - adds r1, r5, 0 - adds r1, 0x9C - ldrb r1, [r1] - movs r2, 0 - bl sub_811DC54 - b _0811CD2A -_0811CCE0: - bl sub_811DD90 - lsls r0, 24 - cmp r0, 0 - bne _0811CD5A - bl sub_811D2A8 - b _0811CD2A -_0811CCF0: - movs r0, 0x8 - bl sub_811D2EC - b _0811CD2A -_0811CCF8: - bl sub_811D4EC - lsls r0, 24 - cmp r0, 0 - bne _0811CD5A - adds r1, r5, 0 - adds r1, 0x91 - movs r0, 0x1 - strb r0, [r1] - b _0811CD2A -_0811CD0C: - ldr r0, _0811CD34 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0 - beq _0811CD5A - movs r1, 0x1 - negs r1, r1 - movs r0, 0 - str r0, [sp] - adds r0, r1, 0 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade -_0811CD2A: - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - b _0811CD5A - .align 2, 0 -_0811CD34: .4byte gMain -_0811CD38: - ldr r0, _0811CD64 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0811CD5A - ldr r0, [r5, 0x4] - bl SetMainCallback2 - bl sub_811D29C - adds r0, r5, 0 - bl Free - adds r0, r6, 0 - bl DestroyTask -_0811CD5A: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0811CD64: .4byte gPaletteFade - thumb_func_end sub_811CBE4 - - thumb_func_start sub_811CD68 -sub_811CD68: @ 811CD68 - push {r4-r6,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r6, r0, 24 - adds r0, r6, 0 - movs r1, 0 - bl GetWordTaskArg - adds r5, r0, 0 - ldr r0, _0811CD90 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0811CD98 - ldr r1, _0811CD94 @ =sub_811CF88 - adds r0, r6, 0 - bl sub_811C718 - b _0811CE3E - .align 2, 0 -_0811CD90: .4byte gMain -_0811CD94: .4byte sub_811CF88 -_0811CD98: - adds r4, r5, 0 - adds r4, 0x92 - ldrh r0, [r4] - cmp r0, 0x1 - beq _0811CDD2 - cmp r0, 0x1 - bgt _0811CDAC - cmp r0, 0 - beq _0811CDB6 - b _0811CE3E -_0811CDAC: - cmp r0, 0x2 - beq _0811CE00 - cmp r0, 0x3 - beq _0811CE24 - b _0811CE3E -_0811CDB6: - 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 _0811CE16 -_0811CDD2: - bl sub_811D280 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - bne _0811CE3E - movs r1, 0x1 - negs r1, r1 - str r0, [sp] - adds r0, r1, 0 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - ldr r0, _0811CDFC @ =sub_811C6E8 - bl SetVBlankCallback - b _0811CE3E - .align 2, 0 -_0811CDFC: .4byte sub_811C6E8 -_0811CE00: - ldr r0, _0811CE20 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - bne _0811CE3E - adds r0, r5, 0 - adds r0, 0x9E - strh r1, [r0] -_0811CE16: - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - b _0811CE3E - .align 2, 0 -_0811CE20: .4byte gPaletteFade -_0811CE24: - adds r1, r5, 0 - adds r1, 0x9E - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x14 - bls _0811CE3E - ldr r1, _0811CE48 @ =sub_811CE4C - adds r0, r6, 0 - bl sub_811C718 -_0811CE3E: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0811CE48: .4byte sub_811CE4C - thumb_func_end sub_811CD68 - - thumb_func_start sub_811CE4C -sub_811CE4C: @ 811CE4C - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - adds r0, r6, 0 - movs r1, 0 - bl GetWordTaskArg - adds r5, r0, 0 - adds r0, 0x91 - ldrb r0, [r0] - cmp r0, 0 - bne _0811CE88 - ldr r0, _0811CE80 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0811CE88 - bl sub_811D5B0 - ldr r1, _0811CE84 @ =sub_811CF88 - adds r0, r6, 0 - bl sub_811C718 - b _0811CF7E - .align 2, 0 -_0811CE80: .4byte gMain -_0811CE84: .4byte sub_811CF88 -_0811CE88: - adds r0, r5, 0 - adds r0, 0x92 - ldrh r1, [r0] - adds r4, r0, 0 - cmp r1, 0x9 - bhi _0811CF7E - lsls r0, r1, 2 - ldr r1, _0811CEA0 @ =_0811CEA4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0811CEA0: .4byte _0811CEA4 - .align 2, 0 -_0811CEA4: - .4byte _0811CECC - .4byte _0811CEE0 - .4byte _0811CEEC - .4byte _0811CEFC - .4byte _0811CF02 - .4byte _0811CF0E - .4byte _0811CF14 - .4byte _0811CF28 - .4byte _0811CF46 - .4byte _0811CF6C -_0811CECC: - adds r0, r5, 0 - adds r0, 0x96 - ldrh r0, [r0] - bl sub_811DCF0 - adds r1, r5, 0 - adds r1, 0x9E - movs r0, 0 - strh r0, [r1] - b _0811CF5E -_0811CEE0: - bl sub_811D2A8 - movs r0, 0x7 - bl sub_811D2EC - b _0811CF5E -_0811CEEC: - bl sub_811D4EC - lsls r0, 24 - cmp r0, 0 - bne _0811CF7E - bl sub_811D2D0 - b _0811CF5E -_0811CEFC: - bl sub_811D6EC - b _0811CF5E -_0811CF02: - bl sub_811D6FC - lsls r0, 24 - cmp r0, 0 - bne _0811CF7E - b _0811CF5E -_0811CF0E: - bl sub_811D5A0 - b _0811CF5E -_0811CF14: - bl sub_811D5C0 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - bne _0811CF7E - adds r0, r5, 0 - adds r0, 0x9E - strh r1, [r0] - b _0811CF5E -_0811CF28: - 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 _0811CF7E - bl sub_811D2A8 - movs r0, 0x9 - bl sub_811D2EC - b _0811CF5E -_0811CF46: - bl sub_811D4EC - lsls r0, 24 - cmp r0, 0 - bne _0811CF7E - ldr r0, _0811CF68 @ =0x00000101 - bl PlayFanfare - adds r1, r5, 0 - adds r1, 0x91 - movs r0, 0x1 - strb r0, [r1] -_0811CF5E: - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - b _0811CF7E - .align 2, 0 -_0811CF68: .4byte 0x00000101 -_0811CF6C: - bl IsFanfareTaskInactive - lsls r0, 24 - cmp r0, 0 - beq _0811CF7E - ldr r1, _0811CF84 @ =sub_811CF88 - adds r0, r6, 0 - bl sub_811C718 -_0811CF7E: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0811CF84: .4byte sub_811CF88 - thumb_func_end sub_811CE4C - - thumb_func_start sub_811CF88 -sub_811CF88: @ 811CF88 - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - adds r0, r6, 0 - movs r1, 0 - bl GetWordTaskArg - adds r5, r0, 0 - adds r4, r5, 0 - adds r4, 0x92 - ldrh r0, [r4] - cmp r0, 0 - beq _0811CFA8 - cmp r0, 0x1 - beq _0811CFC8 - b _0811D008 -_0811CFA8: - ldr r0, _0811CFC4 @ =sub_811C6E8 - bl SetVBlankCallback - movs r0, 0x1 - negs r0, r0 - movs r1, 0x10 - movs r2, 0 - bl BlendPalettes - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - b _0811D008 - .align 2, 0 -_0811CFC4: .4byte sub_811C6E8 -_0811CFC8: - ldr r0, _0811D010 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0811D008 - adds r0, r5, 0 - adds r0, 0xA4 - ldr r0, [r0] - cmp r0, 0x1 - bne _0811CFE8 - bl IsCryFinished - lsls r0, 24 - cmp r0, 0 - beq _0811D008 -_0811CFE8: - ldr r0, _0811D014 @ =gUnknown_203B090 - adds r1, r5, 0 - adds r1, 0x91 - ldrb r1, [r1] - str r1, [r0] - ldr r0, [r5, 0x4] - bl SetMainCallback2 - adds r0, r6, 0 - bl DestroyTask - bl sub_811D29C - adds r0, r5, 0 - bl Free -_0811D008: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0811D010: .4byte gPaletteFade -_0811D014: .4byte gUnknown_203B090 - thumb_func_end sub_811CF88 - thumb_func_start sub_811D018 sub_811D018: @ 811D018 push {r4,lr} diff --git a/src/pokemon_special_anim.c b/src/pokemon_special_anim.c index 244b9bdde..542e0ffb3 100644 --- a/src/pokemon_special_anim.c +++ b/src/pokemon_special_anim.c @@ -30,6 +30,7 @@ struct PokemonSpecialAnim /*0x00a8*/ u8 field_00a8[0x2834]; }; // size=0x28dc +EWRAM_DATA bool32 gUnknown_203B090 = FALSE; EWRAM_DATA u8 gUnknown_203B094 = 0; struct PokemonSpecialAnim * sub_811C5D4(u8 slotId, u16 itemId, MainCallback callback); @@ -54,11 +55,17 @@ void sub_811D4D4(void); bool8 sub_811D4EC(void); void sub_811D4FC(void); bool8 sub_811D530(void); +void sub_811D5A0(void); +void sub_811D5B0(void); +bool8 sub_811D5C0(void); +void sub_811D6EC(void); +bool8 sub_811D6FC(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); +void sub_811DCF0(u16 itemId); bool8 sub_811DD90(void); void sub_811E040(void); @@ -410,3 +417,224 @@ void sub_811CA20(u8 taskId) break; } } + +void sub_811CBE4(u8 taskId) +{ + struct PokemonSpecialAnim * ptr = (void *)GetWordTaskArg(taskId, 0); + + if (!ptr->cancelDisabled && JOY_HELD(B_BUTTON)) + { + 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: + sub_811DC54(ptr->itemId, ptr->closeness, 0); + ptr->state++; + break; + case 5: + if (!sub_811DD90()) + { + sub_811D2A8(); + ptr->state++; + } + break; + case 6: + sub_811D2EC(8); + ptr->state++; + break; + case 7: + if (!sub_811D4EC()) + { + ptr->cancelDisabled = TRUE; + ptr->state++; + } + break; + case 8: + if (JOY_NEW(A_BUTTON | B_BUTTON)) + { + BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); + ptr->state++; + } + break; + case 9: + if (!gPaletteFade.active) + { + SetMainCallback2(ptr->savedCallback); + sub_811D29C(); + Free(ptr); + DestroyTask(taskId); + } + break; + } +} + +void sub_811CD68(u8 taskId) +{ + struct PokemonSpecialAnim * ptr = (void *)GetWordTaskArg(taskId, 0); + + if (JOY_NEW(B_BUTTON)) + { + sub_811C718(taskId, sub_811CF88); + return; + } + + 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 > 20) + { + sub_811C718(taskId, sub_811CE4C); + } + break; + } +} + +void sub_811CE4C(u8 taskId) +{ + struct PokemonSpecialAnim * ptr = (void *)GetWordTaskArg(taskId, 0); + + if (!ptr->cancelDisabled && JOY_NEW(B_BUTTON)) + { + sub_811D5B0(); + sub_811C718(taskId, sub_811CF88); + return; + } + + switch (ptr->state) + { + case 0: + sub_811DCF0(ptr->itemId); + ptr->field_009e = 0; + ptr->state++; + break; + case 1: + sub_811D2A8(); + sub_811D2EC(7); + ptr->state++; + break; + case 2: + if (!sub_811D4EC()) + { + sub_811D2D0(); + ptr->state++; + } + break; + case 3: + sub_811D6EC(); + ptr->state++; + break; + case 4: + if (!sub_811D6FC()) + { + ptr->state++; + } + break; + case 5: + sub_811D5A0(); + ptr->state++; + break; + case 6: + if (!sub_811D5C0()) + { + ptr->field_009e = 0; + ptr->state++; + } + break; + case 7: + ptr->field_009e++; + if (ptr->field_009e > 30) + { + sub_811D2A8(); + sub_811D2EC(9); + ptr->state++; + } + break; + case 8: + if (!sub_811D4EC()) + { + PlayFanfare(MUS_FANFA1); + ptr->cancelDisabled = TRUE; + ptr->state++; + } + break; + case 9: + if (IsFanfareTaskInactive()) + { + sub_811C718(taskId, sub_811CF88); + } + break; + } +} + +void sub_811CF88(u8 taskId) +{ + struct PokemonSpecialAnim * ptr = (void *)GetWordTaskArg(taskId, 0); + + switch (ptr->state) + { + case 0: + SetVBlankCallback(sub_811C6E8); + BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK); + ptr->state++; + break; + case 1: + if (!gPaletteFade.active && (ptr->field_00a4 != 1 || IsCryFinished())) + { + gUnknown_203B090 = ptr->cancelDisabled; + SetMainCallback2(ptr->savedCallback); + DestroyTask(taskId); + sub_811D29C(); + Free(ptr); + } + break; + } +} -- cgit v1.2.3 From 73b04853e9a2b84e49534f1c221addac93288791 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 20 Mar 2020 19:59:20 -0400 Subject: through sub_811D178 --- asm/pokemon_special_anim.s | 223 -------------------------------- data/pokemon_special_anim.s | 4 - include/pokemon_special_anim_internal.h | 51 ++++++++ src/pokemon_special_anim.c | 156 +++++++++++++++------- sym_ewram.txt | 12 +- 5 files changed, 164 insertions(+), 282 deletions(-) create mode 100644 include/pokemon_special_anim_internal.h diff --git a/asm/pokemon_special_anim.s b/asm/pokemon_special_anim.s index 676222f30..6eed303ea 100644 --- a/asm/pokemon_special_anim.s +++ b/asm/pokemon_special_anim.s @@ -5,229 +5,6 @@ .text - thumb_func_start sub_811D018 -sub_811D018: @ 811D018 - push {r4,lr} - lsls r0, 16 - lsrs r3, r0, 16 - movs r2, 0 - ldr r4, _0811D044 @ =gUnknown_8459634 -_0811D022: - adds r1, r4, 0 - ldrh r0, [r1] - cmp r0, r3 - beq _0811D04C - adds r4, r1, 0x4 - adds r2, 0x1 - cmp r2, 0x1 - bls _0811D022 - ldr r1, _0811D048 @ =0xfffffedf - adds r0, r3, r1 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x39 - bls _0811D050 - movs r0, 0 - b _0811D052 - .align 2, 0 -_0811D044: .4byte gUnknown_8459634 -_0811D048: .4byte 0xfffffedf -_0811D04C: - ldrh r0, [r4, 0x2] - b _0811D052 -_0811D050: - movs r0, 0x4 -_0811D052: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_811D018 - - thumb_func_start sub_811D058 -sub_811D058: @ 811D058 - push {lr} - lsls r0, 16 - lsrs r0, 16 - adds r1, r0, 0 - cmp r0, 0x64 - bhi _0811D068 - movs r0, 0 - b _0811D07A -_0811D068: - cmp r0, 0x96 - bhi _0811D070 - movs r0, 0x1 - b _0811D07A -_0811D070: - cmp r1, 0xC8 - bls _0811D078 - movs r0, 0x3 - b _0811D07A -_0811D078: - movs r0, 0x2 -_0811D07A: - pop {r1} - bx r1 - thumb_func_end sub_811D058 - - thumb_func_start sub_811D080 -sub_811D080: @ 811D080 - push {lr} - ldr r0, _0811D090 @ =gUnknown_203B094 - ldrb r0, [r0] - movs r1, 0 - bl GetWordTaskArg - pop {r1} - bx r1 - .align 2, 0 -_0811D090: .4byte gUnknown_203B094 - thumb_func_end sub_811D080 - - thumb_func_start sub_811D094 -sub_811D094: @ 811D094 - push {lr} - bl sub_811D080 - ldr r1, _0811D0A4 @ =gUnknown_203B098 - str r0, [r1] - adds r0, 0x8 - pop {r1} - bx r1 - .align 2, 0 -_0811D0A4: .4byte gUnknown_203B098 - thumb_func_end sub_811D094 - - thumb_func_start sub_811D0A8 -sub_811D0A8: @ 811D0A8 - push {lr} - bl sub_811D080 - adds r0, 0xA8 - pop {r1} - bx r1 - thumb_func_end sub_811D0A8 - - thumb_func_start sub_811D0B4 -sub_811D0B4: @ 811D0B4 - push {lr} - bl sub_811D080 - adds r0, 0x96 - ldrh r0, [r0] - pop {r1} - bx r1 - thumb_func_end sub_811D0B4 - - thumb_func_start sub_811D0C4 -sub_811D0C4: @ 811D0C4 - push {lr} - bl sub_811D080 - adds r0, 0x77 - pop {r1} - bx r1 - thumb_func_end sub_811D0C4 - - thumb_func_start sub_811D0D0 -sub_811D0D0: @ 811D0D0 - push {lr} - bl sub_811D080 - adds r0, 0x84 - pop {r1} - bx r1 - thumb_func_end sub_811D0D0 - - thumb_func_start sub_811D0DC -sub_811D0DC: @ 811D0DC - push {r4,lr} - adds r4, r0, 0 - bl sub_811D080 - adds r1, r0, 0 - adds r1, 0x6C - adds r0, r4, 0 - bl StringCopy - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_811D0DC - - thumb_func_start sub_811D0F4 -sub_811D0F4: @ 811D0F4 - push {lr} - bl sub_811D080 - adds r0, 0x6C - pop {r1} - bx r1 - thumb_func_end sub_811D0F4 - - thumb_func_start sub_811D100 -sub_811D100: @ 811D100 - push {lr} - bl sub_811D080 - adds r0, 0x98 - ldrb r0, [r0] - pop {r1} - bx r1 - thumb_func_end sub_811D100 - - thumb_func_start sub_811D110 -sub_811D110: @ 811D110 - push {lr} - bl sub_811D080 - adds r0, 0x94 - ldrh r0, [r0] - pop {r1} - bx r1 - thumb_func_end sub_811D110 - - thumb_func_start sub_811D120 -sub_811D120: @ 811D120 - push {lr} - bl sub_811D080 - adds r0, 0xA0 - ldr r0, [r0] - pop {r1} - bx r1 - thumb_func_end sub_811D120 - - thumb_func_start BufferMonStatsToTaskData -BufferMonStatsToTaskData: @ 811D130 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - movs r1, 0x3A - bl GetMonData - strh r0, [r5] - adds r0, r4, 0 - movs r1, 0x3B - bl GetMonData - strh r0, [r5, 0x2] - adds r0, r4, 0 - movs r1, 0x3C - bl GetMonData - strh r0, [r5, 0x4] - adds r0, r4, 0 - movs r1, 0x3D - bl GetMonData - strh r0, [r5, 0x6] - adds r0, r4, 0 - movs r1, 0x3E - bl GetMonData - strh r0, [r5, 0x8] - adds r0, r4, 0 - movs r1, 0x3F - bl GetMonData - strh r0, [r5, 0xA] - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end BufferMonStatsToTaskData - - thumb_func_start sub_811D178 -sub_811D178: @ 811D178 - ldr r0, _0811D180 @ =gUnknown_203B090 - ldr r0, [r0] - bx lr - .align 2, 0 -_0811D180: .4byte gUnknown_203B090 - thumb_func_end sub_811D178 - thumb_func_start sub_811D184 sub_811D184: @ 811D184 push {r4,r5,lr} diff --git a/data/pokemon_special_anim.s b/data/pokemon_special_anim.s index 1c479d0c0..b18f01ef9 100644 --- a/data/pokemon_special_anim.s +++ b/data/pokemon_special_anim.s @@ -6,10 +6,6 @@ .section .rodata .align 2 -gUnknown_8459634:: @ 8459634 data16 2x2 - .2byte 0x0044, 0x0000 - .2byte 0x000d, 0x0001 - gUnknown_845963C:: @ 845963C gbapal .incbin "graphics/pokemon_special_anim/unk_845963C.gbapal" diff --git a/include/pokemon_special_anim_internal.h b/include/pokemon_special_anim_internal.h new file mode 100644 index 000000000..276168aa6 --- /dev/null +++ b/include/pokemon_special_anim_internal.h @@ -0,0 +1,51 @@ +#ifndef GUARD_POKEMON_SPECIAL_ANIM_INTERNAL_H +#define GUARD_POKEMON_SPECIAL_ANIM_INTERNAL_H + +#include "pokemon_special_anim.h" + +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 + +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); +void sub_811D5A0(void); +void sub_811D5B0(void); +bool8 sub_811D5C0(void); +void sub_811D6EC(void); +bool8 sub_811D6FC(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); +void sub_811DCF0(u16 itemId); +bool8 sub_811DD90(void); +void sub_811E040(void); + +#endif //GUARD_POKEMON_SPECIAL_ANIM_INTERNAL_H diff --git a/src/pokemon_special_anim.c b/src/pokemon_special_anim.c index 542e0ffb3..46d1251df 100644 --- a/src/pokemon_special_anim.c +++ b/src/pokemon_special_anim.c @@ -2,36 +2,18 @@ #include "gflib.h" #include "data.h" #include "party_menu.h" +#include "pokemon_special_anim_internal.h" #include "item_use.h" #include "task.h" #include "constants/songs.h" +#include "constants/items.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 bool32 gUnknown_203B090 = FALSE; EWRAM_DATA u8 gUnknown_203B094 = 0; +EWRAM_DATA struct PokemonSpecialAnim * gUnknown_203B098 = NULL; struct PokemonSpecialAnim * sub_811C5D4(u8 slotId, u16 itemId, MainCallback callback); void sub_811C748(struct PokemonSpecialAnim * ptr); @@ -45,29 +27,6 @@ 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); -void sub_811D5A0(void); -void sub_811D5B0(void); -bool8 sub_811D5C0(void); -void sub_811D6EC(void); -bool8 sub_811D6FC(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); -void sub_811DCF0(u16 itemId); -bool8 sub_811DD90(void); -void sub_811E040(void); void sub_811C540(u8 slotId, u16 itemId, MainCallback callback) { @@ -638,3 +597,112 @@ void sub_811CF88(u8 taskId) break; } } + +const struct { + u16 itemId; + u16 animType; +} gUnknown_8459634[2] = { + {ITEM_RARE_CANDY, 0}, + {ITEM_POTION, 1} +}; + +u16 sub_811D018(u16 itemId) +{ + int i; + + for (i = 0; i < NELEMS(gUnknown_8459634); i++) + { + if (gUnknown_8459634[i].itemId == itemId) + return gUnknown_8459634[i].animType; + } + + if (itemId >= ITEM_TM01 && itemId <= ITEM_HM08) + { + return 4; + } + + return 0; +} + +u8 sub_811D058(u16 friendship) +{ + if (friendship <= 100) + return 0; + else if (friendship <= 150) + return 1; + else if (friendship <= 200) + return 2; + else + return 3; +} + +struct PokemonSpecialAnim * sub_811D080(void) +{ + return (void *)GetWordTaskArg(gUnknown_203B094, 0); +} + +struct Pokemon * sub_811D094(void) +{ + gUnknown_203B098 = sub_811D080(); + return &gUnknown_203B098->pokemon; +} + +u8 *sub_811D0A8(void) +{ + return sub_811D080()->field_00a8; +} + +u16 sub_811D0B4(void) +{ + return sub_811D080()->itemId; +} + +u8 *sub_811D0C4(void) +{ + return sub_811D080()->nameOfMoveForgotten; +} + +u8 *sub_811D0D0(void) +{ + return sub_811D080()->nameOfMoveToTeach; +} + +u8 *sub_811D0DC(u8 *dest) +{ + return StringCopy(dest, sub_811D080()->nickname); +} + +u8 *sub_811D0F4(void) +{ + return sub_811D080()->nickname; +} + +u8 sub_811D100(void) +{ + return sub_811D080()->animType; +} + +u16 sub_811D110(void) +{ + return sub_811D080()->species; +} + +u32 sub_811D120(void) +{ + return sub_811D080()->personality; +} + +void BufferMonStatsToTaskData(struct Pokemon * pokemon, u16 *data) +{ + data[0] = GetMonData(pokemon, MON_DATA_MAX_HP); + data[1] = GetMonData(pokemon, MON_DATA_ATK); + data[2] = GetMonData(pokemon, MON_DATA_DEF); + data[3] = GetMonData(pokemon, MON_DATA_SPEED); + data[4] = GetMonData(pokemon, MON_DATA_SPATK); + data[5] = GetMonData(pokemon, MON_DATA_SPDEF); +} + +bool32 sub_811D178(void) +{ + return gUnknown_203B090; +} diff --git a/sym_ewram.txt b/sym_ewram.txt index 3da5bb78f..085b26c32 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -261,18 +261,8 @@ gPlayerAvatar: @ 2037078 .include "src/rfu_union_tool.o" .align 2 .include "src/union_room_battle.o" - .align 2 - @ .include "src/pokemon_special_anim.o" -gUnknown_203B090: @ 203B090 - .space 0x4 - -gUnknown_203B094: @ 203B094 - .space 0x4 - -gUnknown_203B098: @ 203B098 - .space 0x4 - + .include "src/pokemon_special_anim.o" .align 2 .include "src/party_menu.o" .align 2 -- cgit v1.2.3 From 47fe2cb9ce8b2aec7d40fe5f44c1248b090606d6 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 20 Mar 2020 20:33:25 -0400 Subject: through sub_811D2D0 --- asm/pokemon_special_anim.s | 161 -------------------------------- data/pokemon_special_anim.s | 63 ------------- include/pokemon_special_anim_internal.h | 13 ++- include/strings.h | 6 ++ ld_script.txt | 2 + src/pokemon_special_anim.c | 12 +-- src/pokemon_special_anim_scene.c | 116 +++++++++++++++++++++++ 7 files changed, 141 insertions(+), 232 deletions(-) create mode 100644 src/pokemon_special_anim_scene.c diff --git a/asm/pokemon_special_anim.s b/asm/pokemon_special_anim.s index 6eed303ea..620689927 100644 --- a/asm/pokemon_special_anim.s +++ b/asm/pokemon_special_anim.s @@ -5,167 +5,6 @@ .text - thumb_func_start sub_811D184 -sub_811D184: @ 811D184 - push {r4,r5,lr} - sub sp, 0x8 - adds r4, r0, 0 - lsls r5, r1, 16 - lsrs r5, 16 - bl FreeAllWindowBuffers - bl ResetTempTileDataBuffers - movs r0, 0 - movs r1, 0 - bl SetGpuReg - movs r0, 0 - bl ResetBgsAndClearDma3BusyFlags - ldr r1, _0811D270 @ =gUnknown_8459980 - movs r0, 0 - movs r2, 0x2 - bl InitBgsFromTemplates - ldr r0, _0811D274 @ =gUnknown_8459988 - bl InitWindows - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - ldr r0, _0811D278 @ =0x00000914 - adds r1, r4, r0 - movs r0, 0 - bl SetBgTilemapBuffer - ldr r0, _0811D27C @ =0x00001914 - adds r4, r0 - movs r0, 0x3 - adds r1, r4, 0 - bl SetBgTilemapBuffer - movs r1, 0xC0 - lsls r1, 19 - movs r0, 0 - movs r2, 0x20 - movs r3, 0x1 - bl RequestDma3Fill - movs r0, 0x20 - str r0, [sp] - str r0, [sp, 0x4] - movs r0, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect_Palette0 - adds r0, r5, 0 - bl sub_811D7D4 - movs r0, 0 - movs r1, 0 - bl FillWindowPixelBuffer - movs r0, 0 - movs r1, 0 - movs r2, 0xE0 - bl TextWindow_SetUserSelectedFrame - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram - movs r0, 0 - bl ShowBg - movs r0, 0x3 - bl ShowBg - movs r0, 0x1 - bl HideBg - movs r0, 0x2 - bl HideBg - movs r0, 0 - bl CopyBgTilemapBufferToVram - movs r0, 0x3 - bl CopyBgTilemapBufferToVram - movs r1, 0x82 - lsls r1, 5 - movs r0, 0 - bl SetGpuRegBits - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - add sp, 0x8 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0811D270: .4byte gUnknown_8459980 -_0811D274: .4byte gUnknown_8459988 -_0811D278: .4byte 0x00000914 -_0811D27C: .4byte 0x00001914 - thumb_func_end sub_811D184 - - thumb_func_start sub_811D280 -sub_811D280: @ 811D280 - push {lr} - bl FreeTempTileDataBuffersIfPossible - lsls r0, 24 - cmp r0, 0 - beq _0811D290 - movs r0, 0x1 - b _0811D298 -_0811D290: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - lsrs r0, 24 -_0811D298: - pop {r1} - bx r1 - thumb_func_end sub_811D280 - - thumb_func_start sub_811D29C -sub_811D29C: @ 811D29C - push {lr} - bl FreeAllWindowBuffers - pop {r0} - bx r0 - thumb_func_end sub_811D29C - - thumb_func_start sub_811D2A8 -sub_811D2A8: @ 811D2A8 - push {lr} - movs r0, 0 - bl PutWindowTilemap - movs r0, 0 - movs r1, 0x11 - bl FillWindowPixelBuffer - movs r0, 0 - movs r1, 0x1 - movs r2, 0xE - bl DrawTextBorderOuter - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram - pop {r0} - bx r0 - thumb_func_end sub_811D2A8 - - thumb_func_start sub_811D2D0 -sub_811D2D0: @ 811D2D0 - push {lr} - movs r0, 0 - bl ClearWindowTilemap - movs r0, 0 - movs r1, 0 - bl ClearStdWindowAndFrameToTransparent - movs r0, 0 - movs r1, 0x1 - bl CopyWindowToVram - pop {r0} - bx r0 - thumb_func_end sub_811D2D0 - thumb_func_start sub_811D2EC sub_811D2EC: @ 811D2EC push {r4-r7,lr} diff --git a/data/pokemon_special_anim.s b/data/pokemon_special_anim.s index b18f01ef9..b944a4aed 100644 --- a/data/pokemon_special_anim.s +++ b/data/pokemon_special_anim.s @@ -6,69 +6,6 @@ .section .rodata .align 2 -gUnknown_845963C:: @ 845963C gbapal - .incbin "graphics/pokemon_special_anim/unk_845963C.gbapal" - -gUnknown_845965C:: @ 845965C gbapal - .incbin "graphics/pokemon_special_anim/unk_845965C.gbapal" - -gUnknown_845967C:: @ 845967C 4bpp.lz - .incbin "graphics/pokemon_special_anim/unk_845967C.4bpp.lz" - -gUnknown_845973C:: @ 845973C bin.lz - .incbin "graphics/pokemon_special_anim/unk_845973C.bin.lz" - -gUnknown_8459868:: @ 8459868 gbapal - .incbin "graphics/pokemon_special_anim/unk_8459868.gbapal" - -gUnknown_8459888:: @ 8459888 4bpp.lz - .incbin "graphics/pokemon_special_anim/unk_8459888.4bpp.lz" - -gUnknown_84598A4:: @ 84598A4 gbapal - .incbin "graphics/pokemon_special_anim/unk_84598A4.gbapal" - -gUnknown_84598C4:: @ 84598C4 4bpp.lz - .incbin "graphics/pokemon_special_anim/unk_84598C4.4bpp.lz" - -gUnknown_8459940:: @ 8459940 gbapal - .incbin "graphics/pokemon_special_anim/unk_8459940.gbapal" - -gUnknown_8459960:: @ 8459960 4bpp.lz - .incbin "graphics/pokemon_special_anim/unk_8459960.4bpp.lz" - -gUnknown_8459980:: @ 8459980 bg_template - .4byte 0x000041f0 - @ { - @ .bg = 0, - @ .charBaseIndex = 0, - @ .mapBaseIndex = 31, - @ .screenSize = 0, - @ .paletteMode = 0, - @ .priority = 0, - @ .baseTile = 0x0001 - @ } - .4byte 0x000031cf - @ { - @ .bg = 3, - @ .charBaseIndex = 3, - @ .mapBaseIndex = 28, - @ .screenSize = 0, - @ .paletteMode = 0, - @ .priority = 3, - @ .baseTile = 0x0000 - @ } - -gUnknown_8459988:: @ 8459988 window_template - .byte 0, 1, 15, 28, 4, 15 - .2byte 0x000a - .byte 255, 0, 0, 0, 0, 0 - .2byte 0x0000 - -gUnknown_8459998:: @ 8459998 dataptr - .4byte gUnknown_841B2ED @ 1, - .4byte gUnknown_841B2F1 @ 2, and ‥ ‥ ‥ - .4byte gUnknown_841B2FF @ Poof! - gUnknown_84599A4:: @ 84599A4 .2byte 0x0000, 0x0010 diff --git a/include/pokemon_special_anim_internal.h b/include/pokemon_special_anim_internal.h index 276168aa6..048738ebe 100644 --- a/include/pokemon_special_anim_internal.h +++ b/include/pokemon_special_anim_internal.h @@ -3,6 +3,15 @@ #include "pokemon_special_anim.h" +struct PokemonSpecialAnimScene +{ + u8 filler_0000[0x914]; + u8 field_0914[BG_SCREEN_SIZE]; + u8 field_1114[BG_SCREEN_SIZE]; + u8 field_1914[BG_SCREEN_SIZE]; + u8 field_2114[0x720]; +}; // size=0x2834 + struct PokemonSpecialAnim { /*0x0000*/ u8 filler_0000[0x4]; @@ -21,10 +30,10 @@ struct PokemonSpecialAnim /*0x009e*/ u16 field_009e; /*0x00a0*/ u32 personality; /*0x00a4*/ u32 field_00a4; - /*0x00a8*/ u8 field_00a8[0x2834]; + /*0x00a8*/ struct PokemonSpecialAnimScene field_00a8; }; // size=0x28dc -void sub_811D184(u8 *buffer, u16 animType); +void sub_811D184(struct PokemonSpecialAnimScene * buffer, u16 animType); bool8 sub_811D280(void); void sub_811D29C(void); void sub_811D2A8(void); diff --git a/include/strings.h b/include/strings.h index 6016dc3e3..82c35d552 100644 --- a/include/strings.h +++ b/include/strings.h @@ -1441,4 +1441,10 @@ extern const u8 gPCText_Pokecenter[]; extern const u8 gPCText_Machine[]; extern const u8 gPCText_Simple[]; +// pokemon_special_anim + +extern const u8 gUnknown_841B2ED[]; +extern const u8 gUnknown_841B2F1[]; +extern const u8 gUnknown_841B2FF[]; + #endif //GUARD_STRINGS_H diff --git a/ld_script.txt b/ld_script.txt index b9de60577..bd57e8664 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -252,6 +252,7 @@ SECTIONS { src/rfu_union_tool.o(.text); src/union_room_battle.o(.text); src/pokemon_special_anim.o(.text); + src/pokemon_special_anim_scene.o(.text); asm/pokemon_special_anim.o(.text); src/party_menu.o(.text); src/union_room_chat.o(.text); @@ -555,6 +556,7 @@ SECTIONS { src/union_room_battle.o(.rodata); 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); diff --git a/src/pokemon_special_anim.c b/src/pokemon_special_anim.c index 46d1251df..b743d65a3 100644 --- a/src/pokemon_special_anim.c +++ b/src/pokemon_special_anim.c @@ -172,7 +172,7 @@ void sub_811C834(u8 taskId) { case 0: SetVBlankCallback(NULL); - sub_811D184(ptr->field_00a8, ptr->animType); + sub_811D184(&ptr->field_00a8, ptr->animType); sub_811D830(0); ptr->state++; break; @@ -282,7 +282,7 @@ void sub_811CA20(u8 taskId) { case 0: SetVBlankCallback(NULL); - sub_811D184(ptr->field_00a8, ptr->animType); + sub_811D184(&ptr->field_00a8, ptr->animType); sub_811D830(3); ptr->state++; break; @@ -391,7 +391,7 @@ void sub_811CBE4(u8 taskId) { case 0: SetVBlankCallback(NULL); - sub_811D184(ptr->field_00a8, ptr->animType); + sub_811D184(&ptr->field_00a8, ptr->animType); sub_811D830(0); ptr->state++; break; @@ -468,7 +468,7 @@ void sub_811CD68(u8 taskId) { case 0: SetVBlankCallback(NULL); - sub_811D184(ptr->field_00a8, ptr->animType); + sub_811D184(&ptr->field_00a8, ptr->animType); sub_811D830(3); ptr->state++; break; @@ -647,9 +647,9 @@ struct Pokemon * sub_811D094(void) return &gUnknown_203B098->pokemon; } -u8 *sub_811D0A8(void) +struct PokemonSpecialAnimScene * sub_811D0A8(void) { - return sub_811D080()->field_00a8; + return &sub_811D080()->field_00a8; } u16 sub_811D0B4(void) diff --git a/src/pokemon_special_anim_scene.c b/src/pokemon_special_anim_scene.c new file mode 100644 index 000000000..760ad2635 --- /dev/null +++ b/src/pokemon_special_anim_scene.c @@ -0,0 +1,116 @@ +#include "global.h" +#include "gflib.h" +#include "menu.h" +#include "new_menu_helpers.h" +#include "pokemon_special_anim_internal.h" +#include "strings.h" +#include "text_window.h" + +void sub_811D7D4(u16 animType); + +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"); +const u32 gUnknown_845967C[] = INCBIN_U32("graphics/pokemon_special_anim/unk_845967C.4bpp.lz"); +const u32 gUnknown_845973C[] = INCBIN_U32("graphics/pokemon_special_anim/unk_845973C.bin.lz"); +const u16 gUnknown_8459868[] = INCBIN_U16("graphics/pokemon_special_anim/unk_8459868.gbapal"); +const u32 gUnknown_8459888[] = INCBIN_U32("graphics/pokemon_special_anim/unk_8459888.4bpp.lz"); +const u16 gUnknown_84598A4[] = INCBIN_U16("graphics/pokemon_special_anim/unk_84598A4.gbapal"); +const u32 gUnknown_84598C4[] = INCBIN_U32("graphics/pokemon_special_anim/unk_84598C4.4bpp.lz"); +const u16 gUnknown_8459940[] = INCBIN_U16("graphics/pokemon_special_anim/unk_8459940.gbapal"); +const u32 gUnknown_8459960[] = INCBIN_U32("graphics/pokemon_special_anim/unk_8459960.4bpp.lz"); + +const struct BgTemplate gUnknown_8459980[] = { + { + .bg = 0, + .charBaseIndex = 0, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0x001 + }, { + .bg = 3, + .charBaseIndex = 3, + .mapBaseIndex = 28, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0x000 + } +}; + +const struct WindowTemplate gUnknown_8459988[] = { + { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 15, + .width = 28, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x00a + }, DUMMY_WIN_TEMPLATE +}; + +const u8 *const gUnknown_8459998[] = { + gUnknown_841B2ED, // 1, + gUnknown_841B2F1, // 2, and ‥ ‥ ‥ + gUnknown_841B2FF, // Poof! +}; + +void sub_811D184(struct PokemonSpecialAnimScene * buffer, u16 animType) +{ + FreeAllWindowBuffers(); + ResetTempTileDataBuffers(); + SetGpuReg(REG_OFFSET_DISPCNT, 0); + ResetBgsAndClearDma3BusyFlags(FALSE); + InitBgsFromTemplates(0, gUnknown_8459980, NELEMS(gUnknown_8459980)); + InitWindows(gUnknown_8459988); + ChangeBgX(0, 0, 0); + ChangeBgY(0, 0, 0); + ChangeBgX(3, 0, 0); + ChangeBgY(3, 0, 0); + SetBgTilemapBuffer(0, buffer->field_0914); + SetBgTilemapBuffer(3, buffer->field_1914); + RequestDma3Fill(0, (void *)BG_VRAM, 0x20, TRUE); + FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 0, 32, 32); + sub_811D7D4(animType); + FillWindowPixelBuffer(0, PIXEL_FILL(0)); + TextWindow_SetUserSelectedFrame(0, 0x000, 0xe0); + CopyWindowToVram(0, 3); + ShowBg(0); + ShowBg(3); + HideBg(1); + HideBg(2); + CopyBgTilemapBufferToVram(0); + CopyBgTilemapBufferToVram(3); + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); + SetGpuReg(REG_OFFSET_BLDCNT, 0); +} + +bool8 sub_811D280(void) +{ + if (!FreeTempTileDataBuffersIfPossible()) + return IsDma3ManagerBusyWithBgCopy(); + else + return TRUE; +} + +void sub_811D29C(void) +{ + FreeAllWindowBuffers(); +} + +void sub_811D2A8(void) +{ + PutWindowTilemap(0); + FillWindowPixelBuffer(0, PIXEL_FILL(1)); + DrawTextBorderOuter(0, 0x001, 0xE); + CopyWindowToVram(0, 3); +} + +void sub_811D2D0(void) +{ + ClearWindowTilemap(0); + ClearStdWindowAndFrameToTransparent(0, FALSE); + CopyWindowToVram(0, 1); +} -- cgit v1.2.3 From 218555e72ceeb55ad21c942c55796130cc3eb864 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 21 Mar 2020 10:48:55 -0400 Subject: through sub_811D5C0 --- asm/pokemon_special_anim.s | 495 -------------------------------- include/constants/pokemon.h | 1 - include/pokemon.h | 2 +- include/pokemon_special_anim_internal.h | 21 +- include/strings.h | 10 +- src/data/pokemon/experience_tables.h | 2 +- src/daycare.c | 4 +- src/pokemon.c | 4 +- src/pokemon_special_anim_scene.c | 202 +++++++++++++ 9 files changed, 237 insertions(+), 504 deletions(-) diff --git a/asm/pokemon_special_anim.s b/asm/pokemon_special_anim.s index 620689927..49fff6ca5 100644 --- a/asm/pokemon_special_anim.s +++ b/asm/pokemon_special_anim.s @@ -5,501 +5,6 @@ .text - thumb_func_start sub_811D2EC -sub_811D2EC: @ 811D2EC - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x14 - lsls r0, 24 - lsrs r5, r0, 24 - bl sub_811D0A8 - adds r4, r0, 0 - bl sub_811D0B4 - lsls r0, 16 - lsrs r7, r0, 16 - movs r0, 0 - mov r8, r0 - bl GetTextSpeedSetting - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - bl sub_811D094 - adds r6, r0, 0 - cmp r5, 0x9 - bls _0811D322 - b _0811D4C2 -_0811D322: - lsls r0, r5, 2 - ldr r1, _0811D32C @ =_0811D330 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0811D32C: .4byte _0811D330 - .align 2, 0 -_0811D330: - .4byte _0811D358 - .4byte _0811D38C - .4byte _0811D42C - .4byte _0811D418 - .4byte _0811D404 - .4byte _0811D450 - .4byte _0811D47C - .4byte _0811D488 - .4byte _0811D498 - .4byte _0811D3DC -_0811D358: - adds r4, 0x14 - adds r0, r7, 0 - bl ItemId_GetName - adds r1, r0, 0 - adds r0, r4, 0 - bl StringCopy - adds r2, r0, 0 - ldr r1, _0811D384 @ =gUnknown_841B285 - bl StringCopy - adds r2, r0, 0 - adds r0, r6, 0 - movs r1, 0x2 - bl GetMonData - ldr r1, _0811D388 @ =gUnknown_841B293 - adds r0, r4, 0 - bl StringAppend - b _0811D4A2 - .align 2, 0 -_0811D384: .4byte gUnknown_841B285 -_0811D388: .4byte gUnknown_841B293 -_0811D38C: - adds r0, r6, 0 - movs r1, 0x38 - bl GetMonData - lsls r0, 16 - lsrs r5, r0, 16 - adds r4, 0x14 - adds r0, r6, 0 - movs r1, 0x2 - adds r2, r4, 0 - bl GetMonData - ldr r1, _0811D3D4 @ =gUnknown_841B295 - adds r0, r4, 0 - bl StringAppend - adds r2, r0, 0 - cmp r5, 0x63 - bhi _0811D3B8 - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 -_0811D3B8: - movs r3, 0x3 - cmp r5, 0x63 - bhi _0811D3C0 - movs r3, 0x2 -_0811D3C0: - adds r0, r2, 0 - adds r1, r5, 0 - movs r2, 0 - bl ConvertIntToDecimalStringN - adds r2, r0, 0 - ldr r1, _0811D3D8 @ =gUnknown_841B2A7 - bl StringAppend - b _0811D4A2 - .align 2, 0 -_0811D3D4: .4byte gUnknown_841B295 -_0811D3D8: .4byte gUnknown_841B2A7 -_0811D3DC: - bl DynamicPlaceholderTextUtil_Reset - bl sub_811D0F4 - adds r1, r0, 0 - movs r0, 0 - bl DynamicPlaceholderTextUtil_SetPlaceholderPtr - bl sub_811D0D0 - adds r1, r0, 0 - movs r0, 0x1 - bl DynamicPlaceholderTextUtil_SetPlaceholderPtr - adds r4, 0x14 - ldr r1, _0811D400 @ =gUnknown_841B32E - b _0811D470 - .align 2, 0 -_0811D400: .4byte gUnknown_841B32E -_0811D404: - ldr r1, _0811D444 @ =gUnknown_841B2F1 - movs r2, 0x1 - negs r2, r2 - movs r0, 0x2 - bl GetStringWidth - add r0, r8 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 -_0811D418: - ldr r1, _0811D448 @ =gUnknown_841B2ED - movs r2, 0x1 - negs r2, r2 - movs r0, 0x2 - bl GetStringWidth - add r0, r8 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 -_0811D42C: - adds r4, 0x14 - ldr r1, _0811D44C @ =gUnknown_8459998 - subs r0, r5, 0x2 - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - adds r0, r4, 0 - bl StringCopy - movs r1, 0x1 - mov r9, r1 - b _0811D4A2 - .align 2, 0 -_0811D444: .4byte gUnknown_841B2F1 -_0811D448: .4byte gUnknown_841B2ED -_0811D44C: .4byte gUnknown_8459998 -_0811D450: - bl DynamicPlaceholderTextUtil_Reset - bl sub_811D0F4 - adds r1, r0, 0 - movs r0, 0 - bl DynamicPlaceholderTextUtil_SetPlaceholderPtr - bl sub_811D0C4 - adds r1, r0, 0 - movs r0, 0x1 - bl DynamicPlaceholderTextUtil_SetPlaceholderPtr - adds r4, 0x14 - ldr r1, _0811D478 @ =gUnknown_841B306 -_0811D470: - adds r0, r4, 0 - bl DynamicPlaceholderTextUtil_ExpandPlaceholders - b _0811D4A2 - .align 2, 0 -_0811D478: .4byte gUnknown_841B306 -_0811D47C: - adds r4, 0x14 - ldr r1, _0811D484 @ =gUnknown_841B315 - b _0811D48C - .align 2, 0 -_0811D484: .4byte gUnknown_841B315 -_0811D488: - adds r4, 0x14 - ldr r1, _0811D494 @ =gUnknown_841B31B -_0811D48C: - adds r0, r4, 0 - bl StringCopy - b _0811D4A2 - .align 2, 0 -_0811D494: .4byte gUnknown_841B31B -_0811D498: - adds r4, 0x14 - ldr r1, _0811D4D0 @ =gUnknown_841B329 - adds r0, r4, 0 - bl StringCopy -_0811D4A2: - mov r0, r8 - lsls r3, r0, 24 - lsrs r3, 24 - movs r0, 0 - str r0, [sp] - mov r1, r9 - str r1, [sp, 0x4] - str r0, [sp, 0x8] - str r0, [sp, 0xC] - movs r0, 0x4 - str r0, [sp, 0x10] - movs r0, 0 - movs r1, 0x2 - adds r2, r4, 0 - bl AddTextPrinterParameterized5 -_0811D4C2: - add sp, 0x14 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0811D4D0: .4byte gUnknown_841B329 - thumb_func_end sub_811D2EC - - thumb_func_start sub_811D4D4 -sub_811D4D4: @ 811D4D4 - push {lr} - movs r0, 0 - movs r1, 0x11 - bl FillWindowPixelBuffer - movs r0, 0 - movs r1, 0x2 - bl CopyWindowToVram - pop {r0} - bx r0 - thumb_func_end sub_811D4D4 - - thumb_func_start sub_811D4EC -sub_811D4EC: @ 811D4EC - push {lr} - movs r0, 0 - bl IsTextPrinterActive - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - thumb_func_end sub_811D4EC - - thumb_func_start sub_811D4FC -sub_811D4FC: @ 811D4FC - push {r4,lr} - bl sub_811D0A8 - adds r4, r0, 0 - movs r0, 0 - strh r0, [r4] - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x80 - lsls r1, 9 - lsls r1, r0 - movs r0, 0x4 - orrs r1, r0 - adds r0, r1, 0 - movs r1, 0x10 - movs r2, 0 - bl BlendPalettes - adds r0, r4, 0 - bl sub_811E204 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_811D4FC - - thumb_func_start sub_811D530 -sub_811D530: @ 811D530 - push {r4,r5,lr} - sub sp, 0x4 - bl sub_811D0A8 - adds r4, r0, 0 - ldrh r0, [r4] - cmp r0, 0 - beq _0811D546 - cmp r0, 0x1 - beq _0811D57E - b _0811D594 -_0811D546: - bl sub_811E2F4 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - bne _0811D594 - movs r0, 0 - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 24 - movs r2, 0x80 - lsls r2, 9 - lsls r2, r0 - movs r0, 0x4 - orrs r2, r0 - movs r1, 0x1 - negs r1, r1 - str r5, [sp] - adds r0, r2, 0 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - b _0811D594 -_0811D57E: - ldr r0, _0811D590 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0811D594 - movs r0, 0 - b _0811D596 - .align 2, 0 -_0811D590: .4byte gPaletteFade -_0811D594: - movs r0, 0x1 -_0811D596: - add sp, 0x4 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_811D530 - - thumb_func_start sub_811D5A0 -sub_811D5A0: @ 811D5A0 - push {lr} - bl sub_811D0A8 - movs r1, 0 - strh r1, [r0] - pop {r0} - bx r0 - thumb_func_end sub_811D5A0 - - thumb_func_start sub_811D5B0 -sub_811D5B0: @ 811D5B0 - push {lr} - bl sub_811E388 - bl ResetPaletteFadeControl - pop {r0} - bx r0 - thumb_func_end sub_811D5B0 - - thumb_func_start sub_811D5C0 -sub_811D5C0: @ 811D5C0 - push {r4,lr} - sub sp, 0x4 - bl sub_811D0A8 - adds r4, r0, 0 - ldrh r0, [r4] - cmp r0, 0x8 - bls _0811D5D2 - b _0811D6DE -_0811D5D2: - lsls r0, 2 - ldr r1, _0811D5DC @ =_0811D5E0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0811D5DC: .4byte _0811D5E0 - .align 2, 0 -_0811D5E0: - .4byte _0811D604 - .4byte _0811D60C - .4byte _0811D61C - .4byte _0811D62C - .4byte _0811D63E - .4byte _0811D670 - .4byte _0811D6A0 - .4byte _0811D6BA - .4byte _0811D6CA -_0811D604: - movs r0, 0 - bl sub_811E194 - b _0811D6D6 -_0811D60C: - bl sub_811D9A8 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - bne _0811D6E2 - strh r0, [r4, 0x4] - b _0811D6D6 -_0811D61C: - ldrh r0, [r4, 0x4] - adds r0, 0x1 - strh r0, [r4, 0x4] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x14 - bls _0811D6E2 - b _0811D6D6 -_0811D62C: - adds r0, r4, 0 - movs r1, 0x1 - movs r2, 0 - movs r3, 0x1 - bl sub_811DB7C - movs r0, 0 - strh r0, [r4, 0x4] - b _0811D6D6 -_0811D63E: - ldrh r0, [r4, 0x4] - adds r0, 0x1 - strh r0, [r4, 0x4] - lsls r0, 16 - cmp r0, 0 - beq _0811D6E2 - movs r0, 0 - strh r0, [r4, 0x4] - movs r0, 0x85 - bl PlaySE - ldr r0, _0811D66C @ =0x00007da8 - str r0, [sp] - movs r0, 0x1 - movs r1, 0x2 - movs r2, 0 - movs r3, 0xC - bl BeginNormalPaletteFade - adds r0, r4, 0 - bl sub_811E348 - b _0811D6D6 - .align 2, 0 -_0811D66C: .4byte 0x00007da8 -_0811D670: - ldrh r0, [r4, 0x4] - adds r0, 0x1 - strh r0, [r4, 0x4] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x46 - bls _0811D6E2 - adds r0, r4, 0 - bl sub_811DBA8 - ldr r0, _0811D69C @ =0x00007da8 - str r0, [sp] - movs r0, 0x1 - movs r1, 0x6 - movs r2, 0xC - movs r3, 0 - bl BeginNormalPaletteFade - movs r0, 0 - strh r0, [r4, 0x4] - b _0811D6D6 - .align 2, 0 -_0811D69C: .4byte 0x00007da8 -_0811D6A0: - ldrh r0, [r4, 0x4] - adds r0, 0x1 - strh r0, [r4, 0x4] - bl sub_811E5A4 - adds r1, r0, 0 - cmp r1, 0 - bne _0811D6E2 - ldrh r0, [r4, 0x4] - cmp r0, 0x28 - bls _0811D6E2 - strh r1, [r4, 0x4] - b _0811D6D6 -_0811D6BA: - ldrh r0, [r4, 0x4] - adds r0, 0x1 - strh r0, [r4, 0x4] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x14 - bls _0811D6E2 - b _0811D6D6 -_0811D6CA: - movs r0, 0x54 - bl PlaySE - ldr r0, [r4, 0x10] - bl DestroySprite -_0811D6D6: - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - b _0811D6E2 -_0811D6DE: - movs r0, 0 - b _0811D6E4 -_0811D6E2: - movs r0, 0x1 -_0811D6E4: - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_811D5C0 - thumb_func_start sub_811D6EC sub_811D6EC: @ 811D6EC push {lr} diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index bc02bffdd..747bdea4c 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -211,7 +211,6 @@ #define PARTY_SIZE 6 #define MAX_TOTAL_EVS 510 #define UNOWN_FORM_COUNT 28 -#define MAX_MON_LEVEL 100 #define BOX_NAME_LENGTH 8 #endif // GUARD_CONSTANTS_POKEMON_H diff --git a/include/pokemon.h b/include/pokemon.h index 3cefcfcf2..3dd9c5052 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -322,7 +322,7 @@ extern const struct Evolution gEvolutionTable[][EVOS_PER_MON]; extern const u8 gStatStageRatios[][2]; extern struct SpriteTemplate gMultiuseSpriteTemplate; extern struct PokemonStorage* gPokemonStoragePtr; -extern const u32 gExperienceTables[][MAX_MON_LEVEL + 1]; +extern const u32 gExperienceTables[][MAX_LEVEL + 1]; extern const u16 *const gLevelUpLearnsets[]; extern const u8 gFacilityClassToPicIndex[]; extern const u8 gFacilityClassToTrainerClass[]; diff --git a/include/pokemon_special_anim_internal.h b/include/pokemon_special_anim_internal.h index 048738ebe..07acd3443 100644 --- a/include/pokemon_special_anim_internal.h +++ b/include/pokemon_special_anim_internal.h @@ -5,7 +5,12 @@ struct PokemonSpecialAnimScene { - u8 filler_0000[0x914]; + u16 field_0000; + u8 filler_0002[2]; + u16 field_0004; + u8 filler_0006[0xA]; + struct Sprite * field_0010; + u8 field_0014[0x900]; u8 field_0914[BG_SCREEN_SIZE]; u8 field_1114[BG_SCREEN_SIZE]; u8 field_1914[BG_SCREEN_SIZE]; @@ -33,6 +38,20 @@ struct PokemonSpecialAnim /*0x00a8*/ struct PokemonSpecialAnimScene field_00a8; }; // size=0x28dc +struct PokemonSpecialAnim * sub_811D080(void); +struct Pokemon * sub_811D094(void); +struct PokemonSpecialAnimScene * sub_811D0A8(void); +u16 sub_811D0B4(void); +u8 *sub_811D0C4(void); +u8 *sub_811D0D0(void); +u8 *sub_811D0DC(u8 *dest); +u8 *sub_811D0F4(void); +u8 sub_811D100(void); +u16 sub_811D110(void); +u32 sub_811D120(void); +void BufferMonStatsToTaskData(struct Pokemon * pokemon, u16 *data); +bool32 sub_811D178(void); + void sub_811D184(struct PokemonSpecialAnimScene * buffer, u16 animType); bool8 sub_811D280(void); void sub_811D29C(void); diff --git a/include/strings.h b/include/strings.h index 82c35d552..809a17d9d 100644 --- a/include/strings.h +++ b/include/strings.h @@ -1442,9 +1442,17 @@ extern const u8 gPCText_Machine[]; extern const u8 gPCText_Simple[]; // pokemon_special_anim - extern const u8 gUnknown_841B2ED[]; extern const u8 gUnknown_841B2F1[]; extern const u8 gUnknown_841B2FF[]; +extern const u8 gUnknown_841B285[]; +extern const u8 gUnknown_841B293[]; +extern const u8 gUnknown_841B295[]; +extern const u8 gUnknown_841B2A7[]; +extern const u8 gUnknown_841B32E[]; +extern const u8 gUnknown_841B306[]; +extern const u8 gUnknown_841B315[]; +extern const u8 gUnknown_841B31B[]; +extern const u8 gUnknown_841B329[]; #endif //GUARD_STRINGS_H diff --git a/src/data/pokemon/experience_tables.h b/src/data/pokemon/experience_tables.h index b2723e9d2..15bcadeb2 100644 --- a/src/data/pokemon/experience_tables.h +++ b/src/data/pokemon/experience_tables.h @@ -15,7 +15,7 @@ :(n <= 36) ? ((n + 14) * CUBE(n) / 50) \ : (((n / 2) + 32) * CUBE(n) / 50) -const u32 gExperienceTables[][MAX_MON_LEVEL + 1] = +const u32 gExperienceTables[][MAX_LEVEL + 1] = { { // Medium Fast 0, // 0 diff --git a/src/daycare.c b/src/daycare.c index 0a19c6c9b..e07c2a234 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -479,7 +479,7 @@ static void ApplyDaycareExperience(struct Pokemon *mon) bool8 firstMove; u16 learnedMove; - for (i = 0; i < MAX_MON_LEVEL; i++) + for (i = 0; i < MAX_LEVEL; i++) { // Add the mon's gained daycare experience level by level until it can't level up anymore. if (TryIncrementMonLevel(mon)) @@ -513,7 +513,7 @@ static u16 TakeSelectedPokemonFromDaycare(struct DaycareMon *daycareMon) species = GetBoxMonData(&daycareMon->mon, MON_DATA_SPECIES); BoxMonToMon(&daycareMon->mon, &pokemon); - if (GetMonData(&pokemon, MON_DATA_LEVEL) != MAX_MON_LEVEL) + if (GetMonData(&pokemon, MON_DATA_LEVEL) != MAX_LEVEL) { experience = GetMonData(&pokemon, MON_DATA_EXP) + daycareMon->steps; SetMonData(&pokemon, MON_DATA_EXP, &experience); diff --git a/src/pokemon.c b/src/pokemon.c index b9e62502d..4c5a3e867 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -2143,7 +2143,7 @@ static u8 GetLevelFromMonExp(struct Pokemon *mon) u32 exp = GetMonData(mon, MON_DATA_EXP, NULL); s32 level = 1; - while (level <= MAX_MON_LEVEL && gExperienceTables[gBaseStats[species].growthRate][level] <= exp) + while (level <= MAX_LEVEL && gExperienceTables[gBaseStats[species].growthRate][level] <= exp) level++; return level - 1; @@ -2155,7 +2155,7 @@ u8 GetLevelFromBoxMonExp(struct BoxPokemon *boxMon) u32 exp = GetBoxMonData(boxMon, MON_DATA_EXP, NULL); s32 level = 1; - while (level <= MAX_MON_LEVEL && gExperienceTables[gBaseStats[species].growthRate][level] <= exp) + while (level <= MAX_LEVEL && gExperienceTables[gBaseStats[species].growthRate][level] <= exp) level++; return level - 1; diff --git a/src/pokemon_special_anim_scene.c b/src/pokemon_special_anim_scene.c index 760ad2635..50d546415 100644 --- a/src/pokemon_special_anim_scene.c +++ b/src/pokemon_special_anim_scene.c @@ -1,12 +1,23 @@ #include "global.h" #include "gflib.h" +#include "dynamic_placeholder_text_util.h" +#include "item.h" #include "menu.h" #include "new_menu_helpers.h" #include "pokemon_special_anim_internal.h" #include "strings.h" #include "text_window.h" +#include "constants/songs.h" void sub_811D7D4(u16 animType); +void sub_811DB7C(struct PokemonSpecialAnimScene * scene, u8 a1, u8 a2, u8 a3); +void sub_811DBA8(struct PokemonSpecialAnimScene * scene); +void sub_811E194(u8 a0); +void sub_811E204(struct PokemonSpecialAnimScene * scene); +bool8 sub_811E2F4(void); +void sub_811E348(struct PokemonSpecialAnimScene * scene); +void sub_811E388(void); +bool32 sub_811E5A4(void); 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"); @@ -114,3 +125,194 @@ void sub_811D2D0(void) ClearStdWindowAndFrameToTransparent(0, FALSE); CopyWindowToVram(0, 1); } + +void sub_811D2EC(u8 a0) +{ + // 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 + u16 level; + u8 *str; + + switch (a0) + { + case 0: // Item was used on Mon + str = StringCopy(scene->field_0014, ItemId_GetName(itemId)); + str = StringCopy(str, gUnknown_841B285); + GetMonData(pokemon, MON_DATA_NICKNAME, str); + StringAppend(scene->field_0014, gUnknown_841B293); + break; + case 1: // Mon's level was elevated to level + level = GetMonData(pokemon, MON_DATA_LEVEL); + GetMonData(pokemon, MON_DATA_NICKNAME, scene->field_0014); + str = StringAppend(scene->field_0014, gUnknown_841B295); + if (level < MAX_LEVEL) + level++; + str = ConvertIntToDecimalStringN(str, level, STR_CONV_MODE_LEFT_ALIGN, level < MAX_LEVEL ? 2 : 3); + StringAppend(str, gUnknown_841B2A7); + break; + case 9: // Mon learned move + DynamicPlaceholderTextUtil_Reset(); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, sub_811D0F4()); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, sub_811D0D0()); + DynamicPlaceholderTextUtil_ExpandPlaceholders(scene->field_0014, gUnknown_841B32E); + break; + case 4: // poof! + strWidth += GetStringWidth(2, gUnknown_841B2F1, -1); + // fallthrough + case 3: // 2 and... + strWidth += GetStringWidth(2, gUnknown_841B2ED, -1); + // fallthrough + case 2: // 1 + StringCopy(scene->field_0014, gUnknown_8459998[a0 - 2]); + textSpeed = 1; + break; + case 5: // Mon forgot move + DynamicPlaceholderTextUtil_Reset(); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, sub_811D0F4()); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, sub_811D0C4()); + DynamicPlaceholderTextUtil_ExpandPlaceholders(scene->field_0014, gUnknown_841B306); + break; + case 6: // And... + StringCopy(scene->field_0014, gUnknown_841B315); + break; + case 7: // Machine set! + StringCopy(scene->field_0014, gUnknown_841B31B); + break; + case 8: // Huh? + StringCopy(scene->field_0014, gUnknown_841B329); + break; + default: + return; + } + + AddTextPrinterParameterized5(0, 2, scene->field_0014, strWidth, 0, textSpeed, NULL, 0, 4); +} + +void sub_811D4D4(void) +{ + FillWindowPixelBuffer(0, PIXEL_FILL(1)); + CopyWindowToVram(0, 2); +} + +bool8 sub_811D4EC(void) +{ + return IsTextPrinterActive(0); +} + +void sub_811D4FC(void) +{ + struct PokemonSpecialAnimScene * scene = sub_811D0A8(); + scene->field_0000 = 0; + BlendPalettes((0x10000 << IndexOfSpritePaletteTag(0)) | 4, 16, RGB_BLACK); + sub_811E204(scene); +} + +bool8 sub_811D530(void) +{ + struct PokemonSpecialAnimScene * scene = sub_811D0A8(); + + switch (scene->field_0000) + { + case 0: + if (!sub_811E2F4()) + { + BeginNormalPaletteFade((0x10000 << IndexOfSpritePaletteTag(0)) | 4, -1, 16, 0, RGB_BLACK); + scene->field_0000++; + } + break; + case 1: + if (!gPaletteFade.active) + return FALSE; + break; + } + return TRUE; +} + +void sub_811D5A0(void) +{ + struct PokemonSpecialAnimScene * scene = sub_811D0A8(); + scene->field_0000 = 0; +} + +void sub_811D5B0(void) +{ + sub_811E388(); + ResetPaletteFadeControl(); +} + +bool8 sub_811D5C0(void) +{ + struct PokemonSpecialAnimScene * scene = sub_811D0A8(); + switch (scene->field_0000) + { + case 0: + sub_811E194(0); + scene->field_0000++; + break; + case 1: + if (!sub_811D9A8()) + { + scene->field_0004 = 0; + scene->field_0000++; + } + break; + case 2: + scene->field_0004++; + if (scene->field_0004 > 20) + scene->field_0000++; + break; + case 3: + sub_811DB7C(scene, 1, 0, 1); + scene->field_0004 = 0; + scene->field_0000++; + break; + case 4: + scene->field_0004++; + if (scene->field_0004 > 0) + { + scene->field_0004 = 0; + PlaySE(SE_W025); + BeginNormalPaletteFade(0x00000001, 2, 0, 12, RGB(8, 13, 31)); + sub_811E348(scene); + scene->field_0000++; + } + break; + case 5: + scene->field_0004++; + if (scene->field_0004 > 70) + { + sub_811DBA8(scene); + BeginNormalPaletteFade(0x00000001, 6, 12, 0, RGB(8, 13, 31)); + scene->field_0004 = 0; + scene->field_0000++; + } + break; + case 6: + scene->field_0004++; + if (!sub_811E5A4() && scene->field_0004 > 40) + { + scene->field_0004 = 0; + scene->field_0000++; + } + break; + case 7: + scene->field_0004++; + if (scene->field_0004 > 20) + { + scene->field_0000++; + } + break; + case 8: + PlaySE(SE_EXPMAX); + DestroySprite(scene->field_0010); + scene->field_0000++; + break; + default: + return FALSE; + } + return TRUE; +} -- cgit v1.2.3 From d0be58d07700df1e1f000e24176e210e2038f34e Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 21 Mar 2020 16:55:56 -0400 Subject: through sub_811E040 --- asm/pokemon_special_anim.s | 1264 ------------------------------- data/pokemon_special_anim.s | 126 --- include/pokemon_special_anim_internal.h | 11 +- include/strings.h | 6 + ld_script.txt | 1 - src/pokemon_special_anim.c | 4 +- src/pokemon_special_anim_scene.c | 700 ++++++++++++++++- 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; + } +} -- cgit v1.2.3 From 41704d705448fb14d3b372a21fe42767ebc4a0a5 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 21 Mar 2020 19:46:43 -0400 Subject: Finish pokemon_special_anim_scene.s --- asm/pokemon_special_anim.s | 1295 ------------------------------- data/pokemon_special_anim.s | 7 - include/pokemon_special_anim_internal.h | 2 +- include/strings.h | 2 + ld_script.txt | 1 - src/pokemon_special_anim_scene.c | 418 +++++++++- sym_bss.txt | 9 +- 7 files changed, 420 insertions(+), 1314 deletions(-) delete mode 100644 asm/pokemon_special_anim.s delete mode 100644 data/pokemon_special_anim.s diff --git a/asm/pokemon_special_anim.s b/asm/pokemon_special_anim.s deleted file mode 100644 index 29241bf2b..000000000 --- a/asm/pokemon_special_anim.s +++ /dev/null @@ -1,1295 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_811E06C -sub_811E06C: @ 811E06C - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r3, r0, 0 - adds r5, r1, 0 - lsls r2, 24 - lsrs r2, 24 - mov r8, r2 - cmp r2, 0x3 - bne _0811E088 - movs r0, 0x78 - strh r0, [r5, 0x20] - ldrh r0, [r3, 0x8] - b _0811E08E -_0811E088: - movs r0, 0x78 - strh r0, [r5, 0x20] - ldrh r0, [r3, 0x6] -_0811E08E: - strh r0, [r5, 0x22] - ldrh r0, [r5, 0x20] - adds r0, 0x4 - strh r0, [r5, 0x20] - ldrh r0, [r5, 0x22] - adds r0, 0x4 - strh r0, [r5, 0x22] - bl sub_811D110 - lsls r0, 16 - lsrs r6, r0, 16 - bl sub_811D120 - adds r7, r0, 0 - bl sub_811D100 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x4 - bne _0811E0CC - adds r0, r6, 0 - adds r1, r7, 0 - movs r2, 0 - bl sub_812EA78 - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r6, 0 - adds r1, r7, 0 - movs r2, 0x1 - b _0811E0E0 -_0811E0CC: - adds r0, r6, 0 - adds r1, r7, 0 - movs r2, 0x3 - bl sub_812EA78 - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r6, 0 - adds r1, r7, 0 - movs r2, 0x4 -_0811E0E0: - bl sub_812EA78 - lsls r0, 24 - lsrs r0, 24 - cmp r4, 0xFF - bne _0811E0EE - movs r4, 0 -_0811E0EE: - cmp r0, 0xFF - bne _0811E0F4 - movs r0, 0 -_0811E0F4: - strh r4, [r5, 0x3A] - strh r0, [r5, 0x3C] - adds r0, r5, 0 - mov r1, r8 - bl sub_811DB48 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_811E06C - - thumb_func_start sub_811E10C -sub_811E10C: @ 811E10C - push {r4,lr} - bl sub_811D0A8 - adds r4, r0, 0 - ldr r0, [r4, 0xC] - bl sub_811E128 - ldr r0, [r4, 0x10] - bl sub_811E128 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_811E10C - - thumb_func_start sub_811E128 -sub_811E128: @ 811E128 - movs r1, 0 - strh r1, [r0, 0x2E] - strh r1, [r0, 0x30] - ldr r1, _0811E134 @ =sub_811E154 - str r1, [r0, 0x1C] - bx lr - .align 2, 0 -_0811E134: .4byte sub_811E154 - thumb_func_end sub_811E128 - - thumb_func_start sub_811E138 -sub_811E138: @ 811E138 - push {lr} - bl sub_811D0A8 - ldr r0, [r0, 0xC] - ldr r1, [r0, 0x1C] - ldr r0, _0811E150 @ =SpriteCallbackDummy - eors r1, r0 - negs r0, r1 - orrs r0, r1 - lsrs r0, 31 - pop {r1} - bx r1 - .align 2, 0 -_0811E150: .4byte SpriteCallbackDummy - thumb_func_end sub_811E138 - - thumb_func_start sub_811E154 -sub_811E154: @ 811E154 - push {lr} - adds r1, r0, 0 - movs r2, 0x2E - ldrsh r0, [r1, r2] - cmp r0, 0 - beq _0811E166 - cmp r0, 0x1 - beq _0811E174 - b _0811E18C -_0811E166: - ldrh r0, [r1, 0x20] - adds r0, 0x3 - strh r0, [r1, 0x20] - ldrh r0, [r1, 0x2E] - adds r0, 0x1 - strh r0, [r1, 0x2E] - b _0811E18C -_0811E174: - ldrh r0, [r1, 0x30] - adds r0, 0x1 - strh r0, [r1, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1E - ble _0811E18C - ldrh r0, [r1, 0x20] - subs r0, 0x3 - strh r0, [r1, 0x20] - ldr r0, _0811E190 @ =SpriteCallbackDummy - str r0, [r1, 0x1C] -_0811E18C: - pop {r0} - bx r0 - .align 2, 0 -_0811E190: .4byte SpriteCallbackDummy - thumb_func_end sub_811E154 - - thumb_func_start sub_811E194 -sub_811E194: @ 811E194 - 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 _0811E1F8 - ldr r0, _0811E1EC @ =sub_811D9BC - movs r1, 0x1 - 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 r2, [r5, 0x10] - adds r0, r4, 0 - movs r1, 0x9 - bl SetWordTaskArg - ldr r1, _0811E1F0 @ =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 r2, 0x1 - strh r2, [r1, 0x18] - movs r0, 0x6 - strh r0, [r1, 0x12] - ldrb r5, [r5, 0xA] - cmp r6, r5 - bls _0811E1F4 - strh r2, [r1, 0xE] - b _0811E1F8 - .align 2, 0 -_0811E1EC: .4byte sub_811D9BC -_0811E1F0: .4byte gTasks -_0811E1F4: - ldr r0, _0811E200 @ =0x0000ffff - strh r0, [r1, 0xE] -_0811E1F8: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0811E200: .4byte 0x0000ffff - thumb_func_end sub_811E194 - - thumb_func_start sub_811E204 -sub_811E204: @ 811E204 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - mov r10, r0 - ldr r0, _0811E2E0 @ =gUnknown_84599B8 - bl LoadCompressedSpriteSheet - ldr r0, _0811E2E4 @ =gUnknown_84599C0 - bl LoadSpritePalette - movs r0, 0 - mov r1, r10 - strh r0, [r1, 0x2] - ldr r0, _0811E2E8 @ =gUnknown_84599B2 - str r0, [sp, 0x4] - movs r1, 0x2 - str r1, [sp] -_0811E22C: - ldr r0, [sp, 0x4] - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - mov r9, r0 - mov r1, r9 - adds r1, 0x78 - ldr r0, [sp, 0x4] - ldrb r0, [r0, 0x1] - lsls r0, 24 - asrs r0, 24 - mov r8, r0 - mov r0, r10 - ldrh r2, [r0, 0x8] - add r2, r8 - lsls r2, 16 - asrs r2, 16 - ldr r0, _0811E2EC @ =gUnknown_8459AEC - movs r3, 0x2 - bl CreateSprite - lsls r0, 24 - lsrs r7, r0, 24 - cmp r7, 0x40 - beq _0811E2C0 - bl sub_811D110 - adds r5, r0, 0 - lsls r5, 16 - lsrs r5, 16 - bl sub_811D120 - adds r6, r0, 0 - ldr r0, _0811E2F0 @ =gSprites - lsls r4, r7, 4 - adds r4, r7 - lsls r4, 2 - adds r4, r0 - mov r1, r9 - lsls r0, r1, 3 - strh r0, [r4, 0x34] - mov r1, r8 - lsls r0, r1, 3 - strh r0, [r4, 0x36] - adds r0, r5, 0 - adds r1, r6, 0 - movs r2, 0 - bl sub_812EAE4 - lsls r0, 24 - asrs r0, 24 - movs r1, 0x3 - bl sub_811DAC0 - ldrh r1, [r4, 0x20] - adds r0, r1 - strh r0, [r4, 0x20] - adds r0, r5, 0 - adds r1, r6, 0 - movs r2, 0x1 - bl sub_812EAE4 - lsls r0, 24 - asrs r0, 24 - movs r1, 0x3 - bl sub_811DAC0 - ldrh r1, [r4, 0x22] - adds r0, r1 - strh r0, [r4, 0x22] - mov r1, r10 - ldrh r0, [r1, 0x2] - adds r0, 0x1 - strh r0, [r1, 0x2] -_0811E2C0: - ldr r0, [sp, 0x4] - adds r0, 0x2 - str r0, [sp, 0x4] - ldr r1, [sp] - subs r1, 0x1 - str r1, [sp] - cmp r1, 0 - bge _0811E22C - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0811E2E0: .4byte gUnknown_84599B8 -_0811E2E4: .4byte gUnknown_84599C0 -_0811E2E8: .4byte gUnknown_84599B2 -_0811E2EC: .4byte gUnknown_8459AEC -_0811E2F0: .4byte gSprites - thumb_func_end sub_811E204 - - thumb_func_start sub_811E2F4 -sub_811E2F4: @ 811E2F4 - push {lr} - bl sub_811D0A8 - ldrb r0, [r0, 0x2] - pop {r1} - bx r1 - thumb_func_end sub_811E2F4 - - thumb_func_start sub_811E300 -sub_811E300: @ 811E300 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x9 - bgt _0811E330 - ldrh r0, [r4, 0x34] - ldrh r1, [r4, 0x30] - adds r0, r1 - strh r0, [r4, 0x30] - ldrh r1, [r4, 0x36] - ldrh r2, [r4, 0x32] - adds r1, r2 - strh r1, [r4, 0x32] - lsls r0, 16 - asrs r0, 20 - strh r0, [r4, 0x24] - lsls r1, 16 - asrs r1, 20 - strh r1, [r4, 0x26] - b _0811E340 -_0811E330: - bl sub_811D0A8 - ldrh r1, [r0, 0x2] - subs r1, 0x1 - strh r1, [r0, 0x2] - adds r0, r4, 0 - bl DestroySprite -_0811E340: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_811E300 - - thumb_func_start sub_811E348 -sub_811E348: @ 811E348 - push {r4,lr} - bl sub_811E588 - ldr r0, _0811E37C @ =sub_811E3B4 - movs r1, 0x1 - bl CreateTask - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r2, _0811E380 @ =0x78865321 - adds r0, r4, 0 - movs r1, 0x3 - bl SetWordTaskArg - ldr r1, _0811E384 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - movs r1, 0xE0 - strh r1, [r0, 0x12] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0811E37C: .4byte sub_811E3B4 -_0811E380: .4byte 0x78865321 -_0811E384: .4byte gTasks - thumb_func_end sub_811E348 - - thumb_func_start sub_811E388 -sub_811E388: @ 811E388 - push {lr} - ldr r0, _0811E3AC @ =sub_811E3B4 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0xFF - beq _0811E3A6 - ldr r0, _0811E3B0 @ =gTasks - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 3 - adds r1, r0 - movs r0, 0x1 - strh r0, [r1, 0x8] -_0811E3A6: - pop {r0} - bx r0 - .align 2, 0 -_0811E3AC: .4byte sub_811E3B4 -_0811E3B0: .4byte gTasks - thumb_func_end sub_811E388 - - thumb_func_start sub_811E3B4 -sub_811E3B4: @ 811E3B4 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - lsls r0, 24 - lsrs r6, r0, 24 - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - ldr r1, _0811E3DC @ =gTasks+0x8 - adds r5, r0, r1 - movs r1, 0 - ldrsh r0, [r5, r1] - cmp r0, 0 - beq _0811E3E0 - cmp r0, 0x1 - beq _0811E4CE - b _0811E4DC - .align 2, 0 -_0811E3DC: .4byte gTasks+0x8 -_0811E3E0: - ldrh r0, [r5, 0x2] - movs r3, 0x2 - ldrsh r2, [r5, r3] - mov r9, r2 - cmp r2, 0 - bne _0811E4C8 - bl sub_811D0A8 - ldr r0, [r0, 0x10] - movs r4, 0x20 - ldrsh r2, [r0, r4] - movs r3, 0x24 - ldrsh r1, [r0, r3] - adds r2, r1 - str r2, [sp] - movs r4, 0x22 - ldrsh r1, [r0, r4] - movs r2, 0x26 - ldrsh r0, [r0, r2] - adds r1, r0 - mov r10, r1 - adds r0, r6, 0 - bl sub_811E4EC - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x15 - bl __umodsi3 - lsls r0, 16 - lsrs r0, 16 - adds r0, 0x46 - ldr r3, _0811E4BC @ =gSineTable - movs r4, 0xA - ldrsh r2, [r5, r4] - adds r1, r2, 0 - adds r1, 0x40 - lsls r1, 1 - adds r1, r3 - movs r4, 0 - ldrsh r1, [r1, r4] - muls r1, r0 - lsrs r1, 8 - ldr r4, [sp] - adds r4, r1 - mov r8, r4 - lsls r2, 1 - adds r2, r3 - movs r3, 0 - ldrsh r1, [r2, r3] - muls r0, r1 - lsrs r0, 8 - mov r4, r10 - adds r7, r4, r0 - ldrh r0, [r5, 0xA] - adds r0, 0x4C - movs r1, 0xFF - ands r0, r1 - strh r0, [r5, 0xA] - ldr r0, _0811E4C0 @ =gUnknown_8459B30 - mov r2, r8 - lsls r1, r2, 16 - asrs r1, 16 - lsls r2, r7, 16 - asrs r2, 16 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x40 - beq _0811E4A4 - ldr r0, _0811E4C4 @ =gSprites - lsls r4, r1, 4 - adds r4, r1 - lsls r4, 2 - adds r4, r0 - mov r3, r9 - strh r3, [r4, 0x2E] - adds r0, r6, 0 - bl sub_811E4EC - movs r1, 0x1 - ands r1, r0 - adds r1, 0x6 - strh r1, [r4, 0x30] - mov r0, r8 - strh r0, [r4, 0x32] - strh r7, [r4, 0x34] - mov r1, sp - ldrh r1, [r1] - strh r1, [r4, 0x36] - mov r2, r10 - strh r2, [r4, 0x38] - strh r6, [r4, 0x3A] - ldrh r0, [r5, 0x4] - adds r0, 0x1 - strh r0, [r5, 0x4] -_0811E4A4: - ldrh r0, [r5, 0xC] - adds r0, 0x1 - strh r0, [r5, 0xC] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x2F - ble _0811E4DC - ldrh r0, [r5] - adds r0, 0x1 - strh r0, [r5] - b _0811E4DC - .align 2, 0 -_0811E4BC: .4byte gSineTable -_0811E4C0: .4byte gUnknown_8459B30 -_0811E4C4: .4byte gSprites -_0811E4C8: - subs r0, 0x1 - strh r0, [r5, 0x2] - b _0811E4DC -_0811E4CE: - movs r3, 0x4 - ldrsh r0, [r5, r3] - cmp r0, 0 - bne _0811E4DC - adds r0, r6, 0 - bl DestroyTask -_0811E4DC: - 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_811E3B4 - - thumb_func_start sub_811E4EC -sub_811E4EC: @ 811E4EC - push {r4,r5,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - movs r1, 0x3 - bl GetWordTaskArg - adds r5, r0, 0 - ldr r0, _0811E518 @ =0x41c64e6d - muls r0, r5 - ldr r1, _0811E51C @ =0x00006073 - adds r5, r0, r1 - adds r0, r4, 0 - movs r1, 0x3 - adds r2, r5, 0 - bl SetWordTaskArg - lsrs r0, r5, 16 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0811E518: .4byte 0x41c64e6d -_0811E51C: .4byte 0x00006073 - thumb_func_end sub_811E4EC - - thumb_func_start sub_811E520 -sub_811E520: @ 811E520 - push {r4,r5,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x30] - ldrh r1, [r4, 0x2E] - adds r0, r1 - strh r0, [r4, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xFF - ble _0811E554 - ldr r2, _0811E550 @ =gTasks - movs r5, 0x3A - ldrsh r1, [r4, r5] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - ldrh r1, [r0, 0xC] - subs r1, 0x1 - strh r1, [r0, 0xC] - adds r0, r4, 0 - bl DestroySprite - b _0811E582 - .align 2, 0 -_0811E550: .4byte gTasks -_0811E554: - movs r1, 0x36 - ldrsh r0, [r4, r1] - movs r2, 0x32 - ldrsh r1, [r4, r2] - subs r0, r1 - movs r5, 0x2E - ldrsh r3, [r4, r5] - adds r2, r0, 0 - muls r2, r3 - movs r1, 0x38 - ldrsh r0, [r4, r1] - movs r5, 0x34 - ldrsh r1, [r4, r5] - subs r0, r1 - muls r0, r3 - asrs r2, 8 - ldrh r1, [r4, 0x32] - adds r2, r1 - strh r2, [r4, 0x20] - asrs r0, 8 - ldrh r2, [r4, 0x34] - adds r0, r2 - strh r0, [r4, 0x22] -_0811E582: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_811E520 - - thumb_func_start sub_811E588 -sub_811E588: @ 811E588 - push {lr} - ldr r0, _0811E59C @ =gUnknown_84599C8 - bl LoadCompressedSpriteSheet - ldr r0, _0811E5A0 @ =gUnknown_84599D0 - bl LoadSpritePalette - pop {r0} - bx r0 - .align 2, 0 -_0811E59C: .4byte gUnknown_84599C8 -_0811E5A0: .4byte gUnknown_84599D0 - thumb_func_end sub_811E588 - - thumb_func_start sub_811E5A4 -sub_811E5A4: @ 811E5A4 - push {lr} - ldr r0, _0811E5B4 @ =sub_811E3B4 - bl FuncIsActiveTask - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_0811E5B4: .4byte sub_811E3B4 - thumb_func_end sub_811E5A4 - - thumb_func_start sub_811E5B8 -sub_811E5B8: @ 811E5B8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - adds r5, r0, 0 - adds r6, r1, 0 - mov r8, r2 - mov r9, r3 - ldr r0, [sp, 0x20] - mov r10, r0 - ldr r0, [sp, 0x24] - lsls r5, 16 - lsrs r5, 16 - lsls r6, 16 - lsrs r6, 16 - mov r1, r8 - lsls r1, 16 - lsrs r1, 16 - mov r8, r1 - mov r1, r9 - lsls r1, 16 - lsrs r1, 16 - mov r9, r1 - mov r1, r10 - lsls r1, 16 - lsrs r1, 16 - mov r10, r1 - lsls r0, 16 - lsrs r7, r0, 16 - ldr r0, _0811E664 @ =gUnknown_3002030 - mov r1, r8 - strh r1, [r0, 0x6] - ldr r1, _0811E668 @ =gUnknown_8459888 - str r1, [r0] - ldr r1, [r1] - lsrs r1, 8 - strh r1, [r0, 0x4] - ldr r4, _0811E66C @ =gUnknown_3002038 - ldr r1, _0811E670 @ =gUnknown_8459868 - str r1, [r4] - mov r1, r9 - strh r1, [r4, 0x4] - bl LoadCompressedSpriteSheet - adds r0, r4, 0 - bl LoadSpritePalette - ldr r0, _0811E674 @ =sub_811E694 - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0811E678 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - subs r5, 0x20 - strh r5, [r1, 0x10] - adds r6, 0x20 - strh r6, [r1, 0x12] - mov r0, r8 - strh r0, [r1, 0x14] - mov r0, r9 - strh r0, [r1, 0x16] - mov r0, r10 - strh r0, [r1, 0x18] - strh r7, [r1, 0x1A] - movs r1, 0xFC - lsls r1, 6 - movs r0, 0x50 - bl SetGpuReg - ldr r1, _0811E67C @ =0x0000060c - movs r0, 0x52 - bl SetGpuReg - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0811E664: .4byte gUnknown_3002030 -_0811E668: .4byte gUnknown_8459888 -_0811E66C: .4byte gUnknown_3002038 -_0811E670: .4byte gUnknown_8459868 -_0811E674: .4byte sub_811E694 -_0811E678: .4byte gTasks -_0811E67C: .4byte 0x0000060c - thumb_func_end sub_811E5B8 - - thumb_func_start sub_811E680 -sub_811E680: @ 811E680 - push {lr} - ldr r0, _0811E690 @ =sub_811E694 - bl FuncIsActiveTask - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_0811E690: .4byte sub_811E694 - thumb_func_end sub_811E680 - - thumb_func_start sub_811E694 -sub_811E694: @ 811E694 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _0811E6B4 @ =gTasks+0x8 - adds r4, r0, r1 - movs r0, 0 - ldrsh r1, [r4, r0] - cmp r1, 0 - beq _0811E6B8 - cmp r1, 0x1 - beq _0811E6EE - b _0811E708 - .align 2, 0 -_0811E6B4: .4byte gTasks+0x8 -_0811E6B8: - ldrh r2, [r4, 0x6] - movs r3, 0x6 - ldrsh r0, [r4, r3] - cmp r0, 0 - bne _0811E6DE - adds r0, r2, 0x1 - strh r0, [r4, 0x6] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_811E710 - movs r1, 0x4 - ldrsh r0, [r4, r1] - cmp r0, 0x11 - ble _0811E708 - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - b _0811E708 -_0811E6DE: - adds r0, r2, 0x1 - strh r0, [r4, 0x6] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x2 - bne _0811E708 - strh r1, [r4, 0x6] - b _0811E708 -_0811E6EE: - movs r3, 0x2 - ldrsh r0, [r4, r3] - cmp r0, 0 - bne _0811E708 - ldrh r0, [r4, 0xC] - bl FreeSpriteTilesByTag - ldrh r0, [r4, 0xE] - bl FreeSpritePaletteByTag - adds r0, r5, 0 - bl DestroyTask -_0811E708: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_811E694 - - thumb_func_start sub_811E710 -sub_811E710: @ 811E710 - push {r4-r6,lr} - sub sp, 0x18 - adds r4, r1, 0 - lsls r0, 24 - lsrs r6, r0, 24 - mov r1, sp - ldr r0, _0811E7A4 @ =gUnknown_8459ACC - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - mov r1, sp - ldrh r0, [r4, 0xC] - strh r0, [r1] - ldrh r0, [r4, 0xE] - strh r0, [r1, 0x2] - ldrh r0, [r4, 0x4] - adds r0, 0x1 - strh r0, [r4, 0x4] - movs r0, 0x4 - ldrsh r1, [r4, r0] - movs r0, 0xDB - muls r1, r0 - movs r5, 0x3F - ands r1, r5 - ldrh r2, [r4, 0x8] - adds r1, r2 - lsls r1, 16 - asrs r1, 16 - movs r3, 0xA - ldrsh r2, [r4, r3] - ldrb r3, [r4, 0x12] - mov r0, sp - bl CreateSprite - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x40 - beq _0811E79A - ldr r0, _0811E7A8 @ =gSprites - lsls r2, r1, 4 - adds r2, r1 - lsls r2, 2 - adds r2, r0 - movs r0, 0x3 - ldrb r1, [r4, 0x10] - ands r1, r0 - lsls r1, 2 - ldrb r3, [r2, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2, 0x5] - movs r0, 0 - strh r0, [r2, 0x30] - movs r0, 0x4 - ldrsh r1, [r4, r0] - ldr r0, _0811E7AC @ =0x41c64e6d - muls r0, r1 - ldr r1, _0811E7B0 @ =0x00006073 - adds r0, r1 - ands r0, r5 - adds r0, 0x20 - strh r0, [r2, 0x32] - strh r6, [r2, 0x3C] - ldrh r0, [r4, 0x2] - adds r0, 0x1 - strh r0, [r4, 0x2] -_0811E79A: - add sp, 0x18 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0811E7A4: .4byte gUnknown_8459ACC -_0811E7A8: .4byte gSprites -_0811E7AC: .4byte 0x41c64e6d -_0811E7B0: .4byte 0x00006073 - thumb_func_end sub_811E710 - - thumb_func_start sub_811E7B4 -sub_811E7B4: @ 811E7B4 - push {lr} - adds r3, r0, 0 - ldrh r0, [r3, 0x30] - ldrh r1, [r3, 0x32] - subs r0, r1 - strh r0, [r3, 0x30] - lsls r0, 16 - asrs r0, 20 - strh r0, [r3, 0x26] - movs r1, 0x40 - negs r1, r1 - cmp r0, r1 - bge _0811E7E8 - ldr r2, _0811E7EC @ =gTasks - movs r0, 0x3C - ldrsh r1, [r3, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - ldrh r1, [r0, 0xA] - subs r1, 0x1 - strh r1, [r0, 0xA] - adds r0, r3, 0 - bl DestroySprite -_0811E7E8: - pop {r0} - bx r0 - .align 2, 0 -_0811E7EC: .4byte gTasks - thumb_func_end sub_811E7B4 - - thumb_func_start DrawLevelUpWindowPg1 -DrawLevelUpWindowPg1: @ 811E7F0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x30 - mov r8, r0 - adds r6, r1, 0 - adds r5, r2, 0 - adds r4, r3, 0 - ldr r3, [sp, 0x50] - ldr r0, [sp, 0x54] - mov r9, r0 - lsls r4, 24 - lsrs r4, 24 - lsls r3, 24 - lsrs r3, 24 - mov r1, r9 - lsls r1, 24 - lsrs r1, 24 - mov r9, r1 - mov r0, r8 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - lsls r1, r4, 4 - orrs r1, r4 - lsls r1, 24 - lsrs r1, 24 - str r3, [sp, 0x2C] - bl FillWindowPixelBuffer - add r2, sp, 0xC - ldrh r0, [r5] - ldrh r1, [r6] - subs r0, r1 - strh r0, [r2] - ldrh r0, [r5, 0x2] - ldrh r1, [r6, 0x2] - subs r0, r1 - strh r0, [r2, 0x2] - ldrh r0, [r5, 0x4] - ldrh r1, [r6, 0x4] - subs r0, r1 - strh r0, [r2, 0x4] - ldrh r0, [r5, 0x8] - ldrh r1, [r6, 0x8] - subs r0, r1 - strh r0, [r2, 0x6] - ldrh r0, [r5, 0xA] - ldrh r1, [r6, 0xA] - subs r0, r1 - strh r0, [r2, 0x8] - ldrh r0, [r5, 0x6] - ldrh r1, [r6, 0x6] - subs r0, r1 - strh r0, [r2, 0xA] - add r0, sp, 0x24 - strb r4, [r0] - ldr r3, [sp, 0x2C] - strb r3, [r0, 0x1] - mov r1, r9 - strb r1, [r0, 0x2] - movs r7, 0 - mov r1, sp - adds r1, 0x19 - str r1, [sp, 0x28] - mov r10, r0 - movs r0, 0x1 - negs r0, r0 - mov r9, r0 - add r6, sp, 0x18 -_0811E880: - lsls r0, r7, 4 - subs r0, r7 - lsls r0, 24 - lsrs r5, r0, 24 - mov r1, r10 - str r1, [sp] - mov r0, r9 - str r0, [sp, 0x4] - ldr r1, _0811E930 @ =gUnknown_8459B48 - lsls r0, r7, 2 - adds r0, r1 - ldr r0, [r0] - str r0, [sp, 0x8] - mov r0, r8 - movs r1, 0x2 - movs r2, 0 - adds r3, r5, 0 - bl AddTextPrinterParameterized3 - lsls r0, r7, 1 - mov r4, sp - adds r4, r0 - adds r4, 0xC - movs r1, 0 - ldrsh r0, [r4, r1] - ldr r1, _0811E934 @ =gUnknown_841B2E5 - cmp r0, 0 - blt _0811E8BA - ldr r1, _0811E938 @ =gUnknown_841B2DC -_0811E8BA: - adds r0, r6, 0 - bl StringCopy - mov r0, r10 - str r0, [sp] - mov r1, r9 - str r1, [sp, 0x4] - str r6, [sp, 0x8] - mov r0, r8 - movs r1, 0x2 - movs r2, 0x38 - adds r3, r5, 0 - bl AddTextPrinterParameterized3 - movs r0, 0 - strb r0, [r6] - movs r0, 0 - ldrsh r1, [r4, r0] - adds r0, r1, 0 - cmp r1, 0 - bge _0811E8E6 - negs r0, r1 -_0811E8E6: - movs r4, 0x6 - cmp r0, 0x9 - bgt _0811E8EE - movs r4, 0xC -_0811E8EE: - cmp r1, 0 - bge _0811E8F4 - negs r1, r1 -_0811E8F4: - ldr r0, [sp, 0x28] - movs r2, 0 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - adds r2, r4, 0 - adds r2, 0x38 - mov r1, r10 - str r1, [sp] - mov r0, r9 - str r0, [sp, 0x4] - str r6, [sp, 0x8] - mov r0, r8 - movs r1, 0x2 - adds r3, r5, 0 - bl AddTextPrinterParameterized3 - adds r0, r7, 0x1 - lsls r0, 16 - lsrs r7, r0, 16 - cmp r7, 0x5 - bls _0811E880 - add sp, 0x30 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0811E930: .4byte gUnknown_8459B48 -_0811E934: .4byte gUnknown_841B2E5 -_0811E938: .4byte gUnknown_841B2DC - thumb_func_end DrawLevelUpWindowPg1 - - thumb_func_start DrawLevelUpWindowPg2 -DrawLevelUpWindowPg2: @ 811E93C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x2C - mov r8, r0 - adds r5, r1, 0 - adds r4, r2, 0 - adds r6, r3, 0 - ldr r2, [sp, 0x4C] - lsls r4, 24 - lsrs r4, 24 - lsls r6, 24 - lsrs r6, 24 - lsls r2, 24 - lsrs r2, 24 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - lsls r1, r4, 4 - orrs r1, r4 - lsls r1, 24 - lsrs r1, 24 - str r2, [sp, 0x28] - bl FillWindowPixelBuffer - add r1, sp, 0xC - ldrh r0, [r5] - strh r0, [r1] - ldrh r0, [r5, 0x2] - strh r0, [r1, 0x2] - ldrh r0, [r5, 0x4] - strh r0, [r1, 0x4] - ldrh r0, [r5, 0x8] - strh r0, [r1, 0x6] - ldrh r0, [r5, 0xA] - strh r0, [r1, 0x8] - ldrh r0, [r5, 0x6] - strh r0, [r1, 0xA] - add r0, sp, 0x24 - strb r4, [r0] - strb r6, [r0, 0x1] - ldr r2, [sp, 0x28] - strb r2, [r0, 0x2] - movs r6, 0 - add r1, sp, 0x18 - mov r9, r1 - mov r7, r8 - mov r10, r0 - movs r2, 0x1 - negs r2, r2 - mov r8, r2 -_0811E9A6: - lsls r1, r6, 1 - mov r0, sp - adds r0, r1 - adds r0, 0xC - movs r2, 0 - ldrsh r0, [r0, r2] - movs r4, 0x3 - cmp r0, 0x63 - bgt _0811E9C0 - movs r4, 0x1 - cmp r0, 0x9 - ble _0811E9C0 - movs r4, 0x2 -_0811E9C0: - mov r0, sp - adds r0, r1 - adds r0, 0xC - movs r2, 0 - ldrsh r1, [r0, r2] - mov r0, r9 - movs r2, 0 - adds r3, r4, 0 - bl ConvertIntToDecimalStringN - movs r0, 0x4 - subs r0, r4 - lsls r4, r0, 1 - adds r4, r0 - lsls r4, 17 - lsrs r4, 16 - lsls r5, r6, 4 - subs r5, r6 - lsls r5, 24 - lsrs r5, 24 - mov r0, r10 - str r0, [sp] - mov r1, r8 - str r1, [sp, 0x4] - ldr r1, _0811EA40 @ =gUnknown_8459B48 - lsls r0, r6, 2 - adds r0, r1 - ldr r0, [r0] - str r0, [sp, 0x8] - adds r0, r7, 0 - movs r1, 0x2 - movs r2, 0 - adds r3, r5, 0 - bl AddTextPrinterParameterized3 - adds r4, 0x38 - lsls r4, 24 - lsrs r4, 24 - mov r2, r10 - str r2, [sp] - mov r0, r8 - str r0, [sp, 0x4] - mov r1, r9 - str r1, [sp, 0x8] - adds r0, r7, 0 - movs r1, 0x2 - adds r2, r4, 0 - adds r3, r5, 0 - bl AddTextPrinterParameterized3 - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - cmp r6, 0x5 - bls _0811E9A6 - add sp, 0x2C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0811EA40: .4byte gUnknown_8459B48 - thumb_func_end DrawLevelUpWindowPg2 - - .align 2, 0 @ Don't pad with nop. diff --git a/data/pokemon_special_anim.s b/data/pokemon_special_anim.s deleted file mode 100644 index 7f56c11ad..000000000 --- a/data/pokemon_special_anim.s +++ /dev/null @@ -1,7 +0,0 @@ -#include "constants/region_map_sections.h" -#include "constants/flags.h" -#include "constants/moves.h" - .include "asm/macros.inc" - .include "constants/constants.inc" - .section .rodata - .align 2 diff --git a/include/pokemon_special_anim_internal.h b/include/pokemon_special_anim_internal.h index 0777d492b..3799b24c5 100644 --- a/include/pokemon_special_anim_internal.h +++ b/include/pokemon_special_anim_internal.h @@ -6,7 +6,7 @@ struct PokemonSpecialAnimScene { u16 field_0000; - u8 filler_0002[2]; + u16 field_0002; u16 field_0004; u16 field_0006; u16 field_0008; diff --git a/include/strings.h b/include/strings.h index 3fd24516d..e7f274abd 100644 --- a/include/strings.h +++ b/include/strings.h @@ -1460,5 +1460,7 @@ extern const u8 gUnknown_841B2BE[]; extern const u8 gUnknown_841B2CC[]; extern const u8 gUnknown_841B2D4[]; extern const u8 gUnknown_841B2C6[]; +extern const u8 gUnknown_841B2E5[]; +extern const u8 gUnknown_841B2DC[]; #endif //GUARD_STRINGS_H diff --git a/ld_script.txt b/ld_script.txt index 40547541f..54078ab70 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -253,7 +253,6 @@ SECTIONS { src/union_room_battle.o(.text); src/pokemon_special_anim.o(.text); src/pokemon_special_anim_scene.o(.text); - asm/pokemon_special_anim.o(.text); src/party_menu.o(.text); src/union_room_chat.o(.text); src/union_room_chat_display.o(.text); diff --git a/src/pokemon_special_anim_scene.c b/src/pokemon_special_anim_scene.c index 7184b5198..1bb3b187e 100644 --- a/src/pokemon_special_anim_scene.c +++ b/src/pokemon_special_anim_scene.c @@ -30,16 +30,22 @@ 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); +void sub_811E128(struct Sprite * sprite); bool8 sub_811E138(void); +void sub_811E154(struct Sprite * sprite); 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_811E3B4(u8 taskId); +u16 sub_811E4EC(u8 taskId); void sub_811E520(struct Sprite * sprite); void sub_811E588(void); bool32 sub_811E5A4(void); +void sub_811E694(u8 taskId); +void sub_811E710(u8 taskId, s16 *data); void sub_811E7B4(struct Sprite * sprite); const u16 gUnknown_845963C[] = INCBIN_U16("graphics/pokemon_special_anim/unk_845963C.gbapal"); @@ -102,8 +108,10 @@ const u16 gUnknown_84599AA[] = { 0x200 }; -const s8 gUnknown_84599B2[] = { - -8, -8, 6, -13, 8, -8 +const s8 gUnknown_84599B2[][2] = { + {-8, -8}, + { 6, -13}, + { 8, -8} }; const struct CompressedSpriteSheet gUnknown_84599B8 = { @@ -998,3 +1006,409 @@ void sub_811E040(void) gTasks[taskId].data[11] = TRUE; } } + +void sub_811E06C(struct PokemonSpecialAnimScene * scene, struct Sprite * sprite, u8 closeness) +{ + u16 species; + u32 personality; + register int r4 asm("r4"); // FIXME + u8 r0; + if (closeness == 3) + { + sprite->pos1.x = 120; + sprite->pos1.y = scene->field_0008; + } + else + { + sprite->pos1.x = 120; + sprite->pos1.y = scene->field_0006; + } + sprite->pos1.x += 4; + sprite->pos1.y += 4; + species = sub_811D110(); + personality = sub_811D120(); + if (sub_811D100() == 4) + { + r4 = sub_812EA78(species, personality, 0); + r0 = sub_812EA78(species, personality, 1); + } + else + { + r4 = sub_812EA78(species, personality, 3); + r0 = sub_812EA78(species, personality, 4); + } + if (r4 == 0xFF) + r4 = 0; + if (r0 == 0xFF) + r0 = 0; + sprite->data[6] = r4; + sprite->data[7] = r0; + sub_811DB48(sprite, closeness); +} + +void sub_811E10C(void) +{ + struct PokemonSpecialAnimScene * scene = sub_811D0A8(); + sub_811E128(scene->field_000c); + sub_811E128(scene->field_0010); +} + +void sub_811E128(struct Sprite * sprite) +{ + sprite->data[0] = 0; + sprite->data[1] = 0; + sprite->callback = sub_811E154; +} + +bool8 sub_811E138(void) +{ + struct PokemonSpecialAnimScene * scene = sub_811D0A8(); + return scene->field_000c->callback != SpriteCallbackDummy; +} + +void sub_811E154(struct Sprite * sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->pos1.x += 3; + sprite->data[0]++; + break; + case 1: + sprite->data[1]++; + if (sprite->data[1] > 30) + { + sprite->pos1.x -= 3; + sprite->callback = SpriteCallbackDummy; + } + break; + } +} + +void sub_811E194(u8 a0) +{ + struct PokemonSpecialAnimScene * scene = sub_811D0A8(); + u8 taskId; + if (a0 != scene->field_000a) + { + taskId = CreateTask(sub_811D9BC, 1); + SetWordTaskArg(taskId, 6, (uintptr_t)scene->field_000c); + SetWordTaskArg(taskId, 9, (uintptr_t)scene->field_0010); + gTasks[taskId].data[1] = scene->field_000a; + gTasks[taskId].data[2] = a0; + gTasks[taskId].data[8] = 1; + gTasks[taskId].data[5] = 6; + if (a0 > scene->field_000a) + gTasks[taskId].data[3] = 1; + else + gTasks[taskId].data[3] = -1; + } +} + +void sub_811E204(struct PokemonSpecialAnimScene * scene) +{ + int i; + u8 spriteId; + u16 species; + u32 personality; + LoadCompressedSpriteSheet(&gUnknown_84599B8); + LoadSpritePalette(&gUnknown_84599C0); + scene->field_0002 = 0; + for (i = 0; i < 3; i++) + { + spriteId = CreateSprite(&gUnknown_8459AEC, 120 + gUnknown_84599B2[i][0], scene->field_0008 + gUnknown_84599B2[i][1], 2); + if (spriteId != MAX_SPRITES) + { + species = sub_811D110(); + personality = sub_811D120(); + gSprites[spriteId].data[3] = gUnknown_84599B2[i][0] * 8; + gSprites[spriteId].data[4] = gUnknown_84599B2[i][1] * 8; + gSprites[spriteId].pos1.x += sub_811DAC0(sub_812EAE4(species, personality, 0), 3); + gSprites[spriteId].pos1.y += sub_811DAC0(sub_812EAE4(species, personality, 1), 3); + scene->field_0002++; + } + } +} + +u8 sub_811E2F4(void) +{ + return sub_811D0A8()->field_0002; +} + +void sub_811E300(struct Sprite * sprite) +{ + sprite->data[0]++; + if (sprite->data[0] < 10) + { + sprite->data[1] += sprite->data[3]; + sprite->data[2] += sprite->data[4]; + sprite->pos2.x = sprite->data[1] >> 4; + sprite->pos2.y = sprite->data[2] >> 4; + } + else + { + sub_811D0A8()->field_0002--; + DestroySprite(sprite); + } +} + +void sub_811E348(struct PokemonSpecialAnimScene * scene) +{ + u8 taskId; + sub_811E588(); + taskId = CreateTask(sub_811E3B4, 1); + SetWordTaskArg(taskId, 3, 2022069025); + gTasks[taskId].data[5] = 224; +} + +void sub_811E388(void) +{ + u8 taskId = FindTaskIdByFunc(sub_811E3B4); + if (taskId != 0xFF) + gTasks[taskId].data[0] = 1; +} + +void sub_811E3B4(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + struct Sprite * sprite; + int x; + register int y asm("r10"); // FIXME + int x2; + int y2; + int r0; + u8 spriteId; + switch (data[0]) + { + case 0: + if (data[1] == 0) + { + sprite = sub_811D0A8()->field_0010; + x = sprite->pos1.x + sprite->pos2.x; + y = sprite->pos1.y + sprite->pos2.y; + r0 = (sub_811E4EC(taskId) % 21) + 70; + x2 = x + ((u32)(gSineTable[data[5] + 0x40] * r0) >> 8); + y2 = y + ((u32)(gSineTable[data[5] ] * r0) >> 8); + data[5] += 76; + data[5] &= 0xFF; + spriteId = CreateSprite(&gUnknown_8459B30, x2, y2, 0); + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].data[0] = 0; + gSprites[spriteId].data[1] = (sub_811E4EC(taskId) & 1) + 6; + gSprites[spriteId].data[2] = x2; + gSprites[spriteId].data[3] = y2; + gSprites[spriteId].data[4] = x; + gSprites[spriteId].data[5] = y; + gSprites[spriteId].data[6] = taskId; + data[2]++; + } + data[6]++; + if (data[6] > 47) + data[0]++; + } + else + data[1]--; + break; + case 1: + if (data[2] == 0) + DestroyTask(taskId); + break; + } +} + +u16 sub_811E4EC(u8 taskId) +{ + u32 state = GetWordTaskArg(taskId, 3); + state = state * 1103515245 + 24691; + SetWordTaskArg(taskId, 3, state); + return state >> 16; +} + +void sub_811E520(struct Sprite * sprite) +{ + int x; + int y; + sprite->data[0] += sprite->data[1]; + if (sprite->data[0] > 255) + { + gTasks[sprite->data[6]].data[2]--; + DestroySprite(sprite); + } + else + { + x = (sprite->data[4] - sprite->data[2]) * sprite->data[0]; + y = (sprite->data[5] - sprite->data[3]) * sprite->data[0]; + sprite->pos1.x = (x >> 8) + sprite->data[2]; + sprite->pos1.y = (y >> 8) + sprite->data[3]; + } +} + +void sub_811E588(void) +{ + LoadCompressedSpriteSheet(&gUnknown_84599C8); + LoadSpritePalette(&gUnknown_84599D0); +} + +bool32 sub_811E5A4(void) +{ + return FuncIsActiveTask(sub_811E3B4); +} + +void sub_811E5B8(u16 a0, u16 a1, u16 a2, u16 a3, u16 a4, u16 a5) +{ + static struct CompressedSpriteSheet gUnknown_3002030; + static struct SpritePalette gUnknown_3002038; + u8 taskId; + gUnknown_3002030.tag = a2; + gUnknown_3002030.data = gUnknown_8459888; + gUnknown_3002030.size = gUnknown_8459888[0] >> 8; + gUnknown_3002038.data = gUnknown_8459868; + gUnknown_3002038.tag = a3; + LoadCompressedSpriteSheet(&gUnknown_3002030); + LoadSpritePalette(&gUnknown_3002038); + taskId = CreateTask(sub_811E694, 0); + gTasks[taskId].data[4] = a0 - 32; + gTasks[taskId].data[5] = a1 + 32; + gTasks[taskId].data[6] = a2; + gTasks[taskId].data[7] = a3; + gTasks[taskId].data[8] = a4; + gTasks[taskId].data[9] = a5; + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_NONE | BLDCNT_TGT2_ALL); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(12, 6)); +} + +bool8 sub_811E680(void) +{ + return FuncIsActiveTask(sub_811E694); +} + +void sub_811E694(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + switch (data[0]) + { + case 0: + if (data[3] == 0) + { + data[3]++; + sub_811E710(taskId, data); + if (data[2] > 17) + data[0]++; + } + else + { + data[3]++; + if (data[3] == 2) + data[3] = 0; + } + break; + case 1: + if (data[1] == 0) + { + FreeSpriteTilesByTag(data[6]); + FreeSpritePaletteByTag(data[7]); + DestroyTask(taskId); + } + break; + } +} + +void sub_811E710(u8 taskId, s16 *data) +{ + u8 spriteId; + struct SpriteTemplate template = gUnknown_8459ACC; + template.tileTag = data[6]; + template.paletteTag = data[7]; + data[2]++; + spriteId = CreateSprite(&template, ((data[2] * 219) & 0x3F) + data[4], data[5], data[9]); + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].oam.priority = data[8]; + gSprites[spriteId].data[1] = 0; + gSprites[spriteId].data[2] = ((data[2] * 1103515245 + 24691) & 0x3F) + 0x20; + gSprites[spriteId].data[7] = taskId; + data[1]++; + } +} + +void sub_811E7B4(struct Sprite * sprite) +{ + sprite->data[1] -= sprite->data[2]; + sprite->pos2.y = sprite->data[1] >> 4; + if (sprite->pos2.y < -0x40) + { + gTasks[sprite->data[7]].data[1]--; + DestroySprite(sprite); + } +} + +void DrawLevelUpWindowPg1(u16 windowId, u16 *beforeStats, u16 *afterStats, u8 bgColor, u8 fgColor, u8 shadowColor) +{ + s16 diffStats[6]; + u8 textbuf[12]; + u8 textColor[3]; + u16 i; + u8 x; + + FillWindowPixelBuffer(windowId, PIXEL_FILL(bgColor)); + + diffStats[0] = afterStats[0] - beforeStats[0]; + diffStats[1] = afterStats[1] - beforeStats[1]; + diffStats[2] = afterStats[2] - beforeStats[2]; + diffStats[3] = afterStats[4] - beforeStats[4]; + diffStats[4] = afterStats[5] - beforeStats[5]; + diffStats[5] = afterStats[3] - beforeStats[3]; + + textColor[0] = bgColor; + textColor[1] = fgColor; + textColor[2] = shadowColor; + + for (i = 0; i < 6; i++) + { + AddTextPrinterParameterized3(windowId, 2, 0, i * 15, textColor, TEXT_SPEED_FF, gUnknown_8459B48[i]); + StringCopy(textbuf, diffStats[i] >= 0 ? gUnknown_841B2DC : gUnknown_841B2E5); + AddTextPrinterParameterized3(windowId, 2, 56, i * 15, textColor, TEXT_SPEED_FF, textbuf); + textbuf[0] = CHAR_SPACE; + x = abs(diffStats[i]) < 10 ? 12 : 6; + ConvertIntToDecimalStringN(textbuf + 1, abs(diffStats[i]), STR_CONV_MODE_LEFT_ALIGN, 2); + AddTextPrinterParameterized3(windowId, 2, x + 56, i * 15, textColor, TEXT_SPEED_FF, textbuf); + } +} + +void DrawLevelUpWindowPg2(u16 windowId, u16 *currStats, u8 bgColor, u8 fgColor, u8 shadowColor) +{ + s16 statsRearrange[6]; + u8 textbuf[12]; + u8 textColor[3]; + u16 i; + u8 ndigits; + u16 x; + + FillWindowPixelBuffer(windowId, PIXEL_FILL(bgColor)); + + statsRearrange[0] = currStats[0]; + statsRearrange[1] = currStats[1]; + statsRearrange[2] = currStats[2]; + statsRearrange[3] = currStats[4]; + statsRearrange[4] = currStats[5]; + statsRearrange[5] = currStats[3]; + + textColor[0] = bgColor; + textColor[1] = fgColor; + textColor[2] = shadowColor; + + for (i = 0; i < 6; i++) + { + if (statsRearrange[i] >= 100) + ndigits = 3; + else if (statsRearrange[i] >= 10) + ndigits = 2; + else + ndigits = 1; + ConvertIntToDecimalStringN(textbuf, statsRearrange[i], STR_CONV_MODE_LEFT_ALIGN, ndigits); + x = 6 * (4 - ndigits); + AddTextPrinterParameterized3(windowId, 2, 0, i * 15, textColor, TEXT_SPEED_FF, gUnknown_8459B48[i]); + AddTextPrinterParameterized3(windowId, 2, 56 + x, i * 15, textColor, TEXT_SPEED_FF, textbuf); + } +} diff --git a/sym_bss.txt b/sym_bss.txt index 527efb982..321e0a2b8 100644 --- a/sym_bss.txt +++ b/sym_bss.txt @@ -59,15 +59,8 @@ gUnknown_3000E89: @ 3000E89 .include "src/quest_log.o" .align 2 .include "src/union_room.o" - .align 2 - @ .include "src/pokemon_special_anim.o" -gUnknown_3002030: @ 3002030 - .space 0x8 - -gUnknown_3002038: @ 3002038 - .space 0x8 - + .include "src/pokemon_special_anim_scene.o" .align 2 .include "src/wireless_communication_status_screen.o" .align 2 -- cgit v1.2.3 From faab53204c9d583f5180fb48a0594f66cf85f30e Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 21 Mar 2020 20:52:44 -0400 Subject: Start doccing PSA --- include/pokemon_special_anim.h | 10 +- include/pokemon_special_anim_internal.h | 66 +++-- src/battle_script_commands.c | 4 +- src/party_menu.c | 22 +- src/pokemon_special_anim.c | 252 ++++++++-------- src/pokemon_special_anim_scene.c | 502 ++++++++++++++++---------------- 6 files changed, 436 insertions(+), 420 deletions(-) diff --git a/include/pokemon_special_anim.h b/include/pokemon_special_anim.h index 5cc567580..c1d64f072 100644 --- a/include/pokemon_special_anim.h +++ b/include/pokemon_special_anim.h @@ -5,12 +5,12 @@ void sub_811E5B8(u16, u16, u16, u16, u16, u16); bool8 sub_811E680(void); -void BufferMonStatsToTaskData(struct Pokemon *mon, u16 *currStats); +void GetMonLevelUpWindowStats(struct Pokemon *mon, u16 *currStats); void DrawLevelUpWindowPg1(u16 windowId, u16 *statsBefore, u16 *statsAfter, u8 bgClr, u8 fgClr, u8 shadowClr); void DrawLevelUpWindowPg2(u16 windowId, u16 *currStats, u8 bgClr, u8 fgClr, u8 shadowClr); -void sub_811C540(u8 slotId, u16 itemId, MainCallback callback); -void sub_811C5AC(u8 slotId, u16 itemId, MainCallback callback); -u32 sub_811D178(void); -void sub_811C568(u8 slotId, u16 itemId, u16 moveId, MainCallback callback); +void StartUseItemAnim_Normal(u8 slotId, u16 itemId, MainCallback callback); +void StartUseItemAnim_CantEvolve(u8 slotId, u16 itemId, MainCallback callback); +u32 PSA_IsCancelDisabled(void); +void StartUseItemAnim_ForgetMoveAndLearnTMorHM(u8 slotId, u16 itemId, u16 moveId, MainCallback callback); #endif // GUARD_POKEMON_SPECIAL_ANIM_H diff --git a/include/pokemon_special_anim_internal.h b/include/pokemon_special_anim_internal.h index 3799b24c5..f3f912fac 100644 --- a/include/pokemon_special_anim_internal.h +++ b/include/pokemon_special_anim_internal.h @@ -3,17 +3,31 @@ #include "pokemon_special_anim.h" +enum +{ + PSA_TEXT_ITEM_USED, + PSA_TEXT_LEVEL_ELEVATED, + PSA_TEXT_FORGET_1, + PSA_TEXT_FORGET_2_AND, + PSA_TEXT_FORGET_POOF, + PSA_TEXT_FORGET_FORGOT, + PSA_TEXT_FORGET_AND, + PSA_TEXT_MACHINE_SET, + PSA_TEXT_HUH, + PSA_TEXT_LEARNED_MOVE +}; + struct PokemonSpecialAnimScene { - u16 field_0000; + u16 state; u16 field_0002; u16 field_0004; u16 field_0006; u16 field_0008; u8 field_000a; - struct Sprite * field_000c; - struct Sprite * field_0010; - u8 field_0014[0x900]; + struct Sprite * monSprite; + struct Sprite * itemIconSprite; + u8 textBuf[0x900]; u8 field_0914[BG_SCREEN_SIZE]; u8 field_1114[BG_SCREEN_SIZE]; u8 field_1914[BG_SCREEN_SIZE]; @@ -38,31 +52,31 @@ struct PokemonSpecialAnim /*0x009e*/ u16 field_009e; /*0x00a0*/ u32 personality; /*0x00a4*/ u32 field_00a4; - /*0x00a8*/ struct PokemonSpecialAnimScene field_00a8; + /*0x00a8*/ struct PokemonSpecialAnimScene sceneResources; }; // size=0x28dc -struct PokemonSpecialAnim * sub_811D080(void); -struct Pokemon * sub_811D094(void); -struct PokemonSpecialAnimScene * sub_811D0A8(void); -u16 sub_811D0B4(void); -u8 *sub_811D0C4(void); -u8 *sub_811D0D0(void); -u8 *sub_811D0DC(u8 *dest); -u8 *sub_811D0F4(void); -u8 sub_811D100(void); -u16 sub_811D110(void); -u32 sub_811D120(void); -void BufferMonStatsToTaskData(struct Pokemon * pokemon, u16 *data); -bool32 sub_811D178(void); +struct PokemonSpecialAnim * GetPSAStruct(void); +struct Pokemon * PSA_GetPokemon(void); +struct PokemonSpecialAnimScene * PSA_GetSceneWork(void); +u16 PSA_GetItemId(void); +u8 *PSA_GetNameOfMoveForgotten(void); +u8 *PSA_GetNameOfMoveToTeach(void); +u8 *PSA_CopyMonNickname(u8 *dest); +u8 *PSA_GetMonNickname(void); +u8 PSA_GetAnimType(void); +u16 PSA_GetMonSpecies(void); +u32 PSA_GetMonPersonality(void); +void GetMonLevelUpWindowStats(struct Pokemon * pokemon, u16 *data); +bool32 PSA_IsCancelDisabled(void); -void sub_811D184(struct PokemonSpecialAnimScene * buffer, u16 animType); -bool8 sub_811D280(void); -void sub_811D29C(void); +void InitPokemonSpecialAnimScene(struct PokemonSpecialAnimScene * buffer, u16 animType); +bool8 PokemonSpecialAnimSceneInitIsNotFinished(void); +void PSA_FreeWindowBuffers(void); void sub_811D2A8(void); void sub_811D2D0(void); -void sub_811D2EC(u8 messageId); +void PSA_PrintMessage(u8 messageId); void sub_811D4D4(void); -bool8 sub_811D4EC(void); +bool8 PSA_IsMessagePrintTaskActive(void); void sub_811D4FC(void); bool8 sub_811D530(void); void sub_811D5A0(void); @@ -72,11 +86,11 @@ void sub_811D6EC(void); bool8 sub_811D6FC(void); bool8 sub_811D754(void); void sub_811D830(u8 closeness); -void sub_811D948(u8 closeness); +void PSA_SetUpZoomAnim(u8 closeness); bool8 sub_811D9A8(void); -void sub_811DC54(u16 itemId, u8 closeness, bool32 a2); +void PSA_SetUpZoomOutMonTask(u16 itemId, u8 closeness, bool32 a2); void sub_811DCF0(u16 itemId); -bool8 sub_811DD90(void); +bool8 PSA_IsZoomOutMonTaskRunning(void); void sub_811E040(void); #endif //GUARD_POKEMON_SPECIAL_ANIM_INTERNAL_H diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index de505827f..225a47729 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -5828,7 +5828,7 @@ static void DrawLevelUpWindow1(void) { u16 currStats[NUM_STATS]; - BufferMonStatsToTaskData(&gPlayerParty[gBattleStruct->expGetterMonId], currStats); + GetMonLevelUpWindowStats(&gPlayerParty[gBattleStruct->expGetterMonId], currStats); DrawLevelUpWindowPg1(12, gBattleResources->beforeLvlUp->stats, currStats, 0xE, 0xD, 0xF); } @@ -5836,7 +5836,7 @@ static void DrawLevelUpWindow2(void) { u16 currStats[NUM_STATS]; - BufferMonStatsToTaskData(&gPlayerParty[gBattleStruct->expGetterMonId], currStats); + GetMonLevelUpWindowStats(&gPlayerParty[gBattleStruct->expGetterMonId], currStats); DrawLevelUpWindowPg2(12, currStats, 0xE, 0xD, 0xF); } diff --git a/src/party_menu.c b/src/party_menu.c index edf7e96f6..5d7026807 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -380,7 +380,7 @@ static void sub_8125898(u8 taskId, UNUSED TaskFunc func); static void sub_8125F4C(u8 taskId, UNUSED TaskFunc func); static void sub_8125F5C(u8 taskId); static void sub_8126BD4(void); -static bool8 sub_8126C24(void); +static bool8 MonCanEvolve(void); static EWRAM_DATA struct PartyMenuInternal *sPartyMenuInternal = NULL; EWRAM_DATA struct PartyMenu gPartyMenu = {0}; @@ -4295,21 +4295,21 @@ static void sub_8124DE0(void) { if (CheckIfItemIsTMHMOrEvolutionStone(gSpecialVar_ItemId) == 2) // Evolution stone { - if (sub_8126C24() == TRUE) - sub_811C540(gPartyMenu.slotId, gSpecialVar_ItemId, sub_8126BD4); + if (MonCanEvolve() == TRUE) + StartUseItemAnim_Normal(gPartyMenu.slotId, gSpecialVar_ItemId, sub_8126BD4); else - sub_811C5AC(gPartyMenu.slotId, gSpecialVar_ItemId, gPartyMenu.exitCallback); + StartUseItemAnim_CantEvolve(gPartyMenu.slotId, gSpecialVar_ItemId, gPartyMenu.exitCallback); } else { - sub_811C540(gPartyMenu.slotId, gSpecialVar_ItemId, sub_8124E48); + StartUseItemAnim_Normal(gPartyMenu.slotId, gSpecialVar_ItemId, sub_8124E48); } } static void sub_8124E48(void) { if (ItemId_GetPocket(gSpecialVar_ItemId) == POCKET_TM_CASE - && sub_811D178() == 1) + && PSA_IsCancelDisabled() == 1) { GiveMoveToMon(&gPlayerParty[gPartyMenu.slotId], ItemIdToBattleMoveId(gSpecialVar_ItemId)); AdjustFriendship(&gPlayerParty[gPartyMenu.slotId], 4); @@ -4325,7 +4325,7 @@ static void sub_8124E48(void) static void sub_8124EFC(void) { - if (sub_811D178() == 1) + if (PSA_IsCancelDisabled() == 1) { struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; u8 moveIdx = GetMoveSlotToReplace(); @@ -4919,7 +4919,7 @@ static void CB2_ReturnToPartyMenuWhileLearningMove(void) if (learnMoveState == 0 && moveIdx != MAX_MON_MOVES) { move = GetMonData(&gPlayerParty[gPartyMenu.slotId], moveIdx + MON_DATA_MOVE1); - sub_811C568(gPartyMenu.slotId, gSpecialVar_ItemId, move, sub_8124EFC); + StartUseItemAnim_ForgetMoveAndLearnTMorHM(gPartyMenu.slotId, gSpecialVar_ItemId, move, sub_8124EFC); gItemUseCB = sub_8125F4C; gPartyMenu.action = learnMoveState; } @@ -5075,9 +5075,9 @@ static void ItemUseCB_RareCandyStep(u8 taskId, UNUSED TaskFunc func) s16 *arrayPtr = ptr->data; u8 level; - BufferMonStatsToTaskData(mon, arrayPtr); + GetMonLevelUpWindowStats(mon, arrayPtr); ExecuteTableBasedItemEffect_(gPartyMenu.slotId, gSpecialVar_ItemId, 0); - BufferMonStatsToTaskData(mon, &ptr->data[NUM_STATS]); + GetMonLevelUpWindowStats(mon, &ptr->data[NUM_STATS]); gPartyMenuUseExitCallback = TRUE; ItemUse_SetQuestLogEvent(QL_EVENT_USED_ITEM, mon, gSpecialVar_ItemId, 0xFFFF); PlayFanfareByFanfareNum(0); @@ -5347,7 +5347,7 @@ static void sub_8126BD4(void) RemoveBagItem(gSpecialVar_ItemId, 1); } -static bool8 sub_8126C24(void) +static bool8 MonCanEvolve(void) { if (!IsNationalPokedexEnabled() && GetEvolutionTargetSpecies(&gPlayerParty[gPartyMenu.slotId], 2, gSpecialVar_ItemId) > KANTO_DEX_COUNT) diff --git a/src/pokemon_special_anim.c b/src/pokemon_special_anim.c index 5dcb9821d..5cc13b9c5 100644 --- a/src/pokemon_special_anim.c +++ b/src/pokemon_special_anim.c @@ -11,54 +11,54 @@ // Functions related to the special anims Pokemon // make when using an item on them in the field. -EWRAM_DATA bool32 gUnknown_203B090 = FALSE; -EWRAM_DATA u8 gUnknown_203B094 = 0; -EWRAM_DATA struct PokemonSpecialAnim * gUnknown_203B098 = NULL; - -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_811C540(u8 slotId, u16 itemId, MainCallback callback) +static EWRAM_DATA bool32 sCancelDisabled = FALSE; +static EWRAM_DATA u8 sPSATaskId = 0; +static EWRAM_DATA struct PokemonSpecialAnim * sPSAWork = NULL; + +struct PokemonSpecialAnim * AllocPSA(u8 slotId, u16 itemId, MainCallback callback); +static void SetUpUseItemAnim_Normal(struct PokemonSpecialAnim * ptr); +static void SetUpUseItemAnim_ForgetMoveAndLearnTMorHM(struct PokemonSpecialAnim * ptr); +static void SetUpUseItemAnim_CantEvolve(struct PokemonSpecialAnim * ptr); +static void sub_811C834(u8 taskId); +static void Task_ForgetMove(u8 taskId); +static void sub_811CBE4(u8 taskId); +static void sub_811CD68(u8 taskId); +static void Task_MachineSet(u8 taskId); +static void Task_CleanUp(u8 taskId); +static u8 GetClosenessFromFriendship(u16 friendship); +static u16 GetAnimTypeByItemId(u16 itemId); + +void StartUseItemAnim_Normal(u8 slotId, u16 itemId, MainCallback callback) { - struct PokemonSpecialAnim * ptr = sub_811C5D4(slotId, itemId, callback); + struct PokemonSpecialAnim * ptr = AllocPSA(slotId, itemId, callback); if (ptr == NULL) SetMainCallback2(callback); else - sub_811C748(ptr); + SetUpUseItemAnim_Normal(ptr); } -void sub_811C568(u8 slotId, u16 itemId, u16 moveId, MainCallback callback) +void StartUseItemAnim_ForgetMoveAndLearnTMorHM(u8 slotId, u16 itemId, u16 moveId, MainCallback callback) { - struct PokemonSpecialAnim * ptr = sub_811C5D4(slotId, itemId, callback); + struct PokemonSpecialAnim * ptr = AllocPSA(slotId, itemId, callback); if (ptr == NULL) SetMainCallback2(callback); else { StringCopy(ptr->nameOfMoveForgotten, gMoveNames[moveId]); - sub_811C7BC(ptr); + SetUpUseItemAnim_ForgetMoveAndLearnTMorHM(ptr); } } -void sub_811C5AC(u8 slotId, u16 itemId, MainCallback callback) +void StartUseItemAnim_CantEvolve(u8 slotId, u16 itemId, MainCallback callback) { - struct PokemonSpecialAnim * ptr = sub_811C5D4(slotId, itemId, callback); + struct PokemonSpecialAnim * ptr = AllocPSA(slotId, itemId, callback); if (ptr == NULL) SetMainCallback2(callback); else - sub_811C7FC(ptr); + SetUpUseItemAnim_CantEvolve(ptr); } -struct PokemonSpecialAnim * sub_811C5D4(u8 slotId, u16 itemId, MainCallback callback) +struct PokemonSpecialAnim * AllocPSA(u8 slotId, u16 itemId, MainCallback callback) { struct PokemonSpecialAnim * ptr; struct Pokemon * pokemon; @@ -78,11 +78,11 @@ struct PokemonSpecialAnim * sub_811C5D4(u8 slotId, u16 itemId, MainCallback call ptr->state = 0; ptr->savedCallback = callback; ptr->species = GetMonData(pokemon, MON_DATA_SPECIES); - ptr->closeness = sub_811D058(GetMonData(pokemon, MON_DATA_FRIENDSHIP)); + ptr->closeness = GetClosenessFromFriendship(GetMonData(pokemon, MON_DATA_FRIENDSHIP)); ptr->personality = GetMonData(pokemon, MON_DATA_PERSONALITY); ptr->slotId = slotId; ptr->itemId = itemId; - ptr->animType = sub_811D018(itemId); + ptr->animType = GetAnimTypeByItemId(itemId); ptr->pokemon = *pokemon; ptr->field_00a4 = 0; GetMonData(pokemon, MON_DATA_NICKNAME, ptr->nickname); @@ -94,14 +94,14 @@ struct PokemonSpecialAnim * sub_811C5D4(u8 slotId, u16 itemId, MainCallback call return ptr; } -void sub_811C6E8(void) +static void VBlankCB_PSA(void) { TransferPlttBuffer(); LoadOam(); ProcessSpriteCopyRequests(); } -void sub_811C6FC(void) +static void CB2_PSA(void) { RunTextPrinters(); RunTasks(); @@ -110,14 +110,14 @@ void sub_811C6FC(void) UpdatePaletteFade(); } -void sub_811C718(u8 taskId, TaskFunc func) +static void SetUseItemAnimCallback(u8 taskId, TaskFunc func) { struct PokemonSpecialAnim * ptr = (void *)GetWordTaskArg(taskId, 0); ptr->state = 0; gTasks[taskId].func = func; } -void sub_811C748(struct PokemonSpecialAnim * ptr) +static void SetUpUseItemAnim_Normal(struct PokemonSpecialAnim * ptr) { u8 taskId; switch (ptr->animType) @@ -137,34 +137,34 @@ void sub_811C748(struct PokemonSpecialAnim * ptr) } ptr->cancelDisabled = FALSE; SetWordTaskArg(taskId, 0, (uintptr_t)ptr); - SetMainCallback2(sub_811C6FC); - gUnknown_203B094 = taskId; + SetMainCallback2(CB2_PSA); + sPSATaskId = taskId; } -void sub_811C7BC(struct PokemonSpecialAnim * ptr) +static void SetUpUseItemAnim_ForgetMoveAndLearnTMorHM(struct PokemonSpecialAnim * ptr) { - u8 taskId = CreateTask(sub_811CA20, 0); + u8 taskId = CreateTask(Task_ForgetMove, 0); SetWordTaskArg(taskId, 0, (uintptr_t)ptr); - SetMainCallback2(sub_811C6FC); - gUnknown_203B094 = taskId; + SetMainCallback2(CB2_PSA); + sPSATaskId = taskId; ptr->cancelDisabled = FALSE; } -void sub_811C7FC(struct PokemonSpecialAnim * ptr) +static void SetUpUseItemAnim_CantEvolve(struct PokemonSpecialAnim * ptr) { u8 taskId = CreateTask(sub_811CBE4, 0); SetWordTaskArg(taskId, 0, (uintptr_t)ptr); - SetMainCallback2(sub_811C6FC); - gUnknown_203B094 = taskId; + SetMainCallback2(CB2_PSA); + sPSATaskId = taskId; } -void sub_811C834(u8 taskId) +static 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); + SetUseItemAnimCallback(taskId, Task_CleanUp); return; } @@ -172,16 +172,16 @@ void sub_811C834(u8 taskId) { case 0: SetVBlankCallback(NULL); - sub_811D184(&ptr->field_00a8, ptr->animType); + InitPokemonSpecialAnimScene(&ptr->sceneResources, ptr->animType); sub_811D830(0); ptr->state++; break; case 1: - if (!sub_811D280()) + if (!PokemonSpecialAnimSceneInitIsNotFinished()) { BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); ptr->state++; - SetVBlankCallback(sub_811C6E8); + SetVBlankCallback(VBlankCB_PSA); } break; case 2: @@ -191,7 +191,7 @@ void sub_811C834(u8 taskId) } break; case 3: - sub_811D948(ptr->closeness); + PSA_SetUpZoomAnim(ptr->closeness); ptr->state++; break; case 4: @@ -208,11 +208,11 @@ void sub_811C834(u8 taskId) } break; case 6: - sub_811DC54(ptr->itemId, ptr->closeness, TRUE); + PSA_SetUpZoomOutMonTask(ptr->itemId, ptr->closeness, TRUE); ptr->state++; break; case 7: - if (!sub_811DD90()) + if (!PSA_IsZoomOutMonTaskRunning()) { ptr->cancelDisabled = TRUE; if (ptr->closeness == 3) @@ -224,17 +224,17 @@ void sub_811C834(u8 taskId) } break; case 8: - sub_811D2EC(0); + PSA_PrintMessage(PSA_TEXT_ITEM_USED); ptr->state++; break; case 9: - if (!sub_811D4EC()) + if (!PSA_IsMessagePrintTaskActive()) { ptr->state++; } break; case 10: - sub_811D948(0); + PSA_SetUpZoomAnim(0); ptr->state++; break; case 11: @@ -266,14 +266,14 @@ void sub_811C834(u8 taskId) break; case 14: SetMainCallback2(ptr->savedCallback); - sub_811D29C(); + PSA_FreeWindowBuffers(); Free(ptr); DestroyTask(taskId); break; } } -void sub_811CA20(u8 taskId) +static void Task_ForgetMove(u8 taskId) { struct PokemonSpecialAnim * ptr = (void *)GetWordTaskArg(taskId, 0); u8 r4; @@ -282,16 +282,16 @@ void sub_811CA20(u8 taskId) { case 0: SetVBlankCallback(NULL); - sub_811D184(&ptr->field_00a8, ptr->animType); + InitPokemonSpecialAnimScene(&ptr->sceneResources, ptr->animType); sub_811D830(3); ptr->state++; break; case 1: - if (!sub_811D280()) + if (!PokemonSpecialAnimSceneInitIsNotFinished()) { BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); ptr->state++; - SetVBlankCallback(sub_811C6E8); + SetVBlankCallback(VBlankCB_PSA); } break; case 2: @@ -310,11 +310,11 @@ void sub_811CA20(u8 taskId) } break; case 4: - sub_811D2EC(2); + PSA_PrintMessage(PSA_TEXT_FORGET_1); ptr->state++; break; case 5: - if (!sub_811D4EC()) + if (!PSA_IsMessagePrintTaskActive()) { ptr->field_009e = 0; ptr->state++; @@ -324,12 +324,12 @@ void sub_811CA20(u8 taskId) ptr->field_009e++; if (ptr->field_009e > 30) { - sub_811D2EC(3); + PSA_PrintMessage(PSA_TEXT_FORGET_2_AND); ptr->state++; } break; case 7: - if (!sub_811D4EC()) + if (!PSA_IsMessagePrintTaskActive()) { ptr->field_009e = 0; ptr->state++; @@ -340,50 +340,50 @@ void sub_811CA20(u8 taskId) if (ptr->field_009e > 30) { PlaySE(SE_W255); - sub_811D2EC(4); + PSA_PrintMessage(PSA_TEXT_FORGET_POOF); sub_811D4FC(); ptr->state++; } break; case 9: r4 = sub_811D530(); - if (!(r4 | sub_811D4EC())) + if (!(r4 | PSA_IsMessagePrintTaskActive())) { sub_811D4D4(); ptr->state++; } break; case 10: - sub_811D2EC(5); + PSA_PrintMessage(PSA_TEXT_FORGET_FORGOT); ptr->state++; break; case 11: - if (!sub_811D4EC()) + if (!PSA_IsMessagePrintTaskActive()) { - sub_811D2EC(6); + PSA_PrintMessage(PSA_TEXT_FORGET_AND); ptr->state++; } break; case 12: - if (!sub_811D4EC()) + if (!PSA_IsMessagePrintTaskActive()) { sub_811D2D0(); ptr->state++; } break; case 13: - sub_811C718(taskId, sub_811CE4C); + SetUseItemAnimCallback(taskId, Task_MachineSet); break; } } -void sub_811CBE4(u8 taskId) +static void sub_811CBE4(u8 taskId) { struct PokemonSpecialAnim * ptr = (void *)GetWordTaskArg(taskId, 0); if (!ptr->cancelDisabled && JOY_HELD(B_BUTTON)) { - sub_811C718(taskId, sub_811CF88); + SetUseItemAnimCallback(taskId, Task_CleanUp); return; } @@ -391,16 +391,16 @@ void sub_811CBE4(u8 taskId) { case 0: SetVBlankCallback(NULL); - sub_811D184(&ptr->field_00a8, ptr->animType); + InitPokemonSpecialAnimScene(&ptr->sceneResources, ptr->animType); sub_811D830(0); ptr->state++; break; case 1: - if (!sub_811D280()) + if (!PokemonSpecialAnimSceneInitIsNotFinished()) { BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); ptr->state++; - SetVBlankCallback(sub_811C6E8); + SetVBlankCallback(VBlankCB_PSA); } break; case 2: @@ -410,26 +410,26 @@ void sub_811CBE4(u8 taskId) } break; case 3: - sub_811D948(ptr->closeness); + PSA_SetUpZoomAnim(ptr->closeness); ptr->state++; break; case 4: - sub_811DC54(ptr->itemId, ptr->closeness, FALSE); + PSA_SetUpZoomOutMonTask(ptr->itemId, ptr->closeness, FALSE); ptr->state++; break; case 5: - if (!sub_811DD90()) + if (!PSA_IsZoomOutMonTaskRunning()) { sub_811D2A8(); ptr->state++; } break; case 6: - sub_811D2EC(8); + PSA_PrintMessage(PSA_TEXT_HUH); ptr->state++; break; case 7: - if (!sub_811D4EC()) + if (!PSA_IsMessagePrintTaskActive()) { ptr->cancelDisabled = TRUE; ptr->state++; @@ -446,7 +446,7 @@ void sub_811CBE4(u8 taskId) if (!gPaletteFade.active) { SetMainCallback2(ptr->savedCallback); - sub_811D29C(); + PSA_FreeWindowBuffers(); Free(ptr); DestroyTask(taskId); } @@ -454,13 +454,13 @@ void sub_811CBE4(u8 taskId) } } -void sub_811CD68(u8 taskId) +static void sub_811CD68(u8 taskId) { struct PokemonSpecialAnim * ptr = (void *)GetWordTaskArg(taskId, 0); if (JOY_NEW(B_BUTTON)) { - sub_811C718(taskId, sub_811CF88); + SetUseItemAnimCallback(taskId, Task_CleanUp); return; } @@ -468,16 +468,16 @@ void sub_811CD68(u8 taskId) { case 0: SetVBlankCallback(NULL); - sub_811D184(&ptr->field_00a8, ptr->animType); + InitPokemonSpecialAnimScene(&ptr->sceneResources, ptr->animType); sub_811D830(3); ptr->state++; break; case 1: - if (!sub_811D280()) + if (!PokemonSpecialAnimSceneInitIsNotFinished()) { BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); ptr->state++; - SetVBlankCallback(sub_811C6E8); + SetVBlankCallback(VBlankCB_PSA); } break; case 2: @@ -491,20 +491,20 @@ void sub_811CD68(u8 taskId) ptr->field_009e++; if (ptr->field_009e > 20) { - sub_811C718(taskId, sub_811CE4C); + SetUseItemAnimCallback(taskId, Task_MachineSet); } break; } } -void sub_811CE4C(u8 taskId) +static void Task_MachineSet(u8 taskId) { struct PokemonSpecialAnim * ptr = (void *)GetWordTaskArg(taskId, 0); if (!ptr->cancelDisabled && JOY_NEW(B_BUTTON)) { sub_811D5B0(); - sub_811C718(taskId, sub_811CF88); + SetUseItemAnimCallback(taskId, Task_CleanUp); return; } @@ -517,11 +517,11 @@ void sub_811CE4C(u8 taskId) break; case 1: sub_811D2A8(); - sub_811D2EC(7); + PSA_PrintMessage(PSA_TEXT_MACHINE_SET); ptr->state++; break; case 2: - if (!sub_811D4EC()) + if (!PSA_IsMessagePrintTaskActive()) { sub_811D2D0(); ptr->state++; @@ -553,12 +553,12 @@ void sub_811CE4C(u8 taskId) if (ptr->field_009e > 30) { sub_811D2A8(); - sub_811D2EC(9); + PSA_PrintMessage(PSA_TEXT_LEARNED_MOVE); ptr->state++; } break; case 8: - if (!sub_811D4EC()) + if (!PSA_IsMessagePrintTaskActive()) { PlayFanfare(MUS_FANFA1); ptr->cancelDisabled = TRUE; @@ -568,37 +568,37 @@ void sub_811CE4C(u8 taskId) case 9: if (IsFanfareTaskInactive()) { - sub_811C718(taskId, sub_811CF88); + SetUseItemAnimCallback(taskId, Task_CleanUp); } break; } } -void sub_811CF88(u8 taskId) +static void Task_CleanUp(u8 taskId) { struct PokemonSpecialAnim * ptr = (void *)GetWordTaskArg(taskId, 0); switch (ptr->state) { case 0: - SetVBlankCallback(sub_811C6E8); + SetVBlankCallback(VBlankCB_PSA); BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK); ptr->state++; break; case 1: if (!gPaletteFade.active && (ptr->field_00a4 != 1 || IsCryFinished())) { - gUnknown_203B090 = ptr->cancelDisabled; + sCancelDisabled = ptr->cancelDisabled; SetMainCallback2(ptr->savedCallback); DestroyTask(taskId); - sub_811D29C(); + PSA_FreeWindowBuffers(); Free(ptr); } break; } } -const struct { +static const struct { u16 itemId; u16 animType; } gUnknown_8459634[2] = { @@ -606,7 +606,7 @@ const struct { {ITEM_POTION, 1} }; -u16 sub_811D018(u16 itemId) +static u16 GetAnimTypeByItemId(u16 itemId) { int i; @@ -624,7 +624,7 @@ u16 sub_811D018(u16 itemId) return 0; } -u8 sub_811D058(u16 friendship) +static u8 GetClosenessFromFriendship(u16 friendship) { if (friendship <= 100) return 0; @@ -636,63 +636,63 @@ u8 sub_811D058(u16 friendship) return 3; } -struct PokemonSpecialAnim * sub_811D080(void) +struct PokemonSpecialAnim * GetPSAStruct(void) { - return (void *)GetWordTaskArg(gUnknown_203B094, 0); + return (void *)GetWordTaskArg(sPSATaskId, 0); } -struct Pokemon * sub_811D094(void) +struct Pokemon * PSA_GetPokemon(void) { - gUnknown_203B098 = sub_811D080(); - return &gUnknown_203B098->pokemon; + sPSAWork = GetPSAStruct(); + return &sPSAWork->pokemon; } -struct PokemonSpecialAnimScene * sub_811D0A8(void) +struct PokemonSpecialAnimScene * PSA_GetSceneWork(void) { - return &sub_811D080()->field_00a8; + return &GetPSAStruct()->sceneResources; } -u16 sub_811D0B4(void) +u16 PSA_GetItemId(void) { - return sub_811D080()->itemId; + return GetPSAStruct()->itemId; } -u8 *sub_811D0C4(void) +u8 *PSA_GetNameOfMoveForgotten(void) { - return sub_811D080()->nameOfMoveForgotten; + return GetPSAStruct()->nameOfMoveForgotten; } -u8 *sub_811D0D0(void) +u8 *PSA_GetNameOfMoveToTeach(void) { - return sub_811D080()->nameOfMoveToTeach; + return GetPSAStruct()->nameOfMoveToTeach; } -u8 *sub_811D0DC(u8 *dest) +u8 *PSA_CopyMonNickname(u8 *dest) { - return StringCopy(dest, sub_811D080()->nickname); + return StringCopy(dest, GetPSAStruct()->nickname); } -u8 *sub_811D0F4(void) +u8 *PSA_GetMonNickname(void) { - return sub_811D080()->nickname; + return GetPSAStruct()->nickname; } -u8 sub_811D100(void) +u8 PSA_GetAnimType(void) { - return sub_811D080()->animType; + return GetPSAStruct()->animType; } -u16 sub_811D110(void) +u16 PSA_GetMonSpecies(void) { - return sub_811D080()->species; + return GetPSAStruct()->species; } -u32 sub_811D120(void) +u32 PSA_GetMonPersonality(void) { - return sub_811D080()->personality; + return GetPSAStruct()->personality; } -void BufferMonStatsToTaskData(struct Pokemon * pokemon, u16 *data) +void GetMonLevelUpWindowStats(struct Pokemon * pokemon, u16 *data) { data[0] = GetMonData(pokemon, MON_DATA_MAX_HP); data[1] = GetMonData(pokemon, MON_DATA_ATK); @@ -702,7 +702,7 @@ void BufferMonStatsToTaskData(struct Pokemon * pokemon, u16 *data) data[5] = GetMonData(pokemon, MON_DATA_SPDEF); } -bool32 sub_811D178(void) +bool32 PSA_IsCancelDisabled(void) { - return gUnknown_203B090; + return sCancelDisabled; } diff --git a/src/pokemon_special_anim_scene.c b/src/pokemon_special_anim_scene.c index 1bb3b187e..5a0bb8607 100644 --- a/src/pokemon_special_anim_scene.c +++ b/src/pokemon_special_anim_scene.c @@ -13,53 +13,53 @@ #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); -void sub_811E128(struct Sprite * sprite); -bool8 sub_811E138(void); -void sub_811E154(struct Sprite * sprite); -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_811E3B4(u8 taskId); -u16 sub_811E4EC(u8 taskId); -void sub_811E520(struct Sprite * sprite); -void sub_811E588(void); -bool32 sub_811E5A4(void); -void sub_811E694(u8 taskId); -void sub_811E710(u8 taskId, s16 *data); -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"); -const u32 gUnknown_845967C[] = INCBIN_U32("graphics/pokemon_special_anim/unk_845967C.4bpp.lz"); -const u32 gUnknown_845973C[] = INCBIN_U32("graphics/pokemon_special_anim/unk_845973C.bin.lz"); -const u16 gUnknown_8459868[] = INCBIN_U16("graphics/pokemon_special_anim/unk_8459868.gbapal"); -const u32 gUnknown_8459888[] = INCBIN_U32("graphics/pokemon_special_anim/unk_8459888.4bpp.lz"); -const u16 gUnknown_84598A4[] = INCBIN_U16("graphics/pokemon_special_anim/unk_84598A4.gbapal"); -const u32 gUnknown_84598C4[] = INCBIN_U32("graphics/pokemon_special_anim/unk_84598C4.4bpp.lz"); -const u16 gUnknown_8459940[] = INCBIN_U16("graphics/pokemon_special_anim/unk_8459940.gbapal"); -const u32 gUnknown_8459960[] = INCBIN_U32("graphics/pokemon_special_anim/unk_8459960.4bpp.lz"); - -const struct BgTemplate gUnknown_8459980[] = { +static void sub_811D7D4(u16 animType); +static void sub_811D9BC(u8 taskId); +static void sub_811DA9C(struct Sprite * sprite, u8 closeness); +static bool8 sub_811DAAC(struct Sprite * sprite); +static void sub_811DB14(struct Sprite * sprite, u8 closeness); +static void sub_811DB48(struct Sprite * sprite, u8 closeness); +static void StartMonWiggleAnim(struct PokemonSpecialAnimScene * scene, u8 frameLen, u8 niter, u8 amplitude); +static void StopMonWiggleAnim(struct PokemonSpecialAnimScene * scene); +static void SpriteCallback_MonSpriteWiggle(struct Sprite * sprite); +static void LoadMonSpriteGraphics(u16 *tilees, u16 *palette); +struct Sprite * PSA_CreateItemIconObject(u16 itemId); +static u16 GetBlendColorByItemId(u16 itemId); +static void Task_ZoomOutMon(u8 taskId); +static void CreateSprites_UseItem_OutwardSpiralDots(u8 taskId, s16 *data, struct Sprite * sprite); +static void sub_811DFC0(struct Sprite * sprite); +static void sub_811E06C(struct PokemonSpecialAnimScene * scene, struct Sprite * sprite, u8 closeness); +static void sub_811E10C(void); +static void sub_811E128(struct Sprite * sprite); +static bool8 sub_811E138(void); +static void sub_811E154(struct Sprite * sprite); +static void sub_811E194(u8 a0); +static void sub_811E204(struct PokemonSpecialAnimScene * scene); +static bool8 sub_811E2F4(void); +static void sub_811E300(struct Sprite * sprite); +static void sub_811E348(struct PokemonSpecialAnimScene * scene); +static void sub_811E388(void); +static void sub_811E3B4(u8 taskId); +static u16 sub_811E4EC(u8 taskId); +static void SpriteCallback_UseItem_OutwardSpiralDots(struct Sprite * sprite); +static void sub_811E588(void); +static bool32 sub_811E5A4(void); +static void sub_811E694(u8 taskId); +static void sub_811E710(u8 taskId, s16 *data); +static void sub_811E7B4(struct Sprite * sprite); + +static const u16 gUnknown_845963C[] = INCBIN_U16("graphics/pokemon_special_anim/unk_845963C.gbapal"); +static const u16 gUnknown_845965C[] = INCBIN_U16("graphics/pokemon_special_anim/unk_845965C.gbapal"); +static const u32 gUnknown_845967C[] = INCBIN_U32("graphics/pokemon_special_anim/unk_845967C.4bpp.lz"); +static const u32 gUnknown_845973C[] = INCBIN_U32("graphics/pokemon_special_anim/unk_845973C.bin.lz"); +static const u16 gUnknown_8459868[] = INCBIN_U16("graphics/pokemon_special_anim/unk_8459868.gbapal"); +static const u32 gUnknown_8459888[] = INCBIN_U32("graphics/pokemon_special_anim/unk_8459888.4bpp.lz"); +static const u16 gUnknown_84598A4[] = INCBIN_U16("graphics/pokemon_special_anim/unk_84598A4.gbapal"); +static const u32 gUnknown_84598C4[] = INCBIN_U32("graphics/pokemon_special_anim/unk_84598C4.4bpp.lz"); +static const u16 sSpritePals_UseItem_OutwardSpiralDots[] = INCBIN_U16("graphics/pokemon_special_anim/unk_8459940.gbapal"); +static const u32 sSpriteTiles_UseItem_OutwardSpiralDots[] = INCBIN_U32("graphics/pokemon_special_anim/unk_8459960.4bpp.lz"); + +static const struct BgTemplate sBgTemplates[] = { { .bg = 0, .charBaseIndex = 0, @@ -79,7 +79,7 @@ const struct BgTemplate gUnknown_8459980[] = { } }; -const struct WindowTemplate gUnknown_8459988[] = { +static const struct WindowTemplate sWindowTemplates[] = { { .bg = 0, .tilemapLeft = 1, @@ -91,52 +91,52 @@ const struct WindowTemplate gUnknown_8459988[] = { }, DUMMY_WIN_TEMPLATE }; -const u8 *const gUnknown_8459998[] = { +static const u8 *const s1_2_and_Poof_textPtrs[] = { gUnknown_841B2ED, // 1, gUnknown_841B2F1, // 2, and ‥ ‥ ‥ gUnknown_841B2FF, // Poof! }; -const u16 sUnref_84599A4[] = { +static const u16 sUnref_84599A4[] = { 0, 16, 68 }; -const u16 gUnknown_84599AA[] = { +static const u16 sAffineScales[] = { 0x100, 0x155, 0x1AA, 0x200 }; -const s8 gUnknown_84599B2[][2] = { +static const s8 gUnknown_84599B2[][2] = { {-8, -8}, { 6, -13}, { 8, -8} }; -const struct CompressedSpriteSheet gUnknown_84599B8 = { +static const struct CompressedSpriteSheet gUnknown_84599B8 = { gUnknown_84598C4, 0x80, 2 }; -const struct SpritePalette gUnknown_84599C0 = { +static const struct SpritePalette gUnknown_84599C0 = { gUnknown_84598A4, 2 }; -const struct CompressedSpriteSheet gUnknown_84599C8 = { - gUnknown_8459960, +static const struct CompressedSpriteSheet sSpriteSheet_UseItem_OutwardSpiralDots = { + sSpriteTiles_UseItem_OutwardSpiralDots, 0x60, 5 }; -const struct SpritePalette gUnknown_84599D0 = { - gUnknown_8459940, +static const struct SpritePalette sSpritePalette_UseItem_OutwardSpiralDots = { + sSpritePals_UseItem_OutwardSpiralDots, 5 }; -const struct OamData gUnknown_84599D8 = { +static const struct OamData sOamData_MonSprite = { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, .objMode = ST_OAM_OBJ_NORMAL, @@ -152,75 +152,75 @@ const struct OamData gUnknown_84599D8 = { }; -const union AffineAnimCmd gUnknown_84599E0[] = { +static const union AffineAnimCmd gUnknown_84599E0[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), AFFINEANIMCMD_END }; -const union AffineAnimCmd gUnknown_84599F0[] = { +static const union AffineAnimCmd gUnknown_84599F0[] = { AFFINEANIMCMD_FRAME(0x155, 0x155, 0, 0), AFFINEANIMCMD_END }; -const union AffineAnimCmd gUnknown_8459A00[] = { +static const union AffineAnimCmd gUnknown_8459A00[] = { AFFINEANIMCMD_FRAME(0x1AA, 0x1AA, 0, 0), AFFINEANIMCMD_END }; -const union AffineAnimCmd gUnknown_8459A10[] = { +static const union AffineAnimCmd gUnknown_8459A10[] = { AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0), AFFINEANIMCMD_END }; -const union AffineAnimCmd *const gUnknown_8459A20[] = { +static const union AffineAnimCmd *const sAffineAnimTable_Zoom[] = { gUnknown_84599E0, gUnknown_84599F0, gUnknown_8459A00, gUnknown_8459A10 }; -const struct SpriteTemplate gUnknown_8459A30 = { +static const struct SpriteTemplate sSpriteTemplate_MonSprite = { .tileTag = 0, .paletteTag = 0, - .oam = &gUnknown_84599D8, + .oam = &sOamData_MonSprite, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = gUnknown_8459A20, + .affineAnims = sAffineAnimTable_Zoom, .callback = SpriteCallbackDummy }; -const union AffineAnimCmd gUnknown_8459A48[] = { +static const union AffineAnimCmd gUnknown_8459A48[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), AFFINEANIMCMD_FRAME(-28, -28, 0, 8), AFFINEANIMCMD_END }; -const union AffineAnimCmd gUnknown_8459A60[] = { +static const union AffineAnimCmd gUnknown_8459A60[] = { AFFINEANIMCMD_FRAME(0x155, 0x155, 0, 0), AFFINEANIMCMD_FRAME(-37, -37, 0, 8), AFFINEANIMCMD_END }; -const union AffineAnimCmd gUnknown_8459A78[] = { +static const union AffineAnimCmd gUnknown_8459A78[] = { AFFINEANIMCMD_FRAME(0x1AA, 0x1AA, 0, 0), AFFINEANIMCMD_FRAME(-47, -47, 0, 8), AFFINEANIMCMD_END }; -const union AffineAnimCmd gUnknown_8459A90[] = { +static 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[] = { +static const union AffineAnimCmd *const gUnknown_8459AA8[] = { gUnknown_8459A48, gUnknown_8459A60, gUnknown_8459A78, gUnknown_8459A90 }; -const struct OamData gUnknown_8459AB8 = { +static const struct OamData gUnknown_8459AB8 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_BLEND, @@ -235,16 +235,16 @@ const struct OamData gUnknown_8459AB8 = { .paletteNum = 0 }; -const union AnimCmd gUnknown_8459AC0[] = { +static const union AnimCmd gUnknown_8459AC0[] = { ANIMCMD_FRAME(0, 3), ANIMCMD_END }; -const union AnimCmd *const gUnknown_8459AC8[] = { +static const union AnimCmd *const gUnknown_8459AC8[] = { gUnknown_8459AC0 }; -const struct SpriteTemplate gUnknown_8459ACC = { +static const struct SpriteTemplate gUnknown_8459ACC = { .tileTag = 0, .paletteTag = 0, .oam = &gUnknown_8459AB8, @@ -254,7 +254,7 @@ const struct SpriteTemplate gUnknown_8459ACC = { .callback = sub_811E7B4 }; -const struct OamData gUnknown_8459AE4 = { +static const struct OamData gUnknown_8459AE4 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, @@ -269,7 +269,7 @@ const struct OamData gUnknown_8459AE4 = { .paletteNum = 0 }; -const struct SpriteTemplate gUnknown_8459AEC = { +static const struct SpriteTemplate gUnknown_8459AEC = { .tileTag = 2, .paletteTag = 2, .oam = &gUnknown_8459AE4, @@ -279,7 +279,7 @@ const struct SpriteTemplate gUnknown_8459AEC = { .callback = sub_811E300 }; -const struct OamData gUnknown_8459B04 = { +static const struct OamData sOamData_UseItem_OutwardSpiralDots = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, @@ -294,51 +294,42 @@ const struct OamData gUnknown_8459B04 = { .paletteNum = 0 }; -const union AnimCmd gUnknown_8459B0C[] = { +static const union AnimCmd gUnknown_8459B0C[] = { ANIMCMD_FRAME(0, 16), ANIMCMD_FRAME(1, 8), ANIMCMD_FRAME(2, 4), ANIMCMD_END }; -const union AnimCmd gUnknown_8459B1C[] = { +static const union AnimCmd gUnknown_8459B1C[] = { ANIMCMD_FRAME(1, 4), ANIMCMD_FRAME(0, 4), ANIMCMD_END }; -const union AnimCmd *const gUnknown_8459B28[] = { +static const union AnimCmd *const sAnimTable_UseItem_OutwardSpiralDots[] = { gUnknown_8459B0C, gUnknown_8459B1C }; -const struct SpriteTemplate gUnknown_8459B30 = { +static const struct SpriteTemplate sSpriteTemplate_UseItem_OutwardSpiralDots = { .tileTag = 5, .paletteTag = 5, - .oam = &gUnknown_8459B04, - .anims = gUnknown_8459B28, + .oam = &sOamData_UseItem_OutwardSpiralDots, + .anims = sAnimTable_UseItem_OutwardSpiralDots, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_811E520 + .callback = SpriteCallback_UseItem_OutwardSpiralDots }; -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) +void InitPokemonSpecialAnimScene(struct PokemonSpecialAnimScene * buffer, u16 animType) { FreeAllWindowBuffers(); ResetTempTileDataBuffers(); SetGpuReg(REG_OFFSET_DISPCNT, 0); ResetBgsAndClearDma3BusyFlags(FALSE); - InitBgsFromTemplates(0, gUnknown_8459980, NELEMS(gUnknown_8459980)); - InitWindows(gUnknown_8459988); + InitBgsFromTemplates(0, sBgTemplates, NELEMS(sBgTemplates)); + InitWindows(sWindowTemplates); ChangeBgX(0, 0, 0); ChangeBgY(0, 0, 0); ChangeBgX(3, 0, 0); @@ -361,7 +352,7 @@ void sub_811D184(struct PokemonSpecialAnimScene * buffer, u16 animType) SetGpuReg(REG_OFFSET_BLDCNT, 0); } -bool8 sub_811D280(void) +bool8 PokemonSpecialAnimSceneInitIsNotFinished(void) { if (!FreeTempTileDataBuffersIfPossible()) return IsDma3ManagerBusyWithBgCopy(); @@ -369,7 +360,7 @@ bool8 sub_811D280(void) return TRUE; } -void sub_811D29C(void) +void PSA_FreeWindowBuffers(void) { FreeAllWindowBuffers(); } @@ -389,28 +380,28 @@ void sub_811D2D0(void) CopyWindowToVram(0, 1); } -void sub_811D2EC(u8 messageId) +void PSA_PrintMessage(u8 messageId) { - struct PokemonSpecialAnimScene * scene = sub_811D0A8(); - u16 itemId = sub_811D0B4(); + struct PokemonSpecialAnimScene * scene = PSA_GetSceneWork(); + u16 itemId = PSA_GetItemId(); u16 strWidth = 0; u8 textSpeed = GetTextSpeedSetting(); - struct Pokemon * pokemon = sub_811D094(); + struct Pokemon * pokemon = PSA_GetPokemon(); u16 level; u8 *str; switch (messageId) { case 0: // Item was used on Mon - str = StringCopy(scene->field_0014, ItemId_GetName(itemId)); + str = StringCopy(scene->textBuf, ItemId_GetName(itemId)); str = StringCopy(str, gUnknown_841B285); GetMonData(pokemon, MON_DATA_NICKNAME, str); - StringAppend(scene->field_0014, gUnknown_841B293); + StringAppend(scene->textBuf, gUnknown_841B293); break; case 1: // Mon's level was elevated to level level = GetMonData(pokemon, MON_DATA_LEVEL); - GetMonData(pokemon, MON_DATA_NICKNAME, scene->field_0014); - str = StringAppend(scene->field_0014, gUnknown_841B295); + GetMonData(pokemon, MON_DATA_NICKNAME, scene->textBuf); + str = StringAppend(scene->textBuf, gUnknown_841B295); if (level < MAX_LEVEL) level++; str = ConvertIntToDecimalStringN(str, level, STR_CONV_MODE_LEFT_ALIGN, level < MAX_LEVEL ? 2 : 3); @@ -418,9 +409,9 @@ void sub_811D2EC(u8 messageId) break; case 9: // Mon learned move DynamicPlaceholderTextUtil_Reset(); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, sub_811D0F4()); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, sub_811D0D0()); - DynamicPlaceholderTextUtil_ExpandPlaceholders(scene->field_0014, gUnknown_841B32E); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, PSA_GetMonNickname()); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, PSA_GetNameOfMoveToTeach()); + DynamicPlaceholderTextUtil_ExpandPlaceholders(scene->textBuf, gUnknown_841B32E); break; case 4: // poof! strWidth += GetStringWidth(2, gUnknown_841B2F1, -1); @@ -429,29 +420,29 @@ void sub_811D2EC(u8 messageId) strWidth += GetStringWidth(2, gUnknown_841B2ED, -1); // fallthrough case 2: // 1 - StringCopy(scene->field_0014, gUnknown_8459998[messageId - 2]); + StringCopy(scene->textBuf, s1_2_and_Poof_textPtrs[messageId - 2]); textSpeed = 1; break; case 5: // Mon forgot move DynamicPlaceholderTextUtil_Reset(); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, sub_811D0F4()); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, sub_811D0C4()); - DynamicPlaceholderTextUtil_ExpandPlaceholders(scene->field_0014, gUnknown_841B306); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, PSA_GetMonNickname()); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, PSA_GetNameOfMoveForgotten()); + DynamicPlaceholderTextUtil_ExpandPlaceholders(scene->textBuf, gUnknown_841B306); break; case 6: // And... - StringCopy(scene->field_0014, gUnknown_841B315); + StringCopy(scene->textBuf, gUnknown_841B315); break; case 7: // Machine set! - StringCopy(scene->field_0014, gUnknown_841B31B); + StringCopy(scene->textBuf, gUnknown_841B31B); break; case 8: // Huh? - StringCopy(scene->field_0014, gUnknown_841B329); + StringCopy(scene->textBuf, gUnknown_841B329); break; default: return; } - AddTextPrinterParameterized5(0, 2, scene->field_0014, strWidth, 0, textSpeed, NULL, 0, 4); + AddTextPrinterParameterized5(0, 2, scene->textBuf, strWidth, 0, textSpeed, NULL, 0, 4); } void sub_811D4D4(void) @@ -460,30 +451,30 @@ void sub_811D4D4(void) CopyWindowToVram(0, 2); } -bool8 sub_811D4EC(void) +bool8 PSA_IsMessagePrintTaskActive(void) { return IsTextPrinterActive(0); } void sub_811D4FC(void) { - struct PokemonSpecialAnimScene * scene = sub_811D0A8(); - scene->field_0000 = 0; + struct PokemonSpecialAnimScene * scene = PSA_GetSceneWork(); + scene->state = 0; BlendPalettes((0x10000 << IndexOfSpritePaletteTag(0)) | 4, 16, RGB_BLACK); sub_811E204(scene); } bool8 sub_811D530(void) { - struct PokemonSpecialAnimScene * scene = sub_811D0A8(); + struct PokemonSpecialAnimScene * scene = PSA_GetSceneWork(); - switch (scene->field_0000) + switch (scene->state) { case 0: if (!sub_811E2F4()) { BeginNormalPaletteFade((0x10000 << IndexOfSpritePaletteTag(0)) | 4, -1, 16, 0, RGB_BLACK); - scene->field_0000++; + scene->state++; } break; case 1: @@ -496,8 +487,8 @@ bool8 sub_811D530(void) void sub_811D5A0(void) { - struct PokemonSpecialAnimScene * scene = sub_811D0A8(); - scene->field_0000 = 0; + struct PokemonSpecialAnimScene * scene = PSA_GetSceneWork(); + scene->state = 0; } void sub_811D5B0(void) @@ -508,29 +499,29 @@ void sub_811D5B0(void) bool8 sub_811D5C0(void) { - struct PokemonSpecialAnimScene * scene = sub_811D0A8(); - switch (scene->field_0000) + struct PokemonSpecialAnimScene * scene = PSA_GetSceneWork(); + switch (scene->state) { case 0: sub_811E194(0); - scene->field_0000++; + scene->state++; break; case 1: if (!sub_811D9A8()) { scene->field_0004 = 0; - scene->field_0000++; + scene->state++; } break; case 2: scene->field_0004++; if (scene->field_0004 > 20) - scene->field_0000++; + scene->state++; break; case 3: - sub_811DB7C(scene, 1, 0, 1); + StartMonWiggleAnim(scene, 1, 0, 1); scene->field_0004 = 0; - scene->field_0000++; + scene->state++; break; case 4: scene->field_0004++; @@ -540,17 +531,17 @@ bool8 sub_811D5C0(void) PlaySE(SE_W025); BeginNormalPaletteFade(0x00000001, 2, 0, 12, RGB(8, 13, 31)); sub_811E348(scene); - scene->field_0000++; + scene->state++; } break; case 5: scene->field_0004++; if (scene->field_0004 > 70) { - sub_811DBA8(scene); + StopMonWiggleAnim(scene); BeginNormalPaletteFade(0x00000001, 6, 12, 0, RGB(8, 13, 31)); scene->field_0004 = 0; - scene->field_0000++; + scene->state++; } break; case 6: @@ -558,20 +549,20 @@ bool8 sub_811D5C0(void) if (!sub_811E5A4() && scene->field_0004 > 40) { scene->field_0004 = 0; - scene->field_0000++; + scene->state++; } break; case 7: scene->field_0004++; if (scene->field_0004 > 20) { - scene->field_0000++; + scene->state++; } break; case 8: PlaySE(SE_EXPMAX); - DestroySprite(scene->field_0010); - scene->field_0000++; + DestroySprite(scene->itemIconSprite); + scene->state++; break; default: return FALSE; @@ -581,20 +572,20 @@ bool8 sub_811D5C0(void) void sub_811D6EC(void) { - struct PokemonSpecialAnimScene * scene = sub_811D0A8(); - scene->field_0000 = 0; + struct PokemonSpecialAnimScene * scene = PSA_GetSceneWork(); + scene->state = 0; } bool8 sub_811D6FC(void) { - struct PokemonSpecialAnimScene * scene = sub_811D0A8(); + struct PokemonSpecialAnimScene * scene = PSA_GetSceneWork(); - switch (scene->field_0000) + switch (scene->state) { case 0: sub_811E10C(); PlaySE(SE_MU_PACHI); - scene->field_0000++; + scene->state++; break; case 1: return sub_811E138(); @@ -602,7 +593,7 @@ bool8 sub_811D6FC(void) return TRUE; } -void sub_811D734(void) +static void sub_811D734(void) { sub_811E5B8(120, 56, 4, 4, 2, 0); } @@ -612,25 +603,25 @@ bool8 sub_811D754(void) return sub_811E680(); } -void sub_811D764(u16 *statsBefore, u16 *statsAfter) +static 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) +static 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) +static bool8 sub_811D7C4(void) { return IsDma3ManagerBusyWithBgCopy(); } -void sub_811D7D4(u16 animType) +static void sub_811D7D4(u16 animType) { CopyToBgTilemapBuffer(3, gUnknown_845973C, 0, 0x000); DecompressAndCopyTileDataToVram(3, gUnknown_845967C, 0, 0x000, 0); @@ -642,8 +633,8 @@ void sub_811D7D4(u16 animType) void sub_811D830(u8 closeness) { - struct PokemonSpecialAnimScene * scene = sub_811D0A8(); - struct Pokemon * pokemon = sub_811D094(); + struct PokemonSpecialAnimScene * scene = PSA_GetSceneWork(); + struct Pokemon * pokemon = PSA_GetPokemon(); u16 species = GetMonData(pokemon, MON_DATA_SPECIES); u32 personality = GetMonData(pokemon, MON_DATA_PERSONALITY); u8 r1 = sub_812EA78(species, personality, 2); @@ -670,15 +661,15 @@ void sub_811D830(u8 closeness) { HandleLoadSpecialPokePic(&gMonFrontPicTable[species], r6, species, personality); LZ77UnCompWram(GetMonFrontSpritePal(pokemon), r4); - sub_811DC14(r6, r4); - spriteId = CreateSprite(&gUnknown_8459A30, 120, scene->field_0006, 4); + LoadMonSpriteGraphics(r6, r4); + spriteId = CreateSprite(&sSpriteTemplate_MonSprite, 120, scene->field_0006, 4); if (spriteId != MAX_SPRITES) { - scene->field_000c = &gSprites[spriteId]; - sub_811DB14(scene->field_000c, closeness); + scene->monSprite = &gSprites[spriteId]; + sub_811DB14(scene->monSprite, closeness); } else - scene->field_000c = NULL; + scene->monSprite = NULL; scene->field_000a = closeness; } if (r6 != NULL) Free(r6); @@ -686,14 +677,14 @@ void sub_811D830(u8 closeness) if (r4 != NULL) Free(r4); } -void sub_811D948(u8 closeness) +void PSA_SetUpZoomAnim(u8 closeness) { - struct PokemonSpecialAnimScene * scene = sub_811D0A8(); + struct PokemonSpecialAnimScene * scene = PSA_GetSceneWork(); u8 taskId; if (closeness != scene->field_000a) { taskId = CreateTask(sub_811D9BC, 4); - SetWordTaskArg(taskId, 6, (uintptr_t)scene->field_000c); + SetWordTaskArg(taskId, 6, (uintptr_t)scene->monSprite); gTasks[taskId].data[1] = scene->field_000a; gTasks[taskId].data[2] = closeness; gTasks[taskId].data[5] = 6; @@ -709,7 +700,7 @@ bool8 sub_811D9A8(void) return FuncIsActiveTask(sub_811D9BC); } -void sub_811D9BC(u8 taskId) +static void sub_811D9BC(u8 taskId) { s16 *data = gTasks[taskId].data; struct Sprite * sprite = (void *)GetWordTaskArg(taskId, 6); @@ -731,7 +722,7 @@ void sub_811D9BC(u8 taskId) sub_811DB48((void *)GetWordTaskArg(taskId, 9), data[1]); if (data[1] == data[2]) { - sub_811D0A8()->field_000a = data[2]; + PSA_GetSceneWork()->field_000a = data[2]; DestroyTask(taskId); } else @@ -749,62 +740,64 @@ void sub_811D9BC(u8 taskId) } } -void sub_811DA9C(struct Sprite * sprite, u8 closeness) +static 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) +static bool8 sub_811DAAC(struct Sprite * sprite) { return sprite->callback != SpriteCallbackDummy; } -s16 sub_811DAC0(s16 pos, u8 closeness) +static s16 sub_811DAC0(s16 pos, u8 closeness) { - return (pos * gUnknown_84599AA[closeness]) >> 8; + return (pos * sAffineScales[closeness]) >> 8; } // FIXME: better math -u16 sub_811DADC(u16 pos) +static u16 sub_811DADC(u16 pos) { - struct PokemonSpecialAnimScene * scene = sub_811D0A8(); + struct PokemonSpecialAnimScene * scene = PSA_GetSceneWork(); 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) +static void sub_811DB14(struct Sprite * sprite, u8 closeness) { if (closeness > 3) closeness = 3; - sub_811D0A8(); // return value not used + PSA_GetSceneWork(); // return value not used StartSpriteAffineAnim(sprite, closeness); - sprite->pos1.y = sub_811DADC(gUnknown_84599AA[closeness]); + sprite->pos1.y = sub_811DADC(sAffineScales[closeness]); } -void sub_811DB48(struct Sprite * sprite, u8 closeness) +static 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) +static void StartMonWiggleAnim(struct PokemonSpecialAnimScene * scene, u8 frameLen, u8 niter, u8 amplitude) { - scene->field_000c->data[0] = a1; - scene->field_000c->data[1] = a2; - scene->field_000c->data[2] = a3; - scene->field_000c->callback = sub_811DBBC; + // frameLen: frame duration + // niter = 0: iterate ad infinitum + scene->monSprite->data[0] = frameLen; + scene->monSprite->data[1] = niter; + scene->monSprite->data[2] = amplitude; + scene->monSprite->callback = SpriteCallback_MonSpriteWiggle; } -void sub_811DBA8(struct PokemonSpecialAnimScene * scene) +static void StopMonWiggleAnim(struct PokemonSpecialAnimScene * scene) { - scene->field_000c->pos2.x = 0; - scene->field_000c->callback = SpriteCallbackDummy; + scene->monSprite->pos2.x = 0; + scene->monSprite->callback = SpriteCallbackDummy; } -void sub_811DBBC(struct Sprite * sprite) +static void SpriteCallback_MonSpriteWiggle(struct Sprite * sprite) { sprite->data[7]++; if (sprite->data[7] > sprite->data[0]) @@ -823,7 +816,7 @@ void sub_811DBBC(struct Sprite * sprite) } } -void sub_811DC14(u16 *tiles, u16 *palette) +static void LoadMonSpriteGraphics(u16 *tiles, u16 *palette) { struct SpriteSheet spriteSheet; struct SpritePalette spritePalette; @@ -837,42 +830,42 @@ void sub_811DC14(u16 *tiles, u16 *palette) LoadSpritePalette(&spritePalette); } -void sub_811DC54(u16 itemId, u8 closeness, bool32 a2) +void PSA_SetUpZoomOutMonTask(u16 itemId, u8 closeness, bool32 a2) { - struct PokemonSpecialAnimScene * scene = sub_811D0A8(); + struct PokemonSpecialAnimScene * scene = PSA_GetSceneWork(); u8 taskId; - scene->field_0010 = sub_811DD20(itemId); - if (scene->field_0010 != NULL) + scene->itemIconSprite = PSA_CreateItemIconObject(itemId); + if (scene->itemIconSprite != 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); + sub_811E06C(scene, scene->itemIconSprite, closeness); + StartSpriteAffineAnim(scene->itemIconSprite, closeness); + scene->itemIconSprite->invisible = TRUE; + taskId = CreateTask(Task_ZoomOutMon, 2); + SetWordTaskArg(taskId, 4, (uintptr_t)scene->itemIconSprite); gTasks[taskId].data[2] = closeness; - gTasks[taskId].data[3] = sub_811DADC(gUnknown_84599AA[closeness]); + gTasks[taskId].data[3] = sub_811DADC(sAffineScales[closeness]); gTasks[taskId].data[6] = a2; - gTasks[taskId].data[9] = sub_811DCE8(itemId); + gTasks[taskId].data[9] = GetBlendColorByItemId(itemId); } } -u16 sub_811DCE8(u16 itemId) +static u16 GetBlendColorByItemId(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) + struct PokemonSpecialAnimScene * scene = PSA_GetSceneWork(); + scene->itemIconSprite = PSA_CreateItemIconObject(itemId); + if (scene->itemIconSprite != NULL) { - StartSpriteAffineAnim(scene->field_0010, 3); - sub_811E06C(scene, scene->field_0010, 3); + StartSpriteAffineAnim(scene->itemIconSprite, 3); + sub_811E06C(scene, scene->itemIconSprite, 3); } } -struct Sprite * sub_811DD20(u16 itemId) +struct Sprite * PSA_CreateItemIconObject(u16 itemId) { u8 spriteId; struct Sprite * sprite; @@ -882,18 +875,18 @@ struct Sprite * sub_811DD20(u16 itemId) gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_DOUBLE; gSprites[spriteId].oam.priority = 1; gSprites[spriteId].subpriority = 1; - gSprites[spriteId].affineAnims = gUnknown_8459A20; + gSprites[spriteId].affineAnims = sAffineAnimTable_Zoom; gSprites[spriteId].callback = SpriteCallbackDummy; InitSpriteAffineAnim(&gSprites[spriteId]); return &gSprites[spriteId]; } -bool8 sub_811DD90(void) +bool8 PSA_IsZoomOutMonTaskRunning(void) { - return FuncIsActiveTask(sub_811DDA4); + return FuncIsActiveTask(Task_ZoomOutMon); } -void sub_811DDA4(u8 taskId) +static void Task_ZoomOutMon(u8 taskId) { s16 *data = gTasks[taskId].data; struct Sprite * sprite = (void *)GetWordTaskArg(taskId, 4); @@ -937,7 +930,7 @@ void sub_811DDA4(u8 taskId) { data[1] = 0; if (!data[11]) - sub_811DF14(taskId, data, sprite); + CreateSprites_UseItem_OutwardSpiralDots(taskId, data, sprite); if (data[7] == 0) PlaySE(SE_W179); data[7]++; @@ -958,7 +951,7 @@ void sub_811DDA4(u8 taskId) } } -void sub_811DF14(u8 taskId, s16 *data, struct Sprite * sprite) +static void CreateSprites_UseItem_OutwardSpiralDots(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; @@ -967,7 +960,7 @@ void sub_811DF14(u8 taskId, s16 *data, struct Sprite * sprite) BlendPalettes(0x10000 << IndexOfSpritePaletteTag(5), 16, data[9]); for (i = 0; i < 15; i++) { - spriteId = CreateSprite(&gUnknown_8459B30, x, y, 0); + spriteId = CreateSprite(&sSpriteTemplate_UseItem_OutwardSpiralDots, x, y, 0); if (spriteId != MAX_SPRITES) { gSprites[spriteId].data[1] = i << 4; @@ -979,7 +972,7 @@ void sub_811DF14(u8 taskId, s16 *data, struct Sprite * sprite) } } -void sub_811DFC0(struct Sprite * sprite) +static void sub_811DFC0(struct Sprite * sprite) { s16 *data = sprite->data; if (data[0] < 16) @@ -1000,14 +993,14 @@ void sub_811DFC0(struct Sprite * sprite) void sub_811E040(void) { - u8 taskId = FindTaskIdByFunc(sub_811DDA4); + u8 taskId = FindTaskIdByFunc(Task_ZoomOutMon); if (taskId != 0xFF) { gTasks[taskId].data[11] = TRUE; } } -void sub_811E06C(struct PokemonSpecialAnimScene * scene, struct Sprite * sprite, u8 closeness) +static void sub_811E06C(struct PokemonSpecialAnimScene * scene, struct Sprite * sprite, u8 closeness) { u16 species; u32 personality; @@ -1025,9 +1018,9 @@ void sub_811E06C(struct PokemonSpecialAnimScene * scene, struct Sprite * sprite, } sprite->pos1.x += 4; sprite->pos1.y += 4; - species = sub_811D110(); - personality = sub_811D120(); - if (sub_811D100() == 4) + species = PSA_GetMonSpecies(); + personality = PSA_GetMonPersonality(); + if (PSA_GetAnimType() == 4) { r4 = sub_812EA78(species, personality, 0); r0 = sub_812EA78(species, personality, 1); @@ -1046,27 +1039,27 @@ void sub_811E06C(struct PokemonSpecialAnimScene * scene, struct Sprite * sprite, sub_811DB48(sprite, closeness); } -void sub_811E10C(void) +static void sub_811E10C(void) { - struct PokemonSpecialAnimScene * scene = sub_811D0A8(); - sub_811E128(scene->field_000c); - sub_811E128(scene->field_0010); + struct PokemonSpecialAnimScene * scene = PSA_GetSceneWork(); + sub_811E128(scene->monSprite); + sub_811E128(scene->itemIconSprite); } -void sub_811E128(struct Sprite * sprite) +static void sub_811E128(struct Sprite * sprite) { sprite->data[0] = 0; sprite->data[1] = 0; sprite->callback = sub_811E154; } -bool8 sub_811E138(void) +static bool8 sub_811E138(void) { - struct PokemonSpecialAnimScene * scene = sub_811D0A8(); - return scene->field_000c->callback != SpriteCallbackDummy; + struct PokemonSpecialAnimScene * scene = PSA_GetSceneWork(); + return scene->monSprite->callback != SpriteCallbackDummy; } -void sub_811E154(struct Sprite * sprite) +static void sub_811E154(struct Sprite * sprite) { switch (sprite->data[0]) { @@ -1085,15 +1078,15 @@ void sub_811E154(struct Sprite * sprite) } } -void sub_811E194(u8 a0) +static void sub_811E194(u8 a0) { - struct PokemonSpecialAnimScene * scene = sub_811D0A8(); + struct PokemonSpecialAnimScene * scene = PSA_GetSceneWork(); u8 taskId; if (a0 != scene->field_000a) { taskId = CreateTask(sub_811D9BC, 1); - SetWordTaskArg(taskId, 6, (uintptr_t)scene->field_000c); - SetWordTaskArg(taskId, 9, (uintptr_t)scene->field_0010); + SetWordTaskArg(taskId, 6, (uintptr_t)scene->monSprite); + SetWordTaskArg(taskId, 9, (uintptr_t)scene->itemIconSprite); gTasks[taskId].data[1] = scene->field_000a; gTasks[taskId].data[2] = a0; gTasks[taskId].data[8] = 1; @@ -1105,7 +1098,7 @@ void sub_811E194(u8 a0) } } -void sub_811E204(struct PokemonSpecialAnimScene * scene) +static void sub_811E204(struct PokemonSpecialAnimScene * scene) { int i; u8 spriteId; @@ -1119,8 +1112,8 @@ void sub_811E204(struct PokemonSpecialAnimScene * scene) spriteId = CreateSprite(&gUnknown_8459AEC, 120 + gUnknown_84599B2[i][0], scene->field_0008 + gUnknown_84599B2[i][1], 2); if (spriteId != MAX_SPRITES) { - species = sub_811D110(); - personality = sub_811D120(); + species = PSA_GetMonSpecies(); + personality = PSA_GetMonPersonality(); gSprites[spriteId].data[3] = gUnknown_84599B2[i][0] * 8; gSprites[spriteId].data[4] = gUnknown_84599B2[i][1] * 8; gSprites[spriteId].pos1.x += sub_811DAC0(sub_812EAE4(species, personality, 0), 3); @@ -1130,12 +1123,12 @@ void sub_811E204(struct PokemonSpecialAnimScene * scene) } } -u8 sub_811E2F4(void) +static u8 sub_811E2F4(void) { - return sub_811D0A8()->field_0002; + return PSA_GetSceneWork()->field_0002; } -void sub_811E300(struct Sprite * sprite) +static void sub_811E300(struct Sprite * sprite) { sprite->data[0]++; if (sprite->data[0] < 10) @@ -1147,12 +1140,12 @@ void sub_811E300(struct Sprite * sprite) } else { - sub_811D0A8()->field_0002--; + PSA_GetSceneWork()->field_0002--; DestroySprite(sprite); } } -void sub_811E348(struct PokemonSpecialAnimScene * scene) +static void sub_811E348(struct PokemonSpecialAnimScene * scene) { u8 taskId; sub_811E588(); @@ -1161,14 +1154,14 @@ void sub_811E348(struct PokemonSpecialAnimScene * scene) gTasks[taskId].data[5] = 224; } -void sub_811E388(void) +static void sub_811E388(void) { u8 taskId = FindTaskIdByFunc(sub_811E3B4); if (taskId != 0xFF) gTasks[taskId].data[0] = 1; } -void sub_811E3B4(u8 taskId) +static void sub_811E3B4(u8 taskId) { s16 *data = gTasks[taskId].data; struct Sprite * sprite; @@ -1183,7 +1176,7 @@ void sub_811E3B4(u8 taskId) case 0: if (data[1] == 0) { - sprite = sub_811D0A8()->field_0010; + sprite = PSA_GetSceneWork()->itemIconSprite; x = sprite->pos1.x + sprite->pos2.x; y = sprite->pos1.y + sprite->pos2.y; r0 = (sub_811E4EC(taskId) % 21) + 70; @@ -1191,7 +1184,7 @@ void sub_811E3B4(u8 taskId) y2 = y + ((u32)(gSineTable[data[5] ] * r0) >> 8); data[5] += 76; data[5] &= 0xFF; - spriteId = CreateSprite(&gUnknown_8459B30, x2, y2, 0); + spriteId = CreateSprite(&sSpriteTemplate_UseItem_OutwardSpiralDots, x2, y2, 0); if (spriteId != MAX_SPRITES) { gSprites[spriteId].data[0] = 0; @@ -1217,7 +1210,7 @@ void sub_811E3B4(u8 taskId) } } -u16 sub_811E4EC(u8 taskId) +static u16 sub_811E4EC(u8 taskId) { u32 state = GetWordTaskArg(taskId, 3); state = state * 1103515245 + 24691; @@ -1225,7 +1218,7 @@ u16 sub_811E4EC(u8 taskId) return state >> 16; } -void sub_811E520(struct Sprite * sprite) +static void SpriteCallback_UseItem_OutwardSpiralDots(struct Sprite * sprite) { int x; int y; @@ -1244,13 +1237,13 @@ void sub_811E520(struct Sprite * sprite) } } -void sub_811E588(void) +static void sub_811E588(void) { - LoadCompressedSpriteSheet(&gUnknown_84599C8); - LoadSpritePalette(&gUnknown_84599D0); + LoadCompressedSpriteSheet(&sSpriteSheet_UseItem_OutwardSpiralDots); + LoadSpritePalette(&sSpritePalette_UseItem_OutwardSpiralDots); } -bool32 sub_811E5A4(void) +static bool32 sub_811E5A4(void) { return FuncIsActiveTask(sub_811E3B4); } @@ -1283,7 +1276,7 @@ bool8 sub_811E680(void) return FuncIsActiveTask(sub_811E694); } -void sub_811E694(u8 taskId) +static void sub_811E694(u8 taskId) { s16 *data = gTasks[taskId].data; switch (data[0]) @@ -1314,7 +1307,7 @@ void sub_811E694(u8 taskId) } } -void sub_811E710(u8 taskId, s16 *data) +static void sub_811E710(u8 taskId, s16 *data) { u8 spriteId; struct SpriteTemplate template = gUnknown_8459ACC; @@ -1332,7 +1325,7 @@ void sub_811E710(u8 taskId, s16 *data) } } -void sub_811E7B4(struct Sprite * sprite) +static void sub_811E7B4(struct Sprite * sprite) { sprite->data[1] -= sprite->data[2]; sprite->pos2.y = sprite->data[1] >> 4; @@ -1343,6 +1336,15 @@ void sub_811E7B4(struct Sprite * sprite) } } +static const u8 *const sLevelUpWindowStatNames[] = { + gUnknown_841B2A9, + gUnknown_841B2B7, + gUnknown_841B2BE, + gUnknown_841B2CC, + gUnknown_841B2D4, + gUnknown_841B2C6 +}; + void DrawLevelUpWindowPg1(u16 windowId, u16 *beforeStats, u16 *afterStats, u8 bgColor, u8 fgColor, u8 shadowColor) { s16 diffStats[6]; @@ -1366,7 +1368,7 @@ void DrawLevelUpWindowPg1(u16 windowId, u16 *beforeStats, u16 *afterStats, u8 bg for (i = 0; i < 6; i++) { - AddTextPrinterParameterized3(windowId, 2, 0, i * 15, textColor, TEXT_SPEED_FF, gUnknown_8459B48[i]); + AddTextPrinterParameterized3(windowId, 2, 0, i * 15, textColor, TEXT_SPEED_FF, sLevelUpWindowStatNames[i]); StringCopy(textbuf, diffStats[i] >= 0 ? gUnknown_841B2DC : gUnknown_841B2E5); AddTextPrinterParameterized3(windowId, 2, 56, i * 15, textColor, TEXT_SPEED_FF, textbuf); textbuf[0] = CHAR_SPACE; @@ -1408,7 +1410,7 @@ void DrawLevelUpWindowPg2(u16 windowId, u16 *currStats, u8 bgColor, u8 fgColor, ndigits = 1; ConvertIntToDecimalStringN(textbuf, statsRearrange[i], STR_CONV_MODE_LEFT_ALIGN, ndigits); x = 6 * (4 - ndigits); - AddTextPrinterParameterized3(windowId, 2, 0, i * 15, textColor, TEXT_SPEED_FF, gUnknown_8459B48[i]); + AddTextPrinterParameterized3(windowId, 2, 0, i * 15, textColor, TEXT_SPEED_FF, sLevelUpWindowStatNames[i]); AddTextPrinterParameterized3(windowId, 2, 56 + x, i * 15, textColor, TEXT_SPEED_FF, textbuf); } } -- cgit v1.2.3 From 77a6b8a820fe89af57585255e1c80ed9a3913be8 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 22 Mar 2020 14:26:44 -0400 Subject: Address review comments; doc round 2 --- include/menu.h | 6 +- include/pokemon_special_anim.h | 6 +- include/pokemon_special_anim_internal.h | 44 +- src/battle_controller_player.c | 4 +- src/menu2.c | 836 ++++++++++++++++---------------- src/party_menu.c | 4 +- src/pokemon_special_anim.c | 114 ++--- src/pokemon_special_anim_scene.c | 796 +++++++++++++++++------------- 8 files changed, 973 insertions(+), 837 deletions(-) diff --git a/include/menu.h b/include/menu.h index 49dd43e26..36a3cc942 100644 --- a/include/menu.h +++ b/include/menu.h @@ -5,6 +5,8 @@ #include "text.h" #include "window.h" +#define MON_COORD_ + #define MENU_NOTHING_CHOSEN -2 #define MENU_B_PRESSED -1 @@ -24,8 +26,8 @@ void AddTextPrinterParameterized5(u8 windowId, u8 fontId, const u8 *str, u8 x, u void Menu_PrintFormatIntlPlayerName(u8 windowId, const u8 * src, u16 x, u16 y); void StartBlendTask(u8 eva_start, u8 evb_start, u8 eva_end, u8 evb_end, u8 ev_step, u8 priority); bool8 IsBlendTaskActive(void); -u8 sub_812EA78(u16 species, u32 personality, u8 a2); -s8 sub_812EAE4(u16 species, u32 personality, u8 a2); +u8 Menu2_GetMonSpriteAnchorCoord(u16 species, u32 personality, u8 a2); +s8 Menu2_GetMonSpriteAnchorCoordMinusx20(u16 species, u32 personality, u8 a2); // list_menu void sub_8107CD8(u8 palOffset, u16 speciesId); diff --git a/include/pokemon_special_anim.h b/include/pokemon_special_anim.h index c1d64f072..8d2e6ebb6 100644 --- a/include/pokemon_special_anim.h +++ b/include/pokemon_special_anim.h @@ -3,14 +3,14 @@ #include "global.h" -void sub_811E5B8(u16, u16, u16, u16, u16, u16); -bool8 sub_811E680(void); +void CreateLevelUpVerticalSpritesTask(u16 x, u16 y, u16 tileTag, u16 paletteTag, u16 priority, u16 subpriority); +bool8 LevelUpVerticalSpritesTaskIsRunning(void); void GetMonLevelUpWindowStats(struct Pokemon *mon, u16 *currStats); void DrawLevelUpWindowPg1(u16 windowId, u16 *statsBefore, u16 *statsAfter, u8 bgClr, u8 fgClr, u8 shadowClr); void DrawLevelUpWindowPg2(u16 windowId, u16 *currStats, u8 bgClr, u8 fgClr, u8 shadowClr); void StartUseItemAnim_Normal(u8 slotId, u16 itemId, MainCallback callback); void StartUseItemAnim_CantEvolve(u8 slotId, u16 itemId, MainCallback callback); -u32 PSA_IsCancelDisabled(void); +bool32 PSA_IsCancelDisabled(void); void StartUseItemAnim_ForgetMoveAndLearnTMorHM(u8 slotId, u16 itemId, u16 moveId, MainCallback callback); #endif // GUARD_POKEMON_SPECIAL_ANIM_H diff --git a/include/pokemon_special_anim_internal.h b/include/pokemon_special_anim_internal.h index f3f912fac..e9df6f985 100644 --- a/include/pokemon_special_anim_internal.h +++ b/include/pokemon_special_anim_internal.h @@ -22,9 +22,9 @@ struct PokemonSpecialAnimScene u16 state; u16 field_0002; u16 field_0004; - u16 field_0006; - u16 field_0008; - u8 field_000a; + u16 monSpriteY1; + u16 monSpriteY2; + u8 lastCloseness; struct Sprite * monSprite; struct Sprite * itemIconSprite; u8 textBuf[0x900]; @@ -49,7 +49,7 @@ struct PokemonSpecialAnim /*0x0098*/ u16 animType; /*0x009a*/ u16 slotId; /*0x009c*/ u16 closeness; - /*0x009e*/ u16 field_009e; + /*0x009e*/ u16 delayTimer; /*0x00a0*/ u32 personality; /*0x00a4*/ u32 field_00a4; /*0x00a8*/ struct PokemonSpecialAnimScene sceneResources; @@ -66,31 +66,29 @@ u8 *PSA_GetMonNickname(void); u8 PSA_GetAnimType(void); u16 PSA_GetMonSpecies(void); u32 PSA_GetMonPersonality(void); -void GetMonLevelUpWindowStats(struct Pokemon * pokemon, u16 *data); -bool32 PSA_IsCancelDisabled(void); void InitPokemonSpecialAnimScene(struct PokemonSpecialAnimScene * buffer, u16 animType); bool8 PokemonSpecialAnimSceneInitIsNotFinished(void); void PSA_FreeWindowBuffers(void); -void sub_811D2A8(void); -void sub_811D2D0(void); +void PSA_ShowMessageWindow(void); +void PSA_HideMessageWindow(void); void PSA_PrintMessage(u8 messageId); -void sub_811D4D4(void); +void PSA_AfterPoof_ClearMessageWindow(void); bool8 PSA_IsMessagePrintTaskActive(void); -void sub_811D4FC(void); -bool8 sub_811D530(void); -void sub_811D5A0(void); -void sub_811D5B0(void); -bool8 sub_811D5C0(void); -void sub_811D6EC(void); -bool8 sub_811D6FC(void); -bool8 sub_811D754(void); -void sub_811D830(u8 closeness); +void PSA_DarkenMonSprite(void); +bool8 PSA_RunPoofAnim(void); +void PSA_UseTM_SetUpZoomOutAnim(void); +void PSA_UseTM_CleanUpForCancel(void); +bool8 PSA_UseTM_RunZoomOutAnim(void); +void PSA_UseTM_SetUpMachineSetWobble(void); +bool8 PSA_UseTM_RunMachineSetWobble(void); +bool8 PSA_LevelUpVerticalSpritesTaskIsRunning(void); +void PSA_CreateMonSpriteAtCloseness(u8 closeness); void PSA_SetUpZoomAnim(u8 closeness); -bool8 sub_811D9A8(void); -void PSA_SetUpZoomOutMonTask(u16 itemId, u8 closeness, bool32 a2); -void sub_811DCF0(u16 itemId); -bool8 PSA_IsZoomOutMonTaskRunning(void); -void sub_811E040(void); +bool8 PSA_IsZoomTaskActive(void); +void PSA_SetUpItemUseOnMonAnim(u16 itemId, u8 closeness, bool32 a2); +void CreateItemIconSpriteAtMaxCloseness(u16 itemId); +bool8 PSA_IsItemUseOnMonAnimActive(void); +void PSA_UseItem_CleanUpForCancel(void); #endif //GUARD_POKEMON_SPECIAL_ANIM_INTERNAL_H diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index a751c0eea..b28249a97 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -1226,7 +1226,7 @@ static void sub_80303A8(u8 taskId) case 2: PlaySE(SE_REGI); if (IsMonGettingExpSentOut()) - sub_811E5B8(sprite->pos1.x + sprite->pos2.x, + CreateLevelUpVerticalSpritesTask(sprite->pos1.x + sprite->pos2.x, sprite->pos1.y + sprite->pos2.y, 10000, 10000, @@ -1235,7 +1235,7 @@ static void sub_80303A8(u8 taskId) ++data[15]; break; case 3: - if (!sub_811E680()) + if (!LevelUpVerticalSpritesTaskIsRunning()) { sprite->invisible = FALSE; ++data[15]; diff --git a/src/menu2.c b/src/menu2.c index 1957715b2..116bf7b52 100644 --- a/src/menu2.c +++ b/src/menu2.c @@ -9,422 +9,422 @@ static void Task_SmoothBlendLayers(u8 taskId); -static const u8 gUnknown_845FD54[][5] = { - [SPECIES_BULBASAUR - 1] = {0x16, 0x1b, 0x30, 0x16, 0x29}, - [SPECIES_IVYSAUR - 1] = {0x14, 0x1b, 0x30, 0x15, 0x2a}, - [SPECIES_VENUSAUR - 1] = {0x1b, 0x20, 0x20, 0x1b, 0x33}, - [SPECIES_CHARMANDER - 1] = {0x14, 0x0f, 0x38, 0x13, 0x1e}, - [SPECIES_CHARMELEON - 1] = {0x0d, 0x11, 0x30, 0x0f, 0x22}, - [SPECIES_CHARIZARD - 1] = {0x1b, 0x07, 0x28, 0x1a, 0x19}, - [SPECIES_SQUIRTLE - 1] = {0x19, 0x13, 0x30, 0x1a, 0x22}, - [SPECIES_WARTORTLE - 1] = {0x16, 0x13, 0x30, 0x17, 0x21}, - [SPECIES_BLASTOISE - 1] = {0x12, 0x08, 0x28, 0x15, 0x19}, - [SPECIES_CATERPIE - 1] = {0x15, 0x14, 0x30, 0x13, 0x24}, - [SPECIES_METAPOD - 1] = {0x13, 0x1d, 0x30, 0x18, 0x2a}, - [SPECIES_BUTTERFREE - 1] = {0x12, 0x1b, 0x08, 0x12, 0x2a}, - [SPECIES_WEEDLE - 1] = {0x16, 0x1c, 0x30, 0x15, 0x2b}, - [SPECIES_KAKUNA - 1] = {0x19, 0x13, 0x30, 0x1a, 0x24}, - [SPECIES_BEEDRILL - 1] = {0x19, 0x16, 0x08, 0x19, 0x25}, - [SPECIES_PIDGEY - 1] = {0x15, 0x12, 0x30, 0x12, 0x1e}, - [SPECIES_PIDGEOTTO - 1] = {0x24, 0x0e, 0x30, 0x1f, 0x1e}, - [SPECIES_PIDGEOT - 1] = {0x0c, 0x13, 0x08, 0x0a, 0x23}, - [SPECIES_RATTATA - 1] = {0x17, 0x1e, 0x30, 0x18, 0x2d}, - [SPECIES_RATICATE - 1] = {0x12, 0x14, 0x30, 0x10, 0x26}, - [SPECIES_SPEAROW - 1] = {0x15, 0x14, 0x30, 0x15, 0x1f}, - [SPECIES_FEAROW - 1] = {0x0c, 0x27, 0x00, 0x0b, 0x3f}, - [SPECIES_EKANS - 1] = {0x11, 0x0f, 0x30, 0x14, 0x1d}, - [SPECIES_ARBOK - 1] = {0x1b, 0x01, 0x28, 0x1d, 0x10}, - [SPECIES_PIKACHU - 1] = {0x19, 0x13, 0x30, 0x1a, 0x1f}, - [SPECIES_RAICHU - 1] = {0x19, 0x14, 0x28, 0x1c, 0x22}, - [SPECIES_SANDSHREW - 1] = {0x17, 0x16, 0x30, 0x18, 0x25}, - [SPECIES_SANDSLASH - 1] = {0x11, 0x13, 0x28, 0x13, 0x22}, - [SPECIES_NIDORAN_F - 1] = {0x16, 0x15, 0x30, 0x18, 0x21}, - [SPECIES_NIDORINA - 1] = {0x1f, 0x17, 0x30, 0x1e, 0x28}, - [SPECIES_NIDOQUEEN - 1] = {0x10, 0x0b, 0x28, 0x13, 0x1c}, - [SPECIES_NIDORAN_M - 1] = {0x15, 0x22, 0x28, 0x15, 0x31}, - [SPECIES_NIDORINO - 1] = {0x13, 0x1e, 0x28, 0x1b, 0x2d}, - [SPECIES_NIDOKING - 1] = {0x12, 0x15, 0x28, 0x13, 0x27}, - [SPECIES_CLEFAIRY - 1] = {0x19, 0x14, 0x30, 0x1b, 0x24}, - [SPECIES_CLEFABLE - 1] = {0x1c, 0x12, 0x30, 0x1d, 0x21}, - [SPECIES_VULPIX - 1] = {0x10, 0x16, 0x30, 0x0e, 0x25}, - [SPECIES_NINETALES - 1] = {0x28, 0x10, 0x28, 0x27, 0x1e}, - [SPECIES_JIGGLYPUFF - 1] = {0x1d, 0x15, 0x30, 0x1e, 0x25}, - [SPECIES_WIGGLYTUFF - 1] = {0x1a, 0x12, 0x30, 0x1c, 0x22}, - [SPECIES_ZUBAT - 1] = {0x14, 0x1d, 0x08, 0x14, 0x29}, - [SPECIES_GOLBAT - 1] = {0x23, 0x1a, 0x00, 0x21, 0x2e}, - [SPECIES_ODDISH - 1] = {0x1d, 0x20, 0x28, 0x1d, 0x2b}, - [SPECIES_GLOOM - 1] = {0x1c, 0x18, 0x28, 0x1c, 0x27}, - [SPECIES_VILEPLUME - 1] = {0x1c, 0x1e, 0x28, 0x1d, 0x2a}, - [SPECIES_PARAS - 1] = {0x1d, 0x1a, 0x30, 0x1c, 0x27}, - [SPECIES_PARASECT - 1] = {0x1e, 0x1c, 0x28, 0x20, 0x2e}, - [SPECIES_VENONAT - 1] = {0x1b, 0x16, 0x10, 0x1a, 0x29}, - [SPECIES_VENOMOTH - 1] = {0x12, 0x19, 0x08, 0x16, 0x27}, - [SPECIES_DIGLETT - 1] = {0x1e, 0x16, 0x30, 0x1c, 0x23}, - [SPECIES_DUGTRIO - 1] = {0x1a, 0x11, 0x30, 0x1a, 0x1f}, - [SPECIES_MEOWTH - 1] = {0x1c, 0x16, 0x30, 0x1c, 0x23}, - [SPECIES_PERSIAN - 1] = {0x13, 0x13, 0x30, 0x13, 0x21}, - [SPECIES_PSYDUCK - 1] = {0x1c, 0x13, 0x30, 0x17, 0x29}, - [SPECIES_GOLDUCK - 1] = {0x17, 0x12, 0x28, 0x17, 0x22}, - [SPECIES_MANKEY - 1] = {0x1c, 0x15, 0x30, 0x1b, 0x23}, - [SPECIES_PRIMEAPE - 1] = {0x1e, 0x16, 0x30, 0x1a, 0x27}, - [SPECIES_GROWLITHE - 1] = {0x14, 0x17, 0x30, 0x14, 0x24}, - [SPECIES_ARCANINE - 1] = {0x0f, 0x09, 0x28, 0x0c, 0x19}, - [SPECIES_POLIWAG - 1] = {0x15, 0x14, 0x30, 0x13, 0x1f}, - [SPECIES_POLIWHIRL - 1] = {0x1f, 0x10, 0x30, 0x1e, 0x17}, - [SPECIES_POLIWRATH - 1] = {0x22, 0x0c, 0x30, 0x21, 0x18}, - [SPECIES_ABRA - 1] = {0x1f, 0x13, 0x30, 0x1f, 0x21}, - [SPECIES_KADABRA - 1] = {0x1b, 0x12, 0x30, 0x1c, 0x25}, - [SPECIES_ALAKAZAM - 1] = {0x1c, 0x11, 0x28, 0x1d, 0x26}, - [SPECIES_MACHOP - 1] = {0x1b, 0x11, 0x30, 0x1b, 0x1e}, - [SPECIES_MACHOKE - 1] = {0x1d, 0x11, 0x30, 0x1d, 0x1f}, - [SPECIES_MACHAMP - 1] = {0x1a, 0x0d, 0x28, 0x1c, 0x1b}, - [SPECIES_BELLSPROUT - 1] = {0x15, 0x0e, 0x30, 0x0e, 0x1c}, - [SPECIES_WEEPINBELL - 1] = {0x1a, 0x1c, 0x10, 0x15, 0x32}, - [SPECIES_VICTREEBEL - 1] = {0x1e, 0x0f, 0x30, 0x1c, 0x1b}, - [SPECIES_TENTACOOL - 1] = {0x1a, 0x15, 0x30, 0x1e, 0x26}, - [SPECIES_TENTACRUEL - 1] = {0x1b, 0x10, 0x28, 0x1c, 0x26}, - [SPECIES_GEODUDE - 1] = {0x1c, 0x20, 0x28, 0x1d, 0x2d}, - [SPECIES_GRAVELER - 1] = {0x1d, 0x19, 0x28, 0x1e, 0x26}, - [SPECIES_GOLEM - 1] = {0x19, 0x1b, 0x28, 0x1c, 0x27}, - [SPECIES_PONYTA - 1] = {0x0f, 0x11, 0x30, 0x0e, 0x23}, - [SPECIES_RAPIDASH - 1] = {0x2f, 0x0f, 0x28, 0x2b, 0x1e}, - [SPECIES_SLOWPOKE - 1] = {0x14, 0x1f, 0x28, 0x15, 0x2f}, - [SPECIES_SLOWBRO - 1] = {0x0e, 0x0d, 0x28, 0x0c, 0x1f}, - [SPECIES_MAGNEMITE - 1] = {0x20, 0x1b, 0x10, 0x1f, 0x29}, - [SPECIES_MAGNETON - 1] = {0x1f, 0x14, 0x08, 0x1f, 0x22}, - [SPECIES_FARFETCHD - 1] = {0x16, 0x14, 0x30, 0x16, 0x29}, - [SPECIES_DODUO - 1] = {0x11, 0x16, 0x30, 0x0d, 0x2c}, - [SPECIES_DODRIO - 1] = {0x1d, 0x04, 0x28, 0x0e, 0x07}, - [SPECIES_SEEL - 1] = {0x1b, 0x24, 0x20, 0x17, 0x35}, - [SPECIES_DEWGONG - 1] = {0x12, 0x0a, 0x30, 0x0e, 0x1a}, - [SPECIES_GRIMER - 1] = {0x1f, 0x10, 0x30, 0x1d, 0x25}, - [SPECIES_MUK - 1] = {0x17, 0x0f, 0x30, 0x19, 0x22}, - [SPECIES_SHELLDER - 1] = {0x1a, 0x18, 0x30, 0x17, 0x29}, - [SPECIES_CLOYSTER - 1] = {0x19, 0x1e, 0x28, 0x1d, 0x2c}, - [SPECIES_GASTLY - 1] = {0x1a, 0x1f, 0x08, 0x19, 0x30}, - [SPECIES_HAUNTER - 1] = {0x20, 0x14, 0x08, 0x1d, 0x26}, - [SPECIES_GENGAR - 1] = {0x1a, 0x16, 0x30, 0x19, 0x28}, - [SPECIES_ONIX - 1] = {0x1f, 0x24, 0x20, 0x28, 0x36}, - [SPECIES_DROWZEE - 1] = {0x1a, 0x0e, 0x30, 0x1a, 0x1e}, - [SPECIES_HYPNO - 1] = {0x1c, 0x12, 0x30, 0x19, 0x24}, - [SPECIES_KRABBY - 1] = {0x1d, 0x1d, 0x30, 0x1a, 0x2b}, - [SPECIES_KINGLER - 1] = {0x1e, 0x1f, 0x28, 0x1c, 0x30}, - [SPECIES_VOLTORB - 1] = {0x1c, 0x1b, 0x30, 0x1b, 0x2b}, - [SPECIES_ELECTRODE - 1] = {0x1c, 0x18, 0x30, 0x1d, 0x2e}, - [SPECIES_EXEGGCUTE - 1] = {0x21, 0x17, 0x30, 0x20, 0x24}, - [SPECIES_EXEGGUTOR - 1] = {0x1c, 0x17, 0x28, 0x1b, 0x25}, - [SPECIES_CUBONE - 1] = {0x1b, 0x12, 0x30, 0x1b, 0x22}, - [SPECIES_MAROWAK - 1] = {0x14, 0x0f, 0x30, 0x11, 0x23}, - [SPECIES_HITMONLEE - 1] = {0x2e, 0x11, 0x30, 0x28, 0x22}, - [SPECIES_HITMONCHAN - 1] = {0x22, 0x0e, 0x30, 0x1e, 0x1d}, - [SPECIES_LICKITUNG - 1] = {0x14, 0x11, 0x30, 0x14, 0x24}, - [SPECIES_KOFFING - 1] = {0x1e, 0x14, 0x10, 0x1d, 0x20}, - [SPECIES_WEEZING - 1] = {0x11, 0x0d, 0x10, 0x0f, 0x1c}, - [SPECIES_RHYHORN - 1] = {0x0e, 0x23, 0x20, 0x14, 0x33}, - [SPECIES_RHYDON - 1] = {0x0d, 0x12, 0x28, 0x17, 0x22}, - [SPECIES_CHANSEY - 1] = {0x1a, 0x0d, 0x30, 0x1a, 0x1a}, - [SPECIES_TANGELA - 1] = {0x1c, 0x18, 0x30, 0x1d, 0x29}, - [SPECIES_KANGASKHAN - 1] = {0x1b, 0x06, 0x28, 0x1c, 0x14}, - [SPECIES_HORSEA - 1] = {0x1c, 0x14, 0x30, 0x16, 0x23}, - [SPECIES_SEADRA - 1] = {0x10, 0x17, 0x30, 0x09, 0x2a}, - [SPECIES_GOLDEEN - 1] = {0x16, 0x23, 0x20, 0x15, 0x34}, - [SPECIES_SEAKING - 1] = {0x16, 0x0f, 0x30, 0x10, 0x18}, - [SPECIES_STARYU - 1] = {0x1c, 0x18, 0x30, 0x1a, 0x26}, - [SPECIES_STARMIE - 1] = {0x1d, 0x13, 0x30, 0x1b, 0x20}, - [SPECIES_MR_MIME - 1] = {0x24, 0x11, 0x30, 0x25, 0x1e}, - [SPECIES_SCYTHER - 1] = {0x10, 0x19, 0x28, 0x12, 0x27}, - [SPECIES_JYNX - 1] = {0x1b, 0x0f, 0x30, 0x19, 0x1c}, - [SPECIES_ELECTABUZZ - 1] = {0x14, 0x11, 0x30, 0x17, 0x20}, - [SPECIES_MAGMAR - 1] = {0x10, 0x0e, 0x30, 0x0b, 0x19}, - [SPECIES_PINSIR - 1] = {0x1d, 0x1c, 0x28, 0x20, 0x2b}, - [SPECIES_TAUROS - 1] = {0x11, 0x1d, 0x28, 0x13, 0x2e}, - [SPECIES_MAGIKARP - 1] = {0x16, 0x15, 0x30, 0x13, 0x23}, - [SPECIES_GYARADOS - 1] = {0x0b, 0x18, 0x28, 0x16, 0x29}, - [SPECIES_LAPRAS - 1] = {0x16, 0x08, 0x28, 0x15, 0x16}, - [SPECIES_DITTO - 1] = {0x24, 0x12, 0x30, 0x1f, 0x20}, - [SPECIES_EEVEE - 1] = {0x16, 0x16, 0x30, 0x16, 0x23}, - [SPECIES_VAPOREON - 1] = {0x18, 0x23, 0x28, 0x18, 0x30}, - [SPECIES_JOLTEON - 1] = {0x14, 0x1b, 0x30, 0x16, 0x28}, - [SPECIES_FLAREON - 1] = {0x16, 0x17, 0x30, 0x14, 0x25}, - [SPECIES_PORYGON - 1] = {0x18, 0x12, 0x30, 0x10, 0x23}, - [SPECIES_OMANYTE - 1] = {0x1d, 0x1d, 0x30, 0x1c, 0x2b}, - [SPECIES_OMASTAR - 1] = {0x16, 0x1a, 0x30, 0x19, 0x2d}, - [SPECIES_KABUTO - 1] = {0x1b, 0x16, 0x30, 0x1a, 0x27}, - [SPECIES_KABUTOPS - 1] = {0x15, 0x11, 0x30, 0x15, 0x1f}, - [SPECIES_AERODACTYL - 1] = {0x13, 0x1d, 0x00, 0x14, 0x30}, - [SPECIES_SNORLAX - 1] = {0x35, 0x09, 0x30, 0x2e, 0x14}, - [SPECIES_ARTICUNO - 1] = {0x18, 0x0b, 0x18, 0x17, 0x17}, - [SPECIES_ZAPDOS - 1] = {0x0e, 0x0e, 0x10, 0x04, 0x28}, - [SPECIES_MOLTRES - 1] = {0x0b, 0x2a, 0x08, 0x0b, 0x38}, - [SPECIES_DRATINI - 1] = {0x0d, 0x12, 0x30, 0x0b, 0x21}, - [SPECIES_DRAGONAIR - 1] = {0x18, 0x0e, 0x30, 0x13, 0x1c}, - [SPECIES_DRAGONITE - 1] = {0x1b, 0x07, 0x18, 0x19, 0x17}, - [SPECIES_MEWTWO - 1] = {0x2b, 0x09, 0x28, 0x2c, 0x18}, - [SPECIES_MEW - 1] = {0x19, 0x14, 0x10, 0x1f, 0x21}, - [SPECIES_CHIKORITA - 1] = {0x1b, 0x17, 0x30, 0x1b, 0x24}, - [SPECIES_BAYLEEF - 1] = {0x1d, 0x10, 0x30, 0x20, 0x1d}, - [SPECIES_MEGANIUM - 1] = {0x05, 0x0d, 0x28, 0x0d, 0x1b}, - [SPECIES_CYNDAQUIL - 1] = {0x11, 0x1b, 0x30, 0x14, 0x27}, - [SPECIES_QUILAVA - 1] = {0x25, 0x18, 0x30, 0x27, 0x26}, - [SPECIES_TYPHLOSION - 1] = {0x09, 0x10, 0x28, 0x10, 0x1c}, - [SPECIES_TOTODILE - 1] = {0x16, 0x10, 0x30, 0x19, 0x20}, - [SPECIES_CROCONAW - 1] = {0x16, 0x10, 0x30, 0x18, 0x21}, - [SPECIES_FERALIGATR - 1] = {0x0e, 0x0a, 0x28, 0x08, 0x1a}, - [SPECIES_SENTRET - 1] = {0x1e, 0x0a, 0x30, 0x1d, 0x15}, - [SPECIES_FURRET - 1] = {0x21, 0x0e, 0x30, 0x21, 0x19}, - [SPECIES_HOOTHOOT - 1] = {0x1d, 0x15, 0x30, 0x1c, 0x24}, - [SPECIES_NOCTOWL - 1] = {0x19, 0x0e, 0x30, 0x18, 0x1c}, - [SPECIES_LEDYBA - 1] = {0x1b, 0x15, 0x30, 0x1c, 0x24}, - [SPECIES_LEDIAN - 1] = {0x18, 0x12, 0x10, 0x1c, 0x21}, - [SPECIES_SPINARAK - 1] = {0x20, 0x20, 0x28, 0x20, 0x2d}, - [SPECIES_ARIADOS - 1] = {0x17, 0x23, 0x28, 0x15, 0x30}, - [SPECIES_CROBAT - 1] = {0x22, 0x1e, 0x08, 0x23, 0x2b}, - [SPECIES_CHINCHOU - 1] = {0x1f, 0x1d, 0x30, 0x1f, 0x29}, - [SPECIES_LANTURN - 1] = {0x10, 0x23, 0x28, 0x19, 0x33}, - [SPECIES_PICHU - 1] = {0x1e, 0x17, 0x30, 0x1e, 0x24}, - [SPECIES_CLEFFA - 1] = {0x1c, 0x18, 0x30, 0x1e, 0x26}, - [SPECIES_IGGLYBUFF - 1] = {0x1f, 0x19, 0x30, 0x1f, 0x24}, - [SPECIES_TOGEPI - 1] = {0x21, 0x15, 0x30, 0x1f, 0x20}, - [SPECIES_TOGETIC - 1] = {0x1b, 0x10, 0x30, 0x1c, 0x1c}, - [SPECIES_NATU - 1] = {0x1c, 0x17, 0x30, 0x15, 0x21}, - [SPECIES_XATU - 1] = {0x1b, 0x08, 0x30, 0x19, 0x14}, - [SPECIES_MAREEP - 1] = {0x16, 0x15, 0x30, 0x15, 0x24}, - [SPECIES_FLAAFFY - 1] = {0x19, 0x12, 0x30, 0x18, 0x21}, - [SPECIES_AMPHAROS - 1] = {0x0f, 0x0a, 0x30, 0x10, 0x1b}, - [SPECIES_BELLOSSOM - 1] = {0x1f, 0x13, 0x30, 0x1f, 0x20}, - [SPECIES_MARILL - 1] = {0x1d, 0x15, 0x30, 0x1d, 0x22}, - [SPECIES_AZUMARILL - 1] = {0x1a, 0x12, 0x30, 0x17, 0x1f}, - [SPECIES_SUDOWOODO - 1] = {0x20, 0x10, 0x30, 0x20, 0x1f}, - [SPECIES_POLITOED - 1] = {0x1d, 0x0f, 0x30, 0x1e, 0x20}, - [SPECIES_HOPPIP - 1] = {0x23, 0x25, 0x08, 0x25, 0x33}, - [SPECIES_SKIPLOOM - 1] = {0x1e, 0x18, 0x08, 0x1c, 0x27}, - [SPECIES_JUMPLUFF - 1] = {0x1d, 0x21, 0x08, 0x20, 0x2f}, - [SPECIES_AIPOM - 1] = {0x1e, 0x29, 0x18, 0x1e, 0x35}, - [SPECIES_SUNKERN - 1] = {0x1f, 0x20, 0x08, 0x24, 0x2e}, - [SPECIES_SUNFLORA - 1] = {0x1c, 0x0c, 0x30, 0x1b, 0x19}, - [SPECIES_YANMA - 1] = {0x1b, 0x28, 0x08, 0x16, 0x35}, - [SPECIES_WOOPER - 1] = {0x1d, 0x13, 0x30, 0x1f, 0x21}, - [SPECIES_QUAGSIRE - 1] = {0x15, 0x09, 0x30, 0x12, 0x18}, - [SPECIES_ESPEON - 1] = {0x11, 0x1b, 0x30, 0x11, 0x29}, - [SPECIES_UMBREON - 1] = {0x23, 0x15, 0x30, 0x23, 0x22}, - [SPECIES_MURKROW - 1] = {0x24, 0x13, 0x30, 0x20, 0x22}, - [SPECIES_SLOWKING - 1] = {0x1e, 0x13, 0x28, 0x1d, 0x25}, - [SPECIES_MISDREAVUS - 1] = {0x28, 0x21, 0x08, 0x26, 0x2e}, - [SPECIES_UNOWN - 1] = {0x20, 0x17, 0x08, 0x1f, 0x21}, - [SPECIES_WOBBUFFET - 1] = {0x1d, 0x09, 0x30, 0x1d, 0x1a}, - [SPECIES_GIRAFARIG - 1] = {0x0b, 0x0d, 0x28, 0x11, 0x1d}, - [SPECIES_PINECO - 1] = {0x1d, 0x12, 0x10, 0x19, 0x25}, - [SPECIES_FORRETRESS - 1] = {0x19, 0x17, 0x08, 0x1e, 0x26}, - [SPECIES_DUNSPARCE - 1] = {0x10, 0x1b, 0x30, 0x0c, 0x2d}, - [SPECIES_GLIGAR - 1] = {0x1e, 0x13, 0x08, 0x1d, 0x23}, - [SPECIES_STEELIX - 1] = {0x0c, 0x0d, 0x28, 0x0d, 0x1c}, - [SPECIES_SNUBBULL - 1] = {0x1b, 0x15, 0x30, 0x1a, 0x23}, - [SPECIES_GRANBULL - 1] = {0x1c, 0x09, 0x30, 0x19, 0x18}, - [SPECIES_QWILFISH - 1] = {0x1f, 0x26, 0x20, 0x1d, 0x33}, - [SPECIES_SCIZOR - 1] = {0x15, 0x0f, 0x10, 0x1a, 0x1a}, - [SPECIES_SHUCKLE - 1] = {0x25, 0x0a, 0x30, 0x24, 0x18}, - [SPECIES_HERACROSS - 1] = {0x18, 0x19, 0x28, 0x1a, 0x26}, - [SPECIES_SNEASEL - 1] = {0x1c, 0x13, 0x30, 0x1d, 0x24}, - [SPECIES_TEDDIURSA - 1] = {0x1e, 0x12, 0x30, 0x1b, 0x23}, - [SPECIES_URSARING - 1] = {0x1e, 0x04, 0x28, 0x1d, 0x14}, - [SPECIES_SLUGMA - 1] = {0x20, 0x18, 0x30, 0x20, 0x28}, - [SPECIES_MAGCARGO - 1] = {0x16, 0x11, 0x30, 0x17, 0x23}, - [SPECIES_SWINUB - 1] = {0x1c, 0x18, 0x30, 0x1b, 0x25}, - [SPECIES_PILOSWINE - 1] = {0x18, 0x23, 0x20, 0x18, 0x36}, - [SPECIES_CORSOLA - 1] = {0x19, 0x1d, 0x28, 0x19, 0x2b}, - [SPECIES_REMORAID - 1] = {0x15, 0x1f, 0x28, 0x13, 0x2b}, - [SPECIES_OCTILLERY - 1] = {0x1c, 0x11, 0x30, 0x1a, 0x20}, - [SPECIES_DELIBIRD - 1] = {0x1d, 0x11, 0x30, 0x1b, 0x1f}, - [SPECIES_MANTINE - 1] = {0x16, 0x1e, 0x28, 0x1f, 0x27}, - [SPECIES_SKARMORY - 1] = {0x1e, 0x00, 0x28, 0x13, 0x07}, - [SPECIES_HOUNDOUR - 1] = {0x25, 0x11, 0x30, 0x25, 0x1f}, - [SPECIES_HOUNDOOM - 1] = {0x0d, 0x13, 0x30, 0x0d, 0x24}, - [SPECIES_KINGDRA - 1] = {0x0e, 0x13, 0x28, 0x0a, 0x2c}, - [SPECIES_PHANPY - 1] = {0x1b, 0x11, 0x30, 0x19, 0x24}, - [SPECIES_DONPHAN - 1] = {0x11, 0x15, 0x30, 0x19, 0x2c}, - [SPECIES_PORYGON2 - 1] = {0x18, 0x11, 0x30, 0x11, 0x20}, - [SPECIES_STANTLER - 1] = {0x15, 0x15, 0x28, 0x17, 0x28}, - [SPECIES_SMEARGLE - 1] = {0x18, 0x10, 0x30, 0x1b, 0x25}, - [SPECIES_TYROGUE - 1] = {0x1e, 0x12, 0x30, 0x1f, 0x1f}, - [SPECIES_HITMONTOP - 1] = {0x1a, 0x39, 0x10, 0x1a, 0x2b}, - [SPECIES_SMOOCHUM - 1] = {0x20, 0x18, 0x30, 0x21, 0x26}, - [SPECIES_ELEKID - 1] = {0x1d, 0x14, 0x30, 0x1d, 0x23}, - [SPECIES_MAGBY - 1] = {0x1c, 0x15, 0x30, 0x1a, 0x24}, - [SPECIES_MILTANK - 1] = {0x18, 0x0e, 0x30, 0x18, 0x1e}, - [SPECIES_BLISSEY - 1] = {0x1d, 0x09, 0x30, 0x1d, 0x19}, - [SPECIES_RAIKOU - 1] = {0x29, 0x0c, 0x28, 0x27, 0x1e}, - [SPECIES_ENTEI - 1] = {0x08, 0x09, 0x28, 0x0b, 0x18}, - [SPECIES_SUICUNE - 1] = {0x23, 0x1d, 0x28, 0x26, 0x2c}, - [SPECIES_LARVITAR - 1] = {0x1c, 0x18, 0x30, 0x1a, 0x24}, - [SPECIES_PUPITAR - 1] = {0x1b, 0x19, 0x30, 0x1b, 0x28}, - [SPECIES_TYRANITAR - 1] = {0x06, 0x0b, 0x28, 0x0d, 0x19}, - [SPECIES_LUGIA - 1] = {0x08, 0x2a, 0x08, 0x14, 0x34}, - [SPECIES_HO_OH - 1] = {0x0d, 0x25, 0x08, 0x0e, 0x34}, - [SPECIES_CELEBI - 1] = {0x15, 0x21, 0x08, 0x1a, 0x2b}, - [SPECIES_OLD_UNOWN_B - 1] = {0x1f, 0x12, 0x08, 0x1e, 0x1c}, - [SPECIES_OLD_UNOWN_C - 1] = {0x20, 0x17, 0x08, 0x1f, 0x21}, - [SPECIES_OLD_UNOWN_D - 1] = {0x1c, 0x19, 0x08, 0x1b, 0x23}, - [SPECIES_OLD_UNOWN_E - 1] = {0x21, 0x19, 0x08, 0x20, 0x23}, - [SPECIES_OLD_UNOWN_F - 1] = {0x1b, 0x13, 0x08, 0x1a, 0x1d}, - [SPECIES_OLD_UNOWN_G - 1] = {0x20, 0x16, 0x08, 0x1f, 0x21}, - [SPECIES_OLD_UNOWN_H - 1] = {0x20, 0x19, 0x08, 0x1f, 0x23}, - [SPECIES_OLD_UNOWN_I - 1] = {0x20, 0x19, 0x08, 0x1f, 0x23}, - [SPECIES_OLD_UNOWN_J - 1] = {0x20, 0x16, 0x08, 0x1f, 0x20}, - [SPECIES_OLD_UNOWN_K - 1] = {0x1d, 0x1a, 0x08, 0x1c, 0x24}, - [SPECIES_OLD_UNOWN_L - 1] = {0x20, 0x16, 0x08, 0x1f, 0x1f}, - [SPECIES_OLD_UNOWN_M - 1] = {0x20, 0x1c, 0x08, 0x1f, 0x26}, - [SPECIES_OLD_UNOWN_N - 1] = {0x20, 0x1a, 0x08, 0x1f, 0x23}, - [SPECIES_OLD_UNOWN_O - 1] = {0x20, 0x1a, 0x08, 0x1f, 0x23}, - [SPECIES_OLD_UNOWN_P - 1] = {0x20, 0x16, 0x08, 0x1f, 0x20}, - [SPECIES_OLD_UNOWN_Q - 1] = {0x1d, 0x16, 0x08, 0x1c, 0x20}, - [SPECIES_OLD_UNOWN_R - 1] = {0x20, 0x15, 0x08, 0x1f, 0x1f}, - [SPECIES_OLD_UNOWN_S - 1] = {0x20, 0x19, 0x08, 0x1f, 0x23}, - [SPECIES_OLD_UNOWN_T - 1] = {0x20, 0x1e, 0x08, 0x1f, 0x28}, - [SPECIES_OLD_UNOWN_U - 1] = {0x20, 0x17, 0x08, 0x1f, 0x21}, - [SPECIES_OLD_UNOWN_V - 1] = {0x1e, 0x1e, 0x08, 0x1d, 0x28}, - [SPECIES_OLD_UNOWN_W - 1] = {0x20, 0x1d, 0x08, 0x1f, 0x27}, - [SPECIES_OLD_UNOWN_X - 1] = {0x20, 0x19, 0x08, 0x1f, 0x23}, - [SPECIES_OLD_UNOWN_Y - 1] = {0x20, 0x15, 0x08, 0x1f, 0x1f}, - [SPECIES_OLD_UNOWN_Z - 1] = {0x20, 0x19, 0x08, 0x1f, 0x23}, - [SPECIES_TREECKO - 1] = {0x1a, 0x0f, 0x30, 0x19, 0x20}, - [SPECIES_GROVYLE - 1] = {0x0d, 0x05, 0x10, 0x05, 0x13}, - [SPECIES_SCEPTILE - 1] = {0x10, 0x04, 0x28, 0x0c, 0x12}, - [SPECIES_TORCHIC - 1] = {0x17, 0x18, 0x30, 0x15, 0x25}, - [SPECIES_COMBUSKEN - 1] = {0x20, 0x12, 0x28, 0x1e, 0x20}, - [SPECIES_BLAZIKEN - 1] = {0x1a, 0x07, 0x28, 0x1d, 0x13}, - [SPECIES_MUDKIP - 1] = {0x1b, 0x1d, 0x28, 0x19, 0x2c}, - [SPECIES_MARSHTOMP - 1] = {0x1d, 0x11, 0x30, 0x1c, 0x20}, - [SPECIES_SWAMPERT - 1] = {0x1b, 0x11, 0x28, 0x1b, 0x23}, - [SPECIES_POOCHYENA - 1] = {0x14, 0x12, 0x30, 0x0f, 0x20}, - [SPECIES_MIGHTYENA - 1] = {0x09, 0x0d, 0x28, 0x09, 0x1c}, - [SPECIES_ZIGZAGOON - 1] = {0x0b, 0x1a, 0x30, 0x09, 0x2b}, - [SPECIES_LINOONE - 1] = {0x0d, 0x28, 0x18, 0x0b, 0x37}, - [SPECIES_WURMPLE - 1] = {0x21, 0x17, 0x30, 0x1f, 0x26}, - [SPECIES_SILCOON - 1] = {0x13, 0x1c, 0x30, 0x11, 0x2a}, - [SPECIES_BEAUTIFLY - 1] = {0x0f, 0x1b, 0x08, 0x0e, 0x28}, - [SPECIES_CASCOON - 1] = {0x14, 0x1d, 0x30, 0x11, 0x2c}, - [SPECIES_DUSTOX - 1] = {0x14, 0x19, 0x08, 0x16, 0x26}, - [SPECIES_LOTAD - 1] = {0x19, 0x25, 0x28, 0x17, 0x32}, - [SPECIES_LOMBRE - 1] = {0x22, 0x10, 0x30, 0x29, 0x1d}, - [SPECIES_LUDICOLO - 1] = {0x1c, 0x0f, 0x28, 0x1b, 0x24}, - [SPECIES_SEEDOT - 1] = {0x1b, 0x17, 0x30, 0x18, 0x28}, - [SPECIES_NUZLEAF - 1] = {0x20, 0x0d, 0x30, 0x1a, 0x1d}, - [SPECIES_SHIFTRY - 1] = {0x32, 0x11, 0x28, 0x2e, 0x23}, - [SPECIES_NINCADA - 1] = {0x18, 0x1a, 0x30, 0x17, 0x28}, - [SPECIES_NINJASK - 1] = {0x17, 0x21, 0x00, 0x17, 0x2f}, - [SPECIES_SHEDINJA - 1] = {0x16, 0x19, 0x08, 0x18, 0x2a}, - [SPECIES_TAILLOW - 1] = {0x17, 0x10, 0x30, 0x14, 0x1e}, - [SPECIES_SWELLOW - 1] = {0x0c, 0x0a, 0x28, 0x05, 0x16}, - [SPECIES_SHROOMISH - 1] = {0x1f, 0x16, 0x30, 0x1d, 0x23}, - [SPECIES_BRELOOM - 1] = {0x25, 0x0c, 0x30, 0x23, 0x19}, - [SPECIES_SPINDA - 1] = {0x21, 0x16, 0x30, 0x1f, 0x27}, - [SPECIES_WINGULL - 1] = {0x1a, 0x16, 0x10, 0x15, 0x26}, - [SPECIES_PELIPPER - 1] = {0x1d, 0x0a, 0x10, 0x09, 0x1b}, - [SPECIES_SURSKIT - 1] = {0x1d, 0x16, 0x30, 0x1c, 0x25}, - [SPECIES_MASQUERAIN - 1] = {0x1a, 0x21, 0x08, 0x14, 0x30}, - [SPECIES_WAILMER - 1] = {0x17, 0x17, 0x30, 0x16, 0x28}, - [SPECIES_WAILORD - 1] = {0x17, 0x03, 0x30, 0x09, 0x13}, - [SPECIES_SKITTY - 1] = {0x24, 0x1a, 0x30, 0x22, 0x2a}, - [SPECIES_DELCATTY - 1] = {0x1e, 0x12, 0x30, 0x1c, 0x21}, - [SPECIES_KECLEON - 1] = {0x19, 0x10, 0x30, 0x13, 0x1e}, - [SPECIES_BALTOY - 1] = {0x1d, 0x15, 0x30, 0x1b, 0x22}, - [SPECIES_CLAYDOL - 1] = {0x1e, 0x0d, 0x28, 0x1d, 0x24}, - [SPECIES_NOSEPASS - 1] = {0x1f, 0x10, 0x30, 0x15, 0x23}, - [SPECIES_TORKOAL - 1] = {0x0e, 0x19, 0x28, 0x0a, 0x27}, - [SPECIES_SABLEYE - 1] = {0x1e, 0x16, 0x30, 0x1d, 0x27}, - [SPECIES_BARBOACH - 1] = {0x17, 0x12, 0x30, 0x15, 0x1e}, - [SPECIES_WHISCASH - 1] = {0x18, 0x20, 0x28, 0x17, 0x31}, - [SPECIES_LUVDISC - 1] = {0x19, 0x0f, 0x30, 0x13, 0x1c}, - [SPECIES_CORPHISH - 1] = {0x1f, 0x14, 0x30, 0x1d, 0x23}, - [SPECIES_CRAWDAUNT - 1] = {0x14, 0x0c, 0x28, 0x18, 0x23}, - [SPECIES_FEEBAS - 1] = {0x18, 0x1e, 0x28, 0x16, 0x2f}, - [SPECIES_MILOTIC - 1] = {0x20, 0x0c, 0x28, 0x1f, 0x1d}, - [SPECIES_CARVANHA - 1] = {0x16, 0x19, 0x30, 0x13, 0x22}, - [SPECIES_SHARPEDO - 1] = {0x19, 0x0c, 0x28, 0x17, 0x27}, - [SPECIES_TRAPINCH - 1] = {0x29, 0x13, 0x30, 0x17, 0x18}, - [SPECIES_VIBRAVA - 1] = {0x10, 0x27, 0x20, 0x0e, 0x34}, - [SPECIES_FLYGON - 1] = {0x22, 0x07, 0x10, 0x21, 0x13}, - [SPECIES_MAKUHITA - 1] = {0x22, 0x13, 0x30, 0x1c, 0x23}, - [SPECIES_HARIYAMA - 1] = {0x24, 0x0f, 0x28, 0x26, 0x1c}, - [SPECIES_ELECTRIKE - 1] = {0x11, 0x18, 0x30, 0x14, 0x27}, - [SPECIES_MANECTRIC - 1] = {0x2f, 0x18, 0x28, 0x2e, 0x29}, - [SPECIES_NUMEL - 1] = {0x10, 0x1a, 0x30, 0x0d, 0x2a}, - [SPECIES_CAMERUPT - 1] = {0x0d, 0x22, 0x28, 0x0e, 0x36}, - [SPECIES_SPHEAL - 1] = {0x1e, 0x0f, 0x30, 0x18, 0x1f}, - [SPECIES_SEALEO - 1] = {0x1c, 0x09, 0x30, 0x1a, 0x18}, - [SPECIES_WALREIN - 1] = {0x19, 0x01, 0x28, 0x10, 0x16}, - [SPECIES_CACNEA - 1] = {0x1f, 0x17, 0x30, 0x1d, 0x29}, - [SPECIES_CACTURNE - 1] = {0x1d, 0x0e, 0x28, 0x1d, 0x1b}, - [SPECIES_SNORUNT - 1] = {0x1e, 0x16, 0x30, 0x1e, 0x26}, - [SPECIES_GLALIE - 1] = {0x1a, 0x1c, 0x08, 0x1a, 0x31}, - [SPECIES_LUNATONE - 1] = {0x1c, 0x16, 0x08, 0x19, 0x2c}, - [SPECIES_SOLROCK - 1] = {0x18, 0x18, 0x10, 0x17, 0x31}, - [SPECIES_AZURILL - 1] = {0x1b, 0x10, 0x30, 0x18, 0x1f}, - [SPECIES_SPOINK - 1] = {0x21, 0x14, 0x30, 0x1b, 0x28}, - [SPECIES_GRUMPIG - 1] = {0x14, 0x10, 0x30, 0x15, 0x20}, - [SPECIES_PLUSLE - 1] = {0x1c, 0x16, 0x08, 0x1d, 0x25}, - [SPECIES_MINUN - 1] = {0x21, 0x16, 0x08, 0x1f, 0x26}, - [SPECIES_MAWILE - 1] = {0x2d, 0x14, 0x30, 0x2f, 0x24}, - [SPECIES_MEDITITE - 1] = {0x1f, 0x17, 0x30, 0x1e, 0x25}, - [SPECIES_MEDICHAM - 1] = {0x21, 0x0f, 0x28, 0x1e, 0x1d}, - [SPECIES_SWABLU - 1] = {0x1b, 0x16, 0x10, 0x17, 0x23}, - [SPECIES_ALTARIA - 1] = {0x1d, 0x0b, 0x10, 0x1a, 0x1a}, - [SPECIES_WYNAUT - 1] = {0x1a, 0x15, 0x30, 0x1b, 0x26}, - [SPECIES_DUSKULL - 1] = {0x10, 0x18, 0x08, 0x14, 0x2e}, - [SPECIES_DUSCLOPS - 1] = {0x1c, 0x0f, 0x30, 0x1a, 0x28}, - [SPECIES_ROSELIA - 1] = {0x1e, 0x11, 0x30, 0x1d, 0x20}, - [SPECIES_SLAKOTH - 1] = {0x19, 0x1e, 0x30, 0x18, 0x2f}, - [SPECIES_VIGOROTH - 1] = {0x10, 0x12, 0x28, 0x14, 0x24}, - [SPECIES_SLAKING - 1] = {0x37, 0x0f, 0x30, 0x29, 0x21}, - [SPECIES_GULPIN - 1] = {0x1b, 0x18, 0x30, 0x17, 0x26}, - [SPECIES_SWALOT - 1] = {0x1f, 0x06, 0x30, 0x15, 0x13}, - [SPECIES_TROPIUS - 1] = {0x18, 0x0a, 0x28, 0x20, 0x18}, - [SPECIES_WHISMUR - 1] = {0x1f, 0x19, 0x30, 0x1d, 0x29}, - [SPECIES_LOUDRED - 1] = {0x1c, 0x12, 0x28, 0x22, 0x27}, - [SPECIES_EXPLOUD - 1] = {0x10, 0x10, 0x28, 0x1a, 0x2a}, - [SPECIES_CLAMPERL - 1] = {0x20, 0x1a, 0x30, 0x1e, 0x26}, - [SPECIES_HUNTAIL - 1] = {0x13, 0x1e, 0x28, 0x15, 0x33}, - [SPECIES_GOREBYSS - 1] = {0x0d, 0x1f, 0x28, 0x03, 0x32}, - [SPECIES_ABSOL - 1] = {0x2a, 0x11, 0x28, 0x2a, 0x22}, - [SPECIES_SHUPPET - 1] = {0x16, 0x19, 0x08, 0x17, 0x27}, - [SPECIES_BANETTE - 1] = {0x1c, 0x14, 0x08, 0x1b, 0x23}, - [SPECIES_SEVIPER - 1] = {0x0e, 0x0d, 0x30, 0x0b, 0x1e}, - [SPECIES_ZANGOOSE - 1] = {0x18, 0x0c, 0x28, 0x15, 0x1a}, - [SPECIES_RELICANTH - 1] = {0x0c, 0x1f, 0x30, 0x09, 0x2d}, - [SPECIES_ARON - 1] = {0x18, 0x1c, 0x30, 0x1a, 0x2c}, - [SPECIES_LAIRON - 1] = {0x0b, 0x21, 0x30, 0x12, 0x2f}, - [SPECIES_AGGRON - 1] = {0x10, 0x0b, 0x28, 0x16, 0x1b}, - [SPECIES_CASTFORM - 1] = {0x1d, 0x18, 0x08, 0x1b, 0x26}, - [SPECIES_VOLBEAT - 1] = {0x25, 0x15, 0x08, 0x21, 0x25}, - [SPECIES_ILLUMISE - 1] = {0x20, 0x12, 0x08, 0x1f, 0x20}, - [SPECIES_LILEEP - 1] = {0x1e, 0x11, 0x30, 0x1f, 0x1e}, - [SPECIES_CRADILY - 1] = {0x12, 0x16, 0x28, 0x15, 0x28}, - [SPECIES_ANORITH - 1] = {0x1c, 0x1e, 0x30, 0x1b, 0x2b}, - [SPECIES_ARMALDO - 1] = {0x15, 0x05, 0x28, 0x14, 0x13}, - [SPECIES_RALTS - 1] = {0x1f, 0x17, 0x30, 0x20, 0x23}, - [SPECIES_KIRLIA - 1] = {0x1c, 0x12, 0x30, 0x1f, 0x1e}, - [SPECIES_GARDEVOIR - 1] = {0x35, 0x07, 0x28, 0x32, 0x14}, - [SPECIES_BAGON - 1] = {0x17, 0x13, 0x30, 0x16, 0x26}, - [SPECIES_SHELGON - 1] = {0x19, 0x1b, 0x30, 0x19, 0x2c}, - [SPECIES_SALAMENCE - 1] = {0x09, 0x11, 0x30, 0x0a, 0x21}, - [SPECIES_BELDUM - 1] = {0x16, 0x19, 0x08, 0x18, 0x23}, - [SPECIES_METANG - 1] = {0x22, 0x0f, 0x10, 0x1f, 0x21}, - [SPECIES_METAGROSS - 1] = {0x24, 0x1b, 0x28, 0x22, 0x2b}, - [SPECIES_REGIROCK - 1] = {0x16, 0x07, 0x28, 0x14, 0x12}, - [SPECIES_REGICE - 1] = {0x19, 0x0c, 0x28, 0x17, 0x19}, - [SPECIES_REGISTEEL - 1] = {0x19, 0x0d, 0x28, 0x19, 0x19}, - [SPECIES_KYOGRE - 1] = {0x0e, 0x19, 0x28, 0x0b, 0x26}, - [SPECIES_GROUDON - 1] = {0x04, 0x0b, 0x28, 0x0a, 0x19}, - [SPECIES_RAYQUAZA - 1] = {0x0c, 0x0e, 0x10, 0x0e, 0x1f}, - [SPECIES_LATIAS - 1] = {0x1e, 0x0c, 0x10, 0x23, 0x19}, - [SPECIES_LATIOS - 1] = {0x05, 0x0e, 0x10, 0x05, 0x1d}, - [SPECIES_JIRACHI - 1] = {0x1c, 0x15, 0x08, 0x1e, 0x22}, +static const u8 sMonSpriteAnchorCoords[][5] = { + [SPECIES_BULBASAUR - 1] = {0x16, 0x1b, 0x30, 0x16, 0x29}, + [SPECIES_IVYSAUR - 1] = {0x14, 0x1b, 0x30, 0x15, 0x2a}, + [SPECIES_VENUSAUR - 1] = {0x1b, 0x20, 0x20, 0x1b, 0x33}, + [SPECIES_CHARMANDER - 1] = {0x14, 0x0f, 0x38, 0x13, 0x1e}, + [SPECIES_CHARMELEON - 1] = {0x0d, 0x11, 0x30, 0x0f, 0x22}, + [SPECIES_CHARIZARD - 1] = {0x1b, 0x07, 0x28, 0x1a, 0x19}, + [SPECIES_SQUIRTLE - 1] = {0x19, 0x13, 0x30, 0x1a, 0x22}, + [SPECIES_WARTORTLE - 1] = {0x16, 0x13, 0x30, 0x17, 0x21}, + [SPECIES_BLASTOISE - 1] = {0x12, 0x08, 0x28, 0x15, 0x19}, + [SPECIES_CATERPIE - 1] = {0x15, 0x14, 0x30, 0x13, 0x24}, + [SPECIES_METAPOD - 1] = {0x13, 0x1d, 0x30, 0x18, 0x2a}, + [SPECIES_BUTTERFREE - 1] = {0x12, 0x1b, 0x08, 0x12, 0x2a}, + [SPECIES_WEEDLE - 1] = {0x16, 0x1c, 0x30, 0x15, 0x2b}, + [SPECIES_KAKUNA - 1] = {0x19, 0x13, 0x30, 0x1a, 0x24}, + [SPECIES_BEEDRILL - 1] = {0x19, 0x16, 0x08, 0x19, 0x25}, + [SPECIES_PIDGEY - 1] = {0x15, 0x12, 0x30, 0x12, 0x1e}, + [SPECIES_PIDGEOTTO - 1] = {0x24, 0x0e, 0x30, 0x1f, 0x1e}, + [SPECIES_PIDGEOT - 1] = {0x0c, 0x13, 0x08, 0x0a, 0x23}, + [SPECIES_RATTATA - 1] = {0x17, 0x1e, 0x30, 0x18, 0x2d}, + [SPECIES_RATICATE - 1] = {0x12, 0x14, 0x30, 0x10, 0x26}, + [SPECIES_SPEAROW - 1] = {0x15, 0x14, 0x30, 0x15, 0x1f}, + [SPECIES_FEAROW - 1] = {0x0c, 0x27, 0x00, 0x0b, 0x3f}, + [SPECIES_EKANS - 1] = {0x11, 0x0f, 0x30, 0x14, 0x1d}, + [SPECIES_ARBOK - 1] = {0x1b, 0x01, 0x28, 0x1d, 0x10}, + [SPECIES_PIKACHU - 1] = {0x19, 0x13, 0x30, 0x1a, 0x1f}, + [SPECIES_RAICHU - 1] = {0x19, 0x14, 0x28, 0x1c, 0x22}, + [SPECIES_SANDSHREW - 1] = {0x17, 0x16, 0x30, 0x18, 0x25}, + [SPECIES_SANDSLASH - 1] = {0x11, 0x13, 0x28, 0x13, 0x22}, + [SPECIES_NIDORAN_F - 1] = {0x16, 0x15, 0x30, 0x18, 0x21}, + [SPECIES_NIDORINA - 1] = {0x1f, 0x17, 0x30, 0x1e, 0x28}, + [SPECIES_NIDOQUEEN - 1] = {0x10, 0x0b, 0x28, 0x13, 0x1c}, + [SPECIES_NIDORAN_M - 1] = {0x15, 0x22, 0x28, 0x15, 0x31}, + [SPECIES_NIDORINO - 1] = {0x13, 0x1e, 0x28, 0x1b, 0x2d}, + [SPECIES_NIDOKING - 1] = {0x12, 0x15, 0x28, 0x13, 0x27}, + [SPECIES_CLEFAIRY - 1] = {0x19, 0x14, 0x30, 0x1b, 0x24}, + [SPECIES_CLEFABLE - 1] = {0x1c, 0x12, 0x30, 0x1d, 0x21}, + [SPECIES_VULPIX - 1] = {0x10, 0x16, 0x30, 0x0e, 0x25}, + [SPECIES_NINETALES - 1] = {0x28, 0x10, 0x28, 0x27, 0x1e}, + [SPECIES_JIGGLYPUFF - 1] = {0x1d, 0x15, 0x30, 0x1e, 0x25}, + [SPECIES_WIGGLYTUFF - 1] = {0x1a, 0x12, 0x30, 0x1c, 0x22}, + [SPECIES_ZUBAT - 1] = {0x14, 0x1d, 0x08, 0x14, 0x29}, + [SPECIES_GOLBAT - 1] = {0x23, 0x1a, 0x00, 0x21, 0x2e}, + [SPECIES_ODDISH - 1] = {0x1d, 0x20, 0x28, 0x1d, 0x2b}, + [SPECIES_GLOOM - 1] = {0x1c, 0x18, 0x28, 0x1c, 0x27}, + [SPECIES_VILEPLUME - 1] = {0x1c, 0x1e, 0x28, 0x1d, 0x2a}, + [SPECIES_PARAS - 1] = {0x1d, 0x1a, 0x30, 0x1c, 0x27}, + [SPECIES_PARASECT - 1] = {0x1e, 0x1c, 0x28, 0x20, 0x2e}, + [SPECIES_VENONAT - 1] = {0x1b, 0x16, 0x10, 0x1a, 0x29}, + [SPECIES_VENOMOTH - 1] = {0x12, 0x19, 0x08, 0x16, 0x27}, + [SPECIES_DIGLETT - 1] = {0x1e, 0x16, 0x30, 0x1c, 0x23}, + [SPECIES_DUGTRIO - 1] = {0x1a, 0x11, 0x30, 0x1a, 0x1f}, + [SPECIES_MEOWTH - 1] = {0x1c, 0x16, 0x30, 0x1c, 0x23}, + [SPECIES_PERSIAN - 1] = {0x13, 0x13, 0x30, 0x13, 0x21}, + [SPECIES_PSYDUCK - 1] = {0x1c, 0x13, 0x30, 0x17, 0x29}, + [SPECIES_GOLDUCK - 1] = {0x17, 0x12, 0x28, 0x17, 0x22}, + [SPECIES_MANKEY - 1] = {0x1c, 0x15, 0x30, 0x1b, 0x23}, + [SPECIES_PRIMEAPE - 1] = {0x1e, 0x16, 0x30, 0x1a, 0x27}, + [SPECIES_GROWLITHE - 1] = {0x14, 0x17, 0x30, 0x14, 0x24}, + [SPECIES_ARCANINE - 1] = {0x0f, 0x09, 0x28, 0x0c, 0x19}, + [SPECIES_POLIWAG - 1] = {0x15, 0x14, 0x30, 0x13, 0x1f}, + [SPECIES_POLIWHIRL - 1] = {0x1f, 0x10, 0x30, 0x1e, 0x17}, + [SPECIES_POLIWRATH - 1] = {0x22, 0x0c, 0x30, 0x21, 0x18}, + [SPECIES_ABRA - 1] = {0x1f, 0x13, 0x30, 0x1f, 0x21}, + [SPECIES_KADABRA - 1] = {0x1b, 0x12, 0x30, 0x1c, 0x25}, + [SPECIES_ALAKAZAM - 1] = {0x1c, 0x11, 0x28, 0x1d, 0x26}, + [SPECIES_MACHOP - 1] = {0x1b, 0x11, 0x30, 0x1b, 0x1e}, + [SPECIES_MACHOKE - 1] = {0x1d, 0x11, 0x30, 0x1d, 0x1f}, + [SPECIES_MACHAMP - 1] = {0x1a, 0x0d, 0x28, 0x1c, 0x1b}, + [SPECIES_BELLSPROUT - 1] = {0x15, 0x0e, 0x30, 0x0e, 0x1c}, + [SPECIES_WEEPINBELL - 1] = {0x1a, 0x1c, 0x10, 0x15, 0x32}, + [SPECIES_VICTREEBEL - 1] = {0x1e, 0x0f, 0x30, 0x1c, 0x1b}, + [SPECIES_TENTACOOL - 1] = {0x1a, 0x15, 0x30, 0x1e, 0x26}, + [SPECIES_TENTACRUEL - 1] = {0x1b, 0x10, 0x28, 0x1c, 0x26}, + [SPECIES_GEODUDE - 1] = {0x1c, 0x20, 0x28, 0x1d, 0x2d}, + [SPECIES_GRAVELER - 1] = {0x1d, 0x19, 0x28, 0x1e, 0x26}, + [SPECIES_GOLEM - 1] = {0x19, 0x1b, 0x28, 0x1c, 0x27}, + [SPECIES_PONYTA - 1] = {0x0f, 0x11, 0x30, 0x0e, 0x23}, + [SPECIES_RAPIDASH - 1] = {0x2f, 0x0f, 0x28, 0x2b, 0x1e}, + [SPECIES_SLOWPOKE - 1] = {0x14, 0x1f, 0x28, 0x15, 0x2f}, + [SPECIES_SLOWBRO - 1] = {0x0e, 0x0d, 0x28, 0x0c, 0x1f}, + [SPECIES_MAGNEMITE - 1] = {0x20, 0x1b, 0x10, 0x1f, 0x29}, + [SPECIES_MAGNETON - 1] = {0x1f, 0x14, 0x08, 0x1f, 0x22}, + [SPECIES_FARFETCHD - 1] = {0x16, 0x14, 0x30, 0x16, 0x29}, + [SPECIES_DODUO - 1] = {0x11, 0x16, 0x30, 0x0d, 0x2c}, + [SPECIES_DODRIO - 1] = {0x1d, 0x04, 0x28, 0x0e, 0x07}, + [SPECIES_SEEL - 1] = {0x1b, 0x24, 0x20, 0x17, 0x35}, + [SPECIES_DEWGONG - 1] = {0x12, 0x0a, 0x30, 0x0e, 0x1a}, + [SPECIES_GRIMER - 1] = {0x1f, 0x10, 0x30, 0x1d, 0x25}, + [SPECIES_MUK - 1] = {0x17, 0x0f, 0x30, 0x19, 0x22}, + [SPECIES_SHELLDER - 1] = {0x1a, 0x18, 0x30, 0x17, 0x29}, + [SPECIES_CLOYSTER - 1] = {0x19, 0x1e, 0x28, 0x1d, 0x2c}, + [SPECIES_GASTLY - 1] = {0x1a, 0x1f, 0x08, 0x19, 0x30}, + [SPECIES_HAUNTER - 1] = {0x20, 0x14, 0x08, 0x1d, 0x26}, + [SPECIES_GENGAR - 1] = {0x1a, 0x16, 0x30, 0x19, 0x28}, + [SPECIES_ONIX - 1] = {0x1f, 0x24, 0x20, 0x28, 0x36}, + [SPECIES_DROWZEE - 1] = {0x1a, 0x0e, 0x30, 0x1a, 0x1e}, + [SPECIES_HYPNO - 1] = {0x1c, 0x12, 0x30, 0x19, 0x24}, + [SPECIES_KRABBY - 1] = {0x1d, 0x1d, 0x30, 0x1a, 0x2b}, + [SPECIES_KINGLER - 1] = {0x1e, 0x1f, 0x28, 0x1c, 0x30}, + [SPECIES_VOLTORB - 1] = {0x1c, 0x1b, 0x30, 0x1b, 0x2b}, + [SPECIES_ELECTRODE - 1] = {0x1c, 0x18, 0x30, 0x1d, 0x2e}, + [SPECIES_EXEGGCUTE - 1] = {0x21, 0x17, 0x30, 0x20, 0x24}, + [SPECIES_EXEGGUTOR - 1] = {0x1c, 0x17, 0x28, 0x1b, 0x25}, + [SPECIES_CUBONE - 1] = {0x1b, 0x12, 0x30, 0x1b, 0x22}, + [SPECIES_MAROWAK - 1] = {0x14, 0x0f, 0x30, 0x11, 0x23}, + [SPECIES_HITMONLEE - 1] = {0x2e, 0x11, 0x30, 0x28, 0x22}, + [SPECIES_HITMONCHAN - 1] = {0x22, 0x0e, 0x30, 0x1e, 0x1d}, + [SPECIES_LICKITUNG - 1] = {0x14, 0x11, 0x30, 0x14, 0x24}, + [SPECIES_KOFFING - 1] = {0x1e, 0x14, 0x10, 0x1d, 0x20}, + [SPECIES_WEEZING - 1] = {0x11, 0x0d, 0x10, 0x0f, 0x1c}, + [SPECIES_RHYHORN - 1] = {0x0e, 0x23, 0x20, 0x14, 0x33}, + [SPECIES_RHYDON - 1] = {0x0d, 0x12, 0x28, 0x17, 0x22}, + [SPECIES_CHANSEY - 1] = {0x1a, 0x0d, 0x30, 0x1a, 0x1a}, + [SPECIES_TANGELA - 1] = {0x1c, 0x18, 0x30, 0x1d, 0x29}, + [SPECIES_KANGASKHAN - 1] = {0x1b, 0x06, 0x28, 0x1c, 0x14}, + [SPECIES_HORSEA - 1] = {0x1c, 0x14, 0x30, 0x16, 0x23}, + [SPECIES_SEADRA - 1] = {0x10, 0x17, 0x30, 0x09, 0x2a}, + [SPECIES_GOLDEEN - 1] = {0x16, 0x23, 0x20, 0x15, 0x34}, + [SPECIES_SEAKING - 1] = {0x16, 0x0f, 0x30, 0x10, 0x18}, + [SPECIES_STARYU - 1] = {0x1c, 0x18, 0x30, 0x1a, 0x26}, + [SPECIES_STARMIE - 1] = {0x1d, 0x13, 0x30, 0x1b, 0x20}, + [SPECIES_MR_MIME - 1] = {0x24, 0x11, 0x30, 0x25, 0x1e}, + [SPECIES_SCYTHER - 1] = {0x10, 0x19, 0x28, 0x12, 0x27}, + [SPECIES_JYNX - 1] = {0x1b, 0x0f, 0x30, 0x19, 0x1c}, + [SPECIES_ELECTABUZZ - 1] = {0x14, 0x11, 0x30, 0x17, 0x20}, + [SPECIES_MAGMAR - 1] = {0x10, 0x0e, 0x30, 0x0b, 0x19}, + [SPECIES_PINSIR - 1] = {0x1d, 0x1c, 0x28, 0x20, 0x2b}, + [SPECIES_TAUROS - 1] = {0x11, 0x1d, 0x28, 0x13, 0x2e}, + [SPECIES_MAGIKARP - 1] = {0x16, 0x15, 0x30, 0x13, 0x23}, + [SPECIES_GYARADOS - 1] = {0x0b, 0x18, 0x28, 0x16, 0x29}, + [SPECIES_LAPRAS - 1] = {0x16, 0x08, 0x28, 0x15, 0x16}, + [SPECIES_DITTO - 1] = {0x24, 0x12, 0x30, 0x1f, 0x20}, + [SPECIES_EEVEE - 1] = {0x16, 0x16, 0x30, 0x16, 0x23}, + [SPECIES_VAPOREON - 1] = {0x18, 0x23, 0x28, 0x18, 0x30}, + [SPECIES_JOLTEON - 1] = {0x14, 0x1b, 0x30, 0x16, 0x28}, + [SPECIES_FLAREON - 1] = {0x16, 0x17, 0x30, 0x14, 0x25}, + [SPECIES_PORYGON - 1] = {0x18, 0x12, 0x30, 0x10, 0x23}, + [SPECIES_OMANYTE - 1] = {0x1d, 0x1d, 0x30, 0x1c, 0x2b}, + [SPECIES_OMASTAR - 1] = {0x16, 0x1a, 0x30, 0x19, 0x2d}, + [SPECIES_KABUTO - 1] = {0x1b, 0x16, 0x30, 0x1a, 0x27}, + [SPECIES_KABUTOPS - 1] = {0x15, 0x11, 0x30, 0x15, 0x1f}, + [SPECIES_AERODACTYL - 1] = {0x13, 0x1d, 0x00, 0x14, 0x30}, + [SPECIES_SNORLAX - 1] = {0x35, 0x09, 0x30, 0x2e, 0x14}, + [SPECIES_ARTICUNO - 1] = {0x18, 0x0b, 0x18, 0x17, 0x17}, + [SPECIES_ZAPDOS - 1] = {0x0e, 0x0e, 0x10, 0x04, 0x28}, + [SPECIES_MOLTRES - 1] = {0x0b, 0x2a, 0x08, 0x0b, 0x38}, + [SPECIES_DRATINI - 1] = {0x0d, 0x12, 0x30, 0x0b, 0x21}, + [SPECIES_DRAGONAIR - 1] = {0x18, 0x0e, 0x30, 0x13, 0x1c}, + [SPECIES_DRAGONITE - 1] = {0x1b, 0x07, 0x18, 0x19, 0x17}, + [SPECIES_MEWTWO - 1] = {0x2b, 0x09, 0x28, 0x2c, 0x18}, + [SPECIES_MEW - 1] = {0x19, 0x14, 0x10, 0x1f, 0x21}, + [SPECIES_CHIKORITA - 1] = {0x1b, 0x17, 0x30, 0x1b, 0x24}, + [SPECIES_BAYLEEF - 1] = {0x1d, 0x10, 0x30, 0x20, 0x1d}, + [SPECIES_MEGANIUM - 1] = {0x05, 0x0d, 0x28, 0x0d, 0x1b}, + [SPECIES_CYNDAQUIL - 1] = {0x11, 0x1b, 0x30, 0x14, 0x27}, + [SPECIES_QUILAVA - 1] = {0x25, 0x18, 0x30, 0x27, 0x26}, + [SPECIES_TYPHLOSION - 1] = {0x09, 0x10, 0x28, 0x10, 0x1c}, + [SPECIES_TOTODILE - 1] = {0x16, 0x10, 0x30, 0x19, 0x20}, + [SPECIES_CROCONAW - 1] = {0x16, 0x10, 0x30, 0x18, 0x21}, + [SPECIES_FERALIGATR - 1] = {0x0e, 0x0a, 0x28, 0x08, 0x1a}, + [SPECIES_SENTRET - 1] = {0x1e, 0x0a, 0x30, 0x1d, 0x15}, + [SPECIES_FURRET - 1] = {0x21, 0x0e, 0x30, 0x21, 0x19}, + [SPECIES_HOOTHOOT - 1] = {0x1d, 0x15, 0x30, 0x1c, 0x24}, + [SPECIES_NOCTOWL - 1] = {0x19, 0x0e, 0x30, 0x18, 0x1c}, + [SPECIES_LEDYBA - 1] = {0x1b, 0x15, 0x30, 0x1c, 0x24}, + [SPECIES_LEDIAN - 1] = {0x18, 0x12, 0x10, 0x1c, 0x21}, + [SPECIES_SPINARAK - 1] = {0x20, 0x20, 0x28, 0x20, 0x2d}, + [SPECIES_ARIADOS - 1] = {0x17, 0x23, 0x28, 0x15, 0x30}, + [SPECIES_CROBAT - 1] = {0x22, 0x1e, 0x08, 0x23, 0x2b}, + [SPECIES_CHINCHOU - 1] = {0x1f, 0x1d, 0x30, 0x1f, 0x29}, + [SPECIES_LANTURN - 1] = {0x10, 0x23, 0x28, 0x19, 0x33}, + [SPECIES_PICHU - 1] = {0x1e, 0x17, 0x30, 0x1e, 0x24}, + [SPECIES_CLEFFA - 1] = {0x1c, 0x18, 0x30, 0x1e, 0x26}, + [SPECIES_IGGLYBUFF - 1] = {0x1f, 0x19, 0x30, 0x1f, 0x24}, + [SPECIES_TOGEPI - 1] = {0x21, 0x15, 0x30, 0x1f, 0x20}, + [SPECIES_TOGETIC - 1] = {0x1b, 0x10, 0x30, 0x1c, 0x1c}, + [SPECIES_NATU - 1] = {0x1c, 0x17, 0x30, 0x15, 0x21}, + [SPECIES_XATU - 1] = {0x1b, 0x08, 0x30, 0x19, 0x14}, + [SPECIES_MAREEP - 1] = {0x16, 0x15, 0x30, 0x15, 0x24}, + [SPECIES_FLAAFFY - 1] = {0x19, 0x12, 0x30, 0x18, 0x21}, + [SPECIES_AMPHAROS - 1] = {0x0f, 0x0a, 0x30, 0x10, 0x1b}, + [SPECIES_BELLOSSOM - 1] = {0x1f, 0x13, 0x30, 0x1f, 0x20}, + [SPECIES_MARILL - 1] = {0x1d, 0x15, 0x30, 0x1d, 0x22}, + [SPECIES_AZUMARILL - 1] = {0x1a, 0x12, 0x30, 0x17, 0x1f}, + [SPECIES_SUDOWOODO - 1] = {0x20, 0x10, 0x30, 0x20, 0x1f}, + [SPECIES_POLITOED - 1] = {0x1d, 0x0f, 0x30, 0x1e, 0x20}, + [SPECIES_HOPPIP - 1] = {0x23, 0x25, 0x08, 0x25, 0x33}, + [SPECIES_SKIPLOOM - 1] = {0x1e, 0x18, 0x08, 0x1c, 0x27}, + [SPECIES_JUMPLUFF - 1] = {0x1d, 0x21, 0x08, 0x20, 0x2f}, + [SPECIES_AIPOM - 1] = {0x1e, 0x29, 0x18, 0x1e, 0x35}, + [SPECIES_SUNKERN - 1] = {0x1f, 0x20, 0x08, 0x24, 0x2e}, + [SPECIES_SUNFLORA - 1] = {0x1c, 0x0c, 0x30, 0x1b, 0x19}, + [SPECIES_YANMA - 1] = {0x1b, 0x28, 0x08, 0x16, 0x35}, + [SPECIES_WOOPER - 1] = {0x1d, 0x13, 0x30, 0x1f, 0x21}, + [SPECIES_QUAGSIRE - 1] = {0x15, 0x09, 0x30, 0x12, 0x18}, + [SPECIES_ESPEON - 1] = {0x11, 0x1b, 0x30, 0x11, 0x29}, + [SPECIES_UMBREON - 1] = {0x23, 0x15, 0x30, 0x23, 0x22}, + [SPECIES_MURKROW - 1] = {0x24, 0x13, 0x30, 0x20, 0x22}, + [SPECIES_SLOWKING - 1] = {0x1e, 0x13, 0x28, 0x1d, 0x25}, + [SPECIES_MISDREAVUS - 1] = {0x28, 0x21, 0x08, 0x26, 0x2e}, + [SPECIES_UNOWN - 1] = {0x20, 0x17, 0x08, 0x1f, 0x21}, + [SPECIES_WOBBUFFET - 1] = {0x1d, 0x09, 0x30, 0x1d, 0x1a}, + [SPECIES_GIRAFARIG - 1] = {0x0b, 0x0d, 0x28, 0x11, 0x1d}, + [SPECIES_PINECO - 1] = {0x1d, 0x12, 0x10, 0x19, 0x25}, + [SPECIES_FORRETRESS - 1] = {0x19, 0x17, 0x08, 0x1e, 0x26}, + [SPECIES_DUNSPARCE - 1] = {0x10, 0x1b, 0x30, 0x0c, 0x2d}, + [SPECIES_GLIGAR - 1] = {0x1e, 0x13, 0x08, 0x1d, 0x23}, + [SPECIES_STEELIX - 1] = {0x0c, 0x0d, 0x28, 0x0d, 0x1c}, + [SPECIES_SNUBBULL - 1] = {0x1b, 0x15, 0x30, 0x1a, 0x23}, + [SPECIES_GRANBULL - 1] = {0x1c, 0x09, 0x30, 0x19, 0x18}, + [SPECIES_QWILFISH - 1] = {0x1f, 0x26, 0x20, 0x1d, 0x33}, + [SPECIES_SCIZOR - 1] = {0x15, 0x0f, 0x10, 0x1a, 0x1a}, + [SPECIES_SHUCKLE - 1] = {0x25, 0x0a, 0x30, 0x24, 0x18}, + [SPECIES_HERACROSS - 1] = {0x18, 0x19, 0x28, 0x1a, 0x26}, + [SPECIES_SNEASEL - 1] = {0x1c, 0x13, 0x30, 0x1d, 0x24}, + [SPECIES_TEDDIURSA - 1] = {0x1e, 0x12, 0x30, 0x1b, 0x23}, + [SPECIES_URSARING - 1] = {0x1e, 0x04, 0x28, 0x1d, 0x14}, + [SPECIES_SLUGMA - 1] = {0x20, 0x18, 0x30, 0x20, 0x28}, + [SPECIES_MAGCARGO - 1] = {0x16, 0x11, 0x30, 0x17, 0x23}, + [SPECIES_SWINUB - 1] = {0x1c, 0x18, 0x30, 0x1b, 0x25}, + [SPECIES_PILOSWINE - 1] = {0x18, 0x23, 0x20, 0x18, 0x36}, + [SPECIES_CORSOLA - 1] = {0x19, 0x1d, 0x28, 0x19, 0x2b}, + [SPECIES_REMORAID - 1] = {0x15, 0x1f, 0x28, 0x13, 0x2b}, + [SPECIES_OCTILLERY - 1] = {0x1c, 0x11, 0x30, 0x1a, 0x20}, + [SPECIES_DELIBIRD - 1] = {0x1d, 0x11, 0x30, 0x1b, 0x1f}, + [SPECIES_MANTINE - 1] = {0x16, 0x1e, 0x28, 0x1f, 0x27}, + [SPECIES_SKARMORY - 1] = {0x1e, 0x00, 0x28, 0x13, 0x07}, + [SPECIES_HOUNDOUR - 1] = {0x25, 0x11, 0x30, 0x25, 0x1f}, + [SPECIES_HOUNDOOM - 1] = {0x0d, 0x13, 0x30, 0x0d, 0x24}, + [SPECIES_KINGDRA - 1] = {0x0e, 0x13, 0x28, 0x0a, 0x2c}, + [SPECIES_PHANPY - 1] = {0x1b, 0x11, 0x30, 0x19, 0x24}, + [SPECIES_DONPHAN - 1] = {0x11, 0x15, 0x30, 0x19, 0x2c}, + [SPECIES_PORYGON2 - 1] = {0x18, 0x11, 0x30, 0x11, 0x20}, + [SPECIES_STANTLER - 1] = {0x15, 0x15, 0x28, 0x17, 0x28}, + [SPECIES_SMEARGLE - 1] = {0x18, 0x10, 0x30, 0x1b, 0x25}, + [SPECIES_TYROGUE - 1] = {0x1e, 0x12, 0x30, 0x1f, 0x1f}, + [SPECIES_HITMONTOP - 1] = {0x1a, 0x39, 0x10, 0x1a, 0x2b}, + [SPECIES_SMOOCHUM - 1] = {0x20, 0x18, 0x30, 0x21, 0x26}, + [SPECIES_ELEKID - 1] = {0x1d, 0x14, 0x30, 0x1d, 0x23}, + [SPECIES_MAGBY - 1] = {0x1c, 0x15, 0x30, 0x1a, 0x24}, + [SPECIES_MILTANK - 1] = {0x18, 0x0e, 0x30, 0x18, 0x1e}, + [SPECIES_BLISSEY - 1] = {0x1d, 0x09, 0x30, 0x1d, 0x19}, + [SPECIES_RAIKOU - 1] = {0x29, 0x0c, 0x28, 0x27, 0x1e}, + [SPECIES_ENTEI - 1] = {0x08, 0x09, 0x28, 0x0b, 0x18}, + [SPECIES_SUICUNE - 1] = {0x23, 0x1d, 0x28, 0x26, 0x2c}, + [SPECIES_LARVITAR - 1] = {0x1c, 0x18, 0x30, 0x1a, 0x24}, + [SPECIES_PUPITAR - 1] = {0x1b, 0x19, 0x30, 0x1b, 0x28}, + [SPECIES_TYRANITAR - 1] = {0x06, 0x0b, 0x28, 0x0d, 0x19}, + [SPECIES_LUGIA - 1] = {0x08, 0x2a, 0x08, 0x14, 0x34}, + [SPECIES_HO_OH - 1] = {0x0d, 0x25, 0x08, 0x0e, 0x34}, + [SPECIES_CELEBI - 1] = {0x15, 0x21, 0x08, 0x1a, 0x2b}, + [SPECIES_OLD_UNOWN_B - 1] = {0x1f, 0x12, 0x08, 0x1e, 0x1c}, + [SPECIES_OLD_UNOWN_C - 1] = {0x20, 0x17, 0x08, 0x1f, 0x21}, + [SPECIES_OLD_UNOWN_D - 1] = {0x1c, 0x19, 0x08, 0x1b, 0x23}, + [SPECIES_OLD_UNOWN_E - 1] = {0x21, 0x19, 0x08, 0x20, 0x23}, + [SPECIES_OLD_UNOWN_F - 1] = {0x1b, 0x13, 0x08, 0x1a, 0x1d}, + [SPECIES_OLD_UNOWN_G - 1] = {0x20, 0x16, 0x08, 0x1f, 0x21}, + [SPECIES_OLD_UNOWN_H - 1] = {0x20, 0x19, 0x08, 0x1f, 0x23}, + [SPECIES_OLD_UNOWN_I - 1] = {0x20, 0x19, 0x08, 0x1f, 0x23}, + [SPECIES_OLD_UNOWN_J - 1] = {0x20, 0x16, 0x08, 0x1f, 0x20}, + [SPECIES_OLD_UNOWN_K - 1] = {0x1d, 0x1a, 0x08, 0x1c, 0x24}, + [SPECIES_OLD_UNOWN_L - 1] = {0x20, 0x16, 0x08, 0x1f, 0x1f}, + [SPECIES_OLD_UNOWN_M - 1] = {0x20, 0x1c, 0x08, 0x1f, 0x26}, + [SPECIES_OLD_UNOWN_N - 1] = {0x20, 0x1a, 0x08, 0x1f, 0x23}, + [SPECIES_OLD_UNOWN_O - 1] = {0x20, 0x1a, 0x08, 0x1f, 0x23}, + [SPECIES_OLD_UNOWN_P - 1] = {0x20, 0x16, 0x08, 0x1f, 0x20}, + [SPECIES_OLD_UNOWN_Q - 1] = {0x1d, 0x16, 0x08, 0x1c, 0x20}, + [SPECIES_OLD_UNOWN_R - 1] = {0x20, 0x15, 0x08, 0x1f, 0x1f}, + [SPECIES_OLD_UNOWN_S - 1] = {0x20, 0x19, 0x08, 0x1f, 0x23}, + [SPECIES_OLD_UNOWN_T - 1] = {0x20, 0x1e, 0x08, 0x1f, 0x28}, + [SPECIES_OLD_UNOWN_U - 1] = {0x20, 0x17, 0x08, 0x1f, 0x21}, + [SPECIES_OLD_UNOWN_V - 1] = {0x1e, 0x1e, 0x08, 0x1d, 0x28}, + [SPECIES_OLD_UNOWN_W - 1] = {0x20, 0x1d, 0x08, 0x1f, 0x27}, + [SPECIES_OLD_UNOWN_X - 1] = {0x20, 0x19, 0x08, 0x1f, 0x23}, + [SPECIES_OLD_UNOWN_Y - 1] = {0x20, 0x15, 0x08, 0x1f, 0x1f}, + [SPECIES_OLD_UNOWN_Z - 1] = {0x20, 0x19, 0x08, 0x1f, 0x23}, + [SPECIES_TREECKO - 1] = {0x1a, 0x0f, 0x30, 0x19, 0x20}, + [SPECIES_GROVYLE - 1] = {0x0d, 0x05, 0x10, 0x05, 0x13}, + [SPECIES_SCEPTILE - 1] = {0x10, 0x04, 0x28, 0x0c, 0x12}, + [SPECIES_TORCHIC - 1] = {0x17, 0x18, 0x30, 0x15, 0x25}, + [SPECIES_COMBUSKEN - 1] = {0x20, 0x12, 0x28, 0x1e, 0x20}, + [SPECIES_BLAZIKEN - 1] = {0x1a, 0x07, 0x28, 0x1d, 0x13}, + [SPECIES_MUDKIP - 1] = {0x1b, 0x1d, 0x28, 0x19, 0x2c}, + [SPECIES_MARSHTOMP - 1] = {0x1d, 0x11, 0x30, 0x1c, 0x20}, + [SPECIES_SWAMPERT - 1] = {0x1b, 0x11, 0x28, 0x1b, 0x23}, + [SPECIES_POOCHYENA - 1] = {0x14, 0x12, 0x30, 0x0f, 0x20}, + [SPECIES_MIGHTYENA - 1] = {0x09, 0x0d, 0x28, 0x09, 0x1c}, + [SPECIES_ZIGZAGOON - 1] = {0x0b, 0x1a, 0x30, 0x09, 0x2b}, + [SPECIES_LINOONE - 1] = {0x0d, 0x28, 0x18, 0x0b, 0x37}, + [SPECIES_WURMPLE - 1] = {0x21, 0x17, 0x30, 0x1f, 0x26}, + [SPECIES_SILCOON - 1] = {0x13, 0x1c, 0x30, 0x11, 0x2a}, + [SPECIES_BEAUTIFLY - 1] = {0x0f, 0x1b, 0x08, 0x0e, 0x28}, + [SPECIES_CASCOON - 1] = {0x14, 0x1d, 0x30, 0x11, 0x2c}, + [SPECIES_DUSTOX - 1] = {0x14, 0x19, 0x08, 0x16, 0x26}, + [SPECIES_LOTAD - 1] = {0x19, 0x25, 0x28, 0x17, 0x32}, + [SPECIES_LOMBRE - 1] = {0x22, 0x10, 0x30, 0x29, 0x1d}, + [SPECIES_LUDICOLO - 1] = {0x1c, 0x0f, 0x28, 0x1b, 0x24}, + [SPECIES_SEEDOT - 1] = {0x1b, 0x17, 0x30, 0x18, 0x28}, + [SPECIES_NUZLEAF - 1] = {0x20, 0x0d, 0x30, 0x1a, 0x1d}, + [SPECIES_SHIFTRY - 1] = {0x32, 0x11, 0x28, 0x2e, 0x23}, + [SPECIES_NINCADA - 1] = {0x18, 0x1a, 0x30, 0x17, 0x28}, + [SPECIES_NINJASK - 1] = {0x17, 0x21, 0x00, 0x17, 0x2f}, + [SPECIES_SHEDINJA - 1] = {0x16, 0x19, 0x08, 0x18, 0x2a}, + [SPECIES_TAILLOW - 1] = {0x17, 0x10, 0x30, 0x14, 0x1e}, + [SPECIES_SWELLOW - 1] = {0x0c, 0x0a, 0x28, 0x05, 0x16}, + [SPECIES_SHROOMISH - 1] = {0x1f, 0x16, 0x30, 0x1d, 0x23}, + [SPECIES_BRELOOM - 1] = {0x25, 0x0c, 0x30, 0x23, 0x19}, + [SPECIES_SPINDA - 1] = {0x21, 0x16, 0x30, 0x1f, 0x27}, + [SPECIES_WINGULL - 1] = {0x1a, 0x16, 0x10, 0x15, 0x26}, + [SPECIES_PELIPPER - 1] = {0x1d, 0x0a, 0x10, 0x09, 0x1b}, + [SPECIES_SURSKIT - 1] = {0x1d, 0x16, 0x30, 0x1c, 0x25}, + [SPECIES_MASQUERAIN - 1] = {0x1a, 0x21, 0x08, 0x14, 0x30}, + [SPECIES_WAILMER - 1] = {0x17, 0x17, 0x30, 0x16, 0x28}, + [SPECIES_WAILORD - 1] = {0x17, 0x03, 0x30, 0x09, 0x13}, + [SPECIES_SKITTY - 1] = {0x24, 0x1a, 0x30, 0x22, 0x2a}, + [SPECIES_DELCATTY - 1] = {0x1e, 0x12, 0x30, 0x1c, 0x21}, + [SPECIES_KECLEON - 1] = {0x19, 0x10, 0x30, 0x13, 0x1e}, + [SPECIES_BALTOY - 1] = {0x1d, 0x15, 0x30, 0x1b, 0x22}, + [SPECIES_CLAYDOL - 1] = {0x1e, 0x0d, 0x28, 0x1d, 0x24}, + [SPECIES_NOSEPASS - 1] = {0x1f, 0x10, 0x30, 0x15, 0x23}, + [SPECIES_TORKOAL - 1] = {0x0e, 0x19, 0x28, 0x0a, 0x27}, + [SPECIES_SABLEYE - 1] = {0x1e, 0x16, 0x30, 0x1d, 0x27}, + [SPECIES_BARBOACH - 1] = {0x17, 0x12, 0x30, 0x15, 0x1e}, + [SPECIES_WHISCASH - 1] = {0x18, 0x20, 0x28, 0x17, 0x31}, + [SPECIES_LUVDISC - 1] = {0x19, 0x0f, 0x30, 0x13, 0x1c}, + [SPECIES_CORPHISH - 1] = {0x1f, 0x14, 0x30, 0x1d, 0x23}, + [SPECIES_CRAWDAUNT - 1] = {0x14, 0x0c, 0x28, 0x18, 0x23}, + [SPECIES_FEEBAS - 1] = {0x18, 0x1e, 0x28, 0x16, 0x2f}, + [SPECIES_MILOTIC - 1] = {0x20, 0x0c, 0x28, 0x1f, 0x1d}, + [SPECIES_CARVANHA - 1] = {0x16, 0x19, 0x30, 0x13, 0x22}, + [SPECIES_SHARPEDO - 1] = {0x19, 0x0c, 0x28, 0x17, 0x27}, + [SPECIES_TRAPINCH - 1] = {0x29, 0x13, 0x30, 0x17, 0x18}, + [SPECIES_VIBRAVA - 1] = {0x10, 0x27, 0x20, 0x0e, 0x34}, + [SPECIES_FLYGON - 1] = {0x22, 0x07, 0x10, 0x21, 0x13}, + [SPECIES_MAKUHITA - 1] = {0x22, 0x13, 0x30, 0x1c, 0x23}, + [SPECIES_HARIYAMA - 1] = {0x24, 0x0f, 0x28, 0x26, 0x1c}, + [SPECIES_ELECTRIKE - 1] = {0x11, 0x18, 0x30, 0x14, 0x27}, + [SPECIES_MANECTRIC - 1] = {0x2f, 0x18, 0x28, 0x2e, 0x29}, + [SPECIES_NUMEL - 1] = {0x10, 0x1a, 0x30, 0x0d, 0x2a}, + [SPECIES_CAMERUPT - 1] = {0x0d, 0x22, 0x28, 0x0e, 0x36}, + [SPECIES_SPHEAL - 1] = {0x1e, 0x0f, 0x30, 0x18, 0x1f}, + [SPECIES_SEALEO - 1] = {0x1c, 0x09, 0x30, 0x1a, 0x18}, + [SPECIES_WALREIN - 1] = {0x19, 0x01, 0x28, 0x10, 0x16}, + [SPECIES_CACNEA - 1] = {0x1f, 0x17, 0x30, 0x1d, 0x29}, + [SPECIES_CACTURNE - 1] = {0x1d, 0x0e, 0x28, 0x1d, 0x1b}, + [SPECIES_SNORUNT - 1] = {0x1e, 0x16, 0x30, 0x1e, 0x26}, + [SPECIES_GLALIE - 1] = {0x1a, 0x1c, 0x08, 0x1a, 0x31}, + [SPECIES_LUNATONE - 1] = {0x1c, 0x16, 0x08, 0x19, 0x2c}, + [SPECIES_SOLROCK - 1] = {0x18, 0x18, 0x10, 0x17, 0x31}, + [SPECIES_AZURILL - 1] = {0x1b, 0x10, 0x30, 0x18, 0x1f}, + [SPECIES_SPOINK - 1] = {0x21, 0x14, 0x30, 0x1b, 0x28}, + [SPECIES_GRUMPIG - 1] = {0x14, 0x10, 0x30, 0x15, 0x20}, + [SPECIES_PLUSLE - 1] = {0x1c, 0x16, 0x08, 0x1d, 0x25}, + [SPECIES_MINUN - 1] = {0x21, 0x16, 0x08, 0x1f, 0x26}, + [SPECIES_MAWILE - 1] = {0x2d, 0x14, 0x30, 0x2f, 0x24}, + [SPECIES_MEDITITE - 1] = {0x1f, 0x17, 0x30, 0x1e, 0x25}, + [SPECIES_MEDICHAM - 1] = {0x21, 0x0f, 0x28, 0x1e, 0x1d}, + [SPECIES_SWABLU - 1] = {0x1b, 0x16, 0x10, 0x17, 0x23}, + [SPECIES_ALTARIA - 1] = {0x1d, 0x0b, 0x10, 0x1a, 0x1a}, + [SPECIES_WYNAUT - 1] = {0x1a, 0x15, 0x30, 0x1b, 0x26}, + [SPECIES_DUSKULL - 1] = {0x10, 0x18, 0x08, 0x14, 0x2e}, + [SPECIES_DUSCLOPS - 1] = {0x1c, 0x0f, 0x30, 0x1a, 0x28}, + [SPECIES_ROSELIA - 1] = {0x1e, 0x11, 0x30, 0x1d, 0x20}, + [SPECIES_SLAKOTH - 1] = {0x19, 0x1e, 0x30, 0x18, 0x2f}, + [SPECIES_VIGOROTH - 1] = {0x10, 0x12, 0x28, 0x14, 0x24}, + [SPECIES_SLAKING - 1] = {0x37, 0x0f, 0x30, 0x29, 0x21}, + [SPECIES_GULPIN - 1] = {0x1b, 0x18, 0x30, 0x17, 0x26}, + [SPECIES_SWALOT - 1] = {0x1f, 0x06, 0x30, 0x15, 0x13}, + [SPECIES_TROPIUS - 1] = {0x18, 0x0a, 0x28, 0x20, 0x18}, + [SPECIES_WHISMUR - 1] = {0x1f, 0x19, 0x30, 0x1d, 0x29}, + [SPECIES_LOUDRED - 1] = {0x1c, 0x12, 0x28, 0x22, 0x27}, + [SPECIES_EXPLOUD - 1] = {0x10, 0x10, 0x28, 0x1a, 0x2a}, + [SPECIES_CLAMPERL - 1] = {0x20, 0x1a, 0x30, 0x1e, 0x26}, + [SPECIES_HUNTAIL - 1] = {0x13, 0x1e, 0x28, 0x15, 0x33}, + [SPECIES_GOREBYSS - 1] = {0x0d, 0x1f, 0x28, 0x03, 0x32}, + [SPECIES_ABSOL - 1] = {0x2a, 0x11, 0x28, 0x2a, 0x22}, + [SPECIES_SHUPPET - 1] = {0x16, 0x19, 0x08, 0x17, 0x27}, + [SPECIES_BANETTE - 1] = {0x1c, 0x14, 0x08, 0x1b, 0x23}, + [SPECIES_SEVIPER - 1] = {0x0e, 0x0d, 0x30, 0x0b, 0x1e}, + [SPECIES_ZANGOOSE - 1] = {0x18, 0x0c, 0x28, 0x15, 0x1a}, + [SPECIES_RELICANTH - 1] = {0x0c, 0x1f, 0x30, 0x09, 0x2d}, + [SPECIES_ARON - 1] = {0x18, 0x1c, 0x30, 0x1a, 0x2c}, + [SPECIES_LAIRON - 1] = {0x0b, 0x21, 0x30, 0x12, 0x2f}, + [SPECIES_AGGRON - 1] = {0x10, 0x0b, 0x28, 0x16, 0x1b}, + [SPECIES_CASTFORM - 1] = {0x1d, 0x18, 0x08, 0x1b, 0x26}, + [SPECIES_VOLBEAT - 1] = {0x25, 0x15, 0x08, 0x21, 0x25}, + [SPECIES_ILLUMISE - 1] = {0x20, 0x12, 0x08, 0x1f, 0x20}, + [SPECIES_LILEEP - 1] = {0x1e, 0x11, 0x30, 0x1f, 0x1e}, + [SPECIES_CRADILY - 1] = {0x12, 0x16, 0x28, 0x15, 0x28}, + [SPECIES_ANORITH - 1] = {0x1c, 0x1e, 0x30, 0x1b, 0x2b}, + [SPECIES_ARMALDO - 1] = {0x15, 0x05, 0x28, 0x14, 0x13}, + [SPECIES_RALTS - 1] = {0x1f, 0x17, 0x30, 0x20, 0x23}, + [SPECIES_KIRLIA - 1] = {0x1c, 0x12, 0x30, 0x1f, 0x1e}, + [SPECIES_GARDEVOIR - 1] = {0x35, 0x07, 0x28, 0x32, 0x14}, + [SPECIES_BAGON - 1] = {0x17, 0x13, 0x30, 0x16, 0x26}, + [SPECIES_SHELGON - 1] = {0x19, 0x1b, 0x30, 0x19, 0x2c}, + [SPECIES_SALAMENCE - 1] = {0x09, 0x11, 0x30, 0x0a, 0x21}, + [SPECIES_BELDUM - 1] = {0x16, 0x19, 0x08, 0x18, 0x23}, + [SPECIES_METANG - 1] = {0x22, 0x0f, 0x10, 0x1f, 0x21}, + [SPECIES_METAGROSS - 1] = {0x24, 0x1b, 0x28, 0x22, 0x2b}, + [SPECIES_REGIROCK - 1] = {0x16, 0x07, 0x28, 0x14, 0x12}, + [SPECIES_REGICE - 1] = {0x19, 0x0c, 0x28, 0x17, 0x19}, + [SPECIES_REGISTEEL - 1] = {0x19, 0x0d, 0x28, 0x19, 0x19}, + [SPECIES_KYOGRE - 1] = {0x0e, 0x19, 0x28, 0x0b, 0x26}, + [SPECIES_GROUDON - 1] = {0x04, 0x0b, 0x28, 0x0a, 0x19}, + [SPECIES_RAYQUAZA - 1] = {0x0c, 0x0e, 0x10, 0x0e, 0x1f}, + [SPECIES_LATIAS - 1] = {0x1e, 0x0c, 0x10, 0x23, 0x19}, + [SPECIES_LATIOS - 1] = {0x05, 0x0e, 0x10, 0x05, 0x1d}, + [SPECIES_JIRACHI - 1] = {0x1c, 0x15, 0x08, 0x1e, 0x22}, #if defined(FIRERED) - [SPECIES_DEOXYS - 1] = {0x1b, 0x08, 0x28, 0x1c, 0x16}, + [SPECIES_DEOXYS - 1] = {0x1b, 0x08, 0x28, 0x1c, 0x16}, #elif defined(LEAFGREEN) - [SPECIES_DEOXYS - 1] = {0x1a, 0x09, 0x28, 0x1a, 0x17}, + [SPECIES_DEOXYS - 1] = {0x1a, 0x09, 0x28, 0x1a, 0x17}, #endif - [SPECIES_CHIMECHO - 1] = {0x1d, 0x0c, 0x08, 0x1c, 0x1a}, + [SPECIES_CHIMECHO - 1] = {0x1d, 0x0c, 0x08, 0x1c, 0x1a}, [SPECIES_OLD_UNOWN_EMARK - 1] = {0x20, 0x21, 0x08, 0x20, 0x2b}, [SPECIES_OLD_UNOWN_QMARK - 1] = {0x20, 0x23, 0x08, 0x20, 0x2d} }; @@ -635,7 +635,7 @@ static void Task_SmoothBlendLayers(u8 taskId) } } -u8 sub_812EA78(u16 species, u32 personality, u8 a2) +u8 Menu2_GetMonSpriteAnchorCoord(u16 species, u32 personality, u8 a2) { if (species == SPECIES_UNOWN) { @@ -658,13 +658,13 @@ u8 sub_812EA78(u16 species, u32 personality, u8 a2) if (species != SPECIES_NONE && a2 < 5) { species--; - if (gUnknown_845FD54[species][a2] != 0xFF) - return gUnknown_845FD54[species][a2]; + if (sMonSpriteAnchorCoords[species][a2] != 0xFF) + return sMonSpriteAnchorCoords[species][a2]; } return 32; } -s8 sub_812EAE4(u16 species, u32 personality, u8 a2) +s8 Menu2_GetMonSpriteAnchorCoordMinusx20(u16 species, u32 personality, u8 a2) { - return sub_812EA78(species, personality, a2) - 32; + return Menu2_GetMonSpriteAnchorCoord(species, personality, a2) - 32; } diff --git a/src/party_menu.c b/src/party_menu.c index 5d7026807..5ceeb2c3b 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -4309,7 +4309,7 @@ static void sub_8124DE0(void) static void sub_8124E48(void) { if (ItemId_GetPocket(gSpecialVar_ItemId) == POCKET_TM_CASE - && PSA_IsCancelDisabled() == 1) + && PSA_IsCancelDisabled() == TRUE) { GiveMoveToMon(&gPlayerParty[gPartyMenu.slotId], ItemIdToBattleMoveId(gSpecialVar_ItemId)); AdjustFriendship(&gPlayerParty[gPartyMenu.slotId], 4); @@ -4325,7 +4325,7 @@ static void sub_8124E48(void) static void sub_8124EFC(void) { - if (PSA_IsCancelDisabled() == 1) + if (PSA_IsCancelDisabled() == TRUE) { struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; u8 moveIdx = GetMoveSlotToReplace(); diff --git a/src/pokemon_special_anim.c b/src/pokemon_special_anim.c index 5cc13b9c5..f05b93c54 100644 --- a/src/pokemon_special_anim.c +++ b/src/pokemon_special_anim.c @@ -15,14 +15,14 @@ static EWRAM_DATA bool32 sCancelDisabled = FALSE; static EWRAM_DATA u8 sPSATaskId = 0; static EWRAM_DATA struct PokemonSpecialAnim * sPSAWork = NULL; -struct PokemonSpecialAnim * AllocPSA(u8 slotId, u16 itemId, MainCallback callback); +static struct PokemonSpecialAnim * AllocPSA(u8 slotId, u16 itemId, MainCallback callback); static void SetUpUseItemAnim_Normal(struct PokemonSpecialAnim * ptr); static void SetUpUseItemAnim_ForgetMoveAndLearnTMorHM(struct PokemonSpecialAnim * ptr); static void SetUpUseItemAnim_CantEvolve(struct PokemonSpecialAnim * ptr); -static void sub_811C834(u8 taskId); +static void Task_UseItem_Normal(u8 taskId); static void Task_ForgetMove(u8 taskId); -static void sub_811CBE4(u8 taskId); -static void sub_811CD68(u8 taskId); +static void Task_EvoStone_CantEvolve(u8 taskId); +static void Task_UseTM_NoForget(u8 taskId); static void Task_MachineSet(u8 taskId); static void Task_CleanUp(u8 taskId); static u8 GetClosenessFromFriendship(u16 friendship); @@ -58,7 +58,7 @@ void StartUseItemAnim_CantEvolve(u8 slotId, u16 itemId, MainCallback callback) SetUpUseItemAnim_CantEvolve(ptr); } -struct PokemonSpecialAnim * AllocPSA(u8 slotId, u16 itemId, MainCallback callback) +static struct PokemonSpecialAnim * AllocPSA(u8 slotId, u16 itemId, MainCallback callback) { struct PokemonSpecialAnim * ptr; struct Pokemon * pokemon; @@ -125,10 +125,10 @@ static void SetUpUseItemAnim_Normal(struct PokemonSpecialAnim * ptr) case 0: case 1: case 3: - taskId = CreateTask(sub_811C834, 0); + taskId = CreateTask(Task_UseItem_Normal, 0); break; case 4: - taskId = CreateTask(sub_811CD68, 0); + taskId = CreateTask(Task_UseTM_NoForget, 0); break; default: SetMainCallback2(ptr->savedCallback); @@ -152,28 +152,28 @@ static void SetUpUseItemAnim_ForgetMoveAndLearnTMorHM(struct PokemonSpecialAnim static void SetUpUseItemAnim_CantEvolve(struct PokemonSpecialAnim * ptr) { - u8 taskId = CreateTask(sub_811CBE4, 0); + u8 taskId = CreateTask(Task_EvoStone_CantEvolve, 0); SetWordTaskArg(taskId, 0, (uintptr_t)ptr); SetMainCallback2(CB2_PSA); sPSATaskId = taskId; } -static void sub_811C834(u8 taskId) +static void Task_UseItem_Normal(u8 taskId) { struct PokemonSpecialAnim * ptr = (void *)GetWordTaskArg(taskId, 0); if (!ptr->cancelDisabled && JOY_HELD(A_BUTTON | B_BUTTON)) { - sub_811E040(); + PSA_UseItem_CleanUpForCancel(); SetUseItemAnimCallback(taskId, Task_CleanUp); return; } - + switch (ptr->state) { case 0: SetVBlankCallback(NULL); InitPokemonSpecialAnimScene(&ptr->sceneResources, ptr->animType); - sub_811D830(0); + PSA_CreateMonSpriteAtCloseness(0); ptr->state++; break; case 1: @@ -195,31 +195,31 @@ static void sub_811C834(u8 taskId) ptr->state++; break; case 4: - if (!sub_811D9A8()) + if (!PSA_IsZoomTaskActive()) { - ptr->field_009e = 0; + ptr->delayTimer = 0; ptr->state++; } break; case 5: - if (!sub_811D754()) + if (!PSA_LevelUpVerticalSpritesTaskIsRunning()) { ptr->state++; } break; case 6: - PSA_SetUpZoomOutMonTask(ptr->itemId, ptr->closeness, TRUE); + PSA_SetUpItemUseOnMonAnim(ptr->itemId, ptr->closeness, TRUE); ptr->state++; break; case 7: - if (!PSA_IsZoomOutMonTaskRunning()) + if (!PSA_IsItemUseOnMonAnimActive()) { ptr->cancelDisabled = TRUE; if (ptr->closeness == 3) { PlayCry1(ptr->species, 0); } - sub_811D2A8(); + PSA_ShowMessageWindow(); ptr->state++; } break; @@ -238,7 +238,7 @@ static void sub_811C834(u8 taskId) ptr->state++; break; case 11: - if (!sub_811D9A8()) + if (!PSA_IsZoomTaskActive()) { ptr->cancelDisabled = TRUE; ptr->state++; @@ -283,7 +283,7 @@ static void Task_ForgetMove(u8 taskId) case 0: SetVBlankCallback(NULL); InitPokemonSpecialAnimScene(&ptr->sceneResources, ptr->animType); - sub_811D830(3); + PSA_CreateMonSpriteAtCloseness(3); ptr->state++; break; case 1: @@ -297,15 +297,15 @@ static void Task_ForgetMove(u8 taskId) case 2: if (!gPaletteFade.active) { - ptr->field_009e = 0; + ptr->delayTimer = 0; ptr->state++; } break; case 3: - ptr->field_009e++; - if (ptr->field_009e > 30) + ptr->delayTimer++; + if (ptr->delayTimer > 30) { - sub_811D2A8(); + PSA_ShowMessageWindow(); ptr->state++; } break; @@ -316,13 +316,13 @@ static void Task_ForgetMove(u8 taskId) case 5: if (!PSA_IsMessagePrintTaskActive()) { - ptr->field_009e = 0; + ptr->delayTimer = 0; ptr->state++; } break; case 6: - ptr->field_009e++; - if (ptr->field_009e > 30) + ptr->delayTimer++; + if (ptr->delayTimer > 30) { PSA_PrintMessage(PSA_TEXT_FORGET_2_AND); ptr->state++; @@ -331,25 +331,25 @@ static void Task_ForgetMove(u8 taskId) case 7: if (!PSA_IsMessagePrintTaskActive()) { - ptr->field_009e = 0; + ptr->delayTimer = 0; ptr->state++; } break; case 8: - ptr->field_009e++; - if (ptr->field_009e > 30) + ptr->delayTimer++; + if (ptr->delayTimer > 30) { PlaySE(SE_W255); PSA_PrintMessage(PSA_TEXT_FORGET_POOF); - sub_811D4FC(); + PSA_DarkenMonSprite(); ptr->state++; } break; case 9: - r4 = sub_811D530(); + r4 = PSA_RunPoofAnim(); if (!(r4 | PSA_IsMessagePrintTaskActive())) { - sub_811D4D4(); + PSA_AfterPoof_ClearMessageWindow(); ptr->state++; } break; @@ -367,7 +367,7 @@ static void Task_ForgetMove(u8 taskId) case 12: if (!PSA_IsMessagePrintTaskActive()) { - sub_811D2D0(); + PSA_HideMessageWindow(); ptr->state++; } break; @@ -377,7 +377,7 @@ static void Task_ForgetMove(u8 taskId) } } -static void sub_811CBE4(u8 taskId) +static void Task_EvoStone_CantEvolve(u8 taskId) { struct PokemonSpecialAnim * ptr = (void *)GetWordTaskArg(taskId, 0); @@ -392,7 +392,7 @@ static void sub_811CBE4(u8 taskId) case 0: SetVBlankCallback(NULL); InitPokemonSpecialAnimScene(&ptr->sceneResources, ptr->animType); - sub_811D830(0); + PSA_CreateMonSpriteAtCloseness(0); ptr->state++; break; case 1: @@ -414,13 +414,13 @@ static void sub_811CBE4(u8 taskId) ptr->state++; break; case 4: - PSA_SetUpZoomOutMonTask(ptr->itemId, ptr->closeness, FALSE); + PSA_SetUpItemUseOnMonAnim(ptr->itemId, ptr->closeness, FALSE); ptr->state++; break; case 5: - if (!PSA_IsZoomOutMonTaskRunning()) + if (!PSA_IsItemUseOnMonAnimActive()) { - sub_811D2A8(); + PSA_ShowMessageWindow(); ptr->state++; } break; @@ -454,7 +454,7 @@ static void sub_811CBE4(u8 taskId) } } -static void sub_811CD68(u8 taskId) +static void Task_UseTM_NoForget(u8 taskId) { struct PokemonSpecialAnim * ptr = (void *)GetWordTaskArg(taskId, 0); @@ -469,7 +469,7 @@ static void sub_811CD68(u8 taskId) case 0: SetVBlankCallback(NULL); InitPokemonSpecialAnimScene(&ptr->sceneResources, ptr->animType); - sub_811D830(3); + PSA_CreateMonSpriteAtCloseness(3); ptr->state++; break; case 1: @@ -483,13 +483,13 @@ static void sub_811CD68(u8 taskId) case 2: if (!gPaletteFade.active) { - ptr->field_009e = 0; + ptr->delayTimer = 0; ptr->state++; } break; case 3: - ptr->field_009e++; - if (ptr->field_009e > 20) + ptr->delayTimer++; + if (ptr->delayTimer > 20) { SetUseItemAnimCallback(taskId, Task_MachineSet); } @@ -503,7 +503,7 @@ static void Task_MachineSet(u8 taskId) if (!ptr->cancelDisabled && JOY_NEW(B_BUTTON)) { - sub_811D5B0(); + PSA_UseTM_CleanUpForCancel(); SetUseItemAnimCallback(taskId, Task_CleanUp); return; } @@ -511,48 +511,48 @@ static void Task_MachineSet(u8 taskId) switch (ptr->state) { case 0: - sub_811DCF0(ptr->itemId); - ptr->field_009e = 0; + CreateItemIconSpriteAtMaxCloseness(ptr->itemId); + ptr->delayTimer = 0; ptr->state++; break; case 1: - sub_811D2A8(); + PSA_ShowMessageWindow(); PSA_PrintMessage(PSA_TEXT_MACHINE_SET); ptr->state++; break; case 2: if (!PSA_IsMessagePrintTaskActive()) { - sub_811D2D0(); + PSA_HideMessageWindow(); ptr->state++; } break; case 3: - sub_811D6EC(); + PSA_UseTM_SetUpMachineSetWobble(); ptr->state++; break; case 4: - if (!sub_811D6FC()) + if (!PSA_UseTM_RunMachineSetWobble()) { ptr->state++; } break; case 5: - sub_811D5A0(); + PSA_UseTM_SetUpZoomOutAnim(); ptr->state++; break; case 6: - if (!sub_811D5C0()) + if (!PSA_UseTM_RunZoomOutAnim()) { - ptr->field_009e = 0; + ptr->delayTimer = 0; ptr->state++; } break; case 7: - ptr->field_009e++; - if (ptr->field_009e > 30) + ptr->delayTimer++; + if (ptr->delayTimer > 30) { - sub_811D2A8(); + PSA_ShowMessageWindow(); PSA_PrintMessage(PSA_TEXT_LEARNED_MOVE); ptr->state++; } diff --git a/src/pokemon_special_anim_scene.c b/src/pokemon_special_anim_scene.c index 5a0bb8607..2d65c24a7 100644 --- a/src/pokemon_special_anim_scene.c +++ b/src/pokemon_special_anim_scene.c @@ -13,49 +13,49 @@ #include "trig.h" #include "constants/songs.h" -static void sub_811D7D4(u16 animType); -static void sub_811D9BC(u8 taskId); -static void sub_811DA9C(struct Sprite * sprite, u8 closeness); -static bool8 sub_811DAAC(struct Sprite * sprite); -static void sub_811DB14(struct Sprite * sprite, u8 closeness); -static void sub_811DB48(struct Sprite * sprite, u8 closeness); +static void LoadBgGfxByAnimType(u16 animType); +static void Task_ZoomAnim(u8 taskId); +static void SetSpriteWithCloseness(struct Sprite * sprite, u8 closeness); +static bool8 IsZoomSpriteCBActive(struct Sprite * sprite); +static void MonSpriteZoom_UpdateYPos(struct Sprite * sprite, u8 closeness); +static void ItemSpriteZoom_UpdateYPos(struct Sprite * sprite, u8 closeness); static void StartMonWiggleAnim(struct PokemonSpecialAnimScene * scene, u8 frameLen, u8 niter, u8 amplitude); static void StopMonWiggleAnim(struct PokemonSpecialAnimScene * scene); static void SpriteCallback_MonSpriteWiggle(struct Sprite * sprite); static void LoadMonSpriteGraphics(u16 *tilees, u16 *palette); -struct Sprite * PSA_CreateItemIconObject(u16 itemId); +static struct Sprite * PSA_CreateItemIconObject(u16 itemId); static u16 GetBlendColorByItemId(u16 itemId); -static void Task_ZoomOutMon(u8 taskId); +static void Task_ItemUseOnMonAnim(u8 taskId); static void CreateSprites_UseItem_OutwardSpiralDots(u8 taskId, s16 *data, struct Sprite * sprite); -static void sub_811DFC0(struct Sprite * sprite); -static void sub_811E06C(struct PokemonSpecialAnimScene * scene, struct Sprite * sprite, u8 closeness); -static void sub_811E10C(void); -static void sub_811E128(struct Sprite * sprite); -static bool8 sub_811E138(void); -static void sub_811E154(struct Sprite * sprite); -static void sub_811E194(u8 a0); -static void sub_811E204(struct PokemonSpecialAnimScene * scene); -static bool8 sub_811E2F4(void); -static void sub_811E300(struct Sprite * sprite); -static void sub_811E348(struct PokemonSpecialAnimScene * scene); -static void sub_811E388(void); -static void sub_811E3B4(u8 taskId); -static u16 sub_811E4EC(u8 taskId); +static void SpriteCB_OutwardSpiralDots(struct Sprite * sprite); +static void InitItemIconSpriteState(struct PokemonSpecialAnimScene * scene, struct Sprite * sprite, u8 closeness); +static void MachineSetWobbleInit(void); +static void MachineSetWobble_SetCB(struct Sprite * sprite); +static bool8 MachineSetWobbleCBIsRunning(void); +static void SpriteCB_MachineSetWobble(struct Sprite * sprite); +static void StartZoomOutAnimForUseTM(u8 closeness); +static void CreateStarSprites(struct PokemonSpecialAnimScene * scene); +static bool8 AnyStarSpritesActive(void); +static void SpriteCB_Star(struct Sprite * sprite); +static void PSAScene_SeedRandomInTask(struct PokemonSpecialAnimScene * scene); +static void StopMakingOutwardSpiralDots(void); +static void Task_UseItem_OutwardSpiralDots(u8 taskId); +static u16 PSAScene_RandomFromTask(u8 taskId); static void SpriteCallback_UseItem_OutwardSpiralDots(struct Sprite * sprite); -static void sub_811E588(void); -static bool32 sub_811E5A4(void); -static void sub_811E694(u8 taskId); -static void sub_811E710(u8 taskId, s16 *data); -static void sub_811E7B4(struct Sprite * sprite); - -static const u16 gUnknown_845963C[] = INCBIN_U16("graphics/pokemon_special_anim/unk_845963C.gbapal"); -static const u16 gUnknown_845965C[] = INCBIN_U16("graphics/pokemon_special_anim/unk_845965C.gbapal"); -static const u32 gUnknown_845967C[] = INCBIN_U32("graphics/pokemon_special_anim/unk_845967C.4bpp.lz"); -static const u32 gUnknown_845973C[] = INCBIN_U32("graphics/pokemon_special_anim/unk_845973C.bin.lz"); -static const u16 gUnknown_8459868[] = INCBIN_U16("graphics/pokemon_special_anim/unk_8459868.gbapal"); -static const u32 gUnknown_8459888[] = INCBIN_U32("graphics/pokemon_special_anim/unk_8459888.4bpp.lz"); -static const u16 gUnknown_84598A4[] = INCBIN_U16("graphics/pokemon_special_anim/unk_84598A4.gbapal"); -static const u32 gUnknown_84598C4[] = INCBIN_U32("graphics/pokemon_special_anim/unk_84598C4.4bpp.lz"); +static void LoadOutwardSpiralDotsGfx(void); +static bool32 IsOutwardSpiralDotsTaskRunning(void); +static void Task_LevelUpVerticalSprites(u8 taskId); +static void CreateLevelUpVerticalSprite(u8 taskId, s16 *data); +static void SpriteCB_LevelUpVertical(struct Sprite * sprite); + +static const u16 sBgPals_PSA_Any[] = INCBIN_U16("graphics/pokemon_special_anim/unk_845963C.gbapal"); +static const u16 sBgPals_PSA_Anim4[] = INCBIN_U16("graphics/pokemon_special_anim/unk_845965C.gbapal"); +static const u32 sBg3Tiles_PSA[] = INCBIN_U32("graphics/pokemon_special_anim/unk_845967C.4bpp.lz"); +static const u32 sBg3Map_PSA[] = INCBIN_U32("graphics/pokemon_special_anim/unk_845973C.bin.lz"); +static const u16 sSpritePals_LevelUpVertical[] = INCBIN_U16("graphics/pokemon_special_anim/unk_8459868.gbapal"); +static const u32 sSpriteTiles_LevelUpVertical[] = INCBIN_U32("graphics/pokemon_special_anim/unk_8459888.4bpp.lz"); +static const u16 sSpritePals_Star[] = INCBIN_U16("graphics/pokemon_special_anim/unk_84598A4.gbapal"); +static const u32 sSpriteTiles_Star[] = INCBIN_U32("graphics/pokemon_special_anim/unk_84598C4.4bpp.lz"); static const u16 sSpritePals_UseItem_OutwardSpiralDots[] = INCBIN_U16("graphics/pokemon_special_anim/unk_8459940.gbapal"); static const u32 sSpriteTiles_UseItem_OutwardSpiralDots[] = INCBIN_U32("graphics/pokemon_special_anim/unk_8459960.4bpp.lz"); @@ -108,20 +108,20 @@ static const u16 sAffineScales[] = { 0x200 }; -static const s8 gUnknown_84599B2[][2] = { +static const s8 sStarCoordOffsets[][2] = { {-8, -8}, { 6, -13}, { 8, -8} }; -static const struct CompressedSpriteSheet gUnknown_84599B8 = { - gUnknown_84598C4, +static const struct CompressedSpriteSheet sSpriteSheet_Star = { + sSpriteTiles_Star, 0x80, 2 }; -static const struct SpritePalette gUnknown_84599C0 = { - gUnknown_84598A4, +static const struct SpritePalette sSpritePalette_Star = { + sSpritePals_Star, 2 }; @@ -189,38 +189,38 @@ static const struct SpriteTemplate sSpriteTemplate_MonSprite = { .callback = SpriteCallbackDummy }; -static const union AffineAnimCmd gUnknown_8459A48[] = { +static const union AffineAnimCmd sAffineAnim_ItemZoom_0[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), AFFINEANIMCMD_FRAME(-28, -28, 0, 8), AFFINEANIMCMD_END }; -static const union AffineAnimCmd gUnknown_8459A60[] = { +static const union AffineAnimCmd sAffineAnim_ItemZoom_1[] = { AFFINEANIMCMD_FRAME(0x155, 0x155, 0, 0), AFFINEANIMCMD_FRAME(-37, -37, 0, 8), AFFINEANIMCMD_END }; -static const union AffineAnimCmd gUnknown_8459A78[] = { +static const union AffineAnimCmd sAffineAnim_ItemZoom_2[] = { AFFINEANIMCMD_FRAME(0x1AA, 0x1AA, 0, 0), AFFINEANIMCMD_FRAME(-47, -47, 0, 8), AFFINEANIMCMD_END }; -static const union AffineAnimCmd gUnknown_8459A90[] = { +static const union AffineAnimCmd sAffineAnim_ItemZoom_3[] = { AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0), AFFINEANIMCMD_FRAME(-56, -56, 0, 8), AFFINEANIMCMD_END }; -static const union AffineAnimCmd *const gUnknown_8459AA8[] = { - gUnknown_8459A48, - gUnknown_8459A60, - gUnknown_8459A78, - gUnknown_8459A90 +static const union AffineAnimCmd *const sAffineAnimTable_ItemZoom[] = { + sAffineAnim_ItemZoom_0, + sAffineAnim_ItemZoom_1, + sAffineAnim_ItemZoom_2, + sAffineAnim_ItemZoom_3 }; -static const struct OamData gUnknown_8459AB8 = { +static const struct OamData sOamData_LevelUpVertical = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_BLEND, @@ -240,21 +240,21 @@ static const union AnimCmd gUnknown_8459AC0[] = { ANIMCMD_END }; -static const union AnimCmd *const gUnknown_8459AC8[] = { +static const union AnimCmd *const sAnimTable_LevelUpVertical[] = { gUnknown_8459AC0 }; -static const struct SpriteTemplate gUnknown_8459ACC = { +static const struct SpriteTemplate sSpriteTemplate_LevelUpVertical = { .tileTag = 0, .paletteTag = 0, - .oam = &gUnknown_8459AB8, - .anims = gUnknown_8459AC8, + .oam = &sOamData_LevelUpVertical, + .anims = sAnimTable_LevelUpVertical, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_811E7B4 + .callback = SpriteCB_LevelUpVertical }; -static const struct OamData gUnknown_8459AE4 = { +static const struct OamData sOamData_Star = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, @@ -269,14 +269,14 @@ static const struct OamData gUnknown_8459AE4 = { .paletteNum = 0 }; -static const struct SpriteTemplate gUnknown_8459AEC = { +static const struct SpriteTemplate sSpriteTemplate_Star = { .tileTag = 2, .paletteTag = 2, - .oam = &gUnknown_8459AE4, + .oam = &sOamData_Star, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_811E300 + .callback = SpriteCB_Star }; static const struct OamData sOamData_UseItem_OutwardSpiralDots = { @@ -338,7 +338,7 @@ void InitPokemonSpecialAnimScene(struct PokemonSpecialAnimScene * buffer, u16 an SetBgTilemapBuffer(3, buffer->field_1914); RequestDma3Fill(0, (void *)BG_VRAM, 0x20, TRUE); FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 0, 32, 32); - sub_811D7D4(animType); + LoadBgGfxByAnimType(animType); FillWindowPixelBuffer(0, PIXEL_FILL(0)); TextWindow_SetUserSelectedFrame(0, 0x000, 0xe0); CopyWindowToVram(0, 3); @@ -365,7 +365,7 @@ void PSA_FreeWindowBuffers(void) FreeAllWindowBuffers(); } -void sub_811D2A8(void) +void PSA_ShowMessageWindow(void) { PutWindowTilemap(0); FillWindowPixelBuffer(0, PIXEL_FILL(1)); @@ -373,7 +373,7 @@ void sub_811D2A8(void) CopyWindowToVram(0, 3); } -void sub_811D2D0(void) +void PSA_HideMessageWindow(void) { ClearWindowTilemap(0); ClearStdWindowAndFrameToTransparent(0, FALSE); @@ -445,7 +445,7 @@ void PSA_PrintMessage(u8 messageId) AddTextPrinterParameterized5(0, 2, scene->textBuf, strWidth, 0, textSpeed, NULL, 0, 4); } -void sub_811D4D4(void) +void PSA_AfterPoof_ClearMessageWindow(void) { FillWindowPixelBuffer(0, PIXEL_FILL(1)); CopyWindowToVram(0, 2); @@ -456,22 +456,22 @@ bool8 PSA_IsMessagePrintTaskActive(void) return IsTextPrinterActive(0); } -void sub_811D4FC(void) +void PSA_DarkenMonSprite(void) { struct PokemonSpecialAnimScene * scene = PSA_GetSceneWork(); scene->state = 0; BlendPalettes((0x10000 << IndexOfSpritePaletteTag(0)) | 4, 16, RGB_BLACK); - sub_811E204(scene); + CreateStarSprites(scene); } -bool8 sub_811D530(void) +bool8 PSA_RunPoofAnim(void) { struct PokemonSpecialAnimScene * scene = PSA_GetSceneWork(); switch (scene->state) { case 0: - if (!sub_811E2F4()) + if (!AnyStarSpritesActive()) { BeginNormalPaletteFade((0x10000 << IndexOfSpritePaletteTag(0)) | 4, -1, 16, 0, RGB_BLACK); scene->state++; @@ -485,29 +485,29 @@ bool8 sub_811D530(void) return TRUE; } -void sub_811D5A0(void) +void PSA_UseTM_SetUpZoomOutAnim(void) { struct PokemonSpecialAnimScene * scene = PSA_GetSceneWork(); scene->state = 0; } -void sub_811D5B0(void) +void PSA_UseTM_CleanUpForCancel(void) { - sub_811E388(); + StopMakingOutwardSpiralDots(); ResetPaletteFadeControl(); } -bool8 sub_811D5C0(void) +bool8 PSA_UseTM_RunZoomOutAnim(void) { struct PokemonSpecialAnimScene * scene = PSA_GetSceneWork(); switch (scene->state) { case 0: - sub_811E194(0); + StartZoomOutAnimForUseTM(0); scene->state++; break; case 1: - if (!sub_811D9A8()) + if (!PSA_IsZoomTaskActive()) { scene->field_0004 = 0; scene->state++; @@ -530,7 +530,7 @@ bool8 sub_811D5C0(void) scene->field_0004 = 0; PlaySE(SE_W025); BeginNormalPaletteFade(0x00000001, 2, 0, 12, RGB(8, 13, 31)); - sub_811E348(scene); + PSAScene_SeedRandomInTask(scene); scene->state++; } break; @@ -546,7 +546,7 @@ bool8 sub_811D5C0(void) break; case 6: scene->field_0004++; - if (!sub_811E5A4() && scene->field_0004 > 40) + if (!IsOutwardSpiralDotsTaskRunning() && scene->field_0004 > 40) { scene->field_0004 = 0; scene->state++; @@ -570,74 +570,78 @@ bool8 sub_811D5C0(void) return TRUE; } -void sub_811D6EC(void) +void PSA_UseTM_SetUpMachineSetWobble(void) { struct PokemonSpecialAnimScene * scene = PSA_GetSceneWork(); scene->state = 0; } -bool8 sub_811D6FC(void) +bool8 PSA_UseTM_RunMachineSetWobble(void) { struct PokemonSpecialAnimScene * scene = PSA_GetSceneWork(); switch (scene->state) { case 0: - sub_811E10C(); + MachineSetWobbleInit(); PlaySE(SE_MU_PACHI); scene->state++; break; case 1: - return sub_811E138(); + return MachineSetWobbleCBIsRunning(); } return TRUE; } -static void sub_811D734(void) +// There may once have been plans to put the battle level up +// anim in with using Rare Candy, but they were scrapped +// at a later stage of development + +UNUSED void PSA_CreateLevelUpVerticalSpritesTask(void) { - sub_811E5B8(120, 56, 4, 4, 2, 0); + CreateLevelUpVerticalSpritesTask(120, 56, 4, 4, 2, 0); } -bool8 sub_811D754(void) +bool8 PSA_LevelUpVerticalSpritesTaskIsRunning(void) { - return sub_811E680(); + return LevelUpVerticalSpritesTaskIsRunning(); } -static void sub_811D764(u16 *statsBefore, u16 *statsAfter) +UNUSED void PSA_DrawLevelUpWindowPg1(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); } -static void sub_811D7A0(u16 *currStats) +UNUSED void PSA_DrawLevelUpWindowPg2(u16 *currStats) { DrawLevelUpWindowPg2(1, currStats, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY); CopyWindowToVram(1, 2); } -static bool8 sub_811D7C4(void) +UNUSED bool8 PSA_IsCopyingLevelUpWindowToVram(void) { return IsDma3ManagerBusyWithBgCopy(); } -static void sub_811D7D4(u16 animType) +static void LoadBgGfxByAnimType(u16 animType) { - CopyToBgTilemapBuffer(3, gUnknown_845973C, 0, 0x000); - DecompressAndCopyTileDataToVram(3, gUnknown_845967C, 0, 0x000, 0); + CopyToBgTilemapBuffer(3, sBg3Map_PSA, 0, 0x000); + DecompressAndCopyTileDataToVram(3, sBg3Tiles_PSA, 0, 0x000, 0); if (animType != 4) - LoadPalette(gUnknown_845963C, 0x00, 0x20); + LoadPalette(sBgPals_PSA_Any, 0x00, 0x20); else - LoadPalette(gUnknown_845965C, 0x00, 0x20); + LoadPalette(sBgPals_PSA_Anim4, 0x00, 0x20); } -void sub_811D830(u8 closeness) +void PSA_CreateMonSpriteAtCloseness(u8 closeness) { struct PokemonSpecialAnimScene * scene = PSA_GetSceneWork(); struct Pokemon * pokemon = PSA_GetPokemon(); u16 species = GetMonData(pokemon, MON_DATA_SPECIES); u32 personality = GetMonData(pokemon, MON_DATA_PERSONALITY); - u8 r1 = sub_812EA78(species, personality, 2); + u8 r1 = Menu2_GetMonSpriteAnchorCoord(species, personality, 2); void * r6; void * r9; void * r4; @@ -645,13 +649,13 @@ void sub_811D830(u8 closeness) if (r1 != 0xFF) { - scene->field_0006 = 0x48; - scene->field_0008 = r1 + 0x30; + scene->monSpriteY1 = 0x48; + scene->monSpriteY2 = r1 + 0x30; } else { - scene->field_0006 = 0x48; - scene->field_0008 = 0x60; + scene->monSpriteY1 = 0x48; + scene->monSpriteY2 = 0x60; } r6 = Alloc(0x2000); @@ -662,123 +666,133 @@ void sub_811D830(u8 closeness) HandleLoadSpecialPokePic(&gMonFrontPicTable[species], r6, species, personality); LZ77UnCompWram(GetMonFrontSpritePal(pokemon), r4); LoadMonSpriteGraphics(r6, r4); - spriteId = CreateSprite(&sSpriteTemplate_MonSprite, 120, scene->field_0006, 4); + spriteId = CreateSprite(&sSpriteTemplate_MonSprite, 120, scene->monSpriteY1, 4); if (spriteId != MAX_SPRITES) { scene->monSprite = &gSprites[spriteId]; - sub_811DB14(scene->monSprite, closeness); + MonSpriteZoom_UpdateYPos(scene->monSprite, closeness); } else scene->monSprite = NULL; - scene->field_000a = closeness; + scene->lastCloseness = closeness; } if (r6 != NULL) Free(r6); if (r9 != NULL) Free(r9); if (r4 != NULL) Free(r4); } +#define tState data[0] +#define tCurrCloseness data[1] +#define tFinalCloseness data[2] +#define tDeltaCloseness data[3] +#define tTimer data[4] +#define tDelay data[5] +#define tOff_MonSprite 6 +#define tHasItemSprite data[8] +#define tOff_ItemSprite 9 + void PSA_SetUpZoomAnim(u8 closeness) { struct PokemonSpecialAnimScene * scene = PSA_GetSceneWork(); u8 taskId; - if (closeness != scene->field_000a) + if (closeness != scene->lastCloseness) { - taskId = CreateTask(sub_811D9BC, 4); - SetWordTaskArg(taskId, 6, (uintptr_t)scene->monSprite); - 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; + taskId = CreateTask(Task_ZoomAnim, 4); + SetWordTaskArg(taskId, tOff_MonSprite, (uintptr_t)scene->monSprite); + gTasks[taskId].tCurrCloseness = scene->lastCloseness; + gTasks[taskId].tFinalCloseness = closeness; + gTasks[taskId].tDelay = 6; + if (closeness > scene->lastCloseness) + gTasks[taskId].tDeltaCloseness = 1; else - gTasks[taskId].data[3] = -1; + gTasks[taskId].tDeltaCloseness = -1; } } -bool8 sub_811D9A8(void) +bool8 PSA_IsZoomTaskActive(void) { - return FuncIsActiveTask(sub_811D9BC); + return FuncIsActiveTask(Task_ZoomAnim); } -static void sub_811D9BC(u8 taskId) +static void Task_ZoomAnim(u8 taskId) { s16 *data = gTasks[taskId].data; - struct Sprite * sprite = (void *)GetWordTaskArg(taskId, 6); - switch (data[0]) + struct Sprite * sprite = (void *)GetWordTaskArg(taskId, tOff_MonSprite); + switch (tState) { case 0: - sub_811DA9C(sprite, data[1]); - if (data[8]) - sub_811DA9C((void *)GetWordTaskArg(taskId, 9), data[1]); - data[1] += data[3]; - data[0]++; + SetSpriteWithCloseness(sprite, tCurrCloseness); + if (tHasItemSprite) + SetSpriteWithCloseness((void *)GetWordTaskArg(taskId, tOff_ItemSprite), tCurrCloseness); + tCurrCloseness += tDeltaCloseness; + tState++; break; case 1: - if (!sub_811DAAC(sprite)) + if (!IsZoomSpriteCBActive(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]) + MonSpriteZoom_UpdateYPos(sprite, tCurrCloseness); + if (tHasItemSprite) + ItemSpriteZoom_UpdateYPos((void *)GetWordTaskArg(taskId, tOff_ItemSprite), tCurrCloseness); + if (tCurrCloseness == tFinalCloseness) { - PSA_GetSceneWork()->field_000a = data[2]; + PSA_GetSceneWork()->lastCloseness = tFinalCloseness; DestroyTask(taskId); } else { - data[4] = 0; - data[0] = 2; + tTimer = 0; + tState = 2; } } break; case 2: - data[4]++; - if (data[4] > data[5]) - data[0] = 0; + tTimer++; + if (tTimer > tDelay) + tState = 0; break; } } -static void sub_811DA9C(struct Sprite * sprite, u8 closeness) +static void SetSpriteWithCloseness(struct Sprite * sprite, u8 closeness) { sprite->data[0] = 0; sprite->data[1] = 0; sprite->data[2] = closeness; } -static bool8 sub_811DAAC(struct Sprite * sprite) +static bool8 IsZoomSpriteCBActive(struct Sprite * sprite) { return sprite->callback != SpriteCallbackDummy; } -static s16 sub_811DAC0(s16 pos, u8 closeness) +static s16 GetSpriteOffsetByScale(s16 pos, u8 closeness) { return (pos * sAffineScales[closeness]) >> 8; } // FIXME: better math -static u16 sub_811DADC(u16 pos) +static u16 GetYPosByScale(u16 pos) { struct PokemonSpecialAnimScene * scene = PSA_GetSceneWork(); - s32 v = ((((((scene->field_0008 - scene->field_0006) << 16) >> 8) / 256 * (pos - 256)) << 8) >> 16); - return v += scene->field_0006; + s32 v = ((((((scene->monSpriteY2 - scene->monSpriteY1) << 16) >> 8) / 256 * (pos - 256)) << 8) >> 16); + return v += scene->monSpriteY1; } -static void sub_811DB14(struct Sprite * sprite, u8 closeness) +static void MonSpriteZoom_UpdateYPos(struct Sprite * sprite, u8 closeness) { if (closeness > 3) closeness = 3; PSA_GetSceneWork(); // return value not used StartSpriteAffineAnim(sprite, closeness); - sprite->pos1.y = sub_811DADC(sAffineScales[closeness]); + sprite->pos1.y = GetYPosByScale(sAffineScales[closeness]); } -static void sub_811DB48(struct Sprite * sprite, u8 closeness) +static void ItemSpriteZoom_UpdateYPos(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); + MonSpriteZoom_UpdateYPos(sprite, closeness); + sprite->pos2.x = GetSpriteOffsetByScale(sprite->data[6] - 32, closeness); + sprite->pos2.y = GetSpriteOffsetByScale(sprite->data[7] - 32, closeness); } static void StartMonWiggleAnim(struct PokemonSpecialAnimScene * scene, u8 frameLen, u8 niter, u8 amplitude) @@ -830,22 +844,44 @@ static void LoadMonSpriteGraphics(u16 *tiles, u16 *palette) LoadSpritePalette(&spritePalette); } -void PSA_SetUpZoomOutMonTask(u16 itemId, u8 closeness, bool32 a2) +#undef tOff_ItemSprite +#undef tHasItemSprite +#undef tOff_MonSprite +#undef tDelay +#undef tTimer +#undef tDeltaCloseness +#undef tFinalCloseness +#undef tCurrCloseness +#undef tState + +#define tState data[0] +#define tTimer data[1] +#define tCloseness data[2] +#define tYpos data[3] +#define tOff_ItemSprite 4 +#define tData6 data[6] +#define tData7 data[7] +#define tActiveSprCt data[8] +#define tBlendColor data[9] +#define tTimerReset data[10] +#define tSuppressDots data[11] + +void PSA_SetUpItemUseOnMonAnim(u16 itemId, u8 closeness, bool32 a2) { struct PokemonSpecialAnimScene * scene = PSA_GetSceneWork(); u8 taskId; scene->itemIconSprite = PSA_CreateItemIconObject(itemId); if (scene->itemIconSprite != NULL) { - sub_811E06C(scene, scene->itemIconSprite, closeness); + InitItemIconSpriteState(scene, scene->itemIconSprite, closeness); StartSpriteAffineAnim(scene->itemIconSprite, closeness); scene->itemIconSprite->invisible = TRUE; - taskId = CreateTask(Task_ZoomOutMon, 2); - SetWordTaskArg(taskId, 4, (uintptr_t)scene->itemIconSprite); - gTasks[taskId].data[2] = closeness; - gTasks[taskId].data[3] = sub_811DADC(sAffineScales[closeness]); - gTasks[taskId].data[6] = a2; - gTasks[taskId].data[9] = GetBlendColorByItemId(itemId); + taskId = CreateTask(Task_ItemUseOnMonAnim, 2); + SetWordTaskArg(taskId, tOff_ItemSprite, (uintptr_t)scene->itemIconSprite); + gTasks[taskId].tCloseness = closeness; + gTasks[taskId].tYpos = GetYPosByScale(sAffineScales[closeness]); + gTasks[taskId].tData6 = a2; + gTasks[taskId].tBlendColor = GetBlendColorByItemId(itemId); } } @@ -854,18 +890,18 @@ static u16 GetBlendColorByItemId(u16 itemId) return RGB_WHITE; } -void sub_811DCF0(u16 itemId) +void CreateItemIconSpriteAtMaxCloseness(u16 itemId) { struct PokemonSpecialAnimScene * scene = PSA_GetSceneWork(); scene->itemIconSprite = PSA_CreateItemIconObject(itemId); if (scene->itemIconSprite != NULL) { StartSpriteAffineAnim(scene->itemIconSprite, 3); - sub_811E06C(scene, scene->itemIconSprite, 3); + InitItemIconSpriteState(scene, scene->itemIconSprite, 3); } } -struct Sprite * PSA_CreateItemIconObject(u16 itemId) +static struct Sprite * PSA_CreateItemIconObject(u16 itemId) { u8 spriteId; struct Sprite * sprite; @@ -881,38 +917,38 @@ struct Sprite * PSA_CreateItemIconObject(u16 itemId) return &gSprites[spriteId]; } -bool8 PSA_IsZoomOutMonTaskRunning(void) +bool8 PSA_IsItemUseOnMonAnimActive(void) { - return FuncIsActiveTask(Task_ZoomOutMon); + return FuncIsActiveTask(Task_ItemUseOnMonAnim); } -static void Task_ZoomOutMon(u8 taskId) +static void Task_ItemUseOnMonAnim(u8 taskId) { s16 *data = gTasks[taskId].data; - struct Sprite * sprite = (void *)GetWordTaskArg(taskId, 4); - switch (data[0]) + struct Sprite * sprite = (void *)GetWordTaskArg(taskId, tOff_ItemSprite); + switch (tState) { case 0: - data[1]++; - if (data[1] > 20) + tTimer++; + if (tTimer > 20) { - data[1] = 0; + tTimer = 0; PlaySE(SE_W207B); sprite->invisible = FALSE; - if (!data[11]) - sub_811E588(); - data[0] = 1; + if (!tSuppressDots) + LoadOutwardSpiralDotsGfx(); + tState = 1; } break; case 1: - data[1]++; - if (data[1] > 30) + tTimer++; + if (tTimer > 30) { - data[1] = 0; - sprite->affineAnims = gUnknown_8459AA8; - StartSpriteAffineAnim(sprite, data[2]); - BeginNormalPaletteFade(0x10000 << IndexOfSpritePaletteTag(1), -2, 0, 12, data[9]); - data[0] = 2; + tTimer = 0; + sprite->affineAnims = sAffineAnimTable_ItemZoom; + StartSpriteAffineAnim(sprite, tCloseness); + BeginNormalPaletteFade(0x10000 << IndexOfSpritePaletteTag(1), -2, 0, 12, tBlendColor); + tState = 2; PlaySE(SE_W208); } break; @@ -920,30 +956,30 @@ static void Task_ZoomOutMon(u8 taskId) if (sprite->affineAnimEnded) { sprite->invisible = TRUE; - data[10] = 20; - data[0] = 3; + tTimerReset = 20; + tState = 3; } break; case 3: - data[1]++; - if (data[1] > data[10]) + tTimer++; + if (tTimer > tTimerReset) { - data[1] = 0; - if (!data[11]) + tTimer = 0; + if (!tSuppressDots) CreateSprites_UseItem_OutwardSpiralDots(taskId, data, sprite); - if (data[7] == 0) + if (tData7 == 0) PlaySE(SE_W179); - data[7]++; - if (data[7] > 2) - data[0] = 4; + tData7++; + if (tData7 > 2) + tState = 4; else - data[10] = 8; + tTimerReset = 8; } break; case 4: - if (data[8] == 0) + if (tActiveSprCt == 0) { - if (data[6] != 0) + if (tData6) DestroySprite(sprite); DestroyTask(taskId); } @@ -957,7 +993,7 @@ static void CreateSprites_UseItem_OutwardSpiralDots(u8 taskId, s16 *data, struct int y = sprite->pos1.y + sprite->pos2.y - 4; u8 spriteId; int i; - BlendPalettes(0x10000 << IndexOfSpritePaletteTag(5), 16, data[9]); + BlendPalettes(0x10000 << IndexOfSpritePaletteTag(5), 16, tBlendColor); for (i = 0; i < 15; i++) { spriteId = CreateSprite(&sSpriteTemplate_UseItem_OutwardSpiralDots, x, y, 0); @@ -965,14 +1001,14 @@ static void CreateSprites_UseItem_OutwardSpiralDots(u8 taskId, s16 *data, struct { gSprites[spriteId].data[1] = i << 4; gSprites[spriteId].data[7] = taskId; - gSprites[spriteId].callback = sub_811DFC0; + gSprites[spriteId].callback = SpriteCB_OutwardSpiralDots; StartSpriteAnim(&gSprites[spriteId], 1); - data[8]++; + tActiveSprCt++; } } } -static void sub_811DFC0(struct Sprite * sprite) +static void SpriteCB_OutwardSpiralDots(struct Sprite * sprite) { s16 *data = sprite->data; if (data[0] < 16) @@ -986,35 +1022,35 @@ static void sub_811DFC0(struct Sprite * sprite) } else { - gTasks[data[7]].data[8]--; + gTasks[data[7]].tActiveSprCt--; DestroySprite(sprite); } } -void sub_811E040(void) +void PSA_UseItem_CleanUpForCancel(void) { - u8 taskId = FindTaskIdByFunc(Task_ZoomOutMon); + u8 taskId = FindTaskIdByFunc(Task_ItemUseOnMonAnim); if (taskId != 0xFF) { - gTasks[taskId].data[11] = TRUE; + gTasks[taskId].tSuppressDots = TRUE; } } -static void sub_811E06C(struct PokemonSpecialAnimScene * scene, struct Sprite * sprite, u8 closeness) +static void InitItemIconSpriteState(struct PokemonSpecialAnimScene * scene, struct Sprite * sprite, u8 closeness) { u16 species; u32 personality; - register int r4 asm("r4"); // FIXME - u8 r0; + register int x asm("r4"); // FIXME + u8 y; if (closeness == 3) { sprite->pos1.x = 120; - sprite->pos1.y = scene->field_0008; + sprite->pos1.y = scene->monSpriteY2; } else { sprite->pos1.x = 120; - sprite->pos1.y = scene->field_0006; + sprite->pos1.y = scene->monSpriteY1; } sprite->pos1.x += 4; sprite->pos1.y += 4; @@ -1022,44 +1058,56 @@ static void sub_811E06C(struct PokemonSpecialAnimScene * scene, struct Sprite * personality = PSA_GetMonPersonality(); if (PSA_GetAnimType() == 4) { - r4 = sub_812EA78(species, personality, 0); - r0 = sub_812EA78(species, personality, 1); + x = Menu2_GetMonSpriteAnchorCoord(species, personality, 0); + y = Menu2_GetMonSpriteAnchorCoord(species, personality, 1); } else { - r4 = sub_812EA78(species, personality, 3); - r0 = sub_812EA78(species, personality, 4); + x = Menu2_GetMonSpriteAnchorCoord(species, personality, 3); + y = Menu2_GetMonSpriteAnchorCoord(species, personality, 4); } - if (r4 == 0xFF) - r4 = 0; - if (r0 == 0xFF) - r0 = 0; - sprite->data[6] = r4; - sprite->data[7] = r0; - sub_811DB48(sprite, closeness); -} - -static void sub_811E10C(void) + if (x == 0xFF) + x = 0; + if (y == 0xFF) + y = 0; + sprite->data[6] = x; + sprite->data[7] = y; + ItemSpriteZoom_UpdateYPos(sprite, closeness); +} + +#undef tSuppressDots +#undef tTimerReset +#undef tBlendColor +#undef tActiveSprCt +#undef tData7 +#undef tData6 +#undef tOff_ItemSprite +#undef tYpos +#undef tCloseness +#undef tTimer +#undef tState + +static void MachineSetWobbleInit(void) { struct PokemonSpecialAnimScene * scene = PSA_GetSceneWork(); - sub_811E128(scene->monSprite); - sub_811E128(scene->itemIconSprite); + MachineSetWobble_SetCB(scene->monSprite); + MachineSetWobble_SetCB(scene->itemIconSprite); } -static void sub_811E128(struct Sprite * sprite) +static void MachineSetWobble_SetCB(struct Sprite * sprite) { sprite->data[0] = 0; sprite->data[1] = 0; - sprite->callback = sub_811E154; + sprite->callback = SpriteCB_MachineSetWobble; } -static bool8 sub_811E138(void) +static bool8 MachineSetWobbleCBIsRunning(void) { struct PokemonSpecialAnimScene * scene = PSA_GetSceneWork(); return scene->monSprite->callback != SpriteCallbackDummy; } -static void sub_811E154(struct Sprite * sprite) +static void SpriteCB_MachineSetWobble(struct Sprite * sprite) { switch (sprite->data[0]) { @@ -1078,57 +1126,78 @@ static void sub_811E154(struct Sprite * sprite) } } -static void sub_811E194(u8 a0) +// Redefined from above +#define tState data[0] +#define tCurrCloseness data[1] +#define tFinalCloseness data[2] +#define tDeltaCloseness data[3] +#define tTimer data[4] +#define tDelay data[5] +#define tOff_MonSprite 6 +#define tHasItemSprite data[8] +#define tOff_ItemSprite 9 + +static void StartZoomOutAnimForUseTM(u8 closeness) { struct PokemonSpecialAnimScene * scene = PSA_GetSceneWork(); u8 taskId; - if (a0 != scene->field_000a) + if (closeness != scene->lastCloseness) { - taskId = CreateTask(sub_811D9BC, 1); - SetWordTaskArg(taskId, 6, (uintptr_t)scene->monSprite); - SetWordTaskArg(taskId, 9, (uintptr_t)scene->itemIconSprite); - gTasks[taskId].data[1] = scene->field_000a; - gTasks[taskId].data[2] = a0; - gTasks[taskId].data[8] = 1; - gTasks[taskId].data[5] = 6; - if (a0 > scene->field_000a) - gTasks[taskId].data[3] = 1; + taskId = CreateTask(Task_ZoomAnim, 1); + SetWordTaskArg(taskId, tOff_MonSprite, (uintptr_t)scene->monSprite); + SetWordTaskArg(taskId, tOff_ItemSprite, (uintptr_t)scene->itemIconSprite); + gTasks[taskId].tCurrCloseness = scene->lastCloseness; + gTasks[taskId].tFinalCloseness = closeness; + gTasks[taskId].tHasItemSprite = 1; + gTasks[taskId].tDelay = 6; + if (closeness > scene->lastCloseness) + gTasks[taskId].tDeltaCloseness = 1; else - gTasks[taskId].data[3] = -1; + gTasks[taskId].tDeltaCloseness = -1; } } -static void sub_811E204(struct PokemonSpecialAnimScene * scene) +#undef tOff_ItemSprite +#undef tHasItemSprite +#undef tOff_MonSprite +#undef tDelay +#undef tTimer +#undef tDeltaCloseness +#undef tFinalCloseness +#undef tCurrCloseness +#undef tState + +static void CreateStarSprites(struct PokemonSpecialAnimScene * scene) { int i; u8 spriteId; u16 species; u32 personality; - LoadCompressedSpriteSheet(&gUnknown_84599B8); - LoadSpritePalette(&gUnknown_84599C0); + LoadCompressedSpriteSheet(&sSpriteSheet_Star); + LoadSpritePalette(&sSpritePalette_Star); scene->field_0002 = 0; for (i = 0; i < 3; i++) { - spriteId = CreateSprite(&gUnknown_8459AEC, 120 + gUnknown_84599B2[i][0], scene->field_0008 + gUnknown_84599B2[i][1], 2); + spriteId = CreateSprite(&sSpriteTemplate_Star, 120 + sStarCoordOffsets[i][0], scene->monSpriteY2 + sStarCoordOffsets[i][1], 2); if (spriteId != MAX_SPRITES) { species = PSA_GetMonSpecies(); personality = PSA_GetMonPersonality(); - gSprites[spriteId].data[3] = gUnknown_84599B2[i][0] * 8; - gSprites[spriteId].data[4] = gUnknown_84599B2[i][1] * 8; - gSprites[spriteId].pos1.x += sub_811DAC0(sub_812EAE4(species, personality, 0), 3); - gSprites[spriteId].pos1.y += sub_811DAC0(sub_812EAE4(species, personality, 1), 3); + gSprites[spriteId].data[3] = sStarCoordOffsets[i][0] * 8; + gSprites[spriteId].data[4] = sStarCoordOffsets[i][1] * 8; + gSprites[spriteId].pos1.x += GetSpriteOffsetByScale(Menu2_GetMonSpriteAnchorCoordMinusx20(species, personality, 0), 3); + gSprites[spriteId].pos1.y += GetSpriteOffsetByScale(Menu2_GetMonSpriteAnchorCoordMinusx20(species, personality, 1), 3); scene->field_0002++; } } } -static u8 sub_811E2F4(void) +static u8 AnyStarSpritesActive(void) { return PSA_GetSceneWork()->field_0002; } -static void sub_811E300(struct Sprite * sprite) +static void SpriteCB_Star(struct Sprite * sprite) { sprite->data[0]++; if (sprite->data[0] < 10) @@ -1145,23 +1214,40 @@ static void sub_811E300(struct Sprite * sprite) } } -static void sub_811E348(struct PokemonSpecialAnimScene * scene) +// ======================================================== + +#define tState data[0] +#define tTimer data[1] +#define tActiveSprCt data[2] +#define tOff_RngState 3 +#define tAngle data[5] +#define tMadeSprCt data[6] + +#define tsRadius data[0] +#define tsSpeed data[1] +#define tsXinit data[2] +#define tsYinit data[3] +#define tsXorig data[4] +#define tsYorig data[5] +#define tsTaskId data[6] + +static void PSAScene_SeedRandomInTask(struct PokemonSpecialAnimScene * scene) { u8 taskId; - sub_811E588(); - taskId = CreateTask(sub_811E3B4, 1); - SetWordTaskArg(taskId, 3, 2022069025); - gTasks[taskId].data[5] = 224; + LoadOutwardSpiralDotsGfx(); + taskId = CreateTask(Task_UseItem_OutwardSpiralDots, 1); + SetWordTaskArg(taskId, tOff_RngState, 2022069025); + gTasks[taskId].tAngle = 0xE0; } -static void sub_811E388(void) +static void StopMakingOutwardSpiralDots(void) { - u8 taskId = FindTaskIdByFunc(sub_811E3B4); + u8 taskId = FindTaskIdByFunc(Task_UseItem_OutwardSpiralDots); if (taskId != 0xFF) - gTasks[taskId].data[0] = 1; + gTasks[taskId].tState = 1; } -static void sub_811E3B4(u8 taskId) +static void Task_UseItem_OutwardSpiralDots(u8 taskId) { s16 *data = gTasks[taskId].data; struct Sprite * sprite; @@ -1169,52 +1255,52 @@ static void sub_811E3B4(u8 taskId) register int y asm("r10"); // FIXME int x2; int y2; - int r0; + int ampl; u8 spriteId; - switch (data[0]) + switch (tState) { case 0: - if (data[1] == 0) + if (tTimer == 0) { sprite = PSA_GetSceneWork()->itemIconSprite; x = sprite->pos1.x + sprite->pos2.x; y = sprite->pos1.y + sprite->pos2.y; - r0 = (sub_811E4EC(taskId) % 21) + 70; - x2 = x + ((u32)(gSineTable[data[5] + 0x40] * r0) >> 8); - y2 = y + ((u32)(gSineTable[data[5] ] * r0) >> 8); - data[5] += 76; - data[5] &= 0xFF; + ampl = (PSAScene_RandomFromTask(taskId) % 21) + 70; + x2 = x + ((u32)(gSineTable[tAngle + 0x40] * ampl) >> 8); + y2 = y + ((u32)(gSineTable[tAngle ] * ampl) >> 8); + tAngle += 0x4C; + tAngle &= 0xFF; spriteId = CreateSprite(&sSpriteTemplate_UseItem_OutwardSpiralDots, x2, y2, 0); if (spriteId != MAX_SPRITES) { - gSprites[spriteId].data[0] = 0; - gSprites[spriteId].data[1] = (sub_811E4EC(taskId) & 1) + 6; - gSprites[spriteId].data[2] = x2; - gSprites[spriteId].data[3] = y2; - gSprites[spriteId].data[4] = x; - gSprites[spriteId].data[5] = y; - gSprites[spriteId].data[6] = taskId; - data[2]++; + gSprites[spriteId].tsRadius = 0; + gSprites[spriteId].tsSpeed = (PSAScene_RandomFromTask(taskId) & 1) + 6; + gSprites[spriteId].tsXinit = x2; + gSprites[spriteId].tsYinit = y2; + gSprites[spriteId].tsXorig = x; + gSprites[spriteId].tsYorig = y; + gSprites[spriteId].tsTaskId = taskId; + tActiveSprCt++; } - data[6]++; - if (data[6] > 47) - data[0]++; + tMadeSprCt++; + if (tMadeSprCt > 47) + tState++; } else - data[1]--; + tTimer--; break; case 1: - if (data[2] == 0) + if (tActiveSprCt == 0) DestroyTask(taskId); break; } } -static u16 sub_811E4EC(u8 taskId) +static u16 PSAScene_RandomFromTask(u8 taskId) { - u32 state = GetWordTaskArg(taskId, 3); + u32 state = GetWordTaskArg(taskId, tOff_RngState); state = state * 1103515245 + 24691; - SetWordTaskArg(taskId, 3, state); + SetWordTaskArg(taskId, tOff_RngState, state); return state >> 16; } @@ -1222,120 +1308,170 @@ static void SpriteCallback_UseItem_OutwardSpiralDots(struct Sprite * sprite) { int x; int y; - sprite->data[0] += sprite->data[1]; - if (sprite->data[0] > 255) + sprite->tsRadius += sprite->tsSpeed; + if (sprite->tsRadius > 255) { - gTasks[sprite->data[6]].data[2]--; + gTasks[sprite->tsTaskId].tActiveSprCt--; DestroySprite(sprite); } else { - x = (sprite->data[4] - sprite->data[2]) * sprite->data[0]; - y = (sprite->data[5] - sprite->data[3]) * sprite->data[0]; - sprite->pos1.x = (x >> 8) + sprite->data[2]; - sprite->pos1.y = (y >> 8) + sprite->data[3]; + x = (sprite->tsXorig - sprite->tsXinit) * sprite->tsRadius; + y = (sprite->tsYorig - sprite->tsYinit) * sprite->tsRadius; + sprite->pos1.x = (x >> 8) + sprite->tsXinit; + sprite->pos1.y = (y >> 8) + sprite->tsYinit; } } -static void sub_811E588(void) +static void LoadOutwardSpiralDotsGfx(void) { LoadCompressedSpriteSheet(&sSpriteSheet_UseItem_OutwardSpiralDots); LoadSpritePalette(&sSpritePalette_UseItem_OutwardSpiralDots); } -static bool32 sub_811E5A4(void) +static bool32 IsOutwardSpiralDotsTaskRunning(void) { - return FuncIsActiveTask(sub_811E3B4); + return FuncIsActiveTask(Task_UseItem_OutwardSpiralDots); } -void sub_811E5B8(u16 a0, u16 a1, u16 a2, u16 a3, u16 a4, u16 a5) +#undef tsTaskId +#undef tsYorig +#undef tsXorig +#undef tsYinit +#undef tsXinit +#undef tsSpeed +#undef tsRadius + +#undef tMadeSprCt +#undef tAngle +#undef tOff_RngState +#undef tActiveSprCt +#undef tTimer +#undef tState + +// ======================================================== + +#define tState data[0] +#define tActiveSprCt data[1] +#define tMadeSprCt data[2] +#define tTimer data[3] +#define tXpos data[4] +#define tYpos data[5] +#define tTileTag data[6] +#define tPaletteTag data[7] +#define tPriority data[8] +#define tSubpriority data[9] + +#define tsYsubpixel data[1] +#define tsSpeed data[2] +#define tsTaskId data[7] + +void CreateLevelUpVerticalSpritesTask(u16 x, u16 y, u16 tileTag, u16 paletteTag, u16 priority, u16 subpriority) { - static struct CompressedSpriteSheet gUnknown_3002030; - static struct SpritePalette gUnknown_3002038; + static struct CompressedSpriteSheet spriteSheet; + static struct SpritePalette spritePalette; u8 taskId; - gUnknown_3002030.tag = a2; - gUnknown_3002030.data = gUnknown_8459888; - gUnknown_3002030.size = gUnknown_8459888[0] >> 8; - gUnknown_3002038.data = gUnknown_8459868; - gUnknown_3002038.tag = a3; - LoadCompressedSpriteSheet(&gUnknown_3002030); - LoadSpritePalette(&gUnknown_3002038); - taskId = CreateTask(sub_811E694, 0); - gTasks[taskId].data[4] = a0 - 32; - gTasks[taskId].data[5] = a1 + 32; - gTasks[taskId].data[6] = a2; - gTasks[taskId].data[7] = a3; - gTasks[taskId].data[8] = a4; - gTasks[taskId].data[9] = a5; + spriteSheet.tag = tileTag; + spriteSheet.data = sSpriteTiles_LevelUpVertical; + spriteSheet.size = sSpriteTiles_LevelUpVertical[0] >> 8; + spritePalette.data = sSpritePals_LevelUpVertical; + spritePalette.tag = paletteTag; + LoadCompressedSpriteSheet(&spriteSheet); + LoadSpritePalette(&spritePalette); + taskId = CreateTask(Task_LevelUpVerticalSprites, 0); + gTasks[taskId].tXpos = x - 32; + gTasks[taskId].tYpos = y + 32; + gTasks[taskId].tTileTag = tileTag; + gTasks[taskId].tPaletteTag = paletteTag; + gTasks[taskId].tPriority = priority; + gTasks[taskId].tSubpriority = subpriority; SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_NONE | BLDCNT_TGT2_ALL); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(12, 6)); } -bool8 sub_811E680(void) +bool8 LevelUpVerticalSpritesTaskIsRunning(void) { - return FuncIsActiveTask(sub_811E694); + return FuncIsActiveTask(Task_LevelUpVerticalSprites); } -static void sub_811E694(u8 taskId) +static void Task_LevelUpVerticalSprites(u8 taskId) { s16 *data = gTasks[taskId].data; - switch (data[0]) + switch (tState) { case 0: - if (data[3] == 0) + if (tTimer == 0) { - data[3]++; - sub_811E710(taskId, data); - if (data[2] > 17) - data[0]++; + tTimer++; + CreateLevelUpVerticalSprite(taskId, data); + if (tMadeSprCt > 17) + tState++; } else { - data[3]++; - if (data[3] == 2) - data[3] = 0; + tTimer++; + if (tTimer == 2) + tTimer = 0; } break; case 1: - if (data[1] == 0) + if (tActiveSprCt == 0) { - FreeSpriteTilesByTag(data[6]); - FreeSpritePaletteByTag(data[7]); + FreeSpriteTilesByTag(tTileTag); + FreeSpritePaletteByTag(tPaletteTag); DestroyTask(taskId); } break; } } -static void sub_811E710(u8 taskId, s16 *data) +static void CreateLevelUpVerticalSprite(u8 taskId, s16 *data) { u8 spriteId; - struct SpriteTemplate template = gUnknown_8459ACC; - template.tileTag = data[6]; - template.paletteTag = data[7]; - data[2]++; - spriteId = CreateSprite(&template, ((data[2] * 219) & 0x3F) + data[4], data[5], data[9]); + struct SpriteTemplate template = sSpriteTemplate_LevelUpVertical; + template.tileTag = tTileTag; + template.paletteTag = tPaletteTag; + tMadeSprCt++; + spriteId = CreateSprite(&template, ((tMadeSprCt * 219) & 0x3F) + tXpos, tYpos, tSubpriority); if (spriteId != MAX_SPRITES) { - gSprites[spriteId].oam.priority = data[8]; - gSprites[spriteId].data[1] = 0; - gSprites[spriteId].data[2] = ((data[2] * 1103515245 + 24691) & 0x3F) + 0x20; - gSprites[spriteId].data[7] = taskId; - data[1]++; + gSprites[spriteId].oam.priority = tPriority; + gSprites[spriteId].tsYsubpixel = 0; + // similar to the LCRNG in random.c, but seeding from data[2] + gSprites[spriteId].tsSpeed = ((tMadeSprCt * 1103515245 + 24691) & 0x3F) + 0x20; + gSprites[spriteId].tsTaskId = taskId; + tActiveSprCt++; } } -static void sub_811E7B4(struct Sprite * sprite) +static void SpriteCB_LevelUpVertical(struct Sprite * sprite) { - sprite->data[1] -= sprite->data[2]; - sprite->pos2.y = sprite->data[1] >> 4; + sprite->tsYsubpixel -= sprite->tsSpeed; + sprite->pos2.y = sprite->tsYsubpixel >> 4; if (sprite->pos2.y < -0x40) { - gTasks[sprite->data[7]].data[1]--; + gTasks[sprite->tsTaskId].tActiveSprCt--; DestroySprite(sprite); } } +#undef tsTaskId +#undef tsSpeed +#undef tsYsubpixel + +#undef tSubpriority +#undef tPriority +#undef tPaletteTag +#undef tTileTag +#undef tYpos +#undef tXpos +#undef tTimer +#undef tMadeSprCt +#undef tActiveSprCt +#undef tState + +// ======================================================== + static const u8 *const sLevelUpWindowStatNames[] = { gUnknown_841B2A9, gUnknown_841B2B7, -- cgit v1.2.3 From cce652dc9b40f0c673432f55a757aae8c4d4064e Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 22 Mar 2020 14:44:32 -0400 Subject: Remove partial define --- include/menu.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/include/menu.h b/include/menu.h index 36a3cc942..83bdcb4f6 100644 --- a/include/menu.h +++ b/include/menu.h @@ -5,8 +5,6 @@ #include "text.h" #include "window.h" -#define MON_COORD_ - #define MENU_NOTHING_CHOSEN -2 #define MENU_B_PRESSED -1 -- cgit v1.2.3