diff options
Diffstat (limited to 'src/menu.c')
-rw-r--r-- | src/menu.c | 75 |
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); } |