Usage (CLI)
space-rider Start in normal mode
space-rider --debug Open the debug scenario menu
space-rider --mode <mode> Start a specific debug mode directly
space-rider --help Show help
Controls
| Input | Action |
|---|---|
W / A / S / D or Arrow keys | Steer ship |
F or Shift (browser) | Boost |
Space | Fire pulse cannon |
Q / E | Barrel roll |
P | Pause / resume a run |
M | Mute toggle |
C (browser) | CRT scanline overlay on / off |
Enter | Launch / relaunch |
Esc | Return to menu / quit |
Ctrl+C | Quit immediately (terminal) |
Thumbstick / FIRE / BOOST (touch) | Steer / fire or confirm / boost |
M silences the browser version and shows a MUTED indicator in the footer. The terminal version has no audio, so there the flag only raises the indicator.
The keys that act on the press rather than the hold — P, M, Esc, and the Q and E roll — fire once per press. Holding one down does not repeat it at any of the repeat rates the standard OS sliders offer.
That costs a short deadzone after a hold, because a terminal has no key-up event and silence is the only thing that can stand in for one. P, M and Esc take it flat: having held one, the next press of it is ignored for a beat, so a deliberate second tap needs a moment between them. Nothing is competing for those keys, and a beat is cheap.
The roll is the escape move, so Q and E do not pay that flat rate. Their deadzone is measured off the repeat stream instead, which lasts about twice the gap between repeat characters — a fifth of a second on a normally configured keyboard. Let go after a long hold and the next press rolls, with the roll cooldown left to decide whether it lands. What cannot be recovered is a re-press inside the repeat rate itself: arriving exactly as soon as the next repeat character would have, it is the same stream, and nothing tells them apart.
Silence only counts against a key while the game is listening for it. A terminal that cannot keep up with the repaint blocks the write the game hands it, and the loop with it, so keystrokes queue up and land together when it clears. That pause is the game's, not the player's, and it is discounted rather than read as the key having been let go — so holding the roll on a terminal falling behind still rolls once. A press made inside such a pause is the one thing lost: it cannot be told from the hold carrying on, and the game was frozen for it anyway.
Gaps that pause leaves are not the repeat rate either, so they are not measured as it. On a terminal that blocks on every frame there is no gap left that was timed against a loop actually reading, nothing is measured, and the roll falls back to the same flat deadzone P, M and Esc carry. That is the wide end rather than the narrow one, and on a loop ticking that slowly it is about three frames.
Gameplay
- Dodge obstacles — Red rotating blocks deal 25 shield damage.
- Avoid mines — Blinking red cubes deal 35 shield damage. They take 5 pulse hits to destroy.
- Collect energy orbs — Green glowing orbs restore 10 shield and award 500 points.
- Destroy targets — Shooting obstacles awards 200 points; destroying mines awards 500 points.
- Aim by column — A shot holds the column it was fired down, so line the ship up under the target and pull the trigger. The further out the target, the more its own column drifts outward before the shot arrives, so a long shot wants leading a character or so; the volley's spread covers most of that for you, and it widens with the window as the drift does. The tracer is drawn only while the shot is still inside the tunnel: fire from hard against a wall and it goes dark almost at once, because holding the column carries it out through the wall and nothing spawns out there for it to hit. A dark shot keeps flying and registers nothing while it is dark, so a block you can see with no bolt on it survives. Height is not an aiming axis at all. A shot registers where its tracer is drawn on the target and nowhere else, and a tracer climbs its whole column, so it meets whatever is drawn in that column however high or low in the tunnel the two of you are. What you see is what counts: a bolt drawn through a block destroys it, and one drawn past it does not.
- Chain your kills — A second kill within two seconds doubles what it pays, a third triples it, and so on up to
COMBO x8, where the multiplier stops climbing. Further kills still hold the chain open, they just do not raise it. The multiplier shows asCOMBO x3on the HUD and resets after two quiet seconds. Orbs are a pickup rather than a kill and never chain. - Roll out of trouble —
QorErolls the ship for half a second, and nothing can hit it mid-roll. The cooldown runs from the start of the roll, so there is a beat of level flight before the next one. - Take the drops — A mine destroyed by gunfire has about a one in three chance of leaving a powerup, which then drifts toward the ship while the tunnel carries it in. Shield Regen (
+) restores 25 shield. Rapid Fire (!) lets you hold the trigger down for ten seconds rather than tapping it, at three times the cadence a tap sustains. Slow Motion (~) runs the whole world at half speed for five seconds, the ship included, which buys real thinking time without changing the geometry of anything. Ramming a mine destroys it too and drops nothing: that one already cost you 35 shield. - Read the warp — Every minute the difficulty steps and the tunnel says so for two seconds, walls and all. Obstacles thicken on that same boundary, so the banner is a few seconds of warning rather than a decoration.
- Survive — The game ends when shield reaches 0.
- Chase your best — Only normal runs count toward the best score. Debug scenarios are diagnostics and never record one.
Debug Modes
Access via --debug (CLI) or ?debug (browser):
| # | Mode | CLI flag / URL param | Description |
|---|---|---|---|
| 1 | Mine Field | mines | Only mines. Pure evasion. |
| 2 | Orb Harvest | orbs | Only orbs. Collect them all. |
| 3 | Collision Course | obstacleCollision | Hit obstacles. Track every impact. |
| 4 | Mine Sweeper | mineCollision | Ram mines. Log collisions. |
| 5 | Chaos Protocol | chaos | Everything at once with permanent boost and auto-fire. |
Navigate the debug menu with arrow keys or number keys, then press Enter to launch.