Mechanic · time & pacing · run and gun, shoot 'em up, platformer
Auto-scroll
A screen that moves through the level on its own, rather than following the player.
On this page
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.
Games
| Game | Year | How | Note |
|---|---|---|---|
| Contra | 1987 | Player-pushed | players 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
- ^ 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.
Sources
Code
- (vermiceli), Michael Miceli. 2026. “Contra (US), annotated disassembly (vermiceli).” Commit 687d651. vermiceli/nes-contra-us @ 687d651 · licence, all uses