v0

% 0.1.3 Release

MUGS 0.1.3 Released!

The Raku-MUGS org is proud to present our third development release on the way to our next major milestone. This release includes many accumulated changes since 0.1.2, 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

NOTE 1: If you're having trouble with installing via zef, please take a look at our installation guide, which has additional troubleshooting hints.

NOTE 2: In this release, MUGS-UI-WebSimple is known to be broken when installed by zef, because it cannot find its HTML templates. If you would like to try this UI, please use the Source Repos method below. A fix for this has already been merged into the post-0.1.3 tree.

Source Repos

The source for all released MUGS repos can be found in the Raku-MUGS org on GitHub. 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 and 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.

Primary Improvements

Switching CLI/TUI to Terminal::LineEditor and Terminal::Widgets

Much of the development effort benefiting MUGS in this release was actually focused on some new pre-requisites, Terminal::LineEditor and Terminal::Widgets. In turn, Terminal::Widgets made use of the research on terminal emulator failure modes in Terminal::Tests.

Terminal::LineEditor provides a pure-Raku replacement for libraries such as Linenoise and ReadLine, providing all the usual line-oriented input editing functionality while also properly handling mixed-width Unicode input.

Terminal::Widgets combines the query-capable terminal handling of Terminal::LineEditor with the lessons learned from several research projects to extend Terminal::Print's very low level widgets with live dynamic layout, bubbling event handling, other significantly expanded functionality, and a pre-built interactive widget library.

In this release, MUGS::UI::TUI was rewritten to use Terminal::Widgets instead of directly using the underlying Terminal::Print, and MUGS::UI::CLI was rewritten to use Terminal::LineEditor instead of its own custom input handling.

Other Improvements

Bug Fixes

  • Shutdown, not just disconnect, when exiting with errors

  • Exit with errors if missing requested game plugins

  • Don't crash when a Supplier is disconnected early

  • Work around changes to some Rakudo and dependency behaviors

  • Fix out of date message stats schemas

Documentation

  • Make sure every MUGS doc subdir has a README and index that links to it

  • Add design section for "Fun With Numbers"

  • Significantly more work on Create a UI doc, including concrete examples

  • Add several design and speculative docs for MUGS in general and MUGS::UI::TUI in particular

Performance

  • Stop sending empty WebSocket Continuation frames, thus approximately halving the frame rate on the wire

  • Serialize via CBOR even for in-memory connections; this reduces in-memory performance a bit in exchange for improving consistency, catching more serialization bugs, and allowing better separation of serialization and network lag

  • Support pre-packed Message data, for sending identical game updates to many clients efficiently

  • Support real-time lag compensation and interpolated game updates to better handle low-bandwidth and high- or variable-lag networking

Security

  • Disallow security-related reserved names as identifiers, as these will almost always be associated with nefarious behavior

  • Improve capabilities and error handling of structure and config validators

  • Validation configuration before registering Server Game classes

  • Validate server updates on receipt before saving to processing queue

Testing

  • Switch CI tests to test against HEAD of MUGS dependencies

Tools

  • Factor out common parts of local UIs and local tools

  • Add a new-ui-type command to mugs-tool

  • Improve tool handling of multiple MUGS repos

Contributions

This development release is largely the work of Geoffrey Broadwell (japhb on Libera.Chat and GitHub), and includes improvements to terminal capabilities based on generous contributions of (sometimes very) confused terminal emulator screenshots from the community to Terminal::Tests.

If you'd like to contribute to future releases, please take a look at our CONTRIBUTING doc; 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. 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 the ever-helpful #mugs crew, to everyone who worked on the many projects on which MUGS is built, 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!

MUGS v0.1.4

Multi-User Gaming Services - A Raku-based platform for game service development

Authors

  • Geoffrey Broadwell

License

Artistic-2.0

Dependencies

MUGS::Core:ver<0.1.4>MUGS::Games:ver<0.1.4>MUGS::UI::CLI:ver<0.1.4>MUGS::UI::TUI:ver<0.1.4>MUGS::UI::WebSimple:ver<0.1.4>

Test Dependencies

Provides

  • MUGS

The Camelia image is copyright 2009 by Larry Wall. "Raku" is trademark of the Yet Another Society. All rights reserved.

Built with Podlite — the markup and publishing tools behind this site.