Add level locking.

This commit is contained in:
Randy Thiemann 2023-11-09 00:10:25 +01:00
parent c9e5eafde6
commit 41f78c511f
6 changed files with 583 additions and 534 deletions

Binary file not shown.

View File

@ -174,7 +174,7 @@ ROM0 bank #0:
$1c84 = GradeRendering.mo $1c84 = GradeRendering.mo
$1c8a = GradeRendering.mm $1c8a = GradeRendering.mm
$1c90 = GradeRendering.gmgrade $1c90 = GradeRendering.gmgrade
SECTION: $1c9b-$2018 ($037e bytes) ["Grading Functions"] SECTION: $1c9b-$205a ($03c0 bytes) ["Grading Functions"]
$1c9b = GradeInit $1c9b = GradeInit
$1cc6 = GradeInit.grade9start $1cc6 = GradeInit.grade9start
$1ccb = GradeInit.end $1ccb = GradeInit.end
@ -188,281 +188,283 @@ ROM0 bank #0:
$1d49 = DrawGradeProgressDMGT $1d49 = DrawGradeProgressDMGT
$1d55 = !0 $1d55 = !0
$1d64 = UpdateGradeDMGT $1d64 = UpdateGradeDMGT
$1d82 = UpdateGradeDMGT.checklineclears $1d95 = UpdateGradeDMGT.checklineclears
$1d9c = UpdateGradeDMGT.clearrate $1daf = UpdateGradeDMGT.clearrate
$1dad = UpdateGradeDMGT.combomult $1dc0 = UpdateGradeDMGT.combomult
$1dba = UpdateGradeDMGT.combo10 $1dcd = UpdateGradeDMGT.combo10
$1dcb = UpdateGradeDMGT.combo5 $1dde = UpdateGradeDMGT.combo5
$1ddc = UpdateGradeDMGT.combo1 $1def = UpdateGradeDMGT.combo1
$1deb = UpdateGradeDMGT.prelevel $1dfe = UpdateGradeDMGT.prelevel
$1dfa = UpdateGradeDMGT.single $1e0d = UpdateGradeDMGT.single
$1e0a = UpdateGradeDMGT.double $1e1d = UpdateGradeDMGT.double
$1e1b = UpdateGradeDMGT.adddonce $1e2e = UpdateGradeDMGT.adddonce
$1e1f = UpdateGradeDMGT.triple $1e32 = UpdateGradeDMGT.triple
$1e30 = UpdateGradeDMGT.addtonce $1e43 = UpdateGradeDMGT.addtonce
$1e34 = UpdateGradeDMGT.tetris $1e47 = UpdateGradeDMGT.tetris
$1e38 = UpdateGradeDMGT.levelmult $1e4b = UpdateGradeDMGT.levelmult
$1e50 = UpdateGradeDMGT.mult5 $1e63 = UpdateGradeDMGT.mult5
$1e57 = UpdateGradeDMGT.mult4 $1e6a = UpdateGradeDMGT.mult4
$1e5d = UpdateGradeDMGT.mult3 $1e70 = UpdateGradeDMGT.mult3
$1e62 = UpdateGradeDMGT.mult2 $1e75 = UpdateGradeDMGT.mult2
$1e66 = UpdateGradeDMGT.mult1 $1e79 = UpdateGradeDMGT.mult1
$1e67 = UpdateGradeDMGT.processgrade $1e7a = UpdateGradeDMGT.processgrade
$1e90 = UpdateGradeDMGT.increasegrademaybe $1ea3 = UpdateGradeDMGT.increasegrademaybe
$1eb4 = UpdateGradeDMGT.gotgm $1ec7 = UpdateGradeDMGT.gotgm
$1ec2 = DecayGradeDMGT $1ed5 = DecayGradeDMGT
$1ee6 = DecayGradeDMGT.nodecay $1ef9 = DecayGradeDMGT.nodecay
$1eed = DecayGradeDMGT.decay $1f00 = DecayGradeDMGT.decay
$1efb = UpdateGradeTGM1 $1f0e = UpdateGradeTGM1
$1f05 = UpdateGradeTGM1.trygradeup $1f18 = UpdateGradeTGM1.trygradeup
$1f1f = UpdateGradeTGM1.increasegrade $1f32 = UpdateGradeTGM1.increasegrade
$1f34 = UpdateGradeTGM1.skipjingle $1f47 = UpdateGradeTGM1.skipjingle
$1f41 = UpdateGradeTGM1.maybegm $1f54 = UpdateGradeTGM1.maybegm
$1f5a = UpdateGradeDEAT $1f6d = UpdateGradeDEAT
$1f66 = UpdateGradeDEAT.notgm $1f79 = UpdateGradeDEAT.notgm
$1f82 = UpdateGradeDEAT.notm $1f95 = UpdateGradeDEAT.notm
$1fa5 = UpdateGradeDEAT.disqualify $1fb8 = UpdateGradeDEAT.disqualify
$1fae = UpdateGradeSHIR $1fce = UpdateGradeSHIR
$1ff1 = UpdateGradeSHIR.s5torikan $2011 = UpdateGradeSHIR.s5torikan
$2001 = UpdateGradeSHIR.s10torikan $2021 = UpdateGradeSHIR.s10torikan
$2010 = UpdateGradeSHIR.disqualify $2030 = UpdateGradeSHIR.disqualify
SECTION: $2019-$22ce ($02b6 bytes) ["Grading Data"] $203f = UpdateGradeSHIR.l1000
$2019 = sTGM1GradeScores $204d = UpdateGradeSHIR.l500
$203b = sTGM3InternalGradeSystem SECTION: $205b-$2310 ($02b6 bytes) ["Grading Data"]
$20db = sTGM3GradeBoosts $205b = sTGM1GradeScores
$20fa = sTGM3LevelMultiplier $207d = sTGM3InternalGradeSystem
$20fe = sTGM3BaselineCOOL $211d = sTGM3GradeBoosts
$2107 = sTGM3REGRETConditions $213c = sTGM3LevelMultiplier
$211b = sDMGTGrading $2140 = sTGM3BaselineCOOL
$21cf = sDMGTGaugeLUT $2149 = sTGM3REGRETConditions
SECTION: $22cf-$2568 ($029a bytes) ["Level Functions"] $215d = sDMGTGrading
$22cf = LevelInit $2211 = sDMGTGaugeLUT
$232b = SpecialLevelInit SECTION: $2311-$25b3 ($02a3 bytes) ["Level Functions"]
$2339 = SpecialLevelInit.jumps $2311 = LevelInit
$234e = SpecialLevelInit.dmgt $2370 = SpecialLevelInit
$2353 = SpecialLevelInit.tgm1 $237e = SpecialLevelInit.jumps
$2358 = SpecialLevelInit.tgm3 $2393 = SpecialLevelInit.dmgt
$235d = SpecialLevelInit.deat $2398 = SpecialLevelInit.tgm1
$2362 = SpecialLevelInit.shir $239d = SpecialLevelInit.tgm3
$2367 = SpecialLevelInit.chil $23a2 = SpecialLevelInit.deat
$236c = SpecialLevelInit.myco $23a7 = SpecialLevelInit.shir
$2371 = SpecialLevelInit.loaddata $23ac = SpecialLevelInit.chil
$238a = LevelUp $23b1 = SpecialLevelInit.myco
$23ae = LevelUp.doit $23b6 = SpecialLevelInit.loaddata
$23f8 = LevelUp.checknlevel $23cf = LevelUp
$2426 = !0 $23f9 = LevelUp.doit
$243e = !1 $2443 = LevelUp.checknlevel
$2447 = LevelUp.bellmaybe $2471 = !0
$2459 = LevelUp.leveljinglemaybe $2489 = !1
$2466 = LevelUp.checkspeedup $2492 = LevelUp.bellmaybe
$247a = !2 $24a4 = LevelUp.leveljinglemaybe
$2487 = !3 $24b1 = LevelUp.checkspeedup
$2498 = !4 $24c5 = !2
$24a5 = DoSpeedUp $24d2 = !3
$24e6 = CheckSpecialLevelConditions $24e3 = !4
$24ec = CheckSpecialLevelConditions.bones $24f0 = DoSpeedUp
$2501 = CheckSpecialLevelConditions.enterthebonezone $2531 = CheckSpecialLevelConditions
$2506 = CheckSpecialLevelConditions.invis $2537 = CheckSpecialLevelConditions.bones
$251b = CheckSpecialLevelConditions.vanishoxyaction $254c = CheckSpecialLevelConditions.enterthebonezone
$2520 = CheckSpecialLevelConditions.killscreen $2551 = CheckSpecialLevelConditions.invis
$2531 = CheckSpecialLevelConditions.rip $2566 = CheckSpecialLevelConditions.vanishoxyaction
$254a = TriggerKillScreen $256b = CheckSpecialLevelConditions.killscreen
SECTION: $2569-$2802 ($029a bytes) ["SFX Functions"] $257c = CheckSpecialLevelConditions.rip
$2569 = SFXInit $2595 = TriggerKillScreen
$258b = SFXPopQueue SECTION: $25b4-$284d ($029a bytes) ["SFX Functions"]
$25a0 = SFXPushQueue $25b4 = SFXInit
$25b1 = SFXProcessQueue $25d6 = SFXPopQueue
$25c2 = !0 $25eb = SFXPushQueue
$25dd = !1 $25fc = SFXProcessQueue
$25df = SFXTriggerNoise $260d = !0
$25ec = !2 $2628 = !1
$25f9 = !3 $262a = SFXTriggerNoise
$2605 = SFXEnqueue $2637 = !2
$261a = SFXEnqueue.findsfx $2644 = !3
$262f = !4 $2650 = SFXEnqueue
$263f = !5 $2665 = SFXEnqueue.findsfx
$264f = !6 $267a = !4
$265f = !7 $268a = !5
$266f = !8 $269a = !6
$267f = !9 $26aa = !7
$268f = !10 $26ba = !8
$269f = !11 $26ca = !9
$26af = !12 $26da = !10
$26bf = !13 $26ea = !11
$26cf = !14 $26fa = !12
$26df = !15 $270a = !13
$26ef = !16 $271a = !14
$26ff = !17 $272a = !15
$270f = !18 $273a = !16
$271e = !19 $274a = !17
$272d = !20 $275a = !18
$273c = !21 $2769 = !19
$274b = !22 $2778 = !20
$2759 = !23 $2787 = !21
$2767 = !24 $2796 = !22
$2774 = SFXKill $27a4 = !23
$27a1 = SFXPlayNoise $27b2 = !24
$27ac = SFXPlayNoise.noisereg $27bf = SFXKill
$27b9 = !25 $27ec = SFXPlayNoise
$27c3 = SFXPlayNoise.savenoiseplayhead $27f7 = SFXPlayNoise.noisereg
$27cc = SFXPlay $2804 = !25
$27d7 = !26 $280e = SFXPlayNoise.savenoiseplayhead
$27da = SFXPlay.play $2817 = SFXPlay
$27e6 = SFXPlay.getRegister $2822 = !26
$27f0 = !27 $2825 = SFXPlay.play
$27fa = SFXPlay.savePlayhead $2831 = SFXPlay.getRegister
SECTION: $2803-$2a33 ($0231 bytes) ["RNG Functions"] $283b = !27
$2803 = HarvestEntropy $2845 = SFXPlay.savePlayhead
$2809 = HarvestEntropy.loop SECTION: $284e-$2a7e ($0231 bytes) ["RNG Functions"]
$282a = RNGInit $284e = HarvestEntropy
$2860 = !0 $2854 = HarvestEntropy.loop
$2890 = RNGInit.complexinit $2875 = RNGInit
$28a7 = !1 $28ab = !0
$28c2 = ShiftHistory $28db = RNGInit.complexinit
$28df = GetNextHellPiece $28f2 = !1
$28e4 = GetNextTGM1Piece $290d = ShiftHistory
$28e7 = !2 $292a = GetNextHellPiece
$28ff = !3 $292f = GetNextTGM1Piece
$2901 = GetNextTGM2Piece $2932 = !2
$2904 = !4 $294a = !3
$291c = !5 $294c = GetNextTGM2Piece
$291e = GetNextNesPiece $294f = !4
$292c = GetNextTGM3Piece $2967 = !5
$292f = !6 $2969 = GetNextNesPiece
$2952 = !7 $2977 = GetNextTGM3Piece
$2955 = !8 $297a = !6
$2965 = !9 $299d = !7
$296f = !10 $29a0 = !8
$297d = !11 $29b0 = !9
$298c = !12 $29ba = !10
$2998 = !13 $29c8 = !11
$29a4 = !14 $29d7 = !12
$29b0 = !15 $29e3 = !13
$29bc = !16 $29ef = !14
$29c8 = !17 $29fb = !15
$29d4 = !18 $2a07 = !16
$29e3 = GetNextPiece $2a13 = !17
$29f1 = GetNextPiece.nextpiecejumps $2a1f = !18
$2a00 = Next35Piece $2a2e = GetNextPiece
$2a00 = !19 $2a3c = GetNextPiece.nextpiecejumps
$2a0a = Next7Piece $2a4b = Next35Piece
$2a0a = !20 $2a4b = !19
$2a14 = NextByte $2a55 = Next7Piece
SECTION: $2a34-$2b7d ($014a bytes) ["Progress Data"] $2a55 = !20
$2a34 = sProgressData $2a5f = NextByte
SECTION: $2b7e-$2c5d ($00e0 bytes) ["Score Functions"] SECTION: $2a7f-$2bc8 ($014a bytes) ["Progress Data"]
$2b7e = ScoreInit $2a7f = sProgressData
$2ba6 = IncreaseScore SECTION: $2bc9-$2ca8 ($00e0 bytes) ["Score Functions"]
$2bde = IncreaseScore.doConvert $2bc9 = ScoreInit
$2be0 = !0 $2bf1 = IncreaseScore
$2bf6 = IncreaseScore.carry $2c29 = IncreaseScore.doConvert
$2bf8 = IncreaseScore.postConvert $2c2b = !0
$2c05 = !1 $2c41 = IncreaseScore.carry
$2c0c = IncreaseScore.preAddDigit $2c43 = IncreaseScore.postConvert
$2c34 = IncreaseScore.addDigit $2c50 = !1
$2c4a = IncreaseScore.nextDigit $2c57 = IncreaseScore.preAddDigit
SECTION: $2c5e-$2d2a ($00cd bytes) ["Input Functions"] $2c7f = IncreaseScore.addDigit
$2c5e = InputInit $2c95 = IncreaseScore.nextDigit
$2c70 = GetInput SECTION: $2ca9-$2d75 ($00cd bytes) ["Input Functions"]
$2c70 = GetInput.btns $2ca9 = InputInit
$2c7d = GetInput.readA $2cbb = GetInput
$2c81 = GetInput.setA $2cbb = GetInput.btns
$2c8c = GetInput.clearA $2cc8 = GetInput.readA
$2c8f = GetInput.readB $2ccc = GetInput.setA
$2c93 = GetInput.setB $2cd7 = GetInput.clearA
$2c9e = GetInput.clearB $2cda = GetInput.readB
$2ca1 = GetInput.readSelect $2cde = GetInput.setB
$2ca5 = GetInput.setSelect $2ce9 = GetInput.clearB
$2cb0 = GetInput.clearSelect $2cec = GetInput.readSelect
$2cb3 = GetInput.readStart $2cf0 = GetInput.setSelect
$2cb7 = GetInput.setStart $2cfb = GetInput.clearSelect
$2cc2 = GetInput.clearStart $2cfe = GetInput.readStart
$2cc5 = GetInput.dpad $2d02 = GetInput.setStart
$2cd2 = GetInput.readUp $2d0d = GetInput.clearStart
$2cd6 = GetInput.setUp $2d10 = GetInput.dpad
$2ce1 = GetInput.clearUp $2d1d = GetInput.readUp
$2ce4 = GetInput.readDown $2d21 = GetInput.setUp
$2ce8 = GetInput.setDown $2d2c = GetInput.clearUp
$2cf3 = GetInput.clearDown $2d2f = GetInput.readDown
$2cf6 = GetInput.readLeft $2d33 = GetInput.setDown
$2cfa = GetInput.setLeft $2d3e = GetInput.clearDown
$2d05 = GetInput.clearLeft $2d41 = GetInput.readLeft
$2d08 = GetInput.readRight $2d45 = GetInput.setLeft
$2d0c = GetInput.setRight $2d50 = GetInput.clearLeft
$2d17 = GetInput.clearRight $2d53 = GetInput.readRight
$2d1a = GetInput.priorities $2d57 = GetInput.setRight
$2d25 = GetInput.zero $2d62 = GetInput.clearRight
SECTION: $2d2b-$2de1 ($00b7 bytes) ["SRAM Functions"] $2d65 = GetInput.priorities
$2d2b = RestoreSRAM $2d70 = GetInput.zero
$2d84 = InitializeSRAM SECTION: $2d76-$2e2c ($00b7 bytes) ["SRAM Functions"]
SECTION: $2de2-$2e93 ($00b2 bytes) ["Progress Functions"] $2d76 = RestoreSRAM
$2de2 = SetProgress $2dcf = InitializeSRAM
$2ded = SetProgress.loop SECTION: $2e2d-$2ede ($00b2 bytes) ["Progress Functions"]
$2df1 = SetProgress.correct $2e2d = SetProgress
$2e18 = SetProgress.wvr_u1 $2e38 = SetProgress.loop
$2e24 = SetProgress.wvr_u2 $2e3c = SetProgress.correct
$2e32 = SetProgress.wvr_u3 $2e63 = SetProgress.wvr_u1
$2e3e = SetProgress.wvr_u4 $2e6f = SetProgress.wvr_u2
$2e4c = SetProgress.wvr_u5 $2e7d = SetProgress.wvr_u3
$2e58 = SetProgress.wvr_u6 $2e89 = SetProgress.wvr_u4
$2e66 = SetProgress.wvr_u7 $2e97 = SetProgress.wvr_u5
$2e72 = SetProgress.wvr_u8 $2ea3 = SetProgress.wvr_u6
$2e80 = SetProgress.wvr_u9 $2eb1 = SetProgress.wvr_u7
$2e8c = SetProgress.wvr_u10 $2ebd = SetProgress.wvr_u8
SECTION: $2e94-$2f2b ($0098 bytes) ["Code Entry Point"] $2ecb = SetProgress.wvr_u9
$2e94 = Main $2ed7 = SetProgress.wvr_u10
$2ebd = Main.notgbc SECTION: $2edf-$2f76 ($0098 bytes) ["Code Entry Point"]
$2ec3 = Main.wvr_u1 $2edf = Main
$2ef0 = EventLoop $2f08 = Main.notgbc
$2f06 = EventLoop.eventloopjumps $2f0e = Main.wvr_u1
$2f0f = EventLoopPostHandler $2f3b = EventLoop
$2f11 = EventLoopPostHandler.wvb_u2 $2f51 = EventLoop.eventloopjumps
$2f23 = EventLoopPostHandler.vblankjumps $2f5a = EventLoopPostHandler
SECTION: $2f2c-$2fb3 ($0088 bytes) ["Time Functions"] $2f5c = EventLoopPostHandler.wvb_u2
$2f2c = TimeInit $2f6e = EventLoopPostHandler.vblankjumps
$2f41 = ResetGameTime SECTION: $2f77-$2ffe ($0088 bytes) ["Time Functions"]
$2f4c = CheckTorikan $2f77 = TimeInit
$2f63 = CheckTorikan.failure $2f8c = ResetGameTime
$2f65 = CheckTorikan.success $2f97 = CheckTorikan
$2f68 = HandleTimers $2fae = CheckTorikan.failure
$2f90 = HandleTimers.go $2fb0 = CheckTorikan.success
SECTION: $2fb4-$3020 ($006d bytes) ["Title Function Trampolines"] $2fb3 = HandleTimers
$2fb4 = SwitchToTitle $2fdb = HandleTimers.go
$2fbd = TitleEventLoopHandler SECTION: $2fff-$306b ($006d bytes) ["Title Function Trampolines"]
$2fc7 = TitleVBlankHandler $2fff = SwitchToTitle
$2fd1 = DrawOption6 $3008 = TitleEventLoopHandler
SECTION: $3021-$3072 ($0052 bytes) ["Tile Functions"] $3012 = TitleVBlankHandler
$3021 = LoadTitleTiles $301c = DrawOption6
$303f = LoadGameplayTiles SECTION: $306c-$30bd ($0052 bytes) ["Tile Functions"]
$3055 = LoadGameplayTiles.gbc $306c = LoadTitleTiles
$3064 = LoadGameplayTiles.dmg $308a = LoadGameplayTiles
SECTION: $3073-$30ae ($003c bytes) ["Time Data"] $30a0 = LoadGameplayTiles.gbc
$3073 = sFramesToCS $30af = LoadGameplayTiles.dmg
SECTION: $30af-$30dc ($002e bytes) ["Memory Functions"] SECTION: $30be-$30f9 ($003c bytes) ["Time Data"]
$30af = UnsafeMemCopy $30be = sFramesToCS
$30b8 = SafeMemCopy.wvr_u1 SECTION: $30fa-$3127 ($002e bytes) ["Memory Functions"]
$30b8 = SafeMemCopy $30fa = UnsafeMemCopy
$30c7 = UnsafeMemSet $3103 = SafeMemCopy.wvr_u1
$30cf = SafeMemSet $3103 = SafeMemCopy
$30cf = SafeMemSet.wvr_u2 $3112 = UnsafeMemSet
SECTION: $30dd-$3102 ($0026 bytes) ["Gameplay Function Trampolines"] $311a = SafeMemSet
$30dd = SwitchToGameplay $311a = SafeMemSet.wvr_u2
$30e6 = SwitchToGameplayBig SECTION: $3128-$314d ($0026 bytes) ["Gameplay Function Trampolines"]
$30ef = GamePlayEventLoopHandler $3128 = SwitchToGameplay
$30f9 = GamePlayBigEventLoopHandler $3131 = SwitchToGameplayBig
SECTION: $3103-$3124 ($0022 bytes) ["OAM Functions"] $313a = GamePlayEventLoopHandler
$3103 = CopyOAMHandler $3144 = GamePlayBigEventLoopHandler
$310f = ClearOAM SECTION: $314e-$316f ($0022 bytes) ["OAM Functions"]
SECTION: $3125-$313d ($0019 bytes) ["Interrupt Initialization Functions"] $314e = CopyOAMHandler
$3125 = IntrInit $315a = ClearOAM
$3129 = InitializeLCDCInterrupt SECTION: $3170-$3188 ($0019 bytes) ["Interrupt Initialization Functions"]
SECTION: $313e-$314c ($000f bytes) ["Banking Functions"] $3170 = IntrInit
$313e = BankingInit $3174 = InitializeLCDCInterrupt
SECTION: $314d-$3156 ($000a bytes) ["OAM DMA Code"] SECTION: $3189-$3197 ($000f bytes) ["Banking Functions"]
$314d = OAMDMA $3189 = BankingInit
$3157 = OAMDMAEnd SECTION: $3198-$31a1 ($000a bytes) ["OAM DMA Code"]
EMPTY: $3157-$3fff ($0ea9 bytes) $3198 = OAMDMA
TOTAL EMPTY: $0eb4 bytes $31a2 = OAMDMAEnd
EMPTY: $31a2-$3fff ($0e5e bytes)
TOTAL EMPTY: $0e69 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"]
@ -2396,37 +2398,38 @@ WRAM0 bank #0:
$cda4 = wProgress3B2 $cda4 = wProgress3B2
$cda5 = wProgress4B1 $cda5 = wProgress4B1
$cda6 = wProgress4B2 $cda6 = wProgress4B2
SECTION: $cda7-$cdaf ($0009 bytes) ["Globals"] SECTION: $cda7-$cdb0 ($000a bytes) ["Level Variables"]
$cda7 = wSwapABState $cda7 = wBoneActivationLevel
$cda8 = wRNGModeState $cda9 = wInvisActivationLevel
$cda9 = wRotModeState $cdab = wKillScreenActivationLevel
$cdaa = wDropModeState $cdad = wBonesActive
$cdab = wSpeedCurveState $cdae = wInvisActive
$cdac = wAlways20GState $cdaf = wKillScreenActive
$cdad = wInitialA $cdb0 = wLockLevel
$cdae = wInitialB SECTION: $cdb1-$cdb9 ($0009 bytes) ["Globals"]
$cdaf = wInitialC $cdb1 = wSwapABState
SECTION: $cdb0-$cdb8 ($0009 bytes) ["Level Variables"] $cdb2 = wRNGModeState
$cdb0 = wBoneActivationLevel $cdb3 = wRotModeState
$cdb2 = wInvisActivationLevel $cdb4 = wDropModeState
$cdb4 = wKillScreenActivationLevel $cdb5 = wSpeedCurveState
$cdb6 = wBonesActive $cdb6 = wAlways20GState
$cdb7 = wInvisActive $cdb7 = wInitialA
$cdb8 = wKillScreenActive $cdb8 = wInitialB
SECTION: $cdb9-$cdbc ($0004 bytes) ["Banking Variables"] $cdb9 = wInitialC
$cdb9 = wBankBackup SECTION: $cdba-$cdbd ($0004 bytes) ["Banking Variables"]
SECTION: $cdbd-$cdbf ($0003 bytes) ["GBC Variables"] $cdba = wBankBackup
$cdbd = wOuterReps SECTION: $cdbe-$cdc0 ($0003 bytes) ["GBC Variables"]
$cdbe = wInnerReps $cdbe = wOuterReps
$cdbf = wTitlePal $cdbf = wInnerReps
SECTION: $cdc0-$cdc2 ($0003 bytes) ["Time Variables"] $cdc0 = wTitlePal
$cdc0 = wMinutes SECTION: $cdc1-$cdc3 ($0003 bytes) ["Time Variables"]
$cdc1 = wSeconds $cdc1 = wMinutes
$cdc2 = wFrames $cdc2 = wSeconds
SECTION: $cdc3-$cdc3 ($0001 byte) ["Title Variables"] $cdc3 = wFrames
$cdc3 = wSelected SECTION: $cdc4-$cdc4 ($0001 byte) ["Title Variables"]
EMPTY: $cdc4-$cfff ($023c bytes) $cdc4 = wSelected
TOTAL EMPTY: $023c bytes EMPTY: $cdc5-$cfff ($023b bytes)
TOTAL EMPTY: $023b bytes
HRAM bank #0: HRAM bank #0:
SECTION: $ff80-$ff9a ($001b bytes) ["High Field Variables"] SECTION: $ff80-$ff9a ($001b bytes) ["High Field Variables"]
@ -2517,8 +2520,8 @@ HRAM bank #0:
TOTAL EMPTY: $0003 bytes TOTAL EMPTY: $0003 bytes
SUMMARY: SUMMARY:
ROM0: 12620 bytes used / 3764 free ROM0: 12695 bytes used / 3689 free
ROMX: 57736 bytes used / 40568 free in 6 banks ROMX: 57736 bytes used / 40568 free in 6 banks
SRAM: 14 bytes used / 8178 free in 1 bank SRAM: 14 bytes used / 8178 free in 1 bank
WRAM0: 3524 bytes used / 572 free WRAM0: 3525 bytes used / 571 free
HRAM: 124 bytes used / 3 free HRAM: 124 bytes used / 3 free

