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 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, 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 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, 1 ld [wOptionsInitialized], a jp .mainMenuLoop .choseContinue call DisplayContinueGameInfo ld hl, wCurrentMapScriptFlags set 5, [hl] .inputLoop xor a ldh [hJoyPressed], a ldh [hJoyReleased], a ldh [hJoyHeld], a call Joypad ldh 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 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: text_far _NotEnoughMemoryText text_end StartNewGame: ld hl, wd732 res 1, [hl] 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 [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" 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: ; 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