MainMenu: ; 5ba6 (1:5ba6) ; 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: ; 5bff (1:5bff) 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: ; 5cc1 (1:5cc1) ; unused? ld a, $6d cp $80 ret c ; will always be executed ld hl, NotEnoughMemoryText call PrintText ret NotEnoughMemoryText: ; 5ccd (1:5ccd) TX_FAR _NotEnoughMemoryText db "@" StartNewGame: ; 5cd2 (1:5cd2) 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: ; 5ce4 (1:5ce4) 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: ; 5d06 (1:5d06) db "CONTINUE", $4e NewGameText: ; 5d0f (1:5d0f) db "NEW GAME", $4e db "OPTION@" DisplayContinueGameInfo: ; 5d1f (1:5d1f) 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: ; 5d58 (1:5d58) 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: ; 5d97 (1:5d97) push hl ld hl, wObtainedBadges ld b, $1 call CountSetBits pop hl ld de, wNumSetBits lb bc, 1, 2 jp PrintNumber PrintNumOwnedMons: ; 5daa (1:5daa) push hl ld hl, wPokedexOwned ld b, wPokedexOwnedEnd - wPokedexOwned call CountSetBits pop hl ld de, wNumSetBits lb bc, 1, 3 jp PrintNumber PrintPlayTime: ; 5dbd (1:5dbd) 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: ; 5dd2 (1:5dd2) db "PLAYER" next "BADGES " next "#DEX " next "TIME@" DisplayOptionMenu: ; 5df2 (1:5df2) callab DisplayOptionMenu_ ; 10:5c70 ret CheckForPlayerNameInSRAM: ; 5dfb (1:5dfb) ; 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