Binary file not shown.

View File

@ -151,203 +151,205 @@
00:1d36 PrepareScore 00:1d36 PrepareScore
00:1d49 DrawGradeProgressDMGT 00:1d49 DrawGradeProgressDMGT
00:1d64 UpdateGradeDMGT 00:1d64 UpdateGradeDMGT
00:1d82 UpdateGradeDMGT.checklineclears 00:1d95 UpdateGradeDMGT.checklineclears
00:1d9c UpdateGradeDMGT.clearrate 00:1daf UpdateGradeDMGT.clearrate
00:1dad UpdateGradeDMGT.combomult 00:1dc0 UpdateGradeDMGT.combomult
00:1dba UpdateGradeDMGT.combo10 00:1dcd UpdateGradeDMGT.combo10
00:1dcb UpdateGradeDMGT.combo5 00:1dde UpdateGradeDMGT.combo5
00:1ddc UpdateGradeDMGT.combo1 00:1def UpdateGradeDMGT.combo1
00:1deb UpdateGradeDMGT.prelevel 00:1dfe UpdateGradeDMGT.prelevel
00:1dfa UpdateGradeDMGT.single 00:1e0d UpdateGradeDMGT.single
00:1e0a UpdateGradeDMGT.double 00:1e1d UpdateGradeDMGT.double
00:1e1b UpdateGradeDMGT.adddonce 00:1e2e UpdateGradeDMGT.adddonce
00:1e1f UpdateGradeDMGT.triple 00:1e32 UpdateGradeDMGT.triple
00:1e30 UpdateGradeDMGT.addtonce 00:1e43 UpdateGradeDMGT.addtonce
00:1e34 UpdateGradeDMGT.tetris 00:1e47 UpdateGradeDMGT.tetris
00:1e38 UpdateGradeDMGT.levelmult 00:1e4b UpdateGradeDMGT.levelmult
00:1e50 UpdateGradeDMGT.mult5 00:1e63 UpdateGradeDMGT.mult5
00:1e57 UpdateGradeDMGT.mult4 00:1e6a UpdateGradeDMGT.mult4
00:1e5d UpdateGradeDMGT.mult3 00:1e70 UpdateGradeDMGT.mult3
00:1e62 UpdateGradeDMGT.mult2 00:1e75 UpdateGradeDMGT.mult2
00:1e66 UpdateGradeDMGT.mult1 00:1e79 UpdateGradeDMGT.mult1
00:1e67 UpdateGradeDMGT.processgrade 00:1e7a UpdateGradeDMGT.processgrade
00:1e90 UpdateGradeDMGT.increasegrademaybe 00:1ea3 UpdateGradeDMGT.increasegrademaybe
00:1eb4 UpdateGradeDMGT.gotgm 00:1ec7 UpdateGradeDMGT.gotgm
00:1ec2 DecayGradeDMGT 00:1ed5 DecayGradeDMGT
00:1ee6 DecayGradeDMGT.nodecay 00:1ef9 DecayGradeDMGT.nodecay
00:1eed DecayGradeDMGT.decay 00:1f00 DecayGradeDMGT.decay
00:1efb UpdateGradeTGM1 00:1f0e UpdateGradeTGM1
00:1f05 UpdateGradeTGM1.trygradeup 00:1f18 UpdateGradeTGM1.trygradeup
00:1f1f UpdateGradeTGM1.increasegrade 00:1f32 UpdateGradeTGM1.increasegrade
00:1f34 UpdateGradeTGM1.skipjingle 00:1f47 UpdateGradeTGM1.skipjingle
00:1f41 UpdateGradeTGM1.maybegm 00:1f54 UpdateGradeTGM1.maybegm
00:1f5a UpdateGradeDEAT 00:1f6d UpdateGradeDEAT
00:1f66 UpdateGradeDEAT.notgm 00:1f79 UpdateGradeDEAT.notgm
00:1f82 UpdateGradeDEAT.notm 00:1f95 UpdateGradeDEAT.notm
00:1fa5 UpdateGradeDEAT.disqualify 00:1fb8 UpdateGradeDEAT.disqualify
00:1fae UpdateGradeSHIR 00:1fce UpdateGradeSHIR
00:1ff1 UpdateGradeSHIR.s5torikan 00:2011 UpdateGradeSHIR.s5torikan
00:2001 UpdateGradeSHIR.s10torikan 00:2021 UpdateGradeSHIR.s10torikan
00:2010 UpdateGradeSHIR.disqualify 00:2030 UpdateGradeSHIR.disqualify
00:2019 sTGM1GradeScores 00:203f UpdateGradeSHIR.l1000
00:203b sTGM3InternalGradeSystem 00:204d UpdateGradeSHIR.l500
00:20db sTGM3GradeBoosts 00:205b sTGM1GradeScores
00:20fa sTGM3LevelMultiplier 00:207d sTGM3InternalGradeSystem
00:20fe sTGM3BaselineCOOL 00:211d sTGM3GradeBoosts
00:2107 sTGM3REGRETConditions 00:213c sTGM3LevelMultiplier
00:211b sDMGTGrading 00:2140 sTGM3BaselineCOOL
00:21cf sDMGTGaugeLUT 00:2149 sTGM3REGRETConditions
00:22cf LevelInit 00:215d sDMGTGrading
00:232b SpecialLevelInit 00:2211 sDMGTGaugeLUT
00:2339 SpecialLevelInit.jumps 00:2311 LevelInit
00:234e SpecialLevelInit.dmgt 00:2370 SpecialLevelInit
00:2353 SpecialLevelInit.tgm1 00:237e SpecialLevelInit.jumps
00:2358 SpecialLevelInit.tgm3 00:2393 SpecialLevelInit.dmgt
00:235d SpecialLevelInit.deat 00:2398 SpecialLevelInit.tgm1
00:2362 SpecialLevelInit.shir 00:239d SpecialLevelInit.tgm3
00:2367 SpecialLevelInit.chil 00:23a2 SpecialLevelInit.deat
00:236c SpecialLevelInit.myco 00:23a7 SpecialLevelInit.shir
00:2371 SpecialLevelInit.loaddata 00:23ac SpecialLevelInit.chil
00:238a LevelUp 00:23b1 SpecialLevelInit.myco
00:23ae LevelUp.doit 00:23b6 SpecialLevelInit.loaddata
00:23f8 LevelUp.checknlevel 00:23cf LevelUp
00:2447 LevelUp.bellmaybe 00:23f9 LevelUp.doit
00:2459 LevelUp.leveljinglemaybe 00:2443 LevelUp.checknlevel
00:2466 LevelUp.checkspeedup 00:2492 LevelUp.bellmaybe
00:24a5 DoSpeedUp 00:24a4 LevelUp.leveljinglemaybe
00:24e6 CheckSpecialLevelConditions 00:24b1 LevelUp.checkspeedup
00:24ec CheckSpecialLevelConditions.bones 00:24f0 DoSpeedUp
00:2501 CheckSpecialLevelConditions.enterthebonezone 00:2531 CheckSpecialLevelConditions
00:2506 CheckSpecialLevelConditions.invis 00:2537 CheckSpecialLevelConditions.bones
00:251b CheckSpecialLevelConditions.vanishoxyaction 00:254c CheckSpecialLevelConditions.enterthebonezone
00:2520 CheckSpecialLevelConditions.killscreen 00:2551 CheckSpecialLevelConditions.invis
00:2531 CheckSpecialLevelConditions.rip 00:2566 CheckSpecialLevelConditions.vanishoxyaction
00:254a TriggerKillScreen 00:256b CheckSpecialLevelConditions.killscreen
00:2569 SFXInit 00:257c CheckSpecialLevelConditions.rip
00:258b SFXPopQueue 00:2595 TriggerKillScreen
00:25a0 SFXPushQueue 00:25b4 SFXInit
00:25b1 SFXProcessQueue 00:25d6 SFXPopQueue
00:25df SFXTriggerNoise 00:25eb SFXPushQueue
00:2605 SFXEnqueue 00:25fc SFXProcessQueue
00:261a SFXEnqueue.findsfx 00:262a SFXTriggerNoise
00:2774 SFXKill 00:2650 SFXEnqueue
00:27a1 SFXPlayNoise 00:2665 SFXEnqueue.findsfx
00:27ac SFXPlayNoise.noisereg 00:27bf SFXKill
00:27c3 SFXPlayNoise.savenoiseplayhead 00:27ec SFXPlayNoise
00:27cc SFXPlay 00:27f7 SFXPlayNoise.noisereg
00:27da SFXPlay.play 00:280e SFXPlayNoise.savenoiseplayhead
00:27e6 SFXPlay.getRegister 00:2817 SFXPlay
00:27fa SFXPlay.savePlayhead 00:2825 SFXPlay.play
00:2803 HarvestEntropy 00:2831 SFXPlay.getRegister
00:2809 HarvestEntropy.loop 00:2845 SFXPlay.savePlayhead
00:282a RNGInit 00:284e HarvestEntropy
00:2890 RNGInit.complexinit 00:2854 HarvestEntropy.loop
00:28c2 ShiftHistory 00:2875 RNGInit
00:28df GetNextHellPiece 00:28db RNGInit.complexinit
00:28e4 GetNextTGM1Piece 00:290d ShiftHistory
00:2901 GetNextTGM2Piece 00:292a GetNextHellPiece
00:291e GetNextNesPiece 00:292f GetNextTGM1Piece
00:292c GetNextTGM3Piece 00:294c GetNextTGM2Piece
00:29e3 GetNextPiece 00:2969 GetNextNesPiece
00:29f1 GetNextPiece.nextpiecejumps 00:2977 GetNextTGM3Piece
00:2a00 Next35Piece 00:2a2e GetNextPiece
00:2a0a Next7Piece 00:2a3c GetNextPiece.nextpiecejumps
00:2a14 NextByte 00:2a4b Next35Piece
00:2a34 sProgressData 00:2a55 Next7Piece
00:2b7e ScoreInit 00:2a5f NextByte
00:2ba6 IncreaseScore 00:2a7f sProgressData
00:2bde IncreaseScore.doConvert 00:2bc9 ScoreInit
00:2bf6 IncreaseScore.carry 00:2bf1 IncreaseScore
00:2bf8 IncreaseScore.postConvert 00:2c29 IncreaseScore.doConvert
00:2c0c IncreaseScore.preAddDigit 00:2c41 IncreaseScore.carry
00:2c34 IncreaseScore.addDigit 00:2c43 IncreaseScore.postConvert
00:2c4a IncreaseScore.nextDigit 00:2c57 IncreaseScore.preAddDigit
00:2c5e InputInit 00:2c7f IncreaseScore.addDigit
00:2c70 GetInput 00:2c95 IncreaseScore.nextDigit
00:2c70 GetInput.btns 00:2ca9 InputInit
00:2c7d GetInput.readA 00:2cbb GetInput
00:2c81 GetInput.setA 00:2cbb GetInput.btns
00:2c8c GetInput.clearA 00:2cc8 GetInput.readA
00:2c8f GetInput.readB 00:2ccc GetInput.setA
00:2c93 GetInput.setB 00:2cd7 GetInput.clearA
00:2c9e GetInput.clearB 00:2cda GetInput.readB
00:2ca1 GetInput.readSelect 00:2cde GetInput.setB
00:2ca5 GetInput.setSelect 00:2ce9 GetInput.clearB
00:2cb0 GetInput.clearSelect 00:2cec GetInput.readSelect
00:2cb3 GetInput.readStart 00:2cf0 GetInput.setSelect
00:2cb7 GetInput.setStart 00:2cfb GetInput.clearSelect
00:2cc2 GetInput.clearStart 00:2cfe GetInput.readStart
00:2cc5 GetInput.dpad 00:2d02 GetInput.setStart
00:2cd2 GetInput.readUp 00:2d0d GetInput.clearStart
00:2cd6 GetInput.setUp 00:2d10 GetInput.dpad
00:2ce1 GetInput.clearUp 00:2d1d GetInput.readUp
00:2ce4 GetInput.readDown 00:2d21 GetInput.setUp
00:2ce8 GetInput.setDown 00:2d2c GetInput.clearUp
00:2cf3 GetInput.clearDown 00:2d2f GetInput.readDown
00:2cf6 GetInput.readLeft 00:2d33 GetInput.setDown
00:2cfa GetInput.setLeft 00:2d3e GetInput.clearDown
00:2d05 GetInput.clearLeft 00:2d41 GetInput.readLeft
00:2d08 GetInput.readRight 00:2d45 GetInput.setLeft
00:2d0c GetInput.setRight 00:2d50 GetInput.clearLeft
00:2d17 GetInput.clearRight 00:2d53 GetInput.readRight
00:2d1a GetInput.priorities 00:2d57 GetInput.setRight
00:2d25 GetInput.zero 00:2d62 GetInput.clearRight
00:2d2b RestoreSRAM 00:2d65 GetInput.priorities
00:2d84 InitializeSRAM 00:2d70 GetInput.zero
00:2de2 SetProgress 00:2d76 RestoreSRAM
00:2ded SetProgress.loop 00:2dcf InitializeSRAM
00:2df1 SetProgress.correct 00:2e2d SetProgress
00:2e18 SetProgress.wvr_u1 00:2e38 SetProgress.loop
00:2e24 SetProgress.wvr_u2 00:2e3c SetProgress.correct
00:2e32 SetProgress.wvr_u3 00:2e63 SetProgress.wvr_u1
00:2e3e SetProgress.wvr_u4 00:2e6f SetProgress.wvr_u2
00:2e4c SetProgress.wvr_u5 00:2e7d SetProgress.wvr_u3
00:2e58 SetProgress.wvr_u6 00:2e89 SetProgress.wvr_u4
00:2e66 SetProgress.wvr_u7 00:2e97 SetProgress.wvr_u5
00:2e72 SetProgress.wvr_u8 00:2ea3 SetProgress.wvr_u6
00:2e80 SetProgress.wvr_u9 00:2eb1 SetProgress.wvr_u7
00:2e8c SetProgress.wvr_u10 00:2ebd SetProgress.wvr_u8
00:2e94 Main 00:2ecb SetProgress.wvr_u9
00:2ebd Main.notgbc 00:2ed7 SetProgress.wvr_u10
00:2ec3 Main.wvr_u1 00:2edf Main
00:2ef0 EventLoop 00:2f08 Main.notgbc
00:2f06 EventLoop.eventloopjumps 00:2f0e Main.wvr_u1
00:2f0f EventLoopPostHandler 00:2f3b EventLoop
00:2f11 EventLoopPostHandler.wvb_u2 00:2f51 EventLoop.eventloopjumps
00:2f23 EventLoopPostHandler.vblankjumps 00:2f5a EventLoopPostHandler
00:2f2c TimeInit 00:2f5c EventLoopPostHandler.wvb_u2
00:2f41 ResetGameTime 00:2f6e EventLoopPostHandler.vblankjumps
00:2f4c CheckTorikan 00:2f77 TimeInit
00:2f63 CheckTorikan.failure 00:2f8c ResetGameTime
00:2f65 CheckTorikan.success 00:2f97 CheckTorikan
00:2f68 HandleTimers 00:2fae CheckTorikan.failure
00:2f90 HandleTimers.go 00:2fb0 CheckTorikan.success
00:2fb4 SwitchToTitle 00:2fb3 HandleTimers
00:2fbd TitleEventLoopHandler 00:2fdb HandleTimers.go
00:2fc7 TitleVBlankHandler 00:2fff SwitchToTitle
00:2fd1 DrawOption6 00:3008 TitleEventLoopHandler
00:3021 LoadTitleTiles 00:3012 TitleVBlankHandler
00:303f LoadGameplayTiles 00:301c DrawOption6
00:3055 LoadGameplayTiles.gbc 00:306c LoadTitleTiles
00:3064 LoadGameplayTiles.dmg 00:308a LoadGameplayTiles
00:3073 sFramesToCS 00:30a0 LoadGameplayTiles.gbc
00:30af UnsafeMemCopy 00:30af LoadGameplayTiles.dmg
00:30b8 SafeMemCopy.wvr_u1 00:30be sFramesToCS
00:30b8 SafeMemCopy 00:30fa UnsafeMemCopy
00:30c7 UnsafeMemSet 00:3103 SafeMemCopy.wvr_u1
00:30cf SafeMemSet 00:3103 SafeMemCopy
00:30cf SafeMemSet.wvr_u2 00:3112 UnsafeMemSet
00:30dd SwitchToGameplay 00:311a SafeMemSet
00:30e6 SwitchToGameplayBig 00:311a SafeMemSet.wvr_u2
00:30ef GamePlayEventLoopHandler 00:3128 SwitchToGameplay
00:30f9 GamePlayBigEventLoopHandler 00:3131 SwitchToGameplayBig
00:3103 CopyOAMHandler 00:313a GamePlayEventLoopHandler
00:310f ClearOAM 00:3144 GamePlayBigEventLoopHandler
00:3125 IntrInit 00:314e CopyOAMHandler
00:3129 InitializeLCDCInterrupt 00:315a ClearOAM
00:313e BankingInit 00:3170 IntrInit
00:314d OAMDMA 00:3174 InitializeLCDCInterrupt
00:3157 OAMDMAEnd 00:3189 BankingInit
00:3198 OAMDMA
00:31a2 OAMDMAEnd
01:4008 sDMGTSpeedCurve 01:4008 sDMGTSpeedCurve
01:4203 sDMGTSpeedCurveEnd 01:4203 sDMGTSpeedCurveEnd
01:4205 sDMGTSpeedCurveSpecialData 01:4205 sDMGTSpeedCurveSpecialData
@ -2074,29 +2076,30 @@
00:cda4 wProgress3B2 00:cda4 wProgress3B2
00:cda5 wProgress4B1 00:cda5 wProgress4B1
00:cda6 wProgress4B2 00:cda6 wProgress4B2
00:cda7 wSwapABState 00:cda7 wBoneActivationLevel
00:cda8 wRNGModeState 00:cda9 wInvisActivationLevel
00:cda9 wRotModeState 00:cdab wKillScreenActivationLevel
00:cdaa wDropModeState 00:cdad wBonesActive
00:cdab wSpeedCurveState 00:cdae wInvisActive
00:cdac wAlways20GState 00:cdaf wKillScreenActive
00:cdad wInitialA 00:cdb0 wLockLevel
00:cdae wInitialB 00:cdb1 wSwapABState
00:cdaf wInitialC 00:cdb2 wRNGModeState
00:cdb0 wBoneActivationLevel 00:cdb3 wRotModeState
00:cdb2 wInvisActivationLevel 00:cdb4 wDropModeState
00:cdb4 wKillScreenActivationLevel 00:cdb5 wSpeedCurveState
00:cdb6 wBonesActive 00:cdb6 wAlways20GState
00:cdb7 wInvisActive 00:cdb7 wInitialA
00:cdb8 wKillScreenActive 00:cdb8 wInitialB
00:cdb9 wBankBackup 00:cdb9 wInitialC
00:cdbd wOuterReps 00:cdba wBankBackup
00:cdbe wInnerReps 00:cdbe wOuterReps
00:cdbf wTitlePal 00:cdbf wInnerReps
00:cdc0 wMinutes 00:cdc0 wTitlePal
00:cdc1 wSeconds 00:cdc1 wMinutes
00:cdc2 wFrames 00:cdc2 wSeconds
00:cdc3 wSelected 00:cdc3 wFrames
00:cdc4 wSelected
00:ff80 hPieceDataBase 00:ff80 hPieceDataBase
00:ff82 hPieceDataBaseFast 00:ff82 hPieceDataBaseFast
00:ff84 hPieceDataOffset 00:ff84 hPieceDataOffset

