Barkour — dogfights × parkour. Movement-PvP fighting game: 5 dogs with wildly different movement physics, procedural arenas, P2P netplay.
Find a file
w1n5t0n 99468cd379 fix: address all 21 confirmed findings from multi-agent review + live P2P testing
Sim: clamp knockback under tile size (wall tunneling), bomb/ball terminal
velocity, grapple constraint no longer drags players into terrain, bite
window ends on getting hit, shield/boost cleared on death, spawn invuln
preserved through countdown, spike/saw events only on real damage.
Mapgen: spawn footprint validation (was embedding dogs in 58% of seeds),
saw paths rejected if they grind terrain or sweep spawns, towers no longer
hang slabs over pits. Net: heartbeat+watchdog for dead peers, broker-error
tolerance once P2P link is up, join/host reentrancy guards. UI: text-field
keystrokes no longer hit game hotkeys, audio unlocks on mouse, textBaseline
leak, snapshot carries onGround/landT so client dogs animate.
2026-06-10 14:47:40 +02:00
js fix: address all 21 confirmed findings from multi-agent review + live P2P testing 2026-06-10 14:47:40 +02:00
test fix: address all 21 confirmed findings from multi-agent review + live P2P testing 2026-06-10 14:47:40 +02:00
.gitignore feat: initial Barkour — movement-PvP dog fighting game 2026-06-10 14:26:58 +02:00
index.html fix: address all 21 confirmed findings from multi-agent review + live P2P testing 2026-06-10 14:47:40 +02:00
MAP.md fix: address all 21 confirmed findings from multi-agent review + live P2P testing 2026-06-10 14:47:40 +02:00
package.json feat: initial Barkour — movement-PvP dog fighting game 2026-06-10 14:26:58 +02:00
README.md feat: initial Barkour — movement-PvP dog fighting game 2026-06-10 14:26:58 +02:00
style.css feat: initial Barkour — movement-PvP dog fighting game 2026-06-10 14:26:58 +02:00

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.