45 lines
1.8 KiB
Markdown
45 lines
1.8 KiB
Markdown
# 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.
|