18/02/2007 @09:03:38 ^10:52:05
Engine Bugs vs. Faulty Demos
This post is the summary of some recent thoughts I've had about Doom2 demo compatibility in PrBoom*, from a coding perspective. Consider the following three situations:
- PrBoom doesn't play a Doom2 demo that was recorded with Doom2
- PrBoom records a Doom2 demo that doesn't play back in Doom2
- PrBoom doesn't play back a Doom2 demo that wasn't recorded with Doom2 (and possibly doesn't play back with it)
In my opinion the first two are engine bugs which should be fixed but the last is a faulty demo.
Examples:
- hr18xxxx - there are a number of compet-n demos for Hell Revealed map18 that for a long time didn't play back with anything except Doom2.exe. Thus we have a Doom2 demo that plays back with Doom2 but not with PrBoom. This is therefore a bug. It has been solved - it's a so-called "spechit overrun" which we can now emulate, thanks to PrBoom-Plus.
- sc30xxxx - various demos on map 30 of Scythe were recorded with old versions of PrBoom that did not have spechit overrun emulation; they no longer play back in more recent releases. They are Doom2 demos that rely on spechit overruns not being emulated. These are examples of faulty demos - the fact that they don't play back with recent PrBoom versions is not a PrBoom bug.
To summarise: If PrBoom is recording faulty Doom2 demos, then that is a bug. However, when that bug is fixed, PrBoom may no longer be able to play back the demo**. That it cannot play back a faulty demo is not a PrBoom bug***. We shouldn't (that is, I don't want to) introduce all kinds of unmaintainable ugliness into the code to fix it - there's enough of that already!!
* Replace Doom2 with Boom/MBF/whatever; replace PrBoom with rboom if you like, I try to have the same philosophy with my own version of the engine (although I am less concerned with demo compatibility, if rboom can't play something PrBoom or PrBoom-Plus probably can)
** You record Doom2 demos with PrBoom at your own risk. I consider it a bug that people feel the need to do this at all - I believe you should only record Doom2 demos with Doom2, Boom demos with Boom, MBF demos with MBF etc. The complevel system was only intended for debugging. PrBoom users should record demos in whatever the highest current compatibility level is; if they want more Doom2-like gameplay, the various compatibility options can be turned on. However, apparently these options are not enough.
*** PrBoom-Plus can probably play it back though - that's what it's for. Of course that brings with it its own problems. You would typically have to set some menu option (e.g. turn off spechit overrun emulation) or supply an esoteric and highly verbose command line option to change some specific engine behaviour. I personally think that is an abhorrence of user interface design - the user shouldn't be forced to remember to add extra options to play specific demos back, not to mention that these options and the hacks they entail typically only exist to support a handful of broken demos, a tiny fraction of what's been recorded. My personal view is that the game engine should be able to work out what it needs to play a demo back with no extra user input. However on the other hand you can't really encode this information into the existing Doom2 demo format without breaking compatibility with Doom2 and all other engines that are not expecting the extra data. It's all a big mess, really, and can only get worse.