Unvanquished 0.53.1 and launcher 0.2.0, quick fix and dark magic!

Hi, here a small update for the game to fix a bug that went unnoticed until the release. The symptom was basically “sometime while doing something (chatting, opening a menu…) the client would disconnect from the game server”. 😱

Alien headshot.
Did you ever get a bug in your face?

Since the problem is now corrected, we want to release the fix as soon as possible. Here it is. 🥳️

ℹ️ The game may still display some 0.53.0 version strings on some places because the engine wasn’t rebuilt, it’s fine.

The update

If you use our launcher, it will propose you the update on next start and only the new part with the new game code will be downloaded, So the update will be very quick!

The engine is the same as in 0.53.0, you may even play with your 0.53.0 binaries on 0.53.1 servers as the new game code will be downloaded if such servers provide auto download of missing files, but you may prefer updating the game itself.

Here are the changes:

  • The fix for the said bug making the game code crash and disconnect from game servers,
  • A minor fix for the font scaling of an on-screen message, the fix was already ready at the time we built the update and very small so this was free to include,
  • Some fixes for the underwater oxygen bar, there are still some minor issues (and that code will probably be rewritten from scratch entirely one day) but that’s good enough™ for now,
  • Some event list was not up to date, now it is,
  • A fix for a bug with maps modifying gravity (that was a regression from Tremulous),
  • A new print_momentum debug command that was already merged before we fixed the bug so, it’s there for free as well.

Launcher 0.2.0

We uploaded a new build of the launcher (updater), it carries a fix!

When updating from 0.52.1 to 0.53.0 the launcher displayed an error message after downloading updates. In fact the user just had to close and restart the launcher to actually finish the update and launch the game, which was not really a smooth experience.

This is fixed. The problem was basically that the update process was confused that the new build of the engine is smaller than the previous build. It should not. 😊️

The dark magic

We not only had very hard time to get a scenario that reproduces it (almost) reliably, the bug was also very hard to debug.

The bug was only reproducible when the game code was compiled and run as nexe (NaCl system-independent executables) which is the way the game code is distributed. It means we couldn’t reproduce the bug when running the code as native shared library or native executable on a debugger. 🤔️

Also, the breakpad system that produces crashdump when a nexe game code is crashing was not producing any crashdump for this particular bug, it looks like the bug was so bad even breakpad looked elsewhere. 😲️

So we had no clue about what was the cause of the bug and we were completely blind without any crashdump to look at and without being able to reproduce the bug on a debugger! 😱

Hopefully, we have some wizards in the team. As Kai noticed the chat box could reproduce the bug illwieckz started fuzzing it with his little hands, even uncovering some shortcomings but not the crash we were tracking. 🤨️

Then we noticed the easiest way to reproduce the bug was to keep a key pressed in the chatbox writing characters until it breaks. At some point perturbed managed to get a crashdump, you may not understand how he got that, well, do we said we have wizards?

By descending deep into the rabbit hole… a bug was found in the Lua garbage collection in RmlUi. Ishq found that multiple extant userdata Lua objects sometimes had the same underlying ‘obj’ pointer, such pointer to the underlying object being used as the key in the hocus pocus abracadabra and perturbed did wrote a patch for RmlUi.

As explained in our 0.53.0 release post and in a dedicated post about the migration, we recently moved from libRocket to RmlUi for our GUI library, RmlUi being a maintained fork of now defunct libRocket. For some reasons, while the buggy code was already in libRocket it did not produced any crash before (libRocket was added to our repository in 2012…). So here again we met with dark magic: this bug went unnoticed for so many years and so many releases of Unvanquished! We also pushed the fix on RmlUi upstream. So now not only our game is better.

Let’s play!

So, we believe this bug is fixed. Grab the game and join the party. You may notice there are less servers listed right now, that’s because some of them are running custom mods and they’re currently being rebased on 0.53.0 code base, they’ll return soon! :bsuit:

4 thoughts on “Unvanquished 0.53.1 and launcher 0.2.0, quick fix and dark magic!”

  1. The link to the download launcher for Windows is broken 🙁
    Thanks for updating this game over the years btw! I’ve been playing since 2016 and I’m glad to see it contiinue to get better.

Comments are closed.