From f1f33b27d3abd0cc3c9ee4029a3c4b2c87fb3a74 Mon Sep 17 00:00:00 2001 From: Randy Thiemann Date: Sun, 22 Oct 2023 13:42:30 +0200 Subject: [PATCH] Slightly improve game over and also add modes, removing the RNG setting instead. --- DMGTRIS.GB | Bin 32768 -> 32768 bytes README.md | 9 +- src/field.asm | 26 +++- src/include/globals.asm | 12 +- src/main.asm | 5 +- src/res/sources/tiles.gbr | Bin 39009 -> 39009 bytes src/res/sources/title_map.gbm | Bin 4388 -> 4388 bytes src/res/tiles.inc | 248 +++++++++++++++++++++------------- src/res/title_map.inc | 4 +- src/rng.asm | 61 +++++++-- src/state_gameplay.asm | 14 +- src/state_title.asm | 22 +-- 12 files changed, 276 insertions(+), 125 deletions(-) diff --git a/DMGTRIS.GB b/DMGTRIS.GB index cf965175c61504f1cf64553501e3fe2541338d60..33952912e7e734f935353da5c2aa95ccbc4b7217 100644 GIT binary patch delta 4834 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 delta 4284 zcma)AeQ;FO6@PEPceB}LG0;Z{$=eOar=}&5h-tEUjgDm(sw4!=2Mo2H+Mx>rMS z1~xL-T41IyuboE79U@9&)7J@?#?J@+Kd&4%V?gV7UeIB47uy2BQTPFW*&WDEJB%#p|Z0QtI*3e^P)>#%Bh*0TC!HeLq+EF8Vj_R(u)?W@;Y4$#Nj#5?WpXpg<{?AC*qG91P0A9|>4 z`SP-o8LoD=R`Z6%-|P0CTv)AO$@cXG=y~BUdDBXNw2yqhoV*~%zfFUcizjre_;}%8 zKWHSU1R<#y1H~xgKeCGSR0V1hQ}4<1I?$1Jt5`+5m2h5e!jn()#2=jZlk@bH?x#?s z(<}6a(8Js4kTue^}=A0(3Xal~%AtQa#I(cCh)e6J9ni*6C%g*o2okV_81th?V(5 z%of|=W0u%^#f`9*=?kPYNb`Vx6VSWMrjAa5`( zqN)XWS8Q-srj;qxo^|vzTqZZ%tT5dVztmh_jXf0&ll}Dc)6i3P4NsKzf~`#S}EXJ<3$im>69rjc}Y75SkU}X1Srr~?tl11 zXwDpW51D0CH(8{m%C}5`Yifd(KCcli0(z>i2G9W=s{g@?42m*|FlF z;(WxN+(2ApulBjVfzyk}7B>J_k}A40Dc7_jz_SYAyPcU{EZUm_{aj!E{>a&ol{4$b z$|XJq&cYd>Ok*p@12WCRMvzVGaWr!HCS9*=|Ni9=tsHEY95d;P=WkDXxmWo=7$8^i z&VQ8-c6|I|B4?4mBmokX50F*rnR<1sPTl;JxuHA*auH5i1S=X79FTr+QYQ3AVMwoR#fKb|7N@R2 z(kPH{0FuVQy(H-(#N-URM^A_bFm9W`jqW87XRWf0#K9f#BTmPGkU`@=A(v#kE>$DB zdK#6DX_S;T%USRd&EQinT4f6uJg%=RX=KJmkB`E$A)0XQFq5}4(z^EX`Nr1bM;BQ` zaZIViCI92}ghD+XD}dy){T!$JXrY%#T*#uAm_>4VDg$7W@5Id)I69!NuBI2%6V+ZZ z;`vxp9c#U%5zp`SPB7w8umg5rfBIyX8cOZp|GmwN)3(_?YnufV+_+wPfoYJ)b(0Ip zBaQ|TG?H#0UySnnrs^lEp4rUnpVxz{ESZ}cYWPhX>gs;XzZBf96hFDG_2a4*gE=SY zDGe&Wtod1@*VcdX0Qduaj$F|9T_LmL_T>*WvL6 zuKHjNxOHEm5fjZKz3GJe0E6f@I=T5h$=s+`)TyJA?1%U1K{0+hTxzR z0v-e}1HqKUM!;JDTa(xXcp+e05}N`4BMn;sGr;zw-U_%Fa7Gf_01u>LJK!y3GnJi5 zf&&EoK$ylEfS(7PnbbQ0|2hq40-gfwO6pyJe+Af+#O?_APUU-as2qGM`>wrCY*6Q} ze8xnRy0#_?zX(g!uKdfw*iJ&5@Hp-cTMK`LVe1%%EqV*KKigvqdS8B(H{)IPWCp!0 z$-a=oJfh&4pQimzFqBd!W8Gqmbz~J>vK#Wjx#0}|-f_@D|Dc-;>c5l#9j&5c@4O3g zi&|2Kvf%(7c?YnK-dsj*qT~u7vmj!32)YKrh~2&0=sx8ywc@=ctLfe|qKocp6YZ%# z4f$X&O)9NcCTrKh%pH$;m%a8Py{XjH?KSk)DxcRiSbJ+_CtNT^u7A(~&6fJ*ZurUl zIY1AzNoF|{Rd3gqBYUL2Fm#0skzq1IM#&f%Cllmq6g|G$R>U{bkz@z<(O5yQ%JT?E zlO@nq32|!_4#eh%5NHgO(XJp!#uAb-l#F#%gJdEhnLx=zS3O9^6OwV1Y#EoubgMYx zNJ* zWAESCBk(KjCzs*H`GS0@7Bs+&z@olKznaElLN$J2R++Z2!|sqy^CP_G=$X z*YZDSs8cBatEovCFGHawF>LprPAh)cl>^F74t9m7{tK&Z3 zj&lvZ?dKl#RW+U~ei5R~9p(7O?1FE|ZFnZEQF_}?ZV&S0o2VQiD`lxd{7>Rv2A>M; R!|Pl7H|8yEr5o26{tJ!3Mvnjh diff --git a/README.md b/README.md index 09e5a5d..dd41c51 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,13 @@ The Randomizer uses a TGM2-style 4-history randomizer preloaded with SSZZ, and w The game itself runs at a constant 60fps as well as at the traditional 20 row visible grid. +There are five available game modes: +- TGM1: 4 history, 4 rerolls, no sonic drop, never start with O, S or Z. +- TGM2: 4 history, 6 rerolls, sonic drop, never start with O, S or Z. +- TGM3: 6 history, 6 rerolls, sonic drop, never start with O, S or Z. (Note, not the actual 35-bag as used in TGM3, and floor kicks are not implemented (yet) either.) +- HELL: No history, no rerolls, no sonic drop, never start with O, S or Z. +- EASY: 6 history, 256 rerolls, sonic drop, never start with O, S or Z. + ## Playing You can build the game yourself, or use the binary [here](https://git.villadelfia.org/villadelfia/dmgtris/raw/branch/master/DMGTRIS.GB) or [here](https://github.com/Villadelfia/DMGTRIS/raw/master/DMGTRIS.GB). @@ -25,7 +32,7 @@ Please do not try running it on older emulators such as VBA, since this game use - A/B/Start — Start the game - Left/Right — Switch A/B rotation direction - Up/Down — Select starting level -- Select — Select amount of times a piece will be rerolled if it was given to you in the previous 4 pieces. TGM2 uses 6 for this value, TGM1 uses 4 for this value. You can set this to 0 (pure RNG except you'll never start with O, S, or Z), to 15 (F. Basically never get duplicates.) +- Select — Select game mode ### Gameplay - A — Rotate 1 diff --git a/src/field.asm b/src/field.asm index dfbd284..f30286d 100644 --- a/src/field.asm +++ b/src/field.asm @@ -475,6 +475,25 @@ CanPieceFit: ret +ForceSpawnPiece:: + call SetPieceData + call SetPieceDataOffset + ldh a, [hCurrentPieceY] + ld b, a + ldh a, [hCurrentPieceX] + call XYToFieldPtr + ld d, h + ld e, l + call GetPieceData + ld a, GAME_OVER_OTHER + ld b, a + push hl + push de + pop hl + pop de + jp DrawPiece + + TrySpawnPiece:: ; Always reset these for a new piece. ldh a, [hCurrentLockDelay] @@ -678,7 +697,12 @@ FieldProcess:: ; How deep can we go? : call FindMaxG - ; If we press up, we want to do a sonic drop. + ; If we press up, we want to do a sonic drop, but not in TGM1 or HELL mode. + ldh a, [hSimulationMode] + cp a, MODE_TGM1 + jr z, :+ + cp a, MODE_HELL + jr z, :+ ldh a, [hUpState] cp a, 1 jr nz, :+ diff --git a/src/include/globals.asm b/src/include/globals.asm index 273faec..6ccd625 100644 --- a/src/include/globals.asm +++ b/src/include/globals.asm @@ -111,15 +111,16 @@ DEF PALETTE_LIGHTER_3 EQU %00000000 DEF TITLE_A EQU $99CD DEF TITLE_B EQU $99CF DEF TITLE_LEVEL EQU $996C -DEF TITLE_ROLLS EQU $9A2F -DEF FIELD_RNGTELL EQU $9812 +DEF TITLE_MODE EQU $9A2E +DEF FIELD_MODE EQU $9811 DEF FIELD_TOP_LEFT EQU $9800+1 DEF EASTER_0 EQU $9885 DEF EASTER_1 EQU $98A5 DEF TILE_FIELD_EMPTY EQU 4 DEF TILE_PIECE_0 EQU 10 DEF TILE_0 EQU 66 -DEF TILE_0_FAINT EQU 196 +DEF TILE_MODE_FAINT_0 EQU 196 +DEF TILE_MODE_0 EQU 234 DEF TILE_CLEARING EQU 124 DEF TILE_GHOST EQU 125 DEF TILE_A EQU 76 @@ -158,6 +159,11 @@ DEF GAME_OVER_R12 EQU 153 DEF GAME_OVER_R14 EQU 173 DEF GAME_OVER_OTHER EQU 131 DEF LEADY_GO_TIME EQU 90 +DEF MODE_TGM1 EQU 0 +DEF MODE_TGM2 EQU 1 +DEF MODE_TGM3 EQU 2 +DEF MODE_HELL EQU 3 +DEF MODE_EASY EQU 4 ENDC diff --git a/src/main.asm b/src/main.asm index 402aacd..1576648 100644 --- a/src/main.asm +++ b/src/main.asm @@ -29,6 +29,7 @@ SECTION "High Globals", HRAM hGameState:: ds 1 hSwapAB:: ds 1 hInitialA:: ds 1 +hSimulationMode:: ds 1 SECTION "Stack", WRAM0 @@ -64,13 +65,13 @@ Main:: ; Zero out the ram where needed. xor a, a ldh [hSwapAB], a + ld a, MODE_TGM2 + ldh [hSimulationMode], a ld hl, sSpeedCurve ld a, l ldh [hStartSpeed], a ld a, h ldh [hStartSpeed+1], a - ld a, 6 - ldh [hRNGRerolls], a call TimeInit call IntrInit call InputInit diff --git a/src/res/sources/tiles.gbr b/src/res/sources/tiles.gbr index ee75eb8ce88a4a5c670a2a10f359dabab03f5191..9234f847d601d450ed880eb733902987d5ed8d23 100644 GIT binary patch delta 3362 zcmds2O>0w85PcsFOaJ!p&Ka{T=;>MxR3~;m~_!~-CB?+D!B1cK{r8ZoF5?K z(oH2l!KGAOy6sQsFVHzNcXDr&SNk6ALcD$N&6~Mr&N*|Nv*7+ATo-F4M1H4OPB|B-qHRninLt*X$DwPluYfUXn5&o{on+gU1rE7L8tiC zXa*q9OM4szU|RkA2|%9>U^$=>Nwm6bLtui#iy82midSh^nDHbgcT_%5otkMIUs z3D|eJ)B*$6Hvwpa!WAqKoly8W4-F&%fr4Prn2yr~iY{?j z&Z{>dzn7I#JoI~`R`N?4>cOqdRVXSl>_;Wtb|>c#NCr`2E>72tK*eRZkUa3^KVVH- z->%a8wOiwNuf8R;zBAv5<2Z`+a?x^))P7Q@-s{Q|QpPI$D2A(%;&$eW5(21ssC{X+xr|IsjXpK&P2QQPg3ego zdmPip<{}^VT+@Jv1`BI3^IiJykQZqG(Z%t@H%}`q{?_3CKL7KV%SFpIjt=Yepi@~w zCUBsRLXb18C|wJ9QN=^pJfBt0iqH7zu+IiXSf2c50|hx(MObX1^_ZKDGww=wcFOHI zZLBn<$DKvSLDo9 zKVaxj$Xapfc0M5=5U`&2-fm}5k_*$-U3IF?snb2(t6KM}b}?6PCCRV(yB+wLAMCq2 z9f!g3g`?b3shk%e;}bp9M6CprvfX1|b5@I^w&w|VGmr-G&l-7RsM}zPCV;?rpt~{7 zaV%>*M^<|9xfN2QQ?aestlSJn^&a&3<5(Z5Z*M5nNTJ>rypsQ8V{(6))6+M`rbi zq2D>U-FP=Zl(3Ya!1dt}+$=BrJl^%zKjph*Dkb(C8Vlwr*H=xoF7o|%?GhNvTKG=J zN5e!~&t4V%c?P0H)g>wsN0sNXys@!4kxQrW=}QV{%S*-S_usW?EHlz2eIl&1n@xS4 z(N;3v@(7ypqY@oe35n~2(jg{*P;Vc|3DnT;v^4bV?7F2bk;C5#= zqLMKNFAeF7vZ3YWeQ(u$xSS3~29&w23VJUmAah;pZkjKCmf5TkM>QkyN~DH)--vJ` hEM7sOO*3%)xlwHW_&QkZbpF(f&6y)ttX;fL?*YmMWorNc diff --git a/src/res/sources/title_map.gbm b/src/res/sources/title_map.gbm index 6e461f8b386a2b3daf47c8acc0d32d929e86b9f7..f206b47dfb264342c5f222f2939d174bd5671c8c 100644 GIT binary patch delta 205 zcmZ3Yv_xsc8Ag8zxhjS~U$Ph~i(|_e7^)Z;7#bMr>zO<5aWgR7u`ZVDl3JR{@imLV zDw>I*e)&8m86cYxs0t)z1Ee3a++zG+zJvqF1j$d9W|EgJW_r%f#URGO1BCJn&zTt* zKq^2gr5S`K8cI$sVA7R`iWmX)p{s6DfBkjy9;OLwN)ZeUQ49?J3=9DbAX|}9BLl+` N28N@X^EkJ$0|2|lGz|8QR znT-LY0;F=Hq0Hn0CS7?bR|lvGU8(EDux*?7Fil`nie+GkWMBwl0NDp*M=>yjgHaq< Oq>+KaV{;zoHg*7S&oSEo diff --git a/src/res/tiles.inc b/src/res/tiles.inc index 7228917..5a5f752 100644 --- a/src/res/tiles.inc +++ b/src/res/tiles.inc @@ -282,30 +282,30 @@ Tiles:: DB $C0,$C0,$C0,$C0,$F0,$F0,$00,$00 DB $0F,$0F,$03,$03,$03,$03,$03,$03 DB $03,$03,$03,$03,$0F,$0F,$00,$00 - DB $FF,$00,$FF,$00,$FF,$00,$FF,$00 - DB $FF,$00,$FF,$00,$FF,$00,$00,$00 + DB $00,$FF,$00,$FF,$00,$FF,$00,$FF + DB $00,$FF,$00,$FF,$00,$FF,$00,$00 DB $00,$00,$00,$00,$00,$00,$00,$00 DB $00,$00,$00,$00,$00,$00,$00,$00 - DB $FF,$7C,$FF,$C6,$FF,$C0,$FF,$CE - DB $FF,$C6,$FF,$C6,$FF,$7C,$00,$00 - DB $FF,$38,$FF,$6C,$FF,$C6,$FF,$FE - DB $FF,$C6,$FF,$C6,$FF,$C6,$00,$00 - DB $FF,$C6,$FF,$EE,$FF,$FE,$FF,$D6 - DB $FF,$C6,$FF,$C6,$FF,$C6,$00,$00 - DB $FF,$FE,$FF,$C0,$FF,$C0,$FF,$F8 - DB $FF,$C0,$FF,$C0,$FF,$FE,$00,$00 - DB $FF,$00,$FF,$00,$FF,$00,$FF,$00 - DB $FF,$00,$FF,$00,$FF,$00,$00,$00 - DB $FF,$7C,$FF,$C6,$FF,$C6,$FF,$C6 - DB $FF,$C6,$FF,$C6,$FF,$7C,$00,$00 - DB $FF,$C6,$FF,$C6,$FF,$6C,$FF,$6C - DB $FF,$6C,$FF,$38,$FF,$38,$00,$00 - DB $FF,$FE,$FF,$C0,$FF,$C0,$FF,$F8 - DB $FF,$C0,$FF,$C0,$FF,$FE,$00,$00 - DB $FF,$FC,$FF,$C6,$FF,$C6,$FF,$FC - DB $FF,$F8,$FF,$DC,$FF,$CE,$00,$00 - DB $FF,$18,$FF,$3C,$FF,$3C,$FF,$18 - DB $FF,$18,$FF,$00,$FF,$18,$00,$00 + DB $7C,$FF,$C6,$FF,$C0,$FF,$CE,$FF + DB $C6,$FF,$C6,$FF,$7C,$FF,$00,$00 + DB $38,$FF,$6C,$FF,$C6,$FF,$FE,$FF + DB $C6,$FF,$C6,$FF,$C6,$FF,$00,$00 + DB $C6,$FF,$EE,$FF,$FE,$FF,$D6,$FF + DB $C6,$FF,$C6,$FF,$C6,$FF,$00,$00 + DB $FE,$FF,$C0,$FF,$C0,$FF,$F8,$FF + DB $C0,$FF,$C0,$FF,$FE,$FF,$00,$00 + DB $00,$FF,$00,$FF,$00,$FF,$00,$FF + DB $00,$FF,$00,$FF,$00,$FF,$00,$00 + DB $7C,$FF,$C6,$FF,$C6,$FF,$C6,$FF + DB $C6,$FF,$C6,$FF,$7C,$FF,$00,$00 + DB $C6,$FF,$C6,$FF,$6C,$FF,$6C,$FF + DB $6C,$FF,$38,$FF,$38,$FF,$00,$00 + DB $FE,$FF,$C0,$FF,$C0,$FF,$F8,$FF + DB $C0,$FF,$C0,$FF,$FE,$FF,$00,$00 + DB $FC,$FF,$C6,$FF,$C6,$FF,$FC,$FF + DB $F8,$FF,$DC,$FF,$CE,$FF,$00,$00 + DB $18,$FF,$3C,$FF,$3C,$FF,$18,$FF + DB $18,$FF,$00,$FF,$18,$FF,$00,$00 DB $7C,$7C,$C6,$C6,$C0,$C0,$CE,$CE DB $C6,$C6,$C6,$C6,$7C,$7C,$00,$00 DB $38,$38,$6C,$6C,$C6,$C6,$FE,$FE @@ -326,26 +326,26 @@ Tiles:: DB $F8,$F8,$DC,$DC,$CE,$CE,$00,$00 DB $18,$18,$3C,$3C,$3C,$3C,$18,$18 DB $18,$18,$00,$00,$18,$18,$00,$00 - DB $FF,$00,$FF,$00,$FF,$00,$FF,$00 - DB $FF,$00,$FF,$00,$FF,$00,$00,$00 - DB $FF,$FC,$FF,$C6,$FF,$C6,$FF,$FC - DB $FF,$F8,$FF,$DC,$FF,$CE,$00,$00 - DB $FF,$FE,$FF,$C0,$FF,$C0,$FF,$F8 - DB $FF,$C0,$FF,$C0,$FF,$FE,$00,$00 - DB $FF,$FC,$FF,$30,$FF,$30,$FF,$30 - DB $FF,$30,$FF,$30,$FF,$30,$00,$00 - DB $FF,$FC,$FF,$C6,$FF,$C6,$FF,$FC - DB $FF,$F8,$FF,$DC,$FF,$CE,$00,$00 - DB $FF,$C6,$FF,$EE,$FF,$7C,$FF,$38 - DB $FF,$70,$FF,$E0,$FF,$C0,$00,$00 - DB $FF,$F0,$FF,$C0,$FF,$C0,$FF,$C0 - DB $FF,$C0,$FF,$C0,$FF,$F0,$00,$00 - DB $FF,$38,$FF,$6C,$FF,$C6,$FF,$FE - DB $FF,$C6,$FF,$C6,$FF,$C6,$00,$00 - DB $FF,$0F,$FF,$03,$FF,$03,$FF,$03 - DB $FF,$03,$FF,$03,$FF,$0F,$00,$00 - DB $FF,$00,$FF,$00,$FF,$00,$FF,$00 - DB $FF,$00,$FF,$00,$FF,$00,$00,$00 + DB $00,$FF,$00,$FF,$00,$FF,$00,$FF + DB $00,$FF,$00,$FF,$00,$FF,$00,$00 + DB $FC,$FF,$C6,$FF,$C6,$FF,$FC,$FF + DB $F8,$FF,$DC,$FF,$CE,$FF,$00,$00 + DB $FE,$FF,$C0,$FF,$C0,$FF,$F8,$FF + DB $C0,$FF,$C0,$FF,$FE,$FF,$00,$00 + DB $FC,$FF,$30,$FF,$30,$FF,$30,$FF + DB $30,$FF,$30,$FF,$30,$FF,$00,$00 + DB $FC,$FF,$C6,$FF,$C6,$FF,$FC,$FF + DB $F8,$FF,$DC,$FF,$CE,$FF,$00,$00 + DB $C6,$FF,$EE,$FF,$7C,$FF,$38,$FF + DB $70,$FF,$E0,$FF,$C0,$FF,$00,$00 + DB $F0,$FF,$C0,$FF,$C0,$FF,$C0,$FF + DB $C0,$FF,$C0,$FF,$F0,$FF,$00,$00 + DB $38,$FF,$6C,$FF,$C6,$FF,$FE,$FF + DB $C6,$FF,$C6,$FF,$C6,$FF,$00,$00 + DB $0F,$FF,$03,$FF,$03,$FF,$03,$FF + DB $03,$FF,$03,$FF,$0F,$FF,$00,$00 + DB $00,$FF,$00,$FF,$00,$FF,$00,$FF + DB $00,$FF,$00,$FF,$00,$FF,$00,$00 DB $00,$00,$00,$00,$00,$00,$00,$00 DB $00,$00,$00,$00,$00,$00,$00,$00 DB $FC,$FC,$C6,$C6,$C6,$C6,$FC,$FC @@ -366,26 +366,26 @@ Tiles:: DB $03,$03,$03,$03,$0F,$0F,$00,$00 DB $00,$00,$00,$00,$00,$00,$00,$00 DB $00,$00,$00,$00,$00,$00,$00,$00 - DB $FF,$00,$FF,$00,$FF,$00,$FF,$00 - DB $FF,$00,$FF,$00,$FF,$00,$00,$00 - DB $FF,$7C,$FF,$C6,$FF,$C6,$FF,$C6 - DB $FF,$D6,$FF,$DE,$FF,$7C,$00,$00 - DB $FF,$C6,$FF,$C6,$FF,$C6,$FF,$C6 - DB $FF,$C6,$FF,$C6,$FF,$7C,$00,$00 - DB $FF,$18,$FF,$18,$FF,$18,$FF,$18 - DB $FF,$18,$FF,$18,$FF,$18,$00,$00 - DB $FF,$FC,$FF,$30,$FF,$30,$FF,$30 - DB $FF,$30,$FF,$30,$FF,$30,$00,$00 - DB $FF,$00,$FF,$00,$FF,$00,$FF,$00 - DB $FF,$00,$FF,$00,$FF,$00,$00,$00 - DB $FF,$F0,$FF,$C0,$FF,$C0,$FF,$C0 - DB $FF,$C0,$FF,$C0,$FF,$F0,$00,$00 - DB $FF,$FC,$FF,$C6,$FF,$C6,$FF,$FC - DB $FF,$C6,$FF,$C6,$FF,$FC,$00,$00 - DB $FF,$0F,$FF,$03,$FF,$03,$FF,$03 - DB $FF,$03,$FF,$03,$FF,$0F,$00,$00 - DB $FF,$00,$FF,$00,$FF,$00,$FF,$00 - DB $FF,$00,$FF,$00,$FF,$00,$00,$00 + DB $00,$FF,$00,$FF,$00,$FF,$00,$FF + DB $00,$FF,$00,$FF,$00,$FF,$00,$00 + DB $7C,$FF,$C6,$FF,$C6,$FF,$C6,$FF + DB $D6,$FF,$DE,$FF,$7C,$FF,$00,$00 + DB $C6,$FF,$C6,$FF,$C6,$FF,$C6,$FF + DB $C6,$FF,$C6,$FF,$7C,$FF,$00,$00 + DB $18,$FF,$18,$FF,$18,$FF,$18,$FF + DB $18,$FF,$18,$FF,$18,$FF,$00,$00 + DB $FC,$FF,$30,$FF,$30,$FF,$30,$FF + DB $30,$FF,$30,$FF,$30,$FF,$00,$00 + DB $00,$FF,$00,$FF,$00,$FF,$00,$FF + DB $00,$FF,$00,$FF,$00,$FF,$00,$00 + DB $F0,$FF,$C0,$FF,$C0,$FF,$C0,$FF + DB $C0,$FF,$C0,$FF,$F0,$FF,$00,$00 + DB $FC,$FF,$C6,$FF,$C6,$FF,$FC,$FF + DB $C6,$FF,$C6,$FF,$FC,$FF,$00,$00 + DB $0F,$FF,$03,$FF,$03,$FF,$03,$FF + DB $03,$FF,$03,$FF,$0F,$FF,$00,$00 + DB $00,$FF,$00,$FF,$00,$FF,$00,$FF + DB $00,$FF,$00,$FF,$00,$FF,$00,$00 DB $00,$00,$00,$00,$00,$00,$00,$00 DB $00,$00,$00,$00,$00,$00,$00,$00 DB $7C,$7C,$C6,$C6,$C6,$C6,$C6,$C6 @@ -412,38 +412,38 @@ Tiles:: DB $A2,$A2,$A2,$A2,$BB,$BB,$00,$00 DB $00,$00,$00,$00,$00,$00,$00,$00 DB $00,$00,$00,$00,$80,$80,$00,$00 - DB $07,$00,$05,$00,$05,$00,$05,$00 - DB $07,$00,$00,$00,$00,$00,$00,$00 - DB $02,$00,$06,$00,$02,$00,$02,$00 - DB $07,$00,$00,$00,$00,$00,$00,$00 - DB $07,$00,$01,$00,$02,$00,$04,$00 - DB $07,$00,$00,$00,$00,$00,$00,$00 - DB $07,$00,$01,$00,$03,$00,$01,$00 - DB $07,$00,$00,$00,$00,$00,$00,$00 - DB $05,$00,$05,$00,$07,$00,$01,$00 - DB $01,$00,$00,$00,$00,$00,$00,$00 - DB $07,$00,$04,$00,$07,$00,$01,$00 - DB $07,$00,$00,$00,$00,$00,$00,$00 - DB $07,$00,$04,$00,$07,$00,$05,$00 - DB $07,$00,$00,$00,$00,$00,$00,$00 - DB $07,$00,$01,$00,$02,$00,$02,$00 - DB $02,$00,$00,$00,$00,$00,$00,$00 - DB $07,$00,$05,$00,$07,$00,$05,$00 - DB $07,$00,$00,$00,$00,$00,$00,$00 - DB $07,$00,$05,$00,$07,$00,$01,$00 - DB $07,$00,$00,$00,$00,$00,$00,$00 - DB $07,$00,$05,$00,$07,$00,$05,$00 - DB $05,$00,$00,$00,$00,$00,$00,$00 - DB $07,$00,$05,$00,$06,$00,$05,$00 - DB $07,$00,$00,$00,$00,$00,$00,$00 - DB $07,$00,$04,$00,$04,$00,$04,$00 - DB $07,$00,$00,$00,$00,$00,$00,$00 - DB $06,$00,$05,$00,$05,$00,$05,$00 - DB $06,$00,$00,$00,$00,$00,$00,$00 - DB $07,$00,$04,$00,$06,$00,$04,$00 - DB $07,$00,$00,$00,$00,$00,$00,$00 - DB $07,$00,$04,$00,$06,$00,$04,$00 - DB $04,$00,$00,$00,$00,$00,$00,$00 + DB $00,$00,$EE,$00,$48,$00,$4A,$00 + DB $4A,$00,$4E,$00,$00,$00,$00,$00 + DB $00,$00,$A4,$00,$EC,$00,$A4,$00 + DB $A4,$00,$AE,$00,$00,$00,$00,$00 + DB $00,$00,$EE,$00,$48,$00,$4A,$00 + DB $4A,$00,$4E,$00,$00,$00,$00,$00 + DB $00,$00,$AC,$00,$E2,$00,$A4,$00 + DB $A8,$00,$AE,$00,$00,$00,$00,$00 + DB $00,$00,$EE,$00,$48,$00,$4A,$00 + DB $4A,$00,$4E,$00,$00,$00,$00,$00 + DB $00,$00,$AC,$00,$E2,$00,$A4,$00 + DB $A2,$00,$AC,$00,$00,$00,$00,$00 + DB $00,$00,$AE,$00,$A8,$00,$EE,$00 + DB $A8,$00,$AE,$00,$00,$00,$00,$00 + DB $00,$00,$88,$00,$88,$00,$88,$00 + DB $88,$00,$EE,$00,$00,$00,$00,$00 + DB $00,$00,$E4,$00,$8A,$00,$CE,$00 + DB $8A,$00,$EA,$00,$00,$00,$00,$00 + DB $00,$00,$6A,$00,$8A,$00,$44,$00 + DB $24,$00,$C4,$00,$00,$00,$00,$00 + DB $00,$00,$AA,$00,$AA,$00,$44,$00 + DB $AA,$00,$AA,$00,$00,$00,$00,$00 + DB $00,$00,$AA,$00,$AA,$00,$44,$00 + DB $AA,$00,$AA,$00,$00,$00,$00,$00 + DB $00,$00,$AA,$00,$AA,$00,$44,$00 + DB $AA,$00,$AA,$00,$00,$00,$00,$00 + DB $00,$00,$AA,$00,$AA,$00,$44,$00 + DB $AA,$00,$AA,$00,$00,$00,$00,$00 + DB $00,$00,$AA,$00,$AA,$00,$44,$00 + DB $AA,$00,$AA,$00,$00,$00,$00,$00 + DB $00,$00,$AA,$00,$AA,$00,$44,$00 + DB $AA,$00,$AA,$00,$00,$00,$00,$00 DB $7C,$7C,$42,$42,$41,$41,$5D,$48 DB $6E,$4C,$5B,$4A,$79,$49,$00,$00 DB $68,$58,$58,$68,$68,$58,$48,$78 @@ -472,6 +472,66 @@ Tiles:: DB $2D,$25,$3D,$3D,$01,$01,$00,$00 DB $01,$01,$3D,$3D,$2D,$35,$C5,$FD DB $08,$F8,$10,$F0,$E0,$E0,$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 $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 $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,$EE,$EE,$48,$48,$4A,$4A + DB $4A,$4A,$4E,$4E,$00,$00,$00,$00 + DB $00,$00,$A4,$A4,$EC,$EC,$A4,$A4 + DB $A4,$A4,$AE,$AE,$00,$00,$00,$00 + DB $00,$00,$EE,$EE,$48,$48,$4A,$4A + DB $4A,$4A,$4E,$4E,$00,$00,$00,$00 + DB $00,$00,$AC,$AC,$E2,$E2,$A4,$A4 + DB $A8,$A8,$AE,$AE,$00,$00,$00,$00 + DB $00,$00,$EE,$EE,$48,$48,$4A,$4A + DB $4A,$4A,$4E,$4E,$00,$00,$00,$00 + DB $00,$00,$AC,$AC,$E2,$E2,$A4,$A4 + DB $A2,$A2,$AC,$AC,$00,$00,$00,$00 + DB $00,$00,$AE,$AE,$A8,$A8,$EE,$EE + DB $A8,$A8,$AE,$AE,$00,$00,$00,$00 + DB $00,$00,$88,$88,$88,$88,$88,$88 + DB $88,$88,$EE,$EE,$00,$00,$00,$00 + DB $00,$00,$E4,$E4,$8A,$8A,$CE,$CE + DB $8A,$8A,$EA,$EA,$00,$00,$00,$00 + DB $00,$00,$6A,$6A,$8A,$8A,$44,$44 + DB $24,$24,$C4,$C4,$00,$00,$00,$00 + DB $00,$00,$AA,$AA,$AA,$AA,$44,$44 + DB $AA,$AA,$AA,$AA,$00,$00,$00,$00 + DB $00,$00,$AA,$AA,$AA,$AA,$44,$44 + DB $AA,$AA,$AA,$AA,$00,$00,$00,$00 + DB $00,$00,$AA,$AA,$AA,$AA,$44,$44 + DB $AA,$AA,$AA,$AA,$00,$00,$00,$00 + DB $00,$00,$AA,$AA,$AA,$AA,$44,$44 + DB $AA,$AA,$AA,$AA,$00,$00,$00,$00 + DB $00,$00,$AA,$AA,$AA,$AA,$44,$44 + DB $AA,$AA,$AA,$AA,$00,$00,$00,$00 + DB $00,$00,$AA,$AA,$AA,$AA,$44,$44 + DB $AA,$AA,$AA,$AA,$00,$00,$00,$00 + DB $00,$00,$00,$00,$00,$00,$00,$00 + DB $00,$00,$00,$00,$00,$00,$00,$00 + DB $FF,$00,$FF,$00,$FF,$00,$FF,$00 + DB $FF,$00,$FF,$00,$FF,$00,$FF,$00 + DB $00,$FF,$00,$FF,$00,$FF,$00,$FF + DB $00,$FF,$00,$FF,$00,$FF,$00,$FF + DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF + DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF + DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF + DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF + DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF + DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF TilesEnd:: diff --git a/src/res/title_map.inc b/src/res/title_map.inc index 1c794b6..8a94b33 100644 --- a/src/res/title_map.inc +++ b/src/res/title_map.inc @@ -75,8 +75,8 @@ TitleScreenTilemap:: DB $01,$01,$01,$01,$01,$01,$01,$01,$01,$01 DB $01,$01,$01,$01,$01,$01,$01,$01,$01,$01 DB $01,$01,$01,$01,$01,$01,$01,$01,$01,$01 - DB $01,$01,$01,$01,$01,$C1,$C2,$C3,$5D,$59 - DB $52,$01,$5D,$5A,$57,$57,$5E,$01,$81,$48 + DB $01,$01,$01,$01,$01,$C1,$C2,$C3,$58,$5A + DB $4F,$50,$01,$01,$01,$01,$01,$81,$C4,$C5 DB $82,$01,$01,$01,$01,$01,$01,$01,$01,$01 DB $01,$01,$01,$01,$01,$01,$01,$01,$01,$01 DB $01,$01,$01,$01,$01,$01,$01,$01,$01,$01 diff --git a/src/rng.asm b/src/rng.asm index 63189b9..05b4b3c 100644 --- a/src/rng.asm +++ b/src/rng.asm @@ -24,9 +24,8 @@ INCLUDE "globals.asm" SECTION "High RNG Variables", HRAM hRNGSeed: ds 4 -hPieceHistory: ds 4 +hPieceHistory: ds 6 hNextPiece:: ds 1 -hRNGRerolls:: ds 1 section "RNG Functions", ROM0 @@ -52,6 +51,8 @@ RNGInit:: ld a, PIECE_Z ldh [hPieceHistory], a ldh [hPieceHistory+1], a + ldh [hPieceHistory+4], a + ldh [hPieceHistory+5], a ld a, PIECE_S ldh [hPieceHistory+2], a ldh [hPieceHistory+3], a @@ -72,33 +73,73 @@ RNGInit:: GetNextPiece:: - ldh a, [hRNGRerolls] - cp a, 0 +: ldh a, [hSimulationMode] ; Hell? + cp a, MODE_HELL jr nz, :+ call NextPiece jr .donerolling -: inc a + +: ldh a, [hSimulationMode] ; TGM1? + cp a, MODE_TGM1 + jr nz, :+ + ld a, 5 ld e, a -: dec e + jr .rollloop + +: ldh a, [hSimulationMode] ; EASY? + cp a, MODE_EASY + jr nz, :+ + ld a, 0 + ld e, a + jr .rollloop + +: ld a, 7 ; TGM2/3. + ld e, a + +.rollloop + dec e jr z, .donerolling call NextPiece ld hl, hPieceHistory cp a, [hl] - jr z, :- + jr z, .rollloop inc hl cp a, [hl] - jr z, :- + jr z, .rollloop inc hl cp a, [hl] - jr z, :- + jr z, .rollloop inc hl cp a, [hl] - jr z, :- + jr z, .rollloop + + ; Are we in TGM3 or EASY mode? + ld b, a + ldh a, [hSimulationMode] + cp a, MODE_TGM3 + jr z, .6hist + cp a, MODE_EASY + jr z, .6hist + jr .donerolling ; If not, we're done rolling. + + ; If we are, extend the history by 2. +.6hist + ld a, b + inc hl + cp a, [hl] + jr z, .rollloop + inc hl + cp a, [hl] + jr z, .rollloop .donerolling ldh [hNextPiece], a ld b, a + ldh a, [hPieceHistory+4] + ldh [hPieceHistory+5], a + ldh a, [hPieceHistory+3] + ldh [hPieceHistory+4], a ldh a, [hPieceHistory+2] ldh [hPieceHistory+3], a ldh a, [hPieceHistory+1] diff --git a/src/state_gameplay.asm b/src/state_gameplay.asm index fdc6cf2..19a7866 100644 --- a/src/state_gameplay.asm +++ b/src/state_gameplay.asm @@ -63,10 +63,13 @@ SwitchToGameplay:: ld bc, GameplayTilemapEnd - GameplayTilemap call UnsafeMemCopy - ; Place a tell on the screen for RNG rerolls. - ld hl, FIELD_RNGTELL - ldh a, [hRNGRerolls] - add a, TILE_0_FAINT + ; Place a tell on the screen for mode. + ld hl, FIELD_MODE + ldh a, [hSimulationMode] + sla a + add a, TILE_MODE_FAINT_0 + ld [hl+], a + inc a ld [hl], a ; Clear OAM. @@ -352,6 +355,9 @@ delayMode: : jp drawStaticInfo preGameOverMode: + ; Spawn the failed piece. + call ForceSpawnPiece + ; Draw the field in grey. ; Yes. This really unrolls the loop that many times. ld hl, wField+(4*10) diff --git a/src/state_title.asm b/src/state_title.asm index d4a66f4..36477fb 100644 --- a/src/state_title.asm +++ b/src/state_title.asm @@ -89,14 +89,17 @@ SwitchToTitle:: TitleEventLoopHandler:: - ; Increment RNG leniency? + ; Increment mode? ldh a, [hSelectState] cp a, 1 jr nz, :+ - ldh a, [hRNGRerolls] + ldh a, [hSimulationMode] inc a - and a, $0F - ldh [hRNGRerolls], a + cp a, 5 + jr nz, .write + xor a, a +.write + ldh [hSimulationMode], a jp EventLoopPostHandler ; Start game? @@ -255,10 +258,13 @@ TitleVBlankHandler:: ld hl, TITLE_LEVEL+1 ld [hl], a - ; Draw RNG - ldh a, [hRNGRerolls] - add a, TILE_0 - ld hl, TITLE_ROLLS + ; Draw Mode + ld hl, TITLE_MODE + ldh a, [hSimulationMode] + sla a + add a, TILE_MODE_0 + ld [hl+], a + inc a ld [hl], a ; Draw A/B