Commando Assault: Designed Around Restraint, Not Reflexes
A match-3-style track shooter where firing the instant something's in range is the losing play, and killstreaks reset hard on purpose.
Rotate a twin-barrel turret, fire warheads into rolling convoys, and match three or more identical warheads to trigger an explosive detonation that knocks the convoy backward. It's a military track shooter built around a match-based trigger system rather than pure aim-and-fire, which makes the actual skill here reading and planning ahead, not just reflexes.
Matching had to reward planning over panic-firing
Firing at whatever's centered in your sights the instant it appears is the obvious, low-effort play, and it's also the wrong one — a scattered shot that doesn't contribute to a match clears one target and wastes the opportunity for the much bigger payoff a real three-plus match delivers. The whole design is built to reward a half-second of restraint: waiting for the right warhead type to line up rather than firing the moment something's in range. That's a harder discipline to actually maintain under pressure than it sounds like on paper, which is exactly why it's the core skill worth building the whole game around instead of pure reaction speed.
Munition reloading needed a real cost, not just a cooldown bar
Managing munition chambers with reload timing means there's always a real risk of running dry on the exact warhead type you need right as a convoy closes in. I wanted reloading to feel like an active resource decision — keep at least one chamber loaded in reserve rather than emptying everything trying to force an immediate match — not just a passive bar that fills itself back up on a timer while you wait. That distinction between "a cooldown that happens to you" and "a resource you actively manage" is what turns munition management from a background system into something a player has to actually think about mid-fight.
Killstreak bonuses had to punish a broken chain harder than they rewarded a long one
Consecutive matches without a miss build toward killstreak bonuses, and the tuning question that mattered most was how harshly a single miss should reset that progress. Too forgiving, and killstreaks stop feeling like something worth protecting carefully — you'd chain matches carelessly since a slip barely costs anything. Too harsh, and one bad shot late into a long, hard-earned streak feels devastating in a way that discourages taking any risk at all. I landed on a full reset on any miss, which is unforgiving but honest — it keeps every shot meaningful throughout an entire streak rather than only the first few mattering before the stakes flatten out.
Warhead variety had to stay readable at a glance under pressure
Matching depends entirely on being able to tell warhead types apart instantly, at speed, while a convoy is closing in — there's no time to study an ambiguous icon carefully mid-fight. That put a real constraint on how many distinct warhead types the game could support before visual distinction started breaking down. I tested icon silhouettes at the actual in-game size and speed they'd be viewed at, not as clean, static reference art, since a shape that reads clearly in an isolated preview can still blur together with a similar one once it's small, moving, and surrounded by explosion effects and other warheads on screen. Keeping the roster of warhead types to a count that stays genuinely readable under real combat conditions mattered more than maximizing variety for its own sake.
Terrain sectors needed to change tactics, not just scenery
Jungle, desert, and urban sectors aren't just different backdrops behind the same convoy behavior — vehicles move at different speeds and in different formations depending on the terrain, which means the reaction window for setting up a match genuinely shrinks or grows sector to sector. Desert and urban sectors bring faster convoys that punish hesitation more than the jungle sectors do. If terrain were purely cosmetic, escalating difficulty across sectors would have relied entirely on bigger numbers behind the scenes. Making terrain actually change vehicle behavior gave the campaign a second real axis of difficulty beyond just "more enemies, more health."
The laser sight had to communicate more than just aim
Deploying laser sights on the turret is the most basic possible piece of feedback — a line showing where the next shot will land — and it ended up doing more communicative work than I originally planned for. Once the matching system was in place, the sight also became the main way a player previews whether a given position lines up with the warhead types currently rolling in, which meant its visual weight and color needed to stay legible against a busy convoy scene without drawing so much attention that it competed with the actual vehicles and warhead icons a player needs to be reading. A laser sight that's too subtle gets lost in the visual noise of a large convoy; one that's too bright drowns out the information it's supposed to be helping you find in the first place.
What I'd tune first if the balance feels off
If anything about this needs adjustment after real play, my first guess is convoy spawn timing during the transition between terrain sectors — that's the seam where a pacing mistake is most likely to hide, since it's the one moment the difficulty curve has to jump rather than gradually escalate within a single sector's established rhythm. I tuned it as carefully as I could from my own testing, but a transition point is exactly the kind of thing that plays differently once someone who isn't me, who hasn't already internalized every sector's rhythm, hits it cold for the first time.
This one leans harder into deliberate restraint as the core skill than almost anything else I've built — the entire game is designed to punish the instinct to fire the moment something's in range. That's a genuinely different muscle to ask a player to build compared to most of what's on this site so far, and I won't know how well that lands until it's had real time in front of people who haven't already spent hours internalizing the matching logic the way I have.
More from the Devlog