diff options
Diffstat (limited to 'engine/menus/main_menu.asm')
-rw-r--r-- | engine/menus/main_menu.asm | 251 |
1 files changed, 251 insertions, 0 deletions
diff --git a/engine/menus/main_menu.asm b/engine/menus/main_menu.asm new file mode 100644 index 00000000..97ac8ed6 --- /dev/null +++ b/engine/menus/main_menu.asm @@ -0,0 +1,251 @@ +MainMenu: + ld de, MUSIC_NONE + call PlayMusic + call DelayFrame + ld de, MUSIC_MAIN_MENU + ld a, e + ld [wMapMusic], a + call PlayMusic +.loop + xor a + ld [wDisableTextAcceleration], a + call ClearTilemapEtc + ld b, SCGB_DIPLOMA + call GetSGBLayout + ld hl, wGameTimerPause + res GAMETIMERPAUSE_TIMER_PAUSED_F, [hl] + call MainMenu_GetWhichMenu + ld [wWhichIndexSet], a + call MainMenu_PrintCurrentTimeAndDay + ld hl, .MenuHeader + call LoadMenuHeader + call MainMenuJoypadLoop + call CloseWindow + jr c, .quit + call ClearTilemap + ld a, [wMenuSelection] + ld hl, .Jumptable + rst JumpTable + jr .loop + +.quit + jp StartTitleScreen + +.MenuHeader: + db MENU_BACKUP_TILES ; flags + menu_coords 0, 0, 14, 7 + dw .MenuData + db 1 ; default option + +.MenuData: + db STATICMENU_CURSOR ; flags + db 0 ; items + dw MainMenuItems + dw PlaceMenuStrings + dw .Strings + +.Strings: + db "CONTINUE@" + db "NEW GAME@" + db "OPTION@" + db "MYSTERY GIFT@" + +.Jumptable: + dw MainMenu_Continue + dw MainMenu_NewGame + dw MainMenu_Options + dw MainMenu_MysteryGift + +CONTINUE EQU 0 +NEW_GAME EQU 1 +OPTION EQU 2 +MYSTERY_GIFT EQU 3 + +MainMenuItems: + +NewGameMenu: + db 2 + db NEW_GAME + db OPTION + db -1 + +ContinueMenu: + db 3 + db CONTINUE + db NEW_GAME + db OPTION + db -1 + +MysteryMenu: + db 4 + db CONTINUE + db NEW_GAME + db OPTION + db MYSTERY_GIFT + db -1 + +MainMenu_GetWhichMenu: + nop + nop + nop + ld a, [wSaveFileExists] + and a + jr nz, .next + ld a, $0 ; New Game + ret + +.next + ldh a, [hCGB] + cp $1 + ld a, $1 + ret nz + ld a, BANK(sNumDailyMysteryGiftPartnerIDs) + call OpenSRAM + ld a, [sNumDailyMysteryGiftPartnerIDs] + cp -1 + call CloseSRAM + ld a, $1 ; Continue + ret z + ld a, $2 ; New Game + ret + +MainMenuJoypadLoop: + call SetUpMenu +.loop + call MainMenu_PrintCurrentTimeAndDay + call GetScrollingMenuJoypad + ld a, [wMenuJoypad] + cp B_BUTTON + jr z, .b_button + cp A_BUTTON + jr z, .a_button + jr .loop + +.a_button + call PlayClickSFX + and a + ret + +.b_button + scf + ret + +MainMenu_PrintCurrentTimeAndDay: + ld a, [wSaveFileExists] + and a + ret z + xor a + ldh [hBGMapMode], a + call .PlaceBox + ld hl, wOptions + ld a, [hl] + push af + set NO_TEXT_SCROLL, [hl] + call .PlaceTime + pop af + ld [wOptions], a + ld a, $1 + ldh [hBGMapMode], a + ret + +.PlaceBox: + call CheckRTCStatus + and $80 + jr nz, .TimeFail + hlcoord 0, 12 + ld b, 4 + ld c, 13 + call Textbox + ret + +.TimeFail: + call SpeechTextbox + ret + +.PlaceTime: + ld a, [wSaveFileExists] + and a + ret z + call CheckRTCStatus + and %10000000 ; Day count exceeded 16383 + jp nz, .PrintTimeNotSet + call UpdateTime + hlcoord 1, 13 + ld bc, IncGradGBPalTable_11 + 1 + call ClearBox + call GetWeekday + ld b, a + decoord 1, 14 + call .PlaceCurrentDay + decoord 4, 16 + ldh a, [hHours] + ld c, a + farcall PrintHour + ld [hl], ":" + inc hl + ld de, hMinutes + lb bc, PRINTNUM_LEADINGZEROS | 1, 2 + call PrintNum + ret + +.min +; unused + db "min.@" + +.PrintTimeNotSet: + hlcoord 1, 14 + ld de, .TimeNotSet + call PlaceString + ret + +.TimeNotSet: + db "TIME NOT SET@" + +.MainMenuTimeUnknownText: + text_far _MainMenuTimeUnknownText + text_end + +.PlaceCurrentDay: + push de + ld hl, .Days + ld a, b + call GetNthString + ld d, h + ld e, l + pop hl + call PlaceString + ld h, b + ld l, c + ld de, .Day + call PlaceString + ret + +.Days: + db "SUN@" + db "MON@" + db "TUES@" + db "WEDNES@" + db "THURS@" + db "FRI@" + db "SATUR@" +.Day: + db "DAY@" + +ClearTilemapEtc: + xor a + ldh [hMapAnims], a + call ClearTilemap + call LoadFontsExtra + call LoadStandardFont + call ClearWindowData + ret + +MainMenu_MysteryGift: + call UpdateTime + farcall DoMysteryGiftIfDayHasPassed + farcall DoMysteryGift + ret + +MainMenu_Options: + farcall OptionsMenu + ret |