barkour/README.md
w1n5t0n 2f60136b36 feat: initial Barkour — movement-PvP dog fighting game
5 dogs with distinct movement physics, seeded procedural arenas with
traps and mineable powerups, smash-style knockback/stocks combat,
local 2P and P2P netplay (PeerJS room keys), procedural art and sfx,
headless sim smoke tests.
2026-06-10 14:26:58 +02:00

2.4 KiB
Raw Blame 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

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

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.