LiquidMS is a clean room implementation of the Sonic Robo Blast 2 HTTP Master Server API. It can mirror netgame data from any API Compatible master server, and due to the ability to synchronize with other instances of itself, it is capable of being operated as a node within a distributed master server network.
The project is licensed under the GNU AFFERO GENERAL PUBLIC LICENSE Version 3,
which is also accessible via the included LICENSE.md
file
or the HTTP endpoint /liquidms/license
.
Special thanks to GoldenTails whose reverse engineered HTTP master server served as a reference to this project.
This documentation follows the Diataxis model, being divided into 4 categories:
- Installing & hosting LiquidMS
- Connecting to LiquidMS
- Setting up ODBC
- Banning netgames
- Forwarding ports
So... I can host my own Master Server now?
Yes you can and much, much more.
Do I need Docker (Compose) to run LiquidMS?
No. The Docker integration has been included to provide an easy way to host
an exemplary multi-node setup. All you need to host LiquidMS is a web
server, a MySQL/MariaDB database and a sufficiently configured PHP
environment. See INSTALLATION
for more details.
Do I need to forward ports/buy a server?
Yes and no. If you simply want to snitch, all you need is an HTTP-capable
internet connection and a PHP environment to run fetch.php
or
liquidanacron.php
. If you decide to run a dedicated LiquidMS node
however, you will need to provide access to your server. Port
forwarding, registering domains and such will naturally be necessary.
My node is running but no one can connect to it!
In order for your server to be accessible from the outside, you need to forward some ports though your network (usually your router). LiquidMS requires the following ports:
- 80: HTTP
- 443: HTTPS (SSL encrypted)
My world rooms aren't acessible in-game! Help!
The original V1 API used by SRB2 interprets the definition of rooms using the following schema. Take care to make your room names, descriptions and MOTD match this closely:
[START OF ROOM]
<room number>
<room name>
<description with max 1 consecutive blank line>
[END OF ROOM]
Why do you keep insisting to fetch-from-snitch?
The original API was never designed with indirection or mirroring in mind. As such LiquidMS can only supply tags to inform users of non-world data. Should a node fetch from another node's v1 API, all information about netgames' origins are substituted for the fetched v1 server, accumulating tagged data in the mirrored database.
- SRB2Query by James R. (exposed to the integrated server browser).
- RevEngMS by GoldenTails (for reference purposes).