summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@users.noreply.github.com>2019-06-17 13:46:53 -0400
committerGitHub <noreply@github.com>2019-06-17 13:46:53 -0400
commite3de3422a8ab5225e6ecffec38c19cac89d17915 (patch)
treee12eddb9a126083e308968b56ce69d6dd85c42aa /src
parente28c7676126d31efa690f686152be19d5b62f743 (diff)
parent2b750cf44491aee3b2fe8265afb4ac6620500afa (diff)
Merge pull request #69 from pret/item_pc
Item pc
Diffstat (limited to 'src')
-rw-r--r--src/bag.c10
-rw-r--r--src/coins.c4
-rw-r--r--src/fldeff_softboiled.c2
-rw-r--r--src/item_pc.c1150
-rw-r--r--src/money.c4
-rw-r--r--src/oak_speech.c6
-rw-r--r--src/quest_log.c34
-rw-r--r--src/text_window.c24
-rw-r--r--src/text_window_graphics.c12
-rw-r--r--src/tm_case.c40
-rw-r--r--src/trainer_tower.c2
-rw-r--r--src/unk_815EDDC.c6
-rw-r--r--src/vs_seeker.c2
-rw-r--r--src/window.c2
14 files changed, 1224 insertions, 74 deletions
diff --git a/src/bag.c b/src/bag.c
index 6f0badd81..f2fc40d93 100644
--- a/src/bag.c
+++ b/src/bag.c
@@ -210,9 +210,9 @@ void sub_810B858(void)
else
InitWindows(gUnknown_84530E4);
DeactivateAllTextPrinters();
- sub_815001C(0, 0x64, 0xE0);
- sub_814FEAC(0, 0x6D, 0xD0);
- sub_814FF2C(0, 0x81, 0xC0);
+ TextWindow_SetUserSelectedFrame(0, 0x64, 0xE0);
+ TextWindow_SetBubbleFrame_841F1C8(0, 0x6D, 0xD0);
+ TextWindow_SetStdFrame0_WithPal(0, 0x81, 0xC0);
LoadPalette(gUnknown_8453098, 0xF0, 0x20);
for (i = 0; i < 3; i++)
{
@@ -265,7 +265,7 @@ u8 sub_810B9DC(u8 a0, u8 a1)
void sub_810BA3C(u8 a0)
{
- sub_810F4D8(gUnknown_203AD34[a0], FALSE);
+ ClearMenuWindow(gUnknown_203AD34[a0], FALSE);
ClearWindowTilemap(gUnknown_203AD34[a0]);
RemoveWindow(gUnknown_203AD34[a0]);
schedule_bg_copy_tilemap_to_vram(0);
@@ -285,7 +285,7 @@ void sub_810BA9C(u8 a0)
{
if (gUnknown_203AD34[a0] != 0xFF)
{
- sub_810F260(gUnknown_203AD34[a0], FALSE);
+ ClearMenuWindow_BorderThickness2(gUnknown_203AD34[a0], FALSE);
ClearWindowTilemap(gUnknown_203AD34[a0]);
RemoveWindow(gUnknown_203AD34[a0]);
PutWindowTilemap(1);
diff --git a/src/coins.c b/src/coins.c
index e97928df7..3a51f6813 100644
--- a/src/coins.c
+++ b/src/coins.c
@@ -87,7 +87,7 @@ void ShowCoinsWindow(u32 coinAmount, u8 x, u8 y)
sCoinsWindowId = AddWindow(&template2);
FillWindowPixelBuffer(sCoinsWindowId, 0);
PutWindowTilemap(sCoinsWindowId);
- sub_814FF2C(sCoinsWindowId, 0x21D, 0xD0);
+ TextWindow_SetStdFrame0_WithPal(sCoinsWindowId, 0x21D, 0xD0);
SetWindowBorderStyle(sCoinsWindowId, FALSE, 0x21D, 0xD);
AddTextPrinterParameterized(sCoinsWindowId, 2, gUnknown_8417C2D, 0, 0, 0xFF, 0);
PrintCoinsString(coinAmount);
@@ -96,6 +96,6 @@ void ShowCoinsWindow(u32 coinAmount, u8 x, u8 y)
void HideCoinsWindow(void)
{
ClearWindowTilemap(sCoinsWindowId);
- sub_810F4D8(sCoinsWindowId, TRUE);
+ ClearMenuWindow(sCoinsWindowId, TRUE);
RemoveWindow(sCoinsWindowId);
}
diff --git a/src/fldeff_softboiled.c b/src/fldeff_softboiled.c
index deaa36eb5..50c715388 100644
--- a/src/fldeff_softboiled.c
+++ b/src/fldeff_softboiled.c
@@ -84,7 +84,7 @@ void sub_80E58A0(u8 taskId)
sub_811F818(gUnknown_203B0A0.unk9, 0);
gUnknown_203B0A0.unk9 = gUnknown_203B0A0.unkA;
sub_811F818(gUnknown_203B0A0.unkA, 1);
- sub_810F4D8(6, 0);
+ ClearMenuWindow(6, 0);
ClearWindowTilemap(6);
sub_8121D0C(0);
gTasks[taskId].func = sub_811FB28;
diff --git a/src/item_pc.c b/src/item_pc.c
new file mode 100644
index 000000000..3e139503e
--- /dev/null
+++ b/src/item_pc.c
@@ -0,0 +1,1150 @@
+#include "global.h"
+#include "bg.h"
+#include "data2.h"
+#include "decompress.h"
+#include "gpu_regs.h"
+#include "graphics.h"
+#include "help_system.h"
+#include "item.h"
+#include "item_menu.h"
+#include "item_menu_icons.h"
+#include "list_menu.h"
+#include "item_pc.h"
+#include "item_use.h"
+#include "main.h"
+#include "malloc.h"
+#include "menu.h"
+#include "menu_helpers.h"
+#include "menu_indicators.h"
+#include "new_menu_helpers.h"
+#include "palette.h"
+#include "party_menu.h"
+#include "pc_screen_effect.h"
+#include "scanline_effect.h"
+#include "sound.h"
+#include "string_util.h"
+#include "strings.h"
+#include "task.h"
+#include "text_window.h"
+#include "constants/items.h"
+#include "constants/songs.h"
+
+struct ItemPcResources
+{
+ MainCallback savedCallback;
+ u8 moveModeOrigPos;
+ u8 itemMenuIconSlot;
+ u8 maxShowed;
+ u8 nItems;
+ u8 scrollIndicatorArrowPairId;
+ u16 withdrawQuantitySubmenuCursorPos;
+ s16 data[3];
+};
+
+struct ItemPcStaticResources
+{
+ MainCallback savedCallback;
+ u16 scroll;
+ u16 row;
+ u8 initialized;
+};
+
+static EWRAM_DATA struct ItemPcResources * sStateDataPtr = NULL;
+static EWRAM_DATA u8 * sBg1TilemapBuffer = NULL;
+static EWRAM_DATA struct ListMenuItem * sListMenuItems = NULL;
+static EWRAM_DATA u8 * sUnusedStringAllocation = NULL;
+static EWRAM_DATA struct ItemPcStaticResources sListMenuState = {};
+static EWRAM_DATA u8 sSubmenuWindowIds[3] = {};
+
+extern const struct CompressedSpriteSheet gBagSwapSpriteSheet;
+extern const struct CompressedSpritePalette gBagSwapSpritePalette;
+
+static void ItemPc_RunSetup(void);
+static bool8 ItemPc_DoGfxSetup(void);
+static void ItemPc_FadeAndBail(void);
+static void Task_ItemPcWaitFadeAndBail(u8 taskId);
+static bool8 ItemPc_InitBgs(void);
+static bool8 ItemPc_LoadGraphics(void);
+static bool8 ItemPc_AllocateResourcesForListMenu(void);
+static void ItemPc_BuildListMenuTemplate(void);
+static void ItemPc_MoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu * list);
+static void ItemPc_ItemPrintFunc(u8 windowId, s32 itemId, u8 y);
+static void ItemPc_PrintOrRemoveCursorAt(u8 y, u8 state);
+static void ItemPc_PrintWithdrawItem(void);
+static void ItemPc_PlaceTopMenuScrollIndicatorArrows(void);
+static void ItemPc_SetCursorPosition(void);
+static void ItemPc_FreeResources(void);
+static void Task_ItemPcTurnOff2(u8 taskId);
+static u16 ItemPc_GetItemIdBySlotId(u16 itemIndex);
+static u16 ItemPc_GetItemQuantityBySlotId(u16 itemIndex);
+static void ItemPc_CountPcItems(void);
+static void ItemPc_SetScrollPosition(void);
+static void Task_ItemPcMain(u8 taskId);
+static void ItemPc_MoveItemModeInit(u8 taskId, s16 pos);
+static void Task_ItemPcMoveItemModeRun(u8 taskId);
+static void ItemPc_InsertItemIntoNewSlot(u8 taskId, u32 pos);
+static void ItemPc_MoveItemModeCancel(u8 taskId, u32 pos);
+static void Task_ItemPcSubmenuInit(u8 taskId);
+static void Task_ItemPcSubmenuRun(u8 taskId);
+static void Task_ItemPcWithdraw(u8 taskId);
+static void ItemPc_DoWithdraw(u8 taskId);
+static void Task_ItemPcWaitButtonAndFinishWithdrawMultiple(u8 taskId);
+static void Task_ItemPcWaitButtonWithdrawMultipleFailed(u8 taskId);
+static void Task_ItemPcCleanUpWithdraw(u8 taskId);
+static void ItemPc_WithdrawMultipleInitWindow(u16 slotId);
+static void Task_ItemPcHandleWithdrawMultiple(u8 taskId);
+static void Task_ItemPcGive(u8 taskId);
+static void ItemPc_CB2_SwitchToPartyMenu(void);
+static void ItemPc_CB2_ReturnFromPartyMenu(void);
+static void gTask_ItemPcWaitButtonAndExitSubmenu(u8 taskId);
+static void Task_ItemPcCancel(u8 taskId);
+static void ItemPc_InitWindows(void);
+static void ItemPc_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx);
+static void ItemPc_SetBorderStyleOnWindow(u8 windowId);
+static u8 ItemPc_GetOrCreateSubwindow(u8 idx);
+static void ItemPc_DestroySubwindow(u8 idx);
+static void ItemPc_PrintOnWindow5WithContinueTask(u8 taskId, const u8 * str, TaskFunc taskFunc);
+
+static const struct BgTemplate sBgTemplates[2] = {
+ {
+ .bg = 0,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 31,
+ .priority = 0
+ }, {
+ .bg = 1,
+ .charBaseIndex = 3,
+ .mapBaseIndex = 30,
+ .priority = 1
+ }
+};
+
+static const struct MenuAction sItemPcSubmenuOptions[] = {
+ {gText_Withdraw, {.void_u8 = Task_ItemPcWithdraw}},
+ {gOtherText_Give, {.void_u8 = Task_ItemPcGive}},
+ {gFameCheckerText_Cancel, {.void_u8 = Task_ItemPcCancel}}
+};
+
+static const struct TextColor gUnknown_8453F8C[] = {
+ {0, 1, 2},
+ {0, 2, 3},
+ {0, 3, 2},
+ {0, 10, 2}
+};
+
+static const struct WindowTemplate gUnknown_8453F98[] = {
+ {
+ .bg = 0,
+ .tilemapLeft = 0x07,
+ .tilemapTop = 0x01,
+ .width = 0x13,
+ .height = 0x0c,
+ .paletteNum = 0x0f,
+ .baseBlock = 0x02bf
+ }, {
+ .bg = 0,
+ .tilemapLeft = 0x05,
+ .tilemapTop = 0x0e,
+ .width = 0x19,
+ .height = 0x06,
+ .paletteNum = 0x0d,
+ .baseBlock = 0x0229
+ }, {
+ .bg = 0,
+ .tilemapLeft = 0x01,
+ .tilemapTop = 0x01,
+ .width = 0x05,
+ .height = 0x04,
+ .paletteNum = 0x0f,
+ .baseBlock = 0x0215
+ }, {
+ .bg = 0,
+ .tilemapLeft = 0x18,
+ .tilemapTop = 0x0f,
+ .width = 0x05,
+ .height = 0x04,
+ .paletteNum = 0x0f,
+ .baseBlock = 0x0201
+ }, {
+ .bg = 0,
+ .tilemapLeft = 0x16,
+ .tilemapTop = 0x0d,
+ .width = 0x07,
+ .height = 0x06,
+ .paletteNum = 0x0f,
+ .baseBlock = 0x01d7
+ }, {
+ .bg = 0,
+ .tilemapLeft = 0x02,
+ .tilemapTop = 0x0f,
+ .width = 0x1a,
+ .height = 0x04,
+ .paletteNum = 0x0b,
+ .baseBlock = 0x016f
+ }, DUMMY_WIN_TEMPLATE
+};
+
+static const struct WindowTemplate gUnknown_8453FD0[] = {
+ {
+ .bg = 0,
+ .tilemapLeft = 0x06,
+ .tilemapTop = 0x0f,
+ .width = 0x0e,
+ .height = 0x04,
+ .paletteNum = 0x0c,
+ .baseBlock = 0x0137
+ }, {
+ .bg = 0,
+ .tilemapLeft = 0x06,
+ .tilemapTop = 0x0f,
+ .width = 0x10,
+ .height = 0x04,
+ .paletteNum = 0x0c,
+ .baseBlock = 0x0137
+ }, {
+ .bg = 0,
+ .tilemapLeft = 0x06,
+ .tilemapTop = 0x0f,
+ .width = 0x17,
+ .height = 0x04,
+ .paletteNum = 0x0c,
+ .baseBlock = 0x009b
+ }
+};
+
+void ItemPc_Init(u8 a0, MainCallback callback)
+{
+ u8 i;
+
+ if (a0 >= 2)
+ {
+ SetMainCallback2(callback);
+ return;
+ }
+ if ((sStateDataPtr = Alloc(sizeof(struct ItemPcResources))) == NULL)
+ {
+ SetMainCallback2(callback);
+ return;
+ }
+ if (a0 != 1)
+ {
+ sListMenuState.savedCallback = callback;
+ sListMenuState.scroll = sListMenuState.row = 0;
+ }
+ sStateDataPtr->moveModeOrigPos = 0xFF;
+ sStateDataPtr->itemMenuIconSlot = 0;
+ sStateDataPtr->scrollIndicatorArrowPairId = 0xFF;
+ sStateDataPtr->savedCallback = 0;
+ for (i = 0; i < 3; i++)
+ {
+ sStateDataPtr->data[i] = 0;
+ }
+ SetMainCallback2(ItemPc_RunSetup);
+}
+
+static void ItemPc_MainCB(void)
+{
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ do_scheduled_bg_tilemap_copies_to_vram();
+ UpdatePaletteFade();
+}
+
+static void ItemPc_VBlankCB(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+static void ItemPc_RunSetup(void)
+{
+ while (1)
+ {
+ if (ItemPc_DoGfxSetup() == TRUE)
+ break;
+ if (MenuHelpers_LinkSomething() == TRUE)
+ break;
+ }
+}
+
+static bool8 ItemPc_DoGfxSetup(void)
+{
+ u8 taskId;
+ switch (gMain.state)
+ {
+ case 0:
+ VblankHblankHandlerSetZero();
+ clear_scheduled_bg_copies_to_vram();
+ gMain.state++;
+ break;
+ case 1:
+ ScanlineEffect_Stop();
+ gMain.state++;
+ break;
+ case 2:
+ FreeAllSpritePalettes();
+ gMain.state++;
+ break;
+ case 3:
+ ResetPaletteFade();
+ gMain.state++;
+ break;
+ case 4:
+ ResetSpriteData();
+ gMain.state++;
+ break;
+ case 5:
+ ResetItemMenuIconState();
+ gMain.state++;
+ break;
+ case 6:
+ ResetTasks();
+ gMain.state++;
+ break;
+ case 7:
+ if (ItemPc_InitBgs())
+ {
+ sStateDataPtr->data[0] = 0;
+ gMain.state++;
+ }
+ else
+ {
+ ItemPc_FadeAndBail();
+ return TRUE;
+ }
+ break;
+ case 8:
+ if (ItemPc_LoadGraphics() == TRUE)
+ gMain.state++;
+ break;
+ case 9:
+ ItemPc_InitWindows();
+ gMain.state++;
+ break;
+ case 10:
+ ItemPc_CountPcItems();
+ ItemPc_SetCursorPosition();
+ ItemPc_SetScrollPosition();
+ gMain.state++;
+ break;
+ case 11:
+ if (ItemPc_AllocateResourcesForListMenu())
+ gMain.state++;
+ else
+ {
+ ItemPc_FadeAndBail();
+ return TRUE;
+ }
+ break;
+ case 12:
+ ItemPc_BuildListMenuTemplate();
+ gMain.state++;
+ break;
+ case 13:
+ ItemPc_PrintWithdrawItem();
+ gMain.state++;
+ break;
+ case 14:
+ sub_80985E4();
+ gMain.state++;
+ break;
+ case 15:
+ taskId = CreateTask(Task_ItemPcMain, 0);
+ gTasks[taskId].data[0] = ListMenuInit(&gMultiuseListMenuTemplate, sListMenuState.scroll, sListMenuState.row);
+ gMain.state++;
+ break;
+ case 16:
+ ItemPc_PlaceTopMenuScrollIndicatorArrows();
+ gMain.state++;
+ break;
+ case 17:
+ HelpSystem_SetSomeVariable2(29);
+ gMain.state++;
+ break;
+ case 18:
+ if (sListMenuState.initialized == 1)
+ {
+ BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK);
+ }
+ gMain.state++;
+ break;
+ case 19:
+ if (sListMenuState.initialized == 1)
+ {
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
+ }
+ else
+ {
+ sub_80A0A48(0, 0, 0);
+ ItemPc_SetInitializedFlag(1);
+ PlaySE(SE_PC_LOGON);
+ }
+ gMain.state++;
+ break;
+ case 20:
+ if (sub_80BF72C() != TRUE)
+ gMain.state++;
+ break;
+ default:
+ SetVBlankCallback(ItemPc_VBlankCB);
+ SetMainCallback2(ItemPc_MainCB);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static void ItemPc_FadeAndBail(void)
+{
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ CreateTask(Task_ItemPcWaitFadeAndBail, 0);
+ SetVBlankCallback(ItemPc_VBlankCB);
+ SetMainCallback2(ItemPc_MainCB);
+}
+
+static void Task_ItemPcWaitFadeAndBail(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ SetMainCallback2(sListMenuState.savedCallback);
+ ItemPc_FreeResources();
+ DestroyTask(taskId);
+ }
+}
+
+static bool8 ItemPc_InitBgs(void)
+{
+ InitBgReg();
+ sBg1TilemapBuffer = Alloc(0x800);
+ if (sBg1TilemapBuffer == NULL)
+ return FALSE;
+ memset(sBg1TilemapBuffer, 0, 0x800);
+ ResetBgsAndClearDma3BusyFlags(0);
+ InitBgsFromTemplates(0, sBgTemplates, NELEMS(sBgTemplates));
+ SetBgTilemapBuffer(1, sBg1TilemapBuffer);
+ schedule_bg_copy_tilemap_to_vram(1);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON);
+ SetGpuReg(REG_OFFSET_BLDCNT , 0);
+ ShowBg(0);
+ ShowBg(1);
+ return TRUE;
+}
+
+static bool8 ItemPc_LoadGraphics(void)
+{
+ switch (sStateDataPtr->data[0])
+ {
+ case 0:
+ reset_temp_tile_data_buffers();
+ decompress_and_copy_tile_data_to_vram(1, gItemPcTiles, 0, 0, 0);
+ sStateDataPtr->data[0]++;
+ break;
+ case 1:
+ if (free_temp_tile_data_buffers_if_possible() != TRUE)
+ {
+ LZDecompressWram(gItemPcTilemap, sBg1TilemapBuffer);
+ sStateDataPtr->data[0]++;
+ }
+ break;
+ case 2:
+ LoadCompressedPalette(gItemPcBgPals, 0x00, 0x60);
+ sStateDataPtr->data[0]++;
+ break;
+ case 3:
+ LoadCompressedObjectPic(&gBagSwapSpriteSheet);
+ sStateDataPtr->data[0]++;
+ break;
+ default:
+ LoadCompressedObjectPalette(&gBagSwapSpritePalette);
+ sStateDataPtr->data[0] = 0;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+#define try_alloc(ptr__, size) ({ \
+ void ** ptr = (void **)&(ptr__); \
+ *ptr = Alloc(size); \
+ if (*ptr == NULL) \
+ { \
+ ItemPc_FreeResources(); \
+ ItemPc_FadeAndBail(); \
+ return FALSE; \
+ } \
+})
+
+static bool8 ItemPc_AllocateResourcesForListMenu(void)
+{
+ try_alloc(sListMenuItems, sizeof(struct ListMenuItem) * (PC_ITEMS_COUNT + 1));
+ try_alloc(sUnusedStringAllocation, 14 * (PC_ITEMS_COUNT + 1));
+ return TRUE;
+}
+
+static void ItemPc_BuildListMenuTemplate(void)
+{
+ u16 i;
+
+ for (i = 0; i < sStateDataPtr->nItems; i++)
+ {
+ sListMenuItems[i].label = ItemId_GetName(gSaveBlock1Ptr->pcItems[i].itemId);
+ sListMenuItems[i].index = i;
+ }
+ sListMenuItems[i].label = gFameCheckerText_Cancel;
+ sListMenuItems[i].index = -2;
+
+ gMultiuseListMenuTemplate.items = sListMenuItems;
+ gMultiuseListMenuTemplate.totalItems = sStateDataPtr->nItems + 1;
+ gMultiuseListMenuTemplate.windowId = 0;
+ gMultiuseListMenuTemplate.header_X = 0;
+ gMultiuseListMenuTemplate.item_X = 9;
+ gMultiuseListMenuTemplate.cursor_X = 1;
+ gMultiuseListMenuTemplate.lettersSpacing = 1;
+ gMultiuseListMenuTemplate.itemVerticalPadding = 2;
+ gMultiuseListMenuTemplate.upText_Y = 2;
+ gMultiuseListMenuTemplate.maxShowed = sStateDataPtr->maxShowed;
+ gMultiuseListMenuTemplate.fontId = 2;
+ gMultiuseListMenuTemplate.cursorPal = 2;
+ gMultiuseListMenuTemplate.fillValue = 0;
+ gMultiuseListMenuTemplate.cursorShadowPal = 3;
+ gMultiuseListMenuTemplate.moveCursorFunc = ItemPc_MoveCursorFunc;
+ gMultiuseListMenuTemplate.itemPrintFunc = ItemPc_ItemPrintFunc;
+ gMultiuseListMenuTemplate.scrollMultiple = 0;
+ gMultiuseListMenuTemplate.cursorKind = 0;
+}
+
+static void ItemPc_MoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu * list)
+{
+ u16 itemId;
+ const u8 * desc;
+ if (onInit != TRUE)
+ PlaySE(SE_SELECT);
+
+ if (sStateDataPtr->moveModeOrigPos == 0xFF)
+ {
+ DestroyItemMenuIcon(sStateDataPtr->itemMenuIconSlot ^ 1);
+ if (itemIndex != -2)
+ {
+ itemId = ItemPc_GetItemIdBySlotId(itemIndex);
+ CreateItemMenuIcon(itemId, sStateDataPtr->itemMenuIconSlot);
+ if (ItemId_GetPocket(itemId) == POCKET_TM_CASE)
+ desc = gMoveNames[ItemIdToBattleMoveId(itemId)];
+ else
+ desc = ItemId_GetDescription(itemId);
+ }
+ else
+ {
+ CreateItemMenuIcon(ITEM_N_A, sStateDataPtr->itemMenuIconSlot);
+ desc = gText_ReturnToPC;
+ }
+ sStateDataPtr->itemMenuIconSlot ^= 1;
+ FillWindowPixelBuffer(1, 0);
+ ItemPc_AddTextPrinterParameterized(1, 2, desc, 0, 3, 2, 0, 0, 3);
+ }
+}
+
+static void ItemPc_ItemPrintFunc(u8 windowId, s32 itemId, u8 y)
+{
+ if (sStateDataPtr->moveModeOrigPos != 0xFF)
+ {
+ if (sStateDataPtr->moveModeOrigPos == (u8)itemId)
+ ItemPc_PrintOrRemoveCursorAt(y, 2);
+ else
+ ItemPc_PrintOrRemoveCursorAt(y, 0xFF);
+ }
+ if (itemId != -2)
+ {
+ u16 quantity = ItemPc_GetItemQuantityBySlotId(itemId);
+ ConvertIntToDecimalStringN(gStringVar1, quantity, STR_CONV_MODE_RIGHT_ALIGN, 3);
+ StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1);
+ ItemPc_AddTextPrinterParameterized(windowId, 0, gStringVar4, 110, y, 0, 0, 0xFF, 1);
+ }
+}
+
+static void ItemPc_PrintOrRemoveCursor(u8 listMenuId, u8 colorIdx)
+{
+ ItemPc_PrintOrRemoveCursorAt(ListMenuGetYCoordForPrintingArrowCursor(listMenuId), colorIdx);
+}
+
+static void ItemPc_PrintOrRemoveCursorAt(u8 y, u8 colorIdx)
+{
+ if (colorIdx == 0xFF)
+ {
+ u8 maxWidth = GetFontAttribute(2, FONTATTR_MAX_LETTER_WIDTH);
+ u8 maxHeight = GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT);
+ FillWindowPixelRect(0, 0, 0, y, maxWidth, maxHeight);
+ }
+ else
+ {
+ ItemPc_AddTextPrinterParameterized(0, 2, gFameCheckerText_ListMenuCursor, 0, y, 0, 0, 0, colorIdx);
+ }
+}
+
+static void ItemPc_PrintWithdrawItem(void)
+{
+ ItemPc_AddTextPrinterParameterized(2, 0, gText_WithdrawItem, 0, 1, 0, 1, 0, 0);
+}
+
+static void ItemPc_PlaceTopMenuScrollIndicatorArrows(void)
+{
+ sStateDataPtr->scrollIndicatorArrowPairId = AddScrollIndicatorArrowPairParameterized(2, 128, 8, 104, sStateDataPtr->nItems - sStateDataPtr->maxShowed + 1, 110, 110, &sListMenuState.scroll);
+}
+
+static void ItemPc_PlaceWithdrawQuantityScrollIndicatorArrows(void)
+{
+ sStateDataPtr->withdrawQuantitySubmenuCursorPos = 1;
+ sStateDataPtr->scrollIndicatorArrowPairId = AddScrollIndicatorArrowPairParameterized(2, 212, 120, 152, 2, 110, 110, &sStateDataPtr->withdrawQuantitySubmenuCursorPos);
+}
+
+static void ItemPc_RemoveScrollIndicatorArrowPair(void)
+{
+ if (sStateDataPtr->scrollIndicatorArrowPairId != 0xFF)
+ {
+ RemoveScrollIndicatorArrowPair(sStateDataPtr->scrollIndicatorArrowPairId);
+ sStateDataPtr->scrollIndicatorArrowPairId = 0xFF;
+ }
+}
+
+static void ItemPc_SetCursorPosition(void)
+{
+ if (sListMenuState.scroll != 0 && sListMenuState.scroll + sStateDataPtr->maxShowed > sStateDataPtr->nItems + 1)
+ sListMenuState.scroll = (sStateDataPtr->nItems + 1) - sStateDataPtr->maxShowed;
+ if (sListMenuState.scroll + sListMenuState.row >= sStateDataPtr->nItems + 1)
+ {
+ if (sStateDataPtr->nItems + 1 < 2)
+ sListMenuState.row = 0;
+ else
+ sListMenuState.row = sStateDataPtr->nItems;
+ }
+}
+
+#define try_free(ptr) ({ \
+ void ** ptr__ = (void **)&(ptr); \
+ if (*ptr__ != NULL) \
+ Free(*ptr__); \
+})
+
+static void ItemPc_FreeResources(void)
+{
+ try_free(sStateDataPtr);
+ try_free(sBg1TilemapBuffer);
+ try_free(sListMenuItems);
+ try_free(sUnusedStringAllocation);
+ FreeAllWindowBuffers();
+}
+
+static void Task_ItemPcTurnOff1(u8 taskId)
+{
+ if (sListMenuState.initialized == 1)
+ {
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ }
+ else
+ {
+ sub_80A0A70(0, 0, 0);
+ PlaySE(SE_PC_OFF);
+ }
+ gTasks[taskId].func = Task_ItemPcTurnOff2;
+}
+
+static void Task_ItemPcTurnOff2(u8 taskId)
+{
+ s16 * data = gTasks[taskId].data;
+
+ if (!gPaletteFade.active && !sub_80A0AAC())
+ {
+ DestroyListMenu(data[0], &sListMenuState.scroll, &sListMenuState.row);
+ if (sStateDataPtr->savedCallback != NULL)
+ SetMainCallback2(sStateDataPtr->savedCallback);
+ else
+ SetMainCallback2(sListMenuState.savedCallback);
+ ItemPc_RemoveScrollIndicatorArrowPair();
+ ItemPc_FreeResources();
+ DestroyTask(taskId);
+ }
+}
+
+static u8 ItemPc_GetCursorPosition(void)
+{
+ return sListMenuState.scroll + sListMenuState.row;
+}
+
+static u16 ItemPc_GetItemIdBySlotId(u16 idx)
+{
+ return gSaveBlock1Ptr->pcItems[idx].itemId;
+}
+
+static u16 ItemPc_GetItemQuantityBySlotId(u16 idx)
+{
+ return GetBagItemId(&gSaveBlock1Ptr->pcItems[idx].quantity);
+}
+
+static void ItemPc_CountPcItems(void)
+{
+ u16 i;
+
+ ItemPcCompaction();
+ sStateDataPtr->nItems = 0;
+ for (i = 0; i < PC_ITEMS_COUNT; sStateDataPtr->nItems++, i++)
+ {
+ if (gSaveBlock1Ptr->pcItems[i].itemId == ITEM_NONE)
+ break;
+ }
+ sStateDataPtr->maxShowed = sStateDataPtr->nItems + 1 <= 6 ? sStateDataPtr->nItems + 1 : 6;
+}
+
+static void ItemPc_SetScrollPosition(void)
+{
+ u8 i;
+
+ if (sListMenuState.row > 3)
+ {
+ for (i = 0; i <= sListMenuState.row - 3; sListMenuState.row--, sListMenuState.scroll++, i++)
+ {
+ if (sListMenuState.scroll + sStateDataPtr->maxShowed == sStateDataPtr->nItems + 1)
+ break;
+ }
+ }
+}
+
+static void ItemPc_SetMessageWindowPalette(int a0)
+{
+ SetBgRectPal(1, 0, 14, 30, 6, a0 + 1);
+ schedule_bg_copy_tilemap_to_vram(1);
+}
+
+void ItemPc_SetInitializedFlag(u8 a0)
+{
+ sListMenuState.initialized = a0;
+}
+
+static void Task_ItemPcMain(u8 taskId)
+{
+ s16 * data = gTasks[taskId].data;
+ u16 scroll;
+ u16 row;
+ s32 input;
+
+ if (!gPaletteFade.active && !sub_80A0A98())
+ {
+ if (JOY_NEW(SELECT_BUTTON))
+ {
+ ListMenuGetScrollAndRow(data[0], &scroll, &row);
+ if (scroll + row != sStateDataPtr->nItems)
+ {
+ PlaySE(SE_SELECT);
+ ItemPc_MoveItemModeInit(taskId, scroll + row);
+ return;
+ }
+ }
+ input = ListMenuHandleInput(data[0]);
+ ListMenuGetScrollAndRow(data[0], &sListMenuState.scroll, &sListMenuState.row);
+ switch (input)
+ {
+ case -1:
+ break;
+ case -2:
+ PlaySE(SE_SELECT);
+ ItemPc_SetInitializedFlag(0);
+ gTasks[taskId].func = Task_ItemPcTurnOff1;
+ break;
+ default:
+ PlaySE(SE_SELECT);
+ ItemPc_SetMessageWindowPalette(1);
+ ItemPc_RemoveScrollIndicatorArrowPair();
+ data[1] = input;
+ data[2] = ItemPc_GetItemQuantityBySlotId(input);
+ ItemPc_PrintOrRemoveCursor(data[0], 2);
+ gTasks[taskId].func = Task_ItemPcSubmenuInit;
+ break;
+ }
+ }
+}
+
+static void ItemPc_ReturnFromSubmenu(u8 taskId)
+{
+ ItemPc_SetMessageWindowPalette(0);
+ ItemPc_PlaceTopMenuScrollIndicatorArrows();
+ gTasks[taskId].func = Task_ItemPcMain;
+}
+
+static void ItemPc_MoveItemModeInit(u8 taskId, s16 pos)
+{
+ s16 * data = gTasks[taskId].data;
+
+ sub_8107BD0(data[0], 16, 1);
+ data[1] = pos;
+ sStateDataPtr->moveModeOrigPos = pos;
+ StringCopy(gStringVar1, ItemId_GetName(ItemPc_GetItemIdBySlotId(data[1])));
+ StringExpandPlaceholders(gStringVar4, gOtherText_WhereShouldTheStrVar1BePlaced);
+ FillWindowPixelBuffer(1, 0x00);
+ ItemPc_AddTextPrinterParameterized(1, 2, gStringVar4, 0, 3, 2, 3, 0, 0);
+ sub_80986A8(-32, ListMenuGetYCoordForPrintingArrowCursor(data[0]));
+ sub_8098660(0);
+ ItemPc_PrintOrRemoveCursor(data[0], 2);
+ gTasks[taskId].func = Task_ItemPcMoveItemModeRun;
+}
+
+static void Task_ItemPcMoveItemModeRun(u8 taskId)
+{
+ s16 * data = gTasks[taskId].data;
+
+ ListMenuHandleInput(data[0]);
+ ListMenuGetScrollAndRow(data[0], &sListMenuState.scroll, &sListMenuState.row);
+ sub_80986A8(-32, ListMenuGetYCoordForPrintingArrowCursor(data[0]));
+ if (JOY_NEW(A_BUTTON | SELECT_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ sStateDataPtr->moveModeOrigPos = 0xFF;
+ ItemPc_InsertItemIntoNewSlot(taskId, sListMenuState.scroll + sListMenuState.row);
+ }
+ else if (JOY_NEW(B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ sStateDataPtr->moveModeOrigPos = 0xFF;
+ ItemPc_MoveItemModeCancel(taskId, sListMenuState.scroll + sListMenuState.row);
+ }
+}
+
+static void ItemPc_InsertItemIntoNewSlot(u8 taskId, u32 pos)
+{
+ s16 * data = gTasks[taskId].data;
+ if (data[1] == pos || data[1] == pos - 1)
+ ItemPc_MoveItemModeCancel(taskId, pos);
+ else
+ {
+ ItemMenu_MoveItemSlotToNewPositionInArray(gSaveBlock1Ptr->pcItems, data[1], pos);
+ DestroyListMenu(data[0], &sListMenuState.scroll, &sListMenuState.row);
+ if (data[1] < pos)
+ sListMenuState.row--;
+ ItemPc_BuildListMenuTemplate();
+ data[0] = ListMenuInit(&gMultiuseListMenuTemplate, sListMenuState.scroll, sListMenuState.row);
+ sub_8098660(1);
+ gTasks[taskId].func = Task_ItemPcMain;
+ }
+}
+
+static void ItemPc_MoveItemModeCancel(u8 taskId, u32 pos)
+{
+ s16 * data = gTasks[taskId].data;
+
+ DestroyListMenu(data[0], &sListMenuState.scroll, &sListMenuState.row);
+ if (data[1] < pos)
+ sListMenuState.row--;
+ ItemPc_BuildListMenuTemplate();
+ data[0] = ListMenuInit(&gMultiuseListMenuTemplate, sListMenuState.scroll, sListMenuState.row);
+ sub_8098660(1);
+ gTasks[taskId].func = Task_ItemPcMain;
+}
+
+static void Task_ItemPcSubmenuInit(u8 taskId)
+{
+ s16 * data = gTasks[taskId].data;
+ u8 windowId;
+
+ ItemPc_SetBorderStyleOnWindow(4);
+ windowId = ItemPc_GetOrCreateSubwindow(0);
+ PrintTextArray(4, 2, 8, 2, GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) + 2, 3, sItemPcSubmenuOptions);
+ ProgramAndPlaceMenuCursorOnWindow(4, 2, 0, 2, GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) + 2, 3, 0);
+ CopyItemName(ItemPc_GetItemIdBySlotId(data[1]), gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gOtherText_StrVar1);
+ ItemPc_AddTextPrinterParameterized(windowId, 2, gStringVar4, 0, 2, 1, 0, 0, 1);
+ schedule_bg_copy_tilemap_to_vram(0);
+ gTasks[taskId].func = Task_ItemPcSubmenuRun;
+}
+
+static void Task_ItemPcSubmenuRun(u8 taskId)
+{
+ s8 input = ProcessMenuInputNoWrapAround();
+ switch (input)
+ {
+ case -1:
+ PlaySE(SE_SELECT);
+ Task_ItemPcCancel(taskId);
+ break;
+ case -2:
+ break;
+ default:
+ PlaySE(SE_SELECT);
+ sItemPcSubmenuOptions[input].func.void_u8(taskId);
+ }
+}
+
+static void Task_ItemPcWithdraw(u8 taskId)
+{
+ s16 * data = gTasks[taskId].data;
+
+ ClearMenuWindow(4, FALSE);
+ ItemPc_DestroySubwindow(0);
+ ClearWindowTilemap(4);
+ data[8] = 1;
+ if (ItemPc_GetItemQuantityBySlotId(data[1]) == 1)
+ {
+ PutWindowTilemap(0);
+ schedule_bg_copy_tilemap_to_vram(0);
+ ItemPc_DoWithdraw(taskId);
+ }
+ else
+ {
+ PutWindowTilemap(0);
+ ItemPc_WithdrawMultipleInitWindow(data[1]);
+ ItemPc_PlaceWithdrawQuantityScrollIndicatorArrows();
+ gTasks[taskId].func = Task_ItemPcHandleWithdrawMultiple;
+ }
+}
+
+static void ItemPc_DoWithdraw(u8 taskId)
+{
+ s16 * data = gTasks[taskId].data;
+ u16 itemId = ItemPc_GetItemIdBySlotId(data[1]);
+ u8 windowId;
+
+ if (AddBagItem(itemId, data[8]) == TRUE)
+ {
+ ItemUse_SetQuestLogEvent(29, NULL, itemId, 0xFFFF);
+ CopyItemName(itemId, gStringVar1);
+ ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 3);
+ StringExpandPlaceholders(gStringVar4, gText_WithdrewQuantItem);
+ windowId = ItemPc_GetOrCreateSubwindow(2);
+ AddTextPrinterParameterized(windowId, 2, gStringVar4, 0, 2, 0, NULL);
+ gTasks[taskId].func = Task_ItemPcWaitButtonAndFinishWithdrawMultiple;
+ }
+ else
+ {
+ windowId = ItemPc_GetOrCreateSubwindow(2);
+ AddTextPrinterParameterized(windowId, 2, gText_NoMoreRoomInBag, 0, 2, 0, NULL);
+ gTasks[taskId].func = Task_ItemPcWaitButtonWithdrawMultipleFailed;
+ }
+}
+
+static void Task_ItemPcWaitButtonAndFinishWithdrawMultiple(u8 taskId)
+{
+ s16 * data = gTasks[taskId].data;
+ u16 itemId;
+
+ if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ itemId = ItemPc_GetItemIdBySlotId(data[1]);
+ RemoveItemFromPC(itemId, data[8]);
+ ItemPcCompaction();
+ Task_ItemPcCleanUpWithdraw(taskId);
+ }
+}
+
+static void Task_ItemPcWaitButtonWithdrawMultipleFailed(u8 taskId)
+{
+ if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ Task_ItemPcCleanUpWithdraw(taskId);
+ }
+}
+
+static void Task_ItemPcCleanUpWithdraw(u8 taskId)
+{
+ s16 * data = gTasks[taskId].data;
+
+ ItemPc_DestroySubwindow(2);
+ PutWindowTilemap(1);
+ DestroyListMenu(data[0], &sListMenuState.scroll, &sListMenuState.row);
+ ItemPc_CountPcItems();
+ ItemPc_SetCursorPosition();
+ ItemPc_BuildListMenuTemplate();
+ data[0] = ListMenuInit(&gMultiuseListMenuTemplate, sListMenuState.scroll, sListMenuState.row);
+ schedule_bg_copy_tilemap_to_vram(0);
+ ItemPc_ReturnFromSubmenu(taskId);
+}
+
+static void ItemPc_WithdrawMultipleInitWindow(u16 slotId)
+{
+ u16 itemId = ItemPc_GetItemIdBySlotId(slotId);
+
+ CopyItemName(itemId, gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gText_WithdrawHowMany);
+ AddTextPrinterParameterized(ItemPc_GetOrCreateSubwindow(1), 2, gStringVar4, 0, 2, 0, NULL);
+ ConvertIntToDecimalStringN(gStringVar1, 1, STR_CONV_MODE_LEADING_ZEROS, 3);
+ StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1);
+ ItemPc_SetBorderStyleOnWindow(3);
+ ItemPc_AddTextPrinterParameterized(3, 0, gStringVar4, 8, 10, 1, 0, 0, 1);
+ schedule_bg_copy_tilemap_to_vram(0);
+}
+
+static void sub_810E670(s16 quantity)
+{
+ FillWindowPixelRect(3, 0x11, 10, 10, 28, 12);
+ ConvertIntToDecimalStringN(gStringVar1, quantity, STR_CONV_MODE_LEADING_ZEROS, 3);
+ StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1);
+ ItemPc_AddTextPrinterParameterized(3, 0, gStringVar4, 8, 10, 1, 0, 0, 1);
+}
+
+static void Task_ItemPcHandleWithdrawMultiple(u8 taskId)
+{
+ s16 * data = gTasks[taskId].data;
+
+ if (sub_80BF848(&data[8], data[2]) == TRUE)
+ sub_810E670(data[8]);
+ else if (JOY_NEW(A_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ ItemPc_DestroySubwindow(1);
+ ClearWindowTilemap(3);
+ PutWindowTilemap(0);
+ ItemPc_PrintOrRemoveCursor(data[0], 1);
+ schedule_bg_copy_tilemap_to_vram(0);
+ ItemPc_RemoveScrollIndicatorArrowPair();
+ ItemPc_DoWithdraw(taskId);
+ }
+ else if (JOY_NEW(B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ ClearMenuWindow(3, FALSE);
+ ItemPc_DestroySubwindow(1);
+ ClearWindowTilemap(3);
+ PutWindowTilemap(0);
+ PutWindowTilemap(1);
+ ItemPc_PrintOrRemoveCursor(data[0], 1);
+ schedule_bg_copy_tilemap_to_vram(0);
+ ItemPc_RemoveScrollIndicatorArrowPair();
+ ItemPc_ReturnFromSubmenu(taskId);
+ }
+}
+
+static void Task_ItemPcGive(u8 taskId)
+{
+ if (CalculatePlayerPartyCount() == 0)
+ {
+ ClearMenuWindow(4, FALSE);
+ ItemPc_DestroySubwindow(0);
+ ClearWindowTilemap(4);
+ PutWindowTilemap(0);
+ ItemPc_PrintOnWindow5WithContinueTask(taskId, gText_ThereIsNoPokemon, gTask_ItemPcWaitButtonAndExitSubmenu);
+ }
+ else
+ {
+ sStateDataPtr->savedCallback = ItemPc_CB2_SwitchToPartyMenu;
+ Task_ItemPcTurnOff1(taskId);
+ }
+}
+
+static void ItemPc_CB2_SwitchToPartyMenu(void)
+{
+ PartyMenuInit(0, 0, 6, 0, 6, sub_811FB28, ItemPc_CB2_ReturnFromPartyMenu);
+ gUnknown_203B0A0.unkC = ItemPc_GetItemIdBySlotId(ItemPc_GetCursorPosition());
+}
+
+static void ItemPc_CB2_ReturnFromPartyMenu(void)
+{
+ ItemPc_Init(1, NULL);
+}
+
+static void gTask_ItemPcWaitButtonAndExitSubmenu(u8 taskId)
+{
+ s16 * data = gTasks[taskId].data;
+
+ if (JOY_NEW(A_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ ClearMenuWindow_BorderThickness2(5, 0);
+ ClearWindowTilemap(5);
+ PutWindowTilemap(1);
+ ItemPc_PrintOrRemoveCursor(data[0], 1);
+ schedule_bg_copy_tilemap_to_vram(0);
+ ItemPc_ReturnFromSubmenu(taskId);
+ }
+}
+
+static void Task_ItemPcCancel(u8 taskId)
+{
+ s16 * data = gTasks[taskId].data;
+
+ ClearMenuWindow(4, FALSE);
+ ItemPc_DestroySubwindow(0);
+ ClearWindowTilemap(4);
+ PutWindowTilemap(0);
+ PutWindowTilemap(1);
+ ItemPc_PrintOrRemoveCursor(data[0], 1);
+ schedule_bg_copy_tilemap_to_vram(0);
+ ItemPc_ReturnFromSubmenu(taskId);
+}
+
+static void ItemPc_InitWindows(void)
+{
+ u8 i;
+
+ InitWindows(gUnknown_8453F98);
+ DeactivateAllTextPrinters();
+ TextWindow_SetUserSelectedFrame(0, 0x3C0, 0xE0);
+ TextWindow_SetStdFrame0_WithPal(0, 0x3A3, 0xC0);
+ TextWindow_SetBubbleFrame_841F1C8(0, 0x3AC, 0xB0);
+ LoadPalette(stdpal_get(2), 0xD0, 0x20);
+ LoadPalette(gTMCaseMainWindowPalette, 0xF0, 0x20);
+ for (i = 0; i < 3; i++)
+ {
+ FillWindowPixelBuffer(i, 0x00);
+ PutWindowTilemap(i);
+ }
+ schedule_bg_copy_tilemap_to_vram(0);
+ for (i = 0; i < 3; i++)
+ sSubmenuWindowIds[i] = 0xFF;
+}
+
+static void unused_ItemPc_AddTextPrinterParameterized(u8 windowId, const u8 * string, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed)
+{
+ struct TextPrinterTemplate template;
+
+ template.currentChar = string;
+ template.windowId = windowId;
+ template.fontId = 3;
+ template.x = x;
+ template.y = y;
+ template.currentX = x;
+ template.currentY = y;
+ template.fgColor = 2;
+ template.bgColor = 0;
+ template.shadowColor = 3;
+ template.unk = GetFontAttribute(3, FONTATTR_UNKNOWN);
+ template.letterSpacing = letterSpacing + GetFontAttribute(3, FONTATTR_LETTER_SPACING);
+ template.lineSpacing = lineSpacing + GetFontAttribute(3, FONTATTR_LINE_SPACING);
+ AddTextPrinter(&template, speed, NULL);
+}
+
+static void ItemPc_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx)
+{
+ AddTextPrinterParameterized4(windowId, fontId, x, y, letterSpacing, lineSpacing, &gUnknown_8453F8C[colorIdx], speed, str);
+}
+
+static void ItemPc_SetBorderStyleOnWindow(u8 windowId)
+{
+ SetWindowBorderStyle(windowId, FALSE, 0x3C0, 0x0E);
+}
+
+static u8 ItemPc_GetOrCreateSubwindow(u8 idx)
+{
+ if (sSubmenuWindowIds[idx] == 0xFF)
+ {
+ sSubmenuWindowIds[idx] = AddWindow(&gUnknown_8453FD0[idx]);
+ SetWindowBorderStyle(sSubmenuWindowIds[idx], TRUE, 0x3A3, 0x0C);
+ }
+
+ return sSubmenuWindowIds[idx];
+}
+
+static void ItemPc_DestroySubwindow(u8 idx)
+{
+ ClearMenuWindow(sSubmenuWindowIds[idx], FALSE);
+ ClearWindowTilemap(sSubmenuWindowIds[idx]); // redundant
+ RemoveWindow(sSubmenuWindowIds[idx]);
+ sSubmenuWindowIds[idx] = 0xFF;
+}
+
+static u8 ItemPc_GetSubwindow(u8 idx)
+{
+ return sSubmenuWindowIds[idx];
+}
+
+static void ItemPc_PrintOnWindow5WithContinueTask(u8 taskId, const u8 * str, TaskFunc taskFunc)
+{
+ DisplayMessageAndContinueTask(taskId, 5, 0x3AC, 0x0B, 2, GetTextSpeedSetting(), str, taskFunc);
+ schedule_bg_copy_tilemap_to_vram(0);
+}
diff --git a/src/money.c b/src/money.c
index 6d9a0fce9..ffaba2e29 100644
--- a/src/money.c
+++ b/src/money.c
@@ -128,13 +128,13 @@ void DrawMoneyBox(int amount, u8 x, u8 y)
sMoneyBoxWindowId = AddWindow(&template2);
FillWindowPixelBuffer(sMoneyBoxWindowId, 0);
PutWindowTilemap(sMoneyBoxWindowId);
- sub_814FF2C(sMoneyBoxWindowId, 0x21D, 0xD0);
+ TextWindow_SetStdFrame0_WithPal(sMoneyBoxWindowId, 0x21D, 0xD0);
PrintMoneyAmountInMoneyBoxWithBorder(sMoneyBoxWindowId, 0x21D, 13, amount);
}
void HideMoneyBox(void)
{
- sub_810F4D8(sMoneyBoxWindowId, FALSE);
+ ClearMenuWindow(sMoneyBoxWindowId, FALSE);
CopyWindowToVram(sMoneyBoxWindowId, 2);
RemoveWindow(sMoneyBoxWindowId);
}
diff --git a/src/oak_speech.c b/src/oak_speech.c
index 107bf234c..3bf174778 100644
--- a/src/oak_speech.c
+++ b/src/oak_speech.c
@@ -1092,7 +1092,7 @@ static void Task_OakSpeech20(u8 taskId)
static void Task_OakSpeech21(u8 taskId)
{
s16 * data = gTasks[taskId].data;
- sub_810F4D8(data[13], 1);
+ ClearMenuWindow(data[13], 1);
RemoveWindow(data[13]);
data[13] = 0;
ClearDialogWindowAndFrame(0, 1);
@@ -1184,7 +1184,7 @@ static void Task_OakSpeech29(u8 taskId)
case 3:
case 4:
PlaySE(SE_SELECT);
- sub_810F4D8(data[13], TRUE);
+ ClearMenuWindow(data[13], TRUE);
RemoveWindow(data[13]);
GetDefaultName(sOakSpeechResources->unk_0010, input - 1);
data[15] = 1;
@@ -1211,7 +1211,7 @@ static void Task_OakSpeech25(u8 taskId)
}
else
{
- sub_810F4D8(gTasks[taskId].data[13], 1);
+ ClearMenuWindow(gTasks[taskId].data[13], 1);
RemoveWindow(gTasks[taskId].data[13]);
DoNamingScreen(4, gSaveBlock1Ptr->rivalName, 0, 0, 0, CB2_ReturnFromNamingScreen);
}
diff --git a/src/quest_log.c b/src/quest_log.c
index ed061a8b6..723323427 100644
--- a/src/quest_log.c
+++ b/src/quest_log.c
@@ -1691,7 +1691,7 @@ void sub_81123BC(void)
void sub_8112450(void)
{
- if (sub_80BF708() != 1)
+ if (MenuHelpers_LinkSomething() != 1)
{
sub_8112364();
sub_81123BC();
@@ -2842,7 +2842,7 @@ void sub_8113550(u16 a0, const u16 * a1)
if (sub_81138A0(a0, a1) == TRUE)
return;
- if (sub_80BF708() == TRUE)
+ if (MenuHelpers_LinkSomething() == TRUE)
return;
// NONMATCHING: branch logic here
@@ -2954,7 +2954,7 @@ void sub_8113550(u16 a0, const u16 * a1)
"\tbne _081135AA\n"
"\tb ._return\n"
"_081135AA:\n"
- "\tbl sub_80BF708\n"
+ "\tbl MenuHelpers_LinkSomething\n"
"\tlsls r0, 24\n"
"\tlsrs r0, 24\n"
"\tcmp r0, 0x1\n"
@@ -3708,7 +3708,7 @@ const u16 * sub_8113FBC(const u16 * a0)
case POCKET_ITEMS:
case POCKET_POKE_BALLS:
case POCKET_BERRY_POUCH:
- StringCopy(gStringVar1, ItemId_GetItem(r5[0])->name);
+ StringCopy(gStringVar1, ItemId_GetName(r5[0]));
if (r5[0] == ITEM_ESCAPE_ROPE)
{
sub_80C4DF8(gStringVar2, r5[2]);
@@ -3725,7 +3725,7 @@ const u16 * sub_8113FBC(const u16 * a0)
}
break;
case POCKET_KEY_ITEMS:
- StringCopy(gStringVar1, ItemId_GetItem(r5[0])->name);
+ StringCopy(gStringVar1, ItemId_GetName(r5[0]));
StringExpandPlaceholders(gStringVar4, gUnknown_841A220);
break;
case POCKET_TM_CASE:
@@ -3771,7 +3771,7 @@ const u16 * sub_8114188(const u16 * a0)
{
const u16 * r4 = sub_8113E88(5, a0);
QuestLog_AutoGetSpeciesName(r4[1], gStringVar1, 0);
- StringCopy(gStringVar2, ItemId_GetItem(r4[0])->name);
+ StringCopy(gStringVar2, ItemId_GetName(r4[0]));
StringExpandPlaceholders(gStringVar4, gUnknown_841AB74);
r4 += 2;
return r4;
@@ -3787,7 +3787,7 @@ const u16 * sub_81141E4(const u16 * a0)
const u16 * r4 = sub_8113E88(6, a0);
QuestLog_AutoGetSpeciesName(r4[1], gStringVar1, 0);
- StringCopy(gStringVar2, ItemId_GetItem(r4[0])->name);
+ StringCopy(gStringVar2, ItemId_GetName(r4[0]));
StringExpandPlaceholders(gStringVar4, gUnknown_841AB8E);
r4 += 2;
return r4;
@@ -3803,7 +3803,7 @@ const u16 * sub_8114240(const u16 * a0)
const u16 * r4 = sub_8113E88(7, a0);
QuestLog_AutoGetSpeciesName(r4[1], gStringVar2, 0);
- StringCopy(gStringVar1, ItemId_GetItem(r4[0])->name);
+ StringCopy(gStringVar1, ItemId_GetName(r4[0]));
StringExpandPlaceholders(gStringVar4, gUnknown_841A6A5);
r4 += 2;
return r4;
@@ -3819,7 +3819,7 @@ const u16 * sub_811429C(const u16 * a0)
const u16 * r4 = sub_8113E88(8, a0);
QuestLog_AutoGetSpeciesName(r4[1], gStringVar1, 0);
- StringCopy(gStringVar2, ItemId_GetItem(r4[0])->name);
+ StringCopy(gStringVar2, ItemId_GetName(r4[0]));
StringExpandPlaceholders(gStringVar4, gUnknown_841A1CD);
r4 += 2;
return r4;
@@ -3846,8 +3846,8 @@ const u16 * sub_8114324(const u16 * a0)
{
const u16 * r4 = sub_8113E88(9, a0);
QuestLog_AutoGetSpeciesName(r4[2], gStringVar1, 0);
- StringCopy(gStringVar2, ItemId_GetItem(r4[0])->name);
- StringCopy(gStringVar3, ItemId_GetItem(r4[1])->name);
+ StringCopy(gStringVar2, ItemId_GetName(r4[0]));
+ StringCopy(gStringVar3, ItemId_GetName(r4[1]));
StringExpandPlaceholders(gStringVar4, gUnknown_841A193);
r4 += 3;
return r4;
@@ -3862,8 +3862,8 @@ const u16 * sub_8114394(const u16 * a0)
{
const u16 * r4 = sub_8113E88(10, a0);
QuestLog_AutoGetSpeciesName(r4[2], gStringVar2, 0);
- StringCopy(gStringVar3, ItemId_GetItem(r4[0])->name);
- StringCopy(gStringVar1, ItemId_GetItem(r4[1])->name);
+ StringCopy(gStringVar3, ItemId_GetName(r4[0]));
+ StringCopy(gStringVar1, ItemId_GetName(r4[1]));
StringExpandPlaceholders(gStringVar4, gUnknown_841A6E1);
r4 += 3;
return r4;
@@ -4817,7 +4817,7 @@ const u16 * sub_8115518(const u16 * a0)
UnkTextUtil_Reset();
sub_80C4DF8(gStringVar1, r7[0]);
UnkTextUtil_SetPtrI(0, gStringVar1);
- UnkTextUtil_SetPtrI(1, ItemId_GetItem(r4[0])->name);
+ UnkTextUtil_SetPtrI(1, ItemId_GetName(r4[0]));
if (r4[1] < 2)
UnkTextUtil_StringExpandPlaceholders(gStringVar4, gUnknown_841A7DD);
else
@@ -4852,7 +4852,7 @@ const u16 * sub_81155E0(const u16 * a0) {
if (r7[1] == 0) {
UnkTextUtil_SetPtrI(0, gSaveBlock2Ptr->playerName);
UnkTextUtil_SetPtrI(1, gStringVar1);
- UnkTextUtil_SetPtrI(2, ItemId_GetItem(r5[0])->name);
+ UnkTextUtil_SetPtrI(2, ItemId_GetName(r5[0]));
if (r5[1] == 1)
UnkTextUtil_SetPtrI(3, gUnknown_841A8D4);
else
@@ -4867,7 +4867,7 @@ const u16 * sub_81155E0(const u16 * a0) {
else
{
UnkTextUtil_SetPtrI(0, gStringVar1);
- UnkTextUtil_SetPtrI(1, ItemId_GetItem(r5[0])->name);
+ UnkTextUtil_SetPtrI(1, ItemId_GetName(r5[0]));
ConvertIntToDecimalStringN(gStringVar2, r6, STR_CONV_MODE_LEFT_ALIGN, 6);
UnkTextUtil_SetPtrI(2, gStringVar2);
UnkTextUtil_StringExpandPlaceholders(gStringVar4, gUnknown_841A896);
@@ -4890,7 +4890,7 @@ const u16 * sub_8115700(const u16 * a0)
const u16 * r4 = sub_8113E88(40, a0);
const u8 * r5 = (const u8 *)r4 + 2;
sub_80C4DF8(gStringVar1, r5[0]);
- StringCopy(gStringVar2, ItemId_GetItem(r4[0])->name);
+ StringCopy(gStringVar2, ItemId_GetName(r4[0]));
StringExpandPlaceholders(gStringVar4, gUnknown_841B03F);
return (const u16 *)(r5 + 2);
}
diff --git a/src/text_window.c b/src/text_window.c
index 90db8f599..0c562b195 100644
--- a/src/text_window.c
+++ b/src/text_window.c
@@ -31,19 +31,19 @@ void sub_814FD6C(u8 bgId, u16 destOffset, u8 palIdx)
void sub_814FDA0(u8 bgId, u16 destOffset, u8 palIdx)
{
- LoadBgTiles(bgId, gUnknown_8471A4C, 0x120, destOffset);
+ LoadBgTiles(bgId, gStdFrame0, 0x120, destOffset);
LoadPalette(stdpal_get(3), palIdx, 32);
}
void sub_814FDD4(u8 bgId, u16 destOffset)
{
- LoadBgTiles(bgId, gUnknown_8471B6C, 0x280, destOffset);
+ LoadBgTiles(bgId, gStdFrame1, 0x280, destOffset);
}
void sub_814FDF4(u8 bgId, u8 frameType, u16 destOffset, u8 palIdx)
{
- LoadBgTiles(bgId, gUnknown_8471E8C[frameType].tiles, 0x120, destOffset);
- LoadPalette(gUnknown_8471E8C[frameType].palette, palIdx, 32);
+ LoadBgTiles(bgId, gUserFrames[frameType].tiles, 0x120, destOffset);
+ LoadPalette(gUserFrames[frameType].palette, palIdx, 32);
}
void LoadUserWindowBorderGfx(u8 windowId, u16 destOffset, u8 palIdx)
@@ -57,7 +57,7 @@ void sub_814FE6C(u8 windowId, u16 destOffset, u8 palIdx)
LoadPalette(stdpal_get(2), palIdx, 32);
}
-void sub_814FEAC(u8 windowId, u16 destOffset, u8 palIdx)
+void TextWindow_SetBubbleFrame_841F1C8(u8 windowId, u16 destOffset, u8 palIdx)
{
LoadBgTiles(GetWindowAttribute(windowId, WINDOW_BG), gUnknown_841F1C8, 0x280, destOffset);
LoadPalette(stdpal_get(0), palIdx, 32);
@@ -69,29 +69,29 @@ void sub_814FEEC(u8 windowId, u16 destOffset, u8 palIdx)
LoadPalette(stdpal_get(1), palIdx, 32);
}
-void sub_814FF2C(u8 windowId, u16 destOffset, u8 palIdx)
+void TextWindow_SetStdFrame0_WithPal(u8 windowId, u16 destOffset, u8 palIdx)
{
- LoadBgTiles(GetWindowAttribute(windowId, WINDOW_BG), gUnknown_8471A4C, 0x120, destOffset);
+ LoadBgTiles(GetWindowAttribute(windowId, WINDOW_BG), gStdFrame0, 0x120, destOffset);
LoadPalette(stdpal_get(3), palIdx, 32);
}
void sub_814FF6C(u8 windowId, u16 destOffset)
{
- LoadBgTiles(GetWindowAttribute(windowId, WINDOW_BG), gUnknown_8471A4C, 0x120, destOffset);
+ LoadBgTiles(GetWindowAttribute(windowId, WINDOW_BG), gStdFrame0, 0x120, destOffset);
}
void sub_814FF98(u8 windowId, u16 destOffset)
{
- LoadBgTiles(GetWindowAttribute(windowId, WINDOW_BG), gUnknown_8471B6C, 0x280, destOffset);
+ LoadBgTiles(GetWindowAttribute(windowId, WINDOW_BG), gStdFrame1, 0x280, destOffset);
}
void sub_814FFC4(u8 windowId, u8 frameType, u16 destOffset, u8 palIdx)
{
- LoadBgTiles(GetWindowAttribute(windowId, WINDOW_BG), gUnknown_8471E8C[frameType].tiles, 0x120, destOffset);
- LoadPalette(gUnknown_8471E8C[frameType].palette, palIdx, 32);
+ LoadBgTiles(GetWindowAttribute(windowId, WINDOW_BG), gUserFrames[frameType].tiles, 0x120, destOffset);
+ LoadPalette(gUserFrames[frameType].palette, palIdx, 32);
}
-void sub_815001C(u8 windowId, u16 destOffset, u8 palIdx)
+void TextWindow_SetUserSelectedFrame(u8 windowId, u16 destOffset, u8 palIdx)
{
sub_814FFC4(windowId, gSaveBlock2Ptr->optionsWindowFrameType, destOffset, palIdx);
}
diff --git a/src/text_window_graphics.c b/src/text_window_graphics.c
index 347de3d65..e16037a34 100644
--- a/src/text_window_graphics.c
+++ b/src/text_window_graphics.c
@@ -27,8 +27,8 @@ static const u16 gUnknown_84719EC[] = INCBIN_U16("graphics/text_window/unk_84715
static const u16 gUnknown_8471A0C[] = INCBIN_U16("graphics/text_window/unk_84716AC.gbapal");
static const u16 gUnknown_8471A2C[] = INCBIN_U16("graphics/text_window/unk_84717CC.gbapal");
-const u16 gUnknown_8471A4C[] = INCBIN_U16("graphics/text_window/unk_8471A4C.4bpp");
-const u16 gUnknown_8471B6C[] = INCBIN_U16("graphics/text_window/unk_8471B6C.4bpp");
+const u16 gStdFrame0[] = INCBIN_U16("graphics/text_window/unk_8471A4C.4bpp");
+const u16 gStdFrame1[] = INCBIN_U16("graphics/text_window/unk_8471B6C.4bpp");
const u16 gUnknown_8471DEC[][16] = {
INCBIN_U16("graphics/text_window/stdpal_0.gbapal"),
@@ -38,7 +38,7 @@ const u16 gUnknown_8471DEC[][16] = {
INCBIN_U16("graphics/text_window/stdpal_4.gbapal")
};
-const struct TextWindowGraphics gUnknown_8471E8C[] = {
+const struct TextWindowGraphics gUserFrames[] = {
{gUnknown_8470D6C, gUnknown_847190C},
{gUnknown_8470E8C, gUnknown_847192C},
{gUnknown_8470FCC, gUnknown_847194C},
@@ -53,8 +53,8 @@ const struct TextWindowGraphics gUnknown_8471E8C[] = {
const struct TextWindowGraphics * sub_8069788(u8 idx)
{
- if (idx >= 20) // if (idx >= NELEMS(gUnknown_8471E8C))
- return &gUnknown_8471E8C[0];
+ if (idx >= 20) // if (idx >= NELEMS(gUserFrames))
+ return &gUserFrames[0];
else
- return &gUnknown_8471E8C[idx];
+ return &gUserFrames[idx];
}
diff --git a/src/tm_case.c b/src/tm_case.c
index 5a079ed2d..120116c8d 100644
--- a/src/tm_case.c
+++ b/src/tm_case.c
@@ -309,7 +309,7 @@ static void CB2_SetUpTMCaseUI_Blocking(void)
break;
if (DoSetUpTMCaseUI() == TRUE)
break;
- if (sub_80BF708() == TRUE)
+ if (MenuHelpers_LinkSomething() == TRUE)
break;
}
}
@@ -595,7 +595,7 @@ static void TMCase_MoveCursor_UpdatePrintedDescription(s32 itemIndex)
static void FillBG2RowWithPalette_2timesNplus1(s32 a0)
{
- sub_80F6B08(2, 0, 12, 30, 8, 2 * a0 + 1);
+ SetBgRectPal(2, 0, 12, 30, 8, 2 * a0 + 1);
schedule_bg_copy_tilemap_to_vram(2);
}
@@ -782,7 +782,7 @@ static void Task_SelectTMAction_FromFieldBag(u8 taskId)
{
u8 * strbuf;
TMCase_SetWindowBorder2(2);
- if (!sub_80BF708() && InUnionRoom() != TRUE)
+ if (!MenuHelpers_LinkSomething() && InUnionRoom() != TRUE)
{
AddTMContextMenu(&sTMCaseDynamicResources->contextMenuWindowId, 0);
sTMCaseDynamicResources->menuActionIndices = sMenuActionIndices_Field;
@@ -837,7 +837,7 @@ static void Task_TMContextMenu_HandleInput(u8 taskId)
static void TMHMContextMenuAction_Use(u8 taskId)
{
RemoveTMContextMenu(&sTMCaseDynamicResources->contextMenuWindowId);
- sub_810F4D8(2, 0);
+ ClearMenuWindow(2, 0);
ClearWindowTilemap(2);
PutWindowTilemap(0);
schedule_bg_copy_tilemap_to_vram(0);
@@ -859,7 +859,7 @@ static void TMHMContextMenuAction_Give(u8 taskId)
s16 * data = gTasks[taskId].data;
u16 itemId = BagGetItemIdByPocketPosition(POCKET_TM_CASE, data[1]);
RemoveTMContextMenu(&sTMCaseDynamicResources->contextMenuWindowId);
- sub_810F4D8(2, 0);
+ ClearMenuWindow(2, 0);
ClearWindowTilemap(2);
PutWindowTilemap(1);
PutWindowTilemap(4);
@@ -912,7 +912,7 @@ static void Subtask_CloseContextMenuAndReturnToMain(u8 taskId)
DestroyListMenu(data[0], &sTMCaseStaticResources.scrollOffset, &sTMCaseStaticResources.selectedRow);
data[0] = ListMenuInit(&gMultiuseListMenuTemplate, sTMCaseStaticResources.scrollOffset, sTMCaseStaticResources.selectedRow);
PrintListMenuCursorByID_WithColorIdx(data[0], 1);
- sub_810F260(6, 0);
+ ClearMenuWindow_BorderThickness2(6, 0);
ClearWindowTilemap(6);
PutWindowTilemap(1);
PutWindowTilemap(4);
@@ -927,7 +927,7 @@ static void TMHMContextMenuAction_Exit(u8 taskId)
s16 * data = gTasks[taskId].data;
RemoveTMContextMenu(&sTMCaseDynamicResources->contextMenuWindowId);
- sub_810F4D8(2, 0);
+ ClearMenuWindow(2, 0);
ClearWindowTilemap(2);
PutWindowTilemap(0);
PrintListMenuCursorByID_WithColorIdx(data[0], 1);
@@ -1016,8 +1016,8 @@ static void Task_SaleOfTMsCancelled(u8 taskId)
{
s16 * data = gTasks[taskId].data;
- sub_810F4D8(8, 0);
- sub_810F260(6, 0);
+ ClearMenuWindow(8, 0);
+ ClearMenuWindow_BorderThickness2(6, 0);
PutWindowTilemap(0);
PutWindowTilemap(1);
PutWindowTilemap(3);
@@ -1065,7 +1065,7 @@ static void Task_QuantitySelect_HandleInput(u8 taskId)
else if (JOY_NEW(A_BUTTON))
{
PlaySE(SE_SELECT);
- sub_810F4D8(7, 0);
+ ClearMenuWindow(7, 0);
schedule_bg_copy_tilemap_to_vram(0);
schedule_bg_copy_tilemap_to_vram(1);
RemoveTMCaseScrollIndicatorArrowPair();
@@ -1074,9 +1074,9 @@ static void Task_QuantitySelect_HandleInput(u8 taskId)
else if (JOY_NEW(B_BUTTON))
{
PlaySE(SE_SELECT);
- sub_810F4D8(7, 0);
- sub_810F4D8(8, 0);
- sub_810F260(6, 0);
+ ClearMenuWindow(7, 0);
+ ClearMenuWindow(8, 0);
+ ClearMenuWindow_BorderThickness2(6, 0);
PutWindowTilemap(3);
PutWindowTilemap(0);
PutWindowTilemap(1);
@@ -1123,8 +1123,8 @@ static void Task_AfterSale_ReturnToList(u8 taskId)
if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON))
{
PlaySE(SE_SELECT);
- sub_810F4D8(8, 0);
- sub_810F260(6, 0);
+ ClearMenuWindow(8, 0);
+ ClearMenuWindow_BorderThickness2(6, 0);
PutWindowTilemap(1);
PutWindowTilemap(3);
PutWindowTilemap(4);
@@ -1249,7 +1249,7 @@ static void Task_TMCaseDude_Playback(u8 taskId)
{
FillBG2RowWithPalette_2timesNplus1(0);
BeginNormalPaletteFade(0x00000400, 0, 6, 0, 0);
- sub_810F260(6, 0);
+ ClearMenuWindow_BorderThickness2(6, 0);
schedule_bg_copy_tilemap_to_vram(1);
data[8]++;
}
@@ -1297,9 +1297,9 @@ static void InitWindowTemplatesAndPals(void)
InitWindows(sWindowTemplates);
DeactivateAllTextPrinters();
- sub_815001C(0, 0x5B, 0xE0);
- sub_814FEAC(0, 0x64, 0xB0);
- sub_814FF2C(0, 0x78, 0xD0);
+ TextWindow_SetUserSelectedFrame(0, 0x5B, 0xE0);
+ TextWindow_SetBubbleFrame_841F1C8(0, 0x64, 0xB0);
+ TextWindow_SetStdFrame0_WithPal(0, 0x78, 0xD0);
LoadPalette(gTMCaseMainWindowPalette, 0xF0, 0x20);
LoadPalette(gTMCaseMainWindowPalette, 0xA0, 0x20);
LoadPalette(sPal3Override, 0xF6, 0x04);
@@ -1420,7 +1420,7 @@ static u8 AddTMContextMenu(u8 * a0, u8 a1)
static void RemoveTMContextMenu(u8 * a0)
{
- sub_810F4D8(*a0, FALSE);
+ ClearMenuWindow(*a0, FALSE);
ClearWindowTilemap(*a0);
RemoveWindow(*a0);
schedule_bg_copy_tilemap_to_vram(0);
diff --git a/src/trainer_tower.c b/src/trainer_tower.c
index 5711bff94..ef2a12ce0 100644
--- a/src/trainer_tower.c
+++ b/src/trainer_tower.c
@@ -1299,7 +1299,7 @@ void sub_815E720(void)
void sub_815E88C(void)
{
u8 windowId = VarGet(VAR_0x4001);
- sub_810F4D8(windowId, TRUE);
+ ClearMenuWindow(windowId, TRUE);
RemoveWindow(windowId);
}
diff --git a/src/unk_815EDDC.c b/src/unk_815EDDC.c
index d5da946fc..669bb2ddb 100644
--- a/src/unk_815EDDC.c
+++ b/src/unk_815EDDC.c
@@ -98,7 +98,7 @@ void sub_815EFBC(u8 windowId, u32 powder, u8 x, u8 y, u8 speed)
void sub_815F014(u8 windowId, u16 baseBlock, u8 palette, u32 powder)
{
SetWindowBorderStyle(windowId, FALSE, baseBlock, palette);
- AddTextPrinterParameterized(windowId, 0, gUnknown_8416655, 0, 0, -1, NULL);
+ AddTextPrinterParameterized(windowId, 0, gOtherText_Powder, 0, 0, -1, NULL);
sub_815EFBC(windowId, powder, 39, 12, 0);
}
@@ -119,7 +119,7 @@ void sub_815F094(void)
gUnknown_203F464 = AddWindow(&template2);
FillWindowPixelBuffer(gUnknown_203F464, 0);
PutWindowTilemap(gUnknown_203F464);
- sub_814FF2C(gUnknown_203F464, 0x21D, 0xD0);
+ TextWindow_SetStdFrame0_WithPal(gUnknown_203F464, 0x21D, 0xD0);
sub_815F014(gUnknown_203F464, 0x21D, 0xD, sub_815EFA0());
}
}
@@ -127,6 +127,6 @@ void sub_815F094(void)
void sub_815F114(void)
{
ClearWindowTilemap(gUnknown_203F464);
- sub_810F4D8(gUnknown_203F464, 1);
+ ClearMenuWindow(gUnknown_203F464, 1);
RemoveWindow(gUnknown_203F464);
}
diff --git a/src/vs_seeker.c b/src/vs_seeker.c
index e1cb40f3a..e3df77242 100644
--- a/src/vs_seeker.c
+++ b/src/vs_seeker.c
@@ -814,7 +814,7 @@ void Task_VsSeeker_0(u8 taskId)
}
else if (respval == 2)
{
- sub_80A2294(4, 0, gSpecialVar_ItemId, 0xffff);
+ ItemUse_SetQuestLogEvent(4, 0, gSpecialVar_ItemId, 0xffff);
FieldEffectStart(FLDEFF_UNK_41); // TODO: name this enum
gTasks[taskId].func = Task_VsSeeker_1;
gTasks[taskId].data[0] = 15;
diff --git a/src/window.c b/src/window.c
index 9d38ba2c3..4c302885c 100644
--- a/src/window.c
+++ b/src/window.c
@@ -1069,7 +1069,7 @@ _08004046:\n\
}
#endif // NONMATCHING
-void CallWindowFunction(u8 windowId, void ( *func)(u8, u8, u8, u8, u8, u8))
+void CallWindowFunction(u8 windowId, WindowFunc func)
{
struct WindowTemplate window = gWindows[windowId].window;
func(window.bg, window.tilemapLeft, window.tilemapTop, window.width, window.height, window.paletteNum);