Add virtual leveling.

This commit is contained in:
Randy Thiemann 2023-11-13 02:18:13 +01:00
parent 865a8b52ce
commit 29eea6a428
7 changed files with 961 additions and 811 deletions

View File

@ -152,6 +152,7 @@ Thanks for playtesting and debugging go to:
- AntonErgo - AntonErgo
- Lindtobias - Lindtobias
- \_Zaphod77\_ - \_Zaphod77\_
- bbbbbr
## License ## License

Binary file not shown.

View File

@ -301,291 +301,299 @@ ROM0 bank #0:
$2663 = UpdateGradeSHIR.disqualify $2663 = UpdateGradeSHIR.disqualify
$2672 = UpdateGradeSHIR.l1000 $2672 = UpdateGradeSHIR.l1000
$2688 = UpdateGradeSHIR.l500 $2688 = UpdateGradeSHIR.l500
SECTION: $269e-$2a16 ($0379 bytes) ["Level Functions"] SECTION: $269e-$2a80 ($03e3 bytes) ["Level Functions"]
$269e = LevelInit $269e = LevelInit
$2703 = SpecialLevelInit $270e = SpecialLevelInit
$2711 = SpecialLevelInit.jumps $271c = SpecialLevelInit.jumps
$2726 = SpecialLevelInit.dmgt $2731 = SpecialLevelInit.dmgt
$272b = SpecialLevelInit.tgm1 $2736 = SpecialLevelInit.tgm1
$2730 = SpecialLevelInit.tgm3 $273b = SpecialLevelInit.tgm3
$2735 = SpecialLevelInit.deat $2740 = SpecialLevelInit.deat
$273a = SpecialLevelInit.shir $2745 = SpecialLevelInit.shir
$273f = SpecialLevelInit.chil $274a = SpecialLevelInit.chil
$2744 = SpecialLevelInit.myco $274f = SpecialLevelInit.myco
$2749 = SpecialLevelInit.loaddata $2754 = SpecialLevelInit.loaddata
$277e = LevelUp $2789 = LevelUp
$27a8 = LevelUp.doit $27b3 = LevelUp.doit
$27ea = LevelUp.checknlevel $27f2 = LevelUp.checknlevel
$281b = !0 $2823 = !0
$2833 = !1 $283b = !1
$283c = LevelUp.bellmaybe $2844 = LevelUp.bellmaybe
$2858 = LevelUp.leveljinglemaybe $2860 = LevelUp.leveljinglemaybe
$2868 = LevelUp.checkspeedup $2870 = AdjustSpeedCurve
$287c = !2 $2876 = AdjustSpeedCurve.docheck
$2889 = !3 $2876 = AdjustSpeedCurve.checkthousands
$289a = !4 $2885 = AdjustSpeedCurve.checkhundreds
$28a7 = DoSpeedUp $2892 = AdjustSpeedCurve.checktens
$28e8 = CheckSpecialLevelConditions $28a1 = AdjustSpeedCurve.checkones
$2919 = CheckSpecialLevelConditions.override $28ac = AdjustSpeedCurveForced
$2934 = CheckSpecialLevelConditions.nooverride $28e9 = AdjustSpeedCurveForced.continue
$293a = CheckSpecialLevelConditions.speciallock $28ee = BuildTrueCLevel
$295e = CheckSpecialLevelConditions.bones $2917 = BuildTrueCLevel.thousands
$2973 = CheckSpecialLevelConditions.enterthebonezone $292c = CheckSpecialLevelConditions
$2978 = CheckSpecialLevelConditions.invis $295d = CheckSpecialLevelConditions.override
$298d = CheckSpecialLevelConditions.vanishoxyaction $2978 = CheckSpecialLevelConditions.nooverride
$2992 = CheckSpecialLevelConditions.killscreen $297e = CheckSpecialLevelConditions.speciallock
$29a3 = CheckSpecialLevelConditions.rip $29a2 = CheckSpecialLevelConditions.bones
$29d3 = CheckSpecialLevelConditions.staffroll $29b7 = CheckSpecialLevelConditions.enterthebonezone
$29e1 = CheckSpecialLevelConditions.justkill $29bc = CheckSpecialLevelConditions.invis
$29f5 = TriggerKillScreen $29d1 = CheckSpecialLevelConditions.vanishoxyaction
SECTION: $2a17-$2ccc ($02b6 bytes) ["Grading Data"] $29d6 = CheckSpecialLevelConditions.killscreen
$2a17 = sTGM1GradeScores $29e7 = CheckSpecialLevelConditions.rip
$2a39 = sTGM3InternalGradeSystem $2a17 = CheckSpecialLevelConditions.staffroll
$2ad9 = sTGM3GradeBoosts $2a25 = CheckSpecialLevelConditions.justkill
$2af8 = sTGM3LevelMultiplier $2a39 = TriggerKillScreen
$2afc = sTGM3BaselineCOOL $2a5b = GetSection
$2b05 = sTGM3REGRETConditions $2a6c = GetSectionBCD
$2b19 = sDMGTGrading $2a75 = SkipSection
$2bcd = sDMGTGaugeLUT SECTION: $2a81-$2d36 ($02b6 bytes) ["Grading Data"]
SECTION: $2ccd-$2f6c ($02a0 bytes) ["SFX Functions"] $2a81 = sTGM1GradeScores
$2ccd = SFXInit $2aa3 = sTGM3InternalGradeSystem
$2cef = SFXPopQueue $2b43 = sTGM3GradeBoosts
$2d04 = SFXPushQueue $2b62 = sTGM3LevelMultiplier
$2d15 = SFXProcessQueue $2b66 = sTGM3BaselineCOOL
$2d26 = !0 $2b6f = sTGM3REGRETConditions
$2d41 = !1 $2b83 = sDMGTGrading
$2d43 = SFXTriggerNoise $2c37 = sDMGTGaugeLUT
$2d50 = !2 SECTION: $2d37-$2fd6 ($02a0 bytes) ["SFX Functions"]
$2d5d = !3 $2d37 = SFXInit
$2d69 = SFXEnqueue $2d59 = SFXPopQueue
$2d7e = SFXEnqueue.findsfx $2d6e = SFXPushQueue
$2d93 = !4 $2d7f = SFXProcessQueue
$2da3 = !5 $2d90 = !0
$2db3 = !6 $2dab = !1
$2dc3 = !7 $2dad = SFXTriggerNoise
$2dd3 = !8 $2dba = !2
$2de3 = !9 $2dc7 = !3
$2df3 = !10 $2dd3 = SFXEnqueue
$2e03 = !11 $2de8 = SFXEnqueue.findsfx
$2e13 = !12 $2dfd = !4
$2e23 = !13 $2e0d = !5
$2e33 = !14 $2e1d = !6
$2e43 = !15 $2e2d = !7
$2e53 = !16 $2e3d = !8
$2e63 = !17 $2e4d = !9
$2e73 = !18 $2e5d = !10
$2e82 = !19 $2e6d = !11
$2e91 = !20 $2e7d = !12
$2ea0 = !21 $2e8d = !13
$2eaf = !22 $2e9d = !14
$2ebd = !23 $2ead = !15
$2ecb = !24 $2ebd = !16
$2ed8 = SFXKill $2ecd = !17
$2f0b = SFXPlayNoise $2edd = !18
$2f16 = SFXPlayNoise.noisereg $2eec = !19
$2f23 = !25 $2efb = !20
$2f2d = SFXPlayNoise.savenoiseplayhead $2f0a = !21
$2f36 = SFXPlay $2f19 = !22
$2f41 = !26 $2f27 = !23
$2f44 = SFXPlay.play $2f35 = !24
$2f50 = SFXPlay.getRegister $2f42 = SFXKill
$2f5a = !27 $2f75 = SFXPlayNoise
$2f64 = SFXPlay.savePlayhead $2f80 = SFXPlayNoise.noisereg
SECTION: $2f6d-$319d ($0231 bytes) ["RNG Functions"] $2f8d = !25
$2f6d = HarvestEntropy $2f97 = SFXPlayNoise.savenoiseplayhead
$2f73 = HarvestEntropy.loop $2fa0 = SFXPlay
$2f94 = RNGInit $2fab = !26
$2fca = !0 $2fae = SFXPlay.play
$2ffa = RNGInit.complexinit $2fba = SFXPlay.getRegister
$3011 = !1 $2fc4 = !27
$302c = ShiftHistory $2fce = SFXPlay.savePlayhead
$3049 = GetNextHellPiece SECTION: $2fd7-$3207 ($0231 bytes) ["RNG Functions"]
$304e = GetNextTGM1Piece $2fd7 = HarvestEntropy
$3051 = !2 $2fdd = HarvestEntropy.loop
$3069 = !3 $2ffe = RNGInit
$306b = GetNextTGM2Piece $3034 = !0
$306e = !4 $3064 = RNGInit.complexinit
$3086 = !5 $307b = !1
$3088 = GetNextNesPiece $3096 = ShiftHistory
$3096 = GetNextTGM3Piece $30b3 = GetNextHellPiece
$3099 = !6 $30b8 = GetNextTGM1Piece
$30bc = !7 $30bb = !2
$30bf = !8 $30d3 = !3
$30cf = !9 $30d5 = GetNextTGM2Piece
$30d9 = !10 $30d8 = !4
$30e7 = !11 $30f0 = !5
$30f6 = !12 $30f2 = GetNextNesPiece
$3102 = !13 $3100 = GetNextTGM3Piece
$310e = !14 $3103 = !6
$311a = !15 $3126 = !7
$3126 = !16 $3129 = !8
$3132 = !17 $3139 = !9
$313e = !18 $3143 = !10
$314d = GetNextPiece $3151 = !11
$315b = GetNextPiece.nextpiecejumps $3160 = !12
$316a = Next35Piece $316c = !13
$316a = !19 $3178 = !14
$3174 = Next7Piece $3184 = !15
$3174 = !20 $3190 = !16
$317e = NextByte $319c = !17
SECTION: $319e-$3365 ($01c8 bytes) ["Hi Score Functions"] $31a8 = !18
$319e = CheckAndAddHiscore $31b7 = GetNextPiece
$31a8 = CheckAndAddHiscore.checkloop $31c5 = GetNextPiece.nextpiecejumps
$31ad = CheckAndAddHiscore.checkgrade $31d4 = Next35Piece
$31b6 = CheckAndAddHiscore.oldgraded $31d4 = !19
$31c5 = CheckAndAddHiscore.oldungraded $31de = Next7Piece
$31cc = CheckAndAddHiscore.checklevel $31de = !20
$31f1 = CheckAndAddHiscore.checkscore $31e8 = NextByte
$3234 = CheckAndAddHiscore.notbetter SECTION: $3208-$33cf ($01c8 bytes) ["Hi Score Functions"]
$3241 = CheckAndAddHiscore.better $3208 = CheckAndAddHiscore
$3243 = InsertHiScore $3212 = CheckAndAddHiscore.checkloop
$3243 = InsertHiScore.copylower $3217 = CheckAndAddHiscore.checkgrade
$3254 = InsertHiScore.copyupper $3220 = CheckAndAddHiscore.oldgraded
$3261 = !0 $322f = CheckAndAddHiscore.oldungraded
$3275 = InsertHiScore.findrow $3236 = CheckAndAddHiscore.checklevel
$3282 = !1 $325b = CheckAndAddHiscore.checkscore
$3286 = InsertHiScore.insert $329e = CheckAndAddHiscore.notbetter
$32df = InsertHiScore.persist $32ab = CheckAndAddHiscore.better
$32f0 = GetHiScoreEntry $32ad = InsertHiScore
$3305 = !2 $32ad = InsertHiScore.copylower
$3309 = GetHiScoreEntry.store $32be = InsertHiScore.copyupper
$3312 = InitTargetHSTable $32cb = !0
$331d = InitTargetHSTable.jumps $32df = InsertHiScore.findrow
$3332 = InitTargetHSTable.dmgt $32ec = !1
$3337 = InitTargetHSTable.tgm1 $32f0 = InsertHiScore.insert
$333c = InitTargetHSTable.tgm3 $3349 = InsertHiScore.persist
$3341 = InitTargetHSTable.deat $335a = GetHiScoreEntry
$3346 = InitTargetHSTable.shir $336f = !2
$334b = InitTargetHSTable.chil $3373 = GetHiScoreEntry.store
$3350 = InitTargetHSTable.myco $337c = InitTargetHSTable
$3353 = InitTargetHSTable.store $3387 = InitTargetHSTable.jumps
SECTION: $3366-$34af ($014a bytes) ["Progress Data"] $339c = InitTargetHSTable.dmgt
$3366 = sProgressData $33a1 = InitTargetHSTable.tgm1
SECTION: $34b0-$35ef ($0140 bytes) ["Hi Score Data"] $33a6 = InitTargetHSTable.tgm3
$34b0 = sHiscoreDefaultData $33ab = InitTargetHSTable.deat
SECTION: $35f0-$3723 ($0134 bytes) ["Input Functions"] $33b0 = InitTargetHSTable.shir
$35f0 = InputInit $33b5 = InitTargetHSTable.chil
$3602 = GetInput $33ba = InitTargetHSTable.myco
$3602 = GetInput.btns $33bd = InitTargetHSTable.store
$360f = GetInput.readA SECTION: $33d0-$3519 ($014a bytes) ["Progress Data"]
$3613 = GetInput.setA $33d0 = sProgressData
$361e = GetInput.clearA SECTION: $351a-$3659 ($0140 bytes) ["Hi Score Data"]
$3621 = GetInput.readB $351a = sHiscoreDefaultData
$3625 = GetInput.setB SECTION: $365a-$378d ($0134 bytes) ["Input Functions"]
$3630 = GetInput.clearB $365a = InputInit
$3633 = GetInput.readSelect $366c = GetInput
$3637 = GetInput.setSelect $366c = GetInput.btns
$3642 = GetInput.clearSelect $3679 = GetInput.readA
$3645 = GetInput.readStart $367d = GetInput.setA
$3649 = GetInput.setStart $3688 = GetInput.clearA
$3654 = GetInput.clearStart $368b = GetInput.readB
$3657 = GetInput.dpad $368f = GetInput.setB
$3664 = GetInput.readUp $369a = GetInput.clearB
$3668 = GetInput.setUp $369d = GetInput.readSelect
$3673 = GetInput.clearUp $36a1 = GetInput.setSelect
$3676 = GetInput.readDown $36ac = GetInput.clearSelect
$367a = GetInput.setDown $36af = GetInput.readStart
$3685 = GetInput.clearDown $36b3 = GetInput.setStart
$3688 = GetInput.readLeft $36be = GetInput.clearStart
$368c = GetInput.setLeft $36c1 = GetInput.dpad
$3697 = GetInput.clearLeft $36ce = GetInput.readUp
$369a = GetInput.readRight $36d2 = GetInput.setUp
$369e = GetInput.setRight $36dd = GetInput.clearUp
$36a9 = GetInput.clearRight $36e0 = GetInput.readDown
$36ac = GetInput.priorities $36e4 = GetInput.setDown
$36b9 = GetInput.jumps $36ef = GetInput.clearDown
$36c8 = GetInput.dlru $36f2 = GetInput.readLeft
$36db = GetInput.ulrd $36f6 = GetInput.setLeft
$36ee = GetInput.lrud $3701 = GetInput.clearLeft
$36fb = GetInput.udlr $3704 = GetInput.readRight
$3708 = GetInput.zeroud $3708 = GetInput.setRight
$370e = GetInput.zerolr $3713 = GetInput.clearRight
$3714 = GetInput.zerolrd $3716 = GetInput.priorities
$371c = GetInput.zerolru $3723 = GetInput.jumps
SECTION: $3724-$3803 ($00e0 bytes) ["Score Functions"] $3732 = GetInput.dlru
$3724 = ScoreInit $3745 = GetInput.ulrd
$374c = IncreaseScore $3758 = GetInput.lrud
$3784 = IncreaseScore.doConvert $3765 = GetInput.udlr
$3786 = !0 $3772 = GetInput.zeroud
$379c = IncreaseScore.carry $3778 = GetInput.zerolr
$379e = IncreaseScore.postConvert $377e = GetInput.zerolrd
$37ab = !1 $3786 = GetInput.zerolru
$37b2 = IncreaseScore.preAddDigit SECTION: $378e-$386d ($00e0 bytes) ["Score Functions"]
$37da = IncreaseScore.addDigit $378e = ScoreInit
$37f0 = IncreaseScore.nextDigit $37b6 = IncreaseScore
SECTION: $3804-$38ce ($00cb bytes) ["Title Function Trampolines"] $37ee = IncreaseScore.doConvert
$3804 = SwitchToTitle $37f0 = !0
$380d = TitleEventLoopHandler $3806 = IncreaseScore.carry
$3817 = TitleVBlankHandler $3808 = IncreaseScore.postConvert
$3821 = PersistLevel $3815 = !1
$382f = DrawSpeedMain $381c = IncreaseScore.preAddDigit
$387f = DrawSpeedSettings $3844 = IncreaseScore.addDigit
SECTION: $38cf-$3994 ($00c6 bytes) ["Time Functions"] $385a = IncreaseScore.nextDigit
$38cf = TimeInit SECTION: $386e-$3938 ($00cb bytes) ["Title Function Trampolines"]
$38ef = StartCountdown $386e = SwitchToTitle
$38fd = ResetGameTime $3877 = TitleEventLoopHandler
$3908 = CheckTorikan $3881 = TitleVBlankHandler
$391f = CheckTorikan.failure $388b = PersistLevel
$3921 = CheckTorikan.success $3899 = DrawSpeedMain
$3924 = HandleTimers $38e9 = DrawSpeedSettings
$394a = HandleTimers.reduce SECTION: $3939-$39fe ($00c6 bytes) ["Time Functions"]
$3957 = HandleTimers.clock $3939 = TimeInit
$3971 = HandleTimers.go $3959 = StartCountdown
SECTION: $3995-$3a46 ($00b2 bytes) ["Progress Functions"] $3967 = ResetGameTime
$3995 = SetProgress $3972 = CheckTorikan
$39a0 = SetProgress.loop $3989 = CheckTorikan.failure
$39a4 = SetProgress.correct $398b = CheckTorikan.success
$39cb = SetProgress.wvr_u1 $398e = HandleTimers
$39d7 = SetProgress.wvr_u2 $39b4 = HandleTimers.reduce
$39e5 = SetProgress.wvr_u3 $39c1 = HandleTimers.clock
$39f1 = SetProgress.wvr_u4 $39db = HandleTimers.go
$39ff = SetProgress.wvr_u5 SECTION: $39ff-$3ab0 ($00b2 bytes) ["Progress Functions"]
$3a0b = SetProgress.wvr_u6 $39ff = SetProgress
$3a19 = SetProgress.wvr_u7 $3a0a = SetProgress.loop
$3a25 = SetProgress.wvr_u8 $3a0e = SetProgress.correct
$3a33 = SetProgress.wvr_u9 $3a35 = SetProgress.wvr_u1
$3a3f = SetProgress.wvr_u10 $3a41 = SetProgress.wvr_u2
SECTION: $3a47-$3ad8 ($0092 bytes) ["Code Entry Point"] $3a4f = SetProgress.wvr_u3
$3a47 = Main $3a5b = SetProgress.wvr_u4
$3a70 = Main.notgbc $3a69 = SetProgress.wvr_u5
$3a76 = Main.wvr_u1 $3a75 = SetProgress.wvr_u6
$3a9d = EventLoop $3a83 = SetProgress.wvr_u7
$3ab3 = EventLoop.eventloopjumps $3a8f = SetProgress.wvr_u8
$3abc = EventLoopPostHandler $3a9d = SetProgress.wvr_u9
$3abe = EventLoopPostHandler.wvb_u2 $3aa9 = SetProgress.wvr_u10
$3ad0 = EventLoopPostHandler.vblankjumps SECTION: $3ab1-$3b48 ($0098 bytes) ["Code Entry Point"]
SECTION: $3ad9-$3b2a ($0052 bytes) ["Tile Functions"] $3ab1 = Main
$3ad9 = LoadTitleTiles $3ada = Main.notgbc
$3af7 = LoadGameplayTiles $3ae0 = Main.wvr_u1
$3b0d = LoadGameplayTiles.gbc $3b0d = EventLoop
$3b1c = LoadGameplayTiles.dmg $3b23 = EventLoop.eventloopjumps
SECTION: $3b2b-$3b66 ($003c bytes) ["Time Data"] $3b2c = EventLoopPostHandler
$3b2b = sFramesToCS $3b2e = EventLoopPostHandler.wvb_u2
SECTION: $3b67-$3b94 ($002e bytes) ["Memory Functions"] $3b40 = EventLoopPostHandler.vblankjumps
$3b67 = UnsafeMemCopy SECTION: $3b49-$3b9a ($0052 bytes) ["Tile Functions"]
$3b70 = SafeMemCopy.wvr_u1 $3b49 = LoadTitleTiles
$3b70 = SafeMemCopy $3b67 = LoadGameplayTiles
$3b7f = UnsafeMemSet $3b7d = LoadGameplayTiles.gbc
$3b87 = SafeMemSet $3b8c = LoadGameplayTiles.dmg
$3b87 = SafeMemSet.wvr_u2 SECTION: $3b9b-$3bd6 ($003c bytes) ["Time Data"]
SECTION: $3b95-$3bba ($0026 bytes) ["Gameplay Function Trampolines"] $3b9b = sFramesToCS
$3b95 = SwitchToGameplay SECTION: $3bd7-$3c04 ($002e bytes) ["Memory Functions"]
$3b9e = SwitchToGameplayBig $3bd7 = UnsafeMemCopy
$3ba7 = GamePlayEventLoopHandler $3be0 = SafeMemCopy.wvr_u1
$3bb1 = GamePlayBigEventLoopHandler $3be0 = SafeMemCopy
SECTION: $3bbb-$3bdf ($0025 bytes) ["Interrupt Initialization Functions"] $3bef = UnsafeMemSet
$3bbb = EnableScreenSquish $3bf7 = SafeMemSet
$3bd5 = DisableScreenSquish $3bf7 = SafeMemSet.wvr_u2
SECTION: $3be0-$3c01 ($0022 bytes) ["OAM Functions"] SECTION: $3c05-$3c2a ($0026 bytes) ["Gameplay Function Trampolines"]
$3be0 = CopyOAMHandler $3c05 = SwitchToGameplay
$3bec = ClearOAM $3c0e = SwitchToGameplayBig
SECTION: $3c02-$3c10 ($000f bytes) ["Banking Functions"] $3c17 = GamePlayEventLoopHandler
$3c02 = BankingInit $3c21 = GamePlayBigEventLoopHandler
SECTION: $3c11-$3c1a ($000a bytes) ["OAM DMA Code"] SECTION: $3c2b-$3c4f ($0025 bytes) ["Interrupt Initialization Functions"]
$3c11 = OAMDMA $3c2b = EnableScreenSquish
$3c1b = OAMDMAEnd $3c45 = DisableScreenSquish
EMPTY: $3c1b-$3fff ($03e5 bytes) SECTION: $3c50-$3c71 ($0022 bytes) ["OAM Functions"]
TOTAL EMPTY: $03f0 bytes $3c50 = CopyOAMHandler
$3c5c = ClearOAM
SECTION: $3c72-$3c80 ($000f bytes) ["Banking Functions"]
$3c72 = BankingInit
SECTION: $3c81-$3c8a ($000a bytes) ["OAM DMA Code"]
$3c81 = OAMDMA
$3c8b = OAMDMAEnd
EMPTY: $3c8b-$3fff ($0375 bytes)
TOTAL EMPTY: $0380 bytes
ROMX bank #1: ROMX bank #1:
SECTION: $4000-$4007 ($0008 bytes) ["Bank ID BANK_OTHER"] SECTION: $4000-$4007 ($0008 bytes) ["Bank ID BANK_OTHER"]
@ -3118,7 +3126,7 @@ WRAM0 bank #0:
$ceeb = wTGM3Droughts $ceeb = wTGM3Droughts
$cef2 = wTGM3GeneratedIdx $cef2 = wTGM3GeneratedIdx
$cef3 = wTGM3WorstDroughtIdx $cef3 = wTGM3WorstDroughtIdx
SECTION: $cef4-$cf06 ($0013 bytes) ["Level Variables"] SECTION: $cef4-$cf07 ($0014 bytes) ["Level Variables"]
$cef4 = wBoneActivationLevel $cef4 = wBoneActivationLevel
$cef6 = wInvisActivationLevel $cef6 = wInvisActivationLevel
$cef8 = wKillScreenActivationLevel $cef8 = wKillScreenActivationLevel
@ -3132,166 +3140,167 @@ WRAM0 bank #0:
$cf04 = wLockLevel $cf04 = wLockLevel
$cf05 = wShouldGoStaffRoll $cf05 = wShouldGoStaffRoll
$cf06 = wNoMoreLocks $cf06 = wNoMoreLocks
SECTION: $cf07-$cf18 ($0012 bytes) ["Grade Variables"] $cf07 = wSkippedSectionsBCD
$cf07 = wDecayRate SECTION: $cf08-$cf19 ($0012 bytes) ["Grade Variables"]
$cf08 = wGradePoints $cf08 = wDecayRate
$cf09 = wInternalGrade $cf09 = wGradePoints
$cf0a = wDisplayedGrade $cf0a = wInternalGrade
$cf0b = wEffectTimer $cf0b = wDisplayedGrade
$cf0c = wRankingDisqualified $cf0c = wEffectTimer
$cf0d = wDecayCounter $cf0d = wRankingDisqualified
$cf0e = wGradeGauge $cf0e = wDecayCounter
$cf0f = wSMult $cf0f = wGradeGauge
$cf10 = wDMult $cf10 = wSMult
$cf11 = wTMult $cf11 = wDMult
$cf12 = wSRate $cf12 = wTMult
$cf13 = wDRate $cf13 = wSRate
$cf14 = wTRate $cf14 = wDRate
$cf15 = wQRate $cf15 = wTRate
$cf16 = wTGM1level300RequirementMet $cf16 = wQRate
$cf17 = wTGM1level500RequirementMet $cf17 = wTGM1level300RequirementMet
$cf18 = wTGM1level999RequirementMet $cf18 = wTGM1level500RequirementMet
SECTION: $cf19-$cf22 ($000a bytes) ["Progress Variables"] $cf19 = wTGM1level999RequirementMet
$cf19 = wProgress0B1 SECTION: $cf1a-$cf23 ($000a bytes) ["Progress Variables"]
$cf1a = wProgress0B2 $cf1a = wProgress0B1
$cf1b = wProgress1B1 $cf1b = wProgress0B2
$cf1c = wProgress1B2 $cf1c = wProgress1B1
$cf1d = wProgress2B1 $cf1d = wProgress1B2
$cf1e = wProgress2B2 $cf1e = wProgress2B1
$cf1f = wProgress3B1 $cf1f = wProgress2B2
$cf20 = wProgress3B2 $cf20 = wProgress3B1
$cf21 = wProgress4B1 $cf21 = wProgress3B2
$cf22 = wProgress4B2 $cf22 = wProgress4B1
SECTION: $cf23-$cf2b ($0009 bytes) ["Globals"] $cf23 = wProgress4B2
$cf23 = wSwapABState SECTION: $cf24-$cf2c ($0009 bytes) ["Globals"]
$cf24 = wRNGModeState $cf24 = wSwapABState
$cf25 = wRotModeState $cf25 = wRNGModeState
$cf26 = wDropModeState $cf26 = wRotModeState
$cf27 = wSpeedCurveState $cf27 = wDropModeState
$cf28 = wAlways20GState $cf28 = wSpeedCurveState
$cf29 = wInitialA $cf29 = wAlways20GState
$cf2a = wInitialB $cf2a = wInitialA
$cf2b = wInitialC $cf2b = wInitialB
SECTION: $cf2c-$cf32 ($0007 bytes) ["Title Variables"] $cf2c = wInitialC
$cf2c = wSelected SECTION: $cf2d-$cf33 ($0007 bytes) ["Title Variables"]
$cf2d = wTitleMode $cf2d = wSelected
$cf2e = wProfileName $cf2e = wTitleMode
$cf31 = wDisplayingScoreMode $cf2f = wProfileName
$cf32 = wScoreFlipTimer $cf32 = wDisplayingScoreMode
SECTION: $cf33-$cf38 ($0006 bytes) ["Time Variables"] $cf33 = wScoreFlipTimer
$cf33 = wMinutes SECTION: $cf34-$cf39 ($0006 bytes) ["Time Variables"]
$cf34 = wSeconds $cf34 = wMinutes
$cf35 = wFrames $cf35 = wSeconds
$cf36 = wCountDown $cf36 = wFrames
$cf38 = wCountDownZero $cf37 = wCountDown
SECTION: $cf39-$cf3c ($0004 bytes) ["Banking Variables"] $cf39 = wCountDownZero
$cf39 = wBankBackup SECTION: $cf3a-$cf3d ($0004 bytes) ["Banking Variables"]
SECTION: $cf3d-$cf40 ($0004 bytes) ["Gameplay Variables"] $cf3a = wBankBackup
$cf3d = wRollLine SECTION: $cf3e-$cf41 ($0004 bytes) ["Gameplay Variables"]
$cf3e = wInStaffRoll $cf3e = wRollLine
$cf3f = wBigModeTransfered $cf3f = wInStaffRoll
$cf40 = wGameOverIgnoreInput $cf40 = wBigModeTransfered
SECTION: $cf41-$cf43 ($0003 bytes) ["GBC Variables"] $cf41 = wGameOverIgnoreInput
$cf41 = wOuterReps SECTION: $cf42-$cf44 ($0003 bytes) ["GBC Variables"]
$cf42 = wInnerReps $cf42 = wOuterReps
$cf43 = wTitlePal $cf43 = wInnerReps
SECTION: $cf44-$cf44 ($0001 byte) ["SRAM Variables"] $cf44 = wTitlePal
$cf44 = wTarget SECTION: $cf45-$cf45 ($0001 byte) ["SRAM Variables"]
EMPTY: $cf45-$cfff ($00bb bytes) $cf45 = wTarget
TOTAL EMPTY: $00bb bytes EMPTY: $cf46-$cfff ($00ba bytes)
TOTAL EMPTY: $00ba bytes
HRAM bank #0: HRAM bank #0:
SECTION: $ff80-$ff9a ($001b bytes) ["High Field Variables"] SECTION: $ff80-$ff9c ($001d bytes) ["High Level Variables"]
$ff80 = hPieceDataBase $ff80 = hCurrentDAS
$ff82 = hPieceDataBaseFast $ff81 = hCurrentARE
$ff84 = hPieceDataOffset $ff82 = hCurrentLineARE
$ff85 = hCurrentLockDelayRemaining $ff83 = hCurrentLockDelay
$ff86 = hGrounded $ff84 = hCurrentLineClearDelay
$ff87 = hWantedTile $ff85 = hCurrentIntegerGravity
$ff88 = hWantedG $ff86 = hCurrentFractionalGravity
$ff89 = hActualG $ff87 = hNextSpeedUp
$ff8a = hGravityCtr $ff89 = hSpeedCurvePtr
$ff8b = hWantX $ff8b = hStartSpeed
$ff8c = hYPosAtStartOfFrame $ff8d = hRequiresLineClear
$ff8d = hWantRotation $ff8e = hLevel
$ff8e = hRemainingDelay $ff90 = hCLevel
$ff8f = hClearedLines $ff94 = hNLevel
$ff93 = hLineClearCt $ff98 = hTrueCLevel
$ff94 = hComboCt $ff9c = hPrevHundreds
$ff95 = hLockDelayForce SECTION: $ff9d-$ffb7 ($001b bytes) ["High Field Variables"]
$ff96 = hDownFrames $ff9d = hPieceDataBase
$ff97 = hAwardDownBonus $ff9f = hPieceDataBaseFast
$ff98 = hStalePiece $ffa1 = hPieceDataOffset
$ff99 = hBravo $ffa2 = hCurrentLockDelayRemaining
$ff9a = hShouldLockIfGrounded $ffa3 = hGrounded
SECTION: $ff9b-$ffb5 ($001b bytes) ["High Level Variables"] $ffa4 = hWantedTile
$ff9b = hCurrentDAS $ffa5 = hWantedG
$ff9c = hCurrentARE $ffa6 = hActualG
$ff9d = hCurrentLineARE $ffa7 = hGravityCtr
$ff9e = hCurrentLockDelay $ffa8 = hWantX
$ff9f = hCurrentLineClearDelay $ffa9 = hYPosAtStartOfFrame
$ffa0 = hCurrentIntegerGravity $ffaa = hWantRotation
$ffa1 = hCurrentFractionalGravity $ffab = hRemainingDelay
$ffa2 = hNextSpeedUp $ffac = hClearedLines
$ffa4 = hSpeedCurvePtr $ffb0 = hLineClearCt
$ffa6 = hStartSpeed $ffb1 = hComboCt
$ffa8 = hRequiresLineClear $ffb2 = hLockDelayForce
$ffa9 = hLevel $ffb3 = hDownFrames
$ffab = hCLevel $ffb4 = hAwardDownBonus
$ffaf = hNLevel $ffb5 = hStalePiece
$ffb5 = hPrevHundreds $ffb6 = hBravo
SECTION: $ffb6-$ffc7 ($0012 bytes) ["Score Variables"] $ffb7 = hShouldLockIfGrounded
$ffb6 = hScore SECTION: $ffb8-$ffc9 ($0012 bytes) ["Score Variables"]
$ffbe = hScoreIncrement $ffb8 = hScore
$ffc0 = hScoreIncrementBCD $ffc0 = hScoreIncrement
SECTION: $ffc8-$ffd2 ($000b bytes) ["High RNG Variables"] $ffc2 = hScoreIncrementBCD
$ffc8 = hRNGSeed SECTION: $ffca-$ffd4 ($000b bytes) ["High RNG Variables"]
$ffcc = hPieceHistory $ffca = hRNGSeed
$ffd0 = hNextPiece $ffce = hPieceHistory
$ffd1 = hUpcomingPiece1 $ffd2 = hNextPiece
$ffd2 = hUpcomingPiece2 $ffd3 = hUpcomingPiece1
SECTION: $ffd3-$ffdc ($000a bytes) ["High Gameplay Variables"] $ffd4 = hUpcomingPiece2
$ffd3 = hCurrentPiece SECTION: $ffd5-$ffde ($000a bytes) ["High Gameplay Variables"]
$ffd4 = hCurrentPieceX $ffd5 = hCurrentPiece
$ffd5 = hCurrentPieceY $ffd6 = hCurrentPieceX
$ffd6 = hCurrentPieceRotationState $ffd7 = hCurrentPieceY
$ffd7 = hHeldPiece $ffd8 = hCurrentPieceRotationState
$ffd8 = hHoldSpent $ffd9 = hHeldPiece
$ffd9 = hMode $ffda = hHoldSpent
$ffda = hModeCounter $ffdb = hMode
$ffdb = hPrePause $ffdc = hModeCounter
$ffdc = hRequestedJingle $ffdd = hPrePause
SECTION: $ffdd-$ffe6 ($000a bytes) ["OAM DMA"] $ffde = hRequestedJingle
$ffdd = hOAMDMA SECTION: $ffdf-$ffe8 ($000a bytes) ["OAM DMA"]
$ffe3 = !0 $ffdf = hOAMDMA
SECTION: $ffe7-$ffef ($0009 bytes) ["High Input Variables"] $ffe5 = !0
$ffe7 = hUpState SECTION: $ffe9-$fff1 ($0009 bytes) ["High Input Variables"]
$ffe8 = hDownState $ffe9 = hUpState
$ffe9 = hLeftState $ffea = hDownState
$ffea = hRightState $ffeb = hLeftState
$ffeb = hAState $ffec = hRightState
$ffec = hBState $ffed = hAState
$ffed = hStartState $ffee = hBState
$ffee = hSelectState $ffef = hStartState
$ffef = hFilterMode $fff0 = hSelectState
SECTION: $fff0-$fff8 ($0009 bytes) ["High SFX Variables"] $fff1 = hFilterMode
$fff0 = hPlayhead SECTION: $fff2-$fffa ($0009 bytes) ["High SFX Variables"]
$fff2 = hCurrentlyPlaying $fff2 = hPlayhead
$fff3 = hPlayQueue $fff4 = hCurrentlyPlaying
$fff7 = hNoisePlayhead $fff5 = hPlayQueue
SECTION: $fff9-$fffa ($0002 bytes) ["High Time Variables"] $fff9 = hNoisePlayhead
$fff9 = hFrameCtr SECTION: $fffb-$fffc ($0002 bytes) ["High Time Variables"]
$fffa = hEvenFrame $fffb = hFrameCtr
SECTION: $fffb-$fffb ($0001 byte) ["High Globals"] $fffc = hEvenFrame
$fffb = hGameState SECTION: $fffd-$fffd ($0001 byte) ["High Globals"]
SECTION: $fffc-$fffc ($0001 byte) ["High Interrupt Variables"] $fffd = hGameState
$fffc = hLCDCCtr SECTION: $fffe-$fffe ($0001 byte) ["High Interrupt Variables"]
EMPTY: $fffd-$fffe ($0002 bytes) $fffe = hLCDCCtr
TOTAL EMPTY: $0002 bytes TOTAL EMPTY: $0000 bytes
SUMMARY: SUMMARY:
ROM0: 15376 bytes used / 1008 free ROM0: 15488 bytes used / 896 free
ROMX: 68697 bytes used / 29607 free in 6 banks ROMX: 68697 bytes used / 29607 free in 6 banks
SRAM: 2951 bytes used / 5241 free in 1 bank SRAM: 2951 bytes used / 5241 free in 1 bank
WRAM0: 3909 bytes used / 187 free WRAM0: 3910 bytes used / 186 free
HRAM: 125 bytes used / 2 free HRAM: 127 bytes used / 0 free

