This release has been a long time coming, thanks to the vagaries of obtaining a new code signing certificate for our Windows builds. Consequently there are a lot of changes which made it into Mudlet 4.10. Let’s go over some of the highlights!

What is Mudlet?

It’s a platform with which you can play multiplayer, pure-text RPGs – called MUDs, precursors to today’s MMORPGs. There are thousands of unique worlds online – download Mudlet for free on Windows/macOS/Linux, join one and enjoy!

Extra command lines

You’ve been asking for it, you waited patiently, now thanks to Edru you can have… multiple command lines! Whenever you want a second one for role-playing, your chat window to have configuration, or anything else, this is now possible:

extra command line

To turn on a commandline in a miniconsole, see here. To create a stand-alone, free floating command line, see here.

Background images for miniconsoles

You know what else you’ve been waiting and asking for? Background images on miniconsoles! Edru has been on a roll!

This also means that the usual c/d/heho color formatting functions now accept transparency as a parameter. See here on how to set a background image.

This also means that you can try setting a background image for the main window as well – but you might find that games often hardcode the black background, so it’s not ideal.

Math in Geyser

Have you been struggling to get your Geyser elements lined up just right and wished you could nudge it over just a few pixels? Been avoiding Geyser and using another option so you could have math in your constraints? Well, now you can use Geyser and receive all of its updates and use math in your constraints.

This means for example if you have a 32×32 label you want to center you can do so by using Label1:move(50%-16px,50%+10px), or using “50%-16px” for both the x and y when making the label.

Note: this improvement will also find your typos! For example if you had “95%%” before, that (invalid) constraint won’t work anymore. Find these bugs easily by searching for %%.

Other Geyser Improvements

Geyser.Label also allows you to use “nocolor” as the text color, which will then allow for coloring the text via CSS. It also picked up the Geyser.Label:rawEcho(txt) function, which skips over all the formatting assistance normally provided by Geyser.Label:echo().

Geyser.MiniConsole gains Geyser.MiniConsole:display() which works just like regular display(), but outputs in the miniconsole instead of your main display.

Tired of copying things to a miniconsole and not being able to click them? Wish you could keep your MXP links intact in a miniconsole? Well, now you can! Edru once again stepped up to the plate for this one.

New color functions for feedTriggers

Have you struggled to test your color triggers? Tired of hand-crafting escape sequences when using feedTriggers()? Well, Demonnic was even if you weren’t, so he added some new functions for working with feedTriggers. decho2ansi() and hecho2ansi() will take any decho or hecho string and return an ansi colored string. The functions are used by the new feedTriggers variants, dfeedTriggers and hfeedTriggers which allow for you to send colored text to the trigger engine for testing your color triggers. Also added is cfeedTriggers, which uses color names but uses a limited color table which corresponds to the ansi standard colors, IE black, red, green, yellow, blue, magenta, cyan, white, and lightBlack, lightRed, etc. You can also use a number from 0-255 to get the ansi 256 color equivalent.

Multi-view forever!

Now you can open ALL THE PROFILES! and move between them with your mouse and keyboard shortcuts without it turning multiview off. Have fun multiplaying!
 

Telnet CHARSET support

Game admins will be happy about this feature – it is now possible to automatically set Mudlet’s text encoding – for example, to be utf8 in case your game supports emojis – using the CHARSET protocol. Big thanks to Tamarindo from StickMUD for pulling that one in.

Music/sound in MXP

Tamarindo also went ahead and added sound/music support to Mudlet’s MXP implementation. That said, there’s a much more modern Mud Client Media Protocol that you should aim to use 😉

Scrollbar improvements

You’ll not be surprised to hear this one is Edru as well. Had you noticed Mudlet’s scrollbars behaving a bit… oddly? Jumping around, not resizing itself, stuff like that? Well, Edru’s put a lot of work into this and it should all work much more smoothly now.
 

macOS 10.13 High Sierra

Apple will stop supporting 10.13 High Sierra in November 2020, and Mudlet will have to follow suit. Thus Mudlet 4.10 will be the last version to support 10.13, which had a good run of 3 years!

Credits

Thanks to all coders that have contributed to this massive release: Andre Castellanos, Damian Monogue, Eraene, Fae, Gustavo Sousa, Ian Adkins, Jonathan Mohrbacher, Kebap, keneanung, Manuel Wegmann, Matthias Urlichs, Mike Conley, Stack, Stephen Lyons, and Vadim Peretokin.

Thanks to all translators to translated Mudlet into their language: Alan Sneath (alsneath), Anubisa, emeraldboy, Hsin Hsiang Peng (Hsins), Kae (itsTheFae), Leris, Marco “M0lid3us” Tironi (wiploo), rodeos, Vadim Peretokin (vperetokin), vingi, and 王AQ (Anselmus).

This massive piece of work would not be possible without all of you :)

Changelog

