Skip to content
Techniques & Technology

Sprites

Hardware-accelerated game objects

Sprites are hardware-supported graphical objects that move independently of the background, fundamental to 2D game graphics across platforms.

commodore-64nintendo-entertainment-systemcommodore-amigasega-mega-drive graphicshardware2d 1977–present

Overview

Sprites are graphical objects handled specially by video hardware — characters, projectiles, items, anything that needs to move without affecting the background. Hardware sprites mean the CPU doesn't have to erase and redraw moving objects; the video chip composites them with the background each scanline, treating sprite memory as a separate layer that overlays the playfield.

The concept dates to the Atari 2600 (1977) — its TIA chip's "player" and "missile" objects are an early form of hardware sprite. Subsequent generations refined the idea: more sprites, larger sprites, more colours, more capabilities (collision detection, scaling, rotation).

Fast facts

  • Definition: Hardware-supported moveable graphics, composited with the playfield by the video chip.
  • Advantage: CPU offload — no per-frame redraw, no background corruption.
  • Limitations: Per-platform count, size, colour, and per-scanline limits.
  • Origin: Atari 2600 TIA (1977) — players and missiles.

Platform comparison

PlatformTotal spritesPer scanlineSizeColours per sprite
Atari 26005 ("players" + missiles + ball)All8 px wide × variable1 + transparent
C64 (VIC-II)8824×21 fixed3 + transparent (multicolour) or 1 + transparent (hi-res)
NES (PPU 2C02)6488×8 or 8×163 + transparent
Master System (VDP)6488×8 or 8×161 colour from a 16-colour subpalette
Game Boy (PPU)40108×8 or 8×163 + transparent
Amiga (Denise)8 hardware816 px wide × variable height3 + transparent (single) or 15 + transparent (attached pair); BOBs add unlimited via Blitter
Mega Drive (VDP)80208×8 to 32×32 in 8-pixel multiples15 + transparent
SNES (PPU)128328×8 to 64×6415 + transparent
Neo Geo MVS380+~9616×16 to 16×51215 + transparent

The trend across generations: more sprites, larger sprites, more colours, fewer per-scanline limitations.

Programming sprites

The basic operations on any sprite system:

OperationDescription
PositionSet X/Y coordinates in screen space
Pattern / pointerWhich graphic to display (index into tile / pattern memory)
EnableTurn the sprite on or off
PriorityDraw order relative to background and other sprites
FlipHorizontal / vertical mirroring (varies by platform)
PaletteWhich colour set to draw with
CollisionDetect overlap with other sprites or the playfield

The exact register layout varies wildly between systems — see the linked hardware references for specifics.

Hardware sprites vs software sprites

TypeExamplesTrade-off
Hardware spritesC64, NES, MD, SNES, AmigaFast (zero CPU cost), but constrained by chip's sprite limits
Software spritesZX Spectrum, IBM PC pre-VGA, MacUnlimited count, any size, but every sprite costs CPU time to render
Hybrid (BOBs + sprites)Amiga, MSXHardware sprites for hero, software (BOB / blit) for everything else

The Spectrum's lack of hardware sprites forced its developers into clever software tricks: pre-shifted sprite tables, OR-blit rather than replace-blit, attribute-only animation. See Software Sprite Routines (Spectrum) for the depths of this art.

Per-scanline limits

Most sprite hardware can only display N sprites simultaneously on a given scanline. If more sprites cross that line, the lowest-priority ones disappear or "flicker" (alternate between visible and hidden frames):

PlatformPer-line limitWhat happens above limit
C648All visible (no per-line limit; sprites multiplex via raster IRQ tricks)
NES8Lowest-numbered 8 are drawn; rest disappear (or flicker if shuffled)
Master System8Same — flicker via shuffling
Game Boy10Same
Mega Drive20Same — much more comfortable budget
SNES32Same

Sprite multiplexing — using raster interrupts to reposition sprites mid-frame — works around per-line limits on machines like the C64. See Sprite Multiplexing.

Special features

Collision detection

PlatformType
C64Sprite-sprite ($D01E), sprite-background ($D01F) latching registers
NESSprite-0 hit ($2002 bit 6) — single bit, used for raster effects
Mega Drive / SNESSoftware collision typical; some hardware help

Sprite scaling and rotation

A late-generation feature; first standard on SNES Mode 7 (background only, not sprites natively) and arcade Super Scaler hardware (Sega Hang-On, Out Run, After Burner). See Sprite Scaling.

Sprite-zero hit

NES-specific: bit 6 of $2002 sets when sprite 0's first non-transparent pixel collides with a non-transparent BG pixel. Used to trigger mid-frame split effects (status bar above gameplay area in Super Mario Bros. and many others).

See also