From fc558b548855888691429472518d72f7b3e052f5 Mon Sep 17 00:00:00 2001 From: Randy Thiemann Date: Thu, 26 Oct 2023 08:24:05 +0200 Subject: [PATCH] Add more drop options and change how they work. --- README.md | 9 ++- bin/DMGTRIS.GBC | Bin 65536 -> 65536 bytes bin/DMGTRIS.pocket | Bin 65536 -> 65536 bytes src/constants.asm | 8 ++- src/field.asm | 79 +++++++++++++++++++++--- src/include/globals.asm | 124 ++++++++++++++++++++++---------------- src/input.asm | 81 ++++++++----------------- src/main.asm | 27 +++++++-- src/res/sources/tiles.gbr | Bin 39009 -> 39009 bytes src/res/tiles.inc | 66 ++++++++++---------- src/sprites.asm | 8 +-- src/sram.asm | 2 +- src/state_gameplay.asm | 77 ++++++++++++----------- src/state_title.asm | 4 +- 14 files changed, 279 insertions(+), 206 deletions(-) diff --git a/README.md b/README.md index d323ea5..e8723a2 100644 --- a/README.md +++ b/README.md @@ -40,9 +40,16 @@ Choose between a few randomizer options: Select the rotation rules: - ARS1: Classic ARS from TGM1 and TGM2. - ARS2: ARS from TGM3. +- NES: No kicks. ### Drop Mode -Select whether up performs a sonic drop, a hard drop, or nothing at all. +Choose how the up and down buttons act: +- FIRM: Up drops to the bottom but does not lock until you are in neutral position. Down locks. +- SNIC: Like FIRM, but thre is no neutral lock. +- HARD: Up drops and locks. Down does not lock until you go neutral when the piece is grounded. +- LOCK: Like HARD but down locks. +- NONE: Up does nothing. Down locks. + ### Speed Curve Select between several speed curves including the DMGTRIS default speed curve, TGM1, TGM3, as well as DEATH and SHIRASE mode. In addition there's a "CHILL" curve for when you just want to enjoy some tetris. It doesn't speed up very fast at all. diff --git a/bin/DMGTRIS.GBC b/bin/DMGTRIS.GBC index 7ddf83f304bafa6a4035ca279f941d0254879824..ecfebe19c8935d9503924e51211ffc3e7146b569 100644 GIT binary patch delta 6957 zcma)A3w#r0wx3BRNt3ooQwmHU))^|>q4E+1k+wrAuwhqe3-XeO;JtT6T@_v3ZB=N> zDn58wm_-Y#5>YCO5cqXPe4t25$)p)qfA?N5c5yi%6bJ|(uDZKXCii?ZNg5XY-8=bZ z=A8fef9HJXd(X7Aa4jvI|B!hxaYqgOttrL`YQnhUe@jrs+sTL@Cs-GwJ{-KH!l>5fzvveL?qaZS3`8xD(X8#_Q*#|a&Ton^hwT}e8{duMy|7@d*0!fO5>%b;Z`EJyT* zS(l-|UkZ<_uoa@Xze!nao@@RKK5zoMn@3Z;5m36HozwGBCH?* zScxsPR%T-7y0s}b?YA~!6l|siJ8as1o1O@hLpl= zau8OLL$HRl>5Sk&pKYN{E^=CD1shTI#Qyl)D6Kv@$y-RT;>qeipckc+I(uNQi>#^c zwPI1j<+v!m0>I|HJM(zeFq+K^6p1; zHd5x)ZBn!DlpZy_Rw=`rC4x{$4pzZIvc^m$Gk_WUSe7vKVD*nP(qTGvyD)`xRnz>3 zIj^e0N_AC3SD#l#u$#5cNC4~27@2naBBd_!jH#uZlnfQh{y$E-s*_Pmh6#(X!2cbV zHffcSyb}_=2d;Npp3pGy=QoTB`b4iNj&B3IET_1xR064J(B^=m?}{ zR+>eve1mECk!SXfWPPNo1-gPbPB&v)Udq;P8ztvz?~V*z$|lEgI2DlRs^B>cZn&@r zMgY_CAnKTG#yC$?Ut?W_(l(($s}vXkevszJhGRs$GK(!3d?;wv51IV={grpO#@HJGO|0w_#R% z0a;NEE0AH~on!<0D@x`ncvGqJ4qAgCPFLhf!^zWF6)C?BpT{*_6PZc9irHZLC<0CKXrP3I^P@03i z`ly~CDa_ULBI9#)cjQ;OdQN0juI`HL&egLbpXTcJ2+7sCh{KI@G~cbFf9|lJ)icSh z=k!#$^}L=N+`7M@XQ*4}d#-WoB|RnXP=On1*2B7;(wvl*Lunq$%BQUUX_n=%Zlf#* zWw|IThq64B<;`Sqlx3$ZCuL<*RxV|EdP@Askm#(BmPKhUO3R@%_m4YsP?nRjvMDP! z&0-JhRvMC{A?=jqpe!e4xiVRno=L1*nVCEHIc4og07FrNzK z7ThIzuz6)qsKG-vc5$##Yh|^^J>*#*X{{&gW|Q@Sm$&E%$s=2E9VairTJ7fi(2H)F zqv{K=HY9swmdXnD{3AhljVL~{@iUiA_#QSAWuf-T7_w~%d0mvoqFWE}>idL5T!WoBq9$8xrYjtKnc@67eD`lxSfKKhIF*u49ho`di zeov0fy%QGqblbBla7&RmofEzb?iE~iR=ZzWrzD`80NG31s>$5A3Ui3B6 zOY1e&xZmULtJh0c()*`YZ%qb zFyfQSgZ&0}+?iix^S93xnKt$h7CcUg)7#?nqFp_W;`%n++PaQ5iuoIHf$BQmC{EuP zUl{E=)u;_+w70L9Pk;}m$gS`TZT$_}f8C_rH%4n+P+*%V$ zA`q2}4W9Oe!#Ftc1~=cVyHRzlGIdMWZ=8Ag2Kz@n+~OuUA(4aafswU{T?~htJGK@| zE`NV?faflu=qI|9ws0@qZm-dN*M`a~&9*So%rRQdp2TU@o!S#Di9&>b)LYVkG1vln zR;Tij44GueeopNp@fkAqaJq0!hCCxfzAHmsnv{8lfcDlX64nZ@7lp9*t%SDbdU0&n z`-UM*343=^L331KGIGKXYN{81vcu^pT#3EIk4aH~vcuC<<8b1_LO8@o*he}c+ytGf zu~qNKp;0e)!Ze&R%FTl(THKW#t%LWl!yaa+Wq_4VOM$-G3}D%S@pQ2J={tm%X%m@F zmf^5fJ02?kkR6{a;-EzkzMK+-`ea1vvoq<_Aqt)BA`5cK1?9mZ#(J@Ch_Oy=8#12V ztehV5wu2sFt`jdP?G+RJ?+qq3y)BX}`BD{x8n1m04H%$HNBrNS$Sv}AHHeejSewz| z-3{Wek~07AH0J~oR%Z~_We{qOMiDCGcSO5=$a}6qoYcnV7>>3yi2vbFDtwW5XNKur zG^H#|a&0Q6YZIq+mf-8gvd+TRD# z0Zxys1LF74!K}%5BY;q1jwn}kY;H8>3eZSwTEtK#xGMXxB1o7Qjb$4IE-m5_v4p;e z820(mSdL-0#8M*Gp~O68V)+HpSZ=a>O2l1vQ2cgUKDRn{do<<_Xp4r^I@mI`YTbrz z7AC_ijK)04dZt9)O4HxEgtRYazezZk!PZz_U@5f6yn)cC%GJXL`pYYWnOPNMR`^2T zs!C@POiP$kG0n+B&8b9!X$ey@4%E_u&g&`};yZk{8`wm`MqhTPw9TWzX=tE%;qQ95K-UFcb8}a{}Gv-R1S-Ee*~Y z3&bTGS&q&)G~^}?a|}bU&v1LxEOD=4xX@=>(uXBk4{T}-xhv%s_!(}igXKn`d-z#62VcSYAe@1iO3wPoIXFwc zf^+0Ne1+!oP3mP(6P(9SILIYu_49s#!_`35?i`8hQn~pM%txW|2vf6 z7Ae&TOiTgG5x5S4`V?SApbUYZr+~*1_!fcbDS$)Z<4ndA2#iNyMv7rW;2{Kj5c8Xr zUxA2%$jlVQj=&xSrlf!;5!ishY!lF3sGmXo7fF33>W`p)TT;(P{Ylj4CG{NC-Kft` z>ba;F!Wn-Wa3k<+2El`RDe4Q71@cg*Ra}_Vz5C_!s4g;9OwbDhu(yjrz&AGM$s;wSLPhs}@=Cb4b*=2BMDa4MdF>5&H z2*}HAC;E=a70BS;Bnlx@G7Z4%Hom42hulXA4mlM=kR}; zkI0UnHttB45ne?>*lbV*?WQrYInnx{50h~=8!peFtCRRYhW{@#+h|PfhBE$!vhq_CulAs6~0~%>}aCv3%qG4+fC(-W$?;Uc(nqyRlw_p zVYg}6Whg;Y*{PknQ5D}v$jT7jS-k;XUzP>i$aeUXxI=ka-|S3sZwUZ{XSR=|rD@KObAseqTw_A|Ep zFn*ldjBOrJz4D|O6OgCI*nsSdSpxECW#3rYUlg+k@O0z|$o*nj0hy0E1GukUzCAJl zeUk80oDJwxg_gJ_p!*J#j*VLb`e^#(0{SUoN8A>`^`$*-59me0=C~t(-&Nb3BAy+qs=_xlYY7JTP~-&tD2N}&@dF`#TgN;wo3~&O zybXKd9e5YsgZFVb?1K;BL)Z@=!2z{T^;4a^w}iaE*t;*mlEa!bj^%%#_ZJd)cYlYs zDfs7$<Eb%FLSII&1eeFQ>m+t%jqwqOq{SdZHp-#6Bav6rml#! zciX6}E6>*c+FH9$S1#4w$HqE-J#iUVGHH^oPckn0G~+N#RTY&wxG8IG1tamITIN%E zZtAT{VcnqOgs}W~%Z24kf-)=*SZXYb95s#_3&UKk%&IGM)*ynq;{oM2b^oL6uN$G< zRo{}+)g|FoSGN)`<(v9N1?+7Nw@;g~V9xEg&8WNemId{*=hn^YnBUMgVoOWQ{{ru? B8}$GH delta 6804 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 D(I^4| diff --git a/bin/DMGTRIS.pocket b/bin/DMGTRIS.pocket index bc1585b0891b1ad8dbda72727f33b7b701421c32..b3a6df09830375bf9b7c5d2fa14f64a332c1276a 100644 GIT binary patch delta 6957 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 delta 6804 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 DAS charge. - ldh a, [hLeftState] - ld b, a - ldh a, [hDASCharge] - cp a, b - ; If so, save the new DAS charge. - jr nc, :+ - ld a, b - ;ldh [hDASCharge], a - - ; Check if the right state > DAS charge. -: ldh a, [hRightState] - ld b, a - ldh a, [hDASCharge] - cp a, b - ; If so, save the new DAS charge. - jr nc, :+ - ld a, b - ;ldh [hDASCharge], a - - ; There's an overflow risk here if the DAS charge is 255. -: cp a, $FF - jr nz, .btns - dec a - ldh [hDASCharge], a - ; Get the button state. .btns ld a, P1F_GET_BTN @@ -187,7 +159,7 @@ GetInput:: xor a, a ldh [hDownState], a - ; Read left button. If it's just been pressed, restore the held DAS charge. + ; Read left button. .readLeft bit 1, b jr nz, .clearLeft @@ -195,42 +167,41 @@ GetInput:: ldh a, [hLeftState] cp a, $FF jr z, .readRight - cp a, 0 - jr nz, :+ - ldh a, [hDASCharge] -: inc a + inc a ldh [hLeftState], a jr .readRight .clearLeft xor a, a ldh [hLeftState], a - ; Read right button. If it's just been pressed, restore the held DAS charge. + ; Read right button. .readRight bit 0, b jr nz, .clearRight .setRight ldh a, [hRightState] cp a, $FF - jr z, .checkDAS - cp a, 0 - jr nz, :+ - ldh a, [hDASCharge] -: inc a + jr z, .priorities + inc a ldh [hRightState], a - jr .checkDAS + jr .priorities .clearRight xor a, a ldh [hRightState], a - ; If none of the four directions are pressed, reset the DAS charge. -.checkDAS - ld a, b - or a, $F0 - cp a, $FF - ret nz + ; If left or right are pressed, zero out up and down. +.priorities + ldh a, [hRightState] + cp a, 0 + jr nz, .zero + ldh a, [hLeftState] + cp a, 0 + ret z + +.zero xor a, a - ldh [hDASCharge], a + ldh [hUpState], a + ldh [hDownState], a ret diff --git a/src/main.asm b/src/main.asm index acf9f8c..b44d3ea 100644 --- a/src/main.asm +++ b/src/main.asm @@ -126,21 +126,36 @@ EventLoop:: call HandleTimers ; Call the current state's event handler. - ld b, 0 + ld hl, .eventloopjumps ldh a, [hGameState] - cp a, b - jp nz, GamePlayEventLoopHandler + ld b, 0 + ld c, a + add hl, bc + jp hl + +.eventloopjumps jp TitleEventLoopHandler + jp GamePlayEventLoopHandler EventLoopPostHandler:: ; Wait for vblank. wait_vblank ; Do OAM DMA. - ; This will chain jump into the vblank handler. - jp hOAMDMA + call hOAMDMA - ; The VBlank Handler is expected to end with jr EventLoop. + ; Call the current state's vblank handler. + ld hl, .vblankjumps + ldh a, [hGameState] + ld b, 0 + ld c, a + add hl, bc + jp hl + +.vblankjumps + jp TitleVBlankHandler + jp BlitField + ; The VBlank Handler is expected to end with jp EventLoop. ENDC diff --git a/src/res/sources/tiles.gbr b/src/res/sources/tiles.gbr index 9f38600a631b95cc7847ebdeac7f9e63e1a9728d..d1625a9a1490d5db5c0eeef4c77e9977ea9d112c 100644 GIT binary patch delta 411 zcmaF3f$8A}rVVL>|LRYK2_;4EGVP;@p0Agkc0JA}Sbc`ZDnXy!L^7#U;$^YHCCUwY7o*>UQNsME% zfDp&z2bSWK57@9z=C9_MeAc~UGk0N@=;R5h0zg5o$pHnTlN~HsCmV>ePA*{Lfav1{ zso&hw=Eyj?x1(+H=^)O@bJ`6i_jC#g0-eFgz`z8e7#TtIdZ@$s{osp4w@`ZlM$(jAin|UULasU9e5i?K# diff --git a/src/res/tiles.inc b/src/res/tiles.inc index cacb0f7..7e10909 100644 --- a/src/res/tiles.inc +++ b/src/res/tiles.inc @@ -28,8 +28,8 @@ Tiles:: DB $67,$1F,$67,$1F,$67,$1F,$00,$00 DB $E6,$F8,$E6,$F8,$E6,$F8,$E6,$F8 DB $E6,$F8,$E6,$F8,$E6,$F8,$00,$00 + DB $00,$00,$00,$00,$00,$00,$10,$00 DB $00,$00,$00,$00,$00,$00,$00,$00 - DB $00,$00,$00,$00,$01,$00,$00,$00 DB $00,$00,$00,$00,$00,$FF,$FF,$FF DB $00,$FF,$00,$00,$00,$00,$00,$00 DB $00,$00,$00,$00,$FF,$FF,$FF,$00 @@ -44,8 +44,8 @@ Tiles:: DB $66,$BD,$7E,$99,$00,$FF,$00,$00 DB $00,$FF,$36,$C9,$6C,$93,$5A,$A5 DB $36,$C9,$6C,$93,$00,$FF,$00,$00 - DB $00,$FF,$00,$BD,$3C,$81,$00,$81 - DB $3C,$81,$00,$BD,$00,$FF,$00,$00 + DB $00,$FF,$42,$BD,$7E,$81,$7E,$81 + DB $7E,$81,$42,$BD,$00,$FF,$00,$00 DB $00,$FF,$3C,$C3,$5A,$A5,$7E,$81 DB $5A,$A5,$3C,$C3,$00,$FF,$00,$00 DB $00,$FF,$5A,$A5,$42,$BD,$42,$BD @@ -58,8 +58,8 @@ Tiles:: DB $E7,$BD,$FF,$99,$FF,$FF,$00,$00 DB $FF,$FF,$B7,$C9,$ED,$93,$DB,$A5 DB $B7,$C9,$ED,$93,$FF,$FF,$00,$00 - DB $FF,$FF,$81,$BD,$BD,$81,$81,$81 - DB $BD,$81,$81,$BD,$FF,$FF,$00,$00 + DB $FF,$FF,$C3,$BD,$FF,$81,$FF,$81 + DB $FF,$81,$C3,$BD,$FF,$FF,$00,$00 DB $FF,$FF,$BD,$C3,$DB,$A5,$FF,$81 DB $DB,$A5,$BD,$C3,$FF,$FF,$00,$00 DB $FF,$FF,$DB,$A5,$C3,$BD,$C3,$BD @@ -72,8 +72,8 @@ Tiles:: DB $66,$BD,$FE,$BB,$FF,$FF,$00,$00 DB $00,$FF,$36,$C9,$6C,$93,$5A,$A5 DB $36,$C9,$EE,$BB,$FF,$FF,$00,$00 - DB $00,$FF,$00,$BD,$3C,$81,$00,$81 - DB $3C,$81,$AA,$BF,$FF,$FF,$00,$00 + DB $00,$FF,$42,$BD,$7E,$81,$7E,$81 + DB $7E,$81,$EA,$BF,$FF,$FF,$00,$00 DB $00,$FF,$3C,$C3,$5A,$A5,$7E,$81 DB $5A,$A5,$BE,$EB,$FF,$FF,$00,$00 DB $00,$FF,$5A,$A5,$42,$BD,$42,$BD @@ -86,8 +86,8 @@ Tiles:: DB $EE,$BF,$FF,$FF,$FF,$FF,$00,$00 DB $00,$FF,$36,$C9,$6C,$93,$5A,$A5 DB $BE,$EB,$FF,$FF,$FF,$FF,$00,$00 - DB $00,$FF,$00,$BD,$3C,$81,$00,$81 - DB $BE,$AB,$FF,$FF,$FF,$FF,$00,$00 + DB $00,$FF,$42,$BD,$7E,$81,$7E,$81 + DB $FE,$AB,$FF,$FF,$FF,$FF,$00,$00 DB $00,$FF,$3C,$C3,$5A,$A5,$7E,$81 DB $FA,$AF,$FF,$FF,$FF,$FF,$00,$00 DB $00,$FF,$5A,$A5,$42,$BD,$42,$BD @@ -100,7 +100,7 @@ Tiles:: DB $FF,$FF,$FF,$FF,$FF,$FF,$00,$00 DB $00,$FF,$36,$C9,$6C,$93,$FA,$AF DB $FF,$FF,$FF,$FF,$FF,$FF,$00,$00 - DB $00,$FF,$00,$BD,$3C,$81,$AA,$AB + DB $00,$FF,$42,$BD,$7E,$81,$FE,$AB DB $FF,$FF,$FF,$FF,$FF,$FF,$00,$00 DB $00,$FF,$3C,$C3,$5A,$A5,$FE,$AB DB $FF,$FF,$FF,$FF,$FF,$FF,$00,$00 @@ -114,7 +114,7 @@ Tiles:: DB $FF,$FF,$FF,$FF,$FF,$FF,$00,$00 DB $00,$FF,$36,$C9,$EE,$BB,$FF,$FF DB $FF,$FF,$FF,$FF,$FF,$FF,$00,$00 - DB $00,$FF,$00,$BD,$BE,$AB,$FF,$FF + DB $00,$FF,$42,$BD,$FE,$AB,$FF,$FF DB $FF,$FF,$FF,$FF,$FF,$FF,$00,$00 DB $00,$FF,$3C,$C3,$FA,$AF,$FF,$FF DB $FF,$FF,$FF,$FF,$FF,$FF,$00,$00 @@ -128,7 +128,7 @@ Tiles:: DB $FF,$FF,$FF,$FF,$FF,$FF,$00,$00 DB $00,$FF,$BE,$EB,$FF,$FF,$FF,$FF DB $FF,$FF,$FF,$FF,$FF,$FF,$00,$00 - DB $00,$FF,$AA,$BF,$FF,$FF,$FF,$FF + DB $00,$FF,$EA,$BF,$FF,$FF,$FF,$FF DB $FF,$FF,$FF,$FF,$FF,$FF,$00,$00 DB $00,$FF,$BE,$EB,$FF,$FF,$FF,$FF DB $FF,$FF,$FF,$FF,$FF,$FF,$00,$00 @@ -272,10 +272,10 @@ Tiles:: DB $00,$FF,$55,$FF,$FF,$FF,$00,$00 DB $DB,$E7,$A5,$C3,$42,$81,$81,$00 DB $42,$81,$A5,$C3,$DB,$E7,$00,$00 - DB $10,$10,$38,$38,$7C,$7C,$10,$10 - DB $7C,$7C,$38,$38,$10,$10,$00,$00 - DB $00,$00,$28,$28,$6C,$6C,$FE,$FE - DB $6C,$6C,$28,$28,$00,$00,$00,$00 + DB $44,$44,$FE,$FE,$44,$44,$44,$44 + DB $44,$44,$FE,$FE,$44,$44,$00,$00 + DB $00,$00,$00,$00,$00,$00,$3C,$3C + DB $00,$00,$00,$00,$00,$00,$00,$00 DB $00,$00,$18,$18,$18,$18,$30,$30 DB $30,$30,$60,$60,$60,$60,$00,$00 DB $F0,$F0,$C0,$C0,$C0,$C0,$C0,$C0 @@ -453,7 +453,9 @@ Tiles:: DB $C6,$C6,$6C,$6C,$38,$38,$38,$38 DB $6C,$6C,$C6,$C6,$00,$00,$00,$00 DB $00,$00,$00,$00,$00,$00,$00,$00 - DB $00,$00,$00,$00,$00,$00,$00,$00 + DB $00,$00,$30,$30,$30,$30,$00,$00 + DB $00,$00,$30,$30,$30,$30,$00,$00 + DB $00,$00,$30,$30,$30,$30,$00,$00 DB $00,$75,$00,$47,$00,$55,$00,$55 DB $00,$75,$00,$00,$00,$3E,$00,$00 DB $00,$75,$00,$47,$00,$55,$00,$55 @@ -464,24 +466,20 @@ Tiles:: DB $00,$3E,$00,$2A,$00,$00,$00,$00 DB $00,$00,$00,$FF,$20,$81,$76,$81 DB $20,$81,$00,$FF,$00,$00,$00,$00 - DB $00,$00,$00,$00,$28,$28,$10,$10 - DB $28,$28,$00,$00,$00,$00,$00,$00 - DB $00,$00,$00,$00,$28,$28,$10,$10 - DB $28,$28,$00,$00,$00,$00,$00,$00 - DB $00,$00,$00,$00,$28,$28,$10,$10 - DB $28,$28,$00,$00,$00,$00,$00,$00 DB $00,$26,$00,$55,$00,$76,$00,$55 DB $00,$55,$00,$00,$00,$3E,$00,$00 DB $00,$26,$00,$55,$00,$76,$00,$55 DB $00,$55,$00,$00,$00,$36,$00,$00 - DB $00,$00,$00,$00,$28,$28,$10,$10 - DB $28,$28,$00,$00,$00,$00,$00,$00 - DB $00,$00,$00,$00,$28,$28,$10,$10 - DB $28,$28,$00,$00,$00,$00,$00,$00 + DB $00,$00,$00,$FF,$20,$81,$76,$81 + DB $20,$81,$00,$FF,$00,$00,$00,$00 + DB $02,$70,$02,$40,$02,$60,$07,$40 + DB $07,$40,$02,$00,$00,$1F,$00,$00 DB $02,$70,$02,$40,$02,$70,$07,$10 DB $07,$70,$02,$00,$00,$1F,$00,$00 DB $02,$50,$02,$50,$02,$70,$07,$50 DB $07,$50,$02,$00,$00,$1F,$00,$00 + DB $02,$40,$02,$40,$02,$40,$07,$40 + DB $07,$70,$02,$00,$00,$1F,$00,$00 DB $02,$50,$02,$50,$02,$20,$07,$50 DB $07,$50,$02,$00,$00,$1F,$00,$00 DB $00,$3E,$02,$61,$04,$51,$24,$49 @@ -508,10 +506,12 @@ Tiles:: DB $00,$00,$00,$00,$00,$00,$00,$00 DB $00,$00,$00,$00,$00,$00,$00,$00 DB $00,$00,$00,$00,$00,$00,$00,$00 - DB $00,$E8,$00,$A8,$00,$A8,$00,$A8 - DB $00,$EE,$00,$00,$00,$00,$00,$00 - DB $00,$EA,$00,$8E,$00,$EA,$00,$2A - DB $00,$EA,$00,$00,$00,$00,$00,$00 + DB $00,$00,$00,$00,$00,$00,$00,$00 + DB $00,$00,$00,$00,$00,$00,$00,$00 + DB $00,$00,$00,$00,$00,$00,$00,$00 + DB $00,$00,$00,$00,$00,$00,$00,$00 + DB $00,$00,$00,$00,$00,$00,$00,$00 + DB $00,$00,$00,$00,$00,$00,$00,$00 DB $03,$03,$04,$04,$08,$08,$0D,$08 DB $0B,$09,$0D,$08,$0F,$08,$00,$00 DB $06,$05,$03,$03,$00,$00,$0F,$0F @@ -528,8 +528,8 @@ Tiles:: DB $82,$82,$82,$82,$EC,$EC,$00,$00 DB $44,$44,$CA,$CA,$4A,$4A,$4A,$4A DB $4A,$4A,$4A,$4A,$E4,$E4,$00,$00 - DB $CE,$CE,$28,$28,$28,$28,$4C,$4C - DB $82,$82,$82,$82,$EC,$EC,$00,$00 + DB $C6,$C6,$28,$28,$28,$28,$4E,$4E + DB $8A,$8A,$8A,$8A,$EC,$EC,$00,$00 DB $08,$08,$1C,$1C,$30,$30,$3C,$3C DB $3C,$3C,$1C,$1C,$14,$14,$00,$00 TilesEnd:: diff --git a/src/sprites.asm b/src/sprites.asm index 52e048d..35d4f52 100644 --- a/src/sprites.asm +++ b/src/sprites.asm @@ -65,12 +65,8 @@ OAMDMA:: : dec a jr nz, :- - ; Jump to the current state's vblank handler. - ld b, 0 - ldh a, [hGameState] - cp a, b - jp nz, BlitField - jp TitleVBlankHandler + ; Return + ret ENDL OAMDMAEnd:: diff --git a/src/sram.asm b/src/sram.asm index 96f32b4..d3e5c4f 100644 --- a/src/sram.asm +++ b/src/sram.asm @@ -59,7 +59,7 @@ InitializeSRAM: ld [rRotModeState], a ld [wRotModeState], a - ld a, DROP_MODE_SONIC + ld a, DROP_MODE_FIRM ld [rDropModeState], a ld [wDropModeState], a diff --git a/src/state_gameplay.asm b/src/state_gameplay.asm index 4d52ab9..b1bc142 100644 --- a/src/state_gameplay.asm +++ b/src/state_gameplay.asm @@ -23,15 +23,15 @@ INCLUDE "globals.asm" 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 +DEF MODE_GO EQU 3 +DEF MODE_POSTGO EQU 6 +DEF MODE_PREFETCHED_PIECE EQU 9 +DEF MODE_SPAWN_PIECE EQU 12 +DEF MODE_PIECE_IN_MOTION EQU 15 +DEF MODE_DELAY EQU 18 +DEF MODE_GAME_OVER EQU 21 +DEF MODE_PRE_GAME_OVER EQU 24 +DEF MODE_PAUSED EQU 27 SECTION "High Gameplay Variables", HRAM @@ -114,7 +114,7 @@ SwitchToGameplay:: call GBCGameplayInit ; Install the event loop handlers. - ld a, 1 + ld a, STATE_GAMEPLAY ldh [hGameState], a ; And turn the LCD back on before we start. @@ -132,28 +132,24 @@ SwitchToGameplay:: GamePlayEventLoopHandler:: ; What mode are we in? + ld hl, .modejumps ldh a, [hMode] - cp MODE_LEADY - jr z, leadyMode - cp MODE_GO - jr z, goMode - cp MODE_POSTGO - jr z, postGoMode - cp MODE_PREFETCHED_PIECE - jr z, prefetchedPieceMode - cp MODE_SPAWN_PIECE - jp z, spawnPieceMode - cp MODE_PIECE_IN_MOTION - jp z, pieceInMotionMode - cp MODE_DELAY - jp z, delayMode - cp MODE_PRE_GAME_OVER - jp z, preGameOverMode - cp MODE_GAME_OVER - jp z, gameOverMode - cp MODE_PAUSED - jp z, pauseMode + ld b, 0 + ld c, a + add hl, bc + jp hl +.modejumps + jp leadyMode + jp goMode + jp postGoMode + jp prefetchedPieceMode + jp spawnPieceMode + jp pieceInMotionMode + jp delayMode + jp gameOverMode + jp preGameOverMode + jp pauseMode ; Draw "READY" and wait a bit. leadyMode: @@ -210,11 +206,11 @@ prefetchedPieceMode: ; A piece will spawn in the middle, at the top of the screen, not rotated by default. ld a, $FF ldh [hRequestedJingle], a - ld a, 5 + ld a, PIECE_SPAWN_X ldh [hCurrentPieceX], a - ld a, 3 + ld a, PIECE_SPAWN_Y ldh [hCurrentPieceY], a - xor a, a + xor a, a ; ROTATION_STATE_DEF ldh [hCurrentPieceRotationState], a ldh [hHoldSpent], a @@ -252,7 +248,7 @@ prefetchedPieceMode: ld a, $FF ldh [hAState], a .cp1 - ld a, 3 + ld a, ROTATION_STATE_CCW ldh [hCurrentPieceRotationState], a ldh a, [hNextPiece] ld b, a @@ -279,7 +275,7 @@ prefetchedPieceMode: ld a, $FF ldh [hBState], a .cp2 - ld a, 1 + ld a, ROTATION_STATE_CW ldh [hCurrentPieceRotationState], a ldh a, [hNextPiece] ld b, a @@ -338,10 +334,11 @@ pieceInMotionMode: cp a, $FF jr z, :+ ; Reset position and rotation. - ld a, 5 + ld a, PIECE_SPAWN_X ldh [hCurrentPieceX], a - ld a, 3 + ld a, PIECE_SPAWN_Y ldh [hCurrentPieceY], a + xor a, a ; ROTATION_STATE_DEF ldh [hCurrentPieceRotationState], a call DoHold ld a, MODE_SPAWN_PIECE @@ -622,7 +619,7 @@ DoHold: ld a, $FF ldh [hAState], a .cp3 - ld a, 3 + ld a, ROTATION_STATE_CCW ldh [hCurrentPieceRotationState], a call SFXKill ld a, SFX_IRS | SFX_IHS @@ -647,7 +644,7 @@ DoHold: ld a, $FF ldh [hBState], a .cp4 - ld a, 1 + ld a, ROTATION_STATE_CW ldh [hCurrentPieceRotationState], a call SFXKill ld a, SFX_IRS | SFX_IHS @@ -658,7 +655,7 @@ DoHold: call SFXKill ld a, SFX_IHS call SFXEnqueue - ld a, 0 + xor a, a ; ROTATION_STATE_DEF ldh [hCurrentPieceRotationState], a .doHoldOperation diff --git a/src/state_title.asm b/src/state_title.asm index b7f1f4e..cc74f01 100644 --- a/src/state_title.asm +++ b/src/state_title.asm @@ -115,8 +115,10 @@ SwitchToTitle:: call GBCTitleInit ; Install the event loop handlers. - ld a, 0 + ld a, STATE_TITLE ldh [hGameState], a + + xor a, a ld [wSelected], a ; And turn the LCD back on before we start.