From 29eea6a428848d63c2f0741520283b5e845daba3 Mon Sep 17 00:00:00 2001 From: Randy Thiemann Date: Mon, 13 Nov 2023 02:18:13 +0100 Subject: [PATCH] Add virtual leveling. --- README.md | 1 + bin/DMGTRIS.GBC | Bin 131072 -> 131072 bytes bin/DMGTRIS.map | 893 +++++++++++++++++++++++---------------------- bin/DMGTRIS.pocket | Bin 131072 -> 131072 bytes bin/DMGTRIS.sym | 675 +++++++++++++++++----------------- src/level.asm | 201 ++++++++-- src/main.asm | 2 + 7 files changed, 961 insertions(+), 811 deletions(-) diff --git a/README.md b/README.md index 2b3f54b..4f62083 100644 --- a/README.md +++ b/README.md @@ -152,6 +152,7 @@ Thanks for playtesting and debugging go to: - AntonErgo - Lindtobias - \_Zaphod77\_ +- bbbbbr ## License diff --git a/bin/DMGTRIS.GBC b/bin/DMGTRIS.GBC index 7301e3f258b29503fde4428dd5a800886ef271b0..284e7db32309400ac5739c64476074f924c50c55 100644 GIT binary patch delta 16084 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 P^MF9d)(;*N2G06lvR|B| diff --git a/bin/DMGTRIS.map b/bin/DMGTRIS.map index 6f07c82..8cb951e 100644 --- a/bin/DMGTRIS.map +++ b/bin/DMGTRIS.map @@ -301,291 +301,299 @@ ROM0 bank #0: $2663 = UpdateGradeSHIR.disqualify $2672 = UpdateGradeSHIR.l1000 $2688 = UpdateGradeSHIR.l500 - SECTION: $269e-$2a16 ($0379 bytes) ["Level Functions"] + SECTION: $269e-$2a80 ($03e3 bytes) ["Level Functions"] $269e = LevelInit - $2703 = SpecialLevelInit - $2711 = SpecialLevelInit.jumps - $2726 = SpecialLevelInit.dmgt - $272b = SpecialLevelInit.tgm1 - $2730 = SpecialLevelInit.tgm3 - $2735 = SpecialLevelInit.deat - $273a = SpecialLevelInit.shir - $273f = SpecialLevelInit.chil - $2744 = SpecialLevelInit.myco - $2749 = SpecialLevelInit.loaddata - $277e = LevelUp - $27a8 = LevelUp.doit - $27ea = LevelUp.checknlevel - $281b = !0 - $2833 = !1 - $283c = LevelUp.bellmaybe - $2858 = LevelUp.leveljinglemaybe - $2868 = LevelUp.checkspeedup - $287c = !2 - $2889 = !3 - $289a = !4 - $28a7 = DoSpeedUp - $28e8 = CheckSpecialLevelConditions - $2919 = CheckSpecialLevelConditions.override - $2934 = CheckSpecialLevelConditions.nooverride - $293a = CheckSpecialLevelConditions.speciallock - $295e = CheckSpecialLevelConditions.bones - $2973 = CheckSpecialLevelConditions.enterthebonezone - $2978 = CheckSpecialLevelConditions.invis - $298d = CheckSpecialLevelConditions.vanishoxyaction - $2992 = CheckSpecialLevelConditions.killscreen - $29a3 = CheckSpecialLevelConditions.rip - $29d3 = CheckSpecialLevelConditions.staffroll - $29e1 = CheckSpecialLevelConditions.justkill - $29f5 = TriggerKillScreen - SECTION: $2a17-$2ccc ($02b6 bytes) ["Grading Data"] - $2a17 = sTGM1GradeScores - $2a39 = sTGM3InternalGradeSystem - $2ad9 = sTGM3GradeBoosts - $2af8 = sTGM3LevelMultiplier - $2afc = sTGM3BaselineCOOL - $2b05 = sTGM3REGRETConditions - $2b19 = sDMGTGrading - $2bcd = sDMGTGaugeLUT - SECTION: $2ccd-$2f6c ($02a0 bytes) ["SFX Functions"] - $2ccd = SFXInit - $2cef = SFXPopQueue - $2d04 = SFXPushQueue - $2d15 = SFXProcessQueue - $2d26 = !0 - $2d41 = !1 - $2d43 = SFXTriggerNoise - $2d50 = !2 - $2d5d = !3 - $2d69 = SFXEnqueue - $2d7e = SFXEnqueue.findsfx - $2d93 = !4 - $2da3 = !5 - $2db3 = !6 - $2dc3 = !7 - $2dd3 = !8 - $2de3 = !9 - $2df3 = !10 - $2e03 = !11 - $2e13 = !12 - $2e23 = !13 - $2e33 = !14 - $2e43 = !15 - $2e53 = !16 - $2e63 = !17 - $2e73 = !18 - $2e82 = !19 - $2e91 = !20 - $2ea0 = !21 - $2eaf = !22 - $2ebd = !23 - $2ecb = !24 - $2ed8 = SFXKill - $2f0b = SFXPlayNoise - $2f16 = SFXPlayNoise.noisereg - $2f23 = !25 - $2f2d = SFXPlayNoise.savenoiseplayhead - $2f36 = SFXPlay - $2f41 = !26 - $2f44 = SFXPlay.play - $2f50 = SFXPlay.getRegister - $2f5a = !27 - $2f64 = SFXPlay.savePlayhead - SECTION: $2f6d-$319d ($0231 bytes) ["RNG Functions"] - $2f6d = HarvestEntropy - $2f73 = HarvestEntropy.loop - $2f94 = RNGInit - $2fca = !0 - $2ffa = RNGInit.complexinit - $3011 = !1 - $302c = ShiftHistory - $3049 = GetNextHellPiece - $304e = GetNextTGM1Piece - $3051 = !2 - $3069 = !3 - $306b = GetNextTGM2Piece - $306e = !4 - $3086 = !5 - $3088 = GetNextNesPiece - $3096 = GetNextTGM3Piece - $3099 = !6 - $30bc = !7 - $30bf = !8 - $30cf = !9 - $30d9 = !10 - $30e7 = !11 - $30f6 = !12 - $3102 = !13 - $310e = !14 - $311a = !15 - $3126 = !16 - $3132 = !17 - $313e = !18 - $314d = GetNextPiece - $315b = GetNextPiece.nextpiecejumps - $316a = Next35Piece - $316a = !19 - $3174 = Next7Piece - $3174 = !20 - $317e = NextByte - SECTION: $319e-$3365 ($01c8 bytes) ["Hi Score Functions"] - $319e = CheckAndAddHiscore - $31a8 = CheckAndAddHiscore.checkloop - $31ad = CheckAndAddHiscore.checkgrade - $31b6 = CheckAndAddHiscore.oldgraded - $31c5 = CheckAndAddHiscore.oldungraded - $31cc = CheckAndAddHiscore.checklevel - $31f1 = CheckAndAddHiscore.checkscore - $3234 = CheckAndAddHiscore.notbetter - $3241 = CheckAndAddHiscore.better - $3243 = InsertHiScore - $3243 = InsertHiScore.copylower - $3254 = InsertHiScore.copyupper - $3261 = !0 - $3275 = InsertHiScore.findrow - $3282 = !1 - $3286 = InsertHiScore.insert - $32df = InsertHiScore.persist - $32f0 = GetHiScoreEntry - $3305 = !2 - $3309 = GetHiScoreEntry.store - $3312 = InitTargetHSTable - $331d = InitTargetHSTable.jumps - $3332 = InitTargetHSTable.dmgt - $3337 = InitTargetHSTable.tgm1 - $333c = InitTargetHSTable.tgm3 - $3341 = InitTargetHSTable.deat - $3346 = InitTargetHSTable.shir - $334b = InitTargetHSTable.chil - $3350 = InitTargetHSTable.myco - $3353 = InitTargetHSTable.store - SECTION: $3366-$34af ($014a bytes) ["Progress Data"] - $3366 = sProgressData - SECTION: $34b0-$35ef ($0140 bytes) ["Hi Score Data"] - $34b0 = sHiscoreDefaultData - SECTION: $35f0-$3723 ($0134 bytes) ["Input Functions"] - $35f0 = InputInit - $3602 = GetInput - $3602 = GetInput.btns - $360f = GetInput.readA - $3613 = GetInput.setA - $361e = GetInput.clearA - $3621 = GetInput.readB - $3625 = GetInput.setB - $3630 = GetInput.clearB - $3633 = GetInput.readSelect - $3637 = GetInput.setSelect - $3642 = GetInput.clearSelect - $3645 = GetInput.readStart - $3649 = GetInput.setStart - $3654 = GetInput.clearStart - $3657 = GetInput.dpad - $3664 = GetInput.readUp - $3668 = GetInput.setUp - $3673 = GetInput.clearUp - $3676 = GetInput.readDown - $367a = GetInput.setDown - $3685 = GetInput.clearDown - $3688 = GetInput.readLeft - $368c = GetInput.setLeft - $3697 = GetInput.clearLeft - $369a = GetInput.readRight - $369e = GetInput.setRight - $36a9 = GetInput.clearRight - $36ac = GetInput.priorities - $36b9 = GetInput.jumps - $36c8 = GetInput.dlru - $36db = GetInput.ulrd - $36ee = GetInput.lrud - $36fb = GetInput.udlr - $3708 = GetInput.zeroud - $370e = GetInput.zerolr - $3714 = GetInput.zerolrd - $371c = GetInput.zerolru - SECTION: $3724-$3803 ($00e0 bytes) ["Score Functions"] - $3724 = ScoreInit - $374c = IncreaseScore - $3784 = IncreaseScore.doConvert - $3786 = !0 - $379c = IncreaseScore.carry - $379e = IncreaseScore.postConvert - $37ab = !1 - $37b2 = IncreaseScore.preAddDigit - $37da = IncreaseScore.addDigit - $37f0 = IncreaseScore.nextDigit - SECTION: $3804-$38ce ($00cb bytes) ["Title Function Trampolines"] - $3804 = SwitchToTitle - $380d = TitleEventLoopHandler - $3817 = TitleVBlankHandler - $3821 = PersistLevel - $382f = DrawSpeedMain - $387f = DrawSpeedSettings - SECTION: $38cf-$3994 ($00c6 bytes) ["Time Functions"] - $38cf = TimeInit - $38ef = StartCountdown - $38fd = ResetGameTime - $3908 = CheckTorikan - $391f = CheckTorikan.failure - $3921 = CheckTorikan.success - $3924 = HandleTimers - $394a = HandleTimers.reduce - $3957 = HandleTimers.clock - $3971 = HandleTimers.go - SECTION: $3995-$3a46 ($00b2 bytes) ["Progress Functions"] - $3995 = SetProgress - $39a0 = SetProgress.loop - $39a4 = SetProgress.correct - $39cb = SetProgress.wvr_u1 - $39d7 = SetProgress.wvr_u2 - $39e5 = SetProgress.wvr_u3 - $39f1 = SetProgress.wvr_u4 - $39ff = SetProgress.wvr_u5 - $3a0b = SetProgress.wvr_u6 - $3a19 = SetProgress.wvr_u7 - $3a25 = SetProgress.wvr_u8 - $3a33 = SetProgress.wvr_u9 - $3a3f = SetProgress.wvr_u10 - SECTION: $3a47-$3ad8 ($0092 bytes) ["Code Entry Point"] - $3a47 = Main - $3a70 = Main.notgbc - $3a76 = Main.wvr_u1 - $3a9d = EventLoop - $3ab3 = EventLoop.eventloopjumps - $3abc = EventLoopPostHandler - $3abe = EventLoopPostHandler.wvb_u2 - $3ad0 = EventLoopPostHandler.vblankjumps - SECTION: $3ad9-$3b2a ($0052 bytes) ["Tile Functions"] - $3ad9 = LoadTitleTiles - $3af7 = LoadGameplayTiles - $3b0d = LoadGameplayTiles.gbc - $3b1c = LoadGameplayTiles.dmg - SECTION: $3b2b-$3b66 ($003c bytes) ["Time Data"] - $3b2b = sFramesToCS - SECTION: $3b67-$3b94 ($002e bytes) ["Memory Functions"] - $3b67 = UnsafeMemCopy - $3b70 = SafeMemCopy.wvr_u1 - $3b70 = SafeMemCopy - $3b7f = UnsafeMemSet - $3b87 = SafeMemSet - $3b87 = SafeMemSet.wvr_u2 - SECTION: $3b95-$3bba ($0026 bytes) ["Gameplay Function Trampolines"] - $3b95 = SwitchToGameplay - $3b9e = SwitchToGameplayBig - $3ba7 = GamePlayEventLoopHandler - $3bb1 = GamePlayBigEventLoopHandler - SECTION: $3bbb-$3bdf ($0025 bytes) ["Interrupt Initialization Functions"] - $3bbb = EnableScreenSquish - $3bd5 = DisableScreenSquish - SECTION: $3be0-$3c01 ($0022 bytes) ["OAM Functions"] - $3be0 = CopyOAMHandler - $3bec = ClearOAM - SECTION: $3c02-$3c10 ($000f bytes) ["Banking Functions"] - $3c02 = BankingInit - SECTION: $3c11-$3c1a ($000a bytes) ["OAM DMA Code"] - $3c11 = OAMDMA - $3c1b = OAMDMAEnd - EMPTY: $3c1b-$3fff ($03e5 bytes) - TOTAL EMPTY: $03f0 bytes + $270e = SpecialLevelInit + $271c = SpecialLevelInit.jumps + $2731 = SpecialLevelInit.dmgt + $2736 = SpecialLevelInit.tgm1 + $273b = SpecialLevelInit.tgm3 + $2740 = SpecialLevelInit.deat + $2745 = SpecialLevelInit.shir + $274a = SpecialLevelInit.chil + $274f = SpecialLevelInit.myco + $2754 = SpecialLevelInit.loaddata + $2789 = LevelUp + $27b3 = LevelUp.doit + $27f2 = LevelUp.checknlevel + $2823 = !0 + $283b = !1 + $2844 = LevelUp.bellmaybe + $2860 = LevelUp.leveljinglemaybe + $2870 = AdjustSpeedCurve + $2876 = AdjustSpeedCurve.docheck + $2876 = AdjustSpeedCurve.checkthousands + $2885 = AdjustSpeedCurve.checkhundreds + $2892 = AdjustSpeedCurve.checktens + $28a1 = AdjustSpeedCurve.checkones + $28ac = AdjustSpeedCurveForced + $28e9 = AdjustSpeedCurveForced.continue + $28ee = BuildTrueCLevel + $2917 = BuildTrueCLevel.thousands + $292c = CheckSpecialLevelConditions + $295d = CheckSpecialLevelConditions.override + $2978 = CheckSpecialLevelConditions.nooverride + $297e = CheckSpecialLevelConditions.speciallock + $29a2 = CheckSpecialLevelConditions.bones + $29b7 = CheckSpecialLevelConditions.enterthebonezone + $29bc = CheckSpecialLevelConditions.invis + $29d1 = CheckSpecialLevelConditions.vanishoxyaction + $29d6 = CheckSpecialLevelConditions.killscreen + $29e7 = CheckSpecialLevelConditions.rip + $2a17 = CheckSpecialLevelConditions.staffroll + $2a25 = CheckSpecialLevelConditions.justkill + $2a39 = TriggerKillScreen + $2a5b = GetSection + $2a6c = GetSectionBCD + $2a75 = SkipSection + SECTION: $2a81-$2d36 ($02b6 bytes) ["Grading Data"] + $2a81 = sTGM1GradeScores + $2aa3 = sTGM3InternalGradeSystem + $2b43 = sTGM3GradeBoosts + $2b62 = sTGM3LevelMultiplier + $2b66 = sTGM3BaselineCOOL + $2b6f = sTGM3REGRETConditions + $2b83 = sDMGTGrading + $2c37 = sDMGTGaugeLUT + SECTION: $2d37-$2fd6 ($02a0 bytes) ["SFX Functions"] + $2d37 = SFXInit + $2d59 = SFXPopQueue + $2d6e = SFXPushQueue + $2d7f = SFXProcessQueue + $2d90 = !0 + $2dab = !1 + $2dad = SFXTriggerNoise + $2dba = !2 + $2dc7 = !3 + $2dd3 = SFXEnqueue + $2de8 = SFXEnqueue.findsfx + $2dfd = !4 + $2e0d = !5 + $2e1d = !6 + $2e2d = !7 + $2e3d = !8 + $2e4d = !9 + $2e5d = !10 + $2e6d = !11 + $2e7d = !12 + $2e8d = !13 + $2e9d = !14 + $2ead = !15 + $2ebd = !16 + $2ecd = !17 + $2edd = !18 + $2eec = !19 + $2efb = !20 + $2f0a = !21 + $2f19 = !22 + $2f27 = !23 + $2f35 = !24 + $2f42 = SFXKill + $2f75 = SFXPlayNoise + $2f80 = SFXPlayNoise.noisereg + $2f8d = !25 + $2f97 = SFXPlayNoise.savenoiseplayhead + $2fa0 = SFXPlay + $2fab = !26 + $2fae = SFXPlay.play + $2fba = SFXPlay.getRegister + $2fc4 = !27 + $2fce = SFXPlay.savePlayhead + SECTION: $2fd7-$3207 ($0231 bytes) ["RNG Functions"] + $2fd7 = HarvestEntropy + $2fdd = HarvestEntropy.loop + $2ffe = RNGInit + $3034 = !0 + $3064 = RNGInit.complexinit + $307b = !1 + $3096 = ShiftHistory + $30b3 = GetNextHellPiece + $30b8 = GetNextTGM1Piece + $30bb = !2 + $30d3 = !3 + $30d5 = GetNextTGM2Piece + $30d8 = !4 + $30f0 = !5 + $30f2 = GetNextNesPiece + $3100 = GetNextTGM3Piece + $3103 = !6 + $3126 = !7 + $3129 = !8 + $3139 = !9 + $3143 = !10 + $3151 = !11 + $3160 = !12 + $316c = !13 + $3178 = !14 + $3184 = !15 + $3190 = !16 + $319c = !17 + $31a8 = !18 + $31b7 = GetNextPiece + $31c5 = GetNextPiece.nextpiecejumps + $31d4 = Next35Piece + $31d4 = !19 + $31de = Next7Piece + $31de = !20 + $31e8 = NextByte + SECTION: $3208-$33cf ($01c8 bytes) ["Hi Score Functions"] + $3208 = CheckAndAddHiscore + $3212 = CheckAndAddHiscore.checkloop + $3217 = CheckAndAddHiscore.checkgrade + $3220 = CheckAndAddHiscore.oldgraded + $322f = CheckAndAddHiscore.oldungraded + $3236 = CheckAndAddHiscore.checklevel + $325b = CheckAndAddHiscore.checkscore + $329e = CheckAndAddHiscore.notbetter + $32ab = CheckAndAddHiscore.better + $32ad = InsertHiScore + $32ad = InsertHiScore.copylower + $32be = InsertHiScore.copyupper + $32cb = !0 + $32df = InsertHiScore.findrow + $32ec = !1 + $32f0 = InsertHiScore.insert + $3349 = InsertHiScore.persist + $335a = GetHiScoreEntry + $336f = !2 + $3373 = GetHiScoreEntry.store + $337c = InitTargetHSTable + $3387 = InitTargetHSTable.jumps + $339c = InitTargetHSTable.dmgt + $33a1 = InitTargetHSTable.tgm1 + $33a6 = InitTargetHSTable.tgm3 + $33ab = InitTargetHSTable.deat + $33b0 = InitTargetHSTable.shir + $33b5 = InitTargetHSTable.chil + $33ba = InitTargetHSTable.myco + $33bd = InitTargetHSTable.store + SECTION: $33d0-$3519 ($014a bytes) ["Progress Data"] + $33d0 = sProgressData + SECTION: $351a-$3659 ($0140 bytes) ["Hi Score Data"] + $351a = sHiscoreDefaultData + SECTION: $365a-$378d ($0134 bytes) ["Input Functions"] + $365a = InputInit + $366c = GetInput + $366c = GetInput.btns + $3679 = GetInput.readA + $367d = GetInput.setA + $3688 = GetInput.clearA + $368b = GetInput.readB + $368f = GetInput.setB + $369a = GetInput.clearB + $369d = GetInput.readSelect + $36a1 = GetInput.setSelect + $36ac = GetInput.clearSelect + $36af = GetInput.readStart + $36b3 = GetInput.setStart + $36be = GetInput.clearStart + $36c1 = GetInput.dpad + $36ce = GetInput.readUp + $36d2 = GetInput.setUp + $36dd = GetInput.clearUp + $36e0 = GetInput.readDown + $36e4 = GetInput.setDown + $36ef = GetInput.clearDown + $36f2 = GetInput.readLeft + $36f6 = GetInput.setLeft + $3701 = GetInput.clearLeft + $3704 = GetInput.readRight + $3708 = GetInput.setRight + $3713 = GetInput.clearRight + $3716 = GetInput.priorities + $3723 = GetInput.jumps + $3732 = GetInput.dlru + $3745 = GetInput.ulrd + $3758 = GetInput.lrud + $3765 = GetInput.udlr + $3772 = GetInput.zeroud + $3778 = GetInput.zerolr + $377e = GetInput.zerolrd + $3786 = GetInput.zerolru + SECTION: $378e-$386d ($00e0 bytes) ["Score Functions"] + $378e = ScoreInit + $37b6 = IncreaseScore + $37ee = IncreaseScore.doConvert + $37f0 = !0 + $3806 = IncreaseScore.carry + $3808 = IncreaseScore.postConvert + $3815 = !1 + $381c = IncreaseScore.preAddDigit + $3844 = IncreaseScore.addDigit + $385a = IncreaseScore.nextDigit + SECTION: $386e-$3938 ($00cb bytes) ["Title Function Trampolines"] + $386e = SwitchToTitle + $3877 = TitleEventLoopHandler + $3881 = TitleVBlankHandler + $388b = PersistLevel + $3899 = DrawSpeedMain + $38e9 = DrawSpeedSettings + SECTION: $3939-$39fe ($00c6 bytes) ["Time Functions"] + $3939 = TimeInit + $3959 = StartCountdown + $3967 = ResetGameTime + $3972 = CheckTorikan + $3989 = CheckTorikan.failure + $398b = CheckTorikan.success + $398e = HandleTimers + $39b4 = HandleTimers.reduce + $39c1 = HandleTimers.clock + $39db = HandleTimers.go + SECTION: $39ff-$3ab0 ($00b2 bytes) ["Progress Functions"] + $39ff = SetProgress + $3a0a = SetProgress.loop + $3a0e = SetProgress.correct + $3a35 = SetProgress.wvr_u1 + $3a41 = SetProgress.wvr_u2 + $3a4f = SetProgress.wvr_u3 + $3a5b = SetProgress.wvr_u4 + $3a69 = SetProgress.wvr_u5 + $3a75 = SetProgress.wvr_u6 + $3a83 = SetProgress.wvr_u7 + $3a8f = SetProgress.wvr_u8 + $3a9d = SetProgress.wvr_u9 + $3aa9 = SetProgress.wvr_u10 + SECTION: $3ab1-$3b48 ($0098 bytes) ["Code Entry Point"] + $3ab1 = Main + $3ada = Main.notgbc + $3ae0 = Main.wvr_u1 + $3b0d = EventLoop + $3b23 = EventLoop.eventloopjumps + $3b2c = EventLoopPostHandler + $3b2e = EventLoopPostHandler.wvb_u2 + $3b40 = EventLoopPostHandler.vblankjumps + SECTION: $3b49-$3b9a ($0052 bytes) ["Tile Functions"] + $3b49 = LoadTitleTiles + $3b67 = LoadGameplayTiles + $3b7d = LoadGameplayTiles.gbc + $3b8c = LoadGameplayTiles.dmg + SECTION: $3b9b-$3bd6 ($003c bytes) ["Time Data"] + $3b9b = sFramesToCS + SECTION: $3bd7-$3c04 ($002e bytes) ["Memory Functions"] + $3bd7 = UnsafeMemCopy + $3be0 = SafeMemCopy.wvr_u1 + $3be0 = SafeMemCopy + $3bef = UnsafeMemSet + $3bf7 = SafeMemSet + $3bf7 = SafeMemSet.wvr_u2 + SECTION: $3c05-$3c2a ($0026 bytes) ["Gameplay Function Trampolines"] + $3c05 = SwitchToGameplay + $3c0e = SwitchToGameplayBig + $3c17 = GamePlayEventLoopHandler + $3c21 = GamePlayBigEventLoopHandler + SECTION: $3c2b-$3c4f ($0025 bytes) ["Interrupt Initialization Functions"] + $3c2b = EnableScreenSquish + $3c45 = DisableScreenSquish + SECTION: $3c50-$3c71 ($0022 bytes) ["OAM Functions"] + $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: SECTION: $4000-$4007 ($0008 bytes) ["Bank ID BANK_OTHER"] @@ -3118,7 +3126,7 @@ WRAM0 bank #0: $ceeb = wTGM3Droughts $cef2 = wTGM3GeneratedIdx $cef3 = wTGM3WorstDroughtIdx - SECTION: $cef4-$cf06 ($0013 bytes) ["Level Variables"] + SECTION: $cef4-$cf07 ($0014 bytes) ["Level Variables"] $cef4 = wBoneActivationLevel $cef6 = wInvisActivationLevel $cef8 = wKillScreenActivationLevel @@ -3132,166 +3140,167 @@ WRAM0 bank #0: $cf04 = wLockLevel $cf05 = wShouldGoStaffRoll $cf06 = wNoMoreLocks - SECTION: $cf07-$cf18 ($0012 bytes) ["Grade Variables"] - $cf07 = wDecayRate - $cf08 = wGradePoints - $cf09 = wInternalGrade - $cf0a = wDisplayedGrade - $cf0b = wEffectTimer - $cf0c = wRankingDisqualified - $cf0d = wDecayCounter - $cf0e = wGradeGauge - $cf0f = wSMult - $cf10 = wDMult - $cf11 = wTMult - $cf12 = wSRate - $cf13 = wDRate - $cf14 = wTRate - $cf15 = wQRate - $cf16 = wTGM1level300RequirementMet - $cf17 = wTGM1level500RequirementMet - $cf18 = wTGM1level999RequirementMet - SECTION: $cf19-$cf22 ($000a bytes) ["Progress Variables"] - $cf19 = wProgress0B1 - $cf1a = wProgress0B2 - $cf1b = wProgress1B1 - $cf1c = wProgress1B2 - $cf1d = wProgress2B1 - $cf1e = wProgress2B2 - $cf1f = wProgress3B1 - $cf20 = wProgress3B2 - $cf21 = wProgress4B1 - $cf22 = wProgress4B2 - SECTION: $cf23-$cf2b ($0009 bytes) ["Globals"] - $cf23 = wSwapABState - $cf24 = wRNGModeState - $cf25 = wRotModeState - $cf26 = wDropModeState - $cf27 = wSpeedCurveState - $cf28 = wAlways20GState - $cf29 = wInitialA - $cf2a = wInitialB - $cf2b = wInitialC - SECTION: $cf2c-$cf32 ($0007 bytes) ["Title Variables"] - $cf2c = wSelected - $cf2d = wTitleMode - $cf2e = wProfileName - $cf31 = wDisplayingScoreMode - $cf32 = wScoreFlipTimer - SECTION: $cf33-$cf38 ($0006 bytes) ["Time Variables"] - $cf33 = wMinutes - $cf34 = wSeconds - $cf35 = wFrames - $cf36 = wCountDown - $cf38 = wCountDownZero - SECTION: $cf39-$cf3c ($0004 bytes) ["Banking Variables"] - $cf39 = wBankBackup - SECTION: $cf3d-$cf40 ($0004 bytes) ["Gameplay Variables"] - $cf3d = wRollLine - $cf3e = wInStaffRoll - $cf3f = wBigModeTransfered - $cf40 = wGameOverIgnoreInput - SECTION: $cf41-$cf43 ($0003 bytes) ["GBC Variables"] - $cf41 = wOuterReps - $cf42 = wInnerReps - $cf43 = wTitlePal - SECTION: $cf44-$cf44 ($0001 byte) ["SRAM Variables"] - $cf44 = wTarget - EMPTY: $cf45-$cfff ($00bb bytes) - TOTAL EMPTY: $00bb bytes + $cf07 = wSkippedSectionsBCD + SECTION: $cf08-$cf19 ($0012 bytes) ["Grade Variables"] + $cf08 = wDecayRate + $cf09 = wGradePoints + $cf0a = wInternalGrade + $cf0b = wDisplayedGrade + $cf0c = wEffectTimer + $cf0d = wRankingDisqualified + $cf0e = wDecayCounter + $cf0f = wGradeGauge + $cf10 = wSMult + $cf11 = wDMult + $cf12 = wTMult + $cf13 = wSRate + $cf14 = wDRate + $cf15 = wTRate + $cf16 = wQRate + $cf17 = wTGM1level300RequirementMet + $cf18 = wTGM1level500RequirementMet + $cf19 = wTGM1level999RequirementMet + SECTION: $cf1a-$cf23 ($000a bytes) ["Progress Variables"] + $cf1a = wProgress0B1 + $cf1b = wProgress0B2 + $cf1c = wProgress1B1 + $cf1d = wProgress1B2 + $cf1e = wProgress2B1 + $cf1f = wProgress2B2 + $cf20 = wProgress3B1 + $cf21 = wProgress3B2 + $cf22 = wProgress4B1 + $cf23 = wProgress4B2 + SECTION: $cf24-$cf2c ($0009 bytes) ["Globals"] + $cf24 = wSwapABState + $cf25 = wRNGModeState + $cf26 = wRotModeState + $cf27 = wDropModeState + $cf28 = wSpeedCurveState + $cf29 = wAlways20GState + $cf2a = wInitialA + $cf2b = wInitialB + $cf2c = wInitialC + SECTION: $cf2d-$cf33 ($0007 bytes) ["Title Variables"] + $cf2d = wSelected + $cf2e = wTitleMode + $cf2f = wProfileName + $cf32 = wDisplayingScoreMode + $cf33 = wScoreFlipTimer + SECTION: $cf34-$cf39 ($0006 bytes) ["Time Variables"] + $cf34 = wMinutes + $cf35 = wSeconds + $cf36 = wFrames + $cf37 = wCountDown + $cf39 = wCountDownZero + SECTION: $cf3a-$cf3d ($0004 bytes) ["Banking Variables"] + $cf3a = wBankBackup + SECTION: $cf3e-$cf41 ($0004 bytes) ["Gameplay Variables"] + $cf3e = wRollLine + $cf3f = wInStaffRoll + $cf40 = wBigModeTransfered + $cf41 = wGameOverIgnoreInput + SECTION: $cf42-$cf44 ($0003 bytes) ["GBC Variables"] + $cf42 = wOuterReps + $cf43 = wInnerReps + $cf44 = wTitlePal + SECTION: $cf45-$cf45 ($0001 byte) ["SRAM Variables"] + $cf45 = wTarget + EMPTY: $cf46-$cfff ($00ba bytes) + TOTAL EMPTY: $00ba bytes HRAM bank #0: - SECTION: $ff80-$ff9a ($001b bytes) ["High Field Variables"] - $ff80 = hPieceDataBase - $ff82 = hPieceDataBaseFast - $ff84 = hPieceDataOffset - $ff85 = hCurrentLockDelayRemaining - $ff86 = hGrounded - $ff87 = hWantedTile - $ff88 = hWantedG - $ff89 = hActualG - $ff8a = hGravityCtr - $ff8b = hWantX - $ff8c = hYPosAtStartOfFrame - $ff8d = hWantRotation - $ff8e = hRemainingDelay - $ff8f = hClearedLines - $ff93 = hLineClearCt - $ff94 = hComboCt - $ff95 = hLockDelayForce - $ff96 = hDownFrames - $ff97 = hAwardDownBonus - $ff98 = hStalePiece - $ff99 = hBravo - $ff9a = hShouldLockIfGrounded - SECTION: $ff9b-$ffb5 ($001b bytes) ["High Level Variables"] - $ff9b = hCurrentDAS - $ff9c = hCurrentARE - $ff9d = hCurrentLineARE - $ff9e = hCurrentLockDelay - $ff9f = hCurrentLineClearDelay - $ffa0 = hCurrentIntegerGravity - $ffa1 = hCurrentFractionalGravity - $ffa2 = hNextSpeedUp - $ffa4 = hSpeedCurvePtr - $ffa6 = hStartSpeed - $ffa8 = hRequiresLineClear - $ffa9 = hLevel - $ffab = hCLevel - $ffaf = hNLevel - $ffb5 = hPrevHundreds - SECTION: $ffb6-$ffc7 ($0012 bytes) ["Score Variables"] - $ffb6 = hScore - $ffbe = hScoreIncrement - $ffc0 = hScoreIncrementBCD - SECTION: $ffc8-$ffd2 ($000b bytes) ["High RNG Variables"] - $ffc8 = hRNGSeed - $ffcc = hPieceHistory - $ffd0 = hNextPiece - $ffd1 = hUpcomingPiece1 - $ffd2 = hUpcomingPiece2 - SECTION: $ffd3-$ffdc ($000a bytes) ["High Gameplay Variables"] - $ffd3 = hCurrentPiece - $ffd4 = hCurrentPieceX - $ffd5 = hCurrentPieceY - $ffd6 = hCurrentPieceRotationState - $ffd7 = hHeldPiece - $ffd8 = hHoldSpent - $ffd9 = hMode - $ffda = hModeCounter - $ffdb = hPrePause - $ffdc = hRequestedJingle - SECTION: $ffdd-$ffe6 ($000a bytes) ["OAM DMA"] - $ffdd = hOAMDMA - $ffe3 = !0 - SECTION: $ffe7-$ffef ($0009 bytes) ["High Input Variables"] - $ffe7 = hUpState - $ffe8 = hDownState - $ffe9 = hLeftState - $ffea = hRightState - $ffeb = hAState - $ffec = hBState - $ffed = hStartState - $ffee = hSelectState - $ffef = hFilterMode - SECTION: $fff0-$fff8 ($0009 bytes) ["High SFX Variables"] - $fff0 = hPlayhead - $fff2 = hCurrentlyPlaying - $fff3 = hPlayQueue - $fff7 = hNoisePlayhead - SECTION: $fff9-$fffa ($0002 bytes) ["High Time Variables"] - $fff9 = hFrameCtr - $fffa = hEvenFrame - SECTION: $fffb-$fffb ($0001 byte) ["High Globals"] - $fffb = hGameState - SECTION: $fffc-$fffc ($0001 byte) ["High Interrupt Variables"] - $fffc = hLCDCCtr - EMPTY: $fffd-$fffe ($0002 bytes) - TOTAL EMPTY: $0002 bytes + SECTION: $ff80-$ff9c ($001d bytes) ["High Level Variables"] + $ff80 = hCurrentDAS + $ff81 = hCurrentARE + $ff82 = hCurrentLineARE + $ff83 = hCurrentLockDelay + $ff84 = hCurrentLineClearDelay + $ff85 = hCurrentIntegerGravity + $ff86 = hCurrentFractionalGravity + $ff87 = hNextSpeedUp + $ff89 = hSpeedCurvePtr + $ff8b = hStartSpeed + $ff8d = hRequiresLineClear + $ff8e = hLevel + $ff90 = hCLevel + $ff94 = hNLevel + $ff98 = hTrueCLevel + $ff9c = hPrevHundreds + SECTION: $ff9d-$ffb7 ($001b bytes) ["High Field Variables"] + $ff9d = hPieceDataBase + $ff9f = hPieceDataBaseFast + $ffa1 = hPieceDataOffset + $ffa2 = hCurrentLockDelayRemaining + $ffa3 = hGrounded + $ffa4 = hWantedTile + $ffa5 = hWantedG + $ffa6 = hActualG + $ffa7 = hGravityCtr + $ffa8 = hWantX + $ffa9 = hYPosAtStartOfFrame + $ffaa = hWantRotation + $ffab = hRemainingDelay + $ffac = hClearedLines + $ffb0 = hLineClearCt + $ffb1 = hComboCt + $ffb2 = hLockDelayForce + $ffb3 = hDownFrames + $ffb4 = hAwardDownBonus + $ffb5 = hStalePiece + $ffb6 = hBravo + $ffb7 = hShouldLockIfGrounded + SECTION: $ffb8-$ffc9 ($0012 bytes) ["Score Variables"] + $ffb8 = hScore + $ffc0 = hScoreIncrement + $ffc2 = hScoreIncrementBCD + SECTION: $ffca-$ffd4 ($000b bytes) ["High RNG Variables"] + $ffca = hRNGSeed + $ffce = hPieceHistory + $ffd2 = hNextPiece + $ffd3 = hUpcomingPiece1 + $ffd4 = hUpcomingPiece2 + SECTION: $ffd5-$ffde ($000a bytes) ["High Gameplay Variables"] + $ffd5 = hCurrentPiece + $ffd6 = hCurrentPieceX + $ffd7 = hCurrentPieceY + $ffd8 = hCurrentPieceRotationState + $ffd9 = hHeldPiece + $ffda = hHoldSpent + $ffdb = hMode + $ffdc = hModeCounter + $ffdd = hPrePause + $ffde = hRequestedJingle + SECTION: $ffdf-$ffe8 ($000a bytes) ["OAM DMA"] + $ffdf = hOAMDMA + $ffe5 = !0 + SECTION: $ffe9-$fff1 ($0009 bytes) ["High Input Variables"] + $ffe9 = hUpState + $ffea = hDownState + $ffeb = hLeftState + $ffec = hRightState + $ffed = hAState + $ffee = hBState + $ffef = hStartState + $fff0 = hSelectState + $fff1 = hFilterMode + SECTION: $fff2-$fffa ($0009 bytes) ["High SFX Variables"] + $fff2 = hPlayhead + $fff4 = hCurrentlyPlaying + $fff5 = hPlayQueue + $fff9 = hNoisePlayhead + SECTION: $fffb-$fffc ($0002 bytes) ["High Time Variables"] + $fffb = hFrameCtr + $fffc = hEvenFrame + SECTION: $fffd-$fffd ($0001 byte) ["High Globals"] + $fffd = hGameState + SECTION: $fffe-$fffe ($0001 byte) ["High Interrupt Variables"] + $fffe = hLCDCCtr + TOTAL EMPTY: $0000 bytes SUMMARY: - ROM0: 15376 bytes used / 1008 free + ROM0: 15488 bytes used / 896 free ROMX: 68697 bytes used / 29607 free in 6 banks SRAM: 2951 bytes used / 5241 free in 1 bank - WRAM0: 3909 bytes used / 187 free - HRAM: 125 bytes used / 2 free + WRAM0: 3910 bytes used / 186 free + HRAM: 127 bytes used / 0 free diff --git a/bin/DMGTRIS.pocket b/bin/DMGTRIS.pocket index 4bbabf413e49856715d80ddd250dae1303e12068..022c0bba80a584dbf7ba7c701d71de8065414fa2 100644 GIT binary patch delta 16084 zcmcI~3t$x0x&O{?vYXA5O-R`A2r~&JLlBY>HH+DdNe~vW8njx9Z?Q;Qt+e*uf-SNE z6pC5_R|#mZji_i*Srmo%D2=S*Zo)9P%B!N@qrK8HA{^g3>hAw{&dff7;G=&pVds3` zcfRwT?|kPm=XcI@cII?;=Cr(I{<9f=O>fbRW=;2N#u=L4tQoFW{S0k^ZWCjPL;|t^ z%RNJ5n#gT|=IWL@p?38z?h+mkIfS#b{&9y<8#-U8bk%BcPp>g{%kP9O4rPC{B9M+U zhh$qTh&J_DbD1D?^VB8u3gA7qwUX@x!Iq`&Zw`|V#igI6#f+qlYqPgFf|d;zvjM%Y zl(E#ypui0sYj)a<@mhy;iQ9cRa*aFkfIITKJ5rV#@#WIb4;94)vA{S>^T%C2yJACq zU}j3KF9=sK$Bc2BU+R7V-nv`FFBHejT9A=r%_lF3T6xoqaUmhMr25;d2ES4Do9l&! z6)jnd+mvj%&Hy1OPPv*9cEur&V1z@l$%7e@1tO0T*-DNe+ZFpvdUNQW+~LBqEj_t6 z2zBk6lB-YBhE|psle894;)iad9aOs}zU}FavLKh)lv40aF?28#^yc_r zu}=Ctv@O5A)$C1F`5pcHihI`yXPmuDvh`*bRG(*xeh$%fQQjruV7e+axcqE4i_`+SoPH7d zY55p#rZ)6k`HjMoBD8$yAlKdT|v9A$_}8F`_<4IeTjPuu4XD2`5jSu_?et1nh6^d(W` zC5D%>ys}i@D7iuLnt5YK{H$q|X5@A2qctPHTd&rPf^NM=GYY$PSu={d^)XmDy7fBE z$m!PWHN)MlH)uw2H+e7AKjLR2Z(T@ki^#UI<%{A8@t>G_yquKNdLv<3p&wRE2-a!J z2%VQ!>^d(Gz1(hnlm?#HtOz=<8**NI(hgGY0a8|D%4}F4)UA8Er9ijG)h)Ezu+T`$ zGw7ExXxDl7rIi91^zsb)r3~7&K0`l)UY?>u7mjRb9H*(t z`NbxzuHHqN@$mjq%7}<}w&Y4T*L#7K5ftwfDI+XipOg_8Z>^LO8t-r^kP1k%w@^xl zC%f5eGbV>V5qh>(Ry2)Z+8pyitGdt1B4Gd(L4`g2&$hy`KESt#&QE{4A zhUt7HCr2Y9xAXfQkg>3yqv>u<&(-uiO)qHBFl+TfO)t{)A)4;h^m0u}Ad4*#g6zb^ zwqv!iLE^PZb1MxwbXjGkAcq!LRt9A)(AnvAW`ZjRgf_EvJ+NMTW0I@ZnpRn_VxTCF}9zfx_HUZxq3 zC*lS5&Uj9JiMJASdyu9$bPszJYhDqP90EHN*qNZn6bMWpKtMOojAzO1Scb>M?ed_2 zQKHQ>2C+Cb{&vYs?|5S{cn{;N;`ZOl!V(C}jZz4UnXoV=%reR#T$P9m^&Vq&=wDS* zut-~inADF9E3ib0KP!qkM1N^K$!WbqA9zFSA`PEv_xEy?oKk z1b+gNJBd z7vhY>#@ZSj+wJRXGci zR=lu+!9EI+R@;LJS;Pu+3{I3|Kgb3o-cBqC@sXmJu8Io>EcMI)vk`m1=_o8WohwmB za*G-L7UQEABl@@jY>i)5QP8ZZGzx3BXn?L_^X3rkKQqvOX8)O;fg27Lb?(dwz?+`v zg5&Ko9}C2Mr@e5v>BFE{yto(9^_i@Ya)4{fW!N5L4u#olViO5|1ldG7v3pKI3zI+S zf~MOw-JxL~>e-s^)O43dZ=FYPn_C+=R0I?EEa-0naR<4Z3s#eLreGCWdm~w~kla#B zZm%UPd1jZHwT3fyffvrO70&-I7Lwo}MjWGr@P0mpUlbaPAS*FT1 z@9zy4WKqwm1nL&D*bWAgLq!3)u9K{b=LUT_`*O)TWS$B+b0a|4c9OO6+yjW!+L-kD z?nS2b&K{p4N@p;IyLx<$Vwojh)8nfa-HVvKtH(D?GIoO|UA3$fS;OeNxF)%i-rhl1 z2Ba@`*WzWce$3@RTJVhME4|@a(Zk}0vG`)L3!axg!f&c0CR zm{GOpu>=OQRVUsfX04bEtX|9uvu4ba(C#s1vlf#jq?0TqH?atX$uhpi3gmdP{^@T0 zv)$ZsjIIjwi~Tk1uM-`%41)e95L;si*G{1Z(+5Lr%aGa^?ZJ=8$K(_8Dfuu=-X|ZB z&xjGD9|h>ga1~C>;{`jftfgY z67^Qc^F+6@gM6m^92La#!5rXB5L`j8@((K~z*g~Syf{kVpGQBK`;_ch;9a(We7FEr z6p)XU9P+->Nlu8 z9=?%$wvZTrH@yF|oes_GfVS0fq60a+WY)1r5Cg+1b_DHP2#;kOV6DeSXy2wP(ntG) zNc!n6Ja=s;%KBm6WfNjrb*eiWR{%(v0eies9rte9x=PUgAaw1H26OH^g`CBZA_mV|3 zZJX>=>?|Y0PCQ$F4?3@qJ?gfG$hL+6eTBSC_mEc>kUbQt6qYD#K(srCa^5$T?8`^U zr68rf*)NI!AiyBYW#3wuZ=- z`pEnB>c1Keof)sH|0KpJSKI|kQbU~$BO7H+UDz1bm+e+BYP{f5Ap_dyfg`Uty4by|g6R=aNR4+HG)S1#06%dcD=*xB^%tIxc z%{qEI>ztHMwF(8PT1Aejmc`DdXip`5x{^LqNuRBx&sEaDRMPF0^skjhomOeoq()#DAR#Epn_&1m1&(N_6 zwch28h|nJ!Blk5%HZ(>aX^d=cj6BsCd1gyPa+Dk+G$fo}5_}i2 z$nleRy^b(>w|}abM~|A4qfBzNe+DGflu#z2{Xd4}m?=5NB*zqy*r@dv-~|qw*@s#7 zVO~HtB|4Mnyqb5oBuL(2qIddRVfBcqbc9Kc(D$&bVJ9e6O=#1ErpV-`$d8*MbDDsh zsE(ENT>1{4r=pZC>K#W9gK6X<$rKG`2~KUG74;VI`~s74!YiWVZSW46cZ4TLEcOUF z48DgvO`ajolIO@@$aeBq(o3GlOJfI#kQc~{WG8uvL`e*r#N$P@cOHFyu4hL=pa;~W zO@j9e_WWZ4&%%%Kn5rHPEp95A?DW0oe!jRQmKT$H6XDAFQY_)LDT(c3R@PYWXB5UM zs-UQdqB@F7DXOM$AWU{-i*HDOO?YCVzc-Bx_F($}fB9zInWd>YtyrZPF|X}dFviN1i_$Wy+Cl4>y)bc-FUaTmshWP8rk}3qO`7gwNP8j!1unqyiCW$b zdawz{-#!g&QZZ(ns`dCv#3JJ~?P=_1T*m2aWweLUT`~H(pL~8uAYagf@nO+;X*BMQ z8ckY<;nM<-i!N^7TVUBXO&bm@7Eu_DUxfqd)3kWA=wv3Fqj>sr;ac3^8%7fP)x^@0 znDpO`Y-1SkpkWm|lyJjn!_@PYIoO zMoEwzW{OU{NX{9AcTk;rjm`8fOwLs=@vFZZrq1xISBy|6PE;>CU2PhtUhfYxRO8af zLG?PH+FhsqXPtWO>FVthrK)E7C6;N-*7?535PwASJ6F-Odc@Dw|4B%#sm#T`NUSKb zy##~MGd(a(vULhJhf10~fgeb=rGl*hv^k_a8M*ubT`ckhuFh2Q1ZE}KP)+miJs9#% zOpY=E z7=PCsLBxTXaf*g>_Mx7Iv!pp|@t$F?{l&ASn=RUV6>C}o3R5x^&dyM1H{0H9jMe%B z(3>$!`pH_n&zPZ$XGu3%w0EfI>WrLU@th!6^V-y33(5*|Zp>5p6Lv+@ZAamh?5)eb zD%*iLr}ePz>k~A+QB(I$H|;FBGBcmc)K<53sdHl+2ElD@k-oNIq_I76PkTgbr|-sv zz8k0D)xi^rWW0z~S?GIwN_^0(TibAXYfGbMOwj5O{>a|x+&PqCULj$ze7ilS*diE| zGXyL8pSC0Vu1OK^S&{qKIE1|5IJN|4E0@mqI+RQ1OaEAl`!nn`(-OxzCb4Hos<_0F zA(_M_Ss9Y6xFkC*LH(mOhTuA++h@5ixKygVn;~J$0pwI$IqP}OTkA}WjEov9;|ZQ| zIGrI|89R9fwKCXAt3w`%lf_}-0JchIeQ$A{F}yyUmgjr)SyGY5R-y4PJ_-riu*gRn5xyx?VkI>6pEm+(1S?`YC2k#z!Ic_3_eTZG7n2qYzUJ9qw)(ynuzLVd|NcDly) zp|?)Kw958J3jJNHoq{yWoK-Ej2#WDrqZpe*2)Ca}*!>U}3xD><{pL$?gOmU`ZV+?N{su_d34qm-U(DzWv)k5CG{T(VdQ$+PG z%Vhyz!tykn;c*rdn;wTV9Ck3V>1Q~@U#@Ms8OGHm^P9Qrl=J*)7sF|i9mk>KGyImf zVJn5RS+dJ-IvGy-icUh0^aWZM#IyRIm9XZ+|D8F)_*3ify+O5TN383x!$GC>DM7u4 z3(pv4ZBhd_L2d}fb;)j_4mYALz#4XCbh>0xkSduJBuk!Pu%t!;yM>II`*GoegxkD( zRd4l0E}U*j3v3zEk_)FJKx)NwQ!#R@&yc$gyM@yQxl7CyCI)YPTJ+G{dc^#c4vcv| zNPsP;xBdkv>9*&@BK4osuJ~DbsxlxU>#fg*E$eo8g_jTp3Qq@QI}vD0oXW+0D%3Gi ztHupj%BS*~O4w%{farKnY*=ed*d`SVzYv7)CB0VIHo07Qu{yYwY}Q2;+uO&b^-+P^ z%Gl>D(!G7cwL)2fkxTl7;Wkd9RTZi}QjJ-f*J5AjSs#_|h@l+YIj)a-k~ENlq)KhO zgx4&Krg6Tj1et9syOtS$G?=Ehrpewk*_S5wq{%nZ>+J+4gvwP$v9re}L{&SF~Mlsrtt@=jyljzWKLE^Q16&ifkcI zk|)SE@({V7^??;$B~B*MrDQ$O^COB)AEByex2eBqquk7In3+GfsVmyq*AfQ++{5HR zGPkRKl5lgrrS~@abVJwklZ2A|4Sur0`_DJ&h89T3B%vX=pZr;EY@-LrM*0+{C4e1y zDk2B4w-Ur``f5DUi&qB*bQXQrYiD~Y(M>n{4>`z2+&@}5N0Eaa>yEWk=*AY7mG+RD z(b&iW^diox+|R39+t@KO-N?Odp-=FFe)2?Q?UW9-GTZxLXKy?k31c07|2PY*U6!$K zje?6FCN(STQqK~G1X(lvDvO5|?#$X)c*JrjkbPE_18U@+qItfSZ!*wwVgp8X(DG() z+$m0_`&(Eae~mLNO8Z;L{PiQ4?*xx6n(mnJWTf?_T_9_FXw|Q4baYx1yB15=)*1KVebfR z^lkF#Y`f31XIa_j(TDvgi^?BHq=V^sfHU$0<_~?C?DIAlqKeYh?8_}#G%8edPq{IY zCB^h%_}$}khOvx!v%*-(!YHObISDi6L0;e-hL^+u+Yw~Rt=L4DV+58mR*VJ?K!l!*mnJI4$-HuN#wTf?X_N&1Fqxr;*zz^5pUKK?G3da9noMFTf0A&Tr_1 z&s{603d4gBBn&%4^JlUG;zV@a0}1a0y4P9XNgkj}19W|lTt)AP#t8brP8VcMuh1-% zYpOfc+-c@&V=b%nfq=EH(xvf=`rP>7`s#RYeVg|(l+HR3&v|v@w0OSnxA8$;wbKNT zu)fPbO{hR}@id%3n03eCg90B|I@wBpV5L8_(u=J0N|vgBs$>z99e(l-AG08i7$eyD z^B`^)0D5kmjvdtY>5*5a)2%zR$X4S_G+lP_Gc&nH9oD9npG||02IylQbkj^4?!Iq5 z@{91b$Ox6*L>^J!JSS2;9a~tii^(IA?bEUK0*wz;{W#p z&8lSXp+4*>l8W>XXjZ+vRgne1ivFYR@7v!86Hn@E^GMmEt$ z$zu!1qu6F`RuY9a0+t|an|!wLjD7Z_cm=Y}$HxhG3mW(d&acXTj`ulz>|`06PL>fq zQAXt0wvImtE!ka5RtaTYT|X2Qe4qsUQigqYF*>-=b87ks2+(WKPtylJbDP;~Tpi0! z#@HF*mLbajvhy)z6`7{S>(twu)O)LO7_C-RhRLh?ne1HbpfZEJrv4;bagZ;S7>*a) z>yA4=8_J_57UFcaRL(IbVleep{7Cxs1@vIobr%RV!MPLZYw;OkaTpfa8Jq`aaAEAk z=xZ%F!*rkunY`xFXG`N_h!z9;Ewfcts0H6pImy8=az7l9i>vp8s?v&%wfYF^D1@a1 z7hz-{Y+}_rKwibx!6pZ@)$3+^FM{S9<}M*0dk33b0qvvST0icyqSwJG`V=CyVYJ1J?#9cNi!*$O%giiWW_G|{F;_pKi6^E}jCv>~r!fXE^8_Jc zo>Y)a4u*9F9~6_hnV+SVq3=CAuadB*{R!&_r4%-XU&*A^ zT#C=j)6(8{sW-aq%}azk9owF|M<~PBP0%;m*b-gJ!U~^Q$dH6lDJq9BSFBQVCVcH+ zV~R)PxhMwB$aOy6Lq$CJZr-5|CS=hpQZH#;~naJDBto528?xyfkk(^E9| z;VByX>=fOeLI2#My%%Hfk=Miv0D=^J?Oyv6b}ZH#b(`Z8vYol{mu0sVSMMnpjEXym zk(|I7H*Dwu(V>P zjCCrF(UNw5v{blxEZadtk7G1Xq3zA`x6?&L7aaiDoHtp3ZPxLC?c9G4ux%d**qFN~ z0BoA0QlWfC;%XF<{a{62cv4z{Hch4QT{-GE+f# zgR0XgiyN~b-1aG%elZAVHo9+#3E_A-v%^maR=J}Y2<`;7gJ$3vI{PL=nGo&-mXd~G z1_6`an5n54NW=$YTL2#-1EN{xP52bcHynKWE39l68|8SW-*|aqBfEG$u7A=}|GsZ_!5XE~#x>V@TLP`UaLiXrjK-IVV7UC{_Vbq|dNW zAB)d7p}u>smM-6wf%;y#ilM&v941YnzHMD=h335A0E|~Uhhx0bIUM7GV;JuoLsAiy zZ-#n^L?#+M_SK_@2(KV_2iN3iFo+G-N#NjVZD}}II>)nb4!i6zksj!uWzefL=%+L2 zH#2CrDhy`Ro4LT@AiEP&v|xv1pUd#z*}G1L2P*;dF-F;F<%lqON|6MC>URc#pXR4P Z;MMZi9AKo7-S-0m9oyb|Sg4r!{{UH{Gob(g delta 16029 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