From 21bafab8e177dfdfff7c40c207956dc715634d1f Mon Sep 17 00:00:00 2001 From: Randy Thiemann Date: Fri, 10 Nov 2023 10:29:40 +0100 Subject: [PATCH] Add profile framework. --- bin/DMGTRIS.GBC | Bin 131072 -> 131072 bytes bin/DMGTRIS.map | 398 ++++++++++++--------- bin/DMGTRIS.pocket | Bin 131072 -> 131072 bytes bin/DMGTRIS.sym | 301 +++++++++------- src/res/sources/map_title_main_credits.gbm | Bin 0 -> 4388 bytes src/sram.asm | 281 +++++++++++++-- src/state_title.asm | 28 +- 7 files changed, 683 insertions(+), 325 deletions(-) create mode 100644 src/res/sources/map_title_main_credits.gbm diff --git a/bin/DMGTRIS.GBC b/bin/DMGTRIS.GBC index 017c7f31cff3aeffa8438b765079d5f71205d099..abdedb52331830564cc2ea61563f3205cdec299a 100644 GIT binary patch delta 4480 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 C-+0>q delta 4140 zcmb_e3v3j}8Q!_~`ut$AV~mYqhmdfF+K11GLhx(lWOw<9QIRmOpUQ`)gPNh;H zYoJ=0P)pDbf#qKRNz0+?unn!U{PoS~I&|K;xX&jbC0K05Ob6l_GUh8rNYY0q>PPU- zF&&sWffyU<^F@@P;8cgB&GugF62sF;Jwf|5OIhnDNv^*b40QJ~pM%lPh976=Y#%1I zN#|0Fz^KDS8zxWSzzMXOepDMJwOBdSkQ^W9t+h1T9_85lY zGx=+xyK=|=Td>tb_ZIAB%gyR&u;99tj`fA)x>Qm(o+b~Hq z#5@cI^Bb?mihLAJ0J>QnzP?Cm*BB{zk$+4>Qqs+@)+|yohp*SHQqsx$HJg;I=9g%8 zDLIq(Y7R*~3Y$|>KO&k-QhSKTN@_3BawPQ_(cF^SN3>i?>D2NhrArnrs*EJKRV2Ym zSR~kPR!OKgNykgCT7g&q|~JuZxTWb6vOtaPfm(o0I0nkUJ) zXJPnh-=+5Y8iLBm(i*a45s6ljiAr+qLGolxL^(%xddY?gQc*!}R}z;OyL}1G!35cV z#$NTtQoa~lxUd_i!NYt_C)*AeA+wzD9Jr&;#XX ziNGjYL>(oGz(mNyCh7)*ycSUcl(ynp7vdl3^J&LPvWPF`gaF>!f$Vg%aVrA&bpw~Q z(27!E;4&HHWevoL3zd4nsXTyx+=1LQKuIa*3E)=ajjPFO#A_}z%hKl)3s^K8ofWHC zbPR?oEGqr(C`mFNyYS2lC060-7x3RZpaUe4Nn+hkB^Hz9eqCZUNml3*n@Q55OYGt= z+^9?pOv z?NDbfcO-x-4y1i4MjgmXk>A#eK32jt!wu(81t?Yk-Vbe6d?T zhLL0Mt=S3#{0WYjcO_kNm_k47Vp*`$CzU|uwG`9MtqYvTht>)V*y|5!;=I#jDvC4h zBo^eMns$dI1GSD4XhX905&f3S4~-3)ku2B@0GlN(?;+5fWWfqOj{>dNkoOX3R@6QX zv}086_Cq^_=0&=jpp-1u`V6l=qPn4j!RIN0aHHbsJed81O;9{cIBb4bt&v*9l%kD_ z(t61#Kuqfu=;~hkQ|@>jS=kT0l2fI$wfru5@wNQy`g{=13d3bK6X_i5%VX?xCXS58vHW6iqDNKim2-ke8Rv>yaFq-PA8nd#&4fDm zc{@~gE&^KqD_Vht(_9FU;=05cWt2R-5X`$8A4jNc1kNarQ#+&&)C^(?vmu6hMr_@P zYD(a4dml)*Z-Gp?$67Ef4qS@+eBF_a=w#0FJBy$v=Q&}WG7fPPHjHRZ;4u9Ho>mZwku7KrbWCnR3x?JA(5Mu{>P}%;y(#>N32!%W$x~3ZGR|*+Mtgn?i*ag+^}Z>8Dr*;{Bm zyaF2@>VE#G=yzx>r9?6nr+e>KiuJ<{=L<@^?K(m3rg;0C6wpv8e_HKy4-CX{!H{u_ zIvdAD8GJsDXJ+uFIG&xspU3h289W)so(y)#xH5yM$=H{{r853@2G5gmt%0?iAzatJ zE{v{P(gY4Z`@ax)Uz))C?uo!Z--_QEG6;O3^-cos|B6;8aASZtO#~JjMfBx25cooC zhQM1ovIM@|LJ2&$6@PEYAn=h6w95S-2z;ScC-8;VyArtiH)#U@dMj=lGKdOzuL*x> z!k?NjOHh&Cy5K81gI5_09^OV7yn5(v44zB$X_z8$VWy)^dT<9>5PX!3R*67nZ#VZ2 Iy87h50pqtg#{d8T diff --git a/bin/DMGTRIS.map b/bin/DMGTRIS.map index 7c11296..1a9f8fe 100644 --- a/bin/DMGTRIS.map +++ b/bin/DMGTRIS.map @@ -364,125 +364,146 @@ ROM0 bank #0: $2b92 = Next7Piece $2b92 = !20 $2b9c = NextByte - SECTION: $2bbc-$2d05 ($014a bytes) ["Progress Data"] - $2bbc = sProgressData - SECTION: $2d06-$2de5 ($00e0 bytes) ["Score Functions"] - $2d06 = ScoreInit - $2d2e = IncreaseScore - $2d66 = IncreaseScore.doConvert - $2d68 = !0 - $2d7e = IncreaseScore.carry - $2d80 = IncreaseScore.postConvert - $2d8d = !1 - $2d94 = IncreaseScore.preAddDigit - $2dbc = IncreaseScore.addDigit - $2dd2 = IncreaseScore.nextDigit - SECTION: $2de6-$2eb2 ($00cd bytes) ["Input Functions"] - $2de6 = InputInit - $2df8 = GetInput - $2df8 = GetInput.btns - $2e05 = GetInput.readA - $2e09 = GetInput.setA - $2e14 = GetInput.clearA - $2e17 = GetInput.readB - $2e1b = GetInput.setB - $2e26 = GetInput.clearB - $2e29 = GetInput.readSelect - $2e2d = GetInput.setSelect - $2e38 = GetInput.clearSelect - $2e3b = GetInput.readStart - $2e3f = GetInput.setStart - $2e4a = GetInput.clearStart - $2e4d = GetInput.dpad - $2e5a = GetInput.readUp - $2e5e = GetInput.setUp - $2e69 = GetInput.clearUp - $2e6c = GetInput.readDown - $2e70 = GetInput.setDown - $2e7b = GetInput.clearDown - $2e7e = GetInput.readLeft - $2e82 = GetInput.setLeft - $2e8d = GetInput.clearLeft - $2e90 = GetInput.readRight - $2e94 = GetInput.setRight - $2e9f = GetInput.clearRight - $2ea2 = GetInput.priorities - $2ead = GetInput.zero - SECTION: $2eb3-$2f78 ($00c6 bytes) ["Time Functions"] - $2eb3 = TimeInit - $2ed3 = StartCountdown - $2ee1 = ResetGameTime - $2eec = CheckTorikan - $2f03 = CheckTorikan.failure - $2f05 = CheckTorikan.success - $2f08 = HandleTimers - $2f2e = HandleTimers.reduce - $2f3b = HandleTimers.clock - $2f55 = HandleTimers.go - SECTION: $2f79-$3035 ($00bd bytes) ["Title Function Trampolines"] - $2f79 = SwitchToTitle - $2f82 = TitleEventLoopHandler - $2f8c = TitleVBlankHandler - $2f96 = DrawSpeedMain - $2fe6 = DrawSpeedSettings - SECTION: $3036-$30ec ($00b7 bytes) ["SRAM Functions"] - $3036 = RestoreSRAM - $308f = InitializeSRAM - SECTION: $30ed-$319e ($00b2 bytes) ["Progress Functions"] - $30ed = SetProgress - $30f8 = SetProgress.loop - $30fc = SetProgress.correct - $3123 = SetProgress.wvr_u1 - $312f = SetProgress.wvr_u2 - $313d = SetProgress.wvr_u3 - $3149 = SetProgress.wvr_u4 - $3157 = SetProgress.wvr_u5 - $3163 = SetProgress.wvr_u6 - $3171 = SetProgress.wvr_u7 - $317d = SetProgress.wvr_u8 - $318b = SetProgress.wvr_u9 - $3197 = SetProgress.wvr_u10 - SECTION: $319f-$3230 ($0092 bytes) ["Code Entry Point"] - $319f = Main - $31c8 = Main.notgbc - $31ce = Main.wvr_u1 - $31f5 = EventLoop - $320b = EventLoop.eventloopjumps - $3214 = EventLoopPostHandler - $3216 = EventLoopPostHandler.wvb_u2 - $3228 = EventLoopPostHandler.vblankjumps - SECTION: $3231-$3282 ($0052 bytes) ["Tile Functions"] - $3231 = LoadTitleTiles - $324f = LoadGameplayTiles - $3265 = LoadGameplayTiles.gbc - $3274 = LoadGameplayTiles.dmg - SECTION: $3283-$32be ($003c bytes) ["Time Data"] - $3283 = sFramesToCS - SECTION: $32bf-$32ec ($002e bytes) ["Memory Functions"] - $32bf = UnsafeMemCopy - $32c8 = SafeMemCopy.wvr_u1 - $32c8 = SafeMemCopy - $32d7 = UnsafeMemSet - $32df = SafeMemSet - $32df = SafeMemSet.wvr_u2 - SECTION: $32ed-$3312 ($0026 bytes) ["Gameplay Function Trampolines"] - $32ed = SwitchToGameplay - $32f6 = SwitchToGameplayBig - $32ff = GamePlayEventLoopHandler - $3309 = GamePlayBigEventLoopHandler - SECTION: $3313-$3337 ($0025 bytes) ["Interrupt Initialization Functions"] - $3313 = EnableScreenSquish - $332d = DisableScreenSquish - SECTION: $3338-$3359 ($0022 bytes) ["OAM Functions"] - $3338 = CopyOAMHandler - $3344 = ClearOAM - SECTION: $335a-$3368 ($000f bytes) ["Banking Functions"] - $335a = BankingInit - SECTION: $3369-$3372 ($000a bytes) ["OAM DMA Code"] - $3369 = OAMDMA - $3373 = OAMDMAEnd - EMPTY: $3373-$3fff ($0c8d bytes) - TOTAL EMPTY: $0c98 bytes + SECTION: $2bbc-$2dd0 ($0215 bytes) ["SRAM Functions"] + $2bbc = RestoreSRAM + $2c3e = RestoreSRAM.jumps + $2c56 = RestoreSRAM.dmgt + $2c5c = RestoreSRAM.tgm1 + $2c62 = RestoreSRAM.tgm3 + $2c68 = RestoreSRAM.deat + $2c6e = RestoreSRAM.shir + $2c74 = RestoreSRAM.chil + $2c7a = RestoreSRAM.myco + $2c80 = RestoreSRAM.search + $2c92 = RestoreSRAM.notfound + $2c99 = RestoreSRAM.fallback + $2cb4 = InitializeSRAM + $2d5d = ChangeProfile + $2d5d = ChangeProfile.backup + $2d70 = ChangeProfile.first + $2d7e = ChangeProfile.second + $2d8c = ChangeProfile.third + $2d9a = ChangeProfile.restore + $2dad = ChangeProfile.lfirst + $2db9 = ChangeProfile.lsecond + $2dc5 = ChangeProfile.lthird + SECTION: $2dd1-$2f1a ($014a bytes) ["Progress Data"] + $2dd1 = sProgressData + SECTION: $2f1b-$2ffa ($00e0 bytes) ["Score Functions"] + $2f1b = ScoreInit + $2f43 = IncreaseScore + $2f7b = IncreaseScore.doConvert + $2f7d = !0 + $2f93 = IncreaseScore.carry + $2f95 = IncreaseScore.postConvert + $2fa2 = !1 + $2fa9 = IncreaseScore.preAddDigit + $2fd1 = IncreaseScore.addDigit + $2fe7 = IncreaseScore.nextDigit + SECTION: $2ffb-$30c7 ($00cd bytes) ["Input Functions"] + $2ffb = InputInit + $300d = GetInput + $300d = GetInput.btns + $301a = GetInput.readA + $301e = GetInput.setA + $3029 = GetInput.clearA + $302c = GetInput.readB + $3030 = GetInput.setB + $303b = GetInput.clearB + $303e = GetInput.readSelect + $3042 = GetInput.setSelect + $304d = GetInput.clearSelect + $3050 = GetInput.readStart + $3054 = GetInput.setStart + $305f = GetInput.clearStart + $3062 = GetInput.dpad + $306f = GetInput.readUp + $3073 = GetInput.setUp + $307e = GetInput.clearUp + $3081 = GetInput.readDown + $3085 = GetInput.setDown + $3090 = GetInput.clearDown + $3093 = GetInput.readLeft + $3097 = GetInput.setLeft + $30a2 = GetInput.clearLeft + $30a5 = GetInput.readRight + $30a9 = GetInput.setRight + $30b4 = GetInput.clearRight + $30b7 = GetInput.priorities + $30c2 = GetInput.zero + SECTION: $30c8-$3192 ($00cb bytes) ["Title Function Trampolines"] + $30c8 = SwitchToTitle + $30d1 = TitleEventLoopHandler + $30db = TitleVBlankHandler + $30e5 = PersistLevel + $30f3 = DrawSpeedMain + $3143 = DrawSpeedSettings + SECTION: $3193-$3258 ($00c6 bytes) ["Time Functions"] + $3193 = TimeInit + $31b3 = StartCountdown + $31c1 = ResetGameTime + $31cc = CheckTorikan + $31e3 = CheckTorikan.failure + $31e5 = CheckTorikan.success + $31e8 = HandleTimers + $320e = HandleTimers.reduce + $321b = HandleTimers.clock + $3235 = HandleTimers.go + SECTION: $3259-$330a ($00b2 bytes) ["Progress Functions"] + $3259 = SetProgress + $3264 = SetProgress.loop + $3268 = SetProgress.correct + $328f = SetProgress.wvr_u1 + $329b = SetProgress.wvr_u2 + $32a9 = SetProgress.wvr_u3 + $32b5 = SetProgress.wvr_u4 + $32c3 = SetProgress.wvr_u5 + $32cf = SetProgress.wvr_u6 + $32dd = SetProgress.wvr_u7 + $32e9 = SetProgress.wvr_u8 + $32f7 = SetProgress.wvr_u9 + $3303 = SetProgress.wvr_u10 + SECTION: $330b-$339c ($0092 bytes) ["Code Entry Point"] + $330b = Main + $3334 = Main.notgbc + $333a = Main.wvr_u1 + $3361 = EventLoop + $3377 = EventLoop.eventloopjumps + $3380 = EventLoopPostHandler + $3382 = EventLoopPostHandler.wvb_u2 + $3394 = EventLoopPostHandler.vblankjumps + SECTION: $339d-$33ee ($0052 bytes) ["Tile Functions"] + $339d = LoadTitleTiles + $33bb = LoadGameplayTiles + $33d1 = LoadGameplayTiles.gbc + $33e0 = LoadGameplayTiles.dmg + SECTION: $33ef-$342a ($003c bytes) ["Time Data"] + $33ef = sFramesToCS + SECTION: $342b-$3458 ($002e bytes) ["Memory Functions"] + $342b = UnsafeMemCopy + $3434 = SafeMemCopy.wvr_u1 + $3434 = SafeMemCopy + $3443 = UnsafeMemSet + $344b = SafeMemSet + $344b = SafeMemSet.wvr_u2 + SECTION: $3459-$347e ($0026 bytes) ["Gameplay Function Trampolines"] + $3459 = SwitchToGameplay + $3462 = SwitchToGameplayBig + $346b = GamePlayEventLoopHandler + $3475 = GamePlayBigEventLoopHandler + SECTION: $347f-$34a3 ($0025 bytes) ["Interrupt Initialization Functions"] + $347f = EnableScreenSquish + $3499 = DisableScreenSquish + SECTION: $34a4-$34c5 ($0022 bytes) ["OAM Functions"] + $34a4 = CopyOAMHandler + $34b0 = ClearOAM + SECTION: $34c6-$34d4 ($000f bytes) ["Banking Functions"] + $34c6 = BankingInit + SECTION: $34d5-$34de ($000a bytes) ["OAM DMA Code"] + $34d5 = OAMDMA + $34df = OAMDMAEnd + EMPTY: $34df-$3fff ($0b21 bytes) + TOTAL EMPTY: $0b2c bytes ROMX bank #1: SECTION: $4000-$4007 ($0008 bytes) ["Bank ID BANK_OTHER"] @@ -611,7 +632,7 @@ ROMX bank #4: $4550 = sTitleScreenSettingsMap $4550 = sTitleScreenMainMapEnd $47f0 = sTitleScreenSettingsMapEnd - SECTION: $47f0-$4f77 ($0788 bytes) ["Title Functions Banked"] + SECTION: $47f0-$4f67 ($0778 bytes) ["Title Functions Banked"] $47f0 = SwitchToTitleB $47f6 = SwitchToTitleB.wvr_u1 $47ff = !0 @@ -738,27 +759,27 @@ ROMX bank #4: $4e6e = SettingsHandleRight.hig $4e7d = !18 $4e85 = DecrementLevel - $4e9e = IncrementLevel - $4eb7 = InitSpeedCurve - $4eca = GetEnd - $4ed5 = !19 - $4edd = !20 - $4ee5 = !21 - $4eed = !22 - $4ef5 = !23 - $4efd = !24 - $4f01 = GetStart - $4f0c = !25 - $4f14 = !26 - $4f1c = !27 - $4f24 = !28 - $4f2c = !29 - $4f34 = !30 - $4f38 = CheckLevelRange - $4f54 = CheckLevelRange.notatend - $4f77 = CheckLevelRange.notatstart - EMPTY: $4f78-$7fff ($3088 bytes) - TOTAL EMPTY: $3088 bytes + $4e9b = IncrementLevel + $4eb1 = InitSpeedCurve + $4ec0 = GetEnd + $4ecb = !19 + $4ed3 = !20 + $4edb = !21 + $4ee3 = !22 + $4eeb = !23 + $4ef3 = !24 + $4ef7 = GetStart + $4f02 = !25 + $4f0a = !26 + $4f12 = !27 + $4f1a = !28 + $4f22 = !29 + $4f2a = !30 + $4f2e = CheckLevelRange + $4f47 = CheckLevelRange.notatend + $4f67 = CheckLevelRange.notatstart + EMPTY: $4f68-$7fff ($3098 bytes) + TOTAL EMPTY: $3098 bytes ROMX bank #5: SECTION: $4000-$4007 ($0008 bytes) ["Bank ID BANK_GAMEPLAY"] @@ -2422,17 +2443,51 @@ ROMX bank #6: TOTAL EMPTY: $1211 bytes SRAM bank #0: - SECTION: $a000-$a00d ($000e bytes) ["Persistent Globals"] + SECTION: $a000-$a106 ($0107 bytes) ["Persistent Globals"] $a000 = rCheck - $a006 = rSwapABState - $a007 = rRNGModeState - $a008 = rRotModeState - $a009 = rDropModeState - $a00a = rSpeedCurveState - $a00b = rAlways20GState - $a00c = rSelectedStartLevel - EMPTY: $a00e-$bfff ($1ff2 bytes) - TOTAL EMPTY: $1ff2 bytes + $a006 = rLastProfile + $a007 = rProfileName + $a007 = rProfileData + $a00a = rSwapABState + $a00b = rRNGModeState + $a00c = rRotModeState + $a00d = rDropModeState + $a00e = rSpeedCurveState + $a00f = rAlways20GState + $a010 = rSelectedStartLevel + $a012 = rUnused + $a047 = rProfileData0 + $a047 = rProfileName0 + $a04a = rSwapABState0 + $a04b = rRNGModeState0 + $a04c = rRotModeState0 + $a04d = rDropModeState0 + $a04e = rSpeedCurveState0 + $a04f = rAlways20GState0 + $a050 = rSelectedStartLevel0 + $a052 = rUnused0 + $a087 = rProfileData1 + $a087 = rProfileName1 + $a08a = rSwapABState1 + $a08b = rRNGModeState1 + $a08c = rRotModeState1 + $a08d = rDropModeState1 + $a08e = rSpeedCurveState1 + $a08f = rAlways20GState1 + $a090 = rSelectedStartLevel1 + $a092 = rUnused1 + $a0c7 = rProfileData2 + $a0c7 = rProfileName2 + $a0ca = rSwapABState2 + $a0cb = rRNGModeState2 + $a0cc = rRotModeState2 + $a0cd = rDropModeState2 + $a0ce = rSpeedCurveState2 + $a0cf = rAlways20GState2 + $a0d0 = rSelectedStartLevel2 + $a0d2 = rUnused2 + EMPTY: $a107-$bfff ($1ef9 bytes) + TOTAL EMPTY: $1ef9 bytes WRAM0 bank #0: SECTION: $c000-$c3ff ($0400 bytes) ["GBC Shadow Tilemap"] @@ -2558,21 +2613,24 @@ WRAM0 bank #0: $cdc5 = wFrames $cdc6 = wCountDown $cdc8 = wCountDownZero - SECTION: $cdc9-$cdcc ($0004 bytes) ["Banking Variables"] - $cdc9 = wBankBackup - SECTION: $cdcd-$cdcf ($0003 bytes) ["GBC Variables"] - $cdcd = wOuterReps - $cdce = wInnerReps - $cdcf = wTitlePal - SECTION: $cdd0-$cdd2 ($0003 bytes) ["Gameplay Variables"] - $cdd0 = wRollLine - $cdd1 = wInStaffRoll - $cdd2 = wBigModeTransfered - SECTION: $cdd3-$cdd4 ($0002 bytes) ["Title Variables"] - $cdd3 = wSelected - $cdd4 = wTitleMode - EMPTY: $cdd5-$cfff ($022b bytes) - TOTAL EMPTY: $022b bytes + SECTION: $cdc9-$cdcd ($0005 bytes) ["Title Variables"] + $cdc9 = wSelected + $cdca = wTitleMode + $cdcb = wProfileName + SECTION: $cdce-$cdd1 ($0004 bytes) ["Banking Variables"] + $cdce = wBankBackup + SECTION: $cdd2-$cdd4 ($0003 bytes) ["GBC Variables"] + $cdd2 = wOuterReps + $cdd3 = wInnerReps + $cdd4 = wTitlePal + SECTION: $cdd5-$cdd7 ($0003 bytes) ["Gameplay Variables"] + $cdd5 = wRollLine + $cdd6 = wInStaffRoll + $cdd7 = wBigModeTransfered + SECTION: $cdd8-$cdd8 ($0001 byte) ["SRAM Variables"] + $cdd8 = wTarget + EMPTY: $cdd9-$cfff ($0227 bytes) + TOTAL EMPTY: $0227 bytes HRAM bank #0: SECTION: $ff80-$ff9a ($001b bytes) ["High Field Variables"] @@ -2663,8 +2721,8 @@ HRAM bank #0: TOTAL EMPTY: $0003 bytes SUMMARY: - ROM0: 13160 bytes used / 3224 free - ROMX: 62056 bytes used / 36248 free in 6 banks - SRAM: 14 bytes used / 8178 free in 1 bank - WRAM0: 3541 bytes used / 555 free + ROM0: 13524 bytes used / 2860 free + ROMX: 62040 bytes used / 36264 free in 6 banks + SRAM: 263 bytes used / 7929 free in 1 bank + WRAM0: 3545 bytes used / 551 free HRAM: 124 bytes used / 3 free diff --git a/bin/DMGTRIS.pocket b/bin/DMGTRIS.pocket index 9d7e23ba2302adc3d58337cf010db4618e812d39..3fe6327d9c727272d7cab8e0a782cefcc143bc72 100644 GIT binary patch delta 4480 zcmb_f4R9036~2|MKMPwNc8qLexFsaWmccf^hVL?D5=xKiJqPCr0s znQ1++`|aEJcHeuu-`i6tWDkYxO^4EdjCPEu$BA~7sKZ2G|cE%uygp)VSAT{qKyN=dq(G+Z^AuKJ=6Rje_a=1&O!vC3^4 zXo$wDYE00FZ;X1L9cW0VxS>jNSf90^cp`z>pK-Gt#a^DBzXZQXkd1+Jihfjm8g*%m zlyvQTr&dE!(oK7llpIETvy>b~`vNJ+(B5M7g_63HXiiDpMYJK3+Do(|N!?AfVoBXY zG?%3Ag-a%>hlysF)B&P7B$W_ts1(##DPToML2=&d)lZf&Sg0*$yNZ~P<+-);(bA{gL z;+uaG-y(Y$Z}}=n!AEd;biZJ!^i)J0Dyggl8iGq@B%#Z#B1ssgnj~SAYL-C1fHoE> zqFN=PQq?07s#HA|!KCWZfP$U{80&cukg8__ElB!MjJ~ui-AvU&YO6X9x16VgHR*wl4;eVx>s^PuKdwXWK?3csQ_vQF2F+CX@2(J1jgEa{ z7x-aa(ELHTF1m8uBgktlI7$)$$S(zBTd&F?A4Qh|E%d?h*T4a+N}oV@eVr7Jjz4I| z$H#>e^;f#K@dQ(q#g$g07JZ6$mAj@dA z!c0tuP@&+S=tUT+v3flEly97KlRxJCjV}^!AscwIjTfDE^iWkl5tz6ZQ5BMCyNo=J zMDyVloEC|<(b6c+v?Fe^m)G`@WGPp{3Vyt}8(Ao!*%m*3(ZKFSG>Q}`*z**MatdO^ zjw(E0ROQDnbR#ESz+J(5{J6syvA*1lc+HMRn7q8`a-fl@UmWj1d!YNL166!mA#k}Y z!V@dpX5sM__;1}%W#OLYB<2lNV#<>|s7uUwk``T3kSAHBODy7RPE;v|3X!$aOW%fG za(L|Fu|eG7cg%SLU)+ESsOREu3(@ej!X886=ej~7qu>~VMu=BonJ$QP2)osft2d@? z*~0{*Ze*tG$k*!??AIg6k7>bOF@NH_{)o>vqw41_{KD}!I30R)`S%k4bFDDt)$i=l&m zf>o}YN{<{;*aWv&5iGQ&5{SH!VtToCfoT zw39$3R$zg4;VYQd2E^3D0se=L!afnBXAp5ViLGX}pxcv4;!?j4Biv?7i_AHX;p_z)) zjz#hu)V0%oMe_W!dYp|ppCUP^eI5MMcTRg1F}zD`emb$`DRe#MNWXyOQoTGrXh@5g z+oX^HaBwO&XyFrU#ZVh6wLlPwbviTy6j!wY$y@lI@4kW>E#k@9XnC_<#h6a|T`ifQa*S?iKF7mnI_re1p zUAhoFWxufq!{NXW4KLplnTrk-K5}Oe^rbu}%!;3fbrPQ@3-@)l%dz^z4WO|L#_+|I zxCyNpgkoeN8U+=StyzTO^gVP{is5v#7)~#XC+Fd%26lf7qK=>E=0IURO@erC2YrP4 zVvclTKz6V&dBWpRPs2}y_<46NWPwI0q#&=_Mv@d~wxbGDw4tZ79lfKoA@45V7cuVp zs^7;=?@F`f|9RDwdyZ!#ncuU-Pho zpi;eb!7e(3rx^@Bx`Z-#`oO&yJeuff$db4uQ_%)JxSP}jA0^QS5y)KE!@h;Ce)He& Ci+G3t delta 4140 zcmb_e3v3j}8Q!_~`ut$AV;dX84k6(TwGW>Wh2YzqgB4>QJ{kxSd9+{~DifkqN+p7n zU?*vsDlIDHB-YRhwzRP;h4!Le6(_{T76(8kaeh$B3Lw$5Gu+1vAN zAhbyB$=><)f9?Oz%=gcJ0^2rO4wdlNcQJ+shO0dw1nGVD=WXxBHkfe`J)Q{ku zV>&Q%0x>qy=L;)A!Kn^Mn(V#S#fGPodV=;YOIhnD39i2o40QJ~pM%lPhMr_+ZyP2x z3Fi`vz^KDS8zxWTzzMX8epDMJHCQ?UnXrC-Qm{S+C_3hoH7;MtA_;sbOfs?awm|dkn+S zncUTpUD;#*E!e7|`wRA}Q ztZcpo#?Xz~uW^?v6G?uWoS5G4u;nfxp#3Soj?L}!aT~YdHwkhwuuhSS<)5I)NX1^X zU~2^`o+R-6brPPrx8Sh?{)hg&9CR6U}AR6Qmr^r$fEabeUWV^`o+rBlt8UQxQ#97)DK z3qsHOF16KF6I4o;RFlOENu-iYRFG>Alc%f0$~m&rOV*c@@^W&!g1Efc?Tc#;CdmFX z`noro^hMcf$DVlIhy1_DXG!dtQvSjl4dzAb@*QZHt8c(eJ7TOP=Hu#DW9ALS90lEXU30a6Kj|(0@|FsDhuGBbRahkP+Y=!0=UI^fXzlT#j6me z4eHG1js$S|fs`-Br~_GPoajEUj01WF=9)I$Ra3hzG1nyN5_3)cy2M&JRs;SQtlI2cevsBg|xX;%#`%-2!FZH4X@G!$gQ z3u}Vk51;@8t7r4G#kXNP`}d=13=jk>X}}yXBs>Mtm`|3$vA(@M=wR@{)j-B8zUVC< z!^qM1S8ss<{sc$VyMit`Oralku`Jl>lS-iS8j9)W)&{phn10LUhsFlYNEU1cfX$MU_Yi1KvS5XtM}gLB$a@JiD{7wt z+A%73`=K2|^CI1iP)Y`CeTG*bQQgqN;PVtgxKZ(R4$S_+MkpR895%nJ#z-w}O3_Be zsT9Me46Rh0N-S(jP`6Iy6*lGP@VIL-IfXM&dj|5;znsb{Y-AVjd@upqxbd{MBI;GOYC;432hiq|zf9_(2Bt z$530^Vjv?vn}O#u@KOeTnSqlT=#ZyAH!TB8GH~t`6da013*)5j(ppr;q7iZFO7wxH zvO>JJ5(UvnckL>~T5V&#_#Uyn5f#{>i1=O|S^$g zO7DP@1v(iC`h*0WEBW+Xp-1e}BHSDOtJ^<2fn;}!~iDnFo1DE1HUw3!|I+?ZX&LZf^c}`fXj6FcdZwfzV!rKg7{0vmBjPvWE(Vihe zyrG32O8qf5H8CJNm6iCbhgHwObygWK{tnCntx`zBylMwXLR`~?N-U$5-K|aN&pI1S zd-=YIao=10K6ZLriY@=otuEh_v~>Fq!x?lP^`U6@+DUnFV=-#`PWc_f%`HIqRn@*5>Dc<=u1vC`OpB6ja0|POfH)PzR z&c<*-8lR8h8EJeehG(VmmofZc8c)WsCygC4u1Mo)GWMl$iHyIS#&cy{V_+?72-kM6 z4WX-+6oG@!|1SjImm=`K`y%i!x8Qe&3<6(hxs$;AzoFF$+z=p66M@AB5q2z;ait#tnf0$*s+34EdDo&>J?U5dcJ-GW<(459+wYr-Fy z@aHDX5>%kKF8GSh;FSi0hqqD&uNt}+gXa)^8m35`pYCXr9^66Z2OlS+l_HSY+s(a; Hu0H*5JMK7a diff --git a/bin/DMGTRIS.sym b/bin/DMGTRIS.sym index 9a9bc98..4da334f 100644 --- a/bin/DMGTRIS.sym +++ b/bin/DMGTRIS.sym @@ -268,105 +268,126 @@ 00:2b88 Next35Piece 00:2b92 Next7Piece 00:2b9c NextByte -00:2bbc sProgressData -00:2d06 ScoreInit -00:2d2e IncreaseScore -00:2d66 IncreaseScore.doConvert -00:2d7e IncreaseScore.carry -00:2d80 IncreaseScore.postConvert -00:2d94 IncreaseScore.preAddDigit -00:2dbc IncreaseScore.addDigit -00:2dd2 IncreaseScore.nextDigit -00:2de6 InputInit -00:2df8 GetInput -00:2df8 GetInput.btns -00:2e05 GetInput.readA -00:2e09 GetInput.setA -00:2e14 GetInput.clearA -00:2e17 GetInput.readB -00:2e1b GetInput.setB -00:2e26 GetInput.clearB -00:2e29 GetInput.readSelect -00:2e2d GetInput.setSelect -00:2e38 GetInput.clearSelect -00:2e3b GetInput.readStart -00:2e3f GetInput.setStart -00:2e4a GetInput.clearStart -00:2e4d GetInput.dpad -00:2e5a GetInput.readUp -00:2e5e GetInput.setUp -00:2e69 GetInput.clearUp -00:2e6c GetInput.readDown -00:2e70 GetInput.setDown -00:2e7b GetInput.clearDown -00:2e7e GetInput.readLeft -00:2e82 GetInput.setLeft -00:2e8d GetInput.clearLeft -00:2e90 GetInput.readRight -00:2e94 GetInput.setRight -00:2e9f GetInput.clearRight -00:2ea2 GetInput.priorities -00:2ead GetInput.zero -00:2eb3 TimeInit -00:2ed3 StartCountdown -00:2ee1 ResetGameTime -00:2eec CheckTorikan -00:2f03 CheckTorikan.failure -00:2f05 CheckTorikan.success -00:2f08 HandleTimers -00:2f2e HandleTimers.reduce -00:2f3b HandleTimers.clock -00:2f55 HandleTimers.go -00:2f79 SwitchToTitle -00:2f82 TitleEventLoopHandler -00:2f8c TitleVBlankHandler -00:2f96 DrawSpeedMain -00:2fe6 DrawSpeedSettings -00:3036 RestoreSRAM -00:308f InitializeSRAM -00:30ed SetProgress -00:30f8 SetProgress.loop -00:30fc SetProgress.correct -00:3123 SetProgress.wvr_u1 -00:312f SetProgress.wvr_u2 -00:313d SetProgress.wvr_u3 -00:3149 SetProgress.wvr_u4 -00:3157 SetProgress.wvr_u5 -00:3163 SetProgress.wvr_u6 -00:3171 SetProgress.wvr_u7 -00:317d SetProgress.wvr_u8 -00:318b SetProgress.wvr_u9 -00:3197 SetProgress.wvr_u10 -00:319f Main -00:31c8 Main.notgbc -00:31ce Main.wvr_u1 -00:31f5 EventLoop -00:320b EventLoop.eventloopjumps -00:3214 EventLoopPostHandler -00:3216 EventLoopPostHandler.wvb_u2 -00:3228 EventLoopPostHandler.vblankjumps -00:3231 LoadTitleTiles -00:324f LoadGameplayTiles -00:3265 LoadGameplayTiles.gbc -00:3274 LoadGameplayTiles.dmg -00:3283 sFramesToCS -00:32bf UnsafeMemCopy -00:32c8 SafeMemCopy.wvr_u1 -00:32c8 SafeMemCopy -00:32d7 UnsafeMemSet -00:32df SafeMemSet -00:32df SafeMemSet.wvr_u2 -00:32ed SwitchToGameplay -00:32f6 SwitchToGameplayBig -00:32ff GamePlayEventLoopHandler -00:3309 GamePlayBigEventLoopHandler -00:3313 EnableScreenSquish -00:332d DisableScreenSquish -00:3338 CopyOAMHandler -00:3344 ClearOAM -00:335a BankingInit -00:3369 OAMDMA -00:3373 OAMDMAEnd +00:2bbc RestoreSRAM +00:2c3e RestoreSRAM.jumps +00:2c56 RestoreSRAM.dmgt +00:2c5c RestoreSRAM.tgm1 +00:2c62 RestoreSRAM.tgm3 +00:2c68 RestoreSRAM.deat +00:2c6e RestoreSRAM.shir +00:2c74 RestoreSRAM.chil +00:2c7a RestoreSRAM.myco +00:2c80 RestoreSRAM.search +00:2c92 RestoreSRAM.notfound +00:2c99 RestoreSRAM.fallback +00:2cb4 InitializeSRAM +00:2d5d ChangeProfile +00:2d5d ChangeProfile.backup +00:2d70 ChangeProfile.first +00:2d7e ChangeProfile.second +00:2d8c ChangeProfile.third +00:2d9a ChangeProfile.restore +00:2dad ChangeProfile.lfirst +00:2db9 ChangeProfile.lsecond +00:2dc5 ChangeProfile.lthird +00:2dd1 sProgressData +00:2f1b ScoreInit +00:2f43 IncreaseScore +00:2f7b IncreaseScore.doConvert +00:2f93 IncreaseScore.carry +00:2f95 IncreaseScore.postConvert +00:2fa9 IncreaseScore.preAddDigit +00:2fd1 IncreaseScore.addDigit +00:2fe7 IncreaseScore.nextDigit +00:2ffb InputInit +00:300d GetInput +00:300d GetInput.btns +00:301a GetInput.readA +00:301e GetInput.setA +00:3029 GetInput.clearA +00:302c GetInput.readB +00:3030 GetInput.setB +00:303b GetInput.clearB +00:303e GetInput.readSelect +00:3042 GetInput.setSelect +00:304d GetInput.clearSelect +00:3050 GetInput.readStart +00:3054 GetInput.setStart +00:305f GetInput.clearStart +00:3062 GetInput.dpad +00:306f GetInput.readUp +00:3073 GetInput.setUp +00:307e GetInput.clearUp +00:3081 GetInput.readDown +00:3085 GetInput.setDown +00:3090 GetInput.clearDown +00:3093 GetInput.readLeft +00:3097 GetInput.setLeft +00:30a2 GetInput.clearLeft +00:30a5 GetInput.readRight +00:30a9 GetInput.setRight +00:30b4 GetInput.clearRight +00:30b7 GetInput.priorities +00:30c2 GetInput.zero +00:30c8 SwitchToTitle +00:30d1 TitleEventLoopHandler +00:30db TitleVBlankHandler +00:30e5 PersistLevel +00:30f3 DrawSpeedMain +00:3143 DrawSpeedSettings +00:3193 TimeInit +00:31b3 StartCountdown +00:31c1 ResetGameTime +00:31cc CheckTorikan +00:31e3 CheckTorikan.failure +00:31e5 CheckTorikan.success +00:31e8 HandleTimers +00:320e HandleTimers.reduce +00:321b HandleTimers.clock +00:3235 HandleTimers.go +00:3259 SetProgress +00:3264 SetProgress.loop +00:3268 SetProgress.correct +00:328f SetProgress.wvr_u1 +00:329b SetProgress.wvr_u2 +00:32a9 SetProgress.wvr_u3 +00:32b5 SetProgress.wvr_u4 +00:32c3 SetProgress.wvr_u5 +00:32cf SetProgress.wvr_u6 +00:32dd SetProgress.wvr_u7 +00:32e9 SetProgress.wvr_u8 +00:32f7 SetProgress.wvr_u9 +00:3303 SetProgress.wvr_u10 +00:330b Main +00:3334 Main.notgbc +00:333a Main.wvr_u1 +00:3361 EventLoop +00:3377 EventLoop.eventloopjumps +00:3380 EventLoopPostHandler +00:3382 EventLoopPostHandler.wvb_u2 +00:3394 EventLoopPostHandler.vblankjumps +00:339d LoadTitleTiles +00:33bb LoadGameplayTiles +00:33d1 LoadGameplayTiles.gbc +00:33e0 LoadGameplayTiles.dmg +00:33ef sFramesToCS +00:342b UnsafeMemCopy +00:3434 SafeMemCopy.wvr_u1 +00:3434 SafeMemCopy +00:3443 UnsafeMemSet +00:344b SafeMemSet +00:344b SafeMemSet.wvr_u2 +00:3459 SwitchToGameplay +00:3462 SwitchToGameplayBig +00:346b GamePlayEventLoopHandler +00:3475 GamePlayBigEventLoopHandler +00:347f EnableScreenSquish +00:3499 DisableScreenSquish +00:34a4 CopyOAMHandler +00:34b0 ClearOAM +00:34c6 BankingInit +00:34d5 OAMDMA +00:34df OAMDMAEnd 01:4008 sDMGTSpeedCurve 01:4203 sDMGTSpeedCurveEnd 01:4205 sDMGTSpeedCurveSpecialData @@ -580,13 +601,13 @@ 04:4e51 SettingsHandleRight.curve 04:4e6e SettingsHandleRight.hig 04:4e85 DecrementLevel -04:4e9e IncrementLevel -04:4eb7 InitSpeedCurve -04:4eca GetEnd -04:4f01 GetStart -04:4f38 CheckLevelRange -04:4f54 CheckLevelRange.notatend -04:4f77 CheckLevelRange.notatstart +04:4e9b IncrementLevel +04:4eb1 InitSpeedCurve +04:4ec0 GetEnd +04:4ef7 GetStart +04:4f2e CheckLevelRange +04:4f47 CheckLevelRange.notatend +04:4f67 CheckLevelRange.notatstart 05:4008 FieldInit 05:403e FieldClear 05:4049 ToBackupField @@ -2110,13 +2131,47 @@ 06:6b4f sBigGameplayTileMapEnd 06:6def sBigGameplayUngradedTileMapEnd 00:a000 rCheck -00:a006 rSwapABState -00:a007 rRNGModeState -00:a008 rRotModeState -00:a009 rDropModeState -00:a00a rSpeedCurveState -00:a00b rAlways20GState -00:a00c rSelectedStartLevel +00:a006 rLastProfile +00:a007 rProfileName +00:a007 rProfileData +00:a00a rSwapABState +00:a00b rRNGModeState +00:a00c rRotModeState +00:a00d rDropModeState +00:a00e rSpeedCurveState +00:a00f rAlways20GState +00:a010 rSelectedStartLevel +00:a012 rUnused +00:a047 rProfileData0 +00:a047 rProfileName0 +00:a04a rSwapABState0 +00:a04b rRNGModeState0 +00:a04c rRotModeState0 +00:a04d rDropModeState0 +00:a04e rSpeedCurveState0 +00:a04f rAlways20GState0 +00:a050 rSelectedStartLevel0 +00:a052 rUnused0 +00:a087 rProfileData1 +00:a087 rProfileName1 +00:a08a rSwapABState1 +00:a08b rRNGModeState1 +00:a08c rRotModeState1 +00:a08d rDropModeState1 +00:a08e rSpeedCurveState1 +00:a08f rAlways20GState1 +00:a090 rSelectedStartLevel1 +00:a092 rUnused1 +00:a0c7 rProfileData2 +00:a0c7 rProfileName2 +00:a0ca rSwapABState2 +00:a0cb rRNGModeState2 +00:a0cc rRotModeState2 +00:a0cd rDropModeState2 +00:a0ce rSpeedCurveState2 +00:a0cf rAlways20GState2 +00:a0d0 rSelectedStartLevel2 +00:a0d2 rUnused2 00:c000 wShadowTilemap 00:c400 wShadowTileAttrs 00:c800 wShadowOAM @@ -2229,15 +2284,17 @@ 00:cdc5 wFrames 00:cdc6 wCountDown 00:cdc8 wCountDownZero -00:cdc9 wBankBackup -00:cdcd wOuterReps -00:cdce wInnerReps -00:cdcf wTitlePal -00:cdd0 wRollLine -00:cdd1 wInStaffRoll -00:cdd2 wBigModeTransfered -00:cdd3 wSelected -00:cdd4 wTitleMode +00:cdc9 wSelected +00:cdca wTitleMode +00:cdcb wProfileName +00:cdce wBankBackup +00:cdd2 wOuterReps +00:cdd3 wInnerReps +00:cdd4 wTitlePal +00:cdd5 wRollLine +00:cdd6 wInStaffRoll +00:cdd7 wBigModeTransfered +00:cdd8 wTarget 00:ff80 hPieceDataBase 00:ff82 hPieceDataBaseFast 00:ff84 hPieceDataOffset diff --git a/src/res/sources/map_title_main_credits.gbm b/src/res/sources/map_title_main_credits.gbm new file mode 100644 index 0000000000000000000000000000000000000000..bb896a29fce8ec8389d1d728977b427ccc4502e6 GIT binary patch literal 4388 zcmeHLJ8Tm{5Pkk64h|#%9KK38Banc?CS8;uiWJ0(u!2me_{mNV?8t{ra>hV`!v7Bi z6shR=bX2s|DL_J$2q6RoqM<~@ie%p2dQq_B^C^}iggn~w?#|A>nRz?5Zaq9S+7~%A z5*<6}f)YQ6!*N4TWG-mYcvc(ArP34nlv-YqzAw~Y@)OAz`hb=+&FnxpoX_V&qUcA`<;U0NE?7}>OL>L<;Vnbt$66I1BwK#}sU z`_bXKH=W-%xUjk0gkO?*zY6S%k>{zM-GJN1+ZH8bNq}( z5!(EG`#fJLOyU=xg`GL~H(xvaXhRR57ifXlD=>o41jLeZj5smknCxfx2$^Mn_Vw3u zO1GN2FPtkpFX!dH;!i)H$L!#fg@Q=IO$&KW9*(V?00AS$Wvv(J0=8K#0Bi=<0aTWm zl|TfBomB2}uCc>aYsam?)&QD{d5aZuWx%`sPGPq~u)kK%#BZvyC|(_(3HE_LD) zlbkmQpV2Y}y4YIXMLqG8Z6dR5*yxK{bXX@sr$I$jJ@_oujlg!RW_PG+WZAQ>S)B3| z>cMCHB%fXwusj92V=gjyj_INveAXwy$;k#FqXL#;+kDzrrd+kzUUTVRz$YzxEN0}_ zcCAGY>7sHmY0Sm2l>9m3mLR~NCMR+NSax%QUz6lAgBjooa0|HO1l@6|{PA)bxC-0` z?luPh8gK)+2RvvD{&nCca36T+48LjBWT44FlYu4!%V9v?3B2%#7o3tvT?@Pwx>nv{ z%I$n;E$R4Ph5+BmMm!t{GXWs3S;eA278+}_#BYO7PR09lRgt!SL+2&VMIrlOd^!I^uGb#ZL327 literal 0 HcmV?d00001 diff --git a/src/sram.asm b/src/sram.asm index 5447a96..90dc1af 100644 --- a/src/sram.asm +++ b/src/sram.asm @@ -24,6 +24,11 @@ INCLUDE "globals.asm" SECTION "Persistent Globals", SRAM rCheck:: ds 6 +rLastProfile:: ds 1 +UNION +rProfileData:: ds 64 +NEXTU +rProfileName:: ds 3 rSwapABState:: ds 1 rRNGModeState:: ds 1 rRotModeState:: ds 1 @@ -31,6 +36,50 @@ rDropModeState:: ds 1 rSpeedCurveState:: ds 1 rAlways20GState:: ds 1 rSelectedStartLevel:: ds 2 +rUnused:: ds (64-11) +ENDU +UNION +rProfileData0:: ds 64 +NEXTU +rProfileName0:: ds 3 +rSwapABState0:: ds 1 +rRNGModeState0:: ds 1 +rRotModeState0:: ds 1 +rDropModeState0:: ds 1 +rSpeedCurveState0:: ds 1 +rAlways20GState0:: ds 1 +rSelectedStartLevel0:: ds 2 +rUnused0:: ds (64-11) +ENDU +UNION +rProfileData1:: ds 64 +NEXTU +rProfileName1:: ds 3 +rSwapABState1:: ds 1 +rRNGModeState1:: ds 1 +rRotModeState1:: ds 1 +rDropModeState1:: ds 1 +rSpeedCurveState1:: ds 1 +rAlways20GState1:: ds 1 +rSelectedStartLevel1:: ds 2 +rUnused1:: ds (64-11) +ENDU +UNION +rProfileData2:: ds 64 +NEXTU +rProfileName2:: ds 3 +rSwapABState2:: ds 1 +rRNGModeState2:: ds 1 +rRotModeState2:: ds 1 +rDropModeState2:: ds 1 +rSpeedCurveState2:: ds 1 +rAlways20GState2:: ds 1 +rSelectedStartLevel2:: ds 2 +rUnused2:: ds (64-11) +ENDU + +SECTION "SRAM Variables", WRAM0 +wTarget:: ds 1 SECTION "SRAM Functions", ROM0 @@ -38,23 +87,23 @@ SECTION "SRAM Functions", ROM0 ; Restores it if so, otherwise initializes it. RestoreSRAM:: ld a, [rCheck] - cp a, LOW(__UTC_YEAR__) - jr nz, InitializeSRAM + cp a, "D" + jp nz, InitializeSRAM ld a, [rCheck+1] - cp a, __UTC_MONTH__ - jr nz, InitializeSRAM + cp a, "M" + jp nz, InitializeSRAM ld a, [rCheck+2] - cp a, __UTC_DAY__ - jr nz, InitializeSRAM + cp a, "G" + jp nz, InitializeSRAM ld a, [rCheck+3] - cp a, __UTC_HOUR__ - jr nz, InitializeSRAM + cp a, "T" + jp nz, InitializeSRAM ld a, [rCheck+4] - cp a, __UTC_MINUTE__ - jr nz, InitializeSRAM + cp a, 0 + jp nz, InitializeSRAM ld a, [rCheck+5] - cp a, __UTC_SECOND__ - jr nz, InitializeSRAM + cp a, 0 + jp nz, InitializeSRAM ; SRAM is initialized and for this build, so we can load the data. ld a, [rSwapABState] @@ -69,30 +118,136 @@ RestoreSRAM:: ld [wSpeedCurveState], a ld a, [rAlways20GState] ld [wAlways20GState], a + ld a, [rProfileName] + ld [wProfileName], a + ld a, [rProfileName+1] + ld [wProfileName+1], a + ld a, [rProfileName+2] + ld [wProfileName+2], a + ; Restore the start level. ld a, [rSelectedStartLevel] - ldh [hStartSpeed], a + ld c, a ld a, [rSelectedStartLevel+1] + ld b, a + + ld b, BANK_OTHER + rst RSTSwitchBank + + ld a, [rSpeedCurveState] + ld d, a + add a, d + add a, d + ld e, a + ld d, 0 + ld hl, .jumps + add hl, de + ld de, SCURVE_ENTRY_SIZE + jp hl + +.jumps + jp .dmgt + jp .tgm1 + jp .tgm3 + jp .deat + jp .shir + jp .chil + jp .myco + jp .fallback + +.dmgt + ld hl, sDMGTSpeedCurve + jp .search +.tgm1 + ld hl, sTGM1SpeedCurve + jp .search +.tgm3 + ld hl, sTGM3SpeedCurve + jp .search +.deat + ld hl, sDEATSpeedCurve + jp .search +.shir + ld hl, sSHIRSpeedCurve + jp .search +.chil + ld hl, sCHILSpeedCurve + jp .search +.myco + ld hl, sMYCOSpeedCurve + jp .search + +.search + ; HL = Speed curve table + ; BC = Start level + ; DE = Speed curve entry size + + ld a, [hl+] + cp a, c + jr nz, .notfound + ld a, [hl] + cp a, b + jr nz, .notfound + + ; Found it! + dec hl + ld a, l + ldh [hStartSpeed], a + ld a, h ldh [hStartSpeed+1], a - ret + jp RSTRestoreBank + +.notfound + dec hl + add hl, de + ld a, [hl] + cp a, $FF + jr nz, .search + +.fallback + ld a, SCURVE_DMGT + ld [rSpeedCurveState], a + ld [wSpeedCurveState], a + ld hl, sDMGTSpeedCurve + ld a, l + ldh [hStartSpeed], a + ld a, h + ldh [hStartSpeed+1], a + xor a, a + ld [rSelectedStartLevel], a + ld [rSelectedStartLevel+1], a + jp RSTRestoreBank ; Initializes SRAM with default values. InitializeSRAM: ; Set the magic id. - ld a, LOW(__UTC_YEAR__) + ld a, "D" ld [rCheck], a - ld a, __UTC_MONTH__ + ld a, "M" ld [rCheck+1], a - ld a, __UTC_DAY__ + ld a, "G" ld [rCheck+2], a - ld a, __UTC_HOUR__ + ld a, "T" ld [rCheck+3], a - ld a, __UTC_MINUTE__ + ld a, 0 ld [rCheck+4], a - ld a, __UTC_SECOND__ + ld a, 0 ld [rCheck+5], a + xor a, a + ld [rLastProfile], a + ; Load defaults. + ld a, "P" + ld [rProfileName], a + ld [wProfileName], a + ld a, "R" + ld [rProfileName+1], a + ld [wProfileName+1], a + ld a, "0" + ld [rProfileName+2], a + ld [wProfileName+2], a + ld a, BUTTON_MODE_NORM ld [rSwapABState], a ld [wSwapABState], a @@ -121,11 +276,95 @@ InitializeSRAM: ld hl, sDMGTSpeedCurve ld a, l ldh [hStartSpeed], a - ld [rSelectedStartLevel], a ld a, h ldh [hStartSpeed+1], a + + xor a, a + ld [rSelectedStartLevel], a ld [rSelectedStartLevel+1], a + + ; Copy this profile to the other two. + ld hl, rProfileData0 + ld de, rProfileData + ld bc, 64 + call UnsafeMemCopy + ld hl, rProfileData1 + ld de, rProfileData + ld bc, 64 + call UnsafeMemCopy + ld hl, rProfileData2 + ld de, rProfileData + ld bc, 64 + call UnsafeMemCopy + ld a, "1" + ld [rProfileName1+2], a + ld a, "2" + ld [rProfileName2+2], a ret + ; Change to profile number in A. +ChangeProfile:: +.backup + ld [wTarget], a + ld a, [rLastProfile] + cp a, 0 + jr z, .first + cp a, 1 + jr z, .second + cp a, 2 + jr z, .third + ret + +.first + ld hl, rProfileData0 + ld de, rProfileData + ld bc, 64 + call UnsafeMemCopy + jr .restore + +.second + ld hl, rProfileData1 + ld de, rProfileData + ld bc, 64 + call UnsafeMemCopy + jr .restore + +.third + ld hl, rProfileData2 + ld de, rProfileData + ld bc, 64 + call UnsafeMemCopy + jr .restore + +.restore + ld a, [wTarget] + ld [rLastProfile], a + cp a, 0 + jr z, .lfirst + cp a, 1 + jr z, .lsecond + cp a, 2 + jr z, .lthird + ret + +.lfirst + ld hl, rProfileData + ld de, rProfileData0 + ld bc, 64 + jp UnsafeMemCopy + +.lsecond + ld hl, rProfileData + ld de, rProfileData1 + ld bc, 64 + jp UnsafeMemCopy + +.lthird + ld hl, rProfileData + ld de, rProfileData2 + ld bc, 64 + jp UnsafeMemCopy + + ENDC diff --git a/src/state_title.asm b/src/state_title.asm index de0abfe..fda08ca 100644 --- a/src/state_title.asm +++ b/src/state_title.asm @@ -26,6 +26,7 @@ INCLUDE "res/title_data.inc" SECTION "Title Variables", WRAM0 wSelected:: ds 1 wTitleMode:: ds 1 +wProfileName:: ds 3 SECTION "Title Function Trampolines", ROM0 @@ -52,6 +53,15 @@ TitleVBlankHandler:: rst RSTRestoreBank jp EventLoop +PersistLevel: + ld b, BANK_OTHER + rst RSTSwitchBank + ld a, [hl+] + ld [rSelectedStartLevel], a + ld a, [hl] + ld [rSelectedStartLevel+1], a + jp RSTRestoreBank + DrawSpeedMain: ld b, BANK_OTHER rst RSTSwitchBank @@ -584,7 +594,7 @@ TitleVBlankHandlerB: ; PROFILE name. .profile - ld de, sDisabled + ld de, wProfileName ld hl, TITLE_MAIN_PROFILE ld bc, 3 call UnsafeMemCopy @@ -1051,10 +1061,9 @@ DecrementLevel: add hl, bc ld a, l ldh [hStartSpeed], a - ld [rSelectedStartLevel], a ld a, h ldh [hStartSpeed+1], a - ld [rSelectedStartLevel+1], a + call PersistLevel jp CheckLevelRange @@ -1069,10 +1078,9 @@ IncrementLevel: add hl, bc ld a, l ldh [hStartSpeed], a - ld [rSelectedStartLevel], a ld a, h ldh [hStartSpeed+1], a - ld [rSelectedStartLevel+1], a + call PersistLevel jp CheckLevelRange @@ -1082,11 +1090,9 @@ InitSpeedCurve: call GetStart ld a, l ldh [hStartSpeed], a - ld [rSelectedStartLevel], a ld a, h ldh [hStartSpeed+1], a - ld [rSelectedStartLevel+1], a - ret + jp PersistLevel ; Gets the end of a speed curve. @@ -1163,11 +1169,10 @@ CheckLevelRange: jr nz, .notatend call GetStart ld a, l - ld [rSelectedStartLevel], a ldh [hStartSpeed], a ld a, h - ld [rSelectedStartLevel+1], a ldh [hStartSpeed+1], a + call PersistLevel .notatend ld de, -SCURVE_ENTRY_SIZE @@ -1186,11 +1191,10 @@ CheckLevelRange: ld l, c add hl, de ld a, l - ld [rSelectedStartLevel], a ldh [hStartSpeed], a ld a, h - ld [rSelectedStartLevel+1], a ldh [hStartSpeed+1], a + call PersistLevel .notatstart ret