A distributed board game system for rawtext.club
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
sloum afc922435c Initial commit 1 month ago
README.md Initial commit 1 month ago



This repo is to be used for discussing and building a system to allow members of rawtext club to play board games together.

Design Goals

  1. Data lives with each player. This ends up being a trust based system to some degree. Individual game modules can build in validation to detect cheating if they desire, but it is not a core part of the the game system.
  2. play itself is a program that will handle arranging and managing games, but the games themselves will be separate programs that are called by play. This allows for extending the game library, it also allows developers to develop whatever kinds of games they want in whatever programming language they want. Since play serves to connect players to these games, its language is mostly irrelevant, so long as a standard is created for how to pass data.
  • Game modules will live in within ~/.local/lib/play/games, so each game is under the control of the person that creates it. It can be under version control and needs to be publicly executable, but not publicly writable
  • Game records (the records of the games that are being played will live in two places by two, or more, users):
    • ~/.local/share/play/games/active - for in progress games
    • ~/.local/share/play/games/complete - for reviewable game records
    • Each player will have a game record that will usually be slightly different (by one move or so) from the other player's as moves go back and forth. Both records will need to be writable by the system, as far as I can tell... but there may be a way to make it so that a player's record only gets udpated when they go to make a move and thus we dont need to have world writable files. More will need to be thought out here.
    • Game files themselves can be structured any way the developer of the module likes. For example: a go/baduk game may use the sgf format to record the games since that already exists. But you could jsut as well come up with your own format. So long as it is a single file that the module can read and create the game tree from, there is no problem.
  1. There should be a metadata file in ~/.local/share/play/meta that allows a player to be unavailable for all games (to opt out) or to be unavailable for particular games (maybe a player does not want to be invited to play certain games). The meta file can likely be a json file or an ini file. Either one will let us expand and add more meta info for a player as needed while the system develops to maturity

That is basically it. play should have features similar to the following:

  • View the available game modules
  • Select a game module and an opponent to start a game
  • Check for active games in which it is your turn (this can get tied into recent++ or the like)
  • Play a move for a given game in which it is your turn
  • View completed games
  • Get win/loss statistics for each game
  • Get help for each module
  • Get help for play itself
  • Be able to set yourself as away or unavailable for either all games or for particular game modules (being able to opt out of invites is important)

Get Involved

RTC users can shoot me an e-mail to get added to this repo and be able to contribute to it more effectively. We can more or less design this together. Though game modules can easily be stored in suer's own repos as well, this can be a central place to discuss the system.

I have left on all features (wiki, projects, pull requests, etc). If you do work and want it merged please do so as a pull request with comments (or at bare minimum a description) so we all know what we are looking at.