summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKDSKardabox <bollygame94@gmail.com>2018-03-12 13:56:20 +0530
committerKDSKardabox <bollygame94@gmail.com>2018-03-12 13:56:20 +0530
commite7cf8e5c1713c624b7b9db7a58c6c812e90ec7a9 (patch)
tree1646afc54b86e4804b0bd903b7ecd2aa70a2836a /src
parent29e51811f411dfeae825e6c0c259ffa3f9ac08b2 (diff)
Start decompile player_pc
Diffstat (limited to 'src')
-rw-r--r--src/decoration.c2
-rw-r--r--src/player_pc.c702
2 files changed, 703 insertions, 1 deletions
diff --git a/src/decoration.c b/src/decoration.c
index e4d867a34..0b1157000 100644
--- a/src/decoration.c
+++ b/src/decoration.c
@@ -562,7 +562,7 @@ void SecretBasePC_Cancel(u8 taskId)
}
else
{
- sub_816B060(taskId);
+ ReshowPlayerPC(taskId);
}
}
diff --git a/src/player_pc.c b/src/player_pc.c
new file mode 100644
index 000000000..aa58f2e32
--- /dev/null
+++ b/src/player_pc.c
@@ -0,0 +1,702 @@
+#include "global.h"
+#include "constants/songs.h"
+#include "decoration.h"
+#include "event_scripts.h"
+#include "field_fadetransition.h"
+#include "field_screen.h"
+#include "field_weather.h"
+#include "international_string_util.h"
+#include "item.h"
+#include "item_menu.h"
+#include "constants/items.h"
+#include "mail.h"
+#include "main.h"
+#include "menu.h"
+#include "menu_helpers.h"
+#include "overworld.h"
+#include "palette.h"
+#include "player_pc.h"
+#include "script.h"
+#include "sound.h"
+#include "string_util.h"
+#include "strings.h"
+#include "task.h"
+#include "window.h"
+
+
+static EWRAM_DATA u8 *gPcItemMenuOptionOrder = NULL;
+
+static EWRAM_DATA u8 gPcItemMenuOptionsNum = 0;
+
+extern struct MailboxStruct gUnknown_0203BCB8;
+
+#define eMailboxInfo gUnknown_0203BCB8
+
+struct Struct203BCC4
+{
+ u8 filler[0x668];
+ u32 unk668;
+ u8 filler2[4];
+
+};
+
+extern struct Struct203BCC4 *gUnknown_0203BCC4;
+
+
+/*static*/void InitPlayerPCMenu(u8 taskId);
+/*static*/void PlayerPCProcessMenuInput(u8 taskId);
+/*static*/void InitItemStorageMenu(u8 taskId, u8 var);
+/*static*/ void ItemStorageMenuPrint(const u8 *);
+/*static*/ void ItemStorageMenuProcessInput(u8 taskId);
+/*
+static void ItemStorage_ProcessInput(u8);
+*/
+/*static*/ void ItemStorage_SetItemAndMailCount(u8);
+/*
+static void ItemStorage_DoItemAction(u8);
+static void ItemStorage_GoBackToPlayerPCMenu(u8);
+static void ItemStorage_HandleQuantityRolling(u8);
+static void ItemStorage_DoItemWithdraw(u8);
+static void ItemStorage_DoItemToss(u8);
+static void ItemStorage_HandleRemoveItem(u8);
+static void ItemStorage_WaitPressHandleResumeProcessInput(u8);
+*/
+/*static*/ void ItemStorage_HandleReturnToProcessInput(u8);
+/*
+static void ItemStorage_HandleResumeProcessInput(u8);
+static void ItemStorage_DoItemSwap(u8, bool8);
+static void ItemStorage_DrawItemList(u8);
+static void ItemStorage_PrintItemPcResponse(u16);
+static void ItemStorage_DrawBothListAndDescription(u8);
+static void ItemStorage_GoBackToItemPCMenu(u8, u8);
+static void ItemStorage_LoadPalette(void);
+*/
+/*static*/ u8 GetMailboxMailCount(void);
+
+/*static*/ void Mailbox_UpdateMailList(void);
+/*static*/ void Mailbox_DrawMailboxMenu(u8);
+/*static*/ void Mailbox_ProcessInput(u8);
+/*
+static void Mailbox_CloseScrollIndicators(void);
+static void Mailbox_PrintWhatToDoWithPlayerMailText(u8);
+static void Mailbox_TurnOff(u8);
+static void Mailbox_PrintMailOptions(u8);
+static void Mailbox_MailOptionsProcessInput(u8);
+static void Mailbox_FadeAndReadMail(u8);
+static void Mailbox_ReturnToFieldFromReadMail(void);
+static void Mailbox_DrawYesNoBeforeMove(u8);
+static void Mailbox_DoGiveMailPokeMenu(u8);
+static void Mailbox_NoPokemonForMail(u8);
+static void Mailbox_Cancel(u8);
+static void Mailbox_DrawMailMenuAndDoProcessInput(u8);
+*/
+/*static*/ void PlayerPC_ItemStorage(u8 taskId);
+/*static*/ void PlayerPC_Mailbox(u8 taskId);
+/*static*/ void PlayerPC_Decoration(u8 var);
+/*static*/ void PlayerPC_TurnOff(u8 taskId);
+/*
+static void ItemStorage_Withdraw(u8);
+static void ItemStorage_Deposit(u8);
+static void ItemStorage_Toss(u8);
+*/
+/*static*/ void ItemStorage_Exit(u8);
+/*
+static void ItemStorage_ResumeInputFromYesToss(u8);
+static void ItemStorage_ResumeInputFromNoToss(u8);
+static void Mailbox_DoMailMoveToBag(u8);
+static void Mailbox_ReturnToInputAfterNo(u8);
+static void Mailbox_DoMailRead(u8);
+static void Mailbox_MoveToBag(u8);
+static void Mailbox_Give(u8);
+static void Mailbox_Cancel(u8);
+*/
+
+extern const u8 *const gPCText_OptionDescList[];
+/*
+static const u8 *const gPCText_OptionDescList[] =
+{
+ PCText_TakeOutItems,
+ PCText_StoreItems,
+ PCText_ThrowAwayItems,
+ gMenuText_GoBackToPrev
+};
+*/
+/*static*/ extern const struct MenuAction sPlayerPCMenuActions[];/* =
+{
+ { SecretBaseText_ItemStorage, PlayerPC_ItemStorage },
+ { gPCText_Mailbox, PlayerPC_Mailbox },
+ { SecretBaseText_Decoration, PlayerPC_Decoration },
+ { SecretBaseText_TurnOff, PlayerPC_TurnOff }
+};
+*/
+/*static*/ extern u8 gBedroomPC_OptionOrder[];/* =
+{
+ PLAYERPC_MENU_ITEMSTORAGE,
+ PLAYERPC_MENU_MAILBOX,
+ PLAYERPC_MENU_DECORATION,
+ PLAYERPC_MENU_TURNOFF
+};
+*/
+/*static*/ extern u8 gPlayerPC_OptionOrder[];/* =
+{
+ PLAYERPC_MENU_ITEMSTORAGE,
+ PLAYERPC_MENU_MAILBOX,
+ PLAYERPC_MENU_TURNOFF
+};
+*/
+extern const struct MenuAction gPCText_ItemPCOptionsText[];
+/*
+static const struct MenuAction2 gPCText_ItemPCOptionsText[] =
+{
+ { PCText_WithdrawItem, ItemStorage_Withdraw },
+ { PCText_DepositItem, ItemStorage_Deposit },
+ { PCText_TossItem, ItemStorage_Toss },
+ { gUnknownText_Exit, ItemStorage_Exit }
+};
+
+static const struct YesNoFuncTable ResumeFromTossYesNoFuncList[] = // ResumeFromTossYesNoFuncList
+{
+ ItemStorage_ResumeInputFromYesToss,
+ ItemStorage_ResumeInputFromNoToss
+};
+
+static const struct YesNoFuncTable ResumeFromWithdrawYesNoFuncList[] = // ResumeFromWithdrawYesNoFuncList
+{
+ Mailbox_DoMailMoveToBag,
+ Mailbox_ReturnToInputAfterNo
+};
+*/
+// the use of this struct is meant to be an ItemSlot struct, but NewGameInitPCItems refuses to match without a weird pointer access.
+/*static*/ extern const struct ItemSlot gNewGamePCItems[];/* =
+{
+ { ITEM_POTION, 1 },
+ { ITEM_NONE, 0 }
+};
+
+static const struct MenuAction2 gMailboxMailOptions[] =
+{
+ { OtherText_Read, Mailbox_DoMailRead },
+ { gOtherText_MoveToBag, Mailbox_MoveToBag },
+ { OtherText_Give, Mailbox_Give },
+ { gOtherText_CancelNoTerminator, Mailbox_Cancel }
+};
+
+static const u8 gNonSelectedItemFormattedText[] = _("{STR_VAR_1}{CLEAR_TO 80}");
+static const u8 gSelectedItemFormattedText[] = _("{COLOR RED}{STR_VAR_1}{CLEAR_TO 80}");
+static const u8 gNonSelectedItemQuantityFormatText[] = _("{STR_VAR_1}");
+static const u8 gSelectedItemQuantityFormatText[] = _("{COLOR RED}{STR_VAR_1}");
+static const u8 gUnknown_08406330[] = _("{CLEAR_TO 32}");
+*/
+
+extern const struct WindowTemplate gUnknown_085DFF24[3];
+
+/*
+extern u8 *gUnknown_02039314;
+extern struct MenuAction gUnknown_08406298[];
+
+extern u8 gUnknown_084062B8[];
+extern u8 gUnknown_084062BC[];
+extern u8 gUnknown_0840632A[];
+extern u8 gUnknown_08406327[];
+extern u8 gUnknown_0840631E[];
+extern u8 gUnknown_08406318[];
+
+extern u8 gUnknown_030007B4;
+extern u8 unk_201FE00[];
+
+extern u8 gUnknown_08152850;
+extern u8 gUnknown_08152C75;
+
+extern u32 gUnknown_08406288[];
+extern const struct MenuAction gUnknown_084062C0[];
+extern const struct YesNoFuncTable gUnknown_084062E0;
+*/
+
+
+void NewGameInitPCItems(void)
+{
+ u8 i;
+
+ // because Game Freak don't know how to use a struct or a 2d array
+ for(i = 0, ClearItemSlots(gSaveBlock1Ptr->pcItems, ARRAY_COUNT(gSaveBlock1Ptr->pcItems)); 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 BedroomPC(void)
+{
+ gPcItemMenuOptionOrder = gBedroomPC_OptionOrder;
+ gPcItemMenuOptionsNum = 4;
+ DisplayItemMessageOnField(CreateTask(TaskDummy, 0), gText_WhatWouldYouLike, InitPlayerPCMenu);
+}
+
+void PlayerPC(void)
+{
+ gPcItemMenuOptionOrder = gPlayerPC_OptionOrder;
+ gPcItemMenuOptionsNum = 3;
+ DisplayItemMessageOnField(CreateTask(TaskDummy, 0), gText_WhatWouldYouLike, InitPlayerPCMenu);
+}
+
+/*static*/ void InitPlayerPCMenu(u8 taskId)
+{
+ u16 *data;
+ struct WindowTemplate windowTemplate;
+
+ data = gTasks[taskId].data;
+ if(gPcItemMenuOptionsNum == 3)
+ windowTemplate = gUnknown_085DFF24[0];
+ else
+ windowTemplate = gUnknown_085DFF24[1];
+ windowTemplate.width = sub_81DB3D8(sPlayerPCMenuActions, gPcItemMenuOptionOrder, gPcItemMenuOptionsNum);
+ data[4] = AddWindow(&windowTemplate);
+ SetStandardWindowBorderStyle(data[4], 0);
+ sub_81995E4(data[4], gPcItemMenuOptionsNum, sPlayerPCMenuActions, gPcItemMenuOptionOrder);
+ InitMenuInUpperLeftCornerPlaySoundWhenAPressed(data[4], gPcItemMenuOptionsNum, 0);
+ schedule_bg_copy_tilemap_to_vram(0);
+ gTasks[taskId].func = PlayerPCProcessMenuInput;
+}
+
+/*static*/ void PlayerPCProcessMenuInput(u8 taskId)
+{
+ u16 *data;
+ s8 inputOptionId;
+
+ data = gTasks[taskId].data;
+ if(gPcItemMenuOptionsNum > 3)
+ inputOptionId = ProcessMenuInput();
+ else
+ inputOptionId = ProcessMenuInputNoWrapAround();
+
+ switch(inputOptionId)
+ {
+ case -2:
+ break;
+ case -1:
+ PlaySE(SE_SELECT);
+ sub_8198070(data[4], FALSE);
+ ClearWindowTilemap(data[4]);
+ RemoveWindow(data[4]);
+ schedule_bg_copy_tilemap_to_vram(0);
+ gTasks[taskId].func = PlayerPC_TurnOff;
+ break;
+ default:
+ sub_8198070(data[4], FALSE);
+ ClearWindowTilemap(data[4]);
+ RemoveWindow(data[4]);
+ schedule_bg_copy_tilemap_to_vram(0);
+ gTasks[taskId].func = sPlayerPCMenuActions[gPcItemMenuOptionOrder[inputOptionId]].func.void_u8;
+ break;
+ }
+}
+
+void ReshowPlayerPC(u8 var)
+{
+ DisplayItemMessageOnField(var, gText_WhatWouldYouLike, InitPlayerPCMenu);
+}
+
+/*static*/ void PlayerPC_ItemStorage(u8 taskId)
+{
+ InitItemStorageMenu(taskId, ITEMPC_MENU_WITHDRAW);
+ gTasks[taskId].func = ItemStorageMenuProcessInput;
+}
+
+bool8 sub_81D1C44(u8);
+
+/*static*/ void PlayerPC_Mailbox(u8 taskId)
+{
+
+ eMailboxInfo.count = GetMailboxMailCount();
+
+ if (eMailboxInfo.count == 0)
+ DisplayItemMessageOnField(taskId, gText_NoMailHere, ReshowPlayerPC);
+ else
+ {
+ eMailboxInfo.cursorPos = 0;
+ eMailboxInfo.itemsAbove = 0;
+ eMailboxInfo.unk6[3] = 0xFF;
+ Mailbox_UpdateMailList();
+ ItemStorage_SetItemAndMailCount(taskId);
+ if(sub_81D1C44(eMailboxInfo.count) == TRUE)
+ {
+ sub_8197434(0, 0);
+ Mailbox_DrawMailboxMenu(taskId);
+ gTasks[taskId].func = Mailbox_ProcessInput;
+ }
+ else
+ DisplayItemMessageOnField(taskId, gText_NoMailHere, ReshowPlayerPC);
+ }
+}
+
+void sub_8126B2C(u8);
+
+/*static*/ void PlayerPC_Decoration(u8 var)
+{
+ sub_8126B2C(var); //DoPlayerPCDecoration(var);
+}
+
+/*static*/ void PlayerPC_TurnOff(u8 taskId)
+{
+ if (gPcItemMenuOptionsNum == 4) // if the option count is 4, we are at the bedroom PC and not player PC, so do gender specific handling.
+ {
+ if (gSaveBlock2Ptr->playerGender == MALE)
+ ScriptContext1_SetupScript(LittlerootTown_BrendansHouse_2F_EventScript_1F863F);
+ else
+ ScriptContext1_SetupScript(LittlerootTown_MaysHouse_2F_EventScript_1F958F);
+ }
+ else
+ {
+ EnableBothScriptContexts();
+ }
+ DestroyTask(taskId);
+}
+
+void ItemStorageMenuPrint(const u8*);
+
+void InitItemStorageMenu(u8 taskId, u8 var)
+{
+ u16 *data;
+ struct WindowTemplate windowTemplate;
+
+ data = gTasks[taskId].data;
+ windowTemplate = gUnknown_085DFF24[2];
+ windowTemplate.width = GetMaxWidthInMenuTable(gPCText_ItemPCOptionsText, 4);
+ data[4] = AddWindow(&windowTemplate);
+ SetStandardWindowBorderStyle(data[4], 0);
+ PrintMenuTable(data[4], 4, gPCText_ItemPCOptionsText);
+ InitMenuInUpperLeftCornerPlaySoundWhenAPressed(data[4], 4, var);
+ schedule_bg_copy_tilemap_to_vram(0);
+ ItemStorageMenuPrint(gPCText_OptionDescList[var]);
+}
+
+/*static*/ void ItemStorageMenuPrint(const u8 *textPtr)
+{
+ NewMenuHelpers_DrawDialogueFrame(0, 0);
+ PrintTextOnWindow(0, 1, textPtr, 0, 1, 0, 0);
+}
+
+/*static*/ void ItemStorageMenuProcessInput(u8 var)
+{
+ s8 r5;
+ s8 r2;
+ s8 inputOptionId;
+
+ r5 = GetMenuCursorPos();
+ inputOptionId = ProcessMenuInput();
+ r2 = GetMenuCursorPos();
+ switch(inputOptionId)
+ {
+ case -2:
+ if (r5 != r2)
+ ItemStorageMenuPrint(gPCText_OptionDescList[r2]);
+ break;
+ case -1:
+ PlaySE(SE_SELECT);
+ ItemStorage_Exit(var);
+ break;
+ default:
+ PlaySE(SE_SELECT);
+ gPCText_ItemPCOptionsText[inputOptionId].func.void_u8(var);
+ break;
+ }
+}
+
+void Task_ItemStorage_Deposit(u8 taskId);
+/*static*/ void ItemStorage_Deposit(u8 taskId)
+{
+ gTasks[taskId].func = Task_ItemStorage_Deposit;
+ FadeScreen(1, 0);
+}
+
+/*static*/ void Task_ItemStorage_Deposit(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ overworld_free_bg_tilemaps();
+ sub_81AAC14();
+ DestroyTask(taskId);
+ }
+}
+
+void mapldr_080EBC0C(void);
+
+void (*gFieldCallback)(void);
+void sub_816B31C(void)
+{
+ gFieldCallback = mapldr_080EBC0C;
+ SetMainCallback2(CB2_ReturnToField);
+}
+
+void mapldr_080EBC0C(void)
+{
+ sub_81973A4();
+ NewMenuHelpers_DrawDialogueFrame(0, 1);
+ InitItemStorageMenu(CreateTask(ItemStorage_HandleReturnToProcessInput, 0), 1);
+ pal_fill_black();
+}
+
+/*static*/ void ItemStorage_HandleReturnToProcessInput(u8 taskId)
+{
+ if (sub_80ABDFC() == TRUE)
+ gTasks[taskId].func = ItemStorageMenuProcessInput;
+}
+
+u8 sub_80D6CE4(); //count of items
+void sub_816B4DC(u8 taskId);
+void sub_816B430(u8 taskId, bool8 toss);
+extern const u8 gText_NoItems[];
+
+/*static*/ void ItemStorage_Withdraw(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ NUM_ITEMS = sub_80D6CE4();
+
+ if (NUM_ITEMS != 0)
+ sub_816B430(taskId, FALSE);
+ else
+ {
+ sub_816B4DC(taskId);
+ DisplayItemMessageOnField(taskId, gText_NoItems, PlayerPC_ItemStorage);
+ }
+
+}
+
+/*static*/ void ItemStorage_Toss(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ NUM_ITEMS = sub_80D6CE4();
+ if (NUM_ITEMS != 0)
+ sub_816B430(taskId, TRUE);
+ else
+ {
+ sub_816B4DC(taskId);
+ DisplayItemMessageOnField(taskId, gText_NoItems, PlayerPC_ItemStorage);
+ }
+}
+
+void sub_816BC14(void);
+void gpu_pal_allocator_reset__manage_upper_four(void);
+void sub_816C158(u8 taskId);
+
+/*static*/ void sub_816B430(u8 taskId, bool8 toss)
+{
+ u16 *data = gTasks[taskId].data;
+
+ data[3] = toss;
+ sub_816B4DC(taskId);
+ eMailboxInfo.cursorPos = 0;
+ eMailboxInfo.itemsAbove = 0;
+ eMailboxInfo.unk6[3] = 0xFF;
+ ItemStorage_SetItemAndMailCount(taskId);
+ sub_816BC14();
+ gpu_pal_allocator_reset__manage_upper_four();
+ LoadListMenuArrowsGfx();
+ sub_8122344(&(gUnknown_0203BCC4->unk668), 7);
+ sub_8197434(0,0);
+ gTasks[taskId].func = sub_816C158;
+}
+
+
+
+/*static*/ void ItemStorage_Exit(u8 taskId)
+{
+ sub_816B4DC(taskId);
+ ReshowPlayerPC(taskId);
+}
+
+
+/*static*/ void ItemStorage_SetItemAndMailCount(u8 taskId)
+{
+ if (eMailboxInfo.count > 7)
+ eMailboxInfo.pageItems = 8;
+ else
+ eMailboxInfo.pageItems = eMailboxInfo.count + 1;
+}
+
+/*static*/ void sub_816B4DC(u8 taskId)
+{
+ u16 *data = gTasks[taskId].data;
+
+ sub_8198070(data[4], FALSE);
+ ClearWindowTilemap(data[4]);
+ RemoveWindow(data[4]);
+ schedule_bg_copy_tilemap_to_vram(0);
+}
+
+/*static*/ u8 GetMailboxMailCount(void)
+{
+ u8 i, j;
+
+ for(i = 0, j = 6; j < 16; j++)
+ if(gSaveBlock1Ptr->mail[j].itemId != 0)
+ i++;
+
+ return i;
+}
+
+/*static*/ void Mailbox_UpdateMailList(void)
+{
+ struct MailStruct mailBuffer;
+ u8 i, j;
+
+ for (i=6; i<15; i++)
+ {
+ for (j=i+1; j<16; j++)
+ {
+ if (gSaveBlock1Ptr->mail[i].itemId == 0)
+ {
+ mailBuffer = gSaveBlock1Ptr->mail[i];
+ gSaveBlock1Ptr->mail[i] = gSaveBlock1Ptr->mail[j];
+ gSaveBlock1Ptr->mail[j] = mailBuffer;
+ }
+ }
+ }
+}
+
+extern const u8 gText_Mailbox[];
+u8 sub_81D1C84(u8);
+u8 sub_81D1DC0(struct MailboxStruct *);
+void sub_81D1E90(struct MailboxStruct *);
+
+
+/*static*/ void Mailbox_DrawMailboxMenu(u8 taskId)
+{
+ u8 windowId;
+
+ windowId = sub_81D1C84(0);
+ sub_81D1C84(1);
+ PrintTextOnWindow(windowId, 1, gText_Mailbox, GetStringCenterAlignXOffset(1, gText_Mailbox, 0x40), 1, 0, NULL);
+ schedule_bg_copy_tilemap_to_vram(0);
+ gTasks[taskId].data[5] = sub_81D1DC0(&eMailboxInfo);
+ sub_81D1E90(&eMailboxInfo);
+}
+
+u32 ListMenuHandleInputGetItemId(u8);
+void sub_81AE860(u8, void *, void *);
+void sub_81AE6C8(u8, void *, void *);
+void sub_816B798(u8);
+void RemoveScrollIndicatorArrowPair(u8);
+void sub_81D1D04(u8);
+void sub_816B730(u8);
+
+/*static*/ void Mailbox_ProcessInput(u8 taskId)
+{
+ u16 *data = gTasks[taskId].data;
+ s32 inputOptionId;
+
+ if(!gPaletteFade.active)
+ {
+ inputOptionId = ListMenuHandleInputGetItemId(data[5]);
+ sub_81AE860(data[5], &(eMailboxInfo.itemsAbove), &eMailboxInfo);
+
+ switch(inputOptionId)
+ {
+ case -1:
+ break;
+ case -2:
+ PlaySE(SE_SELECT);
+ RemoveScrollIndicatorArrowPair(eMailboxInfo.unk6[3]);
+ sub_816B798(taskId);
+ break;
+ default:
+ PlaySE(SE_SELECT);
+ sub_81D1D04(0);
+ sub_81D1D04(1);
+ sub_81AE6C8(data[5], &(eMailboxInfo.itemsAbove), &eMailboxInfo);
+ schedule_bg_copy_tilemap_to_vram(0);
+ RemoveScrollIndicatorArrowPair(eMailboxInfo.unk6[3]);
+ gTasks[taskId].func = sub_816B730;
+ break;
+ }
+ }
+}
+
+void sub_81DB554(u8 *, u8);
+void sub_816B7DC(u8);
+extern const u8 gText_WhatToDoWithVar1sMail[];
+
+/*static*/ void sub_816B730(u8 taskId)//Mailbox_PrintWhatToDoWithPlayerMailText(u8 taskId)
+{
+ StringCopy(gStringVar1, gSaveBlock1Ptr->mail[eMailboxInfo.itemsAbove + 6 + eMailboxInfo.cursorPos].playerName);
+ sub_81DB554(gStringVar1, 0);
+ StringExpandPlaceholders(gStringVar4, gText_WhatToDoWithVar1sMail);
+ DisplayItemMessageOnField(taskId, gStringVar4, sub_816B7DC);
+}
+
+void sub_81D1EC0(void);
+
+/*static*/ void sub_816B798(u8 taskId)//Mailbox_ReturnToPlayerPC(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ sub_81D1D04(0);
+ sub_81D1D04(1);
+ sub_81AE6C8(data[5], NULL, NULL);
+ schedule_bg_copy_tilemap_to_vram(0);
+ sub_81D1EC0();
+ ReshowPlayerPC(taskId);
+}
+
+extern const struct MenuAction gUnknown_085DFF04[];
+
+void sub_816B82C(u8 taskId);
+
+void sub_816B7DC(u8 taskId)
+{
+ u8 r4 = sub_81D1C84(2);
+ PrintMenuTable(r4, 4, gUnknown_085DFF04);
+ InitMenuInUpperLeftCornerPlaySoundWhenAPressed(r4, 4, 0);
+ schedule_bg_copy_tilemap_to_vram(0);
+ gTasks[taskId].func = sub_816B82C;
+}
+
+void sub_816BBD4(u8 taskId);
+
+void sub_816B82C(u8 taskId)
+{
+ s8 inputOptionId = ProcessMenuInput_other();
+
+ switch(inputOptionId)
+ {
+ case -2:
+ break;
+ case -1:
+ PlaySE(SE_SELECT);
+ sub_816BBD4(taskId);
+ break;
+ default:
+ PlaySE(SE_SELECT);
+ gUnknown_085DFF04[inputOptionId].func.void_u8(taskId);
+ break;
+ }
+}
+
+void sub_816B8A4(u8 taskId);
+
+void sub_816B878(u8 taskId)
+{
+ FadeScreen(1, 0);
+ gTasks[taskId].func = sub_816B8A4;
+}
+
+void sub_816B900();
+
+void sub_816B8A4(u8 taskId)
+{
+ if(!gPaletteFade.active)
+ {
+ sub_81D1EC0();
+ overworld_free_bg_tilemaps();
+ ReadMail(&(gSaveBlock1Ptr->mail[eMailboxInfo.itemsAbove + 6 + eMailboxInfo.cursorPos]), sub_816B900, TRUE);
+ DestroyTask(taskId);
+ }
+}
+
+void pal_fill_for_maplights_or_black();
+
+void sub_816B900()
+{
+ gFieldCallback = pal_fill_for_maplights_or_black;
+ SetMainCallback2(CB2_ReturnToField);
+}
+