Skip to content

Commit b22f294

Browse files
committed
Merge branch 'lowstack_chr' into lowstack
2 parents ec94c24 + aab6c4a commit b22f294

33 files changed

+934
-231
lines changed

.gitignore

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,3 @@ tetris.map
1111
tetris.dbg
1212
release/*
1313
target
14-
15-
!src/nametables/enter_high_score_nametable.bin
16-
!src/nametables/game_nametable.bin
17-
!src/nametables/game_type_menu_nametable.bin
18-
!src/nametables/level_menu_nametable.bin

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# Changelog
22

33
## [unreleased]
4+
* Crash Behaviours
45
* Crunch Mode
56
* Marathon Mode
67
* Hidden Score Mode
@@ -13,7 +14,9 @@
1314
* Fixed ingame score display at 8 million with Classic Scoring
1415
* Fixed CNROM legal screen CHR bank
1516
* Fixed CNROM legal to title flicker
17+
* Fixed piece skip when doing Sonic Drop then Hard Drop immediately
1618
* Block Tool pieces wrap around
19+
* Always Next Box removed
1720
* 0001 seeds are ignored
1821
* Famicom Keyboard support
1922
* MMC3 Support

README.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ Like in the original ROM, holding `a` `b` `select` and then pressing `start` wil
7777

7878
![Tetris](./assets/screens/levelmenu.png)
7979

80-
Same gameplay as A-Type, with some improvements: no score cap, no rocket, no curtain, no music, always next box, better pause, start on any level.
80+
Same gameplay as A-Type, with some improvements: no score cap, no rocket, no curtain, no music, better pause, start on any level.
8181

8282
### T-Spins
8383

@@ -197,7 +197,11 @@ Setting the value to G causes the mode to act identical to the game genie code `
197197

198198
### Marathon
199199

200-
Play as long as you are able to survive at a consistent speed. While the level will increase normally, the drop rate and the points rewarded will remain fixed based on the starting level.
200+
Play as long as you are able to survive at a consistent speed.
201+
202+
0. Level transitions do not happen, game remains on the same level for as long as you are able to survive.
203+
1. Levels will transition normally, but speed and points will remain fixed based on your starting level.
204+
2. Similar to 1, speed and points will remain fixed based on the starting level you choose, but actual game will begin at level 0.
201205

202206
### Garbage
203207

src/constants.asm

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ MODE_INVISIBLE
7777
MODE_HARDDROP
7878
MODE_SPEED_TEST
7979
MODE_SCORE_DISPLAY
80+
MODE_CRASH
8081
MODE_HZ_DISPLAY
8182
MODE_INPUT_DISPLAY
8283
MODE_DISABLE_FLASH
@@ -104,11 +105,16 @@ LINECAP_FLOOR := 2
104105
LINECAP_INVISIBLE := 3
105106
LINECAP_HALT := 4
106107

108+
CRASH_SHOW := 0
109+
CRASH_TOPOUT := 1
110+
CRASH_CRASH := 2
111+
CRASH_OFF := 3
112+
107113
LINECAP_WHEN_STRING_OFFSET := $10
108114
LINECAP_HOW_STRING_OFFSET := $12
109115

110116
MENU_SPRITE_Y_BASE := $47
111-
MENU_MAX_Y_SCROLL := $78
117+
MENU_MAX_Y_SCROLL := $80
112118
MENU_TOP_MARGIN_SCROLL := 7 ; in blocks
113119

114120
; menuConfigSizeLookup
@@ -125,7 +131,7 @@ MENU_TOP_MARGIN_SCROLL := 7 ; in blocks
125131
.byte $F ; MODE_CRUNCH
126132
.byte $20 ; MODE_TAP
127133
.byte $10 ; MODE_TRANSITION
128-
.byte $0 ; MODE_MARATHON
134+
.byte $2 ; MODE_MARATHON
129135
.byte $1F ; MODE_TAPQTY
130136
.byte $8 ; MODE_CHECKERBOARD
131137
.byte $4 ; MODE_GARBAGE
@@ -137,6 +143,7 @@ MENU_TOP_MARGIN_SCROLL := 7 ; in blocks
137143
.byte $0 ; MODE_HARDDROP
138144
.byte $0 ; MODE_SPEED_TEST
139145
.byte $5 ; MODE_SCORE_DISPLAY
146+
.byte $3 ; MODE_CRASH
140147
.byte $1 ; MODE_HZ_DISPLAY
141148
.byte $1 ; MODE_INPUT_DISPLAY
142149
.byte $1 ; MODE_DISABLE_FLASH

src/gamemode/gametypemenu/menu.asm

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ gameMode_gameTypeMenu:
99
jsr calc_menuScrollY
1010
sta menuScrollY
1111
lda #0
12-
sta displayNextPiece
12+
sta hideNextPiece
1313
RESET_MMC1
1414
.if HAS_MMC
1515
; switch to blank charmap
@@ -488,15 +488,16 @@ menuYTmp := tmp2
488488
cmp #MODE_SCORE_DISPLAY
489489
beq @renderScoreName
490490

491+
cmp #MODE_CRASH
492+
beq @renderCrashMode
493+
494+
495+
jsr menuItemY16Offset
496+
bne @loopNext
497+
txa
498+
491499
ldx oamStagingLength
492500

493-
; get Y offset
494-
lda menuCounter
495-
asl
496-
asl
497-
asl
498-
adc #MENU_SPRITE_Y_BASE + 1
499-
sbc menuScrollY
500501
sta oamStaging, x
501502
inx
502503
lda menuVars, y
@@ -547,6 +548,26 @@ menuYTmp := tmp2
547548
jsr stringSpriteAlignRight
548549
jmp @loopNext
549550

551+
@renderCrashMode:
552+
jsr menuItemY16Offset
553+
bne @loopNext
554+
@doRender:
555+
lda crashModifier
556+
cmp #CRASH_OFF
557+
bne @notOff
558+
lda #$F1
559+
@notOff:
560+
adc #$16
561+
sta spriteIndexInOamContentLookup
562+
lda #(MODE_CRASH*8) + MENU_SPRITE_Y_BASE + 1
563+
sec
564+
sbc menuScrollY
565+
sta spriteYOffset
566+
lda #$e9
567+
sta spriteXOffset
568+
jsr stringSpriteAlignRight
569+
jmp @loopNext
570+
550571
; <- menu item index in A
551572
; -> high byte of offset in A
552573
; -> low byte in X

src/gamemode/levelmenu.asm

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,14 @@ levelMenuCheckStartGame:
132132
sta startLevel
133133
@startGame:
134134
; lda startLevel
135+
ldy practiseType
136+
cpy #MODE_MARATHON
137+
bne @noLevelModification
138+
ldy marathonModifier
139+
cpy #2 ; marathon mode 2 starts at level 0
140+
bne @noLevelModification
141+
lda #0
142+
@noLevelModification:
135143
sta levelNumber
136144
lda #$00
137145
sta gameModeState
@@ -157,16 +165,14 @@ levelMenuCheckGoBack:
157165
shredSeedAndContinue:
158166
; seed shredder
159167
@chooseRandomHole_player1:
160-
ldx #$17
161-
ldy #$02
168+
ldx #rng_seed
162169
jsr generateNextPseudorandomNumber
163170
lda rng_seed
164171
and #$0F
165172
cmp #$0A
166173
bpl @chooseRandomHole_player1
167174
@chooseRandomHole_player2:
168-
ldx #$17
169-
ldy #$02
175+
ldx #rng_seed
170176
jsr generateNextPseudorandomNumber
171177
lda rng_seed
172178
and #$0F

src/gamemodestate/initstate.asm

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ gameModeState_initGameState:
1313
lda #$05
1414
sta tetriminoX
1515

16+
;init for crash frame parity
17+
lda frameCounter
18+
and #$01
19+
sta startParity
20+
1621
; set seed init
1722
lda set_seed_input
1823
sta set_seed
@@ -98,7 +103,6 @@ gameModeState_initGameState:
98103
sta currentPiece
99104
jsr incrementPieceStat
100105
ldx #rng_seed
101-
ldy #$02
102106
jsr generateNextPseudorandomNumber
103107
jsr chooseNextTetrimino
104108
sta nextPiece
@@ -264,8 +268,7 @@ L87E7: lda generalCounter
264268
sta vramRow
265269
lda #$09
266270
sta generalCounter3
267-
L87FC: ldx #$17
268-
ldy #$02
271+
L87FC: ldx #rng_seed
269272
jsr generateNextPseudorandomNumber
270273
lda rng_seed
271274
and #$07
@@ -284,8 +287,7 @@ L87FC: ldx #$17
284287
dec generalCounter3
285288
jmp L87FC
286289

287-
L8824: ldx #$17
288-
ldy #$02
290+
L8824: ldx #rng_seed
289291
jsr generateNextPseudorandomNumber
290292
lda rng_seed
291293
and #$0F

src/gamemodestate/updatecounters.asm

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ gameModeState_updateCountersAndNonPlayerState:
66
; next code makes acc behave as normal
77
; (dont edit unless you know what you're doing)
88
lda newlyPressedButtons_player1
9-
and #$20
9+
and #BUTTON_SELECT
1010
beq @ret
11-
lda displayNextPiece
11+
lda hideNextPiece
1212
eor #$01
13-
sta displayNextPiece
13+
sta hideNextPiece
1414
@ret: inc gameModeState ; 3
1515
rts

src/modes/tspins.asm

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@ advanceGameTSpins_actual:
7070

7171
generateNewTSpin:
7272
ldx #rng_seed
73-
ldy #$2
7473
jsr generateNextPseudorandomNumber
7574
lda rng_seed
7675
tax

src/nametables/enter_high_score.js

Lines changed: 32 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
const {
2-
readStripe,
32
writeRLE,
4-
printNT,
3+
blankNT,
54
drawTiles,
65
drawAttrs,
76
flatLookup,
87
} = require('./nametables');
98

109

11-
const buffer = readStripe(__dirname + '/enter_high_score_nametable.bin');
10+
const buffer = blankNT();
1211

1312
let lookup = flatLookup(`
1413
0123456789ABCDEF
@@ -29,41 +28,37 @@ ui!###g@######()
2928
###############
3029
`);
3130

32-
lookup = [...lookup].map((d, i) => d === '#' ? String.fromCharCode(9472 + i) : d).join``;
33-
34-
printNT(buffer, lookup);
35-
3631
drawTiles(buffer, lookup, `
37-
################################
38-
#qwwwwwwwwwwwwwwwwwwwwwwwwwwwwe#
39-
#a d#
40-
#a d#
41-
#a d#
42-
#a d#
43-
#a GOOD GAME d#
44-
#a d#
45-
#a d#
46-
#a d#
47-
#a YOU ARE A d#
48-
#a d#
49-
#a TETRIS MASTER# d#
50-
#a d#
51-
#a d#
52-
#a PLEASE ENTER YOUR NAME d#
53-
#a d#
54-
#a rtttttttttttttttttttttttty d#
55-
#a fNAME SCORE LNS LVh d#
56-
#a jbbbbbbbbbbbbbbbbbbbbbbbbl d#
57-
#a f h d#
58-
#a f h d#
59-
#a f h d#
60-
#a f h d#
61-
#a f h d#
62-
#a f h d#
63-
#a vbbbbbbbbbbbbbbbbbbbbbbbbn d#
64-
#a d#
65-
#zxxxxxxxxxxxxxxxxxxxxxxxxxxxxc#
66-
################################
32+
╲▂╢╢╢▀░▀╃▃╢╲╠╡▂▐▃╲▐▁▃▂╢▂╢╲╢▀▁▁▃╲
33+
qwwwwwwwwwwwwwwwwwwwwwwwwwwwwe
34+
a d
35+
a d
36+
a d
37+
a d
38+
a GOOD GAME d
39+
a d
40+
a d
41+
a d
42+
a YOU ARE A d
43+
a d
44+
a TETRIS MASTER. d
45+
a d
46+
a d
47+
a PLEASE ENTER YOUR NAME d
48+
a d
49+
a rtttttttttttttttttttttttty d
50+
a fNAME SCORE LNS LVh d
51+
a jbbbbbbbbbbbbbbbbbbbbbbbbl d
52+
a f h d
53+
a f h d
54+
a f h d
55+
a f h d
56+
a f h d
57+
a f h d
58+
a vbbbbbbbbbbbbbbbbbbbbbbbbn d
59+
a d
60+
zxxxxxxxxxxxxxxxxxxxxxxxxxxxxc
61+
╰╱╰╱▐▃▀▁□╲■▁▃▂╀▃▂▀╂╀▃▀░▀╂╲╢╰╱╲▂╢
6762
`);
6863

6964
drawAttrs(buffer, [`

0 commit comments

Comments
 (0)