This commit is contained in:
Randy Thiemann 2023-10-24 14:38:19 +02:00
parent f46488e19d
commit a4f41eee1f
7 changed files with 305 additions and 75 deletions

Binary file not shown.

View File

@ -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. - IHS (initial hold system) as well as holds.
- Faithful implementations of concepts such are lock delay, piece spawn delay and DAS. - 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. - 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. - A choice between traditional ARS for rotation, or TGM3 era ARS with extra kicks.
- Scoring is a hybrid between TGM1 and TGM2. - 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. - 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. Select whether up performs a sonic drop, a hard drop, or nothing at all.
### Speed Curve ### 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 ### Always 20G
Whether you want instant-drop gravity to be active at any level. 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. Combo is reset to 1 and no points are awarded.
### Lines were cleared ### 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. 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. - 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 ## License
Copyright (C) 2023 - Randy Thiemann <randy.thiemann@gmail.com> Copyright (C) 2023 - Randy Thiemann <randy.thiemann@gmail.com>

View File

@ -71,24 +71,6 @@ sGo:: db " GO "
sPause:: 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"
db "P A U S E "
db " P A U S E"
sOption0:: sOption0::
db "NORM" db "NORM"
db " INV" db " INV"
@ -108,6 +90,8 @@ sOption3::
sOption4:: sOption4::
db "DMGT" db "DMGT"
db "TGM1" db "TGM1"
db "TGM2"
db "TGM3"
db "DEAT" db "DEAT"
db "SHIR" db "SHIR"
sOption5:: sOption5::
@ -231,6 +215,236 @@ sTGM1SpeedCurve::
sTGM1SpeedCurveEnd:: sTGM1SpeedCurveEnd::
dw $FFFF 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:: sDEATSpeedCurve::
dw $0000, 0, $0100 dw $0000, 0, $0100
db 20, 1 db 20, 1
@ -238,11 +452,11 @@ sDEATSpeedCurve::
dw $0100, 0, $0200 dw $0100, 0, $0200
db 20, 1 db 20, 1
db 14, 12, 25, 6 db 14, 12, 25, 1
dw $0200, 0, $0300 dw $0200, 0, $0300
db 20, 1 db 20, 1
db 14, 11, 20, 6 db 14, 11, 20, 1
dw $0300, 0, $0400 dw $0300, 0, $0400
db 20, 1 db 20, 1

View File

@ -1821,27 +1821,6 @@ FieldDelay::
jr nz, :- jr nz, :-
ldh [hBravo], a 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. ; Increment the level counter by the amount of lines.
.applylines .applylines
call LevelUp call LevelUp

View File

@ -173,9 +173,11 @@ DEF DROP_MODE_COUNT EQU 3
DEF SCURVE_DMGT EQU 0 DEF SCURVE_DMGT EQU 0
DEF SCURVE_TGM1 EQU 1 DEF SCURVE_TGM1 EQU 1
DEF SCURVE_DEAT EQU 2 DEF SCURVE_TGM2 EQU 2
DEF SCURVE_SHIR EQU 3 DEF SCURVE_TGM3 EQU 3
DEF SCURVE_COUNT EQU 4 DEF SCURVE_DEAT EQU 4
DEF SCURVE_SHIR EQU 5
DEF SCURVE_COUNT EQU 6
DEF TILE_HIG_MODE_BASE EQU 232 DEF TILE_HIG_MODE_BASE EQU 232
DEF HIG_MODE_OFF EQU 0 DEF HIG_MODE_OFF EQU 0

View File

@ -492,12 +492,12 @@ gameOverMode:
ldh [hMode], a ldh [hMode], a
ld a, LEADY_TIME ld a, LEADY_TIME
ldh [hModeCounter], a ldh [hModeCounter], a
jr drawStaticInfo jp drawStaticInfo
; Quit ; Quit
: ldh a, [hBState] : ldh a, [hBState]
cp a, 1 cp a, 1
jr nz, drawStaticInfo jp nz, drawStaticInfo
call SwitchToTitle call SwitchToTitle
jp EventLoopPostHandler jp EventLoopPostHandler
@ -514,7 +514,43 @@ pauseMode:
; Draw PAUSE all over the field. ; Draw PAUSE all over the field.
: ld de, sPause : ld de, sPause
ld hl, wField+(4*10) 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 call UnsafeMemCopy
jr drawStaticInfo jr drawStaticInfo

View File

@ -416,23 +416,11 @@ IncrementLevel:
ldh [hStartSpeed], a ldh [hStartSpeed], a
ld a, h ld a, h
ldh [hStartSpeed+1], a ldh [hStartSpeed+1], a
jr CheckLevelRange jp CheckLevelRange
InitSpeedCurve: InitSpeedCurve:
ld a, [wSpeedCurveState] ld a, [wSpeedCurveState]
cp a, 0 call GetStart
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
.set .set
ld a, l ld a, l
@ -445,15 +433,23 @@ InitSpeedCurve:
GetEnd: GetEnd:
ld a, [wSpeedCurveState] ld a, [wSpeedCurveState]
cp a, 0 cp a, SCURVE_DMGT
jr nz, :+ jr nz, :+
ld bc, sSpeedCurveEnd ld bc, sSpeedCurveEnd
ret ret
: cp a, 1 : cp a, SCURVE_TGM1
jr nz, :+ jr nz, :+
ld bc, sTGM1SpeedCurveEnd ld bc, sTGM1SpeedCurveEnd
ret 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, :+ jr nz, :+
ld bc, sDEATSpeedCurveEnd ld bc, sDEATSpeedCurveEnd
ret ret
@ -462,15 +458,23 @@ GetEnd:
GetStart: GetStart:
ld a, [wSpeedCurveState] ld a, [wSpeedCurveState]
cp a, 0 cp a, SCURVE_DMGT
jr nz, :+ jr nz, :+
ld hl, sSpeedCurve ld hl, sSpeedCurve
ret ret
: cp a, 1 : cp a, SCURVE_TGM1
jr nz, :+ jr nz, :+
ld hl, sTGM1SpeedCurve ld hl, sTGM1SpeedCurve
ret 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, :+ jr nz, :+
ld hl, sDEATSpeedCurve ld hl, sDEATSpeedCurve
ret ret