diff options
Diffstat (limited to 'src/help_message.c')
-rw-r--r-- | src/help_message.c | 196 |
1 files changed, 196 insertions, 0 deletions
diff --git a/src/help_message.c b/src/help_message.c new file mode 100644 index 000000000..2fd76e432 --- /dev/null +++ b/src/help_message.c @@ -0,0 +1,196 @@ +#include "global.h" +#include "menu.h" + +static EWRAM_DATA u8 sHelpMessageWindowId = 0; + +const u16 gUnknown_84566A8[] = INCBIN_U16("graphics/unknown/unknown_84566a8.bin"); + +static const struct WindowTemplate sHelpMessageWindowTemplate = { + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 15, + .width = 30, + .height = 5, + .paletteNum = 15, + .baseBlock = 0x08F +}; + +void MapNamePopupWindowIdSetDummy(void) +{ + sHelpMessageWindowId = 0xFF; +} + +u8 CreateHelpMessageWindow(void) +{ + if (sHelpMessageWindowId == 0xFF) + { + sHelpMessageWindowId = AddWindow(&sHelpMessageWindowTemplate); + PutWindowTilemap(sHelpMessageWindowId); + } + return sHelpMessageWindowId; +} + +void DestroyHelpMessageWindow(u8 a0) +{ + if (sHelpMessageWindowId != 0xFF) + { + FillWindowPixelBuffer(sHelpMessageWindowId, PIXEL_FILL(0)); + ClearWindowTilemap(sHelpMessageWindowId); + + if (a0) + CopyWindowToVram(sHelpMessageWindowId, a0); + + RemoveWindow(sHelpMessageWindowId); + sHelpMessageWindowId = 0xFF; + } +} + +#ifdef NONMATCHING +void sub_8112F18(u8 windowId) +{ + u8 width = GetWindowAttribute(windowId, WINDOW_WIDTH); + u8 height = GetWindowAttribute(windowId, WINDOW_HEIGHT); + u8 *buffer = Alloc(32 * width * height); + u8 i, j; + u8 k; + + if (buffer != NULL) + { + for (i = 0; i < height; i++) + { + for (j = 0; j < width; j++) + { + if (i == 0) + k = 0; + else if (i == height - 1) + k = 14; + else + k = 5; + CpuCopy32( + (void *)gUnknown_84566A8 + 32 * k, // operand swap on "add" instruction + buffer + 32 * (i * width + j), + 32 + ); + } + } + CopyToWindowPixelBuffer(windowId, buffer, width * height * 32, 0); + Free(buffer); + } +} +#else +NAKED +void sub_8112F18(u8 windowId) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tsub sp, 0x8\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tmov r10, r0\n" + "\tmovs r1, 0x3\n" + "\tbl GetWindowAttribute\n" + "\tlsls r0, 24\n" + "\tlsrs r6, r0, 24\n" + "\tmov r0, r10\n" + "\tmovs r1, 0x4\n" + "\tbl GetWindowAttribute\n" + "\tlsls r0, 24\n" + "\tlsrs r7, r0, 24\n" + "\tlsls r0, r7, 5\n" + "\tmuls r0, r6\n" + "\tbl Alloc\n" + "\tmov r8, r0\n" + "\tcmp r0, 0\n" + "\tbeq _08112FB8\n" + "\tmovs r5, 0\n" + "\tadds r0, r6, 0\n" + "\tmuls r0, r7\n" + "\tstr r0, [sp]\n" + "\tcmp r5, r7\n" + "\tbcs _08112FA2\n" + "_08112F5A:\n" + "\tmovs r4, 0\n" + "\tadds r1, r5, 0x1\n" + "\tmov r9, r1\n" + "\tcmp r4, r6\n" + "\tbcs _08112F98\n" + "\tsubs r3, r7, 0x1\n" + "_08112F66:\n" + "\tmovs r0, 0\n" + "\tcmp r5, 0\n" + "\tbeq _08112F74\n" + "\tmovs r0, 0x5\n" + "\tcmp r5, r3\n" + "\tbne _08112F74\n" + "\tmovs r0, 0xE\n" + "_08112F74:\n" + "\tlsls r0, 5\n" + "\tldr r1, _08112FC8 @ =gUnknown_84566A8\n" + "\tadds r0, r1, r0\n" + "\tadds r1, r5, 0\n" + "\tmuls r1, r6\n" + "\tadds r1, r4\n" + "\tlsls r1, 5\n" + "\tadd r1, r8\n" + "\tldr r2, _08112FCC @ =0x04000008\n" + "\tstr r3, [sp, 0x4]\n" + "\tbl CpuSet\n" + "\tadds r0, r4, 0x1\n" + "\tlsls r0, 24\n" + "\tlsrs r4, r0, 24\n" + "\tldr r3, [sp, 0x4]\n" + "\tcmp r4, r6\n" + "\tbcc _08112F66\n" + "_08112F98:\n" + "\tmov r1, r9\n" + "\tlsls r0, r1, 24\n" + "\tlsrs r5, r0, 24\n" + "\tcmp r5, r7\n" + "\tbcc _08112F5A\n" + "_08112FA2:\n" + "\tldr r0, [sp]\n" + "\tlsls r2, r0, 21\n" + "\tlsrs r2, 16\n" + "\tmov r0, r10\n" + "\tmov r1, r8\n" + "\tmovs r3, 0\n" + "\tbl CopyToWindowPixelBuffer\n" + "\tmov r0, r8\n" + "\tbl Free\n" + "_08112FB8:\n" + "\tadd sp, 0x8\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_08112FC8: .4byte gUnknown_84566A8\n" + "_08112FCC: .4byte 0x04000008"); +} +#endif + +static void sub_8112FD0(void) +{ + sub_8112F18(sHelpMessageWindowId); +} + +static const u8 sHelpMessageTextColors[3] = {TEXT_COLOR_TRANSPARENT, TEXT_DYNAMIC_COLOR_1, TEXT_COLOR_DARK_GREY}; + +static void PrintHelpMessageText(const u8 *text) +{ + AddTextPrinterParameterized4(sHelpMessageWindowId, 2, 2, 5, 1, 1, sHelpMessageTextColors, -1, text); +} + +void PrintTextOnHelpMessageWindow(const u8 *text, u8 mode) +{ + sub_8112FD0(); + PrintHelpMessageText(text); + if (mode) + CopyWindowToVram(sHelpMessageWindowId, mode); +} |