summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/battle_pyramid_bag.c791
-rw-r--r--src/item.c3
-rwxr-xr-xsrc/item_use.c6
-rw-r--r--src/start_menu.c9
4 files changed, 498 insertions, 311 deletions
diff --git a/src/battle_pyramid_bag.c b/src/battle_pyramid_bag.c
index 721dfca98..9cb35074b 100644
--- a/src/battle_pyramid_bag.c
+++ b/src/battle_pyramid_bag.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "battle_pyramid_bag.h"
#include "main.h"
#include "battle_controllers.h"
#include "bg.h"
@@ -28,122 +29,202 @@
#include "event_data.h"
#include "text_window.h"
#include "international_string_util.h"
+#include "item_icon.h"
#include "constants/items.h"
#include "constants/rgb.h"
#include "constants/songs.h"
-EWRAM_DATA struct
-{
- MainCallback callback2;
- u8 tilemapBuffer[0x800];
- u8 itemsSpriteIds[PYRAMID_BAG_ITEMS_COUNT + 1];
- u8 windowIds[5];
- u8 unk814;
- u8 unk815;
- u8 unk816;
- const u8 *menuActionIds;
- u8 filler81C;
- u8 filler81D;
- u8 filler81E;
- u8 filler81F;
- u8 menuActionsCount;
- u8 listMenuCount;
- u8 listMenuMaxShown;
- struct ListMenuItem bagListItems[PYRAMID_BAG_ITEMS_COUNT + 1];
- u8 itemStrings[PYRAMID_BAG_ITEMS_COUNT + 1][ITEM_NAME_LENGTH + 10];
- s16 unk984;
- u8 filler986[0x98C - 0x986];
-} *gUnknown_0203CF2C = NULL;
-
-EWRAM_DATA struct
-{
- void (*callback)(void);
- u8 unk4;
- u16 unk6;
- u16 unk8;
-} gUnknown_0203CF30 = {0};
-
-extern const struct BgTemplate gUnknown_0861F2B4[3];
-extern const struct WindowTemplate gUnknown_0861F328[];
-extern const struct WindowTemplate gUnknown_0861F350[];
-extern const struct CompressedSpriteSheet gUnknown_0861F3CC;
-extern const struct ListMenuTemplate gUnknown_0861F2C0;
-extern const u8 gUnknown_0861F310[1];
-extern const u8 gUnknown_0861F308[4];
-extern const u8 gUnknown_0861F30E[2];
-extern const u8 gUnknown_0861F30C[2];
-extern const struct MenuAction gUnknown_0861F2D8[];
-extern const struct YesNoFuncTable gUnknown_0861F314;
+EWRAM_DATA struct PyramidBagResources *gPyramidBagResources = NULL;
+EWRAM_DATA struct PyramidBagCursorData gPyramidBagCursorData = {0};
+
+// gfx
+extern const u8 gUnknown_08D9ADD0[];
+extern const u8 gUnknown_08D9AE04[];
+extern const u8 gUnknown_08D9AF44[];
extern const u16 gUnknown_0860F074[];
-extern const u8 gUnknown_0861F31C[][3];
// This file's functions.
-void sub_81C4F98(u8 a0, void (*callback)(void));
-void sub_81C4F44(u8 taskId);
-void Task_HandlePyramidBagInput(u8 taskId);
-void sub_81C5B4C(u8 taskId);
-void sub_81C67CC(u8 taskId);
-void sub_81C5D20(u8 taskId);
-void sub_81C674C(u8 taskId);
-void sub_81C5FE4(u8 taskId);
-void sub_81C5F68(u8 taskId);
-void sub_81C6714(u8 taskId);
-void sub_81C66EC(u8 taskId);
-void sub_81C629C(u8 taskId);
-void sub_81C6350(u8 taskId);
-void sub_81C64B4(u8 taskId);
-void sub_81C65CC(u8 taskId);
-void sub_81C66AC(u8 taskId);
-void sub_81C6964(u8 taskId);
-void sub_81C68B0(u8 taskId);
-void sub_81C6A14(u8 taskId);
-void sub_81C504C(void);
-bool8 sub_81C5078(void);
-void sub_81C51DC(void);
-bool8 sub_81C5238(void);
-void SetBagItemsListTemplate(void);
-void sub_81C5674(void);
-void sub_81C56F8(void);
-void sub_81C5924(void);
-void sub_81C59BC(void);
-void sub_81C5A20(void);
-void sub_81C6BD8(void);
-void sub_81C6EF4(void);
-void sub_81C700C(void);
-void sub_81C6E98(void);
-void sub_81C6F20(void);
-void sub_81C6404(void);
-void sub_81C6E1C(void);
-void ShowItemImage(u16 itemId, u8 tagIdAdder);
-void PyramidBag_CopyItemName(u8 *dst, u16 itemId);
-void sub_81C6FF8(u8 arg0);
-void PrintItemDescription(s32 listMenuId);
-void sub_81C5AB8(u8 y, u8 arg1);
-void PrintOnWindow_Font1(u8 windowId, const u8 *src, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorTableId);
-void PrintOnWindow_Font7(u8 windowId, const u8 *src, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorTableId);
-u8 sub_81C6D24(u8 windowArrayId);
-void sub_81C6D6C(u8 windowArrayId);
-void sub_81C5EAC(u8 windowId);
-void sub_81C5F08(u8 windowId, u8 horizontalCount, u8 verticalCount);
-bool8 sub_81C616C(s8 arg0);
-void sub_81C6DAC(u8 taskId, const struct YesNoFuncTable *yesNoTable);
-void sub_81C6CEC(u8 windowId);
-void sub_81C704C(u8 arg0);
-void sub_81C7028(u8 arg0);
+static void Task_HandlePyramidBagInput(u8 taskId);
+static void sub_81C4F44(u8 taskId);
+static void sub_81C5B4C(u8 taskId);
+static void Task_BeginItemSwap(u8 taskId);
+static void sub_81C5D20(u8 taskId);
+static void sub_81C674C(u8 taskId);
+static void HandleMenuActionInput(u8 taskId);
+static void HandleFewMenuActionsInput(u8 taskId);
+static void sub_81C66EC(u8 taskId);
+static void SetTaskToMainPyramidBagInputHandler(u8 taskId);
+static void sub_81C6350(u8 taskId);
+static void sub_81C64B4(u8 taskId);
+static void sub_81C65CC(u8 taskId);
+static void sub_81C66AC(u8 taskId);
+static void PerformItemSwap(u8 taskId);
+static void Task_ItemSwapHandleInput(u8 taskId);
+static void sub_81C6A14(u8 taskId);
+static void SetBagItemsListTemplate(void);
+static void sub_81C504C(void);
+static void sub_81C51DC(void);
+static void AddScrollArrow(void);
+static void sub_81C56F8(void);
+static void sub_81C5A20(void);
+static void sub_81C6BD8(void);
+static void sub_81C6EF4(void);
+static void sub_81C700C(void);
+static void sub_81C6E98(void);
+static void sub_81C6F20(void);
+static void sub_81C6404(void);
+static void sub_81C6E1C(void);
+static bool8 sub_81C5238(void);
+static bool8 sub_81C5078(void);
+static void ShowItemImage(u16 itemId, u8 itemSpriteArrayId);
+static void PyramidBag_CopyItemName(u8 *dst, u16 itemId);
+static void sub_81C6FF8(u8 arg0);
+static void PrintItemDescription(s32 listMenuId);
+static void sub_81C5AB8(u8 y, u8 arg1);
+static void PrintOnWindow_Font1(u8 windowId, const u8 *src, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorTableId);
+static void PrintOnWindow_Font7(u8 windowId, const u8 *src, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorTableId);
+static u8 sub_81C6D24(u8 windowArrayId);
+static void sub_81C6D6C(u8 windowArrayId);
+static void sub_81C5EAC(u8 windowId);
+static void sub_81C5F08(u8 windowId, u8 horizontalCount, u8 verticalCount);
+static bool8 IsAValidMenuAction(s8 arg0);
+static void sub_81C6DAC(u8 taskId, const struct YesNoFuncTable *yesNoTable);
+static void sub_81C6CEC(u8 windowId);
+static void sub_81C704C(u8 y);
+static void sub_81C7028(bool8 invisible);
+static void sub_81C6F68(struct Sprite *sprite);
+static void BagAction_UseOnField(u8 taskId);
+static void BagAction_Toss(u8 taskId);
+static void BagAction_Give(u8 taskId);
+static void BagAction_Cancel(u8 taskId);
+static void BagAction_UseInBattle(u8 taskId);
+static void PyramidBagMoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu *list);
+static void PrintItemQuantity(u8 windowId, s32 itemIndex, u8 y);
+static void TossItem(u8 taskId);
+static void DontTossItem(u8 taskId);
+
+// Const rom data.
+static const struct BgTemplate gUnknown_0861F2B4[] =
+{
+ {
+ .bg = 0,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 31,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 1,
+ .baseTile = 0
+ },
+ {
+ .bg = 1,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 30,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 0,
+ .baseTile = 0
+ },
+ {
+ .bg = 2,
+ .charBaseIndex = 3,
+ .mapBaseIndex = 29,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 2,
+ .baseTile = 0
+ },
+};
+
+static const struct ListMenuTemplate gUnknown_0861F2C0 =
+{
+ .items = NULL,
+ .moveCursorFunc = PyramidBagMoveCursorFunc,
+ .itemPrintFunc = PrintItemQuantity,
+ .totalItems = 0,
+ .maxShowed = 0,
+ .windowId = 0,
+ .header_X = 0,
+ .item_X = 8,
+ .cursor_X = 0,
+ .upText_Y = 1,
+ .cursorPal = 2,
+ .fillValue = 0,
+ .cursorShadowPal = 3,
+ .lettersSpacing = 0,
+ .itemVerticalPadding = 0,
+ .scrollMultiple = LIST_NO_MULTIPLE_SCROLL,
+ .fontId = 7,
+ .cursorKind = 0
+};
+
+#define ACTION_USE_FIELD 0
+#define ACTION_TOSS 1
+#define ACTION_GIVE 2
+#define ACTION_CANCEL 3
+#define ACTION_USE_BATTLE 4
+#define ACTION_DUMMY 5
+
+static const struct MenuAction sMenuActions[] =
+{
+ [ACTION_USE_FIELD] = { gMenuText_Use, BagAction_UseOnField },
+ [ACTION_TOSS] = { gMenuText_Toss, BagAction_Toss },
+ [ACTION_GIVE] = { gMenuText_Give, BagAction_Give },
+ [ACTION_CANCEL] = { gText_Cancel2, BagAction_Cancel },
+ [ACTION_USE_BATTLE] = { gMenuText_Use, BagAction_UseInBattle },
+ [ACTION_DUMMY] = { gText_EmptyString2, NULL },
+};
+
+static const u8 sFieldMenuActionIds[] = {ACTION_USE_FIELD, ACTION_GIVE, ACTION_TOSS, ACTION_CANCEL};
+static const u8 gUnknown_0861F30C[] = {ACTION_TOSS, ACTION_CANCEL};
+static const u8 sBattleMenuActionIds[] = {ACTION_USE_BATTLE, ACTION_CANCEL};
+static const u8 gUnknown_0861F310[] = {ACTION_CANCEL};
+
+static const struct YesNoFuncTable sYesNoTossFuncions =
+{
+ TossItem, DontTossItem
+};
+
+static const u8 sColorTable[][3] =
+{
+ {0, 2, 3},
+ {0, 3, 1},
+ {1, 2, 3},
+};
+
+static const struct WindowTemplate gUnknown_0861F328[] =
+{
+ {0x00, 0x0e, 0x02, 0x0f, 0x10, 0x0f, 0x001e},
+ {0x00, 0x00, 0x0d, 0x0e, 0x06, 0x0f, 0x010e},
+ {0x01, 0x02, 0x0f, 0x1b, 0x04, 0x0f, 0x0162},
+ {0x01, 0x18, 0x11, 0x05, 0x02, 0x0f, 0x01ce},
+ DUMMY_WIN_TEMPLATE,
+};
+
+static const struct WindowTemplate gUnknown_0861F350[] =
+{
+ {0x01, 0x16, 0x11, 0x07, 0x02, 0x0f, 0x01d8},
+ {0x01, 0x16, 0x0f, 0x07, 0x04, 0x0f, 0x01d8},
+ {0x01, 0x0f, 0x0f, 0x0e, 0x04, 0x0f, 0x01d8},
+ {0x01, 0x0f, 0x0d, 0x0e, 0x06, 0x0f, 0x01d8},
+ {0x01, 0x18, 0x0f, 0x05, 0x04, 0x0f, 0x01d8},
+};
+
+extern const struct CompressedSpriteSheet gUnknown_0861F3CC;
+extern const struct SpriteTemplate gUnknown_0861F3D4;
// code
void sub_81C4EEC(void)
{
- gUnknown_0203CF30.unk6 = 0;
- gUnknown_0203CF30.unk8 = 0;
+ gPyramidBagCursorData.cursorPosition = 0;
+ gPyramidBagCursorData.scrollPosition = 0;
}
-void sub_81C4EFC(void)
+void CB2_PyramidBagMenuFromStartMenu(void)
{
sub_81C4F98(0, CB2_ReturnToFieldWithOpenMenu);
}
-void sub_81C4F10(void)
+static void sub_81C4F10(void)
{
sub_81C4F98(1, SetCB2ToReshowScreenAfterMenu2);
}
@@ -155,7 +236,7 @@ void sub_81C4F24(void)
CreateTask(sub_81C4F44, 10);
}
-void sub_81C4F44(u8 taskId)
+static void sub_81C4F44(u8 taskId)
{
if (!gPaletteFade.active)
{
@@ -168,30 +249,30 @@ void sub_81C4F44(u8 taskId)
void sub_81C4F84(void)
{
- sub_81C4F98(4, gUnknown_0203CF30.callback);
+ sub_81C4F98(4, gPyramidBagCursorData.callback);
}
void sub_81C4F98(u8 a0, void (*callback)(void))
{
- gUnknown_0203CF2C = AllocZeroed(sizeof(*gUnknown_0203CF2C));
+ gPyramidBagResources = AllocZeroed(sizeof(*gPyramidBagResources));
if (a0 != 4)
- gUnknown_0203CF30.unk4 = a0;
+ gPyramidBagCursorData.unk4 = a0;
if (callback != NULL)
- gUnknown_0203CF30.callback = callback;
+ gPyramidBagCursorData.callback = callback;
- gUnknown_0203CF2C->callback2 = NULL;
- gUnknown_0203CF2C->unk814 = 0xFF;
- gUnknown_0203CF2C->unk816 = 0xFF;
+ gPyramidBagResources->callback2 = NULL;
+ gPyramidBagResources->unk814 = 0xFF;
+ gPyramidBagResources->scrollArrowSpriteId = 0xFF;
- memset(gUnknown_0203CF2C->itemsSpriteIds, 0xFF, sizeof(gUnknown_0203CF2C->itemsSpriteIds));
- memset(gUnknown_0203CF2C->windowIds, 0xFF, sizeof(gUnknown_0203CF2C->windowIds));
+ memset(gPyramidBagResources->itemsSpriteIds, 0xFF, sizeof(gPyramidBagResources->itemsSpriteIds));
+ memset(gPyramidBagResources->windowIds, 0xFF, sizeof(gPyramidBagResources->windowIds));
SetMainCallback2(sub_81C504C);
}
-void sub_81C501C(void)
+static void sub_81C501C(void)
{
RunTasks();
AnimateSprites();
@@ -200,19 +281,19 @@ void sub_81C501C(void)
UpdatePaletteFade();
}
-void sub_81C5038(void)
+static void sub_81C5038(void)
{
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
}
-void sub_81C504C(void)
+static void sub_81C504C(void)
{
while (sub_81221EC() != TRUE && sub_81C5078() != TRUE && sub_81221AC() != TRUE);
}
-bool8 sub_81C5078(void)
+static bool8 sub_81C5078(void)
{
switch (gMain.state)
{
@@ -247,7 +328,7 @@ bool8 sub_81C5078(void)
break;
case 6:
sub_81C51DC();
- gUnknown_0203CF2C->unk984 = 0;
+ gPyramidBagResources->state = 0;
gMain.state++;
break;
case 7:
@@ -279,7 +360,7 @@ bool8 sub_81C5078(void)
gMain.state++;
break;
case 13:
- sub_81C5674();
+ AddScrollArrow();
gMain.state++;
break;
case 14:
@@ -303,12 +384,12 @@ bool8 sub_81C5078(void)
return FALSE;
}
-void sub_81C51DC(void)
+static void sub_81C51DC(void)
{
ResetVramOamAndBgCntRegs();
ResetBgsAndClearDma3BusyFlags(0);
InitBgsFromTemplates(0, gUnknown_0861F2B4, ARRAY_COUNT(gUnknown_0861F2B4));
- SetBgTilemapBuffer(2, gUnknown_0203CF2C->tilemapBuffer);
+ SetBgTilemapBuffer(2, gPyramidBagResources->tilemapBuffer);
ResetAllBgsCoordinates();
schedule_bg_copy_tilemap_to_vram(2);
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
@@ -320,67 +401,64 @@ void sub_81C51DC(void)
SetGpuReg(REG_OFFSET_BLDCNT, 0);
}
-extern const u8 gUnknown_08D9AE04[];
-extern const u8 gUnknown_08D9AF44[];
-
-bool8 sub_81C5238(void)
+static bool8 sub_81C5238(void)
{
- switch (gUnknown_0203CF2C->unk984)
+ switch (gPyramidBagResources->state)
{
case 0:
reset_temp_tile_data_buffers();
decompress_and_copy_tile_data_to_vram(2, gBagScreen_Gfx, 0, 0, 0);
- gUnknown_0203CF2C->unk984++;
+ gPyramidBagResources->state++;
break;
case 1:
if (free_temp_tile_data_buffers_if_possible() != TRUE)
{
- LZDecompressWram(gUnknown_08D9AE04, gUnknown_0203CF2C->tilemapBuffer);
- gUnknown_0203CF2C->unk984++;
+ LZDecompressWram(gUnknown_08D9AE04, gPyramidBagResources->tilemapBuffer);
+ gPyramidBagResources->state++;
}
break;
case 2:
LoadCompressedPalette(gUnknown_08D9AF44, 0, 0x20);
- gUnknown_0203CF2C->unk984++;
+ gPyramidBagResources->state++;
break;
case 3:
LoadCompressedObjectPic(&gUnknown_0861F3CC);
- gUnknown_0203CF2C->unk984++;
+ gPyramidBagResources->state++;
break;
case 4:
sub_81C6E98();
- gUnknown_0203CF2C->unk984++;
+ gPyramidBagResources->state++;
break;
default:
LoadListMenuArrowsGfx();
- gUnknown_0203CF2C->unk984 = 0;
+ gPyramidBagResources->state = 0;
return TRUE;
}
return FALSE;
}
-void SetBagItemsListTemplate(void)
+static void SetBagItemsListTemplate(void)
{
u16 i;
u16 *pyramidItems = gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode];
- for (i = 0; i < gUnknown_0203CF2C->listMenuCount - 1; i++)
+ for (i = 0; i < gPyramidBagResources->listMenuCount - 1; i++)
{
- PyramidBag_CopyItemName(gUnknown_0203CF2C->itemStrings[i], pyramidItems[i]);
- gUnknown_0203CF2C->bagListItems[i].name = gUnknown_0203CF2C->itemStrings[i];
- gUnknown_0203CF2C->bagListItems[i].id = i;
+ PyramidBag_CopyItemName(gPyramidBagResources->itemStrings[i], pyramidItems[i]);
+ gPyramidBagResources->bagListItems[i].name = gPyramidBagResources->itemStrings[i];
+ gPyramidBagResources->bagListItems[i].id = i;
}
- StringCopy(gUnknown_0203CF2C->itemStrings[i], gText_CloseBag);
- gUnknown_0203CF2C->bagListItems[i].name = gUnknown_0203CF2C->itemStrings[i];
- gUnknown_0203CF2C->bagListItems[i].id = LIST_B_PRESSED;
+ StringCopy(gPyramidBagResources->itemStrings[i], gText_CloseBag);
+ gPyramidBagResources->bagListItems[i].name = gPyramidBagResources->itemStrings[i];
+ gPyramidBagResources->bagListItems[i].id = LIST_B_PRESSED;
gMultiuseListMenuTemplate = gUnknown_0861F2C0;
- gMultiuseListMenuTemplate.totalItems = gUnknown_0203CF2C->listMenuCount;
- gMultiuseListMenuTemplate.items = gUnknown_0203CF2C->bagListItems;
- gMultiuseListMenuTemplate.maxShowed = gUnknown_0203CF2C->listMenuMaxShown;
+ gMultiuseListMenuTemplate.totalItems = gPyramidBagResources->listMenuCount;
+ gMultiuseListMenuTemplate.items = gPyramidBagResources->bagListItems;
+ gMultiuseListMenuTemplate.maxShowed = gPyramidBagResources->listMenuMaxShown;
}
-void PyramidBag_CopyItemName(u8 *dst, u16 itemId)
+static void PyramidBag_CopyItemName(u8 *dst, u16 itemId)
{
if (ItemId_GetPocket(itemId) == POCKET_BERRIES)
{
@@ -394,34 +472,34 @@ void PyramidBag_CopyItemName(u8 *dst, u16 itemId)
}
}
-void PyramidBagMoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu *list)
+static void PyramidBagMoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu *list)
{
if (onInit != TRUE)
{
PlaySE(SE_SELECT);
sub_81C6F20();
}
- if (gUnknown_0203CF2C->unk814 == 0xFF)
+ if (gPyramidBagResources->unk814 == 0xFF)
{
- sub_81C6FF8(gUnknown_0203CF2C->unk815 ^ 1);
+ sub_81C6FF8(gPyramidBagResources->unk815 ^ 1);
if (itemIndex != LIST_B_PRESSED)
- ShowItemImage(gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode][itemIndex], gUnknown_0203CF2C->unk815);
+ ShowItemImage(gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode][itemIndex], gPyramidBagResources->unk815);
else
- ShowItemImage(0xFFFF, gUnknown_0203CF2C->unk815);
- gUnknown_0203CF2C->unk815 ^= 1;
+ ShowItemImage(0xFFFF, gPyramidBagResources->unk815);
+ gPyramidBagResources->unk815 ^= 1;
PrintItemDescription(itemIndex);
}
}
-void PrintItemQuantity(u8 windowId, s32 itemIndex, u8 y)
+static void PrintItemQuantity(u8 windowId, s32 itemIndex, u8 y)
{
s32 xAlign;
if (itemIndex == LIST_B_PRESSED)
return;
- if (gUnknown_0203CF2C->unk814 != 0xFF)
+ if (gPyramidBagResources->unk814 != 0xFF)
{
- if (gUnknown_0203CF2C->unk814 == (u8)(itemIndex))
+ if (gPyramidBagResources->unk814 == (u8)(itemIndex))
sub_81C5AB8(y, 1);
else
sub_81C5AB8(y, 0xFF);
@@ -435,7 +513,7 @@ void PrintItemQuantity(u8 windowId, s32 itemIndex, u8 y)
PrintOnWindow_Font7(windowId, gStringVar4, xAlign, y, 0, 0, TEXT_SPEED_FF, 0);
}
-void PrintItemDescription(s32 listMenuId)
+static void PrintItemDescription(s32 listMenuId)
{
const u8 *desc;
if (listMenuId != LIST_B_PRESSED)
@@ -444,7 +522,7 @@ void PrintItemDescription(s32 listMenuId)
}
else
{
- StringCopy(gStringVar1, gReturnToXStringsTable2[gUnknown_0203CF30.unk4]);
+ StringCopy(gStringVar1, gReturnToXStringsTable2[gPyramidBagCursorData.unk4]);
StringExpandPlaceholders(gStringVar4, gText_ReturnToVar1);
desc = gStringVar4;
}
@@ -452,29 +530,29 @@ void PrintItemDescription(s32 listMenuId)
PrintOnWindow_Font1(1, desc, 3, 0, 0, 1, 0, 0);
}
-void sub_81C5674(void)
+static void AddScrollArrow(void)
{
- if (gUnknown_0203CF2C->unk816 == 0xFF)
- gUnknown_0203CF2C->unk816 = AddScrollIndicatorArrowPairParameterized(2, 172, 12, 148, gUnknown_0203CF2C->listMenuCount - gUnknown_0203CF2C->listMenuMaxShown, 0xB5E, 0xB5E, &gUnknown_0203CF30.unk8);
+ if (gPyramidBagResources->scrollArrowSpriteId == 0xFF)
+ gPyramidBagResources->scrollArrowSpriteId = AddScrollIndicatorArrowPairParameterized(2, 172, 12, 148, gPyramidBagResources->listMenuCount - gPyramidBagResources->listMenuMaxShown, 0xB5E, 0xB5E, &gPyramidBagCursorData.scrollPosition);
}
-void sub_81C56CC(void)
+static void RemoveScrollArrow(void)
{
- if (gUnknown_0203CF2C->unk816 != 0xFF)
+ if (gPyramidBagResources->scrollArrowSpriteId != 0xFF)
{
- RemoveScrollIndicatorArrowPair(gUnknown_0203CF2C->unk816);
- gUnknown_0203CF2C->unk816 = 0xFF;
+ RemoveScrollIndicatorArrowPair(gPyramidBagResources->scrollArrowSpriteId);
+ gPyramidBagResources->scrollArrowSpriteId = 0xFF;
}
}
-void sub_81C56F8(void)
+static void sub_81C56F8(void)
{
u8 taskId = CreateTask(Task_HandlePyramidBagInput, 0);
s16 *data = gTasks[taskId].data;
- data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_0203CF30.unk8, gUnknown_0203CF30.unk6);
+ data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gPyramidBagCursorData.scrollPosition, gPyramidBagCursorData.cursorPosition);
}
-void SwapItems(u8 id1, u8 id2)
+static void SwapItems(u8 id1, u8 id2)
{
u16 temp;
u16 *itemIds = gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode];
@@ -484,7 +562,7 @@ void SwapItems(u8 id1, u8 id2)
SWAP(quantities[id1], quantities[id2], temp);
}
-void MovePyramidBagItemSlotInList(u8 from, u8 to)
+static void MovePyramidBagItemSlotInList(u8 from, u8 to)
{
u16 *itemIds = gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode];
u8 *quantities = gSaveBlock2Ptr->frontier.pyramidBag.quantity[gSaveBlock2Ptr->frontier.lvlMode];
@@ -517,7 +595,7 @@ void MovePyramidBagItemSlotInList(u8 from, u8 to)
}
}
-void CompactItems(void)
+static void CompactItems(void)
{
u8 i, j;
u16 *itemIds = gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode];
@@ -547,58 +625,58 @@ void sub_81C5924(void)
u16 *itemIds = gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode];
CompactItems();
- gUnknown_0203CF2C->listMenuCount = 0;
+ gPyramidBagResources->listMenuCount = 0;
for (i = 0; i < PYRAMID_BAG_ITEMS_COUNT; i++)
{
if (itemIds[i] != 0)
- gUnknown_0203CF2C->listMenuCount++;
+ gPyramidBagResources->listMenuCount++;
}
- gUnknown_0203CF2C->listMenuCount++;
- if (gUnknown_0203CF2C->listMenuCount > 8)
- gUnknown_0203CF2C->listMenuMaxShown = 8;
+ gPyramidBagResources->listMenuCount++;
+ if (gPyramidBagResources->listMenuCount > 8)
+ gPyramidBagResources->listMenuMaxShown = 8;
else
- gUnknown_0203CF2C->listMenuMaxShown = gUnknown_0203CF2C->listMenuCount;
+ gPyramidBagResources->listMenuMaxShown = gPyramidBagResources->listMenuCount;
}
void sub_81C59BC(void)
{
- if (gUnknown_0203CF30.unk8 != 0 && gUnknown_0203CF30.unk8 + gUnknown_0203CF2C->listMenuMaxShown > gUnknown_0203CF2C->listMenuCount)
- gUnknown_0203CF30.unk8 = gUnknown_0203CF2C->listMenuCount - gUnknown_0203CF2C->listMenuMaxShown;
- if (gUnknown_0203CF30.unk8 + gUnknown_0203CF30.unk6 >= gUnknown_0203CF2C->listMenuCount)
+ if (gPyramidBagCursorData.scrollPosition != 0 && gPyramidBagCursorData.scrollPosition + gPyramidBagResources->listMenuMaxShown > gPyramidBagResources->listMenuCount)
+ gPyramidBagCursorData.scrollPosition = gPyramidBagResources->listMenuCount - gPyramidBagResources->listMenuMaxShown;
+ if (gPyramidBagCursorData.scrollPosition + gPyramidBagCursorData.cursorPosition >= gPyramidBagResources->listMenuCount)
{
- if (gUnknown_0203CF2C->listMenuCount == 0)
- gUnknown_0203CF30.unk6 = 0;
+ if (gPyramidBagResources->listMenuCount == 0)
+ gPyramidBagCursorData.cursorPosition = 0;
else
- gUnknown_0203CF30.unk6 = gUnknown_0203CF2C->listMenuCount - 1;
+ gPyramidBagCursorData.cursorPosition = gPyramidBagResources->listMenuCount - 1;
}
}
-void sub_81C5A20(void)
+static void sub_81C5A20(void)
{
u8 i;
- if (gUnknown_0203CF30.unk6 > 4)
+ if (gPyramidBagCursorData.cursorPosition > 4)
{
- for (i = 0; i <= gUnknown_0203CF30.unk6 - 4; i++)
+ for (i = 0; i <= gPyramidBagCursorData.cursorPosition - 4; i++)
{
- if (gUnknown_0203CF30.unk8 + gUnknown_0203CF2C->listMenuMaxShown == gUnknown_0203CF2C->listMenuCount)
+ if (gPyramidBagCursorData.scrollPosition + gPyramidBagResources->listMenuMaxShown == gPyramidBagResources->listMenuCount)
{
// daycare.c sends its regards.
break;
}
- gUnknown_0203CF30.unk6--;
- gUnknown_0203CF30.unk8++;
+ gPyramidBagCursorData.cursorPosition--;
+ gPyramidBagCursorData.scrollPosition++;
}
}
}
-void sub_81C5A98(u8 listMenuTaskId, u8 arg1)
+static void sub_81C5A98(u8 listMenuTaskId, u8 arg1)
{
u8 y = ListMenuGetYCoordForPrintingArrowCursor(listMenuTaskId);
sub_81C5AB8(y, arg1);
}
-void sub_81C5AB8(u8 y, u8 arg1)
+static void sub_81C5AB8(u8 y, u8 arg1)
{
if (arg1 == 0xFF)
FillWindowPixelRect(0, 0, 0, y, GetMenuCursorDimensionByFont(1, 0), GetMenuCursorDimensionByFont(1, 1));
@@ -612,46 +690,46 @@ void sub_81C5B14(u8 taskId)
gTasks[taskId].func = sub_81C5B4C;
}
-void sub_81C5B4C(u8 taskId)
+static void sub_81C5B4C(u8 taskId)
{
s16 *data = gTasks[taskId].data;
if (!gPaletteFade.active)
{
- DestroyListMenuTask(data[0], &gUnknown_0203CF30.unk8, &gUnknown_0203CF30.unk6);
- if (gUnknown_0203CF2C->callback2 != NULL)
- SetMainCallback2(gUnknown_0203CF2C->callback2);
+ DestroyListMenuTask(data[0], &gPyramidBagCursorData.scrollPosition, &gPyramidBagCursorData.cursorPosition);
+ if (gPyramidBagResources->callback2 != NULL)
+ SetMainCallback2(gPyramidBagResources->callback2);
else
- SetMainCallback2(gUnknown_0203CF30.callback);
- sub_81C56CC();
+ SetMainCallback2(gPyramidBagCursorData.callback);
+ RemoveScrollArrow();
ResetSpriteData();
FreeAllSpritePalettes();
FreeAllWindowBuffers();
- Free(gUnknown_0203CF2C);
+ Free(gPyramidBagResources);
DestroyTask(taskId);
}
}
-void Task_HandlePyramidBagInput(u8 taskId)
+static void Task_HandlePyramidBagInput(u8 taskId)
{
s16 *data = gTasks[taskId].data;
if (sub_81221EC() != TRUE && !gPaletteFade.active)
{
if (gMain.newKeys & SELECT_BUTTON)
{
- if (gUnknown_0203CF30.unk4 != 2)
+ if (gPyramidBagCursorData.unk4 != 2)
{
- ListMenuGetScrollAndRow(data[0], &gUnknown_0203CF30.unk8, &gUnknown_0203CF30.unk6);
- if (gUnknown_0203CF30.unk8 + gUnknown_0203CF30.unk6 != gUnknown_0203CF2C->listMenuCount - 1)
+ ListMenuGetScrollAndRow(data[0], &gPyramidBagCursorData.scrollPosition, &gPyramidBagCursorData.cursorPosition);
+ if (gPyramidBagCursorData.scrollPosition + gPyramidBagCursorData.cursorPosition != gPyramidBagResources->listMenuCount - 1)
{
PlaySE(SE_SELECT);
- sub_81C67CC(taskId);
+ Task_BeginItemSwap(taskId);
}
}
}
else
{
s32 listId = ListMenuHandleInputGetItemId(data[0]);
- ListMenuGetScrollAndRow(data[0], &gUnknown_0203CF30.unk8, &gUnknown_0203CF30.unk6);
+ ListMenuGetScrollAndRow(data[0], &gPyramidBagCursorData.scrollPosition, &gPyramidBagCursorData.cursorPosition);
switch (listId)
{
case LIST_NOTHING_CHOSEN:
@@ -666,7 +744,7 @@ void Task_HandlePyramidBagInput(u8 taskId)
gSpecialVar_ItemId = gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode][listId];
data[1] = listId;
data[2] = gSaveBlock2Ptr->frontier.pyramidBag.quantity[gSaveBlock2Ptr->frontier.lvlMode][listId];
- if (gUnknown_0203CF30.unk4 == 2)
+ if (gPyramidBagCursorData.unk4 == 2)
sub_81C674C(taskId);
else
sub_81C5D20(taskId);
@@ -676,33 +754,33 @@ void Task_HandlePyramidBagInput(u8 taskId)
}
}
-void sub_81C5D20(u8 taskId)
+static void sub_81C5D20(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- sub_81C56CC();
+ RemoveScrollArrow();
sub_81C5A98(data[0], 1);
- switch (gUnknown_0203CF30.unk4)
+ switch (gPyramidBagCursorData.unk4)
{
default:
- gUnknown_0203CF2C->menuActionIds = gUnknown_0861F308;
- gUnknown_0203CF2C->menuActionsCount = ARRAY_COUNT(gUnknown_0861F308);
+ gPyramidBagResources->menuActionIds = sFieldMenuActionIds;
+ gPyramidBagResources->menuActionsCount = ARRAY_COUNT(sFieldMenuActionIds);
break;
case 1:
if (ItemId_GetBattleUsage(gSpecialVar_ItemId))
{
- gUnknown_0203CF2C->menuActionIds = gUnknown_0861F30E;
- gUnknown_0203CF2C->menuActionsCount = ARRAY_COUNT(gUnknown_0861F30E);
+ gPyramidBagResources->menuActionIds = sBattleMenuActionIds;
+ gPyramidBagResources->menuActionsCount = ARRAY_COUNT(sBattleMenuActionIds);
}
else
{
- gUnknown_0203CF2C->menuActionIds = gUnknown_0861F310;
- gUnknown_0203CF2C->menuActionsCount = ARRAY_COUNT(gUnknown_0861F310);
+ gPyramidBagResources->menuActionIds = gUnknown_0861F310;
+ gPyramidBagResources->menuActionsCount = ARRAY_COUNT(gUnknown_0861F310);
}
break;
case 3:
- gUnknown_0203CF2C->menuActionIds = gUnknown_0861F30C;
- gUnknown_0203CF2C->menuActionsCount = ARRAY_COUNT(gUnknown_0861F30C);
+ gPyramidBagResources->menuActionIds = gUnknown_0861F30C;
+ gPyramidBagResources->menuActionsCount = ARRAY_COUNT(gUnknown_0861F30C);
break;
}
@@ -710,32 +788,32 @@ void sub_81C5D20(u8 taskId)
StringExpandPlaceholders(gStringVar4, gText_Var1IsSelected);
FillWindowPixelBuffer(1, 0);
PrintOnWindow_Font1(1, gStringVar4, 3, 0, 0, 1, 0, 0);
- if (gUnknown_0203CF2C->menuActionsCount == 1)
+ if (gPyramidBagResources->menuActionsCount == 1)
sub_81C5EAC(sub_81C6D24(0));
- else if (gUnknown_0203CF2C->menuActionsCount == 2)
+ else if (gPyramidBagResources->menuActionsCount == 2)
sub_81C5EAC(sub_81C6D24(1));
else
sub_81C5F08(sub_81C6D24(2), 2, 2);
- if (gUnknown_0203CF2C->menuActionsCount == 4)
- gTasks[taskId].func = sub_81C5FE4;
+ if (gPyramidBagResources->menuActionsCount == 4)
+ gTasks[taskId].func = HandleMenuActionInput;
else
- gTasks[taskId].func = sub_81C5F68;
+ gTasks[taskId].func = HandleFewMenuActionsInput;
}
-void sub_81C5EAC(u8 windowId)
+static void sub_81C5EAC(u8 windowId)
{
- AddItemMenuActionTextPrinters(windowId, 7, 8, 1, 0, 0x10, gUnknown_0203CF2C->menuActionsCount, gUnknown_0861F2D8, gUnknown_0203CF2C->menuActionIds);
- InitMenuInUpperLeftCornerPlaySoundWhenAPressed(windowId, gUnknown_0203CF2C->menuActionsCount, 0);
+ AddItemMenuActionTextPrinters(windowId, 7, 8, 1, 0, 0x10, gPyramidBagResources->menuActionsCount, sMenuActions, gPyramidBagResources->menuActionIds);
+ InitMenuInUpperLeftCornerPlaySoundWhenAPressed(windowId, gPyramidBagResources->menuActionsCount, 0);
}
-void sub_81C5F08(u8 windowId, u8 horizontalCount, u8 verticalCount)
+static void sub_81C5F08(u8 windowId, u8 horizontalCount, u8 verticalCount)
{
- sub_8198DBC(windowId, 7, 8, 1, 0x38, horizontalCount, verticalCount, gUnknown_0861F2D8, gUnknown_0203CF2C->menuActionIds);
+ sub_8198DBC(windowId, 7, 8, 1, 0x38, horizontalCount, verticalCount, sMenuActions, gPyramidBagResources->menuActionIds);
sub_8199944(windowId, 0x38, horizontalCount, verticalCount, 0);
}
-void sub_81C5F68(u8 taskId)
+static void HandleFewMenuActionsInput(u8 taskId)
{
if (sub_81221EC() != TRUE)
{
@@ -746,25 +824,25 @@ void sub_81C5F68(u8 taskId)
break;
case -1:
PlaySE(SE_SELECT);
- gUnknown_0861F2D8[3].func.void_u8(taskId);
+ sMenuActions[ACTION_CANCEL].func.void_u8(taskId);
break;
default:
PlaySE(SE_SELECT);
- if (gUnknown_0861F2D8[gUnknown_0203CF2C->menuActionIds[id]].func.void_u8 != NULL)
- gUnknown_0861F2D8[gUnknown_0203CF2C->menuActionIds[id]].func.void_u8(taskId);
+ if (sMenuActions[gPyramidBagResources->menuActionIds[id]].func.void_u8 != NULL)
+ sMenuActions[gPyramidBagResources->menuActionIds[id]].func.void_u8(taskId);
break;
}
}
}
-void sub_81C5FE4(u8 taskId)
+static void HandleMenuActionInput(u8 taskId)
{
if (sub_81221EC() != TRUE)
{
s8 id = GetMenuCursorPos();
if (gMain.newKeys & DPAD_UP)
{
- if (id > 0 && sub_81C616C(id - 2))
+ if (id > 0 && IsAValidMenuAction(id - 2))
{
PlaySE(SE_SELECT);
sub_8199134(0, -1);
@@ -772,7 +850,7 @@ void sub_81C5FE4(u8 taskId)
}
else if (gMain.newKeys & DPAD_DOWN)
{
- if (id < gUnknown_0203CF2C->menuActionsCount - 2 && sub_81C616C(id + 2))
+ if (id < gPyramidBagResources->menuActionsCount - 2 && IsAValidMenuAction(id + 2))
{
PlaySE(SE_SELECT);
sub_8199134(0, 1);
@@ -780,7 +858,7 @@ void sub_81C5FE4(u8 taskId)
}
else if (gMain.newKeys & DPAD_LEFT || GetLRKeysState() == 1)
{
- if (id & 1 && sub_81C616C(id - 1))
+ if (id & 1 && IsAValidMenuAction(id - 1))
{
PlaySE(SE_SELECT);
sub_8199134(-1, 0);
@@ -788,7 +866,7 @@ void sub_81C5FE4(u8 taskId)
}
else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysState() == 2)
{
- if (!(id & 1) && sub_81C616C(id + 1))
+ if (!(id & 1) && IsAValidMenuAction(id + 1))
{
PlaySE(SE_SELECT);
sub_8199134(1, 0);
@@ -797,40 +875,40 @@ void sub_81C5FE4(u8 taskId)
else if (gMain.newKeys & A_BUTTON)
{
PlaySE(SE_SELECT);
- if (gUnknown_0861F2D8[gUnknown_0203CF2C->menuActionIds[id]].func.void_u8 != NULL)
- gUnknown_0861F2D8[gUnknown_0203CF2C->menuActionIds[id]].func.void_u8(taskId);
+ if (sMenuActions[gPyramidBagResources->menuActionIds[id]].func.void_u8 != NULL)
+ sMenuActions[gPyramidBagResources->menuActionIds[id]].func.void_u8(taskId);
}
else if (gMain.newKeys & B_BUTTON)
{
PlaySE(SE_SELECT);
- gUnknown_0861F2D8[3].func.void_u8(taskId);
+ sMenuActions[ACTION_CANCEL].func.void_u8(taskId);
}
}
}
-bool8 sub_81C616C(s8 arg0)
+static bool8 IsAValidMenuAction(s8 actionTableId)
{
- if (arg0 < 0)
+ if (actionTableId < 0)
return FALSE;
- else if (arg0 > gUnknown_0203CF2C->menuActionsCount)
+ else if (actionTableId > gPyramidBagResources->menuActionsCount)
return FALSE;
- else if (gUnknown_0203CF2C->menuActionIds[arg0] == 5)
+ else if (gPyramidBagResources->menuActionIds[actionTableId] == ACTION_DUMMY)
return FALSE;
else
return TRUE;
}
-void sub_81C61A8(void)
+static void sub_81C61A8(void)
{
- if (gUnknown_0203CF2C->menuActionsCount == 1)
+ if (gPyramidBagResources->menuActionsCount == 1)
sub_81C6D6C(0);
- else if (gUnknown_0203CF2C->menuActionsCount == 2)
+ else if (gPyramidBagResources->menuActionsCount == 2)
sub_81C6D6C(1);
else
sub_81C6D6C(2);
}
-void sub_81C61E0(u8 taskId)
+static void BagAction_UseOnField(u8 taskId)
{
u8 pocketId = ItemId_GetPocket(gSpecialVar_ItemId);
@@ -851,7 +929,7 @@ void sub_81C61E0(u8 taskId)
}
}
-void sub_81C6258(u8 taskId)
+static void BagAction_Cancel(u8 taskId)
{
s16 *data = gTasks[taskId].data;
@@ -860,16 +938,16 @@ void sub_81C6258(u8 taskId)
schedule_bg_copy_tilemap_to_vram(0);
schedule_bg_copy_tilemap_to_vram(1);
sub_81C5A98(data[0], 0);
- sub_81C629C(taskId);
+ SetTaskToMainPyramidBagInputHandler(taskId);
}
-void sub_81C629C(u8 taskId)
+static void SetTaskToMainPyramidBagInputHandler(u8 taskId)
{
- sub_81C5674();
+ AddScrollArrow();
gTasks[taskId].func = Task_HandlePyramidBagInput;
}
-void sub_81C62C4(u8 taskId)
+static void BagAction_Toss(u8 taskId)
{
s16 *data = gTasks[taskId].data;
@@ -890,7 +968,7 @@ void sub_81C62C4(u8 taskId)
}
}
-void sub_81C6350(u8 taskId)
+static void sub_81C6350(u8 taskId)
{
s16 *data = gTasks[taskId].data;
@@ -899,19 +977,19 @@ void sub_81C6350(u8 taskId)
StringExpandPlaceholders(gStringVar4, gText_ConfirmTossItems);
FillWindowPixelBuffer(1, 0);
PrintOnWindow_Font1(1, gStringVar4, 3, 0, 0, 1, 0, 0);
- sub_81C6DAC(taskId, &gUnknown_0861F314);
+ sub_81C6DAC(taskId, &sYesNoTossFuncions);
}
-void sub_81C63D0(u8 taskId)
+static void DontTossItem(u8 taskId)
{
s16 *data = gTasks[taskId].data;
PrintItemDescription(data[1]);
sub_81C5A98(data[0], 0);
- sub_81C629C(taskId);
+ SetTaskToMainPyramidBagInputHandler(taskId);
}
-void sub_81C6404(void)
+static void sub_81C6404(void)
{
s32 x;
@@ -922,7 +1000,7 @@ void sub_81C6404(void)
PrintTextOnWindow(3, 1, gStringVar4, x, 2, 0, NULL);
}
-void sub_81C645C(s16 value)
+static void sub_81C645C(s16 value)
{
s32 x;
@@ -932,7 +1010,7 @@ void sub_81C645C(s16 value)
PrintTextOnWindow(3, 1, gStringVar4, x, 2, 0, NULL);
}
-void sub_81C64B4(u8 taskId)
+static void sub_81C64B4(u8 taskId)
{
s16 *data = gTasks[taskId].data;
@@ -954,11 +1032,11 @@ void sub_81C64B4(u8 taskId)
sub_8198070(3, 0);
ClearWindowTilemap(3);
schedule_bg_copy_tilemap_to_vram(1);
- sub_81C63D0(taskId);
+ DontTossItem(taskId);
}
}
-void sub_81C654C(u8 taskId)
+static void TossItem(u8 taskId)
{
s16 *data = gTasks[taskId].data;
@@ -970,11 +1048,11 @@ void sub_81C654C(u8 taskId)
gTasks[taskId].func = sub_81C65CC;
}
-void sub_81C65CC(u8 taskId)
+static void sub_81C65CC(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- u16 *scrollOffset = &gUnknown_0203CF30.unk8;
- u16 *selectedRow = &gUnknown_0203CF30.unk6;
+ u16 *scrollOffset = &gPyramidBagCursorData.scrollPosition;
+ u16 *selectedRow = &gPyramidBagCursorData.cursorPosition;
if (gMain.newKeys & (A_BUTTON | B_BUTTON))
{
@@ -986,11 +1064,11 @@ void sub_81C65CC(u8 taskId)
SetBagItemsListTemplate();
data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollOffset, *selectedRow);
schedule_bg_copy_tilemap_to_vram(0);
- sub_81C629C(taskId);
+ SetTaskToMainPyramidBagInputHandler(taskId);
}
}
-void sub_81C6648(u8 taskId)
+static void BagAction_Give(u8 taskId)
{
sub_81C61A8();
if (ItemIsMail(gSpecialVar_ItemId) == TRUE)
@@ -999,7 +1077,7 @@ void sub_81C6648(u8 taskId)
}
else if (!ItemId_GetImportance(gSpecialVar_ItemId))
{
- gUnknown_0203CF2C->callback2 = sub_81B7F60;
+ gPyramidBagResources->callback2 = sub_81B7F60;
sub_81C5B14(taskId);
}
else
@@ -1008,14 +1086,14 @@ void sub_81C6648(u8 taskId)
}
}
-void sub_81C66AC(u8 taskId)
+static void sub_81C66AC(u8 taskId)
{
CopyItemName(gSpecialVar_ItemId, gStringVar1);
StringExpandPlaceholders(gStringVar4, gText_Var1CantBeHeld);
DisplayItemMessageInBattlePyramid(taskId, gStringVar4, sub_81C66EC);
}
-void sub_81C66EC(u8 taskId)
+static void sub_81C66EC(u8 taskId)
{
if (gMain.newKeys & A_BUTTON)
{
@@ -1031,10 +1109,10 @@ void sub_81C6714(u8 taskId)
sub_81C6E1C();
PrintItemDescription(data[1]);
sub_81C5A98(data[0], 0);
- sub_81C629C(taskId);
+ SetTaskToMainPyramidBagInputHandler(taskId);
}
-void sub_81C674C(u8 taskId)
+static void sub_81C674C(u8 taskId)
{
if (!itemid_80BF6D8_mail_related(gSpecialVar_ItemId))
DisplayItemMessageInBattlePyramid(taskId, gText_CantWriteMail, sub_81C66EC);
@@ -1044,7 +1122,7 @@ void sub_81C674C(u8 taskId)
sub_81C66AC(taskId);
}
-void sub_81C679C(u8 taskId)
+static void BagAction_UseInBattle(u8 taskId)
{
if (ItemId_GetBattleFunc(gSpecialVar_ItemId) != NULL)
{
@@ -1053,12 +1131,12 @@ void sub_81C679C(u8 taskId)
}
}
-void sub_81C67CC(u8 taskId)
+static void Task_BeginItemSwap(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- data[1] = gUnknown_0203CF30.unk8 + gUnknown_0203CF30.unk6;
- gUnknown_0203CF2C->unk814 = data[1];
+ data[1] = gPyramidBagCursorData.scrollPosition + gPyramidBagCursorData.cursorPosition;
+ gPyramidBagResources->unk814 = data[1];
ListMenuSetUnkIndicatorsStructField(data[0], 0x10, 1);
CopyItemName(gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode][data[1]], gStringVar1);
StringExpandPlaceholders(gStringVar4, gText_MoveVar1Where);
@@ -1066,10 +1144,10 @@ void sub_81C67CC(u8 taskId)
PrintOnWindow_Font1(1, gStringVar4, 3, 0, 0, 1, 0, 0);
sub_81C5A98(data[0], 1);
sub_81C704C(data[1]);
- gTasks[taskId].func = sub_81C68B0;
+ gTasks[taskId].func = Task_ItemSwapHandleInput;
}
-void sub_81C68B0(u8 taskId)
+static void Task_ItemSwapHandleInput(u8 taskId)
{
s16 *data = gTasks[taskId].data;
if (sub_81221EC() != TRUE)
@@ -1077,15 +1155,15 @@ void sub_81C68B0(u8 taskId)
if (gMain.newKeys & SELECT_BUTTON)
{
PlaySE(SE_SELECT);
- ListMenuGetScrollAndRow(data[0], &gUnknown_0203CF30.unk8, &gUnknown_0203CF30.unk6);
- sub_81C6964(taskId);
+ ListMenuGetScrollAndRow(data[0], &gPyramidBagCursorData.scrollPosition, &gPyramidBagCursorData.cursorPosition);
+ PerformItemSwap(taskId);
}
else
{
s32 id = ListMenuHandleInputGetItemId(data[0]);
- ListMenuGetScrollAndRow(data[0], &gUnknown_0203CF30.unk8, &gUnknown_0203CF30.unk6);
- sub_81C7028(0);
- sub_81C704C(gUnknown_0203CF30.unk6);
+ ListMenuGetScrollAndRow(data[0], &gPyramidBagCursorData.scrollPosition, &gPyramidBagCursorData.cursorPosition);
+ sub_81C7028(FALSE);
+ sub_81C704C(gPyramidBagCursorData.cursorPosition);
switch (id)
{
case LIST_NOTHING_CHOSEN:
@@ -1093,24 +1171,24 @@ void sub_81C68B0(u8 taskId)
case LIST_B_PRESSED:
PlaySE(SE_SELECT);
if (gMain.newKeys & A_BUTTON)
- sub_81C6964(taskId);
+ PerformItemSwap(taskId);
else
sub_81C6A14(taskId);
break;
default:
PlaySE(SE_SELECT);
- sub_81C6964(taskId);
+ PerformItemSwap(taskId);
break;
}
}
}
}
-void sub_81C6964(u8 taskId)
+static void PerformItemSwap(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- u16 *scrollOffset = &gUnknown_0203CF30.unk8;
- u16 *selectedRow = &gUnknown_0203CF30.unk6;
+ u16 *scrollOffset = &gPyramidBagCursorData.scrollPosition;
+ u16 *selectedRow = &gPyramidBagCursorData.cursorPosition;
u16 var = *scrollOffset + *selectedRow;
if (data[1] == var || data[1] == var - 1)
@@ -1120,31 +1198,31 @@ void sub_81C6964(u8 taskId)
else
{
MovePyramidBagItemSlotInList(data[1], var);
- gUnknown_0203CF2C->unk814 = 0xFF;
- sub_81C7028(1);
+ gPyramidBagResources->unk814 = 0xFF;
+ sub_81C7028(TRUE);
DestroyListMenuTask(data[0], scrollOffset, selectedRow);
if (data[1] < var)
- gUnknown_0203CF30.unk6--;
+ gPyramidBagCursorData.cursorPosition--;
SetBagItemsListTemplate();
data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollOffset, *selectedRow);
- sub_81C629C(taskId);
+ SetTaskToMainPyramidBagInputHandler(taskId);
}
}
-void sub_81C6A14(u8 taskId)
+static void sub_81C6A14(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- u16 *scrollOffset = &gUnknown_0203CF30.unk8;
- u16 *selectedRow = &gUnknown_0203CF30.unk6;
+ u16 *scrollOffset = &gPyramidBagCursorData.scrollPosition;
+ u16 *selectedRow = &gPyramidBagCursorData.cursorPosition;
- gUnknown_0203CF2C->unk814 = 0xFF;
- sub_81C7028(1);
+ gPyramidBagResources->unk814 = 0xFF;
+ sub_81C7028(TRUE);
DestroyListMenuTask(data[0], scrollOffset, selectedRow);
if (data[1] < *scrollOffset + *selectedRow)
- gUnknown_0203CF30.unk6--;
+ gPyramidBagCursorData.cursorPosition--;
SetBagItemsListTemplate();
data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollOffset, *selectedRow);
- sub_81C629C(taskId);
+ SetTaskToMainPyramidBagInputHandler(taskId);
}
void sub_81C6A94(void)
@@ -1181,7 +1259,7 @@ void sub_81C6A94(void)
Free(newQuantities);
}
-void sub_81C6BD8(void)
+static void sub_81C6BD8(void)
{
u8 i;
@@ -1200,30 +1278,30 @@ void sub_81C6BD8(void)
schedule_bg_copy_tilemap_to_vram(1);
}
-void PrintOnWindow_Font1(u8 windowId, const u8 *src, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorTableId)
+static void PrintOnWindow_Font1(u8 windowId, const u8 *src, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorTableId)
{
- AddTextPrinterParameterized2(windowId, 1, x, y, letterSpacing, lineSpacing, gUnknown_0861F31C[colorTableId], speed, src);
+ AddTextPrinterParameterized2(windowId, 1, x, y, letterSpacing, lineSpacing, sColorTable[colorTableId], speed, src);
}
-void PrintOnWindow_Font7(u8 windowId, const u8 *src, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorTableId)
+static void PrintOnWindow_Font7(u8 windowId, const u8 *src, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorTableId)
{
- AddTextPrinterParameterized2(windowId, 7, x, y, letterSpacing, lineSpacing, gUnknown_0861F31C[colorTableId], speed, src);
+ AddTextPrinterParameterized2(windowId, 7, x, y, letterSpacing, lineSpacing, sColorTable[colorTableId], speed, src);
}
-void sub_81C6CEC(u8 windowId)
+static void sub_81C6CEC(u8 windowId)
{
SetWindowBorderStyle(windowId, 0, 1, 0xE);
schedule_bg_copy_tilemap_to_vram(1);
}
-u8 sub_81C6D08(u8 windowArrayId)
+static u8 sub_81C6D08(u8 windowArrayId)
{
- return gUnknown_0203CF2C->windowIds[windowArrayId];
+ return gPyramidBagResources->windowIds[windowArrayId];
}
-u8 sub_81C6D24(u8 windowArrayId)
+static u8 sub_81C6D24(u8 windowArrayId)
{
- u8 *windowId = &gUnknown_0203CF2C->windowIds[windowArrayId];
+ u8 *windowId = &gPyramidBagResources->windowIds[windowArrayId];
if (*windowId == 0xFF)
{
*windowId = AddWindow(&gUnknown_0861F350[windowArrayId]);
@@ -1233,9 +1311,9 @@ u8 sub_81C6D24(u8 windowArrayId)
return *windowId;
}
-void sub_81C6D6C(u8 windowArrayId)
+static void sub_81C6D6C(u8 windowArrayId)
{
- u8 *windowId = &gUnknown_0203CF2C->windowIds[windowArrayId];
+ u8 *windowId = &gPyramidBagResources->windowIds[windowArrayId];
if (*windowId != 0xFF)
{
sub_8198070(*windowId, FALSE);
@@ -1245,3 +1323,112 @@ void sub_81C6D6C(u8 windowArrayId)
*windowId = 0xFF;
}
}
+
+static void sub_81C6DAC(u8 taskId, const struct YesNoFuncTable *yesNoTable)
+{
+ CreateYesNoMenuWithCallbacks(taskId, &gUnknown_0861F350[4], 1, 0, 2, 1, 0xE, yesNoTable);
+}
+
+void DisplayItemMessageInBattlePyramid(u8 taskId, const u8 *str, void (*callback)(u8 taskId))
+{
+ FillWindowPixelBuffer(2, 0x11);
+ DisplayMessageAndContinueTask(taskId, 2, 0xA, 0xD, 1, GetPlayerTextSpeed(), str, callback);
+ schedule_bg_copy_tilemap_to_vram(1);
+}
+
+static void sub_81C6E1C(void)
+{
+ sub_8197DF8(2, FALSE);
+ ClearWindowTilemap(2);
+ schedule_bg_copy_tilemap_to_vram(1);
+}
+
+#define ITEM_IMAGE_TAG 0x1024
+
+static void sub_81C6E38(u8 itemSpriteArrayId)
+{
+ u8 *spriteId = &gPyramidBagResources->itemsSpriteIds[itemSpriteArrayId];
+ if (*spriteId != 0xFF)
+ {
+ FreeSpriteTilesByTag(ITEM_IMAGE_TAG + itemSpriteArrayId);
+ FreeSpritePaletteByTag(ITEM_IMAGE_TAG + itemSpriteArrayId);
+ FreeSpriteOamMatrix(&gSprites[*spriteId]);
+ DestroySprite(&gSprites[*spriteId]);
+ *spriteId = 0xFF;
+ }
+}
+
+static void sub_81C6E98(void)
+{
+ struct SpritePalette spritePalette;
+ u16 *palPtr = Alloc(0x40);
+
+ LZDecompressWram(gUnknown_08D9ADD0, palPtr);
+ spritePalette.data = palPtr + (gSaveBlock2Ptr->frontier.lvlMode * 16);
+ spritePalette.tag = ITEM_IMAGE_TAG;
+ LoadSpritePalette(&spritePalette);
+ Free(palPtr);
+}
+
+static void sub_81C6EF4(void)
+{
+ u8 *spriteId = &gPyramidBagResources->itemsSpriteIds[0];
+ *spriteId = CreateSprite(&gUnknown_0861F3D4, 0x44, 0x38, 0);
+}
+
+static void sub_81C6F20(void)
+{
+ struct Sprite *sprite = &gSprites[gPyramidBagResources->itemsSpriteIds[0]];
+ if (sprite->affineAnimEnded)
+ {
+ StartSpriteAffineAnim(sprite, 1);
+ sprite->callback = sub_81C6F68;
+ }
+}
+
+static void sub_81C6F68(struct Sprite *sprite)
+{
+ if (sprite->affineAnimEnded)
+ {
+ StartSpriteAffineAnim(sprite, 0);
+ sprite->callback = SpriteCallbackDummy;
+ }
+}
+
+static void ShowItemImage(u16 itemId, u8 itemSpriteArrayId)
+{
+ u8 itemSpriteId;
+ u8 *spriteId = &gPyramidBagResources->itemsSpriteIds[itemSpriteArrayId + 1];
+ if (*spriteId == 0xFF)
+ {
+ FreeSpriteTilesByTag(ITEM_IMAGE_TAG + 1 + itemSpriteArrayId);
+ FreeSpritePaletteByTag(ITEM_IMAGE_TAG + 1 + itemSpriteArrayId);
+ itemSpriteId = AddItemIconSprite(ITEM_IMAGE_TAG + 1 + itemSpriteArrayId, ITEM_IMAGE_TAG + 1 + itemSpriteArrayId, itemId);
+ if (itemSpriteId != MAX_SPRITES)
+ {
+ *spriteId = itemSpriteId;
+ gSprites[itemSpriteId].pos2.x = 24;
+ gSprites[itemSpriteId].pos2.y = 88;
+ }
+ }
+}
+
+static void sub_81C6FF8(u8 itemSpriteArrayId)
+{
+ sub_81C6E38(itemSpriteArrayId + 1);
+}
+
+static void sub_81C700C(void)
+{
+ sub_8122344(&gPyramidBagResources->itemsSpriteIds[3], 8);
+}
+
+static void sub_81C7028(bool8 invisible)
+{
+ sub_81223FC(&gPyramidBagResources->itemsSpriteIds[3], 8, invisible);
+}
+
+static void sub_81C704C(u8 y)
+{
+ sub_8122448(&gPyramidBagResources->itemsSpriteIds[3], 8 | 0x80, 120, (y + 1) * 16);
+}
diff --git a/src/item.c b/src/item.c
index 29c250989..3866d7316 100644
--- a/src/item.c
+++ b/src/item.c
@@ -10,6 +10,7 @@
#include "item_menu.h"
#include "strings.h"
#include "load_save.h"
+#include "battle_pyramid_bag.h"
extern bool8 InBattlePyramid(void);
extern u16 gUnknown_0203CF30[];
@@ -965,7 +966,7 @@ bool8 RemovePyramidBagItem(u16 itemId, u16 count)
u16 *items = gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode];
u8 *quantities = gSaveBlock2Ptr->frontier.pyramidBag.quantity[gSaveBlock2Ptr->frontier.lvlMode];
- i = gUnknown_0203CF30[3] + gUnknown_0203CF30[4];
+ i = gPyramidBagCursorData.cursorPosition + gPyramidBagCursorData.scrollPosition;
if (items[i] == itemId && quantities[i] >= count)
{
quantities[i] -= count;
diff --git a/src/item_use.c b/src/item_use.c
index 23c829391..bf7c2a386 100755
--- a/src/item_use.c
+++ b/src/item_use.c
@@ -33,8 +33,8 @@
#include "pokeblock.h"
#include "menu.h"
#include "item_menu.h"
+#include "battle_pyramid_bag.h"
-extern void(**gUnknown_0203CF2C)(void);
extern void(*gUnknown_0203A0F4)(u8 taskId);
extern void(*gUnknown_085920D8[])(void);
extern void (*gUnknown_03006328)(u8, u16, TaskFunc);
@@ -122,7 +122,7 @@ void SetUpItemUseCallback(u8 taskId)
}
else
{
- *gUnknown_0203CF2C = gUnknown_085920D8[type];
+ gPyramidBagResources->callback2 = gUnknown_085920D8[type];
sub_81C5B14(taskId);
}
}
@@ -987,7 +987,7 @@ void sub_80FE54C(u8 taskId)
}
else
{
- *gUnknown_0203CF2C = sub_81B89F0;
+ gPyramidBagResources->callback2 = sub_81B89F0;
sub_81C5B14(taskId);
}
}
diff --git a/src/start_menu.c b/src/start_menu.c
index 60271317a..4a58c146e 100644
--- a/src/start_menu.c
+++ b/src/start_menu.c
@@ -33,6 +33,7 @@
#include "international_string_util.h"
#include "constants/songs.h"
#include "field_player_avatar.h"
+#include "battle_pyramid_bag.h"
// Menu actions
enum
@@ -73,12 +74,11 @@ EWRAM_DATA static u8 sSaveDialogTimer = 0;
EWRAM_DATA static bool8 sSavingComplete = FALSE;
EWRAM_DATA static u8 sSaveInfoWindowId = 0;
-// Extern variables
+// Extern variables.
extern u8 gDifferentSaveFile;
-extern u16 gSaveFileStatus;
extern u8 gUnknown_03005DB4;
-// Extern functions in uncompiled files
+// Extern functions in not decompiled files.
extern void sub_80AF688(void);
extern void var_800D_set_xB(void);
extern void sub_808B864(void);
@@ -89,7 +89,6 @@ extern void CB2_PokeNav(void);
extern void sub_80C4DDC(void (*)(void));
extern void sub_80C51C4(void (*)(void));
extern void sub_80C4E74(u8, void (*)(void));
-extern void sub_81C4EFC(void);
extern void ScriptUnfreezeEventObjects(void);
extern void sub_81A9EC8(void);
extern void save_serialize_map(void);
@@ -781,7 +780,7 @@ static bool8 StartMenuBattlePyramidBagCallback(void)
play_some_sound();
RemoveExtraStartMenuWindows();
overworld_free_bg_tilemaps();
- SetMainCallback2(sub_81C4EFC); // Display battle pyramid bag
+ SetMainCallback2(CB2_PyramidBagMenuFromStartMenu);
return TRUE;
}