Simple Gemini Game Server (SGGS)
A system for playing turn-based multiplayer games.
Setup
- Provide a client certificate on the front page (check your client documentation if you don't know how to do this).
- Set your name in settings, and consider setting an email address or subscribing to the feed so you're notified when it's your move in a game.
- If some pages seem not to load or time out, try disabling streaming in the settings.
Playing
The interface should be self-explanatory. Create a new game, or join a new one. Read the game help if necessary.
Further interface notes
- Timestamps are in UTC.
- Games persist until all players "leave", to allow for post-game chat.
- In games with a variable number of players (like Werewolf), Player 1 has to manually start the game.
- "Recent messages" on a game page shows all chat and other messages which appeared between your previous request and the current one. The number of these messages is shown as "[n]" in the games lists. If you use streaming, you may have seen some or all of these already. They are added to the log, and any new game state is shown after the messages (even if the move was made earlier).
- Email notifications are processed every 5 minutes. An email will be sent to you at this time if it became your move in a game longer ago than the delay set in your settings (default is 5 minutes), and this hasn't already been shown to you on the game page.
- If a new game is set as "unlisted", it won't show up in the list of unstarted games to join. Send the URL to the player(s) you want to play against. Unlisted games aren't actually private, they will still show up in the list of observable games once they've started.
Adding new games
I would be very happy to accept submissions of new games to be played on the system. This is meant to be easy. Games are implemented as commands which accept some arguments, write output to stdout, use appropriate exit codes, and store state in the current directory. There's no library to worry about, so you can easily use your favourite language. See the source code links from the help pages of the existing games for examples.
Detailed instructions on how your game command should behave
Fairly minimal example game
If you've written a game you'd like me to include, please first test it thoroughly (you don't need a running instance of SGGS for that, just run it from the command line in a test state directory), then send the source along with any build instructions to <mbays@sdf.org>, licensed under GPLv3. Please make the code readable -- I will only accept it if I am convinced that it will not open a security hole.
Privacy
- The raw URLs of requests are logged, without IP address or certificate information, for debugging purposes.
- All information associated with a game, including any chat messages, will be deleted once the game is closed.
- All games are public, anyone may join a game as an observer and they will then see all subsequent moves and chat messages.
- To delete all information about yourself from the server: quit any games you're in, and unset your name and email address if you set them.
Hosting your own instance
The full source for the server is available below, released under the GPLv3. Getting it working may take some fiddling, but hopefully it's possible. Note that although I decided against using the AGPL to make it a legal requirement, it would still be polite to release the source for any modifications you make for your instance.
source tarball
git bundle (use 'git clone sggs.bundle sggs' to clone from it)