Guide

Designing Readable Enemy Silhouettes

Why every enemy here is a different outline, and what happens to a game when they are not.

In a game with seven enemy types and nine of them on screen, a player has perhaps a fifth of a second to identify each one. That is not enough time to read a colour and interpret it - it is barely enough to recognise a shape. This guide covers how the roster here is designed and why.

The test

Take a screenshot, reduce it to black silhouettes on white, shrink it to a quarter size, and look at it for a second. If you can still name every enemy, the roster is readable. If two of them become the same blob, they are the same enemy as far as play is concerned.

That test is deliberately harsher than actual play, which has colour, motion and context. Passing it means the roster survives the situations where those are unavailable - peripheral vision, a small phone screen, a cluttered frame.

Every enemy on this site was checked against it, which is why the seven types are a triangle, a diamond, a winged body, a circle with a plate, a broad rectangle, a hooded shape and a spiked star.

Shape carries the meaning

Each silhouette encodes its behaviour rather than being arbitrary.

The spiked star is the clearest case. Spikes mean 'do not touch' in essentially every visual culture, which means the enemy communicates its one rule without any instruction at all.

TypeShapeWhat the shape says
RusherForward-leaning triangleIt is going that way, fast
DodgerSlim diamondNarrow, quick, evasive
FlierBody with wingsNot bound to the ground
ShieldedCircle with a flat plateOne side is protected
BruteBroad rectangleHeavy and slow
CasterHood with an orbiting moteNot physical, acts at range
SpikerSpiked starDo not touch

State on top of identity

A silhouette says what an enemy is. Additional layers say what it is doing, and those also have to be readable at speed.

A wind-up draws a growing outline around the enemy, gold or red depending on blockability. A stagger flashes the body white for a moment. A spawn fades in from larger and translucent. Health below full draws a small bar above the enemy, and only below full - a permanent bar on every enemy would be visual noise.

Each of those uses a different visual channel - outline, brightness, opacity, an added element - so they can all be present at once without competing.

What happens without it

A roster of recoloured circles produces a specific failure: the player stops distinguishing enemies and starts treating the whole crowd as one undifferentiated threat.

That collapses the strategy. Target priority becomes impossible, the shielded enemy's plate becomes a mystery rather than a puzzle, and the caster - the highest-priority target in the game - becomes invisible.

The game is then not easier or harder, it is simply flatter. Every wave plays the same way because the player cannot see the differences the designer built.

Readability at the size the player actually sees

An enemy designed at a comfortable size on a desktop monitor is not the enemy most people will meet. The same sprite on a phone in landscape is roughly a third of the linear size, and at the edge of peripheral vision it is effectively smaller again.

That is why the readability test uses a quarter-size reduction rather than full scale. It approximates the worst realistic viewing condition, and a roster that survives it survives everything milder.

It also constrains the designs in a specific direction: distinguishing features have to be in the overall proportion rather than in detail. A spike pattern reads at full size and disappears at a quarter; a squat rectangle against a tall diamond survives any reduction. That is why the roster is built from gross shape differences and why the detail on each enemy is decoration rather than identification.

Why the roster is drawn from primitives

Every enemy here is composed of circles, polygons and lines drawn at runtime rather than from image assets, and that constraint turned out to help the readability problem rather than hinder it.

Drawing from primitives makes it awkward to add fine detail and trivial to change gross proportion, which pushes a designer toward exactly the decisions the quarter-size test rewards. A sprite sheet invites texture; a polygon function invites silhouette.

It has three other consequences worth noting. Nothing needs downloading, so an enemy type costs no load time. Everything scales cleanly to any resolution, because there is no fixed pixel grid to stretch. And every creature is unambiguously original work, since it exists as a set of coordinates written for this site rather than as an image that came from anywhere.

Why colour cannot carry it alone

Around one in twelve men and one in two hundred women have some form of colour vision deficiency, most commonly affecting red and green - which are exactly the colours a game reaches for to mean danger and safety.

Beyond accessibility, colour is unreliable in play for everyone. Peripheral vision has far worse colour discrimination than central vision, and enemies at the edge of a screen are precisely the ones you need to identify without looking at them.

Colour is used here, and used consistently - ember for hostile melee, violet for arcane, red for danger, gold for opportunity - but always as reinforcement rather than as the sole channel.

Key takeaways

  • The test: black silhouettes, quarter size, one second. If two enemies become the same blob, they are the same enemy.
  • Each shape encodes its behaviour - a leaning triangle goes that way, a spiked star means do not touch.
  • Colour is used consistently but never as the only channel, for accessibility and for peripheral vision.
  • State layers use different visual channels - outline, brightness, opacity - so they can coexist.
  • Health bars appear only below full health, because a permanent bar on every enemy is noise.
  • A recoloured roster collapses the strategy: target priority becomes impossible.

Frequently asked questions

Why does every enemy have a different shape?

Because a player has about a fifth of a second to identify each one in a crowded frame, which is barely enough to recognise a shape and not enough to read and interpret a colour.

What is the readability test?

Reduce a screenshot to black silhouettes, shrink it to a quarter size, and look for one second. If you can still name every enemy, the roster works.

Why is colour not enough on its own?

Around one in twelve men has a colour vision deficiency, and peripheral vision discriminates colour poorly for everyone - which is exactly where you need to identify enemies.

How are enemy states shown?

Different visual channels: a growing outline for a wind-up, a white flash for a stagger, fade-in for a spawn, and a health bar only when below full.

What goes wrong if enemies look alike?

The player stops distinguishing them and treats the crowd as one threat, which makes target priority impossible and flattens every wave into the same fight.

Why are the enemies drawn from simple shapes?

Because primitives make fine detail awkward and gross proportion easy to change, which pushes designs toward exactly what survives a quarter-size reduction. It also means every creature is unambiguously original work.