View File

@ -380,7 +380,16 @@ UpdateGradeDMGT::
; If we failed it: DIE. ; If we failed it: DIE.
cp a, $FF cp a, $FF
jp nz, TriggerKillScreen jp z, .checklineclears
ld a, $FF
ld [wLockLevel], a
ld a, 5
ldh [hCLevel+1], a
xor a, a
ldh [hCLevel], a
ldh [hCLevel+2], a
ldh [hCLevel+3], a
jp TriggerKillScreen
; Did we have line clears? ; Did we have line clears?
@ -836,9 +845,15 @@ UpdateGradeDEAT:
.disqualify .disqualify
; Disqualify from ranking. ; Disqualify from ranking.
ld a, $FF ld a, $FF
ld [wLockLevel], a
ld [wRankingDisqualified], a ld [wRankingDisqualified], a
call TriggerKillScreen ld a, 5
ret ldh [hCLevel+1], a
xor a, a
ldh [hCLevel], a
ldh [hCLevel+2], a
ldh [hCLevel+3], a
jp TriggerKillScreen
UpdateGradeSHIR: UpdateGradeSHIR:
@ -925,9 +940,30 @@ UpdateGradeSHIR:
ret ret
.disqualify .disqualify
; Disqualify from ranking.
ld a, $FF ld a, $FF
ld [wLockLevel], a
ld [wRankingDisqualified], a ld [wRankingDisqualified], a
call TriggerKillScreen ld a, [wDisplayedGrade]
ret cp a, GRADE_S5
jr z, .l500
.l1000
ld a, 1
ldh [hCLevel], a
xor a, a
ldh [hCLevel+1], a
ldh [hCLevel+2], a
ldh [hCLevel+3], a
jp TriggerKillScreen
.l500
ld a, 5
ldh [hCLevel+1], a
xor a, a
ldh [hCLevel], a
ldh [hCLevel+2], a
ldh [hCLevel+3], a
jp TriggerKillScreen
ENDC ENDC

