From 9097a89bc99f159861d890ebc757f0484ec4c6ff Mon Sep 17 00:00:00 2001 From: Randy Thiemann Date: Thu, 26 Oct 2023 14:29:06 +0200 Subject: [PATCH] Add Line ARE. Improve tells and hold. --- bin/DMGTRIS.GBC | Bin 65536 -> 65536 bytes bin/DMGTRIS.pocket | Bin 65536 -> 65536 bytes src/constants.asm | 300 ++++++++++++++++++++------------------ src/field.asm | 192 +++--------------------- src/gbc.asm | 4 +- src/include/globals.asm | 5 + src/level.asm | 3 + src/res/sources/tiles.gbr | Bin 39009 -> 39009 bytes src/res/tiles.inc | 2 +- src/sprites.asm | 87 ++++++++++- src/sram.asm | 140 +++++++----------- src/state_gameplay.asm | 45 +++--- src/state_title.asm | 10 +- 13 files changed, 363 insertions(+), 425 deletions(-) diff --git a/bin/DMGTRIS.GBC b/bin/DMGTRIS.GBC index 20e69593008813d675b86a106dfdae8ea2e30738..6466af9ff4bdd57ca2679048e8b1ad1b6adc0ceb 100644 GIT binary patch delta 7954 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 delta 8047 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 delta 8166 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 diff --git a/src/constants.asm b/src/constants.asm index c46d3d2..06a1119 100644 --- a/src/constants.asm +++ b/src/constants.asm @@ -131,126 +131,135 @@ sPieceYOffsets:: ; How to draw each piece. Y-offsets of the sprites. db 0, 7, 0, 7 ; O db 0, 0, 7, 0 ; T +; Speed curve data is defined as follows: +; N blocks of: +; dw BCD_START_LEVEL, START_LEVEL, BCD_NEXT_100_LEVEL_BREAKPOINT +; db GRID_CELLS_PER_MOVE_ON_OVERFLOW, INCREMENT_PER_FRAME +; db NORMAL_ARE, LINE_ARE, DAS, LOCK_DELAY, CLEAR_DELAY +; +; Followed by one single: +; dw $FFFF + sTGM1SpeedCurve:: dw $0000, 0, $0100 db 1, 4 - db 30, 16, 30, 41 + db 30, 30, 16, 30, 41 dw $0030, 30, $0100 db 1, 6 - db 30, 16, 30, 41 + db 30, 30, 16, 30, 41 dw $0035, 35, $0100 db 1, 8 - db 30, 16, 30, 41 + db 30, 30, 16, 30, 41 dw $0040, 40, $0100 db 1, 10 - db 30, 16, 30, 41 + db 30, 30, 16, 30, 41 dw $0050, 50, $0100 db 1, 12 - db 30, 16, 30, 41 + db 30, 30, 16, 30, 41 dw $0060, 60, $0100 db 1, 16 - db 30, 16, 30, 41 + db 30, 30, 16, 30, 41 dw $0070, 70, $0100 db 1, 32 - db 30, 16, 30, 41 + db 30, 30, 16, 30, 41 dw $0080, 80, $0100 db 1, 48 - db 30, 16, 30, 41 + db 30, 30, 16, 30, 41 dw $0090, 90, $0100 db 1, 64 - db 30, 16, 30, 41 + db 30, 30, 16, 30, 41 dw $0100, 100, $0200 db 1, 80 - db 30, 16, 30, 41 + db 30, 30, 16, 30, 41 dw $0120, 120, $0200 db 1, 96 - db 30, 16, 30, 41 + db 30, 30, 16, 30, 41 dw $0140, 140, $0200 db 1, 112 - db 30, 16, 30, 41 + db 30, 30, 16, 30, 41 dw $0160, 160, $0200 db 1, 128 - db 30, 16, 30, 41 + db 30, 30, 16, 30, 41 dw $0170, 170, $0200 db 1, 144 - db 30, 16, 30, 41 + db 30, 30, 16, 30, 41 dw $0200, 200, $0300 db 1, 4 - db 30, 16, 30, 41 + db 30, 30, 16, 30, 41 dw $0220, 220, $0300 db 1, 32 - db 30, 16, 30, 41 + db 30, 30, 16, 30, 41 dw $0230, 230, $0300 db 1, 64 - db 30, 16, 30, 41 + db 30, 30, 16, 30, 41 dw $0233, 233, $0300 db 1, 96 - db 30, 16, 30, 41 + db 30, 30, 16, 30, 41 dw $0236, 236, $0300 db 1, 128 - db 30, 16, 30, 41 + db 30, 30, 16, 30, 41 dw $0239, 239, $0300 db 1, 160 - db 30, 16, 30, 41 + db 30, 30, 16, 30, 41 dw $0243, 243, $0300 db 1, 192 - db 30, 16, 30, 41 + db 30, 30, 16, 30, 41 dw $0247, 239, $0300 db 1, 224 - db 30, 16, 30, 41 + db 30, 30, 16, 30, 41 dw $0251, 251, $0300 db 1, $FF - db 30, 16, 30, 41 + db 30, 30, 16, 30, 41 dw $0300, 300, $0400 db 2, $FF - db 30, 16, 30, 41 + db 30, 30, 16, 30, 41 dw $0330, 330, $0400 db 3, $FF - db 30, 16, 30, 41 + db 30, 30, 16, 30, 41 dw $0360, 360, $0400 db 4, $FF - db 30, 16, 30, 41 + db 30, 30, 16, 30, 41 dw $0400, 400, $0500 db 5, $FF - db 30, 16, 30, 41 + db 30, 30, 16, 30, 41 dw $0420, 420, $0500 db 4, $FF - db 30, 16, 30, 41 + db 30, 30, 16, 30, 41 dw $0450, 450, $0500 db 3, $FF - db 30, 16, 30, 41 + db 30, 30, 16, 30, 41 dw $0500, 500, $0600 db 20, $FF - db 30, 16, 30, 41 + db 30, 30, 16, 30, 41 sTGM1SpeedCurveEnd:: dw $FFFF @@ -259,91 +268,91 @@ sTGM1SpeedCurveEnd:: sCHILSpeedCurve:: dw $0000, 0, $0100 db 1, 5 - db 10, 16, 25, 17 + db 10, 10, 16, 25, 17 dw $0100, 100, $0200 db 1, 6 - db 10, 16, 25, 17 + db 10, 10, 16, 25, 17 dw $0200, 200, $0300 db 1, 7 - db 10, 16, 25, 17 + db 10, 10, 16, 25, 17 dw $0300, 300, $0400 db 1, 8 - db 10, 16, 25, 17 + db 10, 10, 16, 25, 17 dw $0400, 400, $0500 db 1, 9 - db 10, 16, 25, 17 + db 10, 10, 16, 25, 17 dw $0500, 500, $0600 db 1, 11 - db 10, 16, 25, 17 + db 10, 10, 16, 25, 17 dw $0600, 600, $0700 db 1, 14 - db 10, 16, 25, 17 + db 10, 10, 16, 25, 17 dw $0700, 700, $0800 db 1, 20 - db 10, 16, 25, 17 + db 10, 10, 16, 25, 17 dw $0800, 800, $0900 db 1, 32 - db 10, 16, 25, 17 + db 10, 10, 16, 25, 17 dw $0900, 900, $1000 db 1, 43 - db 10, 16, 25, 17 + db 10, 10, 16, 25, 17 dw $1000, 1000, $1100 db 1, 51 - db 10, 16, 25, 17 + db 10, 10, 16, 25, 17 dw $1300, 1300, $1400 db 1, 64 - db 10, 16, 25, 17 + db 10, 10, 16, 25, 17 dw $1600, 1600, $1700 db 1, 85 - db 10, 16, 25, 17 + db 10, 10, 16, 25, 17 dw $1900, 1900, $2000 db 1, 128 - db 10, 16, 25, 17 + db 10, 10, 16, 25, 17 dw $2900, 2900, $3000 db 1, $FF - db 10, 16, 25, 17 + db 10, 10, 16, 25, 17 dw $3333, 3333, $3400 db 2, $FF - db 10, 12, 25, 17 + db 10, 10, 12, 25, 17 dw $4444, 4444, $4500 db 3, $FF - db 10, 12, 25, 17 + db 10, 10, 12, 25, 17 dw $5555, 5555, $5600 db 4, $FF - db 10, 12, 25, 17 + db 10, 10, 12, 25, 17 dw $6666, 6666, $6700 db 5, $FF - db 10, 12, 25, 17 + db 10, 10, 12, 25, 17 dw $7777, 7777, $7800 db 20, $FF - db 10, 8, 25, 17 + db 10, 10, 8, 25, 17 dw $8888, 8888, $8900 db 20, $FF - db 10, 6, 18, 17 + db 10, 10, 6, 18, 17 dw $9999, 9999, $9999 db 20, $FF - db 5, 6, 14, 10 + db 5, 5, 6, 14, 10 sCHILSpeedCurveEnd:: dw $FFFF @@ -352,151 +361,151 @@ sCHILSpeedCurveEnd:: sTGM3SpeedCurve:: dw $0000, 0, $0100 db 1, 4 - db 27, 16, 30, 40 + db 27, 27, 16, 30, 40 dw $0030, 30, $0100 db 1, 6 - db 27, 16, 30, 40 + db 27, 27, 16, 30, 40 dw $0035, 35, $0100 db 1, 8 - db 27, 16, 30, 40 + db 27, 27, 16, 30, 40 dw $0040, 40, $0100 db 1, 10 - db 27, 16, 30, 40 + db 27, 27, 16, 30, 40 dw $0050, 50, $0100 db 1, 12 - db 27, 16, 30, 40 + db 27, 27, 16, 30, 40 dw $0060, 60, $0100 db 1, 16 - db 27, 16, 30, 40 + db 27, 27, 16, 30, 40 dw $0070, 70, $0100 db 1, 32 - db 27, 16, 30, 40 + db 27, 27, 16, 30, 40 dw $0080, 80, $0100 db 1, 48 - db 27, 16, 30, 40 + db 27, 27, 16, 30, 40 dw $0090, 90, $0100 db 1, 64 - db 27, 16, 30, 40 + db 27, 27, 16, 30, 40 dw $0100, 100, $0200 db 1, 80 - db 27, 16, 30, 40 + db 27, 27, 16, 30, 40 dw $0120, 120, $0200 db 1, 96 - db 27, 16, 30, 40 + db 27, 27, 16, 30, 40 dw $0140, 140, $0200 db 1, 112 - db 27, 16, 30, 40 + db 27, 27, 16, 30, 40 dw $0160, 160, $0200 db 1, 128 - db 27, 16, 30, 40 + db 27, 27, 16, 30, 40 dw $0170, 170, $0200 db 1, 144 - db 27, 16, 30, 40 + db 27, 27, 16, 30, 40 dw $0200, 200, $0300 db 1, 4 - db 27, 16, 30, 40 + db 27, 27, 16, 30, 40 dw $0220, 220, $0300 db 1, 32 - db 27, 16, 30, 40 + db 27, 27, 16, 30, 40 dw $0230, 230, $0300 db 1, 64 - db 27, 16, 30, 40 + db 27, 27, 16, 30, 40 dw $0233, 233, $0300 db 1, 96 - db 27, 16, 30, 40 + db 27, 27, 16, 30, 40 dw $0236, 236, $0300 db 1, 128 - db 27, 16, 30, 40 + db 27, 27, 16, 30, 40 dw $0239, 239, $0300 db 1, 160 - db 27, 16, 30, 40 + db 27, 27, 16, 30, 40 dw $0243, 243, $0300 db 1, 192 - db 27, 16, 30, 40 + db 27, 27, 16, 30, 40 dw $0247, 239, $0300 db 1, 224 - db 27, 16, 30, 40 + db 27, 27, 16, 30, 40 dw $0251, 251, $0300 db 1, $FF - db 27, 16, 30, 40 + db 27, 27, 16, 30, 40 dw $0300, 300, $0400 db 2, $FF - db 27, 16, 30, 40 + db 27, 27, 16, 30, 40 dw $0330, 330, $0400 db 3, $FF - db 27, 16, 30, 40 + db 27, 27, 16, 30, 40 dw $0360, 360, $0400 db 4, $FF - db 27, 16, 30, 40 + db 27, 27, 16, 30, 40 dw $0400, 400, $0500 db 5, $FF - db 27, 16, 30, 40 + db 27, 27, 16, 30, 40 dw $0420, 420, $0500 db 4, $FF - db 27, 16, 30, 40 + db 27, 27, 16, 30, 40 dw $0450, 450, $0500 db 3, $FF - db 27, 16, 30, 40 + db 27, 27, 16, 30, 40 dw $0500, 500, $0600 db 20, $FF - db 27, 16, 30, 40 + db 27, 27, 10, 30, 25 dw $0600, 600, $0700 db 20, $FF - db 27, 10, 30, 7 + db 27, 18, 10, 30, 16 dw $0700, 700, $0800 db 20, $FF - db 18, 10, 30, 7 + db 18, 14, 10, 30, 12 dw $0800, 800, $0900 db 20, $FF - db 14, 10, 30, 1 + db 14, 8, 10, 30, 6 dw $0900, 900, $1000 db 20, $FF - db 14, 8, 18, 1 + db 14, 8, 8, 17, 6 dw $1000, 1000, $1100 db 20, $FF - db 8, 8, 18, 6 + db 8, 8, 8, 17, 6 dw $1100, 1000, $1200 db 20, $FF - db 7, 8, 14, 6 + db 7, 7, 8, 15, 6 dw $1200, 1000, $1300 db 20, $FF - db 6, 8, 14, 6 + db 6, 6, 8, 15, 6 sTGM3SpeedCurveEnd:: dw $FFFF @@ -504,27 +513,27 @@ sTGM3SpeedCurveEnd:: sDEATSpeedCurve:: dw $0000, 0, $0100 db 20, $FF - db 18, 12, 30, 12 + db 18, 14, 12, 30, 12 dw $0100, 0, $0200 db 20, $FF - db 14, 12, 25, 1 + db 14, 8, 12, 26, 6 dw $0200, 0, $0300 db 20, $FF - db 14, 11, 20, 1 + db 14, 8, 11, 22, 6 dw $0300, 0, $0400 db 20, $FF - db 8, 10, 18, 6 + db 8, 8, 10, 18, 6 dw $0400, 0, $0500 db 20, $FF - db 7, 8, 14, 5 + db 7, 7, 8, 15, 5 dw $0500, 0, $0600 db 20, $FF - db 6, 8, 14, 4 + db 6, 6, 8, 15, 4 sDEATSpeedCurveEnd:: dw $FFFF @@ -532,198 +541,199 @@ sDEATSpeedCurveEnd:: sSHIRSpeedCurve:: dw $0000, 0, $0100 db 20, $FF - db 12, 10, 18, 6 + db 12, 8, 10, 18, 6 dw $0100, 100, $0200 db 20, $FF - db 12, 8, 18, 5 + db 12, 7, 8, 18, 5 dw $0200, 200, $0300 db 20, $FF - db 12, 8, 16, 4 + db 12, 6, 8, 17, 4 dw $0300, 300, $0400 db 20, $FF - db 6, 8, 14, 4 + db 6, 6, 8, 15, 4 dw $0500, 500, $0600 db 20, $FF - db 6, 6, 12, 2 + db 6, 5, 6, 13, 3 dw $1100, 1100, $1200 db 20, $FF - db 6, 6, 10, 2 + db 6, 5, 6, 10, 3 dw $1200, 1200, $1300 db 20, $FF - db 6, 6, 8, 2 + db 6, 5, 6, 8, 3 sSHIRSpeedCurveEnd:: dw $FFFF -sSpeedCurve:: ; Speed curve of the game. +sDMGTSpeedCurve:: ; Speed curve of the game. dw $0000, 0, $0100 ; Level 0000 db 1, 16 - db 25, 14, 30, 40 + db 25, 15, 14, 30, 40 dw $0015, 15, $0100 ; Level 0015 db 1, 17 - db 25, 14, 30, 40 + db 25, 15, 14, 30, 40 dw $0030, 30, $0100 ; Level 0030 db 1, 18 - db 25, 14, 30, 40 + db 25, 15, 14, 30, 40 dw $0040, 40, $0100 ; Level 0040 db 1, 20 - db 25, 14, 30, 40 + db 25, 15, 14, 30, 40 dw $0050, 50, $0100 ; Level 0050 db 1, 21 - db 25, 14, 30, 40 + db 25, 15, 14, 30, 40 dw $0060, 60, $0100 ; Level 0060 db 1, 23 - db 25, 14, 30, 40 + db 25, 15, 14, 30, 40 dw $0070, 70, $0100 ; Level 0070 db 1, 26 - db 25, 14, 30, 40 + db 25, 15, 14, 30, 40 dw $0080, 80, $0100 ; Level 0080 db 1, 28 - db 25, 14, 30, 40 + db 25, 15, 14, 30, 40 dw $0090, 90, $0100 ; Level 0090 db 1, 32 - db 25, 14, 30, 40 + db 25, 15, 14, 30, 40 dw $0100, 100, $0200 ; Level 0100 db 1, 37 - db 25, 14, 30, 40 + db 25, 15, 14, 30, 40 dw $0150, 150, $0200 ; Level 0150 db 1, 43 - db 25, 14, 30, 40 + db 25, 15, 14, 30, 40 dw $0200, 200, $0300 ; Level 0200 db 1, 51 - db 25, 14, 30, 40 + db 25, 15, 14, 30, 40 dw $0225, 225, $0300 ; Level 0225 db 1, 64 - db 25, 14, 30, 40 + db 25, 15, 14, 30, 40 dw $0250, 250, $0300 ; Level 0250 db 1, 85 - db 25, 14, 30, 40 + db 25, 15, 14, 30, 40 dw $0275, 275, $0300 ; Level 0275 db 1, 128 - db 25, 14, 30, 40 + db 25, 15, 14, 30, 40 dw $0300, 300, $0400 ; Level 0300 db 1, $FF - db 25, 14, 30, 32 + db 25, 7, 14, 30, 32 dw $0350, 350, $0350 ; Level 0350 db 2, $FF - db 25, 14, 30, 32 + db 25, 7, 14, 30, 32 dw $0400, 400, $0400 ; Level 0400 db 3, $FF - db 25, 14, 30, 32 + db 25, 7, 14, 30, 32 dw $0450, 450, $0500 ; Level 0450 db 4, $FF - db 25, 14, 30, 32 + db 25, 7, 14, 30, 32 dw $0475, 475, $0500 ; Level 0475 db 5, $FF - db 25, 14, 30, 32 + db 25, 7, 14, 30, 32 dw $0500, 500, $0600 ; Level 0500 db 20, $FF - db 25, 14, 30, 24 + db 25, 6, 14, 30, 24 dw $0600, 600, $0700 ; Level 0600 db 20, $FF - db 25, 8, 30, 24 + db 25, 6, 8, 30, 24 dw $0700, 700, $0800 ; Level 0700 db 20, $FF - db 20, 8, 30, 24 + db 20, 6, 8, 30, 24 dw $0900, 900, $1000 ; Level 0900 db 20, $FF - db 16, 6, 25, 16 + db 16, 4, 6, 25, 16 dw $1100, 1100, $1200 ; Level 1100 db 20, $FF - db 12, 6, 25, 16 + db 12, 4, 6, 25, 16 dw $1200, 1200, $1300 ; Level 1200 db 20, $FF - db 12, 6, 25, 8 + db 12, 4, 6, 25, 8 dw $1300, 1300, $1400 ; Level 1300 db 20, $FF - db 10, 6, 20, 7 + db 10, 4, 6, 20, 7 dw $1400, 1400, $1500 ; Level 1400 db 20, $FF - db 10, 6, 18, 6 + db 10, 4, 6, 18, 6 dw $1500, 1500, $1600 ; Level 1500 db 20, $FF - db 8, 4, 16, 5 + db 8, 4, 4, 16, 5 dw $1600, 1600, $1700 ; Level 1600 db 20, $FF - db 8, 4, 14, 4 + db 8, 4, 4, 14, 4 dw $1700, 1700, $1800 ; Level 1700 db 20, $FF - db 6, 4, 12, 3 + db 6, 4, 4, 12, 3 dw $1800, 1800, $1900 ; Level 1800 db 20, $FF - db 6, 4, 10, 3 + db 6, 4, 4, 10, 3 dw $1900, 1900, $2000 ; Level 1900 db 20, $FF - db 4, 4, 8, 3 + db 4, 4, 4, 8, 3 dw $2000, 2000, $2100 ; Level 2000 db 20, $FF - db 4, 3, 8, 3 + db 4, 4, 3, 8, 3 dw $2500, 2500, $2600 ; Level 2500 db 20, $FF - db 2, 1, 8, 2 + db 2, 2, 1, 8, 2 dw $3000, 3000, $3100 ; Level 3000 db 20, $FF - db 1, 1, 8, 1 + db 1, 1, 1, 8, 1 dw $4000, 4000, $4100 ; Level 4000 db 20, $FF - db 1, 1, 6, 1 + db 1, 1, 1, 6, 1 dw $5000, 5000, $5100 ; Level 5000 db 20, $FF - db 1, 1, 4, 1 + db 1, 1, 1, 4, 1 dw $6666, 6666, $6700 ; Level 6666 db 20, $FF - db 1, 1, 2, 1 + db 1, 1, 1, 2, 1 dw $9999, 9999, $9999 ; Level 9999 db 20, $FF - db 1, 1, 1, 1 + db 1, 1, 1, 1, 1 + +sDMGTSpeedCurveEnd:: + dw $FFFF ; End. -sSpeedCurveEnd:: - dw $FFFF ; End. sPieceFastRotationStates:: diff --git a/src/field.asm b/src/field.asm index 6e34870..e8bae00 100644 --- a/src/field.asm +++ b/src/field.asm @@ -1527,36 +1527,14 @@ FieldProcess:: GetTileShade: - ; Possible values for tile delay: - ; 30, 25, 20, 18, 16, 14, 12, 10, 8, 6, 4, 2, 1 - ; We don't need to handle the 1 case. - ld a, 0 - ld b, a -: ldh a, [hCurrentLockDelay] + ldh a, [hCurrentLockDelay] cp a, 30 - jr z, .max30 -: cp a, 25 - jr z, .max25 -: cp a, 20 - jr z, .max20 -: cp a, 18 - jp z, .max18 -: cp a, 16 - jp z, .max16 -: cp a, 14 - jp z, .max14 -: cp a, 12 - jp z, .max12 -: cp a, 10 - jp z, .max10 -: cp a, 8 - jp z, .max8 -: cp a, 6 - jp z, .max6 -: cp a, 4 - jp z, .max4 -: cp a, 2 - jp z, .max2 + jr nc, .max30 + cp a, 20 + jr nc, .max20 + cp a, 10 + jr nc, .max10 + jr .max0 ret .max30 ldh a, [hCurrentLockDelayRemaining] @@ -1565,136 +1543,34 @@ GetTileShade: cp a, 8 jp c, .s6 cp a, 12 - jp c, .s5 + jr c, .s5 cp a, 16 - jp c, .s4 + jr c, .s4 cp a, 20 - jp c, .s3 + jr c, .s3 cp a, 24 - jp c, .s2 + jr c, .s2 cp a, 28 - jp c, .s1 - jp .s0 -.max25 - ldh a, [hCurrentLockDelayRemaining] - cp a, 3 - ret c - cp a, 6 - jp c, .s6 - cp a, 9 - jp c, .s5 - cp a, 12 - jp c, .s4 - cp a, 15 - jp c, .s3 - cp a, 18 - jp c, .s2 - cp a, 21 - jp c, .s1 - jp .s0 + jr c, .s1 + jr .s0 .max20 ldh a, [hCurrentLockDelayRemaining] cp a, 2 ret c cp a, 5 - jp c, .s6 + jr c, .s6 cp a, 7 - jp c, .s5 - cp a, 10 - jp c, .s4 - cp a, 12 - jp c, .s3 - cp a, 15 - jp c, .s2 - cp a, 17 - jp c, .s1 - jp .s0 -.max18 - ldh a, [hCurrentLockDelayRemaining] - cp a, 2 - ret c - cp a, 4 - jp c, .s6 - cp a, 6 - jp c, .s5 - cp a, 9 - jp c, .s4 - cp a, 11 - jp c, .s3 - cp a, 13 - jp c, .s2 - cp a, 15 - jp c, .s1 - jp .s0 -.max16 - ldh a, [hCurrentLockDelayRemaining] - cp a, 2 - ret c - cp a, 4 - jp c, .s6 - cp a, 6 - jp c, .s5 - cp a, 8 - jp c, .s4 - cp a, 10 - jp c, .s3 - cp a, 12 - jp c, .s2 - cp a, 14 - jp c, .s1 - jp .s0 -.max14 - ldh a, [hCurrentLockDelayRemaining] - cp a, 2 - ret c - cp a, 4 - jp c, .s6 - cp a, 6 - jp c, .s5 - cp a, 7 - jp c, .s4 - cp a, 9 - jp c, .s3 - cp a, 11 - jp c, .s2 - cp a, 13 - jp c, .s1 - jp .s0 -.max12 - ldh a, [hCurrentLockDelayRemaining] - cp a, 1 - ret c - cp a, 3 - jp c, .s6 - cp a, 4 - jp c, .s5 - cp a, 6 - jp c, .s4 - cp a, 7 - jp c, .s3 - cp a, 9 - jp c, .s2 - cp a, 10 - jp c, .s1 - jp .s0 -.max10 - ldh a, [hCurrentLockDelayRemaining] - cp a, 1 - ret c - cp a, 2 - jp c, .s6 - cp a, 3 jr c, .s5 - cp a, 5 + cp a, 10 jr c, .s4 - cp a, 6 + cp a, 12 jr c, .s3 - cp a, 7 + cp a, 15 jr c, .s2 - cp a, 8 + cp a, 17 jr c, .s1 jr .s0 -.max8 +.max10 ldh a, [hCurrentLockDelayRemaining] cp a, 1 ret c @@ -1702,36 +1578,16 @@ GetTileShade: jr c, .s6 cp a, 3 jr c, .s5 - cp a, 4 - jr c, .s4 cp a, 5 - jr c, .s3 + jr c, .s4 cp a, 6 - jr c, .s2 - cp a, 7 - jr c, .s1 - jr .s0 -.max6 - ldh a, [hCurrentLockDelayRemaining] - cp a, 1 - ret c - cp a, 2 - jr c, .s5 - cp a, 3 jr c, .s3 - cp a, 4 + cp a, 7 jr c, .s2 - cp a, 5 + cp a, 8 jr c, .s1 jr .s0 -.max4 - ldh a, [hCurrentLockDelayRemaining] - cp a, 1 - ret c - cp a, 2 - jr c, .s4 - jr .s0 -.max2 +.max0 jr .s4 .s0 ldh a, [hCurrentPiece] @@ -1974,7 +1830,7 @@ FieldDelay:: ld a, SFX_LINE_CLEAR call SFXEnqueue -: ldh a, [hCurrentARE] +: ldh a, [hCurrentLineARE] ldh [hRemainingDelay], a diff --git a/src/gbc.asm b/src/gbc.asm index 6ee2f68..5125e7a 100644 --- a/src/gbc.asm +++ b/src/gbc.asm @@ -924,9 +924,11 @@ GBCGameplayProcess:: .black ld a, OCPSF_AUTOINC | (7*8)+(3*2) ldh [rOCPS], a - xor a, a + ld bc, R2 | B0 wait_vram + ld a, c ldh [rOCPD], a + ld a, b ldh [rOCPD], a ret diff --git a/src/include/globals.asm b/src/include/globals.asm index 99b39a3..4fb88e8 100644 --- a/src/include/globals.asm +++ b/src/include/globals.asm @@ -119,6 +119,9 @@ DEF SCORE_BASE_Y EQU 115 DEF LEVEL_BASE_X EQU 120 DEF CLEVEL_BASE_Y EQU 136 DEF NLEVEL_BASE_Y EQU 148 +DEF TELLS_BASE_X EQU 154 +DEF TELLS_BASE_Y EQU 64 +DEF TELLS_Y_DIST EQU 10 ; Piece names DEF PIECE_I EQU 0 @@ -153,6 +156,7 @@ DEF TILE_CLEARING EQU 124 DEF TILE_GHOST EQU 125 DEF TILE_SELECTED EQU 193 DEF TILE_UNSELECTED EQU 194 +DEF TILE_BLANK EQU 1 ; Button mode. DEF BUTTON_MODE_NORM EQU 0 @@ -185,6 +189,7 @@ DEF DROP_MODE_NONE EQU 4 DEF DROP_MODE_COUNT EQU 5 ; Speed curve selection. +DEF SCURVE_ENTRY_SIZE EQU 13 DEF SCURVE_DMGT EQU 0 DEF SCURVE_TGM1 EQU 1 DEF SCURVE_TGM3 EQU 2 diff --git a/src/level.asm b/src/level.asm index 23d7c7c..54aa2dc 100644 --- a/src/level.asm +++ b/src/level.asm @@ -25,6 +25,7 @@ INCLUDE "globals.asm" SECTION "High Level Variables", HRAM hCurrentDAS:: ds 1 hCurrentARE:: ds 1 +hCurrentLineARE:: ds 1 hCurrentLockDelay:: ds 1 hCurrentLineClearDelay:: ds 1 hCurrentIntegerGravity:: ds 1 @@ -336,6 +337,8 @@ DoSpeedUp: ld a, [hl+] ldh [hCurrentARE], a ld a, [hl+] + ldh [hCurrentLineARE], a + ld a, [hl+] ldh [hCurrentDAS], a ld a, [hl+] ldh [hCurrentLockDelay], a diff --git a/src/res/sources/tiles.gbr b/src/res/sources/tiles.gbr index d1625a9a1490d5db5c0eeef4c77e9977ea9d112c..aca7510715357bfb1a372e45da5e94e704e121da 100644 GIT binary patch delta 30 mcmaF3f$8A}rVR%a7#TMoRCwyg$T<0-o9gB>`I9x60=NLvpA2RI delta 28 kcmaF3f$8A}rVR%a7@0O7RCww)`GK3-<}>+|HJBI}0K@7G3jhEB diff --git a/src/res/tiles.inc b/src/res/tiles.inc index 7e10909..c5b4202 100644 --- a/src/res/tiles.inc +++ b/src/res/tiles.inc @@ -270,7 +270,7 @@ Tiles:: DB $24,$3C,$24,$3C,$18,$18,$00,$00 DB $FF,$FF,$AA,$FF,$00,$FF,$AA,$55 DB $00,$FF,$55,$FF,$FF,$FF,$00,$00 - DB $DB,$E7,$A5,$C3,$42,$81,$81,$00 + DB $DB,$E7,$A5,$C3,$42,$81,$91,$00 DB $42,$81,$A5,$C3,$DB,$E7,$00,$00 DB $44,$44,$FE,$FE,$44,$44,$44,$44 DB $44,$44,$FE,$FE,$44,$44,$00,$00 diff --git a/src/sprites.asm b/src/sprites.asm index 254d169..4e2de8b 100644 --- a/src/sprites.asm +++ b/src/sprites.asm @@ -30,25 +30,42 @@ wSPRNext1:: ds 4 wSPRNext2:: ds 4 wSPRNext3:: ds 4 wSPRNext4:: ds 4 +wUnused0:: ds 4 +wUnused1:: ds 4 wSPRHold1:: ds 4 wSPRHold2:: ds 4 wSPRHold3:: ds 4 wSPRHold4:: ds 4 +wUnused2:: ds 4 +wUnused3:: ds 4 wSPRScore1:: ds 4 wSPRScore2:: ds 4 wSPRScore3:: ds 4 wSPRScore4:: ds 4 wSPRScore5:: ds 4 wSPRScore6:: ds 4 +wUnused4:: ds 4 +wUnused5:: ds 4 wSPRCLevel1:: ds 4 wSPRCLevel2:: ds 4 wSPRCLevel3:: ds 4 wSPRCLevel4:: ds 4 +wUnused6:: ds 4 +wUnused7:: ds 4 wSPRNLevel1:: ds 4 wSPRNLevel2:: ds 4 wSPRNLevel3:: ds 4 wSPRNLevel4:: ds 4 -wSPRUnused:: ds (16 * 4) +wUnused8:: ds 4 +wUnused9:: ds 4 +wUnusedA:: ds 4 +wUnusedB:: ds 4 +wUnusedC:: ds 4 +wUnusedD:: ds 4 +wSPRModeRNG:: ds 4 +wSPRModeRot:: ds 4 +wSPRModeDrop:: ds 4 +wSPRModeHiG:: ds 4 ENDU @@ -95,6 +112,49 @@ ClearOAM:: SECTION "Domain Specific Functions", ROM0 +ApplyTells:: + ld a, TELLS_BASE_Y + ld [wSPRModeRNG], a + add a, TELLS_Y_DIST + ld [wSPRModeRot], a + add a, TELLS_Y_DIST + ld [wSPRModeDrop], a + add a, TELLS_Y_DIST + ld [wSPRModeHiG], a + + ld a, TELLS_BASE_X + ld [wSPRModeRNG+1], a + ld [wSPRModeRot+1], a + ld [wSPRModeDrop+1], a + ld [wSPRModeHiG+1], a + + ld a, [wRNGModeState] + add a, TILE_RNG_MODE_BASE + ld [wSPRModeRNG+2], a + + ld a, [wRotModeState] + add a, TILE_ROT_MODE_BASE + ld [wSPRModeRot+2], a + + ld a, [wDropModeState] + add a, TILE_DROP_MODE_BASE + ld [wSPRModeDrop+2], a + + ld a, [wAlways20GState] + add a, TILE_HIG_MODE_BASE + ld [wSPRModeHiG+2], a + + ld a, 1 + ld [wSPRModeRNG+3], a + ld a, 3 + ld [wSPRModeRot+3], a + ld a, 4 + ld [wSPRModeDrop+3], a + ld a, 0 + ld [wSPRModeHiG+3], a + ret + + ; Index of next piece in A. ApplyNext:: ; Correct color @@ -105,11 +165,13 @@ ApplyNext:: ; Correct tile add a, TILE_PIECE_0 + add a, 7 ld [wSPRNext1+2], a ld [wSPRNext2+2], a ld [wSPRNext3+2], a ld [wSPRNext4+2], a sub a, TILE_PIECE_0 + sub a, 7 ; X positions ld hl, sPieceXOffsets @@ -176,6 +238,28 @@ ApplyHold:: ld [wSPRHold4+3], a ; Correct tile + ld b, a + ld a, [wInitialA] + cp a, $11 + ld a, b + jr z, .show + ldh a, [hEvenFrame] + cp a, 0 + ld a, b + jr z, .show + + +.hide + ld b, a + ld a, TILE_BLANK + ld [wSPRHold1+2], a + ld [wSPRHold2+2], a + ld [wSPRHold3+2], a + ld [wSPRHold4+2], a + ld a, b + jr .x + +.show add a, TILE_PIECE_0 ld [wSPRHold1+2], a ld [wSPRHold2+2], a @@ -184,6 +268,7 @@ ApplyHold:: sub a, TILE_PIECE_0 ; X positions +.x ld hl, sPieceXOffsets ld de, sPieceYOffsets cp 0 diff --git a/src/sram.asm b/src/sram.asm index d3e5c4f..f481b29 100644 --- a/src/sram.asm +++ b/src/sram.asm @@ -23,7 +23,6 @@ INCLUDE "globals.asm" SECTION "Persistent Globals", SRAM -rMagic:: ds 4 rCheck:: ds 6 rSwapABState:: ds 1 rRNGModeState:: ds 1 @@ -35,16 +34,61 @@ rSelectedStartLevel:: ds 2 SECTION "SRAM Functions", ROM0 +RestoreSRAM:: + ; Check if our SRAM is initialized and of the correct version. + ld a, [rCheck] + cp a, LOW(__UTC_YEAR__) + jr nz, InitializeSRAM + ld a, [rCheck+1] + cp a, __UTC_MONTH__ + jr nz, InitializeSRAM + ld a, [rCheck+2] + cp a, __UTC_DAY__ + jr nz, InitializeSRAM + ld a, [rCheck+3] + cp a, __UTC_HOUR__ + jr nz, InitializeSRAM + ld a, [rCheck+4] + cp a, __UTC_MINUTE__ + jr nz, InitializeSRAM + ld a, [rCheck+5] + cp a, __UTC_SECOND__ + jr nz, InitializeSRAM + + ; SRAM is initialized and for this build, so we can load the data. + ld a, [rSwapABState] + ld [wSwapABState], a + ld a, [rRNGModeState] + ld [wRNGModeState], a + ld a, [rRotModeState] + ld [wRotModeState], a + ld a, [rDropModeState] + ld [wDropModeState], a + ld a, [rSpeedCurveState] + ld [wSpeedCurveState], a + ld a, [rAlways20GState] + ld [wAlways20GState], a + + ld a, [rSelectedStartLevel] + ldh [hStartSpeed], a + ld a, [rSelectedStartLevel+1] + ldh [hStartSpeed+1], a + ret + InitializeSRAM: ; Set the magic id. - ld a, SAVE_MAGIC_0 - ld [rMagic], a - ld a, SAVE_MAGIC_1 - ld [rMagic+1], a - ld a, SAVE_MAGIC_2 - ld [rMagic+2], a - ld a, SAVE_MAGIC_3 - ld [rMagic+3], a + ld a, LOW(__UTC_YEAR__) + ld [rCheck], a + ld a, __UTC_MONTH__ + ld [rCheck+1], a + ld a, __UTC_DAY__ + ld [rCheck+2], a + ld a, __UTC_HOUR__ + ld [rCheck+3], a + ld a, __UTC_MINUTE__ + ld [rCheck+4], a + ld a, __UTC_SECOND__ + ld [rCheck+5], a ; Load defaults. ld a, BUTTON_MODE_NORM @@ -70,26 +114,9 @@ InitializeSRAM: ld a, HIG_MODE_OFF ld [rAlways20GState], a ld [wAlways20GState], a - ; Falls through to the next label! - - -PartiallyInitializeSRAM: - ; Save build data. - ld a, LOW(__UTC_YEAR__) - ld [rCheck], a - ld a, __UTC_MONTH__ - ld [rCheck+1], a - ld a, __UTC_DAY__ - ld [rCheck+2], a - ld a, __UTC_HOUR__ - ld [rCheck+3], a - ld a, __UTC_MINUTE__ - ld [rCheck+4], a - ld a, __UTC_SECOND__ - ld [rCheck+5], a ; Set to the default start level. - ld hl, sSpeedCurve + ld hl, sDMGTSpeedCurve ld a, l ldh [hStartSpeed], a ld [rSelectedStartLevel], a @@ -98,63 +125,4 @@ PartiallyInitializeSRAM: ld [rSelectedStartLevel+1], a ret - -RestoreSRAM:: - ; Check if our SRAM is initialized at all. - ; If not, we load all the defaults. - ld a, [rMagic] - cp a, SAVE_MAGIC_0 - jr nz, InitializeSRAM - ld a, [rMagic+1] - cp a, SAVE_MAGIC_1 - jr nz, InitializeSRAM - ld a, [rMagic+2] - cp a, SAVE_MAGIC_2 - jp nz, InitializeSRAM - ld a, [rMagic+3] - cp a, SAVE_MAGIC_3 - jp nz, InitializeSRAM - - ; If SRAM is initialized, we still need to check if it's for this exact build. - ; If not, wipe data that is no longer valid. - ld a, [rCheck] - cp a, LOW(__UTC_YEAR__) - jr nz, PartiallyInitializeSRAM - ld a, [rCheck+1] - cp a, __UTC_MONTH__ - jr nz, PartiallyInitializeSRAM - ld a, [rCheck+2] - cp a, __UTC_DAY__ - jr nz, PartiallyInitializeSRAM - ld a, [rCheck+3] - cp a, __UTC_HOUR__ - jr nz, PartiallyInitializeSRAM - ld a, [rCheck+4] - cp a, __UTC_MINUTE__ - jr nz, PartiallyInitializeSRAM - ld a, [rCheck+5] - cp a, __UTC_SECOND__ - jr nz, PartiallyInitializeSRAM - - ; SRAM is initialized and for this build, so we can load the data. - ld a, [rSwapABState] - ld [wSwapABState], a - ld a, [rRNGModeState] - ld [wRNGModeState], a - ld a, [rRotModeState] - ld [wRotModeState], a - ld a, [rDropModeState] - ld [wDropModeState], a - ld a, [rSpeedCurveState] - ld [wSpeedCurveState], a - ld a, [rAlways20GState] - ld [wAlways20GState], a - - ld a, [rSelectedStartLevel] - ldh [hStartSpeed], a - ld a, [rSelectedStartLevel+1] - ldh [hStartSpeed+1], a - ret - - ENDC diff --git a/src/state_gameplay.asm b/src/state_gameplay.asm index b1bc142..397927f 100644 --- a/src/state_gameplay.asm +++ b/src/state_gameplay.asm @@ -63,27 +63,10 @@ SwitchToGameplay:: ld bc, GameplayTilemapEnd - GameplayTilemap call UnsafeMemCopy - ; Place a tell on the screen for modes. - ld hl, FIELD_RNG - ld a, [wRNGModeState] - add a, TILE_RNG_MODE_BASE - ld [hl], a - ld hl, FIELD_ROT - ld a, [wRotModeState] - add a, TILE_ROT_MODE_BASE - ld [hl], a - ld hl, FIELD_DROP - ld a, [wDropModeState] - add a, TILE_DROP_MODE_BASE - ld [hl], a - ld hl, FIELD_HIG - ld a, [wAlways20GState] - add a, TILE_HIG_MODE_BASE - ld [hl], a - ; Clear OAM. call ClearOAM call SetNumberSpritePositions + call ApplyTells ; Set up the palettes. ld a, PALETTE_REGULAR @@ -473,6 +456,32 @@ preGameOverMode: ld [hl+], a .skip7\@ ENDR + + ; Place a tell on the screen for modes. + ld hl, FIELD_RNG + wait_vram + ld a, [wRNGModeState] + add a, TILE_RNG_MODE_BASE + ld [hl], a + + ld hl, FIELD_ROT + wait_vram + ld a, [wRotModeState] + add a, TILE_ROT_MODE_BASE + ld [hl], a + + ld hl, FIELD_DROP + wait_vram + ld a, [wDropModeState] + add a, TILE_DROP_MODE_BASE + ld [hl], a + + ld hl, FIELD_HIG + wait_vram + ld a, [wAlways20GState] + add a, TILE_HIG_MODE_BASE + ld [hl], a + ld a, MODE_GAME_OVER ldh [hMode], a diff --git a/src/state_title.asm b/src/state_title.asm index 0dc5cf9..7fd6bd2 100644 --- a/src/state_title.asm +++ b/src/state_title.asm @@ -313,7 +313,7 @@ DecrementLevel: ld l, a ldh a, [hStartSpeed+1] ld h, a - ld bc, -12 + ld bc, -SCURVE_ENTRY_SIZE add hl, bc ld a, l ldh [hStartSpeed], a @@ -428,7 +428,7 @@ IncrementLevel: ld l, a ldh a, [hStartSpeed+1] ld h, a - ld bc, 12 + ld bc, SCURVE_ENTRY_SIZE add hl, bc ld a, l ldh [hStartSpeed], a @@ -457,7 +457,7 @@ GetEnd: ld a, [wSpeedCurveState] cp a, SCURVE_DMGT jr nz, :+ - ld bc, sSpeedCurveEnd + ld bc, sDMGTSpeedCurveEnd ret : cp a, SCURVE_TGM1 jr nz, :+ @@ -482,7 +482,7 @@ GetStart: ld a, [wSpeedCurveState] cp a, SCURVE_DMGT jr nz, :+ - ld hl, sSpeedCurve + ld hl, sDMGTSpeedCurve ret : cp a, SCURVE_TGM1 jr nz, :+ @@ -521,7 +521,7 @@ CheckLevelRange: ldh [hStartSpeed+1], a .notatend - ld de, -12 + ld de, -SCURVE_ENTRY_SIZE call GetStart add hl, de