Decompile player_pc
This commit is contained in:
+741
@@ -0,0 +1,741 @@
|
||||
#include "global.h"
|
||||
#include "palette.h"
|
||||
#include "item.h"
|
||||
#include "task.h"
|
||||
#include "menu_indicators.h"
|
||||
#include "new_menu_helpers.h"
|
||||
#include "strings.h"
|
||||
#include "menu.h"
|
||||
#include "mail.h"
|
||||
#include "mail_data.h"
|
||||
#include "help_system.h"
|
||||
#include "sound.h"
|
||||
#include "overworld.h"
|
||||
#include "script.h"
|
||||
#include "mailbox_pc.h"
|
||||
#include "player_pc.h"
|
||||
#include "field_weather.h"
|
||||
#include "event_scripts.h"
|
||||
#include "field_fadetransition.h"
|
||||
#include "string_util.h"
|
||||
#include "item_menu.h"
|
||||
#include "item_pc.h"
|
||||
#include "party_menu.h"
|
||||
#include "constants/items.h"
|
||||
#include "constants/songs.h"
|
||||
|
||||
#define PC_ITEM_ID 0
|
||||
#define PC_QUANTITY 1
|
||||
#define NEW_GAME_PC_ITEMS(i, type) ((u16)((u16 *)gNewGamePCItems + type)[i * 2])
|
||||
|
||||
#define tCount data[2]
|
||||
#define tPageItems data[4]
|
||||
#define tItemPcParam data[6]
|
||||
#define tWindowId data[10]
|
||||
#define tListMenuTaskId data[11]
|
||||
|
||||
static EWRAM_DATA const u8 *sItemOrder = NULL;
|
||||
static EWRAM_DATA u8 sTopMenuItemCount = 0;
|
||||
EWRAM_DATA struct PlayerPCItemPageStruct gPlayerPcMenuManager = {};
|
||||
|
||||
#define SELECTED_MAIL (gSaveBlock1Ptr->mail[PC_MAIL_NUM(gPlayerPcMenuManager.scrollOffset) + gPlayerPcMenuManager.selectedRow])
|
||||
|
||||
static void Task_DrawPlayerPcTopMenu(u8 taskId);
|
||||
static void Task_TopMenuHandleInput(u8 taskId);
|
||||
static void Task_PlayerPcItemStorage(u8 taskId);
|
||||
static void Task_PlayerPcMailbox(u8 taskId);
|
||||
static void Task_PlayerPcTurnOff(u8 taskId);
|
||||
static void Task_CreateItemStorageSubmenu(u8 taskId, u8 cursorPos);
|
||||
static void PrintStringOnWindow0WithDialogueFrame(const u8 *str);
|
||||
static void Task_TopMenu_ItemStorageSubmenu_HandleInput(u8 taskId);
|
||||
static void Task_PlayerPcDepositItem(u8 taskId);
|
||||
static void Task_DepositItem_WaitFadeAndGoToBag(u8 taskId);
|
||||
static void CB2_ReturnFromDepositMenu(void);
|
||||
static void Task_PlayerPcWithdrawItem(u8 taskId);
|
||||
static void CB2_ReturnFromWithdrawMenu(void);
|
||||
static void Task_WithdrawItemBeginFade(u8 taskId);
|
||||
static void Task_PlayerPcCancel(u8 taskId);
|
||||
static void Tsak_SetPageItemVars(u8 taskId);
|
||||
static u8 CountPCMail(void);
|
||||
static void PCMailCompaction(void);
|
||||
static void Task_DrawMailboxPcMenu(u8 taskId);
|
||||
static void Task_MailboxPcHandleInput(u8 taskId);
|
||||
static void Task_PrintWhatToDoWithSelectedMail(u8 taskId);
|
||||
static void Task_DestroyMailboxPcViewAndCancel(u8 taskId);
|
||||
static void Task_DrawMailSubmenu(u8 taskId);
|
||||
static void Task_MailSubmenuHandleInput(u8 taskId);
|
||||
static void Task_PlayerPcReadMail(u8 taskId);
|
||||
static void Task_WaitFadeAndReadSelectedMail(u8 taskId);
|
||||
static void CB2_SetCbToReturnToMailbox(void);
|
||||
static void Task_PlayerPcMoveMailToBag(u8 taskId);
|
||||
static void Task_DrawYesNoMenuToConfirmMoveToBag(u8 taskId);
|
||||
static void Task_MoveToBagYesNoMenuHandleInput(u8 taskId);
|
||||
static void Task_TryPutMailInBag_DestroyMsgIfSuccessful(u8 taskId);
|
||||
static void Task_DeclinedMoveMailToBag(u8 taskId);
|
||||
static void Task_PlayerPcGiveMailToMon(u8 taskId);
|
||||
static void Task_WaitFadeAndGoToPartyMenu(u8 taskId);
|
||||
static void Task_Error_NoPokemon(u8 taskId);
|
||||
static void Task_PlayerPcExitMailSubmenu(u8 taskId);
|
||||
|
||||
static const u8 *const sItemStorageActionDescriptionPtrs[] = {
|
||||
gText_TakeOutItemsFromThePC,
|
||||
gText_StoreItemsInThePC,
|
||||
gText_GoBackToThePreviousMenu
|
||||
};
|
||||
|
||||
static const struct MenuAction sMenuActions_TopMenu[] = {
|
||||
{gText_ItemStorage, Task_PlayerPcItemStorage},
|
||||
{gText_Mailbox, Task_PlayerPcMailbox},
|
||||
{gText_TurnOff, Task_PlayerPcTurnOff}
|
||||
};
|
||||
|
||||
static const u8 gUnknown_8402200[] = { 0, 1, 2 };
|
||||
static const u8 gUnknown_8402203[] = { 0, 1, 2 };
|
||||
|
||||
static const struct MenuAction sMenuActions_ItemPc[] = {
|
||||
{gText_WithdrawItem2, Task_PlayerPcWithdrawItem},
|
||||
{gText_DepositItem2, Task_PlayerPcDepositItem},
|
||||
{gFameCheckerText_Cancel, Task_PlayerPcCancel}
|
||||
};
|
||||
|
||||
static const struct ItemSlot gNewGamePCItems[] = {
|
||||
{ ITEM_POTION, 1 },
|
||||
{ ITEM_NONE, 0 }
|
||||
};
|
||||
|
||||
static const struct MenuAction sMenuActions_MailSubmenu[] = {
|
||||
{gOtherText_Read, Task_PlayerPcReadMail},
|
||||
{gOtherText_MoveToBag, Task_PlayerPcMoveMailToBag},
|
||||
{gOtherText_Give2, Task_PlayerPcGiveMailToMon},
|
||||
{gOtherText_Exit, Task_PlayerPcExitMailSubmenu}
|
||||
};
|
||||
|
||||
static const struct WindowTemplate sWindowTemplate_TopMenu_3Items = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 1,
|
||||
.tilemapTop = 1,
|
||||
.width = 13,
|
||||
.height = 6,
|
||||
.paletteNum = 15,
|
||||
.baseBlock = 0x008
|
||||
};
|
||||
|
||||
static const struct WindowTemplate sWindowTemplate_TopMenu_4Items = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 1,
|
||||
.tilemapTop = 1,
|
||||
.width = 13,
|
||||
.height = 8,
|
||||
.paletteNum = 15,
|
||||
.baseBlock = 0x008
|
||||
};
|
||||
|
||||
static const struct WindowTemplate sWindowTemplate_ItemStorageSubmenu = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 1,
|
||||
.tilemapTop = 1,
|
||||
.width = 14,
|
||||
.height = 6,
|
||||
.paletteNum = 15,
|
||||
.baseBlock = 0x008
|
||||
};
|
||||
|
||||
void NewGameInitPCItems(void)
|
||||
{
|
||||
u8 i;
|
||||
|
||||
for (i = 0, ClearPCItemSlots(); NEW_GAME_PC_ITEMS(i, PC_ITEM_ID) && NEW_GAME_PC_ITEMS(i, PC_QUANTITY) &&
|
||||
AddPCItem(NEW_GAME_PC_ITEMS(i, PC_ITEM_ID), NEW_GAME_PC_ITEMS(i, PC_QUANTITY)) == TRUE; i++)
|
||||
;
|
||||
}
|
||||
|
||||
void sub_80EB6AC(void)
|
||||
{
|
||||
u8 taskId;
|
||||
|
||||
gPlayerPcMenuManager.unk_9 = 0;
|
||||
sub_812B234();
|
||||
sItemOrder = gUnknown_8402200;
|
||||
sTopMenuItemCount = 3;
|
||||
taskId = CreateTask(TaskDummy, 0);
|
||||
DisplayItemMessageOnField(taskId, 2, gText_WhatWouldYouLikeToDo, Task_DrawPlayerPcTopMenu);
|
||||
}
|
||||
|
||||
void sub_80EB6FC(void)
|
||||
{
|
||||
u8 taskId;
|
||||
|
||||
gPlayerPcMenuManager.unk_9 = 1;
|
||||
sub_812B234();
|
||||
sItemOrder = gUnknown_8402203;
|
||||
sTopMenuItemCount = 3;
|
||||
taskId = CreateTask(TaskDummy, 0);
|
||||
DisplayItemMessageOnField(taskId, 2, gText_WhatWouldYouLikeToDo, Task_DrawPlayerPcTopMenu);
|
||||
}
|
||||
|
||||
static void Task_DrawPlayerPcTopMenu(u8 taskId)
|
||||
{
|
||||
s16 *data = gTasks[taskId].data;
|
||||
if (sTopMenuItemCount == 3)
|
||||
tWindowId = AddWindow(&sWindowTemplate_TopMenu_3Items);
|
||||
else
|
||||
tWindowId = AddWindow(&sWindowTemplate_TopMenu_4Items);
|
||||
SetStdWindowBorderStyle(tWindowId, 0);
|
||||
AddItemMenuActionTextPrinters(tWindowId, 2, GetMenuCursorDimensionByFont(2, 0), 2, GetFontAttribute(2, FONTATTR_LETTER_SPACING), 16, sTopMenuItemCount, sMenuActions_TopMenu, sItemOrder);
|
||||
Menu_InitCursor(tWindowId, 2, 0, 2, 16, sTopMenuItemCount, 0);
|
||||
ScheduleBgCopyTilemapToVram(0);
|
||||
gTasks[taskId].func = Task_TopMenuHandleInput;
|
||||
}
|
||||
|
||||
static void Task_TopMenuHandleInput(u8 taskId)
|
||||
{
|
||||
s16 *data = gTasks[taskId].data;
|
||||
s8 input = Menu_ProcessInputNoWrapAround();
|
||||
switch (input)
|
||||
{
|
||||
case -2:
|
||||
break;
|
||||
case -1:
|
||||
PlaySE(SE_SELECT);
|
||||
ClearStdWindowAndFrameToTransparent(tWindowId, FALSE);
|
||||
ClearWindowTilemap(tWindowId);
|
||||
RemoveWindow(tWindowId);
|
||||
ScheduleBgCopyTilemapToVram(0);
|
||||
gTasks[taskId].func = Task_PlayerPcTurnOff;
|
||||
break;
|
||||
default:
|
||||
ClearStdWindowAndFrameToTransparent(tWindowId, FALSE);
|
||||
ClearWindowTilemap(tWindowId);
|
||||
RemoveWindow(tWindowId);
|
||||
ScheduleBgCopyTilemapToVram(0);
|
||||
gTasks[taskId].func = sMenuActions_TopMenu[sItemOrder[input]].func.void_u8;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void Task_ReturnToTopMenu(u8 taskId)
|
||||
{
|
||||
sub_812B248();
|
||||
DisplayItemMessageOnField(taskId, 2, gText_WhatWouldYouLikeToDo, Task_DrawPlayerPcTopMenu);
|
||||
}
|
||||
|
||||
static void Task_PlayerPcItemStorage(u8 taskId)
|
||||
{
|
||||
Task_CreateItemStorageSubmenu(taskId, FALSE);
|
||||
gTasks[taskId].func = Task_TopMenu_ItemStorageSubmenu_HandleInput;
|
||||
}
|
||||
|
||||
static void Task_PlayerPcMailbox(u8 taskId)
|
||||
{
|
||||
gPlayerPcMenuManager.count = CountPCMail();
|
||||
if (gPlayerPcMenuManager.count == 0)
|
||||
{
|
||||
DisplayItemMessageOnField(taskId, 2, gText_TheresNoMailHere, Task_ReturnToTopMenu);
|
||||
}
|
||||
else
|
||||
{
|
||||
gPlayerPcMenuManager.selectedRow = 0;
|
||||
gPlayerPcMenuManager.scrollOffset = 0;
|
||||
PCMailCompaction();
|
||||
Tsak_SetPageItemVars(taskId);
|
||||
if (gPlayerPcMenuManager.unk_9 == 0)
|
||||
HelpSystem_SetSomeVariable2(34);
|
||||
else
|
||||
HelpSystem_SetSomeVariable2(30);
|
||||
if (MailboxPC_InitBuffers(gPlayerPcMenuManager.count) == TRUE)
|
||||
{
|
||||
ClearDialogWindowAndFrame(0, FALSE);
|
||||
Task_DrawMailboxPcMenu(taskId);
|
||||
gTasks[taskId].func = Task_MailboxPcHandleInput;
|
||||
}
|
||||
else
|
||||
{
|
||||
DisplayItemMessageOnField(taskId, 2, gText_TheresNoMailHere, Task_ReturnToTopMenu);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void Task_PlayerPcTurnOff(u8 taskId)
|
||||
{
|
||||
if (gPlayerPcMenuManager.unk_9 == 0)
|
||||
ScriptContext1_SetupScript(EventScript_PalletTown_PlayersHouse_2F_ShutDownPC);
|
||||
else
|
||||
EnableBothScriptContexts();
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
|
||||
static void Task_CreateItemStorageSubmenu(u8 taskId, u8 cursorPos)
|
||||
{
|
||||
s16 *data = gTasks[taskId].data;
|
||||
if (gPlayerPcMenuManager.unk_9 == 0)
|
||||
HelpSystem_SetSomeVariable2(33);
|
||||
else
|
||||
HelpSystem_SetSomeVariable2(29);
|
||||
tWindowId = AddWindow(&sWindowTemplate_ItemStorageSubmenu);
|
||||
SetStdWindowBorderStyle(tWindowId, FALSE);
|
||||
PrintTextArray(tWindowId, 2, GetMenuCursorDimensionByFont(2, 0), 2, 16, 3, sMenuActions_ItemPc);
|
||||
Menu_InitCursor(tWindowId, 2, 0, 2, 16, 3, cursorPos);
|
||||
ScheduleBgCopyTilemapToVram(0);
|
||||
PrintStringOnWindow0WithDialogueFrame(sItemStorageActionDescriptionPtrs[cursorPos]);
|
||||
}
|
||||
|
||||
static void PrintStringOnWindow0WithDialogueFrame(const u8 *str)
|
||||
{
|
||||
DrawDialogueFrame(0, FALSE);
|
||||
AddTextPrinterParameterized(0, 2, str, 0, 1, 0, NULL);
|
||||
}
|
||||
|
||||
static void Task_TopMenu_ItemStorageSubmenu_HandleInput(u8 taskId)
|
||||
{
|
||||
if (JOY_REPT(DPAD_UP))
|
||||
{
|
||||
if (Menu_GetCursorPos() != 0)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
Menu_MoveCursor(-1);
|
||||
PrintStringOnWindow0WithDialogueFrame(sItemStorageActionDescriptionPtrs[Menu_GetCursorPos()]);
|
||||
}
|
||||
}
|
||||
else if (JOY_REPT(DPAD_DOWN))
|
||||
{
|
||||
if (Menu_GetCursorPos() != 2)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
Menu_MoveCursor(+1);
|
||||
PrintStringOnWindow0WithDialogueFrame(sItemStorageActionDescriptionPtrs[Menu_GetCursorPos()]);
|
||||
}
|
||||
}
|
||||
else if (JOY_NEW(A_BUTTON))
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
sMenuActions_ItemPc[Menu_GetCursorPos()].func.void_u8(taskId);
|
||||
}
|
||||
else if (JOY_NEW(B_BUTTON))
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
sMenuActions_ItemPc[2].func.void_u8(taskId);
|
||||
}
|
||||
}
|
||||
|
||||
static void Task_DepositItem_WaitFadeAndGoToBag(u8 taskId)
|
||||
{
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
CleanupOverworldWindowsAndTilemaps();
|
||||
sub_8107DB4(3, POCKET_ITEMS - 1, CB2_ReturnToField);
|
||||
gFieldCallback = CB2_ReturnFromDepositMenu;
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
}
|
||||
|
||||
static void Task_PlayerPcDepositItem(u8 taskId)
|
||||
{
|
||||
gTasks[taskId].func = Task_DepositItem_WaitFadeAndGoToBag;
|
||||
fade_screen(1, 0);
|
||||
}
|
||||
|
||||
static void Task_ReturnToItemStorageSubmenu(u8 taskId)
|
||||
{
|
||||
if (field_weather_is_fade_finished() == TRUE)
|
||||
gTasks[taskId].func = Task_TopMenu_ItemStorageSubmenu_HandleInput;
|
||||
}
|
||||
|
||||
static void CB2_ReturnFromDepositMenu(void)
|
||||
{
|
||||
u8 taskId;
|
||||
sub_80F6E9C();
|
||||
DrawDialogueFrame(0, TRUE);
|
||||
taskId = CreateTask(Task_ReturnToItemStorageSubmenu, 0);
|
||||
Task_CreateItemStorageSubmenu(taskId, 1);
|
||||
sub_807DC00();
|
||||
}
|
||||
|
||||
static void Task_PlayerPcWithdrawItem(u8 taskId)
|
||||
{
|
||||
s16 *data = gTasks[taskId].data;
|
||||
tCount = CountItemsInPC();
|
||||
if (tCount != 0)
|
||||
{
|
||||
tItemPcParam = 0;
|
||||
gTasks[taskId].func = Task_WithdrawItemBeginFade;
|
||||
gFieldCallback = CB2_ReturnFromWithdrawMenu;
|
||||
}
|
||||
else
|
||||
{
|
||||
ClearStdWindowAndFrameToTransparent(tWindowId, FALSE);
|
||||
ClearWindowTilemap(tWindowId);
|
||||
RemoveWindow(tWindowId);
|
||||
DisplayItemMessageOnField(taskId, 2, gText_ThereAreNoItems, Task_PlayerPcItemStorage);
|
||||
}
|
||||
}
|
||||
|
||||
static void CB2_ReturnFromWithdrawMenu(void)
|
||||
{
|
||||
u8 taskId;
|
||||
sub_80F6E9C();
|
||||
DrawDialogueFrame(0, TRUE);
|
||||
taskId = CreateTask(Task_ReturnToItemStorageSubmenu, 0);
|
||||
Task_CreateItemStorageSubmenu(taskId, 0);
|
||||
sub_807DC00();
|
||||
}
|
||||
|
||||
static void Task_WithdrawItem_WaitFadeAndGoToItemStorage(u8 taskId)
|
||||
{
|
||||
s16 *data = gTasks[taskId].data;
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
CleanupOverworldWindowsAndTilemaps();
|
||||
ItemPc_Init(tItemPcParam, CB2_ReturnToField);
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
}
|
||||
|
||||
static void Task_WithdrawItemBeginFade(u8 taskId)
|
||||
{
|
||||
gTasks[taskId].func = Task_WithdrawItem_WaitFadeAndGoToItemStorage;
|
||||
ItemPc_SetInitializedFlag(0);
|
||||
fade_screen(1, 0);
|
||||
}
|
||||
|
||||
static void Task_PlayerPcCancel(u8 taskId)
|
||||
{
|
||||
s16 *data = gTasks[taskId].data;
|
||||
ClearStdWindowAndFrameToTransparent(tWindowId, FALSE);
|
||||
ClearWindowTilemap(tWindowId);
|
||||
CopyWindowToVram(tWindowId, 1);
|
||||
RemoveWindow(tWindowId);
|
||||
Task_ReturnToTopMenu(taskId);
|
||||
}
|
||||
|
||||
static void Tsak_SetPageItemVars(u8 taskId)
|
||||
{
|
||||
s16 *data = gTasks[taskId].data;
|
||||
if (tCount >= 8)
|
||||
tPageItems = 8;
|
||||
else
|
||||
tPageItems = tCount + 1;
|
||||
if (gPlayerPcMenuManager.count >= 8)
|
||||
gPlayerPcMenuManager.pageItems = 8;
|
||||
else
|
||||
gPlayerPcMenuManager.pageItems = gPlayerPcMenuManager.count + 1;
|
||||
}
|
||||
|
||||
static u8 CountPCMail(void)
|
||||
{
|
||||
u8 count = 0;
|
||||
u8 i;
|
||||
|
||||
for (i = PC_MAIL_NUM(0); i < MAIL_COUNT; i++)
|
||||
{
|
||||
if (gSaveBlock1Ptr->mail[i].itemId != ITEM_NONE)
|
||||
count++;
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
static void PCMailCompaction(void)
|
||||
{
|
||||
u8 i;
|
||||
u8 j;
|
||||
for (i = PC_MAIL_NUM(0); i < MAIL_COUNT - 1; i++)
|
||||
{
|
||||
for (j = i + 1; j < MAIL_COUNT; j++)
|
||||
{
|
||||
if (gSaveBlock1Ptr->mail[i].itemId == ITEM_NONE)
|
||||
{
|
||||
struct MailStruct mail = gSaveBlock1Ptr->mail[i];
|
||||
gSaveBlock1Ptr->mail[i] = gSaveBlock1Ptr->mail[j];
|
||||
gSaveBlock1Ptr->mail[j] = mail;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void Task_DrawMailboxPcMenu(u8 taskId)
|
||||
{
|
||||
u8 windowId = MailboxPC_GetAddWindow(0);
|
||||
s32 width = GetStringWidth(2, gText_Mailbox, 0);
|
||||
MailboxPC_GetAddWindow(1);
|
||||
AddTextPrinterParameterized(windowId, 2, gText_Mailbox, (80 - width) / 2, 2, 0, NULL);
|
||||
ScheduleBgCopyTilemapToVram(0);
|
||||
gTasks[taskId].tListMenuTaskId = MailboxPC_InitListMenu(&gPlayerPcMenuManager);
|
||||
MailboxPC_AddScrollIndicatorArrows(&gPlayerPcMenuManager);
|
||||
}
|
||||
|
||||
static void Task_MailboxPcHandleInput(u8 taskId)
|
||||
{
|
||||
s16 *data = gTasks[taskId].data;
|
||||
s32 input;
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
input = ListMenu_ProcessInput(tListMenuTaskId);
|
||||
ListMenuGetScrollAndRow(tListMenuTaskId, &gPlayerPcMenuManager.scrollOffset, &gPlayerPcMenuManager.selectedRow);
|
||||
switch (input)
|
||||
{
|
||||
case -1:
|
||||
break;
|
||||
case -2:
|
||||
PlaySE(SE_SELECT);
|
||||
RemoveScrollIndicatorArrowPair(gPlayerPcMenuManager.scrollIndicatorId);
|
||||
Task_DestroyMailboxPcViewAndCancel(taskId);
|
||||
break;
|
||||
default:
|
||||
PlaySE(SE_SELECT);
|
||||
MailboxPC_RemoveWindow(0);
|
||||
MailboxPC_RemoveWindow(1);
|
||||
DestroyListMenuTask(tListMenuTaskId, &gPlayerPcMenuManager.scrollOffset, &gPlayerPcMenuManager.selectedRow);
|
||||
ScheduleBgCopyTilemapToVram(0);
|
||||
RemoveScrollIndicatorArrowPair(gPlayerPcMenuManager.scrollIndicatorId);
|
||||
gTasks[taskId].func = Task_PrintWhatToDoWithSelectedMail;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void Task_PrintWhatToDoWithSelectedMail(u8 taskId)
|
||||
{
|
||||
s32 length;
|
||||
s32 i;
|
||||
u8 *ptr;
|
||||
StringCopy(gStringVar1, SELECTED_MAIL.playerName);
|
||||
length = StringLength(gStringVar1);
|
||||
if (length > 5)
|
||||
{
|
||||
for (ptr = gStringVar1 + length - 1; ptr >= gStringVar1; ptr--)
|
||||
{
|
||||
if (*ptr)
|
||||
break;
|
||||
*ptr = EOS;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ConvertInternationalString(gStringVar1, LANGUAGE_JAPANESE);
|
||||
}
|
||||
StringExpandPlaceholders(gStringVar4, gText_WhatWouldYouLikeToDoWithPlayersMail);
|
||||
DisplayItemMessageOnField(taskId, 2, gStringVar4, Task_DrawMailSubmenu);
|
||||
}
|
||||
|
||||
static void Task_DestroyMailboxPcViewAndCancel(u8 taskId)
|
||||
{
|
||||
s16 *data = gTasks[taskId].data;
|
||||
MailboxPC_RemoveWindow(0);
|
||||
MailboxPC_RemoveWindow(1);
|
||||
DestroyListMenuTask(tListMenuTaskId, NULL, NULL);
|
||||
ScheduleBgCopyTilemapToVram(0);
|
||||
MailboxPC_DestroyListMenuBuffer();
|
||||
Task_ReturnToTopMenu(taskId);
|
||||
}
|
||||
|
||||
static void Task_DrawMailSubmenu(u8 taskId)
|
||||
{
|
||||
u8 windowId = MailboxPC_GetAddWindow(2);
|
||||
PrintTextArray(windowId, 2, GetMenuCursorDimensionByFont(2, 0), 2, 16, 4, sMenuActions_MailSubmenu);
|
||||
Menu_InitCursor(windowId, 2, 0, 2, 16, 4, 0);
|
||||
ScheduleBgCopyTilemapToVram(0);
|
||||
gTasks[taskId].func = Task_MailSubmenuHandleInput;
|
||||
}
|
||||
|
||||
static void Task_MailSubmenuHandleInput(u8 taskId)
|
||||
{
|
||||
s8 input = Menu_ProcessInput_other();
|
||||
switch (input)
|
||||
{
|
||||
case -1:
|
||||
PlaySE(SE_SELECT);
|
||||
Task_PlayerPcExitMailSubmenu(taskId);
|
||||
break;
|
||||
case -2:
|
||||
break;
|
||||
default:
|
||||
PlaySE(SE_SELECT);
|
||||
sMenuActions_MailSubmenu[input].func.void_u8(taskId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void Task_PlayerPcReadMail(u8 taskId)
|
||||
{
|
||||
fade_screen(1, 0);
|
||||
gTasks[taskId].func = Task_WaitFadeAndReadSelectedMail;
|
||||
}
|
||||
|
||||
static void Task_WaitFadeAndReadSelectedMail(u8 taskId)
|
||||
{
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
MailboxPC_DestroyListMenuBuffer();
|
||||
CleanupOverworldWindowsAndTilemaps();
|
||||
sub_80BEBEC(&SELECTED_MAIL, CB2_SetCbToReturnToMailbox, 1);
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
}
|
||||
|
||||
static void Task_WaitFadeAndReturnToMailboxPcInputHandler(u8 taskId)
|
||||
{
|
||||
if (field_weather_is_fade_finished() == TRUE)
|
||||
gTasks[taskId].func = Task_MailboxPcHandleInput;
|
||||
}
|
||||
|
||||
static void CB2_ReturnToMailbox(void)
|
||||
{
|
||||
u8 taskId;
|
||||
if (gPlayerPcMenuManager.unk_9 == 0)
|
||||
HelpSystem_SetSomeVariable2(34);
|
||||
else
|
||||
HelpSystem_SetSomeVariable2(30);
|
||||
sub_80F6E9C();
|
||||
taskId = CreateTask(Task_WaitFadeAndReturnToMailboxPcInputHandler, 0);
|
||||
if (MailboxPC_InitBuffers(gPlayerPcMenuManager.count) == TRUE)
|
||||
Task_DrawMailboxPcMenu(taskId);
|
||||
else
|
||||
DestroyTask(taskId);
|
||||
sub_807DC00();
|
||||
}
|
||||
|
||||
static void CB2_SetCbToReturnToMailbox(void)
|
||||
{
|
||||
gFieldCallback = CB2_ReturnToMailbox;
|
||||
SetMainCallback2(CB2_ReturnToField);
|
||||
}
|
||||
|
||||
static void Task_PlayerPcMoveMailToBag(u8 taskId)
|
||||
{
|
||||
DisplayItemMessageOnField(taskId, 2, gText_MessageWillBeLost, Task_DrawYesNoMenuToConfirmMoveToBag);
|
||||
}
|
||||
|
||||
static void Task_DrawYesNoMenuToConfirmMoveToBag(u8 taskId)
|
||||
{
|
||||
DisplayYesNoMenuDefaultYes();
|
||||
gTasks[taskId].func = Task_MoveToBagYesNoMenuHandleInput;
|
||||
}
|
||||
|
||||
static void Task_MoveToBagYesNoMenuHandleInput(u8 taskId)
|
||||
{
|
||||
switch (Menu_ProcessInputNoWrapClearOnChoose())
|
||||
{
|
||||
case -2:
|
||||
break;
|
||||
case 0:
|
||||
Task_TryPutMailInBag_DestroyMsgIfSuccessful(taskId);
|
||||
break;
|
||||
case -1:
|
||||
PlaySE(SE_SELECT);
|
||||
// fallthrough
|
||||
case 1:
|
||||
Task_DeclinedMoveMailToBag(taskId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void Task_TryPutMailInBag_DestroyMsgIfSuccessful(u8 taskId)
|
||||
{
|
||||
struct MailStruct * mail = &SELECTED_MAIL;
|
||||
if (!AddBagItem(mail->itemId, 1))
|
||||
{
|
||||
DisplayItemMessageOnField(taskId, 2, gText_BagIsFull, Task_PlayerPcExitMailSubmenu);
|
||||
}
|
||||
else
|
||||
{
|
||||
DisplayItemMessageOnField(taskId, 2, gText_MailReturnedToBagMessageErased, Task_PlayerPcExitMailSubmenu);
|
||||
ClearMailStruct(mail);
|
||||
PCMailCompaction();
|
||||
gPlayerPcMenuManager.count--;
|
||||
if (gPlayerPcMenuManager.count < gPlayerPcMenuManager.pageItems + gPlayerPcMenuManager.scrollOffset)
|
||||
{
|
||||
if (gPlayerPcMenuManager.scrollOffset != 0)
|
||||
gPlayerPcMenuManager.scrollOffset--;
|
||||
}
|
||||
Tsak_SetPageItemVars(taskId);
|
||||
}
|
||||
}
|
||||
|
||||
static void Task_DeclinedMoveMailToBag(u8 taskId)
|
||||
{
|
||||
Task_PlayerPcExitMailSubmenu(taskId);
|
||||
}
|
||||
|
||||
static void Task_PlayerPcGiveMailToMon(u8 taskId)
|
||||
{
|
||||
if (CalculatePlayerPartyCount() == 0)
|
||||
{
|
||||
Task_Error_NoPokemon(taskId);
|
||||
}
|
||||
else
|
||||
{
|
||||
fade_screen(1, 0);
|
||||
gTasks[taskId].func = Task_WaitFadeAndGoToPartyMenu;
|
||||
}
|
||||
}
|
||||
|
||||
static void Task_WaitFadeAndGoToPartyMenu(u8 taskId)
|
||||
{
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
MailboxPC_DestroyListMenuBuffer();
|
||||
CleanupOverworldWindowsAndTilemaps();
|
||||
PartyMenuInit_FromPlayerPc();
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
}
|
||||
|
||||
static void CB2_ReturnToMailboxPc_UpdateScrollVariables(void)
|
||||
{
|
||||
u8 taskId;
|
||||
u8 count;
|
||||
if (gPlayerPcMenuManager.unk_9 == 0)
|
||||
HelpSystem_SetSomeVariable2(34);
|
||||
else
|
||||
HelpSystem_SetSomeVariable2(30);
|
||||
taskId = CreateTask(Task_WaitFadeAndReturnToMailboxPcInputHandler, 0);
|
||||
count = gPlayerPcMenuManager.count;
|
||||
gPlayerPcMenuManager.count = CountPCMail();
|
||||
PCMailCompaction();
|
||||
if (count != gPlayerPcMenuManager.count)
|
||||
{
|
||||
if (gPlayerPcMenuManager.count < gPlayerPcMenuManager.pageItems + gPlayerPcMenuManager.scrollOffset)
|
||||
{
|
||||
if (gPlayerPcMenuManager.scrollOffset != 0)
|
||||
gPlayerPcMenuManager.scrollOffset--;
|
||||
}
|
||||
}
|
||||
Tsak_SetPageItemVars(taskId);
|
||||
sub_80F6E9C();
|
||||
if (MailboxPC_InitBuffers(gPlayerPcMenuManager.count) == TRUE)
|
||||
Task_DrawMailboxPcMenu(taskId);
|
||||
else
|
||||
DestroyTask(taskId);
|
||||
sub_807DC00();
|
||||
}
|
||||
|
||||
void CB2_PlayerPC_ReturnFromPartyMenu(void)
|
||||
{
|
||||
gFieldCallback = CB2_ReturnToMailboxPc_UpdateScrollVariables;
|
||||
SetMainCallback2(CB2_ReturnToField);
|
||||
}
|
||||
|
||||
static void Task_Error_NoPokemon(u8 taskId)
|
||||
{
|
||||
DisplayItemMessageOnField(taskId, 2, gText_ThereIsNoPokemon, Task_PlayerPcExitMailSubmenu);
|
||||
}
|
||||
|
||||
static void Task_RedrawPlayerPcMailboxAndSetUpInputHandler(u8 taskId)
|
||||
{
|
||||
ClearDialogWindowAndFrame(0, FALSE);
|
||||
Task_DrawMailboxPcMenu(taskId);
|
||||
ScheduleBgCopyTilemapToVram(0);
|
||||
gTasks[taskId].func = Task_MailboxPcHandleInput;
|
||||
}
|
||||
|
||||
static void Task_PlayerPcExitMailSubmenu(u8 taskId)
|
||||
{
|
||||
MailboxPC_RemoveWindow(2);
|
||||
ScheduleBgCopyTilemapToVram(0);
|
||||
gTasks[taskId].func = Task_RedrawPlayerPcMailboxAndSetUpInputHandler;
|
||||
}
|
||||
|
||||
#undef tListMenuTaskId
|
||||
#undef tWindowId
|
||||
#undef tItemPcParam
|
||||
#undef tPageItems
|
||||
#undef tCount
|
||||
Reference in New Issue
Block a user