Odds and ends

I’ve been getting back into the swing of things with a set of smaller changes and improvements. I haven’t yet started work on the major focus of the 2.1 release, which is planned to be Multiplayer improvements.

2.0.2 will be out on Saturday, July 1st, with a couple of bugfixes that I hope will be useful. As usual, I will post the details after the build is available.

The recent changes include:

  • Stability improvements. Several methods that went against the C++ standard were revised. Reliance on undefined behavior was leading to compiler optimization issues particularly with the latest GCC 7. Also, error reporting is now more robust. For instance, previously when something went wrong during busy mode (like engine startup), it could easily lead to a crash because the client app wasn’t reacting to the situation appropriately. When the error message was being shown, the application was still trying to do something in the background.
  • More powerful model scripting. Starting animations and timeline scripts via Doomsday Script.
  • The model renderer shaders support more macros for easier customizability. Generally speaking, using macros is more future-proof than writing completely customized shaders.
  • Resource identification fixes. There was a duplicate IWAD spec for Heretic 1.3 vs. SOSR. Now only the latter remains; if you have problems with your Heretic IWADs, Clear Cache and restart Doomsday. Also, autogenerated package IDs had a problem with special characters in file names. Doomsday will choose package IDs based on the file name of the data file, however it allowed spaces and quotes be included in the IDs. This lead to problems because whitespace characters are used as separators in lists of IDs, and quotes may not be accurately escaped in Info strings. Again, Clear Cache is recommended.
  • Assimp build option. There’s a new CMake build option (DENG_ASSIMP_EMBEDDED) for disabling the use of Doomsday’s customized version of Assimp. This allows one to configure Doomsday to use the Assimp installed as a system library, which is more common on Linux for instance.
  • More UI tweaks. Plenty of small things:
    • Minor dialog layout improvements to avoid awkward dimensions.
    • Changed the UI font on Windows.
    • Added popup outlines for visual clarity.
    • Fixed Home tab scrolling with the mouse wheel so that it doesn’t always jump to the previously selected item when switching between tabs.
    • Game icons are refreshed when package availability changes. No more missing and incorrect icons shown for game profiles.
    • Fixed missing window fullscreen state notification (was affecting the appearance of the “Quit” button on Mac).
  • Monitor refresh rate. Yesterday I started working on monitor refresh rate configuration options. I realized these have been completely missing from the settings for some time now. Doomsday does query the supported display modes, which includes information about refresh rates, so now you have the option of choosing which refresh rate Doomsday will prefer when switching modes on Windows/Linux (display mode changes are not done at all on macOS). However, I recommend you consider adjusting the game pixel density instead of the screen resolution to keep the UI sharp and crispy.

Improved UI for multiplayer

For the past two weeks I’ve been focusing on finishing the Home UI for 2.0. I’ve also been doing plenty of small improvements and bug fixes.

The final element that has been missing from the Home is the Multiplayer tab. That is now no longer the case: build 2227 has a new UI for viewing server information, and a couple of important bug fixes for multiplayer servers.

Server info dialog

In the Multiplayer tab you can see more information about a server by right-clicking it or by clicking the […] button in the server description. This pops up the new dialog that can be seen in the screenshot above.

A direct connection to the server is automatically attempted so that you’ll see the server’s current status and to verify that the server is reachable. The status information includes the current map outline, just like in the Shell.

In addition to status information, the dialog has a “Join Game” button, a list of the packages loaded on the server (the client must load the exact same ones when it connects), and you can choose additional packages to load locally. These local packages are game-specific rather than server-specific and are remembered in the client configuration (part of persist.pack). The “Local Packages” button is disabled by default. It can be enabled in Network Settings.

Note that if you load additional local packages in multiplayer games, you must ensure that they don’t contain gameplay-affecting changes. For example, loading a different map is out of the question, as are changes to mobj states. Doomsday 2 packages with 3D model assets are safe to use locally in multiplayer games.

I now consider this UI, along with the rest of the Home, feature-complete for 2.0. The long-term thinking behind the server info dialog is to evolve it toward a mini-Shell interface so that you could issue quick console commands to servers that you control. That will not be part of the 2.0 release, though.

Continue reading Improved UI for multiplayer

Improved UI for packages

