From 9c9a210d9ee7e85c08d6564960ee0c489243f0e3 Mon Sep 17 00:00:00 2001 From: Randy Thiemann Date: Mon, 23 Oct 2023 20:31:18 +0200 Subject: [PATCH] Fix crash, improve ARS2, improve initial hold. --- .vscode/launch.json | 1 + DMGTRIS.GB | Bin 32768 -> 32768 bytes src/field.asm | 230 +++++++++++++++++++++++++------------- src/res/sources/tiles.gbr | Bin 39009 -> 39009 bytes src/res/tiles.inc | 4 +- src/rng.asm | 8 +- src/state_gameplay.asm | 41 ++++--- 7 files changed, 182 insertions(+), 102 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index f8b8ca3..c47775c 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -8,6 +8,7 @@ "type": "emulicious-debugger", "request": "launch", "name": "Launch in Emulicious", + "emuliciousPath": "${workspaceFolder}\\tools", "program": "${workspaceFolder}\\bin\\out.gb", "port": 58870, "stopOnEntry": false, diff --git a/DMGTRIS.GB b/DMGTRIS.GB index ba018aa8519c966dc7018c1418140addb36aec63..174f0634e0a0b46365f0419b3b9f02ecab3bc6f3 100644 GIT binary patch delta 3541 zcma)8eQ*=U6~8;3?j%{3EyBmy66Ov|wrmIx2(AkD*=`f;U>twI0FrFW_6%jF{ey%+ zOB_HhQ^GJUU%jSd0&OS*Y1(P3Hcng9bf`gU#}?U{G}9K_0duq^Q&bX`LekVQtG+#b z;EtJT?YZ0c+u!fKw{P#=>iYY+{(kQ0%c6hP^3ShYS#|8t7rFWCwF|vVcqVqRTjSZa z+_Bw*t*qNMe`gQAti)TKg$!YQd{K?`*&e-rxBhjQ-Ow_4(7lgk1Dd_0SgR;LklmcY@Ce`=@aOL8^1!>i#wER{gv1br3GIm=EM$#aK3WF`br5SJEuD0 zh5{eD)NoOgCC7_|P1MN5?AuGMzCP`@3rdTM@L07z_K1kuodupsU~3-9D!JH~i6A%P zaqZ`_Tm!4Y<2CyD!*Gl&q}MlXsjyOpDq&R#zk&~@5sjdDO8*ak?WeM5aW@G6cc$?M zD6d-EE6{ zX(24=J2@-$Q0kBs@f#xacA7iC=qSZ+RjhGmQ~}%B)mor?LVnn?+@F(lStSW5i5V zB30R_%1%`UROOtm;;BlYDl1jxQB^)w6+A)}0hxu$Y*c2aGRGripc1LdN>zDOm7i0w zW5h&L@-(GDRU%bcsmeB8#Zi^XzlWIp&lADFg^2!uCVCERbVC2Hfi6Gih5dWa8~ezM zkN=+6kE8Pvnp1|4G~lBx_}C`=?NdKEO;WxBl}p}=;qU2((N$k;wO8dSJfREX-e55xWW;*6be=E9B4BxliZ7t(Pi)5HC8*HhV@I6Bi~ZZ6!undH1IIf{>H z-||U=+kL4y3mpy%{MqgF?r<;+uKTdxXH)7^m!6d$MD;r79Zgf0&tBW1{!MSt8`Y!w zGiZMR_4lH`YUAq42=Chohx5yI@L~_t5ixP4j#v{+J-qD8o8YzYY{J(_P`1!+Du8aP zkp*a3i!ZP?26>oRALwdiv&!j{QJ|#%qEud=L?&FnfD7%wgs85ROS5zjwGg1Y<4Rk5$YKqgA0aL-aR?(!; zEn3%92E*WvrmynPwrxc03xojG{ z@*#`z8ML-T^S3?`5o+n;lTgUqsjYE%I$}+7Yn-k{NRRj*z|EnY;1jFUbI}ZS3n){p zwhez|7{%@2XGD?RPyqz9)g*)QB!7y=V{;~m-BTfhkJKbX@ub-h@HvxkAb@WNBS1$y zDP#g9m7e!uxNgDqcj--F>9l+X4EZ%x1P>W44kb6oTcQn+-MZKCx(VtVa9xM% zD*7w{Yk9JC+CRQbR!&hMe&u2JYeySfjskijhA{ebxlHUa($ zU@?Pvz;gjxGB{#}iFc+=2!IJ-Yepafegbe_23r8%n1-!@X##tOw*kIB4d(%V4sd>k zw*!9ZA%2|X!^8uaaAX7yz|RAAW^lnUEdH+g7=>D1*XOvco!V1f+qw2`ZKx|Cws)&` z*eOj4FQUim)8Q2b@C!89fPXyXGpqTOIuKq>)$wqTQ&_4n{VY>RdoF!wR&@_No_$5o z8w@(aAgu>^JCVk~F9GZ^`e6@xn-Lg%f9T>jYGc<1?{}|YEC1NbN)Hg+Pp07R_!Mr9 ma7o2#s@m#*@VifTEp2#lX^ZK~Ep2n}785+m!3({E?*9NA^lkb8 delta 3266 zcmZuz3v5%@8NT=W`Wf4aA$BI2)|(GIYHETwj}X zA(DOm@BhB@KaT%8}>!Z7cX1Bc+u{+pAh<2caaOJL)mFXdRec+H|I#q9J@7iuw;^}gY~hTAs>+Cu*ZY!d z70SzYEvxq>^gYO5zKoYpbNPZA7kOJB!}|hBNogb(sWmMrR8Y$)ulgw`yC&LFls_ve zlIJJjdY)R<=crTt9vKajks8!22TJ5(u=J5a7?dp!mVvK!l26Hpfebde8r92{6_P?m zYxPlc9~8C+N&udNY-Bs+eja2MrSi1@mr2i|+j7u99sFP4FD=QHWzj9Fp}aEfz|8q`2cw{eD%{S7jRqIu*QYSep;q}lg?7t(o*%O zbXxj5m9!+?RY|?+!Js+g&KlT{*9*_g`7R7FhXVXEQ>sJcPsU@{kzxtYxS02!$4Oyy*%BBt^bRQw3F zu#_T8X=5roQ#qN+HCZJvm8E(swN}4GZPgp8y*i4X4Zhj!fYDq6Q@aZ9sv{JU$s8PUuGo3ZqEXeBopqy;2ntrmsiYs>g+{DpWJq&z9(1 ze@$1FTN6(XDZfhEiWXR*CXtHr7l{+H%VxoO@)uJ{5lHl2E)LEunMvVRPu<}tgnMc# z>15$n%rnZ0=a#N{{%F1c@6;WhLO5;eFy55 zp+SC#9frg~wSSF~&+x;oiah8W%3{>2R1f-&8OF*%-*IL@5O@uIu6dy|^lp8SHGZLf zE-VB8sef5)INzdhef%K-B2ILq;9{QbI~-A-?BlI0iSKAc*=X8Qfcj*~_wFS2z56Wo zaQJj9I^DFmd7H*6&p<~rCpM+v%#Jk>;Q z8OEMw*oW$xXLiGOJ`+o2#6#c#E-=x`V!LWHt*MNaIW@6hQUQ2)%Nl%JDq}NvK9e`8 z1^9I)zb=)r8@!Oon{br`CgLU^Ph}j3x>*7)W7w*Yeo^x8-zOgalT)j@Y-N%b;&=O(j`JDZny;1q0K|Hp% zK-doDh;0#cyyYSPc7spc=i}zaJrQ)d)b@6vM|M08q@qq zqtcw>?aao&h-LwV_37c&rxSEW_HXUITll{X3wa1E6=C| zJ~!cWT{;ddbIbi;$Okn$?2z%nSY~aiF%gEW&ex1xH$Z(AK3Cv#32#Q*Vn(Wiu~#Zz zi&8HA^C;!hhokTx%K0eVl4qiLAa<>eRxbK-7%cSd)@tjA5#NOfdbxE&&KekR-N|=< z&<2m|JZvm-Zkc5)L-4E*hsm86$lXmJs@5%dxNUd~+&XTpNxuUZ>s`DwJ`8i@)?No} zGcgai7qDnz3*gOw?Isoh&jjo+akmv5f1Kp70j7YRroaw(G2kK-I{;sugq?s{0=LP# z0AHDeivYg}*kkf;z+Lz8qtpYAd*JYz0x#f~0Q*c_JP5_#(WWzq`r_Xb#^COY|48__ z9X;6|wSU~Mx!J9Fr2S!bD}K_xv>09o17Y&J6RK77FsiiUai(tW==5z{sBk?zSHfl| zch@C5`X0^CI{qz(cXHU)iTm0x;_zrAoH3r=i9g_M9Qp5wvso<}8+fa8DL*s3o|o=n m_}-s|Z|@iIwGxNXh4s_g9qIAEBWnVDg;(*$`A E0IBj90ssI2 diff --git a/src/res/tiles.inc b/src/res/tiles.inc index ac943c6..be307f2 100644 --- a/src/res/tiles.inc +++ b/src/res/tiles.inc @@ -530,8 +530,8 @@ Tiles:: DB $4A,$4A,$4A,$4A,$E4,$E4,$00,$00 DB $CC,$CC,$22,$22,$22,$22,$44,$44 DB $82,$82,$82,$82,$EC,$EC,$00,$00 - DB $0C,$0C,$0A,$0A,$0A,$0A,$0A,$0A - DB $0A,$0A,$0A,$0A,$0C,$0C,$00,$00 + DB $0E,$0E,$08,$08,$08,$08,$0C,$0C + DB $08,$08,$08,$08,$0E,$0E,$00,$00 TilesEnd:: diff --git a/src/rng.asm b/src/rng.asm index 93c3fd0..cfed787 100644 --- a/src/rng.asm +++ b/src/rng.asm @@ -64,8 +64,12 @@ RNGInit:: ld bc, 7 call UnsafeMemCopy - ; Start with a random piece held. - call Next7Piece + ; Start with a random non-S/Z piece held. +: call Next7Piece + cp a, PIECE_Z + jr z, :- + cp a, PIECE_S + jr z, :- ldh [hHeldPiece], a ; If we're in HELL mode, we don't care about anything but a random piece to start with. diff --git a/src/state_gameplay.asm b/src/state_gameplay.asm index 78dce6c..79747f0 100644 --- a/src/state_gameplay.asm +++ b/src/state_gameplay.asm @@ -22,16 +22,16 @@ DEF STATE_GAMEPLAY_ASM EQU 1 INCLUDE "globals.asm" -DEF MODE_LEADY EQU 0 -DEF MODE_GO EQU 1 -DEF MODE_POSTGO EQU 2 -DEF MODE_FETCH_PIECE EQU 3 -DEF MODE_SPAWN_PIECE EQU 4 -DEF MODE_PIECE_IN_MOTION EQU 5 -DEF MODE_DELAY EQU 6 -DEF MODE_GAME_OVER EQU 7 -DEF MODE_PRE_GAME_OVER EQU 8 -DEF MODE_PAUSED EQU 9 +DEF MODE_LEADY EQU 0 +DEF MODE_GO EQU 1 +DEF MODE_POSTGO EQU 2 +DEF MODE_PREFETCHED_PIECE EQU 4 +DEF MODE_SPAWN_PIECE EQU 5 +DEF MODE_PIECE_IN_MOTION EQU 6 +DEF MODE_DELAY EQU 7 +DEF MODE_GAME_OVER EQU 8 +DEF MODE_PRE_GAME_OVER EQU 9 +DEF MODE_PAUSED EQU 10 SECTION "High Gameplay Variables", HRAM @@ -133,8 +133,8 @@ GamePlayEventLoopHandler:: jr z, goMode cp MODE_POSTGO jr z, postGoMode - cp MODE_FETCH_PIECE - jr z, fetchPieceMode + cp MODE_PREFETCHED_PIECE + jr z, prefetchedPieceMode cp MODE_SPAWN_PIECE jp z, spawnPieceMode cp MODE_PIECE_IN_MOTION @@ -186,20 +186,20 @@ goMode: jp drawStaticInfo - ; Clear the field, ready for gameplay. + ; Clear the field, fetch the piece, ready for gameplay. postGoMode: - ld a, MODE_FETCH_PIECE + ld a, MODE_PREFETCHED_PIECE ldh [hMode], a call FieldClear + call ToShadowField + ldh a, [hNextPiece] + ldh [hCurrentPiece], a + call GetNextPiece jp drawStaticInfo ; Fetch the next piece. -fetchPieceMode: - ldh a, [hNextPiece] - ldh [hCurrentPiece], a - call GetNextPiece - +prefetchedPieceMode: ; A piece will spawn in the middle, at the top of the screen, not rotated by default. ld a, 5 ldh [hCurrentPieceX], a @@ -336,7 +336,6 @@ pieceInMotionMode: jr nz, :+ ld a, MODE_DELAY ldh [hMode], a - call ToShadowField ; No fall through this time. : jp drawStaticInfo @@ -358,7 +357,7 @@ delayMode: ldh a, [hRemainingDelay] cp a, 0 jr nz, :+ - ld a, MODE_FETCH_PIECE + ld a, MODE_PREFETCHED_PIECE ldh [hMode], a : jp drawStaticInfo