From fb9b90e18b73d50a244f497b20601d263b166cc9 Mon Sep 17 00:00:00 2001 From: Randy Thiemann Date: Thu, 26 Oct 2023 09:50:10 +0200 Subject: [PATCH] Invert gravity logic to enable true TGM curves. Disable 20G mode on always-20G curves. --- bin/DMGTRIS.GBC | Bin 65536 -> 65536 bytes bin/DMGTRIS.pocket | Bin 65536 -> 65536 bytes src/constants.asm | 492 +++++++++++++++++++++++++------------------- src/field.asm | 50 ++--- src/gbc.asm | 6 +- src/level.asm | 14 +- src/state_title.asm | 12 ++ 7 files changed, 328 insertions(+), 246 deletions(-) diff --git a/bin/DMGTRIS.GBC b/bin/DMGTRIS.GBC index ecfebe19c8935d9503924e51211ffc3e7146b569..87c8dc97e33aa013a1f6d415c5360bc84bb46e2f 100644 GIT binary patch delta 5166 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 diff --git a/bin/DMGTRIS.pocket b/bin/DMGTRIS.pocket index b3a6df09830375bf9b7c5d2fa14f64a332c1276a..ed786f2e13d4e9d2876ed8d554f30555ac88b592 100644 GIT binary patch delta 5166 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 ON#{39=f?k-PX7=7s4>w1 delta 4892 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 diff --git a/src/constants.asm b/src/constants.asm index 1c48953..c46d3d2 100644 --- a/src/constants.asm +++ b/src/constants.asm @@ -101,14 +101,18 @@ sOption4:: sOption5:: db " NO" db " YES" -sEasterM0:: db $C4, $C6, $C8, $CA, $CC ; MGB +sDisabled:: + db "----" + +sEasterM0:: db $C4, $C6, $C8, $CA, $CC sEasterM1:: db $C5, $C7, $C9, $CB, $CD -sEasterC0:: db $CE, $D0, $C8, $CA, $CC, $72, $74, $76, $78, $7A, $D6, $D7 ; CGB +sEasterC0:: db $CE, $D0, $C8, $CA, $CC, $72, $74, $76, $78, $7A, $D6, $D7 sEasterC1:: db $CF, $D1, $C9, $CB, $CD, $73, $75, $77, $79, $7B, $01, $01 -sEasterA0:: db $D2, $D4, $C8, $CA, $CC, $72, $74, $76, $78, $7A, $D6, $D7 ; AGB +sEasterA0:: db $D2, $D4, $C8, $CA, $CC, $72, $74, $76, $78, $7A, $D6, $D7 sEasterA1:: db $D3, $D5, $C9, $CB, $CD, $73, $75, $77, $79, $7B, $01, $01 -sEasterS0:: db $F6, $F8, $C8, $CA, $CC ; SGB +sEasterS0:: db $F6, $F8, $C8, $CA, $CC sEasterS1:: db $F7, $F9, $C9, $CB, $CD + sPieceXOffsets:: ; How to draw each piece. X-offsets of the sprites. db 0, 8, 16, 24 ; I db 0, 8, 8, 16 ; Z @@ -129,19 +133,23 @@ sPieceYOffsets:: ; How to draw each piece. Y-offsets of the sprites. sTGM1SpeedCurve:: dw $0000, 0, $0100 - db 1, 64 + db 1, 4 db 30, 16, 30, 41 dw $0030, 30, $0100 - db 1, 42 + db 1, 6 db 30, 16, 30, 41 dw $0035, 35, $0100 - db 1, 32 + db 1, 8 db 30, 16, 30, 41 dw $0040, 40, $0100 - db 1, 25 + db 1, 10 + db 30, 16, 30, 41 + + dw $0050, 50, $0100 + db 1, 12 db 30, 16, 30, 41 dw $0060, 60, $0100 @@ -149,71 +157,99 @@ sTGM1SpeedCurve:: db 30, 16, 30, 41 dw $0070, 70, $0100 - db 1, 8 + db 1, 32 db 30, 16, 30, 41 dw $0080, 80, $0100 - db 1, 5 + db 1, 48 db 30, 16, 30, 41 - dw $0100, 100, $0200 - db 1, 3 - db 30, 16, 30, 41 - - dw $0160, 160, $0200 - db 1, 2 - db 30, 16, 30, 41 - - dw $0200, 200, $0300 + dw $0090, 90, $0100 db 1, 64 db 30, 16, 30, 41 - dw $0220, 220, $0300 - db 1, 8 + dw $0100, 100, $0200 + db 1, 80 db 30, 16, 30, 41 - dw $0230, 230, $0300 + dw $0120, 120, $0200 + db 1, 96 + db 30, 16, 30, 41 + + dw $0140, 140, $0200 + db 1, 112 + db 30, 16, 30, 41 + + dw $0160, 160, $0200 + db 1, 128 + db 30, 16, 30, 41 + + dw $0170, 170, $0200 + db 1, 144 + db 30, 16, 30, 41 + + dw $0200, 200, $0300 db 1, 4 db 30, 16, 30, 41 + dw $0220, 220, $0300 + db 1, 32 + db 30, 16, 30, 41 + + dw $0230, 230, $0300 + db 1, 64 + db 30, 16, 30, 41 + dw $0233, 233, $0300 - db 1, 3 + db 1, 96 db 30, 16, 30, 41 dw $0236, 236, $0300 - db 1, 2 + db 1, 128 + db 30, 16, 30, 41 + + dw $0239, 239, $0300 + db 1, 160 + db 30, 16, 30, 41 + + dw $0243, 243, $0300 + db 1, 192 + db 30, 16, 30, 41 + + dw $0247, 239, $0300 + db 1, 224 db 30, 16, 30, 41 dw $0251, 251, $0300 - db 1, 1 + db 1, $FF db 30, 16, 30, 41 dw $0300, 300, $0400 - db 2, 1 + db 2, $FF db 30, 16, 30, 41 dw $0330, 330, $0400 - db 3, 1 + db 3, $FF db 30, 16, 30, 41 dw $0360, 360, $0400 - db 4, 1 + db 4, $FF db 30, 16, 30, 41 dw $0400, 400, $0500 - db 5, 1 + db 5, $FF db 30, 16, 30, 41 dw $0420, 420, $0500 - db 4, 1 + db 4, $FF db 30, 16, 30, 41 dw $0450, 450, $0500 - db 3, 1 + db 3, $FF db 30, 16, 30, 41 dw $0500, 500, $0600 - db 20, 1 + db 20, $FF db 30, 16, 30, 41 sTGM1SpeedCurveEnd:: @@ -222,91 +258,91 @@ sTGM1SpeedCurveEnd:: sCHILSpeedCurve:: dw $0000, 0, $0100 - db 1, 48 - db 10, 16, 25, 17 - - dw $0100, 100, $0200 - db 1, 43 - db 10, 16, 25, 17 - - dw $0200, 200, $0300 - db 1, 38 - db 10, 16, 25, 17 - - dw $0300, 300, $0400 - db 1, 33 - db 10, 16, 25, 17 - - dw $0400, 400, $0500 - db 1, 28 - db 10, 16, 25, 17 - - dw $0500, 500, $0600 - db 1, 23 - db 10, 16, 25, 17 - - dw $0600, 600, $0700 - db 1, 18 - db 10, 16, 25, 17 - - dw $0700, 700, $0800 - db 1, 13 - db 10, 16, 25, 17 - - dw $0800, 800, $0900 - db 1, 8 - db 10, 16, 25, 17 - - dw $0900, 900, $1000 - db 1, 6 - db 10, 16, 25, 17 - - dw $1000, 1000, $1100 db 1, 5 db 10, 16, 25, 17 + dw $0100, 100, $0200 + db 1, 6 + db 10, 16, 25, 17 + + dw $0200, 200, $0300 + db 1, 7 + db 10, 16, 25, 17 + + dw $0300, 300, $0400 + db 1, 8 + db 10, 16, 25, 17 + + dw $0400, 400, $0500 + db 1, 9 + db 10, 16, 25, 17 + + dw $0500, 500, $0600 + db 1, 11 + db 10, 16, 25, 17 + + dw $0600, 600, $0700 + db 1, 14 + db 10, 16, 25, 17 + + dw $0700, 700, $0800 + db 1, 20 + db 10, 16, 25, 17 + + dw $0800, 800, $0900 + db 1, 32 + db 10, 16, 25, 17 + + dw $0900, 900, $1000 + db 1, 43 + db 10, 16, 25, 17 + + dw $1000, 1000, $1100 + db 1, 51 + db 10, 16, 25, 17 + dw $1300, 1300, $1400 - db 1, 4 + db 1, 64 db 10, 16, 25, 17 dw $1600, 1600, $1700 - db 1, 3 + db 1, 85 db 10, 16, 25, 17 dw $1900, 1900, $2000 - db 1, 2 + db 1, 128 db 10, 16, 25, 17 dw $2900, 2900, $3000 - db 1, 1 + db 1, $FF db 10, 16, 25, 17 dw $3333, 3333, $3400 - db 2, 1 + db 2, $FF db 10, 12, 25, 17 dw $4444, 4444, $4500 - db 3, 1 + db 3, $FF db 10, 12, 25, 17 dw $5555, 5555, $5600 - db 4, 1 + db 4, $FF db 10, 12, 25, 17 dw $6666, 6666, $6700 - db 5, 1 + db 5, $FF db 10, 12, 25, 17 dw $7777, 7777, $7800 - db 20, 1 + db 20, $FF db 10, 8, 25, 17 dw $8888, 8888, $8900 - db 20, 1 + db 20, $FF db 10, 6, 18, 17 dw $9999, 9999, $9999 - db 20, 1 + db 20, $FF db 5, 6, 14, 10 sCHILSpeedCurveEnd:: @@ -315,19 +351,23 @@ sCHILSpeedCurveEnd:: sTGM3SpeedCurve:: dw $0000, 0, $0100 - db 1, 64 + db 1, 4 db 27, 16, 30, 40 dw $0030, 30, $0100 - db 1, 42 + db 1, 6 db 27, 16, 30, 40 dw $0035, 35, $0100 - db 1, 32 + db 1, 8 db 27, 16, 30, 40 dw $0040, 40, $0100 - db 1, 25 + db 1, 10 + db 27, 16, 30, 40 + + dw $0050, 50, $0100 + db 1, 12 db 27, 16, 30, 40 dw $0060, 60, $0100 @@ -335,99 +375,127 @@ sTGM3SpeedCurve:: db 27, 16, 30, 40 dw $0070, 70, $0100 - db 1, 8 + db 1, 32 db 27, 16, 30, 40 dw $0080, 80, $0100 - db 1, 5 + db 1, 48 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 + dw $0090, 90, $0100 db 1, 64 db 27, 16, 30, 40 - dw $0220, 220, $0300 - db 1, 8 + dw $0100, 100, $0200 + db 1, 80 db 27, 16, 30, 40 - dw $0230, 230, $0300 + dw $0120, 120, $0200 + db 1, 96 + db 27, 16, 30, 40 + + dw $0140, 140, $0200 + db 1, 112 + db 27, 16, 30, 40 + + dw $0160, 160, $0200 + db 1, 128 + db 27, 16, 30, 40 + + dw $0170, 170, $0200 + db 1, 144 + db 27, 16, 30, 40 + + dw $0200, 200, $0300 db 1, 4 db 27, 16, 30, 40 + dw $0220, 220, $0300 + db 1, 32 + db 27, 16, 30, 40 + + dw $0230, 230, $0300 + db 1, 64 + db 27, 16, 30, 40 + dw $0233, 233, $0300 - db 1, 3 + db 1, 96 db 27, 16, 30, 40 dw $0236, 236, $0300 - db 1, 2 + db 1, 128 + db 27, 16, 30, 40 + + dw $0239, 239, $0300 + db 1, 160 + db 27, 16, 30, 40 + + dw $0243, 243, $0300 + db 1, 192 + db 27, 16, 30, 40 + + dw $0247, 239, $0300 + db 1, 224 db 27, 16, 30, 40 dw $0251, 251, $0300 - db 1, 1 + db 1, $FF db 27, 16, 30, 40 dw $0300, 300, $0400 - db 2, 1 + db 2, $FF db 27, 16, 30, 40 dw $0330, 330, $0400 - db 3, 1 + db 3, $FF db 27, 16, 30, 40 dw $0360, 360, $0400 - db 4, 1 + db 4, $FF db 27, 16, 30, 40 dw $0400, 400, $0500 - db 5, 1 + db 5, $FF db 27, 16, 30, 40 dw $0420, 420, $0500 - db 4, 1 + db 4, $FF db 27, 16, 30, 40 dw $0450, 450, $0500 - db 3, 1 + db 3, $FF db 27, 16, 30, 40 dw $0500, 500, $0600 - db 20, 1 - db 27, 10, 30, 25 + db 20, $FF + db 27, 16, 30, 40 dw $0600, 600, $0700 - db 20, 1 + db 20, $FF db 27, 10, 30, 7 dw $0700, 700, $0800 - db 20, 1 + db 20, $FF db 18, 10, 30, 7 dw $0800, 800, $0900 - db 20, 1 + db 20, $FF db 14, 10, 30, 1 dw $0900, 900, $1000 - db 20, 1 + db 20, $FF db 14, 8, 18, 1 dw $1000, 1000, $1100 - db 20, 1 + db 20, $FF db 8, 8, 18, 6 dw $1100, 1000, $1200 - db 20, 1 + db 20, $FF db 7, 8, 14, 6 dw $1200, 1000, $1300 - db 20, 1 + db 20, $FF db 6, 8, 14, 6 sTGM3SpeedCurveEnd:: @@ -435,27 +503,27 @@ sTGM3SpeedCurveEnd:: sDEATSpeedCurve:: dw $0000, 0, $0100 - db 20, 1 + db 20, $FF db 18, 12, 30, 12 dw $0100, 0, $0200 - db 20, 1 + db 20, $FF db 14, 12, 25, 1 dw $0200, 0, $0300 - db 20, 1 + db 20, $FF db 14, 11, 20, 1 dw $0300, 0, $0400 - db 20, 1 + db 20, $FF db 8, 10, 18, 6 dw $0400, 0, $0500 - db 20, 1 + db 20, $FF db 7, 8, 14, 5 dw $0500, 0, $0600 - db 20, 1 + db 20, $FF db 6, 8, 14, 4 sDEATSpeedCurveEnd:: @@ -463,31 +531,31 @@ sDEATSpeedCurveEnd:: sSHIRSpeedCurve:: dw $0000, 0, $0100 - db 20, 1 + db 20, $FF db 12, 10, 18, 6 dw $0100, 100, $0200 - db 20, 1 + db 20, $FF db 12, 8, 18, 5 dw $0200, 200, $0300 - db 20, 1 + db 20, $FF db 12, 8, 16, 4 dw $0300, 300, $0400 - db 20, 1 + db 20, $FF db 6, 8, 14, 4 dw $0500, 500, $0600 - db 20, 1 + db 20, $FF db 6, 6, 12, 2 dw $1100, 1100, $1200 - db 20, 1 + db 20, $FF db 6, 6, 10, 2 dw $1200, 1200, $1300 - db 20, 1 + db 20, $FF db 6, 6, 8, 2 sSHIRSpeedCurveEnd:: @@ -495,164 +563,164 @@ sSHIRSpeedCurveEnd:: sSpeedCurve:: ; Speed curve of the game. dw $0000, 0, $0100 ; Level 0000 - db 1, 16 ; 1G every 16 frames - db 25, 14, 30, 40 ; ARE, DAS, LOCK, LINECLEAR + db 1, 16 + db 25, 14, 30, 40 dw $0015, 15, $0100 ; Level 0015 - db 1, 15 ; 1G every 15 frames - db 25, 14, 30, 40 ; ARE, DAS, LOCK, LINECLEAR + db 1, 17 + db 25, 14, 30, 40 dw $0030, 30, $0100 ; Level 0030 - db 1, 14 ; 1G every 14 frames - db 25, 14, 30, 40 ; ARE, DAS, LOCK, LINECLEAR + db 1, 18 + db 25, 14, 30, 40 dw $0040, 40, $0100 ; Level 0040 - db 1, 13 ; 1G every 13 frames - db 25, 14, 30, 40 ; ARE, DAS, LOCK, LINECLEAR + db 1, 20 + db 25, 14, 30, 40 dw $0050, 50, $0100 ; Level 0050 - db 1, 12 ; 1G every 12 frames - db 25, 14, 30, 40 ; ARE, DAS, LOCK, LINECLEAR + db 1, 21 + db 25, 14, 30, 40 dw $0060, 60, $0100 ; Level 0060 - db 1, 11 ; 1G every 11 frames - db 25, 14, 30, 40 ; ARE, DAS, LOCK, LINECLEAR + db 1, 23 + db 25, 14, 30, 40 dw $0070, 70, $0100 ; Level 0070 - db 1, 10 ; 1G every 10 frames - db 25, 14, 30, 40 ; ARE, DAS, LOCK, LINECLEAR + db 1, 26 + db 25, 14, 30, 40 dw $0080, 80, $0100 ; Level 0080 - db 1, 9 ; 1G every 9 frames - db 25, 14, 30, 40 ; ARE, DAS, LOCK, LINECLEAR + db 1, 28 + db 25, 14, 30, 40 dw $0090, 90, $0100 ; Level 0090 - db 1, 8 ; 1G every 8 frames - db 25, 14, 30, 40 ; ARE, DAS, LOCK, LINECLEAR + db 1, 32 + db 25, 14, 30, 40 dw $0100, 100, $0200 ; Level 0100 - db 1, 7 ; 1G every 7 frames - db 25, 14, 30, 40 ; ARE, DAS, LOCK, LINECLEAR + db 1, 37 + db 25, 14, 30, 40 dw $0150, 150, $0200 ; Level 0150 - db 1, 6 ; 1G every 6 frames - db 25, 14, 30, 40 ; ARE, DAS, LOCK, LINECLEAR + db 1, 43 + db 25, 14, 30, 40 dw $0200, 200, $0300 ; Level 0200 - db 1, 5 ; 1G every 5 frames - db 25, 14, 30, 40 ; ARE, DAS, LOCK, LINECLEAR + db 1, 51 + db 25, 14, 30, 40 dw $0225, 225, $0300 ; Level 0225 - db 1, 4 ; 1G every 4 frames - db 25, 14, 30, 40 ; ARE, DAS, LOCK, LINECLEAR + db 1, 64 + db 25, 14, 30, 40 dw $0250, 250, $0300 ; Level 0250 - db 1, 3 ; 1G every 3 frames - db 25, 14, 30, 40 ; ARE, DAS, LOCK, LINECLEAR + db 1, 85 + db 25, 14, 30, 40 dw $0275, 275, $0300 ; Level 0275 - db 1, 2 ; 1G every 2 frames - db 25, 14, 30, 40 ; ARE, DAS, LOCK, LINECLEAR + db 1, 128 + db 25, 14, 30, 40 dw $0300, 300, $0400 ; Level 0300 - db 1, 1 ; 1G - db 25, 14, 30, 32 ; ARE, DAS, LOCK, LINECLEAR + db 1, $FF + db 25, 14, 30, 32 dw $0350, 350, $0350 ; Level 0350 - db 2, 1 ; 2G - db 25, 14, 30, 32 ; ARE, DAS, LOCK, LINECLEAR + db 2, $FF + db 25, 14, 30, 32 dw $0400, 400, $0400 ; Level 0400 - db 3, 1 ; 3G - db 25, 14, 30, 32 ; ARE, DAS, LOCK, LINECLEAR + db 3, $FF + db 25, 14, 30, 32 dw $0450, 450, $0500 ; Level 0450 - db 4, 1 ; 4G - db 25, 14, 30, 32 ; ARE, DAS, LOCK, LINECLEAR + db 4, $FF + db 25, 14, 30, 32 dw $0475, 475, $0500 ; Level 0475 - db 5, 1 ; 5G - db 25, 14, 30, 32 ; ARE, DAS, LOCK, LINECLEAR + db 5, $FF + db 25, 14, 30, 32 dw $0500, 500, $0600 ; Level 0500 - db 20, 1 ; 20G - db 25, 14, 30, 24 ; ARE, DAS, LOCK, LINECLEAR + db 20, $FF + db 25, 14, 30, 24 dw $0600, 600, $0700 ; Level 0600 - db 20, 1 ; 20G - db 25, 8, 30, 24 ; ARE, DAS, LOCK, LINECLEAR + db 20, $FF + db 25, 8, 30, 24 dw $0700, 700, $0800 ; Level 0700 - db 20, 1 ; 20G - db 20, 8, 30, 24 ; ARE, DAS, LOCK, LINECLEAR + db 20, $FF + db 20, 8, 30, 24 dw $0900, 900, $1000 ; Level 0900 - db 20, 1 ; 20G - db 16, 6, 25, 16 ; ARE, DAS, LOCK, LINECLEAR + db 20, $FF + db 16, 6, 25, 16 dw $1100, 1100, $1200 ; Level 1100 - db 20, 1 ; 20G - db 12, 6, 25, 16 ; ARE, DAS, LOCK, LINECLEAR + db 20, $FF + db 12, 6, 25, 16 dw $1200, 1200, $1300 ; Level 1200 - db 20, 1 ; 20G - db 12, 6, 25, 8 ; ARE, DAS, LOCK, LINECLEAR + db 20, $FF + db 12, 6, 25, 8 dw $1300, 1300, $1400 ; Level 1300 - db 20, 1 ; 20G - db 10, 6, 20, 7 ; ARE, DAS, LOCK, LINECLEAR + db 20, $FF + db 10, 6, 20, 7 dw $1400, 1400, $1500 ; Level 1400 - db 20, 1 ; 20G - db 10, 6, 18, 6 ; ARE, DAS, LOCK, LINECLEAR + db 20, $FF + db 10, 6, 18, 6 dw $1500, 1500, $1600 ; Level 1500 - db 20, 1 ; 20G - db 8, 4, 16, 5 ; ARE, DAS, LOCK, LINECLEAR + db 20, $FF + db 8, 4, 16, 5 dw $1600, 1600, $1700 ; Level 1600 - db 20, 1 ; 20G - db 8, 4, 14, 4 ; ARE, DAS, LOCK, LINECLEAR + db 20, $FF + db 8, 4, 14, 4 dw $1700, 1700, $1800 ; Level 1700 - db 20, 1 ; 20G - db 6, 4, 12, 3 ; ARE, DAS, LOCK, LINECLEAR + db 20, $FF + db 6, 4, 12, 3 dw $1800, 1800, $1900 ; Level 1800 - db 20, 1 ; 20G - db 6, 4, 10, 3 ; ARE, DAS, LOCK, LINECLEAR + db 20, $FF + db 6, 4, 10, 3 dw $1900, 1900, $2000 ; Level 1900 - db 20, 1 ; 20G - db 4, 4, 8, 3 ; ARE, DAS, LOCK, LINECLEAR + db 20, $FF + db 4, 4, 8, 3 dw $2000, 2000, $2100 ; Level 2000 - db 20, 1 ; 20G - db 4, 3, 8, 3 ; ARE, DAS, LOCK, LINECLEAR + db 20, $FF + db 4, 3, 8, 3 dw $2500, 2500, $2600 ; Level 2500 - db 20, 1 ; 20G - db 2, 1, 8, 2 ; ARE, DAS, LOCK, LINECLEAR + db 20, $FF + db 2, 1, 8, 2 dw $3000, 3000, $3100 ; Level 3000 - db 20, 1 ; 20G - db 1, 1, 8, 1 ; ARE, DAS, LOCK, LINECLEAR + db 20, $FF + db 1, 1, 8, 1 dw $4000, 4000, $4100 ; Level 4000 - db 20, 1 ; 20G - db 1, 1, 6, 1 ; ARE, DAS, LOCK, LINECLEAR + db 20, $FF + db 1, 1, 6, 1 dw $5000, 5000, $5100 ; Level 5000 - db 20, 1 ; 20G - db 1, 1, 4, 1 ; ARE, DAS, LOCK, LINECLEAR + db 20, $FF + db 1, 1, 4, 1 dw $6666, 6666, $6700 ; Level 6666 - db 20, 1 ; 20G - db 1, 1, 2, 1 ; ARE, DAS, LOCK, LINECLEAR + db 20, $FF + db 1, 1, 2, 1 dw $9999, 9999, $9999 ; Level 9999 - db 20, 1 ; 20G - db 1, 1, 1, 1 ; ARE, DAS, LOCK, LINECLEAR + db 20, $FF + db 1, 1, 1, 1 sSpeedCurveEnd:: dw $FFFF ; End. diff --git a/src/field.asm b/src/field.asm index 0784f32..6e34870 100644 --- a/src/field.asm +++ b/src/field.asm @@ -45,7 +45,7 @@ hDeepestY: ds 1 hWantedTile: ds 1 hWantedG: ds 1 hActualG: ds 1 -hTicksUntilG: ds 1 +hGravityCtr: ds 1 hWantX: ds 1 hYPosAtStartOfFrame: ds 1 hWantRotation: ds 1 @@ -532,8 +532,8 @@ TrySpawnPiece:: ldh [hShouldLockIfGrounded], a ldh a, [hCurrentLockDelay] ldh [hCurrentLockDelayRemaining], a - ldh a, [hCurrentFramesPerGravityTick] - ldh [hTicksUntilG], a + ld a, 1 + ldh [hGravityCtr], a ld a, $FF ldh [hRemainingDelay], a ld a, DELAY_STATE_DETERMINE_DELAY @@ -1194,7 +1194,7 @@ FieldProcess:: ldh [hWantedG], a ; Is a hard/sonic drop requested? Skip if in 20G mode. - ldh a, [hCurrentGravityPerTick] + ldh a, [hCurrentIntegerGravity] cp a, 20 jr z, .postdrop ldh a, [hUpState] @@ -1221,12 +1221,14 @@ FieldProcess:: ldh [hAwardDownBonus], a ld a, 20 ldh [hWantedG], a - ldh a, [hTicksUntilG] - dec a - ldh [hTicksUntilG], a - jr nz, .grav - ldh a, [hCurrentFramesPerGravityTick] - ldh [hTicksUntilG], a + ldh a, [hCurrentFractionalGravity] + ld b, a + ldh a, [hGravityCtr] + add a, b + ldh [hGravityCtr], a + jr c, .grav + ld a, 1 + ldh [hGravityCtr], a ld a, [wDropModeState] cp a, DROP_MODE_SNIC jr z, .grav @@ -1249,7 +1251,7 @@ FieldProcess:: ldh [hCurrentPieceY], a xor a, a ldh [hCurrentLockDelayRemaining], a - ldh a, [hCurrentGravityPerTick] + ldh a, [hCurrentIntegerGravity] cp a, 1 jp nz, .draw call SFXKill @@ -1265,8 +1267,8 @@ FieldProcess:: ldh a, [hDownFrames] inc a ldh [hDownFrames], a - ld a, 1 - ldh [hTicksUntilG], a + ld a, $FF + ldh [hGravityCtr], a ld a, [wDropModeState] cp a, DROP_MODE_HARD jr nz, :+ @@ -1274,13 +1276,13 @@ FieldProcess:: ldh [hShouldLockIfGrounded], a ; Gravity? -: ldh a, [hTicksUntilG] - dec a - ldh [hTicksUntilG], a - jr nz, .nograv - ldh a, [hCurrentFramesPerGravityTick] - ldh [hTicksUntilG], a - ldh a, [hCurrentGravityPerTick] +: ldh a, [hCurrentFractionalGravity] + ld b, a + ldh a, [hGravityCtr] + add a, b + ldh [hGravityCtr], a + jr nc, .nograv + ldh a, [hCurrentIntegerGravity] ldh [hWantedG], a ; Can we drop the full requested distance? @@ -1341,7 +1343,7 @@ FieldProcess:: .playfirmdropsound ldh a, [hCurrentLockDelay] ldh [hCurrentLockDelayRemaining], a - ldh a, [hCurrentGravityPerTick] + ldh a, [hCurrentIntegerGravity] cp a, 1 jr nz, .postcheckforfirmdropsound call SFXKill @@ -1363,7 +1365,7 @@ FieldProcess:: jr .dontforcelock ; Lock on down in modes <20G. -: ldh a, [hCurrentGravityPerTick] +: ldh a, [hCurrentIntegerGravity] cp a, 20 jr nz, .forcelock @@ -1427,7 +1429,7 @@ FieldProcess:: ; Play the locking sound and draw the piece. .dolock - ldh a, [hCurrentGravityPerTick] + ldh a, [hCurrentIntegerGravity] cp a, 1 jr nz, .draw call SFXKill @@ -1965,7 +1967,7 @@ FieldDelay:: ret nz call ClearLines - ldh a, [hCurrentGravityPerTick] + ldh a, [hCurrentIntegerGravity] cp a, 1 jr nz, :+ call SFXKill diff --git a/src/gbc.asm b/src/gbc.asm index 5c2614e..6ee2f68 100644 --- a/src/gbc.asm +++ b/src/gbc.asm @@ -484,7 +484,7 @@ GBCGameplayInit:: ldh [rBCPD], a ldh [rOCPD], a - ld bc, R0 | B0 + ld bc, B0 | %0000000000000010 ld a, c ldh [rBCPD], a ldh [rOCPD], a @@ -763,7 +763,7 @@ GBCGameplayProcess:: ; Are we 20G? .higoverride ld d, a - ldh a, [hCurrentGravityPerTick] + ldh a, [hCurrentIntegerGravity] cp a, 20 jr nz, .colorfield @@ -891,7 +891,7 @@ GBCGameplayProcess:: jr nz, .outer2 ; Maybe flash numbers. - ldh a, [hCurrentGravityPerTick] + ldh a, [hCurrentIntegerGravity] cp a, 20 jr nz, .black diff --git a/src/level.asm b/src/level.asm index ceba027..23d7c7c 100644 --- a/src/level.asm +++ b/src/level.asm @@ -27,8 +27,8 @@ hCurrentDAS:: ds 1 hCurrentARE:: ds 1 hCurrentLockDelay:: ds 1 hCurrentLineClearDelay:: ds 1 -hCurrentGravityPerTick:: ds 1 -hCurrentFramesPerGravityTick:: ds 1 +hCurrentIntegerGravity:: ds 1 +hCurrentFractionalGravity:: ds 1 hNextSpeedUp:: ds 2 hSpeedCurvePtr:: ds 2 hStartSpeed:: ds 2 @@ -330,9 +330,9 @@ DoSpeedUp: ; Get all the new data. ld a, [hl+] - ldh [hCurrentGravityPerTick], a + ldh [hCurrentIntegerGravity], a ld a, [hl+] - ldh [hCurrentFramesPerGravityTick], a + ldh [hCurrentFractionalGravity], a ld a, [hl+] ldh [hCurrentARE], a ld a, [hl+] @@ -357,9 +357,9 @@ DoSpeedUp: cp a, 0 ret z ld a, 20 - ldh [hCurrentGravityPerTick], a - ld a, 1 - ldh [hCurrentFramesPerGravityTick], a + ldh [hCurrentIntegerGravity], a + ld a, $FF + ldh [hCurrentFractionalGravity], a ret diff --git a/src/state_title.asm b/src/state_title.asm index cc74f01..0dc5cf9 100644 --- a/src/state_title.asm +++ b/src/state_title.asm @@ -666,6 +666,11 @@ TitleVBlankHandler:: call UnsafeMemCopy ; Draw option 5. + ld a, [wSpeedCurveState] + cp a, SCURVE_DEAT + jr z, .disabled + cp a, SCURVE_SHIR + jr z, .disabled xor a, a ld b, a ld a, [wAlways20GState] @@ -679,8 +684,15 @@ TitleVBlankHandler:: ld hl, TITLE_OPTION_5+TITLE_OPTION_OFFSET ld bc, 4 call UnsafeMemCopy + jr .opt6 +.disabled + ld de, sDisabled + ld hl, TITLE_OPTION_5+TITLE_OPTION_OFFSET + ld bc, 4 + call UnsafeMemCopy ; Draw option 6. +.opt6 ldh a, [hStartSpeed] ld l, a ldh a, [hStartSpeed+1]