What's new in TDM 2.10

From The DarkMod Wiki
Jump to navigationJump to search
Version 2.10 of The Dark Mod has been released on 2022-02-28.

See the changelog on our bugtracker.
Source Revision 9853

Note: As of TDM 2.10 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.10

TDM 2.10 addresses one of the oldest complaints about the project "Load Times".

A lot of effort was put into optimizing loading times.

  • It includes: better integration of decompression, multi-threading, handwritten normal map compression, immutable texture storage and mipmap generation, removing artificial delays.
  • As the result, we even had to modify loading screens of some missions, because allocated 10% of loading time was no longer enough for a player to read the hint

Generic performance improvements were done too

  • Most importantly, we fixed performance regressions since 2.07: rendering static geometry (5598) and soft stencil shadows with anti-aliasing.
  • This hardly makes a difference, but it is nice to know that TDM can now use AVX instructions on Linux builds too.

Volumetric lights can now be used on projected lights ( also known as "God Rays" ) (Volumetric Lights Wiki)

  • Unlike adding fake translucent geometry, the real volumetric lights automatically match their source light, including light volume geometry, projection & falloff texture, and even shadows.

We made some changes to window / input systems. (Thread)

  • Most importantly, Linux build now relies on GLFW library to create window and handle keyboard / mouse, so a lot of the issues with OS integration on Linux should go away.
  • On the Windows side, some minor changes were made to fullscreen/borderless modes.

New implementation of object dragging / manipulation (Thread)

  • Afraid to grab a candle near a sleeping guard? Hopefully, you will make less noise while moving objects in 2.10. And if you hold the creep button, the moved item will not make any noise at all.
  • Also, dragging unconscious bodies should feel better now. Rats slighty spoiled the joy of this improvement (rats often do), but hopefully it is fixed now
  • Finally, now you can control how far a rock flies by holding the 'throw' button for a different amount of time.

Tooltips are now shown in the main menu.

  • Players will now have more detail about what settings do to sound, game-play, graphics, and performance

Tweaked starting new mission in the main menu

  • The old way of "installing" and starting missions was quite confusing for newcomers.
  • So we reorganized the main menu a bit, and now it is hopefully more intuitive.



  • Volumetric Lights are here! ( also known as "God Rays" ) Now transparent textures and objects both cast shadows in the dusty \ foggy air! (Thread)
  • The Entity limit has been virtually eliminated! With over 65K entities available, mappers will easily hit hardware limits before running out. (Thread)
  • RGTC Normal Map compression ( also known as ATI 3Dc ) is now complete! Both on-the-fly and pre-compressed loading works as well as keywords to force compression off
  • Reflective puddle material fixes
  • Blurred reflective effect on the tea tray asset
  • Some fog particles should now properly render over water and windows after being set to "sort last"


  • Significant improvements to security camera behaviors! Security Camera Wiki
  • Sotha's "Automaton AI" from the Ulysses mission have been integrated into the core assets
  • Improvements to the fire elemental


  • The Dmap "map compiler" has been significantly optimized! Compile times are the lowest they have ever been! Dmap is also more precise!
  • Dmap now has a diagnostic tool to identify "Location bugs". Now it will be easier to find broken locations
  • Spotlights are now reverted to 2.07 behavior and have been enhanced with clamping rendering to the volume
  • A new "Secrets" system has been created to easily designate mission secret items or areas and track them in the mission statistics! Secrets Wiki
  • PNG loading support has been added
  • Supported "set XXX on head" spawnarg on AIs.


  • Sotha's Automaton AI model
  • Wellingoncrab's extension to the "cabinet1" wooden furniture suite, both in models and prefabs
  • Additional models and prefabs for setting up security cameras and related entities
  • Improved success \ fail lockpick GUI images
  • Improved player damage GUI overlay image
  • Improved splash texture
  • Most paintings now have torn skins
  • Some missing normal maps for stone blocks textures added
  • New unlit window textures


  • New mission install and start ( "Start this Mission" ) workflow!
  • Subtitles support for briefings and ingame
  • Tooltips for menu items
  • EFX reverb volume slider
  • Official support for mission gui customization ( rather than overriding the main menu gui )
  • A few resolution and aspect ratio fixes


  • Improved object manipulation and dragging
  • Holding the throw button longer makes objects fly further
  • New X-Ray vision feature for concealing and revealing objects Xrays
  • Security camera has a follow the AI \ Player feature


  • New EFX Reverb strength support


  • Mission loading time has been significantly lowered!!!
  • Improved performance!!!
  • Linux window management has been significantly improved.

