dhewm3 Changelog
=================

Note: Numbers starting with a "#" like #330 refer to the bugreport with that number
      at https://github.com/dhewm/dhewm3/issues/

1.5.5 (2026-06-08)
------------------------------------------------------------------------

* Enable/disable Soft Particles when **loading** a graphics quality preset (only enabled in Ultra preset,
  though you can still configure it independently like before; #604)
* Greatly improve precision of internal timing, which should eliminate micro stutters
  (that were esp. noticeable when using VSync with 60Hz displays).  
  Related: `com_showFPS` is now more precise and `com_showFPS 2` shows additional information
* Support BC7-compressed (BPTC) .dds textures. They offer better quality than the older S3TC/DXT/BC1-3
  texture compression standard that Doom3 always supported. Mostly relevant for high-res retexturing
  packs, because they offer similar quality as uncompressed TGAs while being smaller, using only
  a quarter of the VRAM (TGA: 4 bytes per pixel, BC7: 1 byte per pixel) and loading *significantly*
  faster because mipmaps are contained and don't have to be generated on load.  
  If you have such DDS files and want to use them (instead of TGAs), you must set
  `image_usePrecompressedTextures 1` and `image_useNormalCompression 2`.  
  You can also set `image_usePrecompressedTextures 2`, then dhewm3 will only load .dds textures
  with BC7 data - if it only finds an old one (with S3TC/DXT/BC-13 compression) it will use the 
  uncompressed TGA textures instead.  
  If you want to *create* .dds files with BC7 texture data, you can use any common texture compression
  tool, **except** for **normalmaps**, those must be created with my
  [**customized bc7enc**](https://github.com/DanielGibson/bc7enc_rdo) with the `-r2a` flag!
  *(Because Doom3 requires that normalmaps have the red channel moved into the alpha channel,
  id confusingly called that "RXGB", and AFAIK no other tool supports that for BC7.)*  
  Just like the old DXT .dds files, they must be in the `dds/` subdirectory of a mod (either directly
  in the filesystem or in a .pk4).
* Allow creating aspect-ratio-independent GUIs (HUD and menus), based on code from
  [CstDoom3](https://www.moddb.com/mods/cstdoom3), but greatly extended (#324).  
  Note that this won't work out of the box with the original Doom3 game data, but requires updated GUIs.
  See [docs/GUIs.md](docs/GUIs.md) for how to use these features when creating GUIs.
* Support SDL3 (SDL2 and, to some degree, SDL1.2 are also still supported)
* Fix bugs on 64bit Big Endian platforms (#472, #625)
* Fixes for high-poly models (use heap allocation instead of `alloca()` for big buffers; #528)
* Fix building dhewm3ded with newer OpenAL Soft headers (#633)
* Better support for High-DPI mice:
  - Don't ignore mouse input on fast movement ("ridiculous mouse delta"; #616)
  - Allow setting sensitivity to values `< 1` in the dhewm3 settings menu to allow sane speeds
    for looking around with High-DPI mice (otherwise it might be way too fast)
* Fix a crash (assertion) on start with ImGui if `SDL_GetWindowDisplayIndex()`
  or `SDL_GetDisplayDPI()` failed and the `imgui_scale` CVar was set to the default value of `-1`
  (setting it to `1` worked around the bug; #632)
* Fix scaling of Grabber cursor in Resurrection of Evil in non-4:3 resolutions (#637)
* Add `com_disableAutoSaves` CVar: If set to `1`, Autosaves (when starting a level) are disabled (#620)
* Add support for "nospecular" parm of lights, enabled by setting `"allow_nospecular" "1"` in a maps
  worldspawn, or by setting the `r_allowNoSpecular` CVar to `1`.  
  Note that this required changing the format of demos. dhewm3 can still play old demos, but ones
  recorded with current dhewm3 are not compatible with older dhewm3 versions, original Doom3 or
  other source ports (unless they do the same change).
* Make sure macOS doesn't show popups for key-alternatives when pressing a key for longer while ingame
* Windows: Show error MessageBox if dhewm3log.txt can't be created on startup (#544)
* Running a timedemo with sound disabled (`s_noSound 1`) doesn't crash anymore (#163)
* Show some OpenGL/GPU information in the *Video Options* tab of the *dhewm3 Settings Menu*
* Fix saving/loading of `idSpring` (`func_spring`) entity (#31)
* Fix several issues (incl. crashes and missing shadows) with MD3 models (#698)
* Fix the "shrivel" effect of MD5 models (`SHADERPARM_MD5_SKINSCALE`)
* Optionally integrate the [Tracy](https://github.com/wolfpld/tracy) profiler.
  Disabled unless you enable it in CMake.
* Fixed a crash in AI pathfinding code that could happen in the lotsaimps testmap (#721)
* Disabled assertion in `TestHugeTranslation()` that led to "crashes" in several user-maps (#720)
* Fixed concatenation of timed GUI commands that sometimes lead to glitches in UIs
* Added `fs_gameDllPath` CVar: If set, game DLLs will be searched in that directory before the other
  standard places (like next to the executable). Especially useful for developing/debugging mod DLLs
  (you can just set `fs_gameDllPath` to the build dir, no need to copy the DLL/.so/.dylib)
* Fixed a crash when using an incomplete cubemap texture (missing one side).  
  Will now print a warning about the missing side.
* Fix bug in map compiling (`dmap`) that could lead to errors when loading the map,
  due to "dangling edges" in collision models (#742)
* Fix wrong (flipped) labels of Prev./Next Weapon in dhewm3 settings menu (#731)
* Gamepad trigger axes can now also be used for ducking and jumping (#733)
* Updated Dear ImGui to v1.92.5 (thanks *Klaus Silveira*!)
* Fix that after dying the wrong autosave might be loaded (#762)
* Increase `MAX_EYEBALL_TRIS` to 20, so mods can have eyeballs with more triangles in their models (#758)
* Work around a problem with compiler math optimizations leading to assertion errors on Raspberry Pi 5 (#749)
* Default to building as C++98 if ImGui is disabled - with ImGui it still defaults to C++11.
  The dhewm3-sdk does the same to avoid issues with compilers defaulting to C++20 that are unhappy
  about variables named "requires" (which is a keyword in C++20).
* Several smaller fixes for all kinds of things incl. build issues


1.5.4 (2024-08-03)
------------------------------------------------------------------------

* A brand new settings menu that uses [Dear ImGui](https://github.com/ocornut/imgui).  
  Can be opened with `F10` (unless that key is bound already) or by entering `dhewm3Settings`
  in the console. It has lots of settings that the original options menu doesn't have and
  can be easily navigated with gamepad or keyboard (or the mouse, of course).
  It can also be opened while in the game, which then is paused (if Single Player) but still visible,
  so the effect of most graphics settings can be seen immediately.
  Needs SDL2 and C++11.
* "Soft" Particles (that don't "cut" into geometry but fade smoothly), based on code from The Dark Mod
  2.04. Can be enabled/disabled with `r_useSoftParticles`, is applied automatically for all appropriate
  particles (view-aligned, using additive or alpha blending and not too small).  
  **NOTE** that on some systems Soft Particles noticeably slow down rendering. If dhewm3 doesn't run
  as smoothly as you'd expect, try disabling them (`r_useSoftParticles 0` or in the new *Settings Menu*
  under *Video Options* -> *Use Soft Particles*)
* `r_enableDepthCapture`: Enable capturing depth buffer to texture, needed for the soft particles.
  Can be used in custom materials by using the `"_currentDepth"` texture
* Replaced dependency on (external) zlib with integrated [miniz](https://github.com/richgel999/miniz)
* HighDPI/Retina support
* Allow inverted mouse look (horizontally, vertically or both) with `m_invertLook`
* CVar to allow always run in single player (still drains stamina though!): `in_allowAlwaysRunInSP`
* VSync can be enabled/disabled on the fly, without restarting the renderer (still with `r_swapInterval`
  or in the menu, of course; needs SDL2)
* Allow enabling/disabling [HRTF](https://en.wikipedia.org/wiki/Head-related_transfer_function)
  with `s_alHRTF`
* `s_alOutputLimiter`: Configure OpenAL's output-limiter which temporarily reduces the overall
  volume when too many too loud sounds play at once, to avoid issues like clipping
* `s_scaleDownAndClamp`: Clamp and reduce volume of all sounds to prevent clipping or temporary
  downscaling by OpenAL's output limiter
* If `r_windowResizable` is set, the dhewm3 window (when in windowed mode..) can be freely resized.
  Needs SDL2; with 2.0.5 and newer it's applied immediately, otherwise when creating the window.
* If switching between fullscreen and windowed mode or similar changes causes issues (like
  [here](https://github.com/dhewm/dhewm3/issues/587#issuecomment-2205807989)), you can set
  `r_vidRestartAlwaysFull 1`, so (again) a full `vid_restart` is done, instead of the partial one
  which *usually* suffices for just changing the resolution or fullscreen state. If you run into that
  issue (probably a driver bug), you'll probably also want to set `r_windowResizable 0`, because
  resizing the window that way also triggered the bug, and in that case no `vid_restart` is done at all
* Fixed screenshots when using native Wayland (`SDL_VIDEODRIVER=wayland`)
* If you enter the `map` command in the console, without any arguments, the current map name is printed
* Support OpenGL debug contexts and messages (`GL_ARB_debug_output`). Can be enabled with `r_glDebugContext 1`.
  Changing that CVar requires a `vid_restart` (or set it as startup argument)
* The Mods Menu's entries for the base game and d3xp/RoE are now clearer, and it can load the new
  d3xp-based mods (sikkmodd3xp, perfected_roe)

1.5.3 (2024-03-29)
------------------------------------------------------------------------

* Support for gamepads (based on code from [Quadrilateral Cowboy](https://github.com/blendogames/quadrilateralcowboy),
  but heavily expanded). See [Configuration.md](./Configuration.md#using-gamepads) for more information.
* Support different file formats for screenshots by setting the `r_screenshotFormat` CVar
  (0 = TGA, still the default, 1 = BMP, 2 = PNG, 3 = JPG). `r_screenshotJpgQuality` and
  `r_screenshotPngCompression` allow configuring how JPG/PNG are compressed.
  Thanks *eezstreet (Nick Whitlock)*!
* Fixed problems with lights after loading a savegame (#495)
* Fix volume of some weapon sounds, like chaingun being too quit (#326)
* Increase stack size on Windows to 8MB (instead default of 1MB) to make loading huge models work
* Fixed crash in Radiant Model Preview Dialog (#496)
* Fix MD3 model support
* Several new CMake options:
    - To enable Clang/GCC Address Sanitizer and Undefined Behavior Sanitizer
    - Hardlink the game code into the executable (instead of using game DLLs,
      only supports base *or* d3xp then; needed for Undefined Behavior Sanitizer)
    - Force colored diagnostic output from GCC or Clang (esp. useful when building with ninja)
* Fix several compiler warnings
* Added build instructions for Linux (and similar systems) to README.md
* Updated stb_image and stb_vorbis
* Updated minizip (from zlib/contrib) to latest upstream code
* Added `in_namePressed` CVar to print currently pressed key/button (useful for binding keys
  in the console or configs). Thanks *Biel Bestué de Luna*!


1.5.2 (2022-06-13)
------------------------------------------------------------------------

* Gamma and Brightness are now applied in the shaders instead of by setting hardware gamma.  
  Can be disabled (so hardware gamma is used again) with `r_gammaInShaders 0`
* Improvements for (Windows-only) MFC-based tools:
    - Added the script debugger! (thanks *HarrievG*!)  
      Original Doom3 didn't have it (Quake4 did), but the Doom3 GPL source contained
      most of it. *HarrievG* implemented the missing parts and we added some new
      features. It can even be used over the network and while the client part
      (the debugger GUI) is Windows-only, the server can run on all supported
      platforms, so you can debug a game running on Linux or macOS, for example.  
      Relevant CVars for network debugging are:
      `com_enableDebuggerServer` and `com_dbgClientAdr` and `com_dbgServerAdr`.  
      To debug the running game on the same PC, just enter `debugger` in the console.
    - All tools can now be built in 64bit (thanks *raynorpat*!)
    - HighDPI support (thanks *HarrievG*!)
    - PDAEditor works now
    - Additional bugfixes
* Cycle through multiple Quicksave slots instead of immediately overwriting the last
  Quicksave. The `com_numQuicksaves` CVar allows setting the number of QuickSaves (#392)
* Make r_locksurfaces work (#357)  
  It doesn't do exactly what its description and name suggests: it renders
  everything that is *currently* visible from the position/view the player had
  when setting `r_locksurfaces 1`. Originally it was supposed to render exactly
  the surfaces that *were* visible then, but I couldn't get that to work.  
  This is pretty similar, but there may be differences with opened doors and such.
* Keyboard input improvements (mostly SDL2-only):
    - Support (hopefully) all keyboard keys on all kinds of keyboard layouts
      by using scancodes for otherwise unknown keys
    - Support typing in non-ASCII characters, if supported by Doom3 (it supports ISO-8859-1)
    - Support the clipboard also on non-Windows platforms  
      You can paste text from the clipboard into the console or other edit fields
      with `Shift+Insert`
    - Explicit support for Right Ctrl, Alt and Shift keys  
      (can be bound to different actions than their left counterparts)
    - Added `in_grabKeyboard` CVar to make sure dhewm3 gets *all* keyboard input  
      Prevents the Windows-key or Alt-Tab or whatever from taking focus from the game
    - Added `in_ignoreConsoleKey` - if set to `1`, the console is only opened with
      Shift+Esc, and the "console key" (that key between Esc, 1 and Tab) can be freely
      bound to an action (and its char can be typed in the console without closing it).
    - Added (SDL2-only) "auto" option for `in_kbd`: When not disabling the console key,
      dhewm3 will try to automatically detect it if `in_kbd` is set to "auto" (now default)
* Reworked mouse-input and -grabbing code, using absolute mouse mode in fullscreen GUIs
  (except for the PDA, because it's implemented weirdly).  
  This made releasing the mouse in the main menu possible, as now the ingame cursor
  is at the same position as the system cursor.
* `s_alReverbGain` CVar to reduce EFX reverb effect intensity (#365)
* Pause (looped) sounds when entering menu (#330)
* Fixes for looped sounds (#390)
* Replace libjpeg with stb_image and libogg/libvorbis(file) with stb_vorbis
    - Now the only required external dependencies should be OpenAL, SDL, zlib
      and optionally libCURL (and of course the C and C++ runtimes)
* (Optionally) use libbacktrace on non-Windows platforms for more useful
  backtraces in case of crashes (usually linked statically)
* Fixed a deadlock (freeze) on Windows when printing messages from another thread
* Fixed endless loop (game locking up at startup) if graphics settings couldn't be applied (#386)
* Fixed some warnings and uninitialized variables (thanks *turol*!)
* Work around dmap bug caused by GCC using FMA "optimizations" (#147)
* Prevent dhewm3 from being run as root on Unix-like systems to improve security
* Replaced most usages of `strncpy()` with something safer to prevent buffer overflows
  (remaining cases should be safe).
    - Just a precaution, I don't know if any of them could actually be exploited,
      but there were some compiler warnings in newer GCC versions.
* Console output is now logged to `dhewm3log.txt` (last log is renamed to `dhewm3log-old.txt`)
    - On Windows it's in `My Documents/My Games/dhewm3/`
    - On Mac it's in `$HOME/Library/Application Support/dhewm3/`
    - On other Unix-like systems like Linux it's in `$XDG_DATA_HOME/dhewm3/`
      (usually `$HOME/.local/share/dhewm3/`)
* Improved compatibility with Wayland (#426)
* Work around assertion in AlphaLabs4 due to "ride_of_death" yeeting
  the dead "monster_zsec_shotgun_12" into the void (#409)
* Support loading some mods known to need `fs_game_base d3xp` via Mods menu
  (currently, *The Lost Mission* and *LibreCoop d3xp* are supported)
* Disable assertion in idSampleDecoderLocal::DecodeOGG() that triggered
  when starting a new Classic Doom3 game (#461)

1.5.1 (2021-03-14)
------------------------------------------------------------------------

* The (Windows-only) integrated **editing tools** of Doom3 are back!
    - They can only be built with non-Express versions of Visual Studio (tested
      Community Editions of VS2013 and VS2017) and can be disabled via CMake
    - Official dhewm3 Windows binaries are built with tools enabled, of course.
    - Only supports 32bit builds, because in contrast to the rest of dhewm3's code,
      the tool code is not 64bit compatible at all.
    - Based on Code from the dhewm3 branch of SteelStorm2, thanks to *Motorsep* for donating that code!
    - Has some bugfixes over the state in Doom3 1.3.1, like selecting a material
      in the Particle Editor doesn't break the viewport of the game any more.
    - Thanks to *Tommy Hanusa* for testing and reporting some issues (that were subsequently fixed)!
* Update savegame format (see #303 and #344)
    - old savegames should still work, but new savegames can't be loaded with older versions of dhewm3!
* Uploaded updated builds of Mod DLLs (esp. Dentonmod should run a lot more stable now).  
  Added Mod DLLs of [LibreCoop](https://www.moddb.com/mods/librecoop-dhewm3-coop)
  and [The Lost Mission](https://www.moddb.com/mods/the-lost-mission).  
  See https://dhewm3.org/mods.html for more details.
* dhewm3 now supports the **Doom3 Demo** gamedata
    - See [here](https://dhewm3.org/#using-the-doom3-demo-gamedata) for installation instructions
    - This is based on *Gabriel Cuvillier's* code for [D3Wasm](http://www.continuation-labs.com/projects/d3wasm/),
      which ports dhewm3 to web browsers, thanks!
* Create the game window on the display the cursor is currently on (when using more than one display)
* Added `r_fullscreenDesktop` CVar to set if fullscreen mode should be "classic"
  or "Desktop" which means a borderless window at current desktop resolution
* Fullscreen modes that are not at the current desktop resolution should work better now
    - including nvidia DSR / AMD VSR; for that you might have to use `dhewm3_notools.exe`,
      as DSR/VSR seem to be incompatible with applications that use MFC
      (the GUI framework used for the Doom3 tools like the D3Radiant)
* Several sound-related bugfixes:
    - Lags in starting to play a sound which for example caused the machinegun or
      plasmagun sounds to stutter have been eliminated (#141)
    - Trying to reset disconnected OpenAL devices, this esp. helps with display audio
      on Intel GPUs on Windows, when switching to fullscreen (#209)
    - Looping .wav sounds with leadin now work (#291)
    - The game still works if no sound devices are available at all (#292)
    - Make "idSoundCache: error unloading data from OpenAL hardware buffer" a Warning
      instead of an Error so it doesn't terminate game (by *Corey O'Connor*, #235)
* Restore "Carmack's Reverse" Z-Fail stencil shadows; use `glStencilOpSeparate()` if available
    - That bloody patent finally expired last October: https://patents.google.com/patent/US6384822B1/en
    - This neither seems to make a visual nor performance difference on any hardware
      I tried (including Raspberry Pi 4), so this is mostly out of principle
    - Based on Code by [*Leith Bade*](https://github.com/ljbade/doom3.gpl/commit/d4de024341e79e0ac1dfb54fb528859f8ccea605)
      and [*Pat Raynor*](https://github.com/raynorpat/Doom3/blob/2933cb554587aea546c2df1fdf086204d4ca363d/neo/renderer/draw_stencilshadow.cpp#L147-L182).
    - The `r_useCarmacksReverse` and `r_useStencilOpSeparate` CVars allow switching both things
      on/off for comparison
* New CVar `g_hitEffect`: If set to `0`, the player camera damage effects (like double-vision and extreme tilt)
  when being hit are disabled (by *dobosken*, #279).
* (On Windows) stdout.txt and stderr.txt are not saved next to the binary anymore,
  but in `My Documents/My Games/dhewm3/`, like save games, because the binary dir
  might not be writable and dhewm3 wouldn't start properly then
* Fix lingering messages in HUD after loading savegame
    - Sometimes the "Game saved..." message didn't go away after loading a savegame
      (when having saved while it still was showing from last save)
* Fixed clipping bug in delta1 which sometimes occured and made climbing some
  ladders impossible (#328)
* Improve compatibility with some custom scripts
  ("t->c->value.argSize == func->parmTotal" Assertion; see #303)
* Registering multiplayer servers at id's master-server fixed, so they can be
  found in the multiplayer menu (by *Stradex*, #293)
* Support for reproducible builds by setting the CMake option `REPRODUCIBLE_BUILD`.
* Should build on recent versions of macOS, also on Apple Silicon (thanks *Dave Nicolson* and *Petter Uvesten*).
* Proper handling of paths with dots in directory names (#299, #301)
    - Some string functions that are intended to find/cut off/replace/... file extensions
      did cut off the whole path at dots..
    - Especially fixes loading and saving maps from such paths in the builtin D3Radiant level editor
* `idFileSystemLocal::ListMods()` doesn't search `/` or `C:\` anymore
  (it did so if one of the paths, like `fs_cdpath`, was empty)
* Don't use translation in Autosave filenames (#305)
    - In the Spanish translation all the Alpha Lab autosaves got the same name,
      now the autosave name is based on the mapname instead which is distinct


1.5.0 (2018-12-15)
------------------------------------------------------------------------

* Support for some Mods via [custom SDK](https://github.com/dhewm/dhewm3-sdk):
  Classic Doom3, Fitz Packerton, HardQore2, Denton's Enhanced Doom3 and Rivensin.
    - See https://dhewm3.org/mods.html for more information.
    - This has also broken backwards compatibility with 1.4.x game DLLs,
      that's why this version will be 1.5.0 and not 1.4.2.
* Supports High DPI displays on Windows now
* Scale menus, fullscreen videos and the PDA to 4:3 (with black bars left/right) on  
  widescreen displays so they don't look stretched/distorted.
  Can be disabled with `r_scaleMenusTo43 0`.  
  No, this unfortunately can't be done for the HUD (except for the crosshair),
  because it also handles fullscreen effects (for example when receiving damage),
  and those would look bad with black/empty bars on left/right.
* Commandline option to display some help on supported commandline arguments:
  `-h` or `--help` or `-help` or `/?`
* ~~(Experimental) uncapped framerate, enable by entering `com_fixedTic -1`~~
  ~~in the console (can be set back with `com_fixedTic 0`).~~  
  (this turned out to be broken, see #261)
* Support for the AROS and OpenBSD operating systems
* Several bugfixes


1.4.1 (2016-06-19)
------------------------------------------------------------------------

* Fixed some (kinda rare) crashes due to assertion errors, especially observed in the last
  boss fights of both doom3 and the Resurrection of Evil Addon.
* Improved compatibility with AZERTY keyboards (the row of keys with 1...9, 0 is now usable)
* Fixed a crash (at least on FreeBSD) when loading Resurrection of Evil's last level
* Compatibility with Microsoft Visual Studio 2015
* Video resolutions in menu now sorted, added 2880x1800
* Support for up to 8 mouse buttons (on Linux this needs SDL2 2.0.4 or newer to work)


1.4.0 (2015-10-09)
------------------------------------------------------------------------

The first dhewm3 release. Changes compared to Doom3 1.3.1 as open sourced
on 2011-11-22 (most work done by *dhewg*):

* Use CMake as build system instead of Visual Studio and XCode solutions and SCons etc
* Replaced lots of platform-specific code with libSDL
* Use OpenAL as only soundbackend on all platforms (instead of only on Windows)  
  Ported EAX for sound effects to the cross-platform OpenAL EFX extension
* Made code 64bit compatible (except for Windows-only MFC-based tools, which were disabled
  because no free or at least no-cost compiler with MFC support was available at the time)
* Also made it compatible with the MinGW compiler
* Write savegames, configs, screenshots etc in user-specific directories
  instead of installation directory on all platforms
* Fixed lots of bugs and compiler warnings
* Removed support for binary .pk4's, only support loading .dll/.so/.dylib for
  game-code (mods) directly
* Support (and automatically detect) arbitrary aspect ratios
* Support more resolutions, inject them into the settings menu
* Open ingame-console with Shift+Esc (=> works with all keyboard layouts)
* Most probably much more I forgot...
