Not every entry here is a bug report. Sometimes it's just "the victory screen looks kind of flat, let's fix that" — and this one turned into one of our favorite small details in the whole game.
The fireworks show that plays when you clear a city read as a straight line sweeping across the sky, rather than a proper burst of chaos. Three separate causes, each individually boring, added up to that one visible problem:
- Burst number b was always placed in horizontal slot b — so burst 1 was always leftmost, burst 2 next, and so on, in strict left-to-right order every single time.
- Every burst launched from roughly the same height band, so the whole show sat on one level instead of filling the sky.
- The timing between bursts was a flat, metronomic interval — same gap, every time, which reads as mechanical rather than festive.
Shuffling the slot order, widening the vertical spread, and switching to uneven, randomized
gaps between bursts fixed the "straight line" problem completely. But it also meant we now
had a clean, general spark() helper that launched sparks toward any destination
point — not just an outward ring.
If a spark can land anywhere, it can land as a face
The insight was small but fun: a normal firework burst sends sparks flying outward to random points. If instead you hand each spark a specific destination — say, points traced along the outline of a smiley face — it still launches from one point like a normal burst, flies outward like a normal burst, and simply arrives as a recognizable shape.
So now, one burst per victory show blooms into a smiley: an outline, two eyes, and a smile arc, in a single warm color so it reads as a shape and not confetti. We tuned the flight speed down slightly so it's still legible right as it lands instead of already fading.
That went well enough that we added a second shape shortly after: a five-pointed star, with spark points spaced along each edge (spacing them only at the star's points made it read as a scatter, not a star — the edges matter). Big shows, like the finale after a boss kill, now get one of each shape so you see both; the smaller per-wave show gets one at random, so which shape you get stays a small surprise.
Verified the old-fashioned way for something this visual: rendered both shapes at their target offsets and eyeballed whether a human would recognize them. They do.