Chain
A run of clears set off by one piece, as cells freed by one clear fall into another.
On this page
A chain is a series of clears from one piece: the cells a clear frees fall and complete another. It needs a board where single cells fall. In Dr. Mario they do, and the game checks again after each fall1; each virus a pill clears scores double the one before, up to 32 times the first2. In NES Tetris rows move down whole, so no chain can happen3.
- NoneTetris (NES) (1989). Rows move down whole, so one clear can't set off another.3
- CascadeDr. Mario (NES) (1990). Freed halves fall and are checked again; each virus from one pill scores double the one before, up to 32 times the first.1,2
Games
| Game | Year | How | Note |
|---|---|---|---|
| Dr. Mario (NES) | 1990 | Cascade | freed halves fall and are checked again; each virus from one pill scores double the one before, up to 32 times the first |
| Yoshi's Cookie | 1992 | Cascade | the rows above a clear drop, the columns to its right close up, and a line that forms clears in turn |
Every claim about this mechanic, by game (2)
References
- ^ abWhen a clear happens,
updateFieldsends the placed pill's steps back tocheckDrop, which lets unsupported halves fall, and the match checks run again, so one pill can set off a chain of clears.CodeNostaljipi/dr-mario-disassemblyHow we know
1478 lda currentP_matchFlag ;Check if there was a match (and thus if we need to process drops and further field update) ⋮ 1481 lda #pillPlaced_nextStep1 ;If there was a match, we need to update the field again to process the impacts of this match (ex: pill drops) ⋮ 1485 sta currentP_pillPlacedStep
prg/drmario_prg_game_logic.asm lines 1478–1486 at ecb9899 · upstream ↗ 71checkDrop: ⋮ 80 ldy #lastFieldPos 81 sty fieldPointerOffset ;Starts at the end and goes backward ⋮ 83 ldy fieldPointerOffset 84 lda (currentP_fieldPointer),Y 85 cmp #fieldPosJustEmptied ;If not empty, then no drop possible ⋮ 90 sta (currentP_fieldPointer),Y ⋮ 101 sbc #rowSize ;Substract 1 row to check what's on top ⋮ 103 lda (currentP_fieldPointer),Y ⋮ 122 lda (currentP_fieldPointer),Y 123 cmp #fieldPosJustEmptied ;If not empty, then no drop possible ⋮ 128 lda (currentP_fieldPointer),Y ⋮
prg/drmario_prg_game_logic.asm lines 71–149 at ecb9899 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-25.
Checked by a second AI model, 2026-10-21.
Checked by a second AI model, 2026-10-25.
- ^ abIn a one-player game each virus cleared scores 100, 200, or 300 points at Low, Med, or Hi, times 1, 2, 4, 8, 16, then 32 for the 6th to 11th virus cleared by the same pill. The multiplier isn't capped (the clamp is one of the disassembler's bugfix options, not in the original build), so from the 12th virus on it indexes bytes past the end of the 11-entry table.CodeNostaljipi/dr-mario-disassemblyrevised
How we know
694 bne @exit_scoreIncrease ;No score increase if 2 players 695 ldx currentP_scoreMultiplier ;Problem here is that the score combo multiplier is not capped, and so it can overflow 696 if bugfix ⋮ 702 lda scoreMultiplier_table,X ⋮ 705 lda currentP_speedSetting ;Score is impacted by speed setting (Low = 100, Med = 200, Hi = 300) ⋮ 716 inc currentP_scoreMultiplier
prg/drmario_prg_game_logic.asm lines 691–716 at ecb9899 · upstream ↗ 266scoreMultiplier_table: 267.db $01,$02,$04,$08,$10,$20,$20,$20 268.db $20,$20,$20
data/drmario_data_game.asm lines 266–268 at ecb9899 · upstream ↗ 40resetCombo: ⋮ 42 sta currentP_scoreMultiplier
prg/drmario_prg_game_logic.asm lines 39–44 at ecb9899 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Revised after a check by a second AI model, 2026-10-21.
- ^ abAfter a lock, NES Tetris checks four rows, from two above the piece's row down; a row with none of its 10 cells empty is complete, and every row above it moves down one row whole while the top row empties.CodeCelestialAmber/TetrisNESDisasmrevised
How we know
3195 lda tetriminoY ⋮ 3197 sbc #$02 ⋮ 3202 adc lineIndex ⋮ 3212 ldx #$0A 3213@checkIfRowComplete: ⋮ 3215 cmp #tileEmpty 3216 beq @rowNotComplete ⋮ 3218 dex ⋮ 3222 inc completedLines
main.asm lines 3195–3222 at 94581c0 · upstream ↗ 3228@movePlayfieldDownOneRow: ⋮ 3230 ldx #$0A ⋮ 3232 sta (playfieldAddr),y ⋮ 3237 bne @movePlayfieldDownOneRow 3238 lda #tileEmpty ⋮ 3240@clearRowTopRow: 3241 sta (playfieldAddr),y
main.asm lines 3228–3244 at 94581c0 · upstream ↗ 3254 inc lineIndex 3255 lda lineIndex 3256 cmp #$04
main.asm lines 3253–3256 at 94581c0 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Revised after a check by a second AI model, 2026-10-21.
Sources
Code
- Nostaljipi. 2021. “Dr. Mario (NES) Disassembly.” Commit ecb9899. Nostaljipi/dr-mario-disassembly @ ecb9899 · licence, all uses
- (CelestialAmber), Amber Brault and contributors. 2024. “TetrisNESDisasm: a disassembly of Tetris (NES).” Commit 94581c0. CelestialAmber/TetrisNESDisasm @ 94581c0 · licence, all uses