vectorwake is a top-down space MMO built around frictionless, inertial combat. Energy is both health and ammunition. Pilots fight over flags in rooms whose physics, weapons, and rules come from configuration.
The physics model is inspired by Subspace Continuum. vectorwake has its own ships, art, sounds, maps, names, interface, and so on.
The browser client and live fleet work today. They include seven hulls, keyboard and touch controls, AI pilots, configurable rooms, accounts, and ratings. The game is still under active development and does not preserve backward compatibility.
The simulation core has no floats, I/O, or runtime dependencies. The client runs it for prediction; the server runs it to decide positions, hits, deaths, pickups, and scoring. Snapshots are packed by the core itself, so the two sides share both the rules and the wire representation.
The client draws the world as vector geometry across five mesh layers. Ships and weapons are readable by silhouette, color, and motion rather than by copied sprites. The client also synthesizes its short combat sounds from code.
Zone authors configure maps, ship tuning, weapons, modes, and room limits without forking the arena server. The servers themselves are disposable workers that can serve any zone in a catalog. Bots connect through the same protocol as human players and send the same input bits.
You need a C99 compiler, Make, and a Rust toolchain with Cargo for the simulation and server.
Run the deterministic core checks and the server tests from the repository root:
make -C sim check
cargo test --manifest-path server/Cargo.tomlStart one standalone arena on ws://127.0.0.1:9010:
cargo run --release --manifest-path server/Cargo.toml -- 127.0.0.1:9010 zoneThat command loads zone/zone.toml. Most settings reload when you save the file. A bad edit is logged and ignored instead of taking the room down.
The client build needs JDK 25 and Defold Bob 1.13.0. Native extensions are compiled by Defold's build service, so this step needs network access.
curl -fsSL -o /tmp/bob.jar \
https://github.com/defold/defold/releases/download/1.13.0/bob.jar
VW_PLATFORM=x86_64-linux
JAVA_HOME=/path/to/jdk25 ./client/build.sh "$VW_PLATFORM" release build
./client/build/"$VW_PLATFORM"/dmengine \
--config=vectorwake.server=ws://127.0.0.1:9010 \
client/build/default/game.projectcReplace x86_64-linux with the Bob target for your machine. client/README.md covers browser bundles, directory-based discovery, runtime overrides, and client testing.
JAVA_HOME=/path/to/jdk25 ./client/build.sh wasm-web release bundle
python3 client/tools/single_file.py \
client/bundle/wasm-web/vectorwake vectorwake.htmlThe result is one self-contained HTML file. By default it opens the official games directory. CI builds and publishes the production page whenever client/ or sim/ changes; generated bundles are not committed.
| Path | What lives there |
|---|---|
sim/ |
Dependency-free C99 simulation, packers, maps, tests, and golden trace |
server/ |
Rust arena, directory, bot process, meta-layer, rating, and fleet logic |
client/ |
Defold client, native extensions, Lua UI, vector renderer, audio, and tests |
catalog/ |
The zones served by a fleet |
zone/ |
A documented standalone zone configuration |
deploy/ |
Docker Compose, Caddy, provisioning, and fleet update scripts |
docs/ |
The game's design, the system's architecture, and the research behind both |
Start with the game and its design if you want to understand what is being built. Read the system overview before changing a boundary between the client, core, and server. The research notes preserve the source material and measurements behind the inherited mechanics.
For operating the full stack, read deployment. A production deployment includes Caddy, the directory, arena and bot processes, the meta-layer, and PostgreSQL.
Fable, Opus, and Sol were used to create this codebase. I steered the design. See AI-DECLARATION.md for details.
vectorwake is source-available under the PolyForm Noncommercial License 1.0.0. It permits use, modification, and distribution for noncommercial purposes.