Alex CoulombePresents
← all repos

Swing City

0

A rain-soaked neon city you can swing across, Spider-Man style — now with multiplayer joust rules.

The story

A low-poly Blade Runner grid, procedurally generated from a single seed — streets, traffic-light-obeying cars, rain, neon towers — built first as a Blender/Python generator, then ported line-for-line into a self-contained Three.js browser game. Web-swing between skyscrapers, knock cars flying, climb buildings, chain combos, and dodge a zombie wave or two. One July 2026 session ran 13 rounds of real-hardware VR playtesting back to back — ship a batch, play it on the headset, get bug reports, ship the next batch. The hardest of those bugs was a right-stick calibration that got re-specified 10 times before a hardware-confirmed fix finally stuck ("LOCK THAT"), and a separate VR avatar-invisible bug that root-caused to a one-line three.js gotcha: Object3D.lookAt() orients +Z for everything except cameras, so the follow-rig was facing 180° away from the player every frame. Multiplayer runs on a from-scratch Cloudflare Worker + Durable Object relay: zero server-side physics, an "attacker computes, server relays, victim applies" message convention reused across every player-vs-player mechanic, and the WebSocket Hibernation API so a room full of idle sockets never pins memory.

Highlights

  • Procedural city — same seed, same layout, in both Blender and the browser
  • Full physics: web-swinging, wall-crawling, car knockback with momentum-scaled combos
  • Opt-in multiplayer — joust rules, random color per player, colored webs, knock players (and cars) around, land on a head to explode them
  • 13 rounds of real-hardware VR playtesting in one session — the right-stick calibration alone took 10 of them to lock
  • VR avatar-invisible bug root-caused to a one-line three.js axis-convention gotcha (Object3D.lookAt())
  • Multiplayer relay built from scratch on Cloudflare Workers + Durable Objects, later extracted into a reusable pattern doc
$ git clone https://github.com/ibrews/swing-city.git