A Mega Drive sprite gets 15 colours plus transparency. That constraint produced some of the best-looking 2D art ever shipped, and it wasn't because the artists were working around the limit — they were working with it.
1. Share your ramps
The instinct is to give every material its own set of shades: skin gets five, the jacket gets five, the metal gets five. That's fifteen colours on three objects and you're already out.
Instead, build one dark ramp that every material borrows its shadows from. The deepest shadow on skin, leather and steel can be the same colour without anyone noticing, because at that value your eye is reading shape, not hue. You've just bought back six slots.
2. Shift the hue, not just the value
Darkening a colour by dropping brightness alone gives you mud. Real shadows pick up ambient light, so rotate the hue as you go down the ramp — toward blue or purple in shadow, toward yellow or orange in the highlight.
- Highlight: raise value, shift hue toward the light source's colour.
- Midtone: the object's actual colour.
- Shadow: lower value, drop saturation slightly, shift hue toward the ambient.
Three colours treated this way read as more depth than five colours that only differ in brightness.
3. Dither on purpose, not everywhere
Checkerboard dithering between two ramp steps invents a value that isn't in your palette. It's free resolution — but it's also texture, and texture attracts the eye.
Dither the large, slow gradients: skies, rounded armour, floors receding into the distance. Never dither a silhouette edge.
The clean rule I use: if the transition happens over fewer than four pixels, don't dither it. There isn't room, and it reads as noise.
The 15-colour budget I actually use
- 5 — the character's primary ramp (skin or dominant material)
- 4 — secondary ramp (clothing, armour)
- 3 — accent ramp, the thing the eye should land on
- 2 — shared darks, borrowed by everything
- 1 — the outline colour
Fifteen. It's tighter than it sounds, and it forces the one decision that makes sprites read at small sizes: choosing what the accent colour is allowed to touch.
There's a video walking through this on an actual sprite, start to finish — find it on the videos page.