What's new in TDM 2.11

From The DarkMod Wiki
Jump to navigationJump to search
Version 2.11 of The Dark Mod has been released on 2023-02-05.

See the changelog on our bugtracker.
Source Revision 10264

Note: As of TDM 2.11 only 64-bit executables are officially supported. 
We still offer optional 32-bit builds but this may change in the future.

(For a more visually-compelling treatment of the improvements to each TDM release, see The Dark Mod’s articles on ModDB.)

The Dark Mod 2.11

TDM 2.11 is a major bugfix release. Longstanding problems with stealth scoring, load\save crashes and
visual glitches when changing loading or menu screens have gotten overdue repairs or improvement.

Dragofer deserves extra credit for fixing hundreds of assets and ensuring that the console is mostly free of useless warning messages
due to these asset bugs. Along the way, hundreds of asset submissions from both team members and forum members that the TDM team
hadn't had time to quality check and\or complete have been added to the project.

In line with the theme of fixing longstanding issues, Obsttorte developed a new Blackjack system that doesn't rely
on physically moving the player arm through a rotation arc and instead uses a trace to the destination target and adaptive animation.

stgatilov performed so many major performance improvements this release it could probably also be considered a "performance release".
Included in the long list of performance improvements is an improvement to the visual quality of the new Volumetric Lights so that players no
longer need to increase the number of samples to an absurd value to get a smooth visual gradient (thus killing performance).

Finally, JackFarmer and datiswous added EFX reverb and other fixes to Tears of Saint Lucia, while boissiere and Dragofer added subtitles to A New Job
Thus making the included intro missions feature complete with regard to audio and accessibility

Important CVARS


r_volumetric* --- for tweaking volumetric light algorithm (if defaults are not good enough).

tdm_blackjack_indicate --- raise arm up to indicate when blackjacking can result in KO.

pm_mantle_roll_mod --- allows to tune down motions during mantling.

tdm_multiloot_min_interval, tdm_multiloot_max_interval --- configures timings for multiloot grabbing feature.

teleportArea --- command to quickly find a visportal area with specified index.


r_modelBvh* --- configures all BVH-related optimizations. r_modelBvhBuild is the "kill switch".

r_softShadowsMipmaps --- enables the new bandwidth optimization for soft stencil shadows.

com_useMinorTics --- enables AI interleaving optimization for low FPS.

r_useParallelAddModels --- old optimization also known as "Frontend Acceleration", enabled by default in beta211-03.

r_frobDefault* --- controls addition of implicit frob-highlight stages.

decl_fix_mission_override, decl_skip_redefine_warning --- controls the rules for decl overrides.

dmap_tjunctionsAlgorithm --- new dmap optimization in FixGlobalTJunctions function.

dmap_disableCellSnappingTjunc, dmap_aasExpandBrushUseEdgesOnce --- enables dmap changes for better numeric stability.


2.11 is packed with performance optimizations!!!

  • Volumetric Lights are now blurred offscreen leading to a much smoother appearance with less performance impact
  • GLSL shaders have been reorganized to reduce code duplication and thus make the code easier to change
  • Ambient Lighting no longer multiplies some diffuse into the specular so the specular color chosen by the author is fully respected
  • The default Ambient World material now uses a cubemap to create the "light from sky" effect. Other ambient lights are direction neutral and better suited for faked Global Illumination
  • Soft Stencil Shadows use a tile-based optimization to prevent sampling from being run against every screen pixel
  • Shadow Maps now have better mipmap and LOD behavior. They no longer waste as much memory on distant objects
  • Renderer should deal with large meshes much faster, thanks to BVH optimizations.
    Recall that idTech4 was made for very low-poly models. When renderer frontend sees a "surface" in a model, it always treats this surface as an atomic piece, 
    doing all computations for all of its vertices and triangles. 
    This is very good for low-poly models, can heavily drag performance down with large meshes, as several recent missions noticed during beta.
    The BVH data structure breaks every surface into smaller chunks, allowing renderer to quickly cull away whole chunks. 
    This makes a big difference in case of large meshes (e.g. terrain) lit by many small lights.


    Thanks to a certain "AI-heavy" mission, the game code has received major optimizations.
    It is most noticeable in low performance conditions, when game modelling takes a lot of CPU time. 
    Previously the game could easily descend into the "spiral of death" with FPS falling below 5, now it is way harder due to better scheduling of AI thinking.
    There is a variety of other game code optimizations which make our lives slightly better.
  • AIs notice broken fracture entities

