pokecrystal/engine/menus/main_menu.asm

385 lines
6.4 KiB
NASM
Raw Normal View History

2020-06-18 14:11:12 +00:00
; MainMenuItems indexes
const_def
const MAINMENU_NEW_GAME ; 0
const MAINMENU_CONTINUE ; 1
const MAINMENU_MOBILE_MYSTERY ; 2
const MAINMENU_MOBILE ; 3
const MAINMENU_MOBILE_STUDIUM ; 4
const MAINMENU_MYSTERY_MOBILE_STUDIUM ; 5
const MAINMENU_MYSTERY ; 6
const MAINMENU_MYSTERY_STUDIUM ; 7
const MAINMENU_STUDIUM ; 8
; MainMenu.Strings and MainMenu.Jumptable indexes
const_def
const MAINMENUITEM_CONTINUE ; 0
const MAINMENUITEM_NEW_GAME ; 1
const MAINMENUITEM_OPTION ; 2
const MAINMENUITEM_MYSTERY_GIFT ; 3
const MAINMENUITEM_MOBILE ; 4
const MAINMENUITEM_MOBILE_STUDIUM ; 5
const MAINMENUITEM_DEBUG_ROOM ; 6
2020-06-18 14:11:12 +00:00
2020-02-27 19:33:30 +00:00
MobileMenuGFX:
INCBIN "gfx/mobile/mobile_menu.2bpp"
2015-11-17 03:29:54 +00:00
2018-06-24 14:09:41 +00:00
MainMenu:
2020-06-18 14:11:12 +00:00
.loop
2015-11-17 03:29:54 +00:00
xor a
2016-05-05 19:07:37 +00:00
ld [wDisableTextAcceleration], a
call ClearTilemapEtc
2016-06-06 22:23:00 +00:00
ld b, SCGB_DIPLOMA
2015-11-17 03:29:54 +00:00
call GetSGBLayout
call SetPalettes
ld hl, wGameTimerPaused
res GAME_TIMER_PAUSED_F, [hl]
call MainMenu_GetWhichMenu
2015-12-19 01:07:09 +00:00
ld [wWhichIndexSet], a
call MainMenu_PrintCurrentTimeAndDay
ld hl, .MenuHeader
call LoadMenuHeader
call MainMenuJoypadLoop
call CloseWindow
2015-11-17 03:29:54 +00:00
jr c, .quit
call ClearTilemap
2018-01-23 22:39:09 +00:00
ld a, [wMenuSelection]
ld hl, .Jumptable
2015-11-17 03:29:54 +00:00
rst JumpTable
2020-06-18 14:11:12 +00:00
jr .loop
2015-11-17 03:29:54 +00:00
.quit
ret
2018-06-24 14:09:41 +00:00
.MenuHeader:
db MENU_BACKUP_TILES ; flags
menu_coords 0, 0, 16, 7
dw .MenuData
2015-11-17 03:29:54 +00:00
db 1 ; default option
2018-06-24 14:09:41 +00:00
.MenuData:
db STATICMENU_CURSOR ; flags
2015-11-17 03:29:54 +00:00
db 0 ; items
dw MainMenuItems
2015-12-13 19:15:16 +00:00
dw PlaceMenuStrings
dw .Strings
2015-11-17 03:29:54 +00:00
2018-06-24 14:09:41 +00:00
.Strings:
2020-06-18 14:11:12 +00:00
; entries correspond to MAINMENUITEM_* constants
2015-11-17 03:29:54 +00:00
db "CONTINUE@"
db "NEW GAME@"
db "OPTION@"
db "MYSTERY GIFT@"
db "MOBILE@"
db "MOBILE STUDIUM@"
if DEF(_DEBUG)
db "DEBUG ROOM@"
endc
2015-11-17 03:29:54 +00:00
.Jumptable:
2020-06-18 14:11:12 +00:00
; entries correspond to MAINMENUITEM_* constants
2015-12-27 02:59:03 +00:00
dw MainMenu_Continue
dw MainMenu_NewGame
2020-06-18 14:11:12 +00:00
dw MainMenu_Option
2015-12-27 02:59:03 +00:00
dw MainMenu_MysteryGift
dw MainMenu_Mobile
dw MainMenu_MobileStudium
if DEF(_DEBUG)
dw MainMenu_DebugRoom
endc
2015-11-17 03:29:54 +00:00
MainMenuItems:
2020-06-18 14:11:12 +00:00
; entries correspond to MAINMENU_* constants
2015-11-17 03:29:54 +00:00
2020-06-18 14:11:12 +00:00
; MAINMENU_NEW_GAME
2015-11-17 03:29:54 +00:00
db 2
2020-06-18 14:11:12 +00:00
db MAINMENUITEM_NEW_GAME
db MAINMENUITEM_OPTION
db -1
2015-11-17 03:29:54 +00:00
2020-06-18 14:11:12 +00:00
; MAINMENU_CONTINUE
db 3 + DEF(_DEBUG)
2020-06-18 14:11:12 +00:00
db MAINMENUITEM_CONTINUE
db MAINMENUITEM_NEW_GAME
db MAINMENUITEM_OPTION
if DEF(_DEBUG)
db MAINMENUITEM_DEBUG_ROOM
endc
db -1
2015-11-17 03:29:54 +00:00
2020-06-18 14:11:12 +00:00
; MAINMENU_MOBILE_MYSTERY
db 5 + DEF(_DEBUG)
2020-06-18 14:11:12 +00:00
db MAINMENUITEM_CONTINUE
db MAINMENUITEM_NEW_GAME
db MAINMENUITEM_OPTION
db MAINMENUITEM_MYSTERY_GIFT
db MAINMENUITEM_MOBILE
if DEF(_DEBUG)
db MAINMENUITEM_DEBUG_ROOM
endc
db -1
2015-11-17 03:29:54 +00:00
2020-06-18 14:11:12 +00:00
; MAINMENU_MOBILE
db 4 + DEF(_DEBUG)
2020-06-18 14:11:12 +00:00
db MAINMENUITEM_CONTINUE
db MAINMENUITEM_NEW_GAME
db MAINMENUITEM_OPTION
db MAINMENUITEM_MOBILE
if DEF(_DEBUG)
db MAINMENUITEM_DEBUG_ROOM
endc
db -1
2015-11-17 03:29:54 +00:00
2020-06-18 14:11:12 +00:00
; MAINMENU_MOBILE_STUDIUM
db 5 + DEF(_DEBUG)
2020-06-18 14:11:12 +00:00
db MAINMENUITEM_CONTINUE
db MAINMENUITEM_NEW_GAME
db MAINMENUITEM_OPTION
db MAINMENUITEM_MOBILE
db MAINMENUITEM_MOBILE_STUDIUM
if DEF(_DEBUG)
db MAINMENUITEM_DEBUG_ROOM
endc
db -1
2015-11-17 03:29:54 +00:00
2020-06-18 14:11:12 +00:00
; MAINMENU_MYSTERY_MOBILE_STUDIUM
db 6 + DEF(_DEBUG)
2020-06-18 14:11:12 +00:00
db MAINMENUITEM_CONTINUE
db MAINMENUITEM_NEW_GAME
db MAINMENUITEM_OPTION
db MAINMENUITEM_MYSTERY_GIFT
db MAINMENUITEM_MOBILE
db MAINMENUITEM_MOBILE_STUDIUM
if DEF(_DEBUG)
db MAINMENUITEM_DEBUG_ROOM
endc
db -1
2015-11-17 03:29:54 +00:00
2020-06-18 14:11:12 +00:00
; MAINMENU_MYSTERY
db 4 + DEF(_DEBUG)
2020-06-18 14:11:12 +00:00
db MAINMENUITEM_CONTINUE
db MAINMENUITEM_NEW_GAME
db MAINMENUITEM_OPTION
db MAINMENUITEM_MYSTERY_GIFT
if DEF(_DEBUG)
db MAINMENUITEM_DEBUG_ROOM
endc
db -1
2015-11-17 03:29:54 +00:00
2020-06-18 14:11:12 +00:00
; MAINMENU_MYSTERY_STUDIUM
db 5 + DEF(_DEBUG)
2020-06-18 14:11:12 +00:00
db MAINMENUITEM_CONTINUE
db MAINMENUITEM_NEW_GAME
db MAINMENUITEM_OPTION
db MAINMENUITEM_MYSTERY_GIFT
db MAINMENUITEM_MOBILE_STUDIUM
if DEF(_DEBUG)
db MAINMENUITEM_DEBUG_ROOM
endc
db -1
2015-11-17 03:29:54 +00:00
2020-06-18 14:11:12 +00:00
; MAINMENU_STUDIUM
db 4 + DEF(_DEBUG)
2020-06-18 14:11:12 +00:00
db MAINMENUITEM_CONTINUE
db MAINMENUITEM_NEW_GAME
db MAINMENUITEM_OPTION
db MAINMENUITEM_MOBILE_STUDIUM
if DEF(_DEBUG)
db MAINMENUITEM_DEBUG_ROOM
endc
db -1
2015-11-17 03:29:54 +00:00
2018-06-24 14:09:41 +00:00
MainMenu_GetWhichMenu:
2015-11-17 03:29:54 +00:00
nop
nop
nop
2015-11-18 04:29:14 +00:00
ld a, [wSaveFileExists]
2015-11-17 03:29:54 +00:00
and a
jr nz, .next
2020-06-18 14:11:12 +00:00
ld a, MAINMENU_NEW_GAME
2015-11-17 03:29:54 +00:00
ret
.next
ldh a, [hCGB]
2020-06-18 14:11:12 +00:00
cp TRUE
ld a, MAINMENU_CONTINUE
2015-11-17 03:29:54 +00:00
ret nz
2015-11-23 05:21:21 +00:00
ld a, BANK(sNumDailyMysteryGiftPartnerIDs)
call OpenSRAM
2015-11-23 05:21:21 +00:00
ld a, [sNumDailyMysteryGiftPartnerIDs]
cp -1 ; locked?
2015-11-17 03:29:54 +00:00
call CloseSRAM
jr nz, .mystery_gift
2018-01-22 20:40:43 +00:00
; This check makes no difference.
ld a, [wStatusFlags]
bit STATUSFLAGS_MAIN_MENU_MOBILE_CHOICES_F, a
2020-06-18 14:11:12 +00:00
ld a, MAINMENU_CONTINUE
2015-11-17 03:29:54 +00:00
jr z, .ok
jr .ok
.ok
jr .ok2
.ok2
2020-06-18 14:11:12 +00:00
ld a, MAINMENU_CONTINUE
2015-11-17 03:29:54 +00:00
ret
.mystery_gift
2018-01-22 20:40:43 +00:00
; This check makes no difference.
ld a, [wStatusFlags]
bit STATUSFLAGS_MAIN_MENU_MOBILE_CHOICES_F, a
2015-11-17 03:29:54 +00:00
jr z, .ok3
jr .ok3
.ok3
jr .ok4
.ok4
2020-06-18 14:11:12 +00:00
ld a, MAINMENU_MYSTERY
2015-11-17 03:29:54 +00:00
ret
2018-06-24 14:09:41 +00:00
MainMenuJoypadLoop:
2015-11-17 03:29:54 +00:00
call SetUpMenu
.loop
call MainMenu_PrintCurrentTimeAndDay
ld a, [w2DMenuFlags1]
2015-11-17 03:29:54 +00:00
set 5, a
ld [w2DMenuFlags1], a
2016-03-02 03:31:21 +00:00
call GetScrollingMenuJoypad
2015-12-15 23:59:49 +00:00
ld a, [wMenuJoypad]
cp B_BUTTON
jr z, .b_button
cp A_BUTTON
jr z, .a_button
jr .loop
2015-11-17 03:29:54 +00:00
.a_button
2015-11-17 03:29:54 +00:00
call PlayClickSFX
and a
ret
.b_button
2015-11-17 03:29:54 +00:00
scf
ret
2018-06-24 14:09:41 +00:00
MainMenu_PrintCurrentTimeAndDay:
2015-11-18 04:29:14 +00:00
ld a, [wSaveFileExists]
2015-11-17 03:29:54 +00:00
and a
ret z
xor a
ldh [hBGMapMode], a
call .PlaceBox
2018-01-23 22:39:09 +00:00
ld hl, wOptions
2015-11-17 03:29:54 +00:00
ld a, [hl]
push af
set NO_TEXT_SCROLL, [hl]
call .PlaceTime
2015-11-17 03:29:54 +00:00
pop af
2018-01-23 22:39:09 +00:00
ld [wOptions], a
2015-11-17 03:29:54 +00:00
ld a, $1
ldh [hBGMapMode], a
2015-11-17 03:29:54 +00:00
ret
2018-06-24 14:09:41 +00:00
.PlaceBox:
2015-11-20 16:47:52 +00:00
call CheckRTCStatus
2020-06-18 14:11:12 +00:00
and %10000000 ; Day count exceeded 16383
jr nz, .TimeFail
2015-11-17 03:29:54 +00:00
hlcoord 0, 14
ld b, 2
ld c, 18
2019-04-08 12:15:10 +00:00
call Textbox
2015-11-17 03:29:54 +00:00
ret
.TimeFail:
2019-04-08 12:15:10 +00:00
call SpeechTextbox
2015-11-17 03:29:54 +00:00
ret
2018-06-24 14:09:41 +00:00
.PlaceTime:
2015-11-18 04:29:14 +00:00
ld a, [wSaveFileExists]
2015-11-17 03:29:54 +00:00
and a
ret z
2015-11-20 16:47:52 +00:00
call CheckRTCStatus
2015-11-17 03:29:54 +00:00
and $80
jp nz, .PrintTimeNotSet
2015-11-17 03:29:54 +00:00
call UpdateTime
call GetWeekday
ld b, a
decoord 1, 15
2020-06-18 14:11:12 +00:00
call .PrintDayOfWeek
2015-11-17 03:29:54 +00:00
decoord 4, 16
ldh a, [hHours]
2015-11-17 03:29:54 +00:00
ld c, a
2017-12-24 17:47:30 +00:00
farcall PrintHour
2015-11-17 03:29:54 +00:00
ld [hl], ":"
inc hl
ld de, hMinutes
lb bc, PRINTNUM_LEADINGZEROS | 1, 2
call PrintNum
ret
.minString: ; unreferenced
2015-11-17 03:29:54 +00:00
db "min.@"
2018-06-24 14:09:41 +00:00
.PrintTimeNotSet:
2015-11-17 03:29:54 +00:00
hlcoord 1, 14
ld de, .TimeNotSetString
2015-11-17 03:29:54 +00:00
call PlaceString
ret
.TimeNotSetString:
2015-11-17 03:29:54 +00:00
db "TIME NOT SET@"
.MainMenuTimeUnknownText: ; unreferenced
text_far _MainMenuTimeUnknownText
text_end
2015-11-17 03:29:54 +00:00
2020-06-18 14:11:12 +00:00
.PrintDayOfWeek:
2015-11-17 03:29:54 +00:00
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:
2015-11-17 03:29:54 +00:00
db "SUN@"
db "MON@"
db "TUES@"
db "WEDNES@"
db "THURS@"
db "FRI@"
db "SATUR@"
.Day:
2015-11-17 03:29:54 +00:00
db "DAY@"
ClearTilemapEtc:
2015-11-17 03:29:54 +00:00
xor a
ldh [hMapAnims], a
call ClearTilemap
2015-11-17 03:29:54 +00:00
call LoadFontsExtra
call LoadStandardFont
call ClearWindowData
2015-11-17 03:29:54 +00:00
ret
2018-06-24 14:09:41 +00:00
MainMenu_NewGame:
2017-12-24 17:47:30 +00:00
farcall NewGame
2015-11-17 03:29:54 +00:00
ret
2020-06-18 14:11:12 +00:00
MainMenu_Option:
farcall Option
2015-11-17 03:29:54 +00:00
ret
2018-06-24 14:09:41 +00:00
MainMenu_Continue:
2017-12-24 17:47:30 +00:00
farcall Continue
2015-11-17 03:29:54 +00:00
ret
2018-06-24 14:09:41 +00:00
MainMenu_MysteryGift:
2017-12-24 17:47:30 +00:00
farcall MysteryGift
2015-11-17 03:29:54 +00:00
ret