### ----------------------------------------------------
### -- MUGS
### -- Licenses: Artistic-2.0
### -- Authors: Geoffrey Broadwell
### -- File: docs/todo/engine.md
### ----------------------------------------------------
% Engine TODOs

*Reviewed 2021-03-03 by japhb*


These todo items are for the core engine itself -- pretty much all of the code
that is not specific to a particular UI type, game type, or game.

* WIP: Permanent storage
* WIP: Server-generated config options
* WIP: Async and out-of-order responses
  * Stronger validity checking on message exchanges and reply pairing
  * Injectible errors and latency
    * Note: may be able to do this by layering session Supplies
* Time
  * Time limits: game, character, turn, etc.
  * Pausable internal game clock
    * Support for "chess pause": current player puts move in escrow
    * Generalize to games in which participants simultaneous plan their move
      then all reveal their play at once
* Multiple players
  * User count limits, per game and per server
  * Min players, start players, max players, joinable, invitable
  * Game doesn't start until minimum number of players have joined
  * Character removal
    * Removing from turn order
    * What happens when mid-hand/round?
    * Abandon game when last person leaves
    * Handling player forfeit
  * Update participants when action completes
    * All participants immediately for perfect information, turn-based games
    * Nearby participants at next tick for action-based, limited knowledge games
  * Should be possible for a single *player* to be connected as multiple
    characters/avatars in the same game (and also for game admins to disallow
    this when they want player/character identity to hold)
    * Should this be by *persona* instead of by *player*?
      * Pro: Prevents info leakage of the personas owned by a player
      * Con: Allows a player to easily create many sock puppets (without at
        least having to create separate users/accounts for them)
* Sessions and connections
  * Persistent sessions and reconnection
  * Frontend --> backend connection multiplexing
  * Max connections/sessions
  * Load shedding
* General invite tokens
  * Fixed lifetime, single use
  * Invite to join: server, account?, team, game
  * Invite to be marked as "friends"?
  * 2FA for tokens?  (e.g. the token code + an SMS code)
* Spectators
  * Separate spectator game(s) for a given real game to scale crowds?
  * Separate control of invites for players, spectator games, and plain spectators
* Game result tracking
  * High scores
  * Accomplishments/Achievements/Awards/Rewards
  * Player rankings
  * Tournament tracking
* Messaging
  * Persona messaging
  * Offline messaging
  * Server notices
* Service instance federation?
* Service management
  * logging
  * monitoring
  * slow rollouts
  * rollbacks
  * live backups
  * fleet management
  * universe management
  * etc.
* Repeatable playbacks
* Authn/login provides medium-life token that survives FE server failure


