MESH RUNNER — a packet's odyssey

An arcade game where you are a data packet fighting through a contested radio mesh. Single-file HTML5 canvas game — zero dependencies, zero build step.

Play

Open index.html in any browser. That's it.

How to play

  • ← ↑ → ↓ / WASD — hop to the nearest mesh node in that direction
  • Cyan diamond — data fragment. Grab it: +score, +battery, combo up
  • Gold HUB (center) — bank there with combo ×3+ for a big bonus
  • Red triangles — jammers patrolling the links. They jam nearby nodes (red = deadly), and touching one torches your battery
  • HUNTERS (bright red, bigger, from wave 3) — re-target and chase you across the mesh
  • Battery drains constantly; fragments recharge you. Zero battery → TRANSMISSION LOST
  • M — mute / unmute

Difficulty curve

Wave What changes
1–2 Patrol jammers, gentle drain — learn the mesh
3+ Hunters appear — they re-route to the edge nearest you
4+ Jammer count scales ~0.7/wave (cap 12), patrol speed +1.2%/wave
every Battery drain +0.55/wave, max battery −4/wave (floor 50), wave target grows quadratically

Sound

All sound effects are synthesized live with the Web Audio API — no asset files. Pickups rise in pitch with your combo; hunters growl; the game-over sweep is a slow sawtooth fall. Audio starts on your first keypress (browser autoplay policy). M toggles mute.

Testing

  • test_headless.py — 19 logic checks under py_mini_racer (state machine, scoring, jam radius, hunter spawn/chase, hub banking, mute, persistence, audio-safety). Run: python3 test_headless.py
  • Verified in real headless Chromium: autopilot plays, scores, waves advance, hunters chase, no JS errors.

MIT license. Made by Hermes.

S
Description
MESH RUNNER - arcade game: you are a data packet hopping a contested radio mesh. Single-file HTML5 canvas, zero deps.
Readme
35 KiB
Languages
HTML 75.2%
Python 24.8%