Now playing

First I’d like to mention that the Windows CI builds are back. They were previously disabled because compiling Doomsday was a bit too much to handle for the AppVeyor open source builders. However, they’ve recently upgraded their hardware, which has improved build times dramatically. CI building is particularly useful for projects that run on multiple platforms since compilation issues can be caught early.

During the past week or so I’ve been tying up loose ends in the Home UI.

One thing that should be immediately obvious when starting a game in a recent build is that there is a new transition animation when loading a game or returning to Home. Namely, the Home now scrolls up and down in a manner reminiscent of the old Quake-style console. This makes the transition into a game smoother an affair, and one gets the sense that the Home is hanging around “above” the game while playing.

Previously, while a game was loaded, one could open a game/multiplayer selection dialog via the DE menu. These dialogs used the same code as the old Home screen, so they have been removed along with it. I’ve chosen a new approach to provide access to Home functionality while a game is running: the game can now be minimized so that the top part of the screen is taken over by the Home, while the game remains running and playable in the bottom.

minimized_game

In practice you can minimize the game by selecting DE > Show Home.

I also made a couple of small UI tweaks:

  • The add-on compatibility dialog that may appear when loading savegames can now be ignored by holding down the Alt key while the dialog is open. This may sometimes be useful if you are confident that the add-ons in use actually are compatible and you wish to override the rather strict criteria used by Doomsday. (However, this may also lead to a crash if the add-ons actually are incompatible.)
  • In fullscreen mode (while in Home), there is a convenient Quit button in the top right corner of the screen next to the notification area.

On the bug fixing front, some important issues were addressed:

  • Recently I was refactoring the resource management code and inadvertently introduced a bug which caused game color palettes to randomly malfunction. This has been fixed.
  • Sometimes the automap was not being drawn (bug 2165).
  • Crash when unloading data files, for example when switching add-ons on the fly.
  • The data files within a .box were not sorted properly, leading to false negatives in add-on compatibility checking.
  • The UI focus indicator did not respect UI blurs or clipping rectangles.
  • Final remnants of the fixed-length file path handling were removed (bug 1829).

Files and fixes

Last week I continued working on Home and data file packages, and fixed a number of bugs.

Loading of PK3s, WADs, individual lumps, DED files, and Dehacked patches is now working via Home. Loading of .box folders is also somewhat operational, although the dependencies of the box contents are not yet completely handled. (Boxes can have required, opt-out, and opt-in files.)

I put quite a lot of additional effort into cleaning up how data files get mapped to Doomsday packages particularly when it comes to selecting identifiers and tags. This could still be improved with additional rules for smart detection of file groupings based on common names and parent folders. I’ll probably leave the finer adjustments for later.

The game profiles you see in Home are now more deeply integrated into the rest of the application. They are used when loading game plugins, so that the packages selected for the profile are appropriately loaded and unloaded. Multiplayer games will also be using profiles shared by the server.

I also did several bug fixes for issues that have cropped up in recent unstable builds:

  • On Windows, quitting the game might not always trigger unloading of the game plugin, leaving you with a black screen. (Shift-Esc was still working.)
  • If the .cfg files were missing when launching Doomsday, they weren’t written at all. The clearest symptom of this bug was that your settings were not remembered when relaunching the game.
  • There was a long-standing bug in the doomsday.out file writer that had not been triggered before. It was causing log output to stop being written to the file at a certain point.
  • The Home UI layout was not always updated correctly when the window was resized (or display resolution changed) while a game was being played.
  • Popup widgets with long text content were using too much memory.
  • There was an illegal memory access to a deleted object when closing submenu popups, for example when viewing information about a package.

Refinement

I came down with a small cold so progress has been somewhat slow recently. My main focus continues to be the Home UI.

I’ve mostly been applying small bug fixes and improvements, such as correcting errors in the Home layout. The Tutorial was also crashing because it was trying to reference a removed UI element. There is now a new settings dialog for configuring the UI. This includes a new setting for slightly scaling down the fonts and other UI elements. This should be particularly helpful when using smaller display resolutions. Continue reading Refinement

Now with twice the bits

I took a short break from the UI work to perform an autobuilder upgrade. The biggest changes are that the autobuilder now produces a new 64-bit Windows MSI package (including Start menu shortcuts), and an RPM package built on Fedora Core 23 (also 64-bit). This means all platforms now have a 64-bit package and Windows additionally has the old 32-bit one as well.

Launchpad builds both 32 and 64 bit packages for Ubuntu. All new Launchpad builds will be done on 16.04.

The upgraded Windows autobuilder uses a newer compiler (VS 2015, Visual C++ 14) and the latest version of Qt (5.6). I’ve also started signing the Windows executables and MSI packages so that you’ll have some assurance of their origin.

These changes may have caused regressions so keep an eye out for any odd behavior. Let us know how it goes!

The changes are also now reflected in the build repository here on dengine.net. For the time being I’ve linked the builds feed directly to the Autobuilder pages to access the latest files. Eventually I’ll rework the pages for builds and downloads — I’ve been eyeing the system for a backend redesign.

Bug reports have been indicating that recent work in the 2.0 unstable builds has caused some file handling issues. I took a closer look and noticed that in many cases, files written to the runtime folder were still being created using standard C I/O functions. This meant they were completely bypassing Doomsday’s internal file system and making assumptions that are no longer valid. I updated all the code that writes files to make use of Doomsday 2 APIs, including .cfg files, temporary MIDI music files, screenshots, the network ID (“client.id”), and creation of subdirectories in the runtime folder. This should take care of all these issues related to Doomsday being unable to write or save files at runtime.

These file fixes are currently in my Home UI work branch, but they will be merged into the master branch in the near future, along with the first iteration of the Home UI.

Game profiles, autobuilder upgrade

Progress has been somewhat slow recently. The central new component I’ve been working on is game profiles. They represent the combination of a game and a list of packages to be loaded with that game — much like a Snowberry profile. A key feature of the Home UI is to let you create and manipulate game profiles.

You may recall that a few years ago we added renderer appearance profiles to manage the various renderer settings. The implementation of these was tied to the old console variable system, but there was a good portion of code that was reusable also for game profiles. I refactored the appearance profiles to extract the generic parts that deal with saving and loading profiles to/from an Info document, and generalized the concept of a profile. That allowed me to rather easily implement game profiles. In practice, the profiles will be written to a file called “configs/game.dei” under the runtime folder.

Now that Ubuntu 16.04 is around the corner, the autobuilder server is due for a system upgrade. My plan is to get rid of the 32-bit Linux builders (Launchpad should take care of that), and only set up builders for 64-bit Ubuntu and Fedora. The Windows builder will be using Windows 10 and the upcoming Qt 5.6 with MSVC2015. I should be finally able to configure a 64-bit build also for Windows (fingers crossed!).

Steady progress

Last week I continued working on the Home UI as planned.

There is now basic keyword filtering for the Packages list. The entered words are matched against package names, IDs and tags, so it is possible to quickly locate specific packages.

The current implementation is quite rough, though, and not suitable for large collections of packages. It needs optimizing, and the list widget itself should support reusing a small number of widgets to represent only the potentially visible items. At the moment it simply creates widgets for the entire list, even though most of them would be outside the view.

Another improvement is persistent state for the Home columns and item selections. In other words, when you start Doomsday, the previously selected column and game are automatically re-selected.

On the whole the work is progressing as planned and it is clear what needs to be done next. My short-term goal is getting all the important features working so the new UI can be released in the unstable builds for public testing.