mirror of
https://github.com/pret/pokeyellow.git
synced 2026-05-11 13:15:35 -05:00
298 lines
5.1 KiB
NASM
Executable File
298 lines
5.1 KiB
NASM
Executable File
MainMenu:
|
|
; Check save file
|
|
call InitOptions
|
|
xor a
|
|
ld [wOptionsInitialized],a
|
|
inc a
|
|
ld [wSaveFileStatus],a
|
|
call CheckForPlayerNameInSRAM
|
|
jr nc,.mainMenuLoop
|
|
|
|
predef LoadSAV
|
|
|
|
.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,wd72e
|
|
res 6,[hl]
|
|
call ClearScreen
|
|
call RunDefaultPaletteCommand
|
|
call LoadTextBoxTilePatterns
|
|
call LoadFontTilePatterns
|
|
ld hl,wd730
|
|
set 6,[hl]
|
|
ld a,[wSaveFileStatus]
|
|
cp a,1
|
|
jr z,.noSaveFile
|
|
; there's a save file
|
|
coord hl, 0, 0
|
|
lb bc, 6, 13
|
|
call TextBoxBorder
|
|
coord hl, 2, 2
|
|
ld de,ContinueText
|
|
call PlaceString
|
|
jr .next2
|
|
.noSaveFile
|
|
coord hl, 0, 0
|
|
lb bc, 4, 13
|
|
call TextBoxBorder
|
|
coord hl, 2, 2
|
|
ld de,NewGameText
|
|
call PlaceString
|
|
.next2
|
|
ld hl,wd730
|
|
res 6,[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,A_BUTTON | B_BUTTON | START
|
|
ld [wMenuWatchedKeys],a
|
|
ld a,[wSaveFileStatus]
|
|
ld [wMaxMenuItem],a
|
|
call HandleMenuInput
|
|
bit 1,a ; pressed B?
|
|
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 a,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 a,1
|
|
jp z,StartNewGame
|
|
call DisplayOptionMenu
|
|
ld a,1
|
|
ld [wOptionsInitialized],a
|
|
jp .mainMenuLoop
|
|
.choseContinue
|
|
call DisplayContinueGameInfo
|
|
ld hl,wCurrentMapScriptFlags
|
|
set 5,[hl]
|
|
.inputLoop
|
|
xor a
|
|
ld [hJoyPressed],a
|
|
ld [hJoyReleased],a
|
|
ld [hJoyHeld],a
|
|
call Joypad
|
|
ld a,[hJoyHeld]
|
|
bit 0,a
|
|
jr nz,.pressedA
|
|
bit 1,a
|
|
jp nz,.mainMenuLoop ; pressed B
|
|
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] ; map ID
|
|
cp a,HALL_OF_FAME
|
|
jp nz,SpecialEnterMap
|
|
xor a
|
|
ld [wDestinationMap],a
|
|
ld hl,wd732
|
|
set 2,[hl] ; fly warp or dungeon warp
|
|
call SpecialWarpIn
|
|
jp SpecialEnterMap
|
|
|
|
InitOptions:
|
|
ld a,1 ; no delay
|
|
ld [wLetterPrintingDelayFlags],a
|
|
ld a,3 ; medium speed
|
|
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:
|
|
TX_FAR _NotEnoughMemoryText
|
|
db "@"
|
|
|
|
StartNewGame:
|
|
ld hl, wd732
|
|
res 1, [hl]
|
|
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
|
|
ld [hJoyPressed], a
|
|
ld [hJoyHeld], a
|
|
ld [hJoy5], a
|
|
ld [wd72d], a
|
|
ld hl, wd732
|
|
set 0, [hl] ; count play time
|
|
call ResetPlayerSpriteData
|
|
ld c, 20
|
|
call DelayFrames
|
|
call Func_5cc1
|
|
ld a, [wEnteringCableClub]
|
|
and a
|
|
ret nz
|
|
jp EnterMap
|
|
|
|
ContinueText:
|
|
db "CONTINUE", $4e
|
|
|
|
NewGameText:
|
|
db "NEW GAME", $4e
|
|
db "OPTION@"
|
|
|
|
DisplayContinueGameInfo:
|
|
xor a
|
|
ld [H_AUTOBGTRANSFERENABLED], a
|
|
coord hl, 4, 7
|
|
lb bc, 8, 14
|
|
call TextBoxBorder
|
|
coord hl, 5, 9
|
|
ld de, SaveScreenInfoText
|
|
call PlaceString
|
|
coord hl, 12, 9
|
|
ld de, wPlayerName
|
|
call PlaceString
|
|
coord hl, 17, 11
|
|
call PrintNumBadges
|
|
coord hl, 16, 13
|
|
call PrintNumOwnedMons
|
|
coord hl, 13, 15
|
|
call PrintPlayTime
|
|
ld a, 1
|
|
ld [H_AUTOBGTRANSFERENABLED], a
|
|
ld c, 30
|
|
jp DelayFrames
|
|
|
|
PrintSaveScreenText:
|
|
xor a
|
|
ld [H_AUTOBGTRANSFERENABLED], a
|
|
coord hl, 4, 0
|
|
lb bc, 8, 14
|
|
call TextBoxBorder
|
|
call LoadTextBoxTilePatterns
|
|
call UpdateSprites
|
|
coord hl, 5, 2
|
|
ld de, SaveScreenInfoText
|
|
call PlaceString
|
|
coord hl, 12, 2
|
|
ld de, wPlayerName
|
|
call PlaceString
|
|
coord hl, 17, 4
|
|
call PrintNumBadges
|
|
coord hl, 16, 6
|
|
call PrintNumOwnedMons
|
|
coord hl, 13, 8
|
|
call PrintPlayTime
|
|
ld a, $1
|
|
ld [H_AUTOBGTRANSFERENABLED], 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:
|
|
callab DisplayOptionMenu_
|
|
ret
|
|
|
|
CheckForPlayerNameInSRAM:
|
|
; Check if the player name data in SRAM has a string terminator character
|
|
; (indicating that a name may have been saved there) and return whether it does
|
|
; in carry.
|
|
ld a, SRAM_ENABLE
|
|
ld [MBC1SRamEnable], a
|
|
ld a, $1
|
|
ld [MBC1SRamBankingMode], a
|
|
ld [MBC1SRamBank], a
|
|
ld b, NAME_LENGTH
|
|
ld hl, sPlayerName
|
|
.loop
|
|
ld a, [hli]
|
|
cp "@"
|
|
jr z, .found
|
|
dec b
|
|
jr nz, .loop
|
|
; not found
|
|
xor a
|
|
ld [MBC1SRamEnable], a
|
|
ld [MBC1SRamBankingMode], a
|
|
and a
|
|
ret
|
|
.found
|
|
xor a
|
|
ld [MBC1SRamEnable], a
|
|
ld [MBC1SRamBankingMode], a
|
|
scf
|
|
ret
|