diff options
| author | dannye <33dannye@gmail.com> | 2020-11-04 00:06:44 -0600 |
|---|---|---|
| committer | dannye <33dannye@gmail.com> | 2020-11-04 00:06:44 -0600 |
| commit | 5647ca687b92954dcf37a6ea6bfbc9a341c32de4 (patch) | |
| tree | dde1937a1bfdb3a835f4155e1c2eb8f1aaf86f63 /engine/menus/main_menu.asm | |
| parent | Merge pull request #55 from Deokishisu/patch-1 (diff) | |
| download | pokeyellow-5647ca687b92954dcf37a6ea6bfbc9a341c32de4.tar.gz pokeyellow-5647ca687b92954dcf37a6ea6bfbc9a341c32de4.tar.xz pokeyellow-5647ca687b92954dcf37a6ea6bfbc9a341c32de4.zip | |
Sync with pokered
Diffstat (limited to 'engine/menus/main_menu.asm')
| -rwxr-xr-x | engine/menus/main_menu.asm | 300 |
1 files changed, 300 insertions, 0 deletions
diff --git a/engine/menus/main_menu.asm b/engine/menus/main_menu.asm new file mode 100755 index 00000000..7d81d2f6 --- /dev/null +++ b/engine/menus/main_menu.asm @@ -0,0 +1,300 @@ +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 |
