During the past week I've been doing various fixes and maintenance to clear up our 1.9.7 to-do list
- I did a detailed analysis of how player controls affect camera movement in 1.8.6 vs. the current master branch. The main conclusion was that because the engine's core timer is no longer constrained to 35 Hz, certain input events were being processed too quickly, reducing the feeling of "weight" in player motions. I applied a fix to player controls so that their behavior matches version 1.8.6. The fix only affects keyboard input and buttons; mouse and joystick axes are processed without any extra delay. (Cvar input-toggle-sharp controls this behavior.)
- I fixed a couple of bugs in the revised network protocol related to small compressed packets and very large packets.
- The bindings system was enhanced so that when it receives conflicting input for a player control, the control's position is reset to zero. This can be enabled/disabled with the input-conflict-zerocontrol cvar. Also, I added a "multiplayer" state condition so that you can specify when a binding should only be recognized in a multiplayer game. The default bindings for the Chat commands were changed so that they only work in multiplayer. Note that your existing bindings are unaffected; you'll either have to rebind them in the Controls menu or do "clearbindings; defaultbindings".
- I cleaned up the source code repository a little: all tools were moved from the root to a "tools/" directory. I also added the missing wadtool sources.
- The rest of my time I spent updating the readme documentation. While the wiki is our primary documentation source, the readme exists to be a "quick reference" and give an overview of the engine's features. More in-depth documentation will remain in the wiki.
Last week I didn't have a great deal of time for deng, however I did manage to resolve several of the outstanding items on the 1.9.7 to-do list.
The main issue I focused on was addressing the long standing GL texture state mismanagement issues in Doomsday. The ringzero branch implemented texture specifications and texture variant mechanisms as a way to abstract the management of multiple versions of a texture, as required by the renderer. This functionality introduces what has been named as "managed" GL textures, whereby the GL state for a texture uploaded to the video system is managed by the texture manager in addition to the texture content itself. Binding of such managed textures also results in the updating of the GL texture state according to the variant specification associated with it.
The render lists module (which manages lists of render primitives sorted by texture) was updated to make use of these managed textures and various object renderers, such as those for sprites and 3D models now use them also. This allowed the in-place manipulation of the GL texture state to be removed, resulting in cleaner code and more robust state management.
In addition to the managed texture use, I also spent some time fixing up the Automap implementation in libcommon. There is now only two outstanding issues with this; a) initial zoom is incorrect when starting a new map and b) the map name is missing.
Over the coming week I intend to continue addressing issues on the 1.9.7 to-do list.