Last week was again spent on bug fixing and improvements for the upcoming stable 1.11. The up-to-date status of our candidate phase work is on the stable release to-do page:
A couple of important model-related bugs were fixed: slash handling in definitions and illegal access of submodels. Stability should now be improved and some of the missing 3D models should again appear normally, as the paths are interpreted correctly.
I also made improvements to the task bar. The ">" button in the bottom left corner now pops up a menu with some basic console log related functions. I also fine-tuned the behavior of many of the widgets in certain edge cases.
The plan is to release the stable 1.11 in the second half of July, depending on the progress with the to-do items. The candidate work has been slightly slowed down by the dengine website improvements, however my summer vacation is starting soon so at least I should have plenty of time for Doomsday in the near future.
Input bindings and Doomsday Script
Doomsday has always missed a mechanism that allows performing tasks automatically when upgrading. I decided to use Doomsday Script to handle this.
At the moment, we need to have the new Tilde binding created so that opening the taskbar+console can be done in the manner familiar from previous releases. The problem is that bindings are persistent per game plugin, and when an upgrade is detected there is no guarantee that a specific game is loaded during that session.
When Doomsday now (build 920 onwards) detects an upgrade from an old build that doesn't have the Tilde binding as default, it persistently adds a callback function for all the game plugins. The callback creates the Tilde binding using Doomsday Script. That way, when the plugin is later loaded, the Tilde binding gets created for each game separately. In the future, some of the bindings can be made shared between all games so that the situation is somewhat simplified. For the time being we are storing them separately for each game, though, so this extra wrinkle is necessary.
This solution allowed me to establish some new/improved patterns about how Doomsday Script integrates with the rest of the system:
- I added the App and Input native modules that provide access to the native App class and input subsystem.
- How to extend the libdeng2 observer mechanism to scripts so that they, too, can register callbacks to be called when a certain notification occurs. Here it is important to keep the native code and scripts conceptually as similar as possible.
- There is now an application bootstrap script that gets run as part of the app init (currently only for the client).