Wesnoth and me: 2021 edition

Hello again and welcome to my increasingly infrequent round-up of Wesnoth-related activity for the past number of years. Although the sparseness of my schedule in this case might actually work to my advantage — Wesnoth 1.14.0 went gold on May 1st 2018, and its feature release successor is version 1.16.0, released on October 25th 2021 merely two weeks ago!

This time around there are no big life-changing events in between — well, sort of — so I’m gonna spare you the pain of reading through an overdramatic intro and just skip straight to the nitty-gritty.

Terminal window showing Wesnoth’s add-ons server software logs

Those who kept an eye on our first Project Manager elections in 2020 might have noticed that I was designated the official maintainer of Wesnoth’s add-ons server software, campaignd, as part of Pentarctagon’s Project Council.

Because campaignd is a mature piece of software, my contributions this past cycle in that area were generally small and not user-facing, mostly dealing with improvements to the FIFO-based commands that campaignd has for administrative tasks. That said, it was my responsibility as maintainer to review kabachuha’s incremental add-on downloads and uploads PR. His work on this feature is pretty major and considered one of the highlights of Wesnoth 1.16 as a whole.

I also did implement a proper command line interface for setting up campaignd instances, as well as made the whole thing closer to being usable on Windows for testing purposes.

Although this was technically part of the preparations for Wesnoth 1.14.0 and not 1.16.0, I am in fact responsible for the implementation of forum ban checks in the MP server (wesnothd) in order to enable account and email address-based bans in our phpBB forums to be used as a more robust alternative to wesnothd’s IP address-based bans. Not much to say about this particular item that hasn’t been discussed to death elsewhere, though.

Wesnoth Campaigns menu

Another big highlight in Wesnoth 1.16.0 is the refurbished Campaigns menu, which now supports campaign-specific backgrounds and has the various campaign launch options rearranged in a more logical fashion. I’m mentioning this here, of course, because it was all my doing. I feel like we don’t make as much use of this feature as we potentially could do, but that would mostly be because of time constraints involving the start of 1.16’s beta phase. We might be able to do more with this in 1.18 — for example, by commissioning new artwork specifically for the menu.

(Less obvious is that long before the more visible overhaul, I also made the Search box in the Campaigns menu more useful by making it match descriptions and abbreviations as possible search terms, in both their original language — usually English — and the player’s translated language.)

Surprisingly for a game that has been around since 2003, Wesnoth’s user interface all this time lacked an I-beam cursor for highlighting text input elements. I took it upon myself to address this, with LordBob providing the necessary artwork. In addition to this, I also made text labels in the non-legacy parts of the UI actually use a hand cursor when hovering links.

Wesnoth Add-ons Manager UI

I intentionally avoid messing with the Add-ons Manager and Multiplayer Lobby UIs these days since it’s too easy to get those wrong, but I did contribute a few changes to those this cycle nevertheless:

Wesnoth Connect to Server dialog

  • I gave the network transmission dialog used for the Add-ons Manager a big make-over to bring it more in line with the rest of Wesnoth’s modern UI.
  • The MP Connect to Server UI now features additional convenience options to add or remove custom server addresses. It’s very convenient.
  • The Add-ons Manager now displays the server address and a badge indicating whether the player is on a secure connection (TLS). I do have a similar patch pending for the Multiplayer lobby, but evidently it didn’t make the cut for 1.16.0 or 1.16.1 due to some complications with the design and review process.
  • The license terms screen displayed to uploaders of add-on content is prettier and easier to read. Also someone said ‘proscribed’ instead of ‘prescribed’ ages ago and nobody noticed before. Oops?

I made several minor tweaks to the main in-game UI, in particular reclaiming some wasted space around the minimap and within the information area on the sidebar. If you are currently annoyed by the font size being smaller on very low resolutions (under 1024x768) then you are allowed to blame me. We still have quite a lot of annoyances left to fix with regards to how text is laid out around that general area, really. In addition to this, I also rearranged some menu elements in a way that hopefully makes more sense for new players in particular.

Greyed-out buttons now look more greyed-out across the board. (Due to a copy-paste error, all these years their backgrounds were way more colourful than they were supposed to be. 🤷‍♀)

