Tag: game

  • Storm Runner

    Storm Runner


    What I Asked For

    The core design problem with a side-scrolling battle royale is reconciling two things that pull against each other. Contra is linear and forward-driving. Battle royale is about a shrinking safe zone and surviving longer than everyone else. The solution that fell out naturally: the storm wall scrolls in from the left on a timer, which means the side-scroll itself is the circle. You’re not running right because the level tells you to. You’re running right because the purple wall is coming.

    The loop works in two phases. During the calm you enter buildings, break chests, fight rivals, and explore vertically across rooftops, ledges, and interiors. When the timer expires the wall sweeps in, sits still, then retreats for the next calm. The first calm is 22 seconds of drop-in grace. The second is 52. From there it tightens: 44, 36, 28, 22, and eventually a flat 8. Storm damage is damage-over-time rather than instant death, climbing one point per wave to a cap of 8 per second. By late game the arithmetic is not a risk, it’s a sentence.

    The single biggest change from the prototype is that the right edge is no longer a dead end. A run is a chain of six zones: Downtown, The Flats, The Pines, Rain District, The Ark, Whiteout. Reaching the end of one loads the next behind a storm wipe, carrying your health, shield, weapons, kills, and elapsed time across. The storm’s position resets each zone, so arriving somewhere new feels like relief. Its wave count does not, so it’s the same ground and much less time to use it. That beat, relief and then the realization that the clock is worse than it was, is the best thing in the game, and it came out of a one-line decision about what to reset.

    The chain wraps rather than truncates, so dropping into zone five still gives you a full six-zone run that loops back around. That wasn’t cosmetic. A zone is worth 1000 points, so under a truncating chain a late drop would be strictly worse and nobody would ever choose one. Wrapping turns it into a real decision: which biome do you want to fight through while you’re still weak?

    Loot follows the same principle: the game should never make a decision for you or take one away from you badly. Chests don’t hand you anything. They drop it, and it arcs out and settles on the floor beside them so you see what came out before you commit. You carry three weapons. A gun lands in a free slot automatically; with three in hand it stays on the ground until you trade it for what you’re holding. Pickups are never collected when they’d be wasted. Walk over a medkit at full health and it stays there, because the alternative is that it evaporates when you step on it on the way to the next fight.

    What It Is

    Storm Runner is Phaser 3, TypeScript, and Vite, about 5,200 lines across the game and one serverless function, deployed on Vercel at stormrunner.vercel.app. It runs in landscape on keyboard, gamepad, and touch. Native resolution is 480×270, integer-scaled to the viewport.

    Almost nothing is loaded. The art is generated at boot with Phaser Graphics and a canvas gradient. The cities, mesas, tree lines, and ship bulkheads are four painters over a per-biome palette table, so a seventh biome would be a table entry rather than a code path. The sound is synthesized at runtime in Web Audio with no audio files at all. Gunshots are filtered noise transients tuned per weapon. The storm is a brown-noise bed whose volume and cutoff both open up as the wall closes in, traveling from distant rumble to wall of static without a single byte over the network.

    The game boots into an attract loop: 30 seconds of splash, storm wipe, 45 seconds of playable demo, wipe, forever. The demo is not a recording and not a separate code path. It’s the actual game scene with an autopilot swapped in for the controls. That means the demo cannot rot: if the game breaks, the attract loop breaks in the same way, in public, on the title screen.

    Purple storm wall, cyan player, pixelated rendering locked to crisp edges. It looks and moves like a game that could have shipped in 1993. That was always the point.