I’m starting 2021 with a very nice laptop upgrade.
I made the mistake of using my 2018 MacBook Pro in the proximity of my 1½-year-old son, and amidst his toy-flinging the poor laptop’s screen got smashed. Only 80% of it works. Well, the thing was due for service anyway due its glitchy keyboard. But in a fortuitous turn of events, the new M1 MacBook Air that I ordered several weeks ago got delivered on the very same day.
It is a such a nice little computer. The M1 seems as powerful as people have been extolling and overall it feels great to use — running cool and fast. Having a physical function key row is a nice bonus. While I never hated the touch bar, it didn’t seem all that useful: what good is a small display in the keyboard that you never look at? Its value always seemed geared toward novice users who don’t know keyboard shortcuts.
Of course, getting Doomsday up and running was among the first things I did on it. I now have a native M1 build of Doomsday 3 that seems to work well enough. It took me three days after receiving the computer to resolve the immediate issues.
I just pushed 1036 commits to the master branch. This switches it over to Doomsday 3.
Doomsday 3 in its current form is still quite unfinished and broken in many places. Especially the new renderer remains disabled by default, and cannot be enabled without recompiling. However, the basic things are running, and they’re running fast!
Even the classic renderer has gotten a boost. Although to be fair, it still has the same old bottlenecks as before. The difference is that the application event loop has been optimized, which raises the FPS ceiling even though the floor remains largely the same. On average, the game should be running more smoothly.
Most of the progress this year happened in the first quarter, while I was revising how DOOM render/map hacks are detected and applied. The way it works now should be more robust and have better performance during gameplay, as the hacks are primarily detected during the map setup phase and not dynamically while the map is being played.
The other major focus area was improvements in Doomsday Script and bindings for players and things. It is now possible to query and manipulate several properties via scripts. This enables new modding capabilities when scripts are used in state actions and when things get killed.
I’m looking forward to phasing out the 2.3 branch and switching over to 3.0. The Doomsday 3 codebase has been reorganized and cleaned up significantly, and is in many ways nicer to work with. There will almost certainly still be bug fixes for 2.3, but I expect most work to focus on the unstable 3.0 releases. However, the switch-over will still require some additional work in the distribution scripts because the build environment has once again changed (with Qt being gone, for one thing). It may take some time before all platforms have fully functional unstable 3.0 builds in the Autobuilder.
To accompany the upcoming release, the demo video on the dengine.net front page has been updated. It shows a few snippets of gameplay with the default settings, without any additional mods. This time with audio and in normal speed!
Version 2.2 is a relatively minor feature update. It comes with a number of bug fixes and a bunch of modding enhancements.
Version 2.1 is now feature complete. While I originally hoped to focus on multiplayer-related enhancements in this release, it turned out a little differently. Roughly speaking the first half of 2018 was spent working on the foundations of the next revision of the renderer (not included in 2.1), and only during the second half I focused on 2.1 related work.
One important multiplayer improvement has been added for 2.1, though: clients can download mods (e.g., PWADs) from the server in case they are needed for joining a multiplayer game.
The stable 2.1.0 will be released before the end of the year. I intend to spend the remaining time on fixing bugs (some already listed in the roadmap).
Let’s have a quick look at the changes done over the past weeks.
This is the final installment of a short series of posts detailing what I’ve learned while exploring the possible directions that a redesigned Doomsday renderer could take. This post is about integrating the new renderer into the existing engine.
During the spring I’ve been exploring the possibilities and potential directions that a completely redesigned renderer could take. Continuing from part one, this post contains more of the results and related thoughts about where things could and should be heading.
When it comes to graphics, things sure have changed since the beginning of the project. Back in the day — almost 20 (!) years ago — GPUs were relatively slow, you had a few MBs of VRAM, and screen resolutions were in the 1K range. Nowadays most of these metrics have grown by an order of magnitude or two and the optimal way of using the GPU has changed. While CPUs have gotten significantly faster over the years, GPU performance has dramatically increased in vast leaps and bounds. Today, a renderer needs to be designed around feeding the GPU and allowing it do its thing as independently as possible.
With so much computation power available, rendering techniques and algorithms are allowed to be much more complex. However, Doomsday’s needs are pretty specific — what is the correct approach to take here? During the spring I’ve been exploring the possibilities and potential directions that a completely redesigned renderer could take. In this post, I’ll share some of the results and related thoughts about where things could and should be heading.
The spring months have been a little crazy with various Real Life time sinks preventing me from delving too deep into fun coding. Consequently, there has been little to no progress with the tasks on the roadmap, such as the multiplayer improvements for version 2.1. Given that several months have passed, it will be challenging to find motivation to restart this work. I am tempted to make some changes to the roadmap to get things rolling along again.
I have managed to steal away some time to explore an exciting new direction for the renderer, though. The basic gist of this effort is to completely revise how the game world is drawn, bringing it up to par with the recently redone 3D model renderer.