diff --git a/DMGTRIS.GBC b/DMGTRIS.GBC index be5ae89..71f0a56 100644 Binary files a/DMGTRIS.GBC and b/DMGTRIS.GBC differ diff --git a/README.md b/README.md index 0f4bae9..bc6f8dc 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ The game is heavily inspired by the TGM series of games and has the following fe - IHS (initial hold system) as well as holds. - Faithful implementations of concepts such are lock delay, piece spawn delay and DAS. - Several RNG options available. You can choose between pure RNG, 4 history with 4 retries, 4 history with 6 retries, 4 history with infinite retries, a 35bag with 4 history and 6 retries with drought prevention, NES style RNG, or pure RNG. -- A choice between sonic drop (pressing up grounds the piece but does not lock it), hard drop (pressing up locks the piece), or neither (pressing up does nothing at all.) +- A choice between sonic drop (pressing up grounds the piece but does not lock it), hard drop (pressing up locks the piece), or neither (pressing up does nothing at all.) - A choice between traditional ARS for rotation, or TGM3 era ARS with extra kicks. - Scoring is a hybrid between TGM1 and TGM2. - A speed curve reminiscent of TGM, starting slightly faster and skipping the awkward speed reset. The game continues infinitely... But so does the speed increase. @@ -35,7 +35,7 @@ Select the rotation rules: Select whether up performs a sonic drop, a hard drop, or nothing at all. ### Speed Curve -Check back later! For now you're stuck with the default. +Select between several speed curves including the DMGTRIS default speed curve, TGM1, 2, and 3, as well as DEATH and SHIRASE mode. Note that all modes use the same scoring and they are all infinite. ### Always 20G Whether you want instant-drop gravity to be active at any level. @@ -51,7 +51,7 @@ After each piece is dropped, a check is made: Combo is reset to 1 and no points are awarded. ### Lines were cleared -Lines = Lines cleared. In TGM3 modes, 3 lines are worth 4, and 4 lines are worth 6. +Lines = Lines cleared. Level = The level before the lines were cleared. @@ -102,11 +102,6 @@ The game can be built using gnu make and the RGBDS toolchain. - In very rare cases the frame time in TGM3 and TGW3 modes can be exceeded due to the way the RNG for those modes works. When this happens, the screen will appear slightly glitched for 1 frame but no frame drops will occur. This issues is fundamentally impossible to completely avoid though more optimization may cause it to occur less frequently. -## Future Goals -- Implement better sound engine. -- Add more speed curves. - - ## License Copyright (C) 2023 - Randy Thiemann diff --git a/src/constants.asm b/src/constants.asm index fbecfed..2f74ee5 100644 --- a/src/constants.asm +++ b/src/constants.asm @@ -71,24 +71,6 @@ sGo:: db " GO " sPause:: db "P A U S E " db " P A U S E" - db "P A U S E " - db " P A U S E" - db "P A U S E " - db " P A U S E" - db "P A U S E " - db " P A U S E" - db "P A U S E " - db " P A U S E" - db "P A U S E " - db " P A U S E" - db "P A U S E " - db " P A U S E" - db "P A U S E " - db " P A U S E" - db "P A U S E " - db " P A U S E" - db "P A U S E " - db " P A U S E" sOption0:: db "NORM" db " INV" @@ -108,6 +90,8 @@ sOption3:: sOption4:: db "DMGT" db "TGM1" + db "TGM2" + db "TGM3" db "DEAT" db "SHIR" sOption5:: @@ -231,6 +215,236 @@ sTGM1SpeedCurve:: sTGM1SpeedCurveEnd:: dw $FFFF + +sTGM2SpeedCurve:: + dw $0000, 0, $0100 + db 1, 64 + db 27, 16, 30, 40 + + dw $0030, 30, $0100 + db 1, 42 + db 27, 16, 30, 40 + + dw $0035, 35, $0100 + db 1, 32 + db 27, 16, 30, 40 + + dw $0040, 40, $0100 + db 1, 25 + db 27, 16, 30, 40 + + dw $0060, 60, $0100 + db 1, 16 + db 27, 16, 30, 40 + + dw $0070, 70, $0100 + db 1, 8 + db 27, 16, 30, 40 + + dw $0080, 80, $0100 + db 1, 5 + db 27, 16, 30, 40 + + dw $0100, 100, $0200 + db 1, 3 + db 27, 16, 30, 40 + + dw $0160, 160, $0200 + db 1, 2 + db 27, 16, 30, 40 + + dw $0200, 200, $0300 + db 1, 64 + db 27, 16, 30, 40 + + dw $0220, 220, $0300 + db 1, 8 + db 27, 16, 30, 40 + + dw $0230, 230, $0300 + db 1, 4 + db 27, 16, 30, 40 + + dw $0233, 233, $0300 + db 1, 3 + db 27, 16, 30, 40 + + dw $0236, 236, $0300 + db 1, 2 + db 27, 16, 30, 40 + + dw $0251, 251, $0300 + db 1, 1 + db 27, 16, 30, 40 + + dw $0300, 300, $0400 + db 2, 1 + db 27, 16, 30, 40 + + dw $0330, 330, $0400 + db 3, 1 + db 27, 16, 30, 40 + + dw $0360, 360, $0400 + db 4, 1 + db 27, 16, 30, 40 + + dw $0400, 400, $0500 + db 5, 1 + db 27, 16, 30, 40 + + dw $0420, 420, $0500 + db 4, 1 + db 27, 16, 30, 40 + + dw $0450, 450, $0500 + db 3, 1 + db 27, 16, 30, 40 + + dw $0500, 500, $0600 + db 20, 1 + db 27, 10, 30, 25 + + dw $0601, 601, $0700 + db 20, 1 + db 27, 10, 30, 7 + + dw $0701, 701, $0800 + db 20, 1 + db 18, 10, 30, 7 + + dw $0801, 801, $0900 + db 20, 1 + db 14, 10, 30, 1 + + dw $0901, 901, $1000 + db 20, 1 + db 14, 6, 18, 1 + +sTGM2SpeedCurveEnd:: + dw $FFFF + + +sTGM3SpeedCurve:: + dw $0000, 0, $0100 + db 1, 64 + db 27, 16, 30, 40 + + dw $0030, 30, $0100 + db 1, 42 + db 27, 16, 30, 40 + + dw $0035, 35, $0100 + db 1, 32 + db 27, 16, 30, 40 + + dw $0040, 40, $0100 + db 1, 25 + db 27, 16, 30, 40 + + dw $0060, 60, $0100 + db 1, 16 + db 27, 16, 30, 40 + + dw $0070, 70, $0100 + db 1, 8 + db 27, 16, 30, 40 + + dw $0080, 80, $0100 + db 1, 5 + db 27, 16, 30, 40 + + dw $0100, 100, $0200 + db 1, 3 + db 27, 16, 30, 40 + + dw $0160, 160, $0200 + db 1, 2 + db 27, 16, 30, 40 + + dw $0200, 200, $0300 + db 1, 64 + db 27, 16, 30, 40 + + dw $0220, 220, $0300 + db 1, 8 + db 27, 16, 30, 40 + + dw $0230, 230, $0300 + db 1, 4 + db 27, 16, 30, 40 + + dw $0233, 233, $0300 + db 1, 3 + db 27, 16, 30, 40 + + dw $0236, 236, $0300 + db 1, 2 + db 27, 16, 30, 40 + + dw $0251, 251, $0300 + db 1, 1 + db 27, 16, 30, 40 + + dw $0300, 300, $0400 + db 2, 1 + db 27, 16, 30, 40 + + dw $0330, 330, $0400 + db 3, 1 + db 27, 16, 30, 40 + + dw $0360, 360, $0400 + db 4, 1 + db 27, 16, 30, 40 + + dw $0400, 400, $0500 + db 5, 1 + db 27, 16, 30, 40 + + dw $0420, 420, $0500 + db 4, 1 + db 27, 16, 30, 40 + + dw $0450, 450, $0500 + db 3, 1 + db 27, 16, 30, 40 + + dw $0500, 500, $0600 + db 20, 1 + db 27, 10, 30, 25 + + dw $0600, 600, $0700 + db 20, 1 + db 27, 10, 30, 7 + + dw $0700, 700, $0800 + db 20, 1 + db 18, 10, 30, 7 + + dw $0800, 800, $0900 + db 20, 1 + db 14, 10, 30, 1 + + dw $0900, 900, $1000 + db 20, 1 + db 14, 8, 18, 1 + + dw $1000, 1000, $1100 + db 20, 1 + db 8, 8, 18, 6 + + dw $1100, 1000, $1200 + db 20, 1 + db 7, 8, 14, 6 + + dw $1200, 1000, $1300 + db 20, 1 + db 6, 8, 14, 6 + +sTGM3SpeedCurveEnd:: + dw $FFFF + sDEATSpeedCurve:: dw $0000, 0, $0100 db 20, 1 @@ -238,11 +452,11 @@ sDEATSpeedCurve:: dw $0100, 0, $0200 db 20, 1 - db 14, 12, 25, 6 + db 14, 12, 25, 1 dw $0200, 0, $0300 db 20, 1 - db 14, 11, 20, 6 + db 14, 11, 20, 1 dw $0300, 0, $0400 db 20, 1 diff --git a/src/field.asm b/src/field.asm index f164762..30e1345 100644 --- a/src/field.asm +++ b/src/field.asm @@ -1821,27 +1821,6 @@ FieldDelay:: jr nz, :- ldh [hBravo], a - ; Check if we are in a TGM3 mode and thus need to handle line counts of 3 and 4 differently. - ldh a, [hLineClearCt] - ld e, a - ld a, [wRotModeState] - cp a, ROT_MODE_ARSTI - jr z, .modifylines - jr .applylines -.modifylines - ldh a, [hLineClearCt] - cp a, 1 - jr z, .applylines - cp a, 2 - jr z, .applylines - cp a, 3 - jr z, .addone - inc a -.addone - inc a - ld e, a - ldh [hLineClearCt], a - ; Increment the level counter by the amount of lines. .applylines call LevelUp diff --git a/src/include/globals.asm b/src/include/globals.asm index 335f80d..ea5fb23 100644 --- a/src/include/globals.asm +++ b/src/include/globals.asm @@ -173,9 +173,11 @@ DEF DROP_MODE_COUNT EQU 3 DEF SCURVE_DMGT EQU 0 DEF SCURVE_TGM1 EQU 1 -DEF SCURVE_DEAT EQU 2 -DEF SCURVE_SHIR EQU 3 -DEF SCURVE_COUNT EQU 4 +DEF SCURVE_TGM2 EQU 2 +DEF SCURVE_TGM3 EQU 3 +DEF SCURVE_DEAT EQU 4 +DEF SCURVE_SHIR EQU 5 +DEF SCURVE_COUNT EQU 6 DEF TILE_HIG_MODE_BASE EQU 232 DEF HIG_MODE_OFF EQU 0 diff --git a/src/state_gameplay.asm b/src/state_gameplay.asm index f8c3c86..9b182ba 100644 --- a/src/state_gameplay.asm +++ b/src/state_gameplay.asm @@ -492,12 +492,12 @@ gameOverMode: ldh [hMode], a ld a, LEADY_TIME ldh [hModeCounter], a - jr drawStaticInfo + jp drawStaticInfo ; Quit : ldh a, [hBState] cp a, 1 - jr nz, drawStaticInfo + jp nz, drawStaticInfo call SwitchToTitle jp EventLoopPostHandler @@ -514,7 +514,43 @@ pauseMode: ; Draw PAUSE all over the field. : ld de, sPause ld hl, wField+(4*10) - ld bc, 200 + ld bc, 20 + call UnsafeMemCopy + ld de, sPause + ld hl, wField+(6*10) + ld bc, 20 + call UnsafeMemCopy + ld de, sPause + ld hl, wField+(8*10) + ld bc, 20 + call UnsafeMemCopy + ld de, sPause + ld hl, wField+(10*10) + ld bc, 20 + call UnsafeMemCopy + ld de, sPause + ld hl, wField+(12*10) + ld bc, 20 + call UnsafeMemCopy + ld de, sPause + ld hl, wField+(14*10) + ld bc, 20 + call UnsafeMemCopy + ld de, sPause + ld hl, wField+(16*10) + ld bc, 20 + call UnsafeMemCopy + ld de, sPause + ld hl, wField+(18*10) + ld bc, 20 + call UnsafeMemCopy + ld de, sPause + ld hl, wField+(20*10) + ld bc, 20 + call UnsafeMemCopy + ld de, sPause + ld hl, wField+(22*10) + ld bc, 20 call UnsafeMemCopy jr drawStaticInfo diff --git a/src/state_title.asm b/src/state_title.asm index c54d75a..4580de4 100644 --- a/src/state_title.asm +++ b/src/state_title.asm @@ -416,23 +416,11 @@ IncrementLevel: ldh [hStartSpeed], a ld a, h ldh [hStartSpeed+1], a - jr CheckLevelRange + jp CheckLevelRange InitSpeedCurve: ld a, [wSpeedCurveState] - cp a, 0 - jr nz, :+ - ld hl, sSpeedCurve - jr .set -: cp a, 1 - jr nz, :+ - ld hl, sTGM1SpeedCurve - jr .set -: cp a, 2 - jr nz, :+ - ld hl, sDEATSpeedCurve - jr .set -: ld hl, sSHIRSpeedCurve + call GetStart .set ld a, l @@ -445,15 +433,23 @@ InitSpeedCurve: GetEnd: ld a, [wSpeedCurveState] - cp a, 0 + cp a, SCURVE_DMGT jr nz, :+ ld bc, sSpeedCurveEnd ret -: cp a, 1 +: cp a, SCURVE_TGM1 jr nz, :+ ld bc, sTGM1SpeedCurveEnd ret -: cp a, 2 +: cp a, SCURVE_TGM2 + jr nz, :+ + ld bc, sTGM2SpeedCurveEnd + ret +: cp a, SCURVE_TGM3 + jr nz, :+ + ld bc, sTGM3SpeedCurveEnd + ret +: cp a, SCURVE_DEAT jr nz, :+ ld bc, sDEATSpeedCurveEnd ret @@ -462,15 +458,23 @@ GetEnd: GetStart: ld a, [wSpeedCurveState] - cp a, 0 + cp a, SCURVE_DMGT jr nz, :+ ld hl, sSpeedCurve ret -: cp a, 1 +: cp a, SCURVE_TGM1 jr nz, :+ ld hl, sTGM1SpeedCurve ret -: cp a, 2 +: cp a, SCURVE_TGM2 + jr nz, :+ + ld hl, sTGM2SpeedCurve + ret +: cp a, SCURVE_TGM3 + jr nz, :+ + ld hl, sTGM2SpeedCurve + ret +: cp a, SCURVE_DEAT jr nz, :+ ld hl, sDEATSpeedCurve ret