diff options
author | scnorton <scnorton@biociphers.org> | 2017-06-28 17:37:17 -0400 |
---|---|---|
committer | scnorton <scnorton@biociphers.org> | 2017-06-28 17:37:17 -0400 |
commit | 26a48d7e926d3c7841a28b2af8cbbd170923469e (patch) | |
tree | fa83e9a7105769c66e3a66b3c6871984293db329 /src/menu.c | |
parent | 39efcb2a6d169fba0ff33f1bd25e2947b74881a0 (diff) | |
parent | 06b6cada0ddedc62063171703ba6607019751a9a (diff) |
Merge branch 'master' into use_pokeblock
Diffstat (limited to 'src/menu.c')
-rw-r--r-- | src/menu.c | 156 |
1 files changed, 145 insertions, 11 deletions
diff --git a/src/menu.c b/src/menu.c index 61eaebb6f..45cfbbc2f 100644 --- a/src/menu.c +++ b/src/menu.c @@ -9,6 +9,7 @@ #include "strings.h" #include "text.h" #include "text_window.h" +#include "string_util.h" struct Menu { @@ -54,7 +55,7 @@ void CloseMenu(void) MenuZeroFillScreen(); sub_8064E2C(); ScriptContext2_Disable(); - sub_8072DEC(); + HandleDestroyMenuCursors(); } void AppendToList(u8 *list, u8 *pindex, u32 value) @@ -270,14 +271,14 @@ s8 ProcessMenuInput(void) { PlaySE(SE_SELECT); if (gMenu.menu_field_7) - sub_8072DEC(); + HandleDestroyMenuCursors(); return gMenu.cursorPos; } if (gMain.newKeys & B_BUTTON) { if (gMenu.menu_field_7) - sub_8072DEC(); + HandleDestroyMenuCursors(); return -1; } @@ -305,14 +306,14 @@ s8 ProcessMenuInputNoWrap(void) { PlaySE(SE_SELECT); if (gMenu.menu_field_7) - sub_8072DEC(); + HandleDestroyMenuCursors(); return gMenu.cursorPos; } if (gMain.newKeys & B_BUTTON) { if (gMenu.menu_field_7) - sub_8072DEC(); + HandleDestroyMenuCursors(); return -1; } @@ -517,7 +518,7 @@ s8 sub_80727CC(void) if (gMain.newKeys & A_BUTTON) { if (gMenu.menu_field_7) - sub_8072DEC(); + HandleDestroyMenuCursors(); PlaySE(SE_SELECT); return GetMenuCursorPos(); } @@ -525,7 +526,7 @@ s8 sub_80727CC(void) if (gMain.newKeys & B_BUTTON) { if (gMenu.menu_field_7) - sub_8072DEC(); + HandleDestroyMenuCursors(); return -1; } @@ -611,7 +612,8 @@ 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); } -int sub_8072AB0(u8 *str, u8 left, u16 top, u8 width, u8 height, u32 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); @@ -623,13 +625,97 @@ int sub_8072AB0(u8 *str, u8 left, u16 top, u8 width, u8 height, u32 a6) if (newlineCount < height) MenuFillWindowRectWithBlankTile(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 MenuFillWindowRectWithBlankTile\n\ +_08072B3E:\n\ + add sp, 0x10\n\ + pop {r4-r7}\n\ + pop {r1}\n\ + bx r1\n\ + .syntax divided\n"); +} +#endif void MenuPrint_RightAligned(u8 *str, u8 left, u8 top) { sub_8004D38(gMenuWindowPtr, str, gMenuTextTileOffset, left, top); } -void sub_8072B80(u8 *a1, u8 a2, u8 a3, u8 *a4) +void sub_8072B80(const u8 *a1, u8 a2, u8 a3, const u8 *a4) { u8 buffer[64]; u8 width = GetStringWidth(gMenuWindowPtr, a4); @@ -731,7 +817,55 @@ void sub_8072DDC(u8 a1) sub_8072DCC(8 * a1); } -void sub_8072DEC(void) +void HandleDestroyMenuCursors(void) { - sub_814A7FC(); + 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 |