Last week was a pretty typical bug fixing week with a multitude of small/medium tweaks/fixes:
- Mouse filtering (cvar input-mouse-filter) has been reinstated. It can be used for smoothing mouse movement if for any reason it does not feel fluid enough. Note that filtering is off by default (0) and enabling it (1...39) will apply some latency to the movement, effectively spreading it out over multiple frames instead of applying all the detected movement at once.
- Addressed a performance problem with the calculation of sector audio reverb properties. While they are still being calculated even when 3D sounds are disabled, now they are only updated once per frame per sector, to reduce the amount of unnecessary work.
- Changed the way window updates are performed: previously the main loop kept running even after a window update was requested from the windowing system and now the main loop waits until after drawing is completed before continuing. This fixes an input latency issue on some systems (e.g., OS 10.4 on my old Powerbook G4).
- Mouse input was broken on Mac OS X 10.4. Because on this platform we are using a Carbon based Qt, there are a few Carbon-specific tweaks that needed applying: in this particular case, forcibly changing the mouse cursor position was causing the window system to freeze the cursor for a short period of time as per the system's default "event suppression" behavior. Since Doomsday is updating the mouse position more frequently than this, it meant the mouse was oftentimes completely frozen in place.
- The mouse is now re-grabbed when focus returns to the game in fullscreen mode.
- Fixed a UI resize issue related to late font selection: UI elements were updated using the font sizes selected for the old view size.
- And finally, added the build option deng_nosdl to disable SDL completely as a dependency. On Windows this should produce a fully functional build. However, on Unix systems, joystick support depends on SDL so we are not yet applying the option in the builds. We'll likely move joystick support to a plugin in 1.9.9 and disable SDL for the engine proper.
Looking at the to-do list
, we seem to have work remaining for at least one more candidate week.
I didn't have a great deal of time for Deng last week. I did however manage to make a few fixes:
- Mostly fixed the alt-key state management on Windows. It turned out that the cause of the "stuck" problem was our own internal key repeater mechanism (which generates repeat events while keys are held down). The repeaters were not cleared when Doomsday's main window lost focus and the subsequent repeat events led the key state tracking into an invalid state. Additionally there was also a problem specific to Windows in that alt+tabbing to another task would not result in the key-up event the engine expected. The engine now catches this special case and generates the missing event manually.
- The Windows installer overlooked several of the fonts Doomsday requires during startup. (which must be present as native files on the host system).
- Fixed various HOM issues in the map renderer. There were a few mishandled sky-mask map geometry constructs in mods like BGcomp.wad and ksutra.wad. The latter turned out to be a logic issue in the geometry construction which did not match the behavior of the original games' column-based software renderer; the top of a lower wall section is extended past the height of the ceiling on the front side if said ceiling is sky-masked.
- Doomsday will now look for and fix missing materials on single-sided linedefs of the current map during load. We do this by selecting a replacement from neighboring surfaces. In the unlikely event that no suitable replacement can be found, the special "missing" material is used instead.
- Fixed menu alignment and font rendering issues in HacX, due to a missing space character patch.
Toward the end of the week I began investigating some of the problems I've noticed on the Windows platform (view interpolation/main loop stuff). This is what I intend to focus on over the coming week.