barkour/README.md

66 lines
2.4 KiB
Markdown
Raw Normal View History

# BARKOUR 🐕💨
**Dogfights × parkour.** A 2-player movement-PvP fighting game: five dogs with
wildly different movement physics brawl across procedurally generated arenas
full of traps and mineable powerups. Last dog standing wins.
No build step, no game server, no asset files — everything (art, sound, maps)
is generated procedurally in the browser.
## Run it
```bash
npm run dev # python http.server on :8137
# → http://localhost:8137
```
Any static file server works (ES modules just need http://, not file://).
## Play
| | Move | Bite | Special | Item |
|---|---|---|---|---|
| **P1** | WASD | F | G | H |
| **P2** | arrows | K | L | ; |
- **↑/W** jumps, **↓** drops through one-way platforms
- **Bite** is also your mining pick — crack open crystals for powerups
- Damage % makes knockback grow (Smash-style); die by being launched past
the arena edges or into the abyss. 3 stocks each.
- **M** mute, **Esc** pause/leave, **Enter** rematch
### Online play (P2P)
One player clicks **Host online room** and shares the 5-letter key; the other
clicks **Join with room key**. The PeerJS public cloud is used for signaling
only — all game traffic flows directly peer-to-peer over a WebRTC data channel.
No server of ours is involved. (Host is authoritative; the joiner streams
inputs and renders snapshots.)
## The dogs
| Dog | Breed | Movement identity |
|---|---|---|
| **Bolt** | Greyhound | Fastest runner, wall-slide/wall-jump, 8-way air dash |
| **Brick** | Bulldog | Massive knockback resistance, charging ram, ground-pound shockwave |
| **Lasso** | Lurcher | Leash grapple — anchor, reel, pendulum-swing, jump-release launch |
| **Wisp** | Saluki | Low gravity, double jump, blink-teleports through walls |
| **Stubbs** | Corgi | Jetpack (fuel refills on ground), butt-bounce off hard landings |
## Arenas
Every match generates a fresh seeded arena: stepped terrain, abyss pits,
wall-jump towers, floating islands, one-way platforms, spike patches, bounce
pads, rail saws on patrol routes, and crystal outcrops. Mine crystals (or bomb
them) for: tennis-ball launcher, bomb, shield, speed boost, heal. A care
package also parachutes in periodically.
## Tests
```bash
npm test # headless sim smoke test (node, no browser needed)
```
The sim core (`js/sim.js` + deps) is DOM-free by design: maps are seeded and
deterministic, matches run headlessly. See `MAP.md` for the code layout.