diff options
Diffstat (limited to 'src/engine/menu.c')
-rw-r--r-- | src/engine/menu.c | 889 |
1 files changed, 0 insertions, 889 deletions
diff --git a/src/engine/menu.c b/src/engine/menu.c deleted file mode 100644 index 86e20d0eb..000000000 --- a/src/engine/menu.c +++ /dev/null @@ -1,889 +0,0 @@ -#include "global.h" -#include "menu.h" -#include "main.h" -#include "map_obj_lock.h" -#include "menu_cursor.h" -#include "script.h" -#include "constants/songs.h" -#include "sound.h" -#include "strings.h" -#include "text.h" -#include "text_window.h" -#include "string_util.h" - -struct Menu -{ - u8 left; - u8 top; - s8 cursorPos; - s8 minCursorPos; - s8 maxCursorPos; - u8 width; - u8 height; - u8 menu_field_7; - u8 columnXCoords[8]; -}; - -static void MultistepInitMenuWindowInternal(const struct WindowTemplate *, u16); -static void InitMenuWindowInternal(const struct WindowTemplate *, u16); -static bool8 IsGridCursorMovementClamped(void); -static u8 sub_8072484(u8, u8, u8, u8, u8, u8, u32); -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); -static void RedrawMenuCursor(u8, u8); - -static struct Menu gMenu; - -EWRAM_DATA struct Window gMenuWindow = {0}; -EWRAM_DATA u8 gFiller_202E908[0x90] = {0}; -EWRAM_DATA struct Window *gMenuWindowPtr = NULL; -EWRAM_DATA u8 gMenuMultistepInitState = 0; -EWRAM_DATA u16 gMenuTextTileOffset = 0; -EWRAM_DATA u16 gMenuTextWindowTileOffset = 0; -EWRAM_DATA u16 gMenuTextWindowContentTileOffset = 0; -EWRAM_DATA u16 gMenuMessageBoxContentTileOffset = 0; - -const struct MenuAction gMenuYesNoItems[] = -{ - { OtherText_Yes, NULL }, - { OtherText_No, NULL }, -}; - -void CloseMenu(void) -{ - PlaySE(SE_SELECT); - Menu_EraseScreen(); - sub_8064E2C(); - ScriptContext2_Disable(); - Menu_DestroyCursor(); -} - -void AppendToList(u8 *list, u8 *pindex, u32 value) -{ - list[*pindex] = value; - (*pindex)++; -} - -void InitMenuWindow(const struct WindowTemplate *winTemplate) -{ - InitMenuWindowInternal(winTemplate, 1); -} - -void MultistepInitMenuWindowBegin(const struct WindowTemplate *winTemplate) -{ - MultistepInitMenuWindowInternal(winTemplate, 1); -} - -static void MultistepInitMenuWindowInternal(const struct WindowTemplate *winTemplate, u16 tileOffset) -{ - gMenuMultistepInitState = 0; - gMenuTextTileOffset = tileOffset; - gMenuWindowPtr = &gMenuWindow; - Text_InitWindowWithTemplate(&gMenuWindow, winTemplate); -} - -bool32 MultistepInitMenuWindowContinue(void) -{ - switch (gMenuMultistepInitState) - { - case 0: - gMenuMultistepInitState++; - return 0; - case 1: - gMenuTextWindowTileOffset = MultistepInitWindowTileData(gMenuWindowPtr, gMenuTextTileOffset); - goto next; - case 2: - if (!MultistepLoadFont()) - goto fail; - goto next; - case 3: - gMenuTextWindowContentTileOffset = TextWindow_SetBaseTileNum(gMenuTextWindowTileOffset); - next: - gMenuMultistepInitState++; - return 0; - case 4: - TextWindow_LoadStdFrameGraphics(gMenuWindowPtr); - gMenuMessageBoxContentTileOffset = TextWindow_SetDlgFrameBaseTileNum(gMenuTextWindowContentTileOffset); - return 1; - default: - fail: - return 0; - } -} - -static void InitMenuWindowInternal(const struct WindowTemplate *winTemplate, u16 tileOffset) -{ - gMenuWindowPtr = &gMenuWindow; - Text_InitWindowWithTemplate(&gMenuWindow, winTemplate); - gMenuTextTileOffset = tileOffset; - gMenuTextWindowTileOffset = InitWindowTileData(gMenuWindowPtr, gMenuTextTileOffset); - gMenuTextWindowContentTileOffset = TextWindow_SetBaseTileNum(gMenuTextWindowTileOffset); - TextWindow_LoadStdFrameGraphics(gMenuWindowPtr); - gMenuMessageBoxContentTileOffset = TextWindow_SetDlgFrameBaseTileNum(gMenuTextWindowContentTileOffset); -} - -void unref_sub_8071DA4(struct WindowTemplate *winTemplate, u16 tileOffset) -{ - gMenuWindowPtr = &gMenuWindow; - Text_InitWindowWithTemplate(&gMenuWindow, winTemplate); - gMenuTextWindowTileOffset = tileOffset; - gMenuTextWindowContentTileOffset = TextWindow_SetBaseTileNum(gMenuTextWindowTileOffset); - TextWindow_LoadStdFrameGraphics(gMenuWindowPtr); - gMenuTextTileOffset = TextWindow_SetDlgFrameBaseTileNum(gMenuTextWindowContentTileOffset); - gMenuMessageBoxContentTileOffset = InitWindowTileData(gMenuWindowPtr, gMenuTextTileOffset); -} - -void Menu_LoadStdFrameGraphicsOverrideStyle(u8 frameType) -{ - TextWindow_LoadStdFrameGraphicsOverrideStyle(gMenuWindowPtr, frameType); -} - -void Menu_LoadStdFrameGraphics(void) -{ - TextWindow_LoadStdFrameGraphics(gMenuWindowPtr); -} - -void BasicInitMenuWindow(const struct WindowTemplate *winTemplate) -{ - Text_InitWindowWithTemplate(gMenuWindowPtr, winTemplate); - gMenuWindowPtr->tileDataStartOffset = gMenuTextTileOffset; -} - -// Prints -void Menu_PrintText(const u8 *str, u8 left, u8 top) -{ - Text_InitWindowAndPrintText(gMenuWindowPtr, str, gMenuTextTileOffset, left, top); -} - -void Menu_EraseWindowRect(u8 left, u8 top, u8 right, u8 bottom) -{ - Text_EraseWindowRect(gMenuWindowPtr, left, top, right, bottom); -} - -void Menu_BlankWindowRect(u8 left, u8 top, u8 right, u8 bottom) -{ - Text_BlankWindowRect(gMenuWindowPtr, left, top, right, bottom); -} - -void Menu_EraseScreen(void) -{ - Menu_EraseWindowRect(0, 0, 29, 19); -} - -void Menu_DrawStdWindowFrame(u8 left, u8 top, u8 right, u8 bottom) -{ - TextWindow_DrawStdFrame(gMenuWindowPtr, left, top, right, bottom); -} - -void sub_8071F40(const u8 *str) -{ - Menu_DrawStdWindowFrame(2, 14, 28, 19); - Menu_PrintText(str, 3, 15); -} - -void sub_8071F60(u8 a1, u8 a2, u8 a3) -{ - sub_8003490(gMenuWindowPtr, a1, gMenuTextTileOffset, a2, a3); -} - -u16 unref_sub_8071F98(u8 x, u8 y) -{ - return Text_GetWindowTilemapEntry(gMenuWindowPtr, x, y); -} - -void unref_sub_8071FBC(u16 a1, u8 a2, u8 a3, u8 a4, u8 a5) -{ - Text_FillWindowBorder(gMenuWindowPtr, a1, a2, a3, a4, a5); -} - -void Menu_DisplayDialogueFrame(void) -{ - TextWindow_DisplayDialogueFrame(gMenuWindowPtr); -} - -void MenuPrintMessage(const u8 *str, u8 left, u8 top) -{ - Text_InitWindow8002EB0(gMenuWindowPtr, str, gMenuTextTileOffset, left, top); -} - -void MenuPrintMessageDefaultCoords(const u8 *str) -{ - Text_InitWindow8002EB0(gMenuWindowPtr, str, gMenuTextTileOffset, 2, 15); -} - -void Menu_SetText(const u8 *str) -{ - Text_SetWindowText(gMenuWindowPtr, str); -} - -u8 Menu_UpdateWindowText(void) -{ - return Text_UpdateWindow(gMenuWindowPtr); -} - -u8 unref_sub_8072098(void) -{ - return Text_PrintWindowSimple(gMenuWindowPtr); -} - -void Menu_ClearWindowText(void) -{ - Text_ClearWindow(gMenuWindowPtr); -} - -u8 Menu_MoveCursor(s8 delta) -{ - s32 newPos = gMenu.cursorPos + delta; - - if (newPos < gMenu.minCursorPos) - gMenu.cursorPos = gMenu.maxCursorPos; - else if (newPos > gMenu.maxCursorPos) - gMenu.cursorPos = gMenu.minCursorPos; - else - gMenu.cursorPos += delta; - - RedrawMenuCursor(gMenu.left, 2 * gMenu.cursorPos + gMenu.top); - return gMenu.cursorPos; -} - -u8 Menu_MoveCursorNoWrap(s8 delta) -{ - s32 newPos = gMenu.cursorPos + delta; - - if (newPos < gMenu.minCursorPos) - gMenu.cursorPos = gMenu.minCursorPos; - else if (newPos > gMenu.maxCursorPos) - gMenu.cursorPos = gMenu.maxCursorPos; - else - gMenu.cursorPos += delta; - - RedrawMenuCursor(gMenu.left, 2 * gMenu.cursorPos + gMenu.top); - return gMenu.cursorPos; -} - -u8 Menu_GetCursorPos(void) -{ - return gMenu.cursorPos; -} - -s8 Menu_ProcessInput(void) -{ - if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - if (gMenu.menu_field_7) - Menu_DestroyCursor(); - return gMenu.cursorPos; - } - - if (gMain.newKeys & B_BUTTON) - { - if (gMenu.menu_field_7) - Menu_DestroyCursor(); - return -1; - } - - if (gMain.newKeys & DPAD_UP) - { - PlaySE(SE_SELECT); - Menu_MoveCursor(-1); - return -2; - } - else if (gMain.newKeys & DPAD_DOWN) - { - PlaySE(SE_SELECT); - Menu_MoveCursor(1); - return -2; - } - - return -2; -} - -s8 Menu_ProcessInputNoWrap(void) -{ - u8 cursorPos = gMenu.cursorPos; - - if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - if (gMenu.menu_field_7) - Menu_DestroyCursor(); - return gMenu.cursorPos; - } - - if (gMain.newKeys & B_BUTTON) - { - if (gMenu.menu_field_7) - Menu_DestroyCursor(); - return -1; - } - - if (gMain.newKeys & DPAD_UP) - { - if (cursorPos != Menu_MoveCursorNoWrap(-1)) - PlaySE(SE_SELECT); - return -2; - } - else if (gMain.newKeys & DPAD_DOWN) - { - if (cursorPos != Menu_MoveCursorNoWrap(1)) - PlaySE(SE_SELECT); - return -2; - } - - Menu_MoveCursorNoWrap(0); - return -2; -} - -u8 MoveMenuCursor3(s8 delta) -{ - u8 menuHeight = (gMenu.maxCursorPos + 1) >> 1; - s32 newPos = gMenu.cursorPos + delta; - - if (newPos < gMenu.minCursorPos) - gMenu.cursorPos = gMenu.maxCursorPos; - else if (newPos > gMenu.maxCursorPos) - gMenu.cursorPos = gMenu.minCursorPos; - else - gMenu.cursorPos += delta; - - RedrawMenuCursor( - 6 * (gMenu.cursorPos / menuHeight) + gMenu.left, - 2 * (gMenu.cursorPos % menuHeight) + gMenu.top); - - return gMenu.cursorPos; -} - -static u8 MoveMenuCursorGridLayout(s8 delta) -{ - // Don't move cursor if it is clamped - if (gMenu.cursorPos + delta <= gMenu.maxCursorPos) - { - if (IsGridCursorMovementClamped() == TRUE) - return gMenu.cursorPos; - } - else - { - return gMenu.cursorPos; - } - - gMenu.cursorPos += delta; - - if ((gMenu.maxCursorPos + 1) / gMenu.width == 0) - RedrawMenuCursor( - gMenu.left + gMenu.columnXCoords[gMenu.cursorPos % gMenu.width], - 2 * ((gMenu.cursorPos / gMenu.width) % gMenu.height) + gMenu.top); - else - RedrawMenuCursor( - gMenu.left + gMenu.columnXCoords[gMenu.cursorPos % gMenu.width], - 2 * (gMenu.cursorPos / gMenu.width) + gMenu.top); - - return gMenu.cursorPos; -} - -// Returns TRUE if the cursor is on an edge and cannot move in the pressed direction -static bool8 IsGridCursorMovementClamped(void) -{ - if (gMain.newKeys & DPAD_UP) - { - // is cursor on first row? - if (gMenu.cursorPos < gMenu.width) - return TRUE; - } - if (gMain.newKeys & DPAD_DOWN) - { - // is cursor on last row? - if (gMenu.cursorPos >= gMenu.maxCursorPos + 1 - gMenu.width) - return TRUE; - } - if (gMain.newKeys & DPAD_LEFT) - { - // is cursor on first column? - if ((gMenu.cursorPos - gMenu.cursorPos % gMenu.width) % gMenu.width == 1 // always false - || gMenu.cursorPos == 0 // redundant - || gMenu.cursorPos % gMenu.width == 0) - return TRUE; - } - if (gMain.newKeys & DPAD_RIGHT) - { - // is cursor on last column? - if (gMenu.cursorPos % gMenu.width == gMenu.width - 1) - return TRUE; - } - - return FALSE; -} - -static u8 sub_8072484(u8 a1, u8 a2, u8 menuItemCount, u8 a4, u8 width, u8 a6, u32 a7) -{ - u8 v7; - - gMenu.width = width; - gMenu.height = menuItemCount / width; - InitMenu(0, a1, a2, menuItemCount, a4, a6); - v7 = 0; - if (a7) - v7 = -1; - gMenu.menu_field_7 = v7; - return a4; -} - -static u8 sub_80724F4(u8 left, u8 top, u8 menuItemCount, const struct MenuAction menuItems[], u8 columnCount) -{ - u8 i; - u8 maxWidth; - s32 height; - - for (i = 0; i < 7; i++) - gMenu.columnXCoords[i] = 0; - - maxWidth = 0; - for (i = 0; i < menuItemCount; i++) - { - u8 width = (sub_8072CA4(menuItems[i].text) + 7) / 8; - - if (width > maxWidth) - maxWidth = width; - } - - for (i = 1; i <= columnCount; i++) - gMenu.columnXCoords[i] = maxWidth; - - for (i = 1; i <= columnCount; i++) - gMenu.columnXCoords[i] += 1 + gMenu.columnXCoords[i - 1]; - - gMenu.columnXCoords[columnCount]--; - - if (!((menuItemCount / 2) < columnCount || (menuItemCount % 2 != 0)) - || columnCount == 1 - || columnCount == menuItemCount) - { - height = 2 * (menuItemCount / columnCount) + 1; - } - else - { - height = 2 * ((menuItemCount / columnCount) + 1) + 1; - } - - { - // TODO: Make this code less hideous but still match the original asm. - u8 right; - u8 bottom; - u32 totalWidth; - register s32 val asm("r1"); - - val = (s8)top + height; - val = val << 24; - asm("" ::: "r3"); - bottom = val >> 24; - - totalWidth = (gMenu.columnXCoords[columnCount] + 1); - right = left + totalWidth; - - Menu_DrawStdWindowFrame(left, top, right, bottom); - } - - return maxWidth; -} - -static void sub_8072620(u8 left, u8 top, u8 menuItemCount, const struct MenuAction menuItems[], u8 columnCount) -{ - u8 i; - u8 maxWidth; - - for (i = 0; i < 7; i++) - gMenu.columnXCoords[i] = 0; - - maxWidth = 0; - for (i = 0; i < menuItemCount; i++) - { - u8 width = (sub_8072CA4(menuItems[i].text) + 7) / 8; - - if (width > maxWidth) - maxWidth = width; - } - - for (i = 1; i <= columnCount; i++) - gMenu.columnXCoords[i] = maxWidth; - - for (i = 1; i <= columnCount; i++) - gMenu.columnXCoords[i] += 1 + gMenu.columnXCoords[i - 1]; - - gMenu.columnXCoords[columnCount]--; - - for (i = 0; i < columnCount; i++) - { - u8 row = 0; - u8 j; - for (j = 0; i + j < menuItemCount; j += columnCount, row++) - Menu_PrintText(menuItems[i + j].text, left + gMenu.columnXCoords[i % columnCount], top + 2 * row); - } -} - -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); - - sub_8072484(left + 1, top + 1, menuItemCount, a4, columnCount, maxWidth, a7); - sub_8072620(left + 1, top + 1, menuItemCount, menuItems, columnCount); -} - -s8 Menu_ProcessInputGridLayout(void) -{ - if (gMain.newKeys & A_BUTTON) - { - if (gMenu.menu_field_7) - Menu_DestroyCursor(); - PlaySE(SE_SELECT); - return Menu_GetCursorPos(); - } - - if (gMain.newKeys & B_BUTTON) - { - if (gMenu.menu_field_7) - Menu_DestroyCursor(); - return -1; - } - - if (gMain.newKeys & DPAD_UP) - { - PlaySE(SE_SELECT); - // Move up one whole row - MoveMenuCursorGridLayout(-gMenu.width); - return -2; - } - else if (gMain.newKeys & DPAD_DOWN) - { - PlaySE(SE_SELECT); - // Move down one whole column - MoveMenuCursorGridLayout(gMenu.width); - return -2; - } - else if (gMain.newKeys & DPAD_LEFT) - { - PlaySE(SE_SELECT); - MoveMenuCursorGridLayout(-1); - return -2; - } - else if (gMain.newKeys & DPAD_RIGHT) - { - PlaySE(SE_SELECT); - MoveMenuCursorGridLayout(1); - return -2; - } - - return -2; -} - -u8 Menu_GetColumnXCoord(u8 column) -{ - return gMenu.columnXCoords[column]; -} - -void Menu_PrintItems(u8 left, u8 top, u8 menuItemCount, const struct MenuAction menuItems[]) -{ - u8 i; - - for (i = 0; i < menuItemCount; i++) - Menu_PrintText(menuItems[i].text, left, top + 2 * i); -} - -void Menu_PrintItemsReordered(u8 left, u8 top, u8 menuItemCount, const struct MenuAction2 menuItems[], const u8 *order) -{ - u8 i; - - for (i = 0; i < menuItemCount; i++) - Menu_PrintText(menuItems[order[i]].text, left, top + 2 * i); -} - -void InitYesNoMenu(u8 left, u8 top, u8 a3) -{ - Menu_PrintItems(left + 1, top + 1, 2, gMenuYesNoItems); - InitMenu(0, left + 1, top + 1, 2, 0, a3); -} - -void DisplayYesNoMenu(u8 left, u8 top, u32 a3) -{ - Menu_DrawStdWindowFrame(left, top, left + 6, top + 5); - InitYesNoMenu(left, top, 5); - gMenu.menu_field_7 = a3 ? -1 : 0; -} - -s8 Menu_ProcessInputNoWrap_(void) -{ - return Menu_ProcessInputNoWrap(); -} - -u8 Menu_PrintTextPixelCoords(const u8 *text, u8 left, u16 top, u8 a4) -{ - return Text_InitWindow8004D04(gMenuWindowPtr, text, gMenuTextTileOffset, left, top, a4); -} - -u8 sub_8072A18(const u8 *text, u8 left, u16 top, u8 width, u32 a5) -{ - return sub_8004FD0(gMenuWindowPtr, 0, text, gMenuTextTileOffset, left, top, width, a5); -} - -u8 unref_sub_8072A5C(u8 *dest, u8 *src, u8 left, u16 top, u8 width, u32 a6) -{ - return sub_8004FD0(gMenuWindowPtr, dest, src, gMenuTextTileOffset, left, top, width, a6); -} - -#if ENGLISH -int sub_8072AB0(const u8 *str, u8 left, u16 top, u8 width, u8 height, u32 a6) -{ - u8 newlineCount = sub_8004FD0(gMenuWindowPtr, NULL, str, gMenuTextTileOffset, left, top, width, a6); - - left /= 8; - top /= 8; - width = (width + 7) / 8; - height = (height + 7) / 8; - - if (newlineCount < height) - Menu_BlankWindowRect(left, top + 2 * newlineCount, left + width - 1, height + top - 1); -} -#elif GERMAN -__attribute__((naked)) -int sub_8072AB0(const u8 *str, u8 left, u16 top, u8 width, u8 height, u32 a6) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - sub sp, 0x10\n\ - mov r12, r0\n\ - ldr r0, [sp, 0x24]\n\ - ldr r4, [sp, 0x28]\n\ - str r4, [sp, 0xC]\n\ - lsls r1, 24\n\ - lsrs r5, r1, 24\n\ - lsls r2, 16\n\ - lsrs r4, r2, 16\n\ - lsls r3, 24\n\ - lsrs r6, r3, 24\n\ - lsls r0, 24\n\ - lsrs r7, r0, 24\n\ - ldr r0, _08072AF8 @ =gMenuWindowPtr\n\ - ldr r0, [r0]\n\ - ldr r1, _08072AFC @ =gMenuTextTileOffset\n\ - ldrh r3, [r1]\n\ - str r5, [sp]\n\ - str r4, [sp, 0x4]\n\ - str r6, [sp, 0x8]\n\ - movs r1, 0\n\ - mov r2, r12\n\ - bl sub_8004FD0\n\ - adds r1, r0, 0\n\ - lsls r1, 24\n\ - lsrs r2, r1, 24\n\ - movs r3, 0x7\n\ - ands r3, r5\n\ - cmp r3, 0\n\ - bne _08072B00\n\ - adds r1, r6, 0x7\n\ - asrs r1, 3\n\ - subs r1, 0x1\n\ - b _08072B0C\n\ - .align 2, 0\n\ -_08072AF8: .4byte gMenuWindowPtr\n\ -_08072AFC: .4byte gMenuTextTileOffset\n\ -_08072B00:\n\ - adds r3, r6, r3\n\ - subs r1, r3, 0x1\n\ - cmp r1, 0\n\ - bge _08072B0A\n\ - adds r1, r3, 0x6\n\ -_08072B0A:\n\ - asrs r1, 3\n\ -_08072B0C:\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - adds r6, r1, 0\n\ - lsrs r5, 3\n\ - adds r1, r7, 0x7\n\ - asrs r1, 3\n\ - lsls r1, 24\n\ - lsrs r7, r1, 24\n\ - lsrs r4, 3\n\ - cmp r2, r7\n\ - bcs _08072B3E\n\ - lsls r1, r2, 1\n\ - adds r1, r4, r1\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - adds r2, r5, r6\n\ - lsls r2, 24\n\ - lsrs r2, 24\n\ - adds r3, r7, r4\n\ - subs r3, 0x1\n\ - lsls r3, 24\n\ - lsrs r3, 24\n\ - adds r0, r5, 0\n\ - bl Menu_BlankWindowRect\n\ -_08072B3E:\n\ - add sp, 0x10\n\ - pop {r4-r7}\n\ - pop {r1}\n\ - bx r1\n\ - .syntax divided\n"); -} -#endif - -void MenuPrint_RightAligned(const u8 *str, u8 left, u8 top) -{ - Text_InitWindow8004D38(gMenuWindowPtr, str, gMenuTextTileOffset, left, top); -} - -void sub_8072B80(const u8 *a1, u8 a2, u8 a3, const u8 *a4) -{ - u8 buffer[64]; - u8 width = GetStringWidth(gMenuWindowPtr, a4); - AlignString(gMenuWindowPtr, buffer, a1, width, 1); - Text_InitWindowAndPrintText(gMenuWindowPtr, buffer, gMenuTextTileOffset, a2, a3); -} - -void sub_8072BD8(const u8 *a1, u8 a2, u8 a3, u16 a4) -{ - Text_InitWindow8004DB0(gMenuWindowPtr, a1, gMenuTextTileOffset, a2, a3, a4); -} - -u8 *sub_8072C14(u8 *a1, s32 a2, u8 a3, u8 a4) -{ - return AlignInt1(gMenuWindowPtr, a1, a2, a3, a4); -} - -u8 *sub_8072C44(u8 *a1, s32 a2, u8 a3, u8 a4) -{ - return AlignInt2(gMenuWindowPtr, a1, a2, a3, a4); -} - -u8 *sub_8072C74(u8 *a1, const u8 *a2, u8 a3, u8 a4) -{ - return AlignString(gMenuWindowPtr, a1, a2, a3, a4); -} - -u8 sub_8072CA4(const u8 *str) -{ - return GetStringWidth(gMenuWindowPtr, str); -} - -u8 Menu_GetTextWindowPaletteNum(void) -{ - return Text_GetWindowPaletteNum(gMenuWindowPtr); -} - -void Menu_GetTextColors(u8 *a1, u8 *a2, u8 *a3) -{ - Text_GetTextColors(gMenuWindowPtr, a1, a2, a3); -} - -u32 Menu_UpdateWindowTextOverrideLineLength(u8 lineLength) -{ - return Text_UpdateWindowOverrideLineLength(gMenuWindowPtr, lineLength); -} - -struct Window *unref_sub_8072D0C(void) -{ - return gMenuWindowPtr; -} - -static void sub_8072D18(u8 a1, u8 a2) -{ - MenuCursor_Create814A5C0(a1, 0xFFFF, 12, 11679, 8 * a2); -} - -u8 InitMenu(u8 cursorSubpriority, u8 left, u8 top, u8 numChoices, u8 cursorPos, u8 cursorWidth) -{ - s32 pos; - - if (cursorWidth) - sub_8072D18(cursorSubpriority, cursorWidth); - - gMenu.left = left - 1; - gMenu.top = top; - gMenu.minCursorPos = 0; - gMenu.maxCursorPos = numChoices - 1; - gMenu.menu_field_7 = 0; - - pos = cursorPos; - - if (pos < 0 || pos > gMenu.maxCursorPos) - pos = 0; - - gMenu.cursorPos = pos; - Menu_MoveCursor(0); - - return pos; -} - -static void RedrawMenuCursor(u8 x, u8 y) -{ - MenuCursor_SetPos814A880((x + 1) * 8, 8 * y); -} - -void unref_sub_8072DC0() -{ - sub_814A904(); -} - -void sub_8072DCC(u8 a1) -{ - sub_814A958(a1); -} - -void sub_8072DDC(u8 a1) -{ - sub_8072DCC(8 * a1); -} - -void Menu_DestroyCursor(void) -{ - DestroyMenuCursor(); -} - -#if GERMAN -void de_sub_8073110(u8 * buffer, u8 * name) { - u8 * ptr, *ptr2, *ptr3; - - ptr2 = buffer; - ptr = &gStringVar1[1 + StringLengthN(gStringVar1, 256)]; - ptr3 = ptr; - - for (;;) - { - if (*ptr2 == EOS) - break; - - if (*ptr2 == 0xFD) - { - - *ptr3 = EOS; - ptr2 += 2; - - StringAppend(ptr, name); - StringAppend(ptr, ptr2); - - buffer[0] = EOS; - StringAppend(buffer, ptr); - break; - } - - *ptr3 = *ptr2; - ptr2 += 1; - ptr3 += 1; - } -} - -u8 *de_sub_8073174(u8 *name, const u8 *format) { - u32 offset; - u8 *ptr; - - offset = StringLengthN(gStringVar2, 0x100); - ptr = &gStringVar2[1 + offset]; - - StringCopy(ptr, format); - - de_sub_8073110(ptr, name); - - return StringCopy(name, ptr); -} -#endif |