The custom UIs in World Conquest were notably non-conformant in design when the campaign was originally added to mainline. I tried my best to improve things in order to make it all presentable for 1.16.0, but I am well aware it was not a thorough job. Still, I believe it serves its purpose and most players won’t mind the rough edges.

Wesnoth debug-mode Create Unit dialog

I made various improvements to the Log Settings UI in Preferences → Advanced, used for altering debug levels on the fly. Likewise, the debug mode-only Create Unit dialog now has a dropdown menu for selecting a unit’s technical variation, if any such are part of the unit type’s definition (e.g. Walking Corpse, Soulless).

Finally and I’m not sure if it really makes sense to leave this for last, I got rid of SDL_ttf for good. 🥳 FreeType (which Pango/Cairo will still use where appropriate) is great and all, but SDL_ttf was never meant to be more than a tech demo, much like SDL_net. Really, none of the SDL sample libraries were meant for production use, but that didn’t stop Wesnoth and the broader OSS community from regarding them as immutable complete external dependencies. At least SDL_image and SDL_mixer are more actively maintained and extended, even if the latter’s feature-set is still extremely limited for larger games like Wesnoth.

Surprisingly, I do use Windows sometimes and know my way around the core parts of the legacy Windows API (Win32) even though I have no use for this knowledge most of the time.

In addition to the aforementioned tweaks to campaignd, I’m also responsible for teaching Wesnoth to identify Windows 11 just in time for the 1.16.0 release, identifying the Windows 10 feature release number, and implementing the Windows and macOS-specific logic for the Load Game dialog’s version dropdown menu. And while I’m here as I just mentioned the Game Version dialog, I also added a button to it making the game logs folder more accessible on Windows.

I changed some obscure surprising behaviour from Wesnoth when dealing with translations on Windows in particular, and dealt with some Wine-specific weirdness.

Finally and most importantly, I made font rendering on Windows less sucky. Or at least I tried to. Some hefty compromises had to be made in order to keep supporting Windows 7 and 8/8.1, sadly. (Do note that the Help font sizes used in the screenshots attached to that PR are the 1.14 font sizes, and not what I eventually chose for 1.16 as part of the SDL_ttf-removal operation.)

Wesnoth’s --report output — as well as the Game Version dialog’s clipboard report which sources the same build_info API — now includes additional information about the game’s SDL video and audio configuration. This should make it easier for us to identify and work with bug reports dealing with oddly specific/non-standard configurations.

I added the Earthy Rockbound Cave terrain variation previously specific to my user-made campaigns Invasion from the Unknown and After the Storm, to mainline. This means I no longer have to carry around like 12 tile graphics and a trivial terrain definition in my own UMC.

To finish up, I was in charge of a couple of major administrative changes behind the scenes as well:

  • I spear-headed the move off freenode to Libera Chat during the freenode apocalypse. I’m still eagerly waiting to see what FOSS infrastructure Andrew Lee decides to acquire and utterly fuck up next.
  • I’m largely responsible for the first Wesnoth Project Constitution, in response to a series of events which maybe some day I will discuss in detail. Personally I did not want this to be my largest legacy, especially so many years after serving as Release Manager, but sometimes you’ve got to break an omelette to make eggs, and put your hands in the oven to make fire. I don’t think that’s how either of those two idioms goes.

In addition to those, I also did and continue to do the usual general server administration work you need to do to keep this whole endeavour running smoothly. In particular, I have set some time aside this year to make Wesnoth.org more of a good netizen and forcefully upgrade plain-text http connections for certain subdomains, most notably wiki and forums, both of which deal with user account credentials. In the process I’ve also managed to get rid of or optimize a bunch of ancient Apache mod_rewrite cruft.

I am also currently waiting for the usual influx of new or returning people following the release of 1.16.0 to quiet down a bit to go back to torturing myself with MediaWiki. Turns out we are currently in posession of a MediaWiki database with multiple corrupt entries, which considerably affects its upgradeability to newer (post 1.32) versions. Meaning the upgrade tasks choke and crash on the corruption. It’s that bad. Where did the corruption come from? From the original migration from some wiki software to MediaWiki back in 2004 or so — I wasn’t around back then, so my only responsibility in this debacle is fixing the mess bequeathed upon me. I am so not looking forward to it. 😅