My next step is to devise the actual format of a next-gen (model) package. I am not going to worry about backwards compatibility at this stage, and instead think of a clean-room ideal solution. Existing packages need to be handled separately, or perhaps automatically imported/converted to the new format and rules.
Continue reading About next-gen resource packaging
A tale of model definition bug hunting
After updating all code that deals with DED Model definitions to use the new Record
based storage, I was slightly disappointed — although not surprised — to see that loading up a resource pack and trying to use it would result in a crash.
This is a pattern that I’ve come to accept as the norm: after working on a set of significant changes, my initial design and plan are shown to be valid, but I have to spend a couple of hours tracking down bugs that, in the end, prove to be trivial. In other words, one can’t expect to write bug free code.
Easier native access to Record
While working on the Record
based definitions, I noticed that there is a clear redundancy in the get*()
methods: they pop up in Record
, Config
, and now I also needed them in a utility class that manipulates model definition data stored in a Record
.
The solution was to add a new class called RecordAccessor
that contains nothing but these get*()
methods. This new class can then be inherited into any other class that benefits from providing native access to a Record
.
While RecordAccessor
is currently specific to Record
instances, it could still be generalized into an IAccessor
class that queries values from an abstract source where values are addressed using paths — this would make it possible to use it also with PathTree
.
Mobile Doomsday
Speaking of mobile Doomsday, having played around with Qt 5.3 on iOS and Android, I now have a bit more concrete picture of what Doomsday will look like as a mobile build.
Supporting mobile platforms is something I think is very much necessary for the future. I see desktop computing becoming more of a niche thing, as most people’s needs will be met by various forms of phones and tablets. Still, DOOM was born in the age of desktop PC gaming and Doomsday will naturally respect this; not only will we continue to develop the project on desktop (or laptop) computers, that is the environment the game was originally designed for.
SDL 2 vs. Qt
We’re switching to SDL 2.0 from the SDL 1.2 that has been in use for years in Doomsday. Sometimes I feel that minimalism would be the right way to go, and start considering if a switch back to SDL as the base framework would make sense. This scenario starts to look more enticing particularly with a switch to C++11 looming on the horizon — at least the crucial Qt components like threading and conveniences like foreach
would be available via the programming language itself.
Qt 5.3 and OS X display modes
After half an hour of confusion and tinkering, I learned that my problems were due to switching from a Qt 4.8 build to Qt 5.3, and not clearing the build directory completely. macdeployqt
does not work properly if there is an app built with a different Qt version.
In the midst of wondering what is going on, I also ran into a number of display mode switch issues. It looks like I’ll finally have to drop the deprecated OS X display mode change API calls and just use the OS X fullscreen mode. This means the display mode is not configurable via Doomsday (which is what Apple recommends, I suppose). However, there might be a way to kludge around the glitches (black screen remains after mode switch) by adding some further delays and other tricks… Doesn’t seem like the right thing to do, though.
Unicode and the file system
Doomsday has never been fully Unicode compatible, however now that FS2 is being taken into use in several places, it is time to try and fix the remaining Unicode related issues with file paths. Continue reading Unicode and the file system
Parsing DED into a Record
Having updated the DED parser with new DEDRegister
based storage for model definitions, this first step of revising model definitions seems to be going well. Continue reading Parsing DED into a Record
Revising model defs
The Defs
namespace now exists and provides access to DED flag definitions. Now I need to decide what to do with model definitions and the old model renderer. Continue reading Revising model defs
Posting practices
For the past three years I’ve been writing weekly posts about how the work on Doomsday is progressing. With the exception of a couple of missed weeks and holiday breaks, I’ve managed to stay in schedule and make the post every week. I’ve found this a very healthy exercise, although some weeks have been pretty thin content-wise. However, it might be worthwhile to rethink this arrangement a little. Continue reading Posting practices