Binary file not shown.

View File

@ -262,208 +262,219 @@
00:2672 UpdateGradeSHIR.l1000 00:2672 UpdateGradeSHIR.l1000
00:2688 UpdateGradeSHIR.l500 00:2688 UpdateGradeSHIR.l500
00:269e LevelInit 00:269e LevelInit
00:2703 SpecialLevelInit 00:270e SpecialLevelInit
00:2711 SpecialLevelInit.jumps 00:271c SpecialLevelInit.jumps
00:2726 SpecialLevelInit.dmgt 00:2731 SpecialLevelInit.dmgt
00:272b SpecialLevelInit.tgm1 00:2736 SpecialLevelInit.tgm1
00:2730 SpecialLevelInit.tgm3 00:273b SpecialLevelInit.tgm3
00:2735 SpecialLevelInit.deat 00:2740 SpecialLevelInit.deat
00:273a SpecialLevelInit.shir 00:2745 SpecialLevelInit.shir
00:273f SpecialLevelInit.chil 00:274a SpecialLevelInit.chil
00:2744 SpecialLevelInit.myco 00:274f SpecialLevelInit.myco
00:2749 SpecialLevelInit.loaddata 00:2754 SpecialLevelInit.loaddata
00:277e LevelUp 00:2789 LevelUp
00:27a8 LevelUp.doit 00:27b3 LevelUp.doit
00:27ea LevelUp.checknlevel 00:27f2 LevelUp.checknlevel
00:283c LevelUp.bellmaybe 00:2844 LevelUp.bellmaybe
00:2858 LevelUp.leveljinglemaybe 00:2860 LevelUp.leveljinglemaybe
00:2868 LevelUp.checkspeedup 00:2870 AdjustSpeedCurve
00:28a7 DoSpeedUp 00:2876 AdjustSpeedCurve.docheck
00:28e8 CheckSpecialLevelConditions 00:2876 AdjustSpeedCurve.checkthousands
00:2919 CheckSpecialLevelConditions.override 00:2885 AdjustSpeedCurve.checkhundreds
00:2934 CheckSpecialLevelConditions.nooverride 00:2892 AdjustSpeedCurve.checktens
00:293a CheckSpecialLevelConditions.speciallock 00:28a1 AdjustSpeedCurve.checkones
00:295e CheckSpecialLevelConditions.bones 00:28ac AdjustSpeedCurveForced
00:2973 CheckSpecialLevelConditions.enterthebonezone 00:28e9 AdjustSpeedCurveForced.continue
00:2978 CheckSpecialLevelConditions.invis 00:28ee BuildTrueCLevel
00:298d CheckSpecialLevelConditions.vanishoxyaction 00:2917 BuildTrueCLevel.thousands
00:2992 CheckSpecialLevelConditions.killscreen 00:292c CheckSpecialLevelConditions
00:29a3 CheckSpecialLevelConditions.rip 00:295d CheckSpecialLevelConditions.override
00:29d3 CheckSpecialLevelConditions.staffroll 00:2978 CheckSpecialLevelConditions.nooverride
00:29e1 CheckSpecialLevelConditions.justkill 00:297e CheckSpecialLevelConditions.speciallock
00:29f5 TriggerKillScreen 00:29a2 CheckSpecialLevelConditions.bones
00:2a17 sTGM1GradeScores 00:29b7 CheckSpecialLevelConditions.enterthebonezone
00:2a39 sTGM3InternalGradeSystem 00:29bc CheckSpecialLevelConditions.invis
00:2ad9 sTGM3GradeBoosts 00:29d1 CheckSpecialLevelConditions.vanishoxyaction
00:2af8 sTGM3LevelMultiplier 00:29d6 CheckSpecialLevelConditions.killscreen
00:2afc sTGM3BaselineCOOL 00:29e7 CheckSpecialLevelConditions.rip
00:2b05 sTGM3REGRETConditions 00:2a17 CheckSpecialLevelConditions.staffroll
00:2b19 sDMGTGrading 00:2a25 CheckSpecialLevelConditions.justkill
00:2bcd sDMGTGaugeLUT 00:2a39 TriggerKillScreen
00:2ccd SFXInit 00:2a5b GetSection
00:2cef SFXPopQueue 00:2a6c GetSectionBCD
00:2d04 SFXPushQueue 00:2a75 SkipSection
00:2d15 SFXProcessQueue 00:2a81 sTGM1GradeScores
00:2d43 SFXTriggerNoise 00:2aa3 sTGM3InternalGradeSystem
00:2d69 SFXEnqueue 00:2b43 sTGM3GradeBoosts
00:2d7e SFXEnqueue.findsfx 00:2b62 sTGM3LevelMultiplier
00:2ed8 SFXKill 00:2b66 sTGM3BaselineCOOL
00:2f0b SFXPlayNoise 00:2b6f sTGM3REGRETConditions
00:2f16 SFXPlayNoise.noisereg 00:2b83 sDMGTGrading
00:2f2d SFXPlayNoise.savenoiseplayhead 00:2c37 sDMGTGaugeLUT
00:2f36 SFXPlay 00:2d37 SFXInit
00:2f44 SFXPlay.play 00:2d59 SFXPopQueue
00:2f50 SFXPlay.getRegister 00:2d6e SFXPushQueue
00:2f64 SFXPlay.savePlayhead 00:2d7f SFXProcessQueue
00:2f6d HarvestEntropy 00:2dad SFXTriggerNoise
00:2f73 HarvestEntropy.loop 00:2dd3 SFXEnqueue
00:2f94 RNGInit 00:2de8 SFXEnqueue.findsfx
00:2ffa RNGInit.complexinit 00:2f42 SFXKill
00:302c ShiftHistory 00:2f75 SFXPlayNoise
00:3049 GetNextHellPiece 00:2f80 SFXPlayNoise.noisereg
00:304e GetNextTGM1Piece 00:2f97 SFXPlayNoise.savenoiseplayhead
00:306b GetNextTGM2Piece 00:2fa0 SFXPlay
00:3088 GetNextNesPiece 00:2fae SFXPlay.play
00:3096 GetNextTGM3Piece 00:2fba SFXPlay.getRegister
00:314d GetNextPiece 00:2fce SFXPlay.savePlayhead
00:315b GetNextPiece.nextpiecejumps 00:2fd7 HarvestEntropy
00:316a Next35Piece 00:2fdd HarvestEntropy.loop
00:3174 Next7Piece 00:2ffe RNGInit
00:317e NextByte 00:3064 RNGInit.complexinit
00:319e CheckAndAddHiscore 00:3096 ShiftHistory
00:31a8 CheckAndAddHiscore.checkloop 00:30b3 GetNextHellPiece
00:31ad CheckAndAddHiscore.checkgrade 00:30b8 GetNextTGM1Piece
00:31b6 CheckAndAddHiscore.oldgraded 00:30d5 GetNextTGM2Piece
00:31c5 CheckAndAddHiscore.oldungraded 00:30f2 GetNextNesPiece
00:31cc CheckAndAddHiscore.checklevel 00:3100 GetNextTGM3Piece
00:31f1 CheckAndAddHiscore.checkscore 00:31b7 GetNextPiece
00:3234 CheckAndAddHiscore.notbetter 00:31c5 GetNextPiece.nextpiecejumps
00:3241 CheckAndAddHiscore.better 00:31d4 Next35Piece
00:3243 InsertHiScore 00:31de Next7Piece
00:3243 InsertHiScore.copylower 00:31e8 NextByte
00:3254 InsertHiScore.copyupper 00:3208 CheckAndAddHiscore
00:3275 InsertHiScore.findrow 00:3212 CheckAndAddHiscore.checkloop
00:3286 InsertHiScore.insert 00:3217 CheckAndAddHiscore.checkgrade
00:32df InsertHiScore.persist 00:3220 CheckAndAddHiscore.oldgraded
00:32f0 GetHiScoreEntry 00:322f CheckAndAddHiscore.oldungraded
00:3309 GetHiScoreEntry.store 00:3236 CheckAndAddHiscore.checklevel
00:3312 InitTargetHSTable 00:325b CheckAndAddHiscore.checkscore
00:331d InitTargetHSTable.jumps 00:329e CheckAndAddHiscore.notbetter
00:3332 InitTargetHSTable.dmgt 00:32ab CheckAndAddHiscore.better
00:3337 InitTargetHSTable.tgm1 00:32ad InsertHiScore
00:333c InitTargetHSTable.tgm3 00:32ad InsertHiScore.copylower
00:3341 InitTargetHSTable.deat 00:32be InsertHiScore.copyupper
00:3346 InitTargetHSTable.shir 00:32df InsertHiScore.findrow
00:334b InitTargetHSTable.chil 00:32f0 InsertHiScore.insert
00:3350 InitTargetHSTable.myco 00:3349 InsertHiScore.persist
00:3353 InitTargetHSTable.store 00:335a GetHiScoreEntry
00:3366 sProgressData 00:3373 GetHiScoreEntry.store
00:34b0 sHiscoreDefaultData 00:337c InitTargetHSTable
00:35f0 InputInit 00:3387 InitTargetHSTable.jumps
00:3602 GetInput 00:339c InitTargetHSTable.dmgt
00:3602 GetInput.btns 00:33a1 InitTargetHSTable.tgm1
00:360f GetInput.readA 00:33a6 InitTargetHSTable.tgm3
00:3613 GetInput.setA 00:33ab InitTargetHSTable.deat
00:361e GetInput.clearA 00:33b0 InitTargetHSTable.shir
00:3621 GetInput.readB 00:33b5 InitTargetHSTable.chil
00:3625 GetInput.setB 00:33ba InitTargetHSTable.myco
00:3630 GetInput.clearB 00:33bd InitTargetHSTable.store
00:3633 GetInput.readSelect 00:33d0 sProgressData
00:3637 GetInput.setSelect 00:351a sHiscoreDefaultData
00:3642 GetInput.clearSelect 00:365a InputInit
00:3645 GetInput.readStart 00:366c GetInput
00:3649 GetInput.setStart 00:366c GetInput.btns
00:3654 GetInput.clearStart 00:3679 GetInput.readA
00:3657 GetInput.dpad 00:367d GetInput.setA
00:3664 GetInput.readUp 00:3688 GetInput.clearA
00:3668 GetInput.setUp 00:368b GetInput.readB
00:3673 GetInput.clearUp 00:368f GetInput.setB
00:3676 GetInput.readDown 00:369a GetInput.clearB
00:367a GetInput.setDown 00:369d GetInput.readSelect
00:3685 GetInput.clearDown 00:36a1 GetInput.setSelect
00:3688 GetInput.readLeft 00:36ac GetInput.clearSelect
00:368c GetInput.setLeft 00:36af GetInput.readStart
00:3697 GetInput.clearLeft 00:36b3 GetInput.setStart
00:369a GetInput.readRight 00:36be GetInput.clearStart
00:369e GetInput.setRight 00:36c1 GetInput.dpad
00:36a9 GetInput.clearRight 00:36ce GetInput.readUp
00:36ac GetInput.priorities 00:36d2 GetInput.setUp
00:36b9 GetInput.jumps 00:36dd GetInput.clearUp
00:36c8 GetInput.dlru 00:36e0 GetInput.readDown
00:36db GetInput.ulrd 00:36e4 GetInput.setDown
00:36ee GetInput.lrud 00:36ef GetInput.clearDown
00:36fb GetInput.udlr 00:36f2 GetInput.readLeft
00:3708 GetInput.zeroud 00:36f6 GetInput.setLeft
00:370e GetInput.zerolr 00:3701 GetInput.clearLeft
00:3714 GetInput.zerolrd 00:3704 GetInput.readRight
00:371c GetInput.zerolru 00:3708 GetInput.setRight
00:3724 ScoreInit 00:3713 GetInput.clearRight
00:374c IncreaseScore 00:3716 GetInput.priorities
00:3784 IncreaseScore.doConvert 00:3723 GetInput.jumps
00:379c IncreaseScore.carry 00:3732 GetInput.dlru
00:379e IncreaseScore.postConvert 00:3745 GetInput.ulrd
00:37b2 IncreaseScore.preAddDigit 00:3758 GetInput.lrud
00:37da IncreaseScore.addDigit 00:3765 GetInput.udlr
00:37f0 IncreaseScore.nextDigit 00:3772 GetInput.zeroud
00:3804 SwitchToTitle 00:3778 GetInput.zerolr
00:380d TitleEventLoopHandler 00:377e GetInput.zerolrd
00:3817 TitleVBlankHandler 00:3786 GetInput.zerolru
00:3821 PersistLevel 00:378e ScoreInit
00:382f DrawSpeedMain 00:37b6 IncreaseScore
00:387f DrawSpeedSettings 00:37ee IncreaseScore.doConvert
00:38cf TimeInit 00:3806 IncreaseScore.carry
00:38ef StartCountdown 00:3808 IncreaseScore.postConvert
00:38fd ResetGameTime 00:381c IncreaseScore.preAddDigit
00:3908 CheckTorikan 00:3844 IncreaseScore.addDigit
00:391f CheckTorikan.failure 00:385a IncreaseScore.nextDigit
00:3921 CheckTorikan.success 00:386e SwitchToTitle
00:3924 HandleTimers 00:3877 TitleEventLoopHandler
00:394a HandleTimers.reduce 00:3881 TitleVBlankHandler
00:3957 HandleTimers.clock 00:388b PersistLevel
00:3971 HandleTimers.go 00:3899 DrawSpeedMain
00:3995 SetProgress 00:38e9 DrawSpeedSettings
00:39a0 SetProgress.loop 00:3939 TimeInit
00:39a4 SetProgress.correct 00:3959 StartCountdown
00:39cb SetProgress.wvr_u1 00:3967 ResetGameTime
00:39d7 SetProgress.wvr_u2 00:3972 CheckTorikan
00:39e5 SetProgress.wvr_u3 00:3989 CheckTorikan.failure
00:39f1 SetProgress.wvr_u4 00:398b CheckTorikan.success
00:39ff SetProgress.wvr_u5 00:398e HandleTimers
00:3a0b SetProgress.wvr_u6 00:39b4 HandleTimers.reduce
00:3a19 SetProgress.wvr_u7 00:39c1 HandleTimers.clock
00:3a25 SetProgress.wvr_u8 00:39db HandleTimers.go
00:3a33 SetProgress.wvr_u9 00:39ff SetProgress
00:3a3f SetProgress.wvr_u10 00:3a0a SetProgress.loop
00:3a47 Main 00:3a0e SetProgress.correct
00:3a70 Main.notgbc 00:3a35 SetProgress.wvr_u1
00:3a76 Main.wvr_u1 00:3a41 SetProgress.wvr_u2
00:3a9d EventLoop 00:3a4f SetProgress.wvr_u3
00:3ab3 EventLoop.eventloopjumps 00:3a5b SetProgress.wvr_u4
00:3abc EventLoopPostHandler 00:3a69 SetProgress.wvr_u5
00:3abe EventLoopPostHandler.wvb_u2 00:3a75 SetProgress.wvr_u6
00:3ad0 EventLoopPostHandler.vblankjumps 00:3a83 SetProgress.wvr_u7
00:3ad9 LoadTitleTiles 00:3a8f SetProgress.wvr_u8
00:3af7 LoadGameplayTiles 00:3a9d SetProgress.wvr_u9
00:3b0d LoadGameplayTiles.gbc 00:3aa9 SetProgress.wvr_u10
00:3b1c LoadGameplayTiles.dmg 00:3ab1 Main
00:3b2b sFramesToCS 00:3ada Main.notgbc
00:3b67 UnsafeMemCopy 00:3ae0 Main.wvr_u1
00:3b70 SafeMemCopy.wvr_u1 00:3b0d EventLoop
00:3b70 SafeMemCopy 00:3b23 EventLoop.eventloopjumps
00:3b7f UnsafeMemSet 00:3b2c EventLoopPostHandler
00:3b87 SafeMemSet 00:3b2e EventLoopPostHandler.wvb_u2
00:3b87 SafeMemSet.wvr_u2 00:3b40 EventLoopPostHandler.vblankjumps
00:3b95 SwitchToGameplay 00:3b49 LoadTitleTiles
00:3b9e SwitchToGameplayBig 00:3b67 LoadGameplayTiles
00:3ba7 GamePlayEventLoopHandler 00:3b7d LoadGameplayTiles.gbc
00:3bb1 GamePlayBigEventLoopHandler 00:3b8c LoadGameplayTiles.dmg
00:3bbb EnableScreenSquish 00:3b9b sFramesToCS
00:3bd5 DisableScreenSquish 00:3bd7 UnsafeMemCopy
00:3be0 CopyOAMHandler 00:3be0 SafeMemCopy.wvr_u1
00:3bec ClearOAM 00:3be0 SafeMemCopy
00:3c02 BankingInit 00:3bef UnsafeMemSet
00:3c11 OAMDMA 00:3bf7 SafeMemSet
00:3c1b OAMDMAEnd 00:3bf7 SafeMemSet.wvr_u2
00:3c05 SwitchToGameplay
00:3c0e SwitchToGameplayBig
00:3c17 GamePlayEventLoopHandler
00:3c21 GamePlayBigEventLoopHandler
00:3c2b EnableScreenSquish
00:3c45 DisableScreenSquish
00:3c50 CopyOAMHandler
00:3c5c ClearOAM
00:3c72 BankingInit
00:3c81 OAMDMA
00:3c8b OAMDMAEnd
01:4008 sDMGTSpeedCurve 01:4008 sDMGTSpeedCurve
01:4203 sDMGTSpeedCurveEnd 01:4203 sDMGTSpeedCurveEnd
01:4205 sDMGTSpeedCurveSpecialData 01:4205 sDMGTSpeedCurveSpecialData
@ -2793,132 +2804,134 @@
00:cf04 wLockLevel 00:cf04 wLockLevel
00:cf05 wShouldGoStaffRoll 00:cf05 wShouldGoStaffRoll
00:cf06 wNoMoreLocks 00:cf06 wNoMoreLocks
00:cf07 wDecayRate 00:cf07 wSkippedSectionsBCD
00:cf08 wGradePoints 00:cf08 wDecayRate
00:cf09 wInternalGrade 00:cf09 wGradePoints
00:cf0a wDisplayedGrade 00:cf0a wInternalGrade
00:cf0b wEffectTimer 00:cf0b wDisplayedGrade
00:cf0c wRankingDisqualified 00:cf0c wEffectTimer
00:cf0d wDecayCounter 00:cf0d wRankingDisqualified
00:cf0e wGradeGauge 00:cf0e wDecayCounter
00:cf0f wSMult 00:cf0f wGradeGauge
00:cf10 wDMult 00:cf10 wSMult
00:cf11 wTMult 00:cf11 wDMult
00:cf12 wSRate 00:cf12 wTMult
00:cf13 wDRate 00:cf13 wSRate
00:cf14 wTRate 00:cf14 wDRate
00:cf15 wQRate 00:cf15 wTRate
00:cf16 wTGM1level300RequirementMet 00:cf16 wQRate
00:cf17 wTGM1level500RequirementMet 00:cf17 wTGM1level300RequirementMet
00:cf18 wTGM1level999RequirementMet 00:cf18 wTGM1level500RequirementMet
00:cf19 wProgress0B1 00:cf19 wTGM1level999RequirementMet
00:cf1a wProgress0B2 00:cf1a wProgress0B1
00:cf1b wProgress1B1 00:cf1b wProgress0B2
00:cf1c wProgress1B2 00:cf1c wProgress1B1
00:cf1d wProgress2B1 00:cf1d wProgress1B2
00:cf1e wProgress2B2 00:cf1e wProgress2B1
00:cf1f wProgress3B1 00:cf1f wProgress2B2
00:cf20 wProgress3B2 00:cf20 wProgress3B1
00:cf21 wProgress4B1 00:cf21 wProgress3B2
00:cf22 wProgress4B2 00:cf22 wProgress4B1
00:cf23 wSwapABState 00:cf23 wProgress4B2
00:cf24 wRNGModeState 00:cf24 wSwapABState
00:cf25 wRotModeState 00:cf25 wRNGModeState
00:cf26 wDropModeState 00:cf26 wRotModeState
00:cf27 wSpeedCurveState 00:cf27 wDropModeState
00:cf28 wAlways20GState 00:cf28 wSpeedCurveState
00:cf29 wInitialA 00:cf29 wAlways20GState
00:cf2a wInitialB 00:cf2a wInitialA
00:cf2b wInitialC 00:cf2b wInitialB
00:cf2c wSelected 00:cf2c wInitialC
00:cf2d wTitleMode 00:cf2d wSelected
00:cf2e wProfileName 00:cf2e wTitleMode
00:cf31 wDisplayingScoreMode 00:cf2f wProfileName
00:cf32 wScoreFlipTimer 00:cf32 wDisplayingScoreMode
00:cf33 wMinutes 00:cf33 wScoreFlipTimer
00:cf34 wSeconds 00:cf34 wMinutes
00:cf35 wFrames 00:cf35 wSeconds
00:cf36 wCountDown 00:cf36 wFrames
00:cf38 wCountDownZero 00:cf37 wCountDown
00:cf39 wBankBackup 00:cf39 wCountDownZero
00:cf3d wRollLine 00:cf3a wBankBackup
00:cf3e wInStaffRoll 00:cf3e wRollLine
00:cf3f wBigModeTransfered 00:cf3f wInStaffRoll
00:cf40 wGameOverIgnoreInput 00:cf40 wBigModeTransfered
00:cf41 wOuterReps 00:cf41 wGameOverIgnoreInput
00:cf42 wInnerReps 00:cf42 wOuterReps
00:cf43 wTitlePal 00:cf43 wInnerReps
00:cf44 wTarget 00:cf44 wTitlePal
00:ff80 hPieceDataBase 00:cf45 wTarget
00:ff82 hPieceDataBaseFast 00:ff80 hCurrentDAS
00:ff84 hPieceDataOffset 00:ff81 hCurrentARE
00:ff85 hCurrentLockDelayRemaining 00:ff82 hCurrentLineARE
00:ff86 hGrounded 00:ff83 hCurrentLockDelay
00:ff87 hWantedTile 00:ff84 hCurrentLineClearDelay
00:ff88 hWantedG 00:ff85 hCurrentIntegerGravity
00:ff89 hActualG 00:ff86 hCurrentFractionalGravity
00:ff8a hGravityCtr 00:ff87 hNextSpeedUp
00:ff8b hWantX 00:ff89 hSpeedCurvePtr
00:ff8c hYPosAtStartOfFrame 00:ff8b hStartSpeed
00:ff8d hWantRotation 00:ff8d hRequiresLineClear
00:ff8e hRemainingDelay 00:ff8e hLevel
00:ff8f hClearedLines 00:ff90 hCLevel
00:ff93 hLineClearCt 00:ff94 hNLevel
00:ff94 hComboCt 00:ff98 hTrueCLevel
00:ff95 hLockDelayForce 00:ff9c hPrevHundreds
00:ff96 hDownFrames 00:ff9d hPieceDataBase
00:ff97 hAwardDownBonus 00:ff9f hPieceDataBaseFast
00:ff98 hStalePiece 00:ffa1 hPieceDataOffset
00:ff99 hBravo 00:ffa2 hCurrentLockDelayRemaining
00:ff9a hShouldLockIfGrounded 00:ffa3 hGrounded
00:ff9b hCurrentDAS 00:ffa4 hWantedTile
00:ff9c hCurrentARE 00:ffa5 hWantedG
00:ff9d hCurrentLineARE 00:ffa6 hActualG
00:ff9e hCurrentLockDelay 00:ffa7 hGravityCtr
00:ff9f hCurrentLineClearDelay 00:ffa8 hWantX
00:ffa0 hCurrentIntegerGravity 00:ffa9 hYPosAtStartOfFrame
00:ffa1 hCurrentFractionalGravity 00:ffaa hWantRotation
00:ffa2 hNextSpeedUp 00:ffab hRemainingDelay
00:ffa4 hSpeedCurvePtr 00:ffac hClearedLines
00:ffa6 hStartSpeed 00:ffb0 hLineClearCt
00:ffa8 hRequiresLineClear 00:ffb1 hComboCt
00:ffa9 hLevel 00:ffb2 hLockDelayForce
00:ffab hCLevel 00:ffb3 hDownFrames
00:ffaf hNLevel 00:ffb4 hAwardDownBonus
00:ffb5 hPrevHundreds 00:ffb5 hStalePiece
00:ffb6 hScore 00:ffb6 hBravo
00:ffbe hScoreIncrement 00:ffb7 hShouldLockIfGrounded
00:ffc0 hScoreIncrementBCD 00:ffb8 hScore
00:ffc8 hRNGSeed 00:ffc0 hScoreIncrement
00:ffcc hPieceHistory 00:ffc2 hScoreIncrementBCD
00:ffd0 hNextPiece 00:ffca hRNGSeed
00:ffd1 hUpcomingPiece1 00:ffce hPieceHistory
00:ffd2 hUpcomingPiece2 00:ffd2 hNextPiece
00:ffd3 hCurrentPiece 00:ffd3 hUpcomingPiece1
00:ffd4 hCurrentPieceX 00:ffd4 hUpcomingPiece2
00:ffd5 hCurrentPieceY 00:ffd5 hCurrentPiece
00:ffd6 hCurrentPieceRotationState 00:ffd6 hCurrentPieceX
00:ffd7 hHeldPiece 00:ffd7 hCurrentPieceY
00:ffd8 hHoldSpent 00:ffd8 hCurrentPieceRotationState
00:ffd9 hMode 00:ffd9 hHeldPiece
00:ffda hModeCounter 00:ffda hHoldSpent
00:ffdb hPrePause 00:ffdb hMode
00:ffdc hRequestedJingle 00:ffdc hModeCounter
00:ffdd hOAMDMA 00:ffdd hPrePause
00:ffe7 hUpState 00:ffde hRequestedJingle
00:ffe8 hDownState 00:ffdf hOAMDMA
00:ffe9 hLeftState 00:ffe9 hUpState
00:ffea hRightState 00:ffea hDownState
00:ffeb hAState 00:ffeb hLeftState
00:ffec hBState 00:ffec hRightState
00:ffed hStartState 00:ffed hAState
00:ffee hSelectState 00:ffee hBState
00:ffef hFilterMode 00:ffef hStartState
00:fff0 hPlayhead 00:fff0 hSelectState
00:fff2 hCurrentlyPlaying 00:fff1 hFilterMode
00:fff3 hPlayQueue 00:fff2 hPlayhead
00:fff7 hNoisePlayhead 00:fff4 hCurrentlyPlaying
00:fff9 hFrameCtr 00:fff5 hPlayQueue
00:fffa hEvenFrame 00:fff9 hNoisePlayhead
00:fffb hGameState 00:fffb hFrameCtr
00:fffc hLCDCCtr 00:fffc hEvenFrame
00:fffd hGameState
00:fffe hLCDCCtr

