Week 10/2014: Tutorial
Last week I finished the new multiplayer UI and added a first-launch tutorial.
With the new multiplayer dialogs completed, I was able to delete most of the v1.9 GUI code. The bulk of this dealt with the UI widgets used in the old-style Control Panel. Apart from some "bledit" and debug indicators, the entire client UI has now been migrated to the new UI framework.
I proceeded to move to the next (rather straightforward) task. Doomsday now has a tutorial that pops up the first time you launch it, or when requested via the task bar menus. It consists of a series of popups like this:
The idea is to walk a new user through the major elements of the UI so one doesn't have to wonder where everything is. (You can also see the power of the graphics enhancements added in 1.13 that allow us to blur the background even though the game is running.)
We've been long planning to reimplement the player controls menu with something better. To kick off this work, I've implemented a simple key binding widget. Using this, the console shortcut key can be viewed/changed via the Console menu. In the future (1.15+), we'll either enhance this widget to include support for mouse, joystick and other controller bindings, or add similar additional widgets for this purpose.
The candidate phase for 1.14 will start soon. This week I intend to start focusing more and more on bug fixing and general polishing.
With the new multiplayer dialogs completed, I was able to delete most of the v1.9 GUI code. The bulk of this dealt with the UI widgets used in the old-style Control Panel. Apart from some "bledit" and debug indicators, the entire client UI has now been migrated to the new UI framework.
I proceeded to move to the next (rather straightforward) task. Doomsday now has a tutorial that pops up the first time you launch it, or when requested via the task bar menus. It consists of a series of popups like this:
The idea is to walk a new user through the major elements of the UI so one doesn't have to wonder where everything is. (You can also see the power of the graphics enhancements added in 1.13 that allow us to blur the background even though the game is running.)
We've been long planning to reimplement the player controls menu with something better. To kick off this work, I've implemented a simple key binding widget. Using this, the console shortcut key can be viewed/changed via the Console menu. In the future (1.15+), we'll either enhance this widget to include support for mouse, joystick and other controller bindings, or add similar additional widgets for this purpose.
The candidate phase for 1.14 will start soon. This week I intend to start focusing more and more on bug fixing and general polishing.
Comments
Following on from Week 9, I began by completing work on revising the session metadata representation (libdeng2's Record proved to be just what was needed) and then proceeded to relocate the SavedSessionRepository into the engine. In doing so this underlined some of the architectural issues with each game having their own format for saved game sessions. It became clear that now was a good time to look at switching to a new, common format shared by all supported games. Recalling a previous discussion between skyjake and myself, the ideal choice would be a ZIP based format so that the engine could treat saved game "packages" similarly to what one would automatically consider a resource pack, such as a set of high resolution models.
Switching to a new format for saved games had a couple of technical considerations also. Firstly, the current format uses LZSS for compression, which adds an additional code level baggage/dependency which we didn't want to carry over into the engine. However, we'd still like for the engine to be able to convert existing saved games automatically, from Ring Zero and therefore doing the conversion on game side wasn't an option. Clearly, the best solution was to separate format conversion into an independent savegame conversion application/tool.
The new Savegame Tool performs this format conversion and isolates the LZSS dependency in the process. Currently this tool must be ran manually but this will be wrapped by a new Doomsday plugin (not yet implemented), allowing the engine to automate the conversion process.
With the new save format in place and conversion of existing saved games mostly addressed, the next step was to update the SavedSessionRepository to recognize the new format. This was relatively straight forward although I did bump into a few issues which were largely a result of my relative unfamiliarity with the libdeng2 file system. I ended the week with the new save format recognized and ready to begin the final phase -- updating map state deserialization.
Next week I plan to complete work on the savegame system, introduce a plugin for automatic conversion of savegames using Savegame Tool and then proceed to clean everything up ready for merging back to the master. If this all goes to plan, hopefully there will be enough time remaining to update the UI with a host of new savegame related management features.
For instance, for a small example, I can imagine the smoke trail of Heretic's phoenix Rod missile slightly blurring everything behind it.