diff options
Diffstat (limited to 'src/item_menu.c')
-rwxr-xr-x | src/item_menu.c | 779 |
1 files changed, 424 insertions, 355 deletions
diff --git a/src/item_menu.c b/src/item_menu.c index 274b92147..561019e89 100755 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -52,7 +52,7 @@ #include "battle_pike.h" #include "constants/rgb.h" -void GoToBagMenu(u8 bagMenuType, u8 pocketId, void ( *postExitMenuMainCallback2)()); +void GoToBagMenu(u8 bagMenuType, u8 pocketId, void (*postExitMenuMainCallback2)()); void CB2_Bag(void); bool8 SetupBagMenu(void); void BagMenu_InitBGs(void); @@ -63,12 +63,12 @@ void LoadBagItemListBuffers(u8); void BagMenu_PrintPocketNames(const u8*, const u8*); void BagMenu_CopyPocketNameToWindow(u32); void BagMenu_DrawPocketIndicatorSquare(u8, u8); -void bag_menu_add_pocket_scroll_arrow_indicators_maybe(void); -void bag_menu_add_list_scroll_arrow_indicators_maybe(void); +void CreatePocketScrollArrowPair(void); +void CreatePocketSwitchArrowPair(void); void BagMenu_PrepareTMHMMoveWindow(void); bool8 IsWallysBag(void); void Task_WallyTutorialBagMenu(u8); -void Task_BagMenu(u8); +void Task_BagMenu_HandleInput(u8); void GetItemName(s8*, u16); u16 ItemIdToBattleMoveId(u16); u16 BagGetItemIdByPocketPosition(u8, u16); @@ -77,7 +77,7 @@ void BagMenu_PrintCursor(u8, u8); void BagMenu_Print(u8, u8, const u8*, u8, u8, u8, u8, u8, u8); bool8 ItemId_GetImportance(u16); u16 BagGetQuantityByPocketPosition(u8, u16); -void sub_81AB89C(void); +void BagDestroyPocketSwitchArrowPair(void); void TaskCloseBagMenu_2(u8); u8 AddItemMessageWindow(u8); void bag_menu_RemoveBagItem_message_window(u8); @@ -122,13 +122,13 @@ void sub_81ADC0C(u8); void CB2_ApprenticeExitBagMenu(void); void CB2_FavorLadyExitBagMenu(void); void CB2_QuizLadyExitBagMenu(void); -void sub_81ABA6C(void); +void All_CalculateNItemsAndMaxShowed(void); static void SetPocketListPositions(void); -void sub_81ABAE0(void); -u8 sub_81AB1F0(u8); +void UpdatePocketScrollPositions(void); +u8 CreateBagInputHandlerTask(u8); void sub_81AC23C(u8); void BagMenu_MoveCursorCallback(s32 a, bool8 b, struct ListMenu*); -void PrintItemQuantityPlusGFX(u8 rboxId, s32 item_index_in_pocket, u8 a); +void BagMenu_ItemPrintCallback(u8 windowId, s32 itemIndex, u8 a); void ItemMenu_UseOutOfBattle(u8 taskId); void ItemMenu_Toss(u8 taskId); void ItemMenu_Register(u8 taskId); @@ -140,11 +140,11 @@ void Task_FadeAndCloseBagMenu(u8 taskId); void unknown_ItemMenu_Show(u8 taskId); void unknown_ItemMenu_Give2(u8 taskId); void unknown_ItemMenu_Confirm2(u8 taskId); -void unknown_item_menu_type(u8 taskId); -void item_menu_type_2(u8 taskId); -void DisplaySellItemAskString(u8 taskId); -void DisplayDepositItemAskString(u8 taskId); -void item_menu_type_b(u8 taskId); +void Task_ItemContext_FieldOrBattle(u8 taskId); +void Task_ItemContext_FieldGive(u8 taskId); +void Task_ItemContext_Sell(u8 taskId); +void Task_ItemContext_Deposit(u8 taskId); +void Task_ItemContext_ItemPC_2(u8 taskId); void BagMenu_ConfirmToss(u8 taskId); void BagMenu_CancelToss(u8 taskId); void BagMenu_ConfirmSell(u8 taskId); @@ -152,7 +152,7 @@ void BagMenu_CancelSell(u8 taskId); // .rodata -static const struct BgTemplate sBgTemplates_ItemMenu[3] = +static const struct BgTemplate sBgTemplates_ItemMenu[] = { { .bg = 0, @@ -187,7 +187,7 @@ static const struct ListMenuTemplate sItemListMenu = { .items = NULL, .moveCursorFunc = BagMenu_MoveCursorCallback, - .itemPrintFunc = PrintItemQuantityPlusGFX, + .itemPrintFunc = BagMenu_ItemPrintCallback, .totalItems = 0, .maxShowed = 0, .windowId = 0, @@ -205,59 +205,115 @@ static const struct ListMenuTemplate sItemListMenu = .cursorKind = 0 }; -const struct MenuAction sItemMenuActions[] = { - {gMenuText_Use, ItemMenu_UseOutOfBattle}, - {gMenuText_Toss, ItemMenu_Toss}, - {gMenuText_Register, ItemMenu_Register}, - {gMenuText_Give, ItemMenu_Give}, - {gText_Cancel2, ItemMenu_Cancel}, - {gMenuText_Use, ItemMenu_UseInBattle}, - {gMenuText_Check, ItemMenu_UseOutOfBattle}, - {gMenuText_Walk, ItemMenu_UseOutOfBattle}, - {gMenuText_Deselect, ItemMenu_Register}, - {gMenuText_CheckTag, ItemMenu_CheckTag}, - {gMenuText_Confirm, Task_FadeAndCloseBagMenu}, - {gMenuText_Show, unknown_ItemMenu_Show}, - {gMenuText_Give2, unknown_ItemMenu_Give2}, - {gMenuText_Confirm, unknown_ItemMenu_Confirm2}, - {gText_EmptyString2, NULL} +static const struct MenuAction sItemMenuActions[] = { + [ITEMMENUACTION_USE] = {gMenuText_Use, ItemMenu_UseOutOfBattle}, + [ITEMMENUACTION_TOSS] = {gMenuText_Toss, ItemMenu_Toss}, + [ITEMMENUACTION_REGISTER] = {gMenuText_Register, ItemMenu_Register}, + [ITEMMENUACTION_GIVE] = {gMenuText_Give, ItemMenu_Give}, + [ITEMMENUACTION_CANCEL] = {gText_Cancel2, ItemMenu_Cancel}, + [ITEMMENUACTION_BATTLE_USE] = {gMenuText_Use, ItemMenu_UseInBattle}, + [ITEMMENUACTION_CHECK] = {gMenuText_Check, ItemMenu_UseOutOfBattle}, + [ITEMMENUACTION_WALK] = {gMenuText_Walk, ItemMenu_UseOutOfBattle}, + [ITEMMENUACTION_DESELECT] = {gMenuText_Deselect, ItemMenu_Register}, + [ITEMMENUACTION_CHECK_TAG] = {gMenuText_CheckTag, ItemMenu_CheckTag}, + [ITEMMENUACTION_CONFIRM] = {gMenuText_Confirm, Task_FadeAndCloseBagMenu}, + [ITEMMENUACTION_SHOW] = {gMenuText_Show, unknown_ItemMenu_Show}, + [ITEMMENUACTION_GIVE_2] = {gMenuText_Give2, unknown_ItemMenu_Give2}, + [ITEMMENUACTION_CONFIRM_2] = {gMenuText_Confirm, unknown_ItemMenu_Confirm2}, + [ITEMMENUACTION_DUMMY] = {gText_EmptyString2, NULL} }; -const u8 gUnknown_0861402C[] = {0, 3, 1, 4}; -const u8 gUnknown_08614030[] = {0, 2, 14, 4}; -const u8 gUnknown_08614034[] = {3, 14, 1, 4}; -const u8 gUnknown_08614038[] = {0, 3, 14, 4}; -const u8 gUnknown_0861403C[] = {9, 14, 0, 3, 1, 4}; -const u8 gUnknown_08614042[] = {5, 4}; -const u8 gUnknown_08614044[] = {3, 4}; -const u8 gUnknown_08614046 = 4; -const u8 gUnknown_08614047[] = {10, 9, 14, 4}; -const u8 gUnknown_0861404B[] = {11, 4}; -const u8 gUnknown_0861404D[] = {12, 4}; -const u8 gUnknown_0861404F[] = {13, 4}; - -const TaskFunc gUnknown_08614054[] = { - unknown_item_menu_type, - unknown_item_menu_type, - item_menu_type_2, - DisplaySellItemAskString, - Task_FadeAndCloseBagMenu, - unknown_item_menu_type, - DisplayDepositItemAskString, - unknown_item_menu_type, - unknown_item_menu_type, - unknown_item_menu_type, - NULL, - item_menu_type_b +// these are all 2D arrays with a width of 2 but are represented as 1D arrays +// ITEMMENUACTION_DUMMY is used to represent blank spaces +static const u8 sContextMenuItems_ItemsPocket[] = { + ITEMMENUACTION_USE, ITEMMENUACTION_GIVE, + ITEMMENUACTION_TOSS, ITEMMENUACTION_CANCEL }; -const struct YesNoFuncTable sYesNoTossFunctions = {BagMenu_ConfirmToss, BagMenu_CancelToss}; +static const u8 sContextMenuItems_KeyItemsPocket[] = { + ITEMMENUACTION_USE, ITEMMENUACTION_REGISTER, + ITEMMENUACTION_DUMMY, ITEMMENUACTION_CANCEL +}; + +static const u8 sContextMenuItems_BallsPocket[] = { + ITEMMENUACTION_GIVE, ITEMMENUACTION_DUMMY, + ITEMMENUACTION_TOSS, ITEMMENUACTION_CANCEL +}; + +static const u8 sContextMenuItems_TmHmPocket[] = { + ITEMMENUACTION_USE, ITEMMENUACTION_GIVE, + ITEMMENUACTION_DUMMY, ITEMMENUACTION_CANCEL +}; + +static const u8 sContextMenuItems_BerriesPocket[] = { + ITEMMENUACTION_CHECK_TAG, ITEMMENUACTION_DUMMY, + ITEMMENUACTION_USE, ITEMMENUACTION_GIVE, + ITEMMENUACTION_TOSS, ITEMMENUACTION_CANCEL +}; + +static const u8 sContextMenuItems_BattleUse[] = { + ITEMMENUACTION_BATTLE_USE, ITEMMENUACTION_CANCEL +}; + +static const u8 sContextMenuItems_Give[] = { + ITEMMENUACTION_GIVE, ITEMMENUACTION_CANCEL +}; + +static const u8 sContextMenuItems_Cancel[] = { + ITEMMENUACTION_CANCEL +}; + +static const u8 sContextMenuItems_BerryBlenderCrush[] = { + ITEMMENUACTION_CONFIRM, ITEMMENUACTION_CHECK_TAG, + ITEMMENUACTION_DUMMY, ITEMMENUACTION_CANCEL +}; + +static const u8 sContextMenuItems_Apprentice[] = { + ITEMMENUACTION_SHOW, ITEMMENUACTION_CANCEL +}; -const struct YesNoFuncTable sYesNoSellItemFunctions = {BagMenu_ConfirmSell, BagMenu_CancelSell}; +static const u8 sContextMenuItems_FavorLady[] = { + ITEMMENUACTION_GIVE_2, ITEMMENUACTION_CANCEL +}; -const struct ScrollArrowsTemplate gBagScrollArrowsTemplate = {SCROLL_ARROW_LEFT, 0x1C, 16, SCROLL_ARROW_RIGHT, 100, 16, -1, -1, 0x6F, 0x6F, 0}; +static const u8 sContextMenuItems_QuizLady[] = { + ITEMMENUACTION_CONFIRM_2, ITEMMENUACTION_CANCEL +}; -const u8 gRegisteredSelect_Gfx[] = INCBIN_U8("graphics/interface/select_button.4bpp"); +static const TaskFunc gUnknown_08614054[] = { + [ITEMMENULOCATION_FIELD] = Task_ItemContext_FieldOrBattle, + [ITEMMENULOCATION_BATTLE] = Task_ItemContext_FieldOrBattle, + [ITEMMENULOCATION_PARTY] = Task_ItemContext_FieldGive, + [ITEMMENULOCATION_SHOP] = Task_ItemContext_Sell, + [ITEMMENULOCATION_BERRY_TREE] = Task_FadeAndCloseBagMenu, + [ITEMMENULOCATION_BERRY_BLENDER_CRUSH] = Task_ItemContext_FieldOrBattle, + [ITEMMENULOCATION_ITEMPC] = Task_ItemContext_Deposit, + [ITEMMENULOCATION_FAVOR_LADY] = Task_ItemContext_FieldOrBattle, + [ITEMMENULOCATION_QUIZ_LADY] = Task_ItemContext_FieldOrBattle, + [ITEMMENULOCATION_APPRENTICE] = Task_ItemContext_FieldOrBattle, + [ITEMMENULOCATION_WALLY] = NULL, + [ITEMMENULOCATION_PCBOX] = Task_ItemContext_ItemPC_2 +}; + +static const struct YesNoFuncTable sYesNoTossFunctions = {BagMenu_ConfirmToss, BagMenu_CancelToss}; + +static const struct YesNoFuncTable sYesNoSellItemFunctions = {BagMenu_ConfirmSell, BagMenu_CancelSell}; + +static const struct ScrollArrowsTemplate sBagScrollArrowsTemplate = { + .firstArrowType = SCROLL_ARROW_LEFT, + .firstX = 28, + .firstY = 16, + .secondArrowType = SCROLL_ARROW_RIGHT, + .secondX = 100, + .secondY = 16, + .fullyUpThreshold = -1, + .fullyDownThreshold = -1, + .tileTag = 111, + .palTag = 111, + .palNum = 0, +}; + +static const u8 sRegisteredSelect_Gfx[] = INCBIN_U8("graphics/interface/select_button.4bpp"); static const u8 sFontColorTable[][3] = { // bgColor, textColor, shadowColor @@ -268,7 +324,7 @@ static const u8 sFontColorTable[][3] = { {0, 14, 10} }; -const struct WindowTemplate gUnknown_08614174[] = +const struct WindowTemplate sDefaultBagWindows[] = { { // Item names .bg = 0, @@ -327,7 +383,7 @@ const struct WindowTemplate gUnknown_08614174[] = DUMMY_WIN_TEMPLATE, }; -const struct WindowTemplate gUnknown_086141AC[] = +const struct WindowTemplate sContextMenuWindowTemplates[] = { { .bg = 1, @@ -424,11 +480,11 @@ const struct WindowTemplate gUnknown_086141AC[] = // .text struct ListBuffer1 { - struct ListMenuItem subBuffers[65]; + struct ListMenuItem subBuffers[MAX_POCKET_ITEMS]; }; struct ListBuffer2 { - s8 name[65][24]; + s8 name[MAX_POCKET_ITEMS][24]; }; struct TempWallyStruct { @@ -436,7 +492,7 @@ struct TempWallyStruct { struct ItemSlot bagPocket_PokeBalls[BAG_POKEBALLS_COUNT]; u16 cursorPosition[POCKETS_COUNT]; u16 scrollPosition[POCKETS_COUNT]; - u8 filler[0x2]; + u8 filler[2]; u16 pocket; }; @@ -461,86 +517,85 @@ void ResetBagScrollPositions(void) void CB2_BagMenuFromStartMenu(void) { - GoToBagMenu(RETURN_LOCATION_FIELD, POCKETS_COUNT, CB2_ReturnToFieldWithOpenMenu); + GoToBagMenu(ITEMMENULOCATION_FIELD, POCKETS_COUNT, CB2_ReturnToFieldWithOpenMenu); } -void sub_81AABB0(void) +void CB2_BagMenuFromBattle(void) { if (!InBattlePyramid()) - GoToBagMenu(RETURN_LOCATION_BATTLE, POCKETS_COUNT, CB2_SetUpReshowBattleScreenAfterMenu2); + GoToBagMenu(ITEMMENULOCATION_BATTLE, POCKETS_COUNT, CB2_SetUpReshowBattleScreenAfterMenu2); else GoToBattlePyramidBagMenu(1, CB2_SetUpReshowBattleScreenAfterMenu2); } void CB2_ChooseBerry(void) { - GoToBagMenu(RETURN_LOCATION_FIELD_2, BERRIES_POCKET, CB2_ReturnToFieldContinueScript); + GoToBagMenu(ITEMMENULOCATION_BERRY_TREE, BERRIES_POCKET, CB2_ReturnToFieldContinueScript); } void ChooseBerrySetCallback(void (*callback)(void)) { - GoToBagMenu(RETURN_LOCATION_FIELD_3, BERRIES_POCKET, callback); + GoToBagMenu(ITEMMENULOCATION_BERRY_BLENDER_CRUSH, BERRIES_POCKET, callback); } void CB2_GoToSellMenu(void) { - GoToBagMenu(RETURN_LOCATION_SHOP, POCKETS_COUNT, CB2_ExitSellMenu); + GoToBagMenu(ITEMMENULOCATION_SHOP, POCKETS_COUNT, CB2_ExitSellMenu); } -void sub_81AAC14(void) +void CB2_GoToItemDepositMenu(void) { - GoToBagMenu(RETURN_LOCATION_PC, POCKETS_COUNT, sub_816B31C); + GoToBagMenu(ITEMMENULOCATION_ITEMPC, POCKETS_COUNT, sub_816B31C); } void ApprenticeOpenBagMenu(void) { - GoToBagMenu(RETURN_LOCATION_FIELD_6, POCKETS_COUNT, CB2_ApprenticeExitBagMenu); + GoToBagMenu(ITEMMENULOCATION_APPRENTICE, POCKETS_COUNT, CB2_ApprenticeExitBagMenu); gSpecialVar_0x8005 = ITEM_NONE; gSpecialVar_Result = FALSE; } void FavorLadyOpenBagMenu(void) { - GoToBagMenu(RETURN_LOCATION_FIELD_4, POCKETS_COUNT, CB2_FavorLadyExitBagMenu); + GoToBagMenu(ITEMMENULOCATION_FAVOR_LADY, POCKETS_COUNT, CB2_FavorLadyExitBagMenu); gSpecialVar_Result = FALSE; } void QuizLadyOpenBagMenu(void) { - GoToBagMenu(RETURN_LOCATION_FIELD_5, POCKETS_COUNT, CB2_QuizLadyExitBagMenu); + GoToBagMenu(ITEMMENULOCATION_QUIZ_LADY, POCKETS_COUNT, CB2_QuizLadyExitBagMenu); gSpecialVar_Result = FALSE; } -void GoToBagMenu(u8 bagMenuType, u8 pocketId, void ( *postExitMenuMainCallback2)()) +void GoToBagMenu(u8 location, u8 pocket, void ( *postExitMenuMainCallback2)()) { - u8 temp; gBagMenu = AllocZeroed(sizeof(struct BagMenuStruct)); - if (gBagMenu == 0) + if (gBagMenu == NULL) { SetMainCallback2(postExitMenuMainCallback2); } else { - if (bagMenuType != RETURN_LOCATION_UNCHANGED) - gBagPositionStruct.location = bagMenuType; + if (location != ITEMMENULOCATION_LAST) + gBagPositionStruct.location = location; if (postExitMenuMainCallback2) gBagPositionStruct.bagCallback = postExitMenuMainCallback2; - if (pocketId < POCKETS_COUNT) - gBagPositionStruct.pocket = pocketId; - temp = gBagPositionStruct.location - (POCKETS_COUNT - 1); - if (temp <= 1) - gBagMenu->unk81B = 1; - gBagMenu->mainCallback2 = 0; - gBagMenu->unk81A = 0xFF; - gBagMenu->unk81E = -1; - gBagMenu->unk81F = -1; + if (pocket < POCKETS_COUNT) + gBagPositionStruct.pocket = pocket; + if (gBagPositionStruct.location == ITEMMENULOCATION_BERRY_TREE || + gBagPositionStruct.location == ITEMMENULOCATION_BERRY_BLENDER_CRUSH) + gBagMenu->pocketSwitchDisabled = TRUE; + gBagMenu->exitCallback = NULL; + gBagMenu->itemOriginalLocation = 0xFF; + gBagMenu->pocketScrollArrowsTask = 0xFF; + gBagMenu->pocketSwitchArrowsTask = 0xFF; memset(gBagMenu->spriteId, 0xFF, sizeof(gBagMenu->spriteId)); memset(gBagMenu->windowPointers, 0xFF, 10); SetMainCallback2(CB2_Bag); } } -void c2_bag_3(void) +void CB2_BagMenuRun(void) { RunTasks(); AnimateSprites(); @@ -549,7 +604,7 @@ void c2_bag_3(void) UpdatePaletteFade(); } -void vblank_cb_bag_menu(void) +void VBlankCB_BagMenuRun(void) { LoadOam(); ProcessSpriteCopyRequests(); @@ -560,7 +615,7 @@ void vblank_cb_bag_menu(void) void CB2_Bag(void) { - while(sub_81221EC() != TRUE && SetupBagMenu() != TRUE && sub_81221AC() != TRUE) {}; + while(MenuHelpers_CallLinkSomething() != TRUE && SetupBagMenu() != TRUE && MenuHelpers_LinkSomething() != TRUE) {}; } bool8 SetupBagMenu(void) @@ -596,13 +651,13 @@ bool8 SetupBagMenu(void) gMain.state++; break; case 6: - if (sub_81221AC() == FALSE) + if (!MenuHelpers_LinkSomething()) ResetTasks(); gMain.state++; break; case 7: BagMenu_InitBGs(); - gBagMenu->unk834 = 0; + gBagMenu->graphicsLoadState = 0; gMain.state++; break; case 8: @@ -615,9 +670,9 @@ bool8 SetupBagMenu(void) gMain.state++; break; case 10: - sub_81ABA6C(); + All_CalculateNItemsAndMaxShowed(); SetPocketListPositions(); - sub_81ABAE0(); + UpdatePocketScrollPositions(); gMain.state++; break; case 11: @@ -635,7 +690,7 @@ bool8 SetupBagMenu(void) gMain.state++; break; case 14: - taskId = sub_81AB1F0(gBagPositionStruct.location); + taskId = CreateBagInputHandlerTask(gBagPositionStruct.location); gTasks[taskId].data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket], gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]); gTasks[taskId].data[3] = 0; gTasks[taskId].tItemCount = 0; @@ -650,8 +705,8 @@ bool8 SetupBagMenu(void) gMain.state++; break; case 17: - bag_menu_add_pocket_scroll_arrow_indicators_maybe(); - bag_menu_add_list_scroll_arrow_indicators_maybe(); + CreatePocketScrollArrowPair(); + CreatePocketSwitchArrowPair(); gMain.state++; break; case 18: @@ -659,7 +714,7 @@ bool8 SetupBagMenu(void) gMain.state++; break; case 19: - BlendPalettes(-1, 16, 0); + BlendPalettes(0xFFFFFFFF, 16, 0); gMain.state++; break; case 20: @@ -668,8 +723,8 @@ bool8 SetupBagMenu(void) gMain.state++; break; default: - SetVBlankCallback(vblank_cb_bag_menu); - SetMainCallback2(c2_bag_3); + SetVBlankCallback(VBlankCB_BagMenuRun); + SetMainCallback2(CB2_BagMenuRun); return TRUE; } return FALSE; @@ -683,7 +738,7 @@ void BagMenu_InitBGs(void) InitBgsFromTemplates(0, sBgTemplates_ItemMenu, 3); SetBgTilemapBuffer(2, gBagMenu->tilemapBuffer); ResetAllBgsCoordinates(); - schedule_bg_copy_tilemap_to_vram(2); + ScheduleBgCopyTilemapToVram(2); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); ShowBg(0); ShowBg(1); @@ -693,18 +748,18 @@ void BagMenu_InitBGs(void) bool8 LoadBagMenu_Graphics(void) { - switch (gBagMenu->unk834) + switch (gBagMenu->graphicsLoadState) { case 0: - reset_temp_tile_data_buffers(); - decompress_and_copy_tile_data_to_vram(2, gBagScreen_Gfx, 0, 0, 0); - gBagMenu->unk834++; + ResetTempTileDataBuffers(); + DecompressAndCopyTileDataToVram(2, gBagScreen_Gfx, 0, 0, 0); + gBagMenu->graphicsLoadState++; break; case 1: - if (free_temp_tile_data_buffers_if_possible() != TRUE) + if (FreeTempTileDataBuffersIfPossible() != TRUE) { LZDecompressWram(gBagScreen_GfxTileMap, gBagMenu->tilemapBuffer); - gBagMenu->unk834++; + gBagMenu->graphicsLoadState++; } break; case 2: @@ -712,34 +767,34 @@ bool8 LoadBagMenu_Graphics(void) LoadCompressedPalette(gBagScreenFemale_Pal, 0, 0x40); else LoadCompressedPalette(gBagScreenMale_Pal, 0, 0x40); - gBagMenu->unk834++; + gBagMenu->graphicsLoadState++; break; case 3: if (IsWallysBag() == TRUE || gSaveBlock2Ptr->playerGender == MALE) LoadCompressedSpriteSheet(&gBagMaleSpriteSheet); else LoadCompressedSpriteSheet(&gBagFemaleSpriteSheet); - gBagMenu->unk834++; + gBagMenu->graphicsLoadState++; break; case 4: LoadCompressedSpritePalette(&gBagPaletteTable); - gBagMenu->unk834++; + gBagMenu->graphicsLoadState++; break; default: LoadListMenuArrowsGfx(); - gBagMenu->unk834 = 0; + gBagMenu->graphicsLoadState = 0; return TRUE; } return FALSE; } -u8 sub_81AB1F0(u8 a) +u8 CreateBagInputHandlerTask(u8 location) { u8 taskId; - if (a == 10) + if (location == ITEMMENULOCATION_WALLY) taskId = CreateTask(Task_WallyTutorialBagMenu, 0); else - taskId = CreateTask(Task_BagMenu, 0); + taskId = CreateTask(Task_BagMenu_HandleInput, 0); return taskId; } @@ -767,7 +822,7 @@ void LoadBagItemListBuffers(u8 pocketId) StringCopy(sListBuffer2->name[i], gText_CloseBag); subBuffer = sListBuffer1->subBuffers; subBuffer[i].name = sListBuffer2->name[i]; - subBuffer[i].id = -2; + subBuffer[i].id = LIST_CANCEL; } else { @@ -813,73 +868,76 @@ void GetItemName(s8 *dest, u16 itemId) } } -void BagMenu_MoveCursorCallback(s32 a, bool8 b, struct ListMenu *unused) +void BagMenu_MoveCursorCallback(s32 itemIndex, bool8 onInit, struct ListMenu *list) { - if (b != 1) + if (onInit != TRUE) { PlaySE(SE_SELECT); - ShakeBagVisual(); + ShakeBagSprite(); } - if (gBagMenu->unk81A == 0xFF) + if (gBagMenu->itemOriginalLocation == 0xFF) { - RemoveBagItemIconSprite(1 ^ gBagMenu->unk81B_1); - if (a != -2) - AddBagItemIconSprite(BagGetItemIdByPocketPosition(gBagPositionStruct.pocket + 1, a), gBagMenu->unk81B_1); + RemoveBagItemIconSprite(gBagMenu->itemIconSlot ^ 1); + if (itemIndex != LIST_CANCEL) + AddBagItemIconSprite(BagGetItemIdByPocketPosition(gBagPositionStruct.pocket + 1, itemIndex), gBagMenu->itemIconSlot); else - AddBagItemIconSprite(-1, gBagMenu->unk81B_1); - gBagMenu->unk81B_1 ^= 1; - if (!gBagMenu->unk81B_3) - BagMenu_PrintDescription(a); + AddBagItemIconSprite(-1, gBagMenu->itemIconSlot); + gBagMenu->itemIconSlot ^= 1; + if (!gBagMenu->inhibitItemDescriptionPrint) + BagMenu_PrintDescription(itemIndex); } } -void PrintItemQuantityPlusGFX(u8 rboxId, s32 item_index_in_pocket, u8 a) +void BagMenu_ItemPrintCallback(u8 windowId, s32 itemIndex, u8 y) { u16 itemId; u16 itemQuantity; - bool8 unique; int offset; - if (item_index_in_pocket != -2) + + if (itemIndex != LIST_CANCEL) { - if (gBagMenu->unk81A != 0xFF) + if (gBagMenu->itemOriginalLocation != 0xFF) { - if (gBagMenu->unk81A == (u8)item_index_in_pocket) - BagMenu_PrintCursor(a, 2); + if (gBagMenu->itemOriginalLocation == (u8)itemIndex) + BagMenu_PrintCursor(y, 2); else - BagMenu_PrintCursor(a, -1); + BagMenu_PrintCursor(y, 0xFF); } - itemId = BagGetItemIdByPocketPosition(gBagPositionStruct.pocket + 1, item_index_in_pocket); - itemQuantity = BagGetQuantityByPocketPosition(gBagPositionStruct.pocket + 1, item_index_in_pocket); + + itemId = BagGetItemIdByPocketPosition(gBagPositionStruct.pocket + 1, itemIndex); + itemQuantity = BagGetQuantityByPocketPosition(gBagPositionStruct.pocket + 1, itemIndex); + if (itemId >= ITEM_HM01 && itemId <= ITEM_HM08) - BlitBitmapToWindow(rboxId, gBagMenuHMIcon_Gfx, 8, a - 1, 16, 16); + BlitBitmapToWindow(windowId, gBagMenuHMIcon_Gfx, 8, y - 1, 16, 16); + if (gBagPositionStruct.pocket == BERRIES_POCKET) { ConvertIntToDecimalStringN(gStringVar1, itemQuantity, STR_CONV_MODE_RIGHT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, gText_xVar1); - offset = GetStringRightAlignXOffset(7, gStringVar4, 0x77); - BagMenu_Print(rboxId, 7, gStringVar4, offset, a, 0, 0, -1, 0); + offset = GetStringRightAlignXOffset(7, gStringVar4, 119); + BagMenu_Print(windowId, 7, gStringVar4, offset, y, 0, 0, -1, 0); } - else if (gBagPositionStruct.pocket != KEYITEMS_POCKET && (unique = ItemId_GetImportance(itemId)) == FALSE) + else if (gBagPositionStruct.pocket != KEYITEMS_POCKET && ItemId_GetImportance(itemId) == FALSE) { ConvertIntToDecimalStringN(gStringVar1, itemQuantity, STR_CONV_MODE_RIGHT_ALIGN, 2); StringExpandPlaceholders(gStringVar4, gText_xVar1); - offset = GetStringRightAlignXOffset(7, gStringVar4, 0x77); - BagMenu_Print(rboxId, 7, gStringVar4, offset, a, unique, unique, -1, unique); + offset = GetStringRightAlignXOffset(7, gStringVar4, 119); + BagMenu_Print(windowId, 7, gStringVar4, offset, y, 0, 0, -1, 0); } else { if (gSaveBlock1Ptr->registeredItem && gSaveBlock1Ptr->registeredItem == itemId) - BlitBitmapToWindow(rboxId, gRegisteredSelect_Gfx, 0x60, a - 1, 0x18, 16); + BlitBitmapToWindow(windowId, sRegisteredSelect_Gfx, 96, y - 1, 24, 16); } } } -void BagMenu_PrintDescription(int a) +void BagMenu_PrintDescription(int itemIndex) { const u8 *str; - if (a != -2) + if (itemIndex != LIST_CANCEL) { - str = ItemId_GetDescription(BagGetItemIdByPocketPosition(gBagPositionStruct.pocket + 1, a)); + str = ItemId_GetDescription(BagGetItemIdByPocketPosition(gBagPositionStruct.pocket + 1, itemIndex)); } else { @@ -891,48 +949,56 @@ void BagMenu_PrintDescription(int a) BagMenu_Print(1, 1, str, 3, 1, 0, 0, 0, 0); } -void BagMenu_PrintCursor_(u8 a, u8 b) +void BagMenu_PrintCursor_(u8 listTaskId, u8 colorIndex) { - BagMenu_PrintCursor(ListMenuGetYCoordForPrintingArrowCursor(a), b); + BagMenu_PrintCursor(ListMenuGetYCoordForPrintingArrowCursor(listTaskId), colorIndex); } -void BagMenu_PrintCursor(u8 a, u8 b) +void BagMenu_PrintCursor(u8 y, u8 colorIndex) { - if (b == 0xFF) - FillWindowPixelRect(0, PIXEL_FILL(0), 0, a, GetMenuCursorDimensionByFont(1, 0), GetMenuCursorDimensionByFont(1, 1)); + if (colorIndex == 0xFF) + FillWindowPixelRect(0, PIXEL_FILL(0), 0, y, GetMenuCursorDimensionByFont(1, 0), GetMenuCursorDimensionByFont(1, 1)); else - BagMenu_Print(0, 1, gText_SelectorArrow2, 0, a, 0, 0, 0, b); + BagMenu_Print(0, 1, gText_SelectorArrow2, 0, y, 0, 0, 0, colorIndex); } -void bag_menu_add_pocket_scroll_arrow_indicators_maybe(void) +void CreatePocketScrollArrowPair(void) { - if (gBagMenu->unk81E == 0xFF) - gBagMenu->unk81E = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 0xAC, 12, 0x94, gBagMenu->numItemStacks[gBagPositionStruct.pocket] - gBagMenu->numShownItems[gBagPositionStruct.pocket], 0x6E, 0x6E, &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket]); + if (gBagMenu->pocketScrollArrowsTask == 0xFF) + gBagMenu->pocketScrollArrowsTask = AddScrollIndicatorArrowPairParameterized( + SCROLL_ARROW_UP, + 172, + 12, + 148, + gBagMenu->numItemStacks[gBagPositionStruct.pocket] - gBagMenu->numShownItems[gBagPositionStruct.pocket], + 110, + 110, + &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket]); } -void sub_81AB824(void) +void BagDestroyPocketScrollArrowPair(void) { - if (gBagMenu->unk81E != 0xFF) + if (gBagMenu->pocketScrollArrowsTask != 0xFF) { - RemoveScrollIndicatorArrowPair(gBagMenu->unk81E); - gBagMenu->unk81E = 0xFF; + RemoveScrollIndicatorArrowPair(gBagMenu->pocketScrollArrowsTask); + gBagMenu->pocketScrollArrowsTask = 0xFF; } - sub_81AB89C(); + BagDestroyPocketSwitchArrowPair(); } -void bag_menu_add_list_scroll_arrow_indicators_maybe(void) +void CreatePocketSwitchArrowPair(void) { - if (gBagMenu->unk81B != 1 && gBagMenu->unk81F == 0xFF) - gBagMenu->unk81F = AddScrollIndicatorArrowPair(&gBagScrollArrowsTemplate, &gBagPositionStruct.unk6); + if (gBagMenu->pocketSwitchDisabled != TRUE && gBagMenu->pocketSwitchArrowsTask == 0xFF) + gBagMenu->pocketSwitchArrowsTask = AddScrollIndicatorArrowPair(&sBagScrollArrowsTemplate, &gBagPositionStruct.unk6); } -void sub_81AB89C(void) +void BagDestroyPocketSwitchArrowPair(void) { - if (gBagMenu->unk81F != 0xFF) + if (gBagMenu->pocketSwitchArrowsTask != 0xFF) { - RemoveScrollIndicatorArrowPair(gBagMenu->unk81F); - gBagMenu->unk81F = 0xFF; + RemoveScrollIndicatorArrowPair(gBagMenu->pocketSwitchArrowsTask); + gBagMenu->pocketSwitchArrowsTask = 0xFF; } } @@ -956,11 +1022,11 @@ void TaskCloseBagMenu_2(u8 taskId) if (!gPaletteFade.active) { DestroyListMenuTask(data[0], &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket], &gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]); - if (gBagMenu->mainCallback2 != 0) - SetMainCallback2(gBagMenu->mainCallback2); + if (gBagMenu->exitCallback != NULL) + SetMainCallback2(gBagMenu->exitCallback); else SetMainCallback2(gBagPositionStruct.bagCallback); - sub_81AB824(); + BagDestroyPocketScrollArrowPair(); ResetSpriteData(); FreeAllSpritePalettes(); FreeBagItemListBuffers(); @@ -982,7 +1048,9 @@ void UpdatePocketItemList(u8 pocketId) CompactItemsInBagPocket(pocket); break; } + gBagMenu->numItemStacks[pocketId] = 0; + for (i = 0; i < pocket->capacity && pocket->itemSlots[i].itemId; i++) gBagMenu->numItemStacks[pocketId]++; @@ -995,7 +1063,7 @@ void UpdatePocketItemList(u8 pocketId) gBagMenu->numShownItems[pocketId] = gBagMenu->numItemStacks[pocketId]; } -void sub_81ABA6C(void) +void All_CalculateNItemsAndMaxShowed(void) { u8 i; for (i = 0; i < POCKETS_COUNT; i++) @@ -1014,7 +1082,7 @@ static void SetPocketListPositions(void) SetInitialScrollAndCursorPositions(i); } -void sub_81ABAE0(void) +void UpdatePocketScrollPositions(void) { u8 i; for (i = 0; i < POCKETS_COUNT; i++) @@ -1026,14 +1094,14 @@ u8 GetItemListPosition(u8 pocketId) return gBagPositionStruct.scrollPosition[pocketId] + gBagPositionStruct.cursorPosition[pocketId]; } -void DisplayItemMessage(u8 taskId, u8 fontId, const u8 *str, void ( *callback)(u8 taskId)) +void DisplayItemMessage(u8 taskId, u8 fontId, const u8 *str, void (*callback)(u8 taskId)) { s16* data = gTasks[taskId].data; data[10] = AddItemMessageWindow(4); FillWindowPixelBuffer(data[10], PIXEL_FILL(1)); DisplayMessageAndContinueTask(taskId, data[10], 10, 13, fontId, GetPlayerTextSpeedDelay(), str, callback); - schedule_bg_copy_tilemap_to_vram(1); + ScheduleBgCopyTilemapToVram(1); } void BagMenu_InitListsMenu(u8 taskId) @@ -1047,7 +1115,7 @@ void BagMenu_InitListsMenu(u8 taskId) SetInitialScrollAndCursorPositions(gBagPositionStruct.pocket); LoadBagItemListBuffers(gBagPositionStruct.pocket); data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos); - schedule_bg_copy_tilemap_to_vram(0); + ScheduleBgCopyTilemapToVram(0); set_callback3_to_bag(taskId); } @@ -1073,13 +1141,14 @@ void PrintItemSoldAmount(int windowId, int numSold, int moneyEarned) PrintMoneyAmount(windowId, 38, 1, moneyEarned, 0); } -void Task_BagMenu(u8 taskId) +void Task_BagMenu_HandleInput(u8 taskId) { s16* data = gTasks[taskId].data; u16* scrollPos = &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket]; u16* cursorPos = &gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]; - u16 select; - if (sub_81221EC() != TRUE && !gPaletteFade.active) + s32 listPosition; + + if (MenuHelpers_CallLinkSomething() != TRUE && !gPaletteFade.active) { switch (GetSwitchBagPocketDirection()) { @@ -1089,67 +1158,67 @@ void Task_BagMenu(u8 taskId) case 2: SwitchBagPocket(taskId, 1, 0); return; - } - if ((select = (gMain.newKeys & SELECT_BUTTON))) - { - if (sub_81AC2C0() == 1) - { - ListMenuGetScrollAndRow(data[0], scrollPos, cursorPos); - if ((*scrollPos + *cursorPos) != gBagMenu->numItemStacks[gBagPositionStruct.pocket] - 1) + default: + if (gMain.newKeys & SELECT_BUTTON) { - PlaySE(SE_SELECT); - BagMenu_SwapItems(taskId); + if (sub_81AC2C0() == 1) + { + ListMenuGetScrollAndRow(data[0], scrollPos, cursorPos); + if ((*scrollPos + *cursorPos) != gBagMenu->numItemStacks[gBagPositionStruct.pocket] - 1) + { + PlaySE(SE_SELECT); + BagMenu_SwapItems(taskId); + } + } + return; } - } - return; + break; } - else + + listPosition = ListMenu_ProcessInput(data[0]); + ListMenuGetScrollAndRow(data[0], scrollPos, cursorPos); + switch (listPosition) { - int listPosition = ListMenu_ProcessInput(data[0]); - ListMenuGetScrollAndRow(data[0], scrollPos, cursorPos); - switch (listPosition) - { - case LIST_NOTHING_CHOSEN: - break; - case LIST_CANCEL: - if (gBagPositionStruct.location == 5) - { - PlaySE(SE_HAZURE); - break; - } - PlaySE(SE_SELECT); - gSpecialVar_ItemId = select; - gTasks[taskId].func = Task_FadeAndCloseBagMenu; - break; - default: // A_BUTTON - PlaySE(SE_SELECT); - sub_81AB824(); - BagMenu_PrintCursor_(data[0], 2); - data[1] = listPosition; - data[2] = BagGetQuantityByPocketPosition(gBagPositionStruct.pocket + 1, listPosition); - gSpecialVar_ItemId = BagGetItemIdByPocketPosition(gBagPositionStruct.pocket + 1, listPosition); - gUnknown_08614054[gBagPositionStruct.location](taskId); + case LIST_NOTHING_CHOSEN: + break; + case LIST_CANCEL: + if (gBagPositionStruct.location == ITEMMENULOCATION_BERRY_BLENDER_CRUSH) + { + PlaySE(SE_HAZURE); break; - } + } + PlaySE(SE_SELECT); + gSpecialVar_ItemId = ITEM_NONE; + gTasks[taskId].func = Task_FadeAndCloseBagMenu; + break; + default: // A_BUTTON + PlaySE(SE_SELECT); + BagDestroyPocketScrollArrowPair(); + BagMenu_PrintCursor_(data[0], 2); + data[1] = listPosition; + data[2] = BagGetQuantityByPocketPosition(gBagPositionStruct.pocket + 1, listPosition); + gSpecialVar_ItemId = BagGetItemIdByPocketPosition(gBagPositionStruct.pocket + 1, listPosition); + gUnknown_08614054[gBagPositionStruct.location](taskId); + break; } } } void set_callback3_to_bag(u8 taskId) { - bag_menu_add_pocket_scroll_arrow_indicators_maybe(); - bag_menu_add_list_scroll_arrow_indicators_maybe(); + CreatePocketScrollArrowPair(); + CreatePocketSwitchArrowPair(); ClearWindowTilemap(3); ClearWindowTilemap(4); PutWindowTilemap(1); - schedule_bg_copy_tilemap_to_vram(0); - gTasks[taskId].func = Task_BagMenu; + ScheduleBgCopyTilemapToVram(0); + gTasks[taskId].func = Task_BagMenu_HandleInput; } u8 GetSwitchBagPocketDirection(void) { u8 LRKeys; - if (gBagMenu->unk81B != 0) + if (gBagMenu->pocketSwitchDisabled) return 0; LRKeys = GetLRKeysPressed(); if ((gMain.newKeys & DPAD_LEFT) || LRKeys == MENU_L_PRESSED) @@ -1188,9 +1257,9 @@ void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, u16 a3) ClearWindowTilemap(0); ClearWindowTilemap(1); DestroyListMenuTask(data[0], &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket], &gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]); - schedule_bg_copy_tilemap_to_vram(0); - gSprites[gBagMenu->spriteId[2 + (gBagMenu->unk81B_1 ^ 1)]].invisible = TRUE; - sub_81AB824(); + ScheduleBgCopyTilemapToVram(0); + gSprites[gBagMenu->spriteId[2 + (gBagMenu->itemIconSlot ^ 1)]].invisible = TRUE; + BagDestroyPocketScrollArrowPair(); } pocketId = gBagPositionStruct.pocket; ChangeBagPocketId(&pocketId, deltaBagPocketId); @@ -1207,7 +1276,7 @@ void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, u16 a3) BagMenu_DrawPocketIndicatorSquare(gBagPositionStruct.pocket, 0); BagMenu_DrawPocketIndicatorSquare(pocketId, 1); FillBgTilemapBufferRect_Palette0(2, 11, 14, 2, 15, 16); - schedule_bg_copy_tilemap_to_vram(2); + ScheduleBgCopyTilemapToVram(2); SetBagVisualPocketId(pocketId, 1); RemoveBagSprite(1); AddSwitchPocketRotatingBallSprite(deltaBagPocketId); @@ -1218,7 +1287,7 @@ void sub_81AC10C(u8 taskId) { s16* data = gTasks[taskId].data; - if (!sub_81221AC() && !IsWallysBag()) + if (!MenuHelpers_LinkSomething() && !IsWallysBag()) { switch (GetSwitchBagPocketDirection()) { @@ -1254,9 +1323,9 @@ void sub_81AC10C(u8 taskId) data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket], gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]); PutWindowTilemap(1); PutWindowTilemap(2); - schedule_bg_copy_tilemap_to_vram(0); - bag_menu_add_pocket_scroll_arrow_indicators_maybe(); - bag_menu_add_list_scroll_arrow_indicators_maybe(); + ScheduleBgCopyTilemapToVram(0); + CreatePocketScrollArrowPair(); + CreatePocketSwitchArrowPair(); SwitchTaskToFollowupFunc(taskId); } } @@ -1264,7 +1333,7 @@ void sub_81AC10C(u8 taskId) void sub_81AC23C(u8 a) { FillBgTilemapBufferRect_Palette0(2, 17, 14, a + 2, 15, 1); - schedule_bg_copy_tilemap_to_vram(2); + ScheduleBgCopyTilemapToVram(2); } void BagMenu_DrawPocketIndicatorSquare(u8 x, u8 is_current_bag) @@ -1273,12 +1342,12 @@ void BagMenu_DrawPocketIndicatorSquare(u8 x, u8 is_current_bag) FillBgTilemapBufferRect_Palette0(2, 0x1017, x + 5, 3, 1, 1); else FillBgTilemapBufferRect_Palette0(2, 0x102B, x + 5, 3, 1, 1); - schedule_bg_copy_tilemap_to_vram(2); + ScheduleBgCopyTilemapToVram(2); } bool8 sub_81AC2C0(void) { - if (gBagPositionStruct.location <= 1) + if (gBagPositionStruct.location <= ITEMMENULOCATION_BATTLE) { u8 temp = gBagPositionStruct.pocket - 2; if (temp > 1) @@ -1293,13 +1362,13 @@ void BagMenu_SwapItems(u8 taskId) ListMenuSetUnkIndicatorsStructField(data[0], 16, 1); data[1] = gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket] + gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]; - gBagMenu->unk81A = data[1]; + gBagMenu->itemOriginalLocation = data[1]; CopyItemName(BagGetItemIdByPocketPosition(gBagPositionStruct.pocket + 1, data[1]), gStringVar1); StringExpandPlaceholders(gStringVar4, gText_MoveVar1Where); FillWindowPixelBuffer(1, PIXEL_FILL(0)); BagMenu_Print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0); sub_80D4FEC(data[1]); - sub_81AB89C(); + BagDestroyPocketSwitchArrowPair(); BagMenu_PrintCursor_(data[0], 2); gTasks[taskId].func = sub_81AC3C0; } @@ -1309,7 +1378,7 @@ void sub_81AC3C0(u8 taskId) s16* data = gTasks[taskId].data; int input; - if (sub_81221EC() != TRUE) + if (MenuHelpers_CallLinkSomething() != TRUE) { if (gMain.newKeys & SELECT_BUTTON) { @@ -1354,15 +1423,15 @@ void sub_81AC498(u8 taskId) else { MoveItemSlotInList(gBagPockets[gBagPositionStruct.pocket].itemSlots, data[1], realPos); - gBagMenu->unk81A = -1; + gBagMenu->itemOriginalLocation = -1; DestroyListMenuTask(data[0], scrollPos, cursorPos); if (data[1] < realPos) gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]--; LoadBagItemListBuffers(gBagPositionStruct.pocket); data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos); sub_80D4FC8(1); - bag_menu_add_list_scroll_arrow_indicators_maybe(); - gTasks[taskId].func = Task_BagMenu; + CreatePocketSwitchArrowPair(); + gTasks[taskId].func = Task_BagMenu_HandleInput; } } @@ -1372,90 +1441,90 @@ void sub_81AC590(u8 taskId) u16* scrollPos = &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket]; u16* cursorPos = &gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]; - gBagMenu->unk81A = -1; + gBagMenu->itemOriginalLocation = -1; DestroyListMenuTask(data[0], scrollPos, cursorPos); if (data[1] < (*scrollPos + *cursorPos)) gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]--; LoadBagItemListBuffers(gBagPositionStruct.pocket); data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos); sub_80D4FC8(1); - bag_menu_add_list_scroll_arrow_indicators_maybe(); - gTasks[taskId].func = Task_BagMenu; + CreatePocketSwitchArrowPair(); + gTasks[taskId].func = Task_BagMenu_HandleInput; } -void sub_81AC644(u8 unused) +void OpenContextMenu(u8 unused) { - switch (gBagPositionStruct.location - 1) + switch (gBagPositionStruct.location) { - case 0: - case 9: + case ITEMMENULOCATION_BATTLE: + case ITEMMENULOCATION_WALLY: if (ItemId_GetBattleUsage(gSpecialVar_ItemId)) { - gBagMenu->unk820 = gUnknown_08614042; - gBagMenu->unk828 = 2; + gBagMenu->contextMenuItemsPtr = sContextMenuItems_BattleUse; + gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_BattleUse); } else { - gBagMenu->unk820 = &gUnknown_08614046; - gBagMenu->unk828 = 1; + gBagMenu->contextMenuItemsPtr = sContextMenuItems_Cancel; + gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_Cancel); } break; - case 4: - gBagMenu->unk820 = gUnknown_08614047; - gBagMenu->unk828 = 4; + case ITEMMENULOCATION_BERRY_BLENDER_CRUSH: + gBagMenu->contextMenuItemsPtr = sContextMenuItems_BerryBlenderCrush; + gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_BerryBlenderCrush); break; - case 8: + case ITEMMENULOCATION_APPRENTICE: if (!ItemId_GetImportance(gSpecialVar_ItemId) && gSpecialVar_ItemId != ITEM_ENIGMA_BERRY) { - gBagMenu->unk820 = gUnknown_0861404B; - gBagMenu->unk828 = 2; + gBagMenu->contextMenuItemsPtr = sContextMenuItems_Apprentice; + gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_Apprentice); } else { - gBagMenu->unk820 = &gUnknown_08614046; - gBagMenu->unk828 = 1; + gBagMenu->contextMenuItemsPtr = sContextMenuItems_Cancel; + gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_Cancel); } break; - case 6: + case ITEMMENULOCATION_FAVOR_LADY: if (!ItemId_GetImportance(gSpecialVar_ItemId) && gSpecialVar_ItemId != ITEM_ENIGMA_BERRY) { - gBagMenu->unk820 = gUnknown_0861404D; - gBagMenu->unk828 = 2; + gBagMenu->contextMenuItemsPtr = sContextMenuItems_FavorLady; + gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_FavorLady); } else { - gBagMenu->unk820 = &gUnknown_08614046; - gBagMenu->unk828 = 1; + gBagMenu->contextMenuItemsPtr = sContextMenuItems_Cancel; + gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_Cancel); } break; - case 7: + case ITEMMENULOCATION_QUIZ_LADY: if (!ItemId_GetImportance(gSpecialVar_ItemId) && gSpecialVar_ItemId != ITEM_ENIGMA_BERRY) { - gBagMenu->unk820 = gUnknown_0861404F; - gBagMenu->unk828 = 2; + gBagMenu->contextMenuItemsPtr = sContextMenuItems_QuizLady; + gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_QuizLady); } else { - gBagMenu->unk820 = &gUnknown_08614046; - gBagMenu->unk828 = 1; + gBagMenu->contextMenuItemsPtr = sContextMenuItems_Cancel; + gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_Cancel); } break; - case 1: - case 2: - case 3: - case 5: + case ITEMMENULOCATION_PARTY: + case ITEMMENULOCATION_SHOP: + case ITEMMENULOCATION_BERRY_TREE: + case ITEMMENULOCATION_ITEMPC: default: - if (sub_81221AC() == TRUE || InUnionRoom() == TRUE) + if (MenuHelpers_LinkSomething() == TRUE || InUnionRoom() == TRUE) { if (gBagPositionStruct.pocket == KEYITEMS_POCKET || !sub_8122148(gSpecialVar_ItemId)) { - gBagMenu->unk820 = &gUnknown_08614046; - gBagMenu->unk828 = 1; + gBagMenu->contextMenuItemsPtr = sContextMenuItems_Cancel; + gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_Cancel); } else { - gBagMenu->unk820 = gUnknown_08614044; - gBagMenu->unk828 = 2; + gBagMenu->contextMenuItemsPtr = sContextMenuItems_Give; + gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_Give); } } else @@ -1463,35 +1532,35 @@ void sub_81AC644(u8 unused) switch (gBagPositionStruct.pocket) { case ITEMS_POCKET: - gBagMenu->unk820 = &gBagMenu->unk824; - gBagMenu->unk828 = 4; - memcpy(&gBagMenu->unk824, &gUnknown_0861402C, 4); + gBagMenu->contextMenuItemsPtr = gBagMenu->contextMenuItemsBuffer; + gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_ItemsPocket); + memcpy(&gBagMenu->contextMenuItemsBuffer, &sContextMenuItems_ItemsPocket, sizeof(sContextMenuItems_ItemsPocket)); if (ItemIsMail(gSpecialVar_ItemId) == TRUE) - gBagMenu->unk824 = 6; + gBagMenu->contextMenuItemsBuffer[0] = ITEMMENUACTION_CHECK; break; case KEYITEMS_POCKET: - gBagMenu->unk820 = &gBagMenu->unk824; - gBagMenu->unk828 = 4; - memcpy(&gBagMenu->unk824, &gUnknown_08614030, 4); + gBagMenu->contextMenuItemsPtr = gBagMenu->contextMenuItemsBuffer; + gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_KeyItemsPocket); + memcpy(&gBagMenu->contextMenuItemsBuffer, &sContextMenuItems_KeyItemsPocket, sizeof(sContextMenuItems_KeyItemsPocket)); if (gSaveBlock1Ptr->registeredItem == gSpecialVar_ItemId) - gBagMenu->unk825 = 8; + gBagMenu->contextMenuItemsBuffer[1] = ITEMMENUACTION_DESELECT; if (gSpecialVar_ItemId == ITEM_MACH_BIKE || gSpecialVar_ItemId == ITEM_ACRO_BIKE) { - if (TestPlayerAvatarFlags(6)) - gBagMenu->unk824 = 7; + if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE)) + gBagMenu->contextMenuItemsBuffer[0] = ITEMMENUACTION_WALK; } break; case BALLS_POCKET: - gBagMenu->unk820 = gUnknown_08614034; - gBagMenu->unk828 = 4; + gBagMenu->contextMenuItemsPtr = sContextMenuItems_BallsPocket; + gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_BallsPocket); break; case TMHM_POCKET: - gBagMenu->unk820 = gUnknown_08614038; - gBagMenu->unk828 = 4; + gBagMenu->contextMenuItemsPtr = sContextMenuItems_TmHmPocket; + gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_TmHmPocket); break; case BERRIES_POCKET: - gBagMenu->unk820 = gUnknown_0861403C; - gBagMenu->unk828 = 6; + gBagMenu->contextMenuItemsPtr = sContextMenuItems_BerriesPocket; + gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_BerriesPocket); break; } } @@ -1502,7 +1571,7 @@ void sub_81AC644(u8 unused) PrintTMHMMoveData(gSpecialVar_ItemId); PutWindowTilemap(3); PutWindowTilemap(4); - schedule_bg_copy_tilemap_to_vram(0); + ScheduleBgCopyTilemapToVram(0); } else { @@ -1511,11 +1580,11 @@ void sub_81AC644(u8 unused) FillWindowPixelBuffer(1, PIXEL_FILL(0)); BagMenu_Print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0); } - if (gBagMenu->unk828 == 1) + if (gBagMenu->contextMenuNumItems == 1) sub_81ACAF8(BagMenu_AddWindow(0)); - else if (gBagMenu->unk828 == 2) + else if (gBagMenu->contextMenuNumItems == 2) sub_81ACAF8(BagMenu_AddWindow(1)); - else if (gBagMenu->unk828 == 4) + else if (gBagMenu->contextMenuNumItems == 4) sub_81ACB54(BagMenu_AddWindow(2), 2, 2); else sub_81ACB54(BagMenu_AddWindow(3), 2, 3); @@ -1523,20 +1592,20 @@ void sub_81AC644(u8 unused) void sub_81ACAF8(u8 a) { - AddItemMenuActionTextPrinters(a, 7, 8, 1, 0, 16, gBagMenu->unk828, sItemMenuActions, gBagMenu->unk820); - InitMenuInUpperLeftCornerPlaySoundWhenAPressed(a, gBagMenu->unk828, 0); + AddItemMenuActionTextPrinters(a, 7, 8, 1, 0, 16, gBagMenu->contextMenuNumItems, sItemMenuActions, gBagMenu->contextMenuItemsPtr); + InitMenuInUpperLeftCornerPlaySoundWhenAPressed(a, gBagMenu->contextMenuNumItems, 0); } void sub_81ACB54(u8 a, u8 b, u8 c) { - sub_8198DBC(a, 7, 8, 1, 0x38, b, c, sItemMenuActions, gBagMenu->unk820); + sub_8198DBC(a, 7, 8, 1, 0x38, b, c, sItemMenuActions, gBagMenu->contextMenuItemsPtr); sub_8199944(a, 0x38, b, c, 0); } -void unknown_item_menu_type(u8 taskId) +void Task_ItemContext_FieldOrBattle(u8 taskId) { - sub_81AC644(taskId); - if (gBagMenu->unk828 <= 2) + OpenContextMenu(taskId); + if (gBagMenu->contextMenuNumItems <= 2) gTasks[taskId].func = Task_HandleInBattleItemMenuInput; else gTasks[taskId].func = Task_HandleOutOfBattleItemMenuInput; @@ -1544,20 +1613,20 @@ void unknown_item_menu_type(u8 taskId) void Task_HandleInBattleItemMenuInput(u8 taskId) { - if (sub_81221EC() != TRUE) + if (MenuHelpers_CallLinkSomething() != TRUE) { - s8 r4 = Menu_ProcessInputNoWrap(); - switch (r4) + s8 selection = Menu_ProcessInputNoWrap(); + switch (selection) { case MENU_NOTHING_CHOSEN: break; case MENU_B_PRESSED: PlaySE(SE_SELECT); - sItemMenuActions[4].func.void_u8(taskId); + sItemMenuActions[ITEMMENUACTION_CANCEL].func.void_u8(taskId); break; default: PlaySE(SE_SELECT); - sItemMenuActions[gBagMenu->unk820[r4]].func.void_u8(taskId); + sItemMenuActions[gBagMenu->contextMenuItemsPtr[selection]].func.void_u8(taskId); break; } } @@ -1565,7 +1634,7 @@ void Task_HandleInBattleItemMenuInput(u8 taskId) void Task_HandleOutOfBattleItemMenuInput(u8 taskId) { - if (sub_81221EC() != TRUE) + if (MenuHelpers_CallLinkSomething() != TRUE) { s8 cursorPos = Menu_GetCursorPos(); if (gMain.newKeys & DPAD_UP) @@ -1578,7 +1647,7 @@ void Task_HandleOutOfBattleItemMenuInput(u8 taskId) } else if (gMain.newKeys & DPAD_DOWN) { - if (cursorPos < (gBagMenu->unk828 - 2) && sub_81ACDFC(cursorPos + 2)) + if (cursorPos < (gBagMenu->contextMenuNumItems - 2) && sub_81ACDFC(cursorPos + 2)) { PlaySE(SE_SELECT); sub_8199134(0, 1); @@ -1603,12 +1672,12 @@ void Task_HandleOutOfBattleItemMenuInput(u8 taskId) else if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); - sItemMenuActions[gBagMenu->unk820[cursorPos]].func.void_u8(taskId); + sItemMenuActions[gBagMenu->contextMenuItemsPtr[cursorPos]].func.void_u8(taskId); } else if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); - sItemMenuActions[4].func.void_u8(taskId); + sItemMenuActions[ITEMMENUACTION_CANCEL].func.void_u8(taskId); } } } @@ -1617,22 +1686,22 @@ bool8 sub_81ACDFC(s8 a) { if (a < 0) return FALSE; - if (a > gBagMenu->unk828) + if (a > gBagMenu->contextMenuNumItems) return FALSE; - if (gBagMenu->unk820[a] == 14) + if (gBagMenu->contextMenuItemsPtr[a] == 14) return FALSE; return TRUE; } void BagMenu_RemoveSomeWindow(void) { - if (gBagMenu->unk828 == 1) + if (gBagMenu->contextMenuNumItems == 1) BagMenu_RemoveWindow(0); - else if (gBagMenu->unk828 == 2) + else if (gBagMenu->contextMenuNumItems == 2) { BagMenu_RemoveWindow(1); } - else if (gBagMenu->unk828 == 4) + else if (gBagMenu->contextMenuNumItems == 4) { BagMenu_RemoveWindow(2); } @@ -1650,7 +1719,7 @@ void ItemMenu_UseOutOfBattle(u8 taskId) else { FillWindowPixelBuffer(1, PIXEL_FILL(0)); - schedule_bg_copy_tilemap_to_vram(0); + ScheduleBgCopyTilemapToVram(0); if (gBagPositionStruct.pocket != BERRIES_POCKET) ItemId_GetFieldFunc(gSpecialVar_ItemId)(taskId); else @@ -1750,7 +1819,7 @@ void Task_ActuallyToss(u8 taskId) SetInitialScrollAndCursorPositions(gBagPositionStruct.pocket); LoadBagItemListBuffers(gBagPositionStruct.pocket); data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos); - schedule_bg_copy_tilemap_to_vram(0); + ScheduleBgCopyTilemapToVram(0); set_callback3_to_bag(taskId); } } @@ -1768,7 +1837,7 @@ void ItemMenu_Register(u8 taskId) DestroyListMenuTask(data[0], scrollPos, cursorPos); LoadBagItemListBuffers(gBagPositionStruct.pocket); data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos); - schedule_bg_copy_tilemap_to_vram(0); + ScheduleBgCopyTilemapToVram(0); ItemMenu_Cancel(taskId); } @@ -1785,7 +1854,7 @@ void ItemMenu_Give(u8 taskId) BagMenu_PrintThereIsNoPokemon(taskId); else { - gBagMenu->mainCallback2 = CB2_ChooseMonToGiveItem; + gBagMenu->exitCallback = CB2_ChooseMonToGiveItem; Task_FadeAndCloseBagMenu(taskId); } } @@ -1818,7 +1887,7 @@ void sub_81AD350(u8 taskId) void ItemMenu_CheckTag(u8 taskId) { - gBagMenu->mainCallback2 = DoBerryTagScreen; + gBagMenu->exitCallback = DoBerryTagScreen; Task_FadeAndCloseBagMenu(taskId); } @@ -1828,8 +1897,8 @@ void ItemMenu_Cancel(u8 taskId) BagMenu_RemoveSomeWindow(); BagMenu_PrintDescription(data[1]); - schedule_bg_copy_tilemap_to_vram(0); - schedule_bg_copy_tilemap_to_vram(1); + ScheduleBgCopyTilemapToVram(0); + ScheduleBgCopyTilemapToVram(1); BagMenu_PrintCursor_(data[0], 0); set_callback3_to_bag(taskId); } @@ -1845,10 +1914,10 @@ void ItemMenu_UseInBattle(u8 taskId) void CB2_ReturnToBagMenuPocket(void) { - GoToBagMenu(RETURN_LOCATION_UNCHANGED, POCKETS_COUNT, NULL); + GoToBagMenu(ITEMMENULOCATION_LAST, POCKETS_COUNT, NULL); } -void item_menu_type_2(u8 taskId) +void Task_ItemContext_FieldGive(u8 taskId) { if (!itemid_80BF6D8_mail_related(gSpecialVar_ItemId)) { @@ -1870,7 +1939,7 @@ void item_menu_type_2(u8 taskId) } } -void item_menu_type_b(u8 taskId) +void Task_ItemContext_ItemPC_2(u8 taskId) { if (ItemIsMail(gSpecialVar_ItemId) == TRUE) DisplayItemMessage(taskId, 1, gText_CantWriteMail, sub_81AD350); @@ -1914,7 +1983,7 @@ bool8 UseRegisteredKeyItemOnField(void) #undef tUsingRegisteredKeyItem -void DisplaySellItemAskString(u8 taskId) +void Task_ItemContext_Sell(u8 taskId) { s16* data = gTasks[taskId].data; @@ -2039,7 +2108,7 @@ void sub_81AD9C0(u8 taskId) } } -void DisplayDepositItemAskString(u8 taskId) +void Task_ItemContext_Deposit(u8 taskId) { s16* data = gTasks[taskId].data; @@ -2166,7 +2235,7 @@ void DoWallyTutorialBagMenu(void) PrepareBagForWallyTutorial(); AddBagItem(ITEM_POTION, 1); AddBagItem(ITEM_POKE_BALL, 1); - GoToBagMenu(RETURN_LOCATION_BATTLE_2, ITEMS_POCKET, CB2_SetUpReshowBattleScreenAfterMenu2); + GoToBagMenu(ITEMMENULOCATION_WALLY, ITEMS_POCKET, CB2_SetUpReshowBattleScreenAfterMenu2); } void Task_WallyTutorialBagMenu(u8 taskId) @@ -2186,7 +2255,7 @@ void Task_WallyTutorialBagMenu(u8 taskId) PlaySE(SE_SELECT); BagMenu_PrintCursor_(data[0], 2); gSpecialVar_ItemId = ITEM_POKE_BALL; - sub_81AC644(taskId); + OpenContextMenu(taskId); data[8]++; break; case 0x132: @@ -2286,7 +2355,7 @@ void SetupBagMenu_Textboxes(void) { u8 i; - InitWindows(gUnknown_08614174); + InitWindows(sDefaultBagWindows); DeactivateAllTextPrinters(); LoadUserWindowBorderGfx(0, 1, 0xE0); LoadMessageBoxGfx(0, 10, 0xD0); @@ -2297,71 +2366,71 @@ void SetupBagMenu_Textboxes(void) FillWindowPixelBuffer(i, PIXEL_FILL(0)); PutWindowTilemap(i); } - schedule_bg_copy_tilemap_to_vram(0); - schedule_bg_copy_tilemap_to_vram(1); + ScheduleBgCopyTilemapToVram(0); + ScheduleBgCopyTilemapToVram(1); } -void BagMenu_Print(u8 windowId, u8 fontId, const u8 *str, u8 left, u8 top, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 h) +void BagMenu_Print(u8 windowId, u8 fontId, const u8 *str, u8 left, u8 top, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIndex) { - AddTextPrinterParameterized4(windowId, fontId, left, top, letterSpacing, lineSpacing, sFontColorTable[h], speed, str); + AddTextPrinterParameterized4(windowId, fontId, left, top, letterSpacing, lineSpacing, sFontColorTable[colorIndex], speed, str); } //Unused -u8 sub_81AE124(u8 a) +u8 sub_81AE124(u8 which) { - return gBagMenu->windowPointers[a]; + return gBagMenu->windowPointers[which]; } -u8 BagMenu_AddWindow(u8 a) +u8 BagMenu_AddWindow(u8 which) { - u8 *ptr = &gBagMenu->windowPointers[a]; + u8 *ptr = &gBagMenu->windowPointers[which]; if (*ptr == 0xFF) { - *ptr = AddWindow(&gUnknown_086141AC[a]); + *ptr = AddWindow(&sContextMenuWindowTemplates[which]); DrawStdFrameWithCustomTileAndPalette(*ptr, 0, 1, 14); - schedule_bg_copy_tilemap_to_vram(1); + ScheduleBgCopyTilemapToVram(1); } return *ptr; } -void BagMenu_RemoveWindow(u8 a) +void BagMenu_RemoveWindow(u8 which) { - u8 *ptr = &gBagMenu->windowPointers[a]; + u8 *ptr = &gBagMenu->windowPointers[which]; if (*ptr != 0xFF) { - ClearStdWindowAndFrameToTransparent(*ptr, 0); + ClearStdWindowAndFrameToTransparent(*ptr, FALSE); ClearWindowTilemap(*ptr); RemoveWindow(*ptr); - schedule_bg_copy_tilemap_to_vram(1); + ScheduleBgCopyTilemapToVram(1); *ptr = 0xFF; } } -u8 AddItemMessageWindow(u8 a) +u8 AddItemMessageWindow(u8 which) { - u8 *ptr = &gBagMenu->windowPointers[a]; + u8 *ptr = &gBagMenu->windowPointers[which]; if (*ptr == 0xFF) - *ptr = AddWindow(&gUnknown_086141AC[a]); + *ptr = AddWindow(&sContextMenuWindowTemplates[which]); return *ptr; } -void bag_menu_RemoveBagItem_message_window(u8 a) +void bag_menu_RemoveBagItem_message_window(u8 which) { - u8 *ptr = &gBagMenu->windowPointers[a]; + u8 *ptr = &gBagMenu->windowPointers[which]; if (*ptr != 0xFF) { ClearDialogWindowAndFrameToTransparent(*ptr, FALSE); // This ClearWindowTilemap call is redundant, since ClearDialogWindowAndFrameToTransparent already calls it. ClearWindowTilemap(*ptr); RemoveWindow(*ptr); - schedule_bg_copy_tilemap_to_vram(1); + ScheduleBgCopyTilemapToVram(1); *ptr = 0xFF; } } void BagMenu_YesNo(u8 a, u8 b, const struct YesNoFuncTable *funcTable) { - CreateYesNoMenuWithCallbacks(a, &gUnknown_086141AC[b], 1, 0, 2, 1, 14, funcTable); + CreateYesNoMenuWithCallbacks(a, &sContextMenuWindowTemplates[b], 1, 0, 2, 1, 14, funcTable); } void DisplayCurrentMoneyWindow(void) |