From 84b61665339ca25fc1db92107d87df4c702fcb5c Mon Sep 17 00:00:00 2001 From: Hana Nova Date: Fri, 16 May 2025 17:05:54 +0200 Subject: [PATCH] Fix TGM3 randomizer. --- bin/PandorasBlocks.gbc | Bin 262144 -> 262144 bytes bin/PandorasBlocks.map | 381 +++++++++++++++++++------------------- bin/PandorasBlocks.pocket | Bin 262144 -> 262144 bytes bin/PandorasBlocks.sym | 301 +++++++++++++++--------------- src/rng.asm | 150 ++++++++------- 5 files changed, 432 insertions(+), 400 deletions(-) diff --git a/bin/PandorasBlocks.gbc b/bin/PandorasBlocks.gbc index 3f5895492caba8b1efb6dc1833d332e014f7bdf7..f967b1996c2a1ba8b21c7cf63e1e8f6a9212663f 100644 GIT binary patch delta 4110 zcmb`Ke^66b7RTR7NMb;gXMqMq$>oOzl@P09Vj%@}Mf|Z;7cGvux}|7Wowe=gtd3j2 zGBwkwUE6&tPpwt_xl?y7yUp%|?G%f?L5Ss&=~i~Pvub0hwmxZzML|=W?0GMFNvO5s z&g>uW=5xHG`pRbxwS+W29$qLnxr zSzRL(OM#H~7}gz*+Dl{D5yR~G3E#PDHu=4^h^=9p%!K3UgxSPcSY+O>AU_=VD_sJWXPvGgOe6_zZJN zOoRs9lW2^Fi6kaULpmvq#%35nqLFg%WEJ8XgzFhZ*T_1;+Z(R753TABhc-XlS~|4q z7+P%~TGbsH+BdeU$B9FA=L^}BRB(kmI6e*j?Q9-js5OaJcF9`O+XXu5-23c0Z;#*V z38;5 ztH+vBuoLMDo;KaeI&Jdd(~HlShBJ2EgBy>9`xxIuFf`zV3FhaEBrQ|EV@J9Ex=@oRyqPE1 z%)+)jp*fGXo3A|)$g&K&X*+k^Jb759rAc&j(HYz)<~`GHnhlIUi>~%()2B!&#n%%z z$?xcLnMMqKL}`N=5ES{x%S~bW5(G%7XK4wFoa-gqJLW!y@dm2ya+~2Infv zM{y$;PRG_2(}fMwh3(UYom|oMw_qwTEt;)hBG>b{G5^?sCO5ytVbyXoIcE>!&Z28~sh*V(~}^ z-DIQfV`-I*zL!DK=T8=D&6PaGaUL<#E1>O@=z&Re&onw}3T>Q1erxpwaOZHL z4F$qPn=s9$ecd;w+4wE(4w64c8XF6Q6Rg0cXyZI|A9u*QOH@wAewg~ew zCRr73f5i6Pn)_{+o>gqz+14BoonN+Qs^*GTE#tR&9FB6bbh*A_75Qu*#7XZvnrF)9 zYT0}}YJOZcZHnD%2xm59-2HqWD!ns7u`F_$pW@Nh{iPE zt1ZT4->&zKBk85GHNQ+#`f>H=S0>^|y2L{(Ex11?_B!i6Zq_KpMU~U~N!cja!@YE4 z0+uIlOvUo@jXb#=KP>1i9g*BdCDS;rvUe_;Z}u8ESFcT`#o_vjuR?VLcPc``2rd3v zX+0XD+Yu`5lUjH5DP!G`>(VSmKBeF82wjQL)SF7{%MtpQOzbzxSlho*d}xF+`W4&r z5fUPla!YAlC)43u%2)}vm6lZzYKjmHgjyfrjJ-Opc0k8n{_4J8XYIg2eJyJD(0SMh zsX`gK%!FN#Z}+!76MIikXzm>V%6-s&s7% zcaakV_SRr;$$Bb^E(L3C*f6$r{3F%Z-j z1%k#wOoyrKF+$%v4{B)op$6PhSNS3+)bMqWz_aPHgzrZ3o|V4B*aP0#)Q)MCw=M%y z{Hf{mlWaPynEsV7NQUR2hyTwq$l*JaL0^DbYvt3l$KtzIWYl12SDU=o*t9B=@5a?h zIc??Bc0GO??8S6UiSHlYPw{(Cdt3=Aum+?XaEkY;VE+XU&Mv4TxcTxuSh2o03s1?l zcr5&0?fPH^r0V#Y1hSL9FjG32#;odB1V*QRVHRF1@C~?3iM~OXX_)V>%cK@w;|~%r z;+KHUs*;Y`B&|teJjMv)F-3TG3~vZA|1E)WAo8O#VM-#de(fZZ=9ySNmv-}&neaBA zkSYu6^y!r|-2OXVfo$A|pg7P)_H6bKbV(n-8d}L8oD69&=xUw}cL4_Zcg-*fe=eJ0 z4*q22!)pAg&xajJgBCp6BzIs`t2S0xB?u&P)RQr7=d7W~)6kXndw{b(?DHHzl}`M_0N0%s&Ssph~3C?_7}l)+yqgC3Mr z+kBXalJd=m$Dx5oN#(khE`U=IC+UjMSOh65m5m>}2p%1S7Fjp=3P+TNxnzA*13sUVb)EiDm=zbtP1D2 zNl}>n37uq?Ys$~yhAJf7-5Zn(%a03p{W3+kW*w?By_)v$Nl(F}2Du_jw5*tx#7Ojs zr(iBT8kXp#DoLUVYss2US)#53mGEpr)%TT%|3yC+%RF|*d)5A=_nI_KtV%66Qs27FYmv(;+*{{I5QNsw>= delta 4087 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 delta 4087 zcmb`K4Ny~87RTR7ATc1yvp|EQfi`rTD$OtvX{JQE;8g zbnT3^Z`-J~7NvE^&RTYx>BL$;&^HKCE@8L29cM*jtqw*iQ4}@RWY2raOJc1ZcV;K^ z?)%+y&;2;}zW;eIm6h?8mGRYY6P=iK4BxnbGSsBLc2TTFDcwPk3;3u40Egf4$@&cWdW_2eBCwS~+ilb1bQ;2Lq$a zGdxPtAc*Y&tKs>qw#7XsL_>+~Gqyt=R}u*H%sQ5x+HCs=>r!J&Me?8?6|Eeps$sP? zkS_&78Y5V{FKjQ2;Hn62j9~5l2>%GK3Nx>Ezf;3Uxg9lpv|G22*9aMD>x(l-LOzH% zyY^Ey#D$-Qx#~ce8~+++?ZGe?ey*_KPWuhUrQaMGnf{H)*z`+CM0EODBqBcjL=q99 z9`__1qkag9h*FR+1 z+K@tPP407ksr(j8Ath^2a;?b+#)m$Y@t!Z*c-z(D`qp)hmYc+Kp(HD{qSmCp#78gc zZ%o8aq{V;ScsKpH(Suh9UhVpmy!P3Rp9cFFK0?rcD7zZyE|a^frMRw;I9ha@#?|kcCShl`jAK1a6*ll7B~wZapr#DeKKl@@Er9q+yD;Y$?{=5I1LuA7zQB zv&0Qq;^8cM$aMW>U%L6egB}u2n1=P>&2{do7TRCvGJTNnok`Dl)9E5_2AxX^DL$RF zRoIiA3a!G?>}U`_m!|J(5b% z=Y2EfG9^#<0H-_6>AFVO=F-NYbk9(_aTI-ErrU;-b)3hC`-2ND&lTe>Vqc4<+B4y> z;U{|DPu>ePZp#%9u%eKtiE`3i!q?meX=Tw)`r({Tag&f|8BDfY$az1+Fp`EDALhg) z26G)@nqWR1;e{4db;qtE!60?D@J`3(5DpAWC|$(L6>rm&xWEVe?C} zd4p{B1kA#8kqp4Z(UbjnKFQo27=az{B(M|I(rDsdVTbtdGHFp+rS%+}|39ur=y`f#l#dg&wmGL4sxzx| z#VM0L+yCf!cNxSnx=pU_<*s+BZ1uk6qzRJ)7O`5m=-5W8bJ;FG8k0TSj~Nm??;bVu zrfo%wS0pR_gso>5#Npexz)5*C?$3dpw#si0M=Qlem5sYl)CV>Sf4Vss%g=9)#PZV3 zEV&%i!|y8WmC!&X(*R*!$3!&W?$8VN4vS1Pg7uOg19iP{C`A4c&A6qs)`sX_hzdKU z)-9dNSU2UmG)taG>9-?9S3)%Mw$l1`h`y7Fy`zk^@s8p{LzLR3*xn407^1|xO6xM2 z_T5#+ioK__EDTXyh@d;r`hsBS&ydGIO7htY^t{eeK=Bx(}Z=6bsA#yHP?yRnDoq1~t!*IM@yFyNbjO)r&>*(j|^ zVm!tW<1vMJd<3rwu=OVb1EAH~Hw}iz;p&$TCCSbq#S`f_)_G}g5Kl;z4wbqTeze2; zpv9Mg``~wXw~!CkdAnPr7vN^fTlWrwWN5P=9tIBq+N@uiU?|=$nP39m(z9U^-nM4L zmiRU^9&NnC*QZ_+)r+HT_5?EwRKW`Cm=Q1@R@gU>fKTEi`9wVT&!wd2k;U_>VrD>D z|4&(1Z{mVZ)?&lz!!UG*7FUa25W-`t` z{I_sZ6%g)@Rmum;uM2nO97VV$Evho5j5@6GbKyn3T#+SOlurvHB>M7Pmt4@^xUMl;kGBv;ZznTcA0RR91 diff --git a/bin/PandorasBlocks.sym b/bin/PandorasBlocks.sym index 4af3d4d..9115b69 100644 --- a/bin/PandorasBlocks.sym +++ b/bin/PandorasBlocks.sym @@ -270,154 +270,159 @@ 00:2d7e GetNextTGM1Piece 00:2d9b GetNextTGM2Piece 00:2db8 GetNextNesPiece -00:2dc6 GetNextTGM3Piece -00:2e7c GetNextPiece -00:2e8a GetNextPiece.nextpiecejumps -00:2e99 Next35Piece -00:2ea3 Next7Piece -00:2ead NextByte -00:2ecd CheckAndAddHiscore -00:2ed7 CheckAndAddHiscore.checkloop -00:2edc CheckAndAddHiscore.checkgrade -00:2ee5 CheckAndAddHiscore.oldgraded -00:2ef4 CheckAndAddHiscore.oldungraded -00:2efb CheckAndAddHiscore.checklevel -00:2f20 CheckAndAddHiscore.checkscore -00:2f63 CheckAndAddHiscore.notbetter -00:2f70 CheckAndAddHiscore.better -00:2f72 InsertHiScore -00:2f72 InsertHiScore.copylower -00:2f83 InsertHiScore.copyupper -00:2fa3 InsertHiScore.findrow -00:2fb3 InsertHiScore.insert -00:300c InsertHiScore.persist -00:301d GetHiScoreEntry -00:3035 GetHiScoreEntry.store -00:303e InitTargetHSTable -00:3049 InitTargetHSTable.jumps -00:305e InitTargetHSTable.dmgt -00:3063 InitTargetHSTable.tgm1 -00:3068 InitTargetHSTable.tgm3 -00:306d InitTargetHSTable.deat -00:3072 InitTargetHSTable.shir -00:3077 InitTargetHSTable.chil -00:307c InitTargetHSTable.myco -00:307f InitTargetHSTable.store -00:3092 TimeInit -00:30bb StartCountdown -00:30c9 ResetGameTime -00:30dd CheckTorikan -00:30f3 CheckTorikan.failure -00:30f5 CheckTorikan.success -00:30f8 HandleTimers -00:311e HandleTimers.reduce -00:312b HandleTimers.clock -00:3145 HandleTimers.go -00:3169 CheckCOOL_REGRET -00:3181 CheckCOOL_REGRET.failure -00:3183 CheckCOOL_REGRET.success -00:3186 HandleSectionTimers -00:31a7 HandleSectionTimers.continue -00:31bb HandleSectionTimers.sectiongo -00:31df sProgressData -00:3329 sHiscoreDefaultData -00:3469 InputInit -00:347b GetInput -00:347b GetInput.btns -00:3488 GetInput.readA -00:348c GetInput.setA -00:3497 GetInput.clearA -00:349a GetInput.readB -00:349e GetInput.setB -00:34a9 GetInput.clearB -00:34ac GetInput.readSelect -00:34b0 GetInput.setSelect -00:34bb GetInput.clearSelect -00:34be GetInput.readStart -00:34c2 GetInput.setStart -00:34cd GetInput.clearStart -00:34d0 GetInput.dpad -00:34dd GetInput.readUp -00:34e1 GetInput.setUp -00:34ec GetInput.clearUp -00:34ef GetInput.readDown -00:34f3 GetInput.setDown -00:34fe GetInput.clearDown -00:3501 GetInput.readLeft -00:3505 GetInput.setLeft -00:3510 GetInput.clearLeft -00:3513 GetInput.readRight -00:3517 GetInput.setRight -00:3522 GetInput.clearRight -00:3525 GetInput.priorities -00:3532 GetInput.jumps -00:3541 GetInput.dlru -00:3551 GetInput.ulrd -00:3561 GetInput.lrud -00:356c GetInput.udlr -00:3577 GetInput.zeroud -00:357d GetInput.zerolr -00:3583 GetInput.zerolrd -00:358b GetInput.zerolru -00:3593 ScoreInit -00:35bb IncreaseScore -00:35f3 IncreaseScore.doConvert -00:360b IncreaseScore.carry -00:360d IncreaseScore.postConvert -00:3621 IncreaseScore.preAddDigit -00:3649 IncreaseScore.addDigit -00:365f IncreaseScore.nextDigit -00:3673 SwitchToTitle -00:367c TitleEventLoopHandler -00:3686 TitleVBlankHandler -00:3690 PersistLevel -00:369e DrawSpeedMain -00:36ee DrawSpeedSettings -00:373e SetProgress -00:3748 SetProgress.loop -00:374c SetProgress.correct -00:3773 SetProgress.wvr_u1 -00:377f SetProgress.wvr_u2 -00:378d SetProgress.wvr_u3 -00:3799 SetProgress.wvr_u4 -00:37a7 SetProgress.wvr_u5 -00:37b3 SetProgress.wvr_u6 -00:37c1 SetProgress.wvr_u7 -00:37cd SetProgress.wvr_u8 -00:37db SetProgress.wvr_u9 -00:37e7 SetProgress.wvr_u10 -00:37ef Main -00:381c Main.notgbc -00:382b Main.wvr_u1 -00:385b EventLoop -00:3874 EventLoop.eventloopjumps -00:387d EventLoopPostHandler -00:387f EventLoopPostHandler.wvb_u2 -00:3891 EventLoopPostHandler.vblankjumps -00:389a GradeInit -00:38a3 UpdateGrade -00:38ac DecayGradeProcess -00:38b5 DecayGradeDelay -00:38be TGM3REGRETHandler -00:38c7 TGM3COOLHandler -00:38d0 UnsafeMemCopy -00:38d9 SafeMemCopy -00:38d9 SafeMemCopy.wvr_u1 -00:38e8 UnsafeMemSet -00:38f0 SafeMemSet -00:38f0 SafeMemSet.wvr_u2 -00:38fe SwitchToGameplay -00:3907 SwitchToGameplayBig -00:3910 GamePlayEventLoopHandler -00:391a GamePlayBigEventLoopHandler -00:3924 EnableScreenSquish -00:393e DisableScreenSquish -00:3949 CopyOAMHandler -00:3955 ClearOAM -00:396b DoIntroEffect -00:397c BankingInit -00:398b OAMDMA -00:3995 OAMDMAEnd +00:2dc6 TGM3SwapBag +00:2e39 GetNextTGM3Piece +00:2e3c GetNextTGM3Piece.retryGenerate +00:2e61 GetNextTGM3Piece.replacePiece +00:2e68 GetNextTGM3Piece.giveUp +00:2e76 GetNextTGM3Piece.havePiece +00:2e96 GetNextPiece +00:2ea4 GetNextPiece.nextpiecejumps +00:2eb3 Next35Piece +00:2ebd Next7Piece +00:2ec7 NextByte +00:2ee7 CheckAndAddHiscore +00:2ef1 CheckAndAddHiscore.checkloop +00:2ef6 CheckAndAddHiscore.checkgrade +00:2eff CheckAndAddHiscore.oldgraded +00:2f0e CheckAndAddHiscore.oldungraded +00:2f15 CheckAndAddHiscore.checklevel +00:2f3a CheckAndAddHiscore.checkscore +00:2f7d CheckAndAddHiscore.notbetter +00:2f8a CheckAndAddHiscore.better +00:2f8c InsertHiScore +00:2f8c InsertHiScore.copylower +00:2f9d InsertHiScore.copyupper +00:2fbd InsertHiScore.findrow +00:2fcd InsertHiScore.insert +00:3026 InsertHiScore.persist +00:3037 GetHiScoreEntry +00:304f GetHiScoreEntry.store +00:3058 InitTargetHSTable +00:3063 InitTargetHSTable.jumps +00:3078 InitTargetHSTable.dmgt +00:307d InitTargetHSTable.tgm1 +00:3082 InitTargetHSTable.tgm3 +00:3087 InitTargetHSTable.deat +00:308c InitTargetHSTable.shir +00:3091 InitTargetHSTable.chil +00:3096 InitTargetHSTable.myco +00:3099 InitTargetHSTable.store +00:30ac TimeInit +00:30d5 StartCountdown +00:30e3 ResetGameTime +00:30f7 CheckTorikan +00:310d CheckTorikan.failure +00:310f CheckTorikan.success +00:3112 HandleTimers +00:3138 HandleTimers.reduce +00:3145 HandleTimers.clock +00:315f HandleTimers.go +00:3183 CheckCOOL_REGRET +00:319b CheckCOOL_REGRET.failure +00:319d CheckCOOL_REGRET.success +00:31a0 HandleSectionTimers +00:31c1 HandleSectionTimers.continue +00:31d5 HandleSectionTimers.sectiongo +00:31f9 sProgressData +00:3343 sHiscoreDefaultData +00:3483 InputInit +00:3495 GetInput +00:3495 GetInput.btns +00:34a2 GetInput.readA +00:34a6 GetInput.setA +00:34b1 GetInput.clearA +00:34b4 GetInput.readB +00:34b8 GetInput.setB +00:34c3 GetInput.clearB +00:34c6 GetInput.readSelect +00:34ca GetInput.setSelect +00:34d5 GetInput.clearSelect +00:34d8 GetInput.readStart +00:34dc GetInput.setStart +00:34e7 GetInput.clearStart +00:34ea GetInput.dpad +00:34f7 GetInput.readUp +00:34fb GetInput.setUp +00:3506 GetInput.clearUp +00:3509 GetInput.readDown +00:350d GetInput.setDown +00:3518 GetInput.clearDown +00:351b GetInput.readLeft +00:351f GetInput.setLeft +00:352a GetInput.clearLeft +00:352d GetInput.readRight +00:3531 GetInput.setRight +00:353c GetInput.clearRight +00:353f GetInput.priorities +00:354c GetInput.jumps +00:355b GetInput.dlru +00:356b GetInput.ulrd +00:357b GetInput.lrud +00:3586 GetInput.udlr +00:3591 GetInput.zeroud +00:3597 GetInput.zerolr +00:359d GetInput.zerolrd +00:35a5 GetInput.zerolru +00:35ad ScoreInit +00:35d5 IncreaseScore +00:360d IncreaseScore.doConvert +00:3625 IncreaseScore.carry +00:3627 IncreaseScore.postConvert +00:363b IncreaseScore.preAddDigit +00:3663 IncreaseScore.addDigit +00:3679 IncreaseScore.nextDigit +00:368d SwitchToTitle +00:3696 TitleEventLoopHandler +00:36a0 TitleVBlankHandler +00:36aa PersistLevel +00:36b8 DrawSpeedMain +00:3708 DrawSpeedSettings +00:3758 SetProgress +00:3762 SetProgress.loop +00:3766 SetProgress.correct +00:378d SetProgress.wvr_u1 +00:3799 SetProgress.wvr_u2 +00:37a7 SetProgress.wvr_u3 +00:37b3 SetProgress.wvr_u4 +00:37c1 SetProgress.wvr_u5 +00:37cd SetProgress.wvr_u6 +00:37db SetProgress.wvr_u7 +00:37e7 SetProgress.wvr_u8 +00:37f5 SetProgress.wvr_u9 +00:3801 SetProgress.wvr_u10 +00:3809 Main +00:3836 Main.notgbc +00:3845 Main.wvr_u1 +00:3875 EventLoop +00:388e EventLoop.eventloopjumps +00:3897 EventLoopPostHandler +00:3899 EventLoopPostHandler.wvb_u2 +00:38ab EventLoopPostHandler.vblankjumps +00:38b4 GradeInit +00:38bd UpdateGrade +00:38c6 DecayGradeProcess +00:38cf DecayGradeDelay +00:38d8 TGM3REGRETHandler +00:38e1 TGM3COOLHandler +00:38ea UnsafeMemCopy +00:38f3 SafeMemCopy +00:38f3 SafeMemCopy.wvr_u1 +00:3902 UnsafeMemSet +00:390a SafeMemSet +00:390a SafeMemSet.wvr_u2 +00:3918 SwitchToGameplay +00:3921 SwitchToGameplayBig +00:392a GamePlayEventLoopHandler +00:3934 GamePlayBigEventLoopHandler +00:393e EnableScreenSquish +00:3958 DisableScreenSquish +00:3963 CopyOAMHandler +00:396f ClearOAM +00:3985 DoIntroEffect +00:3996 BankingInit +00:39a5 OAMDMA +00:39af OAMDMAEnd 01:4008 sDMGTSpeedCurve 01:4203 sDMGTSpeedCurveEnd 01:4205 sDMGTSpeedCurveSpecialData diff --git a/src/rng.asm b/src/rng.asm index c636176..3bd9220 100644 --- a/src/rng.asm +++ b/src/rng.asm @@ -249,69 +249,7 @@ GetNextNesPiece: call Next7Piece jr ShiftHistory - - ; TGM3 mode... It's complex. -GetNextTGM3Piece: - ld a, 7 - ld e, a - -: dec e - jr z, :+ - - ; Get a random index into the 35bag - call Next35Piece - ld [wTGM3GeneratedIdx], a - - ; Fetch the piece from the 35bag. - ld c, a - xor a, a - ld b, a - ld hl, wTGM3Bag - add hl, bc - ld a, [hl] - - ; Is it in the history? - ld hl, hPieceHistory - cp a, [hl] - jr z, :- - inc hl - cp a, [hl] - jr z, :- - inc hl - cp a, [hl] - jr z, :- - inc hl - cp a, [hl] - jr z, :- - - ; We have a piece. Save it. -: call ShiftHistory - - ; Increment all drought counters. -: ld hl, wTGM3Droughts - inc [hl] - inc hl - inc [hl] - inc hl - inc [hl] - inc hl - inc [hl] - inc hl - inc [hl] - inc hl - inc [hl] - inc hl - inc [hl] - - ; Set the drought of our most recently drawn piece to 0. -: ldh a, [hUpcomingPiece2] - ld c, a - xor a, a - ld b, a - ld hl, wTGM3Droughts - add hl, bc - ld [hl], a - +TGM3SwapBag: ; We pick an arbitrary piece to have the worst drought. : call Next7Piece ld [wTGM3WorstDroughtIdx], a @@ -401,6 +339,92 @@ GetNextTGM3Piece: ld [hl], a ret + ; TGM3 mode... It's complex. +GetNextTGM3Piece: + ld a, 7 + ld e, a + +.retryGenerate + dec e + jr z, .giveUp + + ; Get a random index into the 35bag + call Next35Piece + ld [wTGM3GeneratedIdx], a + + ; Fetch the piece from the 35bag. + ld c, a + xor a, a + ld b, a + ld hl, wTGM3Bag + add hl, bc + ld a, [hl] + + ; Is it in the history? + ld hl, hPieceHistory + cp a, [hl] + jr z, .replacePiece + inc hl + cp a, [hl] + jr z, .replacePiece + inc hl + cp a, [hl] + jr z, .replacePiece + inc hl + cp a, [hl] + jr z, .replacePiece + jr .havePiece + +.replacePiece + push de + call TGM3SwapBag + pop de + jr .retryGenerate + +.giveUp + ; Get a random index into the 35bag + call Next35Piece + ld [wTGM3GeneratedIdx], a + + ; Fetch the piece from the 35bag. + ld c, a + xor a, a + ld b, a + ld hl, wTGM3Bag + add hl, bc + ld a, [hl] + +.havePiece + ; We have a piece. Save it. + call ShiftHistory + + ; Increment all drought counters. +: ld hl, wTGM3Droughts + inc [hl] + inc hl + inc [hl] + inc hl + inc [hl] + inc hl + inc [hl] + inc hl + inc [hl] + inc hl + inc [hl] + inc hl + inc [hl] + + ; Set the drought of our most recently drawn piece to 0. +: ldh a, [hUpcomingPiece2] + ld c, a + xor a, a + ld b, a + ld hl, wTGM3Droughts + add hl, bc + ld [hl], a + + jp TGM3SwapBag + ; Gets the next piece depending on RNG mode. GetNextPiece:: ld hl, .nextpiecejumps