diff options
-rw-r--r-- | asm/pokemon_special_anim.s | 508 | ||||
-rw-r--r-- | 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; + } +} |