Engine v0 · Scaffold
Burn City
Melbourne open-world VR game. Real lat/lng map · Aurora engine sky · Dream Park NPCs · GameLift multiplayer. v0 scope: Greater Melbourne (~50 km radius around -37.8136°, 144.9631°). Bbox 144.5°W → 145.5°E, -38.2°S → -37.55°N.
Two clients, one backend: WebXR alpha in Quest browser (zero-install, public) and a native Unreal flagship build. Both share Prisma DB, Dream Park sim, GameLift fleets, and RiverPay.
Integration manifest
aurora-engine
apps/aurora/lib/aurora-8k.tsx
Sky / atmosphere shader — port to <Sky/> r3f layer above the map (web); reimplement as Niagara/material in Unreal
shared
planned
touros-venues
apps/touros /api/public/venues/map → apps/burn-city /api/venues/live
Live venue POIs — pulled from TourOS prisma Venue model, shaped to VenuePOI, merged with the static seed (seed wins on canonical Melbourne venues for stable IDs + curated zones). Falls back to static seed when TourOS is unreachable.
shared
wired
cartography-entities
apps/web — CartographyEntity → /api/cartography/{entities,oracle} proxies + CartographyOverlay r3f
Codex Machina nodes (Civitas/Technos/Logos/Aether/Terra) rendered as realm-tinted glowing icosahedrons in /xr at their lat/lng. Click → oracle proxy returns hexagram + Rachel commentary; reading panel auto-opens.
shared
wired
dream-park-characters
apps/web — DreamParkCharacter + CharacterSimulationEngine
Open-world NPCs — 300 walking residents on map+XR. Procedural fallback when upstream is down.
shared
stub
dream-park-orchestrator
apps/web — SimulationOrchestrator (SSE via /api/npcs/stream)
Live tick loop — burn-city pulls world-state every 1.5s and pushes via SSE to clients
shared
wired
venue-gigs
apps/burn-city/lib/gigs.ts
Weekly gig schedule — NPCs cluster around venues during gig hours by mood affinity
shared
wired
rat-city-arena
apps/web — /api/arena, /api/forge
Combat / minigame layer inside Burn City zones
shared
planned
riverpay
apps/riverpay + /api/gigs/checkout
In-game payments: gig tickets, merch, door — venue-entry interaction in /xr (GigEventOverlay) and /map opens a RiverPay deep-link with gig payload, NPP same-day settlement
shared
stub
local-game-server
apps/burn-city/server/local-server.ts (Node + ws)
Local multiplayer broker — 6 district WS rooms. Replaces GameLift while AWS is off.
shared
wired
gamelift-fleets
AWS GameLift (shelved 2026-04-28)
Future: GameLift fleet broker. Currently bypassed in favour of local server.
shared
planned
maplibre-osm
MapLibre GL JS + OSM tiles
Real Melbourne basemap (web client) — free OSM tiles, streets + building footprints
webxr
wired
osm-buildings-3d
apps/burn-city/app/api/buildings — Overpass API + disk cache
3805 extruded CBD building footprints with height tags. Cached to data/.
webxr
wired
facade-atlas
apps/burn-city/lib/facade-atlas.ts + lib/building-shader-atlas.ts
6-cell baked facade super-atlas (Glass / Apartment / Brick / Concrete / Heritage / Industrial). Buildings hashed deterministically into cells; merged per cell → 6 PBR draw calls instead of 3805. Replaces procedural window-grid shader. (Pattern Network Engine vs. Procedural Crisis — Atlas Strike, KO 2026-04-30.)
webxr
wired
avatar-style
apps/burn-city/lib/avatar-style.ts + lib/aurora-ring-shader.ts
NPC tri-zone palette (skin/hair/shirt/pants) deterministic per id, plus 8-petal Aurora ring at feet (mood-coloured, pulses with walk cadence). Replaces mono-mood capsule. Per-NPC height/girth scale variation. (Aurora 8K Engine vs. Avatar Crisis — 8D Strike, KO 2026-04-30.)
webxr
wired
osm-streetscape
apps/burn-city/app/api/streetscape — Overpass API + disk cache
3199 roads (extruded ribbons) + 5368 trees (instanced cone+trunk). Cached.
webxr
wired
vehicles
apps/burn-city/lib/road-mesh.ts — sampleAlongPolyline + Vehicles instancedMesh
24 procedural cars driving along primary/secondary/tertiary/residential roads
webxr
wired
postprocessing
@react-three/postprocessing — Bloom + Vignette + ACES_FILMIC
Bloom on emissive (windows, neon venues, cars), filmic tone-mapping, vignette
webxr
wired
fps-controller
apps/burn-city/app/xr/page.tsx — FPSController + PointerLockControls
WASD walk, sprint, jump, pointer-lock mouse-look. Camera lat/lng broadcast to multiplayer.
webxr
wired
multiplayer-client
apps/burn-city/lib/multiplayer.ts — useMultiplayer() hook
WS connection to local-server, peer pose at 5Hz, peer avatars in /xr scene
shared
wired
webxr
@react-three/xr
WebXR client — Quest browser, zero-install, public alpha
webxr
planned
unreal-client
apps/burn-city-native (planned, separate repo)
Native Unreal/Unity client — flagship fidelity, hand tracking, mixed reality, store builds
unreal
planned
Live entry points
Locked decisions
- Map — MapLibre + OSM tiles (free)
- Clients — WebXR (alpha, public) + Native Unreal (flagship). Shared backend.
- Scope — Greater Melbourne (~50km, full bbox)
- Multiplayer — GameLift fleets (per-district sharding)