Cyber Runner 2000: Momentum Was the Entire Design
Chaining run into jump into dash into a shot, and building endless generation that can keep up with how fast that chain lets a player actually move.
An endless cyberpunk rooftop chase built to feel like the run-and-gun games from the early 2000s, chunky pixel art and neon palette included. Run, double-jump, dash, shoot, throw a grenade, and try not to fall into a gap the level generator just decided to put in your way. The whole thing lives or dies on momentum — how well running flows into jumping flows into dashing without ever feeling like separate, disconnected actions.
Momentum meant every action had to know about the others
A run-and-gun where jumping, dashing, and shooting are all independent, isolated actions feels stiff no matter how responsive each one is individually. The actual design goal was making a dash chained immediately out of a jump behave differently, and feel more powerful, than a dash thrown out cold from standing still — carrying jump momentum into the dash rather than resetting velocity every time a new action starts. That meant the movement code couldn't treat each action as a clean, isolated state machine transition; velocity and momentum had to persist and combine across actions, which is a meaningfully more tangled system to build correctly than handling each move in complete isolation, but it's the entire difference between a game that feels fluid and one that feels like separate animations stapled together.
Endless generation has to keep pace with how fast a player can move
The city generates new rooftops, gaps, and enemies continuously as you progress, and the generator has to stay well enough ahead of the player's actual position that a fast, momentum-chained sprint never outruns what's already been generated. That's a real risk once dash-chaining lets a skilled player move meaningfully faster than a cautious one — a generation system tuned against average movement speed can get caught flat-footed by someone chaining jumps and dashes at the upper end of what the movement system allows. I had to generate content further ahead of the player's actual screen position than felt strictly necessary during casual testing, specifically to cover the case of someone playing at the fastest pace the momentum system permits, not just the pace I was testing at myself.
Checkpoints had to be a rest stop, not a run-breaker
Landing on a checkpoint platform opens a shop for spending collected coins on new weapons and permanent upgrades, and the challenge was making that stop feel like a reward rather than an interruption to the momentum the whole game is built around. A shop that yanks you into a separate menu screen, breaking the visual flow of the run entirely, would undercut the exact feeling the movement system works so hard to build. Keeping the shop lightweight and fast to move through — quick glance, quick purchase, back into the run — mattered more here than it would in a slower-paced game, because the cost of breaking momentum is higher when momentum is the entire point.
Grenades solve a problem shooting alone can't
Shooting handles single enemies fine, but a cluster of robots blocking a narrow rooftop gap turns into a slow, momentum-killing slog if picking each one off individually is the only option. Grenades exist specifically to solve that case — clear a group fast enough to keep moving instead of grinding to a halt in front of a chokepoint. Balancing grenade availability was its own careful tuning problem: too plentiful and shooting becomes irrelevant, since grenades trivialize everything; too scarce and clustered enemy encounters become exactly the momentum-killing slog grenades were supposed to prevent in the first place.
Permanent upgrades had to actually change how a run feels
Coins spent at a checkpoint shop can go toward permanent upgrades that carry across every future run, not just the current one, and I wanted those upgrades to change how the movement system actually feels rather than just quietly padding a health bar. An extra dash charge, for instance, doesn't just give you one more emergency escape — it changes the entire rhythm of how aggressively you can chain moves together before needing to land and reset. Upgrades that only affect a number behind the scenes are easy to build and forgettable to use. Upgrades that change the actual feel of the core momentum system took more thought to design but are the ones actually worth spending coins on.
Why this works as well on a phone as at a desk
Touch controls had to support the exact same momentum-chaining that keyboard input does, which meant the touch input scheme couldn't just be "tap zones mapped one-to-one onto keyboard keys." Chaining a jump into a dash on a touchscreen needs gestures that can be executed as quickly and precisely as a keyboard combo, without needing more simultaneous fingers on screen than a phone comfortably allows. Getting that parity right meant testing the touch scheme specifically against the fastest chained-movement sequences, not just basic single-action taps, since that's exactly where a lazy touch implementation would fall behind keyboard input the most.
This is the game on the site so far where "feel" mattered more than any single system in isolation. The shooting works, the generation works, the shop works — none of that is the actual test. The test is whether chaining a run into a jump into a dash into a shot feels like one continuous motion or four separate button presses, and that's a much harder thing to get right than any individual mechanic on its own, and not something any feature list will ever actually capture.
I built this one leaning hard into a specific era's visual and mechanical language on purpose, chunky pixel art and neon over smooth modern rendering, because that aesthetic and that generation of run-and-gun design happen to share the same core value: momentum over precision, speed over careful positioning. Borrowing the look only works because the underlying feel actually earns it, not the other way around, and I'd rather get called out for the aesthetic than for the movement feeling stiff underneath it, since one of those is a style choice and the other would be an actual failure.
More from the Devlog