dev notesgame feelcombat

What Actually Makes a Game Punch Feel Like a Punch

A landed hit that does nothing but delete the enemy is not satisfying. Here is what Riot Line does instead, and why each piece matters.

By GamerX6 min read
What Actually Makes a Game Punch Feel Like a PunchPlay Riot Line

The first working version of the punch in Riot Line did exactly what a punch is supposed to do: land inside a short active window, check the target's lane, and if it matched, remove the enemy. Mechanically correct. It felt like absolutely nothing. An enemy that simply vanished on a successful hit is indistinguishable from an enemy that despawned for any other reason, and a defender game where hitting things feels like nothing is a defender game nobody wants to keep playing.

Four small effects, stacked on one moment

None of what fixed it was complicated on its own. What mattered was landing all four at the exact same instant, the frame the hit registers:

  • Hit-stop. The whole game freezes for a fraction of a second on impact. It sounds like it should feel laggy; it actually reads as weight, the same trick fighting games have used for decades.
  • Knockback. The enemy does not just disappear, it launches backward and up with real velocity, spins as it flies, and shrinks out over its remaining airtime instead of popping out of existence.
  • Camera punch and shake. A short, sharp camera kick on every landed hit, small enough not to disorient you mid-fight but present enough that your eyes register the impact even in peripheral vision.
  • A particle burst. A quick handful of bright motes at the point of contact, gone within half a second. Cheap to render, and doing a surprising amount of the work in selling "something happened here."

The same four effects, for the hit you didn't land

An early version of the game had a second, quieter bug worth mentioning: an enemy that broke through the line unpunished would just sit there afterward, mid-stride, forever. It turned out the breach code set the enemy to "dying" but never told it how long dying should last, so the cleanup check compared against a value that was never set and never fired. The enemy was not designed to freeze in place, it just had nowhere else to go. The real fix reused the same launch-and-fade physics as a landed punch, just aimed forward instead of back, since a breach is the enemy pushing through, not being knocked away. Getting hit and breaching through both needed to resolve into a real physical moment, or neither felt like it mattered.

👊The lesson that generalizes past this one game: the reward for succeeding and the consequence for failing should get the same amount of production effort. A game that only invests in celebrating wins ends up with losses that feel like bugs instead of outcomes.

Keep reading