diff options
Diffstat (limited to 'src/engine/mystery_event_menu.c')
-rw-r--r-- | src/engine/mystery_event_menu.c | 546 |
1 files changed, 120 insertions, 426 deletions
diff --git a/src/engine/mystery_event_menu.c b/src/engine/mystery_event_menu.c index bc14c760d..56801ff53 100644 --- a/src/engine/mystery_event_menu.c +++ b/src/engine/mystery_event_menu.c @@ -13,6 +13,7 @@ #include "strings2.h" #include "task.h" #include "text.h" +#include "title_screen.h" #include "ewram.h" static EWRAM_DATA u8 gUnknown_02039338 = 0; @@ -341,151 +342,51 @@ static void CB2_MysteryEventMenu(void) #if DEBUG +static const u8 Str_843DA70[] = _("CARDーE emulation。。。"); +static const u8 Str_843DA84[] = _("LR: select A: send。"); +static const u8 Str_843DA98[] = _("sending。。。"); +static const u8 Str_843DAA3[] = _("completed。"); + +extern const struct {const u8 *text; void (*func)();} gUnknown_Debug_842E2D0[]; +extern const u8 gUnknown_Debug_842E350; + void debug_sub_815D1D8(); -__attribute__((naked)) -void debug_sub_815D04C() +void debug_sub_815D04C(u8 taskId) { - asm( - " push {r4, r5, r6, lr}\n" - " lsl r0, r0, #0x18\n" - " lsr r5, r0, #0x18\n" - " ldr r1, ._125 @ gTasks\n" - " lsl r0, r5, #0x2\n" - " add r0, r0, r5\n" - " lsl r0, r0, #0x3\n" - " add r4, r0, r1\n" - " mov r1, #0x8\n" - " ldsh r0, [r4, r1]\n" - " cmp r0, #0\n" - " bne ._121 @cond_branch\n" - " mov r0, #0x4\n" - " mov r1, #0x4\n" - " mov r2, #0xd\n" - " mov r3, #0x7\n" - " bl Menu_DrawStdWindowFrame\n" - " ldr r1, ._125 + 4 @ gUnknown_Debug_842E2D0\n" - " mov r2, #0xa\n" - " ldsh r0, [r4, r2]\n" - " lsl r0, r0, #0x3\n" - " add r0, r0, r1\n" - " ldr r0, [r0]\n" - " mov r1, #0x5\n" - " mov r2, #0x5\n" - " bl Menu_PrintText\n" - " ldrh r0, [r4, #0x8]\n" - " add r0, r0, #0x1\n" - " strh r0, [r4, #0x8]\n" - "._121:\n" - " ldr r2, ._125 + 8 @ gMain\n" - " ldrh r1, [r2, #0x2e]\n" - " mov r0, #0x20\n" - " and r0, r0, r1\n" - " add r6, r2, #0\n" - " cmp r0, #0\n" - " beq ._122 @cond_branch\n" - " ldrh r1, [r4, #0xa]\n" - " mov r2, #0xa\n" - " ldsh r0, [r4, r2]\n" - " cmp r0, #0\n" - " bne ._123 @cond_branch\n" - " ldr r0, ._125 + 12 @ gUnknown_Debug_842E350\n" - " ldrb r0, [r0]\n" - " sub r0, r0, #0x1\n" - " b ._124\n" - "._126:\n" - " .align 2, 0\n" - "._125:\n" - " .word gTasks\n" - " .word gUnknown_Debug_842E2D0\n" - " .word gMain\n" - " .word gUnknown_Debug_842E350\n" - "._123:\n" - " sub r0, r1, #1\n" - "._124:\n" - " strh r0, [r4, #0xa]\n" - " ldr r0, ._130 @ gTasks\n" - " lsl r1, r5, #0x2\n" - " add r1, r1, r5\n" - " lsl r1, r1, #0x3\n" - " add r1, r1, r0\n" - " mov r0, #0x0\n" - " strh r0, [r1, #0x8]\n" - "._122:\n" - " ldrh r1, [r6, #0x2e]\n" - " mov r0, #0x10\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._127 @cond_branch\n" - " ldr r1, ._130 @ gTasks\n" - " lsl r2, r5, #0x2\n" - " add r0, r2, r5\n" - " lsl r0, r0, #0x3\n" - " add r4, r0, r1\n" - " mov r0, #0xa\n" - " ldsh r3, [r4, r0]\n" - " ldr r0, ._130 + 4 @ gUnknown_Debug_842E350\n" - " ldrb r0, [r0]\n" - " sub r0, r0, #0x1\n" - " cmp r3, r0\n" - " bne ._128 @cond_branch\n" - " mov r0, #0x0\n" - " b ._129\n" - "._131:\n" - " .align 2, 0\n" - "._130:\n" - " .word gTasks\n" - " .word gUnknown_Debug_842E350\n" - "._128:\n" - " ldrh r0, [r4, #0xa]\n" - " add r0, r0, #0x1\n" - "._129:\n" - " strh r0, [r4, #0xa]\n" - " add r0, r2, r5\n" - " lsl r0, r0, #0x3\n" - " add r0, r0, r1\n" - " mov r1, #0x0\n" - " strh r1, [r0, #0x8]\n" - "._127:\n" - " ldrh r1, [r6, #0x2e]\n" - " mov r0, #0x1\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._132 @cond_branch\n" - " ldr r1, ._133 @ gTasks\n" - " lsl r0, r5, #0x2\n" - " add r0, r0, r5\n" - " lsl r0, r0, #0x3\n" - " add r0, r0, r1\n" - " mov r2, #0xa\n" - " ldsh r1, [r0, r2]\n" - " lsl r1, r1, #0x3\n" - " ldr r0, ._133 + 4 @ gUnknown_Debug_842E2D0\n" - " add r0, r0, #0x4\n" - " add r1, r1, r0\n" - " ldr r0, ._133 + 8 @ \n" - " ldr r1, [r1]\n" - " bl _call_via_r1\n" - " ldr r0, ._133 + 12 @ \n" - " add r1, r6, r0\n" - " ldrb r0, [r1]\n" - " add r0, r0, #0x1\n" - " strb r0, [r1]\n" - " add r0, r5, #0\n" - " bl DestroyTask\n" - "._132:\n" - " pop {r4, r5, r6}\n" - " pop {r0}\n" - " bx r0\n" - "._134:\n" - " .align 2, 0\n" - "._133:\n" - " .word gTasks\n" - " .word gUnknown_Debug_842E2D0\n" - " .word +0x2004000\n" - " .word 0x43c\n" - "\n" - ); + if (gTasks[taskId].data[0] == 0) + { + Menu_DrawStdWindowFrame(4, 4, 13, 7); + Menu_PrintText(gUnknown_Debug_842E2D0[gTasks[taskId].data[1]].text, 5, 5); + gTasks[taskId].data[0]++; + } + + if (gMain.newKeys & 0x20) + { + if (gTasks[taskId].data[1] == 0) + gTasks[taskId].data[1] = gUnknown_Debug_842E350 - 1; + else + gTasks[taskId].data[1]--; + gTasks[taskId].data[0] = 0; + } + if (gMain.newKeys & 0x10) + { + if (gTasks[taskId].data[1] == gUnknown_Debug_842E350 - 1) + gTasks[taskId].data[1] = 0; + else + gTasks[taskId].data[1]++; + gTasks[taskId].data[0] = 0; + } + if (gMain.newKeys & A_BUTTON) + { + // TODO: fix this + s32 var = gTasks[taskId].data[1]; + asm(""::"r"(var * 8)); + gUnknown_Debug_842E2D0[var].func(gSharedMem + 0x4000); + + gMain.state++; + DestroyTask(taskId); + } } void debug_sub_815D15C(void) @@ -510,291 +411,84 @@ void debug_sub_815D15C(void) SetMainCallback2(debug_sub_815D1D8); } -__attribute__((naked)) -void debug_sub_815D1D8() +void debug_sub_815D1D8(void) { - asm( - " push {r4, lr}\n" - " add sp, sp, #0xfffffffc\n" - " ldr r1, ._139 @ gMain\n" - " ldr r2, ._139 + 4 @ 0x43c\n" - " add r0, r1, r2\n" - " ldrb r0, [r0]\n" - " add r4, r1, #0\n" - " cmp r0, #0xb\n" - " bls ._137 @cond_branch\n" - " b ._196\n" - "._137:\n" - " lsl r0, r0, #0x2\n" - " ldr r1, ._139 + 8 @ \n" - " add r0, r0, r1\n" - " ldr r0, [r0]\n" - " mov pc, r0\n" - "._140:\n" - " .align 2, 0\n" - "._139:\n" - " .word gMain\n" - " .word 0x43c\n" - " .word ._141\n" - "._141:\n" - " .word ._142\n" - " .word ._143\n" - " .word ._144\n" - " .word ._145\n" - " .word ._146\n" - " .word ._196\n" - " .word ._148\n" - " .word ._149\n" - " .word ._150\n" - " .word ._151\n" - " .word ._152\n" - " .word ._153\n" - "._142:\n" - " mov r0, #0x3\n" - " mov r1, #0xe\n" - " mov r2, #0x1b\n" - " mov r3, #0x13\n" - " bl Menu_DrawStdWindowFrame\n" - " mov r0, #0x1\n" - " neg r0, r0\n" - " mov r1, #0x0\n" - " str r1, [sp]\n" - " mov r2, #0x10\n" - " mov r3, #0x0\n" - " bl BeginNormalPaletteFade\n" - " ldr r1, ._155 @ gMain\n" - " ldr r0, ._155 + 4 @ 0x43c\n" - " add r1, r1, r0\n" - " b ._189\n" - "._156:\n" - " .align 2, 0\n" - "._155:\n" - " .word gMain\n" - " .word 0x43c\n" - "._143:\n" - " ldr r0, ._161 @ gPaletteFade\n" - " ldrb r1, [r0, #0x7]\n" - " mov r0, #0x80\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._157 @cond_branch\n" - " b ._196\n" - "._157:\n" - " ldrh r1, [r4, #0x2c]\n" - " mov r0, #0x80\n" - " lsl r0, r0, #0x1\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._159 @cond_branch\n" - " ldr r1, ._161 + 4 @ gUnknown_Debug_30030E0\n" - " ldrb r0, [r1]\n" - " add r0, r0, #0x1\n" - " strb r0, [r1]\n" - "._159:\n" - " ldr r0, ._161 + 8 @ Str_843DA70\n" - " mov r1, #0x4\n" - " mov r2, #0xf\n" - " bl MenuPrintMessage\n" - " ldr r2, ._161 + 12 @ 0x43c\n" - " add r1, r4, r2\n" - " b ._189\n" - "._162:\n" - " .align 2, 0\n" - "._161:\n" - " .word gPaletteFade\n" - " .word gUnknown_Debug_30030E0\n" - " .word Str_843DA70\n" - " .word 0x43c\n" - "._144:\n" - " bl Menu_UpdateWindowText\n" - " lsl r0, r0, #0x18\n" - " cmp r0, #0\n" - " bne ._163 @cond_branch\n" - " b ._196\n" - "._163:\n" - " ldr r1, ._166 @ gMain\n" - " ldr r0, ._166 + 4 @ 0x43c\n" - " add r1, r1, r0\n" - " ldrb r0, [r1]\n" - " add r0, r0, #0x1\n" - " strb r0, [r1]\n" - " ldr r1, ._166 + 8 @ gLinkType\n" - " ldr r2, ._166 + 12 @ 0x5501\n" - " add r0, r2, #0\n" - " strh r0, [r1]\n" - " bl OpenLink\n" - " b ._196\n" - "._167:\n" - " .align 2, 0\n" - "._166:\n" - " .word gMain\n" - " .word 0x43c\n" - " .word gLinkType\n" - " .word 0x5501\n" - "._145:\n" - " ldr r0, ._171 @ gReceivedRemoteLinkPlayers\n" - " ldrb r0, [r0]\n" - " cmp r0, #0\n" - " bne ._168 @cond_branch\n" - " b ._196\n" - "._168:\n" - " ldr r1, ._171 + 4 @ 0x43c\n" - " add r0, r4, r1\n" - " ldrb r1, [r0]\n" - " add r1, r1, #0x1\n" - " strb r1, [r0]\n" - " ldr r0, ._171 + 8 @ Str_843DA84\n" - " mov r1, #0x4\n" - " mov r2, #0xf\n" - " bl MenuPrintMessage\n" - " b ._196\n" - "._172:\n" - " .align 2, 0\n" - "._171:\n" - " .word gReceivedRemoteLinkPlayers\n" - " .word 0x43c\n" - " .word Str_843DA84\n" - "._146:\n" - " bl Menu_UpdateWindowText\n" - " lsl r0, r0, #0x18\n" - " cmp r0, #0\n" - " bne ._173 @cond_branch\n" - " b ._196\n" - "._173:\n" - " ldr r0, ._176 @ debug_sub_815D04C\n" - " mov r1, #0xa\n" - " bl CreateTask\n" - " ldr r1, ._176 + 4 @ gMain\n" - " ldr r2, ._176 + 8 @ 0x43c\n" - " add r1, r1, r2\n" - " b ._189\n" - "._177:\n" - " .align 2, 0\n" - "._176:\n" - " .word debug_sub_815D04C+1\n" - " .word gMain\n" - " .word 0x43c\n" - "._148:\n" - " ldr r0, ._179 @ Str_843DA98\n" - " mov r1, #0x4\n" - " mov r2, #0xf\n" - " bl MenuPrintMessage\n" - " ldr r1, ._179 + 4 @ 0x2004000\n" - " ldr r2, ._179 + 8 @ 0x2004\n" - " mov r0, #0x0\n" - " bl SendBlock\n" - " ldr r1, ._179 + 12 @ gMain\n" - " ldr r0, ._179 + 16 @ 0x43c\n" - " add r1, r1, r0\n" - " b ._189\n" - "._180:\n" - " .align 2, 0\n" - "._179:\n" - " .word Str_843DA98\n" - " .word 0x2004000\n" - " .word 0x2004\n" - " .word gMain\n" - " .word 0x43c\n" - "._149:\n" - " bl Menu_UpdateWindowText\n" - " bl IsLinkTaskFinished\n" - " lsl r0, r0, #0x18\n" - " cmp r0, #0\n" - " beq ._196 @cond_branch\n" - " ldr r1, ._183 @ gMain\n" - " ldr r2, ._183 + 4 @ 0x43c\n" - " add r1, r1, r2\n" - " b ._189\n" - "._184:\n" - " .align 2, 0\n" - "._183:\n" - " .word gMain\n" - " .word 0x43c\n" - "._150:\n" - " bl sub_800832C\n" - " ldr r1, ._186 @ gMain\n" - " ldr r0, ._186 + 4 @ 0x43c\n" - " add r1, r1, r0\n" - " b ._189\n" - "._187:\n" - " .align 2, 0\n" - "._186:\n" - " .word gMain\n" - " .word 0x43c\n" - "._151:\n" - " ldr r0, ._190 @ gReceivedRemoteLinkPlayers\n" - " ldrb r0, [r0]\n" - " cmp r0, #0\n" - " bne ._196 @cond_branch\n" - " mov r0, #0x4\n" - " mov r1, #0xf\n" - " mov r2, #0x1a\n" - " mov r3, #0x12\n" - " bl Menu_BlankWindowRect\n" - " ldr r0, ._190 + 4 @ Str_843DAA3\n" - " mov r1, #0x4\n" - " mov r2, #0xf\n" - " bl Menu_PrintText\n" - " ldr r1, ._190 + 8 @ gMain\n" - " ldr r2, ._190 + 12 @ 0x43c\n" - " add r1, r1, r2\n" - " b ._189\n" - "._191:\n" - " .align 2, 0\n" - "._190:\n" - " .word gReceivedRemoteLinkPlayers\n" - " .word Str_843DAA3\n" - " .word gMain\n" - " .word 0x43c\n" - "._152:\n" - " ldrh r1, [r4, #0x2e]\n" - " mov r0, #0x1\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._196 @cond_branch\n" - " mov r0, #0x1\n" - " neg r0, r0\n" - " mov r1, #0x0\n" - " str r1, [sp]\n" - " mov r2, #0x0\n" - " mov r3, #0x10\n" - " bl BeginNormalPaletteFade\n" - " ldr r0, ._194 @ 0x43c\n" - " add r1, r4, r0\n" - "._189:\n" - " ldrb r0, [r1]\n" - " add r0, r0, #0x1\n" - " strb r0, [r1]\n" - " b ._196\n" - "._195:\n" - " .align 2, 0\n" - "._194:\n" - " .word 0x43c\n" - "._153:\n" - " ldr r0, ._197 @ gPaletteFade\n" - " ldrb r1, [r0, #0x7]\n" - " mov r0, #0x80\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " bne ._196 @cond_branch\n" - " ldr r0, ._197 + 4 @ CB2_InitTitleScreen\n" - " bl SetMainCallback2\n" - "._196:\n" - " bl RunTasks\n" - " bl AnimateSprites\n" - " bl BuildOamBuffer\n" - " bl UpdatePaletteFade\n" - " add sp, sp, #0x4\n" - " pop {r4}\n" - " pop {r0}\n" - " bx r0\n" - "._198:\n" - " .align 2, 0\n" - "._197:\n" - " .word gPaletteFade\n" - " .word CB2_InitTitleScreen+1\n" - "\n" - ); + switch (gMain.state) + { + case 0: + Menu_DrawStdWindowFrame(3, 14, 27, 19); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + gMain.state++; + break; + case 1: + if (!gPaletteFade.active) + { + if (gMain.heldKeys & 0x100) + gUnknown_Debug_30030E0++; + MenuPrintMessage(Str_843DA70, 4, 15); + gMain.state++; + } + break; + case 2: + if (Menu_UpdateWindowText()) + { + gMain.state++; + gLinkType = 0x5501; + OpenLink(); + } + break; + case 3: + if (gReceivedRemoteLinkPlayers != 0) + { + gMain.state++; + MenuPrintMessage(Str_843DA84, 4, 15); + } + break; + case 4: + if (Menu_UpdateWindowText()) + { + CreateTask(debug_sub_815D04C, 10); + gMain.state++; + } + break; + case 6: + MenuPrintMessage(Str_843DA98, 4, 15); + SendBlock(0, gSharedMem + 0x4000, 0x2004); + gMain.state++; + break; + case 7: + Menu_UpdateWindowText(); + if (IsLinkTaskFinished()) + gMain.state++; + break; + case 8: + sub_800832C(); + gMain.state++; + break; + case 9: + if (gReceivedRemoteLinkPlayers == 0) + { + Menu_BlankWindowRect(4, 15, 26, 18); + Menu_PrintText(Str_843DAA3, 4, 15); + gMain.state++; + } + break; + case 10: + if (gMain.newKeys & A_BUTTON) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gMain.state++; + } + break; + case 11: + if (!gPaletteFade.active) + SetMainCallback2(CB2_InitTitleScreen); + break; + } + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); } #endif |