diff --git a/include/item_menu.h b/include/item_menu.h index 27630d873..3cfcff90d 100644 --- a/include/item_menu.h +++ b/include/item_menu.h @@ -26,7 +26,7 @@ enum { ITEMWIN_2, ITEMWIN_YESNO_BOTTOMRIGHT, ITEMWIN_YESNO_TOPRIGHT, - ITEMWIN_5, + ITEMWIN_MESSAGE, ITEMWIN_6, ITEMWIN_7, ITEMWIN_8, @@ -90,7 +90,7 @@ void MoveItemSlotInList(struct ItemSlot * itemSlots_, u32 from, u32 to_); void Task_FadeAndCloseBagMenu(u8 taskId); void Bag_BeginCloseWin0Animation(void); void ItemMenu_SetExitCallback(void (*)(void)); -void DisplayItemMessageInBag(u8 taskId, u8 fontId, const u8 * string, TaskFunc followUpFunc); +void DisplayItemMessage(u8 taskId, u8 fontId, const u8 *str, void (*callback)(u8 taskId)); void Task_ReturnToBagFromContextMenu(u8 taskId); void CB2_BagMenuFromBattle(void); void InitOldManBag(void); @@ -107,7 +107,6 @@ void BagPrintTextOnWin1CenteredColor0(const u8 * str, u8 unused); void BagDrawDepositItemTextBox(void); u32 ShowBagWindow(u32 whichWindow); void BagMenu_RemoveWindow(u8 whichWindow); -u8 OpenBagWindow(u8 whichWindow); void CloseBagWindow(u8 whichWindow); u8 GetBagWindow(u8 whichWindow); void BagMenu_YesNo(u8 taskId, u8 windowType, const struct YesNoFuncTable *funcTable); diff --git a/src/item_menu.c b/src/item_menu.c index e78061139..f7a6e7c60 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -1,6 +1,5 @@ #include "global.h" #include "gflib.h" -#include "bag.h" #include "battle.h" #include "battle_controllers.h" #include "battle_main.h" @@ -90,6 +89,7 @@ static void CalculateInitialCursorPosAndItemsAbove(void); static void UpdatePocketScrollPositions(void); static void DestroyBagMenuResources(void); static void Task_CloseBagMenu(u8 taskId); +static u8 AddItemMessageWindow(u8); static void Task_AnimateWin0v(u8 taskId); static void ShowBagOrBeginWin0OpenTask(void); static void All_CalculateNItemsAndMaxShowed(void); @@ -442,7 +442,7 @@ static const struct WindowTemplate sWindowTemplates[] = { .paletteNum = 15, .baseBlock = 0x28a }, - [ITEMWIN_5] = + [ITEMWIN_MESSAGE] = { .bg = 0, .tilemapLeft = 2, @@ -1256,13 +1256,13 @@ static void All_CalculateNItemsAndMaxShowed(void) Pocket_CalculateNItemsAndMaxShowed(i); } -void DisplayItemMessageInBag(u8 taskId, u8 fontId, const u8 * string, TaskFunc followUpFunc) +void DisplayItemMessage(u8 taskId, u8 fontId, const u8 *str, void (*callback)(u8 taskId)) { s16 *data = gTasks[taskId].data; - data[10] = OpenBagWindow(ITEMWIN_5); - FillWindowPixelBuffer(data[10], PIXEL_FILL(1)); - DisplayMessageAndContinueTask(taskId, data[10], 0x06D, 0x0D, fontId, GetPlayerTextSpeedDelay(), string, followUpFunc); - ScheduleBgCopyTilemapToVram(0); + tMsgWindowId = AddItemMessageWindow(ITEMWIN_MESSAGE); + FillWindowPixelBuffer(tMsgWindowId, PIXEL_FILL(1)); + DisplayMessageAndContinueTask(taskId, tMsgWindowId, 0x06D, 13, fontId, GetPlayerTextSpeedDelay(), str, callback); + ScheduleBgCopyTilemapToVram(sWindowTemplates[ITEMWIN_MESSAGE].bg); } void ItemMenu_SetExitCallback(MainCallback cb) @@ -1844,7 +1844,7 @@ static void Task_ItemMenuAction_Give(u8 taskId) PutWindowTilemap(1); CopyWindowToVram(0, COPYWIN_MAP); if (!IsWritingMailAllowed(itemId)) - DisplayItemMessageInBag(taskId, FONT_NORMAL, gText_CantWriteMailHere, Task_WaitAButtonAndCloseContextMenu); + DisplayItemMessage(taskId, FONT_NORMAL, gText_CantWriteMailHere, Task_WaitAButtonAndCloseContextMenu); else if (GetItemImportance(itemId) == 0) { if (CalculatePlayerPartyCount() == 0) @@ -1863,14 +1863,14 @@ static void Task_ItemMenuAction_Give(u8 taskId) static void Task_PrintThereIsNoPokemon(u8 taskId) { - DisplayItemMessageInBag(taskId, FONT_NORMAL, gText_ThereIsNoPokemon, Task_WaitAButtonAndCloseContextMenu); + DisplayItemMessage(taskId, FONT_NORMAL, gText_ThereIsNoPokemon, Task_WaitAButtonAndCloseContextMenu); } static void Task_PrintItemCantBeHeld(u8 taskId) { CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_ItemCantBeHeld); - DisplayItemMessageInBag(taskId, FONT_NORMAL, gStringVar4, Task_WaitAButtonAndCloseContextMenu); + DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, Task_WaitAButtonAndCloseContextMenu); } static void Task_WaitAButtonAndCloseContextMenu(u8 taskId) @@ -1885,7 +1885,7 @@ static void Task_WaitAButtonAndCloseContextMenu(u8 taskId) void Task_ReturnToBagFromContextMenu(u8 taskId) { s16 *data = gTasks[taskId].data; - CloseBagWindow(ITEMWIN_5); + CloseBagWindow(ITEMWIN_MESSAGE); DestroyListMenuTask(data[0], &gBagPosition.scrollPosition[gBagPosition.pocket], &gBagPosition.cursorPosition[gBagPosition.pocket]); Pocket_CalculateNItemsAndMaxShowed(gBagPosition.pocket); PocketCalculateInitialCursorPosAndItemsAbove(gBagPosition.pocket); @@ -1949,7 +1949,7 @@ static void Task_ItemContext_FieldGive(u8 taskId) u16 itemId = BagGetItemIdByPocketPosition(gBagPosition.pocket + 1, data[1]); if (!IsWritingMailAllowed(itemId)) { - DisplayItemMessageInBag(taskId, FONT_NORMAL, gText_CantWriteMailHere, Task_WaitAButtonAndCloseContextMenu); + DisplayItemMessage(taskId, FONT_NORMAL, gText_CantWriteMailHere, Task_WaitAButtonAndCloseContextMenu); } else if (itemId == ITEM_TM_CASE) { @@ -1993,7 +1993,7 @@ static void Task_ItemContext_PcBoxGive(u8 taskId) u16 itemId = BagGetItemIdByPocketPosition(gBagPosition.pocket + 1, data[1]); if (ItemIsMail(itemId) == TRUE) { - DisplayItemMessageInBag(taskId, FONT_NORMAL, gText_CantWriteMailHere, Task_WaitAButtonAndCloseContextMenu); + DisplayItemMessage(taskId, FONT_NORMAL, gText_CantWriteMailHere, Task_WaitAButtonAndCloseContextMenu); } else if (itemId == ITEM_TM_CASE) { @@ -2048,7 +2048,7 @@ static void Task_ItemContext_Sell(u8 taskId) { CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_OhNoICantBuyThat); - DisplayItemMessageInBag(taskId, GetDialogBoxFontId(), gStringVar4, Task_ReturnToBagFromContextMenu); + DisplayItemMessage(taskId, GetDialogBoxFontId(), gStringVar4, Task_ReturnToBagFromContextMenu); } else { @@ -2064,7 +2064,7 @@ static void Task_ItemContext_Sell(u8 taskId) data[2] = 99; CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_HowManyWouldYouLikeToSell); - DisplayItemMessageInBag(taskId, GetDialogBoxFontId(), gStringVar4, Task_InitSaleQuantitySelectInterface); + DisplayItemMessage(taskId, GetDialogBoxFontId(), gStringVar4, Task_InitSaleQuantitySelectInterface); } } } @@ -2091,7 +2091,7 @@ static void Task_PrintSaleConfirmationText(u8 taskId) s16 *data = gTasks[taskId].data; ConvertIntToDecimalStringN(gStringVar3, (GetItemPrice(BagGetItemIdByPocketPosition(gBagPosition.pocket + 1, data[1])) / ITEM_SELL_FACTOR) * data[8], STR_CONV_MODE_LEFT_ALIGN, 6); StringExpandPlaceholders(gStringVar4, gText_ICanPayThisMuch_WouldThatBeOkay); - DisplayItemMessageInBag(taskId, GetDialogBoxFontId(), gStringVar4, Task_ShowSellYesNoMenu); + DisplayItemMessage(taskId, GetDialogBoxFontId(), gStringVar4, Task_ShowSellYesNoMenu); } static void Task_ShowSellYesNoMenu(u8 taskId) @@ -2103,7 +2103,7 @@ static void Task_SellItem_No(u8 taskId) { s16 *data = gTasks[taskId].data; BagMenu_RemoveWindow(ITEMWIN_2); - CloseBagWindow(ITEMWIN_5); + CloseBagWindow(ITEMWIN_MESSAGE); PutWindowTilemap(2); PutWindowTilemap(0); PutWindowTilemap(1); @@ -2152,7 +2152,7 @@ static void Task_SelectQuantityToSell(u8 taskId) PlaySE(SE_SELECT); BagMenu_RemoveWindow(ITEMWIN_1); BagMenu_RemoveWindow(ITEMWIN_2); - CloseBagWindow(ITEMWIN_5); + CloseBagWindow(ITEMWIN_MESSAGE); PutWindowTilemap(2); PutWindowTilemap(0); PutWindowTilemap(1); @@ -2171,7 +2171,7 @@ static void Task_SellItem_Yes(u8 taskId) CopyItemName(gSpecialVar_ItemId, gStringVar1); ConvertIntToDecimalStringN(gStringVar3, (GetItemPrice(BagGetItemIdByPocketPosition(gBagPosition.pocket + 1, data[1])) / ITEM_SELL_FACTOR) * data[8], STR_CONV_MODE_LEFT_ALIGN, 6); StringExpandPlaceholders(gStringVar4, gText_TurnedOverItemsWorthYen); - DisplayItemMessageInBag(taskId, FONT_NORMAL, gStringVar4, Task_FinalizeSaleToShop); + DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, Task_FinalizeSaleToShop); } static void Task_FinalizeSaleToShop(u8 taskId) @@ -2264,7 +2264,7 @@ static void Task_TryDoItemDeposit(u8 taskId) } else { - DisplayItemMessageInBag(taskId, FONT_NORMAL, gText_NoRoomToStoreItems, Task_WaitAButtonAndCloseContextMenu); + DisplayItemMessage(taskId, FONT_NORMAL, gText_NoRoomToStoreItems, Task_WaitAButtonAndCloseContextMenu); } } @@ -2745,13 +2745,12 @@ void BagMenu_RemoveWindow(u8 whichWindow) } } -u8 OpenBagWindow(u8 whichWindow) -{ - if (gBagMenu->windowIds[whichWindow] == WINDOW_NONE) - { - gBagMenu->windowIds[whichWindow] = AddWindow(&sWindowTemplates[whichWindow]); - } - return gBagMenu->windowIds[whichWindow]; +static u8 AddItemMessageWindow(u8 windowType) +{ + u8 *windowId = &gBagMenu->windowIds[windowType]; + if (*windowId == WINDOW_NONE) + *windowId = AddWindow(&sWindowTemplates[windowType]); + return *windowId; } void CloseBagWindow(u8 whichWindow) diff --git a/src/item_use.c b/src/item_use.c index c5f5daeef..632a333d3 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -137,7 +137,7 @@ static void DisplayItemMessageInCurrentContext(u8 taskId, bool8 inField, u8 font { StringExpandPlaceholders(gStringVar4, str); if (inField == FALSE) - DisplayItemMessageInBag(taskId, fontId, gStringVar4, Task_ReturnToBagFromContextMenu); + DisplayItemMessage(taskId, fontId, gStringVar4, Task_ReturnToBagFromContextMenu); else DisplayItemMessageOnField(taskId, fontId, gStringVar4, Task_ItemUse_CloseMessageBoxAndReturnToField); } @@ -227,7 +227,7 @@ void ItemUseOutOfBattle_ExpShare(u8 taskId) if (!gTasks[taskId].data[2]) // to account for pressing select in the overworld DisplayItemMessageOnField(taskId, FONT_NORMAL, gText_ExpShareOff, Task_ItemUse_CloseMessageBoxAndReturnToField); else - DisplayItemMessageInBag(taskId, FONT_NORMAL, gText_ExpShareOff, Task_ReturnToBagFromContextMenu); + DisplayItemMessage(taskId, FONT_NORMAL, gText_ExpShareOff, Task_ReturnToBagFromContextMenu); } else { @@ -235,7 +235,7 @@ void ItemUseOutOfBattle_ExpShare(u8 taskId) if (!gTasks[taskId].data[2]) // to account for pressing select in the overworld DisplayItemMessageOnField(taskId, FONT_NORMAL, gText_ExpShareOn, Task_ItemUse_CloseMessageBoxAndReturnToField); else - DisplayItemMessageInBag(taskId, FONT_NORMAL, gText_ExpShareOn, Task_ReturnToBagFromContextMenu); + DisplayItemMessage(taskId, FONT_NORMAL, gText_ExpShareOn, Task_ReturnToBagFromContextMenu); } FlagToggle(I_EXP_SHARE_FLAG); #else @@ -415,7 +415,7 @@ void ItemUseOutOfBattle_CoinCase(u8 taskId) StringExpandPlaceholders(gStringVar4, gText_CoinCase); ItemUse_SetQuestLogEvent(QL_EVENT_USED_ITEM, NULL, gSpecialVar_ItemId, 0xFFFF); if (gTasks[taskId].tIsFieldUse == FALSE) - DisplayItemMessageInBag(taskId, FONT_NORMAL, gStringVar4, Task_ReturnToBagFromContextMenu); + DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, Task_ReturnToBagFromContextMenu); else DisplayItemMessageOnField(taskId, FONT_NORMAL, gStringVar4, Task_ItemUse_CloseMessageBoxAndReturnToField); } @@ -432,7 +432,7 @@ void ItemUseOutOfBattle_PowderJar(u8 taskId) StringExpandPlaceholders(gStringVar4, gText_PowderQty); ItemUse_SetQuestLogEvent(QL_EVENT_USED_ITEM, NULL, gSpecialVar_ItemId, 0xFFFF); if (gTasks[taskId].tIsFieldUse == FALSE) - DisplayItemMessageInBag(taskId, FONT_NORMAL, gStringVar4, Task_ReturnToBagFromContextMenu); + DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, Task_ReturnToBagFromContextMenu); else DisplayItemMessageOnField(taskId, FONT_NORMAL, gStringVar4, Task_ItemUse_CloseMessageBoxAndReturnToField); } @@ -499,14 +499,14 @@ void ItemUseOutOfBattle_PokeFlute(u8 taskId) { ItemUse_SetQuestLogEvent(QL_EVENT_USED_ITEM, NULL, gSpecialVar_ItemId, 0xFFFF); if (gTasks[taskId].tIsFieldUse == FALSE) - DisplayItemMessageInBag(taskId, FONT_NORMAL, gText_PlayedPokeFlute, Task_PlayPokeFlute); + DisplayItemMessage(taskId, FONT_NORMAL, gText_PlayedPokeFlute, Task_PlayPokeFlute); else DisplayItemMessageOnField(taskId, FONT_NORMAL, gText_PlayedPokeFlute, Task_PlayPokeFlute); } else { if (gTasks[taskId].tIsFieldUse == FALSE) - DisplayItemMessageInBag(taskId, FONT_NORMAL, gText_PlayedPokeFluteCatchy, Task_ReturnToBagFromContextMenu); + DisplayItemMessage(taskId, FONT_NORMAL, gText_PlayedPokeFluteCatchy, Task_ReturnToBagFromContextMenu); else DisplayItemMessageOnField(taskId, FONT_NORMAL, gText_PlayedPokeFluteCatchy, Task_ItemUse_CloseMessageBoxAndReturnToField); } @@ -523,7 +523,7 @@ static void Task_DisplayPokeFluteMessage(u8 taskId) if (WaitFanfare(FALSE)) { if (gTasks[taskId].tIsFieldUse == FALSE) - DisplayItemMessageInBag(taskId, FONT_NORMAL, gText_PokeFluteAwakenedMon, Task_ReturnToBagFromContextMenu); + DisplayItemMessage(taskId, FONT_NORMAL, gText_PokeFluteAwakenedMon, Task_ReturnToBagFromContextMenu); else DisplayItemMessageOnField(taskId, FONT_NORMAL, gText_PokeFluteAwakenedMon, Task_ItemUse_CloseMessageBoxAndReturnToField); } @@ -723,7 +723,7 @@ void ItemUseOutOfBattle_Repel(u8 taskId) } else // An earlier repel is still in effect - DisplayItemMessageInBag(taskId, FONT_NORMAL, gText_RepelEffectsLingered, Task_ReturnToBagFromContextMenu); + DisplayItemMessage(taskId, FONT_NORMAL, gText_RepelEffectsLingered, Task_ReturnToBagFromContextMenu); } static void Task_UseRepel(u8 taskId) @@ -736,7 +736,7 @@ static void Task_UseRepel(u8 taskId) VarSet(VAR_LAST_REPEL_LURE_USED, gSpecialVar_ItemId); #endif RemoveUsedItem(); - DisplayItemMessageInBag(taskId, FONT_NORMAL, gStringVar4, Task_ReturnToBagFromContextMenu); + DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, Task_ReturnToBagFromContextMenu); } } @@ -745,7 +745,7 @@ void ItemUseOutOfBattle_Lure(u8 taskId) if (LURE_STEP_COUNT == 0) gTasks[taskId].func = Task_StartUseLure; else - DisplayItemMessageInBag(taskId, FONT_NORMAL, gText_LureEffectsLingered, Task_ReturnToBagFromContextMenu); + DisplayItemMessage(taskId, FONT_NORMAL, gText_LureEffectsLingered, Task_ReturnToBagFromContextMenu); } static void Task_StartUseLure(u8 taskId) @@ -769,7 +769,7 @@ static void Task_UseLure(u8 taskId) VarSet(VAR_LAST_REPEL_LURE_USED, gSpecialVar_ItemId); #endif RemoveUsedItem(); - DisplayItemMessageInBag(taskId, FONT_NORMAL, gStringVar4, Task_ReturnToBagFromContextMenu); + DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, Task_ReturnToBagFromContextMenu); } } @@ -823,7 +823,7 @@ static void Task_UsedBlackWhiteFlute(u8 taskId) if (++gTasks[taskId].data[8] > 7) { PlaySE(SE_GLASS_FLUTE); - DisplayItemMessageInBag(taskId, FONT_NORMAL, gStringVar4, Task_ReturnToBagFromContextMenu); + DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, Task_ReturnToBagFromContextMenu); } } @@ -945,7 +945,7 @@ void ItemUseInBattle_BagMenu(u8 taskId) } else if (CannotUseItemsInBattle(gSpecialVar_ItemId, NULL)) { - DisplayItemMessageInBag(taskId, FONT_NORMAL, gStringVar4, Task_ReturnToBagFromContextMenu); + DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, Task_ReturnToBagFromContextMenu); } else {