### ----------------------------------------------------
### -- MUGS
### -- Licenses: Artistic-2.0
### -- Authors: Geoffrey Broadwell
### -- File: docs/announce/v0.1.1.md
### ----------------------------------------------------
% 0.1.1 Release


# MUGS 0.1.1 Released!

The [Raku-MUGS org](https://github.com/Raku-MUGS) is proud to present our first
development release on the way to our next major milestone.  This release
includes many changes since 0.1.0, but the majority of the milestone work is
yet to be done.  :-)


## Packaging

MUGS is available in both source and package form, via these methods:


### `zef`

To simply play with what's already there, use `zef` to install all of `MUGS`
from the `zef/fez` ecosystem.  To prevent failure due to an **unneeded**
transitive dependency that does not exist on all systems, use the following
command:

```
zef install --exclude="pq:ver<5>:from<native>" MUGS
```


### Source Repos

The source for all released MUGS repos can be found in the
[Raku-MUGS org on GitHub](https://github.com/Raku-MUGS).  Note that if you are
working on a UI repo, you will probably want to install MUGS with `zef` as
described above to satisfy dependencies, or at least install both
[MUGS-Core](https://github.com/Raku-MUGS/MUGS-Core) and
[MUGS-Games](https://github.com/Raku-MUGS/MUGS-Games).


### Docker

MUGS does not yet have prebuilt Docker packages, but each source repo includes
two `Dockerfile` scripts.  The main `Dockerfile` simply installs the relevant
MUGS libraries, scripts, and resources on top of a `rakudo-star` official image
and creates a default MUGS identity universe.  `Dockerfile.test` builds on that
by also installing test identities into the default universe.


## Improvements

After the 0.1.0 "Proof of Concept" milestone release, development toward the
next milestone has mostly focused on low-level infrastructure improvements,
with a few game and genre improvements mostly to exercise these changes.
Detailed `Changes` files can be found in each source repo, but the following
summarizes the changes so far:


### Bug fixes

* More required `MUGS::App::LocalUI` and `MUGS::UI::Game` methods stubbed
* `nop` actions no longer recorded as game events
* Session connect de-clever-ized (was giving LTA connection errors)
* `^U` in CLI input fixed to bind `delete-to-start` (instead of `delete-line`)
* Naming and character/player confusion fixed in several places


### Identities

* All identity types now do `MUGS::Identity` role
* All identity names now validated, deconfused, and universe-reserved
* Persona and Character stringify to their `screen-name`


### Universes

* Support for schema versioning, meta-state, and introspection
* Schema bootstrapping generalized
* Support for `mugs-admin update-universe`
* Schema metadata checked when validating database


### Messages/Protocol

* More details and better filtering in `active-games` info bundle
* Serialized `MUGS::Server::GameEvent`s sent to all participants
* `%update` flattened into `game-update` `%data` to improve message format consistency
* Winloss status refactored to handle both PvP and co-op play


### Clients

* Most recently seen gamestate cached in client (where UI can access it)
* LocalUIs always create a Lobby client before any game UIs
* Lobby client available game types list improved and active games list added
* Game startup push messages tracked and handled, and now trigger `show-initial-state`


### Servers

* Helper method added for overriding a game config form default
* Hook for post-processing added at the end of `process-action`, just before
  returning the game status
* Overrideability of `maybe-(start/stop)-game` improved
* Server connection `debug-name` added and displayed in WebSocket debug info


### Genres and Games

* TurnBased
  * Initial play order randomized and tracked
  * After a valid turn, play moves to next character and sends `game-update`s
  * `nop` actions allowed out of turn
* Other
  * Error test "game" added, designed to generate errors in specific ways
  * Per-participant `winloss` status supported
  * Refactored/unified behavior of turn validation, submission, and error handling
  * Simple `BoardGame`, `RectangularBoard`, and `MNKGame` genres added
  * `TicTacToe` added as a simple configuration of `MNKGame` genre


### MUGS-UI-CLI

* `MUGS::UI::CLI::Input`
  * Extensive cleanup and maintainability refactoring
  * New features/bindings supported, including expected Readline-style bindings
    for `^D`, `^V`, `^Y`, and `^Z`
* App
  * `MAIN` multi simplified, allowing user to specify an arbitrary game-type
  * More UI output helper methods added
* UX
  * Game help stubbed as needed for all game UIs
  * Special handling for `NotStarted` in play loop and when asking for help
  * Better handling of leaving games, especially avoiding leaving lobby when
    other game UIs remain active
  * Active game list shown in lobby at start and in lobby help
  * `/game <id>` supported to *join* games as well as switch to them
  * When a game starts, show a notice and the initial state
  * `BoardGame` players reminded whose turn is next
  * Push message handling completely revamped


## Contributions

This first milestone is largely the work of Geoffrey Broadwell (`japhb` on
Libera.Chat and [GitHub](https://github.com/japhb)).

If you'd like to contribute to future releases, please take a look at
[our CONTRIBUTING doc](../CONTRIBUTING.md); we'd love to have you!


## Contacting Us

We are on the `#mugs` channel on Libera.Chat IRC; please come and ask questions or
offer suggestions!  Please note that we do not yet have 24-hour round-the-clock
coverage, so please stick around and allow some time for response if you don't
get one immediately.

If you are interested in the more general world of game development on Raku,
we are also on the `#raku-gamedev` channel, also on Libera.Chat IRC.


## Future

The next few milestones have been sketched out in our
[release roadmap](../todo/release-roadmap.md).  Future releases are of
course subject to change, but the most likely changes are deferral of iffy
changes or incomplete features that are holding up release of finished work.


## Thank You

THANK YOU to everyone who worked on the many
[projects on which MUGS is built](../design/built-with.md), to the awesome and
supportive Raku community, and of course to Larry, Damian, Jonathan, and all
the other Raku designers for creating a language that brings joy day after day!


