summaryrefslogtreecommitdiff
path: root/src/menu.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/menu.c')
-rw-r--r--src/menu.c75
1 files changed, 47 insertions, 28 deletions
diff --git a/src/menu.c b/src/menu.c
index 5744df4c1..ee9376079 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -5,6 +5,9 @@
#include "songs.h"
#include "text_window.h"
#include "sound.h"
+#include "menu_cursor.h"
+#include "map_obj_lock.h"
+#include "script.h"
struct Menu
{
@@ -19,20 +22,17 @@ struct Menu
u8 columnXCoords[8];
};
-static void MultistepInitMenuWindowInternal(struct WindowConfig *, u16);
-static void InitMenuWindowInternal(struct WindowConfig *, u16);
+extern u8 OtherText_Yes[];
+extern u8 OtherText_No[];
+
+static void MultistepInitMenuWindowInternal(const struct WindowConfig *, u16);
+static void InitMenuWindowInternal(const struct WindowConfig *, u16);
static bool8 sub_80723D4(void);
static u8 sub_8072484(u8, u8, u8, u8, u8, u8, u32);
-static u8 sub_80724F4(u8, u8, u8, u8 * const [][2], u8);
-static void sub_8072620(u8, u8, u8, u8 * const [][2], u8);
+static u8 sub_80724F4(u8, u8, u8, const struct MenuAction[], u8);
+static void sub_8072620(u8, u8, u8, const struct MenuAction[], u8);
static void sub_8072D18(u8, u8);
-extern void sub_814A5C0(u8, u16, u8, u16, u8);
-extern void sub_814A880(u8, u8);
-extern void sub_814A904(void);
-extern void sub_814A958(u8);
-extern void sub_814A7FC(void);
-
static struct Menu gMenu;
EWRAM_DATA struct Window gMenuWindow = {0};
@@ -44,19 +44,38 @@ EWRAM_DATA u16 gMenuTextWindowTileOffset = 0;
EWRAM_DATA u16 gMenuTextWindowContentTileOffset = 0;
EWRAM_DATA u16 gMenuMessageBoxContentTileOffset = 0;
-extern const u8 *gUnknown_08376D74[][2];
+const struct MenuAction gMenuYesNoItems[] =
+{
+ { OtherText_Yes, NULL },
+ { OtherText_No, NULL },
+};
+
+void CloseMenu(void)
+{
+ PlaySE(SE_SELECT);
+ MenuZeroFillScreen();
+ sub_8064E2C();
+ ScriptContext2_Disable();
+ sub_8072DEC();
+}
+
+void AppendToList(u8 *list, u8 *pindex, u32 value)
+{
+ list[*pindex] = value;
+ (*pindex)++;
+}
-void InitMenuWindow(struct WindowConfig *winConfig)
+void InitMenuWindow(const struct WindowConfig *winConfig)
{
InitMenuWindowInternal(winConfig, 1);
}
-void MultistepInitMenuWindowBegin(struct WindowConfig *winConfig)
+void MultistepInitMenuWindowBegin(const struct WindowConfig *winConfig)
{
MultistepInitMenuWindowInternal(winConfig, 1);
}
-static void MultistepInitMenuWindowInternal(struct WindowConfig *winConfig, u16 tileOffset)
+static void MultistepInitMenuWindowInternal(const struct WindowConfig *winConfig, u16 tileOffset)
{
gMenuMultistepInitState = 0;
gMenuTextTileOffset = tileOffset;
@@ -93,7 +112,7 @@ bool32 MultistepInitMenuWindowContinue(void)
}
}
-static void InitMenuWindowInternal(struct WindowConfig *winConfig, u16 tileOffset)
+static void InitMenuWindowInternal(const struct WindowConfig *winConfig, u16 tileOffset)
{
gMenuWindowPtr = &gMenuWindow;
InitWindowFromConfig(&gMenuWindow, winConfig);
@@ -125,13 +144,13 @@ void MenuLoadTextWindowGraphics(void)
LoadTextWindowGraphics(gMenuWindowPtr);
}
-void BasicInitMenuWindow(struct WindowConfig *winConfig)
+void BasicInitMenuWindow(const struct WindowConfig *winConfig)
{
InitWindowFromConfig(gMenuWindowPtr, winConfig);
gMenuWindowPtr->tileDataStartOffset = gMenuTextTileOffset;
}
-void MenuPrint(u8 *str, u8 left, u8 top)
+void MenuPrint(const u8 *str, u8 left, u8 top)
{
sub_8003460(gMenuWindowPtr, str, gMenuTextTileOffset, left, top);
}
@@ -395,7 +414,7 @@ static u8 sub_8072484(u8 a1, u8 a2, u8 menuItemCount, u8 a4, u8 width, u8 a6, u3
return a4;
}
-static u8 sub_80724F4(u8 left, u8 top, u8 menuItemCount, u8 * const menuItems[][2], u8 columnCount)
+static u8 sub_80724F4(u8 left, u8 top, u8 menuItemCount, const struct MenuAction menuItems[], u8 columnCount)
{
u8 i;
u8 maxWidth;
@@ -407,7 +426,7 @@ static u8 sub_80724F4(u8 left, u8 top, u8 menuItemCount, u8 * const menuItems[][
maxWidth = 0;
for (i = 0; i < menuItemCount; i++)
{
- u8 width = (sub_8072CA4(menuItems[i][0]) + 7) / 8;
+ u8 width = (sub_8072CA4(menuItems[i].text) + 7) / 8;
if (width > maxWidth)
maxWidth = width;
@@ -453,7 +472,7 @@ static u8 sub_80724F4(u8 left, u8 top, u8 menuItemCount, u8 * const menuItems[][
return maxWidth;
}
-static void sub_8072620(u8 left, u8 top, u8 menuItemCount, u8 * const menuItems[][2], u8 columnCount)
+static void sub_8072620(u8 left, u8 top, u8 menuItemCount, const struct MenuAction menuItems[], u8 columnCount)
{
u8 i;
u8 maxWidth;
@@ -464,7 +483,7 @@ static void sub_8072620(u8 left, u8 top, u8 menuItemCount, u8 * const menuItems[
maxWidth = 0;
for (i = 0; i < menuItemCount; i++)
{
- u8 width = (sub_8072CA4(menuItems[i][0]) + 7) / 8;
+ u8 width = (sub_8072CA4(menuItems[i].text) + 7) / 8;
if (width > maxWidth)
maxWidth = width;
@@ -483,11 +502,11 @@ static void sub_8072620(u8 left, u8 top, u8 menuItemCount, u8 * const menuItems[
u8 row = 0;
u8 j;
for (j = 0; i + j < menuItemCount; j += columnCount, row++)
- MenuPrint(menuItems[i + j][0], left + gMenu.columnXCoords[i % columnCount], top + 2 * row);
+ MenuPrint(menuItems[i + j].text, left + gMenu.columnXCoords[i % columnCount], top + 2 * row);
}
}
-void sub_807274C(u8 left, u8 top, u8 menuItemCount, u8 a4, u8 * const menuItems[][2], u8 columnCount, u32 a7)
+void sub_807274C(u8 left, u8 top, u8 menuItemCount, u8 a4, const struct MenuAction menuItems[], u8 columnCount, u32 a7)
{
u8 maxWidth = sub_80724F4(left, top, menuItemCount, menuItems, columnCount);
@@ -545,25 +564,25 @@ u8 sub_807288C(u8 column)
return gMenu.columnXCoords[column];
}
-void PrintMenuItems(u8 left, u8 top, u8 menuItemCount, u8 * const menuItems[][2])
+void PrintMenuItems(u8 left, u8 top, u8 menuItemCount, const struct MenuAction menuItems[])
{
u8 i;
for (i = 0; i < menuItemCount; i++)
- MenuPrint(menuItems[i][0], left, top + 2 * i);
+ MenuPrint(menuItems[i].text, left, top + 2 * i);
}
-void PrintMenuItemsReordered(u8 left, u8 top, u8 menuItemCount, u8 * const menuItems[][2], u8 *order)
+void PrintMenuItemsReordered(u8 left, u8 top, u8 menuItemCount, const struct MenuAction menuItems[], u8 *order)
{
u8 i;
for (i = 0; i < menuItemCount; i++)
- MenuPrint(menuItems[order[i]][0], left, top + 2 * i);
+ MenuPrint(menuItems[order[i]].text, left, top + 2 * i);
}
void InitYesNoMenu(u8 left, u8 top, u8 a3)
{
- PrintMenuItems(left + 1, top + 1, 2, (void *)gUnknown_08376D74);
+ PrintMenuItems(left + 1, top + 1, 2, gMenuYesNoItems);
InitMenu(0, left + 1, top + 1, 2, 0, a3);
}