From e7cf8e5c1713c624b7b9db7a58c6c812e90ec7a9 Mon Sep 17 00:00:00 2001 From: KDSKardabox Date: Mon, 12 Mar 2018 13:56:20 +0530 Subject: Start decompile player_pc --- src/decoration.c | 2 +- src/player_pc.c | 702 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 703 insertions(+), 1 deletion(-) create mode 100644 src/player_pc.c (limited to 'src') 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); +} + -- cgit v1.2.3 From f3b5ed0d121126ee05ab33700c0de40a0da77966 Mon Sep 17 00:00:00 2001 From: KDSKardabox Date: Tue, 13 Mar 2018 14:41:39 +0530 Subject: Decompile more functions & rename some labels --- src/player_pc.c | 510 +++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 316 insertions(+), 194 deletions(-) (limited to 'src') diff --git a/src/player_pc.c b/src/player_pc.c index aa58f2e32..538556efd 100644 --- a/src/player_pc.c +++ b/src/player_pc.c @@ -9,8 +9,10 @@ #include "item.h" #include "item_menu.h" #include "constants/items.h" +#include "list_menu.h" #include "mail.h" #include "main.h" +#include "malloc.h" #include "menu.h" #include "menu_helpers.h" #include "overworld.h" @@ -23,6 +25,21 @@ #include "task.h" #include "window.h" +struct Struct203BCC4 +{ + struct ListMenuItem unk0[51]; + //u8 filler[0x118]; + u8 unk198[51][0x18]; + //u8 filler2[0x348]; + u8 unk660[6]; + u8 unk666; + s8 unk667; + u32 unk668; + u8 filler3[4]; + +}; + +extern struct Struct203BCC4 *gUnknown_0203BCC4; static EWRAM_DATA u8 *gPcItemMenuOptionOrder = NULL; @@ -32,185 +49,45 @@ 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 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_ProcessInput(u8 taskId); /*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_DoItemWithdraw(u8); +/*static*/ void ItemStorage_DoItemToss(u8); +/*static*/ void ItemStorage_WithdrawToss_Helper(u8 taskId, bool8 toss); + /*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 Mailbox_PrintWhatToDoWithPlayerMailText(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*/ void ItemStorage_Exit(u8); -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 u8 *const gPCText_OptionDescList[]; +/*static*/ extern const struct ItemSlot gNewGamePCItems[]; +/*static*/ extern const struct MenuAction gPCText_ItemPCOptionsText[]; +/*static*/ extern const struct MenuAction gMailboxMailOptions[]; +/*static*/ extern const struct MenuAction sPlayerPCMenuActions[]; +/*static*/ extern u8 gBedroomPC_OptionOrder[]; +/*static*/ extern u8 gPlayerPC_OptionOrder[]; 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) @@ -441,7 +318,7 @@ void mapldr_080EBC0C(void) 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) @@ -451,7 +328,7 @@ extern const u8 gText_NoItems[]; NUM_ITEMS = sub_80D6CE4(); if (NUM_ITEMS != 0) - sub_816B430(taskId, FALSE); + ItemStorage_WithdrawToss_Helper(taskId, FALSE); else { sub_816B4DC(taskId); @@ -466,7 +343,7 @@ extern const u8 gText_NoItems[]; NUM_ITEMS = sub_80D6CE4(); if (NUM_ITEMS != 0) - sub_816B430(taskId, TRUE); + ItemStorage_WithdrawToss_Helper(taskId, TRUE); else { sub_816B4DC(taskId); @@ -476,9 +353,9 @@ extern const u8 gText_NoItems[]; 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) + +/*static*/ void ItemStorage_WithdrawToss_Helper(u8 taskId, bool8 toss) { u16 *data = gTasks[taskId].data; @@ -493,7 +370,7 @@ void sub_816C158(u8 taskId); LoadListMenuArrowsGfx(); sub_8122344(&(gUnknown_0203BCC4->unk668), 7); sub_8197434(0,0); - gTasks[taskId].func = sub_816C158; + gTasks[taskId].func = ItemStorage_ProcessInput; } @@ -571,13 +448,11 @@ void sub_81D1E90(struct MailboxStruct *); sub_81D1E90(&eMailboxInfo); } -u32 ListMenuHandleInputGetItemId(u8); -void sub_81AE860(u8, void *, void *); -void sub_81AE6C8(u8, void *, void *); -void sub_816B798(u8); + +void Mailbox_ReturnToPlayerPC(u8); void RemoveScrollIndicatorArrowPair(u8); void sub_81D1D04(u8); -void sub_816B730(u8); + /*static*/ void Mailbox_ProcessInput(u8 taskId) { @@ -587,7 +462,7 @@ void sub_816B730(u8); if(!gPaletteFade.active) { inputOptionId = ListMenuHandleInputGetItemId(data[5]); - sub_81AE860(data[5], &(eMailboxInfo.itemsAbove), &eMailboxInfo); + sub_81AE860(data[5], &(eMailboxInfo.itemsAbove), &(eMailboxInfo.cursorPos)); switch(inputOptionId) { @@ -596,36 +471,36 @@ void sub_816B730(u8); case -2: PlaySE(SE_SELECT); RemoveScrollIndicatorArrowPair(eMailboxInfo.unk6[3]); - sub_816B798(taskId); + Mailbox_ReturnToPlayerPC(taskId); break; default: PlaySE(SE_SELECT); sub_81D1D04(0); sub_81D1D04(1); - sub_81AE6C8(data[5], &(eMailboxInfo.itemsAbove), &eMailboxInfo); + sub_81AE6C8(data[5], &(eMailboxInfo.itemsAbove), &(eMailboxInfo.cursorPos)); schedule_bg_copy_tilemap_to_vram(0); RemoveScrollIndicatorArrowPair(eMailboxInfo.unk6[3]); - gTasks[taskId].func = sub_816B730; + gTasks[taskId].func = Mailbox_PrintWhatToDoWithPlayerMailText; break; } } } void sub_81DB554(u8 *, u8); -void sub_816B7DC(u8); +void Mailbox_PrintMailOptions(u8); extern const u8 gText_WhatToDoWithVar1sMail[]; -/*static*/ void sub_816B730(u8 taskId)//Mailbox_PrintWhatToDoWithPlayerMailText(u8 taskId) +/*static*/ void Mailbox_PrintWhatToDoWithPlayerMailText(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); + DisplayItemMessageOnField(taskId, gStringVar4, Mailbox_PrintMailOptions); } void sub_81D1EC0(void); -/*static*/ void sub_816B798(u8 taskId)//Mailbox_ReturnToPlayerPC(u8 taskId) +/*static*/ void Mailbox_ReturnToPlayerPC(u8 taskId) { s16 *data = gTasks[taskId].data; @@ -637,22 +512,22 @@ void sub_81D1EC0(void); ReshowPlayerPC(taskId); } -extern const struct MenuAction gUnknown_085DFF04[]; +extern const struct MenuAction gMailboxMailOptions[]; -void sub_816B82C(u8 taskId); +void Mailbox_MailOptionsProcessInput(u8 taskId); -void sub_816B7DC(u8 taskId) +void Mailbox_PrintMailOptions(u8 taskId) { u8 r4 = sub_81D1C84(2); - PrintMenuTable(r4, 4, gUnknown_085DFF04); + PrintMenuTable(r4, 4, gMailboxMailOptions); InitMenuInUpperLeftCornerPlaySoundWhenAPressed(r4, 4, 0); schedule_bg_copy_tilemap_to_vram(0); - gTasks[taskId].func = sub_816B82C; + gTasks[taskId].func = Mailbox_MailOptionsProcessInput; } -void sub_816BBD4(u8 taskId); +void Mailbox_Cancel(u8 taskId); -void sub_816B82C(u8 taskId) +void Mailbox_MailOptionsProcessInput(u8 taskId) { s8 inputOptionId = ProcessMenuInput_other(); @@ -662,41 +537,288 @@ void sub_816B82C(u8 taskId) break; case -1: PlaySE(SE_SELECT); - sub_816BBD4(taskId); + Mailbox_Cancel(taskId); break; default: PlaySE(SE_SELECT); - gUnknown_085DFF04[inputOptionId].func.void_u8(taskId); + gMailboxMailOptions[inputOptionId].func.void_u8(taskId); break; } } -void sub_816B8A4(u8 taskId); +void Mailbox_FadeAndReadMail(u8 taskId); -void sub_816B878(u8 taskId) +void Mailbox_DoMailRead(u8 taskId) { FadeScreen(1, 0); - gTasks[taskId].func = sub_816B8A4; + gTasks[taskId].func = Mailbox_FadeAndReadMail; } -void sub_816B900(); +void Mailbox_ReturnToFieldFromReadMail(); -void sub_816B8A4(u8 taskId) +void Mailbox_FadeAndReadMail(u8 taskId) { if(!gPaletteFade.active) { sub_81D1EC0(); overworld_free_bg_tilemaps(); - ReadMail(&(gSaveBlock1Ptr->mail[eMailboxInfo.itemsAbove + 6 + eMailboxInfo.cursorPos]), sub_816B900, TRUE); + ReadMail(&(gSaveBlock1Ptr->mail[eMailboxInfo.itemsAbove + 6 + eMailboxInfo.cursorPos]), Mailbox_ReturnToFieldFromReadMail, TRUE); DestroyTask(taskId); } } void pal_fill_for_maplights_or_black(); -void sub_816B900() +void Mailbox_ReturnToFieldFromReadMail() { gFieldCallback = pal_fill_for_maplights_or_black; SetMainCallback2(CB2_ReturnToField); } +void Mailbox_HandleReturnToProcessInput(u8 taskId); + +void pal_fill_for_maplights_or_black() +{ + u8 taskId; + + sub_81973A4(); + taskId = CreateTask(Mailbox_HandleReturnToProcessInput, 0); + if(sub_81D1C44(eMailboxInfo.count) == TRUE) + Mailbox_DrawMailboxMenu(taskId); + else + DestroyTask(taskId); + pal_fill_black(); +} + +void Mailbox_HandleReturnToProcessInput(u8 taskId) +{ + if(sub_80ABDFC() == TRUE) + gTasks[taskId].func = Mailbox_ProcessInput; +} + +extern const u8 gText_MessageWillBeLost[]; + +void Mailbox_DrawYesNoBeforeMove(u8 taskId); + +void Mailbox_MoveToBag(u8 taskId) +{ + DisplayItemMessageOnField(taskId, gText_MessageWillBeLost, Mailbox_DrawYesNoBeforeMove); +} + +void Mailbox_DoMailMoveToBag(u8 taskId); +void Mailbox_CancelMoveToBag(u8 taskId); +void Mailbox_MoveToBagYesNoPrompt(u8 taskId); + +void Mailbox_DrawYesNoBeforeMove(u8 taskId) +{ + sub_8197930(); + gTasks[taskId].func = Mailbox_MoveToBagYesNoPrompt; +} + +void Mailbox_MoveToBagYesNoPrompt(u8 taskId) +{ + switch(ProcessMenuInputNoWrap_()) + { + case 0: + Mailbox_DoMailMoveToBag(taskId); + break; + case -1: + PlaySE(SE_SELECT); + case 1: + Mailbox_CancelMoveToBag(taskId); + break; + case -2: + default: + break; + } +} + +extern const u8 gText_BagIsFull[]; +extern const u8 gText_MailToBagMessageErased[]; + +void Mailbox_DoMailMoveToBag(u8 taskId) +{ + struct MailStruct *mailStruct = &(gSaveBlock1Ptr->mail[eMailboxInfo.itemsAbove + 6 + eMailboxInfo.cursorPos]); + if(!AddBagItem(mailStruct->itemId, 1)) + { + DisplayItemMessageOnField(taskId, gText_BagIsFull, Mailbox_Cancel); + } + else + { + DisplayItemMessageOnField(taskId, gText_MailToBagMessageErased, Mailbox_Cancel); + ClearMailStruct(mailStruct); + Mailbox_UpdateMailList(); + eMailboxInfo.count--; + if(eMailboxInfo.count < (eMailboxInfo.pageItems + eMailboxInfo.itemsAbove) && eMailboxInfo.itemsAbove != 0) + eMailboxInfo.itemsAbove--; + ItemStorage_SetItemAndMailCount(taskId); + } +} + +void Mailbox_CancelMoveToBag(u8 taskId) +{ + Mailbox_Cancel(taskId); +} + +void Mailbox_DoGiveMailPokeMenu(u8 taskId); +void Mailbox_NoPokemonForMail(u8 taskId); + +void Mailbox_Give(u8 taskId) +{ + if(CalculatePlayerPartyCount() == 0) + Mailbox_NoPokemonForMail(taskId); + else + { + FadeScreen(1, 0); + gTasks[taskId].func = Mailbox_DoGiveMailPokeMenu; + } +} + +void sub_81B8448(); + +void Mailbox_DoGiveMailPokeMenu(u8 taskId) +{ + if(!gPaletteFade.active) + { + sub_81D1EC0(); + overworld_free_bg_tilemaps(); + sub_81B8448(); + DestroyTask(taskId); + } +} + +void Mailbox_UpdateMailListAfterDeposit(void); + +void Mailbox_ReturnToMailListAfterDeposit(void) +{ + gFieldCallback = Mailbox_UpdateMailListAfterDeposit; + SetMainCallback2(CB2_ReturnToField); +} + +void Mailbox_UpdateMailListAfterDeposit(void) +{ + u8 taskId; + u8 prevCount; + taskId = CreateTask(Mailbox_HandleReturnToProcessInput, 0); + prevCount = eMailboxInfo.count; + eMailboxInfo.count = GetMailboxMailCount(); + Mailbox_UpdateMailList(); + if(prevCount != eMailboxInfo.count && (eMailboxInfo.count < (eMailboxInfo.pageItems + eMailboxInfo.itemsAbove)) + && eMailboxInfo.itemsAbove != 0) + eMailboxInfo.itemsAbove--; + ItemStorage_SetItemAndMailCount(taskId); + sub_81973A4(); + if(sub_81D1C44(eMailboxInfo.count) == TRUE) + Mailbox_DrawMailboxMenu(taskId); + else + DestroyTask(taskId); + pal_fill_black(); +} + +void Mailbox_NoPokemonForMail(u8 taskId) +{ + DisplayItemMessageOnField(taskId, gText_NoPokemon, Mailbox_Cancel); +} + +void Mailbox_Cancel(u8 taskId) +{ + sub_81D1D04(2); + sub_8197434(0, 0); + Mailbox_DrawMailboxMenu(taskId); + schedule_bg_copy_tilemap_to_vram(0); + gTasks[taskId].func = Mailbox_ProcessInput; +} + +void sub_816BC14(void) +{ + gUnknown_0203BCC4 = AllocZeroed(sizeof(struct Struct203BCC4)); + memset(gUnknown_0203BCC4->unk660, 0xFF, 0x6); + gUnknown_0203BCC4->unk666 = 0xFF; + gUnknown_0203BCC4->unk667 = -1; +} + +void sub_816BCC4(u8); + +void sub_816BC58(void) +{ + u32 i; + + for(i = 0; i < 6; i++) + sub_816BCC4(i); + Free(gUnknown_0203BCC4); +} + +extern const struct WindowTemplate gUnknown_085DFF5C[6]; + +u8 sub_816BC7C(u8 a) +{ + u8 *windowIdLoc = &(gUnknown_0203BCC4->unk660[a]); + if(*windowIdLoc == 0xFF) + { + *windowIdLoc = AddWindow(&gUnknown_085DFF5C[a]); + SetWindowBorderStyle(*windowIdLoc, FALSE, 0x214, 0xE); + schedule_bg_copy_tilemap_to_vram(0); + } + return *windowIdLoc; +} + +void sub_816BCC4(u8 a) +{ + u8 *windowIdLoc = &(gUnknown_0203BCC4->unk660[a]); + if(*windowIdLoc != 0xFF) + { + sub_8198070(*windowIdLoc, FALSE); + ClearWindowTilemap(*windowIdLoc); + schedule_bg_copy_tilemap_to_vram(0); + RemoveWindow(*windowIdLoc); + *windowIdLoc = 0xFF; + } +} + +void sub_816BDC8(u8 *string, u16 itemId); + +extern struct ListMenuTemplate gUnknown_085DFF44; + +void sub_816BD04(void) +{ + u16 i; + + for(i = 0; i < eMailboxInfo.count - 1; i++) + { + sub_816BDC8(&(gUnknown_0203BCC4->unk198[i][0]), gSaveBlock1Ptr->pcItems[i].itemId); + gUnknown_0203BCC4->unk0[i].name = &(gUnknown_0203BCC4->unk198[i][0]); + gUnknown_0203BCC4->unk0[i].id = i; + } + StringCopy(&(gUnknown_0203BCC4->unk198[i][0]) ,gText_Cancel2); + gUnknown_0203BCC4->unk0[i].name = &(gUnknown_0203BCC4->unk198[i][0]); + gUnknown_0203BCC4->unk0[i].id = -2; + gMultiuseListMenuTemplate = gUnknown_085DFF44; + gMultiuseListMenuTemplate.unk_10 = sub_816BC7C(0); + gMultiuseListMenuTemplate.totalItems = eMailboxInfo.count; + gMultiuseListMenuTemplate.items = gUnknown_0203BCC4->unk0; + gMultiuseListMenuTemplate.maxShowed = eMailboxInfo.pageItems; +} + +void sub_816BDC8(u8 *string, u16 itemId) +{ + CopyItemName(itemId, string); +} + +void sub_816C0C8(); +void sub_816C060(u16 itemId); +void sub_816BEF0(s32 id); + +void sub_816BDDC(s32 id, bool8 b) +{ + if(b != TRUE) + PlaySE(SE_SELECT); + if(gUnknown_0203BCC4->unk666 == 0xFF) + { + sub_816C0C8(); + if(id != -2) + sub_816C060(gSaveBlock1Ptr->pcItems[id].itemId); + else + sub_816C060(0xFFFF); + sub_816BEF0(id); + } +} -- cgit v1.2.3 From 1f7fb45d0f84bc0a9b66b00b3918e1a16702bda2 Mon Sep 17 00:00:00 2001 From: KDSKardabox Date: Thu, 15 Mar 2018 16:07:24 +0530 Subject: Decompile more functions --- src/player_pc.c | 375 ++++++++++++++++++++++++++++++++++++++++++++++++-------- src/pokeblock.c | 2 +- 2 files changed, 327 insertions(+), 50 deletions(-) (limited to 'src') diff --git a/src/player_pc.c b/src/player_pc.c index 538556efd..f9fb7f6da 100644 --- a/src/player_pc.c +++ b/src/player_pc.c @@ -1,5 +1,6 @@ #include "global.h" #include "constants/songs.h" +#include "bg.h" #include "decoration.h" #include "event_scripts.h" #include "field_fadetransition.h" @@ -7,6 +8,7 @@ #include "field_weather.h" #include "international_string_util.h" #include "item.h" +#include "item_icon.h" #include "item_menu.h" #include "constants/items.h" #include "list_menu.h" @@ -15,11 +17,13 @@ #include "malloc.h" #include "menu.h" #include "menu_helpers.h" +#include "menu_indicators.h" #include "overworld.h" #include "palette.h" #include "player_pc.h" #include "script.h" #include "sound.h" +#include "sprite.h" #include "string_util.h" #include "strings.h" #include "task.h" @@ -31,11 +35,10 @@ struct Struct203BCC4 //u8 filler[0x118]; u8 unk198[51][0x18]; //u8 filler2[0x348]; - u8 unk660[6]; + u8 windowIds[6]; u8 unk666; - s8 unk667; - u32 unk668; - u8 filler3[4]; + u8 spriteId; + u8 spriteIds[7]; }; @@ -45,9 +48,9 @@ static EWRAM_DATA u8 *gPcItemMenuOptionOrder = NULL; static EWRAM_DATA u8 gPcItemMenuOptionsNum = 0; -extern struct MailboxStruct gUnknown_0203BCB8; +extern struct PlayerPCItemPageStruct gUnknown_0203BCB8; -#define eMailboxInfo gUnknown_0203BCB8 +#define playerPCItemPageInfo gUnknown_0203BCB8 /*static*/ void InitPlayerPCMenu(u8 taskId); @@ -181,18 +184,18 @@ bool8 sub_81D1C44(u8); /*static*/ void PlayerPC_Mailbox(u8 taskId) { - eMailboxInfo.count = GetMailboxMailCount(); + playerPCItemPageInfo.count = GetMailboxMailCount(); - if (eMailboxInfo.count == 0) + if (playerPCItemPageInfo.count == 0) DisplayItemMessageOnField(taskId, gText_NoMailHere, ReshowPlayerPC); else { - eMailboxInfo.cursorPos = 0; - eMailboxInfo.itemsAbove = 0; - eMailboxInfo.unk6[3] = 0xFF; + playerPCItemPageInfo.cursorPos = 0; + playerPCItemPageInfo.itemsAbove = 0; + playerPCItemPageInfo.scrollIndicatorId = 0xFF; Mailbox_UpdateMailList(); ItemStorage_SetItemAndMailCount(taskId); - if(sub_81D1C44(eMailboxInfo.count) == TRUE) + if(sub_81D1C44(playerPCItemPageInfo.count) == TRUE) { sub_8197434(0, 0); Mailbox_DrawMailboxMenu(taskId); @@ -361,14 +364,14 @@ void gpu_pal_allocator_reset__manage_upper_four(void); data[3] = toss; sub_816B4DC(taskId); - eMailboxInfo.cursorPos = 0; - eMailboxInfo.itemsAbove = 0; - eMailboxInfo.unk6[3] = 0xFF; + playerPCItemPageInfo.cursorPos = 0; + playerPCItemPageInfo.itemsAbove = 0; + playerPCItemPageInfo.scrollIndicatorId = 0xFF; ItemStorage_SetItemAndMailCount(taskId); sub_816BC14(); gpu_pal_allocator_reset__manage_upper_four(); LoadListMenuArrowsGfx(); - sub_8122344(&(gUnknown_0203BCC4->unk668), 7); + sub_8122344(gUnknown_0203BCC4->spriteIds, 7); sub_8197434(0,0); gTasks[taskId].func = ItemStorage_ProcessInput; } @@ -384,10 +387,10 @@ void gpu_pal_allocator_reset__manage_upper_four(void); /*static*/ void ItemStorage_SetItemAndMailCount(u8 taskId) { - if (eMailboxInfo.count > 7) - eMailboxInfo.pageItems = 8; + if (playerPCItemPageInfo.count > 7) + playerPCItemPageInfo.pageItems = 8; else - eMailboxInfo.pageItems = eMailboxInfo.count + 1; + playerPCItemPageInfo.pageItems = playerPCItemPageInfo.count + 1; } /*static*/ void sub_816B4DC(u8 taskId) @@ -432,8 +435,8 @@ void gpu_pal_allocator_reset__manage_upper_four(void); extern const u8 gText_Mailbox[]; u8 sub_81D1C84(u8); -u8 sub_81D1DC0(struct MailboxStruct *); -void sub_81D1E90(struct MailboxStruct *); +u8 sub_81D1DC0(struct PlayerPCItemPageStruct *); +void sub_81D1E90(struct PlayerPCItemPageStruct *); /*static*/ void Mailbox_DrawMailboxMenu(u8 taskId) @@ -444,8 +447,8 @@ void sub_81D1E90(struct MailboxStruct *); 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); + gTasks[taskId].data[5] = sub_81D1DC0(&playerPCItemPageInfo); + sub_81D1E90(&playerPCItemPageInfo); } @@ -462,7 +465,7 @@ void sub_81D1D04(u8); if(!gPaletteFade.active) { inputOptionId = ListMenuHandleInputGetItemId(data[5]); - sub_81AE860(data[5], &(eMailboxInfo.itemsAbove), &(eMailboxInfo.cursorPos)); + sub_81AE860(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos)); switch(inputOptionId) { @@ -470,16 +473,16 @@ void sub_81D1D04(u8); break; case -2: PlaySE(SE_SELECT); - RemoveScrollIndicatorArrowPair(eMailboxInfo.unk6[3]); + RemoveScrollIndicatorArrowPair(playerPCItemPageInfo.scrollIndicatorId); Mailbox_ReturnToPlayerPC(taskId); break; default: PlaySE(SE_SELECT); sub_81D1D04(0); sub_81D1D04(1); - sub_81AE6C8(data[5], &(eMailboxInfo.itemsAbove), &(eMailboxInfo.cursorPos)); + sub_81AE6C8(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos)); schedule_bg_copy_tilemap_to_vram(0); - RemoveScrollIndicatorArrowPair(eMailboxInfo.unk6[3]); + RemoveScrollIndicatorArrowPair(playerPCItemPageInfo.scrollIndicatorId); gTasks[taskId].func = Mailbox_PrintWhatToDoWithPlayerMailText; break; } @@ -492,7 +495,7 @@ extern const u8 gText_WhatToDoWithVar1sMail[]; /*static*/ void Mailbox_PrintWhatToDoWithPlayerMailText(u8 taskId)//Mailbox_PrintWhatToDoWithPlayerMailText(u8 taskId) { - StringCopy(gStringVar1, gSaveBlock1Ptr->mail[eMailboxInfo.itemsAbove + 6 + eMailboxInfo.cursorPos].playerName); + StringCopy(gStringVar1, gSaveBlock1Ptr->mail[playerPCItemPageInfo.itemsAbove + 6 + playerPCItemPageInfo.cursorPos].playerName); sub_81DB554(gStringVar1, 0); StringExpandPlaceholders(gStringVar4, gText_WhatToDoWithVar1sMail); DisplayItemMessageOnField(taskId, gStringVar4, Mailbox_PrintMailOptions); @@ -562,7 +565,7 @@ void Mailbox_FadeAndReadMail(u8 taskId) { sub_81D1EC0(); overworld_free_bg_tilemaps(); - ReadMail(&(gSaveBlock1Ptr->mail[eMailboxInfo.itemsAbove + 6 + eMailboxInfo.cursorPos]), Mailbox_ReturnToFieldFromReadMail, TRUE); + ReadMail(&(gSaveBlock1Ptr->mail[playerPCItemPageInfo.itemsAbove + 6 + playerPCItemPageInfo.cursorPos]), Mailbox_ReturnToFieldFromReadMail, TRUE); DestroyTask(taskId); } } @@ -583,7 +586,7 @@ void pal_fill_for_maplights_or_black() sub_81973A4(); taskId = CreateTask(Mailbox_HandleReturnToProcessInput, 0); - if(sub_81D1C44(eMailboxInfo.count) == TRUE) + if(sub_81D1C44(playerPCItemPageInfo.count) == TRUE) Mailbox_DrawMailboxMenu(taskId); else DestroyTask(taskId); @@ -638,7 +641,7 @@ extern const u8 gText_MailToBagMessageErased[]; void Mailbox_DoMailMoveToBag(u8 taskId) { - struct MailStruct *mailStruct = &(gSaveBlock1Ptr->mail[eMailboxInfo.itemsAbove + 6 + eMailboxInfo.cursorPos]); + struct MailStruct *mailStruct = &(gSaveBlock1Ptr->mail[playerPCItemPageInfo.itemsAbove + 6 + playerPCItemPageInfo.cursorPos]); if(!AddBagItem(mailStruct->itemId, 1)) { DisplayItemMessageOnField(taskId, gText_BagIsFull, Mailbox_Cancel); @@ -648,9 +651,9 @@ void Mailbox_DoMailMoveToBag(u8 taskId) DisplayItemMessageOnField(taskId, gText_MailToBagMessageErased, Mailbox_Cancel); ClearMailStruct(mailStruct); Mailbox_UpdateMailList(); - eMailboxInfo.count--; - if(eMailboxInfo.count < (eMailboxInfo.pageItems + eMailboxInfo.itemsAbove) && eMailboxInfo.itemsAbove != 0) - eMailboxInfo.itemsAbove--; + playerPCItemPageInfo.count--; + if(playerPCItemPageInfo.count < (playerPCItemPageInfo.pageItems + playerPCItemPageInfo.itemsAbove) && playerPCItemPageInfo.itemsAbove != 0) + playerPCItemPageInfo.itemsAbove--; ItemStorage_SetItemAndMailCount(taskId); } } @@ -700,15 +703,15 @@ void Mailbox_UpdateMailListAfterDeposit(void) u8 taskId; u8 prevCount; taskId = CreateTask(Mailbox_HandleReturnToProcessInput, 0); - prevCount = eMailboxInfo.count; - eMailboxInfo.count = GetMailboxMailCount(); + prevCount = playerPCItemPageInfo.count; + playerPCItemPageInfo.count = GetMailboxMailCount(); Mailbox_UpdateMailList(); - if(prevCount != eMailboxInfo.count && (eMailboxInfo.count < (eMailboxInfo.pageItems + eMailboxInfo.itemsAbove)) - && eMailboxInfo.itemsAbove != 0) - eMailboxInfo.itemsAbove--; + if(prevCount != playerPCItemPageInfo.count && (playerPCItemPageInfo.count < (playerPCItemPageInfo.pageItems + playerPCItemPageInfo.itemsAbove)) + && playerPCItemPageInfo.itemsAbove != 0) + playerPCItemPageInfo.itemsAbove--; ItemStorage_SetItemAndMailCount(taskId); sub_81973A4(); - if(sub_81D1C44(eMailboxInfo.count) == TRUE) + if(sub_81D1C44(playerPCItemPageInfo.count) == TRUE) Mailbox_DrawMailboxMenu(taskId); else DestroyTask(taskId); @@ -732,9 +735,9 @@ void Mailbox_Cancel(u8 taskId) void sub_816BC14(void) { gUnknown_0203BCC4 = AllocZeroed(sizeof(struct Struct203BCC4)); - memset(gUnknown_0203BCC4->unk660, 0xFF, 0x6); + memset(gUnknown_0203BCC4->windowIds, 0xFF, 0x6); gUnknown_0203BCC4->unk666 = 0xFF; - gUnknown_0203BCC4->unk667 = -1; + gUnknown_0203BCC4->spriteId = 0xFF; } void sub_816BCC4(u8); @@ -752,7 +755,7 @@ extern const struct WindowTemplate gUnknown_085DFF5C[6]; u8 sub_816BC7C(u8 a) { - u8 *windowIdLoc = &(gUnknown_0203BCC4->unk660[a]); + u8 *windowIdLoc = &(gUnknown_0203BCC4->windowIds[a]); if(*windowIdLoc == 0xFF) { *windowIdLoc = AddWindow(&gUnknown_085DFF5C[a]); @@ -764,7 +767,7 @@ u8 sub_816BC7C(u8 a) void sub_816BCC4(u8 a) { - u8 *windowIdLoc = &(gUnknown_0203BCC4->unk660[a]); + u8 *windowIdLoc = &(gUnknown_0203BCC4->windowIds[a]); if(*windowIdLoc != 0xFF) { sub_8198070(*windowIdLoc, FALSE); @@ -783,7 +786,7 @@ void sub_816BD04(void) { u16 i; - for(i = 0; i < eMailboxInfo.count - 1; i++) + for(i = 0; i < playerPCItemPageInfo.count - 1; i++) { sub_816BDC8(&(gUnknown_0203BCC4->unk198[i][0]), gSaveBlock1Ptr->pcItems[i].itemId); gUnknown_0203BCC4->unk0[i].name = &(gUnknown_0203BCC4->unk198[i][0]); @@ -794,9 +797,9 @@ void sub_816BD04(void) gUnknown_0203BCC4->unk0[i].id = -2; gMultiuseListMenuTemplate = gUnknown_085DFF44; gMultiuseListMenuTemplate.unk_10 = sub_816BC7C(0); - gMultiuseListMenuTemplate.totalItems = eMailboxInfo.count; + gMultiuseListMenuTemplate.totalItems = playerPCItemPageInfo.count; gMultiuseListMenuTemplate.items = gUnknown_0203BCC4->unk0; - gMultiuseListMenuTemplate.maxShowed = eMailboxInfo.pageItems; + gMultiuseListMenuTemplate.maxShowed = playerPCItemPageInfo.pageItems; } void sub_816BDC8(u8 *string, u16 itemId) @@ -804,7 +807,7 @@ void sub_816BDC8(u8 *string, u16 itemId) CopyItemName(itemId, string); } -void sub_816C0C8(); +void sub_816C0C8(void); void sub_816C060(u16 itemId); void sub_816BEF0(s32 id); @@ -818,7 +821,281 @@ void sub_816BDDC(s32 id, bool8 b) if(id != -2) sub_816C060(gSaveBlock1Ptr->pcItems[id].itemId); else - sub_816C060(0xFFFF); + sub_816C060(ITEMPC_GO_BACK_TO_PREV); sub_816BEF0(id); } } + +void sub_816BFE0(u8 y, u8, u8 speed); + +void fish4_goto_x5_or_x6(u8 windowId, s32 id, u8 yOffset) +{ + if(id != -2) + { + if(gUnknown_0203BCC4->unk666 != 0xFF) + { + if(gUnknown_0203BCC4->unk666 == (u8)id) + sub_816BFE0(yOffset, 0, 0xFF); + else + sub_816BFE0(yOffset, 0xFF, 0xFF); + } + ConvertIntToDecimalStringN(gStringVar1, gSaveBlock1Ptr->pcItems[id].quantity, STR_CONV_MODE_RIGHT_ALIGN, 3); + StringExpandPlaceholders(gStringVar4, gText_xVar1); + PrintTextOnWindow(windowId, 7, gStringVar4, GetStringRightAlignXOffset(7, gStringVar4, 104), yOffset, 0xFF, NULL); + } +} + +const u8* sub_816C228(u16); + +void sub_816BEF0(s32 id) +{ + const u8* description; + u8 windowId = gUnknown_0203BCC4->windowIds[1]; + + if(id != -2) + description = (u8 *)ItemId_GetDescription(gSaveBlock1Ptr->pcItems[id].itemId); + else + description = sub_816C228(0xFFFF); + FillWindowPixelBuffer(windowId, 17); + PrintTextOnWindow(windowId, 1, description, 0, 1, 0, NULL); +} + +void sub_816BF60(void) +{ + if(playerPCItemPageInfo.scrollIndicatorId == 0xFF) + playerPCItemPageInfo.scrollIndicatorId = AddScrollIndicatorArrowPairParametrized(0x2, 0xB0, 0xC, 0x94, playerPCItemPageInfo.count - playerPCItemPageInfo.pageItems, 0x13F8, 0x13F8, &(playerPCItemPageInfo.itemsAbove)); +} + +void sub_816BF9C(void) +{ + if(playerPCItemPageInfo.scrollIndicatorId != 0xFF) + { + RemoveScrollIndicatorArrowPair(playerPCItemPageInfo.scrollIndicatorId); + playerPCItemPageInfo.scrollIndicatorId = 0xFF; + } +} + +void sub_816BFB8(u8 a, u8 b, u8 speed) +{ + sub_816BFE0(ListMenuGetYCoordForPrintingArrowCursor(a), b, speed); +} + +extern const u8 gUnknown_085DFF8C[3]; + +void sub_816BFE0(u8 y, u8 b, u8 speed) +{ + u8 windowId = gUnknown_0203BCC4->windowIds[0]; + if(b == 0xFF) + FillWindowPixelRect(windowId, 17, 0, y, GetMenuCursorDimensionByFont(1, 0), GetMenuCursorDimensionByFont(1, 1)); + else + AddTextPrinterParameterized2(windowId, 1, 0, y, 0, 0, gUnknown_085DFF8C, speed, gText_SelectorArrow2); +} + + +void sub_816C060(u16 itemId) +{ + u8 spriteId; + u8* spriteIdLoc = &(gUnknown_0203BCC4->spriteId); + + if(*spriteIdLoc == 0xFF) + { + FreeSpriteTilesByTag(0x13F6); + FreeSpritePaletteByTag(0x13F6); + spriteId = AddItemIconSprite(0x13F6, 0x13F6, itemId); + if(spriteId != 64) + { + *spriteIdLoc = spriteId; + gSprites[spriteId].oam.priority = 0; + gSprites[spriteId].pos2.x = 24; + gSprites[spriteId].pos2.y = 80; + } + } +} + +void sub_816C0C8(void) +{ + u8* spriteIdLoc = &(gUnknown_0203BCC4->spriteId); + if(*spriteIdLoc != 0xFF) + { + FreeSpriteTilesByTag(0x13F6); + FreeSpritePaletteByTag(0x13F6); + DestroySprite(&(gSprites[*spriteIdLoc])); + *spriteIdLoc = 0xFF; + } +} + +void sub_80D6E84(void); +void sub_812220C(struct ItemSlot *, u8, u8 *, u8 *, u8); + +void sub_816C110(void) +{ + sub_80D6E84(); + sub_812220C(gSaveBlock1Ptr->pcItems, 50, &(playerPCItemPageInfo.pageItems), &(playerPCItemPageInfo.count), 0x8); +} + +void sub_812225C(u16 *, u16 *, u8, u8); + +void sub_816C140(void) +{ + sub_812225C(&(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos), playerPCItemPageInfo.pageItems, playerPCItemPageInfo.count); +} + +extern const u8 gText_TossItem[]; +extern const u8 gText_WithdrawItem[]; + +void sub_816C30C(u8 taskId); + +void ItemStorage_ProcessInput(u8 taskId) +{ + s16 *data; + bool32 toss; + u32 i, x; + u8 windowId; + const u8* text; + + data = gTasks[taskId].data; + for(i = 0; i <=3; i++) + sub_816BC7C(i); + toss = data[3]; + text = gText_TossItem; + if(!toss) + text = gText_WithdrawItem; + x = GetStringCenterAlignXOffset(1, text, 104); + PrintTextOnWindow(gUnknown_0203BCC4->windowIds[3], 1, text, x, 1, 0, NULL); + CopyWindowToVram(gUnknown_0203BCC4->windowIds[2], 2); + sub_816C110(); + sub_816C140(); + sub_816BD04(); + data[5] = ListMenuInit(&gMultiuseListMenuTemplate, playerPCItemPageInfo.itemsAbove, playerPCItemPageInfo.cursorPos); + sub_816BF60(); + schedule_bg_copy_tilemap_to_vram(0); + gTasks[taskId].func = sub_816C30C; +} + +extern const u8 gText_GoBackPrevMenu[]; +extern const u8 gText_WithdrawHowManyItems[]; +extern const u8 gText_WithdrawXItems[]; +extern const u8 gText_TossHowManyVar1s[]; +extern const u8 gText_ThrewAwayVar2Var1s[]; +extern const u8 gText_NoRoomInBag[]; +extern const u8 gText_TooImportantToToss[]; +extern const u8 gText_ConfirmTossItems[]; +extern const u8 gText_MoveVar1Where[]; + +const u8* sub_816C228(u16 itemId) +{ + const u8 *string; + + switch(itemId) + { + case ITEMPC_GO_BACK_TO_PREV: + string = gText_GoBackPrevMenu; + break; + case ITEMPC_HOW_MANY_TO_WITHDRAW: + string = gText_WithdrawHowManyItems; + break; + case ITEMPC_WITHDREW_THING: + string = gText_WithdrawXItems; + break; + case ITEMPC_HOW_MANY_TO_TOSS: + string = gText_TossHowManyVar1s; + break; + case ITEMPC_THREW_AWAY_ITEM: + string = gText_ThrewAwayVar2Var1s; + break; + case ITEMPC_NO_MORE_ROOM: + string = gText_NoRoomInBag; + break; + case ITEMPC_TOO_IMPORTANT: + string = gText_TooImportantToToss; + break; + case ITEMPC_OKAY_TO_THROW_AWAY: + string = gText_ConfirmTossItems; + break; + case ITEMPC_SWITCH_WHICH_ITEM: + string = gText_MoveVar1Where; + break; + default: + string = ItemId_GetDescription(itemId); + break; + } + return string; +} + +void sub_816C2C0(const u8 *string) +{ + u8 windowId = gUnknown_0203BCC4->windowIds[1]; + FillWindowPixelBuffer(windowId, 0x11); + StringExpandPlaceholders(gStringVar4, string); + PrintTextOnWindow(windowId, 1, gStringVar4, 0, 1, 0, NULL); +} + +void sub_816C400(u8 taskId); +void sub_816C450(u8 taskId); +void sub_816C71C(u8 taskId); + +void sub_816C30C(u8 taskId) +{ + s16 *data; + s32 id; + + data = gTasks[taskId].data; + if(gMain.newKeys & SELECT_BUTTON) + { + sub_81AE860(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos)); + if((playerPCItemPageInfo.itemsAbove + playerPCItemPageInfo.cursorPos) != (playerPCItemPageInfo.count - 1)) + { + PlaySE(SE_SELECT); + sub_816C450(taskId); + } + } + else + { + id = ListMenuHandleInputGetItemId(data[5]); + sub_81AE860(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos)); + switch(id) + { + case -1: + break; + case -2: + PlaySE(SE_SELECT); + sub_816C400(taskId); + break; + default: + PlaySE(SE_SELECT); + sub_816C71C(taskId); + break; + } + } +} + +void bx_battle_menu_t3(u8 taskId) +{ + s16 *data; + + data = gTasks[taskId].data; + if(!IsDma3ManagerBusyWithBgCopy()) + { + NewMenuHelpers_DrawDialogueFrame(0, 0); + if(!data[3]) + InitItemStorageMenu(taskId, 0); + else + InitItemStorageMenu(taskId, 2); + gTasks[taskId].func = ItemStorageMenuProcessInput; + } +} + + +void sub_816C400(u8 taskId) +{ + s16 *data; + + data = gTasks[taskId].data; + sub_816C0C8(); + sub_816BF9C(); + sub_81AE6C8(data[5], NULL, NULL); + sub_81223B0(gUnknown_0203BCC4->spriteIds, 7); + sub_816BC58(); + gTasks[taskId].func = bx_battle_menu_t3; +} + diff --git a/src/pokeblock.c b/src/pokeblock.c index b9a1f6bf3..941a1b601 100644 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -460,7 +460,7 @@ static bool8 InitPokeblockMenu(void) gMain.state++; break; case 10: - sub_8122344(&sPokeblockMenu->field_E75, FIELD_E75_COUNT); + sub_8122344(sPokeblockMenu->field_E75, FIELD_E75_COUNT); gMain.state++; break; case 11: -- cgit v1.2.3 From a454bd98faf6bd7317a841c27f4bee9966c45da3 Mon Sep 17 00:00:00 2001 From: KDSKardabox Date: Fri, 16 Mar 2018 16:01:11 +0530 Subject: Finish .text part of player_pc --- src/player_pc.c | 272 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 272 insertions(+) (limited to 'src') diff --git a/src/player_pc.c b/src/player_pc.c index f9fb7f6da..cc886ae61 100644 --- a/src/player_pc.c +++ b/src/player_pc.c @@ -1099,3 +1099,275 @@ void sub_816C400(u8 taskId) gTasks[taskId].func = bx_battle_menu_t3; } +void sub_816C690(u8); +void sub_816C4FC(u8 taskId); + +void sub_816C450(u8 taskId) +{ + s16 *data; + + data = gTasks[taskId].data; + sub_81AF15C(data[5], 16, 1); + gUnknown_0203BCC4->unk666 = (playerPCItemPageInfo.itemsAbove + playerPCItemPageInfo.cursorPos); + sub_816BFB8(data[5], 0, 0); + sub_816C690(gUnknown_0203BCC4->unk666); + CopyItemName(gSaveBlock1Ptr->pcItems[gUnknown_0203BCC4->unk666].itemId, gStringVar1); + sub_816C2C0(sub_816C228(ITEMPC_SWITCH_WHICH_ITEM)); + gTasks[taskId].func = sub_816C4FC; +} + +void sub_816C5A0(u8 taskId, bool8 a); + +void sub_816C4FC(u8 taskId) +{ + s16 *data; + s32 id; + + data = gTasks[taskId].data; + if(gMain.newKeys & SELECT_BUTTON) + { + sub_81AE860(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos)); + sub_816C5A0(taskId, FALSE); + return; + } + id = ListMenuHandleInputGetItemId(data[5]); + sub_81AE860(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos)); + sub_81223FC(gUnknown_0203BCC4->spriteIds, 7, 0); + sub_816C690(playerPCItemPageInfo.cursorPos); + switch(id) + { + case -1: + break; + case -2: + if(gMain.newKeys & A_BUTTON) + { + sub_816C5A0(taskId, FALSE); + } + else + sub_816C5A0(taskId, TRUE); + break; + default: + sub_816C5A0(taskId, FALSE); + break; + } +} + + +void sub_816C5A0(u8 taskId, bool8 a) +{ + s16 *data; + s32 id; + u16 b; + u8 c; + + data = gTasks[taskId].data; + b = (playerPCItemPageInfo.itemsAbove + playerPCItemPageInfo.cursorPos); + PlaySE(SE_SELECT); + sub_81AE6C8(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos)); + if(!a) + { + c = gUnknown_0203BCC4->unk666; + if(c != b) + { + if(c != b - 1) + { + sub_80D702C(gSaveBlock1Ptr->pcItems, c, b); + sub_816BD04(); + } + + } + else + goto LABEL_SKIP_CURSOR_DECREMENT; + } + if (gUnknown_0203BCC4->unk666 < b) + playerPCItemPageInfo.cursorPos--; + LABEL_SKIP_CURSOR_DECREMENT: + sub_81223FC(gUnknown_0203BCC4->spriteIds, 7, 1); + gUnknown_0203BCC4->unk666 = 0xFF; + data[5] = ListMenuInit(&gMultiuseListMenuTemplate, playerPCItemPageInfo.itemsAbove, playerPCItemPageInfo.cursorPos); + schedule_bg_copy_tilemap_to_vram(0); + gTasks[taskId].func = sub_816C30C; +} + +//void +void sub_816C690(u8 a) +{ + sub_8122448(gUnknown_0203BCC4->spriteIds, 7, 128, ((a+1) * 16)); +} + +void sub_816C6BC(u8 windowId, u16 value, u32 mode, u8 x, u8 y, u8 n) +{ + ConvertIntToDecimalStringN(gStringVar1, value, mode, n); + StringExpandPlaceholders(gStringVar4, gText_xVar1); + PrintTextOnWindow(windowId, 1, gStringVar4, GetStringCenterAlignXOffset(1, gStringVar4, 48), y, 0, NULL); +} + +void sub_816C8FC(u8 taskId); +void sub_816C9B8(u8 taskid); +void sub_816C818(u8 taskid); + +void sub_816C71C(u8 taskId) +{ + s16 *data; + u16 b; + + data = gTasks[taskId].data; + b = (playerPCItemPageInfo.cursorPos + playerPCItemPageInfo.itemsAbove); + sub_816BF9C(); + data[2] = 1; + if(!data[3]) + { + if(gSaveBlock1Ptr->pcItems[b].quantity == 1) + { + sub_816C8FC(taskId); + return; + } + CopyItemName(gSaveBlock1Ptr->pcItems[b].itemId, gStringVar1); + sub_816C2C0(sub_816C228(ITEMPC_HOW_MANY_TO_WITHDRAW)); + } + else + { + if(gSaveBlock1Ptr->pcItems[b].quantity == 1) + { + sub_816C9B8(taskId); + return; + } + CopyItemName(gSaveBlock1Ptr->pcItems[b].itemId, gStringVar1); + sub_816C2C0(sub_816C228(ITEMPC_HOW_MANY_TO_TOSS)); + } + sub_816C6BC(sub_816BC7C(4), data[2], STR_CONV_MODE_LEADING_ZEROS, 8, 1, 3); + gTasks[taskId].func = sub_816C818; +} + +void sub_816CBC0(u8 taskId); + +void sub_816C818(u8 taskId) +{ + s16 *data; + u16 b; + + data = gTasks[taskId].data; + b = (playerPCItemPageInfo.cursorPos + playerPCItemPageInfo.itemsAbove); + if(AdjustQuantityAccordingToDPadInput(&(data[2]), gSaveBlock1Ptr->pcItems[b].quantity) == TRUE) + sub_816C6BC(sub_816BC7C(4), data[2], STR_CONV_MODE_LEADING_ZEROS, 8, 1, 3); + else + { + if(gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + sub_816BCC4(4); + if(!data[3]) + sub_816C8FC(taskId); + else + sub_816C9B8(taskId); + } + else if(gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + sub_816BCC4(4); + sub_816C2C0(sub_816C228(gSaveBlock1Ptr->pcItems[b].itemId)); + sub_816CBC0(taskId); + } + } +} + +void sub_816CB04(u8 taskId); +void sub_816CB74(u8 taskId); + +void sub_816C8FC(u8 taskId) +{ + s16 *data; + u16 b; + + data = gTasks[taskId].data; + b = (playerPCItemPageInfo.cursorPos + playerPCItemPageInfo.itemsAbove); + if(AddBagItem(gSaveBlock1Ptr->pcItems[b].itemId, data[2]) == TRUE) + { + CopyItemName(gSaveBlock1Ptr->pcItems[b].itemId, gStringVar1); + ConvertIntToDecimalStringN(gStringVar2, data[2], STR_CONV_MODE_LEFT_ALIGN, 3); + sub_816C2C0(sub_816C228(ITEMPC_WITHDREW_THING)); + gTasks[taskId].func = sub_816CB04; + } + else + { + data[2] = 0; + sub_816C2C0(sub_816C228(ITEMPC_NO_MORE_ROOM)); + gTasks[taskId].func = sub_816CB74; + } +} + +extern const struct WindowTemplate gUnknown_085DFF84; +extern const struct YesNoFuncTable gUnknown_085DFF3C; + +bool8 itemid_is_unique(u16 itemId); + +void sub_816C9B8(u8 taskId) +{ + s16 *data; + u16 b; + + data = gTasks[taskId].data; + b = (playerPCItemPageInfo.cursorPos + playerPCItemPageInfo.itemsAbove); + if(!itemid_is_unique(gSaveBlock1Ptr->pcItems[b].itemId)) + { + CopyItemName(gSaveBlock1Ptr->pcItems[b].itemId, gStringVar1); + ConvertIntToDecimalStringN(gStringVar2, data[2], STR_CONV_MODE_LEFT_ALIGN, 3); + sub_816C2C0(sub_816C228(ITEMPC_OKAY_TO_THROW_AWAY)); + CreateYesNoMenuWithCallbacks(taskId, &gUnknown_085DFF84, 1, 0, 1, 0x214, 0xE, &gUnknown_085DFF3C); + } + else + { + data[2] = 0; + sub_816C2C0(sub_816C228(ITEMPC_TOO_IMPORTANT)); + gTasks[taskId].func = sub_816CB74; + } +} + +void sub_816CA94(u8 taskId) +{ + sub_816C2C0(sub_816C228(ITEMPC_THREW_AWAY_ITEM)); + gTasks[taskId].func = sub_816CB04; +} + +void sub_816CAC8(u8 taskId) +{ + sub_816C2C0(sub_816C228(gSaveBlock1Ptr->pcItems[(playerPCItemPageInfo.itemsAbove + playerPCItemPageInfo.cursorPos)].itemId)); + sub_816CBC0(taskId); +} + +void sub_80D6E48(u8, u16); + +void sub_816CB04(u8 taskId) +{ + s16 *data; + + data = gTasks[taskId].data; + if(gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + sub_80D6E48((playerPCItemPageInfo.cursorPos + playerPCItemPageInfo.itemsAbove), data[2]); + sub_81AE6C8(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos)); + sub_816C110(); + sub_816C140(); + sub_816BD04(); + data[5] = ListMenuInit(&gMultiuseListMenuTemplate, playerPCItemPageInfo.itemsAbove, playerPCItemPageInfo.cursorPos); + sub_816CBC0(taskId); + } +} + +void sub_816CB74(u8 taskId) +{ + s16 *data; + + data = gTasks[taskId].data; + if(gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + sub_816C2C0(sub_816C228(gSaveBlock1Ptr->pcItems[(playerPCItemPageInfo.itemsAbove + playerPCItemPageInfo.cursorPos)].itemId)); + sub_816CBC0(taskId); + } +} + +void sub_816CBC0(u8 taskId) +{ + sub_816BF60(); + gTasks[taskId].func = sub_816C30C; +} -- cgit v1.2.3 From a24ffb13213b7cd8761cd501bc4c052da66f57c4 Mon Sep 17 00:00:00 2001 From: KDSKardabox Date: Mon, 19 Mar 2018 15:57:33 +0530 Subject: Finish decompiling player_pc rodata --- src/international_string_util.c | 2 +- src/player_pc.c | 605 ++++++++++++++++++++-------------------- 2 files changed, 298 insertions(+), 309 deletions(-) (limited to 'src') diff --git a/src/international_string_util.c b/src/international_string_util.c index 89b4a7a69..9de338c59 100644 --- a/src/international_string_util.c +++ b/src/international_string_util.c @@ -42,7 +42,7 @@ s32 GetMaxWidthInMenuTable(const struct MenuAction *str, s32 arg1) return convert_pixel_width_to_tile_width(var); } -s32 sub_81DB3D8(const struct MenuAction *str, u8* arg1, s32 arg2) +s32 sub_81DB3D8(const struct MenuAction *str, const u8* arg1, s32 arg2) { s32 i, var; diff --git a/src/player_pc.c b/src/player_pc.c index cc886ae61..651a18327 100644 --- a/src/player_pc.c +++ b/src/player_pc.c @@ -4,6 +4,7 @@ #include "decoration.h" #include "event_scripts.h" #include "field_fadetransition.h" +#include "field_map_obj.h" #include "field_screen.h" #include "field_weather.h" #include "international_string_util.h" @@ -20,6 +21,8 @@ #include "menu_indicators.h" #include "overworld.h" #include "palette.h" +#include "party_menu.h" +#include "pokenav.h" #include "player_pc.h" #include "script.h" #include "sound.h" @@ -32,65 +35,192 @@ struct Struct203BCC4 { struct ListMenuItem unk0[51]; - //u8 filler[0x118]; u8 unk198[51][0x18]; - //u8 filler2[0x348]; u8 windowIds[6]; u8 unk666; u8 spriteId; u8 spriteIds[7]; - }; -extern struct Struct203BCC4 *gUnknown_0203BCC4; - -static EWRAM_DATA u8 *gPcItemMenuOptionOrder = NULL; +void (*gFieldCallback)(void); +static void InitPlayerPCMenu(u8 taskId); +static void PlayerPCProcessMenuInput(u8 taskId); +static void InitItemStorageMenu(u8 taskId, u8 var); + +static u8 GetMailboxMailCount(void); +static void Mailbox_UpdateMailList(void); +static void Mailbox_DrawMailboxMenu(u8 taskId); +static void Mailbox_ProcessInput(u8 taskId); +static void Mailbox_PrintWhatToDoWithPlayerMailText(u8 taskId); +static void Mailbox_ReturnToPlayerPC(u8); +static void Mailbox_PrintMailOptions(u8 taskId); +static void Mailbox_MailOptionsProcessInput(u8 taskId); + +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 Mailbox_DoMailMoveToBag(u8 taskId); +static void Mailbox_DoMailRead(u8 taskId); +static void Mailbox_MoveToBag(u8 taskId); +static void Mailbox_Give(u8 taskId); +static void Mailbox_Cancel(u8 taskId); + +static void Mailbox_CancelMoveToBag(u8 taskId); +static void Mailbox_MoveToBagYesNoPrompt(u8 taskId); +static void Mailbox_DrawYesNoBeforeMove(u8 taskId); +static void Mailbox_DoGiveMailPokeMenu(u8 taskId); +static void Mailbox_NoPokemonForMail(u8 taskId); + +static void Mailbox_FadeAndReadMail(u8 taskId); +static void Mailbox_ReturnToFieldFromReadMail(void); +static void Mailbox_DoRedrawMailboxMenuAfterReturn(void); +static void pal_fill_for_maplights_or_black(void); +static void Mailbox_HandleReturnToProcessInput(u8 taskId); + +static void ItemStorage_Withdraw(u8 taskId); +static void ItemStorage_Deposit(u8 taskId); +static void ItemStorage_Toss(u8 taskId); +static void ItemStorage_Exit(u8 taskId); +static void ItemStorage_ResumeInputFromYesToss(u8 taskId); +static void ItemStorage_ResumeInputFromNoToss(u8 taskId); + +static void ItemStorageMenuPrint(const u8 *); +static void ItemStorageMenuProcessInput(u8 taskId); +static void ItemStorage_ProcessWithdrawTossInput(u8 taskId); +static void ItemStorage_SetItemAndMailCount(u8); +static void ItemStorage_HandleReturnToProcessInput(u8 taskId); + +static void ItemStorage_WithdrawToss_Helper(u8 taskId, bool8 toss); +static void Task_ItemStorage_Deposit(u8 taskId); +static void ItemStorage_DoItemWithdraw(u8 taskId); +static void ItemStorage_DoItemToss(u8 taskid); +static void ItemStorage_HandleQuantityRolling(u8 taskid); +static void ItemStorage_GoBackToPlayerPCMenu(u8 taskId); +static void ItemStorage_ItemSwapChoosePrompt(u8 taskId); +static void ItemStorage_DoItemAction(u8 taskId); +static void ItemStorage_ProcessInput(u8 taskId); +static void ItemStorage_DoItemSwap(u8 taskId, bool8 a); +static void ItemStorage_HandleRemoveItem(u8 taskId); +static void ItemStorage_WaitPressHandleResumeProcessInput(u8 taskId); +static void ItemStorage_StartScrollIndicatorAndProcessInput(u8 taskId); + +static const u8* ItemStorage_GetItemPcResponse(u16); +static void CopyItemName_PlayerPC(u8 *string, u16 itemId); + +static void sub_816BC14(void); +static void sub_816BFE0(u8 y, u8, u8 speed); +static void sub_816BCC4(u8); +static void sub_816C690(u8); +static void sub_816C4FC(u8 taskId); +static void sub_816C0C8(void); +static void sub_816C060(u16 itemId); +static void sub_816BEF0(s32 id); +static void sub_816B4DC(u8 taskId); +static void ItemStorage_DrawBothListAndDescription(u32 id, bool8 b, struct ListMenu * thisMenu); +static void fish4_goto_x5_or_x6(u8 windowId, s32 id, u8 yOffset); + + +static void Mailbox_UpdateMailListAfterDeposit(void); + +static EWRAM_DATA const u8 *gPcItemMenuOptionOrder = NULL; static EWRAM_DATA u8 gPcItemMenuOptionsNum = 0; +EWRAM_DATA struct PlayerPCItemPageStruct playerPCItemPageInfo = {0, 0, 0, 0, {0, 0, 0}, 0}; +static EWRAM_DATA struct Struct203BCC4 *gUnknown_0203BCC4 = NULL; -extern struct PlayerPCItemPageStruct gUnknown_0203BCB8; -#define playerPCItemPageInfo gUnknown_0203BCB8 +static const u8 *const gPCText_OptionDescList[] = +{ + gText_TakeOutItemsFromPC, + gText_StoreItemsInPC, + gText_ThrowAwayItemsInPC, + gText_GoBackPrevMenu, +}; +static const struct MenuAction sPlayerPCMenuActions[] = +{ + { gText_ItemStorage, PlayerPC_ItemStorage }, + { gText_Mailbox, PlayerPC_Mailbox }, + { gText_Decoration, PlayerPC_Decoration }, + { gText_TurnOff, PlayerPC_TurnOff } +}; -/*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 taskId); -/*static*/ void ItemStorage_SetItemAndMailCount(u8); -/*static*/ void ItemStorage_DoItemWithdraw(u8); -/*static*/ void ItemStorage_DoItemToss(u8); -/*static*/ void ItemStorage_WithdrawToss_Helper(u8 taskId, bool8 toss); +static const u8 gBedroomPC_OptionOrder[] = +{ + PLAYERPC_MENU_ITEMSTORAGE, + PLAYERPC_MENU_MAILBOX, + PLAYERPC_MENU_DECORATION, + PLAYERPC_MENU_TURNOFF +}; -/*static*/ void ItemStorage_HandleReturnToProcessInput(u8); +static const u8 gPlayerPC_OptionOrder[] = +{ + PLAYERPC_MENU_ITEMSTORAGE, + PLAYERPC_MENU_MAILBOX, + PLAYERPC_MENU_TURNOFF +}; -/*static*/ u8 GetMailboxMailCount(void); +static const struct MenuAction gPCText_ItemPCOptionsText[] = +{ + { gText_WithdrawItem, ItemStorage_Withdraw }, + { gText_DepositItem, ItemStorage_Deposit }, + { gText_TossItem, ItemStorage_Toss }, + { gText_Cancel, ItemStorage_Exit } +}; -/*static*/ void Mailbox_UpdateMailList(void); -/*static*/ void Mailbox_DrawMailboxMenu(u8); -/*static*/ void Mailbox_ProcessInput(u8); -/*static*/ void Mailbox_PrintWhatToDoWithPlayerMailText(u8); +static const struct ItemSlot gNewGamePCItems[] = +{ + { ITEM_POTION, 1 }, + { ITEM_NONE, 0 } +}; -/*static*/ void PlayerPC_ItemStorage(u8 taskId); -/*static*/ void PlayerPC_Mailbox(u8 taskId); -/*static*/ void PlayerPC_Decoration(u8 var); -/*static*/ void PlayerPC_TurnOff(u8 taskId); +const struct MenuAction gMailboxMailOptions[] = +{ + { gText_Read, Mailbox_DoMailRead }, + { gText_MoveToBag, Mailbox_MoveToBag }, + { gText_Give2, Mailbox_Give }, + { gText_Cancel2, Mailbox_Cancel } +}; -/*static*/ void ItemStorage_Exit(u8); +static const struct WindowTemplate gUnknown_085DFF24[3] = +{ + {0x00, 0x01, 0x01, 0x09, 0x06, 0x0F, 0x0001}, + {0x00, 0x01, 0x01, 0x09, 0x08, 0x0F, 0x0001}, + {0x00, 0x01, 0x01, 0x0A, 0x08, 0x0F, 0x0001} +}; +static const struct YesNoFuncTable gUnknown_085DFF3C = // ResumeFromWithdrawYesNoFuncList +{ + ItemStorage_ResumeInputFromYesToss, + ItemStorage_ResumeInputFromNoToss +}; -extern const u8 *const gPCText_OptionDescList[]; -/*static*/ extern const struct ItemSlot gNewGamePCItems[]; -/*static*/ extern const struct MenuAction gPCText_ItemPCOptionsText[]; -/*static*/ extern const struct MenuAction gMailboxMailOptions[]; -/*static*/ extern const struct MenuAction sPlayerPCMenuActions[]; -/*static*/ extern u8 gBedroomPC_OptionOrder[]; -/*static*/ extern u8 gPlayerPC_OptionOrder[]; +static const struct ListMenuTemplate gUnknown_085DFF44 = { + NULL, + ItemStorage_DrawBothListAndDescription, + fish4_goto_x5_or_x6, + 0, 0, + 0, 0, 8, 0, + 9, 2, 1, 3, FALSE, 0, FALSE, 7 +}; -extern const struct WindowTemplate gUnknown_085DFF24[3]; +static const struct WindowTemplate gUnknown_085DFF5C[5] = +{ + {0x00, 0x10, 0x01, 0x0D, 0x12, 0x0F, 0x0001}, + {0x00, 0x01, 0x0D, 0x0D, 0x06, 0x0F, 0x00EB}, + {0x00, 0x01, 0x08, 0x03, 0x03, 0x0F, 0x0153}, + {0x00, 0x01, 0x01, 0x0D, 0x02, 0x0F, 0x0139}, + {0x00, 0x08, 0x09, 0x06, 0x02, 0x0F, 0x015C} +}; +static const struct WindowTemplate gUnknown_085DFF84 = +{ + 0x00, 0x09, 0x07, 0x05, 0x04, 0x0F, 0x0168 +}; + +static const u8 gUnknown_085DFF8C[] = {0x01, 0x03, 0x02, 0x00}; void NewGameInitPCItems(void) @@ -116,7 +246,7 @@ void PlayerPC(void) DisplayItemMessageOnField(CreateTask(TaskDummy, 0), gText_WhatWouldYouLike, InitPlayerPCMenu); } -/*static*/ void InitPlayerPCMenu(u8 taskId) +static void InitPlayerPCMenu(u8 taskId) { u16 *data; struct WindowTemplate windowTemplate; @@ -135,7 +265,7 @@ void PlayerPC(void) gTasks[taskId].func = PlayerPCProcessMenuInput; } -/*static*/ void PlayerPCProcessMenuInput(u8 taskId) +static void PlayerPCProcessMenuInput(u8 taskId) { u16 *data; s8 inputOptionId; @@ -173,17 +303,14 @@ void ReshowPlayerPC(u8 var) DisplayItemMessageOnField(var, gText_WhatWouldYouLike, InitPlayerPCMenu); } -/*static*/ void PlayerPC_ItemStorage(u8 taskId) +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) +static void PlayerPC_Mailbox(u8 taskId) { - playerPCItemPageInfo.count = GetMailboxMailCount(); if (playerPCItemPageInfo.count == 0) @@ -206,14 +333,12 @@ bool8 sub_81D1C44(u8); } } -void sub_8126B2C(u8); - -/*static*/ void PlayerPC_Decoration(u8 var) +static void PlayerPC_Decoration(u8 var) { sub_8126B2C(var); //DoPlayerPCDecoration(var); } -/*static*/ void PlayerPC_TurnOff(u8 taskId) +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. { @@ -229,9 +354,7 @@ void sub_8126B2C(u8); DestroyTask(taskId); } -void ItemStorageMenuPrint(const u8*); - -void InitItemStorageMenu(u8 taskId, u8 var) +static void InitItemStorageMenu(u8 taskId, u8 var) { u16 *data; struct WindowTemplate windowTemplate; @@ -247,13 +370,13 @@ void InitItemStorageMenu(u8 taskId, u8 var) ItemStorageMenuPrint(gPCText_OptionDescList[var]); } -/*static*/ void ItemStorageMenuPrint(const u8 *textPtr) +static void ItemStorageMenuPrint(const u8 *textPtr) { NewMenuHelpers_DrawDialogueFrame(0, 0); PrintTextOnWindow(0, 1, textPtr, 0, 1, 0, 0); } -/*static*/ void ItemStorageMenuProcessInput(u8 var) +static void ItemStorageMenuProcessInput(u8 taskId) { s8 r5; s8 r2; @@ -270,23 +393,22 @@ void InitItemStorageMenu(u8 taskId, u8 var) break; case -1: PlaySE(SE_SELECT); - ItemStorage_Exit(var); + ItemStorage_Exit(taskId); break; default: PlaySE(SE_SELECT); - gPCText_ItemPCOptionsText[inputOptionId].func.void_u8(var); + gPCText_ItemPCOptionsText[inputOptionId].func.void_u8(taskId); break; } } -void Task_ItemStorage_Deposit(u8 taskId); -/*static*/ void 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) +static void Task_ItemStorage_Deposit(u8 taskId) { if (!gPaletteFade.active) { @@ -296,16 +418,13 @@ void Task_ItemStorage_Deposit(u8 taskId); } } -void mapldr_080EBC0C(void); - -void (*gFieldCallback)(void); void sub_816B31C(void) { - gFieldCallback = mapldr_080EBC0C; + gFieldCallback = Mailbox_DoRedrawMailboxMenuAfterReturn; SetMainCallback2(CB2_ReturnToField); } -void mapldr_080EBC0C(void) +void Mailbox_DoRedrawMailboxMenuAfterReturn(void) { sub_81973A4(); NewMenuHelpers_DrawDialogueFrame(0, 1); @@ -313,23 +432,17 @@ void mapldr_080EBC0C(void) pal_fill_black(); } -/*static*/ void ItemStorage_HandleReturnToProcessInput(u8 taskId) +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); - -extern const u8 gText_NoItems[]; - -/*static*/ void ItemStorage_Withdraw(u8 taskId) +static void ItemStorage_Withdraw(u8 taskId) { s16 *data = gTasks[taskId].data; NUM_ITEMS = sub_80D6CE4(); - if (NUM_ITEMS != 0) ItemStorage_WithdrawToss_Helper(taskId, FALSE); else @@ -340,7 +453,7 @@ extern const u8 gText_NoItems[]; } -/*static*/ void ItemStorage_Toss(u8 taskId) +static void ItemStorage_Toss(u8 taskId) { s16 *data = gTasks[taskId].data; @@ -354,11 +467,7 @@ extern const u8 gText_NoItems[]; } } -void sub_816BC14(void); -void gpu_pal_allocator_reset__manage_upper_four(void); - - -/*static*/ void ItemStorage_WithdrawToss_Helper(u8 taskId, bool8 toss) +static void ItemStorage_WithdrawToss_Helper(u8 taskId, bool8 toss) { u16 *data = gTasks[taskId].data; @@ -373,19 +482,17 @@ void gpu_pal_allocator_reset__manage_upper_four(void); LoadListMenuArrowsGfx(); sub_8122344(gUnknown_0203BCC4->spriteIds, 7); sub_8197434(0,0); - gTasks[taskId].func = ItemStorage_ProcessInput; + gTasks[taskId].func = ItemStorage_ProcessWithdrawTossInput; } - - -/*static*/ void ItemStorage_Exit(u8 taskId) +static void ItemStorage_Exit(u8 taskId) { sub_816B4DC(taskId); ReshowPlayerPC(taskId); } -/*static*/ void ItemStorage_SetItemAndMailCount(u8 taskId) +static void ItemStorage_SetItemAndMailCount(u8 taskId) { if (playerPCItemPageInfo.count > 7) playerPCItemPageInfo.pageItems = 8; @@ -393,7 +500,7 @@ void gpu_pal_allocator_reset__manage_upper_four(void); playerPCItemPageInfo.pageItems = playerPCItemPageInfo.count + 1; } -/*static*/ void sub_816B4DC(u8 taskId) +static void sub_816B4DC(u8 taskId) { u16 *data = gTasks[taskId].data; @@ -403,7 +510,7 @@ void gpu_pal_allocator_reset__manage_upper_four(void); schedule_bg_copy_tilemap_to_vram(0); } -/*static*/ u8 GetMailboxMailCount(void) +static u8 GetMailboxMailCount(void) { u8 i, j; @@ -414,7 +521,7 @@ void gpu_pal_allocator_reset__manage_upper_four(void); return i; } -/*static*/ void Mailbox_UpdateMailList(void) +static void Mailbox_UpdateMailList(void) { struct MailStruct mailBuffer; u8 i, j; @@ -433,13 +540,7 @@ void gpu_pal_allocator_reset__manage_upper_four(void); } } -extern const u8 gText_Mailbox[]; -u8 sub_81D1C84(u8); -u8 sub_81D1DC0(struct PlayerPCItemPageStruct *); -void sub_81D1E90(struct PlayerPCItemPageStruct *); - - -/*static*/ void Mailbox_DrawMailboxMenu(u8 taskId) +static void Mailbox_DrawMailboxMenu(u8 taskId) { u8 windowId; @@ -451,13 +552,7 @@ void sub_81D1E90(struct PlayerPCItemPageStruct *); sub_81D1E90(&playerPCItemPageInfo); } - -void Mailbox_ReturnToPlayerPC(u8); -void RemoveScrollIndicatorArrowPair(u8); -void sub_81D1D04(u8); - - -/*static*/ void Mailbox_ProcessInput(u8 taskId) +static void Mailbox_ProcessInput(u8 taskId) { u16 *data = gTasks[taskId].data; s32 inputOptionId; @@ -489,11 +584,7 @@ void sub_81D1D04(u8); } } -void sub_81DB554(u8 *, u8); -void Mailbox_PrintMailOptions(u8); -extern const u8 gText_WhatToDoWithVar1sMail[]; - -/*static*/ void Mailbox_PrintWhatToDoWithPlayerMailText(u8 taskId)//Mailbox_PrintWhatToDoWithPlayerMailText(u8 taskId) +static void Mailbox_PrintWhatToDoWithPlayerMailText(u8 taskId) { StringCopy(gStringVar1, gSaveBlock1Ptr->mail[playerPCItemPageInfo.itemsAbove + 6 + playerPCItemPageInfo.cursorPos].playerName); sub_81DB554(gStringVar1, 0); @@ -501,9 +592,7 @@ extern const u8 gText_WhatToDoWithVar1sMail[]; DisplayItemMessageOnField(taskId, gStringVar4, Mailbox_PrintMailOptions); } -void sub_81D1EC0(void); - -/*static*/ void Mailbox_ReturnToPlayerPC(u8 taskId) +static void Mailbox_ReturnToPlayerPC(u8 taskId) { s16 *data = gTasks[taskId].data; @@ -515,11 +604,7 @@ void sub_81D1EC0(void); ReshowPlayerPC(taskId); } -extern const struct MenuAction gMailboxMailOptions[]; - -void Mailbox_MailOptionsProcessInput(u8 taskId); - -void Mailbox_PrintMailOptions(u8 taskId) +static void Mailbox_PrintMailOptions(u8 taskId) { u8 r4 = sub_81D1C84(2); PrintMenuTable(r4, 4, gMailboxMailOptions); @@ -528,9 +613,7 @@ void Mailbox_PrintMailOptions(u8 taskId) gTasks[taskId].func = Mailbox_MailOptionsProcessInput; } -void Mailbox_Cancel(u8 taskId); - -void Mailbox_MailOptionsProcessInput(u8 taskId) +static void Mailbox_MailOptionsProcessInput(u8 taskId) { s8 inputOptionId = ProcessMenuInput_other(); @@ -542,6 +625,7 @@ void Mailbox_MailOptionsProcessInput(u8 taskId) PlaySE(SE_SELECT); Mailbox_Cancel(taskId); break; + default: PlaySE(SE_SELECT); gMailboxMailOptions[inputOptionId].func.void_u8(taskId); @@ -549,17 +633,13 @@ void Mailbox_MailOptionsProcessInput(u8 taskId) } } -void Mailbox_FadeAndReadMail(u8 taskId); - -void Mailbox_DoMailRead(u8 taskId) +static void Mailbox_DoMailRead(u8 taskId) { FadeScreen(1, 0); gTasks[taskId].func = Mailbox_FadeAndReadMail; } -void Mailbox_ReturnToFieldFromReadMail(); - -void Mailbox_FadeAndReadMail(u8 taskId) +static void Mailbox_FadeAndReadMail(u8 taskId) { if(!gPaletteFade.active) { @@ -570,17 +650,13 @@ void Mailbox_FadeAndReadMail(u8 taskId) } } -void pal_fill_for_maplights_or_black(); - -void Mailbox_ReturnToFieldFromReadMail() +static void Mailbox_ReturnToFieldFromReadMail(void) { gFieldCallback = pal_fill_for_maplights_or_black; SetMainCallback2(CB2_ReturnToField); } -void Mailbox_HandleReturnToProcessInput(u8 taskId); - -void pal_fill_for_maplights_or_black() +static void pal_fill_for_maplights_or_black(void) { u8 taskId; @@ -593,32 +669,24 @@ void pal_fill_for_maplights_or_black() pal_fill_black(); } -void Mailbox_HandleReturnToProcessInput(u8 taskId) +static void Mailbox_HandleReturnToProcessInput(u8 taskId) { if(sub_80ABDFC() == TRUE) gTasks[taskId].func = Mailbox_ProcessInput; } -extern const u8 gText_MessageWillBeLost[]; - -void Mailbox_DrawYesNoBeforeMove(u8 taskId); - -void Mailbox_MoveToBag(u8 taskId) +static void Mailbox_MoveToBag(u8 taskId) { DisplayItemMessageOnField(taskId, gText_MessageWillBeLost, Mailbox_DrawYesNoBeforeMove); } -void Mailbox_DoMailMoveToBag(u8 taskId); -void Mailbox_CancelMoveToBag(u8 taskId); -void Mailbox_MoveToBagYesNoPrompt(u8 taskId); - -void Mailbox_DrawYesNoBeforeMove(u8 taskId) +static void Mailbox_DrawYesNoBeforeMove(u8 taskId) { sub_8197930(); gTasks[taskId].func = Mailbox_MoveToBagYesNoPrompt; } -void Mailbox_MoveToBagYesNoPrompt(u8 taskId) +static void Mailbox_MoveToBagYesNoPrompt(u8 taskId) { switch(ProcessMenuInputNoWrap_()) { @@ -636,10 +704,7 @@ void Mailbox_MoveToBagYesNoPrompt(u8 taskId) } } -extern const u8 gText_BagIsFull[]; -extern const u8 gText_MailToBagMessageErased[]; - -void Mailbox_DoMailMoveToBag(u8 taskId) +static void Mailbox_DoMailMoveToBag(u8 taskId) { struct MailStruct *mailStruct = &(gSaveBlock1Ptr->mail[playerPCItemPageInfo.itemsAbove + 6 + playerPCItemPageInfo.cursorPos]); if(!AddBagItem(mailStruct->itemId, 1)) @@ -658,15 +723,12 @@ void Mailbox_DoMailMoveToBag(u8 taskId) } } -void Mailbox_CancelMoveToBag(u8 taskId) +static void Mailbox_CancelMoveToBag(u8 taskId) { Mailbox_Cancel(taskId); } -void Mailbox_DoGiveMailPokeMenu(u8 taskId); -void Mailbox_NoPokemonForMail(u8 taskId); - -void Mailbox_Give(u8 taskId) +static void Mailbox_Give(u8 taskId) { if(CalculatePlayerPartyCount() == 0) Mailbox_NoPokemonForMail(taskId); @@ -677,9 +739,7 @@ void Mailbox_Give(u8 taskId) } } -void sub_81B8448(); - -void Mailbox_DoGiveMailPokeMenu(u8 taskId) +static void Mailbox_DoGiveMailPokeMenu(u8 taskId) { if(!gPaletteFade.active) { @@ -690,15 +750,13 @@ void Mailbox_DoGiveMailPokeMenu(u8 taskId) } } -void Mailbox_UpdateMailListAfterDeposit(void); - void Mailbox_ReturnToMailListAfterDeposit(void) { gFieldCallback = Mailbox_UpdateMailListAfterDeposit; SetMainCallback2(CB2_ReturnToField); } -void Mailbox_UpdateMailListAfterDeposit(void) +static void Mailbox_UpdateMailListAfterDeposit(void) { u8 taskId; u8 prevCount; @@ -718,12 +776,12 @@ void Mailbox_UpdateMailListAfterDeposit(void) pal_fill_black(); } -void Mailbox_NoPokemonForMail(u8 taskId) +static void Mailbox_NoPokemonForMail(u8 taskId) { DisplayItemMessageOnField(taskId, gText_NoPokemon, Mailbox_Cancel); } -void Mailbox_Cancel(u8 taskId) +static void Mailbox_Cancel(u8 taskId) { sub_81D1D04(2); sub_8197434(0, 0); @@ -732,7 +790,7 @@ void Mailbox_Cancel(u8 taskId) gTasks[taskId].func = Mailbox_ProcessInput; } -void sub_816BC14(void) +static void sub_816BC14(void) { gUnknown_0203BCC4 = AllocZeroed(sizeof(struct Struct203BCC4)); memset(gUnknown_0203BCC4->windowIds, 0xFF, 0x6); @@ -740,9 +798,7 @@ void sub_816BC14(void) gUnknown_0203BCC4->spriteId = 0xFF; } -void sub_816BCC4(u8); - -void sub_816BC58(void) +static void sub_816BC58(void) { u32 i; @@ -751,9 +807,7 @@ void sub_816BC58(void) Free(gUnknown_0203BCC4); } -extern const struct WindowTemplate gUnknown_085DFF5C[6]; - -u8 sub_816BC7C(u8 a) +static u8 sub_816BC7C(u8 a) { u8 *windowIdLoc = &(gUnknown_0203BCC4->windowIds[a]); if(*windowIdLoc == 0xFF) @@ -765,7 +819,7 @@ u8 sub_816BC7C(u8 a) return *windowIdLoc; } -void sub_816BCC4(u8 a) +static void sub_816BCC4(u8 a) { u8 *windowIdLoc = &(gUnknown_0203BCC4->windowIds[a]); if(*windowIdLoc != 0xFF) @@ -778,17 +832,13 @@ void sub_816BCC4(u8 a) } } -void sub_816BDC8(u8 *string, u16 itemId); - -extern struct ListMenuTemplate gUnknown_085DFF44; - -void sub_816BD04(void) +void ItemStorage_RefreshListMenu(void) { u16 i; for(i = 0; i < playerPCItemPageInfo.count - 1; i++) { - sub_816BDC8(&(gUnknown_0203BCC4->unk198[i][0]), gSaveBlock1Ptr->pcItems[i].itemId); + CopyItemName_PlayerPC(&(gUnknown_0203BCC4->unk198[i][0]), gSaveBlock1Ptr->pcItems[i].itemId); gUnknown_0203BCC4->unk0[i].name = &(gUnknown_0203BCC4->unk198[i][0]); gUnknown_0203BCC4->unk0[i].id = i; } @@ -802,16 +852,12 @@ void sub_816BD04(void) gMultiuseListMenuTemplate.maxShowed = playerPCItemPageInfo.pageItems; } -void sub_816BDC8(u8 *string, u16 itemId) +void CopyItemName_PlayerPC(u8 *string, u16 itemId) { CopyItemName(itemId, string); } -void sub_816C0C8(void); -void sub_816C060(u16 itemId); -void sub_816BEF0(s32 id); - -void sub_816BDDC(s32 id, bool8 b) +static void ItemStorage_DrawBothListAndDescription(u32 id, bool8 b, struct ListMenu *thisMenu) { if(b != TRUE) PlaySE(SE_SELECT); @@ -826,9 +872,7 @@ void sub_816BDDC(s32 id, bool8 b) } } -void sub_816BFE0(u8 y, u8, u8 speed); - -void fish4_goto_x5_or_x6(u8 windowId, s32 id, u8 yOffset) +static void fish4_goto_x5_or_x6(u8 windowId, s32 id, u8 yOffset) { if(id != -2) { @@ -845,9 +889,7 @@ void fish4_goto_x5_or_x6(u8 windowId, s32 id, u8 yOffset) } } -const u8* sub_816C228(u16); - -void sub_816BEF0(s32 id) +static void sub_816BEF0(s32 id) { const u8* description; u8 windowId = gUnknown_0203BCC4->windowIds[1]; @@ -855,18 +897,18 @@ void sub_816BEF0(s32 id) if(id != -2) description = (u8 *)ItemId_GetDescription(gSaveBlock1Ptr->pcItems[id].itemId); else - description = sub_816C228(0xFFFF); + description = ItemStorage_GetItemPcResponse(ITEMPC_GO_BACK_TO_PREV); FillWindowPixelBuffer(windowId, 17); PrintTextOnWindow(windowId, 1, description, 0, 1, 0, NULL); } -void sub_816BF60(void) +static void ItemStorage_StartScrollIndicator(void) { if(playerPCItemPageInfo.scrollIndicatorId == 0xFF) playerPCItemPageInfo.scrollIndicatorId = AddScrollIndicatorArrowPairParametrized(0x2, 0xB0, 0xC, 0x94, playerPCItemPageInfo.count - playerPCItemPageInfo.pageItems, 0x13F8, 0x13F8, &(playerPCItemPageInfo.itemsAbove)); } -void sub_816BF9C(void) +static void ItemStorage_RemoveScrollIndicator(void) { if(playerPCItemPageInfo.scrollIndicatorId != 0xFF) { @@ -875,14 +917,12 @@ void sub_816BF9C(void) } } -void sub_816BFB8(u8 a, u8 b, u8 speed) +static void sub_816BFB8(u8 a, u8 b, u8 speed) { sub_816BFE0(ListMenuGetYCoordForPrintingArrowCursor(a), b, speed); } -extern const u8 gUnknown_085DFF8C[3]; - -void sub_816BFE0(u8 y, u8 b, u8 speed) +static void sub_816BFE0(u8 y, u8 b, u8 speed) { u8 windowId = gUnknown_0203BCC4->windowIds[0]; if(b == 0xFF) @@ -891,8 +931,7 @@ void sub_816BFE0(u8 y, u8 b, u8 speed) AddTextPrinterParameterized2(windowId, 1, 0, y, 0, 0, gUnknown_085DFF8C, speed, gText_SelectorArrow2); } - -void sub_816C060(u16 itemId) +static void sub_816C060(u16 itemId) { u8 spriteId; u8* spriteIdLoc = &(gUnknown_0203BCC4->spriteId); @@ -912,7 +951,7 @@ void sub_816C060(u16 itemId) } } -void sub_816C0C8(void) +static void sub_816C0C8(void) { u8* spriteIdLoc = &(gUnknown_0203BCC4->spriteId); if(*spriteIdLoc != 0xFF) @@ -924,28 +963,18 @@ void sub_816C0C8(void) } } -void sub_80D6E84(void); -void sub_812220C(struct ItemSlot *, u8, u8 *, u8 *, u8); - -void sub_816C110(void) +static void sub_816C110(void) { sub_80D6E84(); sub_812220C(gSaveBlock1Ptr->pcItems, 50, &(playerPCItemPageInfo.pageItems), &(playerPCItemPageInfo.count), 0x8); } -void sub_812225C(u16 *, u16 *, u8, u8); - -void sub_816C140(void) +static void sub_816C140(void) { sub_812225C(&(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos), playerPCItemPageInfo.pageItems, playerPCItemPageInfo.count); } -extern const u8 gText_TossItem[]; -extern const u8 gText_WithdrawItem[]; - -void sub_816C30C(u8 taskId); - -void ItemStorage_ProcessInput(u8 taskId) +static void ItemStorage_ProcessWithdrawTossInput(u8 taskId) { s16 *data; bool32 toss; @@ -965,24 +994,14 @@ void ItemStorage_ProcessInput(u8 taskId) CopyWindowToVram(gUnknown_0203BCC4->windowIds[2], 2); sub_816C110(); sub_816C140(); - sub_816BD04(); + ItemStorage_RefreshListMenu(); data[5] = ListMenuInit(&gMultiuseListMenuTemplate, playerPCItemPageInfo.itemsAbove, playerPCItemPageInfo.cursorPos); - sub_816BF60(); + ItemStorage_StartScrollIndicator(); schedule_bg_copy_tilemap_to_vram(0); - gTasks[taskId].func = sub_816C30C; + gTasks[taskId].func = ItemStorage_ProcessInput; } -extern const u8 gText_GoBackPrevMenu[]; -extern const u8 gText_WithdrawHowManyItems[]; -extern const u8 gText_WithdrawXItems[]; -extern const u8 gText_TossHowManyVar1s[]; -extern const u8 gText_ThrewAwayVar2Var1s[]; -extern const u8 gText_NoRoomInBag[]; -extern const u8 gText_TooImportantToToss[]; -extern const u8 gText_ConfirmTossItems[]; -extern const u8 gText_MoveVar1Where[]; - -const u8* sub_816C228(u16 itemId) +static const u8* ItemStorage_GetItemPcResponse(u16 itemId) { const u8 *string; @@ -1022,7 +1041,7 @@ const u8* sub_816C228(u16 itemId) return string; } -void sub_816C2C0(const u8 *string) +static void ItemStorage_PrintItemPcResponse(const u8 *string) { u8 windowId = gUnknown_0203BCC4->windowIds[1]; FillWindowPixelBuffer(windowId, 0x11); @@ -1030,11 +1049,7 @@ void sub_816C2C0(const u8 *string) PrintTextOnWindow(windowId, 1, gStringVar4, 0, 1, 0, NULL); } -void sub_816C400(u8 taskId); -void sub_816C450(u8 taskId); -void sub_816C71C(u8 taskId); - -void sub_816C30C(u8 taskId) +static void ItemStorage_ProcessInput(u8 taskId) { s16 *data; s32 id; @@ -1046,7 +1061,7 @@ void sub_816C30C(u8 taskId) if((playerPCItemPageInfo.itemsAbove + playerPCItemPageInfo.cursorPos) != (playerPCItemPageInfo.count - 1)) { PlaySE(SE_SELECT); - sub_816C450(taskId); + ItemStorage_ItemSwapChoosePrompt(taskId); } } else @@ -1059,17 +1074,17 @@ void sub_816C30C(u8 taskId) break; case -2: PlaySE(SE_SELECT); - sub_816C400(taskId); + ItemStorage_GoBackToPlayerPCMenu(taskId); break; default: PlaySE(SE_SELECT); - sub_816C71C(taskId); + ItemStorage_DoItemAction(taskId); break; } } } -void bx_battle_menu_t3(u8 taskId) +static void ItemStorage_GoBackToPlayerPCMenu_InitStorage(u8 taskId) { s16 *data; @@ -1078,31 +1093,27 @@ void bx_battle_menu_t3(u8 taskId) { NewMenuHelpers_DrawDialogueFrame(0, 0); if(!data[3]) - InitItemStorageMenu(taskId, 0); + InitItemStorageMenu(taskId, ITEMPC_MENU_WITHDRAW); else - InitItemStorageMenu(taskId, 2); + InitItemStorageMenu(taskId, ITEMPC_MENU_TOSS); gTasks[taskId].func = ItemStorageMenuProcessInput; } } - -void sub_816C400(u8 taskId) +static void ItemStorage_GoBackToPlayerPCMenu(u8 taskId) { s16 *data; data = gTasks[taskId].data; sub_816C0C8(); - sub_816BF9C(); + ItemStorage_RemoveScrollIndicator(); sub_81AE6C8(data[5], NULL, NULL); sub_81223B0(gUnknown_0203BCC4->spriteIds, 7); sub_816BC58(); - gTasks[taskId].func = bx_battle_menu_t3; + gTasks[taskId].func = ItemStorage_GoBackToPlayerPCMenu_InitStorage; } -void sub_816C690(u8); -void sub_816C4FC(u8 taskId); - -void sub_816C450(u8 taskId) +static void ItemStorage_ItemSwapChoosePrompt(u8 taskId) { s16 *data; @@ -1112,13 +1123,11 @@ void sub_816C450(u8 taskId) sub_816BFB8(data[5], 0, 0); sub_816C690(gUnknown_0203BCC4->unk666); CopyItemName(gSaveBlock1Ptr->pcItems[gUnknown_0203BCC4->unk666].itemId, gStringVar1); - sub_816C2C0(sub_816C228(ITEMPC_SWITCH_WHICH_ITEM)); + ItemStorage_PrintItemPcResponse(ItemStorage_GetItemPcResponse(ITEMPC_SWITCH_WHICH_ITEM)); gTasks[taskId].func = sub_816C4FC; } -void sub_816C5A0(u8 taskId, bool8 a); - -void sub_816C4FC(u8 taskId) +static void sub_816C4FC(u8 taskId) { s16 *data; s32 id; @@ -1127,7 +1136,7 @@ void sub_816C4FC(u8 taskId) if(gMain.newKeys & SELECT_BUTTON) { sub_81AE860(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos)); - sub_816C5A0(taskId, FALSE); + ItemStorage_DoItemSwap(taskId, FALSE); return; } id = ListMenuHandleInputGetItemId(data[5]); @@ -1141,22 +1150,20 @@ void sub_816C4FC(u8 taskId) case -2: if(gMain.newKeys & A_BUTTON) { - sub_816C5A0(taskId, FALSE); + ItemStorage_DoItemSwap(taskId, FALSE); } else - sub_816C5A0(taskId, TRUE); + ItemStorage_DoItemSwap(taskId, TRUE); break; default: - sub_816C5A0(taskId, FALSE); + ItemStorage_DoItemSwap(taskId, FALSE); break; } } - -void sub_816C5A0(u8 taskId, bool8 a) +static void ItemStorage_DoItemSwap(u8 taskId, bool8 a) { s16 *data; - s32 id; u16 b; u8 c; @@ -1172,9 +1179,8 @@ void sub_816C5A0(u8 taskId, bool8 a) if(c != b - 1) { sub_80D702C(gSaveBlock1Ptr->pcItems, c, b); - sub_816BD04(); + ItemStorage_RefreshListMenu(); } - } else goto LABEL_SKIP_CURSOR_DECREMENT; @@ -1186,62 +1192,55 @@ void sub_816C5A0(u8 taskId, bool8 a) gUnknown_0203BCC4->unk666 = 0xFF; data[5] = ListMenuInit(&gMultiuseListMenuTemplate, playerPCItemPageInfo.itemsAbove, playerPCItemPageInfo.cursorPos); schedule_bg_copy_tilemap_to_vram(0); - gTasks[taskId].func = sub_816C30C; + gTasks[taskId].func = ItemStorage_ProcessInput; } -//void -void sub_816C690(u8 a) +static void sub_816C690(u8 a) { sub_8122448(gUnknown_0203BCC4->spriteIds, 7, 128, ((a+1) * 16)); } -void sub_816C6BC(u8 windowId, u16 value, u32 mode, u8 x, u8 y, u8 n) +static void sub_816C6BC(u8 windowId, u16 value, u32 mode, u8 x, u8 y, u8 n) { ConvertIntToDecimalStringN(gStringVar1, value, mode, n); StringExpandPlaceholders(gStringVar4, gText_xVar1); PrintTextOnWindow(windowId, 1, gStringVar4, GetStringCenterAlignXOffset(1, gStringVar4, 48), y, 0, NULL); } -void sub_816C8FC(u8 taskId); -void sub_816C9B8(u8 taskid); -void sub_816C818(u8 taskid); - -void sub_816C71C(u8 taskId) +static void ItemStorage_DoItemAction(u8 taskId) { s16 *data; u16 b; data = gTasks[taskId].data; b = (playerPCItemPageInfo.cursorPos + playerPCItemPageInfo.itemsAbove); - sub_816BF9C(); + ItemStorage_RemoveScrollIndicator(); data[2] = 1; if(!data[3]) { if(gSaveBlock1Ptr->pcItems[b].quantity == 1) { - sub_816C8FC(taskId); + ItemStorage_DoItemWithdraw(taskId); return; } CopyItemName(gSaveBlock1Ptr->pcItems[b].itemId, gStringVar1); - sub_816C2C0(sub_816C228(ITEMPC_HOW_MANY_TO_WITHDRAW)); + ItemStorage_PrintItemPcResponse(ItemStorage_GetItemPcResponse(ITEMPC_HOW_MANY_TO_WITHDRAW)); } else { if(gSaveBlock1Ptr->pcItems[b].quantity == 1) { - sub_816C9B8(taskId); + ItemStorage_DoItemToss(taskId); return; } CopyItemName(gSaveBlock1Ptr->pcItems[b].itemId, gStringVar1); - sub_816C2C0(sub_816C228(ITEMPC_HOW_MANY_TO_TOSS)); + ItemStorage_PrintItemPcResponse(ItemStorage_GetItemPcResponse(ITEMPC_HOW_MANY_TO_TOSS)); } sub_816C6BC(sub_816BC7C(4), data[2], STR_CONV_MODE_LEADING_ZEROS, 8, 1, 3); - gTasks[taskId].func = sub_816C818; + gTasks[taskId].func = ItemStorage_HandleQuantityRolling; } -void sub_816CBC0(u8 taskId); - -void sub_816C818(u8 taskId) +static void ItemStorage_HandleQuantityRolling(u8 taskId) { s16 *data; u16 b; @@ -1257,24 +1256,21 @@ void sub_816C818(u8 taskId) PlaySE(SE_SELECT); sub_816BCC4(4); if(!data[3]) - sub_816C8FC(taskId); + ItemStorage_DoItemWithdraw(taskId); else - sub_816C9B8(taskId); + ItemStorage_DoItemToss(taskId); } else if(gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); sub_816BCC4(4); - sub_816C2C0(sub_816C228(gSaveBlock1Ptr->pcItems[b].itemId)); - sub_816CBC0(taskId); + ItemStorage_PrintItemPcResponse(ItemStorage_GetItemPcResponse(gSaveBlock1Ptr->pcItems[b].itemId)); + ItemStorage_StartScrollIndicatorAndProcessInput(taskId); } } } -void sub_816CB04(u8 taskId); -void sub_816CB74(u8 taskId); - -void sub_816C8FC(u8 taskId) +static void ItemStorage_DoItemWithdraw(u8 taskId) { s16 *data; u16 b; @@ -1285,23 +1281,18 @@ void sub_816C8FC(u8 taskId) { CopyItemName(gSaveBlock1Ptr->pcItems[b].itemId, gStringVar1); ConvertIntToDecimalStringN(gStringVar2, data[2], STR_CONV_MODE_LEFT_ALIGN, 3); - sub_816C2C0(sub_816C228(ITEMPC_WITHDREW_THING)); - gTasks[taskId].func = sub_816CB04; + ItemStorage_PrintItemPcResponse(ItemStorage_GetItemPcResponse(ITEMPC_WITHDREW_THING)); + gTasks[taskId].func = ItemStorage_HandleRemoveItem; } else { data[2] = 0; - sub_816C2C0(sub_816C228(ITEMPC_NO_MORE_ROOM)); - gTasks[taskId].func = sub_816CB74; + ItemStorage_PrintItemPcResponse(ItemStorage_GetItemPcResponse(ITEMPC_NO_MORE_ROOM)); + gTasks[taskId].func = ItemStorage_WaitPressHandleResumeProcessInput; } } -extern const struct WindowTemplate gUnknown_085DFF84; -extern const struct YesNoFuncTable gUnknown_085DFF3C; - -bool8 itemid_is_unique(u16 itemId); - -void sub_816C9B8(u8 taskId) +static void ItemStorage_DoItemToss(u8 taskId) { s16 *data; u16 b; @@ -1312,32 +1303,30 @@ void sub_816C9B8(u8 taskId) { CopyItemName(gSaveBlock1Ptr->pcItems[b].itemId, gStringVar1); ConvertIntToDecimalStringN(gStringVar2, data[2], STR_CONV_MODE_LEFT_ALIGN, 3); - sub_816C2C0(sub_816C228(ITEMPC_OKAY_TO_THROW_AWAY)); + ItemStorage_PrintItemPcResponse(ItemStorage_GetItemPcResponse(ITEMPC_OKAY_TO_THROW_AWAY)); CreateYesNoMenuWithCallbacks(taskId, &gUnknown_085DFF84, 1, 0, 1, 0x214, 0xE, &gUnknown_085DFF3C); } else { data[2] = 0; - sub_816C2C0(sub_816C228(ITEMPC_TOO_IMPORTANT)); - gTasks[taskId].func = sub_816CB74; + ItemStorage_PrintItemPcResponse(ItemStorage_GetItemPcResponse(ITEMPC_TOO_IMPORTANT)); + gTasks[taskId].func = ItemStorage_WaitPressHandleResumeProcessInput; } } -void sub_816CA94(u8 taskId) +static void ItemStorage_ResumeInputFromYesToss(u8 taskId) { - sub_816C2C0(sub_816C228(ITEMPC_THREW_AWAY_ITEM)); - gTasks[taskId].func = sub_816CB04; + ItemStorage_PrintItemPcResponse(ItemStorage_GetItemPcResponse(ITEMPC_THREW_AWAY_ITEM)); + gTasks[taskId].func = ItemStorage_HandleRemoveItem; } -void sub_816CAC8(u8 taskId) +static void ItemStorage_ResumeInputFromNoToss(u8 taskId) { - sub_816C2C0(sub_816C228(gSaveBlock1Ptr->pcItems[(playerPCItemPageInfo.itemsAbove + playerPCItemPageInfo.cursorPos)].itemId)); - sub_816CBC0(taskId); + ItemStorage_PrintItemPcResponse(ItemStorage_GetItemPcResponse(gSaveBlock1Ptr->pcItems[(playerPCItemPageInfo.itemsAbove + playerPCItemPageInfo.cursorPos)].itemId)); + ItemStorage_StartScrollIndicatorAndProcessInput(taskId); } -void sub_80D6E48(u8, u16); - -void sub_816CB04(u8 taskId) +static void ItemStorage_HandleRemoveItem(u8 taskId) { s16 *data; @@ -1348,26 +1337,26 @@ void sub_816CB04(u8 taskId) sub_81AE6C8(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos)); sub_816C110(); sub_816C140(); - sub_816BD04(); + ItemStorage_RefreshListMenu(); data[5] = ListMenuInit(&gMultiuseListMenuTemplate, playerPCItemPageInfo.itemsAbove, playerPCItemPageInfo.cursorPos); - sub_816CBC0(taskId); + ItemStorage_StartScrollIndicatorAndProcessInput(taskId); } } -void sub_816CB74(u8 taskId) +static void ItemStorage_WaitPressHandleResumeProcessInput(u8 taskId) { s16 *data; data = gTasks[taskId].data; if(gMain.newKeys & (A_BUTTON | B_BUTTON)) { - sub_816C2C0(sub_816C228(gSaveBlock1Ptr->pcItems[(playerPCItemPageInfo.itemsAbove + playerPCItemPageInfo.cursorPos)].itemId)); - sub_816CBC0(taskId); + ItemStorage_PrintItemPcResponse(ItemStorage_GetItemPcResponse(gSaveBlock1Ptr->pcItems[(playerPCItemPageInfo.itemsAbove + playerPCItemPageInfo.cursorPos)].itemId)); + ItemStorage_StartScrollIndicatorAndProcessInput(taskId); } } -void sub_816CBC0(u8 taskId) +static void ItemStorage_StartScrollIndicatorAndProcessInput(u8 taskId) { - sub_816BF60(); - gTasks[taskId].func = sub_816C30C; + ItemStorage_StartScrollIndicator(); + gTasks[taskId].func = ItemStorage_ProcessInput; } -- cgit v1.2.3