Bomb Runner: Obstacles, Jump Timing, and the Rhythm Problem
Endless runners are the genre I thought I understood best before I tried to make one. The loop seems obvious: character runs, obstacles appear, player jumps. I had Bomb Runner playable in a few hours. Then I spent two weeks chasing a feeling I couldn't quite name — the game worked but it didn't sing. That gap between "functional" and "feels right" turned out to be almost entirely about rhythm, and rhythm is one of the hardest things to design consciously.
The Jump Arc: Why Physics Is Feel
My initial jump used simple physics — constant gravity, fixed initial velocity. The jump arc was a parabola. Mathematically correct. Felt horrible. The problem with realistic jump physics is that the player feels heaviest at the peak — right when they want to feel most in control. I replaced the fixed gravity constant with a variable one: lower gravity on the way up, higher gravity on the way down. This creates a jump arc that lingers at the top before dropping decisively. It's the same trick every good platformer uses, and there's a reason it's in every good platformer. The character now feels light during the ascent and purposeful on the descent. It's not how physics works. It's how jumping should feel. I also added a 100ms "coyote time" window — you can jump slightly after running off the edge of a raised platform — which prevents the most frustrating class of deaths.
Obstacle Spacing and the Rhythm Problem
Here's the thing about bomb spacing that took me embarrassingly long to figure out: random intervals between obstacles don't feel random. They feel wrong. If bombs appear at truly random intervals, you'll sometimes get three bombs in quick succession with no time to react, and then a long gap where nothing happens. Both extremes feel bad. I implemented a spacing algorithm that constrains randomness to a window: minimum 1.2 seconds between bombs, maximum 3.4 seconds, with a bias toward 2-second spacing that creates a natural "heartbeat" rhythm. Past 500m, I compress the window slightly. The game speeds up, but the rhythm itself tightens rather than breaking down. Players describe it as getting "into flow," and I think that's exactly what's happening — the spacing enforces a tempo that their inputs sync up with.
Making Distance Feel Meaningful
Distance is the score, but raw distance numbers don't feel like milestones on their own. I added checkpoint banners every 500 meters — a brief visual flash with the distance labeled and a brief speed bump sound — which gives the game chapter breaks without actually stopping. I also started color-shifting the sky background as distance increases: from near-black at the start toward deep navy at 500m, toward dark purple past 1000m. It's subtle enough that players often don't notice consciously, but it makes the world feel like it's changing around you. When a player hits 1500m for the first time and the sky shifts toward midnight violet, it marks that achievement environmentally. No popup, no achievement badge — just the world confirming that they've gone somewhere new.
Browse All Games