summaryrefslogtreecommitdiff
path: root/engine/menus/main_menu.asm
diff options
context:
space:
mode:
Diffstat (limited to 'engine/menus/main_menu.asm')
-rw-r--r--engine/menus/main_menu.asm251
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