Now you can alt-tab to the desktop without causing the camera to be locked in place when you return to TDM
Windows Full-screen and Borderless support have also been improved

  • New script events have been added to the repertoire for use by mappers:
   a) sys.VecRotate( vector vec, vector angles ) rotates a vector by a set of angles, allowing to match vectors such as offsets to an entity's current orientation.
   b) entity.getEntityFlag( string flag ) allows to find out properties about entities such as "notarget" or "invisible".
   c) $player1.getCalibratedLightgemValue() retrieves the current value of the lightgem, using the same weighting as AIs do.
   d) entity.setSolid( boolean state ) allows to change the solidity of an entity at runtime. Note that it's still experimental.
   e) sys.getLocationPoint( vector point ) returns the location of a point in space.
   f) sys.pointIsInBounds( vector point, vector mins, vector maxs ) evaluates whether a point lies within a volume specified by 2 corner points.
   g) sys.getTraceSurfType() returns the type of surface the most recent trace has hit, such as "snow", if any.
  • GUI backend code has been refactored to be more stable
  • OpenGL changes to fix issues with older AMD graphic cards \ drivers
  • "Clear" in idLib now works according to the intended design
  • A generic hash table has been added to optimize lookup times
  • Additional Improvements
 a) Some LOD improvements, e.g. for lights.
 b) Hot reload supports more of the popular spawnargs (i.e. without respawn).
 c) In-game downloader can update the currently installed mission.
  • The Tracy profiler has been integrated for better performance analysis
  • The missions database has been moved to an SVN backend so that missions can be updated from one end-point and so that missions can be reverted if anything goes wrong during updates

Important CVARS


r_volumetricSamples, r_volumetricDither --- quality settings of the new volumetric lights.

tdm_show_menu_tooltips --- can disable tooptips in the main menu.

r_frobOutlinePreset --- a command to switch between different preset styles of frob-highlight outlines. It modifies various outline-related cvars, setting them to predefined values.
You can later adjust them individually.

r_newFrob, r_frob* --- a bunch of cvars for tweaking the new frob-highlight outline. Here are the main ones:

  • r_newFrob controls surfaces highlighting
  • r_frobOutlinePreset controls outline around highlighted objects

con_fontSize, con_fontColor --- allows to adjust font of game console, e.g. make it smaller so see more text on one page.


image_levelLoadParallel, image_useTexStorage, image_mipmapMode --- various switches to optimize loading times. We have already seen several issues caused by
image_useTexStorage, and there may be more...

tdm_drag_new, tdm_drag2_* --- cvar to enable new dragging behavior, plus a bunch of cvars for tweaking how it works.
If dragging, carrying, pulling or throwing does not work well, you can try switching tdm_drag_new back to 0 to see if the problem is caused by the new grabber code.

r_spotlightBehavior --- changes the way how spotlights (projected lights) compute their light volume, and how projection and falloff textures are applied.
If projected lights look wrong on a map, you may try a few options to see if this was broken by 2.10 or was wrong from the very beginning.
Note: map restart is required for the change to take effect.

dmap_compatibility --- switch some parts of dmap code to older algorithms which were used in previous version of TDM.
Note that it does not perfectly reproduce behavior of old dmap, because it is too hard to put every improvement under "if".
This cvar can be used to dmap an old map if you don't intend to rework it in major way (although you should still test it thoroughly if you want to release the newly dmapped version).

See also