aboutsummaryrefslogtreecommitdiffstats
path: root/engine/menus
diff options
context:
space:
mode:
authordannye <33dannye@gmail.com>2025-09-06 16:54:17 -0500
committerdannye <33dannye@gmail.com>2025-09-06 16:54:17 -0500
commit377749ca4efac05b6c57dfed049899891af6c35a (patch)
tree4b429403935c4a7c2de710a6cbf7310246874539 /engine/menus
parentFix .tilemap file extension, fix some typos (#138) (diff)
parentDocument visual glitch with Pewter City Gym guy (#526) (diff)
downloadpokeyellow-377749ca4efac05b6c57dfed049899891af6c35a.tar.gz
pokeyellow-377749ca4efac05b6c57dfed049899891af6c35a.tar.xz
pokeyellow-377749ca4efac05b6c57dfed049899891af6c35a.zip
Merge branch 'master' of https://github.com/pret/pokered
Diffstat (limited to 'engine/menus')
-rw-r--r--engine/menus/display_text_id_init.asm2
-rw-r--r--engine/menus/main_menu.asm4
-rw-r--r--engine/menus/save.asm148
-rw-r--r--engine/menus/start_sub_menus.asm36
4 files changed, 100 insertions, 90 deletions
diff --git a/engine/menus/display_text_id_init.asm b/engine/menus/display_text_id_init.asm
index 74fb5800..ca828006 100644
--- a/engine/menus/display_text_id_init.asm
+++ b/engine/menus/display_text_id_init.asm
@@ -66,7 +66,7 @@ DisplayTextIDInit::
add hl, de
dec c
jr nz, .spriteStandStillLoop
- ld b, $9c ; window background address
+ ld b, HIGH(vBGMap1)
call CopyScreenTileBufferToVRAM ; transfer background in WRAM to VRAM
xor a
ldh [hWY], a ; put the window on the screen
diff --git a/engine/menus/main_menu.asm b/engine/menus/main_menu.asm
index d739e560..262250a3 100644
--- a/engine/menus/main_menu.asm
+++ b/engine/menus/main_menu.asm
@@ -8,7 +8,7 @@ MainMenu:
call CheckForPlayerNameInSRAM
jr nc, .mainMenuLoop
- predef LoadSAV
+ predef TryLoadSaveFile
.mainMenuLoop
ld c, 20
@@ -278,7 +278,7 @@ CheckForPlayerNameInSRAM:
ld [rRAMG], a
ld a, BMODE_ADVANCED
ld [rBMODE], a
- ASSERT BMODE_ADVANCED == BANK("Save Data")
+ ASSERT BANK(sPlayerName) == BMODE_ADVANCED
ld [rRAMB], a
ld b, NAME_LENGTH
ld hl, sPlayerName
diff --git a/engine/menus/save.asm b/engine/menus/save.asm
index 51c6197a..0ad7eeac 100644
--- a/engine/menus/save.asm
+++ b/engine/menus/save.asm
@@ -1,16 +1,15 @@
-LoadSAV:
-; if carry, write "the file data is destroyed"
+TryLoadSaveFile:
call ClearScreen
call LoadFontTilePatterns
call LoadTextBoxTilePatterns
- call LoadSAV0
+ call LoadMainData
jr c, .badsum
- call LoadSAV1
+ call LoadCurrentBoxData
jr c, .badsum
- call LoadSAV2
+ call LoadPartyAndDexData
jr c, .badsum
ld a, $2 ; good checksum
- jr .goodsum
+ jr .done
.badsum
ld hl, wStatusFlags5
push hl
@@ -22,7 +21,7 @@ LoadSAV:
pop hl
res BIT_NO_TEXT_DELAY, [hl]
ld a, $1 ; bad checksum
-.goodsum
+.done
ld [wSaveFileStatus], a
ret
@@ -30,7 +29,7 @@ FileDataDestroyedText:
text_far _FileDataDestroyedText
text_end
-LoadSAV0:
+LoadMainData:
call EnableSRAM
ld a, BANK("Save Data")
ld [rRAMB], a
@@ -39,22 +38,22 @@ LoadSAV0:
vc_hook Unknown_save_limit
ld hl, sGameData
ld bc, sGameDataEnd - sGameData
- call SAVCheckSum
+ call CalcCheckSum
ld c, a
ld a, [sMainDataCheckSum]
cp c
- jp z, .checkSumsMatched
+ jp z, .checkSumMatched
; If the computed checksum didn't match the saved on, try again.
ld hl, sGameData
ld bc, sGameDataEnd - sGameData
- call SAVCheckSum
+ call CalcCheckSum
ld c, a
ld a, [sMainDataCheckSum]
cp c
- jp nz, SAVBadCheckSum
+ jp nz, CheckSumFailed
-.checkSumsMatched
+.checkSumMatched
ld hl, sPlayerName
ld de, wPlayerName
ld bc, NAME_LENGTH
@@ -71,42 +70,45 @@ LoadSAV0:
call CopyData
ld a, [sTileAnimations]
ldh [hTileAnimations], a
+
+; this part is redundant, LoadCurrentBoxData is always called next
ld hl, sCurBoxData
ld de, wBoxDataStart
ld bc, wBoxDataEnd - wBoxDataStart
call CopyData
+
and a
- jp SAVGoodChecksum
+ jp GoodCheckSum
-LoadSAV1:
+LoadCurrentBoxData:
call EnableSRAM
ld a, BANK("Save Data")
ld [rRAMB], a
ld hl, sGameData
ld bc, sGameDataEnd - sGameData
- call SAVCheckSum
+ call CalcCheckSum
ld c, a
ld a, [sMainDataCheckSum]
cp c
- jr nz, SAVBadCheckSum
+ jr nz, CheckSumFailed
ld hl, sCurBoxData
ld de, wBoxDataStart
ld bc, wBoxDataEnd - wBoxDataStart
call CopyData
and a
- jp SAVGoodChecksum
+ jp GoodCheckSum
-LoadSAV2:
+LoadPartyAndDexData:
call EnableSRAM
ld a, BANK("Save Data")
ld [rRAMB], a
ld hl, sGameData
ld bc, sGameDataEnd - sGameData
- call SAVCheckSum
+ call CalcCheckSum
ld c, a
ld a, [sMainDataCheckSum]
cp c
- jp nz, SAVBadCheckSum
+ jp nz, CheckSumFailed
ld hl, sPartyData
ld de, wPartyDataStart
ld bc, wPartyDataEnd - wPartyDataStart
@@ -116,27 +118,29 @@ LoadSAV2:
ld bc, wPokedexSeenEnd - wPokedexOwned
call CopyData
and a
- jp SAVGoodChecksum
+ jp GoodCheckSum
-SAVBadCheckSum:
+CheckSumFailed:
scf
+ ; fallthrough
-SAVGoodChecksum:
+GoodCheckSum:
call DisableSRAM
ret
-LoadSAVIgnoreBadCheckSum:
-; unused function that loads save data and ignores bad checksums
- call LoadSAV0
- call LoadSAV1
- jp LoadSAV2
+TryLoadSaveFileIgnoreChecksum: ; unreferenced
+; don't update wSaveFileStatus upon success or failure
+; don't display warning in case of failed checksum
+ call LoadMainData
+ call LoadCurrentBoxData
+ jp LoadPartyAndDexData
-SaveSAV:
+SaveMenu:
farcall PrintSaveScreenText
ld c, 10
call DelayFrames
ld hl, WouldYouLikeToSaveText
- call SaveSAVConfirm
+ call SaveTheGame_YesOrNo
and a ;|0 = Yes|1 = No|
ret nz
ld c, 10
@@ -144,14 +148,14 @@ SaveSAV:
ld a, [wSaveFileStatus]
cp $1
jr z, .save
- call SAVCheckRandomID
+ call CheckPreviousSaveFile
jr z, .save
ld hl, OlderFileWillBeErasedText
- call SaveSAVConfirm
+ call SaveTheGame_YesOrNo
and a
ret nz
.save
- call SaveSAVtoSRAM
+ call SaveGameData
ld hl, SavingText
call PrintText
ld c, 128
@@ -167,13 +171,13 @@ SaveSAV:
call DelayFrames
ret
-SaveSAVConfirm:
+SaveTheGame_YesOrNo:
call PrintText
hlcoord 0, 7
lb bc, 8, 1
ld a, TWO_OPTION_MENU
ld [wTextBoxID], a
- call DisplayTextBoxID ; yes/no menu
+ call DisplayTextBoxID
ld a, [wCurrentMenuItem]
ret
@@ -193,10 +197,11 @@ OlderFileWillBeErasedText:
text_far _OlderFileWillBeErasedText
text_end
-SaveSAVtoSRAM0:
+SaveMainData:
call EnableSRAM
ld a, BANK("Save Data")
ld [rRAMB], a
+
ld hl, wPlayerName
ld de, sPlayerName
ld bc, NAME_LENGTH
@@ -210,20 +215,22 @@ SaveSAVtoSRAM0:
ld bc, wSpriteDataEnd - wSpriteDataStart
call CopyData
ld hl, wBoxDataStart
+
+; this part is redundant, SaveCurrentBoxData is always called next
ld de, sCurBoxData
ld bc, wBoxDataEnd - wBoxDataStart
call CopyData
ldh a, [hTileAnimations]
ld [sTileAnimations], a
+
ld hl, sGameData
ld bc, sGameDataEnd - sGameData
- call SAVCheckSum
+ call CalcCheckSum
ld [sMainDataCheckSum], a
call DisableSRAM
ret
-SaveSAVtoSRAM1:
-; stored pokémon
+SaveCurrentBoxData:
call EnableSRAM
ld a, BANK("Save Data")
ld [rRAMB], a
@@ -233,12 +240,12 @@ SaveSAVtoSRAM1:
call CopyData
ld hl, sGameData
ld bc, sGameDataEnd - sGameData
- call SAVCheckSum
+ call CalcCheckSum
ld [sMainDataCheckSum], a
call DisableSRAM
ret
-SaveSAVtoSRAM2:
+SavePartyAndDexData:
call EnableSRAM
ld a, BANK("Save Data")
ld [rRAMB], a
@@ -259,19 +266,19 @@ SaveSAVtoSRAM2:
ld [de], a
ld hl, sGameData
ld bc, sGameDataEnd - sGameData
- call SAVCheckSum
+ call CalcCheckSum
ld [sMainDataCheckSum], a
call DisableSRAM
ret
-SaveSAVtoSRAM::
+SaveGameData::
ld a, $2
ld [wSaveFileStatus], a
- call SaveSAVtoSRAM0
- call SaveSAVtoSRAM1
- jp SaveSAVtoSRAM2
+ call SaveMainData
+ call SaveCurrentBoxData
+ jp SavePartyAndDexData
-SAVCheckSum:
+CalcCheckSum:
;Check Sum (result[1 byte] is complemented)
ld d, 0
.loop
@@ -294,7 +301,7 @@ CalcIndividualBoxCheckSums:
push bc
push de
ld bc, wBoxDataEnd - wBoxDataStart
- call SAVCheckSum
+ call CalcCheckSum
pop de
ld [de], a
inc de
@@ -308,7 +315,7 @@ GetBoxSRAMLocation:
; out: b = box SRAM bank, hl = pointer to start of box
ld hl, BoxSRAMPointerTable
ld a, [wCurrentBoxNum]
- and $7f
+ and BOX_NUM_MASK
cp NUM_BOXES / 2
ld b, 2
jr c, .next
@@ -373,7 +380,7 @@ ChangeBox::
ld a, [hl]
ld [de], a
call RestoreMapTextPointer
- call SaveSAVtoSRAM
+ call SaveGameData
ld hl, wChangeBoxSavedMapTextPointer
call SetMapTextPointer
ret
@@ -392,7 +399,7 @@ CopyBoxToOrFromSRAM:
call CopyData
pop hl
-; mark the memory that the box was copied from as am empty box
+; mark the source box as an empty box
xor a
ld [hli], a
dec a
@@ -400,7 +407,7 @@ CopyBoxToOrFromSRAM:
ld hl, sBox1 ; sBox7
ld bc, sBank2AllBoxesChecksum - sBox1
- call SAVCheckSum
+ call CalcCheckSum
ld [sBank2AllBoxesChecksum], a ; sBank3AllBoxesChecksum
call CalcIndividualBoxCheckSums
call DisableSRAM
@@ -420,7 +427,7 @@ DisplayChangeBoxMenu:
xor a
ld [wMenuWatchMovingOutOfBounds], a
ld a, [wCurrentBoxNum]
- and $7f
+ and BOX_NUM_MASK
ld [wCurrentMenuItem], a
ld [wLastMenuItem], a
hlcoord 0, 0
@@ -439,7 +446,7 @@ DisplayChangeBoxMenu:
ld hl, hUILayoutFlags
res BIT_SINGLE_SPACED_LINES, [hl]
ld a, [wCurrentBoxNum]
- and $7f
+ and BOX_NUM_MASK
cp 9
jr c, .singleDigitBoxNum
sub 9
@@ -458,7 +465,7 @@ DisplayChangeBoxMenu:
hlcoord 18, 1
ld de, wBoxMonCounts
ld bc, SCREEN_WIDTH
- ld a, $c
+ ld a, NUM_BOXES
.loop
push af
ld a, [de]
@@ -525,7 +532,7 @@ EmptySRAMBoxesInBank:
call EmptySRAMBox
ld hl, sBox1 ; sBox7
ld bc, sBank2AllBoxesChecksum - sBox1
- call SAVCheckSum
+ call CalcCheckSum
ld [sBank2AllBoxesChecksum], a ; sBank3AllBoxesChecksum
call CalcIndividualBoxCheckSums
ret
@@ -552,7 +559,7 @@ GetMonCountsForAllBoxes:
; copy the count for the current box from WRAM
ld a, [wCurrentBoxNum]
- and $7f
+ and BOX_NUM_MASK
ld c, a
ld b, 0
add hl, bc
@@ -576,10 +583,10 @@ GetMonCountsForBoxesInBank:
ld [hli], a
ret
-SAVCheckRandomID:
-; checks if Sav file is the same by checking player's name 1st letter
-; and the two random numbers generated at game beginning
-; (which are stored at wPlayerID)s
+; check if we're trying to save over a different playthrough
+; return result in zero flag
+; z set: a valid save file was found, and saved PlayerID is different from wPlayerID
+CheckPreviousSaveFile:
call EnableSRAM
ld a, BANK("Save Data")
ld [rRAMB], a
@@ -588,11 +595,11 @@ SAVCheckRandomID:
jr z, .next
ld hl, sGameData
ld bc, sGameDataEnd - sGameData
- call SAVCheckSum
+ call CalcCheckSum
ld c, a
ld a, [sMainDataCheckSum]
cp c
- jr nz, .next
+ jr nz, .next ; return z set if save data is corrupted
ld hl, sMainData + (wPlayerID - wMainDataStart) ; player ID
ld a, [hli]
ld h, [hl]
@@ -603,8 +610,9 @@ SAVCheckRandomID:
ld a, [wPlayerID + 1]
cp h
.next
- ld a, $00
+ ld a, BMODE_SIMPLE
ld [rBMODE], a
+ ASSERT RAMG_SRAM_DISABLE == BMODE_SIMPLE
ld [rRAMG], a
ret
@@ -651,19 +659,20 @@ HallOfFame_Copy:
call DisableSRAM
ret
-ClearSAV:
+; Fill SRAM with $ff, erasing save data. Used by DoClearSaveDialogue
+ClearAllSRAMBanks:
call EnableSRAM
ld a, $4
.loop
dec a
push af
- call PadSRAM_FF
+ call .PadSRAM_FF
pop af
jr nz, .loop
call DisableSRAM
ret
-PadSRAM_FF:
+.PadSRAM_FF
ld [rRAMB], a
ld hl, STARTOF(SRAM)
ld bc, SIZEOF(SRAM)
@@ -678,7 +687,8 @@ EnableSRAM:
ret
DisableSRAM:
- ld a, 0
+ ld a, BMODE_SIMPLE ; preserve flags
ld [rBMODE], a
+ ASSERT RAMG_SRAM_DISABLE == BMODE_SIMPLE
ld [rRAMG], a
ret
diff --git a/engine/menus/start_sub_menus.asm b/engine/menus/start_sub_menus.asm
index 9e8a181b..32258437 100644
--- a/engine/menus/start_sub_menus.asm
+++ b/engine/menus/start_sub_menus.asm
@@ -1,6 +1,6 @@
StartMenu_Pokedex::
predef ShowPokedexMenu
- call LoadScreenTilesFromBuffer2 ; restore saved screen
+ call LoadScreenTilesFromBuffer2
call Delay3
call LoadGBPal
call UpdateSprites
@@ -63,7 +63,7 @@ StartMenu_Pokemon::
ld [hl], a
call HandleMenuInput
push af
- call LoadScreenTilesFromBuffer1 ; restore saved screen
+ call LoadScreenTilesFromBuffer1
pop af
bit B_PAD_B, a
jp nz, .loop
@@ -117,7 +117,7 @@ StartMenu_Pokemon::
ld a, [hli]
ld h, [hl]
ld l, a
- ld a, [wObtainedBadges] ; badges obtained
+ ld a, [wObtainedBadges]
jp hl
.outOfBattleMovePointers
dw .cut
@@ -303,7 +303,7 @@ StartMenu_Pokemon::
; writes a blank tile to all possible menu cursor positions on the party menu
ErasePartyMenuCursors::
hlcoord 0, 1
- ld bc, 2 * 20 ; menu cursor positions are 2 rows apart
+ ld bc, 2 * SCREEN_WIDTH ; menu cursor positions are 2 rows apart
ld a, 6 ; 6 menu cursor positions
.loop
ld [hl], " "
@@ -313,7 +313,7 @@ ErasePartyMenuCursors::
ret
ItemMenuLoop:
- call LoadScreenTilesFromBuffer2DisableBGTransfer ; restore saved screen
+ call LoadScreenTilesFromBuffer2DisableBGTransfer
call RunDefaultPaletteCommand
StartMenu_Item::
@@ -340,7 +340,7 @@ StartMenu_Item::
ld [wBagSavedMenuItem], a
jr nc, .choseItem
.exitMenu
- call LoadScreenTilesFromBuffer2 ; restore saved screen
+ call LoadScreenTilesFromBuffer2
call LoadTextBoxTilePatterns
call UpdateSprites
jp RedisplayStartMenu
@@ -380,7 +380,7 @@ StartMenu_Item::
bit B_PAD_B, a
jr z, .useOrTossItem
jp ItemMenuLoop
-.useOrTossItem ; if the player made the choice to use or toss the item
+.useOrTossItem
ld a, [wCurItem]
ld [wNamedObjectIndex], a
call GetItemName
@@ -476,14 +476,14 @@ StartMenu_TrainerInfo::
xor a
ldh [hTileAnimations], a
call DrawTrainerInfo
- predef DrawBadges ; draw badges
+ predef DrawBadges
ld b, SET_PAL_TRAINER_CARD
call RunPaletteCommand
call GBPalNormal
- call WaitForTextScrollButtonPress ; wait for button press
+ call WaitForTextScrollButtonPress
call GBPalWhiteOut
call LoadFontTilePatterns
- call LoadScreenTilesFromBuffer2 ; restore saved screen
+ call LoadScreenTilesFromBuffer2
call RunDefaultPaletteCommand
call ReloadMapData
farcall DrawStartMenu ; XXX what difference does this make?
@@ -507,7 +507,7 @@ DrawTrainerInfo:
ld de, vChars2 tile $00
ld bc, $1c tiles
call CopyData
- ld hl, TrainerInfoTextBoxTileGraphics ; trainer info text box tile patterns
+ ld hl, TrainerInfoTextBoxTileGraphics
ld de, vChars2 tile $77
ld bc, 8 tiles
push bc
@@ -517,10 +517,10 @@ DrawTrainerInfo:
ld bc, $17 tiles
call TrainerInfo_FarCopyData
pop bc
- ld hl, BadgeNumbersTileGraphics ; badge number tile patterns
+ ld hl, BadgeNumbersTileGraphics
ld de, vChars1 tile $58
call TrainerInfo_FarCopyData
- ld hl, GymLeaderFaceAndBadgeTileGraphics ; gym leader face and badge tile patterns
+ ld hl, GymLeaderFaceAndBadgeTileGraphics
ld de, vChars2 tile $20
ld bc, 8 * 8 tiles
ld a, BANK(GymLeaderFaceAndBadgeTileGraphics)
@@ -573,12 +573,12 @@ DrawTrainerInfo:
ld c, 3 | LEADING_ZEROES | LEFT_ALIGN | MONEY_SIGN
call PrintBCDNumber
hlcoord 9, 6
- ld de, wPlayTimeHours ; hours
+ ld de, wPlayTimeHours
lb bc, LEFT_ALIGN | 1, 3
call PrintNumber
ld [hl], $d6 ; colon tile ID
inc hl
- ld de, wPlayTimeMinutes ; minutes
+ ld de, wPlayTimeMinutes
lb bc, LEADING_ZEROES | 1, 2
jp PrintNumber
@@ -660,8 +660,8 @@ StartMenu_SaveReset::
ld a, [wStatusFlags4]
bit BIT_LINK_CONNECTED, a
jp nz, Init
- predef SaveSAV ; save the game
- call LoadScreenTilesFromBuffer2 ; restore saved screen
+ predef SaveMenu
+ call LoadScreenTilesFromBuffer2
jp HoldTextDisplayOpen
StartMenu_Option::
@@ -670,7 +670,7 @@ StartMenu_Option::
call ClearScreen
call UpdateSprites
callfar DisplayOptionMenu
- call LoadScreenTilesFromBuffer2 ; restore saved screen
+ call LoadScreenTilesFromBuffer2
call LoadTextBoxTilePatterns
call UpdateSprites
jp RedisplayStartMenu