added:

  • ability to display room names on the map (no auto-align them yet)
  • an event to catch all events – `*`
  • background image for miniconsoles is now possible, same as labels
  • background image for the main window is now possible
  • English spellchecking dictionaries are now included
  • game admins can now set encoding via telnet CHARSET (so utf8 for emojis)
  • miniconsoles can now have commandlines in them
  • music is now supported in MXP
  • option not to highlight text (history) when pressing the ↑ button
  • option to use your own pathfinding algorithm instead of the built-in one
  • you can now create standalone commandlines now allow you to ask the player for info
  • transparency in now supported by cecho/decho/hecho
  • you can now use math in Geyser constraints, ie “50% + 3px”

added & improved functions:

  • ansi2string() given a string with ANSI codes in it, remove them all
  • cfeedTriggers(), dfeedTriggers(), and hfeedTriggers() to enable testing color triggers
  • createCommandLine(), enableCommandLine() for creating custom commandlines
  • enableHorizontalScrollBar() to show a horizontal scrollbar in miniconsoles as needed
  • getClipboardText() and setClipboardText() for interacting with the clipboard
  • getFgColor() and getBgColor() now report how many characters the same color applies to
  • getHTTP() downloadFile’s cousin and allows you to pass custom headers, joins putHTTP(), postHTTP() family for consistency
  • Geyser.Label:createRightClickMenu() to create menus in labels
  • Geyser.MiniConsole:display() to display straight into a miniconsole
  • Geyser.UserWindow:setStyleSheet(), setUserWindowStyleSheet() to adjust the userwindow title and borders – great for dark themes
  • hecho() can now set the background color only, without affecting foreground
  • isActive() and exists() now work with buttons
  • keepcolor parameter to replaceWildcard() and replaceAll() functions
  • purgeMediaCache() to remove MCMP & MSP media files
  • setCmdLineStyleSheet() to customize the font, colors, position of the command line
  • setMapBackgroundColor() to change background color of the map from the usual black
  • setMapRoomExitsColor() to customize the color of room exits drawn on the map
  • spairs() which iterates over a table in a sorted way
  • tempAlias() and tempKey() now can take Lua functions and not just text
  • tempAnsiColor() trigger now works as it should

improved:

  • ‘errors’ button text is now capitalized
  • a message is now shown when a replay ends
  • Client.Media – package messages themselves are no longer case sensitive
  • compact input line option is now per-profile
  • errors console now shows a horizontal scrollbar when needed
  • exit line in generic mapper is now case-insensitive, and a few other triggers improved
  • in case of compiling Mudlet yourself without TTS support, TTS functions won’t error anymore
  • links at the end of the line now won’t be clickable in the empty space
  • more accurate row and column reporting through NAWS protocol
  • Mudlet logo artwork, now sharper and better-looking. Dev and PTB builds are now clearly distinguishable
  • Mudlet’s savefiles are now saved with a more sorting-friendly name
  • Mudlet’s usual, development and PTB icons got improved
  • multiview tabbars aren’t re-arrangeable anymore, as doing so didn’t re-arrange the views anyhow
  • profile history in connection dialog now translates dates
  • scrolling now uses the upper pane’s height, so you aren’t missing text when scrolling, or getting too much of it
  • shrinking rooms in the mapper will keep everything in its place
  • string.split() now works with many more characters
  • stylesheets can now manipulate color of Geyser Labels
  • tabs and tab stops in profile preferences now make sense, which is a bit friendlier for a11y
  • upped the limit of regex capture groups in aliases and triggers to 33
  • zooming the mouse in and out in 2D mapper will keep the position more stable

fixed:

  • ‘map config’ alias in generic mapper now works
  • appendBuffer() now keeps links, so copying text with links in it to miniconsoles works
  • crash when closing a profile with toolbars
  • crash when selecting/copying text
  • crash trying to move too many rooms at once via right-click
  • fixed MXP with values containing =
  • Materia Magica’s MXP now works better with Mudlet
  • multiview now stays when you change focus between profiles
  • resetProfile() to work again
  • static items in HBox/VBoxes won’t be resized anymore when the box changes size
  • sysDataSendEvent will no longer reveal the password
  • vertical scrollbar now moves when you scroll with PgUp/PgDown
  • vertical scrollbar now shrinks in size as you get more text

infrastructure:

  • added some useful defaults for Visual Studio Code’s C++ integration
  • building with libzip 1.70.0 that lacks version numbers now works
  • cleaned up IRC code
  • debug output now spams a bit less for unprintable codepoints
  • deleted Github Action for clearing whitespace (more spam than help)
  • enabled Github’s new CodeQL security code scanning
  • fixed crash importing map with custom exit lines on Qt 5.14+ (macOS)
  • internal code that only works with the main window is now in a separate class of its own, making the programmers happier
  • Lua binding code cleaned up and improved for consistency and code style, now more fresh!
  • Mudlet can now be built & run remotely in the browser with Github Codespaces
  • Mudlet can now be built in MSYS2 on Windows
  • Mudlet’s wiki is now upgraded to latest and greatest
  • new PTBs are only built on days where there are new changes
  • updated Linux builds to use Qt 5.12.9

4.10.1 fixes the slowness in the 2D mapper, the keepcolor feature in replace(), emoji width are back as they were before, and the new CHARSET function accepts ASCII and ISO variants (for game admins).