summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/battle_pyramid_bag.h6
-rw-r--r--include/constants/item.h5
-rw-r--r--include/constants/items.h10
-rw-r--r--include/event_scripts.h8
-rw-r--r--include/item_menu.h118
-rw-r--r--include/item_menu_icons.h6
-rw-r--r--include/menu_helpers.h4
-rw-r--r--include/strings.h5
-rw-r--r--src/battle_pyramid_bag.c23
-rw-r--r--src/berry_tag_screen.c8
-rw-r--r--src/data/item_icon_table.h7
-rw-r--r--src/data/items.h6
-rwxr-xr-xsrc/data/object_events/berry_tree_graphics_tables.h6
-rw-r--r--src/decoration.c2
-rwxr-xr-xsrc/item_menu.c1963
-rw-r--r--src/item_menu_icons.c62
-rwxr-xr-xsrc/item_use.c36
-rw-r--r--src/menu.c52
-rw-r--r--src/menu_helpers.c60
-rwxr-xr-xsrc/party_menu.c2
-rw-r--r--src/strings.c39
21 files changed, 1269 insertions, 1159 deletions
diff --git a/include/battle_pyramid_bag.h b/include/battle_pyramid_bag.h
index de571714c..b8b3eb20f 100644
--- a/include/battle_pyramid_bag.h
+++ b/include/battle_pyramid_bag.h
@@ -29,7 +29,7 @@ enum {
struct PyramidBagMenu
{
- void (*exitCallback)(void);
+ void (*newScreenCallback)(void);
u8 tilemapBuffer[BG_SCREEN_SIZE];
u8 spriteIds[PBAG_SPRITE_COUNT];
u8 windowIds[5];
@@ -49,7 +49,7 @@ struct PyramidBagMenu
struct PyramidBagMenuState
{
- void (*callback)(void);
+ void (*exitCallback)(void);
u8 location;
u16 cursorPosition;
u16 scrollPosition;
@@ -64,7 +64,7 @@ void CB2_ReturnToPyramidBagMenu(void);
void UpdatePyramidBagList(void);
void UpdatePyramidBagCursorPos(void);
void sub_81C4EFC(void);
-void GoToBattlePyramidBagMenu(u8 a0, void (*callback)(void));
+void GoToBattlePyramidBagMenu(u8 location, void (*exitCallback)(void));
void Task_CloseBattlePyramidBagMessage(u8 taskId);
void TryStoreHeldItemsInPyramidBag(void);
void ChooseItemsToTossFromPyramidBag(void);
diff --git a/include/constants/item.h b/include/constants/item.h
index 3277f2379..a224291fa 100644
--- a/include/constants/item.h
+++ b/include/constants/item.h
@@ -16,9 +16,4 @@
#define KEYITEMS_POCKET 4
#define POCKETS_COUNT 5
-// The TM/HM pocket is the largest pocket, so the maximum amount of items
-// in a pocket is its count + 1 for the cancel option
-#define MAX_POCKET_ITEMS (BAG_TMHM_COUNT + 1)
-
-
#endif // GUARD_ITEM_CONSTANTS_H
diff --git a/include/constants/items.h b/include/constants/items.h
index 8f77e80de..c596dd3b8 100644
--- a/include/constants/items.h
+++ b/include/constants/items.h
@@ -199,9 +199,11 @@
#define FIRST_BERRY_INDEX ITEM_CHERI_BERRY
#define LAST_BERRY_INDEX ITEM_ENIGMA_BERRY
-#define ITEM_0B0 176
-#define ITEM_0B1 177
-#define ITEM_0B2 178
+#define ITEM_UNUSED_BERRY_1 176
+#define ITEM_UNUSED_BERRY_2 177
+#define ITEM_UNUSED_BERRY_3 178
+
+#define MAX_BERRY_INDEX ITEM_UNUSED_BERRY_3
// Battle Held items
#define ITEM_BRIGHT_POWDER 179
@@ -531,6 +533,6 @@
#define ITEM_B_USE_OTHER 2
// Check if the item is one that can be used on a Pokemon.
-#define ITEM_HAS_EFFECT(item) ((item) >= ITEM_POTION && (item) <= ITEM_0B2)
+#define ITEM_HAS_EFFECT(item) ((item) >= ITEM_POTION && (item) <= MAX_BERRY_INDEX)
#endif // GUARD_CONSTANTS_ITEMS_H
diff --git a/include/event_scripts.h b/include/event_scripts.h
index 3340da6f5..c478f41f8 100644
--- a/include/event_scripts.h
+++ b/include/event_scripts.h
@@ -584,9 +584,11 @@ extern const u8 SecretBase_EventScript_ShrubUseSecretPower[];
extern const u8 TrainerHill_EventScript_TrainerBattle[];
// Item Use
-extern u8 BerryTree_EventScript_ItemUsePlantBerry[];
-extern u8 BerryTree_EventScript_ItemUseWailmerPail[];
-extern u8 BattleFrontier_OutsideEast_EventScript_WaterSudowoodo[];
+extern const u8 BerryTree_EventScript_ItemUsePlantBerry[];
+extern const u8 BerryTree_EventScript_ItemUseWailmerPail[];
+extern const u8 BattleFrontier_OutsideEast_EventScript_WaterSudowoodo[];
+
+extern const u8 EventScript_SelectWithoutRegisteredItem[];
// overworld
extern const u8 EventScript_WhiteOut[];
diff --git a/include/item_menu.h b/include/item_menu.h
index a99272b0c..fd576c3b5 100644
--- a/include/item_menu.h
+++ b/include/item_menu.h
@@ -1,107 +1,111 @@
-#ifndef GUARD_item_menu_H
-#define GUARD_item_menu_H
+#ifndef GUARD_ITEM_MENU_H
+#define GUARD_ITEM_MENU_H
#include "item.h"
#include "menu_helpers.h"
-#define ITEMMENULOCATION_FIELD 0
-#define ITEMMENULOCATION_BATTLE 1
-#define ITEMMENULOCATION_PARTY 2
-#define ITEMMENULOCATION_SHOP 3
-#define ITEMMENULOCATION_BERRY_TREE 4
-#define ITEMMENULOCATION_BERRY_BLENDER_CRUSH 5
-#define ITEMMENULOCATION_ITEMPC 6
-#define ITEMMENULOCATION_FAVOR_LADY 7
-#define ITEMMENULOCATION_QUIZ_LADY 8
-#define ITEMMENULOCATION_APPRENTICE 9
-#define ITEMMENULOCATION_WALLY 10
-#define ITEMMENULOCATION_PCBOX 11
-#define ITEMMENULOCATION_LAST 12
+enum {
+ ITEMMENULOCATION_FIELD,
+ ITEMMENULOCATION_BATTLE,
+ ITEMMENULOCATION_PARTY,
+ ITEMMENULOCATION_SHOP,
+ ITEMMENULOCATION_BERRY_TREE,
+ ITEMMENULOCATION_BERRY_BLENDER_CRUSH,
+ ITEMMENULOCATION_ITEMPC,
+ ITEMMENULOCATION_FAVOR_LADY,
+ ITEMMENULOCATION_QUIZ_LADY,
+ ITEMMENULOCATION_APPRENTICE,
+ ITEMMENULOCATION_WALLY,
+ ITEMMENULOCATION_PCBOX,
+ ITEMMENULOCATION_LAST,
+};
-#define ITEMMENUACTION_USE 0
-#define ITEMMENUACTION_TOSS 1
-#define ITEMMENUACTION_REGISTER 2
-#define ITEMMENUACTION_GIVE 3
-#define ITEMMENUACTION_CANCEL 4
-#define ITEMMENUACTION_BATTLE_USE 5
-#define ITEMMENUACTION_CHECK 6
-#define ITEMMENUACTION_WALK 7
-#define ITEMMENUACTION_DESELECT 8
-#define ITEMMENUACTION_CHECK_TAG 9
-#define ITEMMENUACTION_CONFIRM 10
-#define ITEMMENUACTION_SHOW 11
-#define ITEMMENUACTION_GIVE_2 12
-#define ITEMMENUACTION_CONFIRM_2 13
-#define ITEMMENUACTION_DUMMY 14
+// Window IDs for the item menu
+enum {
+ ITEMWIN_1x1,
+ ITEMWIN_1x2,
+ ITEMWIN_2x2,
+ ITEMWIN_2x3,
+ ITEMWIN_MESSAGE,
+ ITEMWIN_YESNO_LOW,
+ ITEMWIN_YESNO_HIGH,
+ ITEMWIN_QUANTITY,
+ ITEMWIN_QUANTITY_WIDE,
+ ITEMWIN_MONEY,
+ ITEMWIN_COUNT
+};
-// Exported type declarations
-struct BagStruct
+#define ITEMMENU_SWAP_LINE_LENGTH 8 // Swap line is 8 sprites long
+enum {
+ ITEMMENUSPRITE_BAG,
+ ITEMMENUSPRITE_BALL,
+ ITEMMENUSPRITE_ITEM,
+ ITEMMENUSPRITE_ITEM_ALT, // Need two when selecting new item
+ ITEMMENUSPRITE_SWAP_LINE,
+ ITEMMENUSPRITE_COUNT = ITEMMENUSPRITE_SWAP_LINE + ITEMMENU_SWAP_LINE_LENGTH,
+};
+
+struct BagPosition
{
- void (*bagCallback)(void);
+ void (*exitCallback)(void);
u8 location;
u8 pocket;
- u16 unk6;
+ u16 pocketSwitchArrowPos;
u16 cursorPosition[POCKETS_COUNT];
u16 scrollPosition[POCKETS_COUNT];
};
-extern struct BagStruct gBagPositionStruct;
+extern struct BagPosition gBagPosition;
-struct BagMenuStruct
+struct BagMenu
{
- void (*exitCallback)(void);
- u8 tilemapBuffer[0x800];
- u8 spriteId[12];
- u8 windowPointers[10];
- u8 itemOriginalLocation;
+ void (*newScreenCallback)(void);
+ u8 tilemapBuffer[BG_SCREEN_SIZE];
+ u8 spriteIds[ITEMMENUSPRITE_COUNT];
+ u8 windowIds[ITEMWIN_COUNT];
+ u8 toSwapPos;
u8 pocketSwitchDisabled:4;
u8 itemIconSlot:2;
u8 inhibitItemDescriptionPrint:1;
u8 hideCloseBagText:1;
- u8 filler3[2];
+ u8 unused1[2];
u8 pocketScrollArrowsTask;
u8 pocketSwitchArrowsTask;
const u8* contextMenuItemsPtr;
u8 contextMenuItemsBuffer[4];
u8 contextMenuNumItems;
u8 numItemStacks[POCKETS_COUNT];
- u8 numShownItems[6];
+ u8 numShownItems[POCKETS_COUNT];
s16 graphicsLoadState;
- u8 filler4[0xE];
+ u8 unused2[14];
u8 pocketNameBuffer[32][32];
- u8 filler2[4];
+ u8 unused3[4];
};
-extern struct BagMenuStruct *gBagMenu;
-
-// Exported RAM declarations
-
+extern struct BagMenu *gBagMenu;
extern u16 gSpecialVar_ItemId;
-// Exported ROM declarations
void CB2_GoToItemDepositMenu(void);
void FavorLadyOpenBagMenu(void);
void QuizLadyOpenBagMenu(void);
void ApprenticeOpenBagMenu(void);
void CB2_BagMenuFromBattle(void);
-void SetInitialScrollAndCursorPositions(u8 pocketId);
+void UpdatePocketListPosition(u8 pocketId);
void CB2_ReturnToBagMenuPocket(void);
void CB2_BagMenuFromStartMenu(void);
u8 GetItemListPosition(u8 pocketId);
bool8 UseRegisteredKeyItemOnField(void);
void CB2_GoToSellMenu(void);
-void GoToBagMenu(u8 bagMenuType, u8 pocketId, void ( *postExitMenuMainCallback2)());
+void GoToBagMenu(u8 bagMenuType, u8 pocketId, void ( *exitCallback)());
void DoWallyTutorialBagMenu(void);
void ResetBagScrollPositions(void);
void ChooseBerryForMachine(void (*exitCallback)(void));
void CB2_ChooseBerry(void);
void Task_FadeAndCloseBagMenu(u8 taskId);
-void BagMenu_YesNo(u8, u8, const struct YesNoFuncTable*);
-void BagMenu_InitListsMenu(u8 taskId);
+void BagMenu_YesNo(u8 taskId, u8 windowType, const struct YesNoFuncTable* funcTable);
void UpdatePocketItemList(u8 pocketId);
void DisplayItemMessage(u8 taskId, u8 fontId, const u8 *str, void ( *callback)(u8 taskId));
void DisplayItemMessageOnField(u8 taskId, const u8 *src, TaskFunc callback);
+void CloseItemMessage(u8 taskId);
-
-
-#endif //GUARD_item_menu_H
+#endif //GUARD_ITEM_MENU_H
diff --git a/include/item_menu_icons.h b/include/item_menu_icons.h
index 50e11dfd9..d01dcccf5 100644
--- a/include/item_menu_icons.h
+++ b/include/item_menu_icons.h
@@ -22,10 +22,4 @@ void FreeBerryTagSpritePalette(void);
u8 CreateSpinningBerrySprite(u8 berryId, u8 x, u8 y, bool8 startAffine);
u8 CreateBerryFlavorCircleSprite(s16 x);
-#define TAG_BAG_GFX 100
-#define TAG_ROTATING_BALL_GFX 101
-#define TAG_BERRY_CHECK_CIRCLE_GFX 10000
-#define TAG_BERRY_PIC_TILE 0xFFFF
-#define TAG_BERRY_PIC_PAL 0x7544
-
#endif // GUARD_ITEM_MENU_ICONS_H
diff --git a/include/menu_helpers.h b/include/menu_helpers.h
index 9909437a2..b9b9e2d80 100644
--- a/include/menu_helpers.h
+++ b/include/menu_helpers.h
@@ -28,13 +28,13 @@ void CreateYesNoMenuWithCallbacks(u8 taskId, const struct WindowTemplate *templa
bool8 AdjustQuantityAccordingToDPadInput(s16 *arg0, u16 arg1);
u8 GetLRKeysPressed(void);
u8 GetLRKeysPressedAndHeld(void);
-bool8 sub_8122148(u16 itemId);
+bool8 IsHoldingItemAllowed(u16 itemId);
bool8 IsWritingMailAllowed(u16 itemId);
bool8 MenuHelpers_LinkSomething(void);
bool8 MenuHelpers_CallLinkSomething(void);
void sub_812220C(struct ItemSlot *slots, u8 count, u8 *arg2, u8 *usedSlotsCount, u8 maxUsedSlotsCount);
void sub_812225C(u16 *scrollOffset, u16 *cursorPos, u8 maxShownItems, u8 numItems);
-void sub_8122298(u16 *arg0, u16 *arg1, u8 arg2, u8 arg3, u8 arg4);
+void SetCursorScrollWithinListBounds(u16 *scrollOffset, u16 *cursorPos, u8 shownItems, u8 totalItems, u8 maxShownItems);
void LoadListMenuSwapLineGfx(void);
void CreateSwapLineSprites(u8 *spriteIds, u8 count);
void DestroySwapLineSprites(u8 *spriteIds, u8 count);
diff --git a/include/strings.h b/include/strings.h
index 9b3be0538..2357e3777 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -419,8 +419,8 @@ extern const u8 gText_FirmSlash[];
// item menu screen text
extern const u8 gText_CloseBag[];
-extern const u8 gText_ClearTo11Var1Clear5Var2[];
-extern const u8 gText_NumberVar1Clear7Var2[];
+extern const u8 gText_NumberItem_HM[];
+extern const u8 gText_NumberItem_TMBerry[];
extern const u8 gText_xVar1[];
extern const u8 gText_ReturnToVar1[];
extern const u8 gText_SelectorArrow2[];
@@ -442,6 +442,7 @@ extern const u8 gText_CantStoreImportantItems[];
extern const u8 gText_DepositedVar2Var1s[];
extern const u8 gText_NoRoomForItems[];
extern const u8 gText_ThreeDashes[];
+extern const u8 *const gPocketNamesStringsTable[];
// party menu text
extern const u8 gText_PkmnHPRestoredByVar2[];
diff --git a/src/battle_pyramid_bag.c b/src/battle_pyramid_bag.c
index 266b85415..83bf35090 100644
--- a/src/battle_pyramid_bag.c
+++ b/src/battle_pyramid_bag.c
@@ -411,20 +411,20 @@ static void Task_ChooseItemsToTossFromPyramidBag(u8 taskId)
void CB2_ReturnToPyramidBagMenu(void)
{
- GoToBattlePyramidBagMenu(PYRAMIDBAG_LOC_PREV, gPyramidBagMenuState.callback);
+ GoToBattlePyramidBagMenu(PYRAMIDBAG_LOC_PREV, gPyramidBagMenuState.exitCallback);
}
-void GoToBattlePyramidBagMenu(u8 location, void (*callback)(void))
+void GoToBattlePyramidBagMenu(u8 location, void (*exitCallback)(void))
{
gPyramidBagMenu = AllocZeroed(sizeof(*gPyramidBagMenu));
if (location != PYRAMIDBAG_LOC_PREV)
gPyramidBagMenuState.location = location;
- if (callback != NULL)
- gPyramidBagMenuState.callback = callback;
+ if (exitCallback != NULL)
+ gPyramidBagMenuState.exitCallback = exitCallback;
- gPyramidBagMenu->exitCallback = NULL;
+ gPyramidBagMenu->newScreenCallback = NULL;
gPyramidBagMenu->toSwapPos = POS_NONE;
gPyramidBagMenu->scrollIndicatorsTaskId = TASK_NONE;
@@ -624,7 +624,7 @@ static void CopyBagItemName(u8 *dst, u16 itemId)
{
ConvertIntToDecimalStringN(gStringVar1, ITEM_TO_BERRY(itemId), STR_CONV_MODE_LEADING_ZEROS, 2);
CopyItemName(itemId, gStringVar2);
- StringExpandPlaceholders(dst, gText_NumberVar1Clear7Var2);
+ StringExpandPlaceholders(dst, gText_NumberItem_TMBerry);
}
else
{
@@ -866,10 +866,13 @@ static void Task_ClosePyramidBag(u8 taskId)
if (!gPaletteFade.active)
{
DestroyListMenuTask(tListTaskId, &gPyramidBagMenuState.scrollPosition, &gPyramidBagMenuState.cursorPosition);
- if (gPyramidBagMenu->exitCallback != NULL)
- SetMainCallback2(gPyramidBagMenu->exitCallback);
+
+ // If ready for a new screen (e.g. party menu for giving an item) go to that screen
+ // Otherwise exit the bag and use callback set up when the bag was first opened
+ if (gPyramidBagMenu->newScreenCallback != NULL)
+ SetMainCallback2(gPyramidBagMenu->newScreenCallback);
else
- SetMainCallback2(gPyramidBagMenuState.callback);
+ SetMainCallback2(gPyramidBagMenuState.exitCallback);
RemoveScrollArrow();
ResetSpriteData();
FreeAllSpritePalettes();
@@ -1249,7 +1252,7 @@ static void BagAction_Give(u8 taskId)
}
else if (!ItemId_GetImportance(gSpecialVar_ItemId))
{
- gPyramidBagMenu->exitCallback = CB2_ChooseMonToGiveItem;
+ gPyramidBagMenu->newScreenCallback = CB2_ChooseMonToGiveItem;
CloseBattlePyramidBag(taskId);
}
else
diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c
index 4632f6dc0..babbbb3eb 100644
--- a/src/berry_tag_screen.c
+++ b/src/berry_tag_screen.c
@@ -548,9 +548,9 @@ static void Task_HandleInput(u8 taskId)
static void TryChangeDisplayedBerry(u8 taskId, s8 toMove)
{
s16 *data = gTasks[taskId].data;
- s16 currPocketPosition = gBagPositionStruct.scrollPosition[3] + gBagPositionStruct.cursorPosition[3];
+ s16 currPocketPosition = gBagPosition.scrollPosition[BERRIES_POCKET] + gBagPosition.cursorPosition[BERRIES_POCKET];
u32 newPocketPosition = currPocketPosition + toMove;
- if (newPocketPosition < 46 && BagGetItemIdByPocketPosition(POCKET_BERRIES, newPocketPosition) != 0)
+ if (newPocketPosition < ITEM_TO_BERRY(MAX_BERRY_INDEX) && BagGetItemIdByPocketPosition(POCKET_BERRIES, newPocketPosition) != ITEM_NONE)
{
if (toMove < 0)
data[1] = 2;
@@ -566,8 +566,8 @@ static void TryChangeDisplayedBerry(u8 taskId, s8 toMove)
static void HandleBagCursorPositionChange(s8 toMove)
{
- u16 *scrollPos = &gBagPositionStruct.scrollPosition[3];
- u16 *cursorPos = &gBagPositionStruct.cursorPosition[3];
+ u16 *scrollPos = &gBagPosition.scrollPosition[BERRIES_POCKET];
+ u16 *cursorPos = &gBagPosition.cursorPosition[BERRIES_POCKET];
if (toMove > 0)
{
if (*cursorPos < 4 || BagGetItemIdByPocketPosition(POCKET_BERRIES, *scrollPos + 8) == 0)
diff --git a/src/data/item_icon_table.h b/src/data/item_icon_table.h
index c36969ab5..ea8315e76 100644
--- a/src/data/item_icon_table.h
+++ b/src/data/item_icon_table.h
@@ -192,10 +192,9 @@ const u32 *const gItemIconTable[][2] =
[ITEM_LANSAT_BERRY] = {gItemIcon_LansatBerry, gItemIconPalette_LansatBerry},
[ITEM_STARF_BERRY] = {gItemIcon_StarfBerry, gItemIconPalette_StarfBerry},
[ITEM_ENIGMA_BERRY] = {gItemIcon_EnigmaBerry, gItemIconPalette_EnigmaBerry},
- // ????????
- [ITEM_0B0] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_0B1] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_0B2] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
+ [ITEM_UNUSED_BERRY_1] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
+ [ITEM_UNUSED_BERRY_2] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
+ [ITEM_UNUSED_BERRY_3] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
// Hold items
[ITEM_BRIGHT_POWDER] = {gItemIcon_BrightPowder, gItemIconPalette_BrightPowder},
[ITEM_WHITE_HERB] = {gItemIcon_InBattleHerb, gItemIconPalette_WhiteHerb},
diff --git a/src/data/items.h b/src/data/items.h
index fc7792186..370cd2022 100644
--- a/src/data/items.h
+++ b/src/data/items.h
@@ -2148,7 +2148,7 @@ const struct Item gItems[] =
.battleUseFunc = ItemUseInBattle_EnigmaBerry,
},
- [ITEM_0B0] =
+ [ITEM_UNUSED_BERRY_1] =
{
.name = _("????????"),
.itemId = ITEM_NONE,
@@ -2159,7 +2159,7 @@ const struct Item gItems[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
},
- [ITEM_0B1] =
+ [ITEM_UNUSED_BERRY_2] =
{
.name = _("????????"),
.itemId = ITEM_NONE,
@@ -2170,7 +2170,7 @@ const struct Item gItems[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
},
- [ITEM_0B2] =
+ [ITEM_UNUSED_BERRY_3] =
{
.name = _("????????"),
.itemId = ITEM_NONE,
diff --git a/src/data/object_events/berry_tree_graphics_tables.h b/src/data/object_events/berry_tree_graphics_tables.h
index 390c82f95..fe41bda3b 100755
--- a/src/data/object_events/berry_tree_graphics_tables.h
+++ b/src/data/object_events/berry_tree_graphics_tables.h
@@ -559,7 +559,7 @@ const u8 *const gBerryTreeObjectEventGraphicsIdTablePointers[] = {
[ITEM_STARF_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
[ITEM_ENIGMA_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
// 3 unused berries.
- [ITEM_0B0 - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
- [ITEM_0B1 - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
- [ITEM_0B2 - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
+ [ITEM_UNUSED_BERRY_1 - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
+ [ITEM_UNUSED_BERRY_2 - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
+ [ITEM_UNUSED_BERRY_3 - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
};
diff --git a/src/decoration.c b/src/decoration.c
index 62d1966bf..caaf1f635 100644
--- a/src/decoration.c
+++ b/src/decoration.c
@@ -867,7 +867,7 @@ static void InitDecorationItemsMenuScrollAndCursor(void)
static void InitDecorationItemsMenuScrollAndCursor2(void)
{
- sub_8122298(&sDecorationsScrollOffset, &sDecorationsCursorPos, sDecorationItemsMenu->maxShownItems, sDecorationItemsMenu->numMenuItems, 8);
+ SetCursorScrollWithinListBounds(&sDecorationsScrollOffset, &sDecorationsCursorPos, sDecorationItemsMenu->maxShownItems, sDecorationItemsMenu->numMenuItems, 8);
}
static void PrintDecorationItemMenuItems(u8 taskId)
diff --git a/src/item_menu.c b/src/item_menu.c
index 39abf883a..a1ae10570 100755
--- a/src/item_menu.c
+++ b/src/item_menu.c
@@ -7,12 +7,11 @@
#include "battle_pyramid_bag.h"
#include "berry_tag_screen.h"
#include "bg.h"
-#include "constants/items.h"
-#include "constants/songs.h"
#include "data.h"
#include "decompress.h"
#include "event_data.h"
#include "event_object_movement.h"
+#include "event_scripts.h"
#include "field_player_avatar.h"
#include "field_specials.h"
#include "graphics.h"
@@ -49,113 +48,168 @@
#include "window.h"
#include "apprentice.h"
#include "battle_pike.h"
+#include "constants/items.h"
#include "constants/rgb.h"
+#include "constants/songs.h"
-enum
-{
+#define TAG_POCKET_SCROLL_ARROW 110
+#define TAG_BAG_SCROLL_ARROW 111
+
+// The buffer for the bag item list needs to be large enough to hold the maximum
+// number of item slots that could fit in a single pocket, + 1 for Cancel.
+// This constant picks the max of the existing pocket sizes.
+// By default, the largest pocket is BAG_TMHM_COUNT at 64.
+#define MAX_POCKET_ITEMS ((max(BAG_TMHM_COUNT, \
+ max(BAG_BERRIES_COUNT, \
+ max(BAG_ITEMS_COUNT, \
+ max(BAG_KEYITEMS_COUNT, \
+ BAG_POKEBALLS_COUNT))))) + 1)
+
+// Up to 8 item slots can be visible at a time
+#define MAX_ITEMS_SHOWN 8
+
+enum {
SWITCH_POCKET_NONE,
SWITCH_POCKET_LEFT,
SWITCH_POCKET_RIGHT
};
-void GoToBagMenu(u8 bagMenuType, u8 pocketId, void (*postExitMenuMainCallback2)());
-void CB2_Bag(void);
-bool8 SetupBagMenu(void);
-void BagMenu_InitBGs(void);
-bool8 LoadBagMenu_Graphics(void);
-void SetupBagMenu_Textboxes(void);
-void AllocateBagItemListBuffers(void);
-void LoadBagItemListBuffers(u8);
-void BagMenu_PrintPocketNames(const u8*, const u8*);
-void BagMenu_CopyPocketNameToWindow(u32);
-static void DrawPocketIndicatorSquare(u8 x, bool8 isCurrentPocket);
-void CreatePocketScrollArrowPair(void);
-void CreatePocketSwitchArrowPair(void);
-void BagMenu_PrepareTMHMMoveWindow(void);
-bool8 IsWallysBag(void);
-void Task_WallyTutorialBagMenu(u8);
-void Task_BagMenu_HandleInput(u8);
-void GetItemName(s8*, u16);
-u16 ItemIdToBattleMoveId(u16);
-u16 BagGetItemIdByPocketPosition(u8, u16);
-void BagMenu_PrintDescription(int);
-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 BagDestroyPocketSwitchArrowPair(void);
-void TaskCloseBagMenu_2(u8);
-u8 AddItemMessageWindow(u8);
-void BagMenu_RemoveBagItemMessageWindow(u8);
-void set_callback3_to_bag(u8);
-void PrintItemDepositAmount(u8, s16);
+enum {
+ ACTION_USE,
+ ACTION_TOSS,
+ ACTION_REGISTER,
+ ACTION_GIVE,
+ ACTION_CANCEL,
+ ACTION_BATTLE_USE,
+ ACTION_CHECK,
+ ACTION_WALK,
+ ACTION_DESELECT,
+ ACTION_CHECK_TAG,
+ ACTION_CONFIRM,
+ ACTION_SHOW,
+ ACTION_GIVE_FAVOR_LADY,
+ ACTION_CONFIRM_QUIZ_LADY,
+ ACTION_DUMMY,
+};
+
+enum {
+ WIN_ITEM_LIST,
+ WIN_DESCRIPTION,
+ WIN_POCKET_NAME,
+ WIN_TMHM_INFO_ICONS,
+ WIN_TMHM_INFO,
+ WIN_MESSAGE, // Identical to ITEMWIN_MESSAGE. Unused?
+};
+
+// Item list ID for toSwapPos to indicate an item is not currently being swapped
+#define NOT_SWAPPING 0xFF
+
+struct ListBuffer1 {
+ struct ListMenuItem subBuffers[MAX_POCKET_ITEMS];
+};
+
+struct ListBuffer2 {
+ s8 name[MAX_POCKET_ITEMS][ITEM_NAME_LENGTH + 10];
+};
+
+struct TempWallyBag {
+ struct ItemSlot bagPocket_Items[BAG_ITEMS_COUNT];
+ struct ItemSlot bagPocket_PokeBalls[BAG_POKEBALLS_COUNT];
+ u16 cursorPosition[POCKETS_COUNT];
+ u16 scrollPosition[POCKETS_COUNT];
+ u16 unused;
+ u16 pocket;
+};
+
+static void CB2_Bag(void);
+static bool8 SetupBagMenu(void);
+static void BagMenu_InitBGs(void);
+static bool8 LoadBagMenu_Graphics(void);
+static void LoadBagMenuTextWindows(void);
+static void AllocateBagItemListBuffers(void);
+static void LoadBagItemListBuffers(u8);
+static void PrintPocketNames(const u8*, const u8*);
+static void CopyPocketNameToWindow(u32);
+static void DrawPocketIndicatorSquare(u8, bool8);
+static void CreatePocketScrollArrowPair(void);
+static void CreatePocketSwitchArrowPair(void);
+static void DestroyPocketSwitchArrowPair(void);
+static void PrepareTMHMMoveWindow(void);
+static bool8 IsWallysBag(void);
+static void Task_WallyTutorialBagMenu(u8);
+static void Task_BagMenu_HandleInput(u8);
+static void GetItemName(s8*, u16);
+static void PrintItemDescription(int);
+static void BagMenu_PrintCursorAtPos(u8, u8);
+static void BagMenu_Print(u8, u8, const u8*, u8, u8, u8, u8, u8, u8);
+static void Task_CloseBagMenu(u8);
+static u8 AddItemMessageWindow(u8);
+static void RemoveItemMessageWindow(u8);
+static void ReturnToItemList(u8);
+static void PrintItemQuantity(u8, s16);
static u8 BagMenu_AddWindow(u8);
static u8 GetSwitchBagPocketDirection(void);
-static void SwitchBagPocket(u8, s16, u16);
+static void SwitchBagPocket(u8, s16, bool16);
static bool8 CanSwapItems(void);
-static void BagMenu_SwapItems(u8 taskId);
-static void sub_81AC10C(u8);
+static void StartItemSwap(u8 taskId);
+static void Task_SwitchBagPocket(u8);
static void Task_HandleSwappingItemsInput(u8);
-void sub_81AC498(u8);
-void sub_81AC590(u8);
-void PrintTMHMMoveData(u16);
-void sub_81ACAF8(u8);
-void sub_81ACB54(u8, u8, u8);
-void Task_HandleInBattleItemMenuInput(u8);
-void Task_HandleOutOfBattleItemMenuInput(u8);
-bool8 sub_81ACDFC(s8);
-void BagMenu_RemoveWindow(u8);
-void BagMenu_PrintThereIsNoPokemon(u8);
-void Task_ChooseHowManyToToss(u8);
-void BagMenu_TossItems(u8);
-void BagMenu_YesNo(u8, u8, const struct YesNoFuncTable*);
-void Task_ActuallyToss(u8);
-void ItemMenu_Cancel(u8);
-void sub_81AD350(u8);
-static void BagMenu_PrintItemCantBeHeld(u8);
+static void DoItemSwap(u8);
+static void CancelItemSwap(u8);
+static void PrintTMHMMoveData(u16);
+static void PrintContextMenuItems(u8);
+static void PrintContextMenuItemGrid(u8, u8, u8);
+static void Task_ItemContext_SingleRow(u8);
+static void Task_ItemContext_MultipleRows(u8);
+static bool8 IsValidContextMenuPos(s8);
+static void BagMenu_RemoveWindow(u8);
+static void PrintThereIsNoPokemon(u8);
+static void Task_ChooseHowManyToToss(u8);
+static void AskTossItems(u8);
+static void Task_RemoveItemFromBag(u8);
+static void ItemMenu_Cancel(u8);
+static void HandleErrorMessage(u8);
+static void PrintItemCantBeHeld(u8);
static void DisplayCurrentMoneyWindow(void);
static void DisplaySellItemPriceAndConfirm(u8);
-void sub_81AD730(u8);
-void sub_81AD6E4(u8);
+static void InitSellHowManyInput(u8);
+static void AskSellItems(u8);
static void RemoveMoneyWindow(void);
-static void Task_SellHowManyDialogueHandleInput(u8);
-static void BagMenu_Sell_UpdateItemListAndMoney(u8);
-static void BagMenu_Sell_WaitForABPress(u8);
-static void BagMenu_TryDepositItem(u8);
+static void Task_ChooseHowManyToSell(u8);
+static void SellItem(u8);
+static void WaitAfterItemSell(u8);
+static void TryDepositItem(u8);
static void Task_ChooseHowManyToDeposit(u8 taskId);
-static void BagMenu_Deposit_WaitForABPress(u8);
-void CB2_ApprenticeExitBagMenu(void);
-void CB2_FavorLadyExitBagMenu(void);
-void CB2_QuizLadyExitBagMenu(void);
-void All_CalculateNItemsAndMaxShowed(void);
-static void SetPocketListPositions(void);
-void UpdatePocketScrollPositions(void);
-u8 CreateBagInputHandlerTask(u8);
-void sub_81AC23C(u8);
-void BagMenu_MoveCursorCallback(s32 a, bool8 b, struct ListMenu*);
-void BagMenu_ItemPrintCallback(u8 windowId, u32 itemIndex, u8 a);
-void ItemMenu_UseOutOfBattle(u8 taskId);
-void ItemMenu_Toss(u8 taskId);
-void ItemMenu_Register(u8 taskId);
-void ItemMenu_Give(u8 taskId);
-void ItemMenu_Cancel(u8 taskId);
-void ItemMenu_UseInBattle(u8 taskId);
-void ItemMenu_CheckTag(u8 taskId);
-void Task_FadeAndCloseBagMenu(u8 taskId);
-void unknown_ItemMenu_Show(u8 taskId);
-void unknown_ItemMenu_Give2(u8 taskId);
-void unknown_ItemMenu_Confirm2(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);
-void BagMenu_CancelSell(u8 taskId);
-
-// .rodata
+static void WaitDepositErrorMessage(u8);
+static void CB2_ApprenticeExitBagMenu(void);
+static void CB2_FavorLadyExitBagMenu(void);
+static void CB2_QuizLadyExitBagMenu(void);
+static void UpdatePocketItemLists(void);
+static void InitPocketListPositions(void);
+static void InitPocketScrollPositions(void);
+static u8 CreateBagInputHandlerTask(u8);
+static void DrawItemListBgRow(u8);
+static void BagMenu_MoveCursorCallback(s32, bool8, struct ListMenu*);
+static void BagMenu_ItemPrintCallback(u8, u32, u8);
+static void ItemMenu_UseOutOfBattle(u8);
+static void ItemMenu_Toss(u8);
+static void ItemMenu_Register(u8);
+static void ItemMenu_Give(u8);
+static void ItemMenu_Cancel(u8);
+static void ItemMenu_UseInBattle(u8);
+static void ItemMenu_CheckTag(u8);
+static void ItemMenu_Show(u8);
+static void ItemMenu_GiveFavorLady(u8);
+static void ItemMenu_ConfirmQuizLady(u8);
+static void Task_ItemContext_Normal(u8);
+static void Task_ItemContext_GiveToParty(u8);
+static void Task_ItemContext_Sell(u8);
+static void Task_ItemContext_Deposit(u8);
+static void Task_ItemContext_GiveToPC(u8);
+static void ConfirmToss(u8);
+static void CancelToss(u8);
+static void ConfirmSell(u8);
+static void CancelSell(u8);
static const struct BgTemplate sBgTemplates_ItemMenu[] =
{
@@ -211,98 +265,98 @@ static const struct ListMenuTemplate sItemListMenu =
};
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}
+ [ACTION_USE] = {gMenuText_Use, ItemMenu_UseOutOfBattle},
+ [ACTION_TOSS] = {gMenuText_Toss, ItemMenu_Toss},
+ [ACTION_REGISTER] = {gMenuText_Register, ItemMenu_Register},
+ [ACTION_GIVE] = {gMenuText_Give, ItemMenu_Give},
+ [ACTION_CANCEL] = {gText_Cancel2, ItemMenu_Cancel},
+ [ACTION_BATTLE_USE] = {gMenuText_Use, ItemMenu_UseInBattle},
+ [ACTION_CHECK] = {gMenuText_Check, ItemMenu_UseOutOfBattle},
+ [ACTION_WALK] = {gMenuText_Walk, ItemMenu_UseOutOfBattle},
+ [ACTION_DESELECT] = {gMenuText_Deselect, ItemMenu_Register},
+ [ACTION_CHECK_TAG] = {gMenuText_CheckTag, ItemMenu_CheckTag},
+ [ACTION_CONFIRM] = {gMenuText_Confirm, Task_FadeAndCloseBagMenu},
+ [ACTION_SHOW] = {gMenuText_Show, ItemMenu_Show},
+ [ACTION_GIVE_FAVOR_LADY] = {gMenuText_Give2, ItemMenu_GiveFavorLady},
+ [ACTION_CONFIRM_QUIZ_LADY] = {gMenuText_Confirm, ItemMenu_ConfirmQuizLady},
+ [ACTION_DUMMY] = {gText_EmptyString2, NULL}
};
// these are all 2D arrays with a width of 2 but are represented as 1D arrays
-// ITEMMENUACTION_DUMMY is used to represent blank spaces
+// ACTION_DUMMY is used to represent blank spaces
static const u8 sContextMenuItems_ItemsPocket[] = {
- ITEMMENUACTION_USE, ITEMMENUACTION_GIVE,
- ITEMMENUACTION_TOSS, ITEMMENUACTION_CANCEL
+ ACTION_USE, ACTION_GIVE,
+ ACTION_TOSS, ACTION_CANCEL
};
static const u8 sContextMenuItems_KeyItemsPocket[] = {
- ITEMMENUACTION_USE, ITEMMENUACTION_REGISTER,
- ITEMMENUACTION_DUMMY, ITEMMENUACTION_CANCEL
+ ACTION_USE, ACTION_REGISTER,
+ ACTION_DUMMY, ACTION_CANCEL
};
static const u8 sContextMenuItems_BallsPocket[] = {
- ITEMMENUACTION_GIVE, ITEMMENUACTION_DUMMY,
- ITEMMENUACTION_TOSS, ITEMMENUACTION_CANCEL
+ ACTION_GIVE, ACTION_DUMMY,
+ ACTION_TOSS, ACTION_CANCEL
};
static const u8 sContextMenuItems_TmHmPocket[] = {
- ITEMMENUACTION_USE, ITEMMENUACTION_GIVE,
- ITEMMENUACTION_DUMMY, ITEMMENUACTION_CANCEL
+ ACTION_USE, ACTION_GIVE,
+ ACTION_DUMMY, ACTION_CANCEL
};
static const u8 sContextMenuItems_BerriesPocket[] = {
- ITEMMENUACTION_CHECK_TAG, ITEMMENUACTION_DUMMY,
- ITEMMENUACTION_USE, ITEMMENUACTION_GIVE,
- ITEMMENUACTION_TOSS, ITEMMENUACTION_CANCEL
+ ACTION_CHECK_TAG, ACTION_DUMMY,
+ ACTION_USE, ACTION_GIVE,
+ ACTION_TOSS, ACTION_CANCEL
};
static const u8 sContextMenuItems_BattleUse[] = {
- ITEMMENUACTION_BATTLE_USE, ITEMMENUACTION_CANCEL
+ ACTION_BATTLE_USE, ACTION_CANCEL
};
static const u8 sContextMenuItems_Give[] = {
- ITEMMENUACTION_GIVE, ITEMMENUACTION_CANCEL
+ ACTION_GIVE, ACTION_CANCEL
};
static const u8 sContextMenuItems_Cancel[] = {
- ITEMMENUACTION_CANCEL
+ ACTION_CANCEL
};
static const u8 sContextMenuItems_BerryBlenderCrush[] = {
- ITEMMENUACTION_CONFIRM, ITEMMENUACTION_CHECK_TAG,
- ITEMMENUACTION_DUMMY, ITEMMENUACTION_CANCEL
+ ACTION_CONFIRM, ACTION_CHECK_TAG,
+ ACTION_DUMMY, ACTION_CANCEL
};
static const u8 sContextMenuItems_Apprentice[] = {
- ITEMMENUACTION_SHOW, ITEMMENUACTION_CANCEL
+ ACTION_SHOW, ACTION_CANCEL
};
static const u8 sContextMenuItems_FavorLady[] = {
- ITEMMENUACTION_GIVE_2, ITEMMENUACTION_CANCEL
+ ACTION_GIVE_FAVOR_LADY, ACTION_CANCEL
};
static const u8 sContextMenuItems_QuizLady[] = {
- ITEMMENUACTION_CONFIRM_2, ITEMMENUACTION_CANCEL
+ ACTION_CONFIRM_QUIZ_LADY, ACTION_CANCEL
};
-static const TaskFunc gUnknown_08614054[] = {
- [ITEMMENULOCATION_FIELD] = Task_ItemContext_FieldOrBattle,
- [ITEMMENULOCATION_BATTLE] = Task_ItemContext_FieldOrBattle,
- [ITEMMENULOCATION_PARTY] = Task_ItemContext_FieldGive,
+static const TaskFunc sContextMenuFuncs[] = {
+ [ITEMMENULOCATION_FIELD] = Task_ItemContext_Normal,
+ [ITEMMENULOCATION_BATTLE] = Task_ItemContext_Normal,
+ [ITEMMENULOCATION_PARTY] = Task_ItemContext_GiveToParty,
[ITEMMENULOCATION_SHOP] = Task_ItemContext_Sell,
[ITEMMENULOCATION_BERRY_TREE] = Task_FadeAndCloseBagMenu,
- [ITEMMENULOCATION_BERRY_BLENDER_CRUSH] = Task_ItemContext_FieldOrBattle,
+ [ITEMMENULOCATION_BERRY_BLENDER_CRUSH] = Task_ItemContext_Normal,
[ITEMMENULOCATION_ITEMPC] = Task_ItemContext_Deposit,
- [ITEMMENULOCATION_FAVOR_LADY] = Task_ItemContext_FieldOrBattle,
- [ITEMMENULOCATION_QUIZ_LADY] = Task_ItemContext_FieldOrBattle,
- [ITEMMENULOCATION_APPRENTICE] = Task_ItemContext_FieldOrBattle,
+ [ITEMMENULOCATION_FAVOR_LADY] = Task_ItemContext_Normal,
+ [ITEMMENULOCATION_QUIZ_LADY] = Task_ItemContext_Normal,
+ [ITEMMENULOCATION_APPRENTICE] = Task_ItemContext_Normal,
[ITEMMENULOCATION_WALLY] = NULL,
- [ITEMMENULOCATION_PCBOX] = Task_ItemContext_ItemPC_2
+ [ITEMMENULOCATION_PCBOX] = Task_ItemContext_GiveToPC
};
-static const struct YesNoFuncTable sYesNoTossFunctions = {BagMenu_ConfirmToss, BagMenu_CancelToss};
+static const struct YesNoFuncTable sYesNoTossFunctions = {ConfirmToss, CancelToss};
-static const struct YesNoFuncTable sYesNoSellItemFunctions = {BagMenu_ConfirmSell, BagMenu_CancelSell};
+static const struct YesNoFuncTable sYesNoSellItemFunctions = {ConfirmSell, CancelSell};
static const struct ScrollArrowsTemplate sBagScrollArrowsTemplate = {
.firstArrowType = SCROLL_ARROW_LEFT,
@@ -313,25 +367,33 @@ static const struct ScrollArrowsTemplate sBagScrollArrowsTemplate = {
.secondY = 16,
.fullyUpThreshold = -1,
.fullyDownThreshold = -1,
- .tileTag = 111,
- .palTag = 111,
+ .tileTag = TAG_BAG_SCROLL_ARROW,
+ .palTag = TAG_BAG_SCROLL_ARROW,
.palNum = 0,
};
static const u8 sRegisteredSelect_Gfx[] = INCBIN_U8("graphics/interface/select_button.4bpp");
+enum {
+ COLORID_NORMAL,
+ COLORID_POCKET_NAME,
+ COLORID_GRAY_CURSOR,
+ COLORID_UNUSED,
+ COLORID_TMHM_INFO,
+ COLORID_NONE = 0xFF
+};
static const u8 sFontColorTable[][3] = {
-// bgColor, textColor, shadowColor
- {0, 1, 3},
- {0, 1, 4},
- {0, 3, 6},
- {2, 1, 3},
- {0, 14, 10}
+ // bgColor, textColor, shadowColor
+ [COLORID_NORMAL] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY},
+ [COLORID_POCKET_NAME] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_WHITE, TEXT_COLOR_RED},
+ [COLORID_GRAY_CURSOR] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_LIGHT_GRAY, TEXT_COLOR_GREEN},
+ [COLORID_UNUSED] = {TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY},
+ [COLORID_TMHM_INFO] = {TEXT_COLOR_TRANSPARENT, TEXT_DYNAMIC_COLOR_5, TEXT_DYNAMIC_COLOR_1}
};
-const struct WindowTemplate sDefaultBagWindows[] =
+static const struct WindowTemplate sDefaultBagWindows[] =
{
- { // Item names
+ [WIN_ITEM_LIST] = {
.bg = 0,
.tilemapLeft = 14,
.tilemapTop = 2,
@@ -340,7 +402,7 @@ const struct WindowTemplate sDefaultBagWindows[] =
.paletteNum = 1,
.baseBlock = 0x27,
},
- { // Description
+ [WIN_DESCRIPTION] = {
.bg = 0,
.tilemapLeft = 0,
.tilemapTop = 13,
@@ -349,7 +411,7 @@ const struct WindowTemplate sDefaultBagWindows[] =
.paletteNum = 1,
.baseBlock = 0x117,
},
- { // Pocket name
+ [WIN_POCKET_NAME] = {
.bg = 0,
.tilemapLeft = 4,
.tilemapTop = 1,
@@ -358,7 +420,7 @@ const struct WindowTemplate sDefaultBagWindows[] =
.paletteNum = 1,
.baseBlock = 0x1A1,
},
- { // TM/HM info icons
+ [WIN_TMHM_INFO_ICONS] = {
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 13,
@@ -367,7 +429,7 @@ const struct WindowTemplate sDefaultBagWindows[] =
.paletteNum = 12,
.baseBlock = 0x16B,
},
- {// TM/HM info
+ [WIN_TMHM_INFO] = {
.bg = 0,
.tilemapLeft = 7,
.tilemapTop = 13,
@@ -376,7 +438,7 @@ const struct WindowTemplate sDefaultBagWindows[] =
.paletteNum = 12,
.baseBlock = 0x189,
},
- { // Field message box
+ [WIN_MESSAGE] = {
.bg = 1,
.tilemapLeft = 2,
.tilemapTop = 15,
@@ -388,9 +450,9 @@ const struct WindowTemplate sDefaultBagWindows[] =
DUMMY_WIN_TEMPLATE,
};
-const struct WindowTemplate sContextMenuWindowTemplates[] =
+static const struct WindowTemplate sContextMenuWindowTemplates[] =
{
- {
+ [ITEMWIN_1x1] = {
.bg = 1,
.tilemapLeft = 22,
.tilemapTop = 17,
@@ -399,7 +461,7 @@ const struct WindowTemplate sContextMenuWindowTemplates[] =
.paletteNum = 15,
.baseBlock = 0x21D,
},
- {
+ [ITEMWIN_1x2] = {
.bg = 1,
.tilemapLeft = 22,
.tilemapTop = 15,
@@ -408,7 +470,7 @@ const struct WindowTemplate sContextMenuWindowTemplates[] =
.paletteNum = 15,
.baseBlock = 0x21D,
},
- {
+ [ITEMWIN_2x2] = {
.bg = 1,
.tilemapLeft = 15,
.tilemapTop = 15,
@@ -417,7 +479,7 @@ const struct WindowTemplate sContextMenuWindowTemplates[] =
.paletteNum = 15,
.baseBlock = 0x21D,
},
- {
+ [ITEMWIN_2x3] = {
.bg = 1,
.tilemapLeft = 15,
.tilemapTop = 13,
@@ -426,7 +488,7 @@ const struct WindowTemplate sContextMenuWindowTemplates[] =
.paletteNum = 15,
.baseBlock = 0x21D,
},
- {
+ [ITEMWIN_MESSAGE] = {
.bg = 1,
.tilemapLeft = 2,
.tilemapTop = 15,
@@ -435,7 +497,7 @@ const struct WindowTemplate sContextMenuWindowTemplates[] =
.paletteNum = 15,
.baseBlock = 0x1B1,
},
- {
+ [ITEMWIN_YESNO_LOW] = { // Yes/No tucked in corner, for toss confirm
.bg = 1,
.tilemapLeft = 24,
.tilemapTop = 15,
@@ -444,7 +506,7 @@ const struct WindowTemplate sContextMenuWindowTemplates[] =
.paletteNum = 15,
.baseBlock = 0x21D,
},
- {
+ [ITEMWIN_YESNO_HIGH] = { // Yes/No higher up, positioned above a lower message box
.bg = 1,
.tilemapLeft = 21,
.tilemapTop = 9,
@@ -453,7 +515,7 @@ const struct WindowTemplate sContextMenuWindowTemplates[] =
.paletteNum = 15,
.baseBlock = 0x21D,
},
- {
+ [ITEMWIN_QUANTITY] = { // Used for quantity of items to Toss/Deposit
.bg = 1,
.tilemapLeft = 24,
.tilemapTop = 17,
@@ -462,7 +524,7 @@ const struct WindowTemplate sContextMenuWindowTemplates[] =
.paletteNum = 15,
.baseBlock = 0x21D,
},
- {
+ [ITEMWIN_QUANTITY_WIDE] = { // Used for quantity and price of items to Sell
.bg = 1,
.tilemapLeft = 18,
.tilemapTop = 11,
@@ -471,7 +533,7 @@ const struct WindowTemplate sContextMenuWindowTemplates[] =
.paletteNum = 15,
.baseBlock = 0x245,
},
- {
+ [ITEMWIN_MONEY] = {
.bg = 1,
.tilemapLeft = 1,
.tilemapTop = 1,
@@ -482,41 +544,18 @@ const struct WindowTemplate sContextMenuWindowTemplates[] =
},
};
-// .text
-
-struct ListBuffer1 {
- struct ListMenuItem subBuffers[MAX_POCKET_ITEMS];
-};
-
-struct ListBuffer2 {
- s8 name[MAX_POCKET_ITEMS][24];
-};
-
-struct TempWallyStruct {
- struct ItemSlot bagPocket_Items[BAG_ITEMS_COUNT];
- struct ItemSlot bagPocket_PokeBalls[BAG_POKEBALLS_COUNT];
- u16 cursorPosition[POCKETS_COUNT];
- u16 scrollPosition[POCKETS_COUNT];
- u8 filler[2];
- u16 pocket;
-};
-
-EWRAM_DATA struct BagMenuStruct *gBagMenu = 0;
-EWRAM_DATA struct BagStruct gBagPositionStruct = {0};
+EWRAM_DATA struct BagMenu *gBagMenu = 0;
+EWRAM_DATA struct BagPosition gBagPosition = {0};
static EWRAM_DATA struct ListBuffer1 *sListBuffer1 = 0;
static EWRAM_DATA struct ListBuffer2 *sListBuffer2 = 0;
EWRAM_DATA u16 gSpecialVar_ItemId = 0;
-static EWRAM_DATA struct TempWallyStruct *sTempWallyBag = 0;
-
-extern u8 *const gPocketNamesStringsTable[];
-extern const u8 EventScript_SelectWithoutRegisteredItem[];
-extern const u16 gUnknown_0860F074[];
+static EWRAM_DATA struct TempWallyBag *sTempWallyBag = 0;
void ResetBagScrollPositions(void)
{
- gBagPositionStruct.pocket = ITEMS_POCKET;
- memset(gBagPositionStruct.cursorPosition, 0, 10);
- memset(gBagPositionStruct.scrollPosition, 0, 10);
+ gBagPosition.pocket = ITEMS_POCKET;
+ memset(gBagPosition.cursorPosition, 0, sizeof(gBagPosition.cursorPosition));
+ memset(gBagPosition.scrollPosition, 0, sizeof(gBagPosition.scrollPosition));
}
void CB2_BagMenuFromStartMenu(void)
@@ -573,30 +612,31 @@ void QuizLadyOpenBagMenu(void)
gSpecialVar_Result = FALSE;
}
-void GoToBagMenu(u8 location, u8 pocket, void ( *postExitMenuMainCallback2)())
+void GoToBagMenu(u8 location, u8 pocket, void ( *exitCallback)())
{
- gBagMenu = AllocZeroed(sizeof(struct BagMenuStruct));
+ gBagMenu = AllocZeroed(sizeof(*gBagMenu));
if (gBagMenu == NULL)
{
- SetMainCallback2(postExitMenuMainCallback2);
+ // Alloc failed, exit
+ SetMainCallback2(exitCallback);
}
else
{
if (location != ITEMMENULOCATION_LAST)
- gBagPositionStruct.location = location;
- if (postExitMenuMainCallback2)
- gBagPositionStruct.bagCallback = postExitMenuMainCallback2;
+ gBagPosition.location = location;
+ if (exitCallback)
+ gBagPosition.exitCallback = exitCallback;
if (pocket < POCKETS_COUNT)
- gBagPositionStruct.pocket = pocket;
- if (gBagPositionStruct.location == ITEMMENULOCATION_BERRY_TREE ||
- gBagPositionStruct.location == ITEMMENULOCATION_BERRY_BLENDER_CRUSH)
+ gBagPosition.pocket = pocket;
+ if (gBagPosition.location == ITEMMENULOCATION_BERRY_TREE ||
+ gBagPosition.location == ITEMMENULOCATION_BERRY_BLENDER_CRUSH)
gBagMenu->pocketSwitchDisabled = TRUE;
- gBagMenu->exitCallback = NULL;
- gBagMenu->itemOriginalLocation = 0xFF;
+ gBagMenu->newScreenCallback = NULL;
+ gBagMenu->toSwapPos = NOT_SWAPPING;
gBagMenu->pocketScrollArrowsTask = TASK_NONE;
gBagMenu->pocketSwitchArrowsTask = TASK_NONE;
- memset(gBagMenu->spriteId, 0xFF, sizeof(gBagMenu->spriteId));
- memset(gBagMenu->windowPointers, 0xFF, 10);
+ memset(gBagMenu->spriteIds, SPRITE_NONE, sizeof(gBagMenu->spriteIds));
+ memset(gBagMenu->windowIds, WINDOW_NONE, sizeof(gBagMenu->windowIds));
SetMainCallback2(CB2_Bag);
}
}
@@ -617,14 +657,23 @@ void VBlankCB_BagMenuRun(void)
TransferPlttBuffer();
}
-#define tItemCount data[8]
+#define tListTaskId data[0]
+#define tListPosition data[1]
+#define tQuantity data[2]
+#define tNeverRead data[3]
+#define tItemCount data[8]
+#define tMsgWindowId data[10]
+#define tPocketSwitchDir data[11]
+#define tPocketSwitchTimer data[12]
+#define tPocketSwitchState data[13]
-void CB2_Bag(void)
+static void CB2_Bag(void)
{
- while(MenuHelpers_CallLinkSomething() != TRUE && SetupBagMenu() != TRUE && MenuHelpers_LinkSomething() != TRUE) {};
+ while(MenuHelpers_CallLinkSomething() != TRUE && SetupBagMenu() != TRUE && MenuHelpers_LinkSomething() != TRUE)
+ {};
}
-bool8 SetupBagMenu(void)
+static bool8 SetupBagMenu(void)
{
u8 taskId;
@@ -671,13 +720,13 @@ bool8 SetupBagMenu(void)
gMain.state++;
break;
case 9:
- SetupBagMenu_Textboxes();
+ LoadBagMenuTextWindows();
gMain.state++;
break;
case 10:
- All_CalculateNItemsAndMaxShowed();
- SetPocketListPositions();
- UpdatePocketScrollPositions();
+ UpdatePocketItemLists();
+ InitPocketListPositions();
+ InitPocketScrollPositions();
gMain.state++;
break;
case 11:
@@ -685,24 +734,24 @@ bool8 SetupBagMenu(void)
gMain.state++;
break;
case 12:
- LoadBagItemListBuffers(gBagPositionStruct.pocket);
+ LoadBagItemListBuffers(gBagPosition.pocket);
gMain.state++;
break;
case 13:
- BagMenu_PrintPocketNames(gPocketNamesStringsTable[gBagPositionStruct.pocket], 0);
- BagMenu_CopyPocketNameToWindow(0);
- DrawPocketIndicatorSquare(gBagPositionStruct.pocket, TRUE);
+ PrintPocketNames(gPocketNamesStringsTable[gBagPosition.pocket], 0);
+ CopyPocketNameToWindow(0);
+ DrawPocketIndicatorSquare(gBagPosition.pocket, TRUE);
gMain.state++;
break;
case 14:
- taskId = CreateBagInputHandlerTask(gBagPositionStruct.location);
- gTasks[taskId].data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket], gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]);
- gTasks[taskId].data[3] = 0;
+ taskId = CreateBagInputHandlerTask(gBagPosition.location);
+ gTasks[taskId].tListTaskId = ListMenuInit(&gMultiuseListMenuTemplate, gBagPosition.scrollPosition[gBagPosition.pocket], gBagPosition.cursorPosition[gBagPosition.pocket]);
+ gTasks[taskId].tNeverRead = 0;
gTasks[taskId].tItemCount = 0;
gMain.state++;
break;
case 15:
- AddBagVisualSprite(gBagPositionStruct.pocket);
+ AddBagVisualSprite(gBagPosition.pocket);
gMain.state++;
break;
case 16:
@@ -715,7 +764,7 @@ bool8 SetupBagMenu(void)
gMain.state++;
break;
case 18:
- BagMenu_PrepareTMHMMoveWindow();
+ PrepareTMHMMoveWindow();
gMain.state++;
break;
case 19:
@@ -735,10 +784,10 @@ bool8 SetupBagMenu(void)
return FALSE;
}
-void BagMenu_InitBGs(void)
+static void BagMenu_InitBGs(void)
{
ResetVramOamAndBgCntRegs();
- memset(gBagMenu->tilemapBuffer, 0, 0x800);
+ memset(gBagMenu->tilemapBuffer, 0, sizeof(gBagMenu->tilemapBuffer));
ResetBgsAndClearDma3BusyFlags(0);
InitBgsFromTemplates(0, sBgTemplates_ItemMenu, ARRAY_COUNT(sBgTemplates_ItemMenu));
SetBgTilemapBuffer(2, gBagMenu->tilemapBuffer);
@@ -751,49 +800,49 @@ void BagMenu_InitBGs(void)
SetGpuReg(REG_OFFSET_BLDCNT, 0);
}
-bool8 LoadBagMenu_Graphics(void)
+static bool8 LoadBagMenu_Graphics(void)
{
switch (gBagMenu->graphicsLoadState)
{
- case 0:
- ResetTempTileDataBuffers();
- DecompressAndCopyTileDataToVram(2, gBagScreen_Gfx, 0, 0, 0);
- gBagMenu->graphicsLoadState++;
- break;
- case 1:
- if (FreeTempTileDataBuffersIfPossible() != TRUE)
- {
- LZDecompressWram(gBagScreen_GfxTileMap, gBagMenu->tilemapBuffer);
- gBagMenu->graphicsLoadState++;
- }
- break;
- case 2:
- if (!IsWallysBag() && gSaveBlock2Ptr->playerGender != MALE)
- LoadCompressedPalette(gBagScreenFemale_Pal, 0, 0x40);
- else
- LoadCompressedPalette(gBagScreenMale_Pal, 0, 0x40);
- gBagMenu->graphicsLoadState++;
- break;
- case 3:
- if (IsWallysBag() == TRUE || gSaveBlock2Ptr->playerGender == MALE)
- LoadCompressedSpriteSheet(&gBagMaleSpriteSheet);
- else
- LoadCompressedSpriteSheet(&gBagFemaleSpriteSheet);
- gBagMenu->graphicsLoadState++;
- break;
- case 4:
- LoadCompressedSpritePalette(&gBagPaletteTable);
+ case 0:
+ ResetTempTileDataBuffers();
+ DecompressAndCopyTileDataToVram(2, gBagScreen_Gfx, 0, 0, 0);
+ gBagMenu->graphicsLoadState++;
+ break;
+ case 1:
+ if (FreeTempTileDataBuffersIfPossible() != TRUE)
+ {
+ LZDecompressWram(gBagScreen_GfxTileMap, gBagMenu->tilemapBuffer);
gBagMenu->graphicsLoadState++;
- break;
- default:
- LoadListMenuSwapLineGfx();
- gBagMenu->graphicsLoadState = 0;
- return TRUE;
+ }
+ break;
+ case 2:
+ if (!IsWallysBag() && gSaveBlock2Ptr->playerGender != MALE)
+ LoadCompressedPalette(gBagScreenFemale_Pal, 0, 0x40);
+ else
+ LoadCompressedPalette(gBagScreenMale_Pal, 0, 0x40);
+ gBagMenu->graphicsLoadState++;
+ break;
+ case 3:
+ if (IsWallysBag() == TRUE || gSaveBlock2Ptr->playerGender == MALE)
+ LoadCompressedSpriteSheet(&gBagMaleSpriteSheet);
+ else
+ LoadCompressedSpriteSheet(&gBagFemaleSpriteSheet);
+ gBagMenu->graphicsLoadState++;
+ break;
+ case 4:
+ LoadCompressedSpritePalette(&gBagPaletteTable);
+ gBagMenu->graphicsLoadState++;
+ break;
+ default:
+ LoadListMenuSwapLineGfx();
+ gBagMenu->graphicsLoadState = 0;
+ return TRUE;
}
return FALSE;
}
-u8 CreateBagInputHandlerTask(u8 location)
+static u8 CreateBagInputHandlerTask(u8 location)
{
u8 taskId;
if (location == ITEMMENULOCATION_WALLY)
@@ -803,13 +852,13 @@ u8 CreateBagInputHandlerTask(u8 location)
return taskId;
}
-void AllocateBagItemListBuffers(void)
+static void AllocateBagItemListBuffers(void)
{
- sListBuffer1 = Alloc(sizeof(struct ListBuffer1));
- sListBuffer2 = Alloc(sizeof(struct ListBuffer2));
+ sListBuffer1 = Alloc(sizeof(*sListBuffer1));
+ sListBuffer2 = Alloc(sizeof(*sListBuffer2));
}
-void LoadBagItemListBuffers(u8 pocketId)
+static void LoadBagItemListBuffers(u8 pocketId)
{
u16 i;
struct BagPocket *pocket = &gBagPockets[pocketId];
@@ -845,55 +894,57 @@ void LoadBagItemListBuffers(u8 pocketId)
gMultiuseListMenuTemplate.maxShowed = gBagMenu->numShownItems[pocketId];
}
-void GetItemName(s8 *dest, u16 itemId)
+static void GetItemName(s8 *dest, u16 itemId)
{
- switch (gBagPositionStruct.pocket)
+ switch (gBagPosition.pocket)
{
- case TMHM_POCKET:
- StringCopy(gStringVar2, gMoveNames[ItemIdToBattleMoveId(itemId)]);
- if (itemId >= ITEM_HM01)
- {
- ConvertIntToDecimalStringN(gStringVar1, itemId - ITEM_HM01 + 1, STR_CONV_MODE_LEADING_ZEROS, 1);
- StringExpandPlaceholders(dest, gText_ClearTo11Var1Clear5Var2);
- }
- else
- {
- ConvertIntToDecimalStringN(gStringVar1, itemId - ITEM_TM01 + 1, STR_CONV_MODE_LEADING_ZEROS, 2);
- StringExpandPlaceholders(dest, gText_NumberVar1Clear7Var2);
- }
- break;
- case BERRIES_POCKET:
- ConvertIntToDecimalStringN(gStringVar1, itemId - FIRST_BERRY_INDEX + 1, STR_CONV_MODE_LEADING_ZEROS, 2);
- CopyItemName(itemId, gStringVar2);
- StringExpandPlaceholders(dest, gText_NumberVar1Clear7Var2);
- break;
- default:
- CopyItemName(itemId, dest);
- break;
+ case TMHM_POCKET:
+ StringCopy(gStringVar2, gMoveNames[ItemIdToBattleMoveId(itemId)]);
+ if (itemId >= ITEM_HM01)
+ {
+ // Get HM number
+ ConvertIntToDecimalStringN(gStringVar1, itemId - ITEM_HM01 + 1, STR_CONV_MODE_LEADING_ZEROS, 1);
+ StringExpandPlaceholders(dest, gText_NumberItem_HM);
+ }
+ else
+ {
+ // Get TM number
+ ConvertIntToDecimalStringN(gStringVar1, itemId - ITEM_TM01 + 1, STR_CONV_MODE_LEADING_ZEROS, 2);
+ StringExpandPlaceholders(dest, gText_NumberItem_TMBerry);
+ }
+ break;
+ case BERRIES_POCKET:
+ ConvertIntToDecimalStringN(gStringVar1, itemId - FIRST_BERRY_INDEX + 1, STR_CONV_MODE_LEADING_ZEROS, 2);
+ CopyItemName(itemId, gStringVar2);
+ StringExpandPlaceholders(dest, gText_NumberItem_TMBerry);
+ break;
+ default:
+ CopyItemName(itemId, dest);
+ break;
}
}
-void BagMenu_MoveCursorCallback(s32 itemIndex, bool8 onInit, struct ListMenu *list)
+static void BagMenu_MoveCursorCallback(s32 itemIndex, bool8 onInit, struct ListMenu *list)
{
if (onInit != TRUE)
{
PlaySE(SE_SELECT);
ShakeBagSprite();
}
- if (gBagMenu->itemOriginalLocation == 0xFF)
+ if (gBagMenu->toSwapPos == NOT_SWAPPING)
{
RemoveBagItemIconSprite(gBagMenu->itemIconSlot ^ 1);
if (itemIndex != LIST_CANCEL)
- AddBagItemIconSprite(BagGetItemIdByPocketPosition(gBagPositionStruct.pocket + 1, itemIndex), gBagMenu->itemIconSlot);
+ AddBagItemIconSprite(BagGetItemIdByPocketPosition(gBagPosition.pocket + 1, itemIndex), gBagMenu->itemIconSlot);
else
AddBagItemIconSprite(-1, gBagMenu->itemIconSlot);
gBagMenu->itemIconSlot ^= 1;
if (!gBagMenu->inhibitItemDescriptionPrint)
- BagMenu_PrintDescription(itemIndex);
+ PrintItemDescription(itemIndex);
}
}
-void BagMenu_ItemPrintCallback(u8 windowId, u32 itemIndex, u8 y)
+static void BagMenu_ItemPrintCallback(u8 windowId, u32 itemIndex, u8 y)
{
u16 itemId;
u16 itemQuantity;
@@ -901,74 +952,80 @@ void BagMenu_ItemPrintCallback(u8 windowId, u32 itemIndex, u8 y)
if (itemIndex != LIST_CANCEL)
{
- if (gBagMenu->itemOriginalLocation != 0xFF)
+ if (gBagMenu->toSwapPos != NOT_SWAPPING)
{
- if (gBagMenu->itemOriginalLocation == (u8)itemIndex)
- BagMenu_PrintCursor(y, 2);
+ // Swapping items, draw cursor at original item's location
+ if (gBagMenu->toSwapPos == (u8)itemIndex)
+ BagMenu_PrintCursorAtPos(y, COLORID_GRAY_CURSOR);
else
- BagMenu_PrintCursor(y, 0xFF);
+ BagMenu_PrintCursorAtPos(y, COLORID_NONE);
}
- itemId = BagGetItemIdByPocketPosition(gBagPositionStruct.pocket + 1, itemIndex);
- itemQuantity = BagGetQuantityByPocketPosition(gBagPositionStruct.pocket + 1, itemIndex);
+ itemId = BagGetItemIdByPocketPosition(gBagPosition.pocket + 1, itemIndex);
+ itemQuantity = BagGetQuantityByPocketPosition(gBagPosition.pocket + 1, itemIndex);
+ // Draw HM icon
if (itemId >= ITEM_HM01 && itemId <= ITEM_HM08)
BlitBitmapToWindow(windowId, gBagMenuHMIcon_Gfx, 8, y - 1, 16, 16);
- if (gBagPositionStruct.pocket == BERRIES_POCKET)
+ if (gBagPosition.pocket == BERRIES_POCKET)
{
+ // Print berry quantity
ConvertIntToDecimalStringN(gStringVar1, itemQuantity, STR_CONV_MODE_RIGHT_ALIGN, BERRY_CAPACITY_DIGITS);
StringExpandPlaceholders(gStringVar4, gText_xVar1);
offset = GetStringRightAlignXOffset(7, gStringVar4, 119);
- BagMenu_Print(windowId, 7, gStringVar4, offset, y, 0, 0, -1, 0);
+ BagMenu_Print(windowId, 7, gStringVar4, offset, y, 0, 0, TEXT_SPEED_FF, COLORID_NORMAL);
}
- else if (gBagPositionStruct.pocket != KEYITEMS_POCKET && ItemId_GetImportance(itemId) == FALSE)
+ else if (gBagPosition.pocket != KEYITEMS_POCKET && ItemId_GetImportance(itemId) == FALSE)
{
+ // Print item quantity
ConvertIntToDecimalStringN(gStringVar1, itemQuantity, STR_CONV_MODE_RIGHT_ALIGN, BAG_ITEM_CAPACITY_DIGITS);
StringExpandPlaceholders(gStringVar4, gText_xVar1);
offset = GetStringRightAlignXOffset(7, gStringVar4, 119);
- BagMenu_Print(windowId, 7, gStringVar4, offset, y, 0, 0, -1, 0);
+ BagMenu_Print(windowId, 7, gStringVar4, offset, y, 0, 0, TEXT_SPEED_FF, COLORID_NORMAL);
}
else
{
+ // Print registered icon
if (gSaveBlock1Ptr->registeredItem && gSaveBlock1Ptr->registeredItem == itemId)
BlitBitmapToWindow(windowId, sRegisteredSelect_Gfx, 96, y - 1, 24, 16);
}
}
}
-void BagMenu_PrintDescription(int itemIndex)
+static void PrintItemDescription(int itemIndex)
{
const u8 *str;
if (itemIndex != LIST_CANCEL)
{
- str = ItemId_GetDescription(BagGetItemIdByPocketPosition(gBagPositionStruct.pocket + 1, itemIndex));
+ str = ItemId_GetDescription(BagGetItemIdByPocketPosition(gBagPosition.pocket + 1, itemIndex));
}
else
{
- StringCopy(gStringVar1, gBagMenu_ReturnToStrings[gBagPositionStruct.location]);
+ // Print 'Cancel' description
+ StringCopy(gStringVar1, gBagMenu_ReturnToStrings[gBagPosition.location]);
StringExpandPlaceholders(gStringVar4, gText_ReturnToVar1);
str = gStringVar4;
}
- FillWindowPixelBuffer(1, PIXEL_FILL(0));
- BagMenu_Print(1, 1, str, 3, 1, 0, 0, 0, 0);
+ FillWindowPixelBuffer(WIN_DESCRIPTION, PIXEL_FILL(0));
+ BagMenu_Print(WIN_DESCRIPTION, 1, str, 3, 1, 0, 0, 0, COLORID_NORMAL);
}
-void BagMenu_PrintCursor_(u8 listTaskId, u8 colorIndex)
+static void BagMenu_PrintCursor(u8 listTaskId, u8 colorIndex)
{
- BagMenu_PrintCursor(ListMenuGetYCoordForPrintingArrowCursor(listTaskId), colorIndex);
+ BagMenu_PrintCursorAtPos(ListMenuGetYCoordForPrintingArrowCursor(listTaskId), colorIndex);
}
-void BagMenu_PrintCursor(u8 y, u8 colorIndex)
+static void BagMenu_PrintCursorAtPos(u8 y, u8 colorIndex)
{
- if (colorIndex == 0xFF)
- FillWindowPixelRect(0, PIXEL_FILL(0), 0, y, GetMenuCursorDimensionByFont(1, 0), GetMenuCursorDimensionByFont(1, 1));
+ if (colorIndex == COLORID_NONE)
+ FillWindowPixelRect(WIN_ITEM_LIST, PIXEL_FILL(0), 0, y, GetMenuCursorDimensionByFont(1, 0), GetMenuCursorDimensionByFont(1, 1));
else
- BagMenu_Print(0, 1, gText_SelectorArrow2, 0, y, 0, 0, 0, colorIndex);
+ BagMenu_Print(WIN_ITEM_LIST, 1, gText_SelectorArrow2, 0, y, 0, 0, 0, colorIndex);
}
-void CreatePocketScrollArrowPair(void)
+static void CreatePocketScrollArrowPair(void)
{
if (gBagMenu->pocketScrollArrowsTask == TASK_NONE)
gBagMenu->pocketScrollArrowsTask = AddScrollIndicatorArrowPairParameterized(
@@ -976,10 +1033,10 @@ void CreatePocketScrollArrowPair(void)
172,
12,
148,
- gBagMenu->numItemStacks[gBagPositionStruct.pocket] - gBagMenu->numShownItems[gBagPositionStruct.pocket],
- 110,
- 110,
- &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket]);
+ gBagMenu->numItemStacks[gBagPosition.pocket] - gBagMenu->numShownItems[gBagPosition.pocket],
+ TAG_POCKET_SCROLL_ARROW,
+ TAG_POCKET_SCROLL_ARROW,
+ &gBagPosition.scrollPosition[gBagPosition.pocket]);
}
void BagDestroyPocketScrollArrowPair(void)
@@ -989,16 +1046,16 @@ void BagDestroyPocketScrollArrowPair(void)
RemoveScrollIndicatorArrowPair(gBagMenu->pocketScrollArrowsTask);
gBagMenu->pocketScrollArrowsTask = TASK_NONE;
}
- BagDestroyPocketSwitchArrowPair();
+ DestroyPocketSwitchArrowPair();
}
-void CreatePocketSwitchArrowPair(void)
+static void CreatePocketSwitchArrowPair(void)
{
if (gBagMenu->pocketSwitchDisabled != TRUE && gBagMenu->pocketSwitchArrowsTask == TASK_NONE)
- gBagMenu->pocketSwitchArrowsTask = AddScrollIndicatorArrowPair(&sBagScrollArrowsTemplate, &gBagPositionStruct.unk6);
+ gBagMenu->pocketSwitchArrowsTask = AddScrollIndicatorArrowPair(&sBagScrollArrowsTemplate, &gBagPosition.pocketSwitchArrowPos);
}
-void BagDestroyPocketSwitchArrowPair(void)
+static void DestroyPocketSwitchArrowPair(void)
{
if (gBagMenu->pocketSwitchArrowsTask != TASK_NONE)
{
@@ -1007,7 +1064,7 @@ void BagDestroyPocketSwitchArrowPair(void)
}
}
-void FreeBagItemListBuffers(void)
+static void FreeBagMenu(void)
{
Free(sListBuffer2);
Free(sListBuffer1);
@@ -1018,23 +1075,27 @@ void FreeBagItemListBuffers(void)
void Task_FadeAndCloseBagMenu(u8 taskId)
{
BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK);
- gTasks[taskId].func = TaskCloseBagMenu_2;
+ gTasks[taskId].func = Task_CloseBagMenu;
}
-void TaskCloseBagMenu_2(u8 taskId)
+static void Task_CloseBagMenu(u8 taskId)
{
s16* data = gTasks[taskId].data;
if (!gPaletteFade.active)
{
- DestroyListMenuTask(data[0], &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket], &gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]);
- if (gBagMenu->exitCallback != NULL)
- SetMainCallback2(gBagMenu->exitCallback);
+ DestroyListMenuTask(tListTaskId, &gBagPosition.scrollPosition[gBagPosition.pocket], &gBagPosition.cursorPosition[gBagPosition.pocket]);
+
+ // If ready for a new screen (e.g. party menu for giving an item) go to that screen
+ // Otherwise exit the bag and use callback set up when the bag was first opened
+ if (gBagMenu->newScreenCallback != NULL)
+ SetMainCallback2(gBagMenu->newScreenCallback);
else
- SetMainCallback2(gBagPositionStruct.bagCallback);
+ SetMainCallback2(gBagPosition.exitCallback);
+
BagDestroyPocketScrollArrowPair();
ResetSpriteData();
FreeAllSpritePalettes();
- FreeBagItemListBuffers();
+ FreeBagMenu();
DestroyTask(taskId);
}
}
@@ -1045,13 +1106,13 @@ void UpdatePocketItemList(u8 pocketId)
struct BagPocket *pocket = &gBagPockets[pocketId];
switch (pocketId)
{
- case TMHM_POCKET:
- case BERRIES_POCKET:
- SortBerriesOrTMHMs(pocket);
- break;
- default:
- CompactItemsInBagPocket(pocket);
- break;
+ case TMHM_POCKET:
+ case BERRIES_POCKET:
+ SortBerriesOrTMHMs(pocket);
+ break;
+ default:
+ CompactItemsInBagPocket(pocket);
+ break;
}
gBagMenu->numItemStacks[pocketId] = 0;
@@ -1062,160 +1123,161 @@ void UpdatePocketItemList(u8 pocketId)
if (!gBagMenu->hideCloseBagText)
gBagMenu->numItemStacks[pocketId]++;
- if (gBagMenu->numItemStacks[pocketId] > 8)
- gBagMenu->numShownItems[pocketId] = 8;
+ if (gBagMenu->numItemStacks[pocketId] > MAX_ITEMS_SHOWN)
+ gBagMenu->numShownItems[pocketId] = MAX_ITEMS_SHOWN;
else
gBagMenu->numShownItems[pocketId] = gBagMenu->numItemStacks[pocketId];
}
-void All_CalculateNItemsAndMaxShowed(void)
+static void UpdatePocketItemLists(void)
{
u8 i;
for (i = 0; i < POCKETS_COUNT; i++)
UpdatePocketItemList(i);
}
-void SetInitialScrollAndCursorPositions(u8 pocketId)
+void UpdatePocketListPosition(u8 pocketId)
{
- sub_812225C(&gBagPositionStruct.scrollPosition[pocketId], &gBagPositionStruct.cursorPosition[pocketId], gBagMenu->numShownItems[pocketId], gBagMenu->numItemStacks[pocketId]);
+ sub_812225C(&gBagPosition.scrollPosition[pocketId], &gBagPosition.cursorPosition[pocketId], gBagMenu->numShownItems[pocketId], gBagMenu->numItemStacks[pocketId]);
}
-static void SetPocketListPositions(void)
+static void InitPocketListPositions(void)
{
u8 i;
for (i = 0; i < POCKETS_COUNT; i++)
- SetInitialScrollAndCursorPositions(i);
+ UpdatePocketListPosition(i);
}
-void UpdatePocketScrollPositions(void)
+static void InitPocketScrollPositions(void)
{
u8 i;
for (i = 0; i < POCKETS_COUNT; i++)
- sub_8122298(&gBagPositionStruct.scrollPosition[i], &gBagPositionStruct.cursorPosition[i], gBagMenu->numShownItems[i], gBagMenu->numItemStacks[i], 8);
+ SetCursorScrollWithinListBounds(&gBagPosition.scrollPosition[i], &gBagPosition.cursorPosition[i], gBagMenu->numShownItems[i], gBagMenu->numItemStacks[i], MAX_ITEMS_SHOWN);
}
u8 GetItemListPosition(u8 pocketId)
{
- return gBagPositionStruct.scrollPosition[pocketId] + gBagPositionStruct.cursorPosition[pocketId];
+ return gBagPosition.scrollPosition[pocketId] + gBagPosition.cursorPosition[pocketId];
}
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);
+ tMsgWindowId = AddItemMessageWindow(ITEMWIN_MESSAGE);
+ FillWindowPixelBuffer(tMsgWindowId, PIXEL_FILL(1));
+ DisplayMessageAndContinueTask(taskId, tMsgWindowId, 10, 13, fontId, GetPlayerTextSpeedDelay(), str, callback);
ScheduleBgCopyTilemapToVram(1);
}
-void BagMenu_InitListsMenu(u8 taskId)
+void CloseItemMessage(u8 taskId)
{
s16* data = gTasks[taskId].data;
- u16* scrollPos = &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket];
- u16* cursorPos = &gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket];
- BagMenu_RemoveBagItemMessageWindow(4);
- DestroyListMenuTask(data[0], scrollPos, cursorPos);
- UpdatePocketItemList(gBagPositionStruct.pocket);
- SetInitialScrollAndCursorPositions(gBagPositionStruct.pocket);
- LoadBagItemListBuffers(gBagPositionStruct.pocket);
- data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
+ u16* scrollPos = &gBagPosition.scrollPosition[gBagPosition.pocket];
+ u16* cursorPos = &gBagPosition.cursorPosition[gBagPosition.pocket];
+ RemoveItemMessageWindow(ITEMWIN_MESSAGE);
+ DestroyListMenuTask(tListTaskId, scrollPos, cursorPos);
+ UpdatePocketItemList(gBagPosition.pocket);
+ UpdatePocketListPosition(gBagPosition.pocket);
+ LoadBagItemListBuffers(gBagPosition.pocket);
+ tListTaskId = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
ScheduleBgCopyTilemapToVram(0);
- set_callback3_to_bag(taskId);
+ ReturnToItemList(taskId);
}
-void sub_81ABC3C(u8 a)
+static void AddItemQuantityWindow(u8 windowType)
{
- PrintItemDepositAmount(BagMenu_AddWindow(a), 1);
+ PrintItemQuantity(BagMenu_AddWindow(windowType), 1);
}
-void PrintItemDepositAmount(u8 windowId, s16 numDeposited)
+static void PrintItemQuantity(u8 windowId, s16 quantity)
{
- u8 numDigits = (gBagPositionStruct.pocket == BERRIES_POCKET) ? BERRY_CAPACITY_DIGITS : BAG_ITEM_CAPACITY_DIGITS;
- ConvertIntToDecimalStringN(gStringVar1, numDeposited, STR_CONV_MODE_LEADING_ZEROS, numDigits);
+ u8 numDigits = (gBagPosition.pocket == BERRIES_POCKET) ? BERRY_CAPACITY_DIGITS : BAG_ITEM_CAPACITY_DIGITS;
+ ConvertIntToDecimalStringN(gStringVar1, quantity, STR_CONV_MODE_LEADING_ZEROS, numDigits);
StringExpandPlaceholders(gStringVar4, gText_xVar1);
AddTextPrinterParameterized(windowId, 1, gStringVar4, GetStringCenterAlignXOffset(1, gStringVar4, 0x28), 2, 0, 0);
}
-void PrintItemSoldAmount(int windowId, int numSold, int moneyEarned)
+// Prints the quantity of items to be sold and the amount that would be earned
+static void PrintItemSoldAmount(int windowId, int numSold, int moneyEarned)
{
- u8 numDigits = (gBagPositionStruct.pocket == BERRIES_POCKET) ? BERRY_CAPACITY_DIGITS : BAG_ITEM_CAPACITY_DIGITS;
+ u8 numDigits = (gBagPosition.pocket == BERRIES_POCKET) ? BERRY_CAPACITY_DIGITS : BAG_ITEM_CAPACITY_DIGITS;
ConvertIntToDecimalStringN(gStringVar1, numSold, STR_CONV_MODE_LEADING_ZEROS, numDigits);
StringExpandPlaceholders(gStringVar4, gText_xVar1);
- AddTextPrinterParameterized(windowId, 1, gStringVar4, 0, 1, -1, 0);
+ AddTextPrinterParameterized(windowId, 1, gStringVar4, 0, 1, TEXT_SPEED_FF, 0);
PrintMoneyAmount(windowId, 38, 1, moneyEarned, 0);
}
-void Task_BagMenu_HandleInput(u8 taskId)
+static void Task_BagMenu_HandleInput(u8 taskId)
{
s16* data = gTasks[taskId].data;
- u16* scrollPos = &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket];
- u16* cursorPos = &gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket];
+ u16* scrollPos = &gBagPosition.scrollPosition[gBagPosition.pocket];
+ u16* cursorPos = &gBagPosition.cursorPosition[gBagPosition.pocket];
s32 listPosition;
if (MenuHelpers_CallLinkSomething() != TRUE && !gPaletteFade.active)
{
switch (GetSwitchBagPocketDirection())
{
- case SWITCH_POCKET_LEFT:
- SwitchBagPocket(taskId, MENU_CURSOR_DELTA_LEFT, 0);
- return;
- case SWITCH_POCKET_RIGHT:
- SwitchBagPocket(taskId, MENU_CURSOR_DELTA_RIGHT, 0);
- return;
- default:
- if (JOY_NEW(SELECT_BUTTON))
+ case SWITCH_POCKET_LEFT:
+ SwitchBagPocket(taskId, MENU_CURSOR_DELTA_LEFT, FALSE);
+ return;
+ case SWITCH_POCKET_RIGHT:
+ SwitchBagPocket(taskId, MENU_CURSOR_DELTA_RIGHT, FALSE);
+ return;
+ default:
+ if (JOY_NEW(SELECT_BUTTON))
+ {
+ if (CanSwapItems() == TRUE)
{
- if (CanSwapItems() == TRUE)
+ ListMenuGetScrollAndRow(tListTaskId, scrollPos, cursorPos);
+ if ((*scrollPos + *cursorPos) != gBagMenu->numItemStacks[gBagPosition.pocket] - 1)
{
- ListMenuGetScrollAndRow(data[0], scrollPos, cursorPos);
- if ((*scrollPos + *cursorPos) != gBagMenu->numItemStacks[gBagPositionStruct.pocket] - 1)
- {
- PlaySE(SE_SELECT);
- BagMenu_SwapItems(taskId);
- }
+ PlaySE(SE_SELECT);
+ StartItemSwap(taskId);
}
- return;
}
- break;
+ return;
+ }
+ break;
}
- listPosition = ListMenu_ProcessInput(data[0]);
- ListMenuGetScrollAndRow(data[0], scrollPos, cursorPos);
+ listPosition = ListMenu_ProcessInput(tListTaskId);
+ ListMenuGetScrollAndRow(tListTaskId, scrollPos, cursorPos);
switch (listPosition)
{
- case LIST_NOTHING_CHOSEN:
- break;
- case LIST_CANCEL:
- if (gBagPositionStruct.location == ITEMMENULOCATION_BERRY_BLENDER_CRUSH)
- {
- PlaySE(SE_FAILURE);
- 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);
+ case LIST_NOTHING_CHOSEN:
+ break;
+ case LIST_CANCEL:
+ if (gBagPosition.location == ITEMMENULOCATION_BERRY_BLENDER_CRUSH)
+ {
+ PlaySE(SE_FAILURE);
break;
+ }
+ PlaySE(SE_SELECT);
+ gSpecialVar_ItemId = ITEM_NONE;
+ gTasks[taskId].func = Task_FadeAndCloseBagMenu;
+ break;
+ default: // A_BUTTON
+ PlaySE(SE_SELECT);
+ BagDestroyPocketScrollArrowPair();
+ BagMenu_PrintCursor(tListTaskId, COLORID_GRAY_CURSOR);
+ tListPosition = listPosition;
+ tQuantity = BagGetQuantityByPocketPosition(gBagPosition.pocket + 1, listPosition);
+ gSpecialVar_ItemId = BagGetItemIdByPocketPosition(gBagPosition.pocket + 1, listPosition);
+ sContextMenuFuncs[gBagPosition.location](taskId);
+ break;
}
}
}
-void set_callback3_to_bag(u8 taskId)
+static void ReturnToItemList(u8 taskId)
{
CreatePocketScrollArrowPair();
CreatePocketSwitchArrowPair();
- ClearWindowTilemap(3);
- ClearWindowTilemap(4);
- PutWindowTilemap(1);
+ ClearWindowTilemap(WIN_TMHM_INFO_ICONS);
+ ClearWindowTilemap(WIN_TMHM_INFO);
+ PutWindowTilemap(WIN_DESCRIPTION);
ScheduleBgCopyTilemapToVram(0);
gTasks[taskId].func = Task_BagMenu_HandleInput;
}
@@ -1226,12 +1288,12 @@ static u8 GetSwitchBagPocketDirection(void)
if (gBagMenu->pocketSwitchDisabled)
return SWITCH_POCKET_NONE;
LRKeys = GetLRKeysPressed();
- if ((JOY_NEW(DPAD_LEFT)) || LRKeys == MENU_L_PRESSED)
+ if (JOY_NEW(DPAD_LEFT) || LRKeys == MENU_L_PRESSED)
{
PlaySE(SE_SELECT);
return SWITCH_POCKET_LEFT;
}
- if ((JOY_NEW(DPAD_RIGHT)) || LRKeys == MENU_R_PRESSED)
+ if (JOY_NEW(DPAD_RIGHT) || LRKeys == MENU_R_PRESSED)
{
PlaySE(SE_SELECT);
return SWITCH_POCKET_RIGHT;
@@ -1241,54 +1303,54 @@ static u8 GetSwitchBagPocketDirection(void)
static void ChangeBagPocketId(u8 *bagPocketId, s8 deltaBagPocketId)
{
- if (deltaBagPocketId == 1 && *bagPocketId == POCKETS_COUNT - 1)
+ if (deltaBagPocketId == MENU_CURSOR_DELTA_RIGHT && *bagPocketId == POCKETS_COUNT - 1)
*bagPocketId = 0;
- else if (deltaBagPocketId == -1 && *bagPocketId == 0)
+ else if (deltaBagPocketId == MENU_CURSOR_DELTA_LEFT && *bagPocketId == 0)
*bagPocketId = POCKETS_COUNT - 1;
else
*bagPocketId += deltaBagPocketId;
}
-static void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, u16 a3)
+static void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, bool16 skipEraseList)
{
s16* data = gTasks[taskId].data;
- u8 pocketId;
+ u8 newPocket;
- data[13] = 0;
- data[12] = 0;
- data[11] = deltaBagPocketId;
- if (a3 == 0)
+ tPocketSwitchState = 0;
+ tPocketSwitchTimer = 0;
+ tPocketSwitchDir = deltaBagPocketId;
+ if (!skipEraseList)
{
- ClearWindowTilemap(0);
- ClearWindowTilemap(1);
- DestroyListMenuTask(data[0], &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket], &gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]);
+ ClearWindowTilemap(WIN_ITEM_LIST);
+ ClearWindowTilemap(WIN_DESCRIPTION);
+ DestroyListMenuTask(tListTaskId, &gBagPosition.scrollPosition[gBagPosition.pocket], &gBagPosition.cursorPosition[gBagPosition.pocket]);
ScheduleBgCopyTilemapToVram(0);
- gSprites[gBagMenu->spriteId[2 + (gBagMenu->itemIconSlot ^ 1)]].invisible = TRUE;
+ gSprites[gBagMenu->spriteIds[ITEMMENUSPRITE_ITEM + (gBagMenu->itemIconSlot ^ 1)]].invisible = TRUE;
BagDestroyPocketScrollArrowPair();
}
- pocketId = gBagPositionStruct.pocket;
- ChangeBagPocketId(&pocketId, deltaBagPocketId);
+ newPocket = gBagPosition.pocket;
+ ChangeBagPocketId(&newPocket, deltaBagPocketId);
if (deltaBagPocketId == MENU_CURSOR_DELTA_RIGHT)
{
- BagMenu_PrintPocketNames(gPocketNamesStringsTable[gBagPositionStruct.pocket], gPocketNamesStringsTable[pocketId]);
- BagMenu_CopyPocketNameToWindow(0);
+ PrintPocketNames(gPocketNamesStringsTable[gBagPosition.pocket], gPocketNamesStringsTable[newPocket]);
+ CopyPocketNameToWindow(0);
}
else
{
- BagMenu_PrintPocketNames(gPocketNamesStringsTable[pocketId], gPocketNamesStringsTable[gBagPositionStruct.pocket]);
- BagMenu_CopyPocketNameToWindow(8);
+ PrintPocketNames(gPocketNamesStringsTable[newPocket], gPocketNamesStringsTable[gBagPosition.pocket]);
+ CopyPocketNameToWindow(8);
}
- DrawPocketIndicatorSquare(gBagPositionStruct.pocket, FALSE);
- DrawPocketIndicatorSquare(pocketId, TRUE);
+ DrawPocketIndicatorSquare(gBagPosition.pocket, FALSE);
+ DrawPocketIndicatorSquare(newPocket, TRUE);
FillBgTilemapBufferRect_Palette0(2, 11, 14, 2, 15, 16);
ScheduleBgCopyTilemapToVram(2);
- SetBagVisualPocketId(pocketId, 1);
- RemoveBagSprite(1);
+ SetBagVisualPocketId(newPocket, 1);
+ RemoveBagSprite(ITEMMENUSPRITE_BALL);
AddSwitchPocketRotatingBallSprite(deltaBagPocketId);
- SetTaskFuncWithFollowupFunc(taskId, sub_81AC10C, gTasks[taskId].func);
+ SetTaskFuncWithFollowupFunc(taskId, Task_SwitchBagPocket, gTasks[taskId].func);
}
-void sub_81AC10C(u8 taskId)
+static void Task_SwitchBagPocket(u8 taskId)
{
s16* data = gTasks[taskId].data;
@@ -1296,48 +1358,50 @@ void sub_81AC10C(u8 taskId)
{
switch (GetSwitchBagPocketDirection())
{
- case SWITCH_POCKET_LEFT:
- ChangeBagPocketId(&gBagPositionStruct.pocket, data[11]);
- SwitchTaskToFollowupFunc(taskId);
- SwitchBagPocket(taskId, MENU_CURSOR_DELTA_LEFT, 1);
- return;
- case SWITCH_POCKET_RIGHT:
- ChangeBagPocketId(&gBagPositionStruct.pocket, data[11]);
- SwitchTaskToFollowupFunc(taskId);
- SwitchBagPocket(taskId, MENU_CURSOR_DELTA_RIGHT, 1);
- return;
+ case SWITCH_POCKET_LEFT:
+ ChangeBagPocketId(&gBagPosition.pocket, tPocketSwitchDir);
+ SwitchTaskToFollowupFunc(taskId);
+ SwitchBagPocket(taskId, MENU_CURSOR_DELTA_LEFT, TRUE);
+ return;
+ case SWITCH_POCKET_RIGHT:
+ ChangeBagPocketId(&gBagPosition.pocket, tPocketSwitchDir);
+ SwitchTaskToFollowupFunc(taskId);
+ SwitchBagPocket(taskId, MENU_CURSOR_DELTA_RIGHT, TRUE);
+ return;
}
}
- switch (data[13])
+ switch (tPocketSwitchState)
{
- case 0:
- sub_81AC23C(data[12]);
- if (!(++data[12] & 1))
- {
- if (data[11] == 1)
- BagMenu_CopyPocketNameToWindow((u8)(data[12] >> 1));
- else
- BagMenu_CopyPocketNameToWindow((u8)(8 - (data[12] >> 1)));
- }
- if (data[12] == 16)
- data[13]++;
- break;
- case 1:
- ChangeBagPocketId(&gBagPositionStruct.pocket, data[11]);
- LoadBagItemListBuffers(gBagPositionStruct.pocket);
- data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket], gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]);
- PutWindowTilemap(1);
- PutWindowTilemap(2);
- ScheduleBgCopyTilemapToVram(0);
- CreatePocketScrollArrowPair();
- CreatePocketSwitchArrowPair();
- SwitchTaskToFollowupFunc(taskId);
+ case 0:
+ DrawItemListBgRow(tPocketSwitchTimer);
+ if (!(++tPocketSwitchTimer & 1))
+ {
+ if (tPocketSwitchDir == MENU_CURSOR_DELTA_RIGHT)
+ CopyPocketNameToWindow((u8)(tPocketSwitchTimer >> 1));
+ else
+ CopyPocketNameToWindow((u8)(8 - (tPocketSwitchTimer >> 1)));
+ }
+ if (tPocketSwitchTimer == 16)
+ tPocketSwitchState++;
+ break;
+ case 1:
+ ChangeBagPocketId(&gBagPosition.pocket, tPocketSwitchDir);
+ LoadBagItemListBuffers(gBagPosition.pocket);
+ tListTaskId = ListMenuInit(&gMultiuseListMenuTemplate, gBagPosition.scrollPosition[gBagPosition.pocket], gBagPosition.cursorPosition[gBagPosition.pocket]);
+ PutWindowTilemap(WIN_DESCRIPTION);
+ PutWindowTilemap(WIN_POCKET_NAME);
+ ScheduleBgCopyTilemapToVram(0);
+ CreatePocketScrollArrowPair();
+ CreatePocketSwitchArrowPair();
+ SwitchTaskToFollowupFunc(taskId);
}
}
-void sub_81AC23C(u8 a)
+// The background of the item list is a lighter color than the surrounding menu
+// When the pocket is switched this lighter background is redrawn row by row
+static void DrawItemListBgRow(u8 y)
{
- FillBgTilemapBufferRect_Palette0(2, 17, 14, a + 2, 15, 1);
+ FillBgTilemapBufferRect_Palette0(2, 17, 14, y + 2, 15, 1);
ScheduleBgCopyTilemapToVram(2);
}
@@ -1352,299 +1416,308 @@ static void DrawPocketIndicatorSquare(u8 x, bool8 isCurrentPocket)
static bool8 CanSwapItems(void)
{
- if (gBagPositionStruct.location <= ITEMMENULOCATION_BATTLE)
+ // Swaps can only be done from the field or in battle (as opposed to while selling items, for example)
+ if (gBagPosition.location == ITEMMENULOCATION_FIELD
+ || gBagPosition.location == ITEMMENULOCATION_BATTLE)
{
- u8 temp = gBagPositionStruct.pocket - 2;
- if (temp > 1)
+ // TMHMs and berries are numbered, and so may not be swapped
+ if (gBagPosition.pocket != TMHM_POCKET
+ && gBagPosition.pocket != BERRIES_POCKET)
return TRUE;
}
return FALSE;
}
-void BagMenu_SwapItems(u8 taskId)
+static void StartItemSwap(u8 taskId)
{
s16* data = gTasks[taskId].data;
- ListMenuSetUnkIndicatorsStructField(data[0], 16, 1);
- data[1] = gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket] + gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket];
- gBagMenu->itemOriginalLocation = data[1];
- CopyItemName(BagGetItemIdByPocketPosition(gBagPositionStruct.pocket + 1, data[1]), gStringVar1);
+ ListMenuSetUnkIndicatorsStructField(tListTaskId, 16, 1);
+ tListPosition = gBagPosition.scrollPosition[gBagPosition.pocket] + gBagPosition.cursorPosition[gBagPosition.pocket];
+ gBagMenu->toSwapPos = tListPosition;
+ CopyItemName(BagGetItemIdByPocketPosition(gBagPosition.pocket + 1, tListPosition), gStringVar1);
StringExpandPlaceholders(gStringVar4, gText_MoveVar1Where);
- FillWindowPixelBuffer(1, PIXEL_FILL(0));
- BagMenu_Print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0);
- UpdateItemMenuSwapLinePos(data[1]);
- BagDestroyPocketSwitchArrowPair();
- BagMenu_PrintCursor_(data[0], 2);
+ FillWindowPixelBuffer(WIN_DESCRIPTION, PIXEL_FILL(0));
+ BagMenu_Print(WIN_DESCRIPTION, 1, gStringVar4, 3, 1, 0, 0, 0, COLORID_NORMAL);
+ UpdateItemMenuSwapLinePos(tListPosition);
+ DestroyPocketSwitchArrowPair();
+ BagMenu_PrintCursor(tListTaskId, COLORID_GRAY_CURSOR);
gTasks[taskId].func = Task_HandleSwappingItemsInput;
}
static void Task_HandleSwappingItemsInput(u8 taskId)
{
s16* data = gTasks[taskId].data;
- int input;
if (MenuHelpers_CallLinkSomething() != TRUE)
{
if (JOY_NEW(SELECT_BUTTON))
{
PlaySE(SE_SELECT);
- ListMenuGetScrollAndRow(data[0], &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket], &gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]);
- sub_81AC498(taskId);
+ ListMenuGetScrollAndRow(tListTaskId, &gBagPosition.scrollPosition[gBagPosition.pocket], &gBagPosition.cursorPosition[gBagPosition.pocket]);
+ DoItemSwap(taskId);
}
else
{
- input = ListMenu_ProcessInput(data[0]);
- ListMenuGetScrollAndRow(data[0], &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket], &gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]);
+ s32 input = ListMenu_ProcessInput(tListTaskId);
+ ListMenuGetScrollAndRow(tListTaskId, &gBagPosition.scrollPosition[gBagPosition.pocket], &gBagPosition.cursorPosition[gBagPosition.pocket]);
SetItemMenuSwapLineInvisibility(FALSE);
- UpdateItemMenuSwapLinePos(gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]);
+ UpdateItemMenuSwapLinePos(gBagPosition.cursorPosition[gBagPosition.pocket]);
switch (input)
{
- case LIST_NOTHING_CHOSEN:
- break;
- case LIST_CANCEL:
- PlaySE(SE_SELECT);
- if (JOY_NEW(A_BUTTON))
- sub_81AC498(taskId);
- else
- sub_81AC590(taskId);
- break;
- default:
- PlaySE(SE_SELECT);
- sub_81AC498(taskId);
+ case LIST_NOTHING_CHOSEN:
+ break;
+ case LIST_CANCEL:
+ PlaySE(SE_SELECT);
+ if (JOY_NEW(A_BUTTON))
+ DoItemSwap(taskId);
+ else
+ CancelItemSwap(taskId);
+ break;
+ default:
+ PlaySE(SE_SELECT);
+ DoItemSwap(taskId);
+ break;
}
}
}
}
-void sub_81AC498(u8 taskId)
+static void DoItemSwap(u8 taskId)
{
s16* data = gTasks[taskId].data;
- u16* scrollPos = &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket];
- u16* cursorPos = &gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket];
+ u16* scrollPos = &gBagPosition.scrollPosition[gBagPosition.pocket];
+ u16* cursorPos = &gBagPosition.cursorPosition[gBagPosition.pocket];
u16 realPos = (*scrollPos + *cursorPos);
- if (data[1] == realPos || data[1] == (realPos - 1))
- sub_81AC590(taskId);
+ if (tListPosition == realPos || tListPosition == realPos - 1)
+ {
+ // Position is the same as the original, cancel
+ CancelItemSwap(taskId);
+ }
else
{
- MoveItemSlotInList(gBagPockets[gBagPositionStruct.pocket].itemSlots, data[1], realPos);
- 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);
+ MoveItemSlotInList(gBagPockets[gBagPosition.pocket].itemSlots, tListPosition, realPos);
+ gBagMenu->toSwapPos = NOT_SWAPPING;
+ DestroyListMenuTask(tListTaskId, scrollPos, cursorPos);
+ if (tListPosition < realPos)
+ gBagPosition.cursorPosition[gBagPosition.pocket]--;
+ LoadBagItemListBuffers(gBagPosition.pocket);
+ tListTaskId = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
SetItemMenuSwapLineInvisibility(TRUE);
CreatePocketSwitchArrowPair();
gTasks[taskId].func = Task_BagMenu_HandleInput;
}
}
-void sub_81AC590(u8 taskId)
+static void CancelItemSwap(u8 taskId)
{
s16* data = gTasks[taskId].data;
- u16* scrollPos = &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket];
- u16* cursorPos = &gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket];
-
- 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);
+ u16* scrollPos = &gBagPosition.scrollPosition[gBagPosition.pocket];
+ u16* cursorPos = &gBagPosition.cursorPosition[gBagPosition.pocket];
+
+ gBagMenu->toSwapPos = NOT_SWAPPING;
+ DestroyListMenuTask(tListTaskId, scrollPos, cursorPos);
+ if (tListPosition < *scrollPos + *cursorPos)
+ gBagPosition.cursorPosition[gBagPosition.pocket]--;
+ LoadBagItemListBuffers(gBagPosition.pocket);
+ tListTaskId = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
SetItemMenuSwapLineInvisibility(TRUE);
CreatePocketSwitchArrowPair();
gTasks[taskId].func = Task_BagMenu_HandleInput;
}
-static void OpenContextMenu(u8 unused)
+static void OpenContextMenu(u8 taskId)
{
- switch (gBagPositionStruct.location)
+ switch (gBagPosition.location)
{
- case ITEMMENULOCATION_BATTLE:
- case ITEMMENULOCATION_WALLY:
- if (ItemId_GetBattleUsage(gSpecialVar_ItemId))
- {
- gBagMenu->contextMenuItemsPtr = sContextMenuItems_BattleUse;
- gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_BattleUse);
- }
- else
- {
- gBagMenu->contextMenuItemsPtr = sContextMenuItems_Cancel;
- gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_Cancel);
- }
- break;
- case ITEMMENULOCATION_BERRY_BLENDER_CRUSH:
- gBagMenu->contextMenuItemsPtr = sContextMenuItems_BerryBlenderCrush;
- gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_BerryBlenderCrush);
- break;
- case ITEMMENULOCATION_APPRENTICE:
- if (!ItemId_GetImportance(gSpecialVar_ItemId) && gSpecialVar_ItemId != ITEM_ENIGMA_BERRY)
- {
- gBagMenu->contextMenuItemsPtr = sContextMenuItems_Apprentice;
- gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_Apprentice);
- }
- else
- {
- gBagMenu->contextMenuItemsPtr = sContextMenuItems_Cancel;
- gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_Cancel);
- }
- break;
- case ITEMMENULOCATION_FAVOR_LADY:
- if (!ItemId_GetImportance(gSpecialVar_ItemId) && gSpecialVar_ItemId != ITEM_ENIGMA_BERRY)
- {
- gBagMenu->contextMenuItemsPtr = sContextMenuItems_FavorLady;
- gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_FavorLady);
- }
- else
+ case ITEMMENULOCATION_BATTLE:
+ case ITEMMENULOCATION_WALLY:
+ if (ItemId_GetBattleUsage(gSpecialVar_ItemId))
+ {
+ gBagMenu->contextMenuItemsPtr = sContextMenuItems_BattleUse;
+ gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_BattleUse);
+ }
+ else
+ {
+ gBagMenu->contextMenuItemsPtr = sContextMenuItems_Cancel;
+ gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_Cancel);
+ }
+ break;
+ case ITEMMENULOCATION_BERRY_BLENDER_CRUSH:
+ gBagMenu->contextMenuItemsPtr = sContextMenuItems_BerryBlenderCrush;
+ gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_BerryBlenderCrush);
+ break;
+ case ITEMMENULOCATION_APPRENTICE:
+ if (!ItemId_GetImportance(gSpecialVar_ItemId) && gSpecialVar_ItemId != ITEM_ENIGMA_BERRY)
+ {
+ gBagMenu->contextMenuItemsPtr = sContextMenuItems_Apprentice;
+ gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_Apprentice);
+ }
+ else
+ {
+ gBagMenu->contextMenuItemsPtr = sContextMenuItems_Cancel;
+ gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_Cancel);
+ }
+ break;
+ case ITEMMENULOCATION_FAVOR_LADY:
+ if (!ItemId_GetImportance(gSpecialVar_ItemId) && gSpecialVar_ItemId != ITEM_ENIGMA_BERRY)
+ {
+ gBagMenu->contextMenuItemsPtr = sContextMenuItems_FavorLady;
+ gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_FavorLady);
+ }
+ else
+ {
+ gBagMenu->contextMenuItemsPtr = sContextMenuItems_Cancel;
+ gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_Cancel);
+ }
+ break;
+ case ITEMMENULOCATION_QUIZ_LADY:
+ if (!ItemId_GetImportance(gSpecialVar_ItemId) && gSpecialVar_ItemId != ITEM_ENIGMA_BERRY)
+ {
+ gBagMenu->contextMenuItemsPtr = sContextMenuItems_QuizLady;
+ gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_QuizLady);
+ }
+ else
+ {
+ gBagMenu->contextMenuItemsPtr = sContextMenuItems_Cancel;
+ gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_Cancel);
+ }
+ break;
+ case ITEMMENULOCATION_PARTY:
+ case ITEMMENULOCATION_SHOP:
+ case ITEMMENULOCATION_BERRY_TREE:
+ case ITEMMENULOCATION_ITEMPC:
+ default:
+ if (MenuHelpers_LinkSomething() == TRUE || InUnionRoom() == TRUE)
+ {
+ if (gBagPosition.pocket == KEYITEMS_POCKET || !IsHoldingItemAllowed(gSpecialVar_ItemId))
{
gBagMenu->contextMenuItemsPtr = sContextMenuItems_Cancel;
gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_Cancel);
}
- break;
- case ITEMMENULOCATION_QUIZ_LADY:
- if (!ItemId_GetImportance(gSpecialVar_ItemId) && gSpecialVar_ItemId != ITEM_ENIGMA_BERRY)
- {
- gBagMenu->contextMenuItemsPtr = sContextMenuItems_QuizLady;
- gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_QuizLady);
- }
else
{
- gBagMenu->contextMenuItemsPtr = sContextMenuItems_Cancel;
- gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_Cancel);
- }
- break;
- case ITEMMENULOCATION_PARTY:
- case ITEMMENULOCATION_SHOP:
- case ITEMMENULOCATION_BERRY_TREE:
- case ITEMMENULOCATION_ITEMPC:
- default:
- if (MenuHelpers_LinkSomething() == TRUE || InUnionRoom() == TRUE)
- {
- if (gBagPositionStruct.pocket == KEYITEMS_POCKET || !sub_8122148(gSpecialVar_ItemId))
- {
- gBagMenu->contextMenuItemsPtr = sContextMenuItems_Cancel;
- gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_Cancel);
- }
- else
- {
- gBagMenu->contextMenuItemsPtr = sContextMenuItems_Give;
- gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_Give);
- }
+ gBagMenu->contextMenuItemsPtr = sContextMenuItems_Give;
+ gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_Give);
}
- else
+ }
+ else
+ {
+ switch (gBagPosition.pocket)
{
- switch (gBagPositionStruct.pocket)
+ case ITEMS_POCKET:
+ gBagMenu->contextMenuItemsPtr = gBagMenu->contextMenuItemsBuffer;
+ gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_ItemsPocket);
+ memcpy(&gBagMenu->contextMenuItemsBuffer, &sContextMenuItems_ItemsPocket, sizeof(sContextMenuItems_ItemsPocket));
+ if (ItemIsMail(gSpecialVar_ItemId) == TRUE)
+ gBagMenu->contextMenuItemsBuffer[0] = ACTION_CHECK;
+ break;
+ case KEYITEMS_POCKET:
+ gBagMenu->contextMenuItemsPtr = gBagMenu->contextMenuItemsBuffer;
+ gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_KeyItemsPocket);
+ memcpy(&gBagMenu->contextMenuItemsBuffer, &sContextMenuItems_KeyItemsPocket, sizeof(sContextMenuItems_KeyItemsPocket));
+ if (gSaveBlock1Ptr->registeredItem == gSpecialVar_ItemId)
+ gBagMenu->contextMenuItemsBuffer[1] = ACTION_DESELECT;
+ if (gSpecialVar_ItemId == ITEM_MACH_BIKE || gSpecialVar_ItemId == ITEM_ACRO_BIKE)
{
- case ITEMS_POCKET:
- gBagMenu->contextMenuItemsPtr = gBagMenu->contextMenuItemsBuffer;
- gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_ItemsPocket);
- memcpy(&gBagMenu->contextMenuItemsBuffer, &sContextMenuItems_ItemsPocket, sizeof(sContextMenuItems_ItemsPocket));
- if (ItemIsMail(gSpecialVar_ItemId) == TRUE)
- gBagMenu->contextMenuItemsBuffer[0] = ITEMMENUACTION_CHECK;
- break;
- case KEYITEMS_POCKET:
- gBagMenu->contextMenuItemsPtr = gBagMenu->contextMenuItemsBuffer;
- gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_KeyItemsPocket);
- memcpy(&gBagMenu->contextMenuItemsBuffer, &sContextMenuItems_KeyItemsPocket, sizeof(sContextMenuItems_KeyItemsPocket));
- if (gSaveBlock1Ptr->registeredItem == gSpecialVar_ItemId)
- gBagMenu->contextMenuItemsBuffer[1] = ITEMMENUACTION_DESELECT;
- if (gSpecialVar_ItemId == ITEM_MACH_BIKE || gSpecialVar_ItemId == ITEM_ACRO_BIKE)
- {
- if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE))
- gBagMenu->contextMenuItemsBuffer[0] = ITEMMENUACTION_WALK;
- }
- break;
- case BALLS_POCKET:
- gBagMenu->contextMenuItemsPtr = sContextMenuItems_BallsPocket;
- gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_BallsPocket);
- break;
- case TMHM_POCKET:
- gBagMenu->contextMenuItemsPtr = sContextMenuItems_TmHmPocket;
- gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_TmHmPocket);
- break;
- case BERRIES_POCKET:
- gBagMenu->contextMenuItemsPtr = sContextMenuItems_BerriesPocket;
- gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_BerriesPocket);
- break;
+ if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE))
+ gBagMenu->contextMenuItemsBuffer[0] = ACTION_WALK;
}
+ break;
+ case BALLS_POCKET:
+ gBagMenu->contextMenuItemsPtr = sContextMenuItems_BallsPocket;
+ gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_BallsPocket);
+ break;
+ case TMHM_POCKET:
+ gBagMenu->contextMenuItemsPtr = sContextMenuItems_TmHmPocket;
+ gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_TmHmPocket);
+ break;
+ case BERRIES_POCKET:
+ gBagMenu->contextMenuItemsPtr = sContextMenuItems_BerriesPocket;
+ gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_BerriesPocket);
+ break;
}
+ }
}
- if (gBagPositionStruct.pocket == TMHM_POCKET)
+ if (gBagPosition.pocket == TMHM_POCKET)
{
- ClearWindowTilemap(1);
+ ClearWindowTilemap(WIN_DESCRIPTION);
PrintTMHMMoveData(gSpecialVar_ItemId);
- PutWindowTilemap(3);
- PutWindowTilemap(4);
+ PutWindowTilemap(WIN_TMHM_INFO_ICONS);
+ PutWindowTilemap(WIN_TMHM_INFO);
ScheduleBgCopyTilemapToVram(0);
}
else
{
CopyItemName(gSpecialVar_ItemId, gStringVar1);
StringExpandPlaceholders(gStringVar4, gText_Var1IsSelected);
- FillWindowPixelBuffer(1, PIXEL_FILL(0));
- BagMenu_Print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0);
+ FillWindowPixelBuffer(WIN_DESCRIPTION, PIXEL_FILL(0));
+ BagMenu_Print(WIN_DESCRIPTION, 1, gStringVar4, 3, 1, 0, 0, 0, COLORID_NORMAL);
}
if (gBagMenu->contextMenuNumItems == 1)
- sub_81ACAF8(BagMenu_AddWindow(0));
+ PrintContextMenuItems(BagMenu_AddWindow(ITEMWIN_1x1));
else if (gBagMenu->contextMenuNumItems == 2)
- sub_81ACAF8(BagMenu_AddWindow(1));
+ PrintContextMenuItems(BagMenu_AddWindow(ITEMWIN_1x2));
else if (gBagMenu->contextMenuNumItems == 4)
- sub_81ACB54(BagMenu_AddWindow(2), 2, 2);
+ PrintContextMenuItemGrid(BagMenu_AddWindow(ITEMWIN_2x2), 2, 2);
else
- sub_81ACB54(BagMenu_AddWindow(3), 2, 3);
+ PrintContextMenuItemGrid(BagMenu_AddWindow(ITEMWIN_2x3), 2, 3);
}
-void sub_81ACAF8(u8 a)
+static void PrintContextMenuItems(u8 windowId)
{
- AddItemMenuActionTextPrinters(a, 7, 8, 1, 0, 16, gBagMenu->contextMenuNumItems, sItemMenuActions, gBagMenu->contextMenuItemsPtr);
- InitMenuInUpperLeftCornerPlaySoundWhenAPressed(a, gBagMenu->contextMenuNumItems, 0);
+ AddItemMenuActionTextPrinters(windowId, 7, 8, 1, 0, 16, gBagMenu->contextMenuNumItems, sItemMenuActions, gBagMenu->contextMenuItemsPtr);
+ InitMenuInUpperLeftCornerPlaySoundWhenAPressed(windowId, gBagMenu->contextMenuNumItems, 0);
}
-void sub_81ACB54(u8 a, u8 b, u8 c)
+static void PrintContextMenuItemGrid(u8 windowId, u8 columns, u8 rows)
{
- PrintMenuActionGrid(a, 7, 8, 1, 0x38, b, c, sItemMenuActions, gBagMenu->contextMenuItemsPtr);
- InitMenuActionGrid(a, 0x38, b, c, 0);
+ PrintMenuActionGrid(windowId, 7, 8, 1, 56, columns, rows, sItemMenuActions, gBagMenu->contextMenuItemsPtr);
+ InitMenuActionGrid(windowId, 56, columns, rows, 0);
}
-void Task_ItemContext_FieldOrBattle(u8 taskId)
+static void Task_ItemContext_Normal(u8 taskId)
{
OpenContextMenu(taskId);
+
+ // Context menu width is never greater than 2 columns, so if
+ // there are more than 2 items then there are multiple rows
if (gBagMenu->contextMenuNumItems <= 2)
- gTasks[taskId].func = Task_HandleInBattleItemMenuInput;
+ gTasks[taskId].func = Task_ItemContext_SingleRow;
else
- gTasks[taskId].func = Task_HandleOutOfBattleItemMenuInput;
+ gTasks[taskId].func = Task_ItemContext_MultipleRows;
}
-void Task_HandleInBattleItemMenuInput(u8 taskId)
+static void Task_ItemContext_SingleRow(u8 taskId)
{
if (MenuHelpers_CallLinkSomething() != TRUE)
{
s8 selection = Menu_ProcessInputNoWrap();
switch (selection)
{
- case MENU_NOTHING_CHOSEN:
- break;
- case MENU_B_PRESSED:
- PlaySE(SE_SELECT);
- sItemMenuActions[ITEMMENUACTION_CANCEL].func.void_u8(taskId);
- break;
- default:
- PlaySE(SE_SELECT);
- sItemMenuActions[gBagMenu->contextMenuItemsPtr[selection]].func.void_u8(taskId);
- break;
+ case MENU_NOTHING_CHOSEN:
+ break;
+ case MENU_B_PRESSED:
+ PlaySE(SE_SELECT);
+ sItemMenuActions[ACTION_CANCEL].func.void_u8(taskId);
+ break;
+ default:
+ PlaySE(SE_SELECT);
+ sItemMenuActions[gBagMenu->contextMenuItemsPtr[selection]].func.void_u8(taskId);
+ break;
}
}
}
-void Task_HandleOutOfBattleItemMenuInput(u8 taskId)
+static void Task_ItemContext_MultipleRows(u8 taskId)
{
if (MenuHelpers_CallLinkSomething() != TRUE)
{
s8 cursorPos = Menu_GetCursorPos();
if (JOY_NEW(DPAD_UP))
{
- if (cursorPos > 0 && sub_81ACDFC(cursorPos - 2))
+ if (cursorPos > 0 && IsValidContextMenuPos(cursorPos - 2))
{
PlaySE(SE_SELECT);
ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_UP);
@@ -1652,23 +1725,23 @@ void Task_HandleOutOfBattleItemMenuInput(u8 taskId)
}
else if (JOY_NEW(DPAD_DOWN))
{
- if (cursorPos < (gBagMenu->contextMenuNumItems - 2) && sub_81ACDFC(cursorPos + 2))
+ if (cursorPos < (gBagMenu->contextMenuNumItems - 2) && IsValidContextMenuPos(cursorPos + 2))
{
PlaySE(SE_SELECT);
ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_DOWN);
}
}
- else if ((JOY_NEW(DPAD_LEFT)) || GetLRKeysPressed() == MENU_L_PRESSED)
+ else if (JOY_NEW(DPAD_LEFT) || GetLRKeysPressed() == MENU_L_PRESSED)
{
- if ((cursorPos & 1) && sub_81ACDFC(cursorPos - 1))
+ if ((cursorPos & 1) && IsValidContextMenuPos(cursorPos - 1))
{
PlaySE(SE_SELECT);
ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_LEFT, MENU_CURSOR_DELTA_NONE);
}
}
- else if ((JOY_NEW(DPAD_RIGHT)) || GetLRKeysPressed() == MENU_R_PRESSED)
+ else if (JOY_NEW(DPAD_RIGHT) || GetLRKeysPressed() == MENU_R_PRESSED)
{
- if (!(cursorPos & 1) && sub_81ACDFC(cursorPos + 1))
+ if (!(cursorPos & 1) && IsValidContextMenuPos(cursorPos + 1))
{
PlaySE(SE_SELECT);
ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_RIGHT, MENU_CURSOR_DELTA_NONE);
@@ -1682,50 +1755,48 @@ void Task_HandleOutOfBattleItemMenuInput(u8 taskId)
else if (JOY_NEW(B_BUTTON))
{
PlaySE(SE_SELECT);
- sItemMenuActions[ITEMMENUACTION_CANCEL].func.void_u8(taskId);
+ sItemMenuActions[ACTION_CANCEL].func.void_u8(taskId);
}
}
}
-bool8 sub_81ACDFC(s8 a)
+static bool8 IsValidContextMenuPos(s8 cursorPos)
{
- if (a < 0)
+ if (cursorPos < 0)
return FALSE;
- if (a > gBagMenu->contextMenuNumItems)
+ if (cursorPos > gBagMenu->contextMenuNumItems)
return FALSE;
- if (gBagMenu->contextMenuItemsPtr[a] == 14)
+ if (gBagMenu->contextMenuItemsPtr[cursorPos] == ACTION_DUMMY)
return FALSE;
return TRUE;
}
-void BagMenu_RemoveSomeWindow(void)
+static void RemoveContextWindow(void)
{
if (gBagMenu->contextMenuNumItems == 1)
- BagMenu_RemoveWindow(0);
+ BagMenu_RemoveWindow(ITEMWIN_1x1);
else if (gBagMenu->contextMenuNumItems == 2)
- {
- BagMenu_RemoveWindow(1);
- }
+ BagMenu_RemoveWindow(ITEMWIN_1x2);
else if (gBagMenu->contextMenuNumItems == 4)
- {
- BagMenu_RemoveWindow(2);
- }
+ BagMenu_RemoveWindow(ITEMWIN_2x2);
else
- BagMenu_RemoveWindow(3);
+ BagMenu_RemoveWindow(ITEMWIN_2x3);
}
-void ItemMenu_UseOutOfBattle(u8 taskId)
+static void ItemMenu_UseOutOfBattle(u8 taskId)
{
if (ItemId_GetFieldFunc(gSpecialVar_ItemId))
{
- BagMenu_RemoveSomeWindow();
+ RemoveContextWindow();
if (CalculatePlayerPartyCount() == 0 && ItemId_GetType(gSpecialVar_ItemId) == ITEM_USE_PARTY_MENU)
- BagMenu_PrintThereIsNoPokemon(taskId);
+ {
+ PrintThereIsNoPokemon(taskId);
+ }
else
{
- FillWindowPixelBuffer(1, PIXEL_FILL(0));
+ FillWindowPixelBuffer(WIN_DESCRIPTION, PIXEL_FILL(0));
ScheduleBgCopyTilemapToVram(0);
- if (gBagPositionStruct.pocket != BERRIES_POCKET)
+ if (gBagPosition.pocket != BERRIES_POCKET)
ItemId_GetFieldFunc(gSpecialVar_ItemId)(taskId);
else
ItemUseOutOfBattle_Berry(taskId);
@@ -1733,186 +1804,190 @@ void ItemMenu_UseOutOfBattle(u8 taskId)
}
}
-void ItemMenu_Toss(u8 taskId)
+static void ItemMenu_Toss(u8 taskId)
{
s16* data = gTasks[taskId].data;
- BagMenu_RemoveSomeWindow();
+ RemoveContextWindow();
tItemCount = 1;
- if (data[2] == 1)
+ if (tQuantity == 1)
{
- BagMenu_TossItems(taskId);
+ AskTossItems(taskId);
}
else
{
CopyItemName(gSpecialVar_ItemId, gStringVar1);
StringExpandPlaceholders(gStringVar4, gText_TossHowManyVar1s);
- FillWindowPixelBuffer(1, PIXEL_FILL(0));
- BagMenu_Print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0);
- sub_81ABC3C(7);
+ FillWindowPixelBuffer(WIN_DESCRIPTION, PIXEL_FILL(0));
+ BagMenu_Print(WIN_DESCRIPTION, 1, gStringVar4, 3, 1, 0, 0, 0, COLORID_NORMAL);
+ AddItemQuantityWindow(ITEMWIN_QUANTITY);
gTasks[taskId].func = Task_ChooseHowManyToToss;
}
}
-void BagMenu_TossItems(u8 taskId)
+static void AskTossItems(u8 taskId)
{
s16* data = gTasks[taskId].data;
CopyItemName(gSpecialVar_ItemId, gStringVar1);
ConvertIntToDecimalStringN(gStringVar2, tItemCount, STR_CONV_MODE_LEFT_ALIGN, MAX_ITEM_DIGITS);
StringExpandPlaceholders(gStringVar4, gText_ConfirmTossItems);
- FillWindowPixelBuffer(1, PIXEL_FILL(0));
- BagMenu_Print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0);
- BagMenu_YesNo(taskId, 5, &sYesNoTossFunctions);
+ FillWindowPixelBuffer(WIN_DESCRIPTION, PIXEL_FILL(0));
+ BagMenu_Print(WIN_DESCRIPTION, 1, gStringVar4, 3, 1, 0, 0, 0, COLORID_NORMAL);
+ BagMenu_YesNo(taskId, ITEMWIN_YESNO_LOW, &sYesNoTossFunctions);
}
-void BagMenu_CancelToss(u8 taskId)
+static void CancelToss(u8 taskId)
{
s16* data = gTasks[taskId].data;
- BagMenu_PrintDescription(data[1]);
- BagMenu_PrintCursor_(data[0], 0);
- set_callback3_to_bag(taskId);
+ PrintItemDescription(tListPosition);
+ BagMenu_PrintCursor(tListTaskId, COLORID_NORMAL);
+ ReturnToItemList(taskId);
}
-void Task_ChooseHowManyToToss(u8 taskId)
+static void Task_ChooseHowManyToToss(u8 taskId)
{
s16* data = gTasks[taskId].data;
- if (AdjustQuantityAccordingToDPadInput(&tItemCount, data[2]) == TRUE)
+ if (AdjustQuantityAccordingToDPadInput(&tItemCount, tQuantity) == TRUE)
{
- PrintItemDepositAmount(gBagMenu->windowPointers[7], tItemCount);
+ PrintItemQuantity(gBagMenu->windowIds[ITEMWIN_QUANTITY], tItemCount);
}
else if (JOY_NEW(A_BUTTON))
{
PlaySE(SE_SELECT);
- BagMenu_RemoveWindow(7);
- BagMenu_TossItems(taskId);
+ BagMenu_RemoveWindow(ITEMWIN_QUANTITY);
+ AskTossItems(taskId);
}
else if (JOY_NEW(B_BUTTON))
{
PlaySE(SE_SELECT);
- BagMenu_RemoveWindow(7);
- BagMenu_CancelToss(taskId);
+ BagMenu_RemoveWindow(ITEMWIN_QUANTITY);
+ CancelToss(taskId);
}
}
-void BagMenu_ConfirmToss(u8 taskId)
+static void ConfirmToss(u8 taskId)
{
s16* data = gTasks[taskId].data;
CopyItemName(gSpecialVar_ItemId, gStringVar1);
ConvertIntToDecimalStringN(gStringVar2, tItemCount, STR_CONV_MODE_LEFT_ALIGN, MAX_ITEM_DIGITS);
StringExpandPlaceholders(gStringVar4, gText_ThrewAwayVar2Var1s);
- FillWindowPixelBuffer(1, PIXEL_FILL(0));
- BagMenu_Print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0);
- gTasks[taskId].func = Task_ActuallyToss;
+ FillWindowPixelBuffer(WIN_DESCRIPTION, PIXEL_FILL(0));
+ BagMenu_Print(WIN_DESCRIPTION, 1, gStringVar4, 3, 1, 0, 0, 0, COLORID_NORMAL);
+ gTasks[taskId].func = Task_RemoveItemFromBag;
}
-void Task_ActuallyToss(u8 taskId)
+// Remove selected item(s) from the bag and update list
+// For when items are tossed or deposited
+static void Task_RemoveItemFromBag(u8 taskId)
{
s16* data = gTasks[taskId].data;
- u16* scrollPos = &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket];
- u16* cursorPos = &gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket];
+ u16* scrollPos = &gBagPosition.scrollPosition[gBagPosition.pocket];
+ u16* cursorPos = &gBagPosition.cursorPosition[gBagPosition.pocket];
if (JOY_NEW(A_BUTTON | B_BUTTON))
{
PlaySE(SE_SELECT);
RemoveBagItem(gSpecialVar_ItemId, tItemCount);
- DestroyListMenuTask(data[0], scrollPos, cursorPos);
- UpdatePocketItemList(gBagPositionStruct.pocket);
- SetInitialScrollAndCursorPositions(gBagPositionStruct.pocket);
- LoadBagItemListBuffers(gBagPositionStruct.pocket);
- data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
+ DestroyListMenuTask(tListTaskId, scrollPos, cursorPos);
+ UpdatePocketItemList(gBagPosition.pocket);
+ UpdatePocketListPosition(gBagPosition.pocket);
+ LoadBagItemListBuffers(gBagPosition.pocket);
+ tListTaskId = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
ScheduleBgCopyTilemapToVram(0);
- set_callback3_to_bag(taskId);
+ ReturnToItemList(taskId);
}
}
-void ItemMenu_Register(u8 taskId)
+static void ItemMenu_Register(u8 taskId)
{
s16* data = gTasks[taskId].data;
- u16* scrollPos = &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket];
- u16* cursorPos = &gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket];
+ u16* scrollPos = &gBagPosition.scrollPosition[gBagPosition.pocket];
+ u16* cursorPos = &gBagPosition.cursorPosition[gBagPosition.pocket];
if (gSaveBlock1Ptr->registeredItem == gSpecialVar_ItemId)
gSaveBlock1Ptr->registeredItem = 0;
else
gSaveBlock1Ptr->registeredItem = gSpecialVar_ItemId;
- DestroyListMenuTask(data[0], scrollPos, cursorPos);
- LoadBagItemListBuffers(gBagPositionStruct.pocket);
- data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
+ DestroyListMenuTask(tListTaskId, scrollPos, cursorPos);
+ LoadBagItemListBuffers(gBagPosition.pocket);
+ tListTaskId = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
ScheduleBgCopyTilemapToVram(0);
ItemMenu_Cancel(taskId);
}
-void ItemMenu_Give(u8 taskId)
+static void ItemMenu_Give(u8 taskId)
{
- BagMenu_RemoveSomeWindow();
+ RemoveContextWindow();
if (!IsWritingMailAllowed(gSpecialVar_ItemId))
{
- DisplayItemMessage(taskId, 1, gText_CantWriteMail, sub_81AD350);
+ DisplayItemMessage(taskId, 1, gText_CantWriteMail, HandleErrorMessage);
}
else if (!ItemId_GetImportance(gSpecialVar_ItemId))
{
if (CalculatePlayerPartyCount() == 0)
- BagMenu_PrintThereIsNoPokemon(taskId);
+ {
+ PrintThereIsNoPokemon(taskId);
+ }
else
{
- gBagMenu->exitCallback = CB2_ChooseMonToGiveItem;
+ gBagMenu->newScreenCallback = CB2_ChooseMonToGiveItem;
Task_FadeAndCloseBagMenu(taskId);
}
}
else
{
- BagMenu_PrintItemCantBeHeld(taskId);
+ PrintItemCantBeHeld(taskId);
}
}
-void BagMenu_PrintThereIsNoPokemon(u8 taskId)
+static void PrintThereIsNoPokemon(u8 taskId)
{
- DisplayItemMessage(taskId, 1, gText_NoPokemon, sub_81AD350);
+ DisplayItemMessage(taskId, 1, gText_NoPokemon, HandleErrorMessage);
}
-static void BagMenu_PrintItemCantBeHeld(u8 taskId)
+static void PrintItemCantBeHeld(u8 taskId)
{
CopyItemName(gSpecialVar_ItemId, gStringVar1);
StringExpandPlaceholders(gStringVar4, gText_Var1CantBeHeld);
- DisplayItemMessage(taskId, 1, gStringVar4, sub_81AD350);
+ DisplayItemMessage(taskId, 1, gStringVar4, HandleErrorMessage);
}
-void sub_81AD350(u8 taskId)
+static void HandleErrorMessage(u8 taskId)
{
if (JOY_NEW(A_BUTTON))
{
PlaySE(SE_SELECT);
- BagMenu_InitListsMenu(taskId);
+ CloseItemMessage(taskId);
}
}
-void ItemMenu_CheckTag(u8 taskId)
+static void ItemMenu_CheckTag(u8 taskId)
{
- gBagMenu->exitCallback = DoBerryTagScreen;
+ gBagMenu->newScreenCallback = DoBerryTagScreen;
Task_FadeAndCloseBagMenu(taskId);
}
-void ItemMenu_Cancel(u8 taskId)
+static void ItemMenu_Cancel(u8 taskId)
{
s16* data = gTasks[taskId].data;
- BagMenu_RemoveSomeWindow();
- BagMenu_PrintDescription(data[1]);
+ RemoveContextWindow();
+ PrintItemDescription(tListPosition);
ScheduleBgCopyTilemapToVram(0);
ScheduleBgCopyTilemapToVram(1);
- BagMenu_PrintCursor_(data[0], 0);
- set_callback3_to_bag(taskId);
+ BagMenu_PrintCursor(tListTaskId, COLORID_NORMAL);
+ ReturnToItemList(taskId);
}
-void ItemMenu_UseInBattle(u8 taskId)
+static void ItemMenu_UseInBattle(u8 taskId)
{
if (ItemId_GetBattleFunc(gSpecialVar_ItemId))
{
- BagMenu_RemoveSomeWindow();
+ RemoveContextWindow();
ItemId_GetBattleFunc(gSpecialVar_ItemId)(taskId);
}
}
@@ -1922,39 +1997,40 @@ void CB2_ReturnToBagMenuPocket(void)
GoToBagMenu(ITEMMENULOCATION_LAST, POCKETS_COUNT, NULL);
}
-void Task_ItemContext_FieldGive(u8 taskId)
+static void Task_ItemContext_GiveToParty(u8 taskId)
{
if (!IsWritingMailAllowed(gSpecialVar_ItemId))
{
- DisplayItemMessage(taskId, 1, gText_CantWriteMail, sub_81AD350);
+ DisplayItemMessage(taskId, 1, gText_CantWriteMail, HandleErrorMessage);
}
- else if (!sub_8122148(gSpecialVar_ItemId))
+ else if (!IsHoldingItemAllowed(gSpecialVar_ItemId))
{
CopyItemName(gSpecialVar_ItemId, gStringVar1);
StringExpandPlaceholders(gStringVar4, gText_Var1CantBeHeldHere);
- DisplayItemMessage(taskId, 1, gStringVar4, sub_81AD350);
+ DisplayItemMessage(taskId, 1, gStringVar4, HandleErrorMessage);
}
- else if (gBagPositionStruct.pocket != KEYITEMS_POCKET && !ItemId_GetImportance(gSpecialVar_ItemId))
+ else if (gBagPosition.pocket != KEYITEMS_POCKET && !ItemId_GetImportance(gSpecialVar_ItemId))
{
Task_FadeAndCloseBagMenu(taskId);
}
else
{
- BagMenu_PrintItemCantBeHeld(taskId);
+ PrintItemCantBeHeld(taskId);
}
}
-void Task_ItemContext_ItemPC_2(u8 taskId)
+// Selected item to give to a Pokémon in PC storage
+static void Task_ItemContext_GiveToPC(u8 taskId)
{
if (ItemIsMail(gSpecialVar_ItemId) == TRUE)
- DisplayItemMessage(taskId, 1, gText_CantWriteMail, sub_81AD350);
- else if (gBagPositionStruct.pocket != KEYITEMS_POCKET && !ItemId_GetImportance(gSpecialVar_ItemId))
+ DisplayItemMessage(taskId, 1, gText_CantWriteMail, HandleErrorMessage);
+ else if (gBagPosition.pocket != KEYITEMS_POCKET && !ItemId_GetImportance(gSpecialVar_ItemId))
gTasks[taskId].func = Task_FadeAndCloseBagMenu;
else
- BagMenu_PrintItemCantBeHeld(taskId);
+ PrintItemCantBeHeld(taskId);
}
-#define tUsingRegisteredKeyItem data[3]
+#define tUsingRegisteredKeyItem data[3] // See usage in item_use.c
bool8 UseRegisteredKeyItemOnField(void)
{
@@ -1988,7 +2064,7 @@ bool8 UseRegisteredKeyItemOnField(void)
#undef tUsingRegisteredKeyItem
-void Task_ItemContext_Sell(u8 taskId)
+static void Task_ItemContext_Sell(u8 taskId)
{
s16* data = gTasks[taskId].data;
@@ -1996,12 +2072,12 @@ void Task_ItemContext_Sell(u8 taskId)
{
CopyItemName(gSpecialVar_ItemId, gStringVar2);
StringExpandPlaceholders(gStringVar4, gText_CantBuyKeyItem);
- DisplayItemMessage(taskId, 1, gStringVar4, BagMenu_InitListsMenu);
+ DisplayItemMessage(taskId, 1, gStringVar4, CloseItemMessage);
}
else
{
tItemCount = 1;
- if (data[2] == 1)
+ if (tQuantity == 1)
{
DisplayCurrentMoneyWindow();
DisplaySellItemPriceAndConfirm(taskId);
@@ -2010,7 +2086,7 @@ void Task_ItemContext_Sell(u8 taskId)
{
CopyItemName(gSpecialVar_ItemId, gStringVar2);
StringExpandPlaceholders(gStringVar4, gText_HowManyToSell);
- DisplayItemMessage(taskId, 1, gStringVar4, sub_81AD730);
+ DisplayItemMessage(taskId, 1, gStringVar4, InitSellHowManyInput);
}
}
}
@@ -2021,114 +2097,114 @@ static void DisplaySellItemPriceAndConfirm(u8 taskId)
ConvertIntToDecimalStringN(gStringVar1, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * tItemCount, STR_CONV_MODE_LEFT_ALIGN, 6);
StringExpandPlaceholders(gStringVar4, gText_ICanPayVar1);
- DisplayItemMessage(taskId, 1, gStringVar4, sub_81AD6E4);
+ DisplayItemMessage(taskId, 1, gStringVar4, AskSellItems);
}
-void sub_81AD6E4(u8 taskId)
+static void AskSellItems(u8 taskId)
{
- BagMenu_YesNo(taskId, 6, &sYesNoSellItemFunctions);
+ BagMenu_YesNo(taskId, ITEMWIN_YESNO_HIGH, &sYesNoSellItemFunctions);
}
-void BagMenu_CancelSell(u8 taskId)
+static void CancelSell(u8 taskId)
{
s16* data = gTasks[taskId].data;
RemoveMoneyWindow();
- BagMenu_RemoveBagItemMessageWindow(4);
- BagMenu_PrintCursor_(data[0], 0);
- set_callback3_to_bag(taskId);
+ RemoveItemMessageWindow(ITEMWIN_MESSAGE);
+ BagMenu_PrintCursor(tListTaskId, COLORID_NORMAL);
+ ReturnToItemList(taskId);
}
-void sub_81AD730(u8 taskId)
+static void InitSellHowManyInput(u8 taskId)
{
s16* data = gTasks[taskId].data;
- u8 windowId = BagMenu_AddWindow(8);
+ u8 windowId = BagMenu_AddWindow(ITEMWIN_QUANTITY_WIDE);
PrintItemSoldAmount(windowId, 1, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * tItemCount);
DisplayCurrentMoneyWindow();
- gTasks[taskId].func = Task_SellHowManyDialogueHandleInput;
+ gTasks[taskId].func = Task_ChooseHowManyToSell;
}
-static void Task_SellHowManyDialogueHandleInput(u8 taskId)
+static void Task_ChooseHowManyToSell(u8 taskId)
{
s16* data = gTasks[taskId].data;
- if (AdjustQuantityAccordingToDPadInput(&tItemCount, data[2]) == TRUE)
+ if (AdjustQuantityAccordingToDPadInput(&tItemCount, tQuantity) == TRUE)
{
- PrintItemSoldAmount(gBagMenu->windowPointers[8], tItemCount, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * tItemCount);
+ PrintItemSoldAmount(gBagMenu->windowIds[ITEMWIN_QUANTITY_WIDE], tItemCount, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * tItemCount);
}
else if (JOY_NEW(A_BUTTON))
{
PlaySE(SE_SELECT);
- BagMenu_RemoveWindow(8);
+ BagMenu_RemoveWindow(ITEMWIN_QUANTITY_WIDE);
DisplaySellItemPriceAndConfirm(taskId);
}
else if (JOY_NEW(B_BUTTON))
{
PlaySE(SE_SELECT);
- BagMenu_PrintCursor_(data[0], 0);
+ BagMenu_PrintCursor(tListTaskId, COLORID_NORMAL);
RemoveMoneyWindow();
- BagMenu_RemoveWindow(8);
- BagMenu_RemoveBagItemMessageWindow(4);
- set_callback3_to_bag(taskId);
+ BagMenu_RemoveWindow(ITEMWIN_QUANTITY_WIDE);
+ RemoveItemMessageWindow(ITEMWIN_MESSAGE);
+ ReturnToItemList(taskId);
}
}
-void BagMenu_ConfirmSell(u8 taskId)
+static void ConfirmSell(u8 taskId)
{
s16* data = gTasks[taskId].data;
CopyItemName(gSpecialVar_ItemId, gStringVar2);
ConvertIntToDecimalStringN(gStringVar1, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * tItemCount, STR_CONV_MODE_LEFT_ALIGN, 6);
StringExpandPlaceholders(gStringVar4, gText_TurnedOverVar1ForVar2);
- DisplayItemMessage(taskId, 1, gStringVar4, BagMenu_Sell_UpdateItemListAndMoney);
+ DisplayItemMessage(taskId, 1, gStringVar4, SellItem);
}
-static void BagMenu_Sell_UpdateItemListAndMoney(u8 taskId)
+static void SellItem(u8 taskId)
{
s16* data = gTasks[taskId].data;
- u16* scrollPos = &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket];
- u16* cursorPos = &gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket];
+ u16* scrollPos = &gBagPosition.scrollPosition[gBagPosition.pocket];
+ u16* cursorPos = &gBagPosition.cursorPosition[gBagPosition.pocket];
PlaySE(SE_SHOP);
RemoveBagItem(gSpecialVar_ItemId, tItemCount);
AddMoney(&gSaveBlock1Ptr->money, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * tItemCount);
- DestroyListMenuTask(data[0], scrollPos, cursorPos);
- UpdatePocketItemList(gBagPositionStruct.pocket);
- SetInitialScrollAndCursorPositions(gBagPositionStruct.pocket);
- LoadBagItemListBuffers(gBagPositionStruct.pocket);
- data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
- BagMenu_PrintCursor_(data[0], 2);
- PrintMoneyAmountInMoneyBox(gBagMenu->windowPointers[9], GetMoney(&gSaveBlock1Ptr->money), 0);
- gTasks[taskId].func = BagMenu_Sell_WaitForABPress;
+ DestroyListMenuTask(tListTaskId, scrollPos, cursorPos);
+ UpdatePocketItemList(gBagPosition.pocket);
+ UpdatePocketListPosition(gBagPosition.pocket);
+ LoadBagItemListBuffers(gBagPosition.pocket);
+ tListTaskId = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
+ BagMenu_PrintCursor(tListTaskId, COLORID_GRAY_CURSOR);
+ PrintMoneyAmountInMoneyBox(gBagMenu->windowIds[ITEMWIN_MONEY], GetMoney(&gSaveBlock1Ptr->money), 0);
+ gTasks[taskId].func = WaitAfterItemSell;
}
-static void BagMenu_Sell_WaitForABPress(u8 taskId)
+static void WaitAfterItemSell(u8 taskId)
{
if (JOY_NEW(A_BUTTON | B_BUTTON))
{
PlaySE(SE_SELECT);
RemoveMoneyWindow();
- BagMenu_InitListsMenu(taskId);
+ CloseItemMessage(taskId);
}
}
-void Task_ItemContext_Deposit(u8 taskId)
+static void Task_ItemContext_Deposit(u8 taskId)
{
s16* data = gTasks[taskId].data;
tItemCount = 1;
- if (data[2] == 1)
+ if (tQuantity == 1)
{
- BagMenu_TryDepositItem(taskId);
+ TryDepositItem(taskId);
}
else
{
CopyItemName(gSpecialVar_ItemId, gStringVar1);
StringExpandPlaceholders(gStringVar4, gText_DepositHowManyVar1);
- FillWindowPixelBuffer(1, PIXEL_FILL(0));
- BagMenu_Print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0);
- sub_81ABC3C(7);
+ FillWindowPixelBuffer(WIN_DESCRIPTION, PIXEL_FILL(0));
+ BagMenu_Print(WIN_DESCRIPTION, 1, gStringVar4, 3, 1, 0, 0, 0, COLORID_NORMAL);
+ AddItemQuantityWindow(ITEMWIN_QUANTITY);
gTasks[taskId].func = Task_ChooseHowManyToDeposit;
}
}
@@ -2137,100 +2213,103 @@ static void Task_ChooseHowManyToDeposit(u8 taskId)
{
s16* data = gTasks[taskId].data;
- if (AdjustQuantityAccordingToDPadInput(&tItemCount, data[2]) == TRUE)
+ if (AdjustQuantityAccordingToDPadInput(&tItemCount, tQuantity) == TRUE)
{
- PrintItemDepositAmount(gBagMenu->windowPointers[7], tItemCount);
+ PrintItemQuantity(gBagMenu->windowIds[ITEMWIN_QUANTITY], tItemCount);
}
else if (JOY_NEW(A_BUTTON))
{
PlaySE(SE_SELECT);
- BagMenu_RemoveWindow(7);
- BagMenu_TryDepositItem(taskId);
+ BagMenu_RemoveWindow(ITEMWIN_QUANTITY);
+ TryDepositItem(taskId);
}
else if (JOY_NEW(B_BUTTON))
{
PlaySE(SE_SELECT);
- BagMenu_PrintDescription(data[1]);
- BagMenu_PrintCursor_(data[0], 0);
- BagMenu_RemoveWindow(7);
- set_callback3_to_bag(taskId);
+ PrintItemDescription(tListPosition);
+ BagMenu_PrintCursor(tListTaskId, COLORID_NORMAL);
+ BagMenu_RemoveWindow(ITEMWIN_QUANTITY);
+ ReturnToItemList(taskId);
}
}
-static void BagMenu_TryDepositItem(u8 taskId)
+static void TryDepositItem(u8 taskId)
{
s16* data = gTasks[taskId].data;
- FillWindowPixelBuffer(1, PIXEL_FILL(0));
+ FillWindowPixelBuffer(WIN_DESCRIPTION, PIXEL_FILL(0));
if (ItemId_GetImportance(gSpecialVar_ItemId))
{
- BagMenu_Print(1, 1, gText_CantStoreImportantItems, 3, 1, 0, 0, 0, 0);
- gTasks[taskId].func = BagMenu_Deposit_WaitForABPress;
+ // Can't deposit important items
+ BagMenu_Print(WIN_DESCRIPTION, 1, gText_CantStoreImportantItems, 3, 1, 0, 0, 0, COLORID_NORMAL);
+ gTasks[taskId].func = WaitDepositErrorMessage;
}
else if (AddPCItem(gSpecialVar_ItemId, tItemCount) == TRUE)
{
+ // Successfully deposited
CopyItemName(gSpecialVar_ItemId, gStringVar1);
ConvertIntToDecimalStringN(gStringVar2, tItemCount, STR_CONV_MODE_LEFT_ALIGN, MAX_ITEM_DIGITS);
StringExpandPlaceholders(gStringVar4, gText_DepositedVar2Var1s);
- BagMenu_Print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0);
- gTasks[taskId].func = Task_ActuallyToss;
+ BagMenu_Print(WIN_DESCRIPTION, 1, gStringVar4, 3, 1, 0, 0, 0, COLORID_NORMAL);
+ gTasks[taskId].func = Task_RemoveItemFromBag;
}
else
{
- BagMenu_Print(1, 1, gText_NoRoomForItems, 3, 1, 0, 0, 0, 0);
- gTasks[taskId].func = BagMenu_Deposit_WaitForABPress;
+ // No room to deposit
+ BagMenu_Print(WIN_DESCRIPTION, 1, gText_NoRoomForItems, 3, 1, 0, 0, 0, COLORID_NORMAL);
+ gTasks[taskId].func = WaitDepositErrorMessage;
}
}
-static void BagMenu_Deposit_WaitForABPress(u8 taskId)
+static void WaitDepositErrorMessage(u8 taskId)
{
s16* data = gTasks[taskId].data;
if (JOY_NEW(A_BUTTON | B_BUTTON))
{
PlaySE(SE_SELECT);
- BagMenu_PrintDescription(data[1]);
- BagMenu_PrintCursor_(data[0], 0);
- set_callback3_to_bag(taskId);
+ PrintItemDescription(tListPosition);
+ BagMenu_PrintCursor(tListTaskId, COLORID_NORMAL);
+ ReturnToItemList(taskId);
}
}
-bool8 IsWallysBag(void)
+static bool8 IsWallysBag(void)
{
- if (gBagPositionStruct.location == 10)
+ if (gBagPosition.location == ITEMMENULOCATION_WALLY)
return TRUE;
return FALSE;
}
-void PrepareBagForWallyTutorial(void)
+static void PrepareBagForWallyTutorial(void)
{
u32 i;
- sTempWallyBag = AllocZeroed(sizeof(struct TempWallyStruct));
+ sTempWallyBag = AllocZeroed(sizeof(*sTempWallyBag));
memcpy(sTempWallyBag->bagPocket_Items, gSaveBlock1Ptr->bagPocket_Items, sizeof(gSaveBlock1Ptr->bagPocket_Items));
memcpy(sTempWallyBag->bagPocket_PokeBalls, gSaveBlock1Ptr->bagPocket_PokeBalls, sizeof(gSaveBlock1Ptr->bagPocket_PokeBalls));
- sTempWallyBag->pocket = gBagPositionStruct.pocket;
- for (i = 0; i <= 4; i++)
+ sTempWallyBag->pocket = gBagPosition.pocket;
+ for (i = 0; i < POCKETS_COUNT; i++)
{
- sTempWallyBag->cursorPosition[i] = gBagPositionStruct.cursorPosition[i];
- sTempWallyBag->scrollPosition[i] = gBagPositionStruct.scrollPosition[i];
+ sTempWallyBag->cursorPosition[i] = gBagPosition.cursorPosition[i];
+ sTempWallyBag->scrollPosition[i] = gBagPosition.scrollPosition[i];
}
ClearItemSlots(gSaveBlock1Ptr->bagPocket_Items, BAG_ITEMS_COUNT);
ClearItemSlots(gSaveBlock1Ptr->bagPocket_PokeBalls, BAG_POKEBALLS_COUNT);
ResetBagScrollPositions();
}
-void RestoreBagAfterWallyTutorial(void)
+static void RestoreBagAfterWallyTutorial(void)
{
u32 i;
memcpy(gSaveBlock1Ptr->bagPocket_Items, sTempWallyBag->bagPocket_Items, sizeof(sTempWallyBag->bagPocket_Items));
memcpy(gSaveBlock1Ptr->bagPocket_PokeBalls, sTempWallyBag->bagPocket_PokeBalls, sizeof(sTempWallyBag->bagPocket_PokeBalls));
- gBagPositionStruct.pocket = sTempWallyBag->pocket;
- for (i = 0; i <= 4; i++)
+ gBagPosition.pocket = sTempWallyBag->pocket;
+ for (i = 0; i < POCKETS_COUNT; i++)
{
- gBagPositionStruct.cursorPosition[i] = sTempWallyBag->cursorPosition[i];
- gBagPositionStruct.scrollPosition[i] = sTempWallyBag->scrollPosition[i];
+ gBagPosition.cursorPosition[i] = sTempWallyBag->cursorPosition[i];
+ gBagPosition.scrollPosition[i] = sTempWallyBag->scrollPosition[i];
}
Free(sTempWallyBag);
}
@@ -2243,86 +2322,93 @@ void DoWallyTutorialBagMenu(void)
GoToBagMenu(ITEMMENULOCATION_WALLY, ITEMS_POCKET, CB2_SetUpReshowBattleScreenAfterMenu2);
}
-void Task_WallyTutorialBagMenu(u8 taskId)
+#define tTimer data[8]
+#define WALLY_BAG_DELAY 102 // The number of frames between each action Wally takes in the bag
+
+static void Task_WallyTutorialBagMenu(u8 taskId)
{
s16* data = gTasks[taskId].data;
if (!gPaletteFade.active)
{
- switch (data[8])
+ switch (tTimer)
{
- case 0x66:
- PlaySE(SE_SELECT);
- SwitchBagPocket(taskId, MENU_CURSOR_DELTA_RIGHT, 0);
- data[8]++;
- break;
- case 0xCC:
- PlaySE(SE_SELECT);
- BagMenu_PrintCursor_(data[0], 2);
- gSpecialVar_ItemId = ITEM_POKE_BALL;
- OpenContextMenu(taskId);
- data[8]++;
- break;
- case 0x132:
- PlaySE(SE_SELECT);
- BagMenu_RemoveSomeWindow();
- DestroyListMenuTask(data[0], 0, 0);
- RestoreBagAfterWallyTutorial();
- Task_FadeAndCloseBagMenu(taskId);
- break;
- default:
- data[8]++;
- break;
+ case WALLY_BAG_DELAY * 1:
+ PlaySE(SE_SELECT);
+ SwitchBagPocket(taskId, MENU_CURSOR_DELTA_RIGHT, FALSE);
+ tTimer++;
+ break;
+ case WALLY_BAG_DELAY * 2:
+ PlaySE(SE_SELECT);
+ BagMenu_PrintCursor(tListTaskId, COLORID_GRAY_CURSOR);
+ gSpecialVar_ItemId = ITEM_POKE_BALL;
+ OpenContextMenu(taskId);
+ tTimer++;
+ break;
+ case WALLY_BAG_DELAY * 3:
+ PlaySE(SE_SELECT);
+ RemoveContextWindow();
+ DestroyListMenuTask(tListTaskId, 0, 0);
+ RestoreBagAfterWallyTutorial();
+ Task_FadeAndCloseBagMenu(taskId);
+ break;
+ default:
+ tTimer++;
+ break;
}
}
}
-#undef tItemCount
+#undef tTimer
-void unknown_ItemMenu_Show(u8 taskId)
+// This action is used to show the Apprentice an item when
+// they ask what item they should make their Pokémon hold
+static void ItemMenu_Show(u8 taskId)
{
gSpecialVar_0x8005 = gSpecialVar_ItemId;
- gSpecialVar_Result = 1;
- BagMenu_RemoveSomeWindow();
+ gSpecialVar_Result = TRUE;
+ RemoveContextWindow();
Task_FadeAndCloseBagMenu(taskId);
}
-void CB2_ApprenticeExitBagMenu(void)
+static void CB2_ApprenticeExitBagMenu(void)
{
gFieldCallback = Apprentice_EnableBothScriptContexts;
SetMainCallback2(CB2_ReturnToField);
}
-void unknown_ItemMenu_Give2(u8 taskId)
+static void ItemMenu_GiveFavorLady(u8 taskId)
{
RemoveBagItem(gSpecialVar_ItemId, 1);
- gSpecialVar_Result = 1;
- BagMenu_RemoveSomeWindow();
+ gSpecialVar_Result = TRUE;
+ RemoveContextWindow();
Task_FadeAndCloseBagMenu(taskId);
}
-void CB2_FavorLadyExitBagMenu(void)
+static void CB2_FavorLadyExitBagMenu(void)
{
gFieldCallback = FieldCallback_FavorLadyEnableScriptContexts;
SetMainCallback2(CB2_ReturnToField);
}
-void unknown_ItemMenu_Confirm2(u8 taskId)
+// This action is used to confirm which item to use as
+// a prize for a custom quiz with the Lilycove Quiz Lady
+static void ItemMenu_ConfirmQuizLady(u8 taskId)
{
- gSpecialVar_Result = 1;
- BagMenu_RemoveSomeWindow();
+ gSpecialVar_Result = TRUE;
+ RemoveContextWindow();
Task_FadeAndCloseBagMenu(taskId);
}
-void CB2_QuizLadyExitBagMenu(void)
+static void CB2_QuizLadyExitBagMenu(void)
{
gFieldCallback = FieldCallback_QuizLadyEnableScriptContexts;
SetMainCallback2(CB2_ReturnToField);
}
-void BagMenu_PrintPocketNames(const u8 *pocketName1, const u8 *pocketName2)
+static void PrintPocketNames(const u8 *pocketName1, const u8 *pocketName2)
{
- struct WindowTemplate window = {0, 0, 0, 0, 0, 0, 0};
+ struct WindowTemplate window = {0};
u16 windowId;
int offset;
@@ -2331,32 +2417,32 @@ void BagMenu_PrintPocketNames(const u8 *pocketName1, const u8 *pocketName2)
windowId = AddWindow(&window);
FillWindowPixelBuffer(windowId, PIXEL_FILL(0));
offset = GetStringCenterAlignXOffset(1, pocketName1, 0x40);
- BagMenu_Print(windowId, 1, pocketName1, offset, 1, 0, 0, -1, 1);
+ BagMenu_Print(windowId, 1, pocketName1, offset, 1, 0, 0, TEXT_SPEED_FF, COLORID_POCKET_NAME);
if (pocketName2)
{
offset = GetStringCenterAlignXOffset(1, pocketName2, 0x40);
- BagMenu_Print(windowId, 1, pocketName2, offset + 0x40, 1, 0, 0, -1, 1);
+ BagMenu_Print(windowId, 1, pocketName2, offset + 0x40, 1, 0, 0, TEXT_SPEED_FF, COLORID_POCKET_NAME);
}
- CpuCopy32((u8*)GetWindowAttribute(windowId, WINDOW_TILE_DATA), gBagMenu->pocketNameBuffer, 0x400);
+ CpuCopy32((u8*)GetWindowAttribute(windowId, WINDOW_TILE_DATA), gBagMenu->pocketNameBuffer, sizeof(gBagMenu->pocketNameBuffer));
RemoveWindow(windowId);
}
-void BagMenu_CopyPocketNameToWindow(u32 a)
+static void CopyPocketNameToWindow(u32 a)
{
- u8 (* r4)[32][32];
- u8* windowAttribute;
+ u8 (* tileDataBuffer)[32][32];
+ u8* windowTileData;
int b;
if (a > 8)
a = 8;
- r4 = &gBagMenu->pocketNameBuffer;
- windowAttribute = (u8*)GetWindowAttribute(2, WINDOW_TILE_DATA);
- CpuCopy32(r4[0][a], windowAttribute, 0x100);
+ tileDataBuffer = &gBagMenu->pocketNameBuffer;
+ windowTileData = (u8*)GetWindowAttribute(2, WINDOW_TILE_DATA);
+ CpuCopy32(tileDataBuffer[0][a], windowTileData, 0x100); // Top half of pocket name
b = a + 16;
- CpuCopy32(r4[0][b], windowAttribute + 0x100, 0x100);
- CopyWindowToVram(2, 2);
+ CpuCopy32(tileDataBuffer[0][b], windowTileData + 0x100, 0x100); // Bottom half of pocket name
+ CopyWindowToVram(WIN_POCKET_NAME, 2);
}
-void SetupBagMenu_Textboxes(void)
+static void LoadBagMenuTextWindows(void)
{
u8 i;
@@ -2366,7 +2452,7 @@ void SetupBagMenu_Textboxes(void)
LoadMessageBoxGfx(0, 10, 0xD0);
ListMenuLoadStdPalAt(0xC0, 1);
LoadPalette(&gUnknown_0860F074, 0xF0, 0x20);
- for (i = 0; i < 3; i++)
+ for (i = 0; i <= WIN_POCKET_NAME; i++)
{
FillWindowPixelBuffer(i, PIXEL_FILL(0));
PutWindowTilemap(i);
@@ -2375,109 +2461,111 @@ void SetupBagMenu_Textboxes(void)
ScheduleBgCopyTilemapToVram(1);
}
-void BagMenu_Print(u8 windowId, u8 fontId, const u8 *str, u8 left, u8 top, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIndex)
+static 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[colorIndex], speed, str);
}
-//Unused
-u8 sub_81AE124(u8 which)
+// Unused
+static u8 BagMenu_GetWindowId(u8 windowType)
{
- return gBagMenu->windowPointers[which];
+ return gBagMenu->windowIds[windowType];
}
-u8 BagMenu_AddWindow(u8 which)
+static u8 BagMenu_AddWindow(u8 windowType)
{
- u8 *ptr = &gBagMenu->windowPointers[which];
- if (*ptr == WINDOW_NONE)
+ u8 *windowId = &gBagMenu->windowIds[windowType];
+ if (*windowId == WINDOW_NONE)
{
- *ptr = AddWindow(&sContextMenuWindowTemplates[which]);
- DrawStdFrameWithCustomTileAndPalette(*ptr, 0, 1, 14);
+ *windowId = AddWindow(&sContextMenuWindowTemplates[windowType]);
+ DrawStdFrameWithCustomTileAndPalette(*windowId, 0, 1, 14);
ScheduleBgCopyTilemapToVram(1);
}
- return *ptr;
+ return *windowId;
}
-void BagMenu_RemoveWindow(u8 which)
+static void BagMenu_RemoveWindow(u8 windowType)
{
- u8 *ptr = &gBagMenu->windowPointers[which];
- if (*ptr != WINDOW_NONE)
+ u8 *windowId = &gBagMenu->windowIds[windowType];
+ if (*windowId != WINDOW_NONE)
{
- ClearStdWindowAndFrameToTransparent(*ptr, FALSE);
- ClearWindowTilemap(*ptr);
- RemoveWindow(*ptr);
+ ClearStdWindowAndFrameToTransparent(*windowId, FALSE);
+ ClearWindowTilemap(*windowId);
+ RemoveWindow(*windowId);
ScheduleBgCopyTilemapToVram(1);
- *ptr = WINDOW_NONE;
+ *windowId = WINDOW_NONE;
}
}
-u8 AddItemMessageWindow(u8 which)
+static u8 AddItemMessageWindow(u8 windowType)
{
- u8 *ptr = &gBagMenu->windowPointers[which];
- if (*ptr == WINDOW_NONE)
- *ptr = AddWindow(&sContextMenuWindowTemplates[which]);
- return *ptr;
+ u8 *windowId = &gBagMenu->windowIds[windowType];
+ if (*windowId == WINDOW_NONE)
+ *windowId = AddWindow(&sContextMenuWindowTemplates[windowType]);
+ return *windowId;
}
-void BagMenu_RemoveBagItemMessageWindow(u8 which)
+static void RemoveItemMessageWindow(u8 windowType)
{
- u8 *ptr = &gBagMenu->windowPointers[which];
- if (*ptr != WINDOW_NONE)
+ u8 *windowId = &gBagMenu->windowIds[windowType];
+ if (*windowId != WINDOW_NONE)
{
- ClearDialogWindowAndFrameToTransparent(*ptr, FALSE);
+ ClearDialogWindowAndFrameToTransparent(*windowId, FALSE);
// This ClearWindowTilemap call is redundant, since ClearDialogWindowAndFrameToTransparent already calls it.
- ClearWindowTilemap(*ptr);
- RemoveWindow(*ptr);
+ ClearWindowTilemap(*windowId);
+ RemoveWindow(*windowId);
ScheduleBgCopyTilemapToVram(1);
- *ptr = WINDOW_NONE;
+ *windowId = WINDOW_NONE;
}
}
-void BagMenu_YesNo(u8 a, u8 b, const struct YesNoFuncTable *funcTable)
+void BagMenu_YesNo(u8 taskId, u8 windowType, const struct YesNoFuncTable *funcTable)
{
- CreateYesNoMenuWithCallbacks(a, &sContextMenuWindowTemplates[b], 1, 0, 2, 1, 14, funcTable);
+ CreateYesNoMenuWithCallbacks(taskId, &sContextMenuWindowTemplates[windowType], 1, 0, 2, 1, 14, funcTable);
}
static void DisplayCurrentMoneyWindow(void)
{
- u8 windowId = BagMenu_AddWindow(9);
+ u8 windowId = BagMenu_AddWindow(ITEMWIN_MONEY);
PrintMoneyAmountInMoneyBoxWithBorder(windowId, 1, 14, GetMoney(&gSaveBlock1Ptr->money));
AddMoneyLabelObject(19, 11);
}
static void RemoveMoneyWindow(void)
{
- BagMenu_RemoveWindow(9);
+ BagMenu_RemoveWindow(ITEMWIN_MONEY);
RemoveMoneyLabelObject();
}
-void BagMenu_PrepareTMHMMoveWindow(void)
+static void PrepareTMHMMoveWindow(void)
{
- FillWindowPixelBuffer(3, PIXEL_FILL(0));
- BlitMenuInfoIcon(3, MENU_INFO_ICON_TYPE, 0, 0);
- BlitMenuInfoIcon(3, MENU_INFO_ICON_POWER, 0, 12);
- BlitMenuInfoIcon(3, MENU_INFO_ICON_ACCURACY, 0, 24);
- BlitMenuInfoIcon(3, MENU_INFO_ICON_PP, 0, 36);
- CopyWindowToVram(3, 2);
+ FillWindowPixelBuffer(WIN_TMHM_INFO_ICONS, PIXEL_FILL(0));
+ BlitMenuInfoIcon(WIN_TMHM_INFO_ICONS, MENU_INFO_ICON_TYPE, 0, 0);
+ BlitMenuInfoIcon(WIN_TMHM_INFO_ICONS, MENU_INFO_ICON_POWER, 0, 12);
+ BlitMenuInfoIcon(WIN_TMHM_INFO_ICONS, MENU_INFO_ICON_ACCURACY, 0, 24);
+ BlitMenuInfoIcon(WIN_TMHM_INFO_ICONS, MENU_INFO_ICON_PP, 0, 36);
+ CopyWindowToVram(WIN_TMHM_INFO_ICONS, 2);
}
-void PrintTMHMMoveData(u16 itemId)
+static void PrintTMHMMoveData(u16 itemId)
{
u8 i;
u16 moveId;
const u8* text;
- FillWindowPixelBuffer(4, PIXEL_FILL(0));
+ FillWindowPixelBuffer(WIN_TMHM_INFO, PIXEL_FILL(0));
if (itemId == ITEM_NONE)
{
for (i = 0; i < 4; i++)
- BagMenu_Print(4, 1, gText_ThreeDashes, 7, i * 12, 0, 0, -1, 4);
- CopyWindowToVram(4, 2);
+ BagMenu_Print(WIN_TMHM_INFO, 1, gText_ThreeDashes, 7, i * 12, 0, 0, TEXT_SPEED_FF, COLORID_TMHM_INFO);
+ CopyWindowToVram(WIN_TMHM_INFO, 2);
}
else
{
moveId = ItemIdToBattleMoveId(itemId);
- BlitMenuInfoIcon(4, gBattleMoves[moveId].type + 1, 0, 0);
+ BlitMenuInfoIcon(WIN_TMHM_INFO, gBattleMoves[moveId].type + 1, 0, 0);
+
+ // Print TMHM power
if (gBattleMoves[moveId].power <= 1)
{
text = gText_ThreeDashes;
@@ -2487,7 +2575,9 @@ void PrintTMHMMoveData(u16 itemId)
ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[moveId].power, STR_CONV_MODE_RIGHT_ALIGN, 3);
text = gStringVar1;
}
- BagMenu_Print(4, 1, text, 7, 12, 0, 0, -1, 4);
+ BagMenu_Print(WIN_TMHM_INFO, 1, text, 7, 12, 0, 0, TEXT_SPEED_FF, COLORID_TMHM_INFO);
+
+ // Print TMHM accuracy
if (gBattleMoves[moveId].accuracy == 0)
{
text = gText_ThreeDashes;
@@ -2497,9 +2587,12 @@ void PrintTMHMMoveData(u16 itemId)
ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[moveId].accuracy, STR_CONV_MODE_RIGHT_ALIGN, 3);
text = gStringVar1;
}
- BagMenu_Print(4, 1, text, 7, 24, 0, 0, -1, 4);
+ BagMenu_Print(WIN_TMHM_INFO, 1, text, 7, 24, 0, 0, TEXT_SPEED_FF, COLORID_TMHM_INFO);
+
+ // Print TMHM pp
ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[moveId].pp, STR_CONV_MODE_RIGHT_ALIGN, 3);
- BagMenu_Print(4, 1, gStringVar1, 7, 36, 0, 0, -1, 4);
- CopyWindowToVram(4, 2);
+ BagMenu_Print(WIN_TMHM_INFO, 1, gStringVar1, 7, 36, 0, 0, TEXT_SPEED_FF, COLORID_TMHM_INFO);
+
+ CopyWindowToVram(WIN_TMHM_INFO, 2);
}
}
diff --git a/src/item_menu_icons.c b/src/item_menu_icons.c
index 5c0849eef..c8d1cd8d0 100644
--- a/src/item_menu_icons.c
+++ b/src/item_menu_icons.c
@@ -11,6 +11,15 @@
#include "window.h"
#include "constants/items.h"
+enum {
+ TAG_BAG_GFX = 100,
+ TAG_ROTATING_BALL_GFX,
+ TAG_ITEM_ICON,
+ TAG_ITEM_ICON_ALT,
+};
+#define TAG_BERRY_CHECK_CIRCLE_GFX 10000
+#define TAG_BERRY_PIC_PAL 30020
+
struct CompressedTilesPal
{
const u32 *tiles;
@@ -128,7 +137,7 @@ const struct CompressedSpritePalette gBagPaletteTable =
gBagPalette, TAG_BAG_GFX
};
-static const struct SpriteTemplate gBagSpriteTemplate =
+static const struct SpriteTemplate sBagSpriteTemplate =
{
.tileTag = TAG_BAG_GFX,
.paletteTag = TAG_BAG_GFX,
@@ -189,17 +198,17 @@ static const union AffineAnimCmd *const sRotatingBallAnimCmds_FullRotation[] =
sSpriteAffineAnim_RotatingBallRotation2,
};
-static const struct SpriteSheet gRotatingBallTable =
+static const struct SpriteSheet sRotatingBallTable =
{
gRotatingBall, 0x80, TAG_ROTATING_BALL_GFX
};
-static const struct SpritePalette gRotatingBallPaletteTable =
+static const struct SpritePalette sRotatingBallPaletteTable =
{
gRotatingBall_Pal, TAG_ROTATING_BALL_GFX
};
-static const struct SpriteTemplate gRotatingBallSpriteTemplate =
+static const struct SpriteTemplate sRotatingBallSpriteTemplate =
{
.tileTag = TAG_ROTATING_BALL_GFX,
.paletteTag = TAG_ROTATING_BALL_GFX,
@@ -262,7 +271,7 @@ static const struct SpriteFrameImage sBerryPicSpriteImageTable[] =
static const struct SpriteTemplate gBerryPicSpriteTemplate =
{
- .tileTag = TAG_BERRY_PIC_TILE,
+ .tileTag = 0xFFFF,
.paletteTag = TAG_BERRY_PIC_PAL,
.oam = &sBerryPicOamData,
.anims = sBerryPicSpriteAnimTable,
@@ -301,7 +310,7 @@ static const union AffineAnimCmd *const sBerryPicRotatingAnimCmds[] =
static const struct SpriteTemplate gBerryPicRotatingSpriteTemplate =
{
- .tileTag = TAG_BERRY_PIC_TILE,
+ .tileTag = 0xFFFF,
.paletteTag = TAG_BERRY_PIC_PAL,
.oam = &sBerryPicRotatingOamData,
.anims = sBerryPicSpriteAnimTable,
@@ -409,11 +418,11 @@ static const struct SpriteTemplate gBerryCheckCircleSpriteTemplate =
// code
void RemoveBagSprite(u8 id)
{
- u8 *spriteId = &gBagMenu->spriteId[id];
+ u8 *spriteId = &gBagMenu->spriteIds[id];
if (*spriteId != SPRITE_NONE)
{
- FreeSpriteTilesByTag(id + 100);
- FreeSpritePaletteByTag(id + 100);
+ FreeSpriteTilesByTag(id + TAG_BAG_GFX);
+ FreeSpritePaletteByTag(id + TAG_BAG_GFX);
FreeSpriteOamMatrix(&gSprites[*spriteId]);
DestroySprite(&gSprites[*spriteId]);
*spriteId = SPRITE_NONE;
@@ -422,14 +431,14 @@ void RemoveBagSprite(u8 id)
void AddBagVisualSprite(u8 bagPocketId)
{
- u8 *spriteId = &gBagMenu->spriteId[0];
- *spriteId = CreateSprite(&gBagSpriteTemplate, 68, 66, 0);
+ u8 *spriteId = &gBagMenu->spriteIds[ITEMMENUSPRITE_BAG];
+ *spriteId = CreateSprite(&sBagSpriteTemplate, 68, 66, 0);
SetBagVisualPocketId(bagPocketId, FALSE);
}
void SetBagVisualPocketId(u8 bagPocketId, bool8 isSwitchingPockets)
{
- struct Sprite *sprite = &gSprites[gBagMenu->spriteId[0]];
+ struct Sprite *sprite = &gSprites[gBagMenu->spriteIds[ITEMMENUSPRITE_BAG]];
if (isSwitchingPockets)
{
sprite->y2 = -5;
@@ -458,7 +467,7 @@ static void SpriteCB_BagVisualSwitchingPockets(struct Sprite *sprite)
void ShakeBagSprite(void)
{
- struct Sprite *sprite = &gSprites[gBagMenu->spriteId[0]];
+ struct Sprite *sprite = &gSprites[gBagMenu->spriteIds[ITEMMENUSPRITE_BAG]];
if (sprite->affineAnimEnded)
{
StartSpriteAffineAnim(sprite, 1);
@@ -477,10 +486,10 @@ static void SpriteCB_ShakeBagSprite(struct Sprite *sprite)
void AddSwitchPocketRotatingBallSprite(s16 rotationDirection)
{
- u8 *spriteId = &gBagMenu->spriteId[1];
- LoadSpriteSheet(&gRotatingBallTable);
- LoadSpritePalette(&gRotatingBallPaletteTable);
- *spriteId = CreateSprite(&gRotatingBallSpriteTemplate, 16, 16, 0);
+ u8 *spriteId = &gBagMenu->spriteIds[ITEMMENUSPRITE_BALL];
+ LoadSpriteSheet(&sRotatingBallTable);
+ LoadSpritePalette(&sRotatingBallPaletteTable);
+ *spriteId = CreateSprite(&sRotatingBallSpriteTemplate, 16, 16, 0);
gSprites[*spriteId].data[0] = rotationDirection;
}
@@ -510,19 +519,20 @@ static void SpriteCB_SwitchPocketRotatingBallContinue(struct Sprite *sprite)
sprite->data[3]++;
UpdateSwitchPocketRotatingBallCoords(sprite);
if (sprite->data[3] == 16)
- RemoveBagSprite(1);
+ RemoveBagSprite(ITEMMENUSPRITE_BALL);
}
void AddBagItemIconSprite(u16 itemId, u8 id)
{
- u8 *spriteId = &gBagMenu->spriteId[id + 2];
+ u8 *spriteId = &gBagMenu->spriteIds[id + ITEMMENUSPRITE_ITEM];
if (*spriteId == SPRITE_NONE)
{
u8 iconSpriteId;
- FreeSpriteTilesByTag(id + 102);
- FreeSpritePaletteByTag(id + 102);
- iconSpriteId = AddItemIconSprite(id + 102, id + 102, itemId);
+ // Either TAG_ITEM_ICON or TAG_ITEM_ICON_ALT
+ FreeSpriteTilesByTag(id + TAG_ITEM_ICON);
+ FreeSpritePaletteByTag(id + TAG_ITEM_ICON);
+ iconSpriteId = AddItemIconSprite(id + TAG_ITEM_ICON, id + TAG_ITEM_ICON, itemId);
if (iconSpriteId != MAX_SPRITES)
{
*spriteId = iconSpriteId;
@@ -534,22 +544,22 @@ void AddBagItemIconSprite(u16 itemId, u8 id)
void RemoveBagItemIconSprite(u8 id)
{
- RemoveBagSprite(id + 2);
+ RemoveBagSprite(id + ITEMMENUSPRITE_ITEM);
}
void CreateItemMenuSwapLine(void)
{
- CreateSwapLineSprites(&gBagMenu->spriteId[4], 8);
+ CreateSwapLineSprites(&gBagMenu->spriteIds[ITEMMENUSPRITE_SWAP_LINE], ITEMMENU_SWAP_LINE_LENGTH);
}
void SetItemMenuSwapLineInvisibility(bool8 invisible)
{
- SetSwapLineSpritesInvisibility(&gBagMenu->spriteId[4], 8, invisible);
+ SetSwapLineSpritesInvisibility(&gBagMenu->spriteIds[ITEMMENUSPRITE_SWAP_LINE], ITEMMENU_SWAP_LINE_LENGTH, invisible);
}
void UpdateItemMenuSwapLinePos(u8 y)
{
- UpdateSwapLineSpritesPos(&gBagMenu->spriteId[4], 136, 120, (y + 1) * 16);
+ UpdateSwapLineSpritesPos(&gBagMenu->spriteIds[ITEMMENUSPRITE_SWAP_LINE], ITEMMENU_SWAP_LINE_LENGTH | 0x80, 120, (y + 1) * 16);
}
static void sub_80D5018(void *mem0, void *mem1)
diff --git a/src/item_use.c b/src/item_use.c
index c9087e929..4b4c6e1b9 100755
--- a/src/item_use.c
+++ b/src/item_use.c
@@ -91,7 +91,7 @@ static const u8 sClockwiseDirections[] = {DIR_NORTH, DIR_EAST, DIR_SOUTH, DIR_WE
static const struct YesNoFuncTable sUseTMHMYesNoFuncTable =
{
.yesFunc = UseTMHM,
- .noFunc = BagMenu_InitListsMenu,
+ .noFunc = CloseItemMessage,
};
#define tEnigmaBerryType data[4]
@@ -104,12 +104,12 @@ static void SetUpItemUseCallback(u8 taskId)
type = ItemId_GetType(gSpecialVar_ItemId) - 1;
if (!InBattlePyramid())
{
- gBagMenu->exitCallback = sItemUseCallbacks[type];
+ gBagMenu->newScreenCallback = sItemUseCallbacks[type];
Task_FadeAndCloseBagMenu(taskId);
}
else
{
- gPyramidBagMenu->exitCallback = sItemUseCallbacks[type];
+ gPyramidBagMenu->newScreenCallback = sItemUseCallbacks[type];
CloseBattlePyramidBag(taskId);
}
}
@@ -143,7 +143,7 @@ static void DisplayCannotUseItemMessage(u8 taskId, bool8 isUsingRegisteredKeyIte
if (!isUsingRegisteredKeyItemOnField)
{
if (!InBattlePyramid())
- DisplayItemMessage(taskId, 1, gStringVar4, BagMenu_InitListsMenu);
+ DisplayItemMessage(taskId, 1, gStringVar4, CloseItemMessage);
else
DisplayItemMessageInBattlePyramid(taskId, gText_DadsAdvice, Task_CloseBattlePyramidBagMessage);
}
@@ -189,7 +189,7 @@ static void CB2_CheckMail(void)
void ItemUseOutOfBattle_Mail(u8 taskId)
{
- gBagMenu->exitCallback = CB2_CheckMail;
+ gBagMenu->newScreenCallback = CB2_CheckMail;
Task_FadeAndCloseBagMenu(taskId);
}
@@ -614,7 +614,7 @@ void ItemUseOutOfBattle_PokeblockCase(u8 taskId)
}
else if (gTasks[taskId].tUsingRegisteredKeyItem != TRUE)
{
- gBagMenu->exitCallback = CB2_OpenPokeblockFromBag;
+ gBagMenu->newScreenCallback = CB2_OpenPokeblockFromBag;
Task_FadeAndCloseBagMenu(taskId);
}
else
@@ -647,7 +647,7 @@ void ItemUseOutOfBattle_CoinCase(u8 taskId)
if (!gTasks[taskId].tUsingRegisteredKeyItem)
{
- DisplayItemMessage(taskId, 1, gStringVar4, BagMenu_InitListsMenu);
+ DisplayItemMessage(taskId, 1, gStringVar4, CloseItemMessage);
}
else
{
@@ -662,7 +662,7 @@ void ItemUseOutOfBattle_PowderJar(u8 taskId)
if (!gTasks[taskId].tUsingRegisteredKeyItem)
{
- DisplayItemMessage(taskId, 1, gStringVar4, BagMenu_InitListsMenu);
+ DisplayItemMessage(taskId, 1, gStringVar4, CloseItemMessage);
}
else
{
@@ -676,7 +676,7 @@ void ItemUseOutOfBattle_Berry(u8 taskId)
{
sItemUseOnFieldCB = ItemUseOnFieldCB_Berry;
gFieldCallback = FieldCB_UseItemOnField;
- gBagMenu->exitCallback = CB2_ReturnToField;
+ gBagMenu->newScreenCallback = CB2_ReturnToField;
Task_FadeAndCloseBagMenu(taskId);
}
else
@@ -801,7 +801,7 @@ static void Task_ShowTMHMContainedMessage(u8 taskId)
static void UseTMHMYesNo(u8 taskId)
{
- BagMenu_YesNo(taskId, 6, &sUseTMHMYesNoFuncTable);
+ BagMenu_YesNo(taskId, ITEMWIN_YESNO_HIGH, &sUseTMHMYesNoFuncTable);
}
static void UseTMHM(u8 taskId)
@@ -818,7 +818,7 @@ static void RemoveUsedItem(void)
if (!InBattlePyramid())
{
UpdatePocketItemList(ItemId_GetPocket(gSpecialVar_ItemId));
- SetInitialScrollAndCursorPositions(ItemId_GetPocket(gSpecialVar_ItemId));
+ UpdatePocketListPosition(ItemId_GetPocket(gSpecialVar_ItemId));
}
else
{
@@ -832,7 +832,7 @@ void ItemUseOutOfBattle_Repel(u8 taskId)
if (VarGet(VAR_REPEL_STEP_COUNT) == 0)
gTasks[taskId].func = Task_StartUseRepel;
else if (!InBattlePyramid())
- DisplayItemMessage(taskId, 1, gText_RepelEffectsLingered, BagMenu_InitListsMenu);
+ DisplayItemMessage(taskId, 1, gText_RepelEffectsLingered, CloseItemMessage);
else
DisplayItemMessageInBattlePyramid(taskId, gText_RepelEffectsLingered, Task_CloseBattlePyramidBagMessage);
}
@@ -856,7 +856,7 @@ static void Task_UseRepel(u8 taskId)
VarSet(VAR_REPEL_STEP_COUNT, ItemId_GetHoldEffectParam(gSpecialVar_ItemId));
RemoveUsedItem();
if (!InBattlePyramid())
- DisplayItemMessage(taskId, 1, gStringVar4, BagMenu_InitListsMenu);
+ DisplayItemMessage(taskId, 1, gStringVar4, CloseItemMessage);
else
DisplayItemMessageInBattlePyramid(taskId, gStringVar4, Task_CloseBattlePyramidBagMessage);
}
@@ -868,7 +868,7 @@ static void Task_UsedBlackWhiteFlute(u8 taskId)
{
PlaySE(SE_GLASS_FLUTE);
if (!InBattlePyramid())
- DisplayItemMessage(taskId, 1, gStringVar4, BagMenu_InitListsMenu);
+ DisplayItemMessage(taskId, 1, gStringVar4, CloseItemMessage);
else
DisplayItemMessageInBattlePyramid(taskId, gStringVar4, Task_CloseBattlePyramidBagMessage);
}
@@ -947,7 +947,7 @@ void ItemUseInBattle_PokeBall(u8 taskId)
}
else if (!InBattlePyramid())
{
- DisplayItemMessage(taskId, 1, gText_BoxFull, BagMenu_InitListsMenu);
+ DisplayItemMessage(taskId, 1, gText_BoxFull, CloseItemMessage);
}
else
DisplayItemMessageInBattlePyramid(taskId, gText_BoxFull, Task_CloseBattlePyramidBagMessage);
@@ -985,7 +985,7 @@ void ItemUseInBattle_StatIncrease(u8 taskId)
if (ExecuteTableBasedItemEffect(&gPlayerParty[partyId], gSpecialVar_ItemId, partyId, 0) != FALSE)
{
if (!InBattlePyramid())
- DisplayItemMessage(taskId, 1, gText_WontHaveEffect, BagMenu_InitListsMenu);
+ DisplayItemMessage(taskId, 1, gText_WontHaveEffect, CloseItemMessage);
else
DisplayItemMessageInBattlePyramid(taskId, gText_WontHaveEffect, Task_CloseBattlePyramidBagMessage);
}
@@ -1000,12 +1000,12 @@ static void ItemUseInBattle_ShowPartyMenu(u8 taskId)
{
if (!InBattlePyramid())
{
- gBagMenu->exitCallback = ChooseMonForInBattleItem;
+ gBagMenu->newScreenCallback = ChooseMonForInBattleItem;
Task_FadeAndCloseBagMenu(taskId);
}
else
{
- gPyramidBagMenu->exitCallback = ChooseMonForInBattleItem;
+ gPyramidBagMenu->newScreenCallback = ChooseMonForInBattleItem;
CloseBattlePyramidBag(taskId);
}
}
diff --git a/src/menu.c b/src/menu.c
index 90e7d8c75..d289bb932 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -1097,32 +1097,32 @@ s8 Menu_ProcessInputNoWrapAround_other(void)
return MENU_NOTHING_CHOSEN;
}
-void PrintTextArray(u8 windowId, u8 fontId, u8 left, u8 top, u8 lineHeight, u8 itemCount, const struct MenuAction *strs)
+void PrintTextArray(u8 windowId, u8 fontId, u8 left, u8 top, u8 lineHeight, u8 itemCount, const struct MenuAction *menuActions)
{
u8 i;
for (i = 0; i < itemCount; i++)
{
- AddTextPrinterParameterized(windowId, fontId, strs[i].text, left, (lineHeight * i) + top, 0xFF, NULL);
+ AddTextPrinterParameterized(windowId, fontId, menuActions[i].text, left, (lineHeight * i) + top, 0xFF, NULL);
}
CopyWindowToVram(windowId, 2);
}
-void sub_81987BC(u8 windowId, u8 fontId, u8 left, u8 top, u8 lineHeight, u8 itemCount, const struct MenuAction *strs, u8 a6, u8 a7)
+void sub_81987BC(u8 windowId, u8 fontId, u8 left, u8 top, u8 lineHeight, u8 itemCount, const struct MenuAction *menuActions, u8 a6, u8 a7)
{
u8 i;
for (i = 0; i < itemCount; i++)
{
- AddTextPrinterParameterized5(windowId, fontId, strs[i].text, left, (lineHeight * i) + top, 0xFF, NULL, a6, a7);
+ AddTextPrinterParameterized5(windowId, fontId, menuActions[i].text, left, (lineHeight * i) + top, 0xFF, NULL, a6, a7);
}
CopyWindowToVram(windowId, 2);
}
-void sub_8198854(u8 windowId, u8 fontId, u8 lineHeight, u8 itemCount, const struct MenuAction *strs)
+void sub_8198854(u8 windowId, u8 fontId, u8 lineHeight, u8 itemCount, const struct MenuAction *menuActions)
{
- PrintTextArray(windowId, fontId, GetFontAttribute(fontId, 0), 1, lineHeight, itemCount, strs);
+ PrintTextArray(windowId, fontId, GetFontAttribute(fontId, 0), 1, lineHeight, itemCount, menuActions);
}
-void AddItemMenuActionTextPrinters(u8 windowId, u8 fontId, u8 left, u8 top, u8 letterSpacing, u8 lineHeight, u8 itemCount, const struct MenuAction *strs, const u8 *a8)
+void AddItemMenuActionTextPrinters(u8 windowId, u8 fontId, u8 left, u8 top, u8 letterSpacing, u8 lineHeight, u8 itemCount, const struct MenuAction *menuActions, const u8 *actionIds)
{
u8 i;
struct TextPrinterTemplate printer;
@@ -1140,7 +1140,7 @@ void AddItemMenuActionTextPrinters(u8 windowId, u8 fontId, u8 left, u8 top, u8 l
for (i = 0; i < itemCount; i++)
{
- printer.currentChar = strs[a8[i]].text;
+ printer.currentChar = menuActions[actionIds[i]].text;
printer.y = (lineHeight * i) + top;
printer.currentY = printer.y;
AddTextPrinter(&printer, 0xFF, NULL);
@@ -1149,9 +1149,9 @@ void AddItemMenuActionTextPrinters(u8 windowId, u8 fontId, u8 left, u8 top, u8 l
CopyWindowToVram(windowId, 2);
}
-void sub_81989B8(u8 windowId, u8 fontId, u8 lineHeight, u8 itemCount, const struct MenuAction *strs, const u8 *a5)
+void sub_81989B8(u8 windowId, u8 fontId, u8 lineHeight, u8 itemCount, const struct MenuAction *menuActions, const u8 *actionIds)
{
- AddItemMenuActionTextPrinters(windowId, fontId, GetFontAttribute(fontId, FONTATTR_MAX_LETTER_WIDTH), 1, GetFontAttribute(fontId, FONTATTR_LETTER_SPACING), lineHeight, itemCount, strs, a5);
+ AddItemMenuActionTextPrinters(windowId, fontId, GetFontAttribute(fontId, FONTATTR_MAX_LETTER_WIDTH), 1, GetFontAttribute(fontId, FONTATTR_LETTER_SPACING), lineHeight, itemCount, menuActions, actionIds);
}
void SetWindowTemplateFields(struct WindowTemplate *template, u8 bg, u8 left, u8 top, u8 width, u8 height, u8 paletteNum, u16 baseBlock)
@@ -1224,7 +1224,7 @@ void sub_8198C78(void)
RemoveWindow(sYesNoWindowId);
}
-void sub_8198C94(u8 windowId, u8 fontId, u8 left, u8 top, u8 a4, u8 a5, u8 a6, u8 a7, const struct MenuAction *strs)
+void sub_8198C94(u8 windowId, u8 fontId, u8 left, u8 top, u8 a4, u8 a5, u8 a6, u8 a7, const struct MenuAction *menuActions)
{
u8 i;
u8 j;
@@ -1232,18 +1232,18 @@ void sub_8198C94(u8 windowId, u8 fontId, u8 left, u8 top, u8 a4, u8 a5, u8 a6, u
{
for (j = 0; j < a6; j++)
{
- AddTextPrinterParameterized(windowId, fontId, strs[(i * a6) + j].text, (a4 * j) + left, (a5 * i) + top, 0xFF, NULL);
+ AddTextPrinterParameterized(windowId, fontId, menuActions[(i * a6) + j].text, (a4 * j) + left, (a5 * i) + top, 0xFF, NULL);
}
}
CopyWindowToVram(windowId, 2);
}
-void sub_8198D54(u8 windowId, u8 fontId, u8 a2, u8 a3, u8 a4, u8 a5, const struct MenuAction *strs)
+void sub_8198D54(u8 windowId, u8 fontId, u8 a2, u8 a3, u8 a4, u8 a5, const struct MenuAction *menuActions)
{
- sub_8198C94(windowId, fontId, GetFontAttribute(fontId, 0), 0, a2, a3, a4, a5, strs);
+ sub_8198C94(windowId, fontId, GetFontAttribute(fontId, 0), 0, a2, a3, a4, a5, menuActions);
}
-void PrintMenuActionGrid(u8 windowId, u8 fontId, u8 left, u8 top, u8 optionWidth, u8 horizontalCount, u8 verticalCount, const struct MenuAction *strs, const u8 *strIds)
+void PrintMenuActionGrid(u8 windowId, u8 fontId, u8 left, u8 top, u8 optionWidth, u8 horizontalCount, u8 verticalCount, const struct MenuAction *menuActions, const u8 *actionIds)
{
u8 i;
u8 j;
@@ -1262,7 +1262,7 @@ void PrintMenuActionGrid(u8 windowId, u8 fontId, u8 left, u8 top, u8 optionWidth
{
for (j = 0; j < horizontalCount; j++)
{
- printer.currentChar = strs[strIds[(horizontalCount * i) + j]].text;
+ printer.currentChar = menuActions[actionIds[(horizontalCount * i) + j]].text;
printer.x = (optionWidth * j) + left;
printer.y = (GetFontAttribute(fontId, FONTATTR_MAX_LETTER_HEIGHT) * i) + top;
printer.currentX = printer.x;
@@ -1275,9 +1275,9 @@ void PrintMenuActionGrid(u8 windowId, u8 fontId, u8 left, u8 top, u8 optionWidth
}
// Unused
-static void PrintMenuActionGrid_TopLeft(u8 windowId, u8 fontId, u8 optionWidth, u8 unused, u8 horizontalCount, u8 verticalCount, const struct MenuAction *strs, const u8 *strIds)
+static void PrintMenuActionGrid_TopLeft(u8 windowId, u8 fontId, u8 optionWidth, u8 unused, u8 horizontalCount, u8 verticalCount, const struct MenuAction *menuActions, const u8 *actionIds)
{
- PrintMenuActionGrid(windowId, fontId, GetFontAttribute(fontId, FONTATTR_MAX_LETTER_WIDTH), 0, optionWidth, horizontalCount, verticalCount, strs, strIds);
+ PrintMenuActionGrid(windowId, fontId, GetFontAttribute(fontId, FONTATTR_MAX_LETTER_WIDTH), 0, optionWidth, horizontalCount, verticalCount, menuActions, actionIds);
}
u8 sub_8198F58(u8 windowId, u8 fontId, u8 left, u8 top, u8 a4, u8 cursorHeight, u8 a6, u8 a7, u8 numChoices, u8 a9)
@@ -1597,19 +1597,19 @@ u8 InitMenuInUpperLeftCornerPlaySoundWhenAPressed(u8 windowId, u8 itemCount, u8
return InitMenuInUpperLeftCorner(windowId, itemCount, initialCursorPos, FALSE);
}
-void PrintMenuTable(u8 windowId, u8 itemCount, const struct MenuAction *strs)
+void PrintMenuTable(u8 windowId, u8 itemCount, const struct MenuAction *menuActions)
{
u32 i;
for (i = 0; i < itemCount; i++)
{
- AddTextPrinterParameterized(windowId, 1, strs[i].text, 8, (i * 16) + 1, 0xFF, NULL);
+ AddTextPrinterParameterized(windowId, 1, menuActions[i].text, 8, (i * 16) + 1, 0xFF, NULL);
}
CopyWindowToVram(windowId, 2);
}
-void sub_81995E4(u8 windowId, u8 itemCount, const struct MenuAction *strs, const u8 *a8)
+void sub_81995E4(u8 windowId, u8 itemCount, const struct MenuAction *menuActions, const u8 *actionIds)
{
u8 i;
struct TextPrinterTemplate printer;
@@ -1627,7 +1627,7 @@ void sub_81995E4(u8 windowId, u8 itemCount, const struct MenuAction *strs, const
for (i = 0; i < itemCount; i++)
{
- printer.currentChar = strs[a8[i]].text;
+ printer.currentChar = menuActions[actionIds[i]].text;
printer.y = (i * 16) + 1;
printer.currentY = (i * 16) + 1;
AddTextPrinter(&printer, 0xFF, NULL);
@@ -1661,19 +1661,19 @@ void CreateYesNoMenu(const struct WindowTemplate *window, u16 baseTileNum, u8 pa
InitMenuInUpperLeftCornerPlaySoundWhenAPressed(sYesNoWindowId, 2, initialCursorPos);
}
-void PrintMenuGridTable(u8 windowId, u8 optionWidth, u8 columns, u8 rows, const struct MenuAction *strs)
+void PrintMenuGridTable(u8 windowId, u8 optionWidth, u8 columns, u8 rows, const struct MenuAction *menuActions)
{
u32 i, j;
for (i = 0; i < rows; i++)
{
for (j = 0; j < columns; j++)
- AddTextPrinterParameterized(windowId, 1, strs[(i * columns) + j].text, (optionWidth * j) + 8, (i * 16) + 1, 0xFF, NULL);
+ AddTextPrinterParameterized(windowId, 1, menuActions[(i * columns) + j].text, (optionWidth * j) + 8, (i * 16) + 1, 0xFF, NULL);
}
CopyWindowToVram(windowId, 2);
}
-void sub_819983C(u8 windowId, u8 a4, u8 itemCount, u8 itemCount2, const struct MenuAction *strs, const u8 *a8)
+void sub_819983C(u8 windowId, u8 a4, u8 itemCount, u8 itemCount2, const struct MenuAction *menuActions, const u8 *actionIds)
{
u8 i;
u8 j;
@@ -1692,7 +1692,7 @@ void sub_819983C(u8 windowId, u8 a4, u8 itemCount, u8 itemCount2, const struct M
{
for (j = 0; j < itemCount; j++)
{
- printer.currentChar = strs[a8[(itemCount * i) + j]].text;
+ printer.currentChar = menuActions[actionIds[(itemCount * i) + j]].text;
printer.x = (a4 * j) + 8;
printer.y = (16 * i) + 1;
printer.currentX = printer.x;
diff --git a/src/menu_helpers.c b/src/menu_helpers.c
index dce00e51e..1a257ae8f 100644
--- a/src/menu_helpers.c
+++ b/src/menu_helpers.c
@@ -23,10 +23,10 @@
static void Task_ContinueTaskAfterMessagePrints(u8 taskId);
static void Task_CallYesOrNoCallback(u8 taskId);
-EWRAM_DATA static struct YesNoFuncTable gUnknown_0203A138 = {0};
-EWRAM_DATA static u8 gUnknown_0203A140 = 0;
+EWRAM_DATA static struct YesNoFuncTable sYesNo = {0};
+EWRAM_DATA static u8 sMessageWindowId = 0;
-static TaskFunc gUnknown_0300117C;
+static TaskFunc sMessageNextTask;
static const struct OamData sOamData_SwapLine =
{
@@ -122,17 +122,17 @@ void SetVBlankHBlankCallbacksToNull(void)
SetHBlankCallback(NULL);
}
-void DisplayMessageAndContinueTask(u8 taskId, u8 windowId, u16 arg2, u8 arg3, u8 fontId, u8 textSpeed, const u8 *string, void *taskFunc)
+void DisplayMessageAndContinueTask(u8 taskId, u8 windowId, u16 tileNum, u8 paletteNum, u8 fontId, u8 textSpeed, const u8 *string, void *taskFunc)
{
- gUnknown_0203A140 = windowId;
- DrawDialogFrameWithCustomTileAndPalette(windowId, TRUE, arg2, arg3);
+ sMessageWindowId = windowId;
+ DrawDialogFrameWithCustomTileAndPalette(windowId, TRUE, tileNum, paletteNum);
if (string != gStringVar4)
StringExpandPlaceholders(gStringVar4, string);
gTextFlags.canABSpeedUpPrint = 1;
AddTextPrinterParameterized2(windowId, fontId, gStringVar4, textSpeed, NULL, 2, 1, 3);
- gUnknown_0300117C = taskFunc;
+ sMessageNextTask = taskFunc;
gTasks[taskId].func = Task_ContinueTaskAfterMessagePrints;
}
@@ -144,20 +144,20 @@ bool16 RunTextPrintersRetIsActive(u8 textPrinterId)
static void Task_ContinueTaskAfterMessagePrints(u8 taskId)
{
- if (!RunTextPrintersRetIsActive(gUnknown_0203A140))
- gUnknown_0300117C(taskId);
+ if (!RunTextPrintersRetIsActive(sMessageWindowId))
+ sMessageNextTask(taskId);
}
void DoYesNoFuncWithChoice(u8 taskId, const struct YesNoFuncTable *data)
{
- gUnknown_0203A138 = *data;
+ sYesNo = *data;
gTasks[taskId].func = Task_CallYesOrNoCallback;
}
void CreateYesNoMenuWithCallbacks(u8 taskId, const struct WindowTemplate *template, u8 arg2, u8 arg3, u8 arg4, u16 tileStart, u8 palette, const struct YesNoFuncTable *yesNo)
{
CreateYesNoMenu(template, tileStart, palette, 0);
- gUnknown_0203A138 = *yesNo;
+ sYesNo = *yesNo;
gTasks[taskId].func = Task_CallYesOrNoCallback;
}
@@ -167,12 +167,12 @@ static void Task_CallYesOrNoCallback(u8 taskId)
{
case 0:
PlaySE(SE_SELECT);
- gUnknown_0203A138.yesFunc(taskId);
+ sYesNo.yesFunc(taskId);
break;
case 1:
case MENU_B_PRESSED:
PlaySE(SE_SELECT);
- gUnknown_0203A138.noFunc(taskId);
+ sYesNo.noFunc(taskId);
break;
}
}
@@ -275,11 +275,13 @@ u8 GetLRKeysPressedAndHeld(void)
return 0;
}
-bool8 sub_8122148(u16 itemId)
+bool8 IsHoldingItemAllowed(u16 itemId)
{
+ // Enigma Berry can't be held in link areas
if (itemId != ITEM_ENIGMA_BERRY)
return TRUE;
- else if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(TRADE_CENTER) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRADE_CENTER))
+ else if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(TRADE_CENTER)
+ && gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRADE_CENTER))
return FALSE;
else if (InUnionRoom() != TRUE)
return TRUE;
@@ -356,33 +358,37 @@ void sub_812225C(u16 *scrollOffset, u16 *cursorPos, u8 maxShownItems, u8 numItem
}
}
-void sub_8122298(u16 *arg0, u16 *arg1, u8 arg2, u8 arg3, u8 arg4)
+void SetCursorScrollWithinListBounds(u16 *scrollOffset, u16 *cursorPos, u8 shownItems, u8 totalItems, u8 maxShownItems)
{
u8 i;
- if (arg4 % 2 != 0)
+ if (maxShownItems % 2 != 0)
{
- if ((*arg1) >= arg4 / 2)
+ // Is cursor at least halfway down visible list
+ if (*cursorPos >= maxShownItems / 2)
{
- for (i = 0; i < (*arg1) - (arg4 / 2); i++)
+ for (i = 0; i < *cursorPos - (maxShownItems / 2); i++)
{
- if ((*arg0) + arg2 == arg3)
+ // Stop if reached end of list
+ if (*scrollOffset + shownItems == totalItems)
break;
- (*arg1)--;
- (*arg0)++;
+ (*cursorPos)--;
+ (*scrollOffset)++;
}
}
}
else
{
- if ((*arg1) >= (arg4 / 2) + 1)
+ // Is cursor at least halfway down visible list
+ if (*cursorPos >= (maxShownItems / 2) + 1)
{
- for (i = 0; i <= (*arg1) - (arg4 / 2); i++)
+ for (i = 0; i <= *cursorPos - (maxShownItems / 2); i++)
{
- if ((*arg0) + arg2 == arg3)
+ // Stop if reached end of list
+ if (*scrollOffset + shownItems == totalItems)
break;
- (*arg1)--;
- (*arg0)++;
+ (*cursorPos)--;
+ (*scrollOffset)++;
}
}
}
diff --git a/src/party_menu.c b/src/party_menu.c
index f77703328..757f72d53 100755
--- a/src/party_menu.c
+++ b/src/party_menu.c
@@ -4203,7 +4203,7 @@ static void CB2_ReturnToBagMenu(void)
if (InBattlePyramid() == FALSE)
GoToBagMenu(ITEMMENULOCATION_LAST, POCKETS_COUNT, NULL);
else
- GoToBattlePyramidBagMenu(PYRAMIDBAG_LOC_PREV, gPyramidBagMenuState.callback);
+ GoToBattlePyramidBagMenu(PYRAMIDBAG_LOC_PREV, gPyramidBagMenuState.exitCallback);
}
static void Task_SetSacredAshCB(u8 taskId)
diff --git a/src/strings.c b/src/strings.c
index 4987e32d2..e1a6d2efb 100644
--- a/src/strings.c
+++ b/src/strings.c
@@ -1,6 +1,7 @@
#include "global.h"
#include "strings.h"
#include "battle_pyramid_bag.h"
+#include "item_menu.h"
ALIGNED(4)
const u8 gText_ExpandedPlaceholder_Empty[] = _("");
@@ -255,18 +256,18 @@ const u8 gText_ThePC[] = _("the PC");
const u8 *const gBagMenu_ReturnToStrings[] =
{
- gText_TheField,
- gText_TheBattle,
- gText_ThePokemonList,
- gText_TheShop,
- gText_TheField,
- gText_TheField,
- gText_ThePC,
- gText_TheField,
- gText_TheField,
- gText_TheField,
- gText_TheBattle,
- gText_ThePC
+ [ITEMMENULOCATION_FIELD] = gText_TheField,
+ [ITEMMENULOCATION_BATTLE] = gText_TheBattle,
+ [ITEMMENULOCATION_PARTY] = gText_ThePokemonList,
+ [ITEMMENULOCATION_SHOP] = gText_TheShop,
+ [ITEMMENULOCATION_BERRY_TREE] = gText_TheField,
+ [ITEMMENULOCATION_BERRY_BLENDER_CRUSH] = gText_TheField,
+ [ITEMMENULOCATION_ITEMPC] = gText_ThePC,
+ [ITEMMENULOCATION_FAVOR_LADY] = gText_TheField,
+ [ITEMMENULOCATION_QUIZ_LADY] = gText_TheField,
+ [ITEMMENULOCATION_APPRENTICE] = gText_TheField,
+ [ITEMMENULOCATION_WALLY] = gText_TheBattle,
+ [ITEMMENULOCATION_PCBOX] = gText_ThePC
};
const u8 *const gPyramidBagMenu_ReturnToStrings[] =
@@ -286,15 +287,15 @@ const u8 gText_KeyItemsPocket[] = _("KEY ITEMS");
const u8 *const gPocketNamesStringsTable[] =
{
- gText_ItemsPocket,
- gText_PokeBallsPocket,
- gText_TMHMPocket,
- gText_BerriesPocket,
- gText_KeyItemsPocket
+ [ITEMS_POCKET] = gText_ItemsPocket,
+ [BALLS_POCKET] = gText_PokeBallsPocket,
+ [TMHM_POCKET] = gText_TMHMPocket,
+ [BERRIES_POCKET] = gText_BerriesPocket,
+ [KEYITEMS_POCKET] = gText_KeyItemsPocket
};
-const u8 gText_NumberVar1Clear7Var2[] = _("{NO}{STR_VAR_1}{CLEAR 0x07}{STR_VAR_2}");
-const u8 gText_ClearTo11Var1Clear5Var2[] = _("{CLEAR_TO 0x11}{STR_VAR_1}{CLEAR 0x05}{STR_VAR_2}");
+const u8 gText_NumberItem_TMBerry[] = _("{NO}{STR_VAR_1}{CLEAR 0x07}{STR_VAR_2}");
+const u8 gText_NumberItem_HM[] = _("{CLEAR_TO 0x11}{STR_VAR_1}{CLEAR 0x05}{STR_VAR_2}");
const u8 gText_SizeSlash[] = _("SIZE /");
const u8 gText_FirmSlash[] = _("FIRM /");
const u8 gText_Var1DotVar2[] = _("{STR_VAR_1}.{STR_VAR_2}”");