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.
| Type | Shape | What the shape says |
|---|---|---|
| Rusher | Forward-leaning triangle | It is going that way, fast |
| Dodger | Slim diamond | Narrow, quick, evasive |
| Flier | Body with wings | Not bound to the ground |
| Shielded | Circle with a flat plate | One side is protected |
| Brute | Broad rectangle | Heavy and slow |
| Caster | Hood with an orbiting mote | Not physical, acts at range |
| Spiker | Spiked star | Do not touch |
Ad space reserved. See README.md to connect an ad unit.
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.