summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjiangzhengwenjz <jiangzhengwenjzw@qq.com>2019-07-09 14:07:19 +0800
committerjiangzhengwenjz <jiangzhengwenjzw@qq.com>2019-07-13 05:26:18 +0800
commite0e81c5fbe6a0c0bdcbb5a1de5e16dfb1ffdc091 (patch)
treeb0805ce04611816310a9fbbd5784ab7741aab6e3 /src
parent09b94d8b342bb29f962bb3c23fb4267877df710e (diff)
finished menu (1 failed attempt)
Diffstat (limited to 'src')
-rw-r--r--src/bag.c10
-rw-r--r--src/berry_powder.c4
-rw-r--r--src/buy_menu_helpers.c4
-rw-r--r--src/coins.c6
-rw-r--r--src/fldeff_softboiled.c2
-rw-r--r--src/item_pc.c20
-rw-r--r--src/menu.c984
-rw-r--r--src/money.c4
-rw-r--r--src/new_menu_helpers.c2
-rw-r--r--src/oak_speech.c38
-rw-r--r--src/tm_case.c36
-rw-r--r--src/trainer_tower.c2
12 files changed, 1048 insertions, 64 deletions
diff --git a/src/bag.c b/src/bag.c
index f4d29dfd4..710515099 100644
--- a/src/bag.c
+++ b/src/bag.c
@@ -240,7 +240,7 @@ void sub_810B958(const u8 * str)
void sub_810B994(void)
{
u32 x;
- SetWindowBorderStyle(2, FALSE, 0x081, 0x0C);
+ DrawStdFrameWithCustomTileAndPalette(2, FALSE, 0x081, 0x0C);
x = 0x40 - GetStringWidth(0, gText_DepositItem, 0);
AddTextPrinterParameterized(2, 0, gText_DepositItem, x / 2, 1, 0, NULL);
}
@@ -252,11 +252,11 @@ u8 sub_810B9DC(u8 a0, u8 a1)
gUnknown_203AD34[a0] = AddWindow(&gUnknown_8453104[a0 + a1]);
if (a0 != 6)
{
- SetWindowBorderStyle(gUnknown_203AD34[a0], FALSE, 0x064, 0x0E);
+ DrawStdFrameWithCustomTileAndPalette(gUnknown_203AD34[a0], FALSE, 0x064, 0x0E);
}
else
{
- SetWindowBorderStyle(gUnknown_203AD34[a0], FALSE, 0x081, 0x0C);
+ DrawStdFrameWithCustomTileAndPalette(gUnknown_203AD34[a0], FALSE, 0x081, 0x0C);
}
ScheduleBgCopyTilemapToVram(0);
}
@@ -265,7 +265,7 @@ u8 sub_810B9DC(u8 a0, u8 a1)
void sub_810BA3C(u8 a0)
{
- ClearMenuWindow(gUnknown_203AD34[a0], FALSE);
+ ClearStdWindowAndFrameToTransparent(gUnknown_203AD34[a0], FALSE);
ClearWindowTilemap(gUnknown_203AD34[a0]);
RemoveWindow(gUnknown_203AD34[a0]);
ScheduleBgCopyTilemapToVram(0);
@@ -285,7 +285,7 @@ void sub_810BA9C(u8 a0)
{
if (gUnknown_203AD34[a0] != 0xFF)
{
- ClearMenuWindow_BorderThickness2(gUnknown_203AD34[a0], FALSE);
+ ClearDialogWindowAndFrameToTransparent(gUnknown_203AD34[a0], FALSE);
ClearWindowTilemap(gUnknown_203AD34[a0]);
RemoveWindow(gUnknown_203AD34[a0]);
PutWindowTilemap(1);
diff --git a/src/berry_powder.c b/src/berry_powder.c
index b3069d697..9b50d6abc 100644
--- a/src/berry_powder.c
+++ b/src/berry_powder.c
@@ -97,7 +97,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);
+ DrawStdFrameWithCustomTileAndPalette(windowId, FALSE, baseBlock, palette);
AddTextPrinterParameterized(windowId, 0, gOtherText_Powder, 0, 0, -1, NULL);
sub_815EFBC(windowId, powder, 39, 12, 0);
}
@@ -127,6 +127,6 @@ void sub_815F094(void)
void sub_815F114(void)
{
ClearWindowTilemap(gUnknown_203F464);
- ClearMenuWindow(gUnknown_203F464, 1);
+ ClearStdWindowAndFrameToTransparent(gUnknown_203F464, 1);
RemoveWindow(gUnknown_203F464);
}
diff --git a/src/buy_menu_helpers.c b/src/buy_menu_helpers.c
index 4febb8209..4cdf90e4e 100644
--- a/src/buy_menu_helpers.c
+++ b/src/buy_menu_helpers.c
@@ -202,12 +202,12 @@ void BuyMenuDisplayMessage(u8 taskId, const u8 *text, TaskFunc callback)
void BuyMenuQuantityBoxNormalBorder(u8 windowId, bool8 copyToVram)
{
- SetWindowBorderStyle(windowId, copyToVram, 0x1, 0xD);
+ DrawStdFrameWithCustomTileAndPalette(windowId, copyToVram, 0x1, 0xD);
}
void BuyMenuQuantityBoxThinBorder(u8 windowId, bool8 copyToVram)
{
- SetWindowBorderStyle(windowId, copyToVram, 0xA, 0xF);
+ DrawStdFrameWithCustomTileAndPalette(windowId, copyToVram, 0xA, 0xF);
}
void BuyMenuConfirmPurchase(u8 taskId, const struct YesNoFuncTable *yesNo)
diff --git a/src/coins.c b/src/coins.c
index 3a51f6813..a3c074b7c 100644
--- a/src/coins.c
+++ b/src/coins.c
@@ -61,7 +61,7 @@ void PrintCoinsString_Parameterized(u8 windowId, u32 coinAmount, u8 x, u8 y, u8
void sub_80D0674(u8 windowId, u16 tileStart, u8 palette, u32 coinAmount)
{
- SetWindowBorderStyle(windowId, FALSE, tileStart, palette);
+ DrawStdFrameWithCustomTileAndPalette(windowId, FALSE, tileStart, palette);
AddTextPrinterParameterized(windowId, 2, gUnknown_8417C2D, 0, 0, 0xFF, 0);
PrintCoinsString_Parameterized(windowId, coinAmount, 0x10, 0xC, 0);
}
@@ -88,7 +88,7 @@ void ShowCoinsWindow(u32 coinAmount, u8 x, u8 y)
FillWindowPixelBuffer(sCoinsWindowId, 0);
PutWindowTilemap(sCoinsWindowId);
TextWindow_SetStdFrame0_WithPal(sCoinsWindowId, 0x21D, 0xD0);
- SetWindowBorderStyle(sCoinsWindowId, FALSE, 0x21D, 0xD);
+ DrawStdFrameWithCustomTileAndPalette(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);
- ClearMenuWindow(sCoinsWindowId, TRUE);
+ ClearStdWindowAndFrameToTransparent(sCoinsWindowId, TRUE);
RemoveWindow(sCoinsWindowId);
}
diff --git a/src/fldeff_softboiled.c b/src/fldeff_softboiled.c
index 2a3d68e70..67000e315 100644
--- a/src/fldeff_softboiled.c
+++ b/src/fldeff_softboiled.c
@@ -85,7 +85,7 @@ static void sub_80E58A0(u8 taskId)
sub_811F818(gUnknown_203B0A0.unk9, 0);
gUnknown_203B0A0.unk9 = gUnknown_203B0A0.unkA;
sub_811F818(gUnknown_203B0A0.unkA, 1);
- ClearMenuWindow(6, 0);
+ ClearStdWindowAndFrameToTransparent(6, 0);
ClearWindowTilemap(6);
sub_8121D0C(0);
gTasks[taskId].func = sub_811FB28;
diff --git a/src/item_pc.c b/src/item_pc.c
index abafaa8d9..8f1fd1cbf 100644
--- a/src/item_pc.c
+++ b/src/item_pc.c
@@ -845,7 +845,7 @@ static void Task_ItemPcSubmenuInit(u8 taskId)
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);
+ Menu_InitCursor(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);
@@ -855,7 +855,7 @@ static void Task_ItemPcSubmenuInit(u8 taskId)
static void Task_ItemPcSubmenuRun(u8 taskId)
{
- s8 input = ProcessMenuInputNoWrapAround();
+ s8 input = Menu_ProcessInputNoWrapAround();
switch (input)
{
case -1:
@@ -874,7 +874,7 @@ static void Task_ItemPcWithdraw(u8 taskId)
{
s16 * data = gTasks[taskId].data;
- ClearMenuWindow(4, FALSE);
+ ClearStdWindowAndFrameToTransparent(4, FALSE);
ItemPc_DestroySubwindow(0);
ClearWindowTilemap(4);
data[8] = 1;
@@ -998,7 +998,7 @@ static void Task_ItemPcHandleWithdrawMultiple(u8 taskId)
else if (JOY_NEW(B_BUTTON))
{
PlaySE(SE_SELECT);
- ClearMenuWindow(3, FALSE);
+ ClearStdWindowAndFrameToTransparent(3, FALSE);
ItemPc_DestroySubwindow(1);
ClearWindowTilemap(3);
PutWindowTilemap(0);
@@ -1014,7 +1014,7 @@ static void Task_ItemPcGive(u8 taskId)
{
if (CalculatePlayerPartyCount() == 0)
{
- ClearMenuWindow(4, FALSE);
+ ClearStdWindowAndFrameToTransparent(4, FALSE);
ItemPc_DestroySubwindow(0);
ClearWindowTilemap(4);
PutWindowTilemap(0);
@@ -1045,7 +1045,7 @@ static void gTask_ItemPcWaitButtonAndExitSubmenu(u8 taskId)
if (JOY_NEW(A_BUTTON))
{
PlaySE(SE_SELECT);
- ClearMenuWindow_BorderThickness2(5, 0);
+ ClearDialogWindowAndFrameToTransparent(5, 0);
ClearWindowTilemap(5);
PutWindowTilemap(1);
ItemPc_PrintOrRemoveCursor(data[0], 1);
@@ -1058,7 +1058,7 @@ static void Task_ItemPcCancel(u8 taskId)
{
s16 * data = gTasks[taskId].data;
- ClearMenuWindow(4, FALSE);
+ ClearStdWindowAndFrameToTransparent(4, FALSE);
ItemPc_DestroySubwindow(0);
ClearWindowTilemap(4);
PutWindowTilemap(0);
@@ -1116,7 +1116,7 @@ static void ItemPc_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8
static void ItemPc_SetBorderStyleOnWindow(u8 windowId)
{
- SetWindowBorderStyle(windowId, FALSE, 0x3C0, 0x0E);
+ DrawStdFrameWithCustomTileAndPalette(windowId, FALSE, 0x3C0, 0x0E);
}
static u8 ItemPc_GetOrCreateSubwindow(u8 idx)
@@ -1124,7 +1124,7 @@ static u8 ItemPc_GetOrCreateSubwindow(u8 idx)
if (sSubmenuWindowIds[idx] == 0xFF)
{
sSubmenuWindowIds[idx] = AddWindow(&gUnknown_8453FD0[idx]);
- SetWindowBorderStyle(sSubmenuWindowIds[idx], TRUE, 0x3A3, 0x0C);
+ DrawStdFrameWithCustomTileAndPalette(sSubmenuWindowIds[idx], TRUE, 0x3A3, 0x0C);
}
return sSubmenuWindowIds[idx];
@@ -1132,7 +1132,7 @@ static u8 ItemPc_GetOrCreateSubwindow(u8 idx)
static void ItemPc_DestroySubwindow(u8 idx)
{
- ClearMenuWindow(sSubmenuWindowIds[idx], FALSE);
+ ClearStdWindowAndFrameToTransparent(sSubmenuWindowIds[idx], FALSE);
ClearWindowTilemap(sSubmenuWindowIds[idx]); // redundant
RemoveWindow(sSubmenuWindowIds[idx]);
sSubmenuWindowIds[idx] = 0xFF;
diff --git a/src/menu.c b/src/menu.c
new file mode 100644
index 000000000..ac2e0160b
--- /dev/null
+++ b/src/menu.c
@@ -0,0 +1,984 @@
+#include "global.h"
+#include "bg.h"
+#include "malloc.h"
+#include "menu.h"
+#include "menu_helpers.h"
+#include "new_menu_helpers.h"
+#include "string_util.h"
+#include "strings.h"
+#include "task.h"
+#include "text_window.h"
+#include "window.h"
+#include "sound.h"
+#include "palette.h"
+#include "constants/songs.h"
+
+struct Menu
+{
+ u8 left;
+ u8 top;
+ s8 cursorPos;
+ s8 minCursorPos;
+ s8 maxCursorPos;
+ u8 windowId;
+ u8 fontId;
+ u8 optionWidth;
+ u8 optionHeight;
+ u8 columns;
+ u8 rows;
+ bool8 APressMuted;
+};
+
+static EWRAM_DATA struct Menu sMenu = {0};
+static EWRAM_DATA u16 sTileNum = 0;
+static EWRAM_DATA u8 sPaletteNum = 0;
+static EWRAM_DATA u8 sYesNoWindowId = 0;
+static EWRAM_DATA u8 sTopBarWindowId = 0;
+
+static const struct TextColor gUnknown_8456618 =
+{
+ .fgColor = 15,
+ .bgColor = 1,
+ .shadowColor = 2,
+};
+
+static void WindowFunc_DrawDialogFrameWithCustomTileAndPalette(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 paletteNum);
+static void WindowFunc_ClearDialogWindowAndFrameNullPalette(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 paletteNum);
+static void WindowFunc_DrawStdFrameWithCustomTileAndPalette(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 paletteNum);
+static void WindowFunc_ClearStdWindowAndFrameToTransparent(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 paletteNum);
+static u8 MultichoiceGridComputeNewCursorPos(s8 deltaX, s8 deltaY);
+u8 Menu_MoveCursor(s8 cursorDelta);
+void DestroyYesNoMenu(void);
+
+void DrawDialogFrameWithCustomTileAndPalette(u8 windowId, bool8 copyToVram, u16 tileNum, u8 paletteNum)
+{
+ sTileNum = tileNum;
+ sPaletteNum = paletteNum;
+ CallWindowFunction(windowId, WindowFunc_DrawDialogFrameWithCustomTileAndPalette);
+ FillWindowPixelBuffer(windowId, PIXEL_FILL(1));
+ PutWindowTilemap(windowId);
+ if (copyToVram == TRUE)
+ CopyWindowToVram(windowId, 3);
+}
+
+// not used
+static void DrawDialogFrameWithCustomTile(u8 windowId, bool8 copyToVram, u16 tileNum)
+{
+ sTileNum = tileNum;
+ sPaletteNum = GetWindowAttribute(windowId, WINDOW_PALETTE_NUM);
+ CallWindowFunction(windowId, WindowFunc_DrawDialogFrameWithCustomTileAndPalette);
+ FillWindowPixelBuffer(windowId, PIXEL_FILL(1));
+ PutWindowTilemap(windowId);
+ if (copyToVram == TRUE)
+ CopyWindowToVram(windowId, 3);
+}
+
+static void WindowFunc_DrawDialogFrameWithCustomTileAndPalette(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 paletteNum)
+{
+ FillBgTilemapBufferRect(bg, sTileNum, tilemapLeft - 2, tilemapTop - 1, 1, 1, sPaletteNum);
+ FillBgTilemapBufferRect(bg, sTileNum + 1, tilemapLeft - 1, tilemapTop - 1, 1, 1, sPaletteNum);
+ FillBgTilemapBufferRect(bg, sTileNum + 2, tilemapLeft, tilemapTop - 1, width, 1, sPaletteNum);
+ FillBgTilemapBufferRect(bg, sTileNum + 3, tilemapLeft + width, tilemapTop - 1, 1, 1, sPaletteNum);
+ FillBgTilemapBufferRect(bg, sTileNum + 4, tilemapLeft + width + 1, tilemapTop - 1, 1, 1, sPaletteNum);
+ FillBgTilemapBufferRect(bg, sTileNum + 5, tilemapLeft - 2, tilemapTop, 1, 1, sPaletteNum);
+ FillBgTilemapBufferRect(bg, sTileNum + 6, tilemapLeft - 1, tilemapTop, 1, 1, sPaletteNum);
+ FillBgTilemapBufferRect(bg, sTileNum + 8, tilemapLeft + width, tilemapTop, 1, 1, sPaletteNum);
+ FillBgTilemapBufferRect(bg, sTileNum + 9, tilemapLeft + width + 1, tilemapTop, 1, 1, sPaletteNum);
+ FillBgTilemapBufferRect(bg, sTileNum + 10, tilemapLeft - 2, tilemapTop + 1, 1, 1, sPaletteNum);
+ FillBgTilemapBufferRect(bg, sTileNum + 11, tilemapLeft - 1, tilemapTop + 1, 1, 1, sPaletteNum);
+ FillBgTilemapBufferRect(bg, sTileNum + 12, tilemapLeft + width, tilemapTop + 1, 1, 1, sPaletteNum);
+ FillBgTilemapBufferRect(bg, sTileNum + 13, tilemapLeft + width + 1, tilemapTop + 1, 1, 1, sPaletteNum);
+ FillBgTilemapBufferRect(bg, BG_TILE_V_FLIP(sTileNum + 10), tilemapLeft - 2, tilemapTop + 2, 1, 1, sPaletteNum);
+ FillBgTilemapBufferRect(bg, BG_TILE_V_FLIP(sTileNum + 11), tilemapLeft - 1, tilemapTop + 2, 1, 1, sPaletteNum);
+ FillBgTilemapBufferRect(bg, BG_TILE_V_FLIP(sTileNum + 12), tilemapLeft + width, tilemapTop + 2, 1, 1, sPaletteNum);
+ FillBgTilemapBufferRect(bg, BG_TILE_V_FLIP(sTileNum + 13), tilemapLeft + width + 1, tilemapTop + 2, 1, 1, sPaletteNum);
+ FillBgTilemapBufferRect(bg, BG_TILE_V_FLIP(sTileNum + 5), tilemapLeft - 2, tilemapTop + 3, 1, 1, sPaletteNum);
+ FillBgTilemapBufferRect(bg, BG_TILE_V_FLIP(sTileNum + 6), tilemapLeft - 1, tilemapTop + 3, 1, 1, sPaletteNum);
+ FillBgTilemapBufferRect(bg, BG_TILE_V_FLIP(sTileNum + 8), tilemapLeft + width, tilemapTop + 3, 1, 1, sPaletteNum);
+ FillBgTilemapBufferRect(bg, BG_TILE_V_FLIP(sTileNum + 9), tilemapLeft + width + 1, tilemapTop + 3, 1, 1, sPaletteNum);
+ FillBgTilemapBufferRect(bg, BG_TILE_V_FLIP(sTileNum), tilemapLeft - 2, tilemapTop + 4, 1, 1, sPaletteNum);
+ FillBgTilemapBufferRect(bg, BG_TILE_V_FLIP(sTileNum + 1), tilemapLeft - 1, tilemapTop + 4, 1, 1, sPaletteNum);
+ FillBgTilemapBufferRect(bg, BG_TILE_V_FLIP(sTileNum + 2), tilemapLeft, tilemapTop + 4, width, 1, sPaletteNum);
+ FillBgTilemapBufferRect(bg, BG_TILE_V_FLIP(sTileNum + 3), tilemapLeft + width, tilemapTop + 4, 1, 1, sPaletteNum);
+ FillBgTilemapBufferRect(bg, BG_TILE_V_FLIP(sTileNum + 4), tilemapLeft + width + 1, tilemapTop + 4, 1, 1, sPaletteNum);
+}
+
+void ClearDialogWindowAndFrameToTransparent(u8 windowId, bool8 copyToVram)
+{
+ // The palette slot doesn't matter, since the tiles are transparent.
+ CallWindowFunction(windowId, WindowFunc_ClearDialogWindowAndFrameNullPalette);
+ FillWindowPixelBuffer(windowId, PIXEL_FILL(0));
+ ClearWindowTilemap(windowId);
+ if (copyToVram == TRUE)
+ CopyWindowToVram(windowId, 3);
+}
+
+static void WindowFunc_ClearDialogWindowAndFrameNullPalette(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 paletteNum)
+{
+ FillBgTilemapBufferRect(bg, 0, tilemapLeft - 2, tilemapTop - 1, width + 4, height + 2, 0);
+}
+
+void DrawStdFrameWithCustomTileAndPalette(u8 windowId, bool8 copyToVram, u16 baseTileNum, u8 paletteNum)
+{
+ sTileNum = baseTileNum;
+ sPaletteNum = paletteNum;
+ CallWindowFunction(windowId, WindowFunc_DrawStdFrameWithCustomTileAndPalette);
+ FillWindowPixelBuffer(windowId, PIXEL_FILL(1));
+ PutWindowTilemap(windowId);
+ if (copyToVram == TRUE)
+ CopyWindowToVram(windowId, 3);
+}
+
+// not used
+static void DrawStdFrameWithCustomTile(u8 windowId, bool8 copyToVram, u16 baseTileNum)
+{
+ sTileNum = baseTileNum;
+ sPaletteNum = GetWindowAttribute(windowId, WINDOW_PALETTE_NUM);
+ CallWindowFunction(windowId, WindowFunc_DrawStdFrameWithCustomTileAndPalette);
+ FillWindowPixelBuffer(windowId, PIXEL_FILL(1));
+ PutWindowTilemap(windowId);
+ if (copyToVram == TRUE)
+ CopyWindowToVram(windowId, 3);
+}
+
+static void WindowFunc_DrawStdFrameWithCustomTileAndPalette(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 paletteNum)
+{
+ FillBgTilemapBufferRect(bg, sTileNum, tilemapLeft - 1, tilemapTop - 1, 1, 1, sPaletteNum);
+ FillBgTilemapBufferRect(bg, sTileNum + 1, tilemapLeft, tilemapTop - 1, width, 1, sPaletteNum);
+ FillBgTilemapBufferRect(bg, sTileNum + 2, tilemapLeft + width, tilemapTop - 1, 1, 1, sPaletteNum);
+ FillBgTilemapBufferRect(bg, sTileNum + 3, tilemapLeft - 1, tilemapTop, 1, height, sPaletteNum);
+ FillBgTilemapBufferRect(bg, sTileNum + 5, tilemapLeft + width, tilemapTop, 1, height, sPaletteNum);
+ FillBgTilemapBufferRect(bg, sTileNum + 6, tilemapLeft - 1, tilemapTop + height, 1, 1, sPaletteNum);
+ FillBgTilemapBufferRect(bg, sTileNum + 7, tilemapLeft, tilemapTop + height, width, 1, sPaletteNum);
+ FillBgTilemapBufferRect(bg, sTileNum + 8, tilemapLeft + width, tilemapTop + height, 1, 1, sPaletteNum);
+}
+
+void ClearStdWindowAndFrameToTransparent(u8 windowId, bool8 copyToVram)
+{
+ CallWindowFunction(windowId, WindowFunc_ClearStdWindowAndFrameToTransparent);
+ FillWindowPixelBuffer(windowId, PIXEL_FILL(0));
+ ClearWindowTilemap(windowId);
+ if (copyToVram == TRUE)
+ CopyWindowToVram(windowId, 3);
+}
+
+static void WindowFunc_ClearStdWindowAndFrameToTransparent(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 paletteNum)
+{
+ FillBgTilemapBufferRect(bg, 0, tilemapLeft - 1, tilemapTop - 1, width + 2, height + 2, 0);
+}
+
+/*
+ The following functions are used for handling top bar window
+ in hall of fame screen and story mode screen before oak intro.
+ However, you can still designate a yPos value to place that bar
+ as well as the bar width.
+ The xPos is simply computed according to width (always right aligned).
+*/
+u8 CreateTopBarWindowLoadPalette(u8 bg, u8 width, u8 yPos, u8 palette, u16 baseTile)
+{
+ struct WindowTemplate window;
+
+ memset(&window, 0, sizeof(window));
+ if (bg > 3)
+ window.bg = 0;
+ else
+ window.bg = bg;
+ window.tilemapTop = yPos;
+ window.height = 2;
+ window.tilemapLeft = 0x1E - width;
+ window.width = width;
+ window.paletteNum = palette;
+ window.baseBlock = baseTile;
+ sTopBarWindowId = AddWindow(&window);
+ if (palette > 15)
+ palette = 15 * 16;
+ else
+ palette *= 16;
+ LoadPalette(stdpal_get(2), palette, 0x20);
+ return sTopBarWindowId;
+}
+
+void TopBarWindowPrintString(const u8 *string, u8 unUsed, bool8 copyToVram)
+{
+ s32 width;
+
+ if (sTopBarWindowId != 0xFF)
+ {
+ PutWindowTilemap(sTopBarWindowId);
+ FillWindowPixelBuffer(sTopBarWindowId, PIXEL_FILL(15));
+ width = GetStringWidth(0, string, 0);
+ AddTextPrinterParameterized3(sTopBarWindowId, 0, -20 - width, 1, &gUnknown_8456618, 0, string);
+ if (copyToVram)
+ CopyWindowToVram(sTopBarWindowId, 3);
+ }
+}
+
+
+void TopBarWindowPrintTwoStrings(const u8 *string, const u8 *string2, bool8 fgColorChooser, u8 notUsed, bool8 copyToVram)
+{
+ struct TextColor color;
+ s32 fgColor, width;
+
+ if ( sTopBarWindowId != 0xFF )
+ {
+ if (fgColorChooser)
+ {
+ color.fgColor = 0;
+ color.bgColor = 1;
+ color.shadowColor = 2;
+ }
+ else
+ {
+ color.fgColor = 15;
+ color.bgColor = 1;
+ color.shadowColor = 2;
+ }
+
+ PutWindowTilemap(sTopBarWindowId);
+ FillWindowPixelBuffer(sTopBarWindowId, PIXEL_FILL(15));
+ if (string2)
+ {
+ width = GetStringWidth(0, string2, 0);
+ AddTextPrinterParameterized3(sTopBarWindowId, 0, -20 - width, 1, &color, 0, string2);
+ }
+ AddTextPrinterParameterized4(sTopBarWindowId, 1, 4, 1, 0, 0, &color, 0, string);
+ if (copyToVram)
+ CopyWindowToVram(sTopBarWindowId, 3);
+ }
+}
+
+// not used
+static void Unused_CopyTopBarWindowToVram(void)
+{
+ if (sTopBarWindowId != 0xFF)
+ CopyWindowToVram(sTopBarWindowId, 3);
+}
+
+void ClearTopBarWindow(void)
+{
+ if (sTopBarWindowId != 0xFF)
+ {
+ FillWindowPixelBuffer(sTopBarWindowId, PIXEL_FILL(15));
+ CopyWindowToVram(sTopBarWindowId, 3);
+ }
+}
+
+void DestroyTopBarWindow(void)
+{
+ if (sTopBarWindowId != 0xFF)
+ {
+ FillWindowPixelBuffer(sTopBarWindowId, PIXEL_FILL(0));
+ ClearWindowTilemap(sTopBarWindowId);
+ CopyWindowToVram(sTopBarWindowId, 3);
+ RemoveWindow(sTopBarWindowId);
+ sTopBarWindowId = 0xFF;
+ }
+}
+
+u8 Menu_InitCursorInternal(u8 windowId, u8 fontId, u8 left, u8 top, u8 cursorHeight, u8 numChoices, u8 initialCursorPos, bool8 APressMuted)
+{
+ s32 pos;
+
+ sMenu.left = left;
+ sMenu.top = top;
+ sMenu.minCursorPos = 0;
+ sMenu.maxCursorPos = numChoices - 1;
+ sMenu.windowId = windowId;
+ sMenu.fontId = fontId;
+ sMenu.optionHeight = cursorHeight;
+ sMenu.APressMuted = APressMuted;
+ pos = initialCursorPos;
+ if (pos < 0 || pos > sMenu.maxCursorPos)
+ sMenu.cursorPos = 0;
+ else
+ sMenu.cursorPos = pos;
+
+ Menu_MoveCursor(0);
+ return sMenu.cursorPos;
+}
+
+u8 Menu_InitCursor(u8 windowId, u8 fontId, u8 left, u8 top, u8 cursorHeight, u8 numChoices, u8 initialCursorPos)
+{
+ return Menu_InitCursorInternal(windowId, fontId, left, top, cursorHeight, numChoices, initialCursorPos, 0);
+}
+
+// not used
+static u8 sub_810F818(u8 windowId, u8 fontId, u8 left, u8 top, u8 numChoices, u8 initialCursorPos)
+{
+ return Menu_InitCursor(windowId, fontId, left, top, GetMenuCursorDimensionByFont(fontId, 1), numChoices, initialCursorPos);
+}
+
+void RedrawMenuCursor(u8 oldPos, u8 newPos)
+{
+ u8 width, height;
+
+ width = GetMenuCursorDimensionByFont(sMenu.fontId, 0);
+ height = GetMenuCursorDimensionByFont(sMenu.fontId, 1);
+ FillWindowPixelRect(sMenu.windowId, 1, sMenu.left, sMenu.optionHeight * oldPos + sMenu.top, width, height);
+ AddTextPrinterParameterized(sMenu.windowId, sMenu.fontId, gFameCheckerText_ListMenuCursor, sMenu.left, sMenu.optionHeight * newPos + sMenu.top, 0, 0);
+}
+
+u8 Menu_MoveCursor(s8 cursorDelta)
+{
+ u8 oldPos = sMenu.cursorPos;
+ s32 newPos = sMenu.cursorPos + cursorDelta;
+
+ if (newPos < sMenu.minCursorPos)
+ sMenu.cursorPos = sMenu.maxCursorPos;
+ else if (newPos > sMenu.maxCursorPos)
+ sMenu.cursorPos = sMenu.minCursorPos;
+ else
+ sMenu.cursorPos += cursorDelta;
+ RedrawMenuCursor(oldPos, sMenu.cursorPos);
+ return sMenu.cursorPos;
+}
+
+u8 Menu_MoveCursorNoWrapAround(s8 cursorDelta)
+{
+ u8 oldPos = sMenu.cursorPos;
+ s32 newPos = sMenu.cursorPos + cursorDelta;
+
+ if (newPos < sMenu.minCursorPos)
+ sMenu.cursorPos = sMenu.minCursorPos;
+ else if (newPos > sMenu.maxCursorPos)
+ sMenu.cursorPos = sMenu.maxCursorPos;
+ else
+ sMenu.cursorPos += cursorDelta;
+
+ RedrawMenuCursor(oldPos, sMenu.cursorPos);
+ return sMenu.cursorPos;
+}
+
+u8 Menu_GetCursorPos(void)
+{
+ return sMenu.cursorPos;
+}
+
+s8 Menu_ProcessInput(void)
+{
+ if (JOY_NEW(A_BUTTON))
+ {
+ if (!sMenu.APressMuted)
+ PlaySE(SE_SELECT);
+ return sMenu.cursorPos;
+ }
+ else if (JOY_NEW(B_BUTTON))
+ {
+ return MENU_B_PRESSED;
+ }
+ else if (JOY_NEW(DPAD_UP))
+ {
+ PlaySE(SE_SELECT);
+ Menu_MoveCursor(-1);
+ return MENU_NOTHING_CHOSEN;
+ }
+ else if (JOY_NEW(DPAD_DOWN))
+ {
+ PlaySE(SE_SELECT);
+ Menu_MoveCursor(1);
+ return MENU_NOTHING_CHOSEN;
+ }
+ return MENU_NOTHING_CHOSEN;
+}
+
+s8 Menu_ProcessInputNoWrapAround(void)
+{
+ u8 oldPos = sMenu.cursorPos;
+
+ if (JOY_NEW(A_BUTTON))
+ {
+ if (!sMenu.APressMuted)
+ PlaySE(SE_SELECT);
+ return sMenu.cursorPos;
+ }
+ else if (JOY_NEW(B_BUTTON))
+ {
+ return MENU_B_PRESSED;
+ }
+ else if (JOY_NEW(DPAD_UP))
+ {
+ if (oldPos != Menu_MoveCursorNoWrapAround(-1))
+ PlaySE(SE_SELECT);
+ return MENU_NOTHING_CHOSEN;
+ }
+ else if (JOY_NEW(DPAD_DOWN))
+ {
+ if (oldPos != Menu_MoveCursorNoWrapAround(1))
+ PlaySE(SE_SELECT);
+ return MENU_NOTHING_CHOSEN;
+ }
+ return MENU_NOTHING_CHOSEN;
+}
+
+s8 Menu_ProcessInput_other(void)
+{
+ if (JOY_NEW(A_BUTTON))
+ {
+ if (!sMenu.APressMuted)
+ PlaySE(SE_SELECT);
+ return sMenu.cursorPos;
+ }
+ else if (JOY_NEW(B_BUTTON))
+ {
+ return MENU_B_PRESSED;
+ }
+ else if (JOY_REPT(DPAD_ANY) == DPAD_UP)
+ {
+ PlaySE(SE_SELECT);
+ Menu_MoveCursor(-1);
+ return MENU_NOTHING_CHOSEN;
+ }
+ else if (JOY_REPT(DPAD_ANY) == DPAD_DOWN)
+ {
+ PlaySE(SE_SELECT);
+ Menu_MoveCursor(1);
+ return MENU_NOTHING_CHOSEN;
+ }
+ return MENU_NOTHING_CHOSEN;
+}
+
+s8 Menu_ProcessInputNoWrapAround_other(void)
+{
+ u8 oldPos = sMenu.cursorPos;
+
+ if (JOY_NEW(A_BUTTON))
+ {
+ if (!sMenu.APressMuted)
+ PlaySE(SE_SELECT);
+ return sMenu.cursorPos;
+ }
+ else if (JOY_NEW(B_BUTTON))
+ {
+ return MENU_B_PRESSED;
+ }
+ else if (JOY_REPT(DPAD_ANY) == DPAD_UP)
+ {
+ if (oldPos != Menu_MoveCursorNoWrapAround(-1))
+ PlaySE(SE_SELECT);
+ return MENU_NOTHING_CHOSEN;
+ }
+ else if (JOY_REPT(DPAD_ANY) == DPAD_DOWN)
+ {
+ if (oldPos != Menu_MoveCursorNoWrapAround(1))
+ PlaySE(SE_SELECT);
+ return MENU_NOTHING_CHOSEN;
+ }
+ return MENU_NOTHING_CHOSEN;
+}
+
+void PrintTextArray(u8 windowId, u8 fontId, u8 left, u8 top, u8 lineHeight, u8 itemCount, const struct MenuAction *strs)
+{
+ u8 i;
+
+ for (i = 0; i < itemCount; i++)
+ AddTextPrinterParameterized(windowId, fontId, strs[i].text, left, (lineHeight * i) + top, 0xFF, NULL);
+ CopyWindowToVram(windowId, 2);
+}
+
+void PrintMultichoiceListItems(u8 windowId, u8 fontId, u8 left, u8 top, u8 lineHeight, u8 itemCount, const struct MenuAction *strs, u8 letterSpacing, u8 lineSpacing)
+{
+ u8 i;
+
+ for (i = 0; i < itemCount; i++)
+ {
+ AddTextPrinterParameterized5(windowId, fontId, strs[i].text, left, (lineHeight * i) + top, 0xFF, NULL, letterSpacing, lineSpacing);
+ }
+ CopyWindowToVram(windowId, 2);
+}
+
+void UnionRoomAndTradeMenuPrintOptions(u8 windowId, u8 fontId, u8 lineHeight, u8 itemCount, const struct MenuAction *strs)
+{
+ u8 left = GetMenuCursorDimensionByFont(fontId, 0);
+
+ PrintTextArray(windowId, fontId, left, 0, lineHeight, itemCount, strs);
+}
+
+void AddItemMenuActionTextPrinters(u8 windowId, u8 fontId, u8 left, u8 top, u8 letterSpacing, u8 lineHeight, u8 itemCount, const struct MenuAction *strs, const u8 *orderArray)
+{
+ u8 i;
+ struct TextPrinterTemplate printer;
+
+ printer.windowId = windowId;
+ printer.fontId = fontId;
+ printer.fgColor = GetFontAttribute(fontId, FONTATTR_COLOR_FOREGROUND);
+ printer.bgColor = GetFontAttribute(fontId, FONTATTR_COLOR_BACKGROUND);
+ printer.shadowColor = GetFontAttribute(fontId, FONTATTR_COLOR_SHADOW);
+ printer.unk = GetFontAttribute(fontId, FONTATTR_UNKNOWN);
+ printer.letterSpacing = letterSpacing;
+ printer.lineSpacing = GetFontAttribute(fontId, FONTATTR_LINE_SPACING);
+ printer.x = left;
+ printer.currentX = left;
+ for (i = 0; i < itemCount; i++)
+ {
+ printer.currentChar = strs[orderArray[i]].text;
+ printer.y = (lineHeight * i) + top;
+ printer.currentY = printer.y;
+ AddTextPrinter(&printer, 0xFF, NULL);
+ }
+ CopyWindowToVram(windowId, 2);
+}
+
+// not used
+static void sub_810FDE4(u8 windowId, u8 fontId, u8 lineHeight, u8 itemCount, const struct MenuAction *strs, const u8 *orderArray)
+{
+ AddItemMenuActionTextPrinters(windowId, fontId, GetFontAttribute(fontId, FONTATTR_MAX_LETTER_WIDTH), 0, GetFontAttribute(fontId, FONTATTR_LETTER_SPACING), lineHeight, itemCount, strs, orderArray);
+}
+
+/*
+struct WindowTemplateWithAttr SetWindowTemplateFields(struct WindowTemplate *template, u8 bg, u8 left, u8 top, u8 width, u8 height, u8 paletteNum, u16 baseBlock)
+{
+ struct WindowTemplate temp;
+ struct WindowTemplateWithAttr ret;
+
+ temp.bg = bg;
+ temp.tilemapLeft = left;
+ temp.tilemapTop = top;
+ temp.width = width;
+ temp.height = height;
+ temp.paletteNum = paletteNum;
+ temp.baseBlock = baseBlock;
+ *template = temp;
+ ret.ptr = template;
+ ret.attr = *((u32*)&temp);
+ return ret;
+}
+*/
+NAKED
+void SetWindowTemplateFields(struct WindowTemplate *template, u8 bg, u8 left, u8 top, u8 width, u8 height, u8 paletteNum, u16 baseBlock)
+{
+ asm_unified("\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x8\n\
+ ldr r4, [sp, 0x28]\n\
+ mov r12, r4\n\
+ ldr r4, [sp, 0x2C]\n\
+ mov r9, r4\n\
+ ldr r4, [sp, 0x30]\n\
+ mov r10, r4\n\
+ ldr r7, [sp, 0x34]\n\
+ lsls r1, 24\n\
+ lsrs r1, 24\n\
+ lsls r2, 24\n\
+ lsls r3, 24\n\
+ mov r4, r9\n\
+ lsls r4, 24\n\
+ lsrs r4, 24\n\
+ mov r9, r4\n\
+ mov r4, r10\n\
+ lsls r4, 24\n\
+ mov r10, r4\n\
+ ldr r4, _0810FEF0 @ =0xffffff00\n\
+ mov r8, r4\n\
+ mov r5, r8\n\
+ ldr r4, [sp]\n\
+ ands r5, r4\n\
+ orrs r5, r1\n\
+ str r5, [sp]\n\
+ lsrs r2, 16\n\
+ ldr r6, _0810FEF4 @ =0xffff00ff\n\
+ adds r4, r6, 0\n\
+ ands r4, r5\n\
+ orrs r4, r2\n\
+ str r4, [sp]\n\
+ lsrs r3, 8\n\
+ ldr r1, _0810FEF8 @ =0xff00ffff\n\
+ ands r1, r4\n\
+ orrs r1, r3\n\
+ str r1, [sp]\n\
+ mov r2, r12\n\
+ lsls r2, 24\n\
+ mov r12, r2\n\
+ ldr r2, _0810FEFC @ =0x00ffffff\n\
+ ands r1, r2\n\
+ mov r4, r12\n\
+ orrs r4, r1\n\
+ str r4, [sp]\n\
+ ldr r1, [sp, 0x4]\n\
+ mov r2, r8\n\
+ ands r1, r2\n\
+ mov r4, r9\n\
+ orrs r1, r4\n\
+ mov r8, r1\n\
+ str r1, [sp, 0x4]\n\
+ mov r1, r10\n\
+ lsrs r1, 16\n\
+ mov r2, r8\n\
+ ands r6, r2\n\
+ orrs r6, r1\n\
+ str r6, [sp, 0x4]\n\
+ lsls r2, r7, 16\n\
+ ldr r1, _0810FF00 @ =0x0000ffff\n\
+ ands r6, r1\n\
+ orrs r6, r2\n\
+ str r6, [sp, 0x4]\n\
+ ldr r1, [sp]\n\
+ ldr r2, [sp, 0x4]\n\
+ str r1, [r0]\n\
+ str r2, [r0, 0x4]\n\
+ add sp, 0x8\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r2}\n\
+ bx r2\n\
+ .align 2, 0\n\
+ _0810FEF0: .4byte 0xffffff00\n\
+ _0810FEF4: .4byte 0xffff00ff\n\
+ _0810FEF8: .4byte 0xff00ffff\n\
+ _0810FEFC: .4byte 0x00ffffff\n\
+ _0810FF00: .4byte 0x0000ffff\n\
+ ");
+}
+
+// not used
+static u16 CreateWindowTemplate(u8 bg, u8 left, u8 top, u8 width, u8 height, u8 paletteNum, u16 baseBlock)
+{
+ struct WindowTemplate template, temp;
+
+ SetWindowTemplateFields(&template, bg, left, top, width, height, paletteNum, baseBlock);
+ temp = template;
+ return (u16)AddWindow(&temp);
+}
+
+void CreateYesNoMenu(const struct WindowTemplate *window, u8 fontId, u8 left, u8 top, u16 baseTileNum, u8 paletteNum, u8 initialCursorPos)
+{
+ struct TextPrinterTemplate textSubPrinter;
+
+ sYesNoWindowId = AddWindow(window);
+ DrawStdFrameWithCustomTileAndPalette(sYesNoWindowId, 1, baseTileNum, paletteNum);
+ textSubPrinter.currentChar = gUnknown_841623D;
+ textSubPrinter.windowId = sYesNoWindowId;
+ textSubPrinter.fontId = fontId;
+ textSubPrinter.x = GetMenuCursorDimensionByFont(fontId, 0) + left;
+ textSubPrinter.y = top;
+ textSubPrinter.currentX = textSubPrinter.x;
+ textSubPrinter.currentY = textSubPrinter.y;
+ textSubPrinter.fgColor = GetFontAttribute(fontId, FONTATTR_COLOR_FOREGROUND);
+ textSubPrinter.bgColor = GetFontAttribute(fontId, FONTATTR_COLOR_BACKGROUND);
+ textSubPrinter.shadowColor = GetFontAttribute(fontId, FONTATTR_COLOR_SHADOW);
+ textSubPrinter.unk = GetFontAttribute(fontId, FONTATTR_UNKNOWN);
+ textSubPrinter.letterSpacing = GetFontAttribute(fontId, FONTATTR_LETTER_SPACING);
+ textSubPrinter.lineSpacing = GetFontAttribute(fontId, FONTATTR_LINE_SPACING);
+ AddTextPrinter(&textSubPrinter, 0xFF, NULL);
+ Menu_InitCursor(sYesNoWindowId, fontId, left, top, GetFontAttribute(fontId, FONTATTR_MAX_LETTER_HEIGHT) + textSubPrinter.lineSpacing, 2, initialCursorPos);
+}
+
+// not used
+static void Unused_CreateYesNoMenu2(const struct WindowTemplate *window, u8 paletteNum, u16 baseTileNum, u8 initialCursorPos)
+{
+ CreateYesNoMenu(window, paletteNum, 0, 0, baseTileNum, initialCursorPos, 0);
+}
+
+s8 Menu_ProcessInputNoWrapClearOnChoose(void)
+{
+ s8 result = Menu_ProcessInputNoWrapAround();
+ if (result != MENU_NOTHING_CHOSEN)
+ DestroyYesNoMenu();
+ return result;
+}
+
+void DestroyYesNoMenu(void)
+{
+ ClearStdWindowAndFrameToTransparent(sYesNoWindowId, TRUE);
+ RemoveWindow(sYesNoWindowId);
+}
+
+void MultichoiceGridPrintItems(u8 windowId, u8 fontId, u8 itemWidth, u8 itemHeight, u8 cols, u8 rows, const struct MenuAction *strs)
+{
+ u8 width, i, j, yOffset;
+
+ fontId = fontId;
+ itemWidth = itemWidth;
+ itemHeight = itemHeight;
+ width = GetFontAttribute(fontId, FONTATTR_MAX_LETTER_WIDTH);
+ yOffset = (16 - GetFontAttribute(fontId, FONTATTR_MAX_LETTER_HEIGHT)) / 2;
+ for (i = 0; i < rows; ++i)
+ for (j = 0; j < cols; ++j)
+ AddTextPrinterParameterized(windowId, fontId, strs[i * cols + j].text, itemWidth * j + width, yOffset + itemHeight * i, 0xFF, 0);
+ CopyWindowToVram(windowId, 2);
+}
+
+//not used
+static void Unused_MultichoiceGridPrintItemsCustomOrder(u8 windowId, u8 fontId, u8 itemWidth, u8 itemHeight, u8 cols, u8 rows, const struct MenuAction *strs, const u8 *orderArray)
+{
+ u8 width, i, j;
+
+ fontId = fontId;
+ itemWidth = itemWidth;
+ itemHeight = itemHeight;
+ width = GetFontAttribute(fontId, FONTATTR_MAX_LETTER_WIDTH);
+ for (i = 0; i < rows; ++i)
+ for (j = 0; j < cols; ++j)
+ AddTextPrinterParameterized(windowId, fontId, strs[orderArray[i * cols + j]].text, itemWidth * j + width, itemHeight * i, 0xFF, 0);
+ CopyWindowToVram(windowId, 2);
+}
+
+static u8 MultichoiceGridInitCursorInternal(u8 windowId, u8 fontId, u8 left, u8 top, u8 optionWidth, u8 cursorHeight, u8 cols, u8 rows, u8 numChoices, u8 cursorPos)
+{
+ s32 pos;
+
+ sMenu.left = left;
+ sMenu.top = top;
+ sMenu.minCursorPos = 0;
+ sMenu.maxCursorPos = numChoices - 1;
+ sMenu.windowId = windowId;
+ sMenu.fontId = fontId;
+ sMenu.optionWidth = optionWidth;
+ sMenu.optionHeight = cursorHeight;
+ sMenu.columns = cols;
+ sMenu.rows = rows;
+ pos = cursorPos;
+ if (pos < 0 || pos > sMenu.maxCursorPos)
+ sMenu.cursorPos = 0;
+ else
+ sMenu.cursorPos = pos;
+ MultichoiceGridComputeNewCursorPos(0, 0);
+ return sMenu.cursorPos;
+}
+
+u8 MultichoiceGridInitCursor(u8 windowId, u8 fontId, u8 left, u8 top, u8 optionWidth, u8 cols, u8 rows, u8 cursorPos)
+{
+ s32 cursorHeight = 16;
+ u8 numChoices = cols * rows;
+
+ return MultichoiceGridInitCursorInternal(windowId, fontId, left, top, optionWidth, cursorHeight, cols, rows, numChoices, cursorPos);
+}
+
+static void MultichoiceGridUpdateCursorPos(u8 oldCursorPos, u8 newCursorPos)
+{
+ u8 cursorWidth = GetMenuCursorDimensionByFont(sMenu.fontId, 0);
+ u8 cursorHeight = GetMenuCursorDimensionByFont(sMenu.fontId, 1);
+ u8 xPos = (oldCursorPos % sMenu.columns) * sMenu.optionWidth + sMenu.left;
+ u8 yPos = (oldCursorPos / sMenu.columns) * sMenu.optionHeight + sMenu.top;
+
+ FillWindowPixelRect(sMenu.windowId, PIXEL_FILL(1), xPos, yPos, cursorWidth, cursorHeight);
+ xPos = (newCursorPos % sMenu.columns) * sMenu.optionWidth + sMenu.left;
+ yPos = (newCursorPos / sMenu.columns) * sMenu.optionHeight + sMenu.top;
+ AddTextPrinterParameterized(sMenu.windowId, sMenu.fontId, gFameCheckerText_ListMenuCursor, xPos, yPos, 0, 0);
+}
+
+static u8 MultichoiceGridComputeNewCursorPos(s8 deltaX, s8 deltaY)
+{
+ u8 oldPos = sMenu.cursorPos;
+
+ if (deltaX)
+ {
+ if ((sMenu.cursorPos % sMenu.columns) + deltaX < 0)
+ sMenu.cursorPos += sMenu.columns - 1;
+ else if ((sMenu.cursorPos % sMenu.columns) + deltaX >= sMenu.columns)
+ sMenu.cursorPos = (sMenu.cursorPos / sMenu.columns) * sMenu.columns;
+ else
+ sMenu.cursorPos += deltaX;
+ }
+ if (deltaY)
+ {
+ if ((sMenu.cursorPos / sMenu.columns) + deltaY < 0)
+ sMenu.cursorPos += sMenu.columns * (sMenu.rows - 1);
+ else if ((sMenu.cursorPos / sMenu.columns) + deltaY >= sMenu.rows)
+ sMenu.cursorPos -= sMenu.columns * (sMenu.rows - 1);
+ else
+ sMenu.cursorPos += (sMenu.columns * deltaY);
+ }
+ if (sMenu.cursorPos > sMenu.maxCursorPos)
+ {
+ sMenu.cursorPos = oldPos;
+ return sMenu.cursorPos;
+ }
+ else
+ {
+ MultichoiceGridUpdateCursorPos(oldPos, sMenu.cursorPos);
+ return sMenu.cursorPos;
+ }
+}
+
+static u8 MultichoiceGridComputeNewCursorPosIfValid(s8 deltaX, s8 deltaY)
+{
+ u8 oldPos = sMenu.cursorPos;
+
+ if (deltaX)
+ {
+ if (((sMenu.cursorPos % sMenu.columns) + deltaX >= 0) && ((sMenu.cursorPos % sMenu.columns) + deltaX < sMenu.columns))
+ sMenu.cursorPos += deltaX;
+ }
+ if (deltaY)
+ {
+ if (((sMenu.cursorPos / sMenu.columns) + deltaY >= 0) && ((sMenu.cursorPos / sMenu.columns) + deltaY < sMenu.rows))
+ sMenu.cursorPos += (sMenu.columns * deltaY);
+ }
+ if (sMenu.cursorPos > sMenu.maxCursorPos)
+ {
+ sMenu.cursorPos = oldPos;
+ return sMenu.cursorPos;
+ }
+ else
+ {
+ MultichoiceGridUpdateCursorPos(oldPos, sMenu.cursorPos);
+ return sMenu.cursorPos;
+ }
+}
+
+// not used
+static s8 sub_81105A0(void)
+{
+ if (JOY_NEW(A_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ return sMenu.cursorPos;
+ }
+ else if (JOY_NEW(B_BUTTON))
+ {
+ return MENU_B_PRESSED;
+ }
+ else if (JOY_NEW(DPAD_UP))
+ {
+ PlaySE(SE_SELECT);
+ MultichoiceGridComputeNewCursorPos(0, -1);
+ return MENU_NOTHING_CHOSEN;
+ }
+ else if (JOY_NEW(DPAD_DOWN))
+ {
+ PlaySE(SE_SELECT);
+ MultichoiceGridComputeNewCursorPos(0, 1);
+ return MENU_NOTHING_CHOSEN;
+ }
+ else if (JOY_NEW(DPAD_LEFT) || GetLRKeysState() == 1)
+ {
+ PlaySE(SE_SELECT);
+ MultichoiceGridComputeNewCursorPos(-1, 0);
+ return MENU_NOTHING_CHOSEN;
+ }
+ else if (JOY_NEW(DPAD_RIGHT) || GetLRKeysState() == 2)
+ {
+ PlaySE(SE_SELECT);
+ MultichoiceGridComputeNewCursorPos(1, 0);
+ return MENU_NOTHING_CHOSEN;
+ }
+ return MENU_NOTHING_CHOSEN;
+}
+
+s8 Menu_ProcessInputGridLayout(void)
+{
+ u8 oldPos = sMenu.cursorPos;
+
+ if (JOY_NEW(A_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ return sMenu.cursorPos;
+ }
+ else if (JOY_NEW(B_BUTTON))
+ {
+ return MENU_B_PRESSED;
+ }
+ else if (JOY_NEW(DPAD_UP))
+ {
+ if (oldPos != MultichoiceGridComputeNewCursorPosIfValid(0, -1))
+ PlaySE(SE_SELECT);
+ return MENU_NOTHING_CHOSEN;
+ }
+ else if (JOY_NEW(DPAD_DOWN))
+ {
+ if (oldPos != MultichoiceGridComputeNewCursorPosIfValid(0, 1))
+ PlaySE(SE_SELECT);
+ return MENU_NOTHING_CHOSEN;
+ }
+ else if (JOY_NEW(DPAD_LEFT) || GetLRKeysState() == 1)
+ {
+ if (oldPos != MultichoiceGridComputeNewCursorPosIfValid(-1, 0))
+ PlaySE(SE_SELECT);
+ return MENU_NOTHING_CHOSEN;
+ }
+ else if (JOY_NEW(DPAD_RIGHT) || GetLRKeysState() == 2)
+ {
+ if (oldPos != MultichoiceGridComputeNewCursorPosIfValid(1, 0))
+ PlaySE(SE_SELECT);
+ return MENU_NOTHING_CHOSEN;
+ }
+ return MENU_NOTHING_CHOSEN;
+}
+
+// not used
+static s8 sub_81106F4(void)
+{
+ if (JOY_NEW(A_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ return sMenu.cursorPos;
+ }
+ else if (JOY_NEW(B_BUTTON))
+ {
+ return MENU_B_PRESSED;
+ }
+ else if (JOY_REPT(DPAD_ANY) == DPAD_UP)
+ {
+ PlaySE(SE_SELECT);
+ MultichoiceGridComputeNewCursorPos(0, -1);
+ return MENU_NOTHING_CHOSEN;
+ }
+ else if (JOY_REPT(DPAD_ANY) == DPAD_DOWN)
+ {
+ PlaySE(SE_SELECT);
+ MultichoiceGridComputeNewCursorPos(0, 1);
+ return MENU_NOTHING_CHOSEN;
+ }
+ else if (JOY_REPT(DPAD_ANY) == DPAD_LEFT || sub_80BF66C() == 1)
+ {
+ PlaySE(SE_SELECT);
+ MultichoiceGridComputeNewCursorPos(-1, 0);
+ return MENU_NOTHING_CHOSEN;
+ }
+ else if (JOY_REPT(DPAD_ANY) == DPAD_RIGHT || sub_80BF66C() == 2)
+ {
+ PlaySE(SE_SELECT);
+ MultichoiceGridComputeNewCursorPos(1, 0);
+ return MENU_NOTHING_CHOSEN;
+ }
+
+ return MENU_NOTHING_CHOSEN;
+}
+
+// not used
+static s8 sub_81107A0(void)
+{
+ u8 oldPos = sMenu.cursorPos;
+
+ if (JOY_NEW(A_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ return sMenu.cursorPos;
+ }
+ else if (JOY_NEW(B_BUTTON))
+ {
+ return MENU_B_PRESSED;
+ }
+ else if (JOY_REPT(DPAD_ANY) == DPAD_UP)
+ {
+ if (oldPos != MultichoiceGridComputeNewCursorPosIfValid(0, -1))
+ PlaySE(SE_SELECT);
+ return MENU_NOTHING_CHOSEN;
+ }
+ else if (JOY_REPT(DPAD_ANY) == DPAD_DOWN)
+ {
+ if (oldPos != MultichoiceGridComputeNewCursorPosIfValid(0, 1))
+ PlaySE(SE_SELECT);
+ return MENU_NOTHING_CHOSEN;
+ }
+ else if (JOY_REPT(DPAD_ANY) == DPAD_LEFT || sub_80BF66C() == 1)
+ {
+ if (oldPos != MultichoiceGridComputeNewCursorPosIfValid(-1, 0))
+ PlaySE(SE_SELECT);
+ return MENU_NOTHING_CHOSEN;
+ }
+ else if (JOY_REPT(DPAD_ANY) == DPAD_RIGHT || sub_80BF66C() == 2)
+ {
+ if (oldPos != MultichoiceGridComputeNewCursorPosIfValid(1, 0))
+ PlaySE(SE_SELECT);
+ return MENU_NOTHING_CHOSEN;
+ }
+ return MENU_NOTHING_CHOSEN;
+}
diff --git a/src/money.c b/src/money.c
index ffaba2e29..616b448e1 100644
--- a/src/money.c
+++ b/src/money.c
@@ -109,7 +109,7 @@ void PrintMoneyAmount(u8 windowId, u8 x, u8 y, int amount, u8 speed)
void PrintMoneyAmountInMoneyBoxWithBorder(u8 windowId, u16 tileStart, u8 pallete, int amount)
{
- SetWindowBorderStyle(windowId, FALSE, tileStart, pallete);
+ DrawStdFrameWithCustomTileAndPalette(windowId, FALSE, tileStart, pallete);
AddTextPrinterParameterized(windowId, 2, gUnknown_8419CE7, 0, 0, 0xFF, 0);
PrintMoneyAmountInMoneyBox(windowId, amount, 0);
}
@@ -134,7 +134,7 @@ void DrawMoneyBox(int amount, u8 x, u8 y)
void HideMoneyBox(void)
{
- ClearMenuWindow(sMoneyBoxWindowId, FALSE);
+ ClearStdWindowAndFrameToTransparent(sMoneyBoxWindowId, FALSE);
CopyWindowToVram(sMoneyBoxWindowId, 2);
RemoveWindow(sMoneyBoxWindowId);
}
diff --git a/src/new_menu_helpers.c b/src/new_menu_helpers.c
index 1939154da..8ef515006 100644
--- a/src/new_menu_helpers.c
+++ b/src/new_menu_helpers.c
@@ -603,7 +603,7 @@ void sub_80F771C(bool8 copyToVram)
void SetStdWindowBorderStyle(u8 windowId, bool8 copyToVram)
{
- SetWindowBorderStyle(windowId, copyToVram, STD_WINDOW_BASE_TILE_NUM, STD_WINDOW_PALETTE_NUM);
+ DrawStdFrameWithCustomTileAndPalette(windowId, copyToVram, STD_WINDOW_BASE_TILE_NUM, STD_WINDOW_PALETTE_NUM);
}
void sub_80F7768(u8 windowId, bool8 copyToVram)
diff --git a/src/oak_speech.c b/src/oak_speech.c
index 14e7c87d0..eb5357e3a 100644
--- a/src/oak_speech.c
+++ b/src/oak_speech.c
@@ -546,7 +546,7 @@ static void Task_OaksSpeech1(u8 taskId)
CopyBgTilemapBufferToVram(1);
break;
case 7:
- CreateWindow_SnapRight_StdPal(0, 30, 0, 13, 0x1C4);
+ CreateTopBarWindowLoadPalette(0, 30, 0, 13, 0x1C4);
FillBgTilemapBufferRect_Palette0(1, 0xD00F, 0, 0, 30, 2);
FillBgTilemapBufferRect_Palette0(1, 0xD002, 0, 2, 30, 1);
FillBgTilemapBufferRect_Palette0(1, 0xD00E, 0, 19, 30, 1);
@@ -572,7 +572,7 @@ static void Task_OaksSpeech1(u8 taskId)
static void CreateHelpDocsPage1(void)
{
- Menu_PrintHelpSystemUIHeader(gText_Controls, gText_ABUTTONNext, 0, 0, 1);
+ TopBarWindowPrintTwoStrings(gText_Controls, gText_ABUTTONNext, 0, 0, 1);
sOakSpeechResources->unk_0014[0] = AddWindow(sHelpDocsWindowTemplatePtrs[sOakSpeechResources->unk_0012]);
PutWindowTilemap(sOakSpeechResources->unk_0014[0]);
FillWindowPixelBuffer(sOakSpeechResources->unk_0014[0], 0x00);
@@ -592,7 +592,7 @@ static void Task_OakSpeech4(u8 taskId)
}
else
{
- PrintTextOnRightSnappedWindow(gText_ABUTTONNext_BBUTTONBack, 0, 1);
+ TopBarWindowPrintString(gText_ABUTTONNext_BBUTTONBack, 0, 1);
for (i = 0; i < 3; i++)
{
sOakSpeechResources->unk_0014[i] = AddWindow(&sHelpDocsWindowTemplatePtrs[sOakSpeechResources->unk_0012][i]);
@@ -716,8 +716,8 @@ static void Task_OakSpeech6(u8 taskId)
else
{
PlayBGM(BGM_FRLG_GAME_EXPLANATION_MIDDLE);
- sub_810F71C();
- PrintTextOnRightSnappedWindow(gText_ABUTTONNext, 0, 1);
+ ClearTopBarWindow();
+ TopBarWindowPrintString(gText_ABUTTONNext, 0, 1);
sOakSpeechResources->unk_0008 = MallocAndDecompress(sNewGameAdventureIntroTilemap, &sp14);
CopyToBgTilemapBufferRect(1, sOakSpeechResources->unk_0008, 0, 2, 30, 19);
CopyBgTilemapBufferToVram(1);
@@ -793,13 +793,13 @@ static void Task_OakSpeech7(u8 taskId)
AddTextPrinterParameterized4(data[14], 2, 3, 5, 1, 0, &sTextColor_OakSpeech, 0, sNewGameAdventureIntroTextPointers[sOakSpeechResources->unk_0012]);
if (sOakSpeechResources->unk_0012 == 0)
{
- sub_810F71C();
- PrintTextOnRightSnappedWindow(gText_ABUTTONNext, 0, 1);
+ ClearTopBarWindow();
+ TopBarWindowPrintString(gText_ABUTTONNext, 0, 1);
}
else
{
- sub_810F71C();
- PrintTextOnRightSnappedWindow(gText_ABUTTONNext_BBUTTONBack, 0, 1);
+ ClearTopBarWindow();
+ TopBarWindowPrintString(gText_ABUTTONNext_BBUTTONBack, 0, 1);
}
gMain.state++;
}
@@ -846,7 +846,7 @@ static void Task_OakSpeech8(u8 taskId)
if (!gPaletteFade.active)
{
- sub_810F740();
+ DestroyTopBarWindow();
FillWindowPixelBuffer(data[14], 0x00);
ClearWindowTilemap(data[14]);
CopyWindowToVram(data[14], 3);
@@ -1054,7 +1054,7 @@ static void Task_OakSpeech19(u8 taskId)
{
gTasks[taskId].data[13] = AddWindow(&sNewGameAdventureIntroWindowTemplates[1]);
PutWindowTilemap(gTasks[taskId].data[13]);
- SetWindowBorderStyle(gTasks[taskId].data[13], 1, GetStdWindowBaseTileNum(), 14);
+ DrawStdFrameWithCustomTileAndPalette(gTasks[taskId].data[13], 1, GetStdWindowBaseTileNum(), 14);
FillWindowPixelBuffer(gTasks[taskId].data[13], 0x11);
sOakSpeechResources->unk_001C[0] = 1;
sOakSpeechResources->unk_001C[1] = 2;
@@ -1064,7 +1064,7 @@ static void Task_OakSpeech19(u8 taskId)
sOakSpeechResources->unk_001C[1] = 2;
sOakSpeechResources->unk_001C[2] = 3;
AddTextPrinterParameterized3(gTasks[taskId].data[13], 2, 8, 17, sOakSpeechResources->unk_001C, 0, gText_Girl);
- ProgramAndPlaceMenuCursorOnWindow(gTasks[taskId].data[13], 2, 0, 1, GetFontAttribute(2, 1) + 2, 2, 0);
+ Menu_InitCursor(gTasks[taskId].data[13], 2, 0, 1, GetFontAttribute(2, 1) + 2, 2, 0);
CopyWindowToVram(gTasks[taskId].data[13], 3);
gTasks[taskId].func = Task_OakSpeech20;
}
@@ -1072,7 +1072,7 @@ static void Task_OakSpeech19(u8 taskId)
static void Task_OakSpeech20(u8 taskId)
{
- s8 input = ProcessMenuInputNoWrapAround();
+ s8 input = Menu_ProcessInputNoWrapAround();
switch (input)
{
case 0:
@@ -1092,7 +1092,7 @@ static void Task_OakSpeech20(u8 taskId)
static void Task_OakSpeech21(u8 taskId)
{
s16 * data = gTasks[taskId].data;
- ClearMenuWindow(data[13], 1);
+ ClearStdWindowAndFrameToTransparent(data[13], 1);
RemoveWindow(data[13]);
data[13] = 0;
ClearDialogWindowAndFrame(0, 1);
@@ -1176,7 +1176,7 @@ static void Task_OakSpeech28(u8 taskId)
static void Task_OakSpeech29(u8 taskId)
{
s16 * data = gTasks[taskId].data;
- s8 input = ProcessMenuInput();
+ s8 input = Menu_ProcessInput();
switch (input)
{
case 1:
@@ -1184,7 +1184,7 @@ static void Task_OakSpeech29(u8 taskId)
case 3:
case 4:
PlaySE(SE_SELECT);
- ClearMenuWindow(data[13], TRUE);
+ ClearStdWindowAndFrameToTransparent(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
{
- ClearMenuWindow(gTasks[taskId].data[13], 1);
+ ClearStdWindowAndFrameToTransparent(gTasks[taskId].data[13], 1);
RemoveWindow(gTasks[taskId].data[13]);
DoNamingScreen(4, gSaveBlock1Ptr->rivalName, 0, 0, 0, CB2_ReturnFromNamingScreen);
}
@@ -1850,7 +1850,7 @@ static void PrintNameChoiceOptions(u8 taskId, u8 state)
data[13] = AddWindow(&sNewGameAdventureIntroWindowTemplates[3]);
PutWindowTilemap(data[13]);
- SetWindowBorderStyle(data[13], 1, GetStdWindowBaseTileNum(), 14);
+ DrawStdFrameWithCustomTileAndPalette(data[13], 1, GetStdWindowBaseTileNum(), 14);
FillWindowPixelBuffer(gTasks[taskId].data[13], 0x11);
AddTextPrinterParameterized(data[13], 2, gOtherText_NewName, 8, 1, 0, NULL);
if (state == 0)
@@ -1861,7 +1861,7 @@ static void PrintNameChoiceOptions(u8 taskId, u8 state)
{
AddTextPrinterParameterized(data[13], 2, textPtrs[i], 8, 16 * (i + 1) + 1, 0, NULL);
}
- ProgramAndPlaceMenuCursorOnWindow(data[13], 2, 0, 1, 16, 5, 0);
+ Menu_InitCursor(data[13], 2, 0, 1, 16, 5, 0);
CopyWindowToVram(data[13], 3);
}
diff --git a/src/tm_case.c b/src/tm_case.c
index 0266f9c90..79e10bcfc 100644
--- a/src/tm_case.c
+++ b/src/tm_case.c
@@ -795,7 +795,7 @@ static void Task_SelectTMAction_FromFieldBag(u8 taskId)
sTMCaseDynamicResources->numMenuActions = NELEMS(sMenuActionIndices_UnionRoom);
}
AddItemMenuActionTextPrinters(sTMCaseDynamicResources->contextMenuWindowId, 2, GetMenuCursorDimensionByFont(2, 0), 2, 0, GetFontAttribute(2, 1) + 2, sTMCaseDynamicResources->numMenuActions, sMenuActions_UseGiveExit, sTMCaseDynamicResources->menuActionIndices);
- ProgramAndPlaceMenuCursorOnWindow(sTMCaseDynamicResources->contextMenuWindowId, 2, 0, 2, GetFontAttribute(2, 1) + 2, sTMCaseDynamicResources->numMenuActions, 0);
+ Menu_InitCursor(sTMCaseDynamicResources->contextMenuWindowId, 2, 0, 2, GetFontAttribute(2, 1) + 2, sTMCaseDynamicResources->numMenuActions, 0);
strbuf = Alloc(256);
GetTMNumberAndMoveString(strbuf, gSpecialVar_ItemId);
StringAppend(strbuf, gText_IsSelected);
@@ -817,7 +817,7 @@ static void Task_TMContextMenu_HandleInput(u8 taskId)
if (sub_80BF72C() != TRUE)
{
- input = ProcessMenuInputNoWrapAround();
+ input = Menu_ProcessInputNoWrapAround();
switch (input)
{
case -1:
@@ -837,7 +837,7 @@ static void Task_TMContextMenu_HandleInput(u8 taskId)
static void TMHMContextMenuAction_Use(u8 taskId)
{
RemoveTMContextMenu(&sTMCaseDynamicResources->contextMenuWindowId);
- ClearMenuWindow(2, 0);
+ ClearStdWindowAndFrameToTransparent(2, 0);
ClearWindowTilemap(2);
PutWindowTilemap(0);
ScheduleBgCopyTilemapToVram(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);
- ClearMenuWindow(2, 0);
+ ClearStdWindowAndFrameToTransparent(2, 0);
ClearWindowTilemap(2);
PutWindowTilemap(1);
PutWindowTilemap(4);
@@ -912,7 +912,7 @@ static void Subtask_CloseContextMenuAndReturnToMain(u8 taskId)
DestroyListMenuTask(data[0], &sTMCaseStaticResources.scrollOffset, &sTMCaseStaticResources.selectedRow);
data[0] = ListMenuInit(&gMultiuseListMenuTemplate, sTMCaseStaticResources.scrollOffset, sTMCaseStaticResources.selectedRow);
PrintListMenuCursorByID_WithColorIdx(data[0], 1);
- ClearMenuWindow_BorderThickness2(6, 0);
+ ClearDialogWindowAndFrameToTransparent(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);
- ClearMenuWindow(2, 0);
+ ClearStdWindowAndFrameToTransparent(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;
- ClearMenuWindow(8, 0);
- ClearMenuWindow_BorderThickness2(6, 0);
+ ClearStdWindowAndFrameToTransparent(8, 0);
+ ClearDialogWindowAndFrameToTransparent(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);
- ClearMenuWindow(7, 0);
+ ClearStdWindowAndFrameToTransparent(7, 0);
ScheduleBgCopyTilemapToVram(0);
ScheduleBgCopyTilemapToVram(1);
RemoveTMCaseScrollIndicatorArrowPair();
@@ -1074,9 +1074,9 @@ static void Task_QuantitySelect_HandleInput(u8 taskId)
else if (JOY_NEW(B_BUTTON))
{
PlaySE(SE_SELECT);
- ClearMenuWindow(7, 0);
- ClearMenuWindow(8, 0);
- ClearMenuWindow_BorderThickness2(6, 0);
+ ClearStdWindowAndFrameToTransparent(7, 0);
+ ClearStdWindowAndFrameToTransparent(8, 0);
+ ClearDialogWindowAndFrameToTransparent(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);
- ClearMenuWindow(8, 0);
- ClearMenuWindow_BorderThickness2(6, 0);
+ ClearStdWindowAndFrameToTransparent(8, 0);
+ ClearDialogWindowAndFrameToTransparent(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);
- ClearMenuWindow_BorderThickness2(6, 0);
+ ClearDialogWindowAndFrameToTransparent(6, 0);
ScheduleBgCopyTilemapToVram(1);
data[8]++;
}
@@ -1322,12 +1322,12 @@ static void AddTextPrinterParameterized_ColorByIndex(u8 windowId, u8 fontId, con
static void TMCase_SetWindowBorder1(u8 windowId)
{
- SetWindowBorderStyle(windowId, FALSE, 0x5B, 0x0E);
+ DrawStdFrameWithCustomTileAndPalette(windowId, FALSE, 0x5B, 0x0E);
}
static void TMCase_SetWindowBorder2(u8 windowId)
{
- SetWindowBorderStyle(windowId, FALSE, 0x78, 0x0D);
+ DrawStdFrameWithCustomTileAndPalette(windowId, FALSE, 0x78, 0x0D);
}
static void TMCase_PrintMessageWithFollowupTask(u8 taskId, u8 windowId, const u8 * str, TaskFunc func)
@@ -1420,7 +1420,7 @@ static u8 AddTMContextMenu(u8 * a0, u8 a1)
static void RemoveTMContextMenu(u8 * a0)
{
- ClearMenuWindow(*a0, FALSE);
+ ClearStdWindowAndFrameToTransparent(*a0, FALSE);
ClearWindowTilemap(*a0);
RemoveWindow(*a0);
ScheduleBgCopyTilemapToVram(0);
diff --git a/src/trainer_tower.c b/src/trainer_tower.c
index 65d825dfe..b7b9c096d 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);
- ClearMenuWindow(windowId, TRUE);
+ ClearStdWindowAndFrameToTransparent(windowId, TRUE);
RemoveWindow(windowId);
}