AUTONOMOUS SHIP
Every crew member and hostile form acts inside a deterministic 15 Hz simulation.
A systemic co-op survival game aboard a drifting warship. The crew fights, panics, calls for help, and dies with or without you. The thing in the lower decks learns from all of it.
Every match runs peer-to-peer. In peerd, Charon uses the host’s authenticated base mesh. On the web, the same room, identity, gossip, and WebRTC primitives ship inside the page.
Joins an open lobby, or creates one when every lobby is full.
A high-entropy room code is never listed or advertised.
Opening a peer-to-peer room…
Only people with this code can address the room. Send it over a channel you trust.
Charon is a browser-native survival simulation set aboard the UNSC Saturn Devouring. It does not wait for the player: marines sweep compartments, civilians spread panic, radios fail, bodies become resources, and the Flood chooses where pressure will hurt most.
Solo and co-op use the same ship simulation. Multiplayer adds live ODST presence, shared weapon damage and explosions, and room voice over authenticated peer-to-peer links. There is no match server in the gameplay path.
Every crew member and hostile form acts inside a deterministic 15 Hz simulation.
Co-op peers inhabit the same seeded outbreak and replicate combat actions in real time.
The complete game, assets, networking client, and docs can travel as one peerd dwapp.
Charon separates the deterministic ship simulation from rendering and player input. The simulation writes one packed agent buffer; the 3D layer consumes it without owning world state.
sim/ — ship graph, factions, combat, commands, and deterministic ticks.game/ — first-person controls, 3D world, HUD, audio, and the hub launcher.multiplayer/ — room abstraction, lobby protocol, game synchronization, and voice.The peerd build calls the consent-gated dwapp bridge. The web build bundles peerd’s identity, room, mesh, gossip, presence, direct-message, and WebRTC transport primitives.
discover → join / accept / admission-ack → ready → proposal / receipts → final launch → match room
↘ direct state and actionsThe hub output contains a schema-1 peerd.json declaring kind: "dwapp", one entry HTML document, one stylesheet, and one self-contained readable module bundle. Textures and audio remain byte-identical binary files resolved through peerd.assets in the opaque-origin sandbox.
The current bridge provides hello, join, leave, presence, announce, subscribe, publish, retain, history, and dm-send. Optional capacity and voice operations are used only when advertised by a future bridge.
npm run build:dwapp # output: dist/dwapp/hub/
Use any static server for the web build. Multiplayer requires a secure browser context outside localhost because microphone capture and WebCrypto are secure-context APIs.
npm run serve npm run multiplayer npm run determinism npm run build:dwapp
You are a lone crew member aboard the UNSC Saturn Devouring, a Charon-class frigate. Something hit the hangar deck. The ship's marines, crew — and whatever came aboard — act entirely on their own. Survive.
click to enter · WASD + SHIFT sprint + SPACE jump · hold LEFT CLICK — full auto MA5 (loud) · R reload · F melee · G frag · E scavenge ammo/flamethrower · Q or MOUSE WHEEL swap weapon · M tac map · 1 follow / 2 hold / 3 advance (fireteam) · ladders/stairs: stand at one, press L — always takes you to the other end · your fireteam follows you · ESC frees the mouse · K sound board · J audio log (names every cue as it plays) · H flood readout