From 2c5ee3049be717a8289d4bb34be11070b615f7ae Mon Sep 17 00:00:00 2001 From: Randy Thiemann Date: Tue, 24 Oct 2023 22:21:48 +0200 Subject: [PATCH] Fix scoring --- .vscode/launch.json | 1 + DMGTRIS.GBC | Bin 32768 -> 32768 bytes src/field.asm | 137 ++++++++++++++++---------------------- src/gbc.asm | 83 ++++++++++++++++++++--- src/level.asm | 9 ++- src/main.asm | 14 +++- src/res/sources/tiles.gbr | Bin 39009 -> 39009 bytes src/res/tiles.inc | 4 +- src/state_title.asm | 13 +++- 9 files changed, 165 insertions(+), 96 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index f009285..38a3f7a 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -9,6 +9,7 @@ "request": "launch", "name": "Launch in Emulicious", "program": "${workspaceFolder}\\bin\\DMGTRIS.gbc", + "emuliciousPath": "K:\\TGM\\dmgtris\\tools", "port": 58870, "stopOnEntry": false, "preLaunchTask": "buildrom" diff --git a/DMGTRIS.GBC b/DMGTRIS.GBC index 4f6fe55086b7b9aa2b51d860564486b8eac6d90e..9941386cdde1a342f61136d91cc6713914657bc5 100644 GIT binary patch delta 5002 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 diff --git a/src/field.asm b/src/field.asm index 040aa2e..6d14a17 100644 --- a/src/field.asm +++ b/src/field.asm @@ -54,8 +54,8 @@ hClearedLines: ds 4 hLineClearCt: ds 1 hComboCt: ds 1 hLockDelayForce: ds 1 -hHighestStack: ds 1 hDownFrames: ds 1 +hAwardDownBonus: ds 1 hStalePiece: ds 1 hBravo: ds 1 @@ -64,8 +64,6 @@ SECTION "Field Functions", ROM0 FieldInit:: xor a, a ldh [hBravo], a - ld a, 23 - ldh [hHighestStack], a ld a, 1 ldh [hComboCt], a ld hl, wField @@ -528,6 +526,7 @@ TrySpawnPiece:: xor a, a ldh [hStalePiece], a ldh [hDownFrames], a + ldh [hAwardDownBonus], a ldh [hLockDelayForce], a ldh a, [hCurrentLockDelay] ldh [hCurrentLockDelayRemaining], a @@ -682,33 +681,6 @@ FindMaxG: ldh a, [hCurrentPieceX] call XYToSFieldPtr -;DEF EXPERIMENTAL_OPTIMIZATION EQU 1 -IF DEF(EXPERIMENTAL_OPTIMIZATION) - ; The stack height marker gives a lower bound to how far the piece can fall. - ldh a, [hHighestStack] - sub a, 4 - ld b, a - ld a, [hCurrentPieceY] - cp a, b - jr nc, .unoptimized ; If our piece is already past that, we can't optimize. - - ; But if we're NOT, that means we can assume a minimum fall distance! -.optimized - ld c, a - ld a, b - sub a, c - inc a - ldh [hActualG], a - dec a - ld de, 14 -: add hl, de - dec a - jr nz, :- - push hl - jr .try -ENDC - -.unoptimized push hl ld a, 1 ldh [hActualG], a @@ -1212,7 +1184,10 @@ FieldProcess:: ; ************************************************************** ; HANDLE UP - ; Is a hard/sonic drop requested? + ; Is a hard/sonic drop requested? Skip if in 20G mode. + ldh a, [hCurrentGravityPerTick] + cp a, 20 + jr z, .postdrop ldh a, [hUpState] cp a, 0 jr z, .postdrop @@ -1226,9 +1201,8 @@ FieldProcess:: ; Sonic drop. .sonicdrop - ldh a, [hDownFrames] - add a, 10 - ldh [hDownFrames], a + ld a, $FF + ldh [hAwardDownBonus], a ld a, 20 ldh [hWantedG], a ldh a, [hTicksUntilG] @@ -1241,9 +1215,8 @@ FieldProcess:: ; Hard drop. .harddrop - ldh a, [hDownFrames] - add a, 10 - ldh [hDownFrames], a + ld a, $FF + ldh [hAwardDownBonus], a ld a, 20 ld b, a ldh a, [hActualG] @@ -1423,7 +1396,7 @@ FieldProcess:: jr z, .ghost ldh a, [hEvenFrame] cp a, 1 - jr nz, :+ + jr nz, .postghost .ghost ldh a, [hYPosAtStartOfFrame] @@ -1444,8 +1417,8 @@ FieldProcess:: pop de call DrawPiece - ; If the lock delay is at the highest value, draw the piece normally. .postghost + ; If the lock delay is at the highest value, draw the piece normally. ldh a, [hCurrentPiece] ld b, TILE_PIECE_0 add a, b @@ -1463,19 +1436,10 @@ FieldProcess:: ldh [hWantedTile], a ldh a, [hCurrentLockDelayRemaining] cp a, 0 - jr nz, :+ - - ; Check if the stack usage went up. - ldh a, [hHighestStack] - ld b, a - ldh a, [hCurrentPieceY] - cp a, b - jr nc, .drawpiece - ldh [hHighestStack], a - jr .drawpiece + jr z, .drawpiece ; Otherwise, look it up. -: call GetTileShade + call GetTileShade .drawpiece ldh a, [hCurrentPieceY] @@ -1857,37 +1821,64 @@ FieldDelay:: ld c, a xor a, a ld b, a + + ; Lock bonus? + ldh a, [hAwardDownBonus] + cp a, $FF + jr nz, .premultiplier + ld a, 10 + add a, c + ld c, a + + ; Final total pre-multipliers. +.premultiplier add hl, bc - ; Copy the running total. + ; Copy the running total for multiplication. ld b, h ld c, l - ; Get a multiplier consisting of... - xor a, a - ld d, a - - ldh a, [hBravo] ; 4 if the field is empty and... + ; Do we have a bravo? x4 if so. +.bravo + ldh a, [hBravo] cp a, 0 - jr nz, :+ - ld a, 4 - ld d, a + jr nz, .lineclears + add hl, bc + add hl, bc + add hl, bc + ld b, h + ld c, l -: ldh a, [hLineClearCt] ; The number of lines cleared and... - add a, d - ld d, a - - ldh a, [hComboCt] ; The combo count. + ; x line clears +.lineclears + ldh a, [hLineClearCt] dec a - add a, d - - ; Multiply the running total by the multiplier. + jr z, .combo : add hl, bc dec a - cp a, 0 jr nz, :- + ld b, h + ld c, l + + ; x combo +.combo + ldh a, [hComboCt] + dec a + jr z, .applyscore +: add hl, bc + jr c, .forcemax + dec a + jr nz, :- + jr .applyscore + + ; Overflow = 65535 +.forcemax + ld a, $FF + ld h, a + ld l, a ; And apply the score. +.applyscore ld a, l ldh [hScoreIncrement], a ld a, h @@ -2078,9 +2069,6 @@ ClearLines: ; If it does, increment the clearing counter, but skip this line. jr nz, .clear\@ - ldh a, [hHighestStack] - inc a - ldh [hHighestStack], a inc de inc de inc de @@ -2136,13 +2124,6 @@ ClearLines: DEF row -= 1 ENDR - ; Check if the stack marker is out of bounds. - ldh a, [hHighestStack] - cp a, 23 - jr c, .fixgarbo - ld a, 23 - ldh [hHighestStack], a - ; Make sure there's no garbage in the top de lines. .fixgarbo ld hl, wField diff --git a/src/gbc.asm b/src/gbc.asm index a588098..eaa1179 100644 --- a/src/gbc.asm +++ b/src/gbc.asm @@ -460,7 +460,7 @@ GBCGameplayInit:: ldh [rOCPD], a ; Pal 2 (purple, S) - ld bc, R3 | B3 + ld bc, R2 | B3 ld a, c ldh [rBCPD], a ldh [rOCPD], a @@ -468,7 +468,7 @@ GBCGameplayInit:: ldh [rBCPD], a ldh [rOCPD], a - ld bc, R2 | B2 + ld bc, R1 | B2 ld a, c ldh [rBCPD], a ldh [rOCPD], a @@ -476,7 +476,7 @@ GBCGameplayInit:: ldh [rBCPD], a ldh [rOCPD], a - ld bc, R1 | B1 + ld bc, R0 | B1 ld a, c ldh [rBCPD], a ldh [rOCPD], a @@ -734,16 +734,44 @@ GBCGameplayProcess:: cp a, $11 ret nz - ; 20G? + ; Color based on mode. + ld a, [wSpeedCurveState] + cp a, SCURVE_DMGT + ld a, $03 ;Blue + jr z, .higoverride + ld a, [wSpeedCurveState] + cp a, SCURVE_TGM1 + ld a, $05 ;Yellow + jr z, .higoverride + ld a, [wSpeedCurveState] + cp a, SCURVE_TGM3 + ld a, $04 ;Orange + jr z, .higoverride + ld a, [wSpeedCurveState] + cp a, SCURVE_DEAT + ld a, $06 ;Cyan + jr z, .higoverride + ld a, [wSpeedCurveState] + cp a, SCURVE_SHIR + ld a, $00 ;Red + jr z, .colorfield ;Always red + ld a, [wSpeedCurveState] + cp a, SCURVE_CHIL + ld a, $01 ;Green + jr z, .higoverride + + ; Are we 20G? +.higoverride + ld d, a ldh a, [hCurrentGravityPerTick] cp a, 20 - jr nz, :+ + jr nz, .colorfield + + ; Strobe the frame. ld a, $00 - jr .colorfield -: ld a, $03 + ld d, a .colorfield - ld d, a ld hl, wShadowTileAttrs ld bc, 32-12 @@ -861,6 +889,45 @@ GBCGameplayProcess:: dec a ld [wOuterReps], a jr nz, .outer2 + + ; Maybe flash numbers. + ldh a, [hCurrentGravityPerTick] + cp a, 20 + jr nz, .black + + ld hl, hFrameCtr + bit 1, [hl] + jr z, .lighter + +.darker + ld a, OCPSF_AUTOINC | (7*8)+(3*2) + ldh [rOCPS], a + ld bc, R2 | G2 + wait_vram + ld a, c + ldh [rOCPD], a + ld a, b + ldh [rOCPD], a + ret + +.lighter + ld a, OCPSF_AUTOINC | (7*8)+(3*2) + ldh [rOCPS], a + ld bc, R3 | G3 + wait_vram + ld a, c + ldh [rOCPD], a + ld a, b + ldh [rOCPD], a + ret + +.black + ld a, OCPSF_AUTOINC | (7*8)+(3*2) + ldh [rOCPS], a + xor a, a + wait_vram + ldh [rOCPD], a + ldh [rOCPD], a ret diff --git a/src/level.asm b/src/level.asm index 0d2a77c..ceba027 100644 --- a/src/level.asm +++ b/src/level.asm @@ -137,9 +137,9 @@ LevelUp:: add a, l ld l, a adc a, h - sub l + sub a, l ldh [hLevel+1], a - ld l, a + ld a, l ldh [hLevel], a ; Save the current hundred digit. @@ -191,6 +191,11 @@ LevelUp:: ldh [hCLevel+1], a ldh [hCLevel+2], a ldh [hCLevel+3], a + ld hl, 9999 + ld a, l + ldh [hLevel], a + ld a, h + ldh [hLevel+1], a call DoSpeedUp ld a, SFX_RANKUP call SFXEnqueue diff --git a/src/main.asm b/src/main.asm index f44747a..0599344 100644 --- a/src/main.asm +++ b/src/main.asm @@ -53,6 +53,7 @@ rRotModeState:: ds 1 rDropModeState:: ds 1 rSpeedCurveState:: ds 1 rAlways20GState:: ds 1 +rSelectedStartLevel:: ds 2 SECTION "Stack", WRAM0 @@ -122,7 +123,7 @@ Main:: cp a, "G" jr nz, .nosavedata ld a, [rMagic+3] - cp a, "0" + cp a, "1" jr nz, .nosavedata .savedata @@ -138,6 +139,10 @@ Main:: ld [wSpeedCurveState], a ld a, [rAlways20GState] ld [wAlways20GState], a + ld a, [rSelectedStartLevel] + ldh [hStartSpeed], a + ld a, [rSelectedStartLevel+1] + ldh [hStartSpeed+1], a jr .otherinit .nosavedata @@ -147,7 +152,7 @@ Main:: ld [rMagic+1], a ld a, "G" ld [rMagic+2], a - ld a, "0" + ld a, "1" ld [rMagic+3], a ld a, BUTTON_MODE_NORM @@ -178,12 +183,15 @@ Main:: ld [rAlways20GState], a ld [wAlways20GState], a -.otherinit ld hl, sSpeedCurve ld a, l ldh [hStartSpeed], a + ld [rSelectedStartLevel], a ld a, h ldh [hStartSpeed+1], a + ld [rSelectedStartLevel+1], a + +.otherinit call TimeInit call IntrInit call InputInit diff --git a/src/res/sources/tiles.gbr b/src/res/sources/tiles.gbr index 885ea18d999d0c2c9b216077236e4809f8d58278..11afa881838b455d918908d2d877b3a5fa1b6bb7 100644 GIT binary patch delta 49 ocmaF3f$8A}rVT<9_?ej*zyL^r&}2h75k80jGZbugo*>5o0PiseVgLXD delta 26 gcmaF3f$8A}rVT<9CNm2OGXue7K`G_U-V?+)0Do!+%>V!Z diff --git a/src/res/tiles.inc b/src/res/tiles.inc index f1ec1ea..e8b011b 100644 --- a/src/res/tiles.inc +++ b/src/res/tiles.inc @@ -530,8 +530,8 @@ Tiles:: DB $4A,$4A,$4A,$4A,$E4,$E4,$00,$00 DB $CA,$CA,$2A,$2A,$2A,$2A,$4E,$4E DB $82,$82,$82,$82,$E2,$E2,$00,$00 - DB $FE,$FE,$06,$06,$0C,$0C,$38,$38 - DB $60,$60,$C0,$C0,$FE,$FE,$00,$00 + DB $FF,$FF,$81,$81,$24,$24,$3C,$3C + DB $24,$24,$81,$81,$FF,$FF,$00,$00 TilesEnd:: diff --git a/src/state_title.asm b/src/state_title.asm index b07e9eb..a22860c 100644 --- a/src/state_title.asm +++ b/src/state_title.asm @@ -114,9 +114,6 @@ SwitchToTitle:: ; GBC init call GBCTitleInit - ; Make sure the speed curve is aimed at the right place. - call InitSpeedCurve - ; Install the event loop handlers. ld a, 0 ldh [hGameState], a @@ -301,8 +298,10 @@ DecrementLevel: add hl, bc ld a, l ldh [hStartSpeed], a + ld [rSelectedStartLevel], a ld a, h ldh [hStartSpeed+1], a + ld [rSelectedStartLevel+1], a jp CheckLevelRange @@ -414,8 +413,10 @@ IncrementLevel: add hl, bc ld a, l ldh [hStartSpeed], a + ld [rSelectedStartLevel], a ld a, h ldh [hStartSpeed+1], a + ld [rSelectedStartLevel+1], a jp CheckLevelRange InitSpeedCurve: @@ -425,8 +426,10 @@ InitSpeedCurve: .set ld a, l ldh [hStartSpeed], a + ld [rSelectedStartLevel], a ld a, h ldh [hStartSpeed+1], a + ld [rSelectedStartLevel+1], a ret @@ -492,8 +495,10 @@ CheckLevelRange: jr nz, .notatend call GetStart ld a, l + ld [rSelectedStartLevel], a ldh [hStartSpeed], a ld a, h + ld [rSelectedStartLevel+1], a ldh [hStartSpeed+1], a .notatend @@ -513,8 +518,10 @@ CheckLevelRange: ld l, c add hl, de ld a, l + ld [rSelectedStartLevel], a ldh [hStartSpeed], a ld a, h + ld [rSelectedStartLevel+1], a ldh [hStartSpeed+1], a .notatstart