through sub_811CA20

This commit is contained in:
PikalaxALT
2020-03-19 20:40:26 -04:00
parent 33b65b5470
commit b36ea2db98
3 changed files with 414 additions and 814 deletions
-814
View File
@@ -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}
+2
View File
@@ -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);
+412
View File
@@ -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;
}
}