See the mapping heading for a few other AI related changes


  • The engine now supports OBJ model format.
    This format is much more popular than ASE and LWO. The engine loading code is very lightweight: it will use your model exactly is as, and load it very quickly. 
    The OBJ format is preferred for large meshes due for faster loading times. 
    The only possible downside is somewhat larger download size compared to LWO, although not much and not always.
  • You no longer have to write frob-highlight stages in materials, since they are added implicitly.
    The problem with these stages was that were very easy to forget, which resulted in no highlight on frobable items. 
    Also it increased cognitive load and scared mappers away.
    While writing frobstages is no longer necessary, the old stages work just fine. So mappers can still customize frob-highlighting if they really want to.
  • It is now legal to override a single decl of core game in your mission.
    Recall that "decl" means a material, a skin, an entityDef, a particle, etc.
    Note that overriding a whole file from core game always worked as expected, but overriding a single decl from a file did not work reliably before (despite the common belief that it should).
  • The major cleaning of shaders resulted in some changes in lighting model.
    The aim was to make TDM lighting closer to the standard Phong model, and make it more logical in general. 
    The changes should rarely make a big difference, aside from probably stronger specular.
  • Added error-reporting to the GUI scripting engine.
    Implementing GUI scripts is very hard, error-prone, and confusing. Aside from surprising differences in Doom 3 GUI behavior compared to e.g. Javascript in DOM, 
    a lot of confusion was caused by total lack of any error handling whatsoever!
    In the new version, all possible errors should result in easy-to-understand console warnings, so writing correct GUI is much easier.
    Also, we fixed a few features, and added a few new ones to the GUI engine.
  • dmap command received minor improvements.
    Yet another big rewrite happened for T-junctions fixing code, since it took tremendous amount of time on one mission. Also a few precision improvements were made.
  • Other small fixes and additions:
   added script functions getAnimRate / setAnimRate for tweaking animations
   added script function setObjectiveNotification for silent objective change
   added script function getCurInvItemCount for interaction with inventory
   added script variable "AI_ENEMY_TACTILE" to the base AI scriptobject, which is true whenever the AI is in tactile range of an enemy
   added spawnarg absence_alert_increase for loot items as a proper substitute for absence_alert, giving control over how much an AI gets alerted if that piece goes missing
   added spawnargs allow_idle_anims / allow_random_headturning for customization during a running mission, useful i.e. for cutscenes
   AIs notice broken fracture entities
   trigger_multiple now works on stationary AIs
   almost doubled tracemodel limits, raising the restrictive limits for making collision meshes for moveable items
   door movers can now call "used_action_script" whenever something like a key, lockpick or other item is used on them, if they have the spawnarg "call_used_action_script" "1".


  • Under the hood, we updated third-party libraries, and moved to Visual Studio 2022.
  • The "Debug With Inlines" configuration was split into "Debug Editable" (with hot-reload support) and "Debug Fast" (fastest debuggable).
  • Marking the final step in transition to tdm_installer, the old tdm_update program is finally removed, with TDM packaging code extracted to standalone program.
  • There were a ton of small bugfixes for issues like: bow stuck after load, wrong strafe-walk sound, crash when saving shortly after the death of an elemental,
    issues with leaning onto doors, missing fracture sounds after loading a save, X-ray glitch in the first frame, toggling solidity/visibility, etc.


  • Many new assets from capable creators in our community have been incorporated into the core assets. These include:
   Loot assets:
       Detailed coins and ingots with accompanying lore. Link
       Ancient loot items suitable for museums, collectors and ancient sites, first seen in the Volta series.
       A tiling treasure hoard texture for those with unimagineable wealth.
       6 detailed book skins including 3 that are lootable, a first for TDM. Link
   Security assets
       Highly detailed standing and wall safes - with or without an accompanying combination lock. Link
       The combination "safe lock" is now part of core assets and can be operated by either scrolling or frobbing. 
       Mappers no longer need to track down this asset and include it with their FM files as a custom asset.
       Wall-mounted locks in the style of those commonly found in the original Thief games.
       Camgoyle sentry, a magical stone guardian based on the security camera shooting magical projectiles at the player, first seen in Written in Stone. 
       The prefab also includes a power source pedestal. Link
   Fully useable audiograph for playing recorded sounds, first seen in the Accountant and Shadow of Northdale missions. 
       A new full-featured scriptobject makes them easy to implement and control via spawnargs. Wiki
   Furniture assets
       Posh upholstered armchairs and sofas for the wealthiest nobles. Link
       A new high-detail grandfather clock with a working scriptobject and a mantle clock. Link
       A gothic-style cabinet. Link
   Office assets
       Including bundled stacks of paper, blueprints, a letter, crumpled paper, waste bins, an end table and an ornate table.
   Nautical assets
       Full-scale modular ship prefabs with interiors, allowing anyone to assemble a ship for a nautical mission in a matter of seconds. 
       1 merchant galleon and 2 smaller sailing ships are available. Link Link Link
       A large galleon ship wreck in 2 pieces for those sailors who have met an unfortunate end.
   Decorative assets
       An impressive multi-tiered wall fountain, first seen in the mansion in Noble Affairs.
       A new pair of marble lion statues. Link
       A standing stone menir with carved symbols on it, ideal for pagan missions. Link
       Stone pedestal with purple cloth for presenting valuable items.
       High-resolution cobblestone textures for detailing the streets of TDM. Link
       Starry wallpaper.
       A set of 6 bronze vintage lamps has been added for particulary posh establishments. Link
       Thief-style charge post streetlamp.
       A new open-top carriage, the barouche. Link
       Miscellaneous other models, including: wall planter, 7 small "foliage" herbs, 2 mine carts, 6 shop signs, equippable feather duster and 5 decor plates
  • We fixed all loading warnings on all existing assets.
    This became possible after creating an automatic map generator which forces the engine to load all assets from every group. 
    All the references to missing files are fixed too, which means a variety of assets have become available:
    Old noblewoman skin, plain mage robes skin, moor helmet, electrical arcs, stone window decals (5178), yellow banner skin (5563), wine barrel (Link), 
    grass particles (5689), lampion lights and more graffiti decals.


  • Stealth scoring is greatly improved. The ignore player loop that was used to prevent AI from detecting players
    at a distance too quickly has been restructured.
    In addition, AI have been given a tactile response for players touching them in the dark.
  • The core mechanics of blackjacking enemies has received subtle, yet helpful improvements.
  • Now you can grab many close pieces of loot by holding down the frob button, instead of picking up each item individually.
  • There are several improvements to crouching, making it more responsive (thanks to @Daft Mugi).
  • Players can choose to define a sheathe key or toggle sheathe to the last weapon
  • Players can no longer exploit mantle to evade fall damage for very long falls


  • Mission 1: A New Job now has subtitles ( boissiere and Dragofer )
  • Subtitles have been give a slightly larger render window to prevent cutoff characters
  • The in-game downloader now supports "sort by release date" ordering.
  • The in-game downloader shows translation and updates in front of the Mission name so they are not obscured by long names
  • "New Mission" has been replaced with "Missions List".
    (Traditional Thief and TDM players will no longer accidentally choose it when trying to play the installed mission.)


  • Mission 2: Tears of Saint Lucia now has EFX Reverb ( JackFarmer )
  • Added "looping" keyword to looping clock ticking sounds.
  • Avoid sound amplification due to negative sound loss spawnarg (5913).
  • Fixed chandelier_gas4 model (6125)
  • Improved wooden chest prefab sounds (4206).
  • Hardwood materials now use wooden footstep sounds (4988)
  • Fixed lean-peeking sound not always stopping when player goes away from door (5899).
  • Fixed wrong sounds of func_fracture after save/load (5363).
  • Fixed wrong sound on strafe right (5554).


  • The Load \ Save and Downloads titles have been converted to a translatable format. Example translations for Spanish and Italian applied
    Note: The translated headlines will show up at the wrong size until you restart TDM after changing the language

See also