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>" MUGSNOTE 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-typecommand tomugs-toolImprove 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!