View File

@ -36,7 +36,8 @@ hStartSpeed:: ds 2
hRequiresLineClear:: ds 1 hRequiresLineClear:: ds 1
hLevel:: ds 2 hLevel:: ds 2
hCLevel:: ds 4 hCLevel:: ds 4
hNLevel:: ds 6 ; The extra 2 bytes will be clobbered by the sprite drawing functions. hNLevel:: ds 4
hTrueCLevel:: ds 4
hPrevHundreds:: ds 1 hPrevHundreds:: ds 1
SECTION "Level Variables", WRAM0 SECTION "Level Variables", WRAM0
@ -53,6 +54,7 @@ wKillScreenActive:: ds 1
wLockLevel:: ds 1 wLockLevel:: ds 1
wShouldGoStaffRoll:: ds 1 wShouldGoStaffRoll:: ds 1
wNoMoreLocks:: ds 1 wNoMoreLocks:: ds 1
wSkippedSectionsBCD:: ds 1
SECTION "Level Functions", ROM0 SECTION "Level Functions", ROM0
@ -70,6 +72,7 @@ LevelInit::
ld [wLockLevel], a ld [wLockLevel], a
ld [wShouldGoStaffRoll], a ld [wShouldGoStaffRoll], a
ld [wNoMoreLocks], a ld [wNoMoreLocks], a
ld [wSkippedSectionsBCD], a
ldh a, [hStartSpeed] ldh a, [hStartSpeed]
ld l, a ld l, a
@ -81,18 +84,22 @@ LevelInit::
ld b, a ld b, a
and a, $0F and a, $0F
ldh [hCLevel+3], a ldh [hCLevel+3], a
ldh [hTrueCLevel+3], a
ld a, b ld a, b
swap a swap a
and a, $0F and a, $0F
ldh [hCLevel+2], a ldh [hCLevel+2], a
ldh [hTrueCLevel+2], a
ld a, [hl+] ld a, [hl+]
ld b, a ld b, a
and a, $0F and a, $0F
ldh [hCLevel+1], a ldh [hCLevel+1], a
ldh [hTrueCLevel+1], a
ld a, b ld a, b
swap a swap a
and a, $0F and a, $0F
ldh [hCLevel], a ldh [hCLevel], a
ldh [hTrueCLevel], a
ld a, l ld a, l
ldh [hSpeedCurvePtr], a ldh [hSpeedCurvePtr], a
@ -126,10 +133,11 @@ LevelInit::
; Get special data. ; Get special data.
call SpecialLevelInit call SpecialLevelInit
; Restore the bank before returning. ; Restore the bank to keep the stack balanced.
rst RSTRestoreBank rst RSTRestoreBank
jp DoSpeedUp ; Get the speed curve
jp AdjustSpeedCurveForced
SpecialLevelInit: SpecialLevelInit:
@ -300,8 +308,7 @@ LevelUp::
ldh [hLevel], a ldh [hLevel], a
ld a, h ld a, h
ldh [hLevel+1], a ldh [hLevel+1], a
call DoSpeedUp jp AdjustSpeedCurve
jp CheckSpecialLevelConditions
.checknlevel .checknlevel
; Make wNLevel make sense. ; Make wNLevel make sense.
@ -322,10 +329,10 @@ LevelUp::
ld hl, hCLevel+2 ld hl, hCLevel+2
ld a, [hl+] ld a, [hl+]
cp a, 9 cp a, 9
jr nz, .checkspeedup jr nz, AdjustSpeedCurve
ld a, [hl] ld a, [hl]
cp a, 8 cp a, 8
jr nz, .checkspeedup jr nz, AdjustSpeedCurve
ld a, $FF ld a, $FF
ldh [hRequiresLineClear], a ldh [hRequiresLineClear], a
call SFXKill call SFXKill
@ -365,7 +372,7 @@ LevelUp::
jr nz, .leveljinglemaybe jr nz, .leveljinglemaybe
ld a, [wNoMoreLocks] ld a, [wNoMoreLocks]
cp a, $FF cp a, $FF
jr z, .checkspeedup jr z, AdjustSpeedCurve
ld a, $FF ld a, $FF
ldh [hRequiresLineClear], a ldh [hRequiresLineClear], a
call SFXKill call SFXKill
@ -377,52 +384,71 @@ LevelUp::
ld b, a ld b, a
ldh a, [hCLevel+1] ldh a, [hCLevel+1]
cp a, b cp a, b
jr z, .checkspeedup jr z, AdjustSpeedCurve
call SFXKill call SFXKill
ld a, SFX_LEVELUP ld a, SFX_LEVELUP
call SFXEnqueue call SFXEnqueue
; This falls through to AdjustSpeedCurve, this is intended.
.checkspeedup
AdjustSpeedCurve:
call BuildTrueCLevel
call CheckSpecialLevelConditions call CheckSpecialLevelConditions
.docheck
.checkthousands
; Get the thousands level of the next speed up.
ldh a, [hNextSpeedUp] ldh a, [hNextSpeedUp]
and a, $F0
jr z, :+
swap a swap a
and a, $0F and a, $0F
ld hl, hCLevel
cp a, [hl]
jr z, :+
ret nc
: ldh a, [hNextSpeedUp] ; Compare to ours.
ld hl, hTrueCLevel+CLEVEL_THOUSANDS
cp a, [hl]
jr z, .checkhundreds ; Equal? We need to check deeper.
jr c, AdjustSpeedCurveForced ; Ours higher? We need to increase.
ret ; Ours lower? We're done.
.checkhundreds
; Get the hundreds level of the next speed up.
ldh a, [hNextSpeedUp]
and a, $0F and a, $0F
jr z, :+
ld hl, hCLevel+1
cp a, [hl]
jr z, :+
ret nc
: ldh a, [hNextSpeedUp+1] ; Compare to ours.
and a, $F0 ld hl, hCLevel+CLEVEL_HUNDREDS
jr z, :+ cp a, [hl]
jr z, .checktens ; Equal? We need to check deeper.
jr c, AdjustSpeedCurveForced ; Ours higher? We need to increase.
ret ; Ours lower? We're done.
.checktens
; Get the tens level of the next speed up.
ldh a, [hNextSpeedUp+1]
swap a swap a
and a, $0F and a, $0F
ld hl, hCLevel+2
cp a, [hl]
jr z, :+
ret nc
: ldh a, [hNextSpeedUp+1] ; Compare to ours.
ld hl, hCLevel+CLEVEL_TENS
cp a, [hl]
jr z, .checkones ; Equal? We need to check deeper.
jr c, AdjustSpeedCurveForced ; Ours higher? We need to increase.
ret ; Ours lower? We're done.
.checkones
; Get the ones level of the next speed up.
ldh a, [hNextSpeedUp+1]
and a, $0F and a, $0F
jr z, DoSpeedUp
ld hl, hCLevel+3 ; Compare to ours.
ld hl, hCLevel+CLEVEL_ONES
cp a, [hl] cp a, [hl]
jr z, DoSpeedUp jr c, AdjustSpeedCurveForced ; Ours higher? We need to increase.
ret nc ; This can fall through to the next function here. This is intentional. ret nz ; Ours lower? We're done.
; Equal? We need to increase.
; Iterates over the speed curve and loads the new constants. AdjustSpeedCurveForced:
DoSpeedUp: ; Update all data to the next speed curve data.
; Bank to speed curve data. ; Bank to speed curve data.
ld b, BANK_OTHER ld b, BANK_OTHER
rst RSTSwitchBank rst RSTSwitchBank
@ -468,12 +494,72 @@ DoSpeedUp:
; Do we want to force 20G? ; Do we want to force 20G?
ld a, [wAlways20GState] ld a, [wAlways20GState]
cp a, 0 cp a, 0
jp z, RSTRestoreBank jr z, .continue
ld a, 20 ld a, 20
ldh [hCurrentIntegerGravity], a ldh [hCurrentIntegerGravity], a
ld a, $00 ld a, $00
ldh [hCurrentFractionalGravity], a ldh [hCurrentFractionalGravity], a
jp RSTRestoreBank
.continue
call RSTRestoreBank
; Jump back, we may need to increase more than once.
jr AdjustSpeedCurve.docheck
; Builds an internal level that is the displayed level skipped an amount of sections ahead.
BuildTrueCLevel:
; Except in TGM3 mode, this will always just be the same as the real level, so check for the most common case and bail.
ld a, [wSkippedSectionsBCD]
cp a, 0
ret z
; Otherwise, to the thing.
ld de, hCLevel
ld hl, hTrueCLevel
ld bc, 4
call UnsafeMemCopy
; Amount of steps to increment hundreds.
ld a, [wSkippedSectionsBCD]
and a, $0F
ld b, a
; Increase hundreds
ldh a, [hTrueCLevel+CLEVEL_HUNDREDS]
add a, b
ldh [hTrueCLevel+CLEVEL_HUNDREDS], a
; Is hundreds overflowing?
cp a, $0A
jr c, .thousands
; Yes, it was, so decrease by 10, and increment thousands.
sub a, 10
ldh [hTrueCLevel+CLEVEL_HUNDREDS], a
ld hl, hTrueCLevel+CLEVEL_THOUSANDS
inc [hl]
.thousands
; Amount of steps to increment thousands.
ld a, [wSkippedSectionsBCD]
swap a
and a, $0F
ld b, a
; Increase thousands
ldh a, [hTrueCLevel+CLEVEL_THOUSANDS]
add a, b
ldh [hTrueCLevel+CLEVEL_THOUSANDS], a
; This may cause a nonsense number. Fix it if that happens.
cp a, $0A
ret c
ld a, $09
ldh [hTrueCLevel+CLEVEL_THOUSANDS], a
ret
CheckSpecialLevelConditions: CheckSpecialLevelConditions:
@ -729,4 +815,43 @@ TriggerKillScreen::
ret ret
; Gets a 0-indexed section number, returned in A as binary.
; Levels 0000-0099 would return 0, levels 0100-0199 would return 1, ... levels 9900-9999 would return 99.
GetSection::
; Load thousands.
ldh a, [hCLevel+CLEVEL_THOUSANDS]
; Multiply by 10, which is equal to multiply by 8 + multiply by 2
ld b, a
sla b
sla a
sla a
sla a
add a, b
; Add hundreds.
ld hl, hCLevel+CLEVEL_HUNDREDS
add a, [hl]
ret
; Gets the current section, but as BCD in A.
GetSectionBCD::
ldh a, [hCLevel+CLEVEL_THOUSANDS]
swap a
ld hl, hCLevel+CLEVEL_HUNDREDS
or a, [hl]
ret
; Will skip the virtual level forward by 100 levels.
; This will NOT affect the displayed level, nor will it affect scoring.
; It will only make it so the internal speed pointer will be ahead by N*100 levels.
SkipSection::
ld a, [wSkippedSectionsBCD]
add a, $01
daa ; Yes, this is the rare case where this instruction is useful!
ld [wSkippedSectionsBCD], a
jp AdjustSpeedCurve
ENDC ENDC

View File

@ -99,6 +99,8 @@ Main::
call BankingInit call BankingInit
xor a, a xor a, a
ld [wKillScreenActive], a
ld [wSkippedSectionsBCD], a
ldh [hMode], a ldh [hMode], a
; Switch to title state. ; Switch to title state.