oss-client
GPL-2.0-or-laterThe game client. Cross-platform, runs at whatever resolution and refresh rate your
display has, takes a gamepad, and needs no Continuum install to start. Plus
oss-session and a headless bot.
Open source · Rust · 0.1.x
SubSpace is a top-down multiplayer space shooter from 1997. Ships drift; bullets and bombs carry your momentum with them; a map is 1024×1024 tiles of asteroid and wall, with flags to take and a team to take them from. When the publisher walked away, the players kept it running themselves — and they still are.
Open SubSpace is that game rebuilt in Rust so that it outlives the binaries it grew up in: a new client, a zone server that runs existing zones unchanged, and a shared core anyone can build on. Not an emulator and not a fork — every packet, file format and physics rule implemented fresh, and checked against the software that is still running.
--screenshot.01 Source
The split is deliberate. The core is MIT so that anyone's bot, tool or alternative client can build on it whatever its licence; the client and server are GPL because they follow ASSS, whose GPL source may be ported into them.
The game client. Cross-platform, runs at whatever resolution and refresh rate your
display has, takes a gamepad, and needs no Continuum install to start. Plus
oss-session and a headless bot.
The zone server. Follows ASSS closely enough to take an existing zone directory and
run it unchanged — same .conf files, maps, module names and
?commands — with VIE and OpenSec clients on one port.
The shared half: packets, transport, map and settings formats, the physics simulation, a bot SDK and a conformance suite anyone can run against their own implementation.
02 Play
The client uses the shared crates as a sibling checkout, so clone both and run it. You need a Rust toolchain (1.88 or newer).
git clone https://github.com/DangerMouseUK/oss-core
git clone https://github.com/DangerMouseUK/oss-client
cd oss-client
cargo run --release
That opens the login screen: zone, name, password, arena, ship. F3 is the zone browser, F5 the offline sandbox. The keys are Continuum's, so a returning player already has them in their hands, and F1 in the game lists them — yours, if you have changed any.
No zone to hand? Fly on your own:
cargo run --release -p oss-client -- --sandbox
Graphics and sounds come bundled, so it plays from a fresh clone. Already have
Continuum? --continuum-dir uses your own instead. The client contacts no directory server you have not configured.
Keys, chat, macros and replays →
03 Run a zone
With no arguments, oss-server runs its bundled zone — the ASSS 1.4.4
sample zone, compiled into the binary — on UDP port 5000. You are now a zone.
git clone https://github.com/DangerMouseUK/oss-core
git clone https://github.com/DangerMouseUK/oss-server
cd oss-server
cargo run --release
Already run a zone? Point it at your directory, unchanged:
# run an ASSS-style zone directory
oss-server --zone <dir>
# write the bundled zone out as a starting point
oss-server --init-zone <dir>
#include, sections, per-arena overrides.conf/modules.conf.oss-biller: a small SQLite-backed SSC billing server for private and test zones.
04 Build on it
oss-core has no game loop and no window. It is what you reach for when you
are writing a bot, a tool, a zone server or another client — in Rust directly, or in any
language through the conformance suite's adapter protocol.
Bot SDK
The SDK handles the handshake, login, arena entry, map download and security
challenge. Your code sees events — PlayerEntered, Chat,
Kill — and replies.
cargo run -p oss-bot-sdk --example greeter -- \
127.0.0.1:5000 GreeterBot password
Conformance
The conformance suite drives anything that speaks a line-based stdin/stdout protocol, in any language — and can stand in as a zone or a client to check live software.
cargo run --release -p oss-conformance -- vectors -- python3 my_adapter.py
cargo run --release -p oss-conformance -- server 127.0.0.1:5000
oss-protoPacket types and codecsoss-netSans-IO transport: reliability, clustering, file transfer, VIE and OpenSecoss-formats.lvl, eLVL, .lvz, .ossr replaysoss-simDeterministic 100 Hz integer physics, shared by client and serveross-bot-sdkZone bots in a few linesoss-conformanceVector, live-client and live-server checks05 Evidence
The project's habit is that a claim names its evidence. These are the ones worth checking first.
Interoperability
A stock oss-client joined a zone running subgame, the
original server software, and flew. An unmodified, prebuilt MERVBot 4.6
completed a full session on oss-server. A genuine Continuum 0.40
client logged in and flew on oss-server.
Simulation
oss-sim is a fixed-step integer simulation with no floating point, used
by the client to predict and by the server to validate — so the two cannot drift
apart into false positives.
Protocol
One page per packet, each marked Vectors, Sources, Partly inferred, Observed or Open. Where sources disagree the page says so rather than picking quietly.
The protocol docs →Performance
500 players over a whole map fit the budget. In a crowded 500-player arena they cost about 27% of a core with VIE and 35% with OpenSec, and the budget does not close. That is written down rather than rounded away.
Method, machine and control runs →06 Status
?buyContinuum's own encryption. Its key expansion is not public and these repositories do not carry it. A build from source cannot join zones that require Continuum's encryption; zones that accept VIE — including ASSS and the original server — and OpenSec zones are reachable. The security path is a trait, so a build that supplies its own cipher needs nothing here to change.
07 Contribute
Issues and pull requests are welcome. The most useful thing you can bring is a difference from the original you can demonstrate — a setting that behaves differently, a packet that is mishandled, a frame that does not look right next to Continuum — with the evidence behind it.