From 920bfa7553183b1b1e8e7ddf47b650f8419e9531 Mon Sep 17 00:00:00 2001 From: Randy Thiemann Date: Sat, 11 Nov 2023 15:32:48 +0100 Subject: [PATCH] Save hi scores. --- bin/DMGTRIS.GBC | Bin 131072 -> 131072 bytes bin/DMGTRIS.map | 454 ++++++++++++++++++++++++--------------------- bin/DMGTRIS.pocket | Bin 131072 -> 131072 bytes bin/DMGTRIS.sym | 373 ++++++++++++++++++++----------------- src/hiscore.asm | 266 +++++++++++++++++++++++++- 5 files changed, 703 insertions(+), 390 deletions(-) diff --git a/bin/DMGTRIS.GBC b/bin/DMGTRIS.GBC index 99d536afbd09b69ea252355ca4f7f8d3a9169e35..300e030f51eacbefaeadc674c18574bdd379e70c 100644 GIT binary patch delta 8246 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 Y&yVBnVMc+;T2bQE!5dZ)H delta 7890 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 aLqmC`tjcXuIdN1BaqKttE3+zgU-!T6NGJ>d diff --git a/bin/DMGTRIS.map b/bin/DMGTRIS.map index be144a9..b7916a7 100644 --- a/bin/DMGTRIS.map +++ b/bin/DMGTRIS.map @@ -2,10 +2,7 @@ ROM0 bank #0: SECTION: $0000-$0007 ($0008 bytes) ["Bank ID BANK_MAIN"] SECTION: $0008-$0024 ($001d bytes) ["Switch Bank"] $0008 = RSTSwitchBank - SECTION: $0025-$0026 ($0002 bytes) ["Hi Score Functions"] - $0025 = CheckAndAddHiscore - $0026 = GetTargetHSTable - EMPTY: $0027-$0027 ($0001 byte) + EMPTY: $0025-$0027 ($0003 bytes) SECTION: $0028-$0042 ($001b bytes) ["Restore Bank"] $0028 = RSTRestoreBank EMPTY: $0043-$0047 ($0005 bytes) @@ -420,125 +417,151 @@ ROM0 bank #0: $30e9 = Next7Piece $30e9 = !20 $30f3 = NextByte - SECTION: $3113-$325c ($014a bytes) ["Progress Data"] - $3113 = sProgressData - SECTION: $325d-$339c ($0140 bytes) ["Hi Score Data"] - $325d = sHiscoreDefaultData - SECTION: $339d-$347c ($00e0 bytes) ["Score Functions"] - $339d = ScoreInit - $33c5 = IncreaseScore - $33fd = IncreaseScore.doConvert - $33ff = !0 - $3415 = IncreaseScore.carry - $3417 = IncreaseScore.postConvert - $3424 = !1 - $342b = IncreaseScore.preAddDigit - $3453 = IncreaseScore.addDigit - $3469 = IncreaseScore.nextDigit - SECTION: $347d-$3549 ($00cd bytes) ["Input Functions"] - $347d = InputInit - $348f = GetInput - $348f = GetInput.btns - $349c = GetInput.readA - $34a0 = GetInput.setA - $34ab = GetInput.clearA - $34ae = GetInput.readB - $34b2 = GetInput.setB - $34bd = GetInput.clearB - $34c0 = GetInput.readSelect - $34c4 = GetInput.setSelect - $34cf = GetInput.clearSelect - $34d2 = GetInput.readStart - $34d6 = GetInput.setStart - $34e1 = GetInput.clearStart - $34e4 = GetInput.dpad - $34f1 = GetInput.readUp - $34f5 = GetInput.setUp - $3500 = GetInput.clearUp - $3503 = GetInput.readDown - $3507 = GetInput.setDown - $3512 = GetInput.clearDown - $3515 = GetInput.readLeft - $3519 = GetInput.setLeft - $3524 = GetInput.clearLeft - $3527 = GetInput.readRight - $352b = GetInput.setRight - $3536 = GetInput.clearRight - $3539 = GetInput.priorities - $3544 = GetInput.zero - SECTION: $354a-$3614 ($00cb bytes) ["Title Function Trampolines"] - $354a = SwitchToTitle - $3553 = TitleEventLoopHandler - $355d = TitleVBlankHandler - $3567 = PersistLevel - $3575 = DrawSpeedMain - $35c5 = DrawSpeedSettings - SECTION: $3615-$36da ($00c6 bytes) ["Time Functions"] - $3615 = TimeInit - $3635 = StartCountdown - $3643 = ResetGameTime - $364e = CheckTorikan - $3665 = CheckTorikan.failure - $3667 = CheckTorikan.success - $366a = HandleTimers - $3690 = HandleTimers.reduce - $369d = HandleTimers.clock - $36b7 = HandleTimers.go - SECTION: $36db-$378c ($00b2 bytes) ["Progress Functions"] - $36db = SetProgress - $36e6 = SetProgress.loop - $36ea = SetProgress.correct - $3711 = SetProgress.wvr_u1 - $371d = SetProgress.wvr_u2 - $372b = SetProgress.wvr_u3 - $3737 = SetProgress.wvr_u4 - $3745 = SetProgress.wvr_u5 - $3751 = SetProgress.wvr_u6 - $375f = SetProgress.wvr_u7 - $376b = SetProgress.wvr_u8 - $3779 = SetProgress.wvr_u9 - $3785 = SetProgress.wvr_u10 - SECTION: $378d-$381e ($0092 bytes) ["Code Entry Point"] - $378d = Main - $37b6 = Main.notgbc - $37bc = Main.wvr_u1 - $37e3 = EventLoop - $37f9 = EventLoop.eventloopjumps - $3802 = EventLoopPostHandler - $3804 = EventLoopPostHandler.wvb_u2 - $3816 = EventLoopPostHandler.vblankjumps - SECTION: $381f-$3870 ($0052 bytes) ["Tile Functions"] - $381f = LoadTitleTiles - $383d = LoadGameplayTiles - $3853 = LoadGameplayTiles.gbc - $3862 = LoadGameplayTiles.dmg - SECTION: $3871-$38ac ($003c bytes) ["Time Data"] - $3871 = sFramesToCS - SECTION: $38ad-$38da ($002e bytes) ["Memory Functions"] - $38ad = UnsafeMemCopy - $38b6 = SafeMemCopy.wvr_u1 - $38b6 = SafeMemCopy - $38c5 = UnsafeMemSet - $38cd = SafeMemSet - $38cd = SafeMemSet.wvr_u2 - SECTION: $38db-$3900 ($0026 bytes) ["Gameplay Function Trampolines"] - $38db = SwitchToGameplay - $38e4 = SwitchToGameplayBig - $38ed = GamePlayEventLoopHandler - $38f7 = GamePlayBigEventLoopHandler - SECTION: $3901-$3925 ($0025 bytes) ["Interrupt Initialization Functions"] - $3901 = EnableScreenSquish - $391b = DisableScreenSquish - SECTION: $3926-$3947 ($0022 bytes) ["OAM Functions"] - $3926 = CopyOAMHandler - $3932 = ClearOAM - SECTION: $3948-$3956 ($000f bytes) ["Banking Functions"] - $3948 = BankingInit - SECTION: $3957-$3960 ($000a bytes) ["OAM DMA Code"] - $3957 = OAMDMA - $3961 = OAMDMAEnd - EMPTY: $3961-$3fff ($069f bytes) - TOTAL EMPTY: $06a8 bytes + SECTION: $3113-$3281 ($016f bytes) ["Hi Score Functions"] + $3113 = CheckAndAddHiscore + $311d = CheckAndAddHiscore.checkloop + $3161 = CheckAndAddHiscore.notbetter + $316d = CheckAndAddHiscore.better + $316f = InsertHiScore + $316f = InsertHiScore.copylower + $3180 = InsertHiScore.copyupper + $318d = !0 + $31a1 = InsertHiScore.findrow + $31ae = !1 + $31b2 = InsertHiScore.insert + $31fb = InsertHiScore.persist + $320c = GetHiScoreEntry + $3221 = !2 + $3225 = GetHiScoreEntry.store + $322e = InitTargetHSTable + $3239 = InitTargetHSTable.jumps + $324e = InitTargetHSTable.dmgt + $3253 = InitTargetHSTable.tgm1 + $3258 = InitTargetHSTable.tgm3 + $325d = InitTargetHSTable.deat + $3262 = InitTargetHSTable.shir + $3267 = InitTargetHSTable.chil + $326c = InitTargetHSTable.myco + $326f = InitTargetHSTable.store + SECTION: $3282-$33cb ($014a bytes) ["Progress Data"] + $3282 = sProgressData + SECTION: $33cc-$350b ($0140 bytes) ["Hi Score Data"] + $33cc = sHiscoreDefaultData + SECTION: $350c-$35eb ($00e0 bytes) ["Score Functions"] + $350c = ScoreInit + $3534 = IncreaseScore + $356c = IncreaseScore.doConvert + $356e = !0 + $3584 = IncreaseScore.carry + $3586 = IncreaseScore.postConvert + $3593 = !1 + $359a = IncreaseScore.preAddDigit + $35c2 = IncreaseScore.addDigit + $35d8 = IncreaseScore.nextDigit + SECTION: $35ec-$36b8 ($00cd bytes) ["Input Functions"] + $35ec = InputInit + $35fe = GetInput + $35fe = GetInput.btns + $360b = GetInput.readA + $360f = GetInput.setA + $361a = GetInput.clearA + $361d = GetInput.readB + $3621 = GetInput.setB + $362c = GetInput.clearB + $362f = GetInput.readSelect + $3633 = GetInput.setSelect + $363e = GetInput.clearSelect + $3641 = GetInput.readStart + $3645 = GetInput.setStart + $3650 = GetInput.clearStart + $3653 = GetInput.dpad + $3660 = GetInput.readUp + $3664 = GetInput.setUp + $366f = GetInput.clearUp + $3672 = GetInput.readDown + $3676 = GetInput.setDown + $3681 = GetInput.clearDown + $3684 = GetInput.readLeft + $3688 = GetInput.setLeft + $3693 = GetInput.clearLeft + $3696 = GetInput.readRight + $369a = GetInput.setRight + $36a5 = GetInput.clearRight + $36a8 = GetInput.priorities + $36b3 = GetInput.zero + SECTION: $36b9-$3783 ($00cb bytes) ["Title Function Trampolines"] + $36b9 = SwitchToTitle + $36c2 = TitleEventLoopHandler + $36cc = TitleVBlankHandler + $36d6 = PersistLevel + $36e4 = DrawSpeedMain + $3734 = DrawSpeedSettings + SECTION: $3784-$3849 ($00c6 bytes) ["Time Functions"] + $3784 = TimeInit + $37a4 = StartCountdown + $37b2 = ResetGameTime + $37bd = CheckTorikan + $37d4 = CheckTorikan.failure + $37d6 = CheckTorikan.success + $37d9 = HandleTimers + $37ff = HandleTimers.reduce + $380c = HandleTimers.clock + $3826 = HandleTimers.go + SECTION: $384a-$38fb ($00b2 bytes) ["Progress Functions"] + $384a = SetProgress + $3855 = SetProgress.loop + $3859 = SetProgress.correct + $3880 = SetProgress.wvr_u1 + $388c = SetProgress.wvr_u2 + $389a = SetProgress.wvr_u3 + $38a6 = SetProgress.wvr_u4 + $38b4 = SetProgress.wvr_u5 + $38c0 = SetProgress.wvr_u6 + $38ce = SetProgress.wvr_u7 + $38da = SetProgress.wvr_u8 + $38e8 = SetProgress.wvr_u9 + $38f4 = SetProgress.wvr_u10 + SECTION: $38fc-$398d ($0092 bytes) ["Code Entry Point"] + $38fc = Main + $3925 = Main.notgbc + $392b = Main.wvr_u1 + $3952 = EventLoop + $3968 = EventLoop.eventloopjumps + $3971 = EventLoopPostHandler + $3973 = EventLoopPostHandler.wvb_u2 + $3985 = EventLoopPostHandler.vblankjumps + SECTION: $398e-$39df ($0052 bytes) ["Tile Functions"] + $398e = LoadTitleTiles + $39ac = LoadGameplayTiles + $39c2 = LoadGameplayTiles.gbc + $39d1 = LoadGameplayTiles.dmg + SECTION: $39e0-$3a1b ($003c bytes) ["Time Data"] + $39e0 = sFramesToCS + SECTION: $3a1c-$3a49 ($002e bytes) ["Memory Functions"] + $3a1c = UnsafeMemCopy + $3a25 = SafeMemCopy.wvr_u1 + $3a25 = SafeMemCopy + $3a34 = UnsafeMemSet + $3a3c = SafeMemSet + $3a3c = SafeMemSet.wvr_u2 + SECTION: $3a4a-$3a6f ($0026 bytes) ["Gameplay Function Trampolines"] + $3a4a = SwitchToGameplay + $3a53 = SwitchToGameplayBig + $3a5c = GamePlayEventLoopHandler + $3a66 = GamePlayBigEventLoopHandler + SECTION: $3a70-$3a94 ($0025 bytes) ["Interrupt Initialization Functions"] + $3a70 = EnableScreenSquish + $3a8a = DisableScreenSquish + SECTION: $3a95-$3ab6 ($0022 bytes) ["OAM Functions"] + $3a95 = CopyOAMHandler + $3aa1 = ClearOAM + SECTION: $3ab7-$3ac5 ($000f bytes) ["Banking Functions"] + $3ab7 = BankingInit + SECTION: $3ac6-$3acf ($000a bytes) ["OAM DMA Code"] + $3ac6 = OAMDMA + $3ad0 = OAMDMAEnd + EMPTY: $3ad0-$3fff ($0530 bytes) + TOTAL EMPTY: $053b bytes ROMX bank #1: SECTION: $4000-$4007 ($0008 bytes) ["Bank ID BANK_OTHER"] @@ -2719,96 +2742,99 @@ WRAM0 bank #0: $cd1f = wRightSlamTimer $cd20 = wMovementLastFrame $cd21 = wReturnToSmall - SECTION: $cd22-$ce83 ($0162 bytes) ["Hi Score Variables"] + SECTION: $cd22-$ce86 ($0165 bytes) ["Hi Score Variables"] $cd22 = wTargetHSTable - $cd24 = wWorkingCopy - SECTION: $ce84-$cec4 ($0041 bytes) ["Stack"] - $ce84 = wStack - $cec5 = wStackEnd - SECTION: $cec5-$cef0 ($002c bytes) ["TGM3 RNG Variables"] - $cec5 = wTGM3Bag - $cee8 = wTGM3Droughts - $ceef = wTGM3GeneratedIdx - $cef0 = wTGM3WorstDroughtIdx - SECTION: $cef1-$cf03 ($0013 bytes) ["Level Variables"] - $cef1 = wBoneActivationLevel - $cef3 = wInvisActivationLevel - $cef5 = wKillScreenActivationLevel - $cef7 = wKillScreenActivationLevelBCD - $cef9 = wLastLockLevel - $cefb = wStaffRollDuration - $cefd = wBigStaffRoll - $cefe = wBonesActive - $ceff = wInvisActive - $cf00 = wKillScreenActive - $cf01 = wLockLevel - $cf02 = wShouldGoStaffRoll - $cf03 = wNoMoreLocks - SECTION: $cf04-$cf15 ($0012 bytes) ["Grade Variables"] - $cf04 = wDecayRate - $cf05 = wGradePoints - $cf06 = wInternalGrade - $cf07 = wDisplayedGrade - $cf08 = wEffectTimer - $cf09 = wRankingDisqualified - $cf0a = wDecayCounter - $cf0b = wGradeGauge - $cf0c = wSMult - $cf0d = wDMult - $cf0e = wTMult - $cf0f = wSRate - $cf10 = wDRate - $cf11 = wTRate - $cf12 = wQRate - $cf13 = wTGM1level300RequirementMet - $cf14 = wTGM1level500RequirementMet - $cf15 = wTGM1level999RequirementMet - SECTION: $cf16-$cf1f ($000a bytes) ["Progress Variables"] - $cf16 = wProgress0B1 - $cf17 = wProgress0B2 - $cf18 = wProgress1B1 - $cf19 = wProgress1B2 - $cf1a = wProgress2B1 - $cf1b = wProgress2B2 - $cf1c = wProgress3B1 - $cf1d = wProgress3B2 - $cf1e = wProgress4B1 - $cf1f = wProgress4B2 - SECTION: $cf20-$cf28 ($0009 bytes) ["Globals"] - $cf20 = wSwapABState - $cf21 = wRNGModeState - $cf22 = wRotModeState - $cf23 = wDropModeState - $cf24 = wSpeedCurveState - $cf25 = wAlways20GState - $cf26 = wInitialA - $cf27 = wInitialB - $cf28 = wInitialC - SECTION: $cf29-$cf2e ($0006 bytes) ["Time Variables"] - $cf29 = wMinutes - $cf2a = wSeconds - $cf2b = wFrames - $cf2c = wCountDown - $cf2e = wCountDownZero - SECTION: $cf2f-$cf33 ($0005 bytes) ["Title Variables"] - $cf2f = wSelected - $cf30 = wTitleMode - $cf31 = wProfileName - SECTION: $cf34-$cf37 ($0004 bytes) ["Banking Variables"] - $cf34 = wBankBackup - SECTION: $cf38-$cf3b ($0004 bytes) ["Gameplay Variables"] - $cf38 = wRollLine - $cf39 = wInStaffRoll - $cf3a = wBigModeTransfered - $cf3b = wGameOverIgnoreInput - SECTION: $cf3c-$cf3e ($0003 bytes) ["GBC Variables"] - $cf3c = wOuterReps - $cf3d = wInnerReps - $cf3e = wTitlePal - SECTION: $cf3f-$cf3f ($0001 byte) ["SRAM Variables"] - $cf3f = wTarget - EMPTY: $cf40-$cfff ($00c0 bytes) - TOTAL EMPTY: $00c0 bytes + $cd24 = wWorkingIdx + $cd25 = wWorkingPtr + $cd26 = wWorkingCopy + $ce86 = wInsertTarget + SECTION: $ce87-$cec7 ($0041 bytes) ["Stack"] + $ce87 = wStack + $cec8 = wStackEnd + SECTION: $cec8-$cef3 ($002c bytes) ["TGM3 RNG Variables"] + $cec8 = wTGM3Bag + $ceeb = wTGM3Droughts + $cef2 = wTGM3GeneratedIdx + $cef3 = wTGM3WorstDroughtIdx + SECTION: $cef4-$cf06 ($0013 bytes) ["Level Variables"] + $cef4 = wBoneActivationLevel + $cef6 = wInvisActivationLevel + $cef8 = wKillScreenActivationLevel + $cefa = wKillScreenActivationLevelBCD + $cefc = wLastLockLevel + $cefe = wStaffRollDuration + $cf00 = wBigStaffRoll + $cf01 = wBonesActive + $cf02 = wInvisActive + $cf03 = wKillScreenActive + $cf04 = wLockLevel + $cf05 = wShouldGoStaffRoll + $cf06 = wNoMoreLocks + SECTION: $cf07-$cf18 ($0012 bytes) ["Grade Variables"] + $cf07 = wDecayRate + $cf08 = wGradePoints + $cf09 = wInternalGrade + $cf0a = wDisplayedGrade + $cf0b = wEffectTimer + $cf0c = wRankingDisqualified + $cf0d = wDecayCounter + $cf0e = wGradeGauge + $cf0f = wSMult + $cf10 = wDMult + $cf11 = wTMult + $cf12 = wSRate + $cf13 = wDRate + $cf14 = wTRate + $cf15 = wQRate + $cf16 = wTGM1level300RequirementMet + $cf17 = wTGM1level500RequirementMet + $cf18 = wTGM1level999RequirementMet + SECTION: $cf19-$cf22 ($000a bytes) ["Progress Variables"] + $cf19 = wProgress0B1 + $cf1a = wProgress0B2 + $cf1b = wProgress1B1 + $cf1c = wProgress1B2 + $cf1d = wProgress2B1 + $cf1e = wProgress2B2 + $cf1f = wProgress3B1 + $cf20 = wProgress3B2 + $cf21 = wProgress4B1 + $cf22 = wProgress4B2 + SECTION: $cf23-$cf2b ($0009 bytes) ["Globals"] + $cf23 = wSwapABState + $cf24 = wRNGModeState + $cf25 = wRotModeState + $cf26 = wDropModeState + $cf27 = wSpeedCurveState + $cf28 = wAlways20GState + $cf29 = wInitialA + $cf2a = wInitialB + $cf2b = wInitialC + SECTION: $cf2c-$cf31 ($0006 bytes) ["Time Variables"] + $cf2c = wMinutes + $cf2d = wSeconds + $cf2e = wFrames + $cf2f = wCountDown + $cf31 = wCountDownZero + SECTION: $cf32-$cf36 ($0005 bytes) ["Title Variables"] + $cf32 = wSelected + $cf33 = wTitleMode + $cf34 = wProfileName + SECTION: $cf37-$cf3a ($0004 bytes) ["Banking Variables"] + $cf37 = wBankBackup + SECTION: $cf3b-$cf3e ($0004 bytes) ["Gameplay Variables"] + $cf3b = wRollLine + $cf3c = wInStaffRoll + $cf3d = wBigModeTransfered + $cf3e = wGameOverIgnoreInput + SECTION: $cf3f-$cf41 ($0003 bytes) ["GBC Variables"] + $cf3f = wOuterReps + $cf40 = wInnerReps + $cf41 = wTitlePal + SECTION: $cf42-$cf42 ($0001 byte) ["SRAM Variables"] + $cf42 = wTarget + EMPTY: $cf43-$cfff ($00bd bytes) + TOTAL EMPTY: $00bd bytes HRAM bank #0: SECTION: $ff80-$ff9a ($001b bytes) ["High Field Variables"] @@ -2899,8 +2925,8 @@ HRAM bank #0: TOTAL EMPTY: $0003 bytes SUMMARY: - ROM0: 14680 bytes used / 1704 free + ROM0: 15045 bytes used / 1339 free ROMX: 64126 bytes used / 34178 free in 6 banks SRAM: 2951 bytes used / 5241 free in 1 bank - WRAM0: 3904 bytes used / 192 free + WRAM0: 3907 bytes used / 189 free HRAM: 124 bytes used / 3 free diff --git a/bin/DMGTRIS.pocket b/bin/DMGTRIS.pocket index 08d6ab205390e739564eec9cd7903b00fe3eba04..20ade9d7697fd6c63e731217cd472f2052b66079 100644 GIT binary patch delta 8246 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 delta 7890 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 bWoRg`lvTNHDkqMLA&&jVeq~n0?rZ)J*|sTF diff --git a/bin/DMGTRIS.sym b/bin/DMGTRIS.sym index f1f69af..749dcb1 100644 --- a/bin/DMGTRIS.sym +++ b/bin/DMGTRIS.sym @@ -1,7 +1,5 @@ ; File generated by rgblink 00:0008 RSTSwitchBank -00:0025 CheckAndAddHiscore -00:0026 GetTargetHSTable 00:0028 RSTRestoreBank 00:0048 LCDCInterrupt 00:004d LCDCInterrupt_WaitUntilNotBusy @@ -321,105 +319,127 @@ 00:30df Next35Piece 00:30e9 Next7Piece 00:30f3 NextByte -00:3113 sProgressData -00:325d sHiscoreDefaultData -00:339d ScoreInit -00:33c5 IncreaseScore -00:33fd IncreaseScore.doConvert -00:3415 IncreaseScore.carry -00:3417 IncreaseScore.postConvert -00:342b IncreaseScore.preAddDigit -00:3453 IncreaseScore.addDigit -00:3469 IncreaseScore.nextDigit -00:347d InputInit -00:348f GetInput -00:348f GetInput.btns -00:349c GetInput.readA -00:34a0 GetInput.setA -00:34ab GetInput.clearA -00:34ae GetInput.readB -00:34b2 GetInput.setB -00:34bd GetInput.clearB -00:34c0 GetInput.readSelect -00:34c4 GetInput.setSelect -00:34cf GetInput.clearSelect -00:34d2 GetInput.readStart -00:34d6 GetInput.setStart -00:34e1 GetInput.clearStart -00:34e4 GetInput.dpad -00:34f1 GetInput.readUp -00:34f5 GetInput.setUp -00:3500 GetInput.clearUp -00:3503 GetInput.readDown -00:3507 GetInput.setDown -00:3512 GetInput.clearDown -00:3515 GetInput.readLeft -00:3519 GetInput.setLeft -00:3524 GetInput.clearLeft -00:3527 GetInput.readRight -00:352b GetInput.setRight -00:3536 GetInput.clearRight -00:3539 GetInput.priorities -00:3544 GetInput.zero -00:354a SwitchToTitle -00:3553 TitleEventLoopHandler -00:355d TitleVBlankHandler -00:3567 PersistLevel -00:3575 DrawSpeedMain -00:35c5 DrawSpeedSettings -00:3615 TimeInit -00:3635 StartCountdown -00:3643 ResetGameTime -00:364e CheckTorikan -00:3665 CheckTorikan.failure -00:3667 CheckTorikan.success -00:366a HandleTimers -00:3690 HandleTimers.reduce -00:369d HandleTimers.clock -00:36b7 HandleTimers.go -00:36db SetProgress -00:36e6 SetProgress.loop -00:36ea SetProgress.correct -00:3711 SetProgress.wvr_u1 -00:371d SetProgress.wvr_u2 -00:372b SetProgress.wvr_u3 -00:3737 SetProgress.wvr_u4 -00:3745 SetProgress.wvr_u5 -00:3751 SetProgress.wvr_u6 -00:375f SetProgress.wvr_u7 -00:376b SetProgress.wvr_u8 -00:3779 SetProgress.wvr_u9 -00:3785 SetProgress.wvr_u10 -00:378d Main -00:37b6 Main.notgbc -00:37bc Main.wvr_u1 -00:37e3 EventLoop -00:37f9 EventLoop.eventloopjumps -00:3802 EventLoopPostHandler -00:3804 EventLoopPostHandler.wvb_u2 -00:3816 EventLoopPostHandler.vblankjumps -00:381f LoadTitleTiles -00:383d LoadGameplayTiles -00:3853 LoadGameplayTiles.gbc -00:3862 LoadGameplayTiles.dmg -00:3871 sFramesToCS -00:38ad UnsafeMemCopy -00:38b6 SafeMemCopy.wvr_u1 -00:38b6 SafeMemCopy -00:38c5 UnsafeMemSet -00:38cd SafeMemSet -00:38cd SafeMemSet.wvr_u2 -00:38db SwitchToGameplay -00:38e4 SwitchToGameplayBig -00:38ed GamePlayEventLoopHandler -00:38f7 GamePlayBigEventLoopHandler -00:3901 EnableScreenSquish -00:391b DisableScreenSquish -00:3926 CopyOAMHandler -00:3932 ClearOAM -00:3948 BankingInit -00:3957 OAMDMA -00:3961 OAMDMAEnd +00:3113 CheckAndAddHiscore +00:311d CheckAndAddHiscore.checkloop +00:3161 CheckAndAddHiscore.notbetter +00:316d CheckAndAddHiscore.better +00:316f InsertHiScore +00:316f InsertHiScore.copylower +00:3180 InsertHiScore.copyupper +00:31a1 InsertHiScore.findrow +00:31b2 InsertHiScore.insert +00:31fb InsertHiScore.persist +00:320c GetHiScoreEntry +00:3225 GetHiScoreEntry.store +00:322e InitTargetHSTable +00:3239 InitTargetHSTable.jumps +00:324e InitTargetHSTable.dmgt +00:3253 InitTargetHSTable.tgm1 +00:3258 InitTargetHSTable.tgm3 +00:325d InitTargetHSTable.deat +00:3262 InitTargetHSTable.shir +00:3267 InitTargetHSTable.chil +00:326c InitTargetHSTable.myco +00:326f InitTargetHSTable.store +00:3282 sProgressData +00:33cc sHiscoreDefaultData +00:350c ScoreInit +00:3534 IncreaseScore +00:356c IncreaseScore.doConvert +00:3584 IncreaseScore.carry +00:3586 IncreaseScore.postConvert +00:359a IncreaseScore.preAddDigit +00:35c2 IncreaseScore.addDigit +00:35d8 IncreaseScore.nextDigit +00:35ec InputInit +00:35fe GetInput +00:35fe GetInput.btns +00:360b GetInput.readA +00:360f GetInput.setA +00:361a GetInput.clearA +00:361d GetInput.readB +00:3621 GetInput.setB +00:362c GetInput.clearB +00:362f GetInput.readSelect +00:3633 GetInput.setSelect +00:363e GetInput.clearSelect +00:3641 GetInput.readStart +00:3645 GetInput.setStart +00:3650 GetInput.clearStart +00:3653 GetInput.dpad +00:3660 GetInput.readUp +00:3664 GetInput.setUp +00:366f GetInput.clearUp +00:3672 GetInput.readDown +00:3676 GetInput.setDown +00:3681 GetInput.clearDown +00:3684 GetInput.readLeft +00:3688 GetInput.setLeft +00:3693 GetInput.clearLeft +00:3696 GetInput.readRight +00:369a GetInput.setRight +00:36a5 GetInput.clearRight +00:36a8 GetInput.priorities +00:36b3 GetInput.zero +00:36b9 SwitchToTitle +00:36c2 TitleEventLoopHandler +00:36cc TitleVBlankHandler +00:36d6 PersistLevel +00:36e4 DrawSpeedMain +00:3734 DrawSpeedSettings +00:3784 TimeInit +00:37a4 StartCountdown +00:37b2 ResetGameTime +00:37bd CheckTorikan +00:37d4 CheckTorikan.failure +00:37d6 CheckTorikan.success +00:37d9 HandleTimers +00:37ff HandleTimers.reduce +00:380c HandleTimers.clock +00:3826 HandleTimers.go +00:384a SetProgress +00:3855 SetProgress.loop +00:3859 SetProgress.correct +00:3880 SetProgress.wvr_u1 +00:388c SetProgress.wvr_u2 +00:389a SetProgress.wvr_u3 +00:38a6 SetProgress.wvr_u4 +00:38b4 SetProgress.wvr_u5 +00:38c0 SetProgress.wvr_u6 +00:38ce SetProgress.wvr_u7 +00:38da SetProgress.wvr_u8 +00:38e8 SetProgress.wvr_u9 +00:38f4 SetProgress.wvr_u10 +00:38fc Main +00:3925 Main.notgbc +00:392b Main.wvr_u1 +00:3952 EventLoop +00:3968 EventLoop.eventloopjumps +00:3971 EventLoopPostHandler +00:3973 EventLoopPostHandler.wvb_u2 +00:3985 EventLoopPostHandler.vblankjumps +00:398e LoadTitleTiles +00:39ac LoadGameplayTiles +00:39c2 LoadGameplayTiles.gbc +00:39d1 LoadGameplayTiles.dmg +00:39e0 sFramesToCS +00:3a1c UnsafeMemCopy +00:3a25 SafeMemCopy.wvr_u1 +00:3a25 SafeMemCopy +00:3a34 UnsafeMemSet +00:3a3c SafeMemSet +00:3a3c SafeMemSet.wvr_u2 +00:3a4a SwitchToGameplay +00:3a53 SwitchToGameplayBig +00:3a5c GamePlayEventLoopHandler +00:3a66 GamePlayBigEventLoopHandler +00:3a70 EnableScreenSquish +00:3a8a DisableScreenSquish +00:3a95 CopyOAMHandler +00:3aa1 ClearOAM +00:3ab7 BankingInit +00:3ac6 OAMDMA +00:3ad0 OAMDMAEnd 01:4008 sDMGTSpeedCurve 01:4203 sDMGTSpeedCurveEnd 01:4205 sDMGTSpeedCurveSpecialData @@ -2393,80 +2413,83 @@ 00:cd20 wMovementLastFrame 00:cd21 wReturnToSmall 00:cd22 wTargetHSTable -00:cd24 wWorkingCopy -00:ce84 wStack -00:cec5 wStackEnd -00:cec5 wTGM3Bag -00:cee8 wTGM3Droughts -00:ceef wTGM3GeneratedIdx -00:cef0 wTGM3WorstDroughtIdx -00:cef1 wBoneActivationLevel -00:cef3 wInvisActivationLevel -00:cef5 wKillScreenActivationLevel -00:cef7 wKillScreenActivationLevelBCD -00:cef9 wLastLockLevel -00:cefb wStaffRollDuration -00:cefd wBigStaffRoll -00:cefe wBonesActive -00:ceff wInvisActive -00:cf00 wKillScreenActive -00:cf01 wLockLevel -00:cf02 wShouldGoStaffRoll -00:cf03 wNoMoreLocks -00:cf04 wDecayRate -00:cf05 wGradePoints -00:cf06 wInternalGrade -00:cf07 wDisplayedGrade -00:cf08 wEffectTimer -00:cf09 wRankingDisqualified -00:cf0a wDecayCounter -00:cf0b wGradeGauge -00:cf0c wSMult -00:cf0d wDMult -00:cf0e wTMult -00:cf0f wSRate -00:cf10 wDRate -00:cf11 wTRate -00:cf12 wQRate -00:cf13 wTGM1level300RequirementMet -00:cf14 wTGM1level500RequirementMet -00:cf15 wTGM1level999RequirementMet -00:cf16 wProgress0B1 -00:cf17 wProgress0B2 -00:cf18 wProgress1B1 -00:cf19 wProgress1B2 -00:cf1a wProgress2B1 -00:cf1b wProgress2B2 -00:cf1c wProgress3B1 -00:cf1d wProgress3B2 -00:cf1e wProgress4B1 -00:cf1f wProgress4B2 -00:cf20 wSwapABState -00:cf21 wRNGModeState -00:cf22 wRotModeState -00:cf23 wDropModeState -00:cf24 wSpeedCurveState -00:cf25 wAlways20GState -00:cf26 wInitialA -00:cf27 wInitialB -00:cf28 wInitialC -00:cf29 wMinutes -00:cf2a wSeconds -00:cf2b wFrames -00:cf2c wCountDown -00:cf2e wCountDownZero -00:cf2f wSelected -00:cf30 wTitleMode -00:cf31 wProfileName -00:cf34 wBankBackup -00:cf38 wRollLine -00:cf39 wInStaffRoll -00:cf3a wBigModeTransfered -00:cf3b wGameOverIgnoreInput -00:cf3c wOuterReps -00:cf3d wInnerReps -00:cf3e wTitlePal -00:cf3f wTarget +00:cd24 wWorkingIdx +00:cd25 wWorkingPtr +00:cd26 wWorkingCopy +00:ce86 wInsertTarget +00:ce87 wStack +00:cec8 wStackEnd +00:cec8 wTGM3Bag +00:ceeb wTGM3Droughts +00:cef2 wTGM3GeneratedIdx +00:cef3 wTGM3WorstDroughtIdx +00:cef4 wBoneActivationLevel +00:cef6 wInvisActivationLevel +00:cef8 wKillScreenActivationLevel +00:cefa wKillScreenActivationLevelBCD +00:cefc wLastLockLevel +00:cefe wStaffRollDuration +00:cf00 wBigStaffRoll +00:cf01 wBonesActive +00:cf02 wInvisActive +00:cf03 wKillScreenActive +00:cf04 wLockLevel +00:cf05 wShouldGoStaffRoll +00:cf06 wNoMoreLocks +00:cf07 wDecayRate +00:cf08 wGradePoints +00:cf09 wInternalGrade +00:cf0a wDisplayedGrade +00:cf0b wEffectTimer +00:cf0c wRankingDisqualified +00:cf0d wDecayCounter +00:cf0e wGradeGauge +00:cf0f wSMult +00:cf10 wDMult +00:cf11 wTMult +00:cf12 wSRate +00:cf13 wDRate +00:cf14 wTRate +00:cf15 wQRate +00:cf16 wTGM1level300RequirementMet +00:cf17 wTGM1level500RequirementMet +00:cf18 wTGM1level999RequirementMet +00:cf19 wProgress0B1 +00:cf1a wProgress0B2 +00:cf1b wProgress1B1 +00:cf1c wProgress1B2 +00:cf1d wProgress2B1 +00:cf1e wProgress2B2 +00:cf1f wProgress3B1 +00:cf20 wProgress3B2 +00:cf21 wProgress4B1 +00:cf22 wProgress4B2 +00:cf23 wSwapABState +00:cf24 wRNGModeState +00:cf25 wRotModeState +00:cf26 wDropModeState +00:cf27 wSpeedCurveState +00:cf28 wAlways20GState +00:cf29 wInitialA +00:cf2a wInitialB +00:cf2b wInitialC +00:cf2c wMinutes +00:cf2d wSeconds +00:cf2e wFrames +00:cf2f wCountDown +00:cf31 wCountDownZero +00:cf32 wSelected +00:cf33 wTitleMode +00:cf34 wProfileName +00:cf37 wBankBackup +00:cf3b wRollLine +00:cf3c wInStaffRoll +00:cf3d wBigModeTransfered +00:cf3e wGameOverIgnoreInput +00:cf3f wOuterReps +00:cf40 wInnerReps +00:cf41 wTitlePal +00:cf42 wTarget 00:ff80 hPieceDataBase 00:ff82 hPieceDataBaseFast 00:ff84 hPieceDataOffset diff --git a/src/hiscore.asm b/src/hiscore.asm index dd2541e..504c729 100644 --- a/src/hiscore.asm +++ b/src/hiscore.asm @@ -48,14 +48,278 @@ sHiscoreDefaultData:: SECTION "Hi Score Variables", WRAM0 wTargetHSTable:: ds 2 +wWorkingIdx:: ds 1 +wWorkingPtr:: ds 1 wWorkingCopy:: ds ((HISCORE_ENTRY_COUNT+1)*(HISCORE_ENTRY_SIZE)) +wInsertTarget:: ds 1 SECTION "Hi Score Functions", ROM0 CheckAndAddHiscore:: + ; Get the table + ld a, [wSpeedCurveState] + call InitTargetHSTable + + ; Initialize loop at 0. + xor a, a + ld [wInsertTarget], a + +.checkloop + ; Load the score at position a. + call GetHiScoreEntry + + ; HL is pointing to that score, make BC point to our current score. + ld bc, hScore + + ; First digit + ld a, [bc] + cp a, [hl] + jr c, .notbetter + jr nz, .better + inc bc + inc hl + + ; Second digit + ld a, [bc] + cp a, [hl] + jr c, .notbetter + jr nz, .better + inc bc + inc hl + + ; Third digit + ld a, [bc] + cp a, [hl] + jr c, .notbetter + jr nz, .better + inc bc + inc hl + + ; Fourth digit + ld a, [bc] + cp a, [hl] + jr c, .notbetter + jr nz, .better + inc bc + inc hl + + ; Fifth digit + ld a, [bc] + cp a, [hl] + jr c, .notbetter + jr nz, .better + inc bc + inc hl + + ; Sixth digit + ld a, [bc] + cp a, [hl] + jr c, .notbetter + jr nz, .better + inc bc + inc hl + + ; Seventh digit + ld a, [bc] + cp a, [hl] + jr c, .notbetter + jr nz, .better + inc bc + inc hl + + ; Eighth digit + ld a, [bc] + cp a, [hl] + jr c, .notbetter + jr nz, .better + + ; Loop or return if we didn't make the scores. +.notbetter + ld a, [wInsertTarget] + inc a + ld [wInsertTarget], a + cp a, 10 + ret z + jr .checkloop + +.better + jr InsertHiScore + + + ; Inserts the current score data into the table. + ; Data will be saved and persisted. +InsertHiScore:: + ; Copy the entire table to working data, but one row down. +.copylower + ld a, [wTargetHSTable] + ld e, a + ld a, [wTargetHSTable+1] + ld d, a + ld hl, wWorkingCopy+HISCORE_ENTRY_SIZE + ld bc, (HISCORE_ENTRY_COUNT*HISCORE_ENTRY_SIZE) + call UnsafeMemCopy + + ; Copy the top rows to the working data. +.copyupper + ld a, [wInsertTarget] + cp a, 0 + jr z, .findrow + ld hl, 0 + ld bc, HISCORE_ENTRY_SIZE +: add hl, bc + dec a + jr nz, :- + ld b, h + ld c, l + ld a, [wTargetHSTable] + ld e, a + ld a, [wTargetHSTable+1] + ld d, a + ld hl, wWorkingCopy + call UnsafeMemCopy + + ; Make HL point to the correct location to insert the new score +.findrow + ld hl, wWorkingCopy + ld bc, HISCORE_ENTRY_SIZE + ld a, [wInsertTarget] + cp a, 0 + jr z, .insert +: add hl, bc + dec a + jr nz, :- + + ; And do the insertion +.insert + ldh a, [hScore+0] + ld [hl+], a + ldh a, [hScore+1] + ld [hl+], a + ldh a, [hScore+2] + ld [hl+], a + ldh a, [hScore+3] + ld [hl+], a + ldh a, [hScore+4] + ld [hl+], a + ldh a, [hScore+5] + ld [hl+], a + ldh a, [hScore+6] + ld [hl+], a + ldh a, [hScore+7] + ld [hl+], a + ld a, [wProfileName+0] + ld [hl+], a + ld a, [wProfileName+1] + ld [hl+], a + ld a, [wProfileName+2] + ld [hl+], a + ld a, [wDisplayedGrade] + ld [hl+], a + ld a, [wRNGModeState] + ld [hl+], a + ld a, [wRotModeState] + ld [hl+], a + ld a, [wDropModeState] + ld [hl+], a + ld a, [wAlways20GState] + ld [hl+], a + + ; 16 filler bytes. + xor a, a + REPT 16 + ld [hl+], a + ENDR + + ; And copy it back. +.persist + ld de, wWorkingCopy + ld a, [wTargetHSTable] + ld l, a + ld a, [wTargetHSTable+1] + ld h, a + ld bc, HISCORE_ENTRY_COUNT*HISCORE_ENTRY_SIZE + jp UnsafeMemCopy + + ; Updates the pointers for the current hi score to point to the index in register A. + ; HL will be left pointing at said memory. +GetHiScoreEntry:: + ld [wWorkingIdx], a + ld a, [wTargetHSTable] + ld l, a + ld a, [wTargetHSTable+1] + ld h, a + ld bc, HISCORE_ENTRY_SIZE + ld a, [wWorkingIdx] + cp a, 0 + jr z, .store +: add hl, bc + dec a + jr nz, :- + +.store + ld a, l + ld [wWorkingPtr], a + ld a, h + ld [wWorkingPtr+1], a ret -GetTargetHSTable: + ; Initializes all the pointers to point to the very first score in the table for the game mode passed in + ; register A. +InitTargetHSTable:: + ld b, a + add a, b + add a, b + ld c, a + ld b, 0 + ld hl, .jumps + add hl, bc + jp hl + +.jumps + jp .dmgt + jp .tgm1 + jp .tgm3 + jp .deat + jp .shir + jp .chil + jp .myco + +.dmgt + ld hl, rScoreTableDMGT + jr .store + +.tgm1 + ld hl, rScoreTableTGM1 + jr .store + +.tgm3 + ld hl, rScoreTableTGM3 + jr .store + +.deat + ld hl, rScoreTableDEAT + jr .store + +.shir + ld hl, rScoreTableSHIR + jr .store + +.chil + ld hl, rScoreTableCHIL + jr .store + +.myco + ld hl, rScoreTableMYCO + +.store + ld a, l + ld [wTargetHSTable], a + ld [wWorkingPtr], a + ld a, h + ld [wTargetHSTable+1], a + ld [wWorkingPtr+1], a + xor a, a + ld [wWorkingIdx], a ret ENDC