diff options
author | Daniel Harding <33dannye@gmail.com> | 2021-11-15 13:31:15 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-15 13:31:15 -0600 |
commit | f516a91f5fa02a741631c77b9097598f466d1328 (patch) | |
tree | bac2ee5e3fad02983b061580f5c085baecb5439a /src/engine/menus/main_menu.asm | |
parent | 15e986d374fdd11ed0f412fbdc9b858d4c4b9f50 (diff) | |
parent | 1fd16cd27fcd4f432bfc09fc5b7a262798b72430 (diff) |
Some more bank splitting
Diffstat (limited to 'src/engine/menus/main_menu.asm')
-rw-r--r-- | src/engine/menus/main_menu.asm | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/src/engine/menus/main_menu.asm b/src/engine/menus/main_menu.asm new file mode 100644 index 0000000..005c266 --- /dev/null +++ b/src/engine/menus/main_menu.asm @@ -0,0 +1,93 @@ +; usually, the game doesn't loop here at all, since as soon as a main menu option +; is selected, there is no need to come back to the menu. +; the only exception is after returning from Card Pop! +_GameLoop: + call ZeroObjectPositions + ld hl, wVBlankOAMCopyToggle + inc [hl] + farcall SetIntroSGBBorder + ld a, $ff + ld [wLastSelectedStartMenuItem], a +.main_menu_loop + ld a, PLAYER_TURN + ldh [hWhoseTurn], a + farcall Func_c1f8 + farcall HandleTitleScreen + ld a, [wStartMenuChoice] + ld hl, MainMenuFunctionTable + call JumpToFunctionInTable + jr c, .main_menu_loop ; return to main menu + jr _GameLoop ; virtually restart game + +; this is never reached + scf + ret + +MainMenuFunctionTable: + dw MainMenu_CardPop + dw MainMenu_ContinueFromDiary + dw MainMenu_NewGame + dw MainMenu_ContinueDuel + +MainMenu_NewGame: + farcall Func_c1b1 + call DisplayPlayerNamingScreen + farcall InitSaveData + call EnableSRAM + ld a, [sAnimationsDisabled] + ld [wAnimationsDisabled], a + ld a, [sTextSpeed] + ld [wTextSpeed], a + call DisableSRAM + ld a, MUSIC_STOP + call PlaySong + farcall SetMainSGBBorder + ld a, MUSIC_OVERWORLD + ld [wDefaultSong], a + call PlayDefaultSong + farcall DrawPlayerPortraitAndPrintNewGameText + ld a, GAME_EVENT_OVERWORLD + ld [wGameEvent], a + farcall $03, ExecuteGameEvent + or a + ret + +MainMenu_ContinueFromDiary: + ld a, MUSIC_STOP + call PlaySong + call ValidateBackupGeneralSaveData + jr nc, MainMenu_NewGame + farcall Func_c1ed + farcall SetMainSGBBorder + call EnableSRAM + xor a + ld [sPlayerInChallengeMachine], a + call DisableSRAM + ld a, GAME_EVENT_OVERWORLD + ld [wGameEvent], a + farcall $03, ExecuteGameEvent + or a + ret + +MainMenu_CardPop: + ld a, MUSIC_CARD_POP + call PlaySong + bank1call DoCardPop + farcall WhiteOutDMGPals + call DoFrameIfLCDEnabled + ld a, MUSIC_STOP + call PlaySong + scf + ret + +MainMenu_ContinueDuel: + ld a, MUSIC_STOP + call PlaySong + farcall ClearEvents + farcall $04, LoadGeneralSaveData + farcall SetMainSGBBorder + ld a, GAME_EVENT_CONTINUE_DUEL + ld [wGameEvent], a + farcall $03, ExecuteGameEvent + or a + ret |