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