On this page
  1. Related
  2. Games
  3. References
  4. Sources

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

GameYearHowNote
Dr. Mario (NES)1990Cascadefreed halves fall and are checked again; each virus from one pill scores double the one before, up to 32 times the first
Yoshi's Cookie1992Cascadethe 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

  1. ^ abWhen a clear happens, updateField sends the placed pill's steps back to checkDrop, which lets unsupported halves fall, and the match checks run again, so one pill can set off a chain of clears.CodeNostaljipi/dr-mario-disassembly
    How 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.

    In the claim ledger

  2. ^ 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.

    In the claim ledger

  3. ^ 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.

    In the claim ledger

Sources

Code