mirror of
https://github.com/pret/pokeyellow.git
synced 2026-04-25 07:58:09 -05:00
302 lines
5.3 KiB
NASM
302 lines
5.3 KiB
NASM
MainMenu:
|
|
; Check save file
|
|
call InitOptions
|
|
xor a
|
|
ld [wOptionsInitialized], a
|
|
inc a
|
|
ld [wSaveFileStatus], a
|
|
call CheckForPlayerNameInSRAM
|
|
jr nc, .mainMenuLoop
|
|
|
|
predef TryLoadSaveFile
|
|
|
|
.mainMenuLoop
|
|
ld c, 20
|
|
call DelayFrames
|
|
xor a ; LINK_STATE_NONE
|
|
ld [wLinkState], a
|
|
ld hl, wPartyAndBillsPCSavedMenuItem
|
|
ld [hli], a
|
|
ld [hli], a
|
|
ld [hli], a
|
|
ld [hl], a
|
|
ld [wDefaultMap], a
|
|
ld hl, wStatusFlags4
|
|
res BIT_LINK_CONNECTED, [hl]
|
|
call ClearScreen
|
|
call RunDefaultPaletteCommand
|
|
call LoadTextBoxTilePatterns
|
|
call LoadFontTilePatterns
|
|
ld hl, wStatusFlags5
|
|
set BIT_NO_TEXT_DELAY, [hl]
|
|
ld a, [wSaveFileStatus]
|
|
cp 1
|
|
jr z, .noSaveFile
|
|
; there's a save file
|
|
hlcoord 0, 0
|
|
lb bc, 6, 13
|
|
call TextBoxBorder
|
|
hlcoord 2, 2
|
|
ld de, ContinueText
|
|
call PlaceString
|
|
jr .next2
|
|
.noSaveFile
|
|
hlcoord 0, 0
|
|
lb bc, 4, 13
|
|
call TextBoxBorder
|
|
hlcoord 2, 2
|
|
ld de, NewGameText
|
|
call PlaceString
|
|
.next2
|
|
ld hl, wStatusFlags5
|
|
res BIT_NO_TEXT_DELAY, [hl]
|
|
call UpdateSprites
|
|
xor a
|
|
ld [wCurrentMenuItem], a
|
|
ld [wLastMenuItem], a
|
|
ld [wMenuJoypadPollCount], a
|
|
inc a
|
|
ld [wTopMenuItemX], a
|
|
inc a
|
|
ld [wTopMenuItemY], a
|
|
ld a, PAD_A | PAD_B | PAD_START
|
|
ld [wMenuWatchedKeys], a
|
|
ld a, [wSaveFileStatus]
|
|
ld [wMaxMenuItem], a
|
|
call HandleMenuInput
|
|
bit B_PAD_B, a
|
|
jp nz, DisplayTitleScreen ; if so, go back to the title screen
|
|
ld c, 20
|
|
call DelayFrames
|
|
ld a, [wCurrentMenuItem]
|
|
ld b, a
|
|
ld a, [wSaveFileStatus]
|
|
cp 2
|
|
jp z, .skipInc
|
|
; If there's no save file, increment the current menu item so that the numbers
|
|
; are the same whether or not there's a save file.
|
|
inc b
|
|
.skipInc
|
|
ld a, b
|
|
and a
|
|
jr z, .choseContinue
|
|
cp 1
|
|
jp z, StartNewGame
|
|
call DisplayOptionMenu
|
|
ld a, TRUE
|
|
ld [wOptionsInitialized], a
|
|
jp .mainMenuLoop
|
|
.choseContinue
|
|
call DisplayContinueGameInfo
|
|
ld hl, wCurrentMapScriptFlags
|
|
set BIT_CUR_MAP_LOADED_1, [hl]
|
|
.inputLoop
|
|
xor a
|
|
ldh [hJoyPressed], a
|
|
ldh [hJoyReleased], a
|
|
ldh [hJoyHeld], a
|
|
call Joypad
|
|
ldh a, [hJoyHeld]
|
|
bit B_PAD_A, a
|
|
jr nz, .pressedA
|
|
bit B_PAD_B, a
|
|
jp nz, .mainMenuLoop
|
|
jr .inputLoop
|
|
.pressedA
|
|
call GBPalWhiteOutWithDelay3
|
|
call ClearScreen
|
|
ld a, PLAYER_DIR_DOWN
|
|
ld [wPlayerDirection], a
|
|
ld c, 10
|
|
call DelayFrames
|
|
ld a, [wNumHoFTeams]
|
|
and a
|
|
jp z, SpecialEnterMap
|
|
ld a, [wCurMap]
|
|
cp HALL_OF_FAME
|
|
jp nz, SpecialEnterMap
|
|
xor a
|
|
ld [wDestinationMap], a
|
|
ld hl, wStatusFlags6
|
|
set BIT_FLY_OR_DUNGEON_WARP, [hl]
|
|
call PrepareForSpecialWarp
|
|
jp SpecialEnterMap
|
|
|
|
InitOptions:
|
|
ld a, 1 << BIT_FAST_TEXT_DELAY
|
|
ld [wLetterPrintingDelayFlags], a
|
|
ld a, TEXT_DELAY_MEDIUM
|
|
ld [wOptions], a
|
|
ld a, 64 ; audio?
|
|
ld [wPrinterSettings], a
|
|
ret
|
|
|
|
Func_5cc1:
|
|
; unused?
|
|
ld a, $6d
|
|
cp $80
|
|
ret c ; will always be executed
|
|
ld hl, NotEnoughMemoryText
|
|
call PrintText
|
|
ret
|
|
|
|
NotEnoughMemoryText:
|
|
text_far _NotEnoughMemoryText
|
|
text_end
|
|
|
|
StartNewGame:
|
|
ld hl, wStatusFlags6
|
|
; Ensure debug mode is not used when starting a regular new game.
|
|
; Debug mode persists in saved games for both debug and non-debug builds, and is
|
|
; only reset here by the main menu.
|
|
res BIT_DEBUG_MODE, [hl]
|
|
; fallthrough
|
|
StartNewGameDebug:
|
|
call OakSpeech
|
|
ld a, $8
|
|
ld [wPlayerMovingDirection], a
|
|
ld c, 20
|
|
call DelayFrames
|
|
|
|
; enter map after using a special warp or loading the game from the main menu
|
|
SpecialEnterMap::
|
|
xor a
|
|
ldh [hJoyPressed], a
|
|
ldh [hJoyHeld], a
|
|
ldh [hJoy5], a
|
|
ld [wCableClubDestinationMap], a
|
|
ld hl, wStatusFlags6
|
|
set BIT_GAME_TIMER_COUNTING, [hl]
|
|
call ResetPlayerSpriteData
|
|
ld c, 20
|
|
call DelayFrames
|
|
call Func_5cc1
|
|
ld a, [wEnteringCableClub]
|
|
and a
|
|
ret nz
|
|
jp EnterMap
|
|
|
|
ContinueText:
|
|
db "CONTINUE"
|
|
next ""
|
|
; fallthrough
|
|
|
|
NewGameText:
|
|
db "NEW GAME"
|
|
next "OPTION@"
|
|
|
|
DisplayContinueGameInfo:
|
|
xor a
|
|
ldh [hAutoBGTransferEnabled], a
|
|
hlcoord 4, 7
|
|
lb bc, 8, 14
|
|
call TextBoxBorder
|
|
hlcoord 5, 9
|
|
ld de, SaveScreenInfoText
|
|
call PlaceString
|
|
hlcoord 12, 9
|
|
ld de, wPlayerName
|
|
call PlaceString
|
|
hlcoord 17, 11
|
|
call PrintNumBadges
|
|
hlcoord 16, 13
|
|
call PrintNumOwnedMons
|
|
hlcoord 13, 15
|
|
call PrintPlayTime
|
|
ld a, 1
|
|
ldh [hAutoBGTransferEnabled], a
|
|
ld c, 30
|
|
jp DelayFrames
|
|
|
|
PrintSaveScreenText:
|
|
xor a
|
|
ldh [hAutoBGTransferEnabled], a
|
|
hlcoord 4, 0
|
|
lb bc, 8, 14
|
|
call TextBoxBorder
|
|
call LoadTextBoxTilePatterns
|
|
call UpdateSprites
|
|
hlcoord 5, 2
|
|
ld de, SaveScreenInfoText
|
|
call PlaceString
|
|
hlcoord 12, 2
|
|
ld de, wPlayerName
|
|
call PlaceString
|
|
hlcoord 17, 4
|
|
call PrintNumBadges
|
|
hlcoord 16, 6
|
|
call PrintNumOwnedMons
|
|
hlcoord 13, 8
|
|
call PrintPlayTime
|
|
ld a, $1
|
|
ldh [hAutoBGTransferEnabled], a
|
|
ld c, 30
|
|
jp DelayFrames
|
|
|
|
PrintNumBadges:
|
|
push hl
|
|
ld hl, wObtainedBadges
|
|
ld b, $1
|
|
call CountSetBits
|
|
pop hl
|
|
ld de, wNumSetBits
|
|
lb bc, 1, 2
|
|
jp PrintNumber
|
|
|
|
PrintNumOwnedMons:
|
|
push hl
|
|
ld hl, wPokedexOwned
|
|
ld b, wPokedexOwnedEnd - wPokedexOwned
|
|
call CountSetBits
|
|
pop hl
|
|
ld de, wNumSetBits
|
|
lb bc, 1, 3
|
|
jp PrintNumber
|
|
|
|
PrintPlayTime:
|
|
ld de, wPlayTimeHours
|
|
lb bc, 1, 3
|
|
call PrintNumber
|
|
ld [hl], $6d
|
|
inc hl
|
|
ld de, wPlayTimeMinutes
|
|
lb bc, LEADING_ZEROES | 1, 2
|
|
jp PrintNumber
|
|
|
|
SaveScreenInfoText:
|
|
db "PLAYER"
|
|
next "BADGES "
|
|
next "#DEX "
|
|
next "TIME@"
|
|
|
|
DisplayOptionMenu:
|
|
callfar DisplayOptionMenu_
|
|
ret
|
|
|
|
CheckForPlayerNameInSRAM:
|
|
ld a, RAMG_SRAM_ENABLE
|
|
ld [rRAMG], a
|
|
ld a, BMODE_ADVANCED
|
|
ld [rBMODE], a
|
|
ASSERT BANK(sPlayerName) == BMODE_ADVANCED
|
|
ld [rRAMB], a
|
|
ld b, NAME_LENGTH
|
|
ld hl, sPlayerName
|
|
.loop
|
|
ld a, [hli]
|
|
cp '@'
|
|
jr z, .found
|
|
dec b
|
|
jr nz, .loop
|
|
xor a
|
|
ld [rRAMG], a
|
|
ld [rBMODE], a
|
|
and a
|
|
ret
|
|
.found
|
|
xor a
|
|
ld [rRAMG], a
|
|
ld [rBMODE], a
|
|
scf
|
|
ret
|