4.6 – Geyser, Geyser, Geyser!

Geyser is the go-to way for making awesome interfaces in Mudlet and it’s received a lot of improvements in this release. Read on!

Geyser in Userwindows

Thanks to Edru2, it is now possible to put labels, miniconsoles, and the mapper inside userwindows! Userwindows in Mudlet are pop-up windows that you can drag around with your mouse, resize, or even move to another monitor. Previously, only miniconsoles could go into a userwindow.

Here’s a demo of the chat capture EMCO working right inside a userwindow!

Sounds interesting? Check out the docs on how to get started.

Tooltips for labels and gauges

Continuing their roll, Edru2 added tooltips to labels and Geyser objects! You can now add a tooltip easily with mylabel:setToolTip(“tooltip here”), check out some examples.

Stylesheet for the current profile only

Edru2 has also added setProfileStyleSheet() – an easy to use, drop-in replacement for setAppStyleSheet() that only affects the current profile and not all of the other ones as well. Super handy!

If you’re a UI author, it is strongly encouraged to switch over to this new feature. You can easily handle old Mudlets that don’t have this feature yet with:

local stylesheet = [[my stylesheet here]]

if setProfileStyleSheet then

setProfileStyleSheet(stylesheet)

else

setAppStyleSheet(stylesheet)

end

Explicit formatting for Geyser labels and gauges

Previously, if you wanted to format the way a label looks like, your only option was to use the format string every time you echo’d something to a label. No longer! Now there are explicit :setBold(), :setUnderline(), :setItalics(), :setStrikeThrough(), :setFont(), :setFontSize(), and :setAlignment() functions available thanks to demonnic‘s work on this.

Geyser child show fix in next update

Okay, that was a ton of Geyser improvements. Ready for one more?

In Geyser, when you hide a container, all of its children get hidden as well. Makes sense, right? However, there is a way you can still get a child to show – if you call :show() on it explicitly. This means that you can get a child of a hidden container to show up! This obviously doesn’t sound right, and it affects things like anitimers working correctly.

We’ve fixed it – but in QA testing, we’ve discovered that a few UIs have been built that rely on this broken behavior to work: that is, getting a child to show up even though their container is hidden. As we don’t want to introduce an update that fixes-but-really-breaks things, we’ve postponed this change until the next 4.7 release. Meanwhile, if you’re a UI author, test this Windows / macOS / Linux version of Mudlet to see if your UI is affected and if you need to fix it.

All fonts unlocked

The setting for picking a main window font was previously only limited to monospace fonts, as those are the ones that we’ve optimised our custom-made text display for. As part of our internalisation work, we’ve added emoji and non-English letter support to the display as well – which now makes it good enough to be used with all fonts!

Non-monospace fonts in Mudlet still aren’t perfect, and not all fonts are designed to be used for their letters, so beware. On top of that text games are still optimised for monospace fonts – those are easier to align text and columns with!

IRE Composer improvements

atari2600tim took it into their own hands to improve the IRE Composer – a pop-up window for GMCP that allows you to edit a fair bit of text at once and send it back to the game. It now won’t eat backwards slashes \ and it’s more resilient as well. New function: Geyser.Color.find_color_name() Demonnic added Geyser.Color.find_color_name(color) which allows you to use “Orange”, “orAnge”, “ORANGE”, etc and get back the proper name from the color table. This will also allow you to match multiword colors, such as “OrangeRed” and “orange_red” as “oranGERED” or “oRANGE_red”, etc. This new function is also now used by Geyser.color.parse and its descendants in order to make Geyser color parsing more robust!

New function: unzipAsync()

Have a zip, need to unzip it? The new unzipAsync() function by Vadi will do that just for you! It also won’t freeze Mudlet up while it’s unzipping because it’s asyncronous and multithreaded.

Notepad: now for all languages and emoji’s

The notepad now will correctly store and load contents in utf8, allowing for all languages and emoji’s to show up. Thanks to SlySven for making this work!

Mudlet $410 bounty for better screenreader support

We have an outstanding bounty of 410 USD to add screenreader support to our super quick, custom-made game text display widget – so visually impaired users can get game text read out to them. Interested in making some cash? Dive in, and join us on Discord to talk about it!

Are you on Mudlet 4.5.1-de?

Unfortunately due to a publication error, Mudlet 4.5.1-de will not automatically update to 4.6.0. Go to mudlet.org/download and manually install the new version. Don’t worry – all your profiles will stay.

Credits

Thanks to all coders: atari2600tim, demonnic, Edru, Faenriis, mpconley, shacknetisp, SlySven, and vadi2 who made this release possible!

Thanks to all translators Gandalf07, Leris, Marco “M0lid3us” Tironi (wiploo), Vadim Peretokin (vperetokin), vingi, and Ömer Albulak (albulak) for translating Mudlet into their own language.

Changelog

added:

Geyser objects (as well as the usual labels, miniconsoles and mapper) can now go into userwindows

unzipAsync() function

setLabelToolTip() and Geyser equivalents :setToolTip() functions

improved:

tab order in connection screen now makes better sense (a11y)

all connection screen input fields now have their names read out for a screenreader (a11y)

Mud Client Media Protocol: Client.Media has been renamed to Client.Media.Default per protocol change

notepad now works with utf8

IRE Composer now handles \

blinking text will now show up as italics (like in MUSHclient), as opposed to normal text like before

all fonts can now be selected in main window settings

fixed:

labels being really slow over the mapper window

gmod not re-enabling modules properly on reconnect

possible crash if you managed to close a profile without closing Mudlet while settings window was open

module priorities not to get lost

4.6.1 is a hotfix release to fix Geyser.Label:new() to work in case you have a createLabel() override (details).