Colour Clash
The Spectrum's curse
Colour clash occurred when ZX Spectrum's attribute system forced entire 8×8 pixel blocks to share foreground and background colours, creating visual artifacts when sprites crossed block boundaries.
Overview
The ZX Spectrum could display vibrant colours, but with a catch: each 8×8 pixel block shared one foreground (INK) and one background (PAPER) colour. When a sprite moved across block boundaries, it inherited the colours of whatever it overlapped. This "colour clash" defined the Spectrum's visual character.
The attribute system
| Component | Size |
|---|---|
| Pixel data | 6,144 bytes (256×192 monochrome) |
| Attributes | 768 bytes (32×24 colour blocks) |
Each attribute byte controls an 8×8 block:
- Bits 0-2: INK colour (foreground, 0-7)
- Bits 3-5: PAPER colour (background, 0-7)
- Bit 6: BRIGHT — applies to both INK and PAPER, doubling the effective palette (15 distinct colours, since BRIGHT BLACK = NORMAL BLACK)
- Bit 7: FLASH — alternates ink and paper every ~16 frames (~3 Hz), commonly used for cursors, alarms, and "press a key" prompts
Why it happens
When a sprite crosses attribute boundaries:
- Sprite pixels set in block A
- Sprite also overlaps block B
- Block B has different INK/PAPER
- Sprite inherits block B colours
- Visual discontinuity appears
Mitigation strategies
Monochrome sprites
Many games used single-colour sprites:
- No clash visible
- Consistent appearance
- Knight Lore, Head Over Heels
Careful level design
Design backgrounds to minimise contrast:
- Similar colours in adjacent blocks
- Black backgrounds common
- Strategic colour placement
Small sprites
Sprites smaller than 8×8:
- Stay within single attribute
- Limited visual impact
- Restricts game design
Attribute-aligned movement
Move sprites in 8-pixel increments:
- Always aligned to blocks
- Jerky movement
- Not suitable for action games
Notable approaches
| Game | Strategy |
|---|---|
| Knight Lore | Monochrome graphics |
| Cobra | Coloured but careful |
| Rainbow Islands | Accepted clash |
| Renegade | Masked backgrounds |
The "Spectrum look"
Colour clash became:
- Defining characteristic
- Nostalgic aesthetic
- Recognised style
- Design challenge
Comparison with competitors
| System | Colour system |
|---|---|
| Spectrum | Attribute blocks (one INK + one PAPER per 8×8 cell, applies to playfield AND sprites overlapping it) |
| C64 | Per-cell colour RAM in text/character mode (one INK colour per cell, shared background) — and crucially, hardware sprites have their own palettes with no clash from playfield overlap |
| Amstrad CPC | Per-pixel colour (Mode 0: 16 colours from 27, no attributes — but only 160×200 resolution) |
| MSX (TMS9918) | Attribute strips (one INK + one PAPER per 8×1 row of pixels — finer than Spectrum, coarser than CPC) |
The C64 looks "similar" on paper but its hardware sprites are the load-bearing difference: a player sprite never inherits the background's colours, so games that would have suffered terrible clash on the Spectrum just look fine on the C64.
Modern perspective
Colour clash is now:
- Deliberately recreated in retro games
- Nostalgic visual style
- Design constraint appreciated
- Historical interest
Modern emulators visualise the clash mechanism in different ways — some highlight attribute boundaries, others overlay the 32×24 attribute grid. New Spectrum games (released for the original or Spectrum Next) often use clash expressively: monochrome sprites picking up environmental colour as they move, treating the bleed as a feature.