Skip to content
Techniques & Technology

Sprite Flicker

Exceeding hardware limits

Sprite flicker rapidly alternated which sprites displayed each frame, allowing games to show more objects than hardware supported at the cost of visible flickering.

nintendo-entertainment-systemsega-master-systemcommodore-64 graphicsspritestechnique 1983–present

Overview

Hardware had limits. Games exceeded them. When the NES could only display 8 sprites per scanline, developers used priority rotation to spread the unavoidable hardware drop-out across all objects each frame. The visible result is flicker — but flicker is the symptom; the technique is rotation.

Strictly: the PPU drops the 9th-and-later sprites on any over-budget scanline. Without rotation, the same sprites would always be dropped (whichever come last in OAM). With rotation, every sprite spends roughly equal time at low priority, so the flicker is distributed rather than concentrated.

Fast facts

  • Purpose: Display more sprites than hardware limit.
  • Method: Alternate sprites between frames.
  • Trade-off: Visible flickering.
  • Necessity: Game design demanded more objects.

NES sprite limits

LimitSpecification
Total sprites64 maximum
Per scanline8 maximum
OverflowExtra sprites invisible
SolutionFlicker rotation

How it works

FrameDisplayed sprites
1Sprites A, B, C, D
2Sprites E, F, G, H
3Sprites A, B, C, D
4Sprites E, F, G, H

Result: All sprites visible, each at 30fps instead of 60fps.

Implementation approaches

MethodEffect
Priority rotationCycle which sprites get priority
Random selectionVary which sprites shown
Importance weightingPlayer sprite never flickers
Scanline distributionSpread sprites vertically

Games with notable flicker

GameSituation
ContraMany enemies/bullets
Mega ManBoss fights
GradiusBullet hell moments
Zelda IICombat scenes

Alternative solutions

ApproachTrade-off
Fewer objectsReduced gameplay
Larger spritesFewer total
Different designAvoid crowded scenes
Accept limitsSome sprites disappear

Player perception

EffectReception
Mild flickerAcceptable
Heavy flickerDistracting
ConsistentBecomes invisible
ErraticVery noticeable

Platform variations

SystemPer-scanline limitTotal sprites
NES864
Master System864
C648 (also the total)8
SNES32128

Sprite zero and the priority trick

On the NES, sprite 0 is never flickered. It's always evaluated first in OAM and is also used for the sprite-zero-hit flag ($2002 bit 6) — the standard mid-frame timing hook for status-bar splits. Games place a small-but-always-on-screen graphic (e.g. the score's leading character) at OAM index 0 so its position is reliable.

See also