View File

@ -46,6 +46,7 @@ wKillScreenActivationLevel: ds 2
wBonesActive:: ds 1 wBonesActive:: ds 1
wInvisActive:: ds 1 wInvisActive:: ds 1
wKillScreenActive:: ds 1 wKillScreenActive:: ds 1
wLockLevel:: ds 1
SECTION "Level Functions", ROM0 SECTION "Level Functions", ROM0
@ -60,6 +61,7 @@ LevelInit::
ld [wBonesActive], a ld [wBonesActive], a
ld [wInvisActive], a ld [wInvisActive], a
ld [wKillScreenActive], a ld [wKillScreenActive], a
ld [wLockLevel], a
ldh a, [hStartSpeed] ldh a, [hStartSpeed]
ld l, a ld l, a
@ -189,6 +191,11 @@ SpecialLevelInit:
; Increment level and speed up if necessary. Level increment in E. ; Increment level and speed up if necessary. Level increment in E.
; Levels may only increment by single digits. ; Levels may only increment by single digits.
LevelUp:: LevelUp::
; Return if our level is hard locked.
ld a, [wLockLevel]
cp a, $FF
ret z
; Return if we're maxed out. ; Return if we're maxed out.
ld hl, hCLevel ld hl, hCLevel
ld a, $09 ld a, $09