When I was a kid, I read about this game called SubSpace on the back of my Command & Conquer manual. It was free at the time (1996) and still in beta so I gave it a shot. It was a massively multiplayer online game and played surprisingly well on my 486DX2/66 over a 14.4 Kbps modem. I was completely addicted. Then, one day, it went pay-to-play and that event marked the end of my SubSpace days.
Or so I thought. Fast-forward 3.5 years to Nov. 1999 when I learnt that SubSpace became free. Sort of. By this time, Virgin Interactive Entertainment had shut down their servers and the game was run entirely by users. There was a new version out, 1.35, which was a binary hack of the last official version, 1.34, to remove the CD check. I was elated.
By Feb. 2000, I was already thinking about how I could write a Linux port since I had switched sometime between '96 and '99. I started Googling for some information on the inner workings of SubSpace and came across one site by a fellow named Catid. He had some of the network protocol figured out but most of it was still missing and we'd get disconnected unless we logged in as privileged users due to a security checksum mismatch.
From that point, Catid and I set out to reverse-engineer the protocol, the security features, and physics engine so that he could write bots (automated clients without a display) and I could write a Linux port. This page contains some of the information we gathered over time. I've also posted some of the tools we had to develop along the way (and source code where possible) to reverse the game.
I should note that Catid and I have shared just about all of our knowledge about SubSpace and Continuum with each other. Along the way, a number of other people have shared important ideas and details for which we are truly grateful. If you happen to be one of those individuals and I didn't correctly attribute your contribution, please send me an email. It would be great to catch up, too!(more)
- Documents - documents that capture some of our knowledge
- Encryption - description of Continuum's packet encryption
- Twister - source code of the Twister cheat program for SubSpace 1.35
- UnPeX - an executable unpacker for Continuum
Starlight is a chat client for SubSpace and Continuum. Unlike other SubSpace chat clients, Starlight connects to both SubGame and ASSS servers without special (VIP) access. Download the Starlight binary below.
- Starlight 1.3 (Windows 2000, XP, Vista)
- Starlight 1.2 (Windows 2000, XP, Vista)
- Starlight 1.2 MSI-only (Windows 2000, XP, Vista)
- Starlight 1.2 (Linux i686)
- Starlight 1.1 (Windows 2000, XP, Vista)
- Starlight 1.1 (Linux i686)
- Starlight 1.0 (Windows 2000, XP, Vista) (screenshot)
- Starlight 1.0 (Linux i686)
A SubSpace directory server provides information to SubSpace clients about active and available SubSpace game servers. The official SubSpace directory server lists only game servers which register with it. I've written an alternate directory server that synchronizes with other directory servers while still accepting registrations from game servers. In essence, it lists the union of all of the game servers registered on other directory servers and on itself.
- Directory Server 1.1 (Win32)
- Directory Server 1.1 (Linux, i686)
- Directory Server 1.0 (Win32)
- Directory Server 1.0 Source Code (MinGW, MSVC++)
- Directory Server 1.0 (Linux, i686)
- Directory Server 1.0 Source Code (GCC i686)
Isometry is a new SubSpace billing server (biller) with a feature-set that rivals the SSC biller. It extracts as much information from Continuum clients as the SSC biller and uses all of those fields to check for aliases. Most importantly, it is designed to be a secure and open biller: any zone may connect to the biller.
The documentation for Isometry is available online: Isometry Command Reference
I've rolled up all of the changes I've made to ASSS (including changes that I haven't released as patches) and made it available as a new source distribution. I've bumped the version numer to avoid confusion with the official 1.4.4 release by Grelminar.
In addition to the core changes, I've written a peer module for 1.4.5 and made the source available for others to build on top of.
ASSS is an open-sourced game server for SubSpace written by Grelminar. The current release, 1.4.4, does not handle the new player registration form correctly. Specifically, ASSS uses an incorrect value for the biller-to-subgame response code on player login and does not use the correct value for the subgame-to-client response code. The ASSS 1.4.4 Demographics Patch fixes the problems and allows the biller to collect registration information from the client. It should be applied in the src/ directory of the ASSS distribution with the command: "patch -p0 < asss-1.4.4-demographics.patch".
Although the above patch allows a biller to collect registration form data via ASSS, the same technique can't be used with a subgame server. In fact, subgame servers refuse to forward the registration data to non-SSC billers, even if it's collected from a client. An attempt to use the modified response code will result in subgame not sending any subsequent packets to the biller for that client connection. I've created the ASSS 1.4.4 Isometry Demographics Patch to allow a biller to determine whether it's safe to send a modified response code. It should be applied on top of the one above with the command: "patch -p0 < asss-1.4.4-isometry-demographics.patch".
ASSS contains a persist module that stores persistent information such as player scores. Unfortunately, it does not forward correct
score values to the billing server. While players connecting to the zone see a consistent view, exporting score information from the
biller will return invalid data. The ASSS 1.4.4 Biller Scores Patch fixes the issue in the core:billing_ssc module to send correct score data.