For the past week I’ve been finishing up with the Home UI for the 2.0 release. The Packages tab has gained a lot of useful functionality.

Package popup

The Packages tab helps you browse and manage your PWADs, add-ons, resource packs and other data files (all of which are called “packages” in Doomsday 2). Build 2208 introduces a new UI for viewing information about packages and performing quick actions on them. Like the game tabs, I consider the Packages tab now feature-complete for 2.0.

The new package info popup has the following features:

  • The popup can be quickly opened by right-clicking a package in any Packages list.
  • There is a convenient “Play in…” button for quickly loading the package in an existing game profile, without making any permanent changes to profiles. This works great for quickly trying out PWADs, for example.
  • The “Add to…” button lets you add the package to any existing game profile.
  • The “Show File” button opens the folder containing the package in Windows Explorer / macOS Finder / etc. (This may not be very helpful if all your data files are lumped in a single folder.)
  • The “Options” button allows selecting from the optional .box contents. It was relocated here from the old context menu that no longer exists.

A little bit of content analysis is done on the package:

  • Doomsday tries to guess which game the package is for, looking through any auxiliary readme files, the used WAD map format, Snowberry metadata, names of parent folder(s), etc.
  • In the case of WAD files, the game title picture is shown in the popup as the package icon.
  • If the package contains an “icon.jpg” (or “icon.png”) file, it is used as the package icon image. Currently these images are only displayed in the popup.

Continue reading Improved UI for packages

Holiday update

As usual December has been a busy time, but a little bit of progress has been happening with Doomsday, too.

Saving 3D model state. I’ve put the most effort into ensuring that the state of 3D model animations gets saved and restored when writing and reading savegames. This has no bearing on gameplay as such, but visually it is pretty important that the objects get rendered the same way before and after loading a save. In practice, this was quite challenging because the new model renderer supports advanced features like multiple animation sequences, scripted rendering passes, and shader variables. All this state information gets included in the savegame package as a new file, so it can also be gracefully ignored in case any compatibility issues or other problems arise when dealing with old save files.

Multiplayer resource check. When joining a multiplayer game, the client checks that the same packages are loaded as on the server. This includes all WADs, DEHs, and PK3s. Any resource mismatches could lead to crashes or other problems during MP games.

Mac menu. I did a small tweak for the Mac UI: Doomsday now has a native menu bar for switching between the available games.

Fate. Finally, I’d like to call attention to a cool Hexen mod by fate that I recently enjoyed playing through. If like me you are a fan of Hexen, this is a nice way to spend a few hours during your holidays: fate_v0.1.pk3. Please leave your feedback and/or comments to the author on the forums.

Merry Christmas and happy holidays everyone! *<:)

UDMF experiment, Shell game options, installer facelift

Last week I went on a brief modding tangent and added a plugin that loads UDMF maps.

UDMF is an attractive choice for map editing due to its flexibility and potential to be widely compatible with map editors and source ports. However, it is basically only a syntax for describing map data; the real trick is interpreting the contents and supporting all the required gameplay logic, line and sector specials, etc. Doomsday at the moment supports only vanilla maps with a couple of Boom features. The new UDMF plugin also doesn’t yet transfer all the data to Doomsday, for example most line flags are ignored.

When it comes to extending Doomsday’s support for modding, I view full Boom compatibility as the first milestone to reach. Modding is on the roadmap for the future 2.4 release, so in the near future the UDMF importer plugin remains an experimental feature.

I also did many small improvements in preparation for the stable 2.0 release. Continue reading UDMF experiment, Shell game options, installer facelift

Down for the count

Autobuilder & Tracker offline

After 10 years of service, the PC running Doomsday’s autobuilder VMs has died. Probable culprit looks like the PSU, so I’ll replace it with a new one and (fingers crossed) the machine can still be resuscitated to full working condition. In the meantime, there will be no new unstable builds. Fortunately the AppVeyor and Travis CI builders should keep the boat afloat until the autobuilder is up and running again.

Another casualty of this hardware failure is the bug/feature tracker that was running on the same PC. The tracker will likewise be offline for now.

Focus navigation

Recently I’ve been working a lot on UI focus navigation. The ultimate goal is to allow using Doomsday without ever touching the mouse, i.e., with only the keyboard or a gamepad. Continue reading Down for the count

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.


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).