Enemy Appearance Proposals
Today every enemy is the same circle — grunt, archer, brute, hexer, elite and boss differ only by color, so you can't read an enemy's role from its shape, and they look like recolored party tokens. The proposal keeps the game's flat canvas-2D look (radial-shaded body, dark outline, the angry dot-eye face, working status auras & HP bars) but gives each type a distinct silhouette that telegraphs what it does. All hand-drawn with the same Canvas API the engine already uses — no image assets. Animated here with the same blink + idle bob as in-game; shown ~3× zoomed.
The lineup — silhouette test
The real test of unique enemies: can you tell them apart as black shapes? Left to right: Grunt · Archer · Brute · Hexer · Elite · Boss, then a hero token for contrast (heroes are rounded squares, enemies are organic/spiky).
Player tokens — subtle polish
The enemies got fancy, so here's a tiny spice-up for the party token — same rounded square, same class color, same dot-eye face and bob. Just a little more depth. Current on the left, the rest are light options; pick one or none. Cycling through every class color so you can see each one in motion — current: …
Each silhouette reuses the existing body-shading, dark outline and drawEnemyFace scowl, so status auras, HP bars and the fog/blink/bob systems all keep working untouched. To ship: add a per-type shape switch inside drawEnemies() in render.js (the appendages — horns, hood, spikes, hat, crown — draw before/after the body fill). The mega boss keeps its pulsing glow + enrage aura on top of the new crowned-boss silhouette.