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

An auto-scroll moves the screen whatever the player does. Contra mostly leaves it to the players, who push the screen past X 128, and scrolls on its own only to reveal a boss1.

  • Player-pushedContra (1987). Players push the screen past X 128; it scrolls on its own only to reveal a boss.1

Games

GameYearHowNote
Contra1987Player-pushedplayers push the screen past X 128; it scrolls on its own only to reveal a boss
Every claim about this mechanic, by game (1)

References

  1. ^ abOn the side-scrolling levels of the US NES Contra the screen moves only while a player passes X 128 (176 when two are playing), by that player's speed, and not while the other player is left of X 33; on the boss's screen it takes over and scrolls on its own to reveal the boss.Codevermiceli/nes-contra-us
    How we know
    5164set_frame_scroll_if_appropriate:
    ⋮
    5178    lda SPRITE_X_POS,x                     ; load player X position
    5179    cmp horizontal_scroll_point_tbl,y      ; load horizontal scroll point position
    5180    bcc @exit                              ; if not yet reached point to initiate horizontal scroll, exit
    5181    cpy #$02                               ; see if both players are active
    5182    bne @set_horizontal_level_frame_scroll ; if both players aren't active, begin setting scroll
    ⋮
    5186    lda SPRITE_X_POS,y                     ; load other player's X position
    5187    cmp #$21                               ; compare other player to left edge of screen
    5188    bcc @stop_player_x_velocity            ; don't scroll if other player is preventing it by being too far to the left
    ⋮
    5196    jsr set_boss_auto_scroll            ; starts the auto scroll to reveal boss if at right screen, otherwise do nothing
    ⋮
    5202    lda PLAYER_X_VELOCITY,x             ; load player X velocity
    5203    adc #$00                            ; incorporate any velocity overflow from INDOOR_TRANSITION_X_ACCUM
    ⋮
    
    src/bank7.asm lines 5164–5208 at 687d651 · upstream ↗
    5228horizontal_scroll_point_tbl:
    5229    .byte $80,$80,$b0
    
    src/bank7.asm lines 5228–5229 at 687d651 · upstream ↗
    6552set_boss_auto_scroll:
    ⋮
    6557    cmp LEVEL_SCREEN_NUMBER        ; screen number
    6558    bne @exit                      ; exit if not on the appropriate screen to start auto scroll
    ⋮
    6563    lda auto_scroll_timer_tbl,y    ; load the appropriate auto scroll timer for the level
    6564    sta AUTO_SCROLL_TIMER_00       ; start auto scroll to reveal the boss
    
    src/bank7.asm lines 6552–6566 at 687d651 · upstream ↗

    Checked against the evidence by its author, an AI model, 2026-10-21.

    Checked by a second AI model, 2026-10-21.

    In the claim ledger

Sources

Code