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.

Other changes

User interface:

  • You can right-click on savegames to see the save metadata. This includes a list of packages that were used in the game.
  • Various minor visual tweaks to font sizes, colors, and settings dialogs.
  • In the Shell app, the toolbar icons have @2x HiDPI variants and the Options tab has a new icon.

Multiplayer:

  • Servers can specify a domain name for joining with the “net-ip-address” cvar.
  • The master server had a bug where some IP addresses were incorrectly saved to the database. This had the effect that clients received a loopback IP address for the affected servers.
  • I’ve been running my test server “Raspi Devel” on a Raspberry Pi 2; the build had a couple of minor issues, those have been fixed.

Other improvements:

  • There is improved support for package versioning in Home. Different versions of a package shouldn’t get confused with each other any more.
  • Filtering packages by “loaded” shows only the currently loaded packages. This is useful in the Packages sidebar when a game is running. (Another special filter word is “hidden” to see packages that are normally not shown in the UI.)
  • Performance improvements for the Home and client UI in general. Long lists can now recycle items for more efficient scrolling, atlas texture uploads are faster, and extra-verbose log entries are not generated when that logging level is disabled.
  • Scripting fixes. For example, there were issues with managing 3D model animations and restoring model state from savegames.
  • 3D model animation sequence lengths can be overridden with the duration variable (see wiki for details).
  • UI behavior fixes (e.g., focus grabbing).
  • Fixed a couple of memory leaks (map BSP data, Doomsday Script).
  • Fixed random failure to start server (data files not found yet).

TextMate 2 bundle

I’ve been using TextMate 2 for years, and usually edit all my Doomsday Info files and scripts on it. I have been working on a TextMate 2 bundle for Doomsday that contains language grammars for Doomsday Script, Doomsday Info, and Amethyst. This enables TextMate to apply syntax highlighting and to understand the basic structure of the files for indenting. If you’re on macOS and edit/view any Doomsday files, I strongly recommend giving this bundle a try.