diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2018-02-07 00:40:22 -0500 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2018-02-07 00:40:22 -0500 |
commit | dcd35c895cb1c5680f92360cb084e6924ed3b76f (patch) | |
tree | e3b12bfd9f67e1237832602f03fe5bfd7380ab0b /src/field/start_menu.c | |
parent | eff6795887cc27f2c5139df9a6da70f4f02338b4 (diff) | |
parent | c79d259508d47a8b5bde5b9060b8fe8c6989bd44 (diff) |
Merge branch 'master' into unk_text_8095904
Diffstat (limited to 'src/field/start_menu.c')
-rw-r--r-- | src/field/start_menu.c | 410 |
1 files changed, 348 insertions, 62 deletions
diff --git a/src/field/start_menu.c b/src/field/start_menu.c index dccf1714e..4904f4a80 100644 --- a/src/field/start_menu.c +++ b/src/field/start_menu.c @@ -28,7 +28,7 @@ #include "strings2.h" #include "task.h" #include "trainer_card.h" -#include "unknown_task.h" +#include "scanline_effect.h" //Menu actions enum { @@ -44,6 +44,11 @@ enum { MENU_ACTION_PLAYER_LINK }; +#if DEBUG +static u32 _debugStartMenu_0 __attribute__((unused)); +static u32 _debugStartMenu_1 __attribute__((unused)); +#endif + static u8 (*saveDialogCallback)(void); static u8 saveDialogTimer; //Number of frames to keep the window on screen after save was completed static bool8 savingComplete; @@ -54,7 +59,7 @@ extern u16 gSpecialVar_Result; extern u8 gUnknown_03004860; -u8 (*gCallback_03004AE8)(void); +u8 (*gMenuCallback)(void); EWRAM_DATA static u8 sStartMenuCursorPos = 0; EWRAM_DATA static u8 sNumStartMenuActions = 0; @@ -132,6 +137,304 @@ static bool32 sub_80719FC(u8 *ptr); static void sub_8071B54(void); static void Task_8071B64(u8 taskId); +#if DEBUG +__attribute__((naked)) +void debug_sub_8075C30() +{ + asm( + " push {lr}\n" + " bl CloseMenu\n" + " bl debug_sub_8075D9C\n" + " mov r0, #0x1\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8075C40() +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " mov r7, sl\n" + " mov r6, r9\n" + " mov r5, r8\n" + " push {r5, r6, r7}\n" + " lsl r0, r0, #0x18\n" + " lsr r4, r0, #0x18\n" + " lsl r0, r4, #0x2\n" + " add r0, r0, r4\n" + " lsl r0, r0, #0x3\n" + " ldr r1, ._5 @ gTasks\n" + " add r5, r0, r1\n" + " mov r1, #0x0\n" + " ldsh r0, [r5, r1]\n" + " cmp r0, #0x1\n" + " beq ._1 @cond_branch\n" + " cmp r0, #0x1\n" + " bgt ._2 @cond_branch\n" + " cmp r0, #0\n" + " beq ._3 @cond_branch\n" + " b ._18\n" + "._6:\n" + " .align 2, 0\n" + "._5:\n" + " .word gTasks+0x8\n" + "._2:\n" + " cmp r0, #0x2\n" + " beq ._7 @cond_branch\n" + " cmp r0, #0x3\n" + " beq ._8 @cond_branch\n" + " b ._18\n" + "._3:\n" + " bl m4aSoundVSyncOff\n" + " b ._12\n" + "._1:\n" + " ldr r1, ._13 @ 0x4000208\n" + " ldrh r0, [r1]\n" + " mov sl, r0\n" + " mov r0, #0x0\n" + " strh r0, [r1]\n" + " ldr r1, ._13 + 4 @ 0x4000108\n" + " strh r0, [r1]\n" + " mov r0, #0x83\n" + " lsl r0, r0, #0x10\n" + " str r0, [r1]\n" + " ldr r4, ._13 + 8 @ 0xc34f\n" + " mov r9, r4\n" + " ldr r2, ._13 + 12 @ 0x40000b0\n" + " ldr r0, ._13 + 16 @ gScanlineEffectRegBuffers\n" + " mov ip, r0\n" + " ldr r1, ._13 + 20 @ 0xc5ff\n" + " mov r8, r1\n" + " ldr r7, ._13 + 24 @ 0x7fff\n" + " mov r3, r9\n" + " add r3, r3, #0x1\n" + " ldr r6, ._13 + 28 @ 0x4000040\n" + " ldr r4, ._13 + 32 @ 0xa2600001\n" + "._11:\n" + " mov r0, ip\n" + " str r0, [r2]\n" + " str r6, [r2, #0x4]\n" + " str r4, [r2, #0x8]\n" + " ldr r0, [r2, #0x8]\n" + " ldrh r1, [r2, #0xa]\n" + " mov r0, r8\n" + " and r0, r0, r1\n" + " strh r0, [r2, #0xa]\n" + " ldrh r1, [r2, #0xa]\n" + " add r0, r7, #0\n" + " and r0, r0, r1\n" + " strh r0, [r2, #0xa]\n" + " ldrh r0, [r2, #0xa]\n" + " sub r3, r3, #0x1\n" + " cmp r3, #0\n" + " bne ._11 @cond_branch\n" + " mov r3, r9\n" + " add r3, r3, #0x1\n" + " ldr r0, ._13 + 36 @ 0x400010a\n" + " mov r2, #0x0\n" + " strh r2, [r0]\n" + " ldr r1, ._13 + 4 @ 0x4000108\n" + " ldrh r0, [r1]\n" + " ldr r4, ._13 + 40 @ _debugStartMenu_0\n" + " str r0, [r4]\n" + " strh r2, [r1]\n" + " ldr r0, ._13 @ 0x4000208\n" + " mov r1, sl\n" + " strh r1, [r0]\n" + " ldr r4, ._13 + 44 @ _debugStartMenu_1\n" + " str r3, [r4]\n" + " bl m4aSoundVSyncOn\n" + " b ._12\n" + "._14:\n" + " .align 2, 0\n" + "._13:\n" + " .word 0x4000208\n" + " .word 0x4000108\n" + " .word 0xc34f\n" + " .word 0x40000b0\n" + " .word gScanlineEffectRegBuffers\n" + " .word 0xc5ff\n" + " .word 0x7fff\n" + " .word 0x4000040\n" + " .word 0xa2600001\n" + " .word 0x400010a\n" + " .word _debugStartMenu_0\n" + " .word _debugStartMenu_1\n" + "._7:\n" + " mov r0, #0x15\n" + " bl PlaySE\n" + " ldr r0, ._16 @ gStringVar1\n" + " ldr r1, ._16 + 4 @ _debugStartMenu_1\n" + " ldr r1, [r1]\n" + " mov r2, #0x1\n" + " mov r3, #0x8\n" + " bl ConvertIntToDecimalStringN\n" + " ldr r0, ._16 + 8 @ gStringVar2\n" + " ldr r1, ._16 + 12 @ _debugStartMenu_0\n" + " ldr r1, [r1]\n" + " mov r2, #0x1\n" + " mov r3, #0x8\n" + " bl ConvertIntToDecimalStringN\n" + " bl Menu_DisplayDialogueFrame\n" + " ldr r0, ._16 + 16 @ gUnknown_Debug_839B6D8\n" + " mov r1, #0x2\n" + " mov r2, #0xf\n" + " bl Menu_PrintText\n" + "._12:\n" + " ldrh r0, [r5]\n" + " add r0, r0, #0x1\n" + " strh r0, [r5]\n" + " b ._18\n" + "._17:\n" + " .align 2, 0\n" + "._16:\n" + " .word gStringVar1\n" + " .word _debugStartMenu_1\n" + " .word gStringVar2\n" + " .word _debugStartMenu_0\n" + " .word gUnknown_Debug_839B6D8\n" + "._8:\n" + " ldr r0, ._19 @ gMain\n" + " ldrh r1, [r0, #0x2e]\n" + " mov r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._18 @cond_branch\n" + " bl Menu_EraseScreen\n" + " bl ScriptContext2_Disable\n" + " add r0, r4, #0\n" + " bl DestroyTask\n" + "._18:\n" + " pop {r3, r4, r5}\n" + " mov r8, r3\n" + " mov r9, r4\n" + " mov sl, r5\n" + " pop {r4, r5, r6, r7}\n" + " pop {r0}\n" + " bx r0\n" + "._20:\n" + " .align 2, 0\n" + "._19:\n" + " .word gMain\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8075D9C() +{ + asm( + " push {lr}\n" + " ldr r0, ._21 @ debug_sub_8075C40\n" + " mov r1, #0xa\n" + " bl CreateTask\n" + " bl ScriptContext2_Enable\n" + " pop {r0}\n" + " bx r0\n" + "._22:\n" + " .align 2, 0\n" + "._21:\n" + " .word debug_sub_8075C40+1\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8075DB4() +{ + asm( + " push {r4, r5, r6, lr}\n" + " add r6, r0, #0\n" + " add r5, r1, #0\n" + " add r4, r2, #0\n" + " add r0, r4, #0\n" + " mov r1, #0x4d\n" + " bl __umodsi3\n" + " strb r0, [r6, #0x1]\n" + " add r1, r6, #0\n" + " add r1, r1, #0xc\n" + " add r0, r4, #0\n" + " bl write_word_to_mem\n" + " add r0, r6, #4\n" + " add r1, r5, #0\n" + " bl StringCopy8\n" + " mov r3, #0x7\n" + " mov r4, #0x0\n" + " ldr r0, ._25 @ gSaveBlock1\n" + " ldr r1, ._25 + 4 @ 0x2b28\n" + " add r5, r0, r1\n" + " add r2, r6, #0\n" + " add r2, r2, #0x10\n" + " add r1, r6, #0\n" + " add r1, r1, #0x1c\n" + "._23:\n" + " ldrh r0, [r5]\n" + " strh r0, [r2]\n" + " strh r3, [r1]\n" + " add r0, r3, #6\n" + " strh r0, [r1, #0xc]\n" + " add r3, r3, #0x1\n" + " add r5, r5, #0x2\n" + " add r2, r2, #0x2\n" + " add r1, r1, #0x2\n" + " add r4, r4, #0x1\n" + " cmp r4, #0x5\n" + " ble ._23 @cond_branch\n" + " mov r4, #0x0\n" + "._24:\n" + " mov r0, #0x64\n" + " mul r0, r0, r4\n" + " ldr r1, ._25 + 8 @ gPlayerParty\n" + " add r0, r0, r1\n" + " mov r1, #0x2c\n" + " mul r1, r1, r4\n" + " add r1, r1, #0x34\n" + " add r1, r6, r1\n" + " bl sub_803AF78\n" + " add r4, r4, #0x1\n" + " cmp r4, #0x2\n" + " ble ._24 @cond_branch\n" + " add r0, r6, #0\n" + " bl SetEReaderTrainerChecksum\n" + " pop {r4, r5, r6}\n" + " pop {r0}\n" + " bx r0\n" + "._26:\n" + " .align 2, 0\n" + "._25:\n" + " .word gSaveBlock1\n" + " .word 0x2b28\n" + " .word gPlayerParty\n" + "\n" + ); +} + +__attribute__((naked)) +void unref_sub_8070F90() +{ + asm( + " push {lr}\n" + " ldr r0, ._27 @ 0x801\n" + " bl FlagSet\n" + " mov r0, #0x80\n" + " lsl r0, r0, #0x4\n" + " bl FlagSet\n" + " ldr r0, ._27 + 4 @ 0x802\n" + " bl FlagSet\n" + " pop {r0}\n" + " bx r0\n" + "._28:\n" + " .align 2, 0\n" + "._27:\n" + " .word 0x801\n" + " .word 0x802\n" + "\n" + ); +} +#endif static void BuildStartMenuActions(void) { @@ -193,8 +496,8 @@ static void BuildStartMenuActions_Link(void) static void DisplaySafariBallsWindow(void) { sub_8072C44(gStringVar1, gNumSafariBalls, 12, 1); - MenuDrawTextWindow(0, 0, 10, 5); - MenuPrint(gOtherText_SafariStock, 1, 1); + Menu_DrawStdWindowFrame(0, 0, 10, 5); + Menu_PrintText(gOtherText_SafariStock, 1, 1); } //Prints n menu items starting at *index @@ -204,7 +507,7 @@ static bool32 PrintStartMenuItemsMultistep(s16 *index, u32 n) do { - MenuPrint(sStartMenuItems[sCurrentStartMenuActions[_index]].text, 23, 2 + _index * 2); + Menu_PrintText(sStartMenuItems[sCurrentStartMenuActions[_index]].text, 23, 2 + _index * 2); _index++; if (_index >= sNumStartMenuActions) { @@ -226,7 +529,7 @@ static bool32 InitStartMenuMultistep(s16 *step, s16 *index) (*step)++; break; case 2: - MenuDrawTextWindow(22, 0, 29, sNumStartMenuActions * 2 + 3); + Menu_DrawStdWindowFrame(22, 0, 29, sNumStartMenuActions * 2 + 3); *index = 0; (*step)++; break; @@ -271,7 +574,7 @@ void CreateStartMenuTask(void (*func)(u8)) { u8 taskId; - InitMenuWindow(&gWindowConfig_81E6CE4); + InitMenuWindow(&gWindowTemplate_81E6CE4); taskId = CreateTask(Task_StartMenu, 0x50); SetTaskFuncWithFollowupFunc(taskId, Task_StartMenu, func); } @@ -283,11 +586,11 @@ void sub_80712B4(u8 taskId) switch (task->data[0]) { case 0: - gCallback_03004AE8 = StartMenu_InputProcessCallback; + gMenuCallback = StartMenu_InputProcessCallback; task->data[0]++; break; case 1: - if (gCallback_03004AE8() == 1) + if (gMenuCallback() == 1) DestroyTask(taskId); break; } @@ -310,12 +613,12 @@ static u8 StartMenu_InputProcessCallback(void) if (gMain.newKeys & DPAD_UP) { PlaySE(SE_SELECT); - sStartMenuCursorPos = MoveMenuCursor(-1); + sStartMenuCursorPos = Menu_MoveCursor(-1); } if (gMain.newKeys & DPAD_DOWN) { PlaySE(SE_SELECT); - sStartMenuCursorPos = MoveMenuCursor(1); + sStartMenuCursorPos = Menu_MoveCursor(1); } if (gMain.newKeys & A_BUTTON) { @@ -325,11 +628,11 @@ static u8 StartMenu_InputProcessCallback(void) if (GetNationalPokedexCount(0) == 0) return 0; } - gCallback_03004AE8 = sStartMenuItems[sCurrentStartMenuActions[sStartMenuCursorPos]].func; - if (gCallback_03004AE8 != StartMenu_SaveCallback && - gCallback_03004AE8 != StartMenu_ExitCallback && - gCallback_03004AE8 != StartMenu_RetireCallback) - fade_screen(1, 0); + gMenuCallback = sStartMenuItems[sCurrentStartMenuActions[sStartMenuCursorPos]].func; + if (gMenuCallback != StartMenu_SaveCallback && + gMenuCallback != StartMenu_ExitCallback && + gMenuCallback != StartMenu_RetireCallback) + FadeScreen(1, 0); return 0; } if (gMain.newKeys & (START_BUTTON | B_BUTTON)) @@ -345,7 +648,7 @@ static u8 StartMenu_PokedexCallback(void) { if (!gPaletteFade.active) { - IncrementGameStat(0x29); + IncrementGameStat(GAME_STAT_CHECKED_POKEDEX); PlayRainSoundEffect(); SetMainCallback2(CB2_InitPokedex); return 1; @@ -395,7 +698,7 @@ static u8 StartMenu_PlayerCallback(void) if (!gPaletteFade.active) { PlayRainSoundEffect(); - sub_8093110(sub_805469C); + TrainerCard_ShowPlayerCard(sub_805469C); return 1; } return 0; @@ -404,8 +707,8 @@ static u8 StartMenu_PlayerCallback(void) //When player selects SAVE static u8 StartMenu_SaveCallback(void) { - HandleDestroyMenuCursors(); - gCallback_03004AE8 = SaveCallback1; + Menu_DestroyCursor(); + gMenuCallback = SaveCallback1; return 0; } @@ -443,7 +746,7 @@ static u8 StartMenu_PlayerLinkCallback(void) if (!gPaletteFade.active) { PlayRainSoundEffect(); - sub_8093130(gUnknown_03004860, sub_805469C); + TrainerCard_ShowLinkCard(gUnknown_03004860, sub_805469C); return 1; } return 0; @@ -461,7 +764,7 @@ enum static u8 SaveCallback1(void) { sub_807160C(); - gCallback_03004AE8 = SaveCallback2; + gMenuCallback = SaveCallback2; return FALSE; } @@ -473,13 +776,13 @@ static u8 SaveCallback2(void) return FALSE; case SAVE_CANCELED: //Go back to start menu - MenuZeroFillScreen(); + Menu_EraseScreen(); InitStartMenu(); - gCallback_03004AE8 = StartMenu_InputProcessCallback; + gMenuCallback = StartMenu_InputProcessCallback; return FALSE; case SAVE_SUCCESS: case SAVE_ERROR: - MenuZeroFillScreen(); + Menu_EraseScreen(); sub_8064E2C(); ScriptContext2_Disable(); return TRUE; @@ -498,7 +801,7 @@ static u8 RunSaveDialogCallback(void) { if (savingComplete) { - if (!MenuUpdateWindowText()) + if (!Menu_UpdateWindowText()) return 0; } savingComplete = FALSE; @@ -514,7 +817,7 @@ void ScrSpecial_DoSaveDialog(void) static void DisplaySaveMessageWithCallback(const u8 *ptr, u8 (*func)(void)) { StringExpandPlaceholders(gStringVar4, ptr); - MenuDisplayMessageBox(); + Menu_DisplayDialogueFrame(); MenuPrintMessageDefaultCoords(gStringVar4); savingComplete = TRUE; saveDialogCallback = func; @@ -547,7 +850,7 @@ static void sub_8071700(void) static void HideSaveDialog(void) { - MenuZeroFillWindowRect(20, 8, 26, 13); + Menu_EraseWindowRect(20, 8, 26, 13); } static void SaveDialogStartTimeout(void) @@ -579,7 +882,7 @@ static bool8 SaveDialogCheckForTimeoutAndKeypress(void) static u8 SaveDialogCB_DisplayConfirmMessage(void) { - MenuZeroFillScreen(); + Menu_EraseScreen(); HandleDrawSaveWindowInfo(0, 0); DisplaySaveMessageWithCallback(gSaveText_WouldYouLikeToSave, SaveDialogCB_DisplayConfirmYesNoMenu); return SAVE_IN_PROGRESS; @@ -594,7 +897,7 @@ static u8 SaveDialogCB_DisplayConfirmYesNoMenu(void) static u8 SaveDialogCB_ProcessConfirmYesNoMenu(void) { - switch (ProcessMenuInputNoWrap_()) + switch (Menu_ProcessInputNoWrap_()) { case 0: //YES HideSaveDialog(); @@ -640,7 +943,7 @@ static u8 SaveDialogCB_DisplayOverwriteYesNoMenu(void) static u8 SaveDialogCB_ProcessOverwriteYesNoMenu(void) { - switch (ProcessMenuInputNoWrap_()) + switch (Menu_ProcessInputNoWrap_()) { case 0: //YES HideSaveDialog(); @@ -664,20 +967,20 @@ static u8 SaveDialogCB_DisplaySavingMessage(void) static u8 SaveDialogCB_DoSave(void) { - bool8 saveSucceeded; + u8 saveStatus; - IncrementGameStat(0); + IncrementGameStat(GAME_STAT_SAVED_GAME); if (gDifferentSaveFile == TRUE) { - saveSucceeded = TrySavingData(DIFFERENT_FILE_SAVE); + saveStatus = Save_WriteData(SAVE_OVERWRITE_DIFFERENT_FILE); gDifferentSaveFile = FALSE; } else { - saveSucceeded = TrySavingData(NORMAL_SAVE); + saveStatus = Save_WriteData(SAVE_NORMAL); } - if (saveSucceeded == TRUE) + if (saveStatus == SAVE_STATUS_OK) { //"(Player) saved the game." DisplaySaveMessageWithCallback(gSaveText_PlayerSavedTheGame, SaveDialogCB_SaveSuccess); @@ -694,7 +997,7 @@ static u8 SaveDialogCB_DoSave(void) static u8 SaveDialogCB_SaveSuccess(void) { - if (MenuUpdateWindowText()) + if (Menu_UpdateWindowText()) { PlaySE(SE_SAVE); saveDialogCallback = SaveDialogCB_ReturnSuccess; @@ -715,7 +1018,7 @@ static u8 SaveDialogCB_ReturnSuccess(void) static u8 SaveDialogCB_SaveError(void) { - if (MenuUpdateWindowText()) + if (Menu_UpdateWindowText()) { PlaySE(SE_BOO); saveDialogCallback = SaveDialogCB_ReturnError; @@ -744,38 +1047,21 @@ static bool32 sub_80719FC(u8 *step) switch (*step) { case 0: - { - u8 *addr; - u32 size; - REG_DISPCNT = 0; SetVBlankCallback(NULL); - remove_some_task(); + ScanlineEffect_Stop(); DmaClear16(3, PLTT, PLTT_SIZE); - addr = (void *)VRAM; - size = 0x18000; - while (1) - { - DmaFill16(3, 0, addr, 0x1000); - addr += 0x1000; - size -= 0x1000; - if (size <= 0x1000) - { - DmaFill16(3, 0, addr, size); - break; - } - } + DmaFill16Large(3, 0, (void *)(VRAM + 0x0), 0x18000, 0x1000); break; - } case 1: ResetSpriteData(); ResetTasks(); ResetPaletteFade(); - dp12_8087EA4(); + ScanlineEffect_Clear(); break; case 2: - SetUpWindowConfig(&gWindowConfig_81E6CE4); - InitMenuWindow(&gWindowConfig_81E6CE4); + Text_LoadWindowTemplate(&gWindowTemplate_81E6CE4); + InitMenuWindow(&gWindowTemplate_81E6CE4); REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_BG0_ON; break; case 3: @@ -821,8 +1107,8 @@ static void Task_8071B64(u8 taskId) switch (*step) { case 0: - MenuDisplayMessageBox(); - MenuPrint(gSystemText_Saving, 2, 15); + Menu_DisplayDialogueFrame(); + Menu_PrintText(gSystemText_Saving, 2, 15); BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); (*step)++; break; |