diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/battle_pyramid_bag.c | 791 | ||||
-rw-r--r-- | src/item.c | 3 | ||||
-rwxr-xr-x | src/item_use.c | 6 | ||||
-rw-r--r-- | src/start_menu.c | 9 |
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; } |