2013 has been another good year of steady progress. The new development practices of the project have proven to work well for us.
The number of Git commits in 2013 was roughly the same as in the previous year: there was a modest 4% increase. This is good, as it means our development activities are staying at a brisk level.
The size of the code base continued to grow throughout 2013. The total is now 684 KLOC, up 16% from the end of last year. Growth has been linear during the past two years — at this rate, we'll hit 750 KLOC during 2014.
When it comes to the growth of the code base, the driving factor is not the addition of new features, but rather the clarification of old code and the introduction of new, object-oriented and more maintainable code. In essence, we are unraveling hidden and implicit complexity in the old implementation into more lines of code, where complexity is explicit and can be managed with less effort.
C++ is now the dominant programming language of the project with 47% of the code. C remains important at 41% and will continue to hang around in the game plugins for the foreseeable future.
(More statistics and graphs about the source code are available at Ohloh
There were several important developments during the year:
- In January, we cleaned up the API between the engine and the plugins and split the server into a separate executable. We also restructured the engine's internal map data using C++ and switched all engine source files to use C++ instead of C.
- In February, we started the new Doomsday UI framework and added the Shell application for controlling servers. The low-level network code was revised to work with connections from the Shell, forming a foundation for more network related changes to follow. Automatic discovery of servers on the LAN was added.
- In March, we began integrating the new UI framework into the client GUI. Several multiplayer issues were fixed. Version 1.10 was released.
- In April, window management was improved with better usage of Qt features. Work on OpenGL 2 based graphics was started. We also introduced a more logical, object-oriented structure to the engine's internal map data structures.
- In May, we added a new multithreaded resource management component, which will be used in several places for data access and caching. The foundations for DED 2.0 were built by combining Doomsday Script and Info files. Work started on new UI components for the client GUI.
- In June, the old in-game console was replaced and a new, task bar based UI design was introduced. The "Ring Zero UI" was improved with a GUI game selection menu. Work on map geometry generation continued, with the target of cleaning the logic and improving the BSP builder for better vanilla renderer emulation.
- In July, we revised the dengine.net website design to match the new Doomsday UI. The Codex was created to keep an index of all repository commits. Version 1.11 was released.
- In August, the client GUI was improved with toggles, autocompletion popups in the console, a general-purpose progress indicator widget, new autoupdater UI, and an About dialog. Memory management for the bias lighting model was completely redesigned. Work on remodeling internal map data with a half-edge data structure was completed. Support for "deep water" and "missing texture" map hacks was implemented.
- In September, the old Control Panel was replaced with new dialogs accessed via the task bar. A sidebar editor was added for adjusting the renderer's appearance. Dynamic light management was updated with regard to map hacks. Appearance profiles were introduced for easily modifying visual effects.
- In October, we migrated project issue tracking from SourceForge to our own Tracker. Version 1.12 was released.
- In November, offscreen UI composition was implemented and Doomsday's busy mode UI was merged with the main UI. We also implemented a new GL2 lens flare renderer, although it wasn't yet integrated into the game world. Resource management was cleaned up for the future.
- In December, framebuffer management was revised to allow shaders to access color and depth values. We finished Oculus Rift support: head tracking, barrel distortion effect, configuration UI. Support was added for ZDoom's 16-direction sprites. Version 1.13 was released.
In the end of last year, I anticipated that 2013 would finally see user-visible changes in the UI and the renderer. This definitely came to pass as most of the old UI was replaced with a fresh, modern version. We also started to unravel the shackles that constrain the old renderer, with added flexibility in framebuffer management, frame post-processing, stereoscopic 3D, and Oculus Rift support.
As always, details of the roadmap continued to change through the year. It is challenging to set the goals very rigidly, as development efforts may flow in unexpected directions. This was the case with the Oculus Rift, where cmbruns approached us at the right time to influence the direction of 1.13. While there is still a lot to do to improve the immersive VR experience in the add-on domain (3D models, etc.), the engine itself only needs small tweaks at this point. I expect that the next big push with regard to Oculus Rift will occur when the next version of the development kit is released (hopefully with an improved display resolution).
Having our own issue tracker is very important to me, as it lowers the friction of actually using it in day to day work. It will make it easier to keep track of all the known bugs, current work, and future ideas. Also importantly, we were also able to pick the tool that works best for us (Redmine, in this case) and have control of the usage experience when it comes to theming.
Finally, what do we have in store for you in 2014? While I feel it is time to focus on multiplayer again for a month or two, I expect the renderer will become a real focus area for us. Much effort has been poured into laying the appropriate foundations for the next-generation renderer, and now it is time to start executing our plans. One of the first things I will work on is finishing up with the GL2 lens flares. Overall, though, we will continue on the roughly three-month stable release cycle, releasing new features as they are finished.
Happy New Year!
- Deng Team