Start doccing PSA

This commit is contained in:
PikalaxALT
2020-03-21 20:52:44 -04:00
parent 41704d7054
commit faab53204c
6 changed files with 432 additions and 416 deletions
+5 -5
View File
@@ -5,12 +5,12 @@
void sub_811E5B8(u16, u16, u16, u16, u16, u16); void sub_811E5B8(u16, u16, u16, u16, u16, u16);
bool8 sub_811E680(void); 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 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 DrawLevelUpWindowPg2(u16 windowId, u16 *currStats, u8 bgClr, u8 fgClr, u8 shadowClr);
void sub_811C540(u8 slotId, u16 itemId, MainCallback callback); void StartUseItemAnim_Normal(u8 slotId, u16 itemId, MainCallback callback);
void sub_811C5AC(u8 slotId, u16 itemId, MainCallback callback); void StartUseItemAnim_CantEvolve(u8 slotId, u16 itemId, MainCallback callback);
u32 sub_811D178(void); u32 PSA_IsCancelDisabled(void);
void sub_811C568(u8 slotId, u16 itemId, u16 moveId, MainCallback callback); void StartUseItemAnim_ForgetMoveAndLearnTMorHM(u8 slotId, u16 itemId, u16 moveId, MainCallback callback);
#endif // GUARD_POKEMON_SPECIAL_ANIM_H #endif // GUARD_POKEMON_SPECIAL_ANIM_H
+40 -26
View File
@@ -3,17 +3,31 @@
#include "pokemon_special_anim.h" #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 struct PokemonSpecialAnimScene
{ {
u16 field_0000; u16 state;
u16 field_0002; u16 field_0002;
u16 field_0004; u16 field_0004;
u16 field_0006; u16 field_0006;
u16 field_0008; u16 field_0008;
u8 field_000a; u8 field_000a;
struct Sprite * field_000c; struct Sprite * monSprite;
struct Sprite * field_0010; struct Sprite * itemIconSprite;
u8 field_0014[0x900]; u8 textBuf[0x900];
u8 field_0914[BG_SCREEN_SIZE]; u8 field_0914[BG_SCREEN_SIZE];
u8 field_1114[BG_SCREEN_SIZE]; u8 field_1114[BG_SCREEN_SIZE];
u8 field_1914[BG_SCREEN_SIZE]; u8 field_1914[BG_SCREEN_SIZE];
@@ -38,31 +52,31 @@ struct PokemonSpecialAnim
/*0x009e*/ u16 field_009e; /*0x009e*/ u16 field_009e;
/*0x00a0*/ u32 personality; /*0x00a0*/ u32 personality;
/*0x00a4*/ u32 field_00a4; /*0x00a4*/ u32 field_00a4;
/*0x00a8*/ struct PokemonSpecialAnimScene field_00a8; /*0x00a8*/ struct PokemonSpecialAnimScene sceneResources;
}; // size=0x28dc }; // size=0x28dc
struct PokemonSpecialAnim * sub_811D080(void); struct PokemonSpecialAnim * GetPSAStruct(void);
struct Pokemon * sub_811D094(void); struct Pokemon * PSA_GetPokemon(void);
struct PokemonSpecialAnimScene * sub_811D0A8(void); struct PokemonSpecialAnimScene * PSA_GetSceneWork(void);
u16 sub_811D0B4(void); u16 PSA_GetItemId(void);
u8 *sub_811D0C4(void); u8 *PSA_GetNameOfMoveForgotten(void);
u8 *sub_811D0D0(void); u8 *PSA_GetNameOfMoveToTeach(void);
u8 *sub_811D0DC(u8 *dest); u8 *PSA_CopyMonNickname(u8 *dest);
u8 *sub_811D0F4(void); u8 *PSA_GetMonNickname(void);
u8 sub_811D100(void); u8 PSA_GetAnimType(void);
u16 sub_811D110(void); u16 PSA_GetMonSpecies(void);
u32 sub_811D120(void); u32 PSA_GetMonPersonality(void);
void BufferMonStatsToTaskData(struct Pokemon * pokemon, u16 *data); void GetMonLevelUpWindowStats(struct Pokemon * pokemon, u16 *data);
bool32 sub_811D178(void); bool32 PSA_IsCancelDisabled(void);
void sub_811D184(struct PokemonSpecialAnimScene * buffer, u16 animType); void InitPokemonSpecialAnimScene(struct PokemonSpecialAnimScene * buffer, u16 animType);
bool8 sub_811D280(void); bool8 PokemonSpecialAnimSceneInitIsNotFinished(void);
void sub_811D29C(void); void PSA_FreeWindowBuffers(void);
void sub_811D2A8(void); void sub_811D2A8(void);
void sub_811D2D0(void); void sub_811D2D0(void);
void sub_811D2EC(u8 messageId); void PSA_PrintMessage(u8 messageId);
void sub_811D4D4(void); void sub_811D4D4(void);
bool8 sub_811D4EC(void); bool8 PSA_IsMessagePrintTaskActive(void);
void sub_811D4FC(void); void sub_811D4FC(void);
bool8 sub_811D530(void); bool8 sub_811D530(void);
void sub_811D5A0(void); void sub_811D5A0(void);
@@ -72,11 +86,11 @@ void sub_811D6EC(void);
bool8 sub_811D6FC(void); bool8 sub_811D6FC(void);
bool8 sub_811D754(void); bool8 sub_811D754(void);
void sub_811D830(u8 closeness); void sub_811D830(u8 closeness);
void sub_811D948(u8 closeness); void PSA_SetUpZoomAnim(u8 closeness);
bool8 sub_811D9A8(void); 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); void sub_811DCF0(u16 itemId);
bool8 sub_811DD90(void); bool8 PSA_IsZoomOutMonTaskRunning(void);
void sub_811E040(void); void sub_811E040(void);
#endif //GUARD_POKEMON_SPECIAL_ANIM_INTERNAL_H #endif //GUARD_POKEMON_SPECIAL_ANIM_INTERNAL_H
+2 -2
View File
@@ -5828,7 +5828,7 @@ static void DrawLevelUpWindow1(void)
{ {
u16 currStats[NUM_STATS]; u16 currStats[NUM_STATS];
BufferMonStatsToTaskData(&gPlayerParty[gBattleStruct->expGetterMonId], currStats); GetMonLevelUpWindowStats(&gPlayerParty[gBattleStruct->expGetterMonId], currStats);
DrawLevelUpWindowPg1(12, gBattleResources->beforeLvlUp->stats, currStats, 0xE, 0xD, 0xF); DrawLevelUpWindowPg1(12, gBattleResources->beforeLvlUp->stats, currStats, 0xE, 0xD, 0xF);
} }
@@ -5836,7 +5836,7 @@ static void DrawLevelUpWindow2(void)
{ {
u16 currStats[NUM_STATS]; u16 currStats[NUM_STATS];
BufferMonStatsToTaskData(&gPlayerParty[gBattleStruct->expGetterMonId], currStats); GetMonLevelUpWindowStats(&gPlayerParty[gBattleStruct->expGetterMonId], currStats);
DrawLevelUpWindowPg2(12, currStats, 0xE, 0xD, 0xF); DrawLevelUpWindowPg2(12, currStats, 0xE, 0xD, 0xF);
} }
+11 -11
View File
@@ -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_8125F4C(u8 taskId, UNUSED TaskFunc func);
static void sub_8125F5C(u8 taskId); static void sub_8125F5C(u8 taskId);
static void sub_8126BD4(void); static void sub_8126BD4(void);
static bool8 sub_8126C24(void); static bool8 MonCanEvolve(void);
static EWRAM_DATA struct PartyMenuInternal *sPartyMenuInternal = NULL; static EWRAM_DATA struct PartyMenuInternal *sPartyMenuInternal = NULL;
EWRAM_DATA struct PartyMenu gPartyMenu = {0}; EWRAM_DATA struct PartyMenu gPartyMenu = {0};
@@ -4295,21 +4295,21 @@ static void sub_8124DE0(void)
{ {
if (CheckIfItemIsTMHMOrEvolutionStone(gSpecialVar_ItemId) == 2) // Evolution stone if (CheckIfItemIsTMHMOrEvolutionStone(gSpecialVar_ItemId) == 2) // Evolution stone
{ {
if (sub_8126C24() == TRUE) if (MonCanEvolve() == TRUE)
sub_811C540(gPartyMenu.slotId, gSpecialVar_ItemId, sub_8126BD4); StartUseItemAnim_Normal(gPartyMenu.slotId, gSpecialVar_ItemId, sub_8126BD4);
else else
sub_811C5AC(gPartyMenu.slotId, gSpecialVar_ItemId, gPartyMenu.exitCallback); StartUseItemAnim_CantEvolve(gPartyMenu.slotId, gSpecialVar_ItemId, gPartyMenu.exitCallback);
} }
else else
{ {
sub_811C540(gPartyMenu.slotId, gSpecialVar_ItemId, sub_8124E48); StartUseItemAnim_Normal(gPartyMenu.slotId, gSpecialVar_ItemId, sub_8124E48);
} }
} }
static void sub_8124E48(void) static void sub_8124E48(void)
{ {
if (ItemId_GetPocket(gSpecialVar_ItemId) == POCKET_TM_CASE if (ItemId_GetPocket(gSpecialVar_ItemId) == POCKET_TM_CASE
&& sub_811D178() == 1) && PSA_IsCancelDisabled() == 1)
{ {
GiveMoveToMon(&gPlayerParty[gPartyMenu.slotId], ItemIdToBattleMoveId(gSpecialVar_ItemId)); GiveMoveToMon(&gPlayerParty[gPartyMenu.slotId], ItemIdToBattleMoveId(gSpecialVar_ItemId));
AdjustFriendship(&gPlayerParty[gPartyMenu.slotId], 4); AdjustFriendship(&gPlayerParty[gPartyMenu.slotId], 4);
@@ -4325,7 +4325,7 @@ static void sub_8124E48(void)
static void sub_8124EFC(void) static void sub_8124EFC(void)
{ {
if (sub_811D178() == 1) if (PSA_IsCancelDisabled() == 1)
{ {
struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
u8 moveIdx = GetMoveSlotToReplace(); u8 moveIdx = GetMoveSlotToReplace();
@@ -4919,7 +4919,7 @@ static void CB2_ReturnToPartyMenuWhileLearningMove(void)
if (learnMoveState == 0 && moveIdx != MAX_MON_MOVES) if (learnMoveState == 0 && moveIdx != MAX_MON_MOVES)
{ {
move = GetMonData(&gPlayerParty[gPartyMenu.slotId], moveIdx + MON_DATA_MOVE1); 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; gItemUseCB = sub_8125F4C;
gPartyMenu.action = learnMoveState; gPartyMenu.action = learnMoveState;
} }
@@ -5075,9 +5075,9 @@ static void ItemUseCB_RareCandyStep(u8 taskId, UNUSED TaskFunc func)
s16 *arrayPtr = ptr->data; s16 *arrayPtr = ptr->data;
u8 level; u8 level;
BufferMonStatsToTaskData(mon, arrayPtr); GetMonLevelUpWindowStats(mon, arrayPtr);
ExecuteTableBasedItemEffect_(gPartyMenu.slotId, gSpecialVar_ItemId, 0); ExecuteTableBasedItemEffect_(gPartyMenu.slotId, gSpecialVar_ItemId, 0);
BufferMonStatsToTaskData(mon, &ptr->data[NUM_STATS]); GetMonLevelUpWindowStats(mon, &ptr->data[NUM_STATS]);
gPartyMenuUseExitCallback = TRUE; gPartyMenuUseExitCallback = TRUE;
ItemUse_SetQuestLogEvent(QL_EVENT_USED_ITEM, mon, gSpecialVar_ItemId, 0xFFFF); ItemUse_SetQuestLogEvent(QL_EVENT_USED_ITEM, mon, gSpecialVar_ItemId, 0xFFFF);
PlayFanfareByFanfareNum(0); PlayFanfareByFanfareNum(0);
@@ -5347,7 +5347,7 @@ static void sub_8126BD4(void)
RemoveBagItem(gSpecialVar_ItemId, 1); RemoveBagItem(gSpecialVar_ItemId, 1);
} }
static bool8 sub_8126C24(void) static bool8 MonCanEvolve(void)
{ {
if (!IsNationalPokedexEnabled() if (!IsNationalPokedexEnabled()
&& GetEvolutionTargetSpecies(&gPlayerParty[gPartyMenu.slotId], 2, gSpecialVar_ItemId) > KANTO_DEX_COUNT) && GetEvolutionTargetSpecies(&gPlayerParty[gPartyMenu.slotId], 2, gSpecialVar_ItemId) > KANTO_DEX_COUNT)
+124 -124
View File
@@ -11,54 +11,54 @@
// Functions related to the special anims Pokemon // Functions related to the special anims Pokemon
// make when using an item on them in the field. // make when using an item on them in the field.
EWRAM_DATA bool32 gUnknown_203B090 = FALSE; static EWRAM_DATA bool32 sCancelDisabled = FALSE;
EWRAM_DATA u8 gUnknown_203B094 = 0; static EWRAM_DATA u8 sPSATaskId = 0;
EWRAM_DATA struct PokemonSpecialAnim * gUnknown_203B098 = NULL; static EWRAM_DATA struct PokemonSpecialAnim * sPSAWork = NULL;
struct PokemonSpecialAnim * sub_811C5D4(u8 slotId, u16 itemId, MainCallback callback); struct PokemonSpecialAnim * AllocPSA(u8 slotId, u16 itemId, MainCallback callback);
void sub_811C748(struct PokemonSpecialAnim * ptr); static void SetUpUseItemAnim_Normal(struct PokemonSpecialAnim * ptr);
void sub_811C7BC(struct PokemonSpecialAnim * ptr); static void SetUpUseItemAnim_ForgetMoveAndLearnTMorHM(struct PokemonSpecialAnim * ptr);
void sub_811C7FC(struct PokemonSpecialAnim * ptr); static void SetUpUseItemAnim_CantEvolve(struct PokemonSpecialAnim * ptr);
void sub_811C834(u8 taskId); static void sub_811C834(u8 taskId);
void sub_811CA20(u8 taskId); static void Task_ForgetMove(u8 taskId);
void sub_811CBE4(u8 taskId); static void sub_811CBE4(u8 taskId);
void sub_811CD68(u8 taskId); static void sub_811CD68(u8 taskId);
void sub_811CE4C(u8 taskId); static void Task_MachineSet(u8 taskId);
void sub_811CF88(u8 taskId); static void Task_CleanUp(u8 taskId);
u8 sub_811D058(u16 friendship); static u8 GetClosenessFromFriendship(u16 friendship);
u16 sub_811D018(u16 itemId); static u16 GetAnimTypeByItemId(u16 itemId);
void sub_811C540(u8 slotId, u16 itemId, MainCallback callback) 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) if (ptr == NULL)
SetMainCallback2(callback); SetMainCallback2(callback);
else 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) if (ptr == NULL)
SetMainCallback2(callback); SetMainCallback2(callback);
else else
{ {
StringCopy(ptr->nameOfMoveForgotten, gMoveNames[moveId]); 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) if (ptr == NULL)
SetMainCallback2(callback); SetMainCallback2(callback);
else 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 PokemonSpecialAnim * ptr;
struct Pokemon * pokemon; struct Pokemon * pokemon;
@@ -78,11 +78,11 @@ struct PokemonSpecialAnim * sub_811C5D4(u8 slotId, u16 itemId, MainCallback call
ptr->state = 0; ptr->state = 0;
ptr->savedCallback = callback; ptr->savedCallback = callback;
ptr->species = GetMonData(pokemon, MON_DATA_SPECIES); 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->personality = GetMonData(pokemon, MON_DATA_PERSONALITY);
ptr->slotId = slotId; ptr->slotId = slotId;
ptr->itemId = itemId; ptr->itemId = itemId;
ptr->animType = sub_811D018(itemId); ptr->animType = GetAnimTypeByItemId(itemId);
ptr->pokemon = *pokemon; ptr->pokemon = *pokemon;
ptr->field_00a4 = 0; ptr->field_00a4 = 0;
GetMonData(pokemon, MON_DATA_NICKNAME, ptr->nickname); GetMonData(pokemon, MON_DATA_NICKNAME, ptr->nickname);
@@ -94,14 +94,14 @@ struct PokemonSpecialAnim * sub_811C5D4(u8 slotId, u16 itemId, MainCallback call
return ptr; return ptr;
} }
void sub_811C6E8(void) static void VBlankCB_PSA(void)
{ {
TransferPlttBuffer(); TransferPlttBuffer();
LoadOam(); LoadOam();
ProcessSpriteCopyRequests(); ProcessSpriteCopyRequests();
} }
void sub_811C6FC(void) static void CB2_PSA(void)
{ {
RunTextPrinters(); RunTextPrinters();
RunTasks(); RunTasks();
@@ -110,14 +110,14 @@ void sub_811C6FC(void)
UpdatePaletteFade(); UpdatePaletteFade();
} }
void sub_811C718(u8 taskId, TaskFunc func) static void SetUseItemAnimCallback(u8 taskId, TaskFunc func)
{ {
struct PokemonSpecialAnim * ptr = (void *)GetWordTaskArg(taskId, 0); struct PokemonSpecialAnim * ptr = (void *)GetWordTaskArg(taskId, 0);
ptr->state = 0; ptr->state = 0;
gTasks[taskId].func = func; gTasks[taskId].func = func;
} }
void sub_811C748(struct PokemonSpecialAnim * ptr) static void SetUpUseItemAnim_Normal(struct PokemonSpecialAnim * ptr)
{ {
u8 taskId; u8 taskId;
switch (ptr->animType) switch (ptr->animType)
@@ -137,34 +137,34 @@ void sub_811C748(struct PokemonSpecialAnim * ptr)
} }
ptr->cancelDisabled = FALSE; ptr->cancelDisabled = FALSE;
SetWordTaskArg(taskId, 0, (uintptr_t)ptr); SetWordTaskArg(taskId, 0, (uintptr_t)ptr);
SetMainCallback2(sub_811C6FC); SetMainCallback2(CB2_PSA);
gUnknown_203B094 = taskId; 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); SetWordTaskArg(taskId, 0, (uintptr_t)ptr);
SetMainCallback2(sub_811C6FC); SetMainCallback2(CB2_PSA);
gUnknown_203B094 = taskId; sPSATaskId = taskId;
ptr->cancelDisabled = FALSE; ptr->cancelDisabled = FALSE;
} }
void sub_811C7FC(struct PokemonSpecialAnim * ptr) static void SetUpUseItemAnim_CantEvolve(struct PokemonSpecialAnim * ptr)
{ {
u8 taskId = CreateTask(sub_811CBE4, 0); u8 taskId = CreateTask(sub_811CBE4, 0);
SetWordTaskArg(taskId, 0, (uintptr_t)ptr); SetWordTaskArg(taskId, 0, (uintptr_t)ptr);
SetMainCallback2(sub_811C6FC); SetMainCallback2(CB2_PSA);
gUnknown_203B094 = taskId; sPSATaskId = taskId;
} }
void sub_811C834(u8 taskId) static void sub_811C834(u8 taskId)
{ {
struct PokemonSpecialAnim * ptr = (void *)GetWordTaskArg(taskId, 0); struct PokemonSpecialAnim * ptr = (void *)GetWordTaskArg(taskId, 0);
if (!ptr->cancelDisabled && JOY_HELD(A_BUTTON | B_BUTTON)) if (!ptr->cancelDisabled && JOY_HELD(A_BUTTON | B_BUTTON))
{ {
sub_811E040(); sub_811E040();
sub_811C718(taskId, sub_811CF88); SetUseItemAnimCallback(taskId, Task_CleanUp);
return; return;
} }
@@ -172,16 +172,16 @@ void sub_811C834(u8 taskId)
{ {
case 0: case 0:
SetVBlankCallback(NULL); SetVBlankCallback(NULL);
sub_811D184(&ptr->field_00a8, ptr->animType); InitPokemonSpecialAnimScene(&ptr->sceneResources, ptr->animType);
sub_811D830(0); sub_811D830(0);
ptr->state++; ptr->state++;
break; break;
case 1: case 1:
if (!sub_811D280()) if (!PokemonSpecialAnimSceneInitIsNotFinished())
{ {
BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK);
ptr->state++; ptr->state++;
SetVBlankCallback(sub_811C6E8); SetVBlankCallback(VBlankCB_PSA);
} }
break; break;
case 2: case 2:
@@ -191,7 +191,7 @@ void sub_811C834(u8 taskId)
} }
break; break;
case 3: case 3:
sub_811D948(ptr->closeness); PSA_SetUpZoomAnim(ptr->closeness);
ptr->state++; ptr->state++;
break; break;
case 4: case 4:
@@ -208,11 +208,11 @@ void sub_811C834(u8 taskId)
} }
break; break;
case 6: case 6:
sub_811DC54(ptr->itemId, ptr->closeness, TRUE); PSA_SetUpZoomOutMonTask(ptr->itemId, ptr->closeness, TRUE);
ptr->state++; ptr->state++;
break; break;
case 7: case 7:
if (!sub_811DD90()) if (!PSA_IsZoomOutMonTaskRunning())
{ {
ptr->cancelDisabled = TRUE; ptr->cancelDisabled = TRUE;
if (ptr->closeness == 3) if (ptr->closeness == 3)
@@ -224,17 +224,17 @@ void sub_811C834(u8 taskId)
} }
break; break;
case 8: case 8:
sub_811D2EC(0); PSA_PrintMessage(PSA_TEXT_ITEM_USED);
ptr->state++; ptr->state++;
break; break;
case 9: case 9:
if (!sub_811D4EC()) if (!PSA_IsMessagePrintTaskActive())
{ {
ptr->state++; ptr->state++;
} }
break; break;
case 10: case 10:
sub_811D948(0); PSA_SetUpZoomAnim(0);
ptr->state++; ptr->state++;
break; break;
case 11: case 11:
@@ -266,14 +266,14 @@ void sub_811C834(u8 taskId)
break; break;
case 14: case 14:
SetMainCallback2(ptr->savedCallback); SetMainCallback2(ptr->savedCallback);
sub_811D29C(); PSA_FreeWindowBuffers();
Free(ptr); Free(ptr);
DestroyTask(taskId); DestroyTask(taskId);
break; break;
} }
} }
void sub_811CA20(u8 taskId) static void Task_ForgetMove(u8 taskId)
{ {
struct PokemonSpecialAnim * ptr = (void *)GetWordTaskArg(taskId, 0); struct PokemonSpecialAnim * ptr = (void *)GetWordTaskArg(taskId, 0);
u8 r4; u8 r4;
@@ -282,16 +282,16 @@ void sub_811CA20(u8 taskId)
{ {
case 0: case 0:
SetVBlankCallback(NULL); SetVBlankCallback(NULL);
sub_811D184(&ptr->field_00a8, ptr->animType); InitPokemonSpecialAnimScene(&ptr->sceneResources, ptr->animType);
sub_811D830(3); sub_811D830(3);
ptr->state++; ptr->state++;
break; break;
case 1: case 1:
if (!sub_811D280()) if (!PokemonSpecialAnimSceneInitIsNotFinished())
{ {
BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK);
ptr->state++; ptr->state++;
SetVBlankCallback(sub_811C6E8); SetVBlankCallback(VBlankCB_PSA);
} }
break; break;
case 2: case 2:
@@ -310,11 +310,11 @@ void sub_811CA20(u8 taskId)
} }
break; break;
case 4: case 4:
sub_811D2EC(2); PSA_PrintMessage(PSA_TEXT_FORGET_1);
ptr->state++; ptr->state++;
break; break;
case 5: case 5:
if (!sub_811D4EC()) if (!PSA_IsMessagePrintTaskActive())
{ {
ptr->field_009e = 0; ptr->field_009e = 0;
ptr->state++; ptr->state++;
@@ -324,12 +324,12 @@ void sub_811CA20(u8 taskId)
ptr->field_009e++; ptr->field_009e++;
if (ptr->field_009e > 30) if (ptr->field_009e > 30)
{ {
sub_811D2EC(3); PSA_PrintMessage(PSA_TEXT_FORGET_2_AND);
ptr->state++; ptr->state++;
} }
break; break;
case 7: case 7:
if (!sub_811D4EC()) if (!PSA_IsMessagePrintTaskActive())
{ {
ptr->field_009e = 0; ptr->field_009e = 0;
ptr->state++; ptr->state++;
@@ -340,50 +340,50 @@ void sub_811CA20(u8 taskId)
if (ptr->field_009e > 30) if (ptr->field_009e > 30)
{ {
PlaySE(SE_W255); PlaySE(SE_W255);
sub_811D2EC(4); PSA_PrintMessage(PSA_TEXT_FORGET_POOF);
sub_811D4FC(); sub_811D4FC();
ptr->state++; ptr->state++;
} }
break; break;
case 9: case 9:
r4 = sub_811D530(); r4 = sub_811D530();
if (!(r4 | sub_811D4EC())) if (!(r4 | PSA_IsMessagePrintTaskActive()))
{ {
sub_811D4D4(); sub_811D4D4();
ptr->state++; ptr->state++;
} }
break; break;
case 10: case 10:
sub_811D2EC(5); PSA_PrintMessage(PSA_TEXT_FORGET_FORGOT);
ptr->state++; ptr->state++;
break; break;
case 11: case 11:
if (!sub_811D4EC()) if (!PSA_IsMessagePrintTaskActive())
{ {
sub_811D2EC(6); PSA_PrintMessage(PSA_TEXT_FORGET_AND);
ptr->state++; ptr->state++;
} }
break; break;
case 12: case 12:
if (!sub_811D4EC()) if (!PSA_IsMessagePrintTaskActive())
{ {
sub_811D2D0(); sub_811D2D0();
ptr->state++; ptr->state++;
} }
break; break;
case 13: case 13:
sub_811C718(taskId, sub_811CE4C); SetUseItemAnimCallback(taskId, Task_MachineSet);
break; break;
} }
} }
void sub_811CBE4(u8 taskId) static void sub_811CBE4(u8 taskId)
{ {
struct PokemonSpecialAnim * ptr = (void *)GetWordTaskArg(taskId, 0); struct PokemonSpecialAnim * ptr = (void *)GetWordTaskArg(taskId, 0);
if (!ptr->cancelDisabled && JOY_HELD(B_BUTTON)) if (!ptr->cancelDisabled && JOY_HELD(B_BUTTON))
{ {
sub_811C718(taskId, sub_811CF88); SetUseItemAnimCallback(taskId, Task_CleanUp);
return; return;
} }
@@ -391,16 +391,16 @@ void sub_811CBE4(u8 taskId)
{ {
case 0: case 0:
SetVBlankCallback(NULL); SetVBlankCallback(NULL);
sub_811D184(&ptr->field_00a8, ptr->animType); InitPokemonSpecialAnimScene(&ptr->sceneResources, ptr->animType);
sub_811D830(0); sub_811D830(0);
ptr->state++; ptr->state++;
break; break;
case 1: case 1:
if (!sub_811D280()) if (!PokemonSpecialAnimSceneInitIsNotFinished())
{ {
BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK);
ptr->state++; ptr->state++;
SetVBlankCallback(sub_811C6E8); SetVBlankCallback(VBlankCB_PSA);
} }
break; break;
case 2: case 2:
@@ -410,26 +410,26 @@ void sub_811CBE4(u8 taskId)
} }
break; break;
case 3: case 3:
sub_811D948(ptr->closeness); PSA_SetUpZoomAnim(ptr->closeness);
ptr->state++; ptr->state++;
break; break;
case 4: case 4:
sub_811DC54(ptr->itemId, ptr->closeness, FALSE); PSA_SetUpZoomOutMonTask(ptr->itemId, ptr->closeness, FALSE);
ptr->state++; ptr->state++;
break; break;
case 5: case 5:
if (!sub_811DD90()) if (!PSA_IsZoomOutMonTaskRunning())
{ {
sub_811D2A8(); sub_811D2A8();
ptr->state++; ptr->state++;
} }
break; break;
case 6: case 6:
sub_811D2EC(8); PSA_PrintMessage(PSA_TEXT_HUH);
ptr->state++; ptr->state++;
break; break;
case 7: case 7:
if (!sub_811D4EC()) if (!PSA_IsMessagePrintTaskActive())
{ {
ptr->cancelDisabled = TRUE; ptr->cancelDisabled = TRUE;
ptr->state++; ptr->state++;
@@ -446,7 +446,7 @@ void sub_811CBE4(u8 taskId)
if (!gPaletteFade.active) if (!gPaletteFade.active)
{ {
SetMainCallback2(ptr->savedCallback); SetMainCallback2(ptr->savedCallback);
sub_811D29C(); PSA_FreeWindowBuffers();
Free(ptr); Free(ptr);
DestroyTask(taskId); 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); struct PokemonSpecialAnim * ptr = (void *)GetWordTaskArg(taskId, 0);
if (JOY_NEW(B_BUTTON)) if (JOY_NEW(B_BUTTON))
{ {
sub_811C718(taskId, sub_811CF88); SetUseItemAnimCallback(taskId, Task_CleanUp);
return; return;
} }
@@ -468,16 +468,16 @@ void sub_811CD68(u8 taskId)
{ {
case 0: case 0:
SetVBlankCallback(NULL); SetVBlankCallback(NULL);
sub_811D184(&ptr->field_00a8, ptr->animType); InitPokemonSpecialAnimScene(&ptr->sceneResources, ptr->animType);
sub_811D830(3); sub_811D830(3);
ptr->state++; ptr->state++;
break; break;
case 1: case 1:
if (!sub_811D280()) if (!PokemonSpecialAnimSceneInitIsNotFinished())
{ {
BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK);
ptr->state++; ptr->state++;
SetVBlankCallback(sub_811C6E8); SetVBlankCallback(VBlankCB_PSA);
} }
break; break;
case 2: case 2:
@@ -491,20 +491,20 @@ void sub_811CD68(u8 taskId)
ptr->field_009e++; ptr->field_009e++;
if (ptr->field_009e > 20) if (ptr->field_009e > 20)
{ {
sub_811C718(taskId, sub_811CE4C); SetUseItemAnimCallback(taskId, Task_MachineSet);
} }
break; break;
} }
} }
void sub_811CE4C(u8 taskId) static void Task_MachineSet(u8 taskId)
{ {
struct PokemonSpecialAnim * ptr = (void *)GetWordTaskArg(taskId, 0); struct PokemonSpecialAnim * ptr = (void *)GetWordTaskArg(taskId, 0);
if (!ptr->cancelDisabled && JOY_NEW(B_BUTTON)) if (!ptr->cancelDisabled && JOY_NEW(B_BUTTON))
{ {
sub_811D5B0(); sub_811D5B0();
sub_811C718(taskId, sub_811CF88); SetUseItemAnimCallback(taskId, Task_CleanUp);
return; return;
} }
@@ -517,11 +517,11 @@ void sub_811CE4C(u8 taskId)
break; break;
case 1: case 1:
sub_811D2A8(); sub_811D2A8();
sub_811D2EC(7); PSA_PrintMessage(PSA_TEXT_MACHINE_SET);
ptr->state++; ptr->state++;
break; break;
case 2: case 2:
if (!sub_811D4EC()) if (!PSA_IsMessagePrintTaskActive())
{ {
sub_811D2D0(); sub_811D2D0();
ptr->state++; ptr->state++;
@@ -553,12 +553,12 @@ void sub_811CE4C(u8 taskId)
if (ptr->field_009e > 30) if (ptr->field_009e > 30)
{ {
sub_811D2A8(); sub_811D2A8();
sub_811D2EC(9); PSA_PrintMessage(PSA_TEXT_LEARNED_MOVE);
ptr->state++; ptr->state++;
} }
break; break;
case 8: case 8:
if (!sub_811D4EC()) if (!PSA_IsMessagePrintTaskActive())
{ {
PlayFanfare(MUS_FANFA1); PlayFanfare(MUS_FANFA1);
ptr->cancelDisabled = TRUE; ptr->cancelDisabled = TRUE;
@@ -568,37 +568,37 @@ void sub_811CE4C(u8 taskId)
case 9: case 9:
if (IsFanfareTaskInactive()) if (IsFanfareTaskInactive())
{ {
sub_811C718(taskId, sub_811CF88); SetUseItemAnimCallback(taskId, Task_CleanUp);
} }
break; break;
} }
} }
void sub_811CF88(u8 taskId) static void Task_CleanUp(u8 taskId)
{ {
struct PokemonSpecialAnim * ptr = (void *)GetWordTaskArg(taskId, 0); struct PokemonSpecialAnim * ptr = (void *)GetWordTaskArg(taskId, 0);
switch (ptr->state) switch (ptr->state)
{ {
case 0: case 0:
SetVBlankCallback(sub_811C6E8); SetVBlankCallback(VBlankCB_PSA);
BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK); BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK);
ptr->state++; ptr->state++;
break; break;
case 1: case 1:
if (!gPaletteFade.active && (ptr->field_00a4 != 1 || IsCryFinished())) if (!gPaletteFade.active && (ptr->field_00a4 != 1 || IsCryFinished()))
{ {
gUnknown_203B090 = ptr->cancelDisabled; sCancelDisabled = ptr->cancelDisabled;
SetMainCallback2(ptr->savedCallback); SetMainCallback2(ptr->savedCallback);
DestroyTask(taskId); DestroyTask(taskId);
sub_811D29C(); PSA_FreeWindowBuffers();
Free(ptr); Free(ptr);
} }
break; break;
} }
} }
const struct { static const struct {
u16 itemId; u16 itemId;
u16 animType; u16 animType;
} gUnknown_8459634[2] = { } gUnknown_8459634[2] = {
@@ -606,7 +606,7 @@ const struct {
{ITEM_POTION, 1} {ITEM_POTION, 1}
}; };
u16 sub_811D018(u16 itemId) static u16 GetAnimTypeByItemId(u16 itemId)
{ {
int i; int i;
@@ -624,7 +624,7 @@ u16 sub_811D018(u16 itemId)
return 0; return 0;
} }
u8 sub_811D058(u16 friendship) static u8 GetClosenessFromFriendship(u16 friendship)
{ {
if (friendship <= 100) if (friendship <= 100)
return 0; return 0;
@@ -636,63 +636,63 @@ u8 sub_811D058(u16 friendship)
return 3; 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(); sPSAWork = GetPSAStruct();
return &gUnknown_203B098->pokemon; 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[0] = GetMonData(pokemon, MON_DATA_MAX_HP);
data[1] = GetMonData(pokemon, MON_DATA_ATK); 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); data[5] = GetMonData(pokemon, MON_DATA_SPDEF);
} }
bool32 sub_811D178(void) bool32 PSA_IsCancelDisabled(void)
{ {
return gUnknown_203B090; return sCancelDisabled;
} }
File diff suppressed because it is too large Load Diff