This is an additional point release to address some issues with the 3.2.2 point release and add even more features. Due to the way this release was handled, the change log will include 3.2.2's changes as well.

Notable features since 3.2.1:

new timer code, GZDoom now appears a lot smoother in interpolated frames

Rather than giving version info, GZDoom now displays the name of the game you are currently playing in the window title. This can be disabled via i_friendlywindowtitle

Implemented unicode handling in some functions

improved handling of temporary files on timidity++

added latch keyword to CVARINFO

new grenade and ice shard sprites, removed non-GPL copyrighted assets

More-complete changelog since 3.2.1:

let the 3 relevant text functions handle UTF-8 strings

These functions are: DCanvas::DrawTextCommon, V_BreakLines and FFont::StringWidth.This will allow strings from UTF-8 encoded assets to display properly, but also handle the OpenAL device name on international systems, as this will be returned as an UTF-8 string.

Due to backwards compatibility needs the decoding function is rather lax to allow both UTF-8 and ISO 8859-1 to pass through correctly - and this also implies that it will allow mixed encodings which may happen if strings from different sources get concatenated.

sanitization of temporary file stuff for Timidity++.

do not use the global temp directory. Instead create one in the AppData folder.

i_friendlywindowtitle cvar: Show name of the game instead of GZDoom's version/last commit data

Fixed applying of brightmaps to overridden textures

Fixed detection of the first entry from internal IWADINFO

fixed: high uptime was causing overloads in uint32_t and float structures (float losing loss of precision) - this caused any computer online for more than a few days to experience jankiness with internal animations such as rotations and shader timers. Unfortunately, this sounds the death knell for 32-bit platforms, since uint64_t is now required in time-critical structures, which will hurt performance tremendeously, but 64-bit systems will be unaffected.

exported P_Thing_Warp to ZScript.

Inside the renderer, use only the time value being passed to RenderView.

get the timer used for animation only once at the very beginning of the frame and pass it on to the renderer to avoid any dependencies on the timer's implementation.

Thanks for the clarification, Chris. I never knew Doom's tic rate was a result of using a 70 Hz video mode, or that ZDoom's timings were actually unfaithful.I know the sound effect syncing hypothetical is not an example of good practice, but neither are a lot of Doom mods...

I'm surprised that this timing change could result in any perceivable improvement in the smoothness of interpolated rendering. I'm personally not able to see any difference. But in any case, more accuracy is a good thing overall, and the timing code changes look quite extensive, so thanks to the developers for working on this. i_timescale is fun to play with! And I think I'll also find it useful for debugging small timing problems that would be difficult to see at full speed.

The reason why things are so much smoother is because of the change in the way the timing system works, not the new timing, itself.

It uses the system performance timer, rather than ZDoom's old method, and it is re-checked before drawing a frame. The result is a much smoother-looking interpolation for the systems that are fast enough to actually draw said interpolation frames.

The old timer code comes from Windows 9x times when the MMSystems's millisecond timer was the best thing Windows had to offer. And as long as there was no frame interpolation it actually didn't make any difference in how it was perceived.

Regarding the old timer code, I guess the perception of smoothness is very subjective. The main issues here wasn't the timing itself, actually, but that the frame interpolation wasn't done right. In several places it took the actual current time instead of the time when the current frame started - and that resulted in some gross inconsistencies. Now all these things have been fixed.

The change back to proper 1/35 second tics was just a natural result of having a higher resolution timer available now.