<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.thedarkmod.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Frost+Salamander</id>
	<title>The DarkMod Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.thedarkmod.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Frost+Salamander"/>
	<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=Special:Contributions/Frost_Salamander"/>
	<updated>2026-04-30T18:21:58Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=Setting_Reverb_Data_of_Rooms_(EAX)&amp;diff=34420</id>
		<title>Setting Reverb Data of Rooms (EAX)</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=Setting_Reverb_Data_of_Rooms_(EAX)&amp;diff=34420"/>
		<updated>2026-01-25T00:26:23Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: /* Location Entity Method */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
This document will attempt to explain how to set the new EFX settings in your rooms when mapping.&lt;br /&gt;
&lt;br /&gt;
Previously these settings were known as EAX settings, and required EAX 4.0-compatible sound card.&lt;br /&gt;
In TDM 2.06, EAX technology was completely replaced with OpenAL EFX, which is now processed in software (by [https://github.com/kcat/openal-soft openal-soft]) without any requirements on sound card.&lt;br /&gt;
&lt;br /&gt;
= General =&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
&lt;br /&gt;
EFX for a fan mission can be configured with or without a configuration file.  However, fileless configuration is only supported for [[Setting_Reverb_Data_of_Rooms_(EAX)#Presets_(Version_2)|EFX presets]].&lt;br /&gt;
&lt;br /&gt;
== EFX file ==&lt;br /&gt;
The EFX info for a map should be stored in the file &amp;quot;&amp;lt;tt&amp;gt;efxs/&amp;lt;mapname&amp;gt;.efx&amp;lt;/tt&amp;gt;&amp;quot;, where &amp;lt;mapname&amp;gt; is the name of your .map file (without extension).&lt;br /&gt;
&lt;br /&gt;
In order to check that you have put the file into right location, start your mission in game.&lt;br /&gt;
If TDM manages to load your efx file, then you will see the following message in console:&lt;br /&gt;
 sound: found efxs/&amp;lt;mapname&amp;gt;.efx&lt;br /&gt;
If you failed something, then you will see a bit different message there:&lt;br /&gt;
 sound: missing efxs/&amp;lt;mapname&amp;gt;.efx&lt;br /&gt;
In both cases some additional diagnostic messages can be present nearby.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; you must enable &amp;quot;&amp;lt;tt&amp;gt;OpenAL EFX&amp;lt;/tt&amp;gt;&amp;quot; in sound settings in the main menu, otherwise TDM won&#039;t even try to load the efx file.&lt;br /&gt;
&lt;br /&gt;
It is a plain text file, so you can open it up in your text editor of choice.&lt;br /&gt;
&lt;br /&gt;
Any EFX file must start with a header which specifies its &#039;&#039;&#039;version&#039;&#039;&#039;:&lt;br /&gt;
 Version 2&lt;br /&gt;
If you forget this line, then your EFX file will &#039;&#039;&#039;not&#039;&#039;&#039; be loaded.&lt;br /&gt;
The following versions are supported:&lt;br /&gt;
* &amp;lt;tt&amp;gt;Version 1&amp;lt;/tt&amp;gt; was supported by TDM from the very beginning. It uses some non-standard terms and quantities, which makes it hard to work with.&lt;br /&gt;
* &amp;lt;tt&amp;gt;Version 2&amp;lt;/tt&amp;gt; was added in TDM 2.07. It uses the parameters from OpenAL EFX and supports a lot of presets. &#039;&#039;&#039;Recommended for all new missions.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The rest of the file consists of separate blocks, one for each &amp;quot;reverb zone&amp;quot;.&lt;br /&gt;
Each block must start with &amp;lt;tt&amp;gt;reverb&amp;lt;/tt&amp;gt; keyword for Version 1 definitions, and &amp;lt;tt&amp;gt;eaxreverb&amp;lt;/tt&amp;gt; keyword for Version 2 definitions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here is an example of such block from mars_city1.efx of the original Doom 3 game (Version 1):&lt;br /&gt;
&lt;br /&gt;
 // reverb maintenance&lt;br /&gt;
 reverb &amp;quot;maintenance&amp;quot; {&lt;br /&gt;
  &amp;quot;environment&amp;quot; 26&lt;br /&gt;
  &amp;quot;environment size&amp;quot; 5.0670&lt;br /&gt;
  &amp;quot;environment diffusion&amp;quot; 0.6030&lt;br /&gt;
  &amp;quot;room&amp;quot; -411&lt;br /&gt;
  &amp;quot;room hf&amp;quot; -685&lt;br /&gt;
  &amp;quot;room lf&amp;quot; 0&lt;br /&gt;
  &amp;quot;decay time&amp;quot; 1.7360&lt;br /&gt;
  &amp;quot;decay hf ratio&amp;quot; 0.8030&lt;br /&gt;
  &amp;quot;decay lf ratio&amp;quot; 1.0000&lt;br /&gt;
  &amp;quot;reflections&amp;quot; 96&lt;br /&gt;
  &amp;quot;reflections delay&amp;quot; 0.0080&lt;br /&gt;
  &amp;quot;reflections pan&amp;quot; 0.0000 0.0000 0.0000&lt;br /&gt;
  &amp;quot;reverb&amp;quot; 27&lt;br /&gt;
  &amp;quot;reverb delay&amp;quot; 0.0050&lt;br /&gt;
  &amp;quot;reverb pan&amp;quot; 0.0000 0.0000 0.0000&lt;br /&gt;
  &amp;quot;echo time&amp;quot; 0.0750&lt;br /&gt;
  &amp;quot;echo depth&amp;quot; 1.0000&lt;br /&gt;
  &amp;quot;modulation time&amp;quot; 0.2500&lt;br /&gt;
  &amp;quot;modulation depth&amp;quot; 0.0000&lt;br /&gt;
  &amp;quot;air absorption hf&amp;quot; -5.0000&lt;br /&gt;
  &amp;quot;hf reference&amp;quot; 5000.0000&lt;br /&gt;
  &amp;quot;lf reference&amp;quot; 250.0000&lt;br /&gt;
  &amp;quot;room rolloff factor&amp;quot; 0.0000&lt;br /&gt;
  &amp;quot;flags&amp;quot; 56&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And here is an artificial example of Version 2 definitions:&lt;br /&gt;
&lt;br /&gt;
  eaxreverb &amp;quot;myweirdstreets&amp;quot; {&lt;br /&gt;
    reflections_gain 0.5&lt;br /&gt;
    reflections_delay 0.0050&lt;br /&gt;
    late_reverb_gain 2.5&lt;br /&gt;
    late_reverb_delay 0.050&lt;br /&gt;
    echo_time 0.25&lt;br /&gt;
    echo_depth 0.9000&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
What does all this mean? &lt;br /&gt;
&lt;br /&gt;
There is a lot of sound design stuff that one could make guesses at if you&#039;ve ever used a reverb plugin in any sort of sound editing program. hf = high frequency, lf = low frequency, etc.&lt;br /&gt;
&lt;br /&gt;
A proper explanation of the parameters is given below.&lt;br /&gt;
&lt;br /&gt;
== Locations ==&lt;br /&gt;
Each reverb zone definition starts with a line which specifies to which location it must be applied:&lt;br /&gt;
&lt;br /&gt;
 reverb &amp;quot;&amp;lt;name of the location area you want to apply this to&amp;gt;&amp;quot;&lt;br /&gt;
 {&lt;br /&gt;
     //... (settings)&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Information about locations and how to set them up is available in another article: [[Location Settings #The Location Entities]].&lt;br /&gt;
Reverb zones use exactly the same locations as the ones which are used to specify per-area ambient sounds.&lt;br /&gt;
You should name every info_location entity, i.e. provide a &amp;quot;&amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt;&amp;quot; spawnarg for it. This is the name used in reverb zone definitions.&lt;br /&gt;
&lt;br /&gt;
As of TDM 2.06, you can&#039;t use capital letters in the name of your location entity or reverb zone. This may or may not change in the future.&lt;br /&gt;
&lt;br /&gt;
Here is an example of an entity which defines &amp;quot;canal_tunnel&amp;quot; location:&lt;br /&gt;
&lt;br /&gt;
 //======================= from volta_v1.map ====================&lt;br /&gt;
 // entity 3532&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;classname&amp;quot; &amp;quot;info_location&amp;quot;&lt;br /&gt;
   &amp;quot;name&amp;quot; &amp;quot;canal_tunnel&amp;quot;             //this is the name used&lt;br /&gt;
   &amp;quot;ambient&amp;quot; &amp;quot;snd_streets&amp;quot;&lt;br /&gt;
   &amp;quot;ambient_light&amp;quot; &amp;quot;0.04 0.03 0.02&amp;quot;&lt;br /&gt;
   &amp;quot;ambient_light_dynamic&amp;quot; &amp;quot;0.01 0.01 0.01&amp;quot;&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And this is the EFX effect (reverb zone) for it:&lt;br /&gt;
&lt;br /&gt;
 //======================= from volta_v1.efx ====================&lt;br /&gt;
 reverb &amp;quot;canal_tunnel&amp;quot; {             //name put to here&lt;br /&gt;
   &amp;quot;environment&amp;quot; 22&lt;br /&gt;
   &amp;quot;environment size&amp;quot; 1.8000&lt;br /&gt;
   &amp;quot;environment diffusion&amp;quot; 1.0000&lt;br /&gt;
   &amp;quot;room&amp;quot; -1000&lt;br /&gt;
   &amp;quot;room hf&amp;quot; -4000&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
During playing, the engine prints a message whenever the player&#039;s location changes.&lt;br /&gt;
It allows you to check if you have set up locations properly.&lt;br /&gt;
For instance, here are console messages showing a proper EFX location change:&lt;br /&gt;
&lt;br /&gt;
 Switching to EFX &#039;canal_tunnel&#039; (#295)&lt;br /&gt;
 Changed location from &#039;canal_streets&#039; to &#039;canal_tunnel&#039;.&lt;br /&gt;
&lt;br /&gt;
It is also possible to specify portal-area number instead of location name in the reverb zone definition.&lt;br /&gt;
The portal-area number is listed in the .proc file, which is created in the dmap process, in the format of &amp;lt;tt&amp;gt;_area&amp;lt;num&amp;gt;&amp;lt;/tt&amp;gt; (where &amp;lt;num&amp;gt; is the portal area number), e.g. &amp;lt;tt&amp;gt;_area15&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&#039;&#039;&#039;Beware:&#039;&#039;&#039; this functionality exists for fast hacking only! Do not release a mission with portal-area numbers in .efx file!&lt;br /&gt;
The main reason to avoid it is that portal-area numbers are auto-generated, so minor changes in your mission can change all of them.&lt;br /&gt;
&lt;br /&gt;
Finally, there is a &amp;quot;default&amp;quot; reverb environment which is used for any area in the map which does not have reverb information specified.&lt;br /&gt;
&lt;br /&gt;
The order that the sound system checks for reverb data is: area number -&amp;gt; location name -&amp;gt; default.&lt;br /&gt;
&lt;br /&gt;
== Changes during playing ==&lt;br /&gt;
Type &amp;quot;&amp;lt;tt&amp;gt;reloadSounds&amp;lt;/tt&amp;gt;&amp;quot; command into game console in order to reload EFX definitions.&lt;br /&gt;
&lt;br /&gt;
So when you experiment with EFX, execute this command after each tweak to EFX file to hear the difference immediately.&lt;br /&gt;
&lt;br /&gt;
== Suppress effect ==&lt;br /&gt;
Sometimes you want to disable EFX effect on a specific sound.&lt;br /&gt;
A typical example is when you have a voice in player&#039;s head, which must not depend on player&#039;s physical environment.&lt;br /&gt;
Another case is when some sound already has reverb baked in, so you don&#039;t what to double-reverb it. Although the best practice is to use sound samples without embedded reverb, combined with proper EFX definitions.&lt;br /&gt;
&lt;br /&gt;
You can disable all EFX effects on one specific sound shader by adding &amp;quot;&amp;lt;tt&amp;gt;no_efx&amp;lt;/tt&amp;gt;&amp;quot; keyword to its body.&lt;br /&gt;
For instance, here is how non-EFX version of blackjack unsheathing looks like:&lt;br /&gt;
 blackjack_unsheath&lt;br /&gt;
 {&lt;br /&gt;
   description &amp;quot;Made by pakmannen&amp;quot;&lt;br /&gt;
   sound/sfx/tools/melee/blackjack_unsheath.ogg&lt;br /&gt;
   no_efx                       //do NOT apply EFX to this sound&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note that if you change sound shaders, writing &amp;quot;&amp;lt;tt&amp;gt;reloadDecls&amp;lt;/tt&amp;gt;&amp;quot; in TDM game console is enough to reload them.&lt;br /&gt;
&lt;br /&gt;
There are a lot of stock sounds in TDM which should not be affected by EFX effects.&lt;br /&gt;
Starting from TDM 2.07, the corresponding core sounds are marked with &amp;quot;&amp;lt;tt&amp;gt;no_efx&amp;lt;/tt&amp;gt;&amp;quot; keyword (see issue [http://bugs.thedarkmod.com/view.php?id=4688 4688]).&lt;br /&gt;
If you discover any core sound which is affected by EFX while you believe it should not, start a discussion on forums.&lt;br /&gt;
&lt;br /&gt;
=Environment properties=&lt;br /&gt;
&lt;br /&gt;
== New properties (Version 2) ==&lt;br /&gt;
&lt;br /&gt;
With Version 2 of EFX file, the set of supported properties exactly matches the set of properties defined in OpenAL EFX for the &amp;quot;EAX Reverb&amp;quot; effect.&lt;br /&gt;
Note that EFX defines several types of effects, including &amp;quot;EAX Reverb&amp;quot;, &amp;quot;Standard Reverb&amp;quot;, &amp;quot;Chorus&amp;quot;, &amp;quot;Distortion&amp;quot;, &amp;quot;Echo&amp;quot;, &amp;quot;Flanger&amp;quot;, etc.&lt;br /&gt;
Only the first one is important, ignore all the rest (including the so-called &amp;quot;Standard Reverb&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
The detailed description of all the properties is given in &amp;quot;Appendix 1 – Effect property descriptions&amp;quot; of the [https://usermanual.wiki/Pdf/Effects20Extension20Guide.90272296/view#95 OpenAL Effects Extension Guide](pages 95-101).&lt;br /&gt;
The short list is also available in a table on [https://usermanual.wiki/Pdf/Effects20Extension20Guide.90272296/view#66 page 66 of the guide]:&lt;br /&gt;
&lt;br /&gt;
[[File:Eaxreverb_properties_screenshot.png|500px]]&lt;br /&gt;
&lt;br /&gt;
The only difference is that the property names in the guide have the &amp;lt;tt&amp;gt;AL_EAXREVERB_&amp;lt;/tt&amp;gt; prefix, while in TDM definitions this prefix is removed.&lt;br /&gt;
&lt;br /&gt;
== Presets (Version 2) ==&lt;br /&gt;
Presets can be set in 2 ways:&lt;br /&gt;
* As of TDM 2.13, the &#039;&#039;&#039;efx_preset&#039;&#039;&#039; spawnarg on the location entity for the location where you want to use the effect.&lt;br /&gt;
* in the .efx file&lt;br /&gt;
&lt;br /&gt;
=== Location Entity Method ===&lt;br /&gt;
If you only plan on using presets, this is the recommended method as it&#039;s less complex and error-prone. On the location entity where you want to use the preset, set the spawnarg &#039;&#039;&#039;efx_preset&#039;&#039;&#039; to the value of the preset.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
efx_preset    CITY_SUBWAY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If using this method no .efx file is required at all, but using both methods simultaneously is supported.  In the case that both are used to set the preset value for a single location, the spawnarg value will take precedence.&lt;br /&gt;
&lt;br /&gt;
=== File Method ===&lt;br /&gt;
&lt;br /&gt;
There is one special property &amp;lt;tt&amp;gt;PRESET&amp;lt;/tt&amp;gt;, which is not present in the EFX guide.&lt;br /&gt;
This property accepts the name of the preset which you want to use:&lt;br /&gt;
&lt;br /&gt;
 eaxreverb &amp;quot;myclassroom&amp;quot; {&lt;br /&gt;
   preset auditorium&lt;br /&gt;
 }&lt;br /&gt;
 eaxreverb &amp;quot;mycave&amp;quot; {&lt;br /&gt;
   preset cave&lt;br /&gt;
 }&lt;br /&gt;
 eaxreverb &amp;quot;mycorridor&amp;quot; {&lt;br /&gt;
   preset hallway&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
If you specify the preset like this, the values for all the reverb properties will be taken from the specified preset.&lt;br /&gt;
Additionally, you can override values of some properties if you define them manually &#039;&#039;&#039;after&#039;&#039;&#039; defining the preset.&lt;br /&gt;
&lt;br /&gt;
The preset property also accepts index of preset. Don&#039;t use indices for anything except experimentation, since they may change in future.&lt;br /&gt;
&lt;br /&gt;
=== Preset Values ===&lt;br /&gt;
The presets were taken from OpenAL-Soft implementation which TDM uses.&lt;br /&gt;
Here is the full list of preset names:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;height:350px; overflow:scroll;&amp;quot;&amp;gt;&lt;br /&gt;
GENERIC&lt;br /&gt;
PADDEDCELL&lt;br /&gt;
ROOM&lt;br /&gt;
BATHROOM&lt;br /&gt;
LIVINGROOM&lt;br /&gt;
STONEROOM&lt;br /&gt;
AUDITORIUM&lt;br /&gt;
CONCERTHALL&lt;br /&gt;
CAVE&lt;br /&gt;
ARENA&lt;br /&gt;
HANGAR&lt;br /&gt;
CARPETEDHALLWAY&lt;br /&gt;
HALLWAY&lt;br /&gt;
STONECORRIDOR&lt;br /&gt;
ALLEY&lt;br /&gt;
FOREST&lt;br /&gt;
CITY&lt;br /&gt;
MOUNTAINS&lt;br /&gt;
QUARRY&lt;br /&gt;
PLAIN&lt;br /&gt;
PARKINGLOT&lt;br /&gt;
SEWERPIPE&lt;br /&gt;
UNDERWATER&lt;br /&gt;
DRUGGED&lt;br /&gt;
DIZZY&lt;br /&gt;
PSYCHOTIC&lt;br /&gt;
CASTLE_SMALLROOM&lt;br /&gt;
CASTLE_SHORTPASSAGE&lt;br /&gt;
CASTLE_MEDIUMROOM&lt;br /&gt;
CASTLE_LARGEROOM&lt;br /&gt;
CASTLE_LONGPASSAGE&lt;br /&gt;
CASTLE_HALL&lt;br /&gt;
CASTLE_CUPBOARD&lt;br /&gt;
CASTLE_COURTYARD&lt;br /&gt;
CASTLE_ALCOVE&lt;br /&gt;
FACTORY_SMALLROOM&lt;br /&gt;
FACTORY_SHORTPASSAGE&lt;br /&gt;
FACTORY_MEDIUMROOM&lt;br /&gt;
FACTORY_LARGEROOM&lt;br /&gt;
FACTORY_LONGPASSAGE&lt;br /&gt;
FACTORY_HALL&lt;br /&gt;
FACTORY_CUPBOARD&lt;br /&gt;
FACTORY_COURTYARD&lt;br /&gt;
FACTORY_ALCOVE&lt;br /&gt;
ICEPALACE_SMALLROOM&lt;br /&gt;
ICEPALACE_SHORTPASSAGE&lt;br /&gt;
ICEPALACE_MEDIUMROOM&lt;br /&gt;
ICEPALACE_LARGEROOM&lt;br /&gt;
ICEPALACE_LONGPASSAGE&lt;br /&gt;
ICEPALACE_HALL&lt;br /&gt;
ICEPALACE_CUPBOARD&lt;br /&gt;
ICEPALACE_COURTYARD&lt;br /&gt;
ICEPALACE_ALCOVE&lt;br /&gt;
SPACESTATION_SMALLROOM&lt;br /&gt;
SPACESTATION_SHORTPASSAGE&lt;br /&gt;
SPACESTATION_MEDIUMROOM&lt;br /&gt;
SPACESTATION_LARGEROOM&lt;br /&gt;
SPACESTATION_LONGPASSAGE&lt;br /&gt;
SPACESTATION_HALL&lt;br /&gt;
SPACESTATION_CUPBOARD&lt;br /&gt;
SPACESTATION_ALCOVE&lt;br /&gt;
WOODEN_SMALLROOM&lt;br /&gt;
WOODEN_SHORTPASSAGE&lt;br /&gt;
WOODEN_MEDIUMROOM&lt;br /&gt;
WOODEN_LARGEROOM&lt;br /&gt;
WOODEN_LONGPASSAGE&lt;br /&gt;
WOODEN_HALL&lt;br /&gt;
WOODEN_CUPBOARD&lt;br /&gt;
WOODEN_COURTYARD&lt;br /&gt;
WOODEN_ALCOVE&lt;br /&gt;
SPORT_EMPTYSTADIUM&lt;br /&gt;
SPORT_SQUASHCOURT&lt;br /&gt;
SPORT_SMALLSWIMMINGPOOL&lt;br /&gt;
SPORT_LARGESWIMMINGPOOL&lt;br /&gt;
SPORT_GYMNASIUM&lt;br /&gt;
SPORT_FULLSTADIUM&lt;br /&gt;
SPORT_STADIUMTANNOY&lt;br /&gt;
PREFAB_WORKSHOP&lt;br /&gt;
PREFAB_SCHOOLROOM&lt;br /&gt;
PREFAB_PRACTISEROOM&lt;br /&gt;
PREFAB_OUTHOUSE&lt;br /&gt;
PREFAB_CARAVAN&lt;br /&gt;
DOME_TOMB&lt;br /&gt;
PIPE_SMALL&lt;br /&gt;
DOME_SAINTPAULS&lt;br /&gt;
PIPE_LONGTHIN&lt;br /&gt;
PIPE_LARGE&lt;br /&gt;
PIPE_RESONANT&lt;br /&gt;
OUTDOORS_BACKYARD&lt;br /&gt;
OUTDOORS_ROLLINGPLAINS&lt;br /&gt;
OUTDOORS_DEEPCANYON&lt;br /&gt;
OUTDOORS_CREEK&lt;br /&gt;
OUTDOORS_VALLEY&lt;br /&gt;
MOOD_HEAVEN&lt;br /&gt;
MOOD_HELL&lt;br /&gt;
MOOD_MEMORY&lt;br /&gt;
DRIVING_COMMENTATOR&lt;br /&gt;
DRIVING_PITGARAGE&lt;br /&gt;
DRIVING_INCAR_RACER&lt;br /&gt;
DRIVING_INCAR_SPORTS&lt;br /&gt;
DRIVING_INCAR_LUXURY&lt;br /&gt;
DRIVING_FULLGRANDSTAND&lt;br /&gt;
DRIVING_EMPTYGRANDSTAND&lt;br /&gt;
DRIVING_TUNNEL&lt;br /&gt;
CITY_STREETS&lt;br /&gt;
CITY_SUBWAY&lt;br /&gt;
CITY_MUSEUM&lt;br /&gt;
CITY_LIBRARY&lt;br /&gt;
CITY_UNDERPASS&lt;br /&gt;
CITY_ABANDONED&lt;br /&gt;
DUSTYROOM&lt;br /&gt;
CHAPEL&lt;br /&gt;
SMALLWATERROOM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Their definitions can be seen in [https://github.com/kcat/openal-soft/blob/master/include/AL/efx-presets.h efx-presets.h] from OpenAL-Soft source code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-expandtext=&amp;quot;Show&amp;quot; data-collapsetext=&amp;quot;Hide&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Legacy info (Version 1) ==&lt;br /&gt;
&lt;br /&gt;
This information is from the old official EAX 2.0 documentation, although some properties may have changed in scope and focus from EAX 2.0 to EAX 4.0. One can assume that the properties serve the same general purpose and that each property&#039;s value bounds are approximately the same.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;environment&#039;&#039;&#039; - Unknown. Likely sets the room to one of an unknown number of environment presets.&lt;br /&gt;
* &#039;&#039;&#039;environment size&#039;&#039;&#039; - The Environment Size property sets the apparent size of the surrounding “room.” The value of Environment Size can be considered a characteristic dimension of the room expressed in meters. Scaling Environment Size is equivalent to scaling all dimensions of the room by the same factor. Value type is FLOAT; value range is 1.0 to 100.0, expressed in linear meters.&lt;br /&gt;
* &#039;&#039;&#039;environment diffusion&#039;&#039;&#039; - The Environment Diffusion property controls the echo density in the reverberation decay. Reducing diffusion gives the reverberation a more “grainy” character that is especially noticeable with percussive sound sources. If you set a diffusion value of 0.0, the later reverberation sounds like a succession of distinct echoes. Value type is FLOAT; value range is 0.0 to 1.0, expressed in a linear multiplier value.&lt;br /&gt;
* &#039;&#039;&#039;room&#039;&#039;&#039; - The Room property is the master volume control for the reflected sound (both early reflections and reverberation) that EAX adds to all sound sources. It sets the maximum amount of reflections and reverberation added to the sound mix in the primary buffer (the listener). Value is LONG; value range is -10000 to 0, expressed in hundredths of one decibel (-100 dB to 0 dB).&lt;br /&gt;
* &#039;&#039;&#039;room hf&#039;&#039;&#039; - The Room HF property further tweaks reflected sound by attenuating it at high frequencies. It controls a low-pass filter that applies globally to the reflected sound of all sound sources. The exact qualities of this low-pass filter -- its frequency and its bandwidth (Q) -- are unknown. Value type is LONG; value range is -10000 to 0, expressed in hundredths of one decibel (-100 dB to 0 dB).&lt;br /&gt;
* &#039;&#039;&#039;room lf&#039;&#039;&#039; - Undocumented. Assumably, the Room LF property applies a high-pass to reflected sound in much the same way as Room HF applies low-pass. The value type and range is unknown, but is likely LONG, must be between -10000 and 0 and is expressed in hundredths of one decibel.&lt;br /&gt;
* &#039;&#039;&#039;decay time&#039;&#039;&#039; - The Decay Time property sets the reverberation decay time, or the time in which reverberation is diminished. It ranges from 0.1 (typically a small room with very dead surfaces) to 20.0 (typically a large room with very live surfaces). Value is FLOAT; value range is 0.1 to 20.0, expressed in seconds.&lt;br /&gt;
* &#039;&#039;&#039;decay hf ratio&#039;&#039;&#039; - The Decay HF Ratio property sets the spectral quality of the Decay Time parameter. It is the ratio of high-frequency decay time relative to the time set by Decay Time. The Decay HF Ratio value 1.0 is neutral: the decay time is equal for all frequencies. As Decay HF Ratio increases above 1.0, the high-frequency decay time increases so it’s longer than the decay time at low frequencies. You hear a more brilliant reverberation with a longer decay at high frequencies. As the Decay HF Ratio value decreases below 1.0, the high-frequency decay time decreases so it’s shorter than the decay time of the low frequencies. You hear a more natural reverberation. Value is FLOAT; value range is 0.1 to 20.0, expressed in a linear multiplier variable.&lt;br /&gt;
* &#039;&#039;&#039;decay lf ratio&#039;&#039;&#039; - Undocumented. It&#039;s likely best to leave the value at 1.0, though the value&#039;s type and range is probably the same as the Decay HF Ratio property.&lt;br /&gt;
* &#039;&#039;&#039;reflections&#039;&#039;&#039; - The Reflections property controls the overall amount of initial reflections relative to the Room property. The value of Reflections ranges from a maximum of 10 dB to a minimum of -100 dB (no initial reflections at all), and is corrected by the value of the Room property. The Reflections property does not affect the subsequent reverberation decay. You can increase the amount of initial reflections to simulate a more narrow space or closer walls, especially effective if you associate the initial reflections increase with a reduction in reflections delays by lowering the value of the Reflection Delay property. To simulate open or semi-open environments, you can maintain the amount of early reflections while reducing the value of the Reverb property, which controls later reflections. Value type is LONG; value range is -10000 to 1000, expressed in hundredths of one decibel (-100 dB to -10 dB).&lt;br /&gt;
* &#039;&#039;&#039;reflections delay&#039;&#039;&#039; - The Reflections Delay property is the amount of delay between the arrival time of the direct path from the source to the first reflection from the source. It ranges from 0 to 300 milliseconds. You can reduce or increase Reflections Delay to simulate closer or more distant reflective surfaces—and therefore control the perceived size of the room. Value is FLOAT; value range is 0.0 to 0.3, expressed in seconds (0 to 300 milliseconds).&lt;br /&gt;
* &#039;&#039;&#039;reflections pan&#039;&#039;&#039; - Undocumented. Three values are specified which may correspond to a generic &amp;quot;front&amp;quot;, &amp;quot;side&amp;quot; and &amp;quot;back/rear&amp;quot; configuration to control the directivity of early reflections in a 7.1 surround matrix. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;reverb&#039;&#039;&#039; - The Reverb property controls the overall amount of later reverberation relative to the Room property. (The Room property sets the overall amount of both initial reflections and later reverberation.) The value of Reverb ranges from a maximum of 20 dB to a minimum of -100 dB (no late reverberation at all). Value is LONG; value range is -10000 to 2000, expressed in hundredths of a decibel (-100 dB to 20 dB).&lt;br /&gt;
* &#039;&#039;&#039;reverb delay&#039;&#039;&#039; - The Reverb Delay property defines the begin time of the late reverberation relative to the time of the initial reflection (the first of the early reflections). It ranges from 0 to 100 milliseconds. Reducing or increasing Reverb Delay is useful for simulating a smaller or larger room. Value is FLOAT; value range is 0.0 to 0.1, expressed in seconds (0 to 100 milliseconds).&lt;br /&gt;
* &#039;&#039;&#039;reverb pan&#039;&#039;&#039; - Undocumented. Three values are specified which may correspond to a generic &amp;quot;front&amp;quot;, &amp;quot;side&amp;quot; and &amp;quot;back/rear&amp;quot; configuration to control the directivity of reverberation in a 7.1 surround matrix. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;echo time&#039;&#039;&#039; - Undocumented. Likely controls the decay time of echoes, or late reflections. A value of 0.1 likely presents a natural amount of echo, while increasing the value likely causes a &amp;quot;Grand Canyon&amp;quot; effect. Value type is likely FLOAT; value range is likely between 0.075 and 0.25, expressed in seconds.&lt;br /&gt;
* &#039;&#039;&#039;echo depth&#039;&#039;&#039; - Undocumented. May control directionality or tonal qualities of echoes arriving at the listener. Probably best to leave at 1.0. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;modulation time&#039;&#039;&#039; - Undocumented. Unknown purpose. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;modulation depth&#039;&#039;&#039; - Undocumented. Unknown purpose. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;air absorption hf&#039;&#039;&#039; - The Air Absorption HF property controls the distance-dependent attenuation at high frequencies caused by the propagation medium. It applies to both the direct path and reflected sound. You can use Air Absorption HF to simulate sound transmission through foggy air, dry air, smoky atmosphere, and so on. The default value is -0.05 dB per meter, which roughly corresponds to typical condition of atmospheric humidity, temperature, and so on. Lowering the value simulates a more absorbent medium (more humidity in the air, for example); raising the value simulates a less absorbent medium (dry desert air, for example). Value is FLOAT; value range is -100.0 to 0.0, expressed in hundredths of one decibel per meter (-1 dB to 0 dB). Default value is -5.0, which corresponds to -0.05 dB per meter attenuation.&lt;br /&gt;
* &#039;&#039;&#039;hf reference&#039;&#039;&#039; - Likely defines the frequency used for low-pass filters. Value is likely LONG; value range is likely between 0.0 and 20000.0, expressed in Hz. This value is probably best left at 5000.0.&lt;br /&gt;
* &#039;&#039;&#039;lf reference&#039;&#039;&#039; - Likely defines the frequency used for high-pass filters. Value is likely LONG; value range is likely between 0.0 and 20000.0, expressed in Hz. This value is probably best left at 250.0.&lt;br /&gt;
* &#039;&#039;&#039;room rolloff factor&#039;&#039;&#039; - The Room Rolloff property is one of two methods available in EAX to attenuate the reflected sound (containing both reflections, reverberation and echoes) according to source-listener distance. Value type is FLOAT; value range is 0.0 to 10.0, expressed in a linear multiplier value. It&#039;s recommended that users use 0.0, as id Software did not deviate from this value with Doom 3.&lt;br /&gt;
* &#039;&#039;&#039;flags&#039;&#039;&#039; - The Flags property is intended to control the relationship of high-level EAX properties to low-level properties. If certain EAX flags are set by setting the Flags property to a particular value, the setting of high-level properties is supposed to control the values of low-level properties based upon a defined scale, overriding specified values. In EAX 2.0, the value type is DWORD, whereas in Doom 3, it appears to be INT or some other type commonly used to store numeric values. In Doom 3, common values are 0, 2, 15, 31, 32, 56 and 63, but no documentation details what these values correspond to. If users wish to experiment with the Flags property, it is recommended that they choose from one of the above values. For reference, here is a table with the counts for each flag value as used in Doom 3:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 0.5em; margin-left: 2em; border: 1px solid #a0a0a0; text-align: right; border-collapse: collapse;&amp;quot; cellpadding=&amp;quot;2&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Flag decimal&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Flag binary&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Count&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|00000000&lt;br /&gt;
|497&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|00000010&lt;br /&gt;
|6&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|00001110&lt;br /&gt;
|15&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|00001111&lt;br /&gt;
|94&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|31&lt;br /&gt;
|00011111&lt;br /&gt;
|511&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|32&lt;br /&gt;
|00100000&lt;br /&gt;
|247&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|56&lt;br /&gt;
|00111000&lt;br /&gt;
|59&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|63&lt;br /&gt;
|00111111&lt;br /&gt;
|168&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Design.&#039;&#039;&#039;&lt;br /&gt;
In terms of the actual sound design for the values you put into these variables, here is a general tutorial on reverb from FruityLoops (NOTE: This is for a music production plugin, some of these don&#039;t apply, it&#039;s just to give a general idea on what certain variables do):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Low Cut&#039;&#039;&#039; Adjusts the low cutoff frequency. Use this to remove low frequencies from the input signal before reverb is added. For example, if you are adding reverb to, say a drum track, you might want to remove some of the &#039;rumble&#039; from the bass drum by attenuating the bass frequencies. Setting this parameter to the minimum value will bypass the Low Cut filter, displaying OFF in the value field.&lt;br /&gt;
* &#039;&#039;&#039;High Cut&#039;&#039;&#039; - Similar to the Low Cut, this adjusts the high cutoff frequency. Use this to remove high frequencies from the input signal.&lt;br /&gt;
* &#039;&#039;&#039;Predelay&#039;&#039;&#039; - Controls the delay time between the direct input signal and the first reverb reflection. This should be set to modest values for small rooms, and can be increased in relation to increases in room size. &#039;&#039;&#039;Predelay&#039;&#039;&#039; creates a slap-back echo effect that can both add atmosphere and muffle the signal, so use it wisely.&lt;br /&gt;
* &#039;&#039;&#039;Room Size&#039;&#039;&#039; - Use this to set the size of the virtual room where the reverb is created. The Room Size should be adjusted according to the decay time. Small rooms sound better with a short decay time, large rooms sound better with longer reverb times.&lt;br /&gt;
* &#039;&#039;&#039;Diffusion&#039;&#039;&#039; - Controls the density of the reflections bouncing off the walls of the virtual room. A low diffusion setting makes the reflections sound more distinct, like closely spaced echoes. A high diffusion setting creates reflections so close they sound more like noise, where no echoes can be distinguished.&lt;br /&gt;
* &#039;&#039;&#039;Color&#039;&#039;&#039; - The Color parameter is used for adjusting the decay time of the bass frequencies of the signal. This allows you to change the overall perceived mood or &#039;sound&#039; of the virtual room. A bright room has a low bass response, while warm rooms have a higher bass response. In a flat room, the response of the bass is equal to the general frequency response. Color has five settings: Brighter, Bright, Flat, Warm, Warmer.&lt;br /&gt;
* &#039;&#039;&#039;Decay&#039;&#039;&#039; - Controls the decay time of the reverb, the time it takes for the signal to decay to -60dB (1/1000 of the maximum amplitude). Use low decay times for small rooms or boxes, and long decay times for large rooms, halls or churches. You should also make sure that the Room Size parameter has an appropriate value.&lt;br /&gt;
* &#039;&#039;&#039;High Damping&#039;&#039;&#039; - This parameter allows you to adjust damping of the high frequencies in the reverb signal over time. Damping refers to the high frequencies being attenuated and dying out. This causes the sound to become gradually muffled and warm like it is being absorbed in the room. Setting this parameter to the maximum value will bypass the High Damping, displaying OFF in the value field.&lt;br /&gt;
* &#039;&#039;&#039;Dry&#039;&#039;&#039; - Sets the relative dry output level.&lt;br /&gt;
* &#039;&#039;&#039;Reverb&#039;&#039;&#039; - Sets the relative reverb (wet) signal level.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Error Check=&lt;br /&gt;
If you modified the presets in your EFX file, you can check for errors ingame. Load your map and open the console. Type &#039;&#039;reloadSounds&#039;&#039;, this will trigger the reload of the EFX used in your map and print out the vars which cause an error (like a value exceeding the maximum range). Note that if your EFX files contain errors, this will make the game ignore the EFX settings you chose. &lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
See the &amp;quot;EFX Reverb&amp;quot; column of &#039;&#039;&#039;[[Fan_Missions_for_The_Dark_Mod|Fan Missions page]]&#039;&#039;&#039;. Missions with &amp;quot;Yes&amp;quot; have EFX Reverb. &lt;br /&gt;
&amp;lt;br&amp;gt;Most missions use v2.0 presets but a few missions such as &amp;quot;Volta and the Stone&amp;quot; and Behind Closed Doors use v1.0 settings.&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
The Version 2 definitions were implemented due to [http://bugs.thedarkmod.com/view.php?id=4815 issue 4815], it has some brief explanation.&lt;br /&gt;
&lt;br /&gt;
A tutorial based around EFX can be found [http://forums.thedarkmod.com/topic/19205-getting-started-with-the-efx-room-reverb-system-wip/ here]&lt;br /&gt;
&lt;br /&gt;
An old demonstration map of EAX in TDM is included [http://forums.thedarkmod.com/topic/11045-environmental-audio-extensions-eax-in-tdm/ here]&lt;br /&gt;
&lt;br /&gt;
A discussion about no_efx is [http://forums.thedarkmod.com/topic/19213-efx-discussion here]&lt;br /&gt;
&lt;br /&gt;
The first version of this article was written by Ishtvan [https://forums.thedarkmod.com/index.php?/topic/2071-setting-reverb-data-in-new-soundengine-wiki/ here]&lt;br /&gt;
&lt;br /&gt;
[[Category:Sound]]&lt;br /&gt;
[[Category:Tutorial]]&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=Setting_Reverb_Data_of_Rooms_(EAX)&amp;diff=34419</id>
		<title>Setting Reverb Data of Rooms (EAX)</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=Setting_Reverb_Data_of_Rooms_(EAX)&amp;diff=34419"/>
		<updated>2026-01-25T00:25:25Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: /* Presets (Version 2) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
This document will attempt to explain how to set the new EFX settings in your rooms when mapping.&lt;br /&gt;
&lt;br /&gt;
Previously these settings were known as EAX settings, and required EAX 4.0-compatible sound card.&lt;br /&gt;
In TDM 2.06, EAX technology was completely replaced with OpenAL EFX, which is now processed in software (by [https://github.com/kcat/openal-soft openal-soft]) without any requirements on sound card.&lt;br /&gt;
&lt;br /&gt;
= General =&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
&lt;br /&gt;
EFX for a fan mission can be configured with or without a configuration file.  However, fileless configuration is only supported for [[Setting_Reverb_Data_of_Rooms_(EAX)#Presets_(Version_2)|EFX presets]].&lt;br /&gt;
&lt;br /&gt;
== EFX file ==&lt;br /&gt;
The EFX info for a map should be stored in the file &amp;quot;&amp;lt;tt&amp;gt;efxs/&amp;lt;mapname&amp;gt;.efx&amp;lt;/tt&amp;gt;&amp;quot;, where &amp;lt;mapname&amp;gt; is the name of your .map file (without extension).&lt;br /&gt;
&lt;br /&gt;
In order to check that you have put the file into right location, start your mission in game.&lt;br /&gt;
If TDM manages to load your efx file, then you will see the following message in console:&lt;br /&gt;
 sound: found efxs/&amp;lt;mapname&amp;gt;.efx&lt;br /&gt;
If you failed something, then you will see a bit different message there:&lt;br /&gt;
 sound: missing efxs/&amp;lt;mapname&amp;gt;.efx&lt;br /&gt;
In both cases some additional diagnostic messages can be present nearby.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; you must enable &amp;quot;&amp;lt;tt&amp;gt;OpenAL EFX&amp;lt;/tt&amp;gt;&amp;quot; in sound settings in the main menu, otherwise TDM won&#039;t even try to load the efx file.&lt;br /&gt;
&lt;br /&gt;
It is a plain text file, so you can open it up in your text editor of choice.&lt;br /&gt;
&lt;br /&gt;
Any EFX file must start with a header which specifies its &#039;&#039;&#039;version&#039;&#039;&#039;:&lt;br /&gt;
 Version 2&lt;br /&gt;
If you forget this line, then your EFX file will &#039;&#039;&#039;not&#039;&#039;&#039; be loaded.&lt;br /&gt;
The following versions are supported:&lt;br /&gt;
* &amp;lt;tt&amp;gt;Version 1&amp;lt;/tt&amp;gt; was supported by TDM from the very beginning. It uses some non-standard terms and quantities, which makes it hard to work with.&lt;br /&gt;
* &amp;lt;tt&amp;gt;Version 2&amp;lt;/tt&amp;gt; was added in TDM 2.07. It uses the parameters from OpenAL EFX and supports a lot of presets. &#039;&#039;&#039;Recommended for all new missions.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The rest of the file consists of separate blocks, one for each &amp;quot;reverb zone&amp;quot;.&lt;br /&gt;
Each block must start with &amp;lt;tt&amp;gt;reverb&amp;lt;/tt&amp;gt; keyword for Version 1 definitions, and &amp;lt;tt&amp;gt;eaxreverb&amp;lt;/tt&amp;gt; keyword for Version 2 definitions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here is an example of such block from mars_city1.efx of the original Doom 3 game (Version 1):&lt;br /&gt;
&lt;br /&gt;
 // reverb maintenance&lt;br /&gt;
 reverb &amp;quot;maintenance&amp;quot; {&lt;br /&gt;
  &amp;quot;environment&amp;quot; 26&lt;br /&gt;
  &amp;quot;environment size&amp;quot; 5.0670&lt;br /&gt;
  &amp;quot;environment diffusion&amp;quot; 0.6030&lt;br /&gt;
  &amp;quot;room&amp;quot; -411&lt;br /&gt;
  &amp;quot;room hf&amp;quot; -685&lt;br /&gt;
  &amp;quot;room lf&amp;quot; 0&lt;br /&gt;
  &amp;quot;decay time&amp;quot; 1.7360&lt;br /&gt;
  &amp;quot;decay hf ratio&amp;quot; 0.8030&lt;br /&gt;
  &amp;quot;decay lf ratio&amp;quot; 1.0000&lt;br /&gt;
  &amp;quot;reflections&amp;quot; 96&lt;br /&gt;
  &amp;quot;reflections delay&amp;quot; 0.0080&lt;br /&gt;
  &amp;quot;reflections pan&amp;quot; 0.0000 0.0000 0.0000&lt;br /&gt;
  &amp;quot;reverb&amp;quot; 27&lt;br /&gt;
  &amp;quot;reverb delay&amp;quot; 0.0050&lt;br /&gt;
  &amp;quot;reverb pan&amp;quot; 0.0000 0.0000 0.0000&lt;br /&gt;
  &amp;quot;echo time&amp;quot; 0.0750&lt;br /&gt;
  &amp;quot;echo depth&amp;quot; 1.0000&lt;br /&gt;
  &amp;quot;modulation time&amp;quot; 0.2500&lt;br /&gt;
  &amp;quot;modulation depth&amp;quot; 0.0000&lt;br /&gt;
  &amp;quot;air absorption hf&amp;quot; -5.0000&lt;br /&gt;
  &amp;quot;hf reference&amp;quot; 5000.0000&lt;br /&gt;
  &amp;quot;lf reference&amp;quot; 250.0000&lt;br /&gt;
  &amp;quot;room rolloff factor&amp;quot; 0.0000&lt;br /&gt;
  &amp;quot;flags&amp;quot; 56&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And here is an artificial example of Version 2 definitions:&lt;br /&gt;
&lt;br /&gt;
  eaxreverb &amp;quot;myweirdstreets&amp;quot; {&lt;br /&gt;
    reflections_gain 0.5&lt;br /&gt;
    reflections_delay 0.0050&lt;br /&gt;
    late_reverb_gain 2.5&lt;br /&gt;
    late_reverb_delay 0.050&lt;br /&gt;
    echo_time 0.25&lt;br /&gt;
    echo_depth 0.9000&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
What does all this mean? &lt;br /&gt;
&lt;br /&gt;
There is a lot of sound design stuff that one could make guesses at if you&#039;ve ever used a reverb plugin in any sort of sound editing program. hf = high frequency, lf = low frequency, etc.&lt;br /&gt;
&lt;br /&gt;
A proper explanation of the parameters is given below.&lt;br /&gt;
&lt;br /&gt;
== Locations ==&lt;br /&gt;
Each reverb zone definition starts with a line which specifies to which location it must be applied:&lt;br /&gt;
&lt;br /&gt;
 reverb &amp;quot;&amp;lt;name of the location area you want to apply this to&amp;gt;&amp;quot;&lt;br /&gt;
 {&lt;br /&gt;
     //... (settings)&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Information about locations and how to set them up is available in another article: [[Location Settings #The Location Entities]].&lt;br /&gt;
Reverb zones use exactly the same locations as the ones which are used to specify per-area ambient sounds.&lt;br /&gt;
You should name every info_location entity, i.e. provide a &amp;quot;&amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt;&amp;quot; spawnarg for it. This is the name used in reverb zone definitions.&lt;br /&gt;
&lt;br /&gt;
As of TDM 2.06, you can&#039;t use capital letters in the name of your location entity or reverb zone. This may or may not change in the future.&lt;br /&gt;
&lt;br /&gt;
Here is an example of an entity which defines &amp;quot;canal_tunnel&amp;quot; location:&lt;br /&gt;
&lt;br /&gt;
 //======================= from volta_v1.map ====================&lt;br /&gt;
 // entity 3532&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;classname&amp;quot; &amp;quot;info_location&amp;quot;&lt;br /&gt;
   &amp;quot;name&amp;quot; &amp;quot;canal_tunnel&amp;quot;             //this is the name used&lt;br /&gt;
   &amp;quot;ambient&amp;quot; &amp;quot;snd_streets&amp;quot;&lt;br /&gt;
   &amp;quot;ambient_light&amp;quot; &amp;quot;0.04 0.03 0.02&amp;quot;&lt;br /&gt;
   &amp;quot;ambient_light_dynamic&amp;quot; &amp;quot;0.01 0.01 0.01&amp;quot;&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And this is the EFX effect (reverb zone) for it:&lt;br /&gt;
&lt;br /&gt;
 //======================= from volta_v1.efx ====================&lt;br /&gt;
 reverb &amp;quot;canal_tunnel&amp;quot; {             //name put to here&lt;br /&gt;
   &amp;quot;environment&amp;quot; 22&lt;br /&gt;
   &amp;quot;environment size&amp;quot; 1.8000&lt;br /&gt;
   &amp;quot;environment diffusion&amp;quot; 1.0000&lt;br /&gt;
   &amp;quot;room&amp;quot; -1000&lt;br /&gt;
   &amp;quot;room hf&amp;quot; -4000&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
During playing, the engine prints a message whenever the player&#039;s location changes.&lt;br /&gt;
It allows you to check if you have set up locations properly.&lt;br /&gt;
For instance, here are console messages showing a proper EFX location change:&lt;br /&gt;
&lt;br /&gt;
 Switching to EFX &#039;canal_tunnel&#039; (#295)&lt;br /&gt;
 Changed location from &#039;canal_streets&#039; to &#039;canal_tunnel&#039;.&lt;br /&gt;
&lt;br /&gt;
It is also possible to specify portal-area number instead of location name in the reverb zone definition.&lt;br /&gt;
The portal-area number is listed in the .proc file, which is created in the dmap process, in the format of &amp;lt;tt&amp;gt;_area&amp;lt;num&amp;gt;&amp;lt;/tt&amp;gt; (where &amp;lt;num&amp;gt; is the portal area number), e.g. &amp;lt;tt&amp;gt;_area15&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&#039;&#039;&#039;Beware:&#039;&#039;&#039; this functionality exists for fast hacking only! Do not release a mission with portal-area numbers in .efx file!&lt;br /&gt;
The main reason to avoid it is that portal-area numbers are auto-generated, so minor changes in your mission can change all of them.&lt;br /&gt;
&lt;br /&gt;
Finally, there is a &amp;quot;default&amp;quot; reverb environment which is used for any area in the map which does not have reverb information specified.&lt;br /&gt;
&lt;br /&gt;
The order that the sound system checks for reverb data is: area number -&amp;gt; location name -&amp;gt; default.&lt;br /&gt;
&lt;br /&gt;
== Changes during playing ==&lt;br /&gt;
Type &amp;quot;&amp;lt;tt&amp;gt;reloadSounds&amp;lt;/tt&amp;gt;&amp;quot; command into game console in order to reload EFX definitions.&lt;br /&gt;
&lt;br /&gt;
So when you experiment with EFX, execute this command after each tweak to EFX file to hear the difference immediately.&lt;br /&gt;
&lt;br /&gt;
== Suppress effect ==&lt;br /&gt;
Sometimes you want to disable EFX effect on a specific sound.&lt;br /&gt;
A typical example is when you have a voice in player&#039;s head, which must not depend on player&#039;s physical environment.&lt;br /&gt;
Another case is when some sound already has reverb baked in, so you don&#039;t what to double-reverb it. Although the best practice is to use sound samples without embedded reverb, combined with proper EFX definitions.&lt;br /&gt;
&lt;br /&gt;
You can disable all EFX effects on one specific sound shader by adding &amp;quot;&amp;lt;tt&amp;gt;no_efx&amp;lt;/tt&amp;gt;&amp;quot; keyword to its body.&lt;br /&gt;
For instance, here is how non-EFX version of blackjack unsheathing looks like:&lt;br /&gt;
 blackjack_unsheath&lt;br /&gt;
 {&lt;br /&gt;
   description &amp;quot;Made by pakmannen&amp;quot;&lt;br /&gt;
   sound/sfx/tools/melee/blackjack_unsheath.ogg&lt;br /&gt;
   no_efx                       //do NOT apply EFX to this sound&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note that if you change sound shaders, writing &amp;quot;&amp;lt;tt&amp;gt;reloadDecls&amp;lt;/tt&amp;gt;&amp;quot; in TDM game console is enough to reload them.&lt;br /&gt;
&lt;br /&gt;
There are a lot of stock sounds in TDM which should not be affected by EFX effects.&lt;br /&gt;
Starting from TDM 2.07, the corresponding core sounds are marked with &amp;quot;&amp;lt;tt&amp;gt;no_efx&amp;lt;/tt&amp;gt;&amp;quot; keyword (see issue [http://bugs.thedarkmod.com/view.php?id=4688 4688]).&lt;br /&gt;
If you discover any core sound which is affected by EFX while you believe it should not, start a discussion on forums.&lt;br /&gt;
&lt;br /&gt;
=Environment properties=&lt;br /&gt;
&lt;br /&gt;
== New properties (Version 2) ==&lt;br /&gt;
&lt;br /&gt;
With Version 2 of EFX file, the set of supported properties exactly matches the set of properties defined in OpenAL EFX for the &amp;quot;EAX Reverb&amp;quot; effect.&lt;br /&gt;
Note that EFX defines several types of effects, including &amp;quot;EAX Reverb&amp;quot;, &amp;quot;Standard Reverb&amp;quot;, &amp;quot;Chorus&amp;quot;, &amp;quot;Distortion&amp;quot;, &amp;quot;Echo&amp;quot;, &amp;quot;Flanger&amp;quot;, etc.&lt;br /&gt;
Only the first one is important, ignore all the rest (including the so-called &amp;quot;Standard Reverb&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
The detailed description of all the properties is given in &amp;quot;Appendix 1 – Effect property descriptions&amp;quot; of the [https://usermanual.wiki/Pdf/Effects20Extension20Guide.90272296/view#95 OpenAL Effects Extension Guide](pages 95-101).&lt;br /&gt;
The short list is also available in a table on [https://usermanual.wiki/Pdf/Effects20Extension20Guide.90272296/view#66 page 66 of the guide]:&lt;br /&gt;
&lt;br /&gt;
[[File:Eaxreverb_properties_screenshot.png|500px]]&lt;br /&gt;
&lt;br /&gt;
The only difference is that the property names in the guide have the &amp;lt;tt&amp;gt;AL_EAXREVERB_&amp;lt;/tt&amp;gt; prefix, while in TDM definitions this prefix is removed.&lt;br /&gt;
&lt;br /&gt;
== Presets (Version 2) ==&lt;br /&gt;
Presets can be set in 2 ways:&lt;br /&gt;
* As of TDM 2.13, the &#039;&#039;&#039;efx_preset&#039;&#039;&#039; spawnarg on the location entity for the location where you want to use the effect.&lt;br /&gt;
* in the .efx file&lt;br /&gt;
&lt;br /&gt;
=== Location Entity Method ===&lt;br /&gt;
On the location entity where you want to use the preset, set the spawnarg &#039;&#039;&#039;efx_preset&#039;&#039;&#039; to the value of the preset.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
efx_preset    CITY_SUBWAY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If using this method no .efx file is required at all, but using both methods simultaneously is supported.  In the case that both are used to set the preset value for a single location, the spawnarg value will take precedence.&lt;br /&gt;
=== File Method ===&lt;br /&gt;
&lt;br /&gt;
There is one special property &amp;lt;tt&amp;gt;PRESET&amp;lt;/tt&amp;gt;, which is not present in the EFX guide.&lt;br /&gt;
This property accepts the name of the preset which you want to use:&lt;br /&gt;
&lt;br /&gt;
 eaxreverb &amp;quot;myclassroom&amp;quot; {&lt;br /&gt;
   preset auditorium&lt;br /&gt;
 }&lt;br /&gt;
 eaxreverb &amp;quot;mycave&amp;quot; {&lt;br /&gt;
   preset cave&lt;br /&gt;
 }&lt;br /&gt;
 eaxreverb &amp;quot;mycorridor&amp;quot; {&lt;br /&gt;
   preset hallway&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
If you specify the preset like this, the values for all the reverb properties will be taken from the specified preset.&lt;br /&gt;
Additionally, you can override values of some properties if you define them manually &#039;&#039;&#039;after&#039;&#039;&#039; defining the preset.&lt;br /&gt;
&lt;br /&gt;
The preset property also accepts index of preset. Don&#039;t use indices for anything except experimentation, since they may change in future.&lt;br /&gt;
&lt;br /&gt;
=== Preset Values ===&lt;br /&gt;
The presets were taken from OpenAL-Soft implementation which TDM uses.&lt;br /&gt;
Here is the full list of preset names:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;height:350px; overflow:scroll;&amp;quot;&amp;gt;&lt;br /&gt;
GENERIC&lt;br /&gt;
PADDEDCELL&lt;br /&gt;
ROOM&lt;br /&gt;
BATHROOM&lt;br /&gt;
LIVINGROOM&lt;br /&gt;
STONEROOM&lt;br /&gt;
AUDITORIUM&lt;br /&gt;
CONCERTHALL&lt;br /&gt;
CAVE&lt;br /&gt;
ARENA&lt;br /&gt;
HANGAR&lt;br /&gt;
CARPETEDHALLWAY&lt;br /&gt;
HALLWAY&lt;br /&gt;
STONECORRIDOR&lt;br /&gt;
ALLEY&lt;br /&gt;
FOREST&lt;br /&gt;
CITY&lt;br /&gt;
MOUNTAINS&lt;br /&gt;
QUARRY&lt;br /&gt;
PLAIN&lt;br /&gt;
PARKINGLOT&lt;br /&gt;
SEWERPIPE&lt;br /&gt;
UNDERWATER&lt;br /&gt;
DRUGGED&lt;br /&gt;
DIZZY&lt;br /&gt;
PSYCHOTIC&lt;br /&gt;
CASTLE_SMALLROOM&lt;br /&gt;
CASTLE_SHORTPASSAGE&lt;br /&gt;
CASTLE_MEDIUMROOM&lt;br /&gt;
CASTLE_LARGEROOM&lt;br /&gt;
CASTLE_LONGPASSAGE&lt;br /&gt;
CASTLE_HALL&lt;br /&gt;
CASTLE_CUPBOARD&lt;br /&gt;
CASTLE_COURTYARD&lt;br /&gt;
CASTLE_ALCOVE&lt;br /&gt;
FACTORY_SMALLROOM&lt;br /&gt;
FACTORY_SHORTPASSAGE&lt;br /&gt;
FACTORY_MEDIUMROOM&lt;br /&gt;
FACTORY_LARGEROOM&lt;br /&gt;
FACTORY_LONGPASSAGE&lt;br /&gt;
FACTORY_HALL&lt;br /&gt;
FACTORY_CUPBOARD&lt;br /&gt;
FACTORY_COURTYARD&lt;br /&gt;
FACTORY_ALCOVE&lt;br /&gt;
ICEPALACE_SMALLROOM&lt;br /&gt;
ICEPALACE_SHORTPASSAGE&lt;br /&gt;
ICEPALACE_MEDIUMROOM&lt;br /&gt;
ICEPALACE_LARGEROOM&lt;br /&gt;
ICEPALACE_LONGPASSAGE&lt;br /&gt;
ICEPALACE_HALL&lt;br /&gt;
ICEPALACE_CUPBOARD&lt;br /&gt;
ICEPALACE_COURTYARD&lt;br /&gt;
ICEPALACE_ALCOVE&lt;br /&gt;
SPACESTATION_SMALLROOM&lt;br /&gt;
SPACESTATION_SHORTPASSAGE&lt;br /&gt;
SPACESTATION_MEDIUMROOM&lt;br /&gt;
SPACESTATION_LARGEROOM&lt;br /&gt;
SPACESTATION_LONGPASSAGE&lt;br /&gt;
SPACESTATION_HALL&lt;br /&gt;
SPACESTATION_CUPBOARD&lt;br /&gt;
SPACESTATION_ALCOVE&lt;br /&gt;
WOODEN_SMALLROOM&lt;br /&gt;
WOODEN_SHORTPASSAGE&lt;br /&gt;
WOODEN_MEDIUMROOM&lt;br /&gt;
WOODEN_LARGEROOM&lt;br /&gt;
WOODEN_LONGPASSAGE&lt;br /&gt;
WOODEN_HALL&lt;br /&gt;
WOODEN_CUPBOARD&lt;br /&gt;
WOODEN_COURTYARD&lt;br /&gt;
WOODEN_ALCOVE&lt;br /&gt;
SPORT_EMPTYSTADIUM&lt;br /&gt;
SPORT_SQUASHCOURT&lt;br /&gt;
SPORT_SMALLSWIMMINGPOOL&lt;br /&gt;
SPORT_LARGESWIMMINGPOOL&lt;br /&gt;
SPORT_GYMNASIUM&lt;br /&gt;
SPORT_FULLSTADIUM&lt;br /&gt;
SPORT_STADIUMTANNOY&lt;br /&gt;
PREFAB_WORKSHOP&lt;br /&gt;
PREFAB_SCHOOLROOM&lt;br /&gt;
PREFAB_PRACTISEROOM&lt;br /&gt;
PREFAB_OUTHOUSE&lt;br /&gt;
PREFAB_CARAVAN&lt;br /&gt;
DOME_TOMB&lt;br /&gt;
PIPE_SMALL&lt;br /&gt;
DOME_SAINTPAULS&lt;br /&gt;
PIPE_LONGTHIN&lt;br /&gt;
PIPE_LARGE&lt;br /&gt;
PIPE_RESONANT&lt;br /&gt;
OUTDOORS_BACKYARD&lt;br /&gt;
OUTDOORS_ROLLINGPLAINS&lt;br /&gt;
OUTDOORS_DEEPCANYON&lt;br /&gt;
OUTDOORS_CREEK&lt;br /&gt;
OUTDOORS_VALLEY&lt;br /&gt;
MOOD_HEAVEN&lt;br /&gt;
MOOD_HELL&lt;br /&gt;
MOOD_MEMORY&lt;br /&gt;
DRIVING_COMMENTATOR&lt;br /&gt;
DRIVING_PITGARAGE&lt;br /&gt;
DRIVING_INCAR_RACER&lt;br /&gt;
DRIVING_INCAR_SPORTS&lt;br /&gt;
DRIVING_INCAR_LUXURY&lt;br /&gt;
DRIVING_FULLGRANDSTAND&lt;br /&gt;
DRIVING_EMPTYGRANDSTAND&lt;br /&gt;
DRIVING_TUNNEL&lt;br /&gt;
CITY_STREETS&lt;br /&gt;
CITY_SUBWAY&lt;br /&gt;
CITY_MUSEUM&lt;br /&gt;
CITY_LIBRARY&lt;br /&gt;
CITY_UNDERPASS&lt;br /&gt;
CITY_ABANDONED&lt;br /&gt;
DUSTYROOM&lt;br /&gt;
CHAPEL&lt;br /&gt;
SMALLWATERROOM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Their definitions can be seen in [https://github.com/kcat/openal-soft/blob/master/include/AL/efx-presets.h efx-presets.h] from OpenAL-Soft source code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-expandtext=&amp;quot;Show&amp;quot; data-collapsetext=&amp;quot;Hide&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Legacy info (Version 1) ==&lt;br /&gt;
&lt;br /&gt;
This information is from the old official EAX 2.0 documentation, although some properties may have changed in scope and focus from EAX 2.0 to EAX 4.0. One can assume that the properties serve the same general purpose and that each property&#039;s value bounds are approximately the same.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;environment&#039;&#039;&#039; - Unknown. Likely sets the room to one of an unknown number of environment presets.&lt;br /&gt;
* &#039;&#039;&#039;environment size&#039;&#039;&#039; - The Environment Size property sets the apparent size of the surrounding “room.” The value of Environment Size can be considered a characteristic dimension of the room expressed in meters. Scaling Environment Size is equivalent to scaling all dimensions of the room by the same factor. Value type is FLOAT; value range is 1.0 to 100.0, expressed in linear meters.&lt;br /&gt;
* &#039;&#039;&#039;environment diffusion&#039;&#039;&#039; - The Environment Diffusion property controls the echo density in the reverberation decay. Reducing diffusion gives the reverberation a more “grainy” character that is especially noticeable with percussive sound sources. If you set a diffusion value of 0.0, the later reverberation sounds like a succession of distinct echoes. Value type is FLOAT; value range is 0.0 to 1.0, expressed in a linear multiplier value.&lt;br /&gt;
* &#039;&#039;&#039;room&#039;&#039;&#039; - The Room property is the master volume control for the reflected sound (both early reflections and reverberation) that EAX adds to all sound sources. It sets the maximum amount of reflections and reverberation added to the sound mix in the primary buffer (the listener). Value is LONG; value range is -10000 to 0, expressed in hundredths of one decibel (-100 dB to 0 dB).&lt;br /&gt;
* &#039;&#039;&#039;room hf&#039;&#039;&#039; - The Room HF property further tweaks reflected sound by attenuating it at high frequencies. It controls a low-pass filter that applies globally to the reflected sound of all sound sources. The exact qualities of this low-pass filter -- its frequency and its bandwidth (Q) -- are unknown. Value type is LONG; value range is -10000 to 0, expressed in hundredths of one decibel (-100 dB to 0 dB).&lt;br /&gt;
* &#039;&#039;&#039;room lf&#039;&#039;&#039; - Undocumented. Assumably, the Room LF property applies a high-pass to reflected sound in much the same way as Room HF applies low-pass. The value type and range is unknown, but is likely LONG, must be between -10000 and 0 and is expressed in hundredths of one decibel.&lt;br /&gt;
* &#039;&#039;&#039;decay time&#039;&#039;&#039; - The Decay Time property sets the reverberation decay time, or the time in which reverberation is diminished. It ranges from 0.1 (typically a small room with very dead surfaces) to 20.0 (typically a large room with very live surfaces). Value is FLOAT; value range is 0.1 to 20.0, expressed in seconds.&lt;br /&gt;
* &#039;&#039;&#039;decay hf ratio&#039;&#039;&#039; - The Decay HF Ratio property sets the spectral quality of the Decay Time parameter. It is the ratio of high-frequency decay time relative to the time set by Decay Time. The Decay HF Ratio value 1.0 is neutral: the decay time is equal for all frequencies. As Decay HF Ratio increases above 1.0, the high-frequency decay time increases so it’s longer than the decay time at low frequencies. You hear a more brilliant reverberation with a longer decay at high frequencies. As the Decay HF Ratio value decreases below 1.0, the high-frequency decay time decreases so it’s shorter than the decay time of the low frequencies. You hear a more natural reverberation. Value is FLOAT; value range is 0.1 to 20.0, expressed in a linear multiplier variable.&lt;br /&gt;
* &#039;&#039;&#039;decay lf ratio&#039;&#039;&#039; - Undocumented. It&#039;s likely best to leave the value at 1.0, though the value&#039;s type and range is probably the same as the Decay HF Ratio property.&lt;br /&gt;
* &#039;&#039;&#039;reflections&#039;&#039;&#039; - The Reflections property controls the overall amount of initial reflections relative to the Room property. The value of Reflections ranges from a maximum of 10 dB to a minimum of -100 dB (no initial reflections at all), and is corrected by the value of the Room property. The Reflections property does not affect the subsequent reverberation decay. You can increase the amount of initial reflections to simulate a more narrow space or closer walls, especially effective if you associate the initial reflections increase with a reduction in reflections delays by lowering the value of the Reflection Delay property. To simulate open or semi-open environments, you can maintain the amount of early reflections while reducing the value of the Reverb property, which controls later reflections. Value type is LONG; value range is -10000 to 1000, expressed in hundredths of one decibel (-100 dB to -10 dB).&lt;br /&gt;
* &#039;&#039;&#039;reflections delay&#039;&#039;&#039; - The Reflections Delay property is the amount of delay between the arrival time of the direct path from the source to the first reflection from the source. It ranges from 0 to 300 milliseconds. You can reduce or increase Reflections Delay to simulate closer or more distant reflective surfaces—and therefore control the perceived size of the room. Value is FLOAT; value range is 0.0 to 0.3, expressed in seconds (0 to 300 milliseconds).&lt;br /&gt;
* &#039;&#039;&#039;reflections pan&#039;&#039;&#039; - Undocumented. Three values are specified which may correspond to a generic &amp;quot;front&amp;quot;, &amp;quot;side&amp;quot; and &amp;quot;back/rear&amp;quot; configuration to control the directivity of early reflections in a 7.1 surround matrix. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;reverb&#039;&#039;&#039; - The Reverb property controls the overall amount of later reverberation relative to the Room property. (The Room property sets the overall amount of both initial reflections and later reverberation.) The value of Reverb ranges from a maximum of 20 dB to a minimum of -100 dB (no late reverberation at all). Value is LONG; value range is -10000 to 2000, expressed in hundredths of a decibel (-100 dB to 20 dB).&lt;br /&gt;
* &#039;&#039;&#039;reverb delay&#039;&#039;&#039; - The Reverb Delay property defines the begin time of the late reverberation relative to the time of the initial reflection (the first of the early reflections). It ranges from 0 to 100 milliseconds. Reducing or increasing Reverb Delay is useful for simulating a smaller or larger room. Value is FLOAT; value range is 0.0 to 0.1, expressed in seconds (0 to 100 milliseconds).&lt;br /&gt;
* &#039;&#039;&#039;reverb pan&#039;&#039;&#039; - Undocumented. Three values are specified which may correspond to a generic &amp;quot;front&amp;quot;, &amp;quot;side&amp;quot; and &amp;quot;back/rear&amp;quot; configuration to control the directivity of reverberation in a 7.1 surround matrix. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;echo time&#039;&#039;&#039; - Undocumented. Likely controls the decay time of echoes, or late reflections. A value of 0.1 likely presents a natural amount of echo, while increasing the value likely causes a &amp;quot;Grand Canyon&amp;quot; effect. Value type is likely FLOAT; value range is likely between 0.075 and 0.25, expressed in seconds.&lt;br /&gt;
* &#039;&#039;&#039;echo depth&#039;&#039;&#039; - Undocumented. May control directionality or tonal qualities of echoes arriving at the listener. Probably best to leave at 1.0. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;modulation time&#039;&#039;&#039; - Undocumented. Unknown purpose. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;modulation depth&#039;&#039;&#039; - Undocumented. Unknown purpose. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;air absorption hf&#039;&#039;&#039; - The Air Absorption HF property controls the distance-dependent attenuation at high frequencies caused by the propagation medium. It applies to both the direct path and reflected sound. You can use Air Absorption HF to simulate sound transmission through foggy air, dry air, smoky atmosphere, and so on. The default value is -0.05 dB per meter, which roughly corresponds to typical condition of atmospheric humidity, temperature, and so on. Lowering the value simulates a more absorbent medium (more humidity in the air, for example); raising the value simulates a less absorbent medium (dry desert air, for example). Value is FLOAT; value range is -100.0 to 0.0, expressed in hundredths of one decibel per meter (-1 dB to 0 dB). Default value is -5.0, which corresponds to -0.05 dB per meter attenuation.&lt;br /&gt;
* &#039;&#039;&#039;hf reference&#039;&#039;&#039; - Likely defines the frequency used for low-pass filters. Value is likely LONG; value range is likely between 0.0 and 20000.0, expressed in Hz. This value is probably best left at 5000.0.&lt;br /&gt;
* &#039;&#039;&#039;lf reference&#039;&#039;&#039; - Likely defines the frequency used for high-pass filters. Value is likely LONG; value range is likely between 0.0 and 20000.0, expressed in Hz. This value is probably best left at 250.0.&lt;br /&gt;
* &#039;&#039;&#039;room rolloff factor&#039;&#039;&#039; - The Room Rolloff property is one of two methods available in EAX to attenuate the reflected sound (containing both reflections, reverberation and echoes) according to source-listener distance. Value type is FLOAT; value range is 0.0 to 10.0, expressed in a linear multiplier value. It&#039;s recommended that users use 0.0, as id Software did not deviate from this value with Doom 3.&lt;br /&gt;
* &#039;&#039;&#039;flags&#039;&#039;&#039; - The Flags property is intended to control the relationship of high-level EAX properties to low-level properties. If certain EAX flags are set by setting the Flags property to a particular value, the setting of high-level properties is supposed to control the values of low-level properties based upon a defined scale, overriding specified values. In EAX 2.0, the value type is DWORD, whereas in Doom 3, it appears to be INT or some other type commonly used to store numeric values. In Doom 3, common values are 0, 2, 15, 31, 32, 56 and 63, but no documentation details what these values correspond to. If users wish to experiment with the Flags property, it is recommended that they choose from one of the above values. For reference, here is a table with the counts for each flag value as used in Doom 3:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 0.5em; margin-left: 2em; border: 1px solid #a0a0a0; text-align: right; border-collapse: collapse;&amp;quot; cellpadding=&amp;quot;2&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Flag decimal&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Flag binary&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Count&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|00000000&lt;br /&gt;
|497&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|00000010&lt;br /&gt;
|6&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|00001110&lt;br /&gt;
|15&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|00001111&lt;br /&gt;
|94&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|31&lt;br /&gt;
|00011111&lt;br /&gt;
|511&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|32&lt;br /&gt;
|00100000&lt;br /&gt;
|247&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|56&lt;br /&gt;
|00111000&lt;br /&gt;
|59&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|63&lt;br /&gt;
|00111111&lt;br /&gt;
|168&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Design.&#039;&#039;&#039;&lt;br /&gt;
In terms of the actual sound design for the values you put into these variables, here is a general tutorial on reverb from FruityLoops (NOTE: This is for a music production plugin, some of these don&#039;t apply, it&#039;s just to give a general idea on what certain variables do):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Low Cut&#039;&#039;&#039; Adjusts the low cutoff frequency. Use this to remove low frequencies from the input signal before reverb is added. For example, if you are adding reverb to, say a drum track, you might want to remove some of the &#039;rumble&#039; from the bass drum by attenuating the bass frequencies. Setting this parameter to the minimum value will bypass the Low Cut filter, displaying OFF in the value field.&lt;br /&gt;
* &#039;&#039;&#039;High Cut&#039;&#039;&#039; - Similar to the Low Cut, this adjusts the high cutoff frequency. Use this to remove high frequencies from the input signal.&lt;br /&gt;
* &#039;&#039;&#039;Predelay&#039;&#039;&#039; - Controls the delay time between the direct input signal and the first reverb reflection. This should be set to modest values for small rooms, and can be increased in relation to increases in room size. &#039;&#039;&#039;Predelay&#039;&#039;&#039; creates a slap-back echo effect that can both add atmosphere and muffle the signal, so use it wisely.&lt;br /&gt;
* &#039;&#039;&#039;Room Size&#039;&#039;&#039; - Use this to set the size of the virtual room where the reverb is created. The Room Size should be adjusted according to the decay time. Small rooms sound better with a short decay time, large rooms sound better with longer reverb times.&lt;br /&gt;
* &#039;&#039;&#039;Diffusion&#039;&#039;&#039; - Controls the density of the reflections bouncing off the walls of the virtual room. A low diffusion setting makes the reflections sound more distinct, like closely spaced echoes. A high diffusion setting creates reflections so close they sound more like noise, where no echoes can be distinguished.&lt;br /&gt;
* &#039;&#039;&#039;Color&#039;&#039;&#039; - The Color parameter is used for adjusting the decay time of the bass frequencies of the signal. This allows you to change the overall perceived mood or &#039;sound&#039; of the virtual room. A bright room has a low bass response, while warm rooms have a higher bass response. In a flat room, the response of the bass is equal to the general frequency response. Color has five settings: Brighter, Bright, Flat, Warm, Warmer.&lt;br /&gt;
* &#039;&#039;&#039;Decay&#039;&#039;&#039; - Controls the decay time of the reverb, the time it takes for the signal to decay to -60dB (1/1000 of the maximum amplitude). Use low decay times for small rooms or boxes, and long decay times for large rooms, halls or churches. You should also make sure that the Room Size parameter has an appropriate value.&lt;br /&gt;
* &#039;&#039;&#039;High Damping&#039;&#039;&#039; - This parameter allows you to adjust damping of the high frequencies in the reverb signal over time. Damping refers to the high frequencies being attenuated and dying out. This causes the sound to become gradually muffled and warm like it is being absorbed in the room. Setting this parameter to the maximum value will bypass the High Damping, displaying OFF in the value field.&lt;br /&gt;
* &#039;&#039;&#039;Dry&#039;&#039;&#039; - Sets the relative dry output level.&lt;br /&gt;
* &#039;&#039;&#039;Reverb&#039;&#039;&#039; - Sets the relative reverb (wet) signal level.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Error Check=&lt;br /&gt;
If you modified the presets in your EFX file, you can check for errors ingame. Load your map and open the console. Type &#039;&#039;reloadSounds&#039;&#039;, this will trigger the reload of the EFX used in your map and print out the vars which cause an error (like a value exceeding the maximum range). Note that if your EFX files contain errors, this will make the game ignore the EFX settings you chose. &lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
See the &amp;quot;EFX Reverb&amp;quot; column of &#039;&#039;&#039;[[Fan_Missions_for_The_Dark_Mod|Fan Missions page]]&#039;&#039;&#039;. Missions with &amp;quot;Yes&amp;quot; have EFX Reverb. &lt;br /&gt;
&amp;lt;br&amp;gt;Most missions use v2.0 presets but a few missions such as &amp;quot;Volta and the Stone&amp;quot; and Behind Closed Doors use v1.0 settings.&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
The Version 2 definitions were implemented due to [http://bugs.thedarkmod.com/view.php?id=4815 issue 4815], it has some brief explanation.&lt;br /&gt;
&lt;br /&gt;
A tutorial based around EFX can be found [http://forums.thedarkmod.com/topic/19205-getting-started-with-the-efx-room-reverb-system-wip/ here]&lt;br /&gt;
&lt;br /&gt;
An old demonstration map of EAX in TDM is included [http://forums.thedarkmod.com/topic/11045-environmental-audio-extensions-eax-in-tdm/ here]&lt;br /&gt;
&lt;br /&gt;
A discussion about no_efx is [http://forums.thedarkmod.com/topic/19213-efx-discussion here]&lt;br /&gt;
&lt;br /&gt;
The first version of this article was written by Ishtvan [https://forums.thedarkmod.com/index.php?/topic/2071-setting-reverb-data-in-new-soundengine-wiki/ here]&lt;br /&gt;
&lt;br /&gt;
[[Category:Sound]]&lt;br /&gt;
[[Category:Tutorial]]&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=Doors&amp;diff=34110</id>
		<title>Doors</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=Doors&amp;diff=34110"/>
		<updated>2025-11-08T11:16:15Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: /* Automatically Removing Keys from Player Inventory After Use */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{todo}}&lt;br /&gt;
&#039;&#039;Written by Fidcal&#039;&#039; &#039;&#039;edit Baddcog&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Quick Summary==&lt;br /&gt;
&lt;br /&gt;
Quick way to get an unlocked door in your map:&lt;br /&gt;
&lt;br /&gt;
* Insert one of the prefab doors complete with handles and select its skin property and click the button to change its skin appearance to whatever you want. Set any other properties you need.&lt;br /&gt;
&lt;br /&gt;
Alternatively,&lt;br /&gt;
&lt;br /&gt;
* Create a door from the entity list&lt;br /&gt;
* Use the &amp;quot;skin&amp;quot; spawnarg on the door to change its appearance. &lt;br /&gt;
* Create a handle from the entity list&lt;br /&gt;
* Add the &#039;&#039;door_handle&#039;&#039; property to the door and give it the name of the handle&lt;br /&gt;
* To the door handle add the value frob_peer and use the name of the door.&lt;br /&gt;
* To open clockwise, change the &#039;&#039;rotate&#039;&#039; property from &amp;lt;code&amp;gt;0 90 0&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;0 -90 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
This tutorial explains how to put doors into your map using Dark Radiant, as well as adjust them and their properties.&lt;br /&gt;
&lt;br /&gt;
The rest of this tutorial assumes that you have a basic understanding of using DarkRadiant. If you haven&#039;t done so, please go read the [[Dark Radiant Must Know Basic Intro]] article first.&lt;br /&gt;
&lt;br /&gt;
Additionally:&lt;br /&gt;
&lt;br /&gt;
* Up, down, right, and left in Dark Radiant&#039;s &#039;&#039;top&#039;&#039; orthoview are regarded here as the standard map directions of North, South, East, and West where useful for clarity.&lt;br /&gt;
* Where the term &#039;&#039;brush&#039;&#039; is used with a door it mostly also applies to a door made up of a group of brushes and/or patches.&lt;br /&gt;
* Where the term &#039;&#039;door&#039;&#039; is used it often will also apply to any object you wish to rotate when frobbed, for instance an openable window, box lid, or even more exotic objects that the imaginative mapper might conceive like a signal, engine part, toy, or whatever. So long as it needs to turn or slide just a fixed amount when frobbed then return when frobbed again then the following applies.&lt;br /&gt;
&lt;br /&gt;
==Door types==&lt;br /&gt;
&lt;br /&gt;
All tangible objects in Dark Mod are &#039;&#039;entities&#039;&#039;, having either a pre-made model shape or else brush/patch(es). So there are two ways to create a door in Dark Radiant: as a model door or a textured brush door (or a hybrid of the two).&lt;br /&gt;
&lt;br /&gt;
Models are ready made door objects but cannot within Dark Radiant (at the time of writing) be resized, rescaled, cropped or clipped whereas brushes are very flexible in that respect and can be worked into custom shapes for your map, including secret doors that blend into walls and other surfaces.&lt;br /&gt;
&lt;br /&gt;
Most of the current door models are found in two places along with the door handles.&lt;br /&gt;
*Model Viewer: doors created from here will be static in the world and have no props other than material type.&lt;br /&gt;
You can add any props to them to make them working doors. If nothing else it is a good place to view the different size and skin options for the doors.&lt;br /&gt;
*Entity List: most of the door models can be found here. These doors have properties already assigned so they are ready to be used. Only one base door of each type is listed, create the size/hinge count door you want (2 hinge doors have a &#039;no hinge&#039; skin). You can choose a skin for the door once it has been created in the editor with the &amp;quot;skin&amp;quot; spawnarg (use the model name of the door you want, taken from the model list, as its value). This is the easiest way to create a door. The same goes for door handles.&lt;br /&gt;
&lt;br /&gt;
Remember also that door functions may be applied to objects other than doors, such as openable windows, drawbridges, gates, etc. In fact, anything that needs a partial rotation or slide when frobbed then return when frobbed again, such as a signal device. Lockboxes and chests use similar properties.&lt;br /&gt;
&lt;br /&gt;
You can create one door/handle set and copy/paste it, but you need to take great care that all the name props are changed to match in each clone. Otherwise you get handles that fly off when a distant door moves, and handles that don&#039;t move.&lt;br /&gt;
&lt;br /&gt;
==Creating a Door==&lt;br /&gt;
&lt;br /&gt;
Put simply, to make a door you will be creating an &#039;entity with model&#039; or &#039;entity with brush&#039; or some variation thereof.&lt;br /&gt;
&lt;br /&gt;
===Creating a Model Door===&lt;br /&gt;
&lt;br /&gt;
There are several approaches to making a model door; the simplest is to create a door from the entity list; or create a door from the model viewer (good for static unusable prop doors).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Entity List&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
*Deselect everything in editor by hitting the Esc button&lt;br /&gt;
*Right-click an ortho view and select Create Entity&lt;br /&gt;
*Navigate to darkmod/movers/&#039;&#039;atdm:door_...&#039;&#039;, choose the door you want&lt;br /&gt;
*Click Add&lt;br /&gt;
*To change its appearance, add a &amp;quot;skin&amp;quot; spawnarg to the door, with the value being the model name of the door you want.&lt;br /&gt;
&lt;br /&gt;
You now have a workable door in your level.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Model Viewer&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Right click in the orthoview, select &#039;&#039;Create Model&#039;&#039; then &amp;lt;code&amp;gt;darkmod&amp;lt;/code&amp;gt; and select a door.&lt;br /&gt;
* Note that you can left drag the image in the &#039;&#039;Choose Model&#039;&#039; dialog to rotate it around.&lt;br /&gt;
* Click [[Image:Button ok.png]] and you have a static door.&lt;br /&gt;
* If you want to make it work (openable, frobbable) then:&lt;br /&gt;
** Select the entity inspector,&lt;br /&gt;
** Select the top classname line so it highlights&lt;br /&gt;
** Select the func_static line in the input box &#039;&#039;below&#039;&#039; the properties window.&lt;br /&gt;
** Edit &amp;lt;code&amp;gt;func_static&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt;&lt;br /&gt;
** Click {{check}} or press {{key-enter}}&lt;br /&gt;
&lt;br /&gt;
Alternatively you can do it the old way:&lt;br /&gt;
&lt;br /&gt;
* Create any temporary brush&lt;br /&gt;
* Right click in orthoview and select &amp;lt;code&amp;gt;Create Entity&amp;lt;/code&amp;gt; then &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Left lick the model name line in the entity inspector.&lt;br /&gt;
* Below it on the &#039;&#039;Entity Inspector&#039;&#039; panel you should now see a button &#039;Choose Model&#039;&lt;br /&gt;
* Left click it, select a door model from the darkmod group.&lt;br /&gt;
* Note that you can left drag the image in the &#039;&#039;Choose Model&#039;&#039; dialog to rotate it around.&lt;br /&gt;
* The temporary brush was deleted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In all three instances, you now have a working door with default properties. &lt;br /&gt;
&lt;br /&gt;
Name your door by adding the prop (or modifing it) to name &#039;&#039;My_Door_1&#039;&#039;. You can use any name that you feel is appropriate but all doors with handles attached &#039;&#039;must&#039;&#039; have their own specific name. Use the name My_Door_1 for your first attempt as it will be referenced when you get around to attaching handles (see below).&lt;br /&gt;
&lt;br /&gt;
To add a handle and other adjustments, see [[#Customising and Adjusting Door Properties]] below.&lt;br /&gt;
&lt;br /&gt;
===Creating a Textured Brush Door===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tip:&#039;&#039;&#039; If unsure of size then you might insert a temporary human AI first to get a sense of height.&lt;br /&gt;
&lt;br /&gt;
==== The simplest brush door: ====&lt;br /&gt;
&lt;br /&gt;
* Drag out a new brush to the size required, eg, a seven foot high door is 84&amp;quot; x 1.1 = about 90 units in Dark Radiant.&lt;br /&gt;
* Give it a door texture from the texture browser (or wall texture for a secret door)&lt;br /&gt;
* Right click in orthoview and select &#039;&#039;Create Entity&#039;&#039; then &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You now have a working door but it will rotate around its center. To move the rotation point to where you want the door hinges to be:&lt;br /&gt;
* Select the door and press &#039;v&#039; or the &#039;&#039;Select Vertices&#039;&#039; button to enter vertex editing mode. The door&#039;s origin will show up as a small green square in the middle of the brush.&lt;br /&gt;
* In top-down orthoview, move the origin from the center to the corner of the brush. This is easiest in drag mode (&#039;q&#039; or the &#039;&#039;Resize&#039;&#039; button), although you can use translate mode (&#039;w&#039; or the &#039;&#039;Translate&#039;&#039; button) by manually selecting the vertex first.&lt;br /&gt;
&lt;br /&gt;
==== Multi-brush doors: ====&lt;br /&gt;
&lt;br /&gt;
More complex multi-brush doors can be created using the [[Clipper]] tool, CSG, etc. - this is not covered in this tutorial. Then assign &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt; for that whole brush structure. Also you can collect various brushes positioned together in relation to one another as needed, select them all, then assign &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt; for the group. All the brushes will be children of the &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt; entity and will rotate and be frobbable, etc. as one unit, as one door. To add further brushes or even model shapes later see the section on [[#Adding handles and other items to doors]].&lt;br /&gt;
&lt;br /&gt;
Name your door by adding the prop (or modifing it) to name My_Door_1. You can use any name that you feel is appropriate but all doors with handles attached must have their own specific name. Use the name My_Door_1 for your first attempt as it will be referenced when you get around to attaching handles (see below). (repeated from above in case you didn&#039;t choose to create a model door)&lt;br /&gt;
&lt;br /&gt;
=== Double Doors ===&lt;br /&gt;
Double doors are automatically recognised by the code when the doors are spawned. The prerequisite is that both doors are sharing/touching the same visportal. The spawnarg &#039;&#039;auto_setup_double_door&#039;&#039; (which defaults to &amp;quot;1&amp;quot;) will take care of setting up the open/lock peer relationship between the two doors. The doors will open/close and lock/unlock along with each other as a result.&lt;br /&gt;
&lt;br /&gt;
What happens behind the scenes: the doors are adding each other to their internal open_peer and lock_peer list, which causes the double doors to perform the same action when frobbed or used.&lt;br /&gt;
&lt;br /&gt;
Note that &#039;&#039;auto_setup_double_door&#039;&#039; will not set the frob_peer relationship, i.e. each door will frob-highlight on its own without highlighting the other door. You&#039;ll need to add that spawnarg manually if you want to highlight the entire double door as one.&lt;br /&gt;
&lt;br /&gt;
==Customising and Adjusting Door Properties==&lt;br /&gt;
&lt;br /&gt;
Handles, lockplates, etc. can be added to doors and door properties can be adjusted for rotation, sliding, locking, and more.&lt;br /&gt;
&lt;br /&gt;
Some of the door models have hinge plates and lockboxes that are reskinnable with a good variety of skins.&lt;br /&gt;
&lt;br /&gt;
===Door handles and other door attachments===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Summary: just add the property &#039;&#039;bind&#039;&#039; with the door&#039;s name to the attachment and position it where you want it on the door. If it&#039;s a &#039;&#039;atdm:mover_door_handle&#039;&#039; then it automatically will work as a handle but you can bind virtually anything.&#039;&#039;&#039;&lt;br /&gt;
You can add handles and other items to doors such that they move correctly with the door whether rotating, sliding, or both and even if the door is not vertical such as a skylight or trapdoor.&lt;br /&gt;
Handle models come in two types, &#039;&#039;single handles&#039;&#039; and &#039;&#039;double handles&#039;&#039;. A single handle is one sided, this means the handle will be inside the door or outside the door, but not both. A double handle has a lever on the inside of the door and a handle on the outside of the door. Each has benefits.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;Single door handles&#039;&#039;&#039;&#039;&#039;:&lt;br /&gt;
Single door handles can be used on a static door, a door that&#039;s just for show that no AI&#039;s or the player can use. In this case you should just create a door handle from the model viewer, it will be static and have no properties such as scripts. It is for looks only.  Note that TDM is trying to establish the expectation that decorative doors that cannot be opened do not have handles (though not all maps follow this).&lt;br /&gt;
&lt;br /&gt;
I will call this &#039;&#039;multiple handles&#039;&#039;, see more below.&lt;br /&gt;
&lt;br /&gt;
These can also be useful on brush doors created in the editor that may be very thin or very wide.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;Double door handles&#039;&#039;&#039;&#039;&#039;:&lt;br /&gt;
These are models have have a handle inside and outside. The bonus is that they only use one entity. Maps are limited to about 4,000 entities but when you count lights, AI, sound speakers, ect... you can run out of entities quickly on a large map. If you plan on building a large map this is the way to go, even in a small map they have benefits, namely that you only have to attach one handle per door.&lt;br /&gt;
&lt;br /&gt;
Whether you decide to use a single handle or a double handle you must first follow the instructions below and attach one handle first. If you choose a double handle, follow the instructions below and you are done. If you choose a single handle type follow the instructions then also follow the &#039;&#039;multiple handle&#039;&#039; instructions for the second handle.&lt;br /&gt;
&lt;br /&gt;
Both single and double handle types can be found in two places. The model viewer which will create a static model good for show, you can manually add props to make them work OR you can look in the entity browser.&lt;br /&gt;
Using a handle from the entity browser saves you a little bit of time as some props are already added, you just need to add the frob_peer names for the doors/handles and the door_handle name to the door.&lt;br /&gt;
&lt;br /&gt;
=== Adding a working model door handle===&lt;br /&gt;
&lt;br /&gt;
Quick summary:&lt;br /&gt;
* Create a model or brush handle and make it an &#039;&#039;atdm:mover_door_handle&#039;&#039; entity.&lt;br /&gt;
* Position it on your door.  Use the opposite side from the door&#039;s multicolor X-Y-Z indicator (highlight the door to see it) if it&#039;s not obvious which side it goes on.  &lt;br /&gt;
* &#039;&#039;&#039;Bind&#039;&#039;&#039; the handle to the door (bind &amp;lt;doorname&amp;gt;)&lt;br /&gt;
* It should now be a working handle though may need adjustments of rotation etc. see later. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Important: read preceding section on door handle types and performance issues first.&lt;br /&gt;
&lt;br /&gt;
This works with both a model door and a brush door:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rotation&#039;&#039;&#039;:&lt;br /&gt;
* By default the door handle entity rotates &#039;&#039;anti-clockwise&#039;&#039; (looked at from the front) then springs back. A &#039;&#039;double handle&#039;&#039; model is OK but two singles (see &#039;&#039;Multiple door handles&#039;&#039; below) need more care as only one is the functioning entity and the other is just attached to it. So anti-clockwise is fine for a door with its hinge on the left and the handle on the right - the handle will rotate down then spring back. If you put the functioning door handle on the other side you will have to change the default &#039;&#039;rotate&#039;&#039; property from -45 0 0 to 45 0 0. &#039;&#039;&#039;&#039;&#039;Therefore it is easier to generally put this handle on the side of the door where the hinge is on the left and the non-functioning attachment handle on the other side.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*If your door only needs one handle, eg, a cupboard door, and from outside its hinge is on the right then you will need to change the &#039;&#039;rotate&#039;&#039; property of the handle as described above.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;The functioning handle entity:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
* Create an entity door handle (movers folder) or create a brush or model handle and assign it the entity &#039;&#039;atdm:mover_door_handle&#039;&#039;.&lt;br /&gt;
* Position it where you wish on your door.&lt;br /&gt;
* &#039;&#039;&#039;Bind&#039;&#039;&#039; the handle to the door, by adding the &amp;quot;bind&amp;quot; spawnarg to the handle.&lt;br /&gt;
&lt;br /&gt;
You now have a working door handle with default properties.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Multiple door handles&#039;&#039;&#039;:&lt;br /&gt;
Now that you&#039;ve got a handle attached to one side of the door it is time to add one to the other side (unless you used a double handle).&lt;br /&gt;
* Create the new handle. The single handles come in left and right persuasions. A door needs a left facing handle on one side and a right facing handle on the other, so if you have already added the left handle create a right handle and line it up on the other side of the door.&lt;br /&gt;
* Name this handle. I prefer to keep a naming convention for each door and it&#039;s respective handles, it makes things alot easier. The door is named &#039;&#039;&#039;My_Door_1&#039;&#039;&#039;, the first handle is named &#039;&#039;&#039;My_Handle_1&#039;&#039;&#039; so name the second handle &#039;&#039;&#039;My_Handle_1_1&#039;&#039;&#039;. This will make it stay with the first handle in the entity list. This is important to keep organized. If you name it My_Handle_2 then when you get to another door named My_Door_2 you&#039;ll be confused.&lt;br /&gt;
* Place and &#039;&#039;&#039;bind&#039;&#039;&#039; that handle to your door.&lt;br /&gt;
&lt;br /&gt;
You now have two single door handles on either side of the door that rotate together as if they were physically attached.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add a brush to a brush door&#039;&#039;&#039;:&lt;br /&gt;
* Select the new brush &#039;&#039;and&#039;&#039; the brush door all together; &#039;&#039;the entity &#039;&#039;&#039;must&#039;&#039;&#039; be selected &#039;&#039;&#039;last&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
* Use {{menu|Edit|Reparent primitives}}. This ensures the parent entity adopts the new item(s).&lt;br /&gt;
* If you have trouble selecting them in the orthoview because other brushes, etc. get selected then try in the camera view or as a last resort move them temporarily to an open area (but keep them in the same positions relative to each other.) Use {{key-shift}}+{{LMB}} on new item(s) then {{key-shift}}+{{LMB}} on main entity. Once they are all selected, use the {{menu|Edit|Reparent primitives}}.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add &#039;&#039;model&#039;&#039; static items&#039;&#039;&#039;: knockers, hinges, static handles etc. to a &#039;&#039;Model Door&#039;&#039;:&lt;br /&gt;
* Select item&lt;br /&gt;
* Right click in orthoview and select &#039;&#039;Create Entity&#039;&#039; then &amp;lt;code&amp;gt;entity func_static&amp;lt;/code&amp;gt;&lt;br /&gt;
* Position it where you wish on your door.&lt;br /&gt;
* To synchronize this with your particular door you need to add the property &#039;&#039;bind&#039;&#039; and the individual door name to the brush entity. To do this...&lt;br /&gt;
** Select the model door.&lt;br /&gt;
** In the entity inspector, select the &#039;&#039;name&#039;&#039; line&lt;br /&gt;
** Select the bottom line in the input box &#039;&#039;below&#039;&#039; the properties window.&lt;br /&gt;
** Copy the name&lt;br /&gt;
** Deselect the door with {{key-esc}}&lt;br /&gt;
** Select the brush entity&lt;br /&gt;
** Add a property &amp;quot;bind&amp;quot; to it.&lt;br /&gt;
** Change the value of the property by pasting in the door name&lt;br /&gt;
** Click {{check}} or press {{key-enter}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add &#039;&#039;brush&#039;&#039; static items&#039;&#039;&#039;: knockers, hinges, static handles to a Model Door:&lt;br /&gt;
* This method is not ideal but it seems to work OK.&lt;br /&gt;
* Select the brush.&lt;br /&gt;
* Right click in orthoview and select Create Entity then &#039;&#039;atdm:mover_door_handle&#039;&#039;&lt;br /&gt;
* Position it where you wish on your door.&lt;br /&gt;
&lt;br /&gt;
To synchronize this with your particular door you need to add the property &#039;&#039;door_handle&#039;&#039; on the door, and give as the value the name of the brush you just created.&lt;br /&gt;
&lt;br /&gt;
This brush turns like a handle. To stop it:&lt;br /&gt;
&lt;br /&gt;
* Adding &#039;&#039;rotate 0 0 0&#039;&#039; or disabling the handle script won&#039;t help.&lt;br /&gt;
* Add a real working handle (as in the section above &#039;&#039;To add a working model door handle...&#039;&#039; and it must be added LAST.)&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want too see a real working handle added maybe try another tiny brush with the handle function and hide it inside the door?&lt;br /&gt;
&lt;br /&gt;
===Locking Doors===&lt;br /&gt;
&lt;br /&gt;
To lock a door check the &#039;&#039;show inherited properties&#039;&#039; in the entity inspector for a &#039;&#039;atdm:mover_door&#039;&#039; entity and you should see the &#039;&#039;locked&#039;&#039; property. Select it and in the input box below the properties you can change its value:&lt;br /&gt;
&lt;br /&gt;
* 0 = unlocked (default)&lt;br /&gt;
* 1 = locked&lt;br /&gt;
&lt;br /&gt;
If locked it will require an entity that is associated with it to be able to act as a key to unlock it.&lt;br /&gt;
&lt;br /&gt;
Currently door handles on locked doors will rotate when frobbed, they will bounce back though and the door will stay locked until unlocked.&lt;br /&gt;
&lt;br /&gt;
===Keys===&lt;br /&gt;
&lt;br /&gt;
Assigning specific keys to specific doors is simple.&lt;br /&gt;
&lt;br /&gt;
* It is recommended that you create an existing key entity. These keys have all required props, they just need to be named.&lt;br /&gt;
&lt;br /&gt;
Alternatively you can create a key from the Model Viewer and want it to be useable&lt;br /&gt;
* Make sure it has the properties:&lt;br /&gt;
 useable 1 [so it can be used by the door]&lt;br /&gt;
 frobable 1&lt;br /&gt;
 inv_name &amp;lt;unique name&amp;gt;&lt;br /&gt;
 inv_category Keys&lt;br /&gt;
 inv_target player1&lt;br /&gt;
 inv_icon guis/assets/hud/inventory_icons/&amp;lt;icon name&amp;gt;&lt;br /&gt;
 inv_stackable 0 or 1 where 1 can be used on all copies of the same key so they show as one entry in the inventory with a total.&lt;br /&gt;
&lt;br /&gt;
Add to the door the property &amp;lt;code&amp;gt;used_by&amp;lt;/code&amp;gt; with the name of the key as the value. Multiple keys can open the same door by using several &amp;lt;tt&amp;gt;used_by&amp;lt;/tt&amp;gt; spawnargs:&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;used_by&amp;quot;  &amp;quot;doorkey_1&amp;quot;&lt;br /&gt;
 &amp;quot;used_by1&amp;quot; &amp;quot;doorkey_2&lt;br /&gt;
&lt;br /&gt;
==== Keys Carried by AI ====&lt;br /&gt;
&lt;br /&gt;
So you have a door and you have a guard AI and you want the guard to be able to open/close/lock the door, but you also want the player to be able to pickpocket the key. Keys can be attached to AI in two ways.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The Def_Attach Method&#039;&#039;. This method is the best one for doors that you expect the AI to operate. It uses spawnargs to spawn the key at game start.&lt;br /&gt;
&lt;br /&gt;
*&amp;quot;def_attach6&amp;quot; &amp;quot;atdm:prop_silverkey&amp;quot; // the entity to spawn - in this case a key.&lt;br /&gt;
*&amp;quot;pos_attach6&amp;quot; &amp;quot;belt_back_right&amp;quot; // where the key will spawn on the Ai.&lt;br /&gt;
*&amp;quot;name_attach6&amp;quot; &amp;quot;door_key&amp;quot; // this gives &#039;attach6&#039; arg the name &amp;quot;door_key&amp;quot; and is the name the arg &amp;quot;used_by&amp;quot; will need, eg: &amp;quot;used_by&amp;quot; &amp;quot;door_key&amp;quot;&lt;br /&gt;
*&amp;quot;set inv_name on door_key&amp;quot; &amp;quot;Door key&amp;quot; // The name the key get when the play adds it to their inventory.&lt;br /&gt;
*&amp;quot;set name on door_key&amp;quot; &amp;quot;door_key&amp;quot; // here it gets a name to be used in the map in general.&lt;br /&gt;
&lt;br /&gt;
For more info on this method, see [[Attaching Props to AI]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The Bind Method&#039;&#039;. This lacks the animation finesse of def_attach, but does let you see the key in DR. The method is particularly helpful in, say, adding a second key to an AI in the back middle of a belt. The AI cannot use a bound key to open a locked door; the workaround is to fake it with &amp;quot;can_unlock&amp;quot; as discussed further below. Or to use bound keys mainly for items the AI will not attempt to open, such as hatches, duct covers, or chests.&lt;br /&gt;
&lt;br /&gt;
* Load a key entity&lt;br /&gt;
* Position where you want it in relation to the AI, and bind it to them (i.e., &amp;quot;bind&amp;quot; &amp;quot;&amp;lt;AIname&amp;gt;&amp;quot;)&lt;br /&gt;
* Add the spawnarg &amp;quot;bindToJoint&amp;quot; &amp;quot;Hips&amp;quot; (or another location like LeftHips_Dummy; see AI for list)&lt;br /&gt;
* Adjust existing spawnargs accordingly (that is, be sure the name and door&#039;s/chest&#039;s &amp;quot;used_by&amp;quot; match, if you aren&#039;t using a prefab chest with key). This is for the benefit of the player after pickpocketing the key; as stated above, the AI itself can&#039;t use it for unlocking.&lt;br /&gt;
&lt;br /&gt;
For more info on this method, see [[Attaching_Items]] and [[BindToJoint]].&lt;br /&gt;
&lt;br /&gt;
====Keys Carried by Player====&lt;br /&gt;
&lt;br /&gt;
With a door&#039;s key selected in your inventory and the door highlighted, you can...&lt;br /&gt;
* unlock it (which will also auto-open if enabled) by either frobbing it or hitting the Use key (typically U or Enter).&lt;br /&gt;
* lock (or relock) it via the Use key. Why do this? To avoid pursuit, or to lure guards into a room, and then lock them in (if they don&#039;t have a key or specific can_unlock powers). &lt;br /&gt;
&lt;br /&gt;
====Master Key for Testing====&lt;br /&gt;
&lt;br /&gt;
By default, ALL locks can be opened by any key named &#039;&#039;key_master&#039;&#039;. Just create a key in your map, name it &#039;&#039;key_master&#039;&#039; and it becomes a master key for use while testing. Add inv_map_start 1 to it so it is in the player inventory at game start. Remember to delete it when your mission is finished.&lt;br /&gt;
&lt;br /&gt;
====Automatically Removing Keys from Player Inventory After Use====&lt;br /&gt;
If a fan mission has a lot of keys it can clog up the player inventory. If the key is single-use, it can be useful to automatically remove it from the player inventory after use.  Below is a way to do it using a simple setup and a generic script function that can be used for multiple doors.&lt;br /&gt;
&lt;br /&gt;
If you want to avoid scripting, see the [[Doors#Simpler,_No-script_Version|simpler, no-script version]].&lt;br /&gt;
&lt;br /&gt;
=====Generic Version=====&lt;br /&gt;
&lt;br /&gt;
You&#039;ll need the following entities, preferably set up near each other in your map:&lt;br /&gt;
* The door entity itself&lt;br /&gt;
* A trigger_count entity&lt;br /&gt;
* An atdm:target_callscriptfunction entity&lt;br /&gt;
* some random entity for the target_callscriptfunction to target (explanation below)&lt;br /&gt;
&lt;br /&gt;
The below diagram shows the spawnargs and targeting required for the setup:&lt;br /&gt;
[[File:Key remove2.png|left|thumb]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
The script being called (&#039;openDoor&#039;) is defined in fms/&amp;lt;mapname&amp;gt;/maps/&amp;lt;mapname&amp;gt;.script and looks like this:&lt;br /&gt;
&lt;br /&gt;
 void openDoor(entity target, entity door, entity callscriptfunction)&lt;br /&gt;
 {&lt;br /&gt;
     string keyName = door.getKey(&amp;quot;used_by&amp;quot;);&lt;br /&gt;
     entity key = sys.getEntity(keyName);&lt;br /&gt;
     $player1.replaceInvItem(key, $null_entity);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Explanation as follows:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;For the door:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;trigger_on_open&#039;&#039;&#039; spawnarg: The door is configured to trigger its targets when it opens&lt;br /&gt;
* target &#039;&#039;&#039;trigger_count&#039;&#039;&#039; entity: this is the entity that is triggered when the door is opened&lt;br /&gt;
* &#039;&#039;&#039;used_by&#039;&#039;&#039; spawnarg: This names the key entity required for unlocking the door&lt;br /&gt;
* The other spawnargs are just the usual for setting the door as locked and unpickable&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;trigger_count entity:&#039;&#039;&#039;&lt;br /&gt;
* When triggered, this entity will in turn trigger the script that removes the key from the player inventory.&lt;br /&gt;
* &#039;&#039;&#039;count&#039;&#039;&#039; spawnarg: This is set to 1 because we only want the key removal script called once - the first time the player opens the door.&lt;br /&gt;
* this entity targets the atdm:target_callscriptfunction, which contains details of the script to execute&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;atdm:target_callscriptfunction entity:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;call&#039;&#039;&#039; spawnarg: This is the name of the script function to call&lt;br /&gt;
* &#039;&#039;&#039;foreach&#039;&#039;&#039; spawnarg: This version of the script event provides access to the &#039;activator&#039;, or the entity that triggered it (in this case, the door).  Using that information we can obtain the key name. See [[A to Z Scripting: Ways of calling a script#target_callscriptfunction|here]] for details.&lt;br /&gt;
* &#039;&#039;&#039;target any static entity&#039;&#039;&#039;: For this version of the script event to work, the target_callscriptfunction entity needs to target something.  This can be any static entity in the map (i.e. one that won&#039;t get removed or anything). I usually just target the nearest entity (e.g. a light or a lamp, or a model).  This provides no functionality in the context of this tutorial, it just satisfies the conditions of the script event.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The script:&#039;&#039;&#039;&lt;br /&gt;
* Pretty self-explanatory.  The script gets the name of the key entity via the &#039;&#039;&#039;used_by&#039;&#039;&#039; spawnarg on the door, retrieves the key entity, and then replaces it in the player inventory with a null entity, effectively removing it.&lt;br /&gt;
* Any door can use this script as it&#039;s generic, although they will need their own trigger_count entities.  In theory they could share the same target_callscriptfunction entity, but that might become inconvenient - up to the mapper.&lt;br /&gt;
&lt;br /&gt;
=====Simpler, No-script Version=====&lt;br /&gt;
This is similar to above, but is more limited.  You need to hard-code the key name as a spawnarg on an atdm:target_itemremove entity as the key name can&#039;t be automatically determined like in the above script. This makes it slightly more error-prone as we&#039;re naming entities in more than one place, but ideal if you&#039;re uncomfortable with scripting.&lt;br /&gt;
&lt;br /&gt;
[[File:Key remove4.png|left|thumb]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Explanation as follows:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;atdm:target_itemremove entity:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;unique_item &#039;&#039;&#039; spawnarg: The name of the key to remove from the player inventory&lt;br /&gt;
&lt;br /&gt;
===Lockpicks===&lt;br /&gt;
&#039;&#039;by Baddcog&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
There are two lock pick types.&lt;br /&gt;
*&#039;&#039;&#039;s&#039;&#039;&#039;=snake&lt;br /&gt;
*&#039;&#039;&#039;t&#039;&#039;&#039;=triangular&lt;br /&gt;
&lt;br /&gt;
A lock can be set with many pins. Each pin has a click sequence and each needs a designated lockpick type (see above). Keep in mind that the lockpicking in The Darkmod is much more involved than in T2 or T3. The player has to listen to sounds or watch a handle or lockbar to know when a lock is pin is picked.&lt;br /&gt;
&lt;br /&gt;
This means that authors can be very evil and really frustrate the player, in which case their missions will probably not be played. So be nice to the player and don&#039;t waste your time. Use simple locks for the most part and save complicated locks for important sections and to build tension. Don&#039;t make the player have 20 pins to pick all with different lockpicks. In most cases 1 or 2 pins will suffice and it isn&#039;t necessary to use both lockpicks on every lock.&lt;br /&gt;
Also try to include a lock lever on lockboxes or chests, door handles will rotate as the pins are being picked. This gives the player visual clues to help with the picking (and essential in noisy environments where you can&#039;t hear the clicks.)&lt;br /&gt;
IMO this system is a huge leap foward for lockpicking but also has the ability to completely frustrate the player as stated above. Keep this in mind when designing your lockpick systems.&lt;br /&gt;
&lt;br /&gt;
These props go on the door itself, or the lid of a chest, eg,&lt;br /&gt;
*&#039;&#039;&#039;lock_pins&#039;&#039;&#039; 1327&lt;br /&gt;
*&#039;&#039;&#039;lock_picktype&#039;&#039;&#039; stts&lt;br /&gt;
&lt;br /&gt;
The lock_pins property specifies how many pins each lockpicktype has.&lt;br /&gt;
The lockpick_type property specifies how many times the player has to switch picks and which pick they have to use. You can see there must always be an equal number of lock_pins and lock_picktypes specified&lt;br /&gt;
&lt;br /&gt;
So looking at the example above we have lockpick_type s(snake), t(triangular), t(triangular), and s(snake). The player will have to use these lockpicks in this order. Once the snake lockpick&#039;s pins are open the player can advance to the triangular pick and so forth.&lt;br /&gt;
5 is added to every click sequence so 5 is the minimum click pattern even if you set it to 0.&lt;br /&gt;
In the example above the lockpins specify in order which pick types have how many pins, so the s pick has 1 + 5 = 6 clicks, the t pick has 8 and so on.&lt;br /&gt;
The above is a difficult lock and to avoid annoying the player it is best only used rarely on a special lock like an important big vault door. Ordinary footlockers and common doors can be just 1 or 2 click sequences, eg, lock_pins 2 and lock_picktype t means the player uses one pick and listens for the end of one sequence of 7 clicks.&lt;br /&gt;
&lt;br /&gt;
lockpick_rotate - is placed on the door. It is the amount the visible rotating handle or pin rotates while picking. For a rotating handle or lockbar normally ignore this and leave the default. During lockpicking it oscillates and progresses to the normal full turn of the handle. Example 0 45 0.&lt;br /&gt;
&lt;br /&gt;
lockpick_translate - is placed on the door. It is the amount the visible handle or pin moves in a straight line while picking. Use this if you have eg, a lockbar that you want to move in a straight line and not rotate, eg sliding catch. Example 0 -5 0&lt;br /&gt;
&lt;br /&gt;
By default, doors are pickable. If you don&#039;t set up the above lockpick spawnargs then it can&#039;t be picked. So there is normally no need to enable lockpicking - just set up the above spawnargs. There is a &#039;&#039;pickable&#039;&#039; spawnarg set to 1 by default. If set to 0 then the door becomes unpickable. But hard to think of an application except in testing or perhaps a special custom situation where it is switched by script perhaps.&lt;br /&gt;
&lt;br /&gt;
===Open, Partially Open, or Closed Door at Game Start===&lt;br /&gt;
&lt;br /&gt;
By default, doors are closed at game start. If you want a door to be already open or partially open then do the following.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note well: Create all doors in their &#039;&#039;closed&#039;&#039; position. Adjust as follows and they will automatically be at the open position when game starts.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Already Open Rotating Door:&lt;br /&gt;
* Select the door.&lt;br /&gt;
* Select the entity inspector&lt;br /&gt;
* Check &#039;&#039;show inherited properties&#039;&#039;&lt;br /&gt;
* Select the &#039;&#039;open&#039;&#039; property&lt;br /&gt;
* Edit the value to 1 in the input box below and tick the check button&lt;br /&gt;
* The door will now be fully open at game start.&lt;br /&gt;
&lt;br /&gt;
* If you want it only partly open:&lt;br /&gt;
* Make sure its &#039;&#039;open&#039;&#039; property is set to 1 as above.&lt;br /&gt;
* Right click the entity inspector and select &#039;&#039;add property&#039;&#039; &lt;br /&gt;
* Click the + sign on the left of the top line where atdm:mover_door is listed to open the folder. (if atdm:mover_door is not listed then the entity was likely changed from eg, func_static. If so, save the map and reload to update the add property list)&lt;br /&gt;
*  scroll down, select &#039;&#039;start_rotate&#039;&#039; then click {{ok}}&lt;br /&gt;
* This adds it to the property list.&lt;br /&gt;
* Now select &#039;&#039;start_rotate&#039;&#039; in the property list.&lt;br /&gt;
* Edit the bottom line of the input box &#039;&#039;below&#039;&#039; the properties window to the angle you want in the same form as described in the &#039;&#039;Rotate Direction and Open Angle&#039;&#039; section. So for example, to have a door that has a fully open default &#039;&#039;rotate&#039;&#039; value of 0 90 0 to start only half open you would give it a &#039;&#039;start_rotate&#039;&#039; value of 0 45 0. &lt;br /&gt;
* In a similar way add the property &#039;&#039;first_frob_open&amp;quot;.&lt;br /&gt;
* Set it to 1 and a partly open door should then open fully on the first frob.&lt;br /&gt;
* Set it to 0 and a partly open door should close on the first frob.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Already Open Sliding Door:&lt;br /&gt;
* Select the door.&lt;br /&gt;
* Select the entity inspector&lt;br /&gt;
* Check &#039;&#039;show inherited properties&#039;&#039;&lt;br /&gt;
* Select the &#039;&#039;open&#039;&#039; property&lt;br /&gt;
* Edit the value to 1 in the input box below and click {{check}} or press {{key-enter}}&lt;br /&gt;
* The door will now be fully open at game start.&lt;br /&gt;
&lt;br /&gt;
* If you want it only partly open:&lt;br /&gt;
* Right click the entity inspector and select &#039;&#039;add property&#039;&#039; &lt;br /&gt;
* Make sure its &#039;&#039;open&#039;&#039; property is set to 1&lt;br /&gt;
* Click the + sign on the left of the top line where atdm:mover_door is listed to open the folder.&lt;br /&gt;
*  scroll down, select &#039;&#039;start_position&#039;&#039; then click OK. (if atdm:mover_door is not listed then the entity was likely changed from eg, func_static. If so, save the map and reload to update the add property list)&lt;br /&gt;
* This adds it to the property list.&lt;br /&gt;
* Now select &#039;&#039;start_position&#039;&#039; in the property list.&lt;br /&gt;
* Edit the bottom line of the input box &#039;&#039;below&#039;&#039; the properties window to the position you want in the same form as described in the &#039;&#039;Sliding (Translation) Amount and Direction&#039;&#039; section. So for example, to have a door that has a fully open default &#039;&#039;translate&#039;&#039; value of 0 50 0 to start only half open you would give it a &#039;&#039;start_position&#039;&#039; value of 0 25 0.&lt;br /&gt;
* In a similar way add the property &#039;&#039;first_frob_open&amp;quot;.&lt;br /&gt;
* Set it to 1 and a partly open door should then open fully on the first frob.&lt;br /&gt;
* Set it to 0 and a partly open door should close on the first frob.&lt;br /&gt;
&lt;br /&gt;
===Rotation Centre, Pivot, Hinge point===&lt;br /&gt;
&lt;br /&gt;
The centre of rotation of a door is at the origin point of its entity and the door rotates with reference to the orientation of that origin point, not the world map. See &#039;&#039;Rotate Direction...&#039;&#039; for more about that. This section only deals with the &#039;&#039;position&#039;&#039; of the rotation centre in the door.&lt;br /&gt;
&lt;br /&gt;
Model Door Centre of Rotation:&amp;lt;br&amp;gt;&lt;br /&gt;
The centre of rotation of a model door cannot be changed within Dark Radiant. Because a model door rotates around the centre &#039;spine&#039; of its back edge this will cause clipping (penetration into solid) as in this example (where the door is set to open to 89 degrees for clarity):&amp;lt;BR&amp;gt;[[Image:modelClipping.jpg]]&amp;lt;BR&amp;gt; So care is needed with placement. You will not normally position a door right next to a wall as in the example but against a shallow frame so clipping will barely be noticeable but either way it can be fixed. You can correct it by adding a translation (see &#039;&#039;Sliding (Translation) Directions&#039;&#039;) value of half the door width in the direction of the door handle. This will gently move the door out as it rotates to clear any solid on that side as in this diagram:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:DoorClip.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
Half a door width will typically be about 2. Any &#039;attachments&#039; such as door handles will still synchronize with the door movement whether the door is rotating, sliding, or both.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Brush Door Centre of Rotation:&amp;lt;br&amp;gt;&lt;br /&gt;
The centre of rotation of a brush door &#039;&#039;can&#039;&#039; be changed. The default origin point of a brush is at its centre. Therefore a default rotating brush door will rotate around its centre when you first create it. So, mappers will commonly need to move that rotation point to a corner or even to some other offset position for example, for an openable window using the door function.&lt;br /&gt;
&lt;br /&gt;
Put simply, to move the rotation point of a brush door you need to move the entity origin relative to the brush(es.)&lt;br /&gt;
&lt;br /&gt;
Moving the entity origin (centre of rotation) relative to a brush door:&lt;br /&gt;
&lt;br /&gt;
* Select the brush door&lt;br /&gt;
* Select &#039;&#039;Vertices mode&#039;&#039; (default shortcut key is {{key|name=V}} or button on top toolbar &#039;Select Vertices&#039;)&lt;br /&gt;
* Drag the door&#039;s entity origin to the point where you want the door to rotate. This should be on the corner on the leading edge side (the side to where the door is opening.) to avoid clipping as in this diagram....&lt;br /&gt;
[[Image:getCorner.jpg]]&lt;br /&gt;
* You should now find that door rotates around that point.&lt;br /&gt;
&lt;br /&gt;
===Rotate Direction and Open Angle===&lt;br /&gt;
&lt;br /&gt;
By default, rotating doors open anti-clockwise (viewed from above) by 90 degrees from the start orientation. If you want to change this edit the &#039;&#039;rotate&#039;&#039; property in the entity inspector. Don&#039;t confuse this &#039;&#039;rotate&#039;&#039; property with the &#039;&#039;rotation&#039;&#039; property. In the entity inspector remember that to see the inherited rotate property you must check the box &#039;Show inherited properties&#039;.&lt;br /&gt;
&lt;br /&gt;
The three values shown in the rotate property are degrees from the closed position around Y Z X (absolute map axes Front, Top, Side views in DR&#039;s ortho view.)&lt;br /&gt;
&lt;br /&gt;
* Positive Y = Open clockwise (Dark Radiant grid front view, looking north)&lt;br /&gt;
* Negative Y = Open anti-clockwise (Dark Radiant grid front view, looking north)&lt;br /&gt;
&lt;br /&gt;
* Positive Z = Open anti-clockwise (Dark Radiant grid top view, looking down)&lt;br /&gt;
* Negative Z = Open clockwise (Dark Radiant grid top view, looking down)&lt;br /&gt;
&lt;br /&gt;
* Positive X = Open anti-clockwise (Dark Radiant grid side view, looking west)&lt;br /&gt;
* Negative X = Open clockwise (Dark Radiant grid side view, looking west)&lt;br /&gt;
&lt;br /&gt;
There is a problem when you come to rotations that are not around the main Y Z X axes of the map, for instance a drawbridge that lowers down to the south east. You might think you can combine Y Z X values to get the result you want - and this can be done (for south east use 45 45 90) but it is a bit of a kludge and the drawbridge twists eccentrically as it lowers (though it arrives correctly!)&lt;br /&gt;
&lt;br /&gt;
The values are in the range -179 to +180. Positive values give an anti-clockwise opening rotation (looking down from above) and negative values give a clockwise opening rotation. The value 180 is unique in that it continues in an anti-clockwise rotation when closing rather than returning clockwise so might be used if you can think of some object that might need such a motion when frobbed!&lt;br /&gt;
&lt;br /&gt;
Edit the rotate value by selecting it and using the input box at the bottom and clicking the check(tick) button. That will change the angle the door will open to. Note that the line with the original default of 0 90 0 will still be there but your new entry will be added on a separate line and that is the one that will work in the game. CAUTION: when adjusting later make sure you have your new line selected and not the original! If you do it will appear to change but your first setting will remain unaltered.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
* 0 90 0 = Opens anti-clockwise round the entity&#039;s &#039;vertical&#039; to 90 degrees - typical default vertical door.&lt;br /&gt;
* 0 0 90 = Lowers a drawbridge from the entity &#039;vertical&#039; to horizontal.&lt;br /&gt;
* 0 0 -45 = Opens clockwise by 45 degrees viewed from the east side. This might suit a skylight in a sloping roof.&lt;br /&gt;
&lt;br /&gt;
&#039;rotate&#039; cannot be combined with translate motions (see [[#Sliding (Translation) Amount and Direction]]) in one door; you need to bind one door to another and link they by targetting one to the other. By that means you can produce exotic and useful motions. A door opening against an upward-sloping floor can thus have a &#039;&#039;lifting hinge&#039;&#039; and raise up slightly to clear the floor; a door can rotate towards you and slide back to one side very effectively.&lt;br /&gt;
&lt;br /&gt;
===Sliding (Translation) Amount and Direction===&lt;br /&gt;
&lt;br /&gt;
By default a Dark Mod door will rotate open. For most sliding doors you want to stop them rotating as well as make them slide. You cannot delete (remove) the &#039;&#039;rotate&#039;&#039; property - you have to set the &#039;&#039;rotate&#039;&#039; property to 0 0 0 to stop a door rotating (see &#039;&#039;Rotate Direction and Open Angle&#039;&#039;.)&lt;br /&gt;
&lt;br /&gt;
Now edit the &#039;&#039;translate&#039;&#039; property value by selecting it (remember to have inherited properties box checked) and using the input box at the bottom and clicking the check(tick) button. That will change the distance the door will slide to. Note that the line with the original default of 0 0 0 will still be there but your new entry will be added on a separate line and that is the one that will work in the game. CAUTION: when adjusting later make sure you have your new line selected and not the original! If you do it will appear to change but your first setting will remain unaltered.&lt;br /&gt;
&lt;br /&gt;
Typically (but not always) you will want your sliding door to slide the width of the door. The three values in the translate property by default are 0 0 0 and are X Y Z &#039;&#039;absolute map&#039;&#039; values (irrespective of door orientation) where:&lt;br /&gt;
&lt;br /&gt;
* Positive X = Slide East (Right side of Dark Radiant grid in top view)&lt;br /&gt;
* Negative X = Slide West (Left side of Dark Radiant grid in top view)&lt;br /&gt;
* Positive Y = Slide North (top of Dark Radiant grid in top view)&lt;br /&gt;
* Negative Y = Slide South (bottom of Dark Radiant grid in top view)&lt;br /&gt;
* Positive Z = Slide Up (Top of Dark Radiant grid in side views)&lt;br /&gt;
* Negative Z = Slide Down (Bottom of Dark Radiant grid in side views)&lt;br /&gt;
&lt;br /&gt;
So for a 50 unit wide door you want to slide fully to the east you would use 50 0 0 for the translate property values. A 100 unit portcullis sliding vertically up would need 0 0 100 to be fully raised.&lt;br /&gt;
&lt;br /&gt;
=== Doors Collision/Push Behaviour ===&lt;br /&gt;
Doors push all entities by default, except for the player. Doors will also stop moving when anything blocks their movement. However, this default behaviour can be changed by setting appropriate spawnargs:&lt;br /&gt;
&lt;br /&gt;
Set &#039;&#039;&#039;push_player&#039;&#039;&#039; to &#039;&#039;&#039;1&#039;&#039;&#039; to let the player be pushed by this door:&lt;br /&gt;
 &amp;quot;push_player&amp;quot;  &amp;quot;1&amp;quot;  // Push the player too (default is off)&lt;br /&gt;
&lt;br /&gt;
By default &#039;&#039;&#039;stop_when_blocked&#039;&#039;&#039; is set to 1 and if a door is blocked by an entity then even if the entity is removed afterwards, the door stays where it is. The next frob will close the door.&lt;br /&gt;
&lt;br /&gt;
Set &#039;&#039;&#039;stop_when_blocked&#039;&#039;&#039; to &#039;&#039;&#039;0&#039;&#039;&#039; to prevent the door from ending the opening sequence when anything blocks its way. It will still pause - but continue to open if the block is removed.&lt;br /&gt;
 &amp;quot;stop_when_blocked&amp;quot;   &amp;quot;0&amp;quot;  // door keeps moving after being blocked (default is off)&lt;br /&gt;
With this setting, doors will still stop at blocking entities (the player, for instance), but will continue to move when the entity moves out of the way.&lt;br /&gt;
&lt;br /&gt;
There is another spawnarg which stops a door pushing a moveable. Apply this to the &#039;&#039;moveable&#039;&#039;, not the door...&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;notPushable&amp;quot;   &amp;quot;1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Door Sounds===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are multiple ways to put sounds on doors.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_open&#039;&#039; &amp;lt;br&amp;gt; &lt;br /&gt;
Sound is triggered as the door begins to open.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_opened&#039;&#039; &amp;lt;br&amp;gt; &lt;br /&gt;
Sound is triggered when the door finishes opening. Defaults to &amp;quot;nosound&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_move&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
The sound plays while the door moves.  Defaults to &amp;quot;nosound&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_close&#039;&#039;  &amp;lt;br&amp;gt;&lt;br /&gt;
Sound is triggered as the door finishes closing.&lt;br /&gt;
&lt;br /&gt;
The following sounds should be left on the default sound in most cases so players clearly know what is going on:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_locked&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
The sound played when a player or an AI tries to open a locked door.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_unlock string&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
The sound played when a door is unlocked.&lt;br /&gt;
&lt;br /&gt;
You can silence any of these sounds by setting the following properties as shown:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_open nosound&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;snd_close nosound&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Don&#039;t just use a dash - as it seems to cause a sound of its own.&lt;br /&gt;
&lt;br /&gt;
===Sound Propagation through Doors and Doorways===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This information will change significantly with the release of 2.0.  See&#039;&#039; [[Controlling Sound Loss Across Portals]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The sound volume reduction to the player (ie, the sound the player hears) is fixed and constant in a cvar which adds a distance factor to the original sound. It is recommended that you do not change that because it will affect other FMs. Currently there is no way to change the way that sound to the player is reduced through doors and doorways.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sound propagation to AI, eg, impact sounds or guard yells is treated separately:&lt;br /&gt;
&lt;br /&gt;
Sound propagation to AI relies on visportals. For details study [[Sound Propagation: Part 1]] and [[Sound Propagation: Part 2]] as well as [[Visportals]] This tutorial will just cover the relevant sound and sound propagation &#039;&#039;properties&#039;&#039; of doors. If you set the &#039;&#039;show inherited properties&#039;&#039; box in the entity inspector you can see them as described here.&lt;br /&gt;
&lt;br /&gt;
Remember, the following have no effect on what the player hears through a door or doorway.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;loss_open&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Drop in sound volume in dB propagated to AI (not player) when going through an open door. (default 1dB)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;loss_closed&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Drop in sound volume in dB propagated to AI (not player) when going through a closed door. (default 15dB) You would want to set this very high to block all sound with a thick door but very low for a barred gate for example.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;loss_double_open&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Drop in sound volume in dB propagated to AI (not player) when going through double doors when only one is open. (default 1dB)&lt;br /&gt;
&lt;br /&gt;
There are also various sound properties for lockpicking:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;snd_lockpick_pin_1 through 14&#039;&#039; and &#039;&#039;snd_lockpick_pin_success&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Allowing the Player to Interrupt Door Motion===&lt;br /&gt;
&lt;br /&gt;
The door property &#039;&#039;interruptable&#039;&#039; determines whether a door can be stopped by frobbing while it is opening or closing. It is enabled (i.e., set to 1) by default. Then the player, by frobbing to start the normal opening, then frobbing again to interrupt, can open a door to any position, e.g., slightly ajar to peek through. Another frob will begin closing, and so on with any additional frobs to stop/reverse-direction.&lt;br /&gt;
&lt;br /&gt;
Be aware that an rotating-style door, when left ajar, will subsequently open or close more slowly than normal in an angular-velocity sense. It instead takes the same time as a full (uninterrupted) opening or closing would take in seconds, as given by &#039;&#039;move_time&#039;&#039; discussed next.&lt;br /&gt;
&lt;br /&gt;
===Speed of Door Opening and Closing===&lt;br /&gt;
&lt;br /&gt;
Rotating Door Speed:&amp;lt;br&amp;gt;&lt;br /&gt;
The time a rotating door takes to open or close is set in the &#039;&#039;move_time&#039;&#039; property, no matter what its maximum open angle may be. So with rotation set at, say, 150 degrees the door just opens faster than at, say, 80 degrees. To change this value, make sure the door is selected then...&lt;br /&gt;
&lt;br /&gt;
* Right click the entity inspector and check &#039;&#039;show inherited properties&#039;&#039;&lt;br /&gt;
* Scroll down, select &#039;&#039;move_time&#039;&#039;&lt;br /&gt;
* Edit the second line of the input box &#039;&#039;below&#039;&#039; the properties window to the time you want.&lt;br /&gt;
* The time is in seconds and decimal fractions can be used. The default is currently 1.75 seconds.&lt;br /&gt;
&lt;br /&gt;
Sliding Door Speed:&amp;lt;br&amp;gt;&lt;br /&gt;
The speed of a sliding door is set in the &#039;&#039;translate_speed&#039;&#039; property. To add this, make sure the door is selected then...&lt;br /&gt;
&lt;br /&gt;
* Right click the entity inspector and check &#039;&#039;show inherited properties&#039;&#039;&lt;br /&gt;
* Scroll down, select &#039;&#039;translate_speed&#039;&#039;&lt;br /&gt;
* Edit the second line of the input box &#039;&#039;below&#039;&#039; the properties window to the speed you want.&lt;br /&gt;
* The speed is in Dark Radiant grid units per second.&lt;br /&gt;
* The default is 0 and if set to this then the door slides open in one second whatever the distance, great or small.&lt;br /&gt;
* CAUTION: It is assumed &#039;&#039;translate&#039;&#039; has been changed from its default value of 0 0 0. If not, a non-zero &#039;&#039;translate_speed&#039;&#039; may cause problems.&lt;br /&gt;
&lt;br /&gt;
===Visportals and Doors===&lt;br /&gt;
&lt;br /&gt;
A visportal face surrounded by solid at its edges and in contact with a door is closed when the door is closed and enabled when the door is open. In most cases you will place a visportal in contact with a working door unless you can see through the door (such as a true glass door or barred gate*.) For full details see [[Visportals]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;*As of 2.0 it is possible to make visportals that remain transparent when closed for gates and windows.  See&#039;&#039; [[Controlling Sound Loss Across Portals]]&lt;br /&gt;
&lt;br /&gt;
==Auto-Closing/Opening Doors==&lt;br /&gt;
Doors that automatically close after being open for some time are easy to setup: Each frobmover entity supports these spawnargs:&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;auto_close_time&amp;quot;:Set this to something &amp;gt;= 0 to let the mover automatically close (again) after this time when being fully opened (measured in seconds). Defaults to -1, which means &#039;do not autoclose&#039;. The event is also activated when the mover starts at the open position at map start.&lt;br /&gt;
;&amp;quot;auto_open_time&amp;quot;:&amp;quot;Set this to something &amp;gt;= 0 to let the mover automatically open (again) after this time when being fully closed (measured in seconds). Defaults to -1, which means &#039;do not autoopen&#039;. The event is also activated when the mover starts at the closed position at map start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Before auto_close_time and the AI Door Management spawnargs next were provided, a more laborious method was used to auto-close doors as if AI were closing doors behind them. Hit &amp;quot;Expand&amp;quot; to review it.&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;I have one door that I particularly want the AI to close as there is a bit of frame lag inside if not. So I set this up and it works good as an auto-closing door - not as good as a true AI closing door as it will auto close when the player goes through as well but it does look very effective to see AI going through and closing the door behind them. Not tested exhaustively so I don&#039;t know if there could be any downside. Here&#039;s what to do....&lt;br /&gt;
&lt;br /&gt;
First a quick summary to make it more clear:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;A trigger_relay is used both as a relay AND carries a stim. We put the trigger_relay with its stim in the path of the open door. The door has a response property. When it opens and contacts the stim its response is to send a signal back to the relay. The relay pauses then closes the door...&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* First, optionally give your door a suitable name like autodoor1, whatever.&lt;br /&gt;
* Copy that name to the clipboard.&lt;br /&gt;
&lt;br /&gt;
Next we need a relay with a delay:&lt;br /&gt;
&lt;br /&gt;
* Create entity &amp;gt; darkmod &amp;gt; trigger_relay&lt;br /&gt;
&lt;br /&gt;
* Place it roughly at the position the door will be at when open and to be on the safe side 3/4th of the way to the far end of the door (not the hinge end) to give max distance from the close door.&lt;br /&gt;
&lt;br /&gt;
* Add the property &#039;target&#039; and paste in the door name you just copied.&lt;br /&gt;
&lt;br /&gt;
* Give the relay itself a name, eg, autoDoor_relay_1, and copy that name to the clipboard, you&#039;ll need that too in a bit.&lt;br /&gt;
&lt;br /&gt;
* Add the property delay and the value 3 - this is the delay in seconds before the door will close; 3 seems about right but 2 might be worth a try because to that 3 is added a random value between 0 to 0.5 seconds from the Time Interval we entered for the stim firings.&lt;br /&gt;
&lt;br /&gt;
* Add the property &#039;wait&#039; and the value 3. This is the time before it can work again in seconds. If you set it too low then in theory the door might trigger again but in this situation I don&#039;t think it&#039;s possible. Too long, eg, one minute, and it won&#039;t work if the AI goes back through the door before then. If this value is -1 then the whole thing will only work ONCE so might be used for an AI who goes through once, closes it behind him, but you don&#039;t want it to be an autodoor thereafter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That&#039;s the relay, now we add a stim to it:&lt;br /&gt;
&lt;br /&gt;
* Still with the trigger relay selected, go to {{menu|Entity|Stim/Response}}&lt;br /&gt;
&lt;br /&gt;
* Custom stim tab.&lt;br /&gt;
&lt;br /&gt;
* Click Add stim type, select the new custom stim type you just made at the bottom of the list and type in eg, autoDoorStim at top right in the input box.&lt;br /&gt;
&lt;br /&gt;
* Click the stim tab and the little drop down arrow against the &#039;type&#039; selector at bottom left and you should see your new custom stim name. Select it.&lt;br /&gt;
&lt;br /&gt;
* Select the new autoDoorStim in the list and on the right you need only type in the radius box 15.0 There is quite a lot of room for error. I had it working on 10 and also on 25. The value should be less than the distance to the closed door else it will trigger open! But no so small that the door might not reach it.&lt;br /&gt;
&lt;br /&gt;
* Select the check box for Time Interval and enter 500 (millisecs.) This is so it doesn&#039;t keep firing more frequently than is necessary. This stim will be firing all through your mission whether the door is used or not so if you had dozens of these then maybe it would affect performance. Too big a number and there may be a long delay before the door shuts - but it will be random depending on the next time the stim happens to fire. We&#039;ll control the delay we want more precisely later.&lt;br /&gt;
&lt;br /&gt;
* Click {{ok}} to confirm it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That&#039;s the stim set up, now for the response to it which is put on the door....&lt;br /&gt;
&lt;br /&gt;
* Select the doorm, then use {{menu|Entity|Stim/response}} and select the response tab.&lt;br /&gt;
&lt;br /&gt;
* Click the little drop down arrow against the &#039;type&#039; selector at bottom left and you should see your new custom stim name. Select it.&lt;br /&gt;
&lt;br /&gt;
* Right click in the big &#039;&#039;Response Effects&#039;&#039; box on the bottom right of the panel.&lt;br /&gt;
&lt;br /&gt;
* Add New Effect and you should get a default &#039;Activate Response&#039; response added to the list. Double click it.&lt;br /&gt;
&lt;br /&gt;
* In the Effect selector at the stop select &#039;Trigger&#039;&lt;br /&gt;
&lt;br /&gt;
* in the Target box, paste in the name of the relay you copied or you can select it from the list at the little arrow.&lt;br /&gt;
&lt;br /&gt;
* Leave the Activator box empty.&lt;br /&gt;
&lt;br /&gt;
* Click {{apply}} and then {{ok}} on the main S &amp;amp; R panel bottom right.&lt;br /&gt;
&lt;br /&gt;
It should now work. No need to wait for an AI, just frob the door and watch it close itself. If not, check the position of the stim brush is close to where the door stops when open.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==AI Door management==&lt;br /&gt;
&lt;br /&gt;
By default AI will open doors and close them behind them. Here are some spawnargs &#039;&#039;&#039;on the door&#039;&#039;&#039; the mapper can use to modify that behaviour:&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;ai_should_not_handle&amp;quot; :If set to 1, AI will not attempt to handle it and add it to the forbidden areas (so that it doesn&#039;t try to path through). They might still walk through the door when it is open though. Useful if you have some special use door that you don&#039;t want the AI to operate.&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;ai_should_not_close&amp;quot; :If set to 1, AI will not close the door behind them unless it obstructs them.&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;canRemainOpen&amp;quot; :If set to 1, it&#039;s the same as &amp;quot;ai_should_not_close, with the added behavior that this is ignored if the door needs to be relocked, or the door is marked &amp;quot;shouldBeClosed&amp;quot;. &#039;&#039;&#039;(This spawnarg is available starting in TDM 2.02.)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Spawnargs &#039;&#039;&#039;on the AI&#039;&#039;&#039; that the mapper can use:&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;canCloseDoors&amp;quot; :Added in 2.12. Defaults to 1.  If set to 0, the AI will not close doors after passing through them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To get AI to unlock/relock specific doors there are two methods:&lt;br /&gt;
&lt;br /&gt;
1. Provide the AI with the key, as detailed in the def_attach method in [[#Keys_carried_by_AI]] above.&lt;br /&gt;
&lt;br /&gt;
2. Add the following spawnarg/value to the AI:&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;can_unlock&amp;quot; &#039;&#039;&amp;lt;doorname&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For additional doors on the same AI use &#039;&#039;can_unlock1 doorname&#039;, `can_unlock2 doorname&#039; etc. &#039;&#039;&#039;Do NOT use can_unlock_1.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If both (1) and (2) are used, then the AI can still go through the door after the player pickpockets the key. Otherwise, unless someone else opens the door for the AI, a typical sequence is that the AI checks their pockets for the missing key, stalls a bit at the locked door, and then (with now-better pathing algorithms) the AI uses an alternate route to the next path_corner, or &amp;quot;mentally&amp;quot; skips ahead in the route to next reachable node and goes there.&lt;br /&gt;
&lt;br /&gt;
===Door Handling Positions===&lt;br /&gt;
&lt;br /&gt;
It is also possible to set custom door handling positions for the AI. This is especially useful when the standard routine that lets the AI choose their standing positions while opening and closing the door fails, leaving them standing still, or circling around in front of the door helplessly.&lt;br /&gt;
&lt;br /&gt;
Place a movers &amp;gt; &#039;&#039;atdm:door_handling_position&#039;&#039; entity where you want the AI to stand while opening/closing the door from this side.&lt;br /&gt;
&lt;br /&gt;
On the door, you need to set the spawnarg &amp;quot;door_handle_position&amp;quot; &amp;quot;name_of_door_handling_position&amp;quot;. You can also place a &#039;&#039;door_handling_position&#039;&#039; on each side of the door, and the AI will automatically choose the right one. In this case, you need to set spawnargs with &amp;quot;door_handle_position_1&amp;quot; etc., and the corresponding names of the &#039;&#039;door_handling_position&#039;&#039; entities on the door.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;door_handling_position&#039;&#039; entities can also carry spawnargs that define the behaviour of the AI, which are useful for example for doors that can only be opened or locked from one side:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;ai_no_open&amp;quot;&#039;&#039;&#039; If set to &amp;quot;1&amp;quot;, the AI will not try to open the door from this side (but will still walk through when the door is already open).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;ai_no_close&amp;quot;&#039;&#039;&#039; If set to &amp;quot;1&amp;quot;, the AI will not attempt to close the door from this side.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;ai_no_unlock&amp;quot;&#039;&#039;&#039; If set &amp;quot;1&amp;quot;, the AI will not be able to unlock the door from this side, but still use it when it is not locked.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;ai_no_lock&amp;quot;&#039;&#039;&#039; If this is set &amp;quot;1&amp;quot;, the AI will not lock the door from this side.&lt;br /&gt;
&lt;br /&gt;
===Door Controllers===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Available in TDM 2.02+&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can design a door so it&#039;s operated by buttons or levers or switches (aka &#039;&#039;controllers&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
A controller is simply an entity that targets the door.  Typical examples of entities that can be used are:&lt;br /&gt;
&lt;br /&gt;
* Buttons: atdm:mover_button&lt;br /&gt;
* Levers: atdm:switch_rotate_lever&lt;br /&gt;
* Switch: atdm:mover_lever&lt;br /&gt;
* Lock: atdm:froblock. (See also next section)&lt;br /&gt;
&lt;br /&gt;
1. Set up the door in the normal manner. It can be a rotating door, a sliding door, a locked door, etc.&lt;br /&gt;
&lt;br /&gt;
2. Turn off the &amp;quot;frobable&amp;quot; spawnarg on the door. (&amp;quot;frobable&amp;quot; &amp;quot;0&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
3. Create a controller entity on each side of the door. If you&#039;re setting up a locked door using atdm:froblock, there&#039;s no need to put any locking information on the controllers. When the game starts, it will transfer any locking information from the door to the controllers.&lt;br /&gt;
&lt;br /&gt;
4. Give each controller the door as a target.&lt;br /&gt;
&lt;br /&gt;
Both the player and any AI that wants to use the door will use the controllers to operate it. Any key, &amp;quot;can_unlock&amp;quot;, or lockpick settings you would normally use at the door are now used at the controllers.&lt;br /&gt;
&lt;br /&gt;
Controllers and &#039;&#039;door_handling_position&#039;&#039; entities can be used on the same door, but in that situation the &#039;&#039;door_handling_position&#039;&#039; entities don&#039;t define where the AI stands to operate the door. They simply provide the &amp;quot;ai_no_*&amp;quot; spawnargs that define AI behavior on each side of the door.&lt;br /&gt;
&lt;br /&gt;
If you wish, you could provide a controller on only one side of the door instead of both sides. Note that, since the door is not frobable, the player won&#039;t be able to operate the door from the non-controller side.&lt;br /&gt;
&lt;br /&gt;
====More about Using a Separate &amp;quot;Froblock&amp;quot; Lock Plate====&lt;br /&gt;
&#039;&#039;by Geep, 2021-22&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Froblock, just discussed as a controller method, actually predated the controller concept in TDM. Here we recap that earlier context, with an alternative treatment of highlighting, and thoughts on texturing and usage.&lt;br /&gt;
&lt;br /&gt;
Suppose you want to have a lock plate (typically mounted on a door frame or wall) that opens a nearby door, where the door and lock plate highlight separately. A traditional way is to adapt the &#039;&#039;froblock&#039;&#039; method described under the &amp;quot;Making your own&amp;quot; section of [[Containers, Chests, etc.]]&lt;br /&gt;
&lt;br /&gt;
Basically, your door is the &amp;quot;chest lid&amp;quot; (of class atdm:mover_door) and your lock is the &amp;quot;chest body&amp;quot; (of class atdm:froblock). Set the properties as described in the wiki. There is a stock texture (darkmod/door/keyhole_metal_001) you can use to decorate a surface of your lock plate, or a patch on it. This method is probably most apt for small hatches and grates designed for the player alone, and with no handles, or non-turning handles attached with &amp;quot;bind&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===AI and &#039;non-frobable&#039; Doors===&lt;br /&gt;
Be aware that the &#039;frobable&#039; spawnarg only applies to the player, not AI.  If you set a door to be non-frobable (i.e. &#039;frobable&#039; &#039;0&#039;), AI can still operate it by interacting directly with it, even if it has a controller.  For example they will do this if:&lt;br /&gt;
&lt;br /&gt;
* they are fleeing or chasing the player&lt;br /&gt;
* the door has a controller but the AI can&#039;t reach it (for example the controller is on the other side of the door)&lt;br /&gt;
&lt;br /&gt;
The best way to mitigate this is to use Door Handling Position entities (see above) with the &#039;ai_no_open&#039; spawnarg set on them. &lt;br /&gt;
&lt;br /&gt;
===AI locking doors behind them===&lt;br /&gt;
&lt;br /&gt;
If one AI is involved (no one else is in the queue), he&#039;ll lock it behind him if he had to unlock it in the first place.&lt;br /&gt;
&lt;br /&gt;
Prior to TDM 1.08, if more than one AI is using the door at the same time (there&#039;s a queue), the first AI unlocks the door, and the last AI through will only lock it if it&#039;s marked &amp;quot;should_always_be_locked&amp;quot; AND they have a &amp;quot;can_unlock&amp;quot; for that door or they have a key for that door. The last AI to use the door doesn&#039;t know that the first AI found it locked, because that info is kept per AI, and not per door. &lt;br /&gt;
&lt;br /&gt;
Starting in TDM 1.08, if the first AI in a door queue found the door locked, that information is remembered by the door and the last AI through uses it to relock the door, as long as they have a &amp;quot;can_unlock&amp;quot; for that door or they have a key for that door.&lt;br /&gt;
&lt;br /&gt;
In the rare case where a door is set up to use door-handling position entities (necessary for AI to use sliding doors), either or both of those entities can have the &amp;quot;ai_no_lock&amp;quot; spawnarg, which means AI aren&#039;t allowed to lock the door from that side.&lt;br /&gt;
&lt;br /&gt;
==Initially Blocking a Door - Partially or Fully==&lt;br /&gt;
&#039;&#039;by Geep 2021&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Suppose you have a door that you want to start out either as unopenable, or able to open just a crack, then later, after something happens, be fully openable and operational. One method known to work:&lt;br /&gt;
&lt;br /&gt;
* Create a moveable object that the opening door runs into and tries to push.&lt;br /&gt;
* Arrange that the far side of the moveable object is jammed against some immovable worldspawn.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s two specific examples that use a wooden plank moveable:&lt;br /&gt;
&lt;br /&gt;
* In &amp;quot;Perilous Refuge&amp;quot;, a plank blocks the door leading out of the player&#039;s starting location, until the player carries it away. &lt;br /&gt;
* At the end of &amp;quot;Away0&amp;quot; (WIP 2021), the player tries to open a door. But if preconditions aren&#039;t met, the occupant seems to let the door open only a crack and complains. Blockage is done by an unseen plank resting on the floor hitting a knob of worldspawn. Preconditions met causes a &amp;quot;$plank.remove()&amp;quot; script call.&lt;br /&gt;
&lt;br /&gt;
Other methods that you might think would work but don’t:&lt;br /&gt;
&lt;br /&gt;
* Block with a func_static object, or an unjammed moveable with &amp;quot;notpushable 1&amp;quot; set. In both cases, the door travels through the object.&lt;br /&gt;
* In advance, &amp;quot;grab&amp;quot; an unjammed moveable to make it appear &amp;quot;solid&amp;quot; to the physics engine. (This was tested by having the player manipulate it; if it had worked, a “grabber” script call might suffice.)&lt;br /&gt;
* Dynamically change the door’s &amp;quot;rotate&amp;quot; limit from script using &amp;quot;setSpawnArg&amp;quot;; this function would only work before you spawn the door, not afterwards.&lt;br /&gt;
&lt;br /&gt;
(Others possibilities not yet tested:&lt;br /&gt;
&lt;br /&gt;
* Change &amp;quot;rotate&amp;quot; using the &amp;quot;setKey&amp;quot; script function; for some spawnargs this works even after spawn.&lt;br /&gt;
* Create a moveable and bind it to the world entity.&lt;br /&gt;
* If you are mainly interested in initially blocking an AI from using a door: it&#039;s possible that the AI re-reads the spawnargs for what doors it&#039;s allowed to open. Try adding a frob Response to the key (Entity -&amp;gt; Stim/Response... -&amp;gt; Response) with an effect that sets the “can_unlock&amp;quot; spawnarg on that AI to &amp;quot;-&amp;quot;.)&lt;br /&gt;
&lt;br /&gt;
==Controlling a Door by Scripting==&lt;br /&gt;
&#039;&#039;by Geep 2021&#039;&#039;&lt;br /&gt;
===If Unlocked===&lt;br /&gt;
&lt;br /&gt;
Simply use, for example with a door named &#039;&#039;door1&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 $door1.Open();&lt;br /&gt;
 ...&lt;br /&gt;
 $door1.Close();&lt;br /&gt;
&lt;br /&gt;
Alternatively, toggle it open or closed with:&lt;br /&gt;
&lt;br /&gt;
 $door1.frob();&lt;br /&gt;
&lt;br /&gt;
If the door has &amp;quot;interruptable 1&amp;quot; (which is the default with atdm:mover_door), you can also frob() it twice to leave it ajar. Interpose and adjust a sys.wait(...) to tune it.&lt;br /&gt;
===If Locked===&lt;br /&gt;
&lt;br /&gt;
You need to unlock it first. Changing the door&#039;s &amp;quot;locked&amp;quot; spawnarg value won&#039;t work. Instead you will use:&lt;br /&gt;
&lt;br /&gt;
 $door1.Unlock();&lt;br /&gt;
&lt;br /&gt;
But there are complications. By default, the door has spawnarg &amp;quot;open_on_unlock 1&amp;quot;. So, assuming you didn&#039;t change that, you&#039;d think unlocking the door would open it. But this spawnarg will be ignored if the gamer has global menu option &amp;quot;Open Doors on Unlock&amp;quot; set to Off. Assuming you want to reliably have the door open, do this:&lt;br /&gt;
&lt;br /&gt;
 $door1.Unlock(); // MAYBE will open door too.&lt;br /&gt;
 sys.wait(3); // If so, wait for door to fully open. Value may need adjusting based on door&#039;s speed&lt;br /&gt;
 $door1.Open(); // Otherwise, open it now.&lt;br /&gt;
&lt;br /&gt;
The wait is added, because otherwise, the opening begun by Unlock may be stopped by Open with the door only partially open. (Probably an alternative to using sys.wait here is to zero the door&#039;s &amp;quot;interruptable&amp;quot; spawnarg.) &lt;br /&gt;
&lt;br /&gt;
==Doors as Triggers==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;by Ishtvan &amp;amp; greebo&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Doors (or any binary frob mover, buttons, levers, etc) now have the option to [[Triggers|trigger]] their target on closing or opening. (For definition purposes, a button is defined as &amp;quot;closed&amp;quot; in the state when it starts out and &amp;quot;open&amp;quot; in the state you press it down to. I know that&#039;s a little non-intuitive, but it came from deriving from doors).&lt;br /&gt;
&lt;br /&gt;
New spawnargs on frob movers:&lt;br /&gt;
;&amp;quot;trigger_on_open&amp;quot; :If set to 1, this binary mover will trigger its targets when it starts out completely closed and is opened.&lt;br /&gt;
;&amp;quot;trigger_when_opened&amp;quot;:If set to 1, this binary mover will trigger its targets when it is completely opened. Code defaults to 0.&lt;br /&gt;
;&amp;quot;trigger_on_close&amp;quot;:If set to 1, this binary mover will trigger its targets when it completely closes after being open.&lt;br /&gt;
&lt;br /&gt;
== Suspicious Doors ==&lt;br /&gt;
&lt;br /&gt;
If you give a door the spawnarg &#039;&#039;&#039;&amp;quot;shouldBeClosed&amp;quot; &amp;quot;1&amp;quot;&#039;&#039;&#039;, then AI will treat it as suspicious if they find the door open.&lt;br /&gt;
&lt;br /&gt;
Doors with that spawnarg should work like this:&lt;br /&gt;
&lt;br /&gt;
- an AI opening the door knows he&#039;s not to become suspicious if he opened the door&lt;br /&gt;
&lt;br /&gt;
- nearby AI alerted by the open door will also not react if they can see the door, and can see the AI that opened it&lt;br /&gt;
&lt;br /&gt;
- AI who come upon the open door later probably won&#039;t be able to see the AI that opened it, so they&#039;ll treat it as suspicious&lt;br /&gt;
&lt;br /&gt;
- if the AI who opened the door comes upon the door later, and it&#039;s still open, and no one&#039;s touched it since he opened it, he&#039;ll see his name on the door and won&#039;t become suspicious. &amp;quot;Oh, crap. I forgot to close it earlier.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
- If an AI comes upon an open door that should be closed, he should close it whether he becomes suspicious or not.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Post TDM 2.00:&#039;&#039;&#039;&lt;br /&gt;
-  AI turn to look at a door they see opening.  The player can crack open a suspicious door to peek out w/o grabbing the attention of a nearby AI. After 5s, the AI will notice the cracked open door. Non-suspicious doors can be cracked open indefinitely w/o nearby AI noticing.&lt;br /&gt;
&lt;br /&gt;
==Slanted or Tilted Doors==&lt;br /&gt;
Slanted or tilted doors can be made as follows:&lt;br /&gt;
&lt;br /&gt;
1) Place your door, preferrably one of the prefab doors, which have a model door and model handle and all the rotation spawnargs pre-set.&lt;br /&gt;
&lt;br /&gt;
2) rotate and place the door+handle model into place you want it to be. Now, if you use the door in the game, the door will rotate around the world z-axis, and not the door model z-axis (which is rotated).&lt;br /&gt;
&lt;br /&gt;
3) to get the door to rotate around the door model z-axis, you must place a model (any model will do, and it can be placed anywhere in the map). Rotate the new model into the same orientation your door model was rotated, i.e. if you door is rotated 45 degrees around the x-axis, do the same rotation on the new model.&lt;br /&gt;
&lt;br /&gt;
4) bind the doors on the new model. This makes the doors start rotating along the new model origin (which is rotated the same way as the doors).&lt;br /&gt;
&lt;br /&gt;
5) working slanted door.&lt;br /&gt;
&lt;br /&gt;
Do note, that all the rotated objects need to be models (suspicion, not tested). You can export DR built stuff into a model using the DR ase exporter script. For custom doors, remember that the exporter places the model origin at the map origin if you do not choose the &amp;quot;place origin in the middle of the object&amp;quot; option.&lt;br /&gt;
&lt;br /&gt;
Also note that the AI probably cannot use slanted doors and might get stuck (suspicion, not tested).&lt;br /&gt;
&lt;br /&gt;
There is a link to a test map here:&lt;br /&gt;
http://forums.thedarkmod.com/topic/9082-newbie-darkradiant-questions/?p=395486&lt;br /&gt;
&lt;br /&gt;
==Skins: A Wide Variety of Door Textures==&lt;br /&gt;
&lt;br /&gt;
This is to remind you that as with many Dark Mod models, there is a wide range of extras skins (textures) available for door models. There are now several basic door entities of different sizes so choose your size first. Then enter the spawnarg: skin with any temporary value. Now select it and click the skin button at the bottom of Dark Radiant&#039;s Entity Inspector and you will find a large of range of skin textures from which to select to give you a choice of appearances for your door.&lt;br /&gt;
&lt;br /&gt;
==Extra Notes==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;func_darkmod_door&#039;&#039; is no longer used (just in case you come across it in the Dark Mod forums or wiki.) &#039;&#039;&#039;&amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt;&#039;&#039;&#039; is the entity to use.&lt;br /&gt;
&lt;br /&gt;
{{tutorial-editing}}&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=Doors&amp;diff=34109</id>
		<title>Doors</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=Doors&amp;diff=34109"/>
		<updated>2025-11-06T20:23:32Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: /* Generic Version */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{todo}}&lt;br /&gt;
&#039;&#039;Written by Fidcal&#039;&#039; &#039;&#039;edit Baddcog&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Quick Summary==&lt;br /&gt;
&lt;br /&gt;
Quick way to get an unlocked door in your map:&lt;br /&gt;
&lt;br /&gt;
* Insert one of the prefab doors complete with handles and select its skin property and click the button to change its skin appearance to whatever you want. Set any other properties you need.&lt;br /&gt;
&lt;br /&gt;
Alternatively,&lt;br /&gt;
&lt;br /&gt;
* Create a door from the entity list&lt;br /&gt;
* Use the &amp;quot;skin&amp;quot; spawnarg on the door to change its appearance. &lt;br /&gt;
* Create a handle from the entity list&lt;br /&gt;
* Add the &#039;&#039;door_handle&#039;&#039; property to the door and give it the name of the handle&lt;br /&gt;
* To the door handle add the value frob_peer and use the name of the door.&lt;br /&gt;
* To open clockwise, change the &#039;&#039;rotate&#039;&#039; property from &amp;lt;code&amp;gt;0 90 0&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;0 -90 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
This tutorial explains how to put doors into your map using Dark Radiant, as well as adjust them and their properties.&lt;br /&gt;
&lt;br /&gt;
The rest of this tutorial assumes that you have a basic understanding of using DarkRadiant. If you haven&#039;t done so, please go read the [[Dark Radiant Must Know Basic Intro]] article first.&lt;br /&gt;
&lt;br /&gt;
Additionally:&lt;br /&gt;
&lt;br /&gt;
* Up, down, right, and left in Dark Radiant&#039;s &#039;&#039;top&#039;&#039; orthoview are regarded here as the standard map directions of North, South, East, and West where useful for clarity.&lt;br /&gt;
* Where the term &#039;&#039;brush&#039;&#039; is used with a door it mostly also applies to a door made up of a group of brushes and/or patches.&lt;br /&gt;
* Where the term &#039;&#039;door&#039;&#039; is used it often will also apply to any object you wish to rotate when frobbed, for instance an openable window, box lid, or even more exotic objects that the imaginative mapper might conceive like a signal, engine part, toy, or whatever. So long as it needs to turn or slide just a fixed amount when frobbed then return when frobbed again then the following applies.&lt;br /&gt;
&lt;br /&gt;
==Door types==&lt;br /&gt;
&lt;br /&gt;
All tangible objects in Dark Mod are &#039;&#039;entities&#039;&#039;, having either a pre-made model shape or else brush/patch(es). So there are two ways to create a door in Dark Radiant: as a model door or a textured brush door (or a hybrid of the two).&lt;br /&gt;
&lt;br /&gt;
Models are ready made door objects but cannot within Dark Radiant (at the time of writing) be resized, rescaled, cropped or clipped whereas brushes are very flexible in that respect and can be worked into custom shapes for your map, including secret doors that blend into walls and other surfaces.&lt;br /&gt;
&lt;br /&gt;
Most of the current door models are found in two places along with the door handles.&lt;br /&gt;
*Model Viewer: doors created from here will be static in the world and have no props other than material type.&lt;br /&gt;
You can add any props to them to make them working doors. If nothing else it is a good place to view the different size and skin options for the doors.&lt;br /&gt;
*Entity List: most of the door models can be found here. These doors have properties already assigned so they are ready to be used. Only one base door of each type is listed, create the size/hinge count door you want (2 hinge doors have a &#039;no hinge&#039; skin). You can choose a skin for the door once it has been created in the editor with the &amp;quot;skin&amp;quot; spawnarg (use the model name of the door you want, taken from the model list, as its value). This is the easiest way to create a door. The same goes for door handles.&lt;br /&gt;
&lt;br /&gt;
Remember also that door functions may be applied to objects other than doors, such as openable windows, drawbridges, gates, etc. In fact, anything that needs a partial rotation or slide when frobbed then return when frobbed again, such as a signal device. Lockboxes and chests use similar properties.&lt;br /&gt;
&lt;br /&gt;
You can create one door/handle set and copy/paste it, but you need to take great care that all the name props are changed to match in each clone. Otherwise you get handles that fly off when a distant door moves, and handles that don&#039;t move.&lt;br /&gt;
&lt;br /&gt;
==Creating a Door==&lt;br /&gt;
&lt;br /&gt;
Put simply, to make a door you will be creating an &#039;entity with model&#039; or &#039;entity with brush&#039; or some variation thereof.&lt;br /&gt;
&lt;br /&gt;
===Creating a Model Door===&lt;br /&gt;
&lt;br /&gt;
There are several approaches to making a model door; the simplest is to create a door from the entity list; or create a door from the model viewer (good for static unusable prop doors).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Entity List&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
*Deselect everything in editor by hitting the Esc button&lt;br /&gt;
*Right-click an ortho view and select Create Entity&lt;br /&gt;
*Navigate to darkmod/movers/&#039;&#039;atdm:door_...&#039;&#039;, choose the door you want&lt;br /&gt;
*Click Add&lt;br /&gt;
*To change its appearance, add a &amp;quot;skin&amp;quot; spawnarg to the door, with the value being the model name of the door you want.&lt;br /&gt;
&lt;br /&gt;
You now have a workable door in your level.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Model Viewer&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Right click in the orthoview, select &#039;&#039;Create Model&#039;&#039; then &amp;lt;code&amp;gt;darkmod&amp;lt;/code&amp;gt; and select a door.&lt;br /&gt;
* Note that you can left drag the image in the &#039;&#039;Choose Model&#039;&#039; dialog to rotate it around.&lt;br /&gt;
* Click [[Image:Button ok.png]] and you have a static door.&lt;br /&gt;
* If you want to make it work (openable, frobbable) then:&lt;br /&gt;
** Select the entity inspector,&lt;br /&gt;
** Select the top classname line so it highlights&lt;br /&gt;
** Select the func_static line in the input box &#039;&#039;below&#039;&#039; the properties window.&lt;br /&gt;
** Edit &amp;lt;code&amp;gt;func_static&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt;&lt;br /&gt;
** Click {{check}} or press {{key-enter}}&lt;br /&gt;
&lt;br /&gt;
Alternatively you can do it the old way:&lt;br /&gt;
&lt;br /&gt;
* Create any temporary brush&lt;br /&gt;
* Right click in orthoview and select &amp;lt;code&amp;gt;Create Entity&amp;lt;/code&amp;gt; then &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Left lick the model name line in the entity inspector.&lt;br /&gt;
* Below it on the &#039;&#039;Entity Inspector&#039;&#039; panel you should now see a button &#039;Choose Model&#039;&lt;br /&gt;
* Left click it, select a door model from the darkmod group.&lt;br /&gt;
* Note that you can left drag the image in the &#039;&#039;Choose Model&#039;&#039; dialog to rotate it around.&lt;br /&gt;
* The temporary brush was deleted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In all three instances, you now have a working door with default properties. &lt;br /&gt;
&lt;br /&gt;
Name your door by adding the prop (or modifing it) to name &#039;&#039;My_Door_1&#039;&#039;. You can use any name that you feel is appropriate but all doors with handles attached &#039;&#039;must&#039;&#039; have their own specific name. Use the name My_Door_1 for your first attempt as it will be referenced when you get around to attaching handles (see below).&lt;br /&gt;
&lt;br /&gt;
To add a handle and other adjustments, see [[#Customising and Adjusting Door Properties]] below.&lt;br /&gt;
&lt;br /&gt;
===Creating a Textured Brush Door===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tip:&#039;&#039;&#039; If unsure of size then you might insert a temporary human AI first to get a sense of height.&lt;br /&gt;
&lt;br /&gt;
==== The simplest brush door: ====&lt;br /&gt;
&lt;br /&gt;
* Drag out a new brush to the size required, eg, a seven foot high door is 84&amp;quot; x 1.1 = about 90 units in Dark Radiant.&lt;br /&gt;
* Give it a door texture from the texture browser (or wall texture for a secret door)&lt;br /&gt;
* Right click in orthoview and select &#039;&#039;Create Entity&#039;&#039; then &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You now have a working door but it will rotate around its center. To move the rotation point to where you want the door hinges to be:&lt;br /&gt;
* Select the door and press &#039;v&#039; or the &#039;&#039;Select Vertices&#039;&#039; button to enter vertex editing mode. The door&#039;s origin will show up as a small green square in the middle of the brush.&lt;br /&gt;
* In top-down orthoview, move the origin from the center to the corner of the brush. This is easiest in drag mode (&#039;q&#039; or the &#039;&#039;Resize&#039;&#039; button), although you can use translate mode (&#039;w&#039; or the &#039;&#039;Translate&#039;&#039; button) by manually selecting the vertex first.&lt;br /&gt;
&lt;br /&gt;
==== Multi-brush doors: ====&lt;br /&gt;
&lt;br /&gt;
More complex multi-brush doors can be created using the [[Clipper]] tool, CSG, etc. - this is not covered in this tutorial. Then assign &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt; for that whole brush structure. Also you can collect various brushes positioned together in relation to one another as needed, select them all, then assign &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt; for the group. All the brushes will be children of the &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt; entity and will rotate and be frobbable, etc. as one unit, as one door. To add further brushes or even model shapes later see the section on [[#Adding handles and other items to doors]].&lt;br /&gt;
&lt;br /&gt;
Name your door by adding the prop (or modifing it) to name My_Door_1. You can use any name that you feel is appropriate but all doors with handles attached must have their own specific name. Use the name My_Door_1 for your first attempt as it will be referenced when you get around to attaching handles (see below). (repeated from above in case you didn&#039;t choose to create a model door)&lt;br /&gt;
&lt;br /&gt;
=== Double Doors ===&lt;br /&gt;
Double doors are automatically recognised by the code when the doors are spawned. The prerequisite is that both doors are sharing/touching the same visportal. The spawnarg &#039;&#039;auto_setup_double_door&#039;&#039; (which defaults to &amp;quot;1&amp;quot;) will take care of setting up the open/lock peer relationship between the two doors. The doors will open/close and lock/unlock along with each other as a result.&lt;br /&gt;
&lt;br /&gt;
What happens behind the scenes: the doors are adding each other to their internal open_peer and lock_peer list, which causes the double doors to perform the same action when frobbed or used.&lt;br /&gt;
&lt;br /&gt;
Note that &#039;&#039;auto_setup_double_door&#039;&#039; will not set the frob_peer relationship, i.e. each door will frob-highlight on its own without highlighting the other door. You&#039;ll need to add that spawnarg manually if you want to highlight the entire double door as one.&lt;br /&gt;
&lt;br /&gt;
==Customising and Adjusting Door Properties==&lt;br /&gt;
&lt;br /&gt;
Handles, lockplates, etc. can be added to doors and door properties can be adjusted for rotation, sliding, locking, and more.&lt;br /&gt;
&lt;br /&gt;
Some of the door models have hinge plates and lockboxes that are reskinnable with a good variety of skins.&lt;br /&gt;
&lt;br /&gt;
===Door handles and other door attachments===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Summary: just add the property &#039;&#039;bind&#039;&#039; with the door&#039;s name to the attachment and position it where you want it on the door. If it&#039;s a &#039;&#039;atdm:mover_door_handle&#039;&#039; then it automatically will work as a handle but you can bind virtually anything.&#039;&#039;&#039;&lt;br /&gt;
You can add handles and other items to doors such that they move correctly with the door whether rotating, sliding, or both and even if the door is not vertical such as a skylight or trapdoor.&lt;br /&gt;
Handle models come in two types, &#039;&#039;single handles&#039;&#039; and &#039;&#039;double handles&#039;&#039;. A single handle is one sided, this means the handle will be inside the door or outside the door, but not both. A double handle has a lever on the inside of the door and a handle on the outside of the door. Each has benefits.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;Single door handles&#039;&#039;&#039;&#039;&#039;:&lt;br /&gt;
Single door handles can be used on a static door, a door that&#039;s just for show that no AI&#039;s or the player can use. In this case you should just create a door handle from the model viewer, it will be static and have no properties such as scripts. It is for looks only.  Note that TDM is trying to establish the expectation that decorative doors that cannot be opened do not have handles (though not all maps follow this).&lt;br /&gt;
&lt;br /&gt;
I will call this &#039;&#039;multiple handles&#039;&#039;, see more below.&lt;br /&gt;
&lt;br /&gt;
These can also be useful on brush doors created in the editor that may be very thin or very wide.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;Double door handles&#039;&#039;&#039;&#039;&#039;:&lt;br /&gt;
These are models have have a handle inside and outside. The bonus is that they only use one entity. Maps are limited to about 4,000 entities but when you count lights, AI, sound speakers, ect... you can run out of entities quickly on a large map. If you plan on building a large map this is the way to go, even in a small map they have benefits, namely that you only have to attach one handle per door.&lt;br /&gt;
&lt;br /&gt;
Whether you decide to use a single handle or a double handle you must first follow the instructions below and attach one handle first. If you choose a double handle, follow the instructions below and you are done. If you choose a single handle type follow the instructions then also follow the &#039;&#039;multiple handle&#039;&#039; instructions for the second handle.&lt;br /&gt;
&lt;br /&gt;
Both single and double handle types can be found in two places. The model viewer which will create a static model good for show, you can manually add props to make them work OR you can look in the entity browser.&lt;br /&gt;
Using a handle from the entity browser saves you a little bit of time as some props are already added, you just need to add the frob_peer names for the doors/handles and the door_handle name to the door.&lt;br /&gt;
&lt;br /&gt;
=== Adding a working model door handle===&lt;br /&gt;
&lt;br /&gt;
Quick summary:&lt;br /&gt;
* Create a model or brush handle and make it an &#039;&#039;atdm:mover_door_handle&#039;&#039; entity.&lt;br /&gt;
* Position it on your door.  Use the opposite side from the door&#039;s multicolor X-Y-Z indicator (highlight the door to see it) if it&#039;s not obvious which side it goes on.  &lt;br /&gt;
* &#039;&#039;&#039;Bind&#039;&#039;&#039; the handle to the door (bind &amp;lt;doorname&amp;gt;)&lt;br /&gt;
* It should now be a working handle though may need adjustments of rotation etc. see later. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Important: read preceding section on door handle types and performance issues first.&lt;br /&gt;
&lt;br /&gt;
This works with both a model door and a brush door:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rotation&#039;&#039;&#039;:&lt;br /&gt;
* By default the door handle entity rotates &#039;&#039;anti-clockwise&#039;&#039; (looked at from the front) then springs back. A &#039;&#039;double handle&#039;&#039; model is OK but two singles (see &#039;&#039;Multiple door handles&#039;&#039; below) need more care as only one is the functioning entity and the other is just attached to it. So anti-clockwise is fine for a door with its hinge on the left and the handle on the right - the handle will rotate down then spring back. If you put the functioning door handle on the other side you will have to change the default &#039;&#039;rotate&#039;&#039; property from -45 0 0 to 45 0 0. &#039;&#039;&#039;&#039;&#039;Therefore it is easier to generally put this handle on the side of the door where the hinge is on the left and the non-functioning attachment handle on the other side.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*If your door only needs one handle, eg, a cupboard door, and from outside its hinge is on the right then you will need to change the &#039;&#039;rotate&#039;&#039; property of the handle as described above.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;The functioning handle entity:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
* Create an entity door handle (movers folder) or create a brush or model handle and assign it the entity &#039;&#039;atdm:mover_door_handle&#039;&#039;.&lt;br /&gt;
* Position it where you wish on your door.&lt;br /&gt;
* &#039;&#039;&#039;Bind&#039;&#039;&#039; the handle to the door, by adding the &amp;quot;bind&amp;quot; spawnarg to the handle.&lt;br /&gt;
&lt;br /&gt;
You now have a working door handle with default properties.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Multiple door handles&#039;&#039;&#039;:&lt;br /&gt;
Now that you&#039;ve got a handle attached to one side of the door it is time to add one to the other side (unless you used a double handle).&lt;br /&gt;
* Create the new handle. The single handles come in left and right persuasions. A door needs a left facing handle on one side and a right facing handle on the other, so if you have already added the left handle create a right handle and line it up on the other side of the door.&lt;br /&gt;
* Name this handle. I prefer to keep a naming convention for each door and it&#039;s respective handles, it makes things alot easier. The door is named &#039;&#039;&#039;My_Door_1&#039;&#039;&#039;, the first handle is named &#039;&#039;&#039;My_Handle_1&#039;&#039;&#039; so name the second handle &#039;&#039;&#039;My_Handle_1_1&#039;&#039;&#039;. This will make it stay with the first handle in the entity list. This is important to keep organized. If you name it My_Handle_2 then when you get to another door named My_Door_2 you&#039;ll be confused.&lt;br /&gt;
* Place and &#039;&#039;&#039;bind&#039;&#039;&#039; that handle to your door.&lt;br /&gt;
&lt;br /&gt;
You now have two single door handles on either side of the door that rotate together as if they were physically attached.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add a brush to a brush door&#039;&#039;&#039;:&lt;br /&gt;
* Select the new brush &#039;&#039;and&#039;&#039; the brush door all together; &#039;&#039;the entity &#039;&#039;&#039;must&#039;&#039;&#039; be selected &#039;&#039;&#039;last&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
* Use {{menu|Edit|Reparent primitives}}. This ensures the parent entity adopts the new item(s).&lt;br /&gt;
* If you have trouble selecting them in the orthoview because other brushes, etc. get selected then try in the camera view or as a last resort move them temporarily to an open area (but keep them in the same positions relative to each other.) Use {{key-shift}}+{{LMB}} on new item(s) then {{key-shift}}+{{LMB}} on main entity. Once they are all selected, use the {{menu|Edit|Reparent primitives}}.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add &#039;&#039;model&#039;&#039; static items&#039;&#039;&#039;: knockers, hinges, static handles etc. to a &#039;&#039;Model Door&#039;&#039;:&lt;br /&gt;
* Select item&lt;br /&gt;
* Right click in orthoview and select &#039;&#039;Create Entity&#039;&#039; then &amp;lt;code&amp;gt;entity func_static&amp;lt;/code&amp;gt;&lt;br /&gt;
* Position it where you wish on your door.&lt;br /&gt;
* To synchronize this with your particular door you need to add the property &#039;&#039;bind&#039;&#039; and the individual door name to the brush entity. To do this...&lt;br /&gt;
** Select the model door.&lt;br /&gt;
** In the entity inspector, select the &#039;&#039;name&#039;&#039; line&lt;br /&gt;
** Select the bottom line in the input box &#039;&#039;below&#039;&#039; the properties window.&lt;br /&gt;
** Copy the name&lt;br /&gt;
** Deselect the door with {{key-esc}}&lt;br /&gt;
** Select the brush entity&lt;br /&gt;
** Add a property &amp;quot;bind&amp;quot; to it.&lt;br /&gt;
** Change the value of the property by pasting in the door name&lt;br /&gt;
** Click {{check}} or press {{key-enter}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add &#039;&#039;brush&#039;&#039; static items&#039;&#039;&#039;: knockers, hinges, static handles to a Model Door:&lt;br /&gt;
* This method is not ideal but it seems to work OK.&lt;br /&gt;
* Select the brush.&lt;br /&gt;
* Right click in orthoview and select Create Entity then &#039;&#039;atdm:mover_door_handle&#039;&#039;&lt;br /&gt;
* Position it where you wish on your door.&lt;br /&gt;
&lt;br /&gt;
To synchronize this with your particular door you need to add the property &#039;&#039;door_handle&#039;&#039; on the door, and give as the value the name of the brush you just created.&lt;br /&gt;
&lt;br /&gt;
This brush turns like a handle. To stop it:&lt;br /&gt;
&lt;br /&gt;
* Adding &#039;&#039;rotate 0 0 0&#039;&#039; or disabling the handle script won&#039;t help.&lt;br /&gt;
* Add a real working handle (as in the section above &#039;&#039;To add a working model door handle...&#039;&#039; and it must be added LAST.)&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want too see a real working handle added maybe try another tiny brush with the handle function and hide it inside the door?&lt;br /&gt;
&lt;br /&gt;
===Locking Doors===&lt;br /&gt;
&lt;br /&gt;
To lock a door check the &#039;&#039;show inherited properties&#039;&#039; in the entity inspector for a &#039;&#039;atdm:mover_door&#039;&#039; entity and you should see the &#039;&#039;locked&#039;&#039; property. Select it and in the input box below the properties you can change its value:&lt;br /&gt;
&lt;br /&gt;
* 0 = unlocked (default)&lt;br /&gt;
* 1 = locked&lt;br /&gt;
&lt;br /&gt;
If locked it will require an entity that is associated with it to be able to act as a key to unlock it.&lt;br /&gt;
&lt;br /&gt;
Currently door handles on locked doors will rotate when frobbed, they will bounce back though and the door will stay locked until unlocked.&lt;br /&gt;
&lt;br /&gt;
===Keys===&lt;br /&gt;
&lt;br /&gt;
Assigning specific keys to specific doors is simple.&lt;br /&gt;
&lt;br /&gt;
* It is recommended that you create an existing key entity. These keys have all required props, they just need to be named.&lt;br /&gt;
&lt;br /&gt;
Alternatively you can create a key from the Model Viewer and want it to be useable&lt;br /&gt;
* Make sure it has the properties:&lt;br /&gt;
 useable 1 [so it can be used by the door]&lt;br /&gt;
 frobable 1&lt;br /&gt;
 inv_name &amp;lt;unique name&amp;gt;&lt;br /&gt;
 inv_category Keys&lt;br /&gt;
 inv_target player1&lt;br /&gt;
 inv_icon guis/assets/hud/inventory_icons/&amp;lt;icon name&amp;gt;&lt;br /&gt;
 inv_stackable 0 or 1 where 1 can be used on all copies of the same key so they show as one entry in the inventory with a total.&lt;br /&gt;
&lt;br /&gt;
Add to the door the property &amp;lt;code&amp;gt;used_by&amp;lt;/code&amp;gt; with the name of the key as the value. Multiple keys can open the same door by using several &amp;lt;tt&amp;gt;used_by&amp;lt;/tt&amp;gt; spawnargs:&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;used_by&amp;quot;  &amp;quot;doorkey_1&amp;quot;&lt;br /&gt;
 &amp;quot;used_by1&amp;quot; &amp;quot;doorkey_2&lt;br /&gt;
&lt;br /&gt;
==== Keys Carried by AI ====&lt;br /&gt;
&lt;br /&gt;
So you have a door and you have a guard AI and you want the guard to be able to open/close/lock the door, but you also want the player to be able to pickpocket the key. Keys can be attached to AI in two ways.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The Def_Attach Method&#039;&#039;. This method is the best one for doors that you expect the AI to operate. It uses spawnargs to spawn the key at game start.&lt;br /&gt;
&lt;br /&gt;
*&amp;quot;def_attach6&amp;quot; &amp;quot;atdm:prop_silverkey&amp;quot; // the entity to spawn - in this case a key.&lt;br /&gt;
*&amp;quot;pos_attach6&amp;quot; &amp;quot;belt_back_right&amp;quot; // where the key will spawn on the Ai.&lt;br /&gt;
*&amp;quot;name_attach6&amp;quot; &amp;quot;door_key&amp;quot; // this gives &#039;attach6&#039; arg the name &amp;quot;door_key&amp;quot; and is the name the arg &amp;quot;used_by&amp;quot; will need, eg: &amp;quot;used_by&amp;quot; &amp;quot;door_key&amp;quot;&lt;br /&gt;
*&amp;quot;set inv_name on door_key&amp;quot; &amp;quot;Door key&amp;quot; // The name the key get when the play adds it to their inventory.&lt;br /&gt;
*&amp;quot;set name on door_key&amp;quot; &amp;quot;door_key&amp;quot; // here it gets a name to be used in the map in general.&lt;br /&gt;
&lt;br /&gt;
For more info on this method, see [[Attaching Props to AI]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The Bind Method&#039;&#039;. This lacks the animation finesse of def_attach, but does let you see the key in DR. The method is particularly helpful in, say, adding a second key to an AI in the back middle of a belt. The AI cannot use a bound key to open a locked door; the workaround is to fake it with &amp;quot;can_unlock&amp;quot; as discussed further below. Or to use bound keys mainly for items the AI will not attempt to open, such as hatches, duct covers, or chests.&lt;br /&gt;
&lt;br /&gt;
* Load a key entity&lt;br /&gt;
* Position where you want it in relation to the AI, and bind it to them (i.e., &amp;quot;bind&amp;quot; &amp;quot;&amp;lt;AIname&amp;gt;&amp;quot;)&lt;br /&gt;
* Add the spawnarg &amp;quot;bindToJoint&amp;quot; &amp;quot;Hips&amp;quot; (or another location like LeftHips_Dummy; see AI for list)&lt;br /&gt;
* Adjust existing spawnargs accordingly (that is, be sure the name and door&#039;s/chest&#039;s &amp;quot;used_by&amp;quot; match, if you aren&#039;t using a prefab chest with key). This is for the benefit of the player after pickpocketing the key; as stated above, the AI itself can&#039;t use it for unlocking.&lt;br /&gt;
&lt;br /&gt;
For more info on this method, see [[Attaching_Items]] and [[BindToJoint]].&lt;br /&gt;
&lt;br /&gt;
====Keys Carried by Player====&lt;br /&gt;
&lt;br /&gt;
With a door&#039;s key selected in your inventory and the door highlighted, you can...&lt;br /&gt;
* unlock it (which will also auto-open if enabled) by either frobbing it or hitting the Use key (typically U or Enter).&lt;br /&gt;
* lock (or relock) it via the Use key. Why do this? To avoid pursuit, or to lure guards into a room, and then lock them in (if they don&#039;t have a key or specific can_unlock powers). &lt;br /&gt;
&lt;br /&gt;
====Master Key for Testing====&lt;br /&gt;
&lt;br /&gt;
By default, ALL locks can be opened by any key named &#039;&#039;key_master&#039;&#039;. Just create a key in your map, name it &#039;&#039;key_master&#039;&#039; and it becomes a master key for use while testing. Add inv_map_start 1 to it so it is in the player inventory at game start. Remember to delete it when your mission is finished.&lt;br /&gt;
&lt;br /&gt;
====Automatically Removing Keys from Player Inventory After Use====&lt;br /&gt;
If a fan mission has a lot of keys it can clog up the player inventory. If the key is single-use, it can be useful to automatically remove it from the player inventory after use.  Below is a way to do it using a simple setup and a generic script function that can be used for multiple doors.&lt;br /&gt;
&lt;br /&gt;
=====Generic Version=====&lt;br /&gt;
&lt;br /&gt;
You&#039;ll need the following entities, preferably set up near each other in your map:&lt;br /&gt;
* The door entity itself&lt;br /&gt;
* A trigger_count entity&lt;br /&gt;
* An atdm:target_callscriptfunction entity&lt;br /&gt;
* some random entity for the target_callscriptfunction to target (explanation below)&lt;br /&gt;
&lt;br /&gt;
The below diagram shows the spawnargs and targeting required for the setup:&lt;br /&gt;
[[File:Key remove2.png|left|thumb]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
The script being called (&#039;openDoor&#039;) is defined in fms/&amp;lt;mapname&amp;gt;/maps/&amp;lt;mapname&amp;gt;.script and looks like this:&lt;br /&gt;
&lt;br /&gt;
 void openDoor(entity target, entity door, entity callscriptfunction)&lt;br /&gt;
 {&lt;br /&gt;
     string keyName = door.getKey(&amp;quot;used_by&amp;quot;);&lt;br /&gt;
     entity key = sys.getEntity(keyName);&lt;br /&gt;
     $player1.replaceInvItem(key, $null_entity);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Explanation as follows:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;For the door:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;trigger_on_open&#039;&#039;&#039; spawnarg: The door is configured to trigger its targets when it opens&lt;br /&gt;
* target &#039;&#039;&#039;trigger_count&#039;&#039;&#039; entity: this is the entity that is triggered when the door is opened&lt;br /&gt;
* &#039;&#039;&#039;used_by&#039;&#039;&#039; spawnarg: This names the key entity required for unlocking the door&lt;br /&gt;
* The other spawnargs are just the usual for setting the door as locked and unpickable&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;trigger_count entity:&#039;&#039;&#039;&lt;br /&gt;
* When triggered, this entity will in turn trigger the script that removes the key from the player inventory.&lt;br /&gt;
* &#039;&#039;&#039;count&#039;&#039;&#039; spawnarg: This is set to 1 because we only want the key removal script called once - the first time the player opens the door.&lt;br /&gt;
* this entity targets the atdm:target_callscriptfunction, which contains details of the script to execute&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;atdm:target_callscriptfunction entity:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;call&#039;&#039;&#039; spawnarg: This is the name of the script function to call&lt;br /&gt;
* &#039;&#039;&#039;foreach&#039;&#039;&#039; spawnarg: This version of the script event provides access to the &#039;activator&#039;, or the entity that triggered it (in this case, the door).  Using that information we can obtain the key name. See [[A to Z Scripting: Ways of calling a script#target_callscriptfunction|here]] for details.&lt;br /&gt;
* &#039;&#039;&#039;target any static entity&#039;&#039;&#039;: For this version of the script event to work, the target_callscriptfunction entity needs to target something.  This can be any static entity in the map (i.e. one that won&#039;t get removed or anything). I usually just target the nearest entity (e.g. a light or a lamp, or a model).  This provides no functionality in the context of this tutorial, it just satisfies the conditions of the script event.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The script:&#039;&#039;&#039;&lt;br /&gt;
* Pretty self-explanatory.  The script gets the name of the key entity via the &#039;&#039;&#039;used_by&#039;&#039;&#039; spawnarg on the door, retrieves the key entity, and then replaces it in the player inventory with a null entity, effectively removing it.&lt;br /&gt;
* Any door can use this script as its generic, although they will need their own trigger_count entities.  In theory they could share the same target_callscriptfunction entity, but that might become inconvenient - up to the mapper.&lt;br /&gt;
&lt;br /&gt;
=====Simpler, No-script Version=====&lt;br /&gt;
This is similar to above, but is more limited.  You need to hard-code the key name as a spawnarg on an atdm:target_itemremove entity as the key name can&#039;t be automatically determined like in the above script. This makes it slightly more error-prone as we&#039;re naming entities in more than one place, but ideal if you&#039;re uncomfortable with scripting.&lt;br /&gt;
&lt;br /&gt;
[[File:Key remove4.png|left|thumb]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Explanation as follows:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;atdm:target_itemremove entity:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;unique_item &#039;&#039;&#039; spawnarg: The name of the key to remove from the player inventory&lt;br /&gt;
&lt;br /&gt;
===Lockpicks===&lt;br /&gt;
&#039;&#039;by Baddcog&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
There are two lock pick types.&lt;br /&gt;
*&#039;&#039;&#039;s&#039;&#039;&#039;=snake&lt;br /&gt;
*&#039;&#039;&#039;t&#039;&#039;&#039;=triangular&lt;br /&gt;
&lt;br /&gt;
A lock can be set with many pins. Each pin has a click sequence and each needs a designated lockpick type (see above). Keep in mind that the lockpicking in The Darkmod is much more involved than in T2 or T3. The player has to listen to sounds or watch a handle or lockbar to know when a lock is pin is picked.&lt;br /&gt;
&lt;br /&gt;
This means that authors can be very evil and really frustrate the player, in which case their missions will probably not be played. So be nice to the player and don&#039;t waste your time. Use simple locks for the most part and save complicated locks for important sections and to build tension. Don&#039;t make the player have 20 pins to pick all with different lockpicks. In most cases 1 or 2 pins will suffice and it isn&#039;t necessary to use both lockpicks on every lock.&lt;br /&gt;
Also try to include a lock lever on lockboxes or chests, door handles will rotate as the pins are being picked. This gives the player visual clues to help with the picking (and essential in noisy environments where you can&#039;t hear the clicks.)&lt;br /&gt;
IMO this system is a huge leap foward for lockpicking but also has the ability to completely frustrate the player as stated above. Keep this in mind when designing your lockpick systems.&lt;br /&gt;
&lt;br /&gt;
These props go on the door itself, or the lid of a chest, eg,&lt;br /&gt;
*&#039;&#039;&#039;lock_pins&#039;&#039;&#039; 1327&lt;br /&gt;
*&#039;&#039;&#039;lock_picktype&#039;&#039;&#039; stts&lt;br /&gt;
&lt;br /&gt;
The lock_pins property specifies how many pins each lockpicktype has.&lt;br /&gt;
The lockpick_type property specifies how many times the player has to switch picks and which pick they have to use. You can see there must always be an equal number of lock_pins and lock_picktypes specified&lt;br /&gt;
&lt;br /&gt;
So looking at the example above we have lockpick_type s(snake), t(triangular), t(triangular), and s(snake). The player will have to use these lockpicks in this order. Once the snake lockpick&#039;s pins are open the player can advance to the triangular pick and so forth.&lt;br /&gt;
5 is added to every click sequence so 5 is the minimum click pattern even if you set it to 0.&lt;br /&gt;
In the example above the lockpins specify in order which pick types have how many pins, so the s pick has 1 + 5 = 6 clicks, the t pick has 8 and so on.&lt;br /&gt;
The above is a difficult lock and to avoid annoying the player it is best only used rarely on a special lock like an important big vault door. Ordinary footlockers and common doors can be just 1 or 2 click sequences, eg, lock_pins 2 and lock_picktype t means the player uses one pick and listens for the end of one sequence of 7 clicks.&lt;br /&gt;
&lt;br /&gt;
lockpick_rotate - is placed on the door. It is the amount the visible rotating handle or pin rotates while picking. For a rotating handle or lockbar normally ignore this and leave the default. During lockpicking it oscillates and progresses to the normal full turn of the handle. Example 0 45 0.&lt;br /&gt;
&lt;br /&gt;
lockpick_translate - is placed on the door. It is the amount the visible handle or pin moves in a straight line while picking. Use this if you have eg, a lockbar that you want to move in a straight line and not rotate, eg sliding catch. Example 0 -5 0&lt;br /&gt;
&lt;br /&gt;
By default, doors are pickable. If you don&#039;t set up the above lockpick spawnargs then it can&#039;t be picked. So there is normally no need to enable lockpicking - just set up the above spawnargs. There is a &#039;&#039;pickable&#039;&#039; spawnarg set to 1 by default. If set to 0 then the door becomes unpickable. But hard to think of an application except in testing or perhaps a special custom situation where it is switched by script perhaps.&lt;br /&gt;
&lt;br /&gt;
===Open, Partially Open, or Closed Door at Game Start===&lt;br /&gt;
&lt;br /&gt;
By default, doors are closed at game start. If you want a door to be already open or partially open then do the following.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note well: Create all doors in their &#039;&#039;closed&#039;&#039; position. Adjust as follows and they will automatically be at the open position when game starts.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Already Open Rotating Door:&lt;br /&gt;
* Select the door.&lt;br /&gt;
* Select the entity inspector&lt;br /&gt;
* Check &#039;&#039;show inherited properties&#039;&#039;&lt;br /&gt;
* Select the &#039;&#039;open&#039;&#039; property&lt;br /&gt;
* Edit the value to 1 in the input box below and tick the check button&lt;br /&gt;
* The door will now be fully open at game start.&lt;br /&gt;
&lt;br /&gt;
* If you want it only partly open:&lt;br /&gt;
* Make sure its &#039;&#039;open&#039;&#039; property is set to 1 as above.&lt;br /&gt;
* Right click the entity inspector and select &#039;&#039;add property&#039;&#039; &lt;br /&gt;
* Click the + sign on the left of the top line where atdm:mover_door is listed to open the folder. (if atdm:mover_door is not listed then the entity was likely changed from eg, func_static. If so, save the map and reload to update the add property list)&lt;br /&gt;
*  scroll down, select &#039;&#039;start_rotate&#039;&#039; then click {{ok}}&lt;br /&gt;
* This adds it to the property list.&lt;br /&gt;
* Now select &#039;&#039;start_rotate&#039;&#039; in the property list.&lt;br /&gt;
* Edit the bottom line of the input box &#039;&#039;below&#039;&#039; the properties window to the angle you want in the same form as described in the &#039;&#039;Rotate Direction and Open Angle&#039;&#039; section. So for example, to have a door that has a fully open default &#039;&#039;rotate&#039;&#039; value of 0 90 0 to start only half open you would give it a &#039;&#039;start_rotate&#039;&#039; value of 0 45 0. &lt;br /&gt;
* In a similar way add the property &#039;&#039;first_frob_open&amp;quot;.&lt;br /&gt;
* Set it to 1 and a partly open door should then open fully on the first frob.&lt;br /&gt;
* Set it to 0 and a partly open door should close on the first frob.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Already Open Sliding Door:&lt;br /&gt;
* Select the door.&lt;br /&gt;
* Select the entity inspector&lt;br /&gt;
* Check &#039;&#039;show inherited properties&#039;&#039;&lt;br /&gt;
* Select the &#039;&#039;open&#039;&#039; property&lt;br /&gt;
* Edit the value to 1 in the input box below and click {{check}} or press {{key-enter}}&lt;br /&gt;
* The door will now be fully open at game start.&lt;br /&gt;
&lt;br /&gt;
* If you want it only partly open:&lt;br /&gt;
* Right click the entity inspector and select &#039;&#039;add property&#039;&#039; &lt;br /&gt;
* Make sure its &#039;&#039;open&#039;&#039; property is set to 1&lt;br /&gt;
* Click the + sign on the left of the top line where atdm:mover_door is listed to open the folder.&lt;br /&gt;
*  scroll down, select &#039;&#039;start_position&#039;&#039; then click OK. (if atdm:mover_door is not listed then the entity was likely changed from eg, func_static. If so, save the map and reload to update the add property list)&lt;br /&gt;
* This adds it to the property list.&lt;br /&gt;
* Now select &#039;&#039;start_position&#039;&#039; in the property list.&lt;br /&gt;
* Edit the bottom line of the input box &#039;&#039;below&#039;&#039; the properties window to the position you want in the same form as described in the &#039;&#039;Sliding (Translation) Amount and Direction&#039;&#039; section. So for example, to have a door that has a fully open default &#039;&#039;translate&#039;&#039; value of 0 50 0 to start only half open you would give it a &#039;&#039;start_position&#039;&#039; value of 0 25 0.&lt;br /&gt;
* In a similar way add the property &#039;&#039;first_frob_open&amp;quot;.&lt;br /&gt;
* Set it to 1 and a partly open door should then open fully on the first frob.&lt;br /&gt;
* Set it to 0 and a partly open door should close on the first frob.&lt;br /&gt;
&lt;br /&gt;
===Rotation Centre, Pivot, Hinge point===&lt;br /&gt;
&lt;br /&gt;
The centre of rotation of a door is at the origin point of its entity and the door rotates with reference to the orientation of that origin point, not the world map. See &#039;&#039;Rotate Direction...&#039;&#039; for more about that. This section only deals with the &#039;&#039;position&#039;&#039; of the rotation centre in the door.&lt;br /&gt;
&lt;br /&gt;
Model Door Centre of Rotation:&amp;lt;br&amp;gt;&lt;br /&gt;
The centre of rotation of a model door cannot be changed within Dark Radiant. Because a model door rotates around the centre &#039;spine&#039; of its back edge this will cause clipping (penetration into solid) as in this example (where the door is set to open to 89 degrees for clarity):&amp;lt;BR&amp;gt;[[Image:modelClipping.jpg]]&amp;lt;BR&amp;gt; So care is needed with placement. You will not normally position a door right next to a wall as in the example but against a shallow frame so clipping will barely be noticeable but either way it can be fixed. You can correct it by adding a translation (see &#039;&#039;Sliding (Translation) Directions&#039;&#039;) value of half the door width in the direction of the door handle. This will gently move the door out as it rotates to clear any solid on that side as in this diagram:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:DoorClip.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
Half a door width will typically be about 2. Any &#039;attachments&#039; such as door handles will still synchronize with the door movement whether the door is rotating, sliding, or both.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Brush Door Centre of Rotation:&amp;lt;br&amp;gt;&lt;br /&gt;
The centre of rotation of a brush door &#039;&#039;can&#039;&#039; be changed. The default origin point of a brush is at its centre. Therefore a default rotating brush door will rotate around its centre when you first create it. So, mappers will commonly need to move that rotation point to a corner or even to some other offset position for example, for an openable window using the door function.&lt;br /&gt;
&lt;br /&gt;
Put simply, to move the rotation point of a brush door you need to move the entity origin relative to the brush(es.)&lt;br /&gt;
&lt;br /&gt;
Moving the entity origin (centre of rotation) relative to a brush door:&lt;br /&gt;
&lt;br /&gt;
* Select the brush door&lt;br /&gt;
* Select &#039;&#039;Vertices mode&#039;&#039; (default shortcut key is {{key|name=V}} or button on top toolbar &#039;Select Vertices&#039;)&lt;br /&gt;
* Drag the door&#039;s entity origin to the point where you want the door to rotate. This should be on the corner on the leading edge side (the side to where the door is opening.) to avoid clipping as in this diagram....&lt;br /&gt;
[[Image:getCorner.jpg]]&lt;br /&gt;
* You should now find that door rotates around that point.&lt;br /&gt;
&lt;br /&gt;
===Rotate Direction and Open Angle===&lt;br /&gt;
&lt;br /&gt;
By default, rotating doors open anti-clockwise (viewed from above) by 90 degrees from the start orientation. If you want to change this edit the &#039;&#039;rotate&#039;&#039; property in the entity inspector. Don&#039;t confuse this &#039;&#039;rotate&#039;&#039; property with the &#039;&#039;rotation&#039;&#039; property. In the entity inspector remember that to see the inherited rotate property you must check the box &#039;Show inherited properties&#039;.&lt;br /&gt;
&lt;br /&gt;
The three values shown in the rotate property are degrees from the closed position around Y Z X (absolute map axes Front, Top, Side views in DR&#039;s ortho view.)&lt;br /&gt;
&lt;br /&gt;
* Positive Y = Open clockwise (Dark Radiant grid front view, looking north)&lt;br /&gt;
* Negative Y = Open anti-clockwise (Dark Radiant grid front view, looking north)&lt;br /&gt;
&lt;br /&gt;
* Positive Z = Open anti-clockwise (Dark Radiant grid top view, looking down)&lt;br /&gt;
* Negative Z = Open clockwise (Dark Radiant grid top view, looking down)&lt;br /&gt;
&lt;br /&gt;
* Positive X = Open anti-clockwise (Dark Radiant grid side view, looking west)&lt;br /&gt;
* Negative X = Open clockwise (Dark Radiant grid side view, looking west)&lt;br /&gt;
&lt;br /&gt;
There is a problem when you come to rotations that are not around the main Y Z X axes of the map, for instance a drawbridge that lowers down to the south east. You might think you can combine Y Z X values to get the result you want - and this can be done (for south east use 45 45 90) but it is a bit of a kludge and the drawbridge twists eccentrically as it lowers (though it arrives correctly!)&lt;br /&gt;
&lt;br /&gt;
The values are in the range -179 to +180. Positive values give an anti-clockwise opening rotation (looking down from above) and negative values give a clockwise opening rotation. The value 180 is unique in that it continues in an anti-clockwise rotation when closing rather than returning clockwise so might be used if you can think of some object that might need such a motion when frobbed!&lt;br /&gt;
&lt;br /&gt;
Edit the rotate value by selecting it and using the input box at the bottom and clicking the check(tick) button. That will change the angle the door will open to. Note that the line with the original default of 0 90 0 will still be there but your new entry will be added on a separate line and that is the one that will work in the game. CAUTION: when adjusting later make sure you have your new line selected and not the original! If you do it will appear to change but your first setting will remain unaltered.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
* 0 90 0 = Opens anti-clockwise round the entity&#039;s &#039;vertical&#039; to 90 degrees - typical default vertical door.&lt;br /&gt;
* 0 0 90 = Lowers a drawbridge from the entity &#039;vertical&#039; to horizontal.&lt;br /&gt;
* 0 0 -45 = Opens clockwise by 45 degrees viewed from the east side. This might suit a skylight in a sloping roof.&lt;br /&gt;
&lt;br /&gt;
&#039;rotate&#039; cannot be combined with translate motions (see [[#Sliding (Translation) Amount and Direction]]) in one door; you need to bind one door to another and link they by targetting one to the other. By that means you can produce exotic and useful motions. A door opening against an upward-sloping floor can thus have a &#039;&#039;lifting hinge&#039;&#039; and raise up slightly to clear the floor; a door can rotate towards you and slide back to one side very effectively.&lt;br /&gt;
&lt;br /&gt;
===Sliding (Translation) Amount and Direction===&lt;br /&gt;
&lt;br /&gt;
By default a Dark Mod door will rotate open. For most sliding doors you want to stop them rotating as well as make them slide. You cannot delete (remove) the &#039;&#039;rotate&#039;&#039; property - you have to set the &#039;&#039;rotate&#039;&#039; property to 0 0 0 to stop a door rotating (see &#039;&#039;Rotate Direction and Open Angle&#039;&#039;.)&lt;br /&gt;
&lt;br /&gt;
Now edit the &#039;&#039;translate&#039;&#039; property value by selecting it (remember to have inherited properties box checked) and using the input box at the bottom and clicking the check(tick) button. That will change the distance the door will slide to. Note that the line with the original default of 0 0 0 will still be there but your new entry will be added on a separate line and that is the one that will work in the game. CAUTION: when adjusting later make sure you have your new line selected and not the original! If you do it will appear to change but your first setting will remain unaltered.&lt;br /&gt;
&lt;br /&gt;
Typically (but not always) you will want your sliding door to slide the width of the door. The three values in the translate property by default are 0 0 0 and are X Y Z &#039;&#039;absolute map&#039;&#039; values (irrespective of door orientation) where:&lt;br /&gt;
&lt;br /&gt;
* Positive X = Slide East (Right side of Dark Radiant grid in top view)&lt;br /&gt;
* Negative X = Slide West (Left side of Dark Radiant grid in top view)&lt;br /&gt;
* Positive Y = Slide North (top of Dark Radiant grid in top view)&lt;br /&gt;
* Negative Y = Slide South (bottom of Dark Radiant grid in top view)&lt;br /&gt;
* Positive Z = Slide Up (Top of Dark Radiant grid in side views)&lt;br /&gt;
* Negative Z = Slide Down (Bottom of Dark Radiant grid in side views)&lt;br /&gt;
&lt;br /&gt;
So for a 50 unit wide door you want to slide fully to the east you would use 50 0 0 for the translate property values. A 100 unit portcullis sliding vertically up would need 0 0 100 to be fully raised.&lt;br /&gt;
&lt;br /&gt;
=== Doors Collision/Push Behaviour ===&lt;br /&gt;
Doors push all entities by default, except for the player. Doors will also stop moving when anything blocks their movement. However, this default behaviour can be changed by setting appropriate spawnargs:&lt;br /&gt;
&lt;br /&gt;
Set &#039;&#039;&#039;push_player&#039;&#039;&#039; to &#039;&#039;&#039;1&#039;&#039;&#039; to let the player be pushed by this door:&lt;br /&gt;
 &amp;quot;push_player&amp;quot;  &amp;quot;1&amp;quot;  // Push the player too (default is off)&lt;br /&gt;
&lt;br /&gt;
By default &#039;&#039;&#039;stop_when_blocked&#039;&#039;&#039; is set to 1 and if a door is blocked by an entity then even if the entity is removed afterwards, the door stays where it is. The next frob will close the door.&lt;br /&gt;
&lt;br /&gt;
Set &#039;&#039;&#039;stop_when_blocked&#039;&#039;&#039; to &#039;&#039;&#039;0&#039;&#039;&#039; to prevent the door from ending the opening sequence when anything blocks its way. It will still pause - but continue to open if the block is removed.&lt;br /&gt;
 &amp;quot;stop_when_blocked&amp;quot;   &amp;quot;0&amp;quot;  // door keeps moving after being blocked (default is off)&lt;br /&gt;
With this setting, doors will still stop at blocking entities (the player, for instance), but will continue to move when the entity moves out of the way.&lt;br /&gt;
&lt;br /&gt;
There is another spawnarg which stops a door pushing a moveable. Apply this to the &#039;&#039;moveable&#039;&#039;, not the door...&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;notPushable&amp;quot;   &amp;quot;1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Door Sounds===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are multiple ways to put sounds on doors.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_open&#039;&#039; &amp;lt;br&amp;gt; &lt;br /&gt;
Sound is triggered as the door begins to open.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_opened&#039;&#039; &amp;lt;br&amp;gt; &lt;br /&gt;
Sound is triggered when the door finishes opening. Defaults to &amp;quot;nosound&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_move&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
The sound plays while the door moves.  Defaults to &amp;quot;nosound&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_close&#039;&#039;  &amp;lt;br&amp;gt;&lt;br /&gt;
Sound is triggered as the door finishes closing.&lt;br /&gt;
&lt;br /&gt;
The following sounds should be left on the default sound in most cases so players clearly know what is going on:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_locked&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
The sound played when a player or an AI tries to open a locked door.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_unlock string&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
The sound played when a door is unlocked.&lt;br /&gt;
&lt;br /&gt;
You can silence any of these sounds by setting the following properties as shown:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_open nosound&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;snd_close nosound&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Don&#039;t just use a dash - as it seems to cause a sound of its own.&lt;br /&gt;
&lt;br /&gt;
===Sound Propagation through Doors and Doorways===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This information will change significantly with the release of 2.0.  See&#039;&#039; [[Controlling Sound Loss Across Portals]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The sound volume reduction to the player (ie, the sound the player hears) is fixed and constant in a cvar which adds a distance factor to the original sound. It is recommended that you do not change that because it will affect other FMs. Currently there is no way to change the way that sound to the player is reduced through doors and doorways.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sound propagation to AI, eg, impact sounds or guard yells is treated separately:&lt;br /&gt;
&lt;br /&gt;
Sound propagation to AI relies on visportals. For details study [[Sound Propagation: Part 1]] and [[Sound Propagation: Part 2]] as well as [[Visportals]] This tutorial will just cover the relevant sound and sound propagation &#039;&#039;properties&#039;&#039; of doors. If you set the &#039;&#039;show inherited properties&#039;&#039; box in the entity inspector you can see them as described here.&lt;br /&gt;
&lt;br /&gt;
Remember, the following have no effect on what the player hears through a door or doorway.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;loss_open&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Drop in sound volume in dB propagated to AI (not player) when going through an open door. (default 1dB)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;loss_closed&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Drop in sound volume in dB propagated to AI (not player) when going through a closed door. (default 15dB) You would want to set this very high to block all sound with a thick door but very low for a barred gate for example.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;loss_double_open&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Drop in sound volume in dB propagated to AI (not player) when going through double doors when only one is open. (default 1dB)&lt;br /&gt;
&lt;br /&gt;
There are also various sound properties for lockpicking:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;snd_lockpick_pin_1 through 14&#039;&#039; and &#039;&#039;snd_lockpick_pin_success&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Allowing the Player to Interrupt Door Motion===&lt;br /&gt;
&lt;br /&gt;
The door property &#039;&#039;interruptable&#039;&#039; determines whether a door can be stopped by frobbing while it is opening or closing. It is enabled (i.e., set to 1) by default. Then the player, by frobbing to start the normal opening, then frobbing again to interrupt, can open a door to any position, e.g., slightly ajar to peek through. Another frob will begin closing, and so on with any additional frobs to stop/reverse-direction.&lt;br /&gt;
&lt;br /&gt;
Be aware that an rotating-style door, when left ajar, will subsequently open or close more slowly than normal in an angular-velocity sense. It instead takes the same time as a full (uninterrupted) opening or closing would take in seconds, as given by &#039;&#039;move_time&#039;&#039; discussed next.&lt;br /&gt;
&lt;br /&gt;
===Speed of Door Opening and Closing===&lt;br /&gt;
&lt;br /&gt;
Rotating Door Speed:&amp;lt;br&amp;gt;&lt;br /&gt;
The time a rotating door takes to open or close is set in the &#039;&#039;move_time&#039;&#039; property, no matter what its maximum open angle may be. So with rotation set at, say, 150 degrees the door just opens faster than at, say, 80 degrees. To change this value, make sure the door is selected then...&lt;br /&gt;
&lt;br /&gt;
* Right click the entity inspector and check &#039;&#039;show inherited properties&#039;&#039;&lt;br /&gt;
* Scroll down, select &#039;&#039;move_time&#039;&#039;&lt;br /&gt;
* Edit the second line of the input box &#039;&#039;below&#039;&#039; the properties window to the time you want.&lt;br /&gt;
* The time is in seconds and decimal fractions can be used. The default is currently 1.75 seconds.&lt;br /&gt;
&lt;br /&gt;
Sliding Door Speed:&amp;lt;br&amp;gt;&lt;br /&gt;
The speed of a sliding door is set in the &#039;&#039;translate_speed&#039;&#039; property. To add this, make sure the door is selected then...&lt;br /&gt;
&lt;br /&gt;
* Right click the entity inspector and check &#039;&#039;show inherited properties&#039;&#039;&lt;br /&gt;
* Scroll down, select &#039;&#039;translate_speed&#039;&#039;&lt;br /&gt;
* Edit the second line of the input box &#039;&#039;below&#039;&#039; the properties window to the speed you want.&lt;br /&gt;
* The speed is in Dark Radiant grid units per second.&lt;br /&gt;
* The default is 0 and if set to this then the door slides open in one second whatever the distance, great or small.&lt;br /&gt;
* CAUTION: It is assumed &#039;&#039;translate&#039;&#039; has been changed from its default value of 0 0 0. If not, a non-zero &#039;&#039;translate_speed&#039;&#039; may cause problems.&lt;br /&gt;
&lt;br /&gt;
===Visportals and Doors===&lt;br /&gt;
&lt;br /&gt;
A visportal face surrounded by solid at its edges and in contact with a door is closed when the door is closed and enabled when the door is open. In most cases you will place a visportal in contact with a working door unless you can see through the door (such as a true glass door or barred gate*.) For full details see [[Visportals]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;*As of 2.0 it is possible to make visportals that remain transparent when closed for gates and windows.  See&#039;&#039; [[Controlling Sound Loss Across Portals]]&lt;br /&gt;
&lt;br /&gt;
==Auto-Closing/Opening Doors==&lt;br /&gt;
Doors that automatically close after being open for some time are easy to setup: Each frobmover entity supports these spawnargs:&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;auto_close_time&amp;quot;:Set this to something &amp;gt;= 0 to let the mover automatically close (again) after this time when being fully opened (measured in seconds). Defaults to -1, which means &#039;do not autoclose&#039;. The event is also activated when the mover starts at the open position at map start.&lt;br /&gt;
;&amp;quot;auto_open_time&amp;quot;:&amp;quot;Set this to something &amp;gt;= 0 to let the mover automatically open (again) after this time when being fully closed (measured in seconds). Defaults to -1, which means &#039;do not autoopen&#039;. The event is also activated when the mover starts at the closed position at map start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Before auto_close_time and the AI Door Management spawnargs next were provided, a more laborious method was used to auto-close doors as if AI were closing doors behind them. Hit &amp;quot;Expand&amp;quot; to review it.&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;I have one door that I particularly want the AI to close as there is a bit of frame lag inside if not. So I set this up and it works good as an auto-closing door - not as good as a true AI closing door as it will auto close when the player goes through as well but it does look very effective to see AI going through and closing the door behind them. Not tested exhaustively so I don&#039;t know if there could be any downside. Here&#039;s what to do....&lt;br /&gt;
&lt;br /&gt;
First a quick summary to make it more clear:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;A trigger_relay is used both as a relay AND carries a stim. We put the trigger_relay with its stim in the path of the open door. The door has a response property. When it opens and contacts the stim its response is to send a signal back to the relay. The relay pauses then closes the door...&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* First, optionally give your door a suitable name like autodoor1, whatever.&lt;br /&gt;
* Copy that name to the clipboard.&lt;br /&gt;
&lt;br /&gt;
Next we need a relay with a delay:&lt;br /&gt;
&lt;br /&gt;
* Create entity &amp;gt; darkmod &amp;gt; trigger_relay&lt;br /&gt;
&lt;br /&gt;
* Place it roughly at the position the door will be at when open and to be on the safe side 3/4th of the way to the far end of the door (not the hinge end) to give max distance from the close door.&lt;br /&gt;
&lt;br /&gt;
* Add the property &#039;target&#039; and paste in the door name you just copied.&lt;br /&gt;
&lt;br /&gt;
* Give the relay itself a name, eg, autoDoor_relay_1, and copy that name to the clipboard, you&#039;ll need that too in a bit.&lt;br /&gt;
&lt;br /&gt;
* Add the property delay and the value 3 - this is the delay in seconds before the door will close; 3 seems about right but 2 might be worth a try because to that 3 is added a random value between 0 to 0.5 seconds from the Time Interval we entered for the stim firings.&lt;br /&gt;
&lt;br /&gt;
* Add the property &#039;wait&#039; and the value 3. This is the time before it can work again in seconds. If you set it too low then in theory the door might trigger again but in this situation I don&#039;t think it&#039;s possible. Too long, eg, one minute, and it won&#039;t work if the AI goes back through the door before then. If this value is -1 then the whole thing will only work ONCE so might be used for an AI who goes through once, closes it behind him, but you don&#039;t want it to be an autodoor thereafter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That&#039;s the relay, now we add a stim to it:&lt;br /&gt;
&lt;br /&gt;
* Still with the trigger relay selected, go to {{menu|Entity|Stim/Response}}&lt;br /&gt;
&lt;br /&gt;
* Custom stim tab.&lt;br /&gt;
&lt;br /&gt;
* Click Add stim type, select the new custom stim type you just made at the bottom of the list and type in eg, autoDoorStim at top right in the input box.&lt;br /&gt;
&lt;br /&gt;
* Click the stim tab and the little drop down arrow against the &#039;type&#039; selector at bottom left and you should see your new custom stim name. Select it.&lt;br /&gt;
&lt;br /&gt;
* Select the new autoDoorStim in the list and on the right you need only type in the radius box 15.0 There is quite a lot of room for error. I had it working on 10 and also on 25. The value should be less than the distance to the closed door else it will trigger open! But no so small that the door might not reach it.&lt;br /&gt;
&lt;br /&gt;
* Select the check box for Time Interval and enter 500 (millisecs.) This is so it doesn&#039;t keep firing more frequently than is necessary. This stim will be firing all through your mission whether the door is used or not so if you had dozens of these then maybe it would affect performance. Too big a number and there may be a long delay before the door shuts - but it will be random depending on the next time the stim happens to fire. We&#039;ll control the delay we want more precisely later.&lt;br /&gt;
&lt;br /&gt;
* Click {{ok}} to confirm it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That&#039;s the stim set up, now for the response to it which is put on the door....&lt;br /&gt;
&lt;br /&gt;
* Select the doorm, then use {{menu|Entity|Stim/response}} and select the response tab.&lt;br /&gt;
&lt;br /&gt;
* Click the little drop down arrow against the &#039;type&#039; selector at bottom left and you should see your new custom stim name. Select it.&lt;br /&gt;
&lt;br /&gt;
* Right click in the big &#039;&#039;Response Effects&#039;&#039; box on the bottom right of the panel.&lt;br /&gt;
&lt;br /&gt;
* Add New Effect and you should get a default &#039;Activate Response&#039; response added to the list. Double click it.&lt;br /&gt;
&lt;br /&gt;
* In the Effect selector at the stop select &#039;Trigger&#039;&lt;br /&gt;
&lt;br /&gt;
* in the Target box, paste in the name of the relay you copied or you can select it from the list at the little arrow.&lt;br /&gt;
&lt;br /&gt;
* Leave the Activator box empty.&lt;br /&gt;
&lt;br /&gt;
* Click {{apply}} and then {{ok}} on the main S &amp;amp; R panel bottom right.&lt;br /&gt;
&lt;br /&gt;
It should now work. No need to wait for an AI, just frob the door and watch it close itself. If not, check the position of the stim brush is close to where the door stops when open.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==AI Door management==&lt;br /&gt;
&lt;br /&gt;
By default AI will open doors and close them behind them. Here are some spawnargs &#039;&#039;&#039;on the door&#039;&#039;&#039; the mapper can use to modify that behaviour:&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;ai_should_not_handle&amp;quot; :If set to 1, AI will not attempt to handle it and add it to the forbidden areas (so that it doesn&#039;t try to path through). They might still walk through the door when it is open though. Useful if you have some special use door that you don&#039;t want the AI to operate.&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;ai_should_not_close&amp;quot; :If set to 1, AI will not close the door behind them unless it obstructs them.&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;canRemainOpen&amp;quot; :If set to 1, it&#039;s the same as &amp;quot;ai_should_not_close, with the added behavior that this is ignored if the door needs to be relocked, or the door is marked &amp;quot;shouldBeClosed&amp;quot;. &#039;&#039;&#039;(This spawnarg is available starting in TDM 2.02.)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Spawnargs &#039;&#039;&#039;on the AI&#039;&#039;&#039; that the mapper can use:&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;canCloseDoors&amp;quot; :Added in 2.12. Defaults to 1.  If set to 0, the AI will not close doors after passing through them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To get AI to unlock/relock specific doors there are two methods:&lt;br /&gt;
&lt;br /&gt;
1. Provide the AI with the key, as detailed in the def_attach method in [[#Keys_carried_by_AI]] above.&lt;br /&gt;
&lt;br /&gt;
2. Add the following spawnarg/value to the AI:&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;can_unlock&amp;quot; &#039;&#039;&amp;lt;doorname&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For additional doors on the same AI use &#039;&#039;can_unlock1 doorname&#039;, `can_unlock2 doorname&#039; etc. &#039;&#039;&#039;Do NOT use can_unlock_1.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If both (1) and (2) are used, then the AI can still go through the door after the player pickpockets the key. Otherwise, unless someone else opens the door for the AI, a typical sequence is that the AI checks their pockets for the missing key, stalls a bit at the locked door, and then (with now-better pathing algorithms) the AI uses an alternate route to the next path_corner, or &amp;quot;mentally&amp;quot; skips ahead in the route to next reachable node and goes there.&lt;br /&gt;
&lt;br /&gt;
===Door Handling Positions===&lt;br /&gt;
&lt;br /&gt;
It is also possible to set custom door handling positions for the AI. This is especially useful when the standard routine that lets the AI choose their standing positions while opening and closing the door fails, leaving them standing still, or circling around in front of the door helplessly.&lt;br /&gt;
&lt;br /&gt;
Place a movers &amp;gt; &#039;&#039;atdm:door_handling_position&#039;&#039; entity where you want the AI to stand while opening/closing the door from this side.&lt;br /&gt;
&lt;br /&gt;
On the door, you need to set the spawnarg &amp;quot;door_handle_position&amp;quot; &amp;quot;name_of_door_handling_position&amp;quot;. You can also place a &#039;&#039;door_handling_position&#039;&#039; on each side of the door, and the AI will automatically choose the right one. In this case, you need to set spawnargs with &amp;quot;door_handle_position_1&amp;quot; etc., and the corresponding names of the &#039;&#039;door_handling_position&#039;&#039; entities on the door.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;door_handling_position&#039;&#039; entities can also carry spawnargs that define the behaviour of the AI, which are useful for example for doors that can only be opened or locked from one side:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;ai_no_open&amp;quot;&#039;&#039;&#039; If set to &amp;quot;1&amp;quot;, the AI will not try to open the door from this side (but will still walk through when the door is already open).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;ai_no_close&amp;quot;&#039;&#039;&#039; If set to &amp;quot;1&amp;quot;, the AI will not attempt to close the door from this side.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;ai_no_unlock&amp;quot;&#039;&#039;&#039; If set &amp;quot;1&amp;quot;, the AI will not be able to unlock the door from this side, but still use it when it is not locked.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;ai_no_lock&amp;quot;&#039;&#039;&#039; If this is set &amp;quot;1&amp;quot;, the AI will not lock the door from this side.&lt;br /&gt;
&lt;br /&gt;
===Door Controllers===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Available in TDM 2.02+&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can design a door so it&#039;s operated by buttons or levers or switches (aka &#039;&#039;controllers&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
A controller is simply an entity that targets the door.  Typical examples of entities that can be used are:&lt;br /&gt;
&lt;br /&gt;
* Buttons: atdm:mover_button&lt;br /&gt;
* Levers: atdm:switch_rotate_lever&lt;br /&gt;
* Switch: atdm:mover_lever&lt;br /&gt;
* Lock: atdm:froblock. (See also next section)&lt;br /&gt;
&lt;br /&gt;
1. Set up the door in the normal manner. It can be a rotating door, a sliding door, a locked door, etc.&lt;br /&gt;
&lt;br /&gt;
2. Turn off the &amp;quot;frobable&amp;quot; spawnarg on the door. (&amp;quot;frobable&amp;quot; &amp;quot;0&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
3. Create a controller entity on each side of the door. If you&#039;re setting up a locked door using atdm:froblock, there&#039;s no need to put any locking information on the controllers. When the game starts, it will transfer any locking information from the door to the controllers.&lt;br /&gt;
&lt;br /&gt;
4. Give each controller the door as a target.&lt;br /&gt;
&lt;br /&gt;
Both the player and any AI that wants to use the door will use the controllers to operate it. Any key, &amp;quot;can_unlock&amp;quot;, or lockpick settings you would normally use at the door are now used at the controllers.&lt;br /&gt;
&lt;br /&gt;
Controllers and &#039;&#039;door_handling_position&#039;&#039; entities can be used on the same door, but in that situation the &#039;&#039;door_handling_position&#039;&#039; entities don&#039;t define where the AI stands to operate the door. They simply provide the &amp;quot;ai_no_*&amp;quot; spawnargs that define AI behavior on each side of the door.&lt;br /&gt;
&lt;br /&gt;
If you wish, you could provide a controller on only one side of the door instead of both sides. Note that, since the door is not frobable, the player won&#039;t be able to operate the door from the non-controller side.&lt;br /&gt;
&lt;br /&gt;
====More about Using a Separate &amp;quot;Froblock&amp;quot; Lock Plate====&lt;br /&gt;
&#039;&#039;by Geep, 2021-22&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Froblock, just discussed as a controller method, actually predated the controller concept in TDM. Here we recap that earlier context, with an alternative treatment of highlighting, and thoughts on texturing and usage.&lt;br /&gt;
&lt;br /&gt;
Suppose you want to have a lock plate (typically mounted on a door frame or wall) that opens a nearby door, where the door and lock plate highlight separately. A traditional way is to adapt the &#039;&#039;froblock&#039;&#039; method described under the &amp;quot;Making your own&amp;quot; section of [[Containers, Chests, etc.]]&lt;br /&gt;
&lt;br /&gt;
Basically, your door is the &amp;quot;chest lid&amp;quot; (of class atdm:mover_door) and your lock is the &amp;quot;chest body&amp;quot; (of class atdm:froblock). Set the properties as described in the wiki. There is a stock texture (darkmod/door/keyhole_metal_001) you can use to decorate a surface of your lock plate, or a patch on it. This method is probably most apt for small hatches and grates designed for the player alone, and with no handles, or non-turning handles attached with &amp;quot;bind&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===AI and &#039;non-frobable&#039; Doors===&lt;br /&gt;
Be aware that the &#039;frobable&#039; spawnarg only applies to the player, not AI.  If you set a door to be non-frobable (i.e. &#039;frobable&#039; &#039;0&#039;), AI can still operate it by interacting directly with it, even if it has a controller.  For example they will do this if:&lt;br /&gt;
&lt;br /&gt;
* they are fleeing or chasing the player&lt;br /&gt;
* the door has a controller but the AI can&#039;t reach it (for example the controller is on the other side of the door)&lt;br /&gt;
&lt;br /&gt;
The best way to mitigate this is to use Door Handling Position entities (see above) with the &#039;ai_no_open&#039; spawnarg set on them. &lt;br /&gt;
&lt;br /&gt;
===AI locking doors behind them===&lt;br /&gt;
&lt;br /&gt;
If one AI is involved (no one else is in the queue), he&#039;ll lock it behind him if he had to unlock it in the first place.&lt;br /&gt;
&lt;br /&gt;
Prior to TDM 1.08, if more than one AI is using the door at the same time (there&#039;s a queue), the first AI unlocks the door, and the last AI through will only lock it if it&#039;s marked &amp;quot;should_always_be_locked&amp;quot; AND they have a &amp;quot;can_unlock&amp;quot; for that door or they have a key for that door. The last AI to use the door doesn&#039;t know that the first AI found it locked, because that info is kept per AI, and not per door. &lt;br /&gt;
&lt;br /&gt;
Starting in TDM 1.08, if the first AI in a door queue found the door locked, that information is remembered by the door and the last AI through uses it to relock the door, as long as they have a &amp;quot;can_unlock&amp;quot; for that door or they have a key for that door.&lt;br /&gt;
&lt;br /&gt;
In the rare case where a door is set up to use door-handling position entities (necessary for AI to use sliding doors), either or both of those entities can have the &amp;quot;ai_no_lock&amp;quot; spawnarg, which means AI aren&#039;t allowed to lock the door from that side.&lt;br /&gt;
&lt;br /&gt;
==Initially Blocking a Door - Partially or Fully==&lt;br /&gt;
&#039;&#039;by Geep 2021&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Suppose you have a door that you want to start out either as unopenable, or able to open just a crack, then later, after something happens, be fully openable and operational. One method known to work:&lt;br /&gt;
&lt;br /&gt;
* Create a moveable object that the opening door runs into and tries to push.&lt;br /&gt;
* Arrange that the far side of the moveable object is jammed against some immovable worldspawn.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s two specific examples that use a wooden plank moveable:&lt;br /&gt;
&lt;br /&gt;
* In &amp;quot;Perilous Refuge&amp;quot;, a plank blocks the door leading out of the player&#039;s starting location, until the player carries it away. &lt;br /&gt;
* At the end of &amp;quot;Away0&amp;quot; (WIP 2021), the player tries to open a door. But if preconditions aren&#039;t met, the occupant seems to let the door open only a crack and complains. Blockage is done by an unseen plank resting on the floor hitting a knob of worldspawn. Preconditions met causes a &amp;quot;$plank.remove()&amp;quot; script call.&lt;br /&gt;
&lt;br /&gt;
Other methods that you might think would work but don’t:&lt;br /&gt;
&lt;br /&gt;
* Block with a func_static object, or an unjammed moveable with &amp;quot;notpushable 1&amp;quot; set. In both cases, the door travels through the object.&lt;br /&gt;
* In advance, &amp;quot;grab&amp;quot; an unjammed moveable to make it appear &amp;quot;solid&amp;quot; to the physics engine. (This was tested by having the player manipulate it; if it had worked, a “grabber” script call might suffice.)&lt;br /&gt;
* Dynamically change the door’s &amp;quot;rotate&amp;quot; limit from script using &amp;quot;setSpawnArg&amp;quot;; this function would only work before you spawn the door, not afterwards.&lt;br /&gt;
&lt;br /&gt;
(Others possibilities not yet tested:&lt;br /&gt;
&lt;br /&gt;
* Change &amp;quot;rotate&amp;quot; using the &amp;quot;setKey&amp;quot; script function; for some spawnargs this works even after spawn.&lt;br /&gt;
* Create a moveable and bind it to the world entity.&lt;br /&gt;
* If you are mainly interested in initially blocking an AI from using a door: it&#039;s possible that the AI re-reads the spawnargs for what doors it&#039;s allowed to open. Try adding a frob Response to the key (Entity -&amp;gt; Stim/Response... -&amp;gt; Response) with an effect that sets the “can_unlock&amp;quot; spawnarg on that AI to &amp;quot;-&amp;quot;.)&lt;br /&gt;
&lt;br /&gt;
==Controlling a Door by Scripting==&lt;br /&gt;
&#039;&#039;by Geep 2021&#039;&#039;&lt;br /&gt;
===If Unlocked===&lt;br /&gt;
&lt;br /&gt;
Simply use, for example with a door named &#039;&#039;door1&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 $door1.Open();&lt;br /&gt;
 ...&lt;br /&gt;
 $door1.Close();&lt;br /&gt;
&lt;br /&gt;
Alternatively, toggle it open or closed with:&lt;br /&gt;
&lt;br /&gt;
 $door1.frob();&lt;br /&gt;
&lt;br /&gt;
If the door has &amp;quot;interruptable 1&amp;quot; (which is the default with atdm:mover_door), you can also frob() it twice to leave it ajar. Interpose and adjust a sys.wait(...) to tune it.&lt;br /&gt;
===If Locked===&lt;br /&gt;
&lt;br /&gt;
You need to unlock it first. Changing the door&#039;s &amp;quot;locked&amp;quot; spawnarg value won&#039;t work. Instead you will use:&lt;br /&gt;
&lt;br /&gt;
 $door1.Unlock();&lt;br /&gt;
&lt;br /&gt;
But there are complications. By default, the door has spawnarg &amp;quot;open_on_unlock 1&amp;quot;. So, assuming you didn&#039;t change that, you&#039;d think unlocking the door would open it. But this spawnarg will be ignored if the gamer has global menu option &amp;quot;Open Doors on Unlock&amp;quot; set to Off. Assuming you want to reliably have the door open, do this:&lt;br /&gt;
&lt;br /&gt;
 $door1.Unlock(); // MAYBE will open door too.&lt;br /&gt;
 sys.wait(3); // If so, wait for door to fully open. Value may need adjusting based on door&#039;s speed&lt;br /&gt;
 $door1.Open(); // Otherwise, open it now.&lt;br /&gt;
&lt;br /&gt;
The wait is added, because otherwise, the opening begun by Unlock may be stopped by Open with the door only partially open. (Probably an alternative to using sys.wait here is to zero the door&#039;s &amp;quot;interruptable&amp;quot; spawnarg.) &lt;br /&gt;
&lt;br /&gt;
==Doors as Triggers==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;by Ishtvan &amp;amp; greebo&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Doors (or any binary frob mover, buttons, levers, etc) now have the option to [[Triggers|trigger]] their target on closing or opening. (For definition purposes, a button is defined as &amp;quot;closed&amp;quot; in the state when it starts out and &amp;quot;open&amp;quot; in the state you press it down to. I know that&#039;s a little non-intuitive, but it came from deriving from doors).&lt;br /&gt;
&lt;br /&gt;
New spawnargs on frob movers:&lt;br /&gt;
;&amp;quot;trigger_on_open&amp;quot; :If set to 1, this binary mover will trigger its targets when it starts out completely closed and is opened.&lt;br /&gt;
;&amp;quot;trigger_when_opened&amp;quot;:If set to 1, this binary mover will trigger its targets when it is completely opened. Code defaults to 0.&lt;br /&gt;
;&amp;quot;trigger_on_close&amp;quot;:If set to 1, this binary mover will trigger its targets when it completely closes after being open.&lt;br /&gt;
&lt;br /&gt;
== Suspicious Doors ==&lt;br /&gt;
&lt;br /&gt;
If you give a door the spawnarg &#039;&#039;&#039;&amp;quot;shouldBeClosed&amp;quot; &amp;quot;1&amp;quot;&#039;&#039;&#039;, then AI will treat it as suspicious if they find the door open.&lt;br /&gt;
&lt;br /&gt;
Doors with that spawnarg should work like this:&lt;br /&gt;
&lt;br /&gt;
- an AI opening the door knows he&#039;s not to become suspicious if he opened the door&lt;br /&gt;
&lt;br /&gt;
- nearby AI alerted by the open door will also not react if they can see the door, and can see the AI that opened it&lt;br /&gt;
&lt;br /&gt;
- AI who come upon the open door later probably won&#039;t be able to see the AI that opened it, so they&#039;ll treat it as suspicious&lt;br /&gt;
&lt;br /&gt;
- if the AI who opened the door comes upon the door later, and it&#039;s still open, and no one&#039;s touched it since he opened it, he&#039;ll see his name on the door and won&#039;t become suspicious. &amp;quot;Oh, crap. I forgot to close it earlier.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
- If an AI comes upon an open door that should be closed, he should close it whether he becomes suspicious or not.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Post TDM 2.00:&#039;&#039;&#039;&lt;br /&gt;
-  AI turn to look at a door they see opening.  The player can crack open a suspicious door to peek out w/o grabbing the attention of a nearby AI. After 5s, the AI will notice the cracked open door. Non-suspicious doors can be cracked open indefinitely w/o nearby AI noticing.&lt;br /&gt;
&lt;br /&gt;
==Slanted or Tilted Doors==&lt;br /&gt;
Slanted or tilted doors can be made as follows:&lt;br /&gt;
&lt;br /&gt;
1) Place your door, preferrably one of the prefab doors, which have a model door and model handle and all the rotation spawnargs pre-set.&lt;br /&gt;
&lt;br /&gt;
2) rotate and place the door+handle model into place you want it to be. Now, if you use the door in the game, the door will rotate around the world z-axis, and not the door model z-axis (which is rotated).&lt;br /&gt;
&lt;br /&gt;
3) to get the door to rotate around the door model z-axis, you must place a model (any model will do, and it can be placed anywhere in the map). Rotate the new model into the same orientation your door model was rotated, i.e. if you door is rotated 45 degrees around the x-axis, do the same rotation on the new model.&lt;br /&gt;
&lt;br /&gt;
4) bind the doors on the new model. This makes the doors start rotating along the new model origin (which is rotated the same way as the doors).&lt;br /&gt;
&lt;br /&gt;
5) working slanted door.&lt;br /&gt;
&lt;br /&gt;
Do note, that all the rotated objects need to be models (suspicion, not tested). You can export DR built stuff into a model using the DR ase exporter script. For custom doors, remember that the exporter places the model origin at the map origin if you do not choose the &amp;quot;place origin in the middle of the object&amp;quot; option.&lt;br /&gt;
&lt;br /&gt;
Also note that the AI probably cannot use slanted doors and might get stuck (suspicion, not tested).&lt;br /&gt;
&lt;br /&gt;
There is a link to a test map here:&lt;br /&gt;
http://forums.thedarkmod.com/topic/9082-newbie-darkradiant-questions/?p=395486&lt;br /&gt;
&lt;br /&gt;
==Skins: A Wide Variety of Door Textures==&lt;br /&gt;
&lt;br /&gt;
This is to remind you that as with many Dark Mod models, there is a wide range of extras skins (textures) available for door models. There are now several basic door entities of different sizes so choose your size first. Then enter the spawnarg: skin with any temporary value. Now select it and click the skin button at the bottom of Dark Radiant&#039;s Entity Inspector and you will find a large of range of skin textures from which to select to give you a choice of appearances for your door.&lt;br /&gt;
&lt;br /&gt;
==Extra Notes==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;func_darkmod_door&#039;&#039; is no longer used (just in case you come across it in the Dark Mod forums or wiki.) &#039;&#039;&#039;&amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt;&#039;&#039;&#039; is the entity to use.&lt;br /&gt;
&lt;br /&gt;
{{tutorial-editing}}&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=Doors&amp;diff=34108</id>
		<title>Doors</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=Doors&amp;diff=34108"/>
		<updated>2025-11-06T20:23:00Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: /* Generic Version */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{todo}}&lt;br /&gt;
&#039;&#039;Written by Fidcal&#039;&#039; &#039;&#039;edit Baddcog&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Quick Summary==&lt;br /&gt;
&lt;br /&gt;
Quick way to get an unlocked door in your map:&lt;br /&gt;
&lt;br /&gt;
* Insert one of the prefab doors complete with handles and select its skin property and click the button to change its skin appearance to whatever you want. Set any other properties you need.&lt;br /&gt;
&lt;br /&gt;
Alternatively,&lt;br /&gt;
&lt;br /&gt;
* Create a door from the entity list&lt;br /&gt;
* Use the &amp;quot;skin&amp;quot; spawnarg on the door to change its appearance. &lt;br /&gt;
* Create a handle from the entity list&lt;br /&gt;
* Add the &#039;&#039;door_handle&#039;&#039; property to the door and give it the name of the handle&lt;br /&gt;
* To the door handle add the value frob_peer and use the name of the door.&lt;br /&gt;
* To open clockwise, change the &#039;&#039;rotate&#039;&#039; property from &amp;lt;code&amp;gt;0 90 0&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;0 -90 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
This tutorial explains how to put doors into your map using Dark Radiant, as well as adjust them and their properties.&lt;br /&gt;
&lt;br /&gt;
The rest of this tutorial assumes that you have a basic understanding of using DarkRadiant. If you haven&#039;t done so, please go read the [[Dark Radiant Must Know Basic Intro]] article first.&lt;br /&gt;
&lt;br /&gt;
Additionally:&lt;br /&gt;
&lt;br /&gt;
* Up, down, right, and left in Dark Radiant&#039;s &#039;&#039;top&#039;&#039; orthoview are regarded here as the standard map directions of North, South, East, and West where useful for clarity.&lt;br /&gt;
* Where the term &#039;&#039;brush&#039;&#039; is used with a door it mostly also applies to a door made up of a group of brushes and/or patches.&lt;br /&gt;
* Where the term &#039;&#039;door&#039;&#039; is used it often will also apply to any object you wish to rotate when frobbed, for instance an openable window, box lid, or even more exotic objects that the imaginative mapper might conceive like a signal, engine part, toy, or whatever. So long as it needs to turn or slide just a fixed amount when frobbed then return when frobbed again then the following applies.&lt;br /&gt;
&lt;br /&gt;
==Door types==&lt;br /&gt;
&lt;br /&gt;
All tangible objects in Dark Mod are &#039;&#039;entities&#039;&#039;, having either a pre-made model shape or else brush/patch(es). So there are two ways to create a door in Dark Radiant: as a model door or a textured brush door (or a hybrid of the two).&lt;br /&gt;
&lt;br /&gt;
Models are ready made door objects but cannot within Dark Radiant (at the time of writing) be resized, rescaled, cropped or clipped whereas brushes are very flexible in that respect and can be worked into custom shapes for your map, including secret doors that blend into walls and other surfaces.&lt;br /&gt;
&lt;br /&gt;
Most of the current door models are found in two places along with the door handles.&lt;br /&gt;
*Model Viewer: doors created from here will be static in the world and have no props other than material type.&lt;br /&gt;
You can add any props to them to make them working doors. If nothing else it is a good place to view the different size and skin options for the doors.&lt;br /&gt;
*Entity List: most of the door models can be found here. These doors have properties already assigned so they are ready to be used. Only one base door of each type is listed, create the size/hinge count door you want (2 hinge doors have a &#039;no hinge&#039; skin). You can choose a skin for the door once it has been created in the editor with the &amp;quot;skin&amp;quot; spawnarg (use the model name of the door you want, taken from the model list, as its value). This is the easiest way to create a door. The same goes for door handles.&lt;br /&gt;
&lt;br /&gt;
Remember also that door functions may be applied to objects other than doors, such as openable windows, drawbridges, gates, etc. In fact, anything that needs a partial rotation or slide when frobbed then return when frobbed again, such as a signal device. Lockboxes and chests use similar properties.&lt;br /&gt;
&lt;br /&gt;
You can create one door/handle set and copy/paste it, but you need to take great care that all the name props are changed to match in each clone. Otherwise you get handles that fly off when a distant door moves, and handles that don&#039;t move.&lt;br /&gt;
&lt;br /&gt;
==Creating a Door==&lt;br /&gt;
&lt;br /&gt;
Put simply, to make a door you will be creating an &#039;entity with model&#039; or &#039;entity with brush&#039; or some variation thereof.&lt;br /&gt;
&lt;br /&gt;
===Creating a Model Door===&lt;br /&gt;
&lt;br /&gt;
There are several approaches to making a model door; the simplest is to create a door from the entity list; or create a door from the model viewer (good for static unusable prop doors).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Entity List&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
*Deselect everything in editor by hitting the Esc button&lt;br /&gt;
*Right-click an ortho view and select Create Entity&lt;br /&gt;
*Navigate to darkmod/movers/&#039;&#039;atdm:door_...&#039;&#039;, choose the door you want&lt;br /&gt;
*Click Add&lt;br /&gt;
*To change its appearance, add a &amp;quot;skin&amp;quot; spawnarg to the door, with the value being the model name of the door you want.&lt;br /&gt;
&lt;br /&gt;
You now have a workable door in your level.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Model Viewer&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Right click in the orthoview, select &#039;&#039;Create Model&#039;&#039; then &amp;lt;code&amp;gt;darkmod&amp;lt;/code&amp;gt; and select a door.&lt;br /&gt;
* Note that you can left drag the image in the &#039;&#039;Choose Model&#039;&#039; dialog to rotate it around.&lt;br /&gt;
* Click [[Image:Button ok.png]] and you have a static door.&lt;br /&gt;
* If you want to make it work (openable, frobbable) then:&lt;br /&gt;
** Select the entity inspector,&lt;br /&gt;
** Select the top classname line so it highlights&lt;br /&gt;
** Select the func_static line in the input box &#039;&#039;below&#039;&#039; the properties window.&lt;br /&gt;
** Edit &amp;lt;code&amp;gt;func_static&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt;&lt;br /&gt;
** Click {{check}} or press {{key-enter}}&lt;br /&gt;
&lt;br /&gt;
Alternatively you can do it the old way:&lt;br /&gt;
&lt;br /&gt;
* Create any temporary brush&lt;br /&gt;
* Right click in orthoview and select &amp;lt;code&amp;gt;Create Entity&amp;lt;/code&amp;gt; then &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Left lick the model name line in the entity inspector.&lt;br /&gt;
* Below it on the &#039;&#039;Entity Inspector&#039;&#039; panel you should now see a button &#039;Choose Model&#039;&lt;br /&gt;
* Left click it, select a door model from the darkmod group.&lt;br /&gt;
* Note that you can left drag the image in the &#039;&#039;Choose Model&#039;&#039; dialog to rotate it around.&lt;br /&gt;
* The temporary brush was deleted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In all three instances, you now have a working door with default properties. &lt;br /&gt;
&lt;br /&gt;
Name your door by adding the prop (or modifing it) to name &#039;&#039;My_Door_1&#039;&#039;. You can use any name that you feel is appropriate but all doors with handles attached &#039;&#039;must&#039;&#039; have their own specific name. Use the name My_Door_1 for your first attempt as it will be referenced when you get around to attaching handles (see below).&lt;br /&gt;
&lt;br /&gt;
To add a handle and other adjustments, see [[#Customising and Adjusting Door Properties]] below.&lt;br /&gt;
&lt;br /&gt;
===Creating a Textured Brush Door===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tip:&#039;&#039;&#039; If unsure of size then you might insert a temporary human AI first to get a sense of height.&lt;br /&gt;
&lt;br /&gt;
==== The simplest brush door: ====&lt;br /&gt;
&lt;br /&gt;
* Drag out a new brush to the size required, eg, a seven foot high door is 84&amp;quot; x 1.1 = about 90 units in Dark Radiant.&lt;br /&gt;
* Give it a door texture from the texture browser (or wall texture for a secret door)&lt;br /&gt;
* Right click in orthoview and select &#039;&#039;Create Entity&#039;&#039; then &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You now have a working door but it will rotate around its center. To move the rotation point to where you want the door hinges to be:&lt;br /&gt;
* Select the door and press &#039;v&#039; or the &#039;&#039;Select Vertices&#039;&#039; button to enter vertex editing mode. The door&#039;s origin will show up as a small green square in the middle of the brush.&lt;br /&gt;
* In top-down orthoview, move the origin from the center to the corner of the brush. This is easiest in drag mode (&#039;q&#039; or the &#039;&#039;Resize&#039;&#039; button), although you can use translate mode (&#039;w&#039; or the &#039;&#039;Translate&#039;&#039; button) by manually selecting the vertex first.&lt;br /&gt;
&lt;br /&gt;
==== Multi-brush doors: ====&lt;br /&gt;
&lt;br /&gt;
More complex multi-brush doors can be created using the [[Clipper]] tool, CSG, etc. - this is not covered in this tutorial. Then assign &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt; for that whole brush structure. Also you can collect various brushes positioned together in relation to one another as needed, select them all, then assign &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt; for the group. All the brushes will be children of the &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt; entity and will rotate and be frobbable, etc. as one unit, as one door. To add further brushes or even model shapes later see the section on [[#Adding handles and other items to doors]].&lt;br /&gt;
&lt;br /&gt;
Name your door by adding the prop (or modifing it) to name My_Door_1. You can use any name that you feel is appropriate but all doors with handles attached must have their own specific name. Use the name My_Door_1 for your first attempt as it will be referenced when you get around to attaching handles (see below). (repeated from above in case you didn&#039;t choose to create a model door)&lt;br /&gt;
&lt;br /&gt;
=== Double Doors ===&lt;br /&gt;
Double doors are automatically recognised by the code when the doors are spawned. The prerequisite is that both doors are sharing/touching the same visportal. The spawnarg &#039;&#039;auto_setup_double_door&#039;&#039; (which defaults to &amp;quot;1&amp;quot;) will take care of setting up the open/lock peer relationship between the two doors. The doors will open/close and lock/unlock along with each other as a result.&lt;br /&gt;
&lt;br /&gt;
What happens behind the scenes: the doors are adding each other to their internal open_peer and lock_peer list, which causes the double doors to perform the same action when frobbed or used.&lt;br /&gt;
&lt;br /&gt;
Note that &#039;&#039;auto_setup_double_door&#039;&#039; will not set the frob_peer relationship, i.e. each door will frob-highlight on its own without highlighting the other door. You&#039;ll need to add that spawnarg manually if you want to highlight the entire double door as one.&lt;br /&gt;
&lt;br /&gt;
==Customising and Adjusting Door Properties==&lt;br /&gt;
&lt;br /&gt;
Handles, lockplates, etc. can be added to doors and door properties can be adjusted for rotation, sliding, locking, and more.&lt;br /&gt;
&lt;br /&gt;
Some of the door models have hinge plates and lockboxes that are reskinnable with a good variety of skins.&lt;br /&gt;
&lt;br /&gt;
===Door handles and other door attachments===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Summary: just add the property &#039;&#039;bind&#039;&#039; with the door&#039;s name to the attachment and position it where you want it on the door. If it&#039;s a &#039;&#039;atdm:mover_door_handle&#039;&#039; then it automatically will work as a handle but you can bind virtually anything.&#039;&#039;&#039;&lt;br /&gt;
You can add handles and other items to doors such that they move correctly with the door whether rotating, sliding, or both and even if the door is not vertical such as a skylight or trapdoor.&lt;br /&gt;
Handle models come in two types, &#039;&#039;single handles&#039;&#039; and &#039;&#039;double handles&#039;&#039;. A single handle is one sided, this means the handle will be inside the door or outside the door, but not both. A double handle has a lever on the inside of the door and a handle on the outside of the door. Each has benefits.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;Single door handles&#039;&#039;&#039;&#039;&#039;:&lt;br /&gt;
Single door handles can be used on a static door, a door that&#039;s just for show that no AI&#039;s or the player can use. In this case you should just create a door handle from the model viewer, it will be static and have no properties such as scripts. It is for looks only.  Note that TDM is trying to establish the expectation that decorative doors that cannot be opened do not have handles (though not all maps follow this).&lt;br /&gt;
&lt;br /&gt;
I will call this &#039;&#039;multiple handles&#039;&#039;, see more below.&lt;br /&gt;
&lt;br /&gt;
These can also be useful on brush doors created in the editor that may be very thin or very wide.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;Double door handles&#039;&#039;&#039;&#039;&#039;:&lt;br /&gt;
These are models have have a handle inside and outside. The bonus is that they only use one entity. Maps are limited to about 4,000 entities but when you count lights, AI, sound speakers, ect... you can run out of entities quickly on a large map. If you plan on building a large map this is the way to go, even in a small map they have benefits, namely that you only have to attach one handle per door.&lt;br /&gt;
&lt;br /&gt;
Whether you decide to use a single handle or a double handle you must first follow the instructions below and attach one handle first. If you choose a double handle, follow the instructions below and you are done. If you choose a single handle type follow the instructions then also follow the &#039;&#039;multiple handle&#039;&#039; instructions for the second handle.&lt;br /&gt;
&lt;br /&gt;
Both single and double handle types can be found in two places. The model viewer which will create a static model good for show, you can manually add props to make them work OR you can look in the entity browser.&lt;br /&gt;
Using a handle from the entity browser saves you a little bit of time as some props are already added, you just need to add the frob_peer names for the doors/handles and the door_handle name to the door.&lt;br /&gt;
&lt;br /&gt;
=== Adding a working model door handle===&lt;br /&gt;
&lt;br /&gt;
Quick summary:&lt;br /&gt;
* Create a model or brush handle and make it an &#039;&#039;atdm:mover_door_handle&#039;&#039; entity.&lt;br /&gt;
* Position it on your door.  Use the opposite side from the door&#039;s multicolor X-Y-Z indicator (highlight the door to see it) if it&#039;s not obvious which side it goes on.  &lt;br /&gt;
* &#039;&#039;&#039;Bind&#039;&#039;&#039; the handle to the door (bind &amp;lt;doorname&amp;gt;)&lt;br /&gt;
* It should now be a working handle though may need adjustments of rotation etc. see later. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Important: read preceding section on door handle types and performance issues first.&lt;br /&gt;
&lt;br /&gt;
This works with both a model door and a brush door:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rotation&#039;&#039;&#039;:&lt;br /&gt;
* By default the door handle entity rotates &#039;&#039;anti-clockwise&#039;&#039; (looked at from the front) then springs back. A &#039;&#039;double handle&#039;&#039; model is OK but two singles (see &#039;&#039;Multiple door handles&#039;&#039; below) need more care as only one is the functioning entity and the other is just attached to it. So anti-clockwise is fine for a door with its hinge on the left and the handle on the right - the handle will rotate down then spring back. If you put the functioning door handle on the other side you will have to change the default &#039;&#039;rotate&#039;&#039; property from -45 0 0 to 45 0 0. &#039;&#039;&#039;&#039;&#039;Therefore it is easier to generally put this handle on the side of the door where the hinge is on the left and the non-functioning attachment handle on the other side.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*If your door only needs one handle, eg, a cupboard door, and from outside its hinge is on the right then you will need to change the &#039;&#039;rotate&#039;&#039; property of the handle as described above.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;The functioning handle entity:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
* Create an entity door handle (movers folder) or create a brush or model handle and assign it the entity &#039;&#039;atdm:mover_door_handle&#039;&#039;.&lt;br /&gt;
* Position it where you wish on your door.&lt;br /&gt;
* &#039;&#039;&#039;Bind&#039;&#039;&#039; the handle to the door, by adding the &amp;quot;bind&amp;quot; spawnarg to the handle.&lt;br /&gt;
&lt;br /&gt;
You now have a working door handle with default properties.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Multiple door handles&#039;&#039;&#039;:&lt;br /&gt;
Now that you&#039;ve got a handle attached to one side of the door it is time to add one to the other side (unless you used a double handle).&lt;br /&gt;
* Create the new handle. The single handles come in left and right persuasions. A door needs a left facing handle on one side and a right facing handle on the other, so if you have already added the left handle create a right handle and line it up on the other side of the door.&lt;br /&gt;
* Name this handle. I prefer to keep a naming convention for each door and it&#039;s respective handles, it makes things alot easier. The door is named &#039;&#039;&#039;My_Door_1&#039;&#039;&#039;, the first handle is named &#039;&#039;&#039;My_Handle_1&#039;&#039;&#039; so name the second handle &#039;&#039;&#039;My_Handle_1_1&#039;&#039;&#039;. This will make it stay with the first handle in the entity list. This is important to keep organized. If you name it My_Handle_2 then when you get to another door named My_Door_2 you&#039;ll be confused.&lt;br /&gt;
* Place and &#039;&#039;&#039;bind&#039;&#039;&#039; that handle to your door.&lt;br /&gt;
&lt;br /&gt;
You now have two single door handles on either side of the door that rotate together as if they were physically attached.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add a brush to a brush door&#039;&#039;&#039;:&lt;br /&gt;
* Select the new brush &#039;&#039;and&#039;&#039; the brush door all together; &#039;&#039;the entity &#039;&#039;&#039;must&#039;&#039;&#039; be selected &#039;&#039;&#039;last&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
* Use {{menu|Edit|Reparent primitives}}. This ensures the parent entity adopts the new item(s).&lt;br /&gt;
* If you have trouble selecting them in the orthoview because other brushes, etc. get selected then try in the camera view or as a last resort move them temporarily to an open area (but keep them in the same positions relative to each other.) Use {{key-shift}}+{{LMB}} on new item(s) then {{key-shift}}+{{LMB}} on main entity. Once they are all selected, use the {{menu|Edit|Reparent primitives}}.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add &#039;&#039;model&#039;&#039; static items&#039;&#039;&#039;: knockers, hinges, static handles etc. to a &#039;&#039;Model Door&#039;&#039;:&lt;br /&gt;
* Select item&lt;br /&gt;
* Right click in orthoview and select &#039;&#039;Create Entity&#039;&#039; then &amp;lt;code&amp;gt;entity func_static&amp;lt;/code&amp;gt;&lt;br /&gt;
* Position it where you wish on your door.&lt;br /&gt;
* To synchronize this with your particular door you need to add the property &#039;&#039;bind&#039;&#039; and the individual door name to the brush entity. To do this...&lt;br /&gt;
** Select the model door.&lt;br /&gt;
** In the entity inspector, select the &#039;&#039;name&#039;&#039; line&lt;br /&gt;
** Select the bottom line in the input box &#039;&#039;below&#039;&#039; the properties window.&lt;br /&gt;
** Copy the name&lt;br /&gt;
** Deselect the door with {{key-esc}}&lt;br /&gt;
** Select the brush entity&lt;br /&gt;
** Add a property &amp;quot;bind&amp;quot; to it.&lt;br /&gt;
** Change the value of the property by pasting in the door name&lt;br /&gt;
** Click {{check}} or press {{key-enter}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add &#039;&#039;brush&#039;&#039; static items&#039;&#039;&#039;: knockers, hinges, static handles to a Model Door:&lt;br /&gt;
* This method is not ideal but it seems to work OK.&lt;br /&gt;
* Select the brush.&lt;br /&gt;
* Right click in orthoview and select Create Entity then &#039;&#039;atdm:mover_door_handle&#039;&#039;&lt;br /&gt;
* Position it where you wish on your door.&lt;br /&gt;
&lt;br /&gt;
To synchronize this with your particular door you need to add the property &#039;&#039;door_handle&#039;&#039; on the door, and give as the value the name of the brush you just created.&lt;br /&gt;
&lt;br /&gt;
This brush turns like a handle. To stop it:&lt;br /&gt;
&lt;br /&gt;
* Adding &#039;&#039;rotate 0 0 0&#039;&#039; or disabling the handle script won&#039;t help.&lt;br /&gt;
* Add a real working handle (as in the section above &#039;&#039;To add a working model door handle...&#039;&#039; and it must be added LAST.)&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want too see a real working handle added maybe try another tiny brush with the handle function and hide it inside the door?&lt;br /&gt;
&lt;br /&gt;
===Locking Doors===&lt;br /&gt;
&lt;br /&gt;
To lock a door check the &#039;&#039;show inherited properties&#039;&#039; in the entity inspector for a &#039;&#039;atdm:mover_door&#039;&#039; entity and you should see the &#039;&#039;locked&#039;&#039; property. Select it and in the input box below the properties you can change its value:&lt;br /&gt;
&lt;br /&gt;
* 0 = unlocked (default)&lt;br /&gt;
* 1 = locked&lt;br /&gt;
&lt;br /&gt;
If locked it will require an entity that is associated with it to be able to act as a key to unlock it.&lt;br /&gt;
&lt;br /&gt;
Currently door handles on locked doors will rotate when frobbed, they will bounce back though and the door will stay locked until unlocked.&lt;br /&gt;
&lt;br /&gt;
===Keys===&lt;br /&gt;
&lt;br /&gt;
Assigning specific keys to specific doors is simple.&lt;br /&gt;
&lt;br /&gt;
* It is recommended that you create an existing key entity. These keys have all required props, they just need to be named.&lt;br /&gt;
&lt;br /&gt;
Alternatively you can create a key from the Model Viewer and want it to be useable&lt;br /&gt;
* Make sure it has the properties:&lt;br /&gt;
 useable 1 [so it can be used by the door]&lt;br /&gt;
 frobable 1&lt;br /&gt;
 inv_name &amp;lt;unique name&amp;gt;&lt;br /&gt;
 inv_category Keys&lt;br /&gt;
 inv_target player1&lt;br /&gt;
 inv_icon guis/assets/hud/inventory_icons/&amp;lt;icon name&amp;gt;&lt;br /&gt;
 inv_stackable 0 or 1 where 1 can be used on all copies of the same key so they show as one entry in the inventory with a total.&lt;br /&gt;
&lt;br /&gt;
Add to the door the property &amp;lt;code&amp;gt;used_by&amp;lt;/code&amp;gt; with the name of the key as the value. Multiple keys can open the same door by using several &amp;lt;tt&amp;gt;used_by&amp;lt;/tt&amp;gt; spawnargs:&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;used_by&amp;quot;  &amp;quot;doorkey_1&amp;quot;&lt;br /&gt;
 &amp;quot;used_by1&amp;quot; &amp;quot;doorkey_2&lt;br /&gt;
&lt;br /&gt;
==== Keys Carried by AI ====&lt;br /&gt;
&lt;br /&gt;
So you have a door and you have a guard AI and you want the guard to be able to open/close/lock the door, but you also want the player to be able to pickpocket the key. Keys can be attached to AI in two ways.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The Def_Attach Method&#039;&#039;. This method is the best one for doors that you expect the AI to operate. It uses spawnargs to spawn the key at game start.&lt;br /&gt;
&lt;br /&gt;
*&amp;quot;def_attach6&amp;quot; &amp;quot;atdm:prop_silverkey&amp;quot; // the entity to spawn - in this case a key.&lt;br /&gt;
*&amp;quot;pos_attach6&amp;quot; &amp;quot;belt_back_right&amp;quot; // where the key will spawn on the Ai.&lt;br /&gt;
*&amp;quot;name_attach6&amp;quot; &amp;quot;door_key&amp;quot; // this gives &#039;attach6&#039; arg the name &amp;quot;door_key&amp;quot; and is the name the arg &amp;quot;used_by&amp;quot; will need, eg: &amp;quot;used_by&amp;quot; &amp;quot;door_key&amp;quot;&lt;br /&gt;
*&amp;quot;set inv_name on door_key&amp;quot; &amp;quot;Door key&amp;quot; // The name the key get when the play adds it to their inventory.&lt;br /&gt;
*&amp;quot;set name on door_key&amp;quot; &amp;quot;door_key&amp;quot; // here it gets a name to be used in the map in general.&lt;br /&gt;
&lt;br /&gt;
For more info on this method, see [[Attaching Props to AI]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The Bind Method&#039;&#039;. This lacks the animation finesse of def_attach, but does let you see the key in DR. The method is particularly helpful in, say, adding a second key to an AI in the back middle of a belt. The AI cannot use a bound key to open a locked door; the workaround is to fake it with &amp;quot;can_unlock&amp;quot; as discussed further below. Or to use bound keys mainly for items the AI will not attempt to open, such as hatches, duct covers, or chests.&lt;br /&gt;
&lt;br /&gt;
* Load a key entity&lt;br /&gt;
* Position where you want it in relation to the AI, and bind it to them (i.e., &amp;quot;bind&amp;quot; &amp;quot;&amp;lt;AIname&amp;gt;&amp;quot;)&lt;br /&gt;
* Add the spawnarg &amp;quot;bindToJoint&amp;quot; &amp;quot;Hips&amp;quot; (or another location like LeftHips_Dummy; see AI for list)&lt;br /&gt;
* Adjust existing spawnargs accordingly (that is, be sure the name and door&#039;s/chest&#039;s &amp;quot;used_by&amp;quot; match, if you aren&#039;t using a prefab chest with key). This is for the benefit of the player after pickpocketing the key; as stated above, the AI itself can&#039;t use it for unlocking.&lt;br /&gt;
&lt;br /&gt;
For more info on this method, see [[Attaching_Items]] and [[BindToJoint]].&lt;br /&gt;
&lt;br /&gt;
====Keys Carried by Player====&lt;br /&gt;
&lt;br /&gt;
With a door&#039;s key selected in your inventory and the door highlighted, you can...&lt;br /&gt;
* unlock it (which will also auto-open if enabled) by either frobbing it or hitting the Use key (typically U or Enter).&lt;br /&gt;
* lock (or relock) it via the Use key. Why do this? To avoid pursuit, or to lure guards into a room, and then lock them in (if they don&#039;t have a key or specific can_unlock powers). &lt;br /&gt;
&lt;br /&gt;
====Master Key for Testing====&lt;br /&gt;
&lt;br /&gt;
By default, ALL locks can be opened by any key named &#039;&#039;key_master&#039;&#039;. Just create a key in your map, name it &#039;&#039;key_master&#039;&#039; and it becomes a master key for use while testing. Add inv_map_start 1 to it so it is in the player inventory at game start. Remember to delete it when your mission is finished.&lt;br /&gt;
&lt;br /&gt;
====Automatically Removing Keys from Player Inventory After Use====&lt;br /&gt;
If a fan mission has a lot of keys it can clog up the player inventory. If the key is single-use, it can be useful to automatically remove it from the player inventory after use.  Below is a way to do it using a simple setup and a generic script function that can be used for multiple doors.&lt;br /&gt;
&lt;br /&gt;
=====Generic Version=====&lt;br /&gt;
&lt;br /&gt;
You&#039;ll need the following entities, preferably set up near each other in your map:&lt;br /&gt;
* The door entity itself&lt;br /&gt;
* A trigger_count entity&lt;br /&gt;
* An atdm:target_callscriptfunction entity&lt;br /&gt;
* some random entity for the target_callscriptfunction to target (explanation below)&lt;br /&gt;
&lt;br /&gt;
The below diagram shows the spawnargs and targeting required for the setup:&lt;br /&gt;
[[File:Key remove2.png|left|thumb]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
The script being called (&#039;openDoor&#039;) is defined in fms/&amp;lt;mapname&amp;gt;/maps/&amp;lt;mapname&amp;gt;.script and looks like this:&lt;br /&gt;
&lt;br /&gt;
 void openDoor(entity target, entity door, entity callscriptfunction)&lt;br /&gt;
 {&lt;br /&gt;
     string keyName = door.getKey(&amp;quot;used_by&amp;quot;);&lt;br /&gt;
     entity key = sys.getEntity(keyName);&lt;br /&gt;
     $player1.replaceInvItem(key, $null_entity);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Explanation as follows:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;For the door:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;trigger_on_open&#039;&#039;&#039; spawnarg: The door is configured to trigger its targets when it opens&lt;br /&gt;
* target &#039;&#039;&#039;trigger_count&#039;&#039;&#039; entity: this is the entity that is triggered when the door is opened&lt;br /&gt;
* &#039;&#039;&#039;used_by&#039;&#039;&#039; spawnarg: This names the key entity required for unlocking the door&lt;br /&gt;
* The other spawnargs are just the usual for setting the door as locked and unpickable&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;trigger_count entity:&#039;&#039;&#039;&lt;br /&gt;
* When triggered, this entity will in turn trigger the script that removes the key from the player inventory.&lt;br /&gt;
* &#039;&#039;&#039;count&#039;&#039;&#039; spawnarg: This is set to 1 because we only want the key removal script called once - the first time the player opens the door.&lt;br /&gt;
* this entity targets the atdm:target_callscriptfunction, which contains details of the script to execute&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;atdm:target_callscriptfunction entity:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;call&#039;&#039;&#039; spawnarg: This is the name of the script function to call&lt;br /&gt;
* &#039;&#039;&#039;foreach&#039;&#039;&#039; spawnarg: This version of the script event provides access to the &#039;activator&#039;, or the entity that triggered it (in this case, the door).  Using that information we can obtain the key name. See [[A to Z Scripting: Ways of calling a script#target_callscriptfunction|here]] for details.&lt;br /&gt;
* &#039;&#039;&#039;target any static entity&#039;&#039;&#039;: For this version of the script event to work, the target_callscriptfunction entity needs to target something.  This can be any static entity in the map (i.e. one that won&#039;t get removed or anything). I usually just target the nearest entity (e.g. a light or a lamp, or a model).  This provides no functionality in the context of this tutorial, it just satisfies the conditions of the script event.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The script:&#039;&#039;&#039;&lt;br /&gt;
* Pretty self-explanatory.  The script gets the name of the key entity via the &#039;&#039;&#039;used_by&#039;&#039;&#039; spawnarg on the door, retrieves the key entity, and then replaces it in the player inventory with a null entity, effectively removing it.&lt;br /&gt;
* Any door can use this script as its generic (although they will need their own trigger_count entities.  In theory they could share the same target_callscriptfunction entity, but that might become inconvenient - up to the mapper.&lt;br /&gt;
&lt;br /&gt;
=====Simpler, No-script Version=====&lt;br /&gt;
This is similar to above, but is more limited.  You need to hard-code the key name as a spawnarg on an atdm:target_itemremove entity as the key name can&#039;t be automatically determined like in the above script. This makes it slightly more error-prone as we&#039;re naming entities in more than one place, but ideal if you&#039;re uncomfortable with scripting.&lt;br /&gt;
&lt;br /&gt;
[[File:Key remove4.png|left|thumb]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Explanation as follows:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;atdm:target_itemremove entity:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;unique_item &#039;&#039;&#039; spawnarg: The name of the key to remove from the player inventory&lt;br /&gt;
&lt;br /&gt;
===Lockpicks===&lt;br /&gt;
&#039;&#039;by Baddcog&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
There are two lock pick types.&lt;br /&gt;
*&#039;&#039;&#039;s&#039;&#039;&#039;=snake&lt;br /&gt;
*&#039;&#039;&#039;t&#039;&#039;&#039;=triangular&lt;br /&gt;
&lt;br /&gt;
A lock can be set with many pins. Each pin has a click sequence and each needs a designated lockpick type (see above). Keep in mind that the lockpicking in The Darkmod is much more involved than in T2 or T3. The player has to listen to sounds or watch a handle or lockbar to know when a lock is pin is picked.&lt;br /&gt;
&lt;br /&gt;
This means that authors can be very evil and really frustrate the player, in which case their missions will probably not be played. So be nice to the player and don&#039;t waste your time. Use simple locks for the most part and save complicated locks for important sections and to build tension. Don&#039;t make the player have 20 pins to pick all with different lockpicks. In most cases 1 or 2 pins will suffice and it isn&#039;t necessary to use both lockpicks on every lock.&lt;br /&gt;
Also try to include a lock lever on lockboxes or chests, door handles will rotate as the pins are being picked. This gives the player visual clues to help with the picking (and essential in noisy environments where you can&#039;t hear the clicks.)&lt;br /&gt;
IMO this system is a huge leap foward for lockpicking but also has the ability to completely frustrate the player as stated above. Keep this in mind when designing your lockpick systems.&lt;br /&gt;
&lt;br /&gt;
These props go on the door itself, or the lid of a chest, eg,&lt;br /&gt;
*&#039;&#039;&#039;lock_pins&#039;&#039;&#039; 1327&lt;br /&gt;
*&#039;&#039;&#039;lock_picktype&#039;&#039;&#039; stts&lt;br /&gt;
&lt;br /&gt;
The lock_pins property specifies how many pins each lockpicktype has.&lt;br /&gt;
The lockpick_type property specifies how many times the player has to switch picks and which pick they have to use. You can see there must always be an equal number of lock_pins and lock_picktypes specified&lt;br /&gt;
&lt;br /&gt;
So looking at the example above we have lockpick_type s(snake), t(triangular), t(triangular), and s(snake). The player will have to use these lockpicks in this order. Once the snake lockpick&#039;s pins are open the player can advance to the triangular pick and so forth.&lt;br /&gt;
5 is added to every click sequence so 5 is the minimum click pattern even if you set it to 0.&lt;br /&gt;
In the example above the lockpins specify in order which pick types have how many pins, so the s pick has 1 + 5 = 6 clicks, the t pick has 8 and so on.&lt;br /&gt;
The above is a difficult lock and to avoid annoying the player it is best only used rarely on a special lock like an important big vault door. Ordinary footlockers and common doors can be just 1 or 2 click sequences, eg, lock_pins 2 and lock_picktype t means the player uses one pick and listens for the end of one sequence of 7 clicks.&lt;br /&gt;
&lt;br /&gt;
lockpick_rotate - is placed on the door. It is the amount the visible rotating handle or pin rotates while picking. For a rotating handle or lockbar normally ignore this and leave the default. During lockpicking it oscillates and progresses to the normal full turn of the handle. Example 0 45 0.&lt;br /&gt;
&lt;br /&gt;
lockpick_translate - is placed on the door. It is the amount the visible handle or pin moves in a straight line while picking. Use this if you have eg, a lockbar that you want to move in a straight line and not rotate, eg sliding catch. Example 0 -5 0&lt;br /&gt;
&lt;br /&gt;
By default, doors are pickable. If you don&#039;t set up the above lockpick spawnargs then it can&#039;t be picked. So there is normally no need to enable lockpicking - just set up the above spawnargs. There is a &#039;&#039;pickable&#039;&#039; spawnarg set to 1 by default. If set to 0 then the door becomes unpickable. But hard to think of an application except in testing or perhaps a special custom situation where it is switched by script perhaps.&lt;br /&gt;
&lt;br /&gt;
===Open, Partially Open, or Closed Door at Game Start===&lt;br /&gt;
&lt;br /&gt;
By default, doors are closed at game start. If you want a door to be already open or partially open then do the following.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note well: Create all doors in their &#039;&#039;closed&#039;&#039; position. Adjust as follows and they will automatically be at the open position when game starts.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Already Open Rotating Door:&lt;br /&gt;
* Select the door.&lt;br /&gt;
* Select the entity inspector&lt;br /&gt;
* Check &#039;&#039;show inherited properties&#039;&#039;&lt;br /&gt;
* Select the &#039;&#039;open&#039;&#039; property&lt;br /&gt;
* Edit the value to 1 in the input box below and tick the check button&lt;br /&gt;
* The door will now be fully open at game start.&lt;br /&gt;
&lt;br /&gt;
* If you want it only partly open:&lt;br /&gt;
* Make sure its &#039;&#039;open&#039;&#039; property is set to 1 as above.&lt;br /&gt;
* Right click the entity inspector and select &#039;&#039;add property&#039;&#039; &lt;br /&gt;
* Click the + sign on the left of the top line where atdm:mover_door is listed to open the folder. (if atdm:mover_door is not listed then the entity was likely changed from eg, func_static. If so, save the map and reload to update the add property list)&lt;br /&gt;
*  scroll down, select &#039;&#039;start_rotate&#039;&#039; then click {{ok}}&lt;br /&gt;
* This adds it to the property list.&lt;br /&gt;
* Now select &#039;&#039;start_rotate&#039;&#039; in the property list.&lt;br /&gt;
* Edit the bottom line of the input box &#039;&#039;below&#039;&#039; the properties window to the angle you want in the same form as described in the &#039;&#039;Rotate Direction and Open Angle&#039;&#039; section. So for example, to have a door that has a fully open default &#039;&#039;rotate&#039;&#039; value of 0 90 0 to start only half open you would give it a &#039;&#039;start_rotate&#039;&#039; value of 0 45 0. &lt;br /&gt;
* In a similar way add the property &#039;&#039;first_frob_open&amp;quot;.&lt;br /&gt;
* Set it to 1 and a partly open door should then open fully on the first frob.&lt;br /&gt;
* Set it to 0 and a partly open door should close on the first frob.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Already Open Sliding Door:&lt;br /&gt;
* Select the door.&lt;br /&gt;
* Select the entity inspector&lt;br /&gt;
* Check &#039;&#039;show inherited properties&#039;&#039;&lt;br /&gt;
* Select the &#039;&#039;open&#039;&#039; property&lt;br /&gt;
* Edit the value to 1 in the input box below and click {{check}} or press {{key-enter}}&lt;br /&gt;
* The door will now be fully open at game start.&lt;br /&gt;
&lt;br /&gt;
* If you want it only partly open:&lt;br /&gt;
* Right click the entity inspector and select &#039;&#039;add property&#039;&#039; &lt;br /&gt;
* Make sure its &#039;&#039;open&#039;&#039; property is set to 1&lt;br /&gt;
* Click the + sign on the left of the top line where atdm:mover_door is listed to open the folder.&lt;br /&gt;
*  scroll down, select &#039;&#039;start_position&#039;&#039; then click OK. (if atdm:mover_door is not listed then the entity was likely changed from eg, func_static. If so, save the map and reload to update the add property list)&lt;br /&gt;
* This adds it to the property list.&lt;br /&gt;
* Now select &#039;&#039;start_position&#039;&#039; in the property list.&lt;br /&gt;
* Edit the bottom line of the input box &#039;&#039;below&#039;&#039; the properties window to the position you want in the same form as described in the &#039;&#039;Sliding (Translation) Amount and Direction&#039;&#039; section. So for example, to have a door that has a fully open default &#039;&#039;translate&#039;&#039; value of 0 50 0 to start only half open you would give it a &#039;&#039;start_position&#039;&#039; value of 0 25 0.&lt;br /&gt;
* In a similar way add the property &#039;&#039;first_frob_open&amp;quot;.&lt;br /&gt;
* Set it to 1 and a partly open door should then open fully on the first frob.&lt;br /&gt;
* Set it to 0 and a partly open door should close on the first frob.&lt;br /&gt;
&lt;br /&gt;
===Rotation Centre, Pivot, Hinge point===&lt;br /&gt;
&lt;br /&gt;
The centre of rotation of a door is at the origin point of its entity and the door rotates with reference to the orientation of that origin point, not the world map. See &#039;&#039;Rotate Direction...&#039;&#039; for more about that. This section only deals with the &#039;&#039;position&#039;&#039; of the rotation centre in the door.&lt;br /&gt;
&lt;br /&gt;
Model Door Centre of Rotation:&amp;lt;br&amp;gt;&lt;br /&gt;
The centre of rotation of a model door cannot be changed within Dark Radiant. Because a model door rotates around the centre &#039;spine&#039; of its back edge this will cause clipping (penetration into solid) as in this example (where the door is set to open to 89 degrees for clarity):&amp;lt;BR&amp;gt;[[Image:modelClipping.jpg]]&amp;lt;BR&amp;gt; So care is needed with placement. You will not normally position a door right next to a wall as in the example but against a shallow frame so clipping will barely be noticeable but either way it can be fixed. You can correct it by adding a translation (see &#039;&#039;Sliding (Translation) Directions&#039;&#039;) value of half the door width in the direction of the door handle. This will gently move the door out as it rotates to clear any solid on that side as in this diagram:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:DoorClip.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
Half a door width will typically be about 2. Any &#039;attachments&#039; such as door handles will still synchronize with the door movement whether the door is rotating, sliding, or both.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Brush Door Centre of Rotation:&amp;lt;br&amp;gt;&lt;br /&gt;
The centre of rotation of a brush door &#039;&#039;can&#039;&#039; be changed. The default origin point of a brush is at its centre. Therefore a default rotating brush door will rotate around its centre when you first create it. So, mappers will commonly need to move that rotation point to a corner or even to some other offset position for example, for an openable window using the door function.&lt;br /&gt;
&lt;br /&gt;
Put simply, to move the rotation point of a brush door you need to move the entity origin relative to the brush(es.)&lt;br /&gt;
&lt;br /&gt;
Moving the entity origin (centre of rotation) relative to a brush door:&lt;br /&gt;
&lt;br /&gt;
* Select the brush door&lt;br /&gt;
* Select &#039;&#039;Vertices mode&#039;&#039; (default shortcut key is {{key|name=V}} or button on top toolbar &#039;Select Vertices&#039;)&lt;br /&gt;
* Drag the door&#039;s entity origin to the point where you want the door to rotate. This should be on the corner on the leading edge side (the side to where the door is opening.) to avoid clipping as in this diagram....&lt;br /&gt;
[[Image:getCorner.jpg]]&lt;br /&gt;
* You should now find that door rotates around that point.&lt;br /&gt;
&lt;br /&gt;
===Rotate Direction and Open Angle===&lt;br /&gt;
&lt;br /&gt;
By default, rotating doors open anti-clockwise (viewed from above) by 90 degrees from the start orientation. If you want to change this edit the &#039;&#039;rotate&#039;&#039; property in the entity inspector. Don&#039;t confuse this &#039;&#039;rotate&#039;&#039; property with the &#039;&#039;rotation&#039;&#039; property. In the entity inspector remember that to see the inherited rotate property you must check the box &#039;Show inherited properties&#039;.&lt;br /&gt;
&lt;br /&gt;
The three values shown in the rotate property are degrees from the closed position around Y Z X (absolute map axes Front, Top, Side views in DR&#039;s ortho view.)&lt;br /&gt;
&lt;br /&gt;
* Positive Y = Open clockwise (Dark Radiant grid front view, looking north)&lt;br /&gt;
* Negative Y = Open anti-clockwise (Dark Radiant grid front view, looking north)&lt;br /&gt;
&lt;br /&gt;
* Positive Z = Open anti-clockwise (Dark Radiant grid top view, looking down)&lt;br /&gt;
* Negative Z = Open clockwise (Dark Radiant grid top view, looking down)&lt;br /&gt;
&lt;br /&gt;
* Positive X = Open anti-clockwise (Dark Radiant grid side view, looking west)&lt;br /&gt;
* Negative X = Open clockwise (Dark Radiant grid side view, looking west)&lt;br /&gt;
&lt;br /&gt;
There is a problem when you come to rotations that are not around the main Y Z X axes of the map, for instance a drawbridge that lowers down to the south east. You might think you can combine Y Z X values to get the result you want - and this can be done (for south east use 45 45 90) but it is a bit of a kludge and the drawbridge twists eccentrically as it lowers (though it arrives correctly!)&lt;br /&gt;
&lt;br /&gt;
The values are in the range -179 to +180. Positive values give an anti-clockwise opening rotation (looking down from above) and negative values give a clockwise opening rotation. The value 180 is unique in that it continues in an anti-clockwise rotation when closing rather than returning clockwise so might be used if you can think of some object that might need such a motion when frobbed!&lt;br /&gt;
&lt;br /&gt;
Edit the rotate value by selecting it and using the input box at the bottom and clicking the check(tick) button. That will change the angle the door will open to. Note that the line with the original default of 0 90 0 will still be there but your new entry will be added on a separate line and that is the one that will work in the game. CAUTION: when adjusting later make sure you have your new line selected and not the original! If you do it will appear to change but your first setting will remain unaltered.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
* 0 90 0 = Opens anti-clockwise round the entity&#039;s &#039;vertical&#039; to 90 degrees - typical default vertical door.&lt;br /&gt;
* 0 0 90 = Lowers a drawbridge from the entity &#039;vertical&#039; to horizontal.&lt;br /&gt;
* 0 0 -45 = Opens clockwise by 45 degrees viewed from the east side. This might suit a skylight in a sloping roof.&lt;br /&gt;
&lt;br /&gt;
&#039;rotate&#039; cannot be combined with translate motions (see [[#Sliding (Translation) Amount and Direction]]) in one door; you need to bind one door to another and link they by targetting one to the other. By that means you can produce exotic and useful motions. A door opening against an upward-sloping floor can thus have a &#039;&#039;lifting hinge&#039;&#039; and raise up slightly to clear the floor; a door can rotate towards you and slide back to one side very effectively.&lt;br /&gt;
&lt;br /&gt;
===Sliding (Translation) Amount and Direction===&lt;br /&gt;
&lt;br /&gt;
By default a Dark Mod door will rotate open. For most sliding doors you want to stop them rotating as well as make them slide. You cannot delete (remove) the &#039;&#039;rotate&#039;&#039; property - you have to set the &#039;&#039;rotate&#039;&#039; property to 0 0 0 to stop a door rotating (see &#039;&#039;Rotate Direction and Open Angle&#039;&#039;.)&lt;br /&gt;
&lt;br /&gt;
Now edit the &#039;&#039;translate&#039;&#039; property value by selecting it (remember to have inherited properties box checked) and using the input box at the bottom and clicking the check(tick) button. That will change the distance the door will slide to. Note that the line with the original default of 0 0 0 will still be there but your new entry will be added on a separate line and that is the one that will work in the game. CAUTION: when adjusting later make sure you have your new line selected and not the original! If you do it will appear to change but your first setting will remain unaltered.&lt;br /&gt;
&lt;br /&gt;
Typically (but not always) you will want your sliding door to slide the width of the door. The three values in the translate property by default are 0 0 0 and are X Y Z &#039;&#039;absolute map&#039;&#039; values (irrespective of door orientation) where:&lt;br /&gt;
&lt;br /&gt;
* Positive X = Slide East (Right side of Dark Radiant grid in top view)&lt;br /&gt;
* Negative X = Slide West (Left side of Dark Radiant grid in top view)&lt;br /&gt;
* Positive Y = Slide North (top of Dark Radiant grid in top view)&lt;br /&gt;
* Negative Y = Slide South (bottom of Dark Radiant grid in top view)&lt;br /&gt;
* Positive Z = Slide Up (Top of Dark Radiant grid in side views)&lt;br /&gt;
* Negative Z = Slide Down (Bottom of Dark Radiant grid in side views)&lt;br /&gt;
&lt;br /&gt;
So for a 50 unit wide door you want to slide fully to the east you would use 50 0 0 for the translate property values. A 100 unit portcullis sliding vertically up would need 0 0 100 to be fully raised.&lt;br /&gt;
&lt;br /&gt;
=== Doors Collision/Push Behaviour ===&lt;br /&gt;
Doors push all entities by default, except for the player. Doors will also stop moving when anything blocks their movement. However, this default behaviour can be changed by setting appropriate spawnargs:&lt;br /&gt;
&lt;br /&gt;
Set &#039;&#039;&#039;push_player&#039;&#039;&#039; to &#039;&#039;&#039;1&#039;&#039;&#039; to let the player be pushed by this door:&lt;br /&gt;
 &amp;quot;push_player&amp;quot;  &amp;quot;1&amp;quot;  // Push the player too (default is off)&lt;br /&gt;
&lt;br /&gt;
By default &#039;&#039;&#039;stop_when_blocked&#039;&#039;&#039; is set to 1 and if a door is blocked by an entity then even if the entity is removed afterwards, the door stays where it is. The next frob will close the door.&lt;br /&gt;
&lt;br /&gt;
Set &#039;&#039;&#039;stop_when_blocked&#039;&#039;&#039; to &#039;&#039;&#039;0&#039;&#039;&#039; to prevent the door from ending the opening sequence when anything blocks its way. It will still pause - but continue to open if the block is removed.&lt;br /&gt;
 &amp;quot;stop_when_blocked&amp;quot;   &amp;quot;0&amp;quot;  // door keeps moving after being blocked (default is off)&lt;br /&gt;
With this setting, doors will still stop at blocking entities (the player, for instance), but will continue to move when the entity moves out of the way.&lt;br /&gt;
&lt;br /&gt;
There is another spawnarg which stops a door pushing a moveable. Apply this to the &#039;&#039;moveable&#039;&#039;, not the door...&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;notPushable&amp;quot;   &amp;quot;1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Door Sounds===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are multiple ways to put sounds on doors.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_open&#039;&#039; &amp;lt;br&amp;gt; &lt;br /&gt;
Sound is triggered as the door begins to open.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_opened&#039;&#039; &amp;lt;br&amp;gt; &lt;br /&gt;
Sound is triggered when the door finishes opening. Defaults to &amp;quot;nosound&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_move&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
The sound plays while the door moves.  Defaults to &amp;quot;nosound&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_close&#039;&#039;  &amp;lt;br&amp;gt;&lt;br /&gt;
Sound is triggered as the door finishes closing.&lt;br /&gt;
&lt;br /&gt;
The following sounds should be left on the default sound in most cases so players clearly know what is going on:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_locked&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
The sound played when a player or an AI tries to open a locked door.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_unlock string&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
The sound played when a door is unlocked.&lt;br /&gt;
&lt;br /&gt;
You can silence any of these sounds by setting the following properties as shown:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_open nosound&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;snd_close nosound&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Don&#039;t just use a dash - as it seems to cause a sound of its own.&lt;br /&gt;
&lt;br /&gt;
===Sound Propagation through Doors and Doorways===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This information will change significantly with the release of 2.0.  See&#039;&#039; [[Controlling Sound Loss Across Portals]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The sound volume reduction to the player (ie, the sound the player hears) is fixed and constant in a cvar which adds a distance factor to the original sound. It is recommended that you do not change that because it will affect other FMs. Currently there is no way to change the way that sound to the player is reduced through doors and doorways.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sound propagation to AI, eg, impact sounds or guard yells is treated separately:&lt;br /&gt;
&lt;br /&gt;
Sound propagation to AI relies on visportals. For details study [[Sound Propagation: Part 1]] and [[Sound Propagation: Part 2]] as well as [[Visportals]] This tutorial will just cover the relevant sound and sound propagation &#039;&#039;properties&#039;&#039; of doors. If you set the &#039;&#039;show inherited properties&#039;&#039; box in the entity inspector you can see them as described here.&lt;br /&gt;
&lt;br /&gt;
Remember, the following have no effect on what the player hears through a door or doorway.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;loss_open&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Drop in sound volume in dB propagated to AI (not player) when going through an open door. (default 1dB)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;loss_closed&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Drop in sound volume in dB propagated to AI (not player) when going through a closed door. (default 15dB) You would want to set this very high to block all sound with a thick door but very low for a barred gate for example.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;loss_double_open&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Drop in sound volume in dB propagated to AI (not player) when going through double doors when only one is open. (default 1dB)&lt;br /&gt;
&lt;br /&gt;
There are also various sound properties for lockpicking:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;snd_lockpick_pin_1 through 14&#039;&#039; and &#039;&#039;snd_lockpick_pin_success&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Allowing the Player to Interrupt Door Motion===&lt;br /&gt;
&lt;br /&gt;
The door property &#039;&#039;interruptable&#039;&#039; determines whether a door can be stopped by frobbing while it is opening or closing. It is enabled (i.e., set to 1) by default. Then the player, by frobbing to start the normal opening, then frobbing again to interrupt, can open a door to any position, e.g., slightly ajar to peek through. Another frob will begin closing, and so on with any additional frobs to stop/reverse-direction.&lt;br /&gt;
&lt;br /&gt;
Be aware that an rotating-style door, when left ajar, will subsequently open or close more slowly than normal in an angular-velocity sense. It instead takes the same time as a full (uninterrupted) opening or closing would take in seconds, as given by &#039;&#039;move_time&#039;&#039; discussed next.&lt;br /&gt;
&lt;br /&gt;
===Speed of Door Opening and Closing===&lt;br /&gt;
&lt;br /&gt;
Rotating Door Speed:&amp;lt;br&amp;gt;&lt;br /&gt;
The time a rotating door takes to open or close is set in the &#039;&#039;move_time&#039;&#039; property, no matter what its maximum open angle may be. So with rotation set at, say, 150 degrees the door just opens faster than at, say, 80 degrees. To change this value, make sure the door is selected then...&lt;br /&gt;
&lt;br /&gt;
* Right click the entity inspector and check &#039;&#039;show inherited properties&#039;&#039;&lt;br /&gt;
* Scroll down, select &#039;&#039;move_time&#039;&#039;&lt;br /&gt;
* Edit the second line of the input box &#039;&#039;below&#039;&#039; the properties window to the time you want.&lt;br /&gt;
* The time is in seconds and decimal fractions can be used. The default is currently 1.75 seconds.&lt;br /&gt;
&lt;br /&gt;
Sliding Door Speed:&amp;lt;br&amp;gt;&lt;br /&gt;
The speed of a sliding door is set in the &#039;&#039;translate_speed&#039;&#039; property. To add this, make sure the door is selected then...&lt;br /&gt;
&lt;br /&gt;
* Right click the entity inspector and check &#039;&#039;show inherited properties&#039;&#039;&lt;br /&gt;
* Scroll down, select &#039;&#039;translate_speed&#039;&#039;&lt;br /&gt;
* Edit the second line of the input box &#039;&#039;below&#039;&#039; the properties window to the speed you want.&lt;br /&gt;
* The speed is in Dark Radiant grid units per second.&lt;br /&gt;
* The default is 0 and if set to this then the door slides open in one second whatever the distance, great or small.&lt;br /&gt;
* CAUTION: It is assumed &#039;&#039;translate&#039;&#039; has been changed from its default value of 0 0 0. If not, a non-zero &#039;&#039;translate_speed&#039;&#039; may cause problems.&lt;br /&gt;
&lt;br /&gt;
===Visportals and Doors===&lt;br /&gt;
&lt;br /&gt;
A visportal face surrounded by solid at its edges and in contact with a door is closed when the door is closed and enabled when the door is open. In most cases you will place a visportal in contact with a working door unless you can see through the door (such as a true glass door or barred gate*.) For full details see [[Visportals]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;*As of 2.0 it is possible to make visportals that remain transparent when closed for gates and windows.  See&#039;&#039; [[Controlling Sound Loss Across Portals]]&lt;br /&gt;
&lt;br /&gt;
==Auto-Closing/Opening Doors==&lt;br /&gt;
Doors that automatically close after being open for some time are easy to setup: Each frobmover entity supports these spawnargs:&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;auto_close_time&amp;quot;:Set this to something &amp;gt;= 0 to let the mover automatically close (again) after this time when being fully opened (measured in seconds). Defaults to -1, which means &#039;do not autoclose&#039;. The event is also activated when the mover starts at the open position at map start.&lt;br /&gt;
;&amp;quot;auto_open_time&amp;quot;:&amp;quot;Set this to something &amp;gt;= 0 to let the mover automatically open (again) after this time when being fully closed (measured in seconds). Defaults to -1, which means &#039;do not autoopen&#039;. The event is also activated when the mover starts at the closed position at map start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Before auto_close_time and the AI Door Management spawnargs next were provided, a more laborious method was used to auto-close doors as if AI were closing doors behind them. Hit &amp;quot;Expand&amp;quot; to review it.&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;I have one door that I particularly want the AI to close as there is a bit of frame lag inside if not. So I set this up and it works good as an auto-closing door - not as good as a true AI closing door as it will auto close when the player goes through as well but it does look very effective to see AI going through and closing the door behind them. Not tested exhaustively so I don&#039;t know if there could be any downside. Here&#039;s what to do....&lt;br /&gt;
&lt;br /&gt;
First a quick summary to make it more clear:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;A trigger_relay is used both as a relay AND carries a stim. We put the trigger_relay with its stim in the path of the open door. The door has a response property. When it opens and contacts the stim its response is to send a signal back to the relay. The relay pauses then closes the door...&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* First, optionally give your door a suitable name like autodoor1, whatever.&lt;br /&gt;
* Copy that name to the clipboard.&lt;br /&gt;
&lt;br /&gt;
Next we need a relay with a delay:&lt;br /&gt;
&lt;br /&gt;
* Create entity &amp;gt; darkmod &amp;gt; trigger_relay&lt;br /&gt;
&lt;br /&gt;
* Place it roughly at the position the door will be at when open and to be on the safe side 3/4th of the way to the far end of the door (not the hinge end) to give max distance from the close door.&lt;br /&gt;
&lt;br /&gt;
* Add the property &#039;target&#039; and paste in the door name you just copied.&lt;br /&gt;
&lt;br /&gt;
* Give the relay itself a name, eg, autoDoor_relay_1, and copy that name to the clipboard, you&#039;ll need that too in a bit.&lt;br /&gt;
&lt;br /&gt;
* Add the property delay and the value 3 - this is the delay in seconds before the door will close; 3 seems about right but 2 might be worth a try because to that 3 is added a random value between 0 to 0.5 seconds from the Time Interval we entered for the stim firings.&lt;br /&gt;
&lt;br /&gt;
* Add the property &#039;wait&#039; and the value 3. This is the time before it can work again in seconds. If you set it too low then in theory the door might trigger again but in this situation I don&#039;t think it&#039;s possible. Too long, eg, one minute, and it won&#039;t work if the AI goes back through the door before then. If this value is -1 then the whole thing will only work ONCE so might be used for an AI who goes through once, closes it behind him, but you don&#039;t want it to be an autodoor thereafter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That&#039;s the relay, now we add a stim to it:&lt;br /&gt;
&lt;br /&gt;
* Still with the trigger relay selected, go to {{menu|Entity|Stim/Response}}&lt;br /&gt;
&lt;br /&gt;
* Custom stim tab.&lt;br /&gt;
&lt;br /&gt;
* Click Add stim type, select the new custom stim type you just made at the bottom of the list and type in eg, autoDoorStim at top right in the input box.&lt;br /&gt;
&lt;br /&gt;
* Click the stim tab and the little drop down arrow against the &#039;type&#039; selector at bottom left and you should see your new custom stim name. Select it.&lt;br /&gt;
&lt;br /&gt;
* Select the new autoDoorStim in the list and on the right you need only type in the radius box 15.0 There is quite a lot of room for error. I had it working on 10 and also on 25. The value should be less than the distance to the closed door else it will trigger open! But no so small that the door might not reach it.&lt;br /&gt;
&lt;br /&gt;
* Select the check box for Time Interval and enter 500 (millisecs.) This is so it doesn&#039;t keep firing more frequently than is necessary. This stim will be firing all through your mission whether the door is used or not so if you had dozens of these then maybe it would affect performance. Too big a number and there may be a long delay before the door shuts - but it will be random depending on the next time the stim happens to fire. We&#039;ll control the delay we want more precisely later.&lt;br /&gt;
&lt;br /&gt;
* Click {{ok}} to confirm it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That&#039;s the stim set up, now for the response to it which is put on the door....&lt;br /&gt;
&lt;br /&gt;
* Select the doorm, then use {{menu|Entity|Stim/response}} and select the response tab.&lt;br /&gt;
&lt;br /&gt;
* Click the little drop down arrow against the &#039;type&#039; selector at bottom left and you should see your new custom stim name. Select it.&lt;br /&gt;
&lt;br /&gt;
* Right click in the big &#039;&#039;Response Effects&#039;&#039; box on the bottom right of the panel.&lt;br /&gt;
&lt;br /&gt;
* Add New Effect and you should get a default &#039;Activate Response&#039; response added to the list. Double click it.&lt;br /&gt;
&lt;br /&gt;
* In the Effect selector at the stop select &#039;Trigger&#039;&lt;br /&gt;
&lt;br /&gt;
* in the Target box, paste in the name of the relay you copied or you can select it from the list at the little arrow.&lt;br /&gt;
&lt;br /&gt;
* Leave the Activator box empty.&lt;br /&gt;
&lt;br /&gt;
* Click {{apply}} and then {{ok}} on the main S &amp;amp; R panel bottom right.&lt;br /&gt;
&lt;br /&gt;
It should now work. No need to wait for an AI, just frob the door and watch it close itself. If not, check the position of the stim brush is close to where the door stops when open.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==AI Door management==&lt;br /&gt;
&lt;br /&gt;
By default AI will open doors and close them behind them. Here are some spawnargs &#039;&#039;&#039;on the door&#039;&#039;&#039; the mapper can use to modify that behaviour:&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;ai_should_not_handle&amp;quot; :If set to 1, AI will not attempt to handle it and add it to the forbidden areas (so that it doesn&#039;t try to path through). They might still walk through the door when it is open though. Useful if you have some special use door that you don&#039;t want the AI to operate.&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;ai_should_not_close&amp;quot; :If set to 1, AI will not close the door behind them unless it obstructs them.&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;canRemainOpen&amp;quot; :If set to 1, it&#039;s the same as &amp;quot;ai_should_not_close, with the added behavior that this is ignored if the door needs to be relocked, or the door is marked &amp;quot;shouldBeClosed&amp;quot;. &#039;&#039;&#039;(This spawnarg is available starting in TDM 2.02.)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Spawnargs &#039;&#039;&#039;on the AI&#039;&#039;&#039; that the mapper can use:&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;canCloseDoors&amp;quot; :Added in 2.12. Defaults to 1.  If set to 0, the AI will not close doors after passing through them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To get AI to unlock/relock specific doors there are two methods:&lt;br /&gt;
&lt;br /&gt;
1. Provide the AI with the key, as detailed in the def_attach method in [[#Keys_carried_by_AI]] above.&lt;br /&gt;
&lt;br /&gt;
2. Add the following spawnarg/value to the AI:&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;can_unlock&amp;quot; &#039;&#039;&amp;lt;doorname&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For additional doors on the same AI use &#039;&#039;can_unlock1 doorname&#039;, `can_unlock2 doorname&#039; etc. &#039;&#039;&#039;Do NOT use can_unlock_1.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If both (1) and (2) are used, then the AI can still go through the door after the player pickpockets the key. Otherwise, unless someone else opens the door for the AI, a typical sequence is that the AI checks their pockets for the missing key, stalls a bit at the locked door, and then (with now-better pathing algorithms) the AI uses an alternate route to the next path_corner, or &amp;quot;mentally&amp;quot; skips ahead in the route to next reachable node and goes there.&lt;br /&gt;
&lt;br /&gt;
===Door Handling Positions===&lt;br /&gt;
&lt;br /&gt;
It is also possible to set custom door handling positions for the AI. This is especially useful when the standard routine that lets the AI choose their standing positions while opening and closing the door fails, leaving them standing still, or circling around in front of the door helplessly.&lt;br /&gt;
&lt;br /&gt;
Place a movers &amp;gt; &#039;&#039;atdm:door_handling_position&#039;&#039; entity where you want the AI to stand while opening/closing the door from this side.&lt;br /&gt;
&lt;br /&gt;
On the door, you need to set the spawnarg &amp;quot;door_handle_position&amp;quot; &amp;quot;name_of_door_handling_position&amp;quot;. You can also place a &#039;&#039;door_handling_position&#039;&#039; on each side of the door, and the AI will automatically choose the right one. In this case, you need to set spawnargs with &amp;quot;door_handle_position_1&amp;quot; etc., and the corresponding names of the &#039;&#039;door_handling_position&#039;&#039; entities on the door.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;door_handling_position&#039;&#039; entities can also carry spawnargs that define the behaviour of the AI, which are useful for example for doors that can only be opened or locked from one side:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;ai_no_open&amp;quot;&#039;&#039;&#039; If set to &amp;quot;1&amp;quot;, the AI will not try to open the door from this side (but will still walk through when the door is already open).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;ai_no_close&amp;quot;&#039;&#039;&#039; If set to &amp;quot;1&amp;quot;, the AI will not attempt to close the door from this side.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;ai_no_unlock&amp;quot;&#039;&#039;&#039; If set &amp;quot;1&amp;quot;, the AI will not be able to unlock the door from this side, but still use it when it is not locked.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;ai_no_lock&amp;quot;&#039;&#039;&#039; If this is set &amp;quot;1&amp;quot;, the AI will not lock the door from this side.&lt;br /&gt;
&lt;br /&gt;
===Door Controllers===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Available in TDM 2.02+&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can design a door so it&#039;s operated by buttons or levers or switches (aka &#039;&#039;controllers&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
A controller is simply an entity that targets the door.  Typical examples of entities that can be used are:&lt;br /&gt;
&lt;br /&gt;
* Buttons: atdm:mover_button&lt;br /&gt;
* Levers: atdm:switch_rotate_lever&lt;br /&gt;
* Switch: atdm:mover_lever&lt;br /&gt;
* Lock: atdm:froblock. (See also next section)&lt;br /&gt;
&lt;br /&gt;
1. Set up the door in the normal manner. It can be a rotating door, a sliding door, a locked door, etc.&lt;br /&gt;
&lt;br /&gt;
2. Turn off the &amp;quot;frobable&amp;quot; spawnarg on the door. (&amp;quot;frobable&amp;quot; &amp;quot;0&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
3. Create a controller entity on each side of the door. If you&#039;re setting up a locked door using atdm:froblock, there&#039;s no need to put any locking information on the controllers. When the game starts, it will transfer any locking information from the door to the controllers.&lt;br /&gt;
&lt;br /&gt;
4. Give each controller the door as a target.&lt;br /&gt;
&lt;br /&gt;
Both the player and any AI that wants to use the door will use the controllers to operate it. Any key, &amp;quot;can_unlock&amp;quot;, or lockpick settings you would normally use at the door are now used at the controllers.&lt;br /&gt;
&lt;br /&gt;
Controllers and &#039;&#039;door_handling_position&#039;&#039; entities can be used on the same door, but in that situation the &#039;&#039;door_handling_position&#039;&#039; entities don&#039;t define where the AI stands to operate the door. They simply provide the &amp;quot;ai_no_*&amp;quot; spawnargs that define AI behavior on each side of the door.&lt;br /&gt;
&lt;br /&gt;
If you wish, you could provide a controller on only one side of the door instead of both sides. Note that, since the door is not frobable, the player won&#039;t be able to operate the door from the non-controller side.&lt;br /&gt;
&lt;br /&gt;
====More about Using a Separate &amp;quot;Froblock&amp;quot; Lock Plate====&lt;br /&gt;
&#039;&#039;by Geep, 2021-22&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Froblock, just discussed as a controller method, actually predated the controller concept in TDM. Here we recap that earlier context, with an alternative treatment of highlighting, and thoughts on texturing and usage.&lt;br /&gt;
&lt;br /&gt;
Suppose you want to have a lock plate (typically mounted on a door frame or wall) that opens a nearby door, where the door and lock plate highlight separately. A traditional way is to adapt the &#039;&#039;froblock&#039;&#039; method described under the &amp;quot;Making your own&amp;quot; section of [[Containers, Chests, etc.]]&lt;br /&gt;
&lt;br /&gt;
Basically, your door is the &amp;quot;chest lid&amp;quot; (of class atdm:mover_door) and your lock is the &amp;quot;chest body&amp;quot; (of class atdm:froblock). Set the properties as described in the wiki. There is a stock texture (darkmod/door/keyhole_metal_001) you can use to decorate a surface of your lock plate, or a patch on it. This method is probably most apt for small hatches and grates designed for the player alone, and with no handles, or non-turning handles attached with &amp;quot;bind&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===AI and &#039;non-frobable&#039; Doors===&lt;br /&gt;
Be aware that the &#039;frobable&#039; spawnarg only applies to the player, not AI.  If you set a door to be non-frobable (i.e. &#039;frobable&#039; &#039;0&#039;), AI can still operate it by interacting directly with it, even if it has a controller.  For example they will do this if:&lt;br /&gt;
&lt;br /&gt;
* they are fleeing or chasing the player&lt;br /&gt;
* the door has a controller but the AI can&#039;t reach it (for example the controller is on the other side of the door)&lt;br /&gt;
&lt;br /&gt;
The best way to mitigate this is to use Door Handling Position entities (see above) with the &#039;ai_no_open&#039; spawnarg set on them. &lt;br /&gt;
&lt;br /&gt;
===AI locking doors behind them===&lt;br /&gt;
&lt;br /&gt;
If one AI is involved (no one else is in the queue), he&#039;ll lock it behind him if he had to unlock it in the first place.&lt;br /&gt;
&lt;br /&gt;
Prior to TDM 1.08, if more than one AI is using the door at the same time (there&#039;s a queue), the first AI unlocks the door, and the last AI through will only lock it if it&#039;s marked &amp;quot;should_always_be_locked&amp;quot; AND they have a &amp;quot;can_unlock&amp;quot; for that door or they have a key for that door. The last AI to use the door doesn&#039;t know that the first AI found it locked, because that info is kept per AI, and not per door. &lt;br /&gt;
&lt;br /&gt;
Starting in TDM 1.08, if the first AI in a door queue found the door locked, that information is remembered by the door and the last AI through uses it to relock the door, as long as they have a &amp;quot;can_unlock&amp;quot; for that door or they have a key for that door.&lt;br /&gt;
&lt;br /&gt;
In the rare case where a door is set up to use door-handling position entities (necessary for AI to use sliding doors), either or both of those entities can have the &amp;quot;ai_no_lock&amp;quot; spawnarg, which means AI aren&#039;t allowed to lock the door from that side.&lt;br /&gt;
&lt;br /&gt;
==Initially Blocking a Door - Partially or Fully==&lt;br /&gt;
&#039;&#039;by Geep 2021&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Suppose you have a door that you want to start out either as unopenable, or able to open just a crack, then later, after something happens, be fully openable and operational. One method known to work:&lt;br /&gt;
&lt;br /&gt;
* Create a moveable object that the opening door runs into and tries to push.&lt;br /&gt;
* Arrange that the far side of the moveable object is jammed against some immovable worldspawn.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s two specific examples that use a wooden plank moveable:&lt;br /&gt;
&lt;br /&gt;
* In &amp;quot;Perilous Refuge&amp;quot;, a plank blocks the door leading out of the player&#039;s starting location, until the player carries it away. &lt;br /&gt;
* At the end of &amp;quot;Away0&amp;quot; (WIP 2021), the player tries to open a door. But if preconditions aren&#039;t met, the occupant seems to let the door open only a crack and complains. Blockage is done by an unseen plank resting on the floor hitting a knob of worldspawn. Preconditions met causes a &amp;quot;$plank.remove()&amp;quot; script call.&lt;br /&gt;
&lt;br /&gt;
Other methods that you might think would work but don’t:&lt;br /&gt;
&lt;br /&gt;
* Block with a func_static object, or an unjammed moveable with &amp;quot;notpushable 1&amp;quot; set. In both cases, the door travels through the object.&lt;br /&gt;
* In advance, &amp;quot;grab&amp;quot; an unjammed moveable to make it appear &amp;quot;solid&amp;quot; to the physics engine. (This was tested by having the player manipulate it; if it had worked, a “grabber” script call might suffice.)&lt;br /&gt;
* Dynamically change the door’s &amp;quot;rotate&amp;quot; limit from script using &amp;quot;setSpawnArg&amp;quot;; this function would only work before you spawn the door, not afterwards.&lt;br /&gt;
&lt;br /&gt;
(Others possibilities not yet tested:&lt;br /&gt;
&lt;br /&gt;
* Change &amp;quot;rotate&amp;quot; using the &amp;quot;setKey&amp;quot; script function; for some spawnargs this works even after spawn.&lt;br /&gt;
* Create a moveable and bind it to the world entity.&lt;br /&gt;
* If you are mainly interested in initially blocking an AI from using a door: it&#039;s possible that the AI re-reads the spawnargs for what doors it&#039;s allowed to open. Try adding a frob Response to the key (Entity -&amp;gt; Stim/Response... -&amp;gt; Response) with an effect that sets the “can_unlock&amp;quot; spawnarg on that AI to &amp;quot;-&amp;quot;.)&lt;br /&gt;
&lt;br /&gt;
==Controlling a Door by Scripting==&lt;br /&gt;
&#039;&#039;by Geep 2021&#039;&#039;&lt;br /&gt;
===If Unlocked===&lt;br /&gt;
&lt;br /&gt;
Simply use, for example with a door named &#039;&#039;door1&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 $door1.Open();&lt;br /&gt;
 ...&lt;br /&gt;
 $door1.Close();&lt;br /&gt;
&lt;br /&gt;
Alternatively, toggle it open or closed with:&lt;br /&gt;
&lt;br /&gt;
 $door1.frob();&lt;br /&gt;
&lt;br /&gt;
If the door has &amp;quot;interruptable 1&amp;quot; (which is the default with atdm:mover_door), you can also frob() it twice to leave it ajar. Interpose and adjust a sys.wait(...) to tune it.&lt;br /&gt;
===If Locked===&lt;br /&gt;
&lt;br /&gt;
You need to unlock it first. Changing the door&#039;s &amp;quot;locked&amp;quot; spawnarg value won&#039;t work. Instead you will use:&lt;br /&gt;
&lt;br /&gt;
 $door1.Unlock();&lt;br /&gt;
&lt;br /&gt;
But there are complications. By default, the door has spawnarg &amp;quot;open_on_unlock 1&amp;quot;. So, assuming you didn&#039;t change that, you&#039;d think unlocking the door would open it. But this spawnarg will be ignored if the gamer has global menu option &amp;quot;Open Doors on Unlock&amp;quot; set to Off. Assuming you want to reliably have the door open, do this:&lt;br /&gt;
&lt;br /&gt;
 $door1.Unlock(); // MAYBE will open door too.&lt;br /&gt;
 sys.wait(3); // If so, wait for door to fully open. Value may need adjusting based on door&#039;s speed&lt;br /&gt;
 $door1.Open(); // Otherwise, open it now.&lt;br /&gt;
&lt;br /&gt;
The wait is added, because otherwise, the opening begun by Unlock may be stopped by Open with the door only partially open. (Probably an alternative to using sys.wait here is to zero the door&#039;s &amp;quot;interruptable&amp;quot; spawnarg.) &lt;br /&gt;
&lt;br /&gt;
==Doors as Triggers==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;by Ishtvan &amp;amp; greebo&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Doors (or any binary frob mover, buttons, levers, etc) now have the option to [[Triggers|trigger]] their target on closing or opening. (For definition purposes, a button is defined as &amp;quot;closed&amp;quot; in the state when it starts out and &amp;quot;open&amp;quot; in the state you press it down to. I know that&#039;s a little non-intuitive, but it came from deriving from doors).&lt;br /&gt;
&lt;br /&gt;
New spawnargs on frob movers:&lt;br /&gt;
;&amp;quot;trigger_on_open&amp;quot; :If set to 1, this binary mover will trigger its targets when it starts out completely closed and is opened.&lt;br /&gt;
;&amp;quot;trigger_when_opened&amp;quot;:If set to 1, this binary mover will trigger its targets when it is completely opened. Code defaults to 0.&lt;br /&gt;
;&amp;quot;trigger_on_close&amp;quot;:If set to 1, this binary mover will trigger its targets when it completely closes after being open.&lt;br /&gt;
&lt;br /&gt;
== Suspicious Doors ==&lt;br /&gt;
&lt;br /&gt;
If you give a door the spawnarg &#039;&#039;&#039;&amp;quot;shouldBeClosed&amp;quot; &amp;quot;1&amp;quot;&#039;&#039;&#039;, then AI will treat it as suspicious if they find the door open.&lt;br /&gt;
&lt;br /&gt;
Doors with that spawnarg should work like this:&lt;br /&gt;
&lt;br /&gt;
- an AI opening the door knows he&#039;s not to become suspicious if he opened the door&lt;br /&gt;
&lt;br /&gt;
- nearby AI alerted by the open door will also not react if they can see the door, and can see the AI that opened it&lt;br /&gt;
&lt;br /&gt;
- AI who come upon the open door later probably won&#039;t be able to see the AI that opened it, so they&#039;ll treat it as suspicious&lt;br /&gt;
&lt;br /&gt;
- if the AI who opened the door comes upon the door later, and it&#039;s still open, and no one&#039;s touched it since he opened it, he&#039;ll see his name on the door and won&#039;t become suspicious. &amp;quot;Oh, crap. I forgot to close it earlier.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
- If an AI comes upon an open door that should be closed, he should close it whether he becomes suspicious or not.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Post TDM 2.00:&#039;&#039;&#039;&lt;br /&gt;
-  AI turn to look at a door they see opening.  The player can crack open a suspicious door to peek out w/o grabbing the attention of a nearby AI. After 5s, the AI will notice the cracked open door. Non-suspicious doors can be cracked open indefinitely w/o nearby AI noticing.&lt;br /&gt;
&lt;br /&gt;
==Slanted or Tilted Doors==&lt;br /&gt;
Slanted or tilted doors can be made as follows:&lt;br /&gt;
&lt;br /&gt;
1) Place your door, preferrably one of the prefab doors, which have a model door and model handle and all the rotation spawnargs pre-set.&lt;br /&gt;
&lt;br /&gt;
2) rotate and place the door+handle model into place you want it to be. Now, if you use the door in the game, the door will rotate around the world z-axis, and not the door model z-axis (which is rotated).&lt;br /&gt;
&lt;br /&gt;
3) to get the door to rotate around the door model z-axis, you must place a model (any model will do, and it can be placed anywhere in the map). Rotate the new model into the same orientation your door model was rotated, i.e. if you door is rotated 45 degrees around the x-axis, do the same rotation on the new model.&lt;br /&gt;
&lt;br /&gt;
4) bind the doors on the new model. This makes the doors start rotating along the new model origin (which is rotated the same way as the doors).&lt;br /&gt;
&lt;br /&gt;
5) working slanted door.&lt;br /&gt;
&lt;br /&gt;
Do note, that all the rotated objects need to be models (suspicion, not tested). You can export DR built stuff into a model using the DR ase exporter script. For custom doors, remember that the exporter places the model origin at the map origin if you do not choose the &amp;quot;place origin in the middle of the object&amp;quot; option.&lt;br /&gt;
&lt;br /&gt;
Also note that the AI probably cannot use slanted doors and might get stuck (suspicion, not tested).&lt;br /&gt;
&lt;br /&gt;
There is a link to a test map here:&lt;br /&gt;
http://forums.thedarkmod.com/topic/9082-newbie-darkradiant-questions/?p=395486&lt;br /&gt;
&lt;br /&gt;
==Skins: A Wide Variety of Door Textures==&lt;br /&gt;
&lt;br /&gt;
This is to remind you that as with many Dark Mod models, there is a wide range of extras skins (textures) available for door models. There are now several basic door entities of different sizes so choose your size first. Then enter the spawnarg: skin with any temporary value. Now select it and click the skin button at the bottom of Dark Radiant&#039;s Entity Inspector and you will find a large of range of skin textures from which to select to give you a choice of appearances for your door.&lt;br /&gt;
&lt;br /&gt;
==Extra Notes==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;func_darkmod_door&#039;&#039; is no longer used (just in case you come across it in the Dark Mod forums or wiki.) &#039;&#039;&#039;&amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt;&#039;&#039;&#039; is the entity to use.&lt;br /&gt;
&lt;br /&gt;
{{tutorial-editing}}&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=Doors&amp;diff=34107</id>
		<title>Doors</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=Doors&amp;diff=34107"/>
		<updated>2025-11-06T20:05:41Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: /* Simpler, No-script Version */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{todo}}&lt;br /&gt;
&#039;&#039;Written by Fidcal&#039;&#039; &#039;&#039;edit Baddcog&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Quick Summary==&lt;br /&gt;
&lt;br /&gt;
Quick way to get an unlocked door in your map:&lt;br /&gt;
&lt;br /&gt;
* Insert one of the prefab doors complete with handles and select its skin property and click the button to change its skin appearance to whatever you want. Set any other properties you need.&lt;br /&gt;
&lt;br /&gt;
Alternatively,&lt;br /&gt;
&lt;br /&gt;
* Create a door from the entity list&lt;br /&gt;
* Use the &amp;quot;skin&amp;quot; spawnarg on the door to change its appearance. &lt;br /&gt;
* Create a handle from the entity list&lt;br /&gt;
* Add the &#039;&#039;door_handle&#039;&#039; property to the door and give it the name of the handle&lt;br /&gt;
* To the door handle add the value frob_peer and use the name of the door.&lt;br /&gt;
* To open clockwise, change the &#039;&#039;rotate&#039;&#039; property from &amp;lt;code&amp;gt;0 90 0&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;0 -90 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
This tutorial explains how to put doors into your map using Dark Radiant, as well as adjust them and their properties.&lt;br /&gt;
&lt;br /&gt;
The rest of this tutorial assumes that you have a basic understanding of using DarkRadiant. If you haven&#039;t done so, please go read the [[Dark Radiant Must Know Basic Intro]] article first.&lt;br /&gt;
&lt;br /&gt;
Additionally:&lt;br /&gt;
&lt;br /&gt;
* Up, down, right, and left in Dark Radiant&#039;s &#039;&#039;top&#039;&#039; orthoview are regarded here as the standard map directions of North, South, East, and West where useful for clarity.&lt;br /&gt;
* Where the term &#039;&#039;brush&#039;&#039; is used with a door it mostly also applies to a door made up of a group of brushes and/or patches.&lt;br /&gt;
* Where the term &#039;&#039;door&#039;&#039; is used it often will also apply to any object you wish to rotate when frobbed, for instance an openable window, box lid, or even more exotic objects that the imaginative mapper might conceive like a signal, engine part, toy, or whatever. So long as it needs to turn or slide just a fixed amount when frobbed then return when frobbed again then the following applies.&lt;br /&gt;
&lt;br /&gt;
==Door types==&lt;br /&gt;
&lt;br /&gt;
All tangible objects in Dark Mod are &#039;&#039;entities&#039;&#039;, having either a pre-made model shape or else brush/patch(es). So there are two ways to create a door in Dark Radiant: as a model door or a textured brush door (or a hybrid of the two).&lt;br /&gt;
&lt;br /&gt;
Models are ready made door objects but cannot within Dark Radiant (at the time of writing) be resized, rescaled, cropped or clipped whereas brushes are very flexible in that respect and can be worked into custom shapes for your map, including secret doors that blend into walls and other surfaces.&lt;br /&gt;
&lt;br /&gt;
Most of the current door models are found in two places along with the door handles.&lt;br /&gt;
*Model Viewer: doors created from here will be static in the world and have no props other than material type.&lt;br /&gt;
You can add any props to them to make them working doors. If nothing else it is a good place to view the different size and skin options for the doors.&lt;br /&gt;
*Entity List: most of the door models can be found here. These doors have properties already assigned so they are ready to be used. Only one base door of each type is listed, create the size/hinge count door you want (2 hinge doors have a &#039;no hinge&#039; skin). You can choose a skin for the door once it has been created in the editor with the &amp;quot;skin&amp;quot; spawnarg (use the model name of the door you want, taken from the model list, as its value). This is the easiest way to create a door. The same goes for door handles.&lt;br /&gt;
&lt;br /&gt;
Remember also that door functions may be applied to objects other than doors, such as openable windows, drawbridges, gates, etc. In fact, anything that needs a partial rotation or slide when frobbed then return when frobbed again, such as a signal device. Lockboxes and chests use similar properties.&lt;br /&gt;
&lt;br /&gt;
You can create one door/handle set and copy/paste it, but you need to take great care that all the name props are changed to match in each clone. Otherwise you get handles that fly off when a distant door moves, and handles that don&#039;t move.&lt;br /&gt;
&lt;br /&gt;
==Creating a Door==&lt;br /&gt;
&lt;br /&gt;
Put simply, to make a door you will be creating an &#039;entity with model&#039; or &#039;entity with brush&#039; or some variation thereof.&lt;br /&gt;
&lt;br /&gt;
===Creating a Model Door===&lt;br /&gt;
&lt;br /&gt;
There are several approaches to making a model door; the simplest is to create a door from the entity list; or create a door from the model viewer (good for static unusable prop doors).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Entity List&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
*Deselect everything in editor by hitting the Esc button&lt;br /&gt;
*Right-click an ortho view and select Create Entity&lt;br /&gt;
*Navigate to darkmod/movers/&#039;&#039;atdm:door_...&#039;&#039;, choose the door you want&lt;br /&gt;
*Click Add&lt;br /&gt;
*To change its appearance, add a &amp;quot;skin&amp;quot; spawnarg to the door, with the value being the model name of the door you want.&lt;br /&gt;
&lt;br /&gt;
You now have a workable door in your level.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Model Viewer&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Right click in the orthoview, select &#039;&#039;Create Model&#039;&#039; then &amp;lt;code&amp;gt;darkmod&amp;lt;/code&amp;gt; and select a door.&lt;br /&gt;
* Note that you can left drag the image in the &#039;&#039;Choose Model&#039;&#039; dialog to rotate it around.&lt;br /&gt;
* Click [[Image:Button ok.png]] and you have a static door.&lt;br /&gt;
* If you want to make it work (openable, frobbable) then:&lt;br /&gt;
** Select the entity inspector,&lt;br /&gt;
** Select the top classname line so it highlights&lt;br /&gt;
** Select the func_static line in the input box &#039;&#039;below&#039;&#039; the properties window.&lt;br /&gt;
** Edit &amp;lt;code&amp;gt;func_static&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt;&lt;br /&gt;
** Click {{check}} or press {{key-enter}}&lt;br /&gt;
&lt;br /&gt;
Alternatively you can do it the old way:&lt;br /&gt;
&lt;br /&gt;
* Create any temporary brush&lt;br /&gt;
* Right click in orthoview and select &amp;lt;code&amp;gt;Create Entity&amp;lt;/code&amp;gt; then &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Left lick the model name line in the entity inspector.&lt;br /&gt;
* Below it on the &#039;&#039;Entity Inspector&#039;&#039; panel you should now see a button &#039;Choose Model&#039;&lt;br /&gt;
* Left click it, select a door model from the darkmod group.&lt;br /&gt;
* Note that you can left drag the image in the &#039;&#039;Choose Model&#039;&#039; dialog to rotate it around.&lt;br /&gt;
* The temporary brush was deleted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In all three instances, you now have a working door with default properties. &lt;br /&gt;
&lt;br /&gt;
Name your door by adding the prop (or modifing it) to name &#039;&#039;My_Door_1&#039;&#039;. You can use any name that you feel is appropriate but all doors with handles attached &#039;&#039;must&#039;&#039; have their own specific name. Use the name My_Door_1 for your first attempt as it will be referenced when you get around to attaching handles (see below).&lt;br /&gt;
&lt;br /&gt;
To add a handle and other adjustments, see [[#Customising and Adjusting Door Properties]] below.&lt;br /&gt;
&lt;br /&gt;
===Creating a Textured Brush Door===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tip:&#039;&#039;&#039; If unsure of size then you might insert a temporary human AI first to get a sense of height.&lt;br /&gt;
&lt;br /&gt;
==== The simplest brush door: ====&lt;br /&gt;
&lt;br /&gt;
* Drag out a new brush to the size required, eg, a seven foot high door is 84&amp;quot; x 1.1 = about 90 units in Dark Radiant.&lt;br /&gt;
* Give it a door texture from the texture browser (or wall texture for a secret door)&lt;br /&gt;
* Right click in orthoview and select &#039;&#039;Create Entity&#039;&#039; then &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You now have a working door but it will rotate around its center. To move the rotation point to where you want the door hinges to be:&lt;br /&gt;
* Select the door and press &#039;v&#039; or the &#039;&#039;Select Vertices&#039;&#039; button to enter vertex editing mode. The door&#039;s origin will show up as a small green square in the middle of the brush.&lt;br /&gt;
* In top-down orthoview, move the origin from the center to the corner of the brush. This is easiest in drag mode (&#039;q&#039; or the &#039;&#039;Resize&#039;&#039; button), although you can use translate mode (&#039;w&#039; or the &#039;&#039;Translate&#039;&#039; button) by manually selecting the vertex first.&lt;br /&gt;
&lt;br /&gt;
==== Multi-brush doors: ====&lt;br /&gt;
&lt;br /&gt;
More complex multi-brush doors can be created using the [[Clipper]] tool, CSG, etc. - this is not covered in this tutorial. Then assign &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt; for that whole brush structure. Also you can collect various brushes positioned together in relation to one another as needed, select them all, then assign &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt; for the group. All the brushes will be children of the &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt; entity and will rotate and be frobbable, etc. as one unit, as one door. To add further brushes or even model shapes later see the section on [[#Adding handles and other items to doors]].&lt;br /&gt;
&lt;br /&gt;
Name your door by adding the prop (or modifing it) to name My_Door_1. You can use any name that you feel is appropriate but all doors with handles attached must have their own specific name. Use the name My_Door_1 for your first attempt as it will be referenced when you get around to attaching handles (see below). (repeated from above in case you didn&#039;t choose to create a model door)&lt;br /&gt;
&lt;br /&gt;
=== Double Doors ===&lt;br /&gt;
Double doors are automatically recognised by the code when the doors are spawned. The prerequisite is that both doors are sharing/touching the same visportal. The spawnarg &#039;&#039;auto_setup_double_door&#039;&#039; (which defaults to &amp;quot;1&amp;quot;) will take care of setting up the open/lock peer relationship between the two doors. The doors will open/close and lock/unlock along with each other as a result.&lt;br /&gt;
&lt;br /&gt;
What happens behind the scenes: the doors are adding each other to their internal open_peer and lock_peer list, which causes the double doors to perform the same action when frobbed or used.&lt;br /&gt;
&lt;br /&gt;
Note that &#039;&#039;auto_setup_double_door&#039;&#039; will not set the frob_peer relationship, i.e. each door will frob-highlight on its own without highlighting the other door. You&#039;ll need to add that spawnarg manually if you want to highlight the entire double door as one.&lt;br /&gt;
&lt;br /&gt;
==Customising and Adjusting Door Properties==&lt;br /&gt;
&lt;br /&gt;
Handles, lockplates, etc. can be added to doors and door properties can be adjusted for rotation, sliding, locking, and more.&lt;br /&gt;
&lt;br /&gt;
Some of the door models have hinge plates and lockboxes that are reskinnable with a good variety of skins.&lt;br /&gt;
&lt;br /&gt;
===Door handles and other door attachments===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Summary: just add the property &#039;&#039;bind&#039;&#039; with the door&#039;s name to the attachment and position it where you want it on the door. If it&#039;s a &#039;&#039;atdm:mover_door_handle&#039;&#039; then it automatically will work as a handle but you can bind virtually anything.&#039;&#039;&#039;&lt;br /&gt;
You can add handles and other items to doors such that they move correctly with the door whether rotating, sliding, or both and even if the door is not vertical such as a skylight or trapdoor.&lt;br /&gt;
Handle models come in two types, &#039;&#039;single handles&#039;&#039; and &#039;&#039;double handles&#039;&#039;. A single handle is one sided, this means the handle will be inside the door or outside the door, but not both. A double handle has a lever on the inside of the door and a handle on the outside of the door. Each has benefits.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;Single door handles&#039;&#039;&#039;&#039;&#039;:&lt;br /&gt;
Single door handles can be used on a static door, a door that&#039;s just for show that no AI&#039;s or the player can use. In this case you should just create a door handle from the model viewer, it will be static and have no properties such as scripts. It is for looks only.  Note that TDM is trying to establish the expectation that decorative doors that cannot be opened do not have handles (though not all maps follow this).&lt;br /&gt;
&lt;br /&gt;
I will call this &#039;&#039;multiple handles&#039;&#039;, see more below.&lt;br /&gt;
&lt;br /&gt;
These can also be useful on brush doors created in the editor that may be very thin or very wide.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;Double door handles&#039;&#039;&#039;&#039;&#039;:&lt;br /&gt;
These are models have have a handle inside and outside. The bonus is that they only use one entity. Maps are limited to about 4,000 entities but when you count lights, AI, sound speakers, ect... you can run out of entities quickly on a large map. If you plan on building a large map this is the way to go, even in a small map they have benefits, namely that you only have to attach one handle per door.&lt;br /&gt;
&lt;br /&gt;
Whether you decide to use a single handle or a double handle you must first follow the instructions below and attach one handle first. If you choose a double handle, follow the instructions below and you are done. If you choose a single handle type follow the instructions then also follow the &#039;&#039;multiple handle&#039;&#039; instructions for the second handle.&lt;br /&gt;
&lt;br /&gt;
Both single and double handle types can be found in two places. The model viewer which will create a static model good for show, you can manually add props to make them work OR you can look in the entity browser.&lt;br /&gt;
Using a handle from the entity browser saves you a little bit of time as some props are already added, you just need to add the frob_peer names for the doors/handles and the door_handle name to the door.&lt;br /&gt;
&lt;br /&gt;
=== Adding a working model door handle===&lt;br /&gt;
&lt;br /&gt;
Quick summary:&lt;br /&gt;
* Create a model or brush handle and make it an &#039;&#039;atdm:mover_door_handle&#039;&#039; entity.&lt;br /&gt;
* Position it on your door.  Use the opposite side from the door&#039;s multicolor X-Y-Z indicator (highlight the door to see it) if it&#039;s not obvious which side it goes on.  &lt;br /&gt;
* &#039;&#039;&#039;Bind&#039;&#039;&#039; the handle to the door (bind &amp;lt;doorname&amp;gt;)&lt;br /&gt;
* It should now be a working handle though may need adjustments of rotation etc. see later. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Important: read preceding section on door handle types and performance issues first.&lt;br /&gt;
&lt;br /&gt;
This works with both a model door and a brush door:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rotation&#039;&#039;&#039;:&lt;br /&gt;
* By default the door handle entity rotates &#039;&#039;anti-clockwise&#039;&#039; (looked at from the front) then springs back. A &#039;&#039;double handle&#039;&#039; model is OK but two singles (see &#039;&#039;Multiple door handles&#039;&#039; below) need more care as only one is the functioning entity and the other is just attached to it. So anti-clockwise is fine for a door with its hinge on the left and the handle on the right - the handle will rotate down then spring back. If you put the functioning door handle on the other side you will have to change the default &#039;&#039;rotate&#039;&#039; property from -45 0 0 to 45 0 0. &#039;&#039;&#039;&#039;&#039;Therefore it is easier to generally put this handle on the side of the door where the hinge is on the left and the non-functioning attachment handle on the other side.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*If your door only needs one handle, eg, a cupboard door, and from outside its hinge is on the right then you will need to change the &#039;&#039;rotate&#039;&#039; property of the handle as described above.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;The functioning handle entity:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
* Create an entity door handle (movers folder) or create a brush or model handle and assign it the entity &#039;&#039;atdm:mover_door_handle&#039;&#039;.&lt;br /&gt;
* Position it where you wish on your door.&lt;br /&gt;
* &#039;&#039;&#039;Bind&#039;&#039;&#039; the handle to the door, by adding the &amp;quot;bind&amp;quot; spawnarg to the handle.&lt;br /&gt;
&lt;br /&gt;
You now have a working door handle with default properties.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Multiple door handles&#039;&#039;&#039;:&lt;br /&gt;
Now that you&#039;ve got a handle attached to one side of the door it is time to add one to the other side (unless you used a double handle).&lt;br /&gt;
* Create the new handle. The single handles come in left and right persuasions. A door needs a left facing handle on one side and a right facing handle on the other, so if you have already added the left handle create a right handle and line it up on the other side of the door.&lt;br /&gt;
* Name this handle. I prefer to keep a naming convention for each door and it&#039;s respective handles, it makes things alot easier. The door is named &#039;&#039;&#039;My_Door_1&#039;&#039;&#039;, the first handle is named &#039;&#039;&#039;My_Handle_1&#039;&#039;&#039; so name the second handle &#039;&#039;&#039;My_Handle_1_1&#039;&#039;&#039;. This will make it stay with the first handle in the entity list. This is important to keep organized. If you name it My_Handle_2 then when you get to another door named My_Door_2 you&#039;ll be confused.&lt;br /&gt;
* Place and &#039;&#039;&#039;bind&#039;&#039;&#039; that handle to your door.&lt;br /&gt;
&lt;br /&gt;
You now have two single door handles on either side of the door that rotate together as if they were physically attached.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add a brush to a brush door&#039;&#039;&#039;:&lt;br /&gt;
* Select the new brush &#039;&#039;and&#039;&#039; the brush door all together; &#039;&#039;the entity &#039;&#039;&#039;must&#039;&#039;&#039; be selected &#039;&#039;&#039;last&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
* Use {{menu|Edit|Reparent primitives}}. This ensures the parent entity adopts the new item(s).&lt;br /&gt;
* If you have trouble selecting them in the orthoview because other brushes, etc. get selected then try in the camera view or as a last resort move them temporarily to an open area (but keep them in the same positions relative to each other.) Use {{key-shift}}+{{LMB}} on new item(s) then {{key-shift}}+{{LMB}} on main entity. Once they are all selected, use the {{menu|Edit|Reparent primitives}}.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add &#039;&#039;model&#039;&#039; static items&#039;&#039;&#039;: knockers, hinges, static handles etc. to a &#039;&#039;Model Door&#039;&#039;:&lt;br /&gt;
* Select item&lt;br /&gt;
* Right click in orthoview and select &#039;&#039;Create Entity&#039;&#039; then &amp;lt;code&amp;gt;entity func_static&amp;lt;/code&amp;gt;&lt;br /&gt;
* Position it where you wish on your door.&lt;br /&gt;
* To synchronize this with your particular door you need to add the property &#039;&#039;bind&#039;&#039; and the individual door name to the brush entity. To do this...&lt;br /&gt;
** Select the model door.&lt;br /&gt;
** In the entity inspector, select the &#039;&#039;name&#039;&#039; line&lt;br /&gt;
** Select the bottom line in the input box &#039;&#039;below&#039;&#039; the properties window.&lt;br /&gt;
** Copy the name&lt;br /&gt;
** Deselect the door with {{key-esc}}&lt;br /&gt;
** Select the brush entity&lt;br /&gt;
** Add a property &amp;quot;bind&amp;quot; to it.&lt;br /&gt;
** Change the value of the property by pasting in the door name&lt;br /&gt;
** Click {{check}} or press {{key-enter}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add &#039;&#039;brush&#039;&#039; static items&#039;&#039;&#039;: knockers, hinges, static handles to a Model Door:&lt;br /&gt;
* This method is not ideal but it seems to work OK.&lt;br /&gt;
* Select the brush.&lt;br /&gt;
* Right click in orthoview and select Create Entity then &#039;&#039;atdm:mover_door_handle&#039;&#039;&lt;br /&gt;
* Position it where you wish on your door.&lt;br /&gt;
&lt;br /&gt;
To synchronize this with your particular door you need to add the property &#039;&#039;door_handle&#039;&#039; on the door, and give as the value the name of the brush you just created.&lt;br /&gt;
&lt;br /&gt;
This brush turns like a handle. To stop it:&lt;br /&gt;
&lt;br /&gt;
* Adding &#039;&#039;rotate 0 0 0&#039;&#039; or disabling the handle script won&#039;t help.&lt;br /&gt;
* Add a real working handle (as in the section above &#039;&#039;To add a working model door handle...&#039;&#039; and it must be added LAST.)&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want too see a real working handle added maybe try another tiny brush with the handle function and hide it inside the door?&lt;br /&gt;
&lt;br /&gt;
===Locking Doors===&lt;br /&gt;
&lt;br /&gt;
To lock a door check the &#039;&#039;show inherited properties&#039;&#039; in the entity inspector for a &#039;&#039;atdm:mover_door&#039;&#039; entity and you should see the &#039;&#039;locked&#039;&#039; property. Select it and in the input box below the properties you can change its value:&lt;br /&gt;
&lt;br /&gt;
* 0 = unlocked (default)&lt;br /&gt;
* 1 = locked&lt;br /&gt;
&lt;br /&gt;
If locked it will require an entity that is associated with it to be able to act as a key to unlock it.&lt;br /&gt;
&lt;br /&gt;
Currently door handles on locked doors will rotate when frobbed, they will bounce back though and the door will stay locked until unlocked.&lt;br /&gt;
&lt;br /&gt;
===Keys===&lt;br /&gt;
&lt;br /&gt;
Assigning specific keys to specific doors is simple.&lt;br /&gt;
&lt;br /&gt;
* It is recommended that you create an existing key entity. These keys have all required props, they just need to be named.&lt;br /&gt;
&lt;br /&gt;
Alternatively you can create a key from the Model Viewer and want it to be useable&lt;br /&gt;
* Make sure it has the properties:&lt;br /&gt;
 useable 1 [so it can be used by the door]&lt;br /&gt;
 frobable 1&lt;br /&gt;
 inv_name &amp;lt;unique name&amp;gt;&lt;br /&gt;
 inv_category Keys&lt;br /&gt;
 inv_target player1&lt;br /&gt;
 inv_icon guis/assets/hud/inventory_icons/&amp;lt;icon name&amp;gt;&lt;br /&gt;
 inv_stackable 0 or 1 where 1 can be used on all copies of the same key so they show as one entry in the inventory with a total.&lt;br /&gt;
&lt;br /&gt;
Add to the door the property &amp;lt;code&amp;gt;used_by&amp;lt;/code&amp;gt; with the name of the key as the value. Multiple keys can open the same door by using several &amp;lt;tt&amp;gt;used_by&amp;lt;/tt&amp;gt; spawnargs:&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;used_by&amp;quot;  &amp;quot;doorkey_1&amp;quot;&lt;br /&gt;
 &amp;quot;used_by1&amp;quot; &amp;quot;doorkey_2&lt;br /&gt;
&lt;br /&gt;
==== Keys Carried by AI ====&lt;br /&gt;
&lt;br /&gt;
So you have a door and you have a guard AI and you want the guard to be able to open/close/lock the door, but you also want the player to be able to pickpocket the key. Keys can be attached to AI in two ways.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The Def_Attach Method&#039;&#039;. This method is the best one for doors that you expect the AI to operate. It uses spawnargs to spawn the key at game start.&lt;br /&gt;
&lt;br /&gt;
*&amp;quot;def_attach6&amp;quot; &amp;quot;atdm:prop_silverkey&amp;quot; // the entity to spawn - in this case a key.&lt;br /&gt;
*&amp;quot;pos_attach6&amp;quot; &amp;quot;belt_back_right&amp;quot; // where the key will spawn on the Ai.&lt;br /&gt;
*&amp;quot;name_attach6&amp;quot; &amp;quot;door_key&amp;quot; // this gives &#039;attach6&#039; arg the name &amp;quot;door_key&amp;quot; and is the name the arg &amp;quot;used_by&amp;quot; will need, eg: &amp;quot;used_by&amp;quot; &amp;quot;door_key&amp;quot;&lt;br /&gt;
*&amp;quot;set inv_name on door_key&amp;quot; &amp;quot;Door key&amp;quot; // The name the key get when the play adds it to their inventory.&lt;br /&gt;
*&amp;quot;set name on door_key&amp;quot; &amp;quot;door_key&amp;quot; // here it gets a name to be used in the map in general.&lt;br /&gt;
&lt;br /&gt;
For more info on this method, see [[Attaching Props to AI]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The Bind Method&#039;&#039;. This lacks the animation finesse of def_attach, but does let you see the key in DR. The method is particularly helpful in, say, adding a second key to an AI in the back middle of a belt. The AI cannot use a bound key to open a locked door; the workaround is to fake it with &amp;quot;can_unlock&amp;quot; as discussed further below. Or to use bound keys mainly for items the AI will not attempt to open, such as hatches, duct covers, or chests.&lt;br /&gt;
&lt;br /&gt;
* Load a key entity&lt;br /&gt;
* Position where you want it in relation to the AI, and bind it to them (i.e., &amp;quot;bind&amp;quot; &amp;quot;&amp;lt;AIname&amp;gt;&amp;quot;)&lt;br /&gt;
* Add the spawnarg &amp;quot;bindToJoint&amp;quot; &amp;quot;Hips&amp;quot; (or another location like LeftHips_Dummy; see AI for list)&lt;br /&gt;
* Adjust existing spawnargs accordingly (that is, be sure the name and door&#039;s/chest&#039;s &amp;quot;used_by&amp;quot; match, if you aren&#039;t using a prefab chest with key). This is for the benefit of the player after pickpocketing the key; as stated above, the AI itself can&#039;t use it for unlocking.&lt;br /&gt;
&lt;br /&gt;
For more info on this method, see [[Attaching_Items]] and [[BindToJoint]].&lt;br /&gt;
&lt;br /&gt;
====Keys Carried by Player====&lt;br /&gt;
&lt;br /&gt;
With a door&#039;s key selected in your inventory and the door highlighted, you can...&lt;br /&gt;
* unlock it (which will also auto-open if enabled) by either frobbing it or hitting the Use key (typically U or Enter).&lt;br /&gt;
* lock (or relock) it via the Use key. Why do this? To avoid pursuit, or to lure guards into a room, and then lock them in (if they don&#039;t have a key or specific can_unlock powers). &lt;br /&gt;
&lt;br /&gt;
====Master Key for Testing====&lt;br /&gt;
&lt;br /&gt;
By default, ALL locks can be opened by any key named &#039;&#039;key_master&#039;&#039;. Just create a key in your map, name it &#039;&#039;key_master&#039;&#039; and it becomes a master key for use while testing. Add inv_map_start 1 to it so it is in the player inventory at game start. Remember to delete it when your mission is finished.&lt;br /&gt;
&lt;br /&gt;
====Automatically Removing Keys from Player Inventory After Use====&lt;br /&gt;
If a fan mission has a lot of keys it can clog up the player inventory. If the key is single-use, it can be useful to automatically remove it from the player inventory after use.  Below is a way to do it using a simple setup and a generic script function that can be used for multiple doors.&lt;br /&gt;
&lt;br /&gt;
=====Generic Version=====&lt;br /&gt;
&lt;br /&gt;
You&#039;ll need the following entities, preferably set up near each other in your map:&lt;br /&gt;
* The door entity itself&lt;br /&gt;
* A trigger_count entity&lt;br /&gt;
* An atdm:target_callscriptfunction entity&lt;br /&gt;
* some random entity for the target_callscriptfunction to target (explanation below)&lt;br /&gt;
&lt;br /&gt;
The below diagram shows the spawnargs and targeting required for the setup:&lt;br /&gt;
[[File:Key remove2.png|left|thumb]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
The script being called (&#039;openDoor&#039;) is defined in fms/&amp;lt;mapname&amp;gt;/maps/&amp;lt;mapname&amp;gt;.script and looks like this:&lt;br /&gt;
&lt;br /&gt;
 void openDoor(entity target, entity door, entity callscriptfunction)&lt;br /&gt;
 {&lt;br /&gt;
     string keyName = door.getKey(&amp;quot;used_by&amp;quot;);&lt;br /&gt;
     entity key = sys.getEntity(keyName);&lt;br /&gt;
     $player1.replaceInvItem(key, $null_entity);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Explanation as follows:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;For the door:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;trigger_on_open&#039;&#039;&#039; spawnarg: The door is configured to trigger its targets when it opens&lt;br /&gt;
* target &#039;&#039;&#039;trigger_count&#039;&#039;&#039; entity: this is the entity that is triggered when the door is opened&lt;br /&gt;
* &#039;&#039;&#039;used_by&#039;&#039;&#039; spawnarg: This names the key entity required for unlocking the door&lt;br /&gt;
* The other spawnargs are just the usual for setting the door as locked and unpickable&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;trigger_count entity:&#039;&#039;&#039;&lt;br /&gt;
* When triggered, this entity will in turn trigger the script that removes the key from the player inventory.&lt;br /&gt;
* &#039;&#039;&#039;count&#039;&#039;&#039; spawnarg: This is set to 1 because we only want the key removal script called once - the first time the player opens the door.&lt;br /&gt;
* this entity targets the atdm:target_callscriptfunction, which contains details of the script to execute&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;atdm:target_callscriptfunction entity:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;call&#039;&#039;&#039; spawnarg: This is the name of the script function to call&lt;br /&gt;
* &#039;&#039;&#039;foreach&#039;&#039;&#039; spawnarg: This version of the script event provides access to the &#039;activator&#039;, or the entity that triggered it (in this case, the door).  Using that information we can obtain the key name. See [[A to Z Scripting: Ways of calling a script#target_callscriptfunction|here]] for details.&lt;br /&gt;
* &#039;&#039;&#039;target any static entity&#039;&#039;&#039;: For this version of the script event to work, the target_callscriptfunction entity needs to target something.  This can be any static entity in the map (i.e. one that won&#039;t get removed or anything). I usually just target the nearest entity (e.g. a light or a lamp, or a model).  This provides no functionality in the context of this tutorial, it just satisfies the conditions of the script event.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The script:&#039;&#039;&#039;&lt;br /&gt;
* Pretty self-explanatory.  The script gets the name of the key entity via the &#039;&#039;&#039;used_by&#039;&#039;&#039; spawnarg on the door, retrieves the key entity, and then replaces it in the player inventory with a null entity, effectively removing it.&lt;br /&gt;
* Any door can use this script as its generic (although they will need their own trigger_count and target_callscriptfunction entities)&lt;br /&gt;
&lt;br /&gt;
=====Simpler, No-script Version=====&lt;br /&gt;
This is similar to above, but is more limited.  You need to hard-code the key name as a spawnarg on an atdm:target_itemremove entity as the key name can&#039;t be automatically determined like in the above script. This makes it slightly more error-prone as we&#039;re naming entities in more than one place, but ideal if you&#039;re uncomfortable with scripting.&lt;br /&gt;
&lt;br /&gt;
[[File:Key remove4.png|left|thumb]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Explanation as follows:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;atdm:target_itemremove entity:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;unique_item &#039;&#039;&#039; spawnarg: The name of the key to remove from the player inventory&lt;br /&gt;
&lt;br /&gt;
===Lockpicks===&lt;br /&gt;
&#039;&#039;by Baddcog&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
There are two lock pick types.&lt;br /&gt;
*&#039;&#039;&#039;s&#039;&#039;&#039;=snake&lt;br /&gt;
*&#039;&#039;&#039;t&#039;&#039;&#039;=triangular&lt;br /&gt;
&lt;br /&gt;
A lock can be set with many pins. Each pin has a click sequence and each needs a designated lockpick type (see above). Keep in mind that the lockpicking in The Darkmod is much more involved than in T2 or T3. The player has to listen to sounds or watch a handle or lockbar to know when a lock is pin is picked.&lt;br /&gt;
&lt;br /&gt;
This means that authors can be very evil and really frustrate the player, in which case their missions will probably not be played. So be nice to the player and don&#039;t waste your time. Use simple locks for the most part and save complicated locks for important sections and to build tension. Don&#039;t make the player have 20 pins to pick all with different lockpicks. In most cases 1 or 2 pins will suffice and it isn&#039;t necessary to use both lockpicks on every lock.&lt;br /&gt;
Also try to include a lock lever on lockboxes or chests, door handles will rotate as the pins are being picked. This gives the player visual clues to help with the picking (and essential in noisy environments where you can&#039;t hear the clicks.)&lt;br /&gt;
IMO this system is a huge leap foward for lockpicking but also has the ability to completely frustrate the player as stated above. Keep this in mind when designing your lockpick systems.&lt;br /&gt;
&lt;br /&gt;
These props go on the door itself, or the lid of a chest, eg,&lt;br /&gt;
*&#039;&#039;&#039;lock_pins&#039;&#039;&#039; 1327&lt;br /&gt;
*&#039;&#039;&#039;lock_picktype&#039;&#039;&#039; stts&lt;br /&gt;
&lt;br /&gt;
The lock_pins property specifies how many pins each lockpicktype has.&lt;br /&gt;
The lockpick_type property specifies how many times the player has to switch picks and which pick they have to use. You can see there must always be an equal number of lock_pins and lock_picktypes specified&lt;br /&gt;
&lt;br /&gt;
So looking at the example above we have lockpick_type s(snake), t(triangular), t(triangular), and s(snake). The player will have to use these lockpicks in this order. Once the snake lockpick&#039;s pins are open the player can advance to the triangular pick and so forth.&lt;br /&gt;
5 is added to every click sequence so 5 is the minimum click pattern even if you set it to 0.&lt;br /&gt;
In the example above the lockpins specify in order which pick types have how many pins, so the s pick has 1 + 5 = 6 clicks, the t pick has 8 and so on.&lt;br /&gt;
The above is a difficult lock and to avoid annoying the player it is best only used rarely on a special lock like an important big vault door. Ordinary footlockers and common doors can be just 1 or 2 click sequences, eg, lock_pins 2 and lock_picktype t means the player uses one pick and listens for the end of one sequence of 7 clicks.&lt;br /&gt;
&lt;br /&gt;
lockpick_rotate - is placed on the door. It is the amount the visible rotating handle or pin rotates while picking. For a rotating handle or lockbar normally ignore this and leave the default. During lockpicking it oscillates and progresses to the normal full turn of the handle. Example 0 45 0.&lt;br /&gt;
&lt;br /&gt;
lockpick_translate - is placed on the door. It is the amount the visible handle or pin moves in a straight line while picking. Use this if you have eg, a lockbar that you want to move in a straight line and not rotate, eg sliding catch. Example 0 -5 0&lt;br /&gt;
&lt;br /&gt;
By default, doors are pickable. If you don&#039;t set up the above lockpick spawnargs then it can&#039;t be picked. So there is normally no need to enable lockpicking - just set up the above spawnargs. There is a &#039;&#039;pickable&#039;&#039; spawnarg set to 1 by default. If set to 0 then the door becomes unpickable. But hard to think of an application except in testing or perhaps a special custom situation where it is switched by script perhaps.&lt;br /&gt;
&lt;br /&gt;
===Open, Partially Open, or Closed Door at Game Start===&lt;br /&gt;
&lt;br /&gt;
By default, doors are closed at game start. If you want a door to be already open or partially open then do the following.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note well: Create all doors in their &#039;&#039;closed&#039;&#039; position. Adjust as follows and they will automatically be at the open position when game starts.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Already Open Rotating Door:&lt;br /&gt;
* Select the door.&lt;br /&gt;
* Select the entity inspector&lt;br /&gt;
* Check &#039;&#039;show inherited properties&#039;&#039;&lt;br /&gt;
* Select the &#039;&#039;open&#039;&#039; property&lt;br /&gt;
* Edit the value to 1 in the input box below and tick the check button&lt;br /&gt;
* The door will now be fully open at game start.&lt;br /&gt;
&lt;br /&gt;
* If you want it only partly open:&lt;br /&gt;
* Make sure its &#039;&#039;open&#039;&#039; property is set to 1 as above.&lt;br /&gt;
* Right click the entity inspector and select &#039;&#039;add property&#039;&#039; &lt;br /&gt;
* Click the + sign on the left of the top line where atdm:mover_door is listed to open the folder. (if atdm:mover_door is not listed then the entity was likely changed from eg, func_static. If so, save the map and reload to update the add property list)&lt;br /&gt;
*  scroll down, select &#039;&#039;start_rotate&#039;&#039; then click {{ok}}&lt;br /&gt;
* This adds it to the property list.&lt;br /&gt;
* Now select &#039;&#039;start_rotate&#039;&#039; in the property list.&lt;br /&gt;
* Edit the bottom line of the input box &#039;&#039;below&#039;&#039; the properties window to the angle you want in the same form as described in the &#039;&#039;Rotate Direction and Open Angle&#039;&#039; section. So for example, to have a door that has a fully open default &#039;&#039;rotate&#039;&#039; value of 0 90 0 to start only half open you would give it a &#039;&#039;start_rotate&#039;&#039; value of 0 45 0. &lt;br /&gt;
* In a similar way add the property &#039;&#039;first_frob_open&amp;quot;.&lt;br /&gt;
* Set it to 1 and a partly open door should then open fully on the first frob.&lt;br /&gt;
* Set it to 0 and a partly open door should close on the first frob.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Already Open Sliding Door:&lt;br /&gt;
* Select the door.&lt;br /&gt;
* Select the entity inspector&lt;br /&gt;
* Check &#039;&#039;show inherited properties&#039;&#039;&lt;br /&gt;
* Select the &#039;&#039;open&#039;&#039; property&lt;br /&gt;
* Edit the value to 1 in the input box below and click {{check}} or press {{key-enter}}&lt;br /&gt;
* The door will now be fully open at game start.&lt;br /&gt;
&lt;br /&gt;
* If you want it only partly open:&lt;br /&gt;
* Right click the entity inspector and select &#039;&#039;add property&#039;&#039; &lt;br /&gt;
* Make sure its &#039;&#039;open&#039;&#039; property is set to 1&lt;br /&gt;
* Click the + sign on the left of the top line where atdm:mover_door is listed to open the folder.&lt;br /&gt;
*  scroll down, select &#039;&#039;start_position&#039;&#039; then click OK. (if atdm:mover_door is not listed then the entity was likely changed from eg, func_static. If so, save the map and reload to update the add property list)&lt;br /&gt;
* This adds it to the property list.&lt;br /&gt;
* Now select &#039;&#039;start_position&#039;&#039; in the property list.&lt;br /&gt;
* Edit the bottom line of the input box &#039;&#039;below&#039;&#039; the properties window to the position you want in the same form as described in the &#039;&#039;Sliding (Translation) Amount and Direction&#039;&#039; section. So for example, to have a door that has a fully open default &#039;&#039;translate&#039;&#039; value of 0 50 0 to start only half open you would give it a &#039;&#039;start_position&#039;&#039; value of 0 25 0.&lt;br /&gt;
* In a similar way add the property &#039;&#039;first_frob_open&amp;quot;.&lt;br /&gt;
* Set it to 1 and a partly open door should then open fully on the first frob.&lt;br /&gt;
* Set it to 0 and a partly open door should close on the first frob.&lt;br /&gt;
&lt;br /&gt;
===Rotation Centre, Pivot, Hinge point===&lt;br /&gt;
&lt;br /&gt;
The centre of rotation of a door is at the origin point of its entity and the door rotates with reference to the orientation of that origin point, not the world map. See &#039;&#039;Rotate Direction...&#039;&#039; for more about that. This section only deals with the &#039;&#039;position&#039;&#039; of the rotation centre in the door.&lt;br /&gt;
&lt;br /&gt;
Model Door Centre of Rotation:&amp;lt;br&amp;gt;&lt;br /&gt;
The centre of rotation of a model door cannot be changed within Dark Radiant. Because a model door rotates around the centre &#039;spine&#039; of its back edge this will cause clipping (penetration into solid) as in this example (where the door is set to open to 89 degrees for clarity):&amp;lt;BR&amp;gt;[[Image:modelClipping.jpg]]&amp;lt;BR&amp;gt; So care is needed with placement. You will not normally position a door right next to a wall as in the example but against a shallow frame so clipping will barely be noticeable but either way it can be fixed. You can correct it by adding a translation (see &#039;&#039;Sliding (Translation) Directions&#039;&#039;) value of half the door width in the direction of the door handle. This will gently move the door out as it rotates to clear any solid on that side as in this diagram:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:DoorClip.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
Half a door width will typically be about 2. Any &#039;attachments&#039; such as door handles will still synchronize with the door movement whether the door is rotating, sliding, or both.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Brush Door Centre of Rotation:&amp;lt;br&amp;gt;&lt;br /&gt;
The centre of rotation of a brush door &#039;&#039;can&#039;&#039; be changed. The default origin point of a brush is at its centre. Therefore a default rotating brush door will rotate around its centre when you first create it. So, mappers will commonly need to move that rotation point to a corner or even to some other offset position for example, for an openable window using the door function.&lt;br /&gt;
&lt;br /&gt;
Put simply, to move the rotation point of a brush door you need to move the entity origin relative to the brush(es.)&lt;br /&gt;
&lt;br /&gt;
Moving the entity origin (centre of rotation) relative to a brush door:&lt;br /&gt;
&lt;br /&gt;
* Select the brush door&lt;br /&gt;
* Select &#039;&#039;Vertices mode&#039;&#039; (default shortcut key is {{key|name=V}} or button on top toolbar &#039;Select Vertices&#039;)&lt;br /&gt;
* Drag the door&#039;s entity origin to the point where you want the door to rotate. This should be on the corner on the leading edge side (the side to where the door is opening.) to avoid clipping as in this diagram....&lt;br /&gt;
[[Image:getCorner.jpg]]&lt;br /&gt;
* You should now find that door rotates around that point.&lt;br /&gt;
&lt;br /&gt;
===Rotate Direction and Open Angle===&lt;br /&gt;
&lt;br /&gt;
By default, rotating doors open anti-clockwise (viewed from above) by 90 degrees from the start orientation. If you want to change this edit the &#039;&#039;rotate&#039;&#039; property in the entity inspector. Don&#039;t confuse this &#039;&#039;rotate&#039;&#039; property with the &#039;&#039;rotation&#039;&#039; property. In the entity inspector remember that to see the inherited rotate property you must check the box &#039;Show inherited properties&#039;.&lt;br /&gt;
&lt;br /&gt;
The three values shown in the rotate property are degrees from the closed position around Y Z X (absolute map axes Front, Top, Side views in DR&#039;s ortho view.)&lt;br /&gt;
&lt;br /&gt;
* Positive Y = Open clockwise (Dark Radiant grid front view, looking north)&lt;br /&gt;
* Negative Y = Open anti-clockwise (Dark Radiant grid front view, looking north)&lt;br /&gt;
&lt;br /&gt;
* Positive Z = Open anti-clockwise (Dark Radiant grid top view, looking down)&lt;br /&gt;
* Negative Z = Open clockwise (Dark Radiant grid top view, looking down)&lt;br /&gt;
&lt;br /&gt;
* Positive X = Open anti-clockwise (Dark Radiant grid side view, looking west)&lt;br /&gt;
* Negative X = Open clockwise (Dark Radiant grid side view, looking west)&lt;br /&gt;
&lt;br /&gt;
There is a problem when you come to rotations that are not around the main Y Z X axes of the map, for instance a drawbridge that lowers down to the south east. You might think you can combine Y Z X values to get the result you want - and this can be done (for south east use 45 45 90) but it is a bit of a kludge and the drawbridge twists eccentrically as it lowers (though it arrives correctly!)&lt;br /&gt;
&lt;br /&gt;
The values are in the range -179 to +180. Positive values give an anti-clockwise opening rotation (looking down from above) and negative values give a clockwise opening rotation. The value 180 is unique in that it continues in an anti-clockwise rotation when closing rather than returning clockwise so might be used if you can think of some object that might need such a motion when frobbed!&lt;br /&gt;
&lt;br /&gt;
Edit the rotate value by selecting it and using the input box at the bottom and clicking the check(tick) button. That will change the angle the door will open to. Note that the line with the original default of 0 90 0 will still be there but your new entry will be added on a separate line and that is the one that will work in the game. CAUTION: when adjusting later make sure you have your new line selected and not the original! If you do it will appear to change but your first setting will remain unaltered.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
* 0 90 0 = Opens anti-clockwise round the entity&#039;s &#039;vertical&#039; to 90 degrees - typical default vertical door.&lt;br /&gt;
* 0 0 90 = Lowers a drawbridge from the entity &#039;vertical&#039; to horizontal.&lt;br /&gt;
* 0 0 -45 = Opens clockwise by 45 degrees viewed from the east side. This might suit a skylight in a sloping roof.&lt;br /&gt;
&lt;br /&gt;
&#039;rotate&#039; cannot be combined with translate motions (see [[#Sliding (Translation) Amount and Direction]]) in one door; you need to bind one door to another and link they by targetting one to the other. By that means you can produce exotic and useful motions. A door opening against an upward-sloping floor can thus have a &#039;&#039;lifting hinge&#039;&#039; and raise up slightly to clear the floor; a door can rotate towards you and slide back to one side very effectively.&lt;br /&gt;
&lt;br /&gt;
===Sliding (Translation) Amount and Direction===&lt;br /&gt;
&lt;br /&gt;
By default a Dark Mod door will rotate open. For most sliding doors you want to stop them rotating as well as make them slide. You cannot delete (remove) the &#039;&#039;rotate&#039;&#039; property - you have to set the &#039;&#039;rotate&#039;&#039; property to 0 0 0 to stop a door rotating (see &#039;&#039;Rotate Direction and Open Angle&#039;&#039;.)&lt;br /&gt;
&lt;br /&gt;
Now edit the &#039;&#039;translate&#039;&#039; property value by selecting it (remember to have inherited properties box checked) and using the input box at the bottom and clicking the check(tick) button. That will change the distance the door will slide to. Note that the line with the original default of 0 0 0 will still be there but your new entry will be added on a separate line and that is the one that will work in the game. CAUTION: when adjusting later make sure you have your new line selected and not the original! If you do it will appear to change but your first setting will remain unaltered.&lt;br /&gt;
&lt;br /&gt;
Typically (but not always) you will want your sliding door to slide the width of the door. The three values in the translate property by default are 0 0 0 and are X Y Z &#039;&#039;absolute map&#039;&#039; values (irrespective of door orientation) where:&lt;br /&gt;
&lt;br /&gt;
* Positive X = Slide East (Right side of Dark Radiant grid in top view)&lt;br /&gt;
* Negative X = Slide West (Left side of Dark Radiant grid in top view)&lt;br /&gt;
* Positive Y = Slide North (top of Dark Radiant grid in top view)&lt;br /&gt;
* Negative Y = Slide South (bottom of Dark Radiant grid in top view)&lt;br /&gt;
* Positive Z = Slide Up (Top of Dark Radiant grid in side views)&lt;br /&gt;
* Negative Z = Slide Down (Bottom of Dark Radiant grid in side views)&lt;br /&gt;
&lt;br /&gt;
So for a 50 unit wide door you want to slide fully to the east you would use 50 0 0 for the translate property values. A 100 unit portcullis sliding vertically up would need 0 0 100 to be fully raised.&lt;br /&gt;
&lt;br /&gt;
=== Doors Collision/Push Behaviour ===&lt;br /&gt;
Doors push all entities by default, except for the player. Doors will also stop moving when anything blocks their movement. However, this default behaviour can be changed by setting appropriate spawnargs:&lt;br /&gt;
&lt;br /&gt;
Set &#039;&#039;&#039;push_player&#039;&#039;&#039; to &#039;&#039;&#039;1&#039;&#039;&#039; to let the player be pushed by this door:&lt;br /&gt;
 &amp;quot;push_player&amp;quot;  &amp;quot;1&amp;quot;  // Push the player too (default is off)&lt;br /&gt;
&lt;br /&gt;
By default &#039;&#039;&#039;stop_when_blocked&#039;&#039;&#039; is set to 1 and if a door is blocked by an entity then even if the entity is removed afterwards, the door stays where it is. The next frob will close the door.&lt;br /&gt;
&lt;br /&gt;
Set &#039;&#039;&#039;stop_when_blocked&#039;&#039;&#039; to &#039;&#039;&#039;0&#039;&#039;&#039; to prevent the door from ending the opening sequence when anything blocks its way. It will still pause - but continue to open if the block is removed.&lt;br /&gt;
 &amp;quot;stop_when_blocked&amp;quot;   &amp;quot;0&amp;quot;  // door keeps moving after being blocked (default is off)&lt;br /&gt;
With this setting, doors will still stop at blocking entities (the player, for instance), but will continue to move when the entity moves out of the way.&lt;br /&gt;
&lt;br /&gt;
There is another spawnarg which stops a door pushing a moveable. Apply this to the &#039;&#039;moveable&#039;&#039;, not the door...&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;notPushable&amp;quot;   &amp;quot;1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Door Sounds===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are multiple ways to put sounds on doors.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_open&#039;&#039; &amp;lt;br&amp;gt; &lt;br /&gt;
Sound is triggered as the door begins to open.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_opened&#039;&#039; &amp;lt;br&amp;gt; &lt;br /&gt;
Sound is triggered when the door finishes opening. Defaults to &amp;quot;nosound&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_move&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
The sound plays while the door moves.  Defaults to &amp;quot;nosound&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_close&#039;&#039;  &amp;lt;br&amp;gt;&lt;br /&gt;
Sound is triggered as the door finishes closing.&lt;br /&gt;
&lt;br /&gt;
The following sounds should be left on the default sound in most cases so players clearly know what is going on:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_locked&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
The sound played when a player or an AI tries to open a locked door.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_unlock string&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
The sound played when a door is unlocked.&lt;br /&gt;
&lt;br /&gt;
You can silence any of these sounds by setting the following properties as shown:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_open nosound&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;snd_close nosound&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Don&#039;t just use a dash - as it seems to cause a sound of its own.&lt;br /&gt;
&lt;br /&gt;
===Sound Propagation through Doors and Doorways===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This information will change significantly with the release of 2.0.  See&#039;&#039; [[Controlling Sound Loss Across Portals]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The sound volume reduction to the player (ie, the sound the player hears) is fixed and constant in a cvar which adds a distance factor to the original sound. It is recommended that you do not change that because it will affect other FMs. Currently there is no way to change the way that sound to the player is reduced through doors and doorways.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sound propagation to AI, eg, impact sounds or guard yells is treated separately:&lt;br /&gt;
&lt;br /&gt;
Sound propagation to AI relies on visportals. For details study [[Sound Propagation: Part 1]] and [[Sound Propagation: Part 2]] as well as [[Visportals]] This tutorial will just cover the relevant sound and sound propagation &#039;&#039;properties&#039;&#039; of doors. If you set the &#039;&#039;show inherited properties&#039;&#039; box in the entity inspector you can see them as described here.&lt;br /&gt;
&lt;br /&gt;
Remember, the following have no effect on what the player hears through a door or doorway.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;loss_open&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Drop in sound volume in dB propagated to AI (not player) when going through an open door. (default 1dB)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;loss_closed&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Drop in sound volume in dB propagated to AI (not player) when going through a closed door. (default 15dB) You would want to set this very high to block all sound with a thick door but very low for a barred gate for example.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;loss_double_open&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Drop in sound volume in dB propagated to AI (not player) when going through double doors when only one is open. (default 1dB)&lt;br /&gt;
&lt;br /&gt;
There are also various sound properties for lockpicking:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;snd_lockpick_pin_1 through 14&#039;&#039; and &#039;&#039;snd_lockpick_pin_success&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Allowing the Player to Interrupt Door Motion===&lt;br /&gt;
&lt;br /&gt;
The door property &#039;&#039;interruptable&#039;&#039; determines whether a door can be stopped by frobbing while it is opening or closing. It is enabled (i.e., set to 1) by default. Then the player, by frobbing to start the normal opening, then frobbing again to interrupt, can open a door to any position, e.g., slightly ajar to peek through. Another frob will begin closing, and so on with any additional frobs to stop/reverse-direction.&lt;br /&gt;
&lt;br /&gt;
Be aware that an rotating-style door, when left ajar, will subsequently open or close more slowly than normal in an angular-velocity sense. It instead takes the same time as a full (uninterrupted) opening or closing would take in seconds, as given by &#039;&#039;move_time&#039;&#039; discussed next.&lt;br /&gt;
&lt;br /&gt;
===Speed of Door Opening and Closing===&lt;br /&gt;
&lt;br /&gt;
Rotating Door Speed:&amp;lt;br&amp;gt;&lt;br /&gt;
The time a rotating door takes to open or close is set in the &#039;&#039;move_time&#039;&#039; property, no matter what its maximum open angle may be. So with rotation set at, say, 150 degrees the door just opens faster than at, say, 80 degrees. To change this value, make sure the door is selected then...&lt;br /&gt;
&lt;br /&gt;
* Right click the entity inspector and check &#039;&#039;show inherited properties&#039;&#039;&lt;br /&gt;
* Scroll down, select &#039;&#039;move_time&#039;&#039;&lt;br /&gt;
* Edit the second line of the input box &#039;&#039;below&#039;&#039; the properties window to the time you want.&lt;br /&gt;
* The time is in seconds and decimal fractions can be used. The default is currently 1.75 seconds.&lt;br /&gt;
&lt;br /&gt;
Sliding Door Speed:&amp;lt;br&amp;gt;&lt;br /&gt;
The speed of a sliding door is set in the &#039;&#039;translate_speed&#039;&#039; property. To add this, make sure the door is selected then...&lt;br /&gt;
&lt;br /&gt;
* Right click the entity inspector and check &#039;&#039;show inherited properties&#039;&#039;&lt;br /&gt;
* Scroll down, select &#039;&#039;translate_speed&#039;&#039;&lt;br /&gt;
* Edit the second line of the input box &#039;&#039;below&#039;&#039; the properties window to the speed you want.&lt;br /&gt;
* The speed is in Dark Radiant grid units per second.&lt;br /&gt;
* The default is 0 and if set to this then the door slides open in one second whatever the distance, great or small.&lt;br /&gt;
* CAUTION: It is assumed &#039;&#039;translate&#039;&#039; has been changed from its default value of 0 0 0. If not, a non-zero &#039;&#039;translate_speed&#039;&#039; may cause problems.&lt;br /&gt;
&lt;br /&gt;
===Visportals and Doors===&lt;br /&gt;
&lt;br /&gt;
A visportal face surrounded by solid at its edges and in contact with a door is closed when the door is closed and enabled when the door is open. In most cases you will place a visportal in contact with a working door unless you can see through the door (such as a true glass door or barred gate*.) For full details see [[Visportals]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;*As of 2.0 it is possible to make visportals that remain transparent when closed for gates and windows.  See&#039;&#039; [[Controlling Sound Loss Across Portals]]&lt;br /&gt;
&lt;br /&gt;
==Auto-Closing/Opening Doors==&lt;br /&gt;
Doors that automatically close after being open for some time are easy to setup: Each frobmover entity supports these spawnargs:&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;auto_close_time&amp;quot;:Set this to something &amp;gt;= 0 to let the mover automatically close (again) after this time when being fully opened (measured in seconds). Defaults to -1, which means &#039;do not autoclose&#039;. The event is also activated when the mover starts at the open position at map start.&lt;br /&gt;
;&amp;quot;auto_open_time&amp;quot;:&amp;quot;Set this to something &amp;gt;= 0 to let the mover automatically open (again) after this time when being fully closed (measured in seconds). Defaults to -1, which means &#039;do not autoopen&#039;. The event is also activated when the mover starts at the closed position at map start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Before auto_close_time and the AI Door Management spawnargs next were provided, a more laborious method was used to auto-close doors as if AI were closing doors behind them. Hit &amp;quot;Expand&amp;quot; to review it.&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;I have one door that I particularly want the AI to close as there is a bit of frame lag inside if not. So I set this up and it works good as an auto-closing door - not as good as a true AI closing door as it will auto close when the player goes through as well but it does look very effective to see AI going through and closing the door behind them. Not tested exhaustively so I don&#039;t know if there could be any downside. Here&#039;s what to do....&lt;br /&gt;
&lt;br /&gt;
First a quick summary to make it more clear:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;A trigger_relay is used both as a relay AND carries a stim. We put the trigger_relay with its stim in the path of the open door. The door has a response property. When it opens and contacts the stim its response is to send a signal back to the relay. The relay pauses then closes the door...&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* First, optionally give your door a suitable name like autodoor1, whatever.&lt;br /&gt;
* Copy that name to the clipboard.&lt;br /&gt;
&lt;br /&gt;
Next we need a relay with a delay:&lt;br /&gt;
&lt;br /&gt;
* Create entity &amp;gt; darkmod &amp;gt; trigger_relay&lt;br /&gt;
&lt;br /&gt;
* Place it roughly at the position the door will be at when open and to be on the safe side 3/4th of the way to the far end of the door (not the hinge end) to give max distance from the close door.&lt;br /&gt;
&lt;br /&gt;
* Add the property &#039;target&#039; and paste in the door name you just copied.&lt;br /&gt;
&lt;br /&gt;
* Give the relay itself a name, eg, autoDoor_relay_1, and copy that name to the clipboard, you&#039;ll need that too in a bit.&lt;br /&gt;
&lt;br /&gt;
* Add the property delay and the value 3 - this is the delay in seconds before the door will close; 3 seems about right but 2 might be worth a try because to that 3 is added a random value between 0 to 0.5 seconds from the Time Interval we entered for the stim firings.&lt;br /&gt;
&lt;br /&gt;
* Add the property &#039;wait&#039; and the value 3. This is the time before it can work again in seconds. If you set it too low then in theory the door might trigger again but in this situation I don&#039;t think it&#039;s possible. Too long, eg, one minute, and it won&#039;t work if the AI goes back through the door before then. If this value is -1 then the whole thing will only work ONCE so might be used for an AI who goes through once, closes it behind him, but you don&#039;t want it to be an autodoor thereafter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That&#039;s the relay, now we add a stim to it:&lt;br /&gt;
&lt;br /&gt;
* Still with the trigger relay selected, go to {{menu|Entity|Stim/Response}}&lt;br /&gt;
&lt;br /&gt;
* Custom stim tab.&lt;br /&gt;
&lt;br /&gt;
* Click Add stim type, select the new custom stim type you just made at the bottom of the list and type in eg, autoDoorStim at top right in the input box.&lt;br /&gt;
&lt;br /&gt;
* Click the stim tab and the little drop down arrow against the &#039;type&#039; selector at bottom left and you should see your new custom stim name. Select it.&lt;br /&gt;
&lt;br /&gt;
* Select the new autoDoorStim in the list and on the right you need only type in the radius box 15.0 There is quite a lot of room for error. I had it working on 10 and also on 25. The value should be less than the distance to the closed door else it will trigger open! But no so small that the door might not reach it.&lt;br /&gt;
&lt;br /&gt;
* Select the check box for Time Interval and enter 500 (millisecs.) This is so it doesn&#039;t keep firing more frequently than is necessary. This stim will be firing all through your mission whether the door is used or not so if you had dozens of these then maybe it would affect performance. Too big a number and there may be a long delay before the door shuts - but it will be random depending on the next time the stim happens to fire. We&#039;ll control the delay we want more precisely later.&lt;br /&gt;
&lt;br /&gt;
* Click {{ok}} to confirm it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That&#039;s the stim set up, now for the response to it which is put on the door....&lt;br /&gt;
&lt;br /&gt;
* Select the doorm, then use {{menu|Entity|Stim/response}} and select the response tab.&lt;br /&gt;
&lt;br /&gt;
* Click the little drop down arrow against the &#039;type&#039; selector at bottom left and you should see your new custom stim name. Select it.&lt;br /&gt;
&lt;br /&gt;
* Right click in the big &#039;&#039;Response Effects&#039;&#039; box on the bottom right of the panel.&lt;br /&gt;
&lt;br /&gt;
* Add New Effect and you should get a default &#039;Activate Response&#039; response added to the list. Double click it.&lt;br /&gt;
&lt;br /&gt;
* In the Effect selector at the stop select &#039;Trigger&#039;&lt;br /&gt;
&lt;br /&gt;
* in the Target box, paste in the name of the relay you copied or you can select it from the list at the little arrow.&lt;br /&gt;
&lt;br /&gt;
* Leave the Activator box empty.&lt;br /&gt;
&lt;br /&gt;
* Click {{apply}} and then {{ok}} on the main S &amp;amp; R panel bottom right.&lt;br /&gt;
&lt;br /&gt;
It should now work. No need to wait for an AI, just frob the door and watch it close itself. If not, check the position of the stim brush is close to where the door stops when open.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==AI Door management==&lt;br /&gt;
&lt;br /&gt;
By default AI will open doors and close them behind them. Here are some spawnargs &#039;&#039;&#039;on the door&#039;&#039;&#039; the mapper can use to modify that behaviour:&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;ai_should_not_handle&amp;quot; :If set to 1, AI will not attempt to handle it and add it to the forbidden areas (so that it doesn&#039;t try to path through). They might still walk through the door when it is open though. Useful if you have some special use door that you don&#039;t want the AI to operate.&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;ai_should_not_close&amp;quot; :If set to 1, AI will not close the door behind them unless it obstructs them.&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;canRemainOpen&amp;quot; :If set to 1, it&#039;s the same as &amp;quot;ai_should_not_close, with the added behavior that this is ignored if the door needs to be relocked, or the door is marked &amp;quot;shouldBeClosed&amp;quot;. &#039;&#039;&#039;(This spawnarg is available starting in TDM 2.02.)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Spawnargs &#039;&#039;&#039;on the AI&#039;&#039;&#039; that the mapper can use:&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;canCloseDoors&amp;quot; :Added in 2.12. Defaults to 1.  If set to 0, the AI will not close doors after passing through them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To get AI to unlock/relock specific doors there are two methods:&lt;br /&gt;
&lt;br /&gt;
1. Provide the AI with the key, as detailed in the def_attach method in [[#Keys_carried_by_AI]] above.&lt;br /&gt;
&lt;br /&gt;
2. Add the following spawnarg/value to the AI:&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;can_unlock&amp;quot; &#039;&#039;&amp;lt;doorname&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For additional doors on the same AI use &#039;&#039;can_unlock1 doorname&#039;, `can_unlock2 doorname&#039; etc. &#039;&#039;&#039;Do NOT use can_unlock_1.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If both (1) and (2) are used, then the AI can still go through the door after the player pickpockets the key. Otherwise, unless someone else opens the door for the AI, a typical sequence is that the AI checks their pockets for the missing key, stalls a bit at the locked door, and then (with now-better pathing algorithms) the AI uses an alternate route to the next path_corner, or &amp;quot;mentally&amp;quot; skips ahead in the route to next reachable node and goes there.&lt;br /&gt;
&lt;br /&gt;
===Door Handling Positions===&lt;br /&gt;
&lt;br /&gt;
It is also possible to set custom door handling positions for the AI. This is especially useful when the standard routine that lets the AI choose their standing positions while opening and closing the door fails, leaving them standing still, or circling around in front of the door helplessly.&lt;br /&gt;
&lt;br /&gt;
Place a movers &amp;gt; &#039;&#039;atdm:door_handling_position&#039;&#039; entity where you want the AI to stand while opening/closing the door from this side.&lt;br /&gt;
&lt;br /&gt;
On the door, you need to set the spawnarg &amp;quot;door_handle_position&amp;quot; &amp;quot;name_of_door_handling_position&amp;quot;. You can also place a &#039;&#039;door_handling_position&#039;&#039; on each side of the door, and the AI will automatically choose the right one. In this case, you need to set spawnargs with &amp;quot;door_handle_position_1&amp;quot; etc., and the corresponding names of the &#039;&#039;door_handling_position&#039;&#039; entities on the door.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;door_handling_position&#039;&#039; entities can also carry spawnargs that define the behaviour of the AI, which are useful for example for doors that can only be opened or locked from one side:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;ai_no_open&amp;quot;&#039;&#039;&#039; If set to &amp;quot;1&amp;quot;, the AI will not try to open the door from this side (but will still walk through when the door is already open).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;ai_no_close&amp;quot;&#039;&#039;&#039; If set to &amp;quot;1&amp;quot;, the AI will not attempt to close the door from this side.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;ai_no_unlock&amp;quot;&#039;&#039;&#039; If set &amp;quot;1&amp;quot;, the AI will not be able to unlock the door from this side, but still use it when it is not locked.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;ai_no_lock&amp;quot;&#039;&#039;&#039; If this is set &amp;quot;1&amp;quot;, the AI will not lock the door from this side.&lt;br /&gt;
&lt;br /&gt;
===Door Controllers===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Available in TDM 2.02+&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can design a door so it&#039;s operated by buttons or levers or switches (aka &#039;&#039;controllers&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
A controller is simply an entity that targets the door.  Typical examples of entities that can be used are:&lt;br /&gt;
&lt;br /&gt;
* Buttons: atdm:mover_button&lt;br /&gt;
* Levers: atdm:switch_rotate_lever&lt;br /&gt;
* Switch: atdm:mover_lever&lt;br /&gt;
* Lock: atdm:froblock. (See also next section)&lt;br /&gt;
&lt;br /&gt;
1. Set up the door in the normal manner. It can be a rotating door, a sliding door, a locked door, etc.&lt;br /&gt;
&lt;br /&gt;
2. Turn off the &amp;quot;frobable&amp;quot; spawnarg on the door. (&amp;quot;frobable&amp;quot; &amp;quot;0&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
3. Create a controller entity on each side of the door. If you&#039;re setting up a locked door using atdm:froblock, there&#039;s no need to put any locking information on the controllers. When the game starts, it will transfer any locking information from the door to the controllers.&lt;br /&gt;
&lt;br /&gt;
4. Give each controller the door as a target.&lt;br /&gt;
&lt;br /&gt;
Both the player and any AI that wants to use the door will use the controllers to operate it. Any key, &amp;quot;can_unlock&amp;quot;, or lockpick settings you would normally use at the door are now used at the controllers.&lt;br /&gt;
&lt;br /&gt;
Controllers and &#039;&#039;door_handling_position&#039;&#039; entities can be used on the same door, but in that situation the &#039;&#039;door_handling_position&#039;&#039; entities don&#039;t define where the AI stands to operate the door. They simply provide the &amp;quot;ai_no_*&amp;quot; spawnargs that define AI behavior on each side of the door.&lt;br /&gt;
&lt;br /&gt;
If you wish, you could provide a controller on only one side of the door instead of both sides. Note that, since the door is not frobable, the player won&#039;t be able to operate the door from the non-controller side.&lt;br /&gt;
&lt;br /&gt;
====More about Using a Separate &amp;quot;Froblock&amp;quot; Lock Plate====&lt;br /&gt;
&#039;&#039;by Geep, 2021-22&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Froblock, just discussed as a controller method, actually predated the controller concept in TDM. Here we recap that earlier context, with an alternative treatment of highlighting, and thoughts on texturing and usage.&lt;br /&gt;
&lt;br /&gt;
Suppose you want to have a lock plate (typically mounted on a door frame or wall) that opens a nearby door, where the door and lock plate highlight separately. A traditional way is to adapt the &#039;&#039;froblock&#039;&#039; method described under the &amp;quot;Making your own&amp;quot; section of [[Containers, Chests, etc.]]&lt;br /&gt;
&lt;br /&gt;
Basically, your door is the &amp;quot;chest lid&amp;quot; (of class atdm:mover_door) and your lock is the &amp;quot;chest body&amp;quot; (of class atdm:froblock). Set the properties as described in the wiki. There is a stock texture (darkmod/door/keyhole_metal_001) you can use to decorate a surface of your lock plate, or a patch on it. This method is probably most apt for small hatches and grates designed for the player alone, and with no handles, or non-turning handles attached with &amp;quot;bind&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===AI and &#039;non-frobable&#039; Doors===&lt;br /&gt;
Be aware that the &#039;frobable&#039; spawnarg only applies to the player, not AI.  If you set a door to be non-frobable (i.e. &#039;frobable&#039; &#039;0&#039;), AI can still operate it by interacting directly with it, even if it has a controller.  For example they will do this if:&lt;br /&gt;
&lt;br /&gt;
* they are fleeing or chasing the player&lt;br /&gt;
* the door has a controller but the AI can&#039;t reach it (for example the controller is on the other side of the door)&lt;br /&gt;
&lt;br /&gt;
The best way to mitigate this is to use Door Handling Position entities (see above) with the &#039;ai_no_open&#039; spawnarg set on them. &lt;br /&gt;
&lt;br /&gt;
===AI locking doors behind them===&lt;br /&gt;
&lt;br /&gt;
If one AI is involved (no one else is in the queue), he&#039;ll lock it behind him if he had to unlock it in the first place.&lt;br /&gt;
&lt;br /&gt;
Prior to TDM 1.08, if more than one AI is using the door at the same time (there&#039;s a queue), the first AI unlocks the door, and the last AI through will only lock it if it&#039;s marked &amp;quot;should_always_be_locked&amp;quot; AND they have a &amp;quot;can_unlock&amp;quot; for that door or they have a key for that door. The last AI to use the door doesn&#039;t know that the first AI found it locked, because that info is kept per AI, and not per door. &lt;br /&gt;
&lt;br /&gt;
Starting in TDM 1.08, if the first AI in a door queue found the door locked, that information is remembered by the door and the last AI through uses it to relock the door, as long as they have a &amp;quot;can_unlock&amp;quot; for that door or they have a key for that door.&lt;br /&gt;
&lt;br /&gt;
In the rare case where a door is set up to use door-handling position entities (necessary for AI to use sliding doors), either or both of those entities can have the &amp;quot;ai_no_lock&amp;quot; spawnarg, which means AI aren&#039;t allowed to lock the door from that side.&lt;br /&gt;
&lt;br /&gt;
==Initially Blocking a Door - Partially or Fully==&lt;br /&gt;
&#039;&#039;by Geep 2021&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Suppose you have a door that you want to start out either as unopenable, or able to open just a crack, then later, after something happens, be fully openable and operational. One method known to work:&lt;br /&gt;
&lt;br /&gt;
* Create a moveable object that the opening door runs into and tries to push.&lt;br /&gt;
* Arrange that the far side of the moveable object is jammed against some immovable worldspawn.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s two specific examples that use a wooden plank moveable:&lt;br /&gt;
&lt;br /&gt;
* In &amp;quot;Perilous Refuge&amp;quot;, a plank blocks the door leading out of the player&#039;s starting location, until the player carries it away. &lt;br /&gt;
* At the end of &amp;quot;Away0&amp;quot; (WIP 2021), the player tries to open a door. But if preconditions aren&#039;t met, the occupant seems to let the door open only a crack and complains. Blockage is done by an unseen plank resting on the floor hitting a knob of worldspawn. Preconditions met causes a &amp;quot;$plank.remove()&amp;quot; script call.&lt;br /&gt;
&lt;br /&gt;
Other methods that you might think would work but don’t:&lt;br /&gt;
&lt;br /&gt;
* Block with a func_static object, or an unjammed moveable with &amp;quot;notpushable 1&amp;quot; set. In both cases, the door travels through the object.&lt;br /&gt;
* In advance, &amp;quot;grab&amp;quot; an unjammed moveable to make it appear &amp;quot;solid&amp;quot; to the physics engine. (This was tested by having the player manipulate it; if it had worked, a “grabber” script call might suffice.)&lt;br /&gt;
* Dynamically change the door’s &amp;quot;rotate&amp;quot; limit from script using &amp;quot;setSpawnArg&amp;quot;; this function would only work before you spawn the door, not afterwards.&lt;br /&gt;
&lt;br /&gt;
(Others possibilities not yet tested:&lt;br /&gt;
&lt;br /&gt;
* Change &amp;quot;rotate&amp;quot; using the &amp;quot;setKey&amp;quot; script function; for some spawnargs this works even after spawn.&lt;br /&gt;
* Create a moveable and bind it to the world entity.&lt;br /&gt;
* If you are mainly interested in initially blocking an AI from using a door: it&#039;s possible that the AI re-reads the spawnargs for what doors it&#039;s allowed to open. Try adding a frob Response to the key (Entity -&amp;gt; Stim/Response... -&amp;gt; Response) with an effect that sets the “can_unlock&amp;quot; spawnarg on that AI to &amp;quot;-&amp;quot;.)&lt;br /&gt;
&lt;br /&gt;
==Controlling a Door by Scripting==&lt;br /&gt;
&#039;&#039;by Geep 2021&#039;&#039;&lt;br /&gt;
===If Unlocked===&lt;br /&gt;
&lt;br /&gt;
Simply use, for example with a door named &#039;&#039;door1&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 $door1.Open();&lt;br /&gt;
 ...&lt;br /&gt;
 $door1.Close();&lt;br /&gt;
&lt;br /&gt;
Alternatively, toggle it open or closed with:&lt;br /&gt;
&lt;br /&gt;
 $door1.frob();&lt;br /&gt;
&lt;br /&gt;
If the door has &amp;quot;interruptable 1&amp;quot; (which is the default with atdm:mover_door), you can also frob() it twice to leave it ajar. Interpose and adjust a sys.wait(...) to tune it.&lt;br /&gt;
===If Locked===&lt;br /&gt;
&lt;br /&gt;
You need to unlock it first. Changing the door&#039;s &amp;quot;locked&amp;quot; spawnarg value won&#039;t work. Instead you will use:&lt;br /&gt;
&lt;br /&gt;
 $door1.Unlock();&lt;br /&gt;
&lt;br /&gt;
But there are complications. By default, the door has spawnarg &amp;quot;open_on_unlock 1&amp;quot;. So, assuming you didn&#039;t change that, you&#039;d think unlocking the door would open it. But this spawnarg will be ignored if the gamer has global menu option &amp;quot;Open Doors on Unlock&amp;quot; set to Off. Assuming you want to reliably have the door open, do this:&lt;br /&gt;
&lt;br /&gt;
 $door1.Unlock(); // MAYBE will open door too.&lt;br /&gt;
 sys.wait(3); // If so, wait for door to fully open. Value may need adjusting based on door&#039;s speed&lt;br /&gt;
 $door1.Open(); // Otherwise, open it now.&lt;br /&gt;
&lt;br /&gt;
The wait is added, because otherwise, the opening begun by Unlock may be stopped by Open with the door only partially open. (Probably an alternative to using sys.wait here is to zero the door&#039;s &amp;quot;interruptable&amp;quot; spawnarg.) &lt;br /&gt;
&lt;br /&gt;
==Doors as Triggers==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;by Ishtvan &amp;amp; greebo&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Doors (or any binary frob mover, buttons, levers, etc) now have the option to [[Triggers|trigger]] their target on closing or opening. (For definition purposes, a button is defined as &amp;quot;closed&amp;quot; in the state when it starts out and &amp;quot;open&amp;quot; in the state you press it down to. I know that&#039;s a little non-intuitive, but it came from deriving from doors).&lt;br /&gt;
&lt;br /&gt;
New spawnargs on frob movers:&lt;br /&gt;
;&amp;quot;trigger_on_open&amp;quot; :If set to 1, this binary mover will trigger its targets when it starts out completely closed and is opened.&lt;br /&gt;
;&amp;quot;trigger_when_opened&amp;quot;:If set to 1, this binary mover will trigger its targets when it is completely opened. Code defaults to 0.&lt;br /&gt;
;&amp;quot;trigger_on_close&amp;quot;:If set to 1, this binary mover will trigger its targets when it completely closes after being open.&lt;br /&gt;
&lt;br /&gt;
== Suspicious Doors ==&lt;br /&gt;
&lt;br /&gt;
If you give a door the spawnarg &#039;&#039;&#039;&amp;quot;shouldBeClosed&amp;quot; &amp;quot;1&amp;quot;&#039;&#039;&#039;, then AI will treat it as suspicious if they find the door open.&lt;br /&gt;
&lt;br /&gt;
Doors with that spawnarg should work like this:&lt;br /&gt;
&lt;br /&gt;
- an AI opening the door knows he&#039;s not to become suspicious if he opened the door&lt;br /&gt;
&lt;br /&gt;
- nearby AI alerted by the open door will also not react if they can see the door, and can see the AI that opened it&lt;br /&gt;
&lt;br /&gt;
- AI who come upon the open door later probably won&#039;t be able to see the AI that opened it, so they&#039;ll treat it as suspicious&lt;br /&gt;
&lt;br /&gt;
- if the AI who opened the door comes upon the door later, and it&#039;s still open, and no one&#039;s touched it since he opened it, he&#039;ll see his name on the door and won&#039;t become suspicious. &amp;quot;Oh, crap. I forgot to close it earlier.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
- If an AI comes upon an open door that should be closed, he should close it whether he becomes suspicious or not.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Post TDM 2.00:&#039;&#039;&#039;&lt;br /&gt;
-  AI turn to look at a door they see opening.  The player can crack open a suspicious door to peek out w/o grabbing the attention of a nearby AI. After 5s, the AI will notice the cracked open door. Non-suspicious doors can be cracked open indefinitely w/o nearby AI noticing.&lt;br /&gt;
&lt;br /&gt;
==Slanted or Tilted Doors==&lt;br /&gt;
Slanted or tilted doors can be made as follows:&lt;br /&gt;
&lt;br /&gt;
1) Place your door, preferrably one of the prefab doors, which have a model door and model handle and all the rotation spawnargs pre-set.&lt;br /&gt;
&lt;br /&gt;
2) rotate and place the door+handle model into place you want it to be. Now, if you use the door in the game, the door will rotate around the world z-axis, and not the door model z-axis (which is rotated).&lt;br /&gt;
&lt;br /&gt;
3) to get the door to rotate around the door model z-axis, you must place a model (any model will do, and it can be placed anywhere in the map). Rotate the new model into the same orientation your door model was rotated, i.e. if you door is rotated 45 degrees around the x-axis, do the same rotation on the new model.&lt;br /&gt;
&lt;br /&gt;
4) bind the doors on the new model. This makes the doors start rotating along the new model origin (which is rotated the same way as the doors).&lt;br /&gt;
&lt;br /&gt;
5) working slanted door.&lt;br /&gt;
&lt;br /&gt;
Do note, that all the rotated objects need to be models (suspicion, not tested). You can export DR built stuff into a model using the DR ase exporter script. For custom doors, remember that the exporter places the model origin at the map origin if you do not choose the &amp;quot;place origin in the middle of the object&amp;quot; option.&lt;br /&gt;
&lt;br /&gt;
Also note that the AI probably cannot use slanted doors and might get stuck (suspicion, not tested).&lt;br /&gt;
&lt;br /&gt;
There is a link to a test map here:&lt;br /&gt;
http://forums.thedarkmod.com/topic/9082-newbie-darkradiant-questions/?p=395486&lt;br /&gt;
&lt;br /&gt;
==Skins: A Wide Variety of Door Textures==&lt;br /&gt;
&lt;br /&gt;
This is to remind you that as with many Dark Mod models, there is a wide range of extras skins (textures) available for door models. There are now several basic door entities of different sizes so choose your size first. Then enter the spawnarg: skin with any temporary value. Now select it and click the skin button at the bottom of Dark Radiant&#039;s Entity Inspector and you will find a large of range of skin textures from which to select to give you a choice of appearances for your door.&lt;br /&gt;
&lt;br /&gt;
==Extra Notes==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;func_darkmod_door&#039;&#039; is no longer used (just in case you come across it in the Dark Mod forums or wiki.) &#039;&#039;&#039;&amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt;&#039;&#039;&#039; is the entity to use.&lt;br /&gt;
&lt;br /&gt;
{{tutorial-editing}}&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=Doors&amp;diff=34106</id>
		<title>Doors</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=Doors&amp;diff=34106"/>
		<updated>2025-11-06T20:05:08Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{todo}}&lt;br /&gt;
&#039;&#039;Written by Fidcal&#039;&#039; &#039;&#039;edit Baddcog&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Quick Summary==&lt;br /&gt;
&lt;br /&gt;
Quick way to get an unlocked door in your map:&lt;br /&gt;
&lt;br /&gt;
* Insert one of the prefab doors complete with handles and select its skin property and click the button to change its skin appearance to whatever you want. Set any other properties you need.&lt;br /&gt;
&lt;br /&gt;
Alternatively,&lt;br /&gt;
&lt;br /&gt;
* Create a door from the entity list&lt;br /&gt;
* Use the &amp;quot;skin&amp;quot; spawnarg on the door to change its appearance. &lt;br /&gt;
* Create a handle from the entity list&lt;br /&gt;
* Add the &#039;&#039;door_handle&#039;&#039; property to the door and give it the name of the handle&lt;br /&gt;
* To the door handle add the value frob_peer and use the name of the door.&lt;br /&gt;
* To open clockwise, change the &#039;&#039;rotate&#039;&#039; property from &amp;lt;code&amp;gt;0 90 0&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;0 -90 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
This tutorial explains how to put doors into your map using Dark Radiant, as well as adjust them and their properties.&lt;br /&gt;
&lt;br /&gt;
The rest of this tutorial assumes that you have a basic understanding of using DarkRadiant. If you haven&#039;t done so, please go read the [[Dark Radiant Must Know Basic Intro]] article first.&lt;br /&gt;
&lt;br /&gt;
Additionally:&lt;br /&gt;
&lt;br /&gt;
* Up, down, right, and left in Dark Radiant&#039;s &#039;&#039;top&#039;&#039; orthoview are regarded here as the standard map directions of North, South, East, and West where useful for clarity.&lt;br /&gt;
* Where the term &#039;&#039;brush&#039;&#039; is used with a door it mostly also applies to a door made up of a group of brushes and/or patches.&lt;br /&gt;
* Where the term &#039;&#039;door&#039;&#039; is used it often will also apply to any object you wish to rotate when frobbed, for instance an openable window, box lid, or even more exotic objects that the imaginative mapper might conceive like a signal, engine part, toy, or whatever. So long as it needs to turn or slide just a fixed amount when frobbed then return when frobbed again then the following applies.&lt;br /&gt;
&lt;br /&gt;
==Door types==&lt;br /&gt;
&lt;br /&gt;
All tangible objects in Dark Mod are &#039;&#039;entities&#039;&#039;, having either a pre-made model shape or else brush/patch(es). So there are two ways to create a door in Dark Radiant: as a model door or a textured brush door (or a hybrid of the two).&lt;br /&gt;
&lt;br /&gt;
Models are ready made door objects but cannot within Dark Radiant (at the time of writing) be resized, rescaled, cropped or clipped whereas brushes are very flexible in that respect and can be worked into custom shapes for your map, including secret doors that blend into walls and other surfaces.&lt;br /&gt;
&lt;br /&gt;
Most of the current door models are found in two places along with the door handles.&lt;br /&gt;
*Model Viewer: doors created from here will be static in the world and have no props other than material type.&lt;br /&gt;
You can add any props to them to make them working doors. If nothing else it is a good place to view the different size and skin options for the doors.&lt;br /&gt;
*Entity List: most of the door models can be found here. These doors have properties already assigned so they are ready to be used. Only one base door of each type is listed, create the size/hinge count door you want (2 hinge doors have a &#039;no hinge&#039; skin). You can choose a skin for the door once it has been created in the editor with the &amp;quot;skin&amp;quot; spawnarg (use the model name of the door you want, taken from the model list, as its value). This is the easiest way to create a door. The same goes for door handles.&lt;br /&gt;
&lt;br /&gt;
Remember also that door functions may be applied to objects other than doors, such as openable windows, drawbridges, gates, etc. In fact, anything that needs a partial rotation or slide when frobbed then return when frobbed again, such as a signal device. Lockboxes and chests use similar properties.&lt;br /&gt;
&lt;br /&gt;
You can create one door/handle set and copy/paste it, but you need to take great care that all the name props are changed to match in each clone. Otherwise you get handles that fly off when a distant door moves, and handles that don&#039;t move.&lt;br /&gt;
&lt;br /&gt;
==Creating a Door==&lt;br /&gt;
&lt;br /&gt;
Put simply, to make a door you will be creating an &#039;entity with model&#039; or &#039;entity with brush&#039; or some variation thereof.&lt;br /&gt;
&lt;br /&gt;
===Creating a Model Door===&lt;br /&gt;
&lt;br /&gt;
There are several approaches to making a model door; the simplest is to create a door from the entity list; or create a door from the model viewer (good for static unusable prop doors).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Entity List&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
*Deselect everything in editor by hitting the Esc button&lt;br /&gt;
*Right-click an ortho view and select Create Entity&lt;br /&gt;
*Navigate to darkmod/movers/&#039;&#039;atdm:door_...&#039;&#039;, choose the door you want&lt;br /&gt;
*Click Add&lt;br /&gt;
*To change its appearance, add a &amp;quot;skin&amp;quot; spawnarg to the door, with the value being the model name of the door you want.&lt;br /&gt;
&lt;br /&gt;
You now have a workable door in your level.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Model Viewer&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Right click in the orthoview, select &#039;&#039;Create Model&#039;&#039; then &amp;lt;code&amp;gt;darkmod&amp;lt;/code&amp;gt; and select a door.&lt;br /&gt;
* Note that you can left drag the image in the &#039;&#039;Choose Model&#039;&#039; dialog to rotate it around.&lt;br /&gt;
* Click [[Image:Button ok.png]] and you have a static door.&lt;br /&gt;
* If you want to make it work (openable, frobbable) then:&lt;br /&gt;
** Select the entity inspector,&lt;br /&gt;
** Select the top classname line so it highlights&lt;br /&gt;
** Select the func_static line in the input box &#039;&#039;below&#039;&#039; the properties window.&lt;br /&gt;
** Edit &amp;lt;code&amp;gt;func_static&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt;&lt;br /&gt;
** Click {{check}} or press {{key-enter}}&lt;br /&gt;
&lt;br /&gt;
Alternatively you can do it the old way:&lt;br /&gt;
&lt;br /&gt;
* Create any temporary brush&lt;br /&gt;
* Right click in orthoview and select &amp;lt;code&amp;gt;Create Entity&amp;lt;/code&amp;gt; then &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Left lick the model name line in the entity inspector.&lt;br /&gt;
* Below it on the &#039;&#039;Entity Inspector&#039;&#039; panel you should now see a button &#039;Choose Model&#039;&lt;br /&gt;
* Left click it, select a door model from the darkmod group.&lt;br /&gt;
* Note that you can left drag the image in the &#039;&#039;Choose Model&#039;&#039; dialog to rotate it around.&lt;br /&gt;
* The temporary brush was deleted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In all three instances, you now have a working door with default properties. &lt;br /&gt;
&lt;br /&gt;
Name your door by adding the prop (or modifing it) to name &#039;&#039;My_Door_1&#039;&#039;. You can use any name that you feel is appropriate but all doors with handles attached &#039;&#039;must&#039;&#039; have their own specific name. Use the name My_Door_1 for your first attempt as it will be referenced when you get around to attaching handles (see below).&lt;br /&gt;
&lt;br /&gt;
To add a handle and other adjustments, see [[#Customising and Adjusting Door Properties]] below.&lt;br /&gt;
&lt;br /&gt;
===Creating a Textured Brush Door===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tip:&#039;&#039;&#039; If unsure of size then you might insert a temporary human AI first to get a sense of height.&lt;br /&gt;
&lt;br /&gt;
==== The simplest brush door: ====&lt;br /&gt;
&lt;br /&gt;
* Drag out a new brush to the size required, eg, a seven foot high door is 84&amp;quot; x 1.1 = about 90 units in Dark Radiant.&lt;br /&gt;
* Give it a door texture from the texture browser (or wall texture for a secret door)&lt;br /&gt;
* Right click in orthoview and select &#039;&#039;Create Entity&#039;&#039; then &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You now have a working door but it will rotate around its center. To move the rotation point to where you want the door hinges to be:&lt;br /&gt;
* Select the door and press &#039;v&#039; or the &#039;&#039;Select Vertices&#039;&#039; button to enter vertex editing mode. The door&#039;s origin will show up as a small green square in the middle of the brush.&lt;br /&gt;
* In top-down orthoview, move the origin from the center to the corner of the brush. This is easiest in drag mode (&#039;q&#039; or the &#039;&#039;Resize&#039;&#039; button), although you can use translate mode (&#039;w&#039; or the &#039;&#039;Translate&#039;&#039; button) by manually selecting the vertex first.&lt;br /&gt;
&lt;br /&gt;
==== Multi-brush doors: ====&lt;br /&gt;
&lt;br /&gt;
More complex multi-brush doors can be created using the [[Clipper]] tool, CSG, etc. - this is not covered in this tutorial. Then assign &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt; for that whole brush structure. Also you can collect various brushes positioned together in relation to one another as needed, select them all, then assign &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt; for the group. All the brushes will be children of the &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt; entity and will rotate and be frobbable, etc. as one unit, as one door. To add further brushes or even model shapes later see the section on [[#Adding handles and other items to doors]].&lt;br /&gt;
&lt;br /&gt;
Name your door by adding the prop (or modifing it) to name My_Door_1. You can use any name that you feel is appropriate but all doors with handles attached must have their own specific name. Use the name My_Door_1 for your first attempt as it will be referenced when you get around to attaching handles (see below). (repeated from above in case you didn&#039;t choose to create a model door)&lt;br /&gt;
&lt;br /&gt;
=== Double Doors ===&lt;br /&gt;
Double doors are automatically recognised by the code when the doors are spawned. The prerequisite is that both doors are sharing/touching the same visportal. The spawnarg &#039;&#039;auto_setup_double_door&#039;&#039; (which defaults to &amp;quot;1&amp;quot;) will take care of setting up the open/lock peer relationship between the two doors. The doors will open/close and lock/unlock along with each other as a result.&lt;br /&gt;
&lt;br /&gt;
What happens behind the scenes: the doors are adding each other to their internal open_peer and lock_peer list, which causes the double doors to perform the same action when frobbed or used.&lt;br /&gt;
&lt;br /&gt;
Note that &#039;&#039;auto_setup_double_door&#039;&#039; will not set the frob_peer relationship, i.e. each door will frob-highlight on its own without highlighting the other door. You&#039;ll need to add that spawnarg manually if you want to highlight the entire double door as one.&lt;br /&gt;
&lt;br /&gt;
==Customising and Adjusting Door Properties==&lt;br /&gt;
&lt;br /&gt;
Handles, lockplates, etc. can be added to doors and door properties can be adjusted for rotation, sliding, locking, and more.&lt;br /&gt;
&lt;br /&gt;
Some of the door models have hinge plates and lockboxes that are reskinnable with a good variety of skins.&lt;br /&gt;
&lt;br /&gt;
===Door handles and other door attachments===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Summary: just add the property &#039;&#039;bind&#039;&#039; with the door&#039;s name to the attachment and position it where you want it on the door. If it&#039;s a &#039;&#039;atdm:mover_door_handle&#039;&#039; then it automatically will work as a handle but you can bind virtually anything.&#039;&#039;&#039;&lt;br /&gt;
You can add handles and other items to doors such that they move correctly with the door whether rotating, sliding, or both and even if the door is not vertical such as a skylight or trapdoor.&lt;br /&gt;
Handle models come in two types, &#039;&#039;single handles&#039;&#039; and &#039;&#039;double handles&#039;&#039;. A single handle is one sided, this means the handle will be inside the door or outside the door, but not both. A double handle has a lever on the inside of the door and a handle on the outside of the door. Each has benefits.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;Single door handles&#039;&#039;&#039;&#039;&#039;:&lt;br /&gt;
Single door handles can be used on a static door, a door that&#039;s just for show that no AI&#039;s or the player can use. In this case you should just create a door handle from the model viewer, it will be static and have no properties such as scripts. It is for looks only.  Note that TDM is trying to establish the expectation that decorative doors that cannot be opened do not have handles (though not all maps follow this).&lt;br /&gt;
&lt;br /&gt;
I will call this &#039;&#039;multiple handles&#039;&#039;, see more below.&lt;br /&gt;
&lt;br /&gt;
These can also be useful on brush doors created in the editor that may be very thin or very wide.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;Double door handles&#039;&#039;&#039;&#039;&#039;:&lt;br /&gt;
These are models have have a handle inside and outside. The bonus is that they only use one entity. Maps are limited to about 4,000 entities but when you count lights, AI, sound speakers, ect... you can run out of entities quickly on a large map. If you plan on building a large map this is the way to go, even in a small map they have benefits, namely that you only have to attach one handle per door.&lt;br /&gt;
&lt;br /&gt;
Whether you decide to use a single handle or a double handle you must first follow the instructions below and attach one handle first. If you choose a double handle, follow the instructions below and you are done. If you choose a single handle type follow the instructions then also follow the &#039;&#039;multiple handle&#039;&#039; instructions for the second handle.&lt;br /&gt;
&lt;br /&gt;
Both single and double handle types can be found in two places. The model viewer which will create a static model good for show, you can manually add props to make them work OR you can look in the entity browser.&lt;br /&gt;
Using a handle from the entity browser saves you a little bit of time as some props are already added, you just need to add the frob_peer names for the doors/handles and the door_handle name to the door.&lt;br /&gt;
&lt;br /&gt;
=== Adding a working model door handle===&lt;br /&gt;
&lt;br /&gt;
Quick summary:&lt;br /&gt;
* Create a model or brush handle and make it an &#039;&#039;atdm:mover_door_handle&#039;&#039; entity.&lt;br /&gt;
* Position it on your door.  Use the opposite side from the door&#039;s multicolor X-Y-Z indicator (highlight the door to see it) if it&#039;s not obvious which side it goes on.  &lt;br /&gt;
* &#039;&#039;&#039;Bind&#039;&#039;&#039; the handle to the door (bind &amp;lt;doorname&amp;gt;)&lt;br /&gt;
* It should now be a working handle though may need adjustments of rotation etc. see later. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Important: read preceding section on door handle types and performance issues first.&lt;br /&gt;
&lt;br /&gt;
This works with both a model door and a brush door:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rotation&#039;&#039;&#039;:&lt;br /&gt;
* By default the door handle entity rotates &#039;&#039;anti-clockwise&#039;&#039; (looked at from the front) then springs back. A &#039;&#039;double handle&#039;&#039; model is OK but two singles (see &#039;&#039;Multiple door handles&#039;&#039; below) need more care as only one is the functioning entity and the other is just attached to it. So anti-clockwise is fine for a door with its hinge on the left and the handle on the right - the handle will rotate down then spring back. If you put the functioning door handle on the other side you will have to change the default &#039;&#039;rotate&#039;&#039; property from -45 0 0 to 45 0 0. &#039;&#039;&#039;&#039;&#039;Therefore it is easier to generally put this handle on the side of the door where the hinge is on the left and the non-functioning attachment handle on the other side.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*If your door only needs one handle, eg, a cupboard door, and from outside its hinge is on the right then you will need to change the &#039;&#039;rotate&#039;&#039; property of the handle as described above.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;The functioning handle entity:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
* Create an entity door handle (movers folder) or create a brush or model handle and assign it the entity &#039;&#039;atdm:mover_door_handle&#039;&#039;.&lt;br /&gt;
* Position it where you wish on your door.&lt;br /&gt;
* &#039;&#039;&#039;Bind&#039;&#039;&#039; the handle to the door, by adding the &amp;quot;bind&amp;quot; spawnarg to the handle.&lt;br /&gt;
&lt;br /&gt;
You now have a working door handle with default properties.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Multiple door handles&#039;&#039;&#039;:&lt;br /&gt;
Now that you&#039;ve got a handle attached to one side of the door it is time to add one to the other side (unless you used a double handle).&lt;br /&gt;
* Create the new handle. The single handles come in left and right persuasions. A door needs a left facing handle on one side and a right facing handle on the other, so if you have already added the left handle create a right handle and line it up on the other side of the door.&lt;br /&gt;
* Name this handle. I prefer to keep a naming convention for each door and it&#039;s respective handles, it makes things alot easier. The door is named &#039;&#039;&#039;My_Door_1&#039;&#039;&#039;, the first handle is named &#039;&#039;&#039;My_Handle_1&#039;&#039;&#039; so name the second handle &#039;&#039;&#039;My_Handle_1_1&#039;&#039;&#039;. This will make it stay with the first handle in the entity list. This is important to keep organized. If you name it My_Handle_2 then when you get to another door named My_Door_2 you&#039;ll be confused.&lt;br /&gt;
* Place and &#039;&#039;&#039;bind&#039;&#039;&#039; that handle to your door.&lt;br /&gt;
&lt;br /&gt;
You now have two single door handles on either side of the door that rotate together as if they were physically attached.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add a brush to a brush door&#039;&#039;&#039;:&lt;br /&gt;
* Select the new brush &#039;&#039;and&#039;&#039; the brush door all together; &#039;&#039;the entity &#039;&#039;&#039;must&#039;&#039;&#039; be selected &#039;&#039;&#039;last&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
* Use {{menu|Edit|Reparent primitives}}. This ensures the parent entity adopts the new item(s).&lt;br /&gt;
* If you have trouble selecting them in the orthoview because other brushes, etc. get selected then try in the camera view or as a last resort move them temporarily to an open area (but keep them in the same positions relative to each other.) Use {{key-shift}}+{{LMB}} on new item(s) then {{key-shift}}+{{LMB}} on main entity. Once they are all selected, use the {{menu|Edit|Reparent primitives}}.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add &#039;&#039;model&#039;&#039; static items&#039;&#039;&#039;: knockers, hinges, static handles etc. to a &#039;&#039;Model Door&#039;&#039;:&lt;br /&gt;
* Select item&lt;br /&gt;
* Right click in orthoview and select &#039;&#039;Create Entity&#039;&#039; then &amp;lt;code&amp;gt;entity func_static&amp;lt;/code&amp;gt;&lt;br /&gt;
* Position it where you wish on your door.&lt;br /&gt;
* To synchronize this with your particular door you need to add the property &#039;&#039;bind&#039;&#039; and the individual door name to the brush entity. To do this...&lt;br /&gt;
** Select the model door.&lt;br /&gt;
** In the entity inspector, select the &#039;&#039;name&#039;&#039; line&lt;br /&gt;
** Select the bottom line in the input box &#039;&#039;below&#039;&#039; the properties window.&lt;br /&gt;
** Copy the name&lt;br /&gt;
** Deselect the door with {{key-esc}}&lt;br /&gt;
** Select the brush entity&lt;br /&gt;
** Add a property &amp;quot;bind&amp;quot; to it.&lt;br /&gt;
** Change the value of the property by pasting in the door name&lt;br /&gt;
** Click {{check}} or press {{key-enter}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add &#039;&#039;brush&#039;&#039; static items&#039;&#039;&#039;: knockers, hinges, static handles to a Model Door:&lt;br /&gt;
* This method is not ideal but it seems to work OK.&lt;br /&gt;
* Select the brush.&lt;br /&gt;
* Right click in orthoview and select Create Entity then &#039;&#039;atdm:mover_door_handle&#039;&#039;&lt;br /&gt;
* Position it where you wish on your door.&lt;br /&gt;
&lt;br /&gt;
To synchronize this with your particular door you need to add the property &#039;&#039;door_handle&#039;&#039; on the door, and give as the value the name of the brush you just created.&lt;br /&gt;
&lt;br /&gt;
This brush turns like a handle. To stop it:&lt;br /&gt;
&lt;br /&gt;
* Adding &#039;&#039;rotate 0 0 0&#039;&#039; or disabling the handle script won&#039;t help.&lt;br /&gt;
* Add a real working handle (as in the section above &#039;&#039;To add a working model door handle...&#039;&#039; and it must be added LAST.)&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want too see a real working handle added maybe try another tiny brush with the handle function and hide it inside the door?&lt;br /&gt;
&lt;br /&gt;
===Locking Doors===&lt;br /&gt;
&lt;br /&gt;
To lock a door check the &#039;&#039;show inherited properties&#039;&#039; in the entity inspector for a &#039;&#039;atdm:mover_door&#039;&#039; entity and you should see the &#039;&#039;locked&#039;&#039; property. Select it and in the input box below the properties you can change its value:&lt;br /&gt;
&lt;br /&gt;
* 0 = unlocked (default)&lt;br /&gt;
* 1 = locked&lt;br /&gt;
&lt;br /&gt;
If locked it will require an entity that is associated with it to be able to act as a key to unlock it.&lt;br /&gt;
&lt;br /&gt;
Currently door handles on locked doors will rotate when frobbed, they will bounce back though and the door will stay locked until unlocked.&lt;br /&gt;
&lt;br /&gt;
===Keys===&lt;br /&gt;
&lt;br /&gt;
Assigning specific keys to specific doors is simple.&lt;br /&gt;
&lt;br /&gt;
* It is recommended that you create an existing key entity. These keys have all required props, they just need to be named.&lt;br /&gt;
&lt;br /&gt;
Alternatively you can create a key from the Model Viewer and want it to be useable&lt;br /&gt;
* Make sure it has the properties:&lt;br /&gt;
 useable 1 [so it can be used by the door]&lt;br /&gt;
 frobable 1&lt;br /&gt;
 inv_name &amp;lt;unique name&amp;gt;&lt;br /&gt;
 inv_category Keys&lt;br /&gt;
 inv_target player1&lt;br /&gt;
 inv_icon guis/assets/hud/inventory_icons/&amp;lt;icon name&amp;gt;&lt;br /&gt;
 inv_stackable 0 or 1 where 1 can be used on all copies of the same key so they show as one entry in the inventory with a total.&lt;br /&gt;
&lt;br /&gt;
Add to the door the property &amp;lt;code&amp;gt;used_by&amp;lt;/code&amp;gt; with the name of the key as the value. Multiple keys can open the same door by using several &amp;lt;tt&amp;gt;used_by&amp;lt;/tt&amp;gt; spawnargs:&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;used_by&amp;quot;  &amp;quot;doorkey_1&amp;quot;&lt;br /&gt;
 &amp;quot;used_by1&amp;quot; &amp;quot;doorkey_2&lt;br /&gt;
&lt;br /&gt;
==== Keys Carried by AI ====&lt;br /&gt;
&lt;br /&gt;
So you have a door and you have a guard AI and you want the guard to be able to open/close/lock the door, but you also want the player to be able to pickpocket the key. Keys can be attached to AI in two ways.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The Def_Attach Method&#039;&#039;. This method is the best one for doors that you expect the AI to operate. It uses spawnargs to spawn the key at game start.&lt;br /&gt;
&lt;br /&gt;
*&amp;quot;def_attach6&amp;quot; &amp;quot;atdm:prop_silverkey&amp;quot; // the entity to spawn - in this case a key.&lt;br /&gt;
*&amp;quot;pos_attach6&amp;quot; &amp;quot;belt_back_right&amp;quot; // where the key will spawn on the Ai.&lt;br /&gt;
*&amp;quot;name_attach6&amp;quot; &amp;quot;door_key&amp;quot; // this gives &#039;attach6&#039; arg the name &amp;quot;door_key&amp;quot; and is the name the arg &amp;quot;used_by&amp;quot; will need, eg: &amp;quot;used_by&amp;quot; &amp;quot;door_key&amp;quot;&lt;br /&gt;
*&amp;quot;set inv_name on door_key&amp;quot; &amp;quot;Door key&amp;quot; // The name the key get when the play adds it to their inventory.&lt;br /&gt;
*&amp;quot;set name on door_key&amp;quot; &amp;quot;door_key&amp;quot; // here it gets a name to be used in the map in general.&lt;br /&gt;
&lt;br /&gt;
For more info on this method, see [[Attaching Props to AI]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The Bind Method&#039;&#039;. This lacks the animation finesse of def_attach, but does let you see the key in DR. The method is particularly helpful in, say, adding a second key to an AI in the back middle of a belt. The AI cannot use a bound key to open a locked door; the workaround is to fake it with &amp;quot;can_unlock&amp;quot; as discussed further below. Or to use bound keys mainly for items the AI will not attempt to open, such as hatches, duct covers, or chests.&lt;br /&gt;
&lt;br /&gt;
* Load a key entity&lt;br /&gt;
* Position where you want it in relation to the AI, and bind it to them (i.e., &amp;quot;bind&amp;quot; &amp;quot;&amp;lt;AIname&amp;gt;&amp;quot;)&lt;br /&gt;
* Add the spawnarg &amp;quot;bindToJoint&amp;quot; &amp;quot;Hips&amp;quot; (or another location like LeftHips_Dummy; see AI for list)&lt;br /&gt;
* Adjust existing spawnargs accordingly (that is, be sure the name and door&#039;s/chest&#039;s &amp;quot;used_by&amp;quot; match, if you aren&#039;t using a prefab chest with key). This is for the benefit of the player after pickpocketing the key; as stated above, the AI itself can&#039;t use it for unlocking.&lt;br /&gt;
&lt;br /&gt;
For more info on this method, see [[Attaching_Items]] and [[BindToJoint]].&lt;br /&gt;
&lt;br /&gt;
====Keys Carried by Player====&lt;br /&gt;
&lt;br /&gt;
With a door&#039;s key selected in your inventory and the door highlighted, you can...&lt;br /&gt;
* unlock it (which will also auto-open if enabled) by either frobbing it or hitting the Use key (typically U or Enter).&lt;br /&gt;
* lock (or relock) it via the Use key. Why do this? To avoid pursuit, or to lure guards into a room, and then lock them in (if they don&#039;t have a key or specific can_unlock powers). &lt;br /&gt;
&lt;br /&gt;
====Master Key for Testing====&lt;br /&gt;
&lt;br /&gt;
By default, ALL locks can be opened by any key named &#039;&#039;key_master&#039;&#039;. Just create a key in your map, name it &#039;&#039;key_master&#039;&#039; and it becomes a master key for use while testing. Add inv_map_start 1 to it so it is in the player inventory at game start. Remember to delete it when your mission is finished.&lt;br /&gt;
&lt;br /&gt;
====Automatically Removing Keys from Player Inventory After Use====&lt;br /&gt;
If a fan mission has a lot of keys it can clog up the player inventory. If the key is single-use, it can be useful to automatically remove it from the player inventory after use.  Below is a way to do it using a simple setup and a generic script function that can be used for multiple doors.&lt;br /&gt;
&lt;br /&gt;
=====Generic Version=====&lt;br /&gt;
&lt;br /&gt;
You&#039;ll need the following entities, preferably set up near each other in your map:&lt;br /&gt;
* The door entity itself&lt;br /&gt;
* A trigger_count entity&lt;br /&gt;
* An atdm:target_callscriptfunction entity&lt;br /&gt;
* some random entity for the target_callscriptfunction to target (explanation below)&lt;br /&gt;
&lt;br /&gt;
The below diagram shows the spawnargs and targeting required for the setup:&lt;br /&gt;
[[File:Key remove2.png|left|thumb]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
The script being called (&#039;openDoor&#039;) is defined in fms/&amp;lt;mapname&amp;gt;/maps/&amp;lt;mapname&amp;gt;.script and looks like this:&lt;br /&gt;
&lt;br /&gt;
 void openDoor(entity target, entity door, entity callscriptfunction)&lt;br /&gt;
 {&lt;br /&gt;
     string keyName = door.getKey(&amp;quot;used_by&amp;quot;);&lt;br /&gt;
     entity key = sys.getEntity(keyName);&lt;br /&gt;
     $player1.replaceInvItem(key, $null_entity);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Explanation as follows:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;For the door:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;trigger_on_open&#039;&#039;&#039; spawnarg: The door is configured to trigger its targets when it opens&lt;br /&gt;
* target &#039;&#039;&#039;trigger_count&#039;&#039;&#039; entity: this is the entity that is triggered when the door is opened&lt;br /&gt;
* &#039;&#039;&#039;used_by&#039;&#039;&#039; spawnarg: This names the key entity required for unlocking the door&lt;br /&gt;
* The other spawnargs are just the usual for setting the door as locked and unpickable&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;trigger_count entity:&#039;&#039;&#039;&lt;br /&gt;
* When triggered, this entity will in turn trigger the script that removes the key from the player inventory.&lt;br /&gt;
* &#039;&#039;&#039;count&#039;&#039;&#039; spawnarg: This is set to 1 because we only want the key removal script called once - the first time the player opens the door.&lt;br /&gt;
* this entity targets the atdm:target_callscriptfunction, which contains details of the script to execute&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;atdm:target_callscriptfunction entity:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;call&#039;&#039;&#039; spawnarg: This is the name of the script function to call&lt;br /&gt;
* &#039;&#039;&#039;foreach&#039;&#039;&#039; spawnarg: This version of the script event provides access to the &#039;activator&#039;, or the entity that triggered it (in this case, the door).  Using that information we can obtain the key name. See [[A to Z Scripting: Ways of calling a script#target_callscriptfunction|here]] for details.&lt;br /&gt;
* &#039;&#039;&#039;target any static entity&#039;&#039;&#039;: For this version of the script event to work, the target_callscriptfunction entity needs to target something.  This can be any static entity in the map (i.e. one that won&#039;t get removed or anything). I usually just target the nearest entity (e.g. a light or a lamp, or a model).  This provides no functionality in the context of this tutorial, it just satisfies the conditions of the script event.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The script:&#039;&#039;&#039;&lt;br /&gt;
* Pretty self-explanatory.  The script gets the name of the key entity via the &#039;&#039;&#039;used_by&#039;&#039;&#039; spawnarg on the door, retrieves the key entity, and then replaces it in the player inventory with a null entity, effectively removing it.&lt;br /&gt;
* Any door can use this script as its generic (although they will need their own trigger_count and target_callscriptfunction entities)&lt;br /&gt;
&lt;br /&gt;
=====Simpler, No-script Version=====&lt;br /&gt;
This is similar to above, but is more limited.  You need to hard-code the key name as a spawnarg on an atdm:target_itemremove entity as they key name can&#039;t be automatically determined. This makes it slightly more error-prone as we&#039;re naming entities in more than one place, but ideal if you&#039;re uncomfortable with scripting.&lt;br /&gt;
&lt;br /&gt;
[[File:Key remove4.png|left|thumb]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Explanation as follows:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;atdm:target_itemremove entity:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;unique_item &#039;&#039;&#039; spawnarg: The name of the key to remove from the player inventory&lt;br /&gt;
&lt;br /&gt;
===Lockpicks===&lt;br /&gt;
&#039;&#039;by Baddcog&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
There are two lock pick types.&lt;br /&gt;
*&#039;&#039;&#039;s&#039;&#039;&#039;=snake&lt;br /&gt;
*&#039;&#039;&#039;t&#039;&#039;&#039;=triangular&lt;br /&gt;
&lt;br /&gt;
A lock can be set with many pins. Each pin has a click sequence and each needs a designated lockpick type (see above). Keep in mind that the lockpicking in The Darkmod is much more involved than in T2 or T3. The player has to listen to sounds or watch a handle or lockbar to know when a lock is pin is picked.&lt;br /&gt;
&lt;br /&gt;
This means that authors can be very evil and really frustrate the player, in which case their missions will probably not be played. So be nice to the player and don&#039;t waste your time. Use simple locks for the most part and save complicated locks for important sections and to build tension. Don&#039;t make the player have 20 pins to pick all with different lockpicks. In most cases 1 or 2 pins will suffice and it isn&#039;t necessary to use both lockpicks on every lock.&lt;br /&gt;
Also try to include a lock lever on lockboxes or chests, door handles will rotate as the pins are being picked. This gives the player visual clues to help with the picking (and essential in noisy environments where you can&#039;t hear the clicks.)&lt;br /&gt;
IMO this system is a huge leap foward for lockpicking but also has the ability to completely frustrate the player as stated above. Keep this in mind when designing your lockpick systems.&lt;br /&gt;
&lt;br /&gt;
These props go on the door itself, or the lid of a chest, eg,&lt;br /&gt;
*&#039;&#039;&#039;lock_pins&#039;&#039;&#039; 1327&lt;br /&gt;
*&#039;&#039;&#039;lock_picktype&#039;&#039;&#039; stts&lt;br /&gt;
&lt;br /&gt;
The lock_pins property specifies how many pins each lockpicktype has.&lt;br /&gt;
The lockpick_type property specifies how many times the player has to switch picks and which pick they have to use. You can see there must always be an equal number of lock_pins and lock_picktypes specified&lt;br /&gt;
&lt;br /&gt;
So looking at the example above we have lockpick_type s(snake), t(triangular), t(triangular), and s(snake). The player will have to use these lockpicks in this order. Once the snake lockpick&#039;s pins are open the player can advance to the triangular pick and so forth.&lt;br /&gt;
5 is added to every click sequence so 5 is the minimum click pattern even if you set it to 0.&lt;br /&gt;
In the example above the lockpins specify in order which pick types have how many pins, so the s pick has 1 + 5 = 6 clicks, the t pick has 8 and so on.&lt;br /&gt;
The above is a difficult lock and to avoid annoying the player it is best only used rarely on a special lock like an important big vault door. Ordinary footlockers and common doors can be just 1 or 2 click sequences, eg, lock_pins 2 and lock_picktype t means the player uses one pick and listens for the end of one sequence of 7 clicks.&lt;br /&gt;
&lt;br /&gt;
lockpick_rotate - is placed on the door. It is the amount the visible rotating handle or pin rotates while picking. For a rotating handle or lockbar normally ignore this and leave the default. During lockpicking it oscillates and progresses to the normal full turn of the handle. Example 0 45 0.&lt;br /&gt;
&lt;br /&gt;
lockpick_translate - is placed on the door. It is the amount the visible handle or pin moves in a straight line while picking. Use this if you have eg, a lockbar that you want to move in a straight line and not rotate, eg sliding catch. Example 0 -5 0&lt;br /&gt;
&lt;br /&gt;
By default, doors are pickable. If you don&#039;t set up the above lockpick spawnargs then it can&#039;t be picked. So there is normally no need to enable lockpicking - just set up the above spawnargs. There is a &#039;&#039;pickable&#039;&#039; spawnarg set to 1 by default. If set to 0 then the door becomes unpickable. But hard to think of an application except in testing or perhaps a special custom situation where it is switched by script perhaps.&lt;br /&gt;
&lt;br /&gt;
===Open, Partially Open, or Closed Door at Game Start===&lt;br /&gt;
&lt;br /&gt;
By default, doors are closed at game start. If you want a door to be already open or partially open then do the following.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note well: Create all doors in their &#039;&#039;closed&#039;&#039; position. Adjust as follows and they will automatically be at the open position when game starts.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Already Open Rotating Door:&lt;br /&gt;
* Select the door.&lt;br /&gt;
* Select the entity inspector&lt;br /&gt;
* Check &#039;&#039;show inherited properties&#039;&#039;&lt;br /&gt;
* Select the &#039;&#039;open&#039;&#039; property&lt;br /&gt;
* Edit the value to 1 in the input box below and tick the check button&lt;br /&gt;
* The door will now be fully open at game start.&lt;br /&gt;
&lt;br /&gt;
* If you want it only partly open:&lt;br /&gt;
* Make sure its &#039;&#039;open&#039;&#039; property is set to 1 as above.&lt;br /&gt;
* Right click the entity inspector and select &#039;&#039;add property&#039;&#039; &lt;br /&gt;
* Click the + sign on the left of the top line where atdm:mover_door is listed to open the folder. (if atdm:mover_door is not listed then the entity was likely changed from eg, func_static. If so, save the map and reload to update the add property list)&lt;br /&gt;
*  scroll down, select &#039;&#039;start_rotate&#039;&#039; then click {{ok}}&lt;br /&gt;
* This adds it to the property list.&lt;br /&gt;
* Now select &#039;&#039;start_rotate&#039;&#039; in the property list.&lt;br /&gt;
* Edit the bottom line of the input box &#039;&#039;below&#039;&#039; the properties window to the angle you want in the same form as described in the &#039;&#039;Rotate Direction and Open Angle&#039;&#039; section. So for example, to have a door that has a fully open default &#039;&#039;rotate&#039;&#039; value of 0 90 0 to start only half open you would give it a &#039;&#039;start_rotate&#039;&#039; value of 0 45 0. &lt;br /&gt;
* In a similar way add the property &#039;&#039;first_frob_open&amp;quot;.&lt;br /&gt;
* Set it to 1 and a partly open door should then open fully on the first frob.&lt;br /&gt;
* Set it to 0 and a partly open door should close on the first frob.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Already Open Sliding Door:&lt;br /&gt;
* Select the door.&lt;br /&gt;
* Select the entity inspector&lt;br /&gt;
* Check &#039;&#039;show inherited properties&#039;&#039;&lt;br /&gt;
* Select the &#039;&#039;open&#039;&#039; property&lt;br /&gt;
* Edit the value to 1 in the input box below and click {{check}} or press {{key-enter}}&lt;br /&gt;
* The door will now be fully open at game start.&lt;br /&gt;
&lt;br /&gt;
* If you want it only partly open:&lt;br /&gt;
* Right click the entity inspector and select &#039;&#039;add property&#039;&#039; &lt;br /&gt;
* Make sure its &#039;&#039;open&#039;&#039; property is set to 1&lt;br /&gt;
* Click the + sign on the left of the top line where atdm:mover_door is listed to open the folder.&lt;br /&gt;
*  scroll down, select &#039;&#039;start_position&#039;&#039; then click OK. (if atdm:mover_door is not listed then the entity was likely changed from eg, func_static. If so, save the map and reload to update the add property list)&lt;br /&gt;
* This adds it to the property list.&lt;br /&gt;
* Now select &#039;&#039;start_position&#039;&#039; in the property list.&lt;br /&gt;
* Edit the bottom line of the input box &#039;&#039;below&#039;&#039; the properties window to the position you want in the same form as described in the &#039;&#039;Sliding (Translation) Amount and Direction&#039;&#039; section. So for example, to have a door that has a fully open default &#039;&#039;translate&#039;&#039; value of 0 50 0 to start only half open you would give it a &#039;&#039;start_position&#039;&#039; value of 0 25 0.&lt;br /&gt;
* In a similar way add the property &#039;&#039;first_frob_open&amp;quot;.&lt;br /&gt;
* Set it to 1 and a partly open door should then open fully on the first frob.&lt;br /&gt;
* Set it to 0 and a partly open door should close on the first frob.&lt;br /&gt;
&lt;br /&gt;
===Rotation Centre, Pivot, Hinge point===&lt;br /&gt;
&lt;br /&gt;
The centre of rotation of a door is at the origin point of its entity and the door rotates with reference to the orientation of that origin point, not the world map. See &#039;&#039;Rotate Direction...&#039;&#039; for more about that. This section only deals with the &#039;&#039;position&#039;&#039; of the rotation centre in the door.&lt;br /&gt;
&lt;br /&gt;
Model Door Centre of Rotation:&amp;lt;br&amp;gt;&lt;br /&gt;
The centre of rotation of a model door cannot be changed within Dark Radiant. Because a model door rotates around the centre &#039;spine&#039; of its back edge this will cause clipping (penetration into solid) as in this example (where the door is set to open to 89 degrees for clarity):&amp;lt;BR&amp;gt;[[Image:modelClipping.jpg]]&amp;lt;BR&amp;gt; So care is needed with placement. You will not normally position a door right next to a wall as in the example but against a shallow frame so clipping will barely be noticeable but either way it can be fixed. You can correct it by adding a translation (see &#039;&#039;Sliding (Translation) Directions&#039;&#039;) value of half the door width in the direction of the door handle. This will gently move the door out as it rotates to clear any solid on that side as in this diagram:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:DoorClip.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
Half a door width will typically be about 2. Any &#039;attachments&#039; such as door handles will still synchronize with the door movement whether the door is rotating, sliding, or both.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Brush Door Centre of Rotation:&amp;lt;br&amp;gt;&lt;br /&gt;
The centre of rotation of a brush door &#039;&#039;can&#039;&#039; be changed. The default origin point of a brush is at its centre. Therefore a default rotating brush door will rotate around its centre when you first create it. So, mappers will commonly need to move that rotation point to a corner or even to some other offset position for example, for an openable window using the door function.&lt;br /&gt;
&lt;br /&gt;
Put simply, to move the rotation point of a brush door you need to move the entity origin relative to the brush(es.)&lt;br /&gt;
&lt;br /&gt;
Moving the entity origin (centre of rotation) relative to a brush door:&lt;br /&gt;
&lt;br /&gt;
* Select the brush door&lt;br /&gt;
* Select &#039;&#039;Vertices mode&#039;&#039; (default shortcut key is {{key|name=V}} or button on top toolbar &#039;Select Vertices&#039;)&lt;br /&gt;
* Drag the door&#039;s entity origin to the point where you want the door to rotate. This should be on the corner on the leading edge side (the side to where the door is opening.) to avoid clipping as in this diagram....&lt;br /&gt;
[[Image:getCorner.jpg]]&lt;br /&gt;
* You should now find that door rotates around that point.&lt;br /&gt;
&lt;br /&gt;
===Rotate Direction and Open Angle===&lt;br /&gt;
&lt;br /&gt;
By default, rotating doors open anti-clockwise (viewed from above) by 90 degrees from the start orientation. If you want to change this edit the &#039;&#039;rotate&#039;&#039; property in the entity inspector. Don&#039;t confuse this &#039;&#039;rotate&#039;&#039; property with the &#039;&#039;rotation&#039;&#039; property. In the entity inspector remember that to see the inherited rotate property you must check the box &#039;Show inherited properties&#039;.&lt;br /&gt;
&lt;br /&gt;
The three values shown in the rotate property are degrees from the closed position around Y Z X (absolute map axes Front, Top, Side views in DR&#039;s ortho view.)&lt;br /&gt;
&lt;br /&gt;
* Positive Y = Open clockwise (Dark Radiant grid front view, looking north)&lt;br /&gt;
* Negative Y = Open anti-clockwise (Dark Radiant grid front view, looking north)&lt;br /&gt;
&lt;br /&gt;
* Positive Z = Open anti-clockwise (Dark Radiant grid top view, looking down)&lt;br /&gt;
* Negative Z = Open clockwise (Dark Radiant grid top view, looking down)&lt;br /&gt;
&lt;br /&gt;
* Positive X = Open anti-clockwise (Dark Radiant grid side view, looking west)&lt;br /&gt;
* Negative X = Open clockwise (Dark Radiant grid side view, looking west)&lt;br /&gt;
&lt;br /&gt;
There is a problem when you come to rotations that are not around the main Y Z X axes of the map, for instance a drawbridge that lowers down to the south east. You might think you can combine Y Z X values to get the result you want - and this can be done (for south east use 45 45 90) but it is a bit of a kludge and the drawbridge twists eccentrically as it lowers (though it arrives correctly!)&lt;br /&gt;
&lt;br /&gt;
The values are in the range -179 to +180. Positive values give an anti-clockwise opening rotation (looking down from above) and negative values give a clockwise opening rotation. The value 180 is unique in that it continues in an anti-clockwise rotation when closing rather than returning clockwise so might be used if you can think of some object that might need such a motion when frobbed!&lt;br /&gt;
&lt;br /&gt;
Edit the rotate value by selecting it and using the input box at the bottom and clicking the check(tick) button. That will change the angle the door will open to. Note that the line with the original default of 0 90 0 will still be there but your new entry will be added on a separate line and that is the one that will work in the game. CAUTION: when adjusting later make sure you have your new line selected and not the original! If you do it will appear to change but your first setting will remain unaltered.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
* 0 90 0 = Opens anti-clockwise round the entity&#039;s &#039;vertical&#039; to 90 degrees - typical default vertical door.&lt;br /&gt;
* 0 0 90 = Lowers a drawbridge from the entity &#039;vertical&#039; to horizontal.&lt;br /&gt;
* 0 0 -45 = Opens clockwise by 45 degrees viewed from the east side. This might suit a skylight in a sloping roof.&lt;br /&gt;
&lt;br /&gt;
&#039;rotate&#039; cannot be combined with translate motions (see [[#Sliding (Translation) Amount and Direction]]) in one door; you need to bind one door to another and link they by targetting one to the other. By that means you can produce exotic and useful motions. A door opening against an upward-sloping floor can thus have a &#039;&#039;lifting hinge&#039;&#039; and raise up slightly to clear the floor; a door can rotate towards you and slide back to one side very effectively.&lt;br /&gt;
&lt;br /&gt;
===Sliding (Translation) Amount and Direction===&lt;br /&gt;
&lt;br /&gt;
By default a Dark Mod door will rotate open. For most sliding doors you want to stop them rotating as well as make them slide. You cannot delete (remove) the &#039;&#039;rotate&#039;&#039; property - you have to set the &#039;&#039;rotate&#039;&#039; property to 0 0 0 to stop a door rotating (see &#039;&#039;Rotate Direction and Open Angle&#039;&#039;.)&lt;br /&gt;
&lt;br /&gt;
Now edit the &#039;&#039;translate&#039;&#039; property value by selecting it (remember to have inherited properties box checked) and using the input box at the bottom and clicking the check(tick) button. That will change the distance the door will slide to. Note that the line with the original default of 0 0 0 will still be there but your new entry will be added on a separate line and that is the one that will work in the game. CAUTION: when adjusting later make sure you have your new line selected and not the original! If you do it will appear to change but your first setting will remain unaltered.&lt;br /&gt;
&lt;br /&gt;
Typically (but not always) you will want your sliding door to slide the width of the door. The three values in the translate property by default are 0 0 0 and are X Y Z &#039;&#039;absolute map&#039;&#039; values (irrespective of door orientation) where:&lt;br /&gt;
&lt;br /&gt;
* Positive X = Slide East (Right side of Dark Radiant grid in top view)&lt;br /&gt;
* Negative X = Slide West (Left side of Dark Radiant grid in top view)&lt;br /&gt;
* Positive Y = Slide North (top of Dark Radiant grid in top view)&lt;br /&gt;
* Negative Y = Slide South (bottom of Dark Radiant grid in top view)&lt;br /&gt;
* Positive Z = Slide Up (Top of Dark Radiant grid in side views)&lt;br /&gt;
* Negative Z = Slide Down (Bottom of Dark Radiant grid in side views)&lt;br /&gt;
&lt;br /&gt;
So for a 50 unit wide door you want to slide fully to the east you would use 50 0 0 for the translate property values. A 100 unit portcullis sliding vertically up would need 0 0 100 to be fully raised.&lt;br /&gt;
&lt;br /&gt;
=== Doors Collision/Push Behaviour ===&lt;br /&gt;
Doors push all entities by default, except for the player. Doors will also stop moving when anything blocks their movement. However, this default behaviour can be changed by setting appropriate spawnargs:&lt;br /&gt;
&lt;br /&gt;
Set &#039;&#039;&#039;push_player&#039;&#039;&#039; to &#039;&#039;&#039;1&#039;&#039;&#039; to let the player be pushed by this door:&lt;br /&gt;
 &amp;quot;push_player&amp;quot;  &amp;quot;1&amp;quot;  // Push the player too (default is off)&lt;br /&gt;
&lt;br /&gt;
By default &#039;&#039;&#039;stop_when_blocked&#039;&#039;&#039; is set to 1 and if a door is blocked by an entity then even if the entity is removed afterwards, the door stays where it is. The next frob will close the door.&lt;br /&gt;
&lt;br /&gt;
Set &#039;&#039;&#039;stop_when_blocked&#039;&#039;&#039; to &#039;&#039;&#039;0&#039;&#039;&#039; to prevent the door from ending the opening sequence when anything blocks its way. It will still pause - but continue to open if the block is removed.&lt;br /&gt;
 &amp;quot;stop_when_blocked&amp;quot;   &amp;quot;0&amp;quot;  // door keeps moving after being blocked (default is off)&lt;br /&gt;
With this setting, doors will still stop at blocking entities (the player, for instance), but will continue to move when the entity moves out of the way.&lt;br /&gt;
&lt;br /&gt;
There is another spawnarg which stops a door pushing a moveable. Apply this to the &#039;&#039;moveable&#039;&#039;, not the door...&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;notPushable&amp;quot;   &amp;quot;1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Door Sounds===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are multiple ways to put sounds on doors.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_open&#039;&#039; &amp;lt;br&amp;gt; &lt;br /&gt;
Sound is triggered as the door begins to open.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_opened&#039;&#039; &amp;lt;br&amp;gt; &lt;br /&gt;
Sound is triggered when the door finishes opening. Defaults to &amp;quot;nosound&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_move&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
The sound plays while the door moves.  Defaults to &amp;quot;nosound&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_close&#039;&#039;  &amp;lt;br&amp;gt;&lt;br /&gt;
Sound is triggered as the door finishes closing.&lt;br /&gt;
&lt;br /&gt;
The following sounds should be left on the default sound in most cases so players clearly know what is going on:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_locked&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
The sound played when a player or an AI tries to open a locked door.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_unlock string&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
The sound played when a door is unlocked.&lt;br /&gt;
&lt;br /&gt;
You can silence any of these sounds by setting the following properties as shown:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_open nosound&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;snd_close nosound&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Don&#039;t just use a dash - as it seems to cause a sound of its own.&lt;br /&gt;
&lt;br /&gt;
===Sound Propagation through Doors and Doorways===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This information will change significantly with the release of 2.0.  See&#039;&#039; [[Controlling Sound Loss Across Portals]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The sound volume reduction to the player (ie, the sound the player hears) is fixed and constant in a cvar which adds a distance factor to the original sound. It is recommended that you do not change that because it will affect other FMs. Currently there is no way to change the way that sound to the player is reduced through doors and doorways.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sound propagation to AI, eg, impact sounds or guard yells is treated separately:&lt;br /&gt;
&lt;br /&gt;
Sound propagation to AI relies on visportals. For details study [[Sound Propagation: Part 1]] and [[Sound Propagation: Part 2]] as well as [[Visportals]] This tutorial will just cover the relevant sound and sound propagation &#039;&#039;properties&#039;&#039; of doors. If you set the &#039;&#039;show inherited properties&#039;&#039; box in the entity inspector you can see them as described here.&lt;br /&gt;
&lt;br /&gt;
Remember, the following have no effect on what the player hears through a door or doorway.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;loss_open&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Drop in sound volume in dB propagated to AI (not player) when going through an open door. (default 1dB)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;loss_closed&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Drop in sound volume in dB propagated to AI (not player) when going through a closed door. (default 15dB) You would want to set this very high to block all sound with a thick door but very low for a barred gate for example.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;loss_double_open&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Drop in sound volume in dB propagated to AI (not player) when going through double doors when only one is open. (default 1dB)&lt;br /&gt;
&lt;br /&gt;
There are also various sound properties for lockpicking:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;snd_lockpick_pin_1 through 14&#039;&#039; and &#039;&#039;snd_lockpick_pin_success&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Allowing the Player to Interrupt Door Motion===&lt;br /&gt;
&lt;br /&gt;
The door property &#039;&#039;interruptable&#039;&#039; determines whether a door can be stopped by frobbing while it is opening or closing. It is enabled (i.e., set to 1) by default. Then the player, by frobbing to start the normal opening, then frobbing again to interrupt, can open a door to any position, e.g., slightly ajar to peek through. Another frob will begin closing, and so on with any additional frobs to stop/reverse-direction.&lt;br /&gt;
&lt;br /&gt;
Be aware that an rotating-style door, when left ajar, will subsequently open or close more slowly than normal in an angular-velocity sense. It instead takes the same time as a full (uninterrupted) opening or closing would take in seconds, as given by &#039;&#039;move_time&#039;&#039; discussed next.&lt;br /&gt;
&lt;br /&gt;
===Speed of Door Opening and Closing===&lt;br /&gt;
&lt;br /&gt;
Rotating Door Speed:&amp;lt;br&amp;gt;&lt;br /&gt;
The time a rotating door takes to open or close is set in the &#039;&#039;move_time&#039;&#039; property, no matter what its maximum open angle may be. So with rotation set at, say, 150 degrees the door just opens faster than at, say, 80 degrees. To change this value, make sure the door is selected then...&lt;br /&gt;
&lt;br /&gt;
* Right click the entity inspector and check &#039;&#039;show inherited properties&#039;&#039;&lt;br /&gt;
* Scroll down, select &#039;&#039;move_time&#039;&#039;&lt;br /&gt;
* Edit the second line of the input box &#039;&#039;below&#039;&#039; the properties window to the time you want.&lt;br /&gt;
* The time is in seconds and decimal fractions can be used. The default is currently 1.75 seconds.&lt;br /&gt;
&lt;br /&gt;
Sliding Door Speed:&amp;lt;br&amp;gt;&lt;br /&gt;
The speed of a sliding door is set in the &#039;&#039;translate_speed&#039;&#039; property. To add this, make sure the door is selected then...&lt;br /&gt;
&lt;br /&gt;
* Right click the entity inspector and check &#039;&#039;show inherited properties&#039;&#039;&lt;br /&gt;
* Scroll down, select &#039;&#039;translate_speed&#039;&#039;&lt;br /&gt;
* Edit the second line of the input box &#039;&#039;below&#039;&#039; the properties window to the speed you want.&lt;br /&gt;
* The speed is in Dark Radiant grid units per second.&lt;br /&gt;
* The default is 0 and if set to this then the door slides open in one second whatever the distance, great or small.&lt;br /&gt;
* CAUTION: It is assumed &#039;&#039;translate&#039;&#039; has been changed from its default value of 0 0 0. If not, a non-zero &#039;&#039;translate_speed&#039;&#039; may cause problems.&lt;br /&gt;
&lt;br /&gt;
===Visportals and Doors===&lt;br /&gt;
&lt;br /&gt;
A visportal face surrounded by solid at its edges and in contact with a door is closed when the door is closed and enabled when the door is open. In most cases you will place a visportal in contact with a working door unless you can see through the door (such as a true glass door or barred gate*.) For full details see [[Visportals]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;*As of 2.0 it is possible to make visportals that remain transparent when closed for gates and windows.  See&#039;&#039; [[Controlling Sound Loss Across Portals]]&lt;br /&gt;
&lt;br /&gt;
==Auto-Closing/Opening Doors==&lt;br /&gt;
Doors that automatically close after being open for some time are easy to setup: Each frobmover entity supports these spawnargs:&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;auto_close_time&amp;quot;:Set this to something &amp;gt;= 0 to let the mover automatically close (again) after this time when being fully opened (measured in seconds). Defaults to -1, which means &#039;do not autoclose&#039;. The event is also activated when the mover starts at the open position at map start.&lt;br /&gt;
;&amp;quot;auto_open_time&amp;quot;:&amp;quot;Set this to something &amp;gt;= 0 to let the mover automatically open (again) after this time when being fully closed (measured in seconds). Defaults to -1, which means &#039;do not autoopen&#039;. The event is also activated when the mover starts at the closed position at map start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Before auto_close_time and the AI Door Management spawnargs next were provided, a more laborious method was used to auto-close doors as if AI were closing doors behind them. Hit &amp;quot;Expand&amp;quot; to review it.&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;I have one door that I particularly want the AI to close as there is a bit of frame lag inside if not. So I set this up and it works good as an auto-closing door - not as good as a true AI closing door as it will auto close when the player goes through as well but it does look very effective to see AI going through and closing the door behind them. Not tested exhaustively so I don&#039;t know if there could be any downside. Here&#039;s what to do....&lt;br /&gt;
&lt;br /&gt;
First a quick summary to make it more clear:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;A trigger_relay is used both as a relay AND carries a stim. We put the trigger_relay with its stim in the path of the open door. The door has a response property. When it opens and contacts the stim its response is to send a signal back to the relay. The relay pauses then closes the door...&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* First, optionally give your door a suitable name like autodoor1, whatever.&lt;br /&gt;
* Copy that name to the clipboard.&lt;br /&gt;
&lt;br /&gt;
Next we need a relay with a delay:&lt;br /&gt;
&lt;br /&gt;
* Create entity &amp;gt; darkmod &amp;gt; trigger_relay&lt;br /&gt;
&lt;br /&gt;
* Place it roughly at the position the door will be at when open and to be on the safe side 3/4th of the way to the far end of the door (not the hinge end) to give max distance from the close door.&lt;br /&gt;
&lt;br /&gt;
* Add the property &#039;target&#039; and paste in the door name you just copied.&lt;br /&gt;
&lt;br /&gt;
* Give the relay itself a name, eg, autoDoor_relay_1, and copy that name to the clipboard, you&#039;ll need that too in a bit.&lt;br /&gt;
&lt;br /&gt;
* Add the property delay and the value 3 - this is the delay in seconds before the door will close; 3 seems about right but 2 might be worth a try because to that 3 is added a random value between 0 to 0.5 seconds from the Time Interval we entered for the stim firings.&lt;br /&gt;
&lt;br /&gt;
* Add the property &#039;wait&#039; and the value 3. This is the time before it can work again in seconds. If you set it too low then in theory the door might trigger again but in this situation I don&#039;t think it&#039;s possible. Too long, eg, one minute, and it won&#039;t work if the AI goes back through the door before then. If this value is -1 then the whole thing will only work ONCE so might be used for an AI who goes through once, closes it behind him, but you don&#039;t want it to be an autodoor thereafter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That&#039;s the relay, now we add a stim to it:&lt;br /&gt;
&lt;br /&gt;
* Still with the trigger relay selected, go to {{menu|Entity|Stim/Response}}&lt;br /&gt;
&lt;br /&gt;
* Custom stim tab.&lt;br /&gt;
&lt;br /&gt;
* Click Add stim type, select the new custom stim type you just made at the bottom of the list and type in eg, autoDoorStim at top right in the input box.&lt;br /&gt;
&lt;br /&gt;
* Click the stim tab and the little drop down arrow against the &#039;type&#039; selector at bottom left and you should see your new custom stim name. Select it.&lt;br /&gt;
&lt;br /&gt;
* Select the new autoDoorStim in the list and on the right you need only type in the radius box 15.0 There is quite a lot of room for error. I had it working on 10 and also on 25. The value should be less than the distance to the closed door else it will trigger open! But no so small that the door might not reach it.&lt;br /&gt;
&lt;br /&gt;
* Select the check box for Time Interval and enter 500 (millisecs.) This is so it doesn&#039;t keep firing more frequently than is necessary. This stim will be firing all through your mission whether the door is used or not so if you had dozens of these then maybe it would affect performance. Too big a number and there may be a long delay before the door shuts - but it will be random depending on the next time the stim happens to fire. We&#039;ll control the delay we want more precisely later.&lt;br /&gt;
&lt;br /&gt;
* Click {{ok}} to confirm it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That&#039;s the stim set up, now for the response to it which is put on the door....&lt;br /&gt;
&lt;br /&gt;
* Select the doorm, then use {{menu|Entity|Stim/response}} and select the response tab.&lt;br /&gt;
&lt;br /&gt;
* Click the little drop down arrow against the &#039;type&#039; selector at bottom left and you should see your new custom stim name. Select it.&lt;br /&gt;
&lt;br /&gt;
* Right click in the big &#039;&#039;Response Effects&#039;&#039; box on the bottom right of the panel.&lt;br /&gt;
&lt;br /&gt;
* Add New Effect and you should get a default &#039;Activate Response&#039; response added to the list. Double click it.&lt;br /&gt;
&lt;br /&gt;
* In the Effect selector at the stop select &#039;Trigger&#039;&lt;br /&gt;
&lt;br /&gt;
* in the Target box, paste in the name of the relay you copied or you can select it from the list at the little arrow.&lt;br /&gt;
&lt;br /&gt;
* Leave the Activator box empty.&lt;br /&gt;
&lt;br /&gt;
* Click {{apply}} and then {{ok}} on the main S &amp;amp; R panel bottom right.&lt;br /&gt;
&lt;br /&gt;
It should now work. No need to wait for an AI, just frob the door and watch it close itself. If not, check the position of the stim brush is close to where the door stops when open.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==AI Door management==&lt;br /&gt;
&lt;br /&gt;
By default AI will open doors and close them behind them. Here are some spawnargs &#039;&#039;&#039;on the door&#039;&#039;&#039; the mapper can use to modify that behaviour:&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;ai_should_not_handle&amp;quot; :If set to 1, AI will not attempt to handle it and add it to the forbidden areas (so that it doesn&#039;t try to path through). They might still walk through the door when it is open though. Useful if you have some special use door that you don&#039;t want the AI to operate.&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;ai_should_not_close&amp;quot; :If set to 1, AI will not close the door behind them unless it obstructs them.&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;canRemainOpen&amp;quot; :If set to 1, it&#039;s the same as &amp;quot;ai_should_not_close, with the added behavior that this is ignored if the door needs to be relocked, or the door is marked &amp;quot;shouldBeClosed&amp;quot;. &#039;&#039;&#039;(This spawnarg is available starting in TDM 2.02.)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Spawnargs &#039;&#039;&#039;on the AI&#039;&#039;&#039; that the mapper can use:&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;canCloseDoors&amp;quot; :Added in 2.12. Defaults to 1.  If set to 0, the AI will not close doors after passing through them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To get AI to unlock/relock specific doors there are two methods:&lt;br /&gt;
&lt;br /&gt;
1. Provide the AI with the key, as detailed in the def_attach method in [[#Keys_carried_by_AI]] above.&lt;br /&gt;
&lt;br /&gt;
2. Add the following spawnarg/value to the AI:&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;can_unlock&amp;quot; &#039;&#039;&amp;lt;doorname&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For additional doors on the same AI use &#039;&#039;can_unlock1 doorname&#039;, `can_unlock2 doorname&#039; etc. &#039;&#039;&#039;Do NOT use can_unlock_1.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If both (1) and (2) are used, then the AI can still go through the door after the player pickpockets the key. Otherwise, unless someone else opens the door for the AI, a typical sequence is that the AI checks their pockets for the missing key, stalls a bit at the locked door, and then (with now-better pathing algorithms) the AI uses an alternate route to the next path_corner, or &amp;quot;mentally&amp;quot; skips ahead in the route to next reachable node and goes there.&lt;br /&gt;
&lt;br /&gt;
===Door Handling Positions===&lt;br /&gt;
&lt;br /&gt;
It is also possible to set custom door handling positions for the AI. This is especially useful when the standard routine that lets the AI choose their standing positions while opening and closing the door fails, leaving them standing still, or circling around in front of the door helplessly.&lt;br /&gt;
&lt;br /&gt;
Place a movers &amp;gt; &#039;&#039;atdm:door_handling_position&#039;&#039; entity where you want the AI to stand while opening/closing the door from this side.&lt;br /&gt;
&lt;br /&gt;
On the door, you need to set the spawnarg &amp;quot;door_handle_position&amp;quot; &amp;quot;name_of_door_handling_position&amp;quot;. You can also place a &#039;&#039;door_handling_position&#039;&#039; on each side of the door, and the AI will automatically choose the right one. In this case, you need to set spawnargs with &amp;quot;door_handle_position_1&amp;quot; etc., and the corresponding names of the &#039;&#039;door_handling_position&#039;&#039; entities on the door.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;door_handling_position&#039;&#039; entities can also carry spawnargs that define the behaviour of the AI, which are useful for example for doors that can only be opened or locked from one side:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;ai_no_open&amp;quot;&#039;&#039;&#039; If set to &amp;quot;1&amp;quot;, the AI will not try to open the door from this side (but will still walk through when the door is already open).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;ai_no_close&amp;quot;&#039;&#039;&#039; If set to &amp;quot;1&amp;quot;, the AI will not attempt to close the door from this side.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;ai_no_unlock&amp;quot;&#039;&#039;&#039; If set &amp;quot;1&amp;quot;, the AI will not be able to unlock the door from this side, but still use it when it is not locked.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;ai_no_lock&amp;quot;&#039;&#039;&#039; If this is set &amp;quot;1&amp;quot;, the AI will not lock the door from this side.&lt;br /&gt;
&lt;br /&gt;
===Door Controllers===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Available in TDM 2.02+&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can design a door so it&#039;s operated by buttons or levers or switches (aka &#039;&#039;controllers&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
A controller is simply an entity that targets the door.  Typical examples of entities that can be used are:&lt;br /&gt;
&lt;br /&gt;
* Buttons: atdm:mover_button&lt;br /&gt;
* Levers: atdm:switch_rotate_lever&lt;br /&gt;
* Switch: atdm:mover_lever&lt;br /&gt;
* Lock: atdm:froblock. (See also next section)&lt;br /&gt;
&lt;br /&gt;
1. Set up the door in the normal manner. It can be a rotating door, a sliding door, a locked door, etc.&lt;br /&gt;
&lt;br /&gt;
2. Turn off the &amp;quot;frobable&amp;quot; spawnarg on the door. (&amp;quot;frobable&amp;quot; &amp;quot;0&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
3. Create a controller entity on each side of the door. If you&#039;re setting up a locked door using atdm:froblock, there&#039;s no need to put any locking information on the controllers. When the game starts, it will transfer any locking information from the door to the controllers.&lt;br /&gt;
&lt;br /&gt;
4. Give each controller the door as a target.&lt;br /&gt;
&lt;br /&gt;
Both the player and any AI that wants to use the door will use the controllers to operate it. Any key, &amp;quot;can_unlock&amp;quot;, or lockpick settings you would normally use at the door are now used at the controllers.&lt;br /&gt;
&lt;br /&gt;
Controllers and &#039;&#039;door_handling_position&#039;&#039; entities can be used on the same door, but in that situation the &#039;&#039;door_handling_position&#039;&#039; entities don&#039;t define where the AI stands to operate the door. They simply provide the &amp;quot;ai_no_*&amp;quot; spawnargs that define AI behavior on each side of the door.&lt;br /&gt;
&lt;br /&gt;
If you wish, you could provide a controller on only one side of the door instead of both sides. Note that, since the door is not frobable, the player won&#039;t be able to operate the door from the non-controller side.&lt;br /&gt;
&lt;br /&gt;
====More about Using a Separate &amp;quot;Froblock&amp;quot; Lock Plate====&lt;br /&gt;
&#039;&#039;by Geep, 2021-22&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Froblock, just discussed as a controller method, actually predated the controller concept in TDM. Here we recap that earlier context, with an alternative treatment of highlighting, and thoughts on texturing and usage.&lt;br /&gt;
&lt;br /&gt;
Suppose you want to have a lock plate (typically mounted on a door frame or wall) that opens a nearby door, where the door and lock plate highlight separately. A traditional way is to adapt the &#039;&#039;froblock&#039;&#039; method described under the &amp;quot;Making your own&amp;quot; section of [[Containers, Chests, etc.]]&lt;br /&gt;
&lt;br /&gt;
Basically, your door is the &amp;quot;chest lid&amp;quot; (of class atdm:mover_door) and your lock is the &amp;quot;chest body&amp;quot; (of class atdm:froblock). Set the properties as described in the wiki. There is a stock texture (darkmod/door/keyhole_metal_001) you can use to decorate a surface of your lock plate, or a patch on it. This method is probably most apt for small hatches and grates designed for the player alone, and with no handles, or non-turning handles attached with &amp;quot;bind&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===AI and &#039;non-frobable&#039; Doors===&lt;br /&gt;
Be aware that the &#039;frobable&#039; spawnarg only applies to the player, not AI.  If you set a door to be non-frobable (i.e. &#039;frobable&#039; &#039;0&#039;), AI can still operate it by interacting directly with it, even if it has a controller.  For example they will do this if:&lt;br /&gt;
&lt;br /&gt;
* they are fleeing or chasing the player&lt;br /&gt;
* the door has a controller but the AI can&#039;t reach it (for example the controller is on the other side of the door)&lt;br /&gt;
&lt;br /&gt;
The best way to mitigate this is to use Door Handling Position entities (see above) with the &#039;ai_no_open&#039; spawnarg set on them. &lt;br /&gt;
&lt;br /&gt;
===AI locking doors behind them===&lt;br /&gt;
&lt;br /&gt;
If one AI is involved (no one else is in the queue), he&#039;ll lock it behind him if he had to unlock it in the first place.&lt;br /&gt;
&lt;br /&gt;
Prior to TDM 1.08, if more than one AI is using the door at the same time (there&#039;s a queue), the first AI unlocks the door, and the last AI through will only lock it if it&#039;s marked &amp;quot;should_always_be_locked&amp;quot; AND they have a &amp;quot;can_unlock&amp;quot; for that door or they have a key for that door. The last AI to use the door doesn&#039;t know that the first AI found it locked, because that info is kept per AI, and not per door. &lt;br /&gt;
&lt;br /&gt;
Starting in TDM 1.08, if the first AI in a door queue found the door locked, that information is remembered by the door and the last AI through uses it to relock the door, as long as they have a &amp;quot;can_unlock&amp;quot; for that door or they have a key for that door.&lt;br /&gt;
&lt;br /&gt;
In the rare case where a door is set up to use door-handling position entities (necessary for AI to use sliding doors), either or both of those entities can have the &amp;quot;ai_no_lock&amp;quot; spawnarg, which means AI aren&#039;t allowed to lock the door from that side.&lt;br /&gt;
&lt;br /&gt;
==Initially Blocking a Door - Partially or Fully==&lt;br /&gt;
&#039;&#039;by Geep 2021&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Suppose you have a door that you want to start out either as unopenable, or able to open just a crack, then later, after something happens, be fully openable and operational. One method known to work:&lt;br /&gt;
&lt;br /&gt;
* Create a moveable object that the opening door runs into and tries to push.&lt;br /&gt;
* Arrange that the far side of the moveable object is jammed against some immovable worldspawn.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s two specific examples that use a wooden plank moveable:&lt;br /&gt;
&lt;br /&gt;
* In &amp;quot;Perilous Refuge&amp;quot;, a plank blocks the door leading out of the player&#039;s starting location, until the player carries it away. &lt;br /&gt;
* At the end of &amp;quot;Away0&amp;quot; (WIP 2021), the player tries to open a door. But if preconditions aren&#039;t met, the occupant seems to let the door open only a crack and complains. Blockage is done by an unseen plank resting on the floor hitting a knob of worldspawn. Preconditions met causes a &amp;quot;$plank.remove()&amp;quot; script call.&lt;br /&gt;
&lt;br /&gt;
Other methods that you might think would work but don’t:&lt;br /&gt;
&lt;br /&gt;
* Block with a func_static object, or an unjammed moveable with &amp;quot;notpushable 1&amp;quot; set. In both cases, the door travels through the object.&lt;br /&gt;
* In advance, &amp;quot;grab&amp;quot; an unjammed moveable to make it appear &amp;quot;solid&amp;quot; to the physics engine. (This was tested by having the player manipulate it; if it had worked, a “grabber” script call might suffice.)&lt;br /&gt;
* Dynamically change the door’s &amp;quot;rotate&amp;quot; limit from script using &amp;quot;setSpawnArg&amp;quot;; this function would only work before you spawn the door, not afterwards.&lt;br /&gt;
&lt;br /&gt;
(Others possibilities not yet tested:&lt;br /&gt;
&lt;br /&gt;
* Change &amp;quot;rotate&amp;quot; using the &amp;quot;setKey&amp;quot; script function; for some spawnargs this works even after spawn.&lt;br /&gt;
* Create a moveable and bind it to the world entity.&lt;br /&gt;
* If you are mainly interested in initially blocking an AI from using a door: it&#039;s possible that the AI re-reads the spawnargs for what doors it&#039;s allowed to open. Try adding a frob Response to the key (Entity -&amp;gt; Stim/Response... -&amp;gt; Response) with an effect that sets the “can_unlock&amp;quot; spawnarg on that AI to &amp;quot;-&amp;quot;.)&lt;br /&gt;
&lt;br /&gt;
==Controlling a Door by Scripting==&lt;br /&gt;
&#039;&#039;by Geep 2021&#039;&#039;&lt;br /&gt;
===If Unlocked===&lt;br /&gt;
&lt;br /&gt;
Simply use, for example with a door named &#039;&#039;door1&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 $door1.Open();&lt;br /&gt;
 ...&lt;br /&gt;
 $door1.Close();&lt;br /&gt;
&lt;br /&gt;
Alternatively, toggle it open or closed with:&lt;br /&gt;
&lt;br /&gt;
 $door1.frob();&lt;br /&gt;
&lt;br /&gt;
If the door has &amp;quot;interruptable 1&amp;quot; (which is the default with atdm:mover_door), you can also frob() it twice to leave it ajar. Interpose and adjust a sys.wait(...) to tune it.&lt;br /&gt;
===If Locked===&lt;br /&gt;
&lt;br /&gt;
You need to unlock it first. Changing the door&#039;s &amp;quot;locked&amp;quot; spawnarg value won&#039;t work. Instead you will use:&lt;br /&gt;
&lt;br /&gt;
 $door1.Unlock();&lt;br /&gt;
&lt;br /&gt;
But there are complications. By default, the door has spawnarg &amp;quot;open_on_unlock 1&amp;quot;. So, assuming you didn&#039;t change that, you&#039;d think unlocking the door would open it. But this spawnarg will be ignored if the gamer has global menu option &amp;quot;Open Doors on Unlock&amp;quot; set to Off. Assuming you want to reliably have the door open, do this:&lt;br /&gt;
&lt;br /&gt;
 $door1.Unlock(); // MAYBE will open door too.&lt;br /&gt;
 sys.wait(3); // If so, wait for door to fully open. Value may need adjusting based on door&#039;s speed&lt;br /&gt;
 $door1.Open(); // Otherwise, open it now.&lt;br /&gt;
&lt;br /&gt;
The wait is added, because otherwise, the opening begun by Unlock may be stopped by Open with the door only partially open. (Probably an alternative to using sys.wait here is to zero the door&#039;s &amp;quot;interruptable&amp;quot; spawnarg.) &lt;br /&gt;
&lt;br /&gt;
==Doors as Triggers==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;by Ishtvan &amp;amp; greebo&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Doors (or any binary frob mover, buttons, levers, etc) now have the option to [[Triggers|trigger]] their target on closing or opening. (For definition purposes, a button is defined as &amp;quot;closed&amp;quot; in the state when it starts out and &amp;quot;open&amp;quot; in the state you press it down to. I know that&#039;s a little non-intuitive, but it came from deriving from doors).&lt;br /&gt;
&lt;br /&gt;
New spawnargs on frob movers:&lt;br /&gt;
;&amp;quot;trigger_on_open&amp;quot; :If set to 1, this binary mover will trigger its targets when it starts out completely closed and is opened.&lt;br /&gt;
;&amp;quot;trigger_when_opened&amp;quot;:If set to 1, this binary mover will trigger its targets when it is completely opened. Code defaults to 0.&lt;br /&gt;
;&amp;quot;trigger_on_close&amp;quot;:If set to 1, this binary mover will trigger its targets when it completely closes after being open.&lt;br /&gt;
&lt;br /&gt;
== Suspicious Doors ==&lt;br /&gt;
&lt;br /&gt;
If you give a door the spawnarg &#039;&#039;&#039;&amp;quot;shouldBeClosed&amp;quot; &amp;quot;1&amp;quot;&#039;&#039;&#039;, then AI will treat it as suspicious if they find the door open.&lt;br /&gt;
&lt;br /&gt;
Doors with that spawnarg should work like this:&lt;br /&gt;
&lt;br /&gt;
- an AI opening the door knows he&#039;s not to become suspicious if he opened the door&lt;br /&gt;
&lt;br /&gt;
- nearby AI alerted by the open door will also not react if they can see the door, and can see the AI that opened it&lt;br /&gt;
&lt;br /&gt;
- AI who come upon the open door later probably won&#039;t be able to see the AI that opened it, so they&#039;ll treat it as suspicious&lt;br /&gt;
&lt;br /&gt;
- if the AI who opened the door comes upon the door later, and it&#039;s still open, and no one&#039;s touched it since he opened it, he&#039;ll see his name on the door and won&#039;t become suspicious. &amp;quot;Oh, crap. I forgot to close it earlier.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
- If an AI comes upon an open door that should be closed, he should close it whether he becomes suspicious or not.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Post TDM 2.00:&#039;&#039;&#039;&lt;br /&gt;
-  AI turn to look at a door they see opening.  The player can crack open a suspicious door to peek out w/o grabbing the attention of a nearby AI. After 5s, the AI will notice the cracked open door. Non-suspicious doors can be cracked open indefinitely w/o nearby AI noticing.&lt;br /&gt;
&lt;br /&gt;
==Slanted or Tilted Doors==&lt;br /&gt;
Slanted or tilted doors can be made as follows:&lt;br /&gt;
&lt;br /&gt;
1) Place your door, preferrably one of the prefab doors, which have a model door and model handle and all the rotation spawnargs pre-set.&lt;br /&gt;
&lt;br /&gt;
2) rotate and place the door+handle model into place you want it to be. Now, if you use the door in the game, the door will rotate around the world z-axis, and not the door model z-axis (which is rotated).&lt;br /&gt;
&lt;br /&gt;
3) to get the door to rotate around the door model z-axis, you must place a model (any model will do, and it can be placed anywhere in the map). Rotate the new model into the same orientation your door model was rotated, i.e. if you door is rotated 45 degrees around the x-axis, do the same rotation on the new model.&lt;br /&gt;
&lt;br /&gt;
4) bind the doors on the new model. This makes the doors start rotating along the new model origin (which is rotated the same way as the doors).&lt;br /&gt;
&lt;br /&gt;
5) working slanted door.&lt;br /&gt;
&lt;br /&gt;
Do note, that all the rotated objects need to be models (suspicion, not tested). You can export DR built stuff into a model using the DR ase exporter script. For custom doors, remember that the exporter places the model origin at the map origin if you do not choose the &amp;quot;place origin in the middle of the object&amp;quot; option.&lt;br /&gt;
&lt;br /&gt;
Also note that the AI probably cannot use slanted doors and might get stuck (suspicion, not tested).&lt;br /&gt;
&lt;br /&gt;
There is a link to a test map here:&lt;br /&gt;
http://forums.thedarkmod.com/topic/9082-newbie-darkradiant-questions/?p=395486&lt;br /&gt;
&lt;br /&gt;
==Skins: A Wide Variety of Door Textures==&lt;br /&gt;
&lt;br /&gt;
This is to remind you that as with many Dark Mod models, there is a wide range of extras skins (textures) available for door models. There are now several basic door entities of different sizes so choose your size first. Then enter the spawnarg: skin with any temporary value. Now select it and click the skin button at the bottom of Dark Radiant&#039;s Entity Inspector and you will find a large of range of skin textures from which to select to give you a choice of appearances for your door.&lt;br /&gt;
&lt;br /&gt;
==Extra Notes==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;func_darkmod_door&#039;&#039; is no longer used (just in case you come across it in the Dark Mod forums or wiki.) &#039;&#039;&#039;&amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt;&#039;&#039;&#039; is the entity to use.&lt;br /&gt;
&lt;br /&gt;
{{tutorial-editing}}&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=File:Key_remove4.png&amp;diff=34105</id>
		<title>File:Key remove4.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=File:Key_remove4.png&amp;diff=34105"/>
		<updated>2025-11-06T20:04:31Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;diagram&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=Doors&amp;diff=34104</id>
		<title>Doors</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=Doors&amp;diff=34104"/>
		<updated>2025-11-06T20:03:01Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: /* Automatically Removing Keys from Player Inventory After Use */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{todo}}&lt;br /&gt;
&#039;&#039;Written by Fidcal&#039;&#039; &#039;&#039;edit Baddcog&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Quick Summary==&lt;br /&gt;
&lt;br /&gt;
Quick way to get an unlocked door in your map:&lt;br /&gt;
&lt;br /&gt;
* Insert one of the prefab doors complete with handles and select its skin property and click the button to change its skin appearance to whatever you want. Set any other properties you need.&lt;br /&gt;
&lt;br /&gt;
Alternatively,&lt;br /&gt;
&lt;br /&gt;
* Create a door from the entity list&lt;br /&gt;
* Use the &amp;quot;skin&amp;quot; spawnarg on the door to change its appearance. &lt;br /&gt;
* Create a handle from the entity list&lt;br /&gt;
* Add the &#039;&#039;door_handle&#039;&#039; property to the door and give it the name of the handle&lt;br /&gt;
* To the door handle add the value frob_peer and use the name of the door.&lt;br /&gt;
* To open clockwise, change the &#039;&#039;rotate&#039;&#039; property from &amp;lt;code&amp;gt;0 90 0&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;0 -90 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
This tutorial explains how to put doors into your map using Dark Radiant, as well as adjust them and their properties.&lt;br /&gt;
&lt;br /&gt;
The rest of this tutorial assumes that you have a basic understanding of using DarkRadiant. If you haven&#039;t done so, please go read the [[Dark Radiant Must Know Basic Intro]] article first.&lt;br /&gt;
&lt;br /&gt;
Additionally:&lt;br /&gt;
&lt;br /&gt;
* Up, down, right, and left in Dark Radiant&#039;s &#039;&#039;top&#039;&#039; orthoview are regarded here as the standard map directions of North, South, East, and West where useful for clarity.&lt;br /&gt;
* Where the term &#039;&#039;brush&#039;&#039; is used with a door it mostly also applies to a door made up of a group of brushes and/or patches.&lt;br /&gt;
* Where the term &#039;&#039;door&#039;&#039; is used it often will also apply to any object you wish to rotate when frobbed, for instance an openable window, box lid, or even more exotic objects that the imaginative mapper might conceive like a signal, engine part, toy, or whatever. So long as it needs to turn or slide just a fixed amount when frobbed then return when frobbed again then the following applies.&lt;br /&gt;
&lt;br /&gt;
==Door types==&lt;br /&gt;
&lt;br /&gt;
All tangible objects in Dark Mod are &#039;&#039;entities&#039;&#039;, having either a pre-made model shape or else brush/patch(es). So there are two ways to create a door in Dark Radiant: as a model door or a textured brush door (or a hybrid of the two).&lt;br /&gt;
&lt;br /&gt;
Models are ready made door objects but cannot within Dark Radiant (at the time of writing) be resized, rescaled, cropped or clipped whereas brushes are very flexible in that respect and can be worked into custom shapes for your map, including secret doors that blend into walls and other surfaces.&lt;br /&gt;
&lt;br /&gt;
Most of the current door models are found in two places along with the door handles.&lt;br /&gt;
*Model Viewer: doors created from here will be static in the world and have no props other than material type.&lt;br /&gt;
You can add any props to them to make them working doors. If nothing else it is a good place to view the different size and skin options for the doors.&lt;br /&gt;
*Entity List: most of the door models can be found here. These doors have properties already assigned so they are ready to be used. Only one base door of each type is listed, create the size/hinge count door you want (2 hinge doors have a &#039;no hinge&#039; skin). You can choose a skin for the door once it has been created in the editor with the &amp;quot;skin&amp;quot; spawnarg (use the model name of the door you want, taken from the model list, as its value). This is the easiest way to create a door. The same goes for door handles.&lt;br /&gt;
&lt;br /&gt;
Remember also that door functions may be applied to objects other than doors, such as openable windows, drawbridges, gates, etc. In fact, anything that needs a partial rotation or slide when frobbed then return when frobbed again, such as a signal device. Lockboxes and chests use similar properties.&lt;br /&gt;
&lt;br /&gt;
You can create one door/handle set and copy/paste it, but you need to take great care that all the name props are changed to match in each clone. Otherwise you get handles that fly off when a distant door moves, and handles that don&#039;t move.&lt;br /&gt;
&lt;br /&gt;
==Creating a Door==&lt;br /&gt;
&lt;br /&gt;
Put simply, to make a door you will be creating an &#039;entity with model&#039; or &#039;entity with brush&#039; or some variation thereof.&lt;br /&gt;
&lt;br /&gt;
===Creating a Model Door===&lt;br /&gt;
&lt;br /&gt;
There are several approaches to making a model door; the simplest is to create a door from the entity list; or create a door from the model viewer (good for static unusable prop doors).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Entity List&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
*Deselect everything in editor by hitting the Esc button&lt;br /&gt;
*Right-click an ortho view and select Create Entity&lt;br /&gt;
*Navigate to darkmod/movers/&#039;&#039;atdm:door_...&#039;&#039;, choose the door you want&lt;br /&gt;
*Click Add&lt;br /&gt;
*To change its appearance, add a &amp;quot;skin&amp;quot; spawnarg to the door, with the value being the model name of the door you want.&lt;br /&gt;
&lt;br /&gt;
You now have a workable door in your level.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Model Viewer&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Right click in the orthoview, select &#039;&#039;Create Model&#039;&#039; then &amp;lt;code&amp;gt;darkmod&amp;lt;/code&amp;gt; and select a door.&lt;br /&gt;
* Note that you can left drag the image in the &#039;&#039;Choose Model&#039;&#039; dialog to rotate it around.&lt;br /&gt;
* Click [[Image:Button ok.png]] and you have a static door.&lt;br /&gt;
* If you want to make it work (openable, frobbable) then:&lt;br /&gt;
** Select the entity inspector,&lt;br /&gt;
** Select the top classname line so it highlights&lt;br /&gt;
** Select the func_static line in the input box &#039;&#039;below&#039;&#039; the properties window.&lt;br /&gt;
** Edit &amp;lt;code&amp;gt;func_static&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt;&lt;br /&gt;
** Click {{check}} or press {{key-enter}}&lt;br /&gt;
&lt;br /&gt;
Alternatively you can do it the old way:&lt;br /&gt;
&lt;br /&gt;
* Create any temporary brush&lt;br /&gt;
* Right click in orthoview and select &amp;lt;code&amp;gt;Create Entity&amp;lt;/code&amp;gt; then &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Left lick the model name line in the entity inspector.&lt;br /&gt;
* Below it on the &#039;&#039;Entity Inspector&#039;&#039; panel you should now see a button &#039;Choose Model&#039;&lt;br /&gt;
* Left click it, select a door model from the darkmod group.&lt;br /&gt;
* Note that you can left drag the image in the &#039;&#039;Choose Model&#039;&#039; dialog to rotate it around.&lt;br /&gt;
* The temporary brush was deleted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In all three instances, you now have a working door with default properties. &lt;br /&gt;
&lt;br /&gt;
Name your door by adding the prop (or modifing it) to name &#039;&#039;My_Door_1&#039;&#039;. You can use any name that you feel is appropriate but all doors with handles attached &#039;&#039;must&#039;&#039; have their own specific name. Use the name My_Door_1 for your first attempt as it will be referenced when you get around to attaching handles (see below).&lt;br /&gt;
&lt;br /&gt;
To add a handle and other adjustments, see [[#Customising and Adjusting Door Properties]] below.&lt;br /&gt;
&lt;br /&gt;
===Creating a Textured Brush Door===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tip:&#039;&#039;&#039; If unsure of size then you might insert a temporary human AI first to get a sense of height.&lt;br /&gt;
&lt;br /&gt;
==== The simplest brush door: ====&lt;br /&gt;
&lt;br /&gt;
* Drag out a new brush to the size required, eg, a seven foot high door is 84&amp;quot; x 1.1 = about 90 units in Dark Radiant.&lt;br /&gt;
* Give it a door texture from the texture browser (or wall texture for a secret door)&lt;br /&gt;
* Right click in orthoview and select &#039;&#039;Create Entity&#039;&#039; then &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You now have a working door but it will rotate around its center. To move the rotation point to where you want the door hinges to be:&lt;br /&gt;
* Select the door and press &#039;v&#039; or the &#039;&#039;Select Vertices&#039;&#039; button to enter vertex editing mode. The door&#039;s origin will show up as a small green square in the middle of the brush.&lt;br /&gt;
* In top-down orthoview, move the origin from the center to the corner of the brush. This is easiest in drag mode (&#039;q&#039; or the &#039;&#039;Resize&#039;&#039; button), although you can use translate mode (&#039;w&#039; or the &#039;&#039;Translate&#039;&#039; button) by manually selecting the vertex first.&lt;br /&gt;
&lt;br /&gt;
==== Multi-brush doors: ====&lt;br /&gt;
&lt;br /&gt;
More complex multi-brush doors can be created using the [[Clipper]] tool, CSG, etc. - this is not covered in this tutorial. Then assign &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt; for that whole brush structure. Also you can collect various brushes positioned together in relation to one another as needed, select them all, then assign &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt; for the group. All the brushes will be children of the &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt; entity and will rotate and be frobbable, etc. as one unit, as one door. To add further brushes or even model shapes later see the section on [[#Adding handles and other items to doors]].&lt;br /&gt;
&lt;br /&gt;
Name your door by adding the prop (or modifing it) to name My_Door_1. You can use any name that you feel is appropriate but all doors with handles attached must have their own specific name. Use the name My_Door_1 for your first attempt as it will be referenced when you get around to attaching handles (see below). (repeated from above in case you didn&#039;t choose to create a model door)&lt;br /&gt;
&lt;br /&gt;
=== Double Doors ===&lt;br /&gt;
Double doors are automatically recognised by the code when the doors are spawned. The prerequisite is that both doors are sharing/touching the same visportal. The spawnarg &#039;&#039;auto_setup_double_door&#039;&#039; (which defaults to &amp;quot;1&amp;quot;) will take care of setting up the open/lock peer relationship between the two doors. The doors will open/close and lock/unlock along with each other as a result.&lt;br /&gt;
&lt;br /&gt;
What happens behind the scenes: the doors are adding each other to their internal open_peer and lock_peer list, which causes the double doors to perform the same action when frobbed or used.&lt;br /&gt;
&lt;br /&gt;
Note that &#039;&#039;auto_setup_double_door&#039;&#039; will not set the frob_peer relationship, i.e. each door will frob-highlight on its own without highlighting the other door. You&#039;ll need to add that spawnarg manually if you want to highlight the entire double door as one.&lt;br /&gt;
&lt;br /&gt;
==Customising and Adjusting Door Properties==&lt;br /&gt;
&lt;br /&gt;
Handles, lockplates, etc. can be added to doors and door properties can be adjusted for rotation, sliding, locking, and more.&lt;br /&gt;
&lt;br /&gt;
Some of the door models have hinge plates and lockboxes that are reskinnable with a good variety of skins.&lt;br /&gt;
&lt;br /&gt;
===Door handles and other door attachments===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Summary: just add the property &#039;&#039;bind&#039;&#039; with the door&#039;s name to the attachment and position it where you want it on the door. If it&#039;s a &#039;&#039;atdm:mover_door_handle&#039;&#039; then it automatically will work as a handle but you can bind virtually anything.&#039;&#039;&#039;&lt;br /&gt;
You can add handles and other items to doors such that they move correctly with the door whether rotating, sliding, or both and even if the door is not vertical such as a skylight or trapdoor.&lt;br /&gt;
Handle models come in two types, &#039;&#039;single handles&#039;&#039; and &#039;&#039;double handles&#039;&#039;. A single handle is one sided, this means the handle will be inside the door or outside the door, but not both. A double handle has a lever on the inside of the door and a handle on the outside of the door. Each has benefits.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;Single door handles&#039;&#039;&#039;&#039;&#039;:&lt;br /&gt;
Single door handles can be used on a static door, a door that&#039;s just for show that no AI&#039;s or the player can use. In this case you should just create a door handle from the model viewer, it will be static and have no properties such as scripts. It is for looks only.  Note that TDM is trying to establish the expectation that decorative doors that cannot be opened do not have handles (though not all maps follow this).&lt;br /&gt;
&lt;br /&gt;
I will call this &#039;&#039;multiple handles&#039;&#039;, see more below.&lt;br /&gt;
&lt;br /&gt;
These can also be useful on brush doors created in the editor that may be very thin or very wide.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;Double door handles&#039;&#039;&#039;&#039;&#039;:&lt;br /&gt;
These are models have have a handle inside and outside. The bonus is that they only use one entity. Maps are limited to about 4,000 entities but when you count lights, AI, sound speakers, ect... you can run out of entities quickly on a large map. If you plan on building a large map this is the way to go, even in a small map they have benefits, namely that you only have to attach one handle per door.&lt;br /&gt;
&lt;br /&gt;
Whether you decide to use a single handle or a double handle you must first follow the instructions below and attach one handle first. If you choose a double handle, follow the instructions below and you are done. If you choose a single handle type follow the instructions then also follow the &#039;&#039;multiple handle&#039;&#039; instructions for the second handle.&lt;br /&gt;
&lt;br /&gt;
Both single and double handle types can be found in two places. The model viewer which will create a static model good for show, you can manually add props to make them work OR you can look in the entity browser.&lt;br /&gt;
Using a handle from the entity browser saves you a little bit of time as some props are already added, you just need to add the frob_peer names for the doors/handles and the door_handle name to the door.&lt;br /&gt;
&lt;br /&gt;
=== Adding a working model door handle===&lt;br /&gt;
&lt;br /&gt;
Quick summary:&lt;br /&gt;
* Create a model or brush handle and make it an &#039;&#039;atdm:mover_door_handle&#039;&#039; entity.&lt;br /&gt;
* Position it on your door.  Use the opposite side from the door&#039;s multicolor X-Y-Z indicator (highlight the door to see it) if it&#039;s not obvious which side it goes on.  &lt;br /&gt;
* &#039;&#039;&#039;Bind&#039;&#039;&#039; the handle to the door (bind &amp;lt;doorname&amp;gt;)&lt;br /&gt;
* It should now be a working handle though may need adjustments of rotation etc. see later. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Important: read preceding section on door handle types and performance issues first.&lt;br /&gt;
&lt;br /&gt;
This works with both a model door and a brush door:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rotation&#039;&#039;&#039;:&lt;br /&gt;
* By default the door handle entity rotates &#039;&#039;anti-clockwise&#039;&#039; (looked at from the front) then springs back. A &#039;&#039;double handle&#039;&#039; model is OK but two singles (see &#039;&#039;Multiple door handles&#039;&#039; below) need more care as only one is the functioning entity and the other is just attached to it. So anti-clockwise is fine for a door with its hinge on the left and the handle on the right - the handle will rotate down then spring back. If you put the functioning door handle on the other side you will have to change the default &#039;&#039;rotate&#039;&#039; property from -45 0 0 to 45 0 0. &#039;&#039;&#039;&#039;&#039;Therefore it is easier to generally put this handle on the side of the door where the hinge is on the left and the non-functioning attachment handle on the other side.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*If your door only needs one handle, eg, a cupboard door, and from outside its hinge is on the right then you will need to change the &#039;&#039;rotate&#039;&#039; property of the handle as described above.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;The functioning handle entity:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
* Create an entity door handle (movers folder) or create a brush or model handle and assign it the entity &#039;&#039;atdm:mover_door_handle&#039;&#039;.&lt;br /&gt;
* Position it where you wish on your door.&lt;br /&gt;
* &#039;&#039;&#039;Bind&#039;&#039;&#039; the handle to the door, by adding the &amp;quot;bind&amp;quot; spawnarg to the handle.&lt;br /&gt;
&lt;br /&gt;
You now have a working door handle with default properties.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Multiple door handles&#039;&#039;&#039;:&lt;br /&gt;
Now that you&#039;ve got a handle attached to one side of the door it is time to add one to the other side (unless you used a double handle).&lt;br /&gt;
* Create the new handle. The single handles come in left and right persuasions. A door needs a left facing handle on one side and a right facing handle on the other, so if you have already added the left handle create a right handle and line it up on the other side of the door.&lt;br /&gt;
* Name this handle. I prefer to keep a naming convention for each door and it&#039;s respective handles, it makes things alot easier. The door is named &#039;&#039;&#039;My_Door_1&#039;&#039;&#039;, the first handle is named &#039;&#039;&#039;My_Handle_1&#039;&#039;&#039; so name the second handle &#039;&#039;&#039;My_Handle_1_1&#039;&#039;&#039;. This will make it stay with the first handle in the entity list. This is important to keep organized. If you name it My_Handle_2 then when you get to another door named My_Door_2 you&#039;ll be confused.&lt;br /&gt;
* Place and &#039;&#039;&#039;bind&#039;&#039;&#039; that handle to your door.&lt;br /&gt;
&lt;br /&gt;
You now have two single door handles on either side of the door that rotate together as if they were physically attached.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add a brush to a brush door&#039;&#039;&#039;:&lt;br /&gt;
* Select the new brush &#039;&#039;and&#039;&#039; the brush door all together; &#039;&#039;the entity &#039;&#039;&#039;must&#039;&#039;&#039; be selected &#039;&#039;&#039;last&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
* Use {{menu|Edit|Reparent primitives}}. This ensures the parent entity adopts the new item(s).&lt;br /&gt;
* If you have trouble selecting them in the orthoview because other brushes, etc. get selected then try in the camera view or as a last resort move them temporarily to an open area (but keep them in the same positions relative to each other.) Use {{key-shift}}+{{LMB}} on new item(s) then {{key-shift}}+{{LMB}} on main entity. Once they are all selected, use the {{menu|Edit|Reparent primitives}}.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add &#039;&#039;model&#039;&#039; static items&#039;&#039;&#039;: knockers, hinges, static handles etc. to a &#039;&#039;Model Door&#039;&#039;:&lt;br /&gt;
* Select item&lt;br /&gt;
* Right click in orthoview and select &#039;&#039;Create Entity&#039;&#039; then &amp;lt;code&amp;gt;entity func_static&amp;lt;/code&amp;gt;&lt;br /&gt;
* Position it where you wish on your door.&lt;br /&gt;
* To synchronize this with your particular door you need to add the property &#039;&#039;bind&#039;&#039; and the individual door name to the brush entity. To do this...&lt;br /&gt;
** Select the model door.&lt;br /&gt;
** In the entity inspector, select the &#039;&#039;name&#039;&#039; line&lt;br /&gt;
** Select the bottom line in the input box &#039;&#039;below&#039;&#039; the properties window.&lt;br /&gt;
** Copy the name&lt;br /&gt;
** Deselect the door with {{key-esc}}&lt;br /&gt;
** Select the brush entity&lt;br /&gt;
** Add a property &amp;quot;bind&amp;quot; to it.&lt;br /&gt;
** Change the value of the property by pasting in the door name&lt;br /&gt;
** Click {{check}} or press {{key-enter}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add &#039;&#039;brush&#039;&#039; static items&#039;&#039;&#039;: knockers, hinges, static handles to a Model Door:&lt;br /&gt;
* This method is not ideal but it seems to work OK.&lt;br /&gt;
* Select the brush.&lt;br /&gt;
* Right click in orthoview and select Create Entity then &#039;&#039;atdm:mover_door_handle&#039;&#039;&lt;br /&gt;
* Position it where you wish on your door.&lt;br /&gt;
&lt;br /&gt;
To synchronize this with your particular door you need to add the property &#039;&#039;door_handle&#039;&#039; on the door, and give as the value the name of the brush you just created.&lt;br /&gt;
&lt;br /&gt;
This brush turns like a handle. To stop it:&lt;br /&gt;
&lt;br /&gt;
* Adding &#039;&#039;rotate 0 0 0&#039;&#039; or disabling the handle script won&#039;t help.&lt;br /&gt;
* Add a real working handle (as in the section above &#039;&#039;To add a working model door handle...&#039;&#039; and it must be added LAST.)&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want too see a real working handle added maybe try another tiny brush with the handle function and hide it inside the door?&lt;br /&gt;
&lt;br /&gt;
===Locking Doors===&lt;br /&gt;
&lt;br /&gt;
To lock a door check the &#039;&#039;show inherited properties&#039;&#039; in the entity inspector for a &#039;&#039;atdm:mover_door&#039;&#039; entity and you should see the &#039;&#039;locked&#039;&#039; property. Select it and in the input box below the properties you can change its value:&lt;br /&gt;
&lt;br /&gt;
* 0 = unlocked (default)&lt;br /&gt;
* 1 = locked&lt;br /&gt;
&lt;br /&gt;
If locked it will require an entity that is associated with it to be able to act as a key to unlock it.&lt;br /&gt;
&lt;br /&gt;
Currently door handles on locked doors will rotate when frobbed, they will bounce back though and the door will stay locked until unlocked.&lt;br /&gt;
&lt;br /&gt;
===Keys===&lt;br /&gt;
&lt;br /&gt;
Assigning specific keys to specific doors is simple.&lt;br /&gt;
&lt;br /&gt;
* It is recommended that you create an existing key entity. These keys have all required props, they just need to be named.&lt;br /&gt;
&lt;br /&gt;
Alternatively you can create a key from the Model Viewer and want it to be useable&lt;br /&gt;
* Make sure it has the properties:&lt;br /&gt;
 useable 1 [so it can be used by the door]&lt;br /&gt;
 frobable 1&lt;br /&gt;
 inv_name &amp;lt;unique name&amp;gt;&lt;br /&gt;
 inv_category Keys&lt;br /&gt;
 inv_target player1&lt;br /&gt;
 inv_icon guis/assets/hud/inventory_icons/&amp;lt;icon name&amp;gt;&lt;br /&gt;
 inv_stackable 0 or 1 where 1 can be used on all copies of the same key so they show as one entry in the inventory with a total.&lt;br /&gt;
&lt;br /&gt;
Add to the door the property &amp;lt;code&amp;gt;used_by&amp;lt;/code&amp;gt; with the name of the key as the value. Multiple keys can open the same door by using several &amp;lt;tt&amp;gt;used_by&amp;lt;/tt&amp;gt; spawnargs:&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;used_by&amp;quot;  &amp;quot;doorkey_1&amp;quot;&lt;br /&gt;
 &amp;quot;used_by1&amp;quot; &amp;quot;doorkey_2&lt;br /&gt;
&lt;br /&gt;
==== Keys Carried by AI ====&lt;br /&gt;
&lt;br /&gt;
So you have a door and you have a guard AI and you want the guard to be able to open/close/lock the door, but you also want the player to be able to pickpocket the key. Keys can be attached to AI in two ways.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The Def_Attach Method&#039;&#039;. This method is the best one for doors that you expect the AI to operate. It uses spawnargs to spawn the key at game start.&lt;br /&gt;
&lt;br /&gt;
*&amp;quot;def_attach6&amp;quot; &amp;quot;atdm:prop_silverkey&amp;quot; // the entity to spawn - in this case a key.&lt;br /&gt;
*&amp;quot;pos_attach6&amp;quot; &amp;quot;belt_back_right&amp;quot; // where the key will spawn on the Ai.&lt;br /&gt;
*&amp;quot;name_attach6&amp;quot; &amp;quot;door_key&amp;quot; // this gives &#039;attach6&#039; arg the name &amp;quot;door_key&amp;quot; and is the name the arg &amp;quot;used_by&amp;quot; will need, eg: &amp;quot;used_by&amp;quot; &amp;quot;door_key&amp;quot;&lt;br /&gt;
*&amp;quot;set inv_name on door_key&amp;quot; &amp;quot;Door key&amp;quot; // The name the key get when the play adds it to their inventory.&lt;br /&gt;
*&amp;quot;set name on door_key&amp;quot; &amp;quot;door_key&amp;quot; // here it gets a name to be used in the map in general.&lt;br /&gt;
&lt;br /&gt;
For more info on this method, see [[Attaching Props to AI]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The Bind Method&#039;&#039;. This lacks the animation finesse of def_attach, but does let you see the key in DR. The method is particularly helpful in, say, adding a second key to an AI in the back middle of a belt. The AI cannot use a bound key to open a locked door; the workaround is to fake it with &amp;quot;can_unlock&amp;quot; as discussed further below. Or to use bound keys mainly for items the AI will not attempt to open, such as hatches, duct covers, or chests.&lt;br /&gt;
&lt;br /&gt;
* Load a key entity&lt;br /&gt;
* Position where you want it in relation to the AI, and bind it to them (i.e., &amp;quot;bind&amp;quot; &amp;quot;&amp;lt;AIname&amp;gt;&amp;quot;)&lt;br /&gt;
* Add the spawnarg &amp;quot;bindToJoint&amp;quot; &amp;quot;Hips&amp;quot; (or another location like LeftHips_Dummy; see AI for list)&lt;br /&gt;
* Adjust existing spawnargs accordingly (that is, be sure the name and door&#039;s/chest&#039;s &amp;quot;used_by&amp;quot; match, if you aren&#039;t using a prefab chest with key). This is for the benefit of the player after pickpocketing the key; as stated above, the AI itself can&#039;t use it for unlocking.&lt;br /&gt;
&lt;br /&gt;
For more info on this method, see [[Attaching_Items]] and [[BindToJoint]].&lt;br /&gt;
&lt;br /&gt;
====Keys Carried by Player====&lt;br /&gt;
&lt;br /&gt;
With a door&#039;s key selected in your inventory and the door highlighted, you can...&lt;br /&gt;
* unlock it (which will also auto-open if enabled) by either frobbing it or hitting the Use key (typically U or Enter).&lt;br /&gt;
* lock (or relock) it via the Use key. Why do this? To avoid pursuit, or to lure guards into a room, and then lock them in (if they don&#039;t have a key or specific can_unlock powers). &lt;br /&gt;
&lt;br /&gt;
====Master Key for Testing====&lt;br /&gt;
&lt;br /&gt;
By default, ALL locks can be opened by any key named &#039;&#039;key_master&#039;&#039;. Just create a key in your map, name it &#039;&#039;key_master&#039;&#039; and it becomes a master key for use while testing. Add inv_map_start 1 to it so it is in the player inventory at game start. Remember to delete it when your mission is finished.&lt;br /&gt;
&lt;br /&gt;
====Automatically Removing Keys from Player Inventory After Use====&lt;br /&gt;
If a fan mission has a lot of keys it can clog up the player inventory. If the key is single-use, it can be useful to automatically remove it from the player inventory after use.  Below is a way to do it using a simple setup and a generic script function that can be used for multiple doors.&lt;br /&gt;
&lt;br /&gt;
=====Generic Version=====&lt;br /&gt;
&lt;br /&gt;
You&#039;ll need the following entities, preferably set up near each other in your map:&lt;br /&gt;
* The door entity itself&lt;br /&gt;
* A trigger_count entity&lt;br /&gt;
* An atdm:target_callscriptfunction entity&lt;br /&gt;
* some random entity for the target_callscriptfunction to target (explanation below)&lt;br /&gt;
&lt;br /&gt;
The below diagram shows the spawnargs and targeting required for the setup:&lt;br /&gt;
[[File:Key remove2.png|left|thumb]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
The script being called (&#039;openDoor&#039;) is defined in fms/&amp;lt;mapname&amp;gt;/maps/&amp;lt;mapname&amp;gt;.script and looks like this:&lt;br /&gt;
&lt;br /&gt;
 void openDoor(entity target, entity door, entity callscriptfunction)&lt;br /&gt;
 {&lt;br /&gt;
     string keyName = door.getKey(&amp;quot;used_by&amp;quot;);&lt;br /&gt;
     entity key = sys.getEntity(keyName);&lt;br /&gt;
     $player1.replaceInvItem(key, $null_entity);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Explanation as follows:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;For the door:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;trigger_on_open&#039;&#039;&#039; spawnarg: The door is configured to trigger its targets when it opens&lt;br /&gt;
* target &#039;&#039;&#039;trigger_count&#039;&#039;&#039; entity: this is the entity that is triggered when the door is opened&lt;br /&gt;
* &#039;&#039;&#039;used_by&#039;&#039;&#039; spawnarg: This names the key entity required for unlocking the door&lt;br /&gt;
* The other spawnargs are just the usual for setting the door as locked and unpickable&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;trigger_count entity:&#039;&#039;&#039;&lt;br /&gt;
* When triggered, this entity will in turn trigger the script that removes the key from the player inventory.&lt;br /&gt;
* &#039;&#039;&#039;count&#039;&#039;&#039; spawnarg: This is set to 1 because we only want the key removal script called once - the first time the player opens the door.&lt;br /&gt;
* this entity targets the atdm:target_callscriptfunction, which contains details of the script to execute&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;atdm:target_callscriptfunction entity:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;call&#039;&#039;&#039; spawnarg: This is the name of the script function to call&lt;br /&gt;
* &#039;&#039;&#039;foreach&#039;&#039;&#039; spawnarg: This version of the script event provides access to the &#039;activator&#039;, or the entity that triggered it (in this case, the door).  Using that information we can obtain the key name. See [[A to Z Scripting: Ways of calling a script#target_callscriptfunction|here]] for details.&lt;br /&gt;
* &#039;&#039;&#039;target any static entity&#039;&#039;&#039;: For this version of the script event to work, the target_callscriptfunction entity needs to target something.  This can be any static entity in the map (i.e. one that won&#039;t get removed or anything). I usually just target the nearest entity (e.g. a light or a lamp, or a model).  This provides no functionality in the context of this tutorial, it just satisfies the conditions of the script event.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The script:&#039;&#039;&#039;&lt;br /&gt;
* Pretty self-explanatory.  The script gets the name of the key entity via the &#039;&#039;&#039;used_by&#039;&#039;&#039; spawnarg on the door, retrieves the key entity, and then replaces it in the player inventory with a null entity, effectively removing it.&lt;br /&gt;
* Any door can use this script as its generic (although they will need their own trigger_count and target_callscriptfunction entities)&lt;br /&gt;
&lt;br /&gt;
=====Simpler, No-script Version=====&lt;br /&gt;
This is similar to above, but is more limited.  You need to hard-code the key name as a spawnarg on an atdm:target_itemremove entity as they key name can&#039;t be automatically determined. This makes it slightly more error-prone as we&#039;re naming entities in more than one place, but ideal if you&#039;re uncomfortable with scripting.&lt;br /&gt;
&lt;br /&gt;
[[File:Key remove3.png|left|thumb]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Explanation as follows:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;atdm:target_itemremove entity:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;unique_item &#039;&#039;&#039; spawnarg: The name of the key to remove from the player inventory&lt;br /&gt;
&lt;br /&gt;
===Lockpicks===&lt;br /&gt;
&#039;&#039;by Baddcog&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
There are two lock pick types.&lt;br /&gt;
*&#039;&#039;&#039;s&#039;&#039;&#039;=snake&lt;br /&gt;
*&#039;&#039;&#039;t&#039;&#039;&#039;=triangular&lt;br /&gt;
&lt;br /&gt;
A lock can be set with many pins. Each pin has a click sequence and each needs a designated lockpick type (see above). Keep in mind that the lockpicking in The Darkmod is much more involved than in T2 or T3. The player has to listen to sounds or watch a handle or lockbar to know when a lock is pin is picked.&lt;br /&gt;
&lt;br /&gt;
This means that authors can be very evil and really frustrate the player, in which case their missions will probably not be played. So be nice to the player and don&#039;t waste your time. Use simple locks for the most part and save complicated locks for important sections and to build tension. Don&#039;t make the player have 20 pins to pick all with different lockpicks. In most cases 1 or 2 pins will suffice and it isn&#039;t necessary to use both lockpicks on every lock.&lt;br /&gt;
Also try to include a lock lever on lockboxes or chests, door handles will rotate as the pins are being picked. This gives the player visual clues to help with the picking (and essential in noisy environments where you can&#039;t hear the clicks.)&lt;br /&gt;
IMO this system is a huge leap foward for lockpicking but also has the ability to completely frustrate the player as stated above. Keep this in mind when designing your lockpick systems.&lt;br /&gt;
&lt;br /&gt;
These props go on the door itself, or the lid of a chest, eg,&lt;br /&gt;
*&#039;&#039;&#039;lock_pins&#039;&#039;&#039; 1327&lt;br /&gt;
*&#039;&#039;&#039;lock_picktype&#039;&#039;&#039; stts&lt;br /&gt;
&lt;br /&gt;
The lock_pins property specifies how many pins each lockpicktype has.&lt;br /&gt;
The lockpick_type property specifies how many times the player has to switch picks and which pick they have to use. You can see there must always be an equal number of lock_pins and lock_picktypes specified&lt;br /&gt;
&lt;br /&gt;
So looking at the example above we have lockpick_type s(snake), t(triangular), t(triangular), and s(snake). The player will have to use these lockpicks in this order. Once the snake lockpick&#039;s pins are open the player can advance to the triangular pick and so forth.&lt;br /&gt;
5 is added to every click sequence so 5 is the minimum click pattern even if you set it to 0.&lt;br /&gt;
In the example above the lockpins specify in order which pick types have how many pins, so the s pick has 1 + 5 = 6 clicks, the t pick has 8 and so on.&lt;br /&gt;
The above is a difficult lock and to avoid annoying the player it is best only used rarely on a special lock like an important big vault door. Ordinary footlockers and common doors can be just 1 or 2 click sequences, eg, lock_pins 2 and lock_picktype t means the player uses one pick and listens for the end of one sequence of 7 clicks.&lt;br /&gt;
&lt;br /&gt;
lockpick_rotate - is placed on the door. It is the amount the visible rotating handle or pin rotates while picking. For a rotating handle or lockbar normally ignore this and leave the default. During lockpicking it oscillates and progresses to the normal full turn of the handle. Example 0 45 0.&lt;br /&gt;
&lt;br /&gt;
lockpick_translate - is placed on the door. It is the amount the visible handle or pin moves in a straight line while picking. Use this if you have eg, a lockbar that you want to move in a straight line and not rotate, eg sliding catch. Example 0 -5 0&lt;br /&gt;
&lt;br /&gt;
By default, doors are pickable. If you don&#039;t set up the above lockpick spawnargs then it can&#039;t be picked. So there is normally no need to enable lockpicking - just set up the above spawnargs. There is a &#039;&#039;pickable&#039;&#039; spawnarg set to 1 by default. If set to 0 then the door becomes unpickable. But hard to think of an application except in testing or perhaps a special custom situation where it is switched by script perhaps.&lt;br /&gt;
&lt;br /&gt;
===Open, Partially Open, or Closed Door at Game Start===&lt;br /&gt;
&lt;br /&gt;
By default, doors are closed at game start. If you want a door to be already open or partially open then do the following.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note well: Create all doors in their &#039;&#039;closed&#039;&#039; position. Adjust as follows and they will automatically be at the open position when game starts.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Already Open Rotating Door:&lt;br /&gt;
* Select the door.&lt;br /&gt;
* Select the entity inspector&lt;br /&gt;
* Check &#039;&#039;show inherited properties&#039;&#039;&lt;br /&gt;
* Select the &#039;&#039;open&#039;&#039; property&lt;br /&gt;
* Edit the value to 1 in the input box below and tick the check button&lt;br /&gt;
* The door will now be fully open at game start.&lt;br /&gt;
&lt;br /&gt;
* If you want it only partly open:&lt;br /&gt;
* Make sure its &#039;&#039;open&#039;&#039; property is set to 1 as above.&lt;br /&gt;
* Right click the entity inspector and select &#039;&#039;add property&#039;&#039; &lt;br /&gt;
* Click the + sign on the left of the top line where atdm:mover_door is listed to open the folder. (if atdm:mover_door is not listed then the entity was likely changed from eg, func_static. If so, save the map and reload to update the add property list)&lt;br /&gt;
*  scroll down, select &#039;&#039;start_rotate&#039;&#039; then click {{ok}}&lt;br /&gt;
* This adds it to the property list.&lt;br /&gt;
* Now select &#039;&#039;start_rotate&#039;&#039; in the property list.&lt;br /&gt;
* Edit the bottom line of the input box &#039;&#039;below&#039;&#039; the properties window to the angle you want in the same form as described in the &#039;&#039;Rotate Direction and Open Angle&#039;&#039; section. So for example, to have a door that has a fully open default &#039;&#039;rotate&#039;&#039; value of 0 90 0 to start only half open you would give it a &#039;&#039;start_rotate&#039;&#039; value of 0 45 0. &lt;br /&gt;
* In a similar way add the property &#039;&#039;first_frob_open&amp;quot;.&lt;br /&gt;
* Set it to 1 and a partly open door should then open fully on the first frob.&lt;br /&gt;
* Set it to 0 and a partly open door should close on the first frob.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Already Open Sliding Door:&lt;br /&gt;
* Select the door.&lt;br /&gt;
* Select the entity inspector&lt;br /&gt;
* Check &#039;&#039;show inherited properties&#039;&#039;&lt;br /&gt;
* Select the &#039;&#039;open&#039;&#039; property&lt;br /&gt;
* Edit the value to 1 in the input box below and click {{check}} or press {{key-enter}}&lt;br /&gt;
* The door will now be fully open at game start.&lt;br /&gt;
&lt;br /&gt;
* If you want it only partly open:&lt;br /&gt;
* Right click the entity inspector and select &#039;&#039;add property&#039;&#039; &lt;br /&gt;
* Make sure its &#039;&#039;open&#039;&#039; property is set to 1&lt;br /&gt;
* Click the + sign on the left of the top line where atdm:mover_door is listed to open the folder.&lt;br /&gt;
*  scroll down, select &#039;&#039;start_position&#039;&#039; then click OK. (if atdm:mover_door is not listed then the entity was likely changed from eg, func_static. If so, save the map and reload to update the add property list)&lt;br /&gt;
* This adds it to the property list.&lt;br /&gt;
* Now select &#039;&#039;start_position&#039;&#039; in the property list.&lt;br /&gt;
* Edit the bottom line of the input box &#039;&#039;below&#039;&#039; the properties window to the position you want in the same form as described in the &#039;&#039;Sliding (Translation) Amount and Direction&#039;&#039; section. So for example, to have a door that has a fully open default &#039;&#039;translate&#039;&#039; value of 0 50 0 to start only half open you would give it a &#039;&#039;start_position&#039;&#039; value of 0 25 0.&lt;br /&gt;
* In a similar way add the property &#039;&#039;first_frob_open&amp;quot;.&lt;br /&gt;
* Set it to 1 and a partly open door should then open fully on the first frob.&lt;br /&gt;
* Set it to 0 and a partly open door should close on the first frob.&lt;br /&gt;
&lt;br /&gt;
===Rotation Centre, Pivot, Hinge point===&lt;br /&gt;
&lt;br /&gt;
The centre of rotation of a door is at the origin point of its entity and the door rotates with reference to the orientation of that origin point, not the world map. See &#039;&#039;Rotate Direction...&#039;&#039; for more about that. This section only deals with the &#039;&#039;position&#039;&#039; of the rotation centre in the door.&lt;br /&gt;
&lt;br /&gt;
Model Door Centre of Rotation:&amp;lt;br&amp;gt;&lt;br /&gt;
The centre of rotation of a model door cannot be changed within Dark Radiant. Because a model door rotates around the centre &#039;spine&#039; of its back edge this will cause clipping (penetration into solid) as in this example (where the door is set to open to 89 degrees for clarity):&amp;lt;BR&amp;gt;[[Image:modelClipping.jpg]]&amp;lt;BR&amp;gt; So care is needed with placement. You will not normally position a door right next to a wall as in the example but against a shallow frame so clipping will barely be noticeable but either way it can be fixed. You can correct it by adding a translation (see &#039;&#039;Sliding (Translation) Directions&#039;&#039;) value of half the door width in the direction of the door handle. This will gently move the door out as it rotates to clear any solid on that side as in this diagram:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:DoorClip.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
Half a door width will typically be about 2. Any &#039;attachments&#039; such as door handles will still synchronize with the door movement whether the door is rotating, sliding, or both.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Brush Door Centre of Rotation:&amp;lt;br&amp;gt;&lt;br /&gt;
The centre of rotation of a brush door &#039;&#039;can&#039;&#039; be changed. The default origin point of a brush is at its centre. Therefore a default rotating brush door will rotate around its centre when you first create it. So, mappers will commonly need to move that rotation point to a corner or even to some other offset position for example, for an openable window using the door function.&lt;br /&gt;
&lt;br /&gt;
Put simply, to move the rotation point of a brush door you need to move the entity origin relative to the brush(es.)&lt;br /&gt;
&lt;br /&gt;
Moving the entity origin (centre of rotation) relative to a brush door:&lt;br /&gt;
&lt;br /&gt;
* Select the brush door&lt;br /&gt;
* Select &#039;&#039;Vertices mode&#039;&#039; (default shortcut key is {{key|name=V}} or button on top toolbar &#039;Select Vertices&#039;)&lt;br /&gt;
* Drag the door&#039;s entity origin to the point where you want the door to rotate. This should be on the corner on the leading edge side (the side to where the door is opening.) to avoid clipping as in this diagram....&lt;br /&gt;
[[Image:getCorner.jpg]]&lt;br /&gt;
* You should now find that door rotates around that point.&lt;br /&gt;
&lt;br /&gt;
===Rotate Direction and Open Angle===&lt;br /&gt;
&lt;br /&gt;
By default, rotating doors open anti-clockwise (viewed from above) by 90 degrees from the start orientation. If you want to change this edit the &#039;&#039;rotate&#039;&#039; property in the entity inspector. Don&#039;t confuse this &#039;&#039;rotate&#039;&#039; property with the &#039;&#039;rotation&#039;&#039; property. In the entity inspector remember that to see the inherited rotate property you must check the box &#039;Show inherited properties&#039;.&lt;br /&gt;
&lt;br /&gt;
The three values shown in the rotate property are degrees from the closed position around Y Z X (absolute map axes Front, Top, Side views in DR&#039;s ortho view.)&lt;br /&gt;
&lt;br /&gt;
* Positive Y = Open clockwise (Dark Radiant grid front view, looking north)&lt;br /&gt;
* Negative Y = Open anti-clockwise (Dark Radiant grid front view, looking north)&lt;br /&gt;
&lt;br /&gt;
* Positive Z = Open anti-clockwise (Dark Radiant grid top view, looking down)&lt;br /&gt;
* Negative Z = Open clockwise (Dark Radiant grid top view, looking down)&lt;br /&gt;
&lt;br /&gt;
* Positive X = Open anti-clockwise (Dark Radiant grid side view, looking west)&lt;br /&gt;
* Negative X = Open clockwise (Dark Radiant grid side view, looking west)&lt;br /&gt;
&lt;br /&gt;
There is a problem when you come to rotations that are not around the main Y Z X axes of the map, for instance a drawbridge that lowers down to the south east. You might think you can combine Y Z X values to get the result you want - and this can be done (for south east use 45 45 90) but it is a bit of a kludge and the drawbridge twists eccentrically as it lowers (though it arrives correctly!)&lt;br /&gt;
&lt;br /&gt;
The values are in the range -179 to +180. Positive values give an anti-clockwise opening rotation (looking down from above) and negative values give a clockwise opening rotation. The value 180 is unique in that it continues in an anti-clockwise rotation when closing rather than returning clockwise so might be used if you can think of some object that might need such a motion when frobbed!&lt;br /&gt;
&lt;br /&gt;
Edit the rotate value by selecting it and using the input box at the bottom and clicking the check(tick) button. That will change the angle the door will open to. Note that the line with the original default of 0 90 0 will still be there but your new entry will be added on a separate line and that is the one that will work in the game. CAUTION: when adjusting later make sure you have your new line selected and not the original! If you do it will appear to change but your first setting will remain unaltered.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
* 0 90 0 = Opens anti-clockwise round the entity&#039;s &#039;vertical&#039; to 90 degrees - typical default vertical door.&lt;br /&gt;
* 0 0 90 = Lowers a drawbridge from the entity &#039;vertical&#039; to horizontal.&lt;br /&gt;
* 0 0 -45 = Opens clockwise by 45 degrees viewed from the east side. This might suit a skylight in a sloping roof.&lt;br /&gt;
&lt;br /&gt;
&#039;rotate&#039; cannot be combined with translate motions (see [[#Sliding (Translation) Amount and Direction]]) in one door; you need to bind one door to another and link they by targetting one to the other. By that means you can produce exotic and useful motions. A door opening against an upward-sloping floor can thus have a &#039;&#039;lifting hinge&#039;&#039; and raise up slightly to clear the floor; a door can rotate towards you and slide back to one side very effectively.&lt;br /&gt;
&lt;br /&gt;
===Sliding (Translation) Amount and Direction===&lt;br /&gt;
&lt;br /&gt;
By default a Dark Mod door will rotate open. For most sliding doors you want to stop them rotating as well as make them slide. You cannot delete (remove) the &#039;&#039;rotate&#039;&#039; property - you have to set the &#039;&#039;rotate&#039;&#039; property to 0 0 0 to stop a door rotating (see &#039;&#039;Rotate Direction and Open Angle&#039;&#039;.)&lt;br /&gt;
&lt;br /&gt;
Now edit the &#039;&#039;translate&#039;&#039; property value by selecting it (remember to have inherited properties box checked) and using the input box at the bottom and clicking the check(tick) button. That will change the distance the door will slide to. Note that the line with the original default of 0 0 0 will still be there but your new entry will be added on a separate line and that is the one that will work in the game. CAUTION: when adjusting later make sure you have your new line selected and not the original! If you do it will appear to change but your first setting will remain unaltered.&lt;br /&gt;
&lt;br /&gt;
Typically (but not always) you will want your sliding door to slide the width of the door. The three values in the translate property by default are 0 0 0 and are X Y Z &#039;&#039;absolute map&#039;&#039; values (irrespective of door orientation) where:&lt;br /&gt;
&lt;br /&gt;
* Positive X = Slide East (Right side of Dark Radiant grid in top view)&lt;br /&gt;
* Negative X = Slide West (Left side of Dark Radiant grid in top view)&lt;br /&gt;
* Positive Y = Slide North (top of Dark Radiant grid in top view)&lt;br /&gt;
* Negative Y = Slide South (bottom of Dark Radiant grid in top view)&lt;br /&gt;
* Positive Z = Slide Up (Top of Dark Radiant grid in side views)&lt;br /&gt;
* Negative Z = Slide Down (Bottom of Dark Radiant grid in side views)&lt;br /&gt;
&lt;br /&gt;
So for a 50 unit wide door you want to slide fully to the east you would use 50 0 0 for the translate property values. A 100 unit portcullis sliding vertically up would need 0 0 100 to be fully raised.&lt;br /&gt;
&lt;br /&gt;
=== Doors Collision/Push Behaviour ===&lt;br /&gt;
Doors push all entities by default, except for the player. Doors will also stop moving when anything blocks their movement. However, this default behaviour can be changed by setting appropriate spawnargs:&lt;br /&gt;
&lt;br /&gt;
Set &#039;&#039;&#039;push_player&#039;&#039;&#039; to &#039;&#039;&#039;1&#039;&#039;&#039; to let the player be pushed by this door:&lt;br /&gt;
 &amp;quot;push_player&amp;quot;  &amp;quot;1&amp;quot;  // Push the player too (default is off)&lt;br /&gt;
&lt;br /&gt;
By default &#039;&#039;&#039;stop_when_blocked&#039;&#039;&#039; is set to 1 and if a door is blocked by an entity then even if the entity is removed afterwards, the door stays where it is. The next frob will close the door.&lt;br /&gt;
&lt;br /&gt;
Set &#039;&#039;&#039;stop_when_blocked&#039;&#039;&#039; to &#039;&#039;&#039;0&#039;&#039;&#039; to prevent the door from ending the opening sequence when anything blocks its way. It will still pause - but continue to open if the block is removed.&lt;br /&gt;
 &amp;quot;stop_when_blocked&amp;quot;   &amp;quot;0&amp;quot;  // door keeps moving after being blocked (default is off)&lt;br /&gt;
With this setting, doors will still stop at blocking entities (the player, for instance), but will continue to move when the entity moves out of the way.&lt;br /&gt;
&lt;br /&gt;
There is another spawnarg which stops a door pushing a moveable. Apply this to the &#039;&#039;moveable&#039;&#039;, not the door...&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;notPushable&amp;quot;   &amp;quot;1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Door Sounds===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are multiple ways to put sounds on doors.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_open&#039;&#039; &amp;lt;br&amp;gt; &lt;br /&gt;
Sound is triggered as the door begins to open.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_opened&#039;&#039; &amp;lt;br&amp;gt; &lt;br /&gt;
Sound is triggered when the door finishes opening. Defaults to &amp;quot;nosound&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_move&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
The sound plays while the door moves.  Defaults to &amp;quot;nosound&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_close&#039;&#039;  &amp;lt;br&amp;gt;&lt;br /&gt;
Sound is triggered as the door finishes closing.&lt;br /&gt;
&lt;br /&gt;
The following sounds should be left on the default sound in most cases so players clearly know what is going on:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_locked&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
The sound played when a player or an AI tries to open a locked door.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_unlock string&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
The sound played when a door is unlocked.&lt;br /&gt;
&lt;br /&gt;
You can silence any of these sounds by setting the following properties as shown:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_open nosound&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;snd_close nosound&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Don&#039;t just use a dash - as it seems to cause a sound of its own.&lt;br /&gt;
&lt;br /&gt;
===Sound Propagation through Doors and Doorways===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This information will change significantly with the release of 2.0.  See&#039;&#039; [[Controlling Sound Loss Across Portals]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The sound volume reduction to the player (ie, the sound the player hears) is fixed and constant in a cvar which adds a distance factor to the original sound. It is recommended that you do not change that because it will affect other FMs. Currently there is no way to change the way that sound to the player is reduced through doors and doorways.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sound propagation to AI, eg, impact sounds or guard yells is treated separately:&lt;br /&gt;
&lt;br /&gt;
Sound propagation to AI relies on visportals. For details study [[Sound Propagation: Part 1]] and [[Sound Propagation: Part 2]] as well as [[Visportals]] This tutorial will just cover the relevant sound and sound propagation &#039;&#039;properties&#039;&#039; of doors. If you set the &#039;&#039;show inherited properties&#039;&#039; box in the entity inspector you can see them as described here.&lt;br /&gt;
&lt;br /&gt;
Remember, the following have no effect on what the player hears through a door or doorway.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;loss_open&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Drop in sound volume in dB propagated to AI (not player) when going through an open door. (default 1dB)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;loss_closed&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Drop in sound volume in dB propagated to AI (not player) when going through a closed door. (default 15dB) You would want to set this very high to block all sound with a thick door but very low for a barred gate for example.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;loss_double_open&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Drop in sound volume in dB propagated to AI (not player) when going through double doors when only one is open. (default 1dB)&lt;br /&gt;
&lt;br /&gt;
There are also various sound properties for lockpicking:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;snd_lockpick_pin_1 through 14&#039;&#039; and &#039;&#039;snd_lockpick_pin_success&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Allowing the Player to Interrupt Door Motion===&lt;br /&gt;
&lt;br /&gt;
The door property &#039;&#039;interruptable&#039;&#039; determines whether a door can be stopped by frobbing while it is opening or closing. It is enabled (i.e., set to 1) by default. Then the player, by frobbing to start the normal opening, then frobbing again to interrupt, can open a door to any position, e.g., slightly ajar to peek through. Another frob will begin closing, and so on with any additional frobs to stop/reverse-direction.&lt;br /&gt;
&lt;br /&gt;
Be aware that an rotating-style door, when left ajar, will subsequently open or close more slowly than normal in an angular-velocity sense. It instead takes the same time as a full (uninterrupted) opening or closing would take in seconds, as given by &#039;&#039;move_time&#039;&#039; discussed next.&lt;br /&gt;
&lt;br /&gt;
===Speed of Door Opening and Closing===&lt;br /&gt;
&lt;br /&gt;
Rotating Door Speed:&amp;lt;br&amp;gt;&lt;br /&gt;
The time a rotating door takes to open or close is set in the &#039;&#039;move_time&#039;&#039; property, no matter what its maximum open angle may be. So with rotation set at, say, 150 degrees the door just opens faster than at, say, 80 degrees. To change this value, make sure the door is selected then...&lt;br /&gt;
&lt;br /&gt;
* Right click the entity inspector and check &#039;&#039;show inherited properties&#039;&#039;&lt;br /&gt;
* Scroll down, select &#039;&#039;move_time&#039;&#039;&lt;br /&gt;
* Edit the second line of the input box &#039;&#039;below&#039;&#039; the properties window to the time you want.&lt;br /&gt;
* The time is in seconds and decimal fractions can be used. The default is currently 1.75 seconds.&lt;br /&gt;
&lt;br /&gt;
Sliding Door Speed:&amp;lt;br&amp;gt;&lt;br /&gt;
The speed of a sliding door is set in the &#039;&#039;translate_speed&#039;&#039; property. To add this, make sure the door is selected then...&lt;br /&gt;
&lt;br /&gt;
* Right click the entity inspector and check &#039;&#039;show inherited properties&#039;&#039;&lt;br /&gt;
* Scroll down, select &#039;&#039;translate_speed&#039;&#039;&lt;br /&gt;
* Edit the second line of the input box &#039;&#039;below&#039;&#039; the properties window to the speed you want.&lt;br /&gt;
* The speed is in Dark Radiant grid units per second.&lt;br /&gt;
* The default is 0 and if set to this then the door slides open in one second whatever the distance, great or small.&lt;br /&gt;
* CAUTION: It is assumed &#039;&#039;translate&#039;&#039; has been changed from its default value of 0 0 0. If not, a non-zero &#039;&#039;translate_speed&#039;&#039; may cause problems.&lt;br /&gt;
&lt;br /&gt;
===Visportals and Doors===&lt;br /&gt;
&lt;br /&gt;
A visportal face surrounded by solid at its edges and in contact with a door is closed when the door is closed and enabled when the door is open. In most cases you will place a visportal in contact with a working door unless you can see through the door (such as a true glass door or barred gate*.) For full details see [[Visportals]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;*As of 2.0 it is possible to make visportals that remain transparent when closed for gates and windows.  See&#039;&#039; [[Controlling Sound Loss Across Portals]]&lt;br /&gt;
&lt;br /&gt;
==Auto-Closing/Opening Doors==&lt;br /&gt;
Doors that automatically close after being open for some time are easy to setup: Each frobmover entity supports these spawnargs:&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;auto_close_time&amp;quot;:Set this to something &amp;gt;= 0 to let the mover automatically close (again) after this time when being fully opened (measured in seconds). Defaults to -1, which means &#039;do not autoclose&#039;. The event is also activated when the mover starts at the open position at map start.&lt;br /&gt;
;&amp;quot;auto_open_time&amp;quot;:&amp;quot;Set this to something &amp;gt;= 0 to let the mover automatically open (again) after this time when being fully closed (measured in seconds). Defaults to -1, which means &#039;do not autoopen&#039;. The event is also activated when the mover starts at the closed position at map start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Before auto_close_time and the AI Door Management spawnargs next were provided, a more laborious method was used to auto-close doors as if AI were closing doors behind them. Hit &amp;quot;Expand&amp;quot; to review it.&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;I have one door that I particularly want the AI to close as there is a bit of frame lag inside if not. So I set this up and it works good as an auto-closing door - not as good as a true AI closing door as it will auto close when the player goes through as well but it does look very effective to see AI going through and closing the door behind them. Not tested exhaustively so I don&#039;t know if there could be any downside. Here&#039;s what to do....&lt;br /&gt;
&lt;br /&gt;
First a quick summary to make it more clear:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;A trigger_relay is used both as a relay AND carries a stim. We put the trigger_relay with its stim in the path of the open door. The door has a response property. When it opens and contacts the stim its response is to send a signal back to the relay. The relay pauses then closes the door...&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* First, optionally give your door a suitable name like autodoor1, whatever.&lt;br /&gt;
* Copy that name to the clipboard.&lt;br /&gt;
&lt;br /&gt;
Next we need a relay with a delay:&lt;br /&gt;
&lt;br /&gt;
* Create entity &amp;gt; darkmod &amp;gt; trigger_relay&lt;br /&gt;
&lt;br /&gt;
* Place it roughly at the position the door will be at when open and to be on the safe side 3/4th of the way to the far end of the door (not the hinge end) to give max distance from the close door.&lt;br /&gt;
&lt;br /&gt;
* Add the property &#039;target&#039; and paste in the door name you just copied.&lt;br /&gt;
&lt;br /&gt;
* Give the relay itself a name, eg, autoDoor_relay_1, and copy that name to the clipboard, you&#039;ll need that too in a bit.&lt;br /&gt;
&lt;br /&gt;
* Add the property delay and the value 3 - this is the delay in seconds before the door will close; 3 seems about right but 2 might be worth a try because to that 3 is added a random value between 0 to 0.5 seconds from the Time Interval we entered for the stim firings.&lt;br /&gt;
&lt;br /&gt;
* Add the property &#039;wait&#039; and the value 3. This is the time before it can work again in seconds. If you set it too low then in theory the door might trigger again but in this situation I don&#039;t think it&#039;s possible. Too long, eg, one minute, and it won&#039;t work if the AI goes back through the door before then. If this value is -1 then the whole thing will only work ONCE so might be used for an AI who goes through once, closes it behind him, but you don&#039;t want it to be an autodoor thereafter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That&#039;s the relay, now we add a stim to it:&lt;br /&gt;
&lt;br /&gt;
* Still with the trigger relay selected, go to {{menu|Entity|Stim/Response}}&lt;br /&gt;
&lt;br /&gt;
* Custom stim tab.&lt;br /&gt;
&lt;br /&gt;
* Click Add stim type, select the new custom stim type you just made at the bottom of the list and type in eg, autoDoorStim at top right in the input box.&lt;br /&gt;
&lt;br /&gt;
* Click the stim tab and the little drop down arrow against the &#039;type&#039; selector at bottom left and you should see your new custom stim name. Select it.&lt;br /&gt;
&lt;br /&gt;
* Select the new autoDoorStim in the list and on the right you need only type in the radius box 15.0 There is quite a lot of room for error. I had it working on 10 and also on 25. The value should be less than the distance to the closed door else it will trigger open! But no so small that the door might not reach it.&lt;br /&gt;
&lt;br /&gt;
* Select the check box for Time Interval and enter 500 (millisecs.) This is so it doesn&#039;t keep firing more frequently than is necessary. This stim will be firing all through your mission whether the door is used or not so if you had dozens of these then maybe it would affect performance. Too big a number and there may be a long delay before the door shuts - but it will be random depending on the next time the stim happens to fire. We&#039;ll control the delay we want more precisely later.&lt;br /&gt;
&lt;br /&gt;
* Click {{ok}} to confirm it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That&#039;s the stim set up, now for the response to it which is put on the door....&lt;br /&gt;
&lt;br /&gt;
* Select the doorm, then use {{menu|Entity|Stim/response}} and select the response tab.&lt;br /&gt;
&lt;br /&gt;
* Click the little drop down arrow against the &#039;type&#039; selector at bottom left and you should see your new custom stim name. Select it.&lt;br /&gt;
&lt;br /&gt;
* Right click in the big &#039;&#039;Response Effects&#039;&#039; box on the bottom right of the panel.&lt;br /&gt;
&lt;br /&gt;
* Add New Effect and you should get a default &#039;Activate Response&#039; response added to the list. Double click it.&lt;br /&gt;
&lt;br /&gt;
* In the Effect selector at the stop select &#039;Trigger&#039;&lt;br /&gt;
&lt;br /&gt;
* in the Target box, paste in the name of the relay you copied or you can select it from the list at the little arrow.&lt;br /&gt;
&lt;br /&gt;
* Leave the Activator box empty.&lt;br /&gt;
&lt;br /&gt;
* Click {{apply}} and then {{ok}} on the main S &amp;amp; R panel bottom right.&lt;br /&gt;
&lt;br /&gt;
It should now work. No need to wait for an AI, just frob the door and watch it close itself. If not, check the position of the stim brush is close to where the door stops when open.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==AI Door management==&lt;br /&gt;
&lt;br /&gt;
By default AI will open doors and close them behind them. Here are some spawnargs &#039;&#039;&#039;on the door&#039;&#039;&#039; the mapper can use to modify that behaviour:&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;ai_should_not_handle&amp;quot; :If set to 1, AI will not attempt to handle it and add it to the forbidden areas (so that it doesn&#039;t try to path through). They might still walk through the door when it is open though. Useful if you have some special use door that you don&#039;t want the AI to operate.&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;ai_should_not_close&amp;quot; :If set to 1, AI will not close the door behind them unless it obstructs them.&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;canRemainOpen&amp;quot; :If set to 1, it&#039;s the same as &amp;quot;ai_should_not_close, with the added behavior that this is ignored if the door needs to be relocked, or the door is marked &amp;quot;shouldBeClosed&amp;quot;. &#039;&#039;&#039;(This spawnarg is available starting in TDM 2.02.)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Spawnargs &#039;&#039;&#039;on the AI&#039;&#039;&#039; that the mapper can use:&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;canCloseDoors&amp;quot; :Added in 2.12. Defaults to 1.  If set to 0, the AI will not close doors after passing through them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To get AI to unlock/relock specific doors there are two methods:&lt;br /&gt;
&lt;br /&gt;
1. Provide the AI with the key, as detailed in the def_attach method in [[#Keys_carried_by_AI]] above.&lt;br /&gt;
&lt;br /&gt;
2. Add the following spawnarg/value to the AI:&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;can_unlock&amp;quot; &#039;&#039;&amp;lt;doorname&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For additional doors on the same AI use &#039;&#039;can_unlock1 doorname&#039;, `can_unlock2 doorname&#039; etc. &#039;&#039;&#039;Do NOT use can_unlock_1.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If both (1) and (2) are used, then the AI can still go through the door after the player pickpockets the key. Otherwise, unless someone else opens the door for the AI, a typical sequence is that the AI checks their pockets for the missing key, stalls a bit at the locked door, and then (with now-better pathing algorithms) the AI uses an alternate route to the next path_corner, or &amp;quot;mentally&amp;quot; skips ahead in the route to next reachable node and goes there.&lt;br /&gt;
&lt;br /&gt;
===Door Handling Positions===&lt;br /&gt;
&lt;br /&gt;
It is also possible to set custom door handling positions for the AI. This is especially useful when the standard routine that lets the AI choose their standing positions while opening and closing the door fails, leaving them standing still, or circling around in front of the door helplessly.&lt;br /&gt;
&lt;br /&gt;
Place a movers &amp;gt; &#039;&#039;atdm:door_handling_position&#039;&#039; entity where you want the AI to stand while opening/closing the door from this side.&lt;br /&gt;
&lt;br /&gt;
On the door, you need to set the spawnarg &amp;quot;door_handle_position&amp;quot; &amp;quot;name_of_door_handling_position&amp;quot;. You can also place a &#039;&#039;door_handling_position&#039;&#039; on each side of the door, and the AI will automatically choose the right one. In this case, you need to set spawnargs with &amp;quot;door_handle_position_1&amp;quot; etc., and the corresponding names of the &#039;&#039;door_handling_position&#039;&#039; entities on the door.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;door_handling_position&#039;&#039; entities can also carry spawnargs that define the behaviour of the AI, which are useful for example for doors that can only be opened or locked from one side:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;ai_no_open&amp;quot;&#039;&#039;&#039; If set to &amp;quot;1&amp;quot;, the AI will not try to open the door from this side (but will still walk through when the door is already open).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;ai_no_close&amp;quot;&#039;&#039;&#039; If set to &amp;quot;1&amp;quot;, the AI will not attempt to close the door from this side.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;ai_no_unlock&amp;quot;&#039;&#039;&#039; If set &amp;quot;1&amp;quot;, the AI will not be able to unlock the door from this side, but still use it when it is not locked.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;ai_no_lock&amp;quot;&#039;&#039;&#039; If this is set &amp;quot;1&amp;quot;, the AI will not lock the door from this side.&lt;br /&gt;
&lt;br /&gt;
===Door Controllers===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Available in TDM 2.02+&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can design a door so it&#039;s operated by buttons or levers or switches (aka &#039;&#039;controllers&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
A controller is simply an entity that targets the door.  Typical examples of entities that can be used are:&lt;br /&gt;
&lt;br /&gt;
* Buttons: atdm:mover_button&lt;br /&gt;
* Levers: atdm:switch_rotate_lever&lt;br /&gt;
* Switch: atdm:mover_lever&lt;br /&gt;
* Lock: atdm:froblock. (See also next section)&lt;br /&gt;
&lt;br /&gt;
1. Set up the door in the normal manner. It can be a rotating door, a sliding door, a locked door, etc.&lt;br /&gt;
&lt;br /&gt;
2. Turn off the &amp;quot;frobable&amp;quot; spawnarg on the door. (&amp;quot;frobable&amp;quot; &amp;quot;0&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
3. Create a controller entity on each side of the door. If you&#039;re setting up a locked door using atdm:froblock, there&#039;s no need to put any locking information on the controllers. When the game starts, it will transfer any locking information from the door to the controllers.&lt;br /&gt;
&lt;br /&gt;
4. Give each controller the door as a target.&lt;br /&gt;
&lt;br /&gt;
Both the player and any AI that wants to use the door will use the controllers to operate it. Any key, &amp;quot;can_unlock&amp;quot;, or lockpick settings you would normally use at the door are now used at the controllers.&lt;br /&gt;
&lt;br /&gt;
Controllers and &#039;&#039;door_handling_position&#039;&#039; entities can be used on the same door, but in that situation the &#039;&#039;door_handling_position&#039;&#039; entities don&#039;t define where the AI stands to operate the door. They simply provide the &amp;quot;ai_no_*&amp;quot; spawnargs that define AI behavior on each side of the door.&lt;br /&gt;
&lt;br /&gt;
If you wish, you could provide a controller on only one side of the door instead of both sides. Note that, since the door is not frobable, the player won&#039;t be able to operate the door from the non-controller side.&lt;br /&gt;
&lt;br /&gt;
====More about Using a Separate &amp;quot;Froblock&amp;quot; Lock Plate====&lt;br /&gt;
&#039;&#039;by Geep, 2021-22&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Froblock, just discussed as a controller method, actually predated the controller concept in TDM. Here we recap that earlier context, with an alternative treatment of highlighting, and thoughts on texturing and usage.&lt;br /&gt;
&lt;br /&gt;
Suppose you want to have a lock plate (typically mounted on a door frame or wall) that opens a nearby door, where the door and lock plate highlight separately. A traditional way is to adapt the &#039;&#039;froblock&#039;&#039; method described under the &amp;quot;Making your own&amp;quot; section of [[Containers, Chests, etc.]]&lt;br /&gt;
&lt;br /&gt;
Basically, your door is the &amp;quot;chest lid&amp;quot; (of class atdm:mover_door) and your lock is the &amp;quot;chest body&amp;quot; (of class atdm:froblock). Set the properties as described in the wiki. There is a stock texture (darkmod/door/keyhole_metal_001) you can use to decorate a surface of your lock plate, or a patch on it. This method is probably most apt for small hatches and grates designed for the player alone, and with no handles, or non-turning handles attached with &amp;quot;bind&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===AI and &#039;non-frobable&#039; Doors===&lt;br /&gt;
Be aware that the &#039;frobable&#039; spawnarg only applies to the player, not AI.  If you set a door to be non-frobable (i.e. &#039;frobable&#039; &#039;0&#039;), AI can still operate it by interacting directly with it, even if it has a controller.  For example they will do this if:&lt;br /&gt;
&lt;br /&gt;
* they are fleeing or chasing the player&lt;br /&gt;
* the door has a controller but the AI can&#039;t reach it (for example the controller is on the other side of the door)&lt;br /&gt;
&lt;br /&gt;
The best way to mitigate this is to use Door Handling Position entities (see above) with the &#039;ai_no_open&#039; spawnarg set on them. &lt;br /&gt;
&lt;br /&gt;
===AI locking doors behind them===&lt;br /&gt;
&lt;br /&gt;
If one AI is involved (no one else is in the queue), he&#039;ll lock it behind him if he had to unlock it in the first place.&lt;br /&gt;
&lt;br /&gt;
Prior to TDM 1.08, if more than one AI is using the door at the same time (there&#039;s a queue), the first AI unlocks the door, and the last AI through will only lock it if it&#039;s marked &amp;quot;should_always_be_locked&amp;quot; AND they have a &amp;quot;can_unlock&amp;quot; for that door or they have a key for that door. The last AI to use the door doesn&#039;t know that the first AI found it locked, because that info is kept per AI, and not per door. &lt;br /&gt;
&lt;br /&gt;
Starting in TDM 1.08, if the first AI in a door queue found the door locked, that information is remembered by the door and the last AI through uses it to relock the door, as long as they have a &amp;quot;can_unlock&amp;quot; for that door or they have a key for that door.&lt;br /&gt;
&lt;br /&gt;
In the rare case where a door is set up to use door-handling position entities (necessary for AI to use sliding doors), either or both of those entities can have the &amp;quot;ai_no_lock&amp;quot; spawnarg, which means AI aren&#039;t allowed to lock the door from that side.&lt;br /&gt;
&lt;br /&gt;
==Initially Blocking a Door - Partially or Fully==&lt;br /&gt;
&#039;&#039;by Geep 2021&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Suppose you have a door that you want to start out either as unopenable, or able to open just a crack, then later, after something happens, be fully openable and operational. One method known to work:&lt;br /&gt;
&lt;br /&gt;
* Create a moveable object that the opening door runs into and tries to push.&lt;br /&gt;
* Arrange that the far side of the moveable object is jammed against some immovable worldspawn.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s two specific examples that use a wooden plank moveable:&lt;br /&gt;
&lt;br /&gt;
* In &amp;quot;Perilous Refuge&amp;quot;, a plank blocks the door leading out of the player&#039;s starting location, until the player carries it away. &lt;br /&gt;
* At the end of &amp;quot;Away0&amp;quot; (WIP 2021), the player tries to open a door. But if preconditions aren&#039;t met, the occupant seems to let the door open only a crack and complains. Blockage is done by an unseen plank resting on the floor hitting a knob of worldspawn. Preconditions met causes a &amp;quot;$plank.remove()&amp;quot; script call.&lt;br /&gt;
&lt;br /&gt;
Other methods that you might think would work but don’t:&lt;br /&gt;
&lt;br /&gt;
* Block with a func_static object, or an unjammed moveable with &amp;quot;notpushable 1&amp;quot; set. In both cases, the door travels through the object.&lt;br /&gt;
* In advance, &amp;quot;grab&amp;quot; an unjammed moveable to make it appear &amp;quot;solid&amp;quot; to the physics engine. (This was tested by having the player manipulate it; if it had worked, a “grabber” script call might suffice.)&lt;br /&gt;
* Dynamically change the door’s &amp;quot;rotate&amp;quot; limit from script using &amp;quot;setSpawnArg&amp;quot;; this function would only work before you spawn the door, not afterwards.&lt;br /&gt;
&lt;br /&gt;
(Others possibilities not yet tested:&lt;br /&gt;
&lt;br /&gt;
* Change &amp;quot;rotate&amp;quot; using the &amp;quot;setKey&amp;quot; script function; for some spawnargs this works even after spawn.&lt;br /&gt;
* Create a moveable and bind it to the world entity.&lt;br /&gt;
* If you are mainly interested in initially blocking an AI from using a door: it&#039;s possible that the AI re-reads the spawnargs for what doors it&#039;s allowed to open. Try adding a frob Response to the key (Entity -&amp;gt; Stim/Response... -&amp;gt; Response) with an effect that sets the “can_unlock&amp;quot; spawnarg on that AI to &amp;quot;-&amp;quot;.)&lt;br /&gt;
&lt;br /&gt;
==Controlling a Door by Scripting==&lt;br /&gt;
&#039;&#039;by Geep 2021&#039;&#039;&lt;br /&gt;
===If Unlocked===&lt;br /&gt;
&lt;br /&gt;
Simply use, for example with a door named &#039;&#039;door1&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 $door1.Open();&lt;br /&gt;
 ...&lt;br /&gt;
 $door1.Close();&lt;br /&gt;
&lt;br /&gt;
Alternatively, toggle it open or closed with:&lt;br /&gt;
&lt;br /&gt;
 $door1.frob();&lt;br /&gt;
&lt;br /&gt;
If the door has &amp;quot;interruptable 1&amp;quot; (which is the default with atdm:mover_door), you can also frob() it twice to leave it ajar. Interpose and adjust a sys.wait(...) to tune it.&lt;br /&gt;
===If Locked===&lt;br /&gt;
&lt;br /&gt;
You need to unlock it first. Changing the door&#039;s &amp;quot;locked&amp;quot; spawnarg value won&#039;t work. Instead you will use:&lt;br /&gt;
&lt;br /&gt;
 $door1.Unlock();&lt;br /&gt;
&lt;br /&gt;
But there are complications. By default, the door has spawnarg &amp;quot;open_on_unlock 1&amp;quot;. So, assuming you didn&#039;t change that, you&#039;d think unlocking the door would open it. But this spawnarg will be ignored if the gamer has global menu option &amp;quot;Open Doors on Unlock&amp;quot; set to Off. Assuming you want to reliably have the door open, do this:&lt;br /&gt;
&lt;br /&gt;
 $door1.Unlock(); // MAYBE will open door too.&lt;br /&gt;
 sys.wait(3); // If so, wait for door to fully open. Value may need adjusting based on door&#039;s speed&lt;br /&gt;
 $door1.Open(); // Otherwise, open it now.&lt;br /&gt;
&lt;br /&gt;
The wait is added, because otherwise, the opening begun by Unlock may be stopped by Open with the door only partially open. (Probably an alternative to using sys.wait here is to zero the door&#039;s &amp;quot;interruptable&amp;quot; spawnarg.) &lt;br /&gt;
&lt;br /&gt;
==Doors as Triggers==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;by Ishtvan &amp;amp; greebo&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Doors (or any binary frob mover, buttons, levers, etc) now have the option to [[Triggers|trigger]] their target on closing or opening. (For definition purposes, a button is defined as &amp;quot;closed&amp;quot; in the state when it starts out and &amp;quot;open&amp;quot; in the state you press it down to. I know that&#039;s a little non-intuitive, but it came from deriving from doors).&lt;br /&gt;
&lt;br /&gt;
New spawnargs on frob movers:&lt;br /&gt;
;&amp;quot;trigger_on_open&amp;quot; :If set to 1, this binary mover will trigger its targets when it starts out completely closed and is opened.&lt;br /&gt;
;&amp;quot;trigger_when_opened&amp;quot;:If set to 1, this binary mover will trigger its targets when it is completely opened. Code defaults to 0.&lt;br /&gt;
;&amp;quot;trigger_on_close&amp;quot;:If set to 1, this binary mover will trigger its targets when it completely closes after being open.&lt;br /&gt;
&lt;br /&gt;
== Suspicious Doors ==&lt;br /&gt;
&lt;br /&gt;
If you give a door the spawnarg &#039;&#039;&#039;&amp;quot;shouldBeClosed&amp;quot; &amp;quot;1&amp;quot;&#039;&#039;&#039;, then AI will treat it as suspicious if they find the door open.&lt;br /&gt;
&lt;br /&gt;
Doors with that spawnarg should work like this:&lt;br /&gt;
&lt;br /&gt;
- an AI opening the door knows he&#039;s not to become suspicious if he opened the door&lt;br /&gt;
&lt;br /&gt;
- nearby AI alerted by the open door will also not react if they can see the door, and can see the AI that opened it&lt;br /&gt;
&lt;br /&gt;
- AI who come upon the open door later probably won&#039;t be able to see the AI that opened it, so they&#039;ll treat it as suspicious&lt;br /&gt;
&lt;br /&gt;
- if the AI who opened the door comes upon the door later, and it&#039;s still open, and no one&#039;s touched it since he opened it, he&#039;ll see his name on the door and won&#039;t become suspicious. &amp;quot;Oh, crap. I forgot to close it earlier.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
- If an AI comes upon an open door that should be closed, he should close it whether he becomes suspicious or not.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Post TDM 2.00:&#039;&#039;&#039;&lt;br /&gt;
-  AI turn to look at a door they see opening.  The player can crack open a suspicious door to peek out w/o grabbing the attention of a nearby AI. After 5s, the AI will notice the cracked open door. Non-suspicious doors can be cracked open indefinitely w/o nearby AI noticing.&lt;br /&gt;
&lt;br /&gt;
==Slanted or Tilted Doors==&lt;br /&gt;
Slanted or tilted doors can be made as follows:&lt;br /&gt;
&lt;br /&gt;
1) Place your door, preferrably one of the prefab doors, which have a model door and model handle and all the rotation spawnargs pre-set.&lt;br /&gt;
&lt;br /&gt;
2) rotate and place the door+handle model into place you want it to be. Now, if you use the door in the game, the door will rotate around the world z-axis, and not the door model z-axis (which is rotated).&lt;br /&gt;
&lt;br /&gt;
3) to get the door to rotate around the door model z-axis, you must place a model (any model will do, and it can be placed anywhere in the map). Rotate the new model into the same orientation your door model was rotated, i.e. if you door is rotated 45 degrees around the x-axis, do the same rotation on the new model.&lt;br /&gt;
&lt;br /&gt;
4) bind the doors on the new model. This makes the doors start rotating along the new model origin (which is rotated the same way as the doors).&lt;br /&gt;
&lt;br /&gt;
5) working slanted door.&lt;br /&gt;
&lt;br /&gt;
Do note, that all the rotated objects need to be models (suspicion, not tested). You can export DR built stuff into a model using the DR ase exporter script. For custom doors, remember that the exporter places the model origin at the map origin if you do not choose the &amp;quot;place origin in the middle of the object&amp;quot; option.&lt;br /&gt;
&lt;br /&gt;
Also note that the AI probably cannot use slanted doors and might get stuck (suspicion, not tested).&lt;br /&gt;
&lt;br /&gt;
There is a link to a test map here:&lt;br /&gt;
http://forums.thedarkmod.com/topic/9082-newbie-darkradiant-questions/?p=395486&lt;br /&gt;
&lt;br /&gt;
==Skins: A Wide Variety of Door Textures==&lt;br /&gt;
&lt;br /&gt;
This is to remind you that as with many Dark Mod models, there is a wide range of extras skins (textures) available for door models. There are now several basic door entities of different sizes so choose your size first. Then enter the spawnarg: skin with any temporary value. Now select it and click the skin button at the bottom of Dark Radiant&#039;s Entity Inspector and you will find a large of range of skin textures from which to select to give you a choice of appearances for your door.&lt;br /&gt;
&lt;br /&gt;
==Extra Notes==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;func_darkmod_door&#039;&#039; is no longer used (just in case you come across it in the Dark Mod forums or wiki.) &#039;&#039;&#039;&amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt;&#039;&#039;&#039; is the entity to use.&lt;br /&gt;
&lt;br /&gt;
{{tutorial-editing}}&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=File:Key_remove3.png&amp;diff=34103</id>
		<title>File:Key remove3.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=File:Key_remove3.png&amp;diff=34103"/>
		<updated>2025-11-06T20:00:40Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;diagram showing key removal entities&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=Doors&amp;diff=34102</id>
		<title>Doors</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=Doors&amp;diff=34102"/>
		<updated>2025-11-06T19:47:06Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: /* Automatically Removing Keys from Player Inventory After Use */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{todo}}&lt;br /&gt;
&#039;&#039;Written by Fidcal&#039;&#039; &#039;&#039;edit Baddcog&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Quick Summary==&lt;br /&gt;
&lt;br /&gt;
Quick way to get an unlocked door in your map:&lt;br /&gt;
&lt;br /&gt;
* Insert one of the prefab doors complete with handles and select its skin property and click the button to change its skin appearance to whatever you want. Set any other properties you need.&lt;br /&gt;
&lt;br /&gt;
Alternatively,&lt;br /&gt;
&lt;br /&gt;
* Create a door from the entity list&lt;br /&gt;
* Use the &amp;quot;skin&amp;quot; spawnarg on the door to change its appearance. &lt;br /&gt;
* Create a handle from the entity list&lt;br /&gt;
* Add the &#039;&#039;door_handle&#039;&#039; property to the door and give it the name of the handle&lt;br /&gt;
* To the door handle add the value frob_peer and use the name of the door.&lt;br /&gt;
* To open clockwise, change the &#039;&#039;rotate&#039;&#039; property from &amp;lt;code&amp;gt;0 90 0&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;0 -90 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
This tutorial explains how to put doors into your map using Dark Radiant, as well as adjust them and their properties.&lt;br /&gt;
&lt;br /&gt;
The rest of this tutorial assumes that you have a basic understanding of using DarkRadiant. If you haven&#039;t done so, please go read the [[Dark Radiant Must Know Basic Intro]] article first.&lt;br /&gt;
&lt;br /&gt;
Additionally:&lt;br /&gt;
&lt;br /&gt;
* Up, down, right, and left in Dark Radiant&#039;s &#039;&#039;top&#039;&#039; orthoview are regarded here as the standard map directions of North, South, East, and West where useful for clarity.&lt;br /&gt;
* Where the term &#039;&#039;brush&#039;&#039; is used with a door it mostly also applies to a door made up of a group of brushes and/or patches.&lt;br /&gt;
* Where the term &#039;&#039;door&#039;&#039; is used it often will also apply to any object you wish to rotate when frobbed, for instance an openable window, box lid, or even more exotic objects that the imaginative mapper might conceive like a signal, engine part, toy, or whatever. So long as it needs to turn or slide just a fixed amount when frobbed then return when frobbed again then the following applies.&lt;br /&gt;
&lt;br /&gt;
==Door types==&lt;br /&gt;
&lt;br /&gt;
All tangible objects in Dark Mod are &#039;&#039;entities&#039;&#039;, having either a pre-made model shape or else brush/patch(es). So there are two ways to create a door in Dark Radiant: as a model door or a textured brush door (or a hybrid of the two).&lt;br /&gt;
&lt;br /&gt;
Models are ready made door objects but cannot within Dark Radiant (at the time of writing) be resized, rescaled, cropped or clipped whereas brushes are very flexible in that respect and can be worked into custom shapes for your map, including secret doors that blend into walls and other surfaces.&lt;br /&gt;
&lt;br /&gt;
Most of the current door models are found in two places along with the door handles.&lt;br /&gt;
*Model Viewer: doors created from here will be static in the world and have no props other than material type.&lt;br /&gt;
You can add any props to them to make them working doors. If nothing else it is a good place to view the different size and skin options for the doors.&lt;br /&gt;
*Entity List: most of the door models can be found here. These doors have properties already assigned so they are ready to be used. Only one base door of each type is listed, create the size/hinge count door you want (2 hinge doors have a &#039;no hinge&#039; skin). You can choose a skin for the door once it has been created in the editor with the &amp;quot;skin&amp;quot; spawnarg (use the model name of the door you want, taken from the model list, as its value). This is the easiest way to create a door. The same goes for door handles.&lt;br /&gt;
&lt;br /&gt;
Remember also that door functions may be applied to objects other than doors, such as openable windows, drawbridges, gates, etc. In fact, anything that needs a partial rotation or slide when frobbed then return when frobbed again, such as a signal device. Lockboxes and chests use similar properties.&lt;br /&gt;
&lt;br /&gt;
You can create one door/handle set and copy/paste it, but you need to take great care that all the name props are changed to match in each clone. Otherwise you get handles that fly off when a distant door moves, and handles that don&#039;t move.&lt;br /&gt;
&lt;br /&gt;
==Creating a Door==&lt;br /&gt;
&lt;br /&gt;
Put simply, to make a door you will be creating an &#039;entity with model&#039; or &#039;entity with brush&#039; or some variation thereof.&lt;br /&gt;
&lt;br /&gt;
===Creating a Model Door===&lt;br /&gt;
&lt;br /&gt;
There are several approaches to making a model door; the simplest is to create a door from the entity list; or create a door from the model viewer (good for static unusable prop doors).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Entity List&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
*Deselect everything in editor by hitting the Esc button&lt;br /&gt;
*Right-click an ortho view and select Create Entity&lt;br /&gt;
*Navigate to darkmod/movers/&#039;&#039;atdm:door_...&#039;&#039;, choose the door you want&lt;br /&gt;
*Click Add&lt;br /&gt;
*To change its appearance, add a &amp;quot;skin&amp;quot; spawnarg to the door, with the value being the model name of the door you want.&lt;br /&gt;
&lt;br /&gt;
You now have a workable door in your level.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Model Viewer&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Right click in the orthoview, select &#039;&#039;Create Model&#039;&#039; then &amp;lt;code&amp;gt;darkmod&amp;lt;/code&amp;gt; and select a door.&lt;br /&gt;
* Note that you can left drag the image in the &#039;&#039;Choose Model&#039;&#039; dialog to rotate it around.&lt;br /&gt;
* Click [[Image:Button ok.png]] and you have a static door.&lt;br /&gt;
* If you want to make it work (openable, frobbable) then:&lt;br /&gt;
** Select the entity inspector,&lt;br /&gt;
** Select the top classname line so it highlights&lt;br /&gt;
** Select the func_static line in the input box &#039;&#039;below&#039;&#039; the properties window.&lt;br /&gt;
** Edit &amp;lt;code&amp;gt;func_static&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt;&lt;br /&gt;
** Click {{check}} or press {{key-enter}}&lt;br /&gt;
&lt;br /&gt;
Alternatively you can do it the old way:&lt;br /&gt;
&lt;br /&gt;
* Create any temporary brush&lt;br /&gt;
* Right click in orthoview and select &amp;lt;code&amp;gt;Create Entity&amp;lt;/code&amp;gt; then &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Left lick the model name line in the entity inspector.&lt;br /&gt;
* Below it on the &#039;&#039;Entity Inspector&#039;&#039; panel you should now see a button &#039;Choose Model&#039;&lt;br /&gt;
* Left click it, select a door model from the darkmod group.&lt;br /&gt;
* Note that you can left drag the image in the &#039;&#039;Choose Model&#039;&#039; dialog to rotate it around.&lt;br /&gt;
* The temporary brush was deleted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In all three instances, you now have a working door with default properties. &lt;br /&gt;
&lt;br /&gt;
Name your door by adding the prop (or modifing it) to name &#039;&#039;My_Door_1&#039;&#039;. You can use any name that you feel is appropriate but all doors with handles attached &#039;&#039;must&#039;&#039; have their own specific name. Use the name My_Door_1 for your first attempt as it will be referenced when you get around to attaching handles (see below).&lt;br /&gt;
&lt;br /&gt;
To add a handle and other adjustments, see [[#Customising and Adjusting Door Properties]] below.&lt;br /&gt;
&lt;br /&gt;
===Creating a Textured Brush Door===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tip:&#039;&#039;&#039; If unsure of size then you might insert a temporary human AI first to get a sense of height.&lt;br /&gt;
&lt;br /&gt;
==== The simplest brush door: ====&lt;br /&gt;
&lt;br /&gt;
* Drag out a new brush to the size required, eg, a seven foot high door is 84&amp;quot; x 1.1 = about 90 units in Dark Radiant.&lt;br /&gt;
* Give it a door texture from the texture browser (or wall texture for a secret door)&lt;br /&gt;
* Right click in orthoview and select &#039;&#039;Create Entity&#039;&#039; then &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You now have a working door but it will rotate around its center. To move the rotation point to where you want the door hinges to be:&lt;br /&gt;
* Select the door and press &#039;v&#039; or the &#039;&#039;Select Vertices&#039;&#039; button to enter vertex editing mode. The door&#039;s origin will show up as a small green square in the middle of the brush.&lt;br /&gt;
* In top-down orthoview, move the origin from the center to the corner of the brush. This is easiest in drag mode (&#039;q&#039; or the &#039;&#039;Resize&#039;&#039; button), although you can use translate mode (&#039;w&#039; or the &#039;&#039;Translate&#039;&#039; button) by manually selecting the vertex first.&lt;br /&gt;
&lt;br /&gt;
==== Multi-brush doors: ====&lt;br /&gt;
&lt;br /&gt;
More complex multi-brush doors can be created using the [[Clipper]] tool, CSG, etc. - this is not covered in this tutorial. Then assign &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt; for that whole brush structure. Also you can collect various brushes positioned together in relation to one another as needed, select them all, then assign &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt; for the group. All the brushes will be children of the &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt; entity and will rotate and be frobbable, etc. as one unit, as one door. To add further brushes or even model shapes later see the section on [[#Adding handles and other items to doors]].&lt;br /&gt;
&lt;br /&gt;
Name your door by adding the prop (or modifing it) to name My_Door_1. You can use any name that you feel is appropriate but all doors with handles attached must have their own specific name. Use the name My_Door_1 for your first attempt as it will be referenced when you get around to attaching handles (see below). (repeated from above in case you didn&#039;t choose to create a model door)&lt;br /&gt;
&lt;br /&gt;
=== Double Doors ===&lt;br /&gt;
Double doors are automatically recognised by the code when the doors are spawned. The prerequisite is that both doors are sharing/touching the same visportal. The spawnarg &#039;&#039;auto_setup_double_door&#039;&#039; (which defaults to &amp;quot;1&amp;quot;) will take care of setting up the open/lock peer relationship between the two doors. The doors will open/close and lock/unlock along with each other as a result.&lt;br /&gt;
&lt;br /&gt;
What happens behind the scenes: the doors are adding each other to their internal open_peer and lock_peer list, which causes the double doors to perform the same action when frobbed or used.&lt;br /&gt;
&lt;br /&gt;
Note that &#039;&#039;auto_setup_double_door&#039;&#039; will not set the frob_peer relationship, i.e. each door will frob-highlight on its own without highlighting the other door. You&#039;ll need to add that spawnarg manually if you want to highlight the entire double door as one.&lt;br /&gt;
&lt;br /&gt;
==Customising and Adjusting Door Properties==&lt;br /&gt;
&lt;br /&gt;
Handles, lockplates, etc. can be added to doors and door properties can be adjusted for rotation, sliding, locking, and more.&lt;br /&gt;
&lt;br /&gt;
Some of the door models have hinge plates and lockboxes that are reskinnable with a good variety of skins.&lt;br /&gt;
&lt;br /&gt;
===Door handles and other door attachments===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Summary: just add the property &#039;&#039;bind&#039;&#039; with the door&#039;s name to the attachment and position it where you want it on the door. If it&#039;s a &#039;&#039;atdm:mover_door_handle&#039;&#039; then it automatically will work as a handle but you can bind virtually anything.&#039;&#039;&#039;&lt;br /&gt;
You can add handles and other items to doors such that they move correctly with the door whether rotating, sliding, or both and even if the door is not vertical such as a skylight or trapdoor.&lt;br /&gt;
Handle models come in two types, &#039;&#039;single handles&#039;&#039; and &#039;&#039;double handles&#039;&#039;. A single handle is one sided, this means the handle will be inside the door or outside the door, but not both. A double handle has a lever on the inside of the door and a handle on the outside of the door. Each has benefits.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;Single door handles&#039;&#039;&#039;&#039;&#039;:&lt;br /&gt;
Single door handles can be used on a static door, a door that&#039;s just for show that no AI&#039;s or the player can use. In this case you should just create a door handle from the model viewer, it will be static and have no properties such as scripts. It is for looks only.  Note that TDM is trying to establish the expectation that decorative doors that cannot be opened do not have handles (though not all maps follow this).&lt;br /&gt;
&lt;br /&gt;
I will call this &#039;&#039;multiple handles&#039;&#039;, see more below.&lt;br /&gt;
&lt;br /&gt;
These can also be useful on brush doors created in the editor that may be very thin or very wide.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;Double door handles&#039;&#039;&#039;&#039;&#039;:&lt;br /&gt;
These are models have have a handle inside and outside. The bonus is that they only use one entity. Maps are limited to about 4,000 entities but when you count lights, AI, sound speakers, ect... you can run out of entities quickly on a large map. If you plan on building a large map this is the way to go, even in a small map they have benefits, namely that you only have to attach one handle per door.&lt;br /&gt;
&lt;br /&gt;
Whether you decide to use a single handle or a double handle you must first follow the instructions below and attach one handle first. If you choose a double handle, follow the instructions below and you are done. If you choose a single handle type follow the instructions then also follow the &#039;&#039;multiple handle&#039;&#039; instructions for the second handle.&lt;br /&gt;
&lt;br /&gt;
Both single and double handle types can be found in two places. The model viewer which will create a static model good for show, you can manually add props to make them work OR you can look in the entity browser.&lt;br /&gt;
Using a handle from the entity browser saves you a little bit of time as some props are already added, you just need to add the frob_peer names for the doors/handles and the door_handle name to the door.&lt;br /&gt;
&lt;br /&gt;
=== Adding a working model door handle===&lt;br /&gt;
&lt;br /&gt;
Quick summary:&lt;br /&gt;
* Create a model or brush handle and make it an &#039;&#039;atdm:mover_door_handle&#039;&#039; entity.&lt;br /&gt;
* Position it on your door.  Use the opposite side from the door&#039;s multicolor X-Y-Z indicator (highlight the door to see it) if it&#039;s not obvious which side it goes on.  &lt;br /&gt;
* &#039;&#039;&#039;Bind&#039;&#039;&#039; the handle to the door (bind &amp;lt;doorname&amp;gt;)&lt;br /&gt;
* It should now be a working handle though may need adjustments of rotation etc. see later. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Important: read preceding section on door handle types and performance issues first.&lt;br /&gt;
&lt;br /&gt;
This works with both a model door and a brush door:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rotation&#039;&#039;&#039;:&lt;br /&gt;
* By default the door handle entity rotates &#039;&#039;anti-clockwise&#039;&#039; (looked at from the front) then springs back. A &#039;&#039;double handle&#039;&#039; model is OK but two singles (see &#039;&#039;Multiple door handles&#039;&#039; below) need more care as only one is the functioning entity and the other is just attached to it. So anti-clockwise is fine for a door with its hinge on the left and the handle on the right - the handle will rotate down then spring back. If you put the functioning door handle on the other side you will have to change the default &#039;&#039;rotate&#039;&#039; property from -45 0 0 to 45 0 0. &#039;&#039;&#039;&#039;&#039;Therefore it is easier to generally put this handle on the side of the door where the hinge is on the left and the non-functioning attachment handle on the other side.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*If your door only needs one handle, eg, a cupboard door, and from outside its hinge is on the right then you will need to change the &#039;&#039;rotate&#039;&#039; property of the handle as described above.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;The functioning handle entity:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
* Create an entity door handle (movers folder) or create a brush or model handle and assign it the entity &#039;&#039;atdm:mover_door_handle&#039;&#039;.&lt;br /&gt;
* Position it where you wish on your door.&lt;br /&gt;
* &#039;&#039;&#039;Bind&#039;&#039;&#039; the handle to the door, by adding the &amp;quot;bind&amp;quot; spawnarg to the handle.&lt;br /&gt;
&lt;br /&gt;
You now have a working door handle with default properties.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Multiple door handles&#039;&#039;&#039;:&lt;br /&gt;
Now that you&#039;ve got a handle attached to one side of the door it is time to add one to the other side (unless you used a double handle).&lt;br /&gt;
* Create the new handle. The single handles come in left and right persuasions. A door needs a left facing handle on one side and a right facing handle on the other, so if you have already added the left handle create a right handle and line it up on the other side of the door.&lt;br /&gt;
* Name this handle. I prefer to keep a naming convention for each door and it&#039;s respective handles, it makes things alot easier. The door is named &#039;&#039;&#039;My_Door_1&#039;&#039;&#039;, the first handle is named &#039;&#039;&#039;My_Handle_1&#039;&#039;&#039; so name the second handle &#039;&#039;&#039;My_Handle_1_1&#039;&#039;&#039;. This will make it stay with the first handle in the entity list. This is important to keep organized. If you name it My_Handle_2 then when you get to another door named My_Door_2 you&#039;ll be confused.&lt;br /&gt;
* Place and &#039;&#039;&#039;bind&#039;&#039;&#039; that handle to your door.&lt;br /&gt;
&lt;br /&gt;
You now have two single door handles on either side of the door that rotate together as if they were physically attached.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add a brush to a brush door&#039;&#039;&#039;:&lt;br /&gt;
* Select the new brush &#039;&#039;and&#039;&#039; the brush door all together; &#039;&#039;the entity &#039;&#039;&#039;must&#039;&#039;&#039; be selected &#039;&#039;&#039;last&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
* Use {{menu|Edit|Reparent primitives}}. This ensures the parent entity adopts the new item(s).&lt;br /&gt;
* If you have trouble selecting them in the orthoview because other brushes, etc. get selected then try in the camera view or as a last resort move them temporarily to an open area (but keep them in the same positions relative to each other.) Use {{key-shift}}+{{LMB}} on new item(s) then {{key-shift}}+{{LMB}} on main entity. Once they are all selected, use the {{menu|Edit|Reparent primitives}}.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add &#039;&#039;model&#039;&#039; static items&#039;&#039;&#039;: knockers, hinges, static handles etc. to a &#039;&#039;Model Door&#039;&#039;:&lt;br /&gt;
* Select item&lt;br /&gt;
* Right click in orthoview and select &#039;&#039;Create Entity&#039;&#039; then &amp;lt;code&amp;gt;entity func_static&amp;lt;/code&amp;gt;&lt;br /&gt;
* Position it where you wish on your door.&lt;br /&gt;
* To synchronize this with your particular door you need to add the property &#039;&#039;bind&#039;&#039; and the individual door name to the brush entity. To do this...&lt;br /&gt;
** Select the model door.&lt;br /&gt;
** In the entity inspector, select the &#039;&#039;name&#039;&#039; line&lt;br /&gt;
** Select the bottom line in the input box &#039;&#039;below&#039;&#039; the properties window.&lt;br /&gt;
** Copy the name&lt;br /&gt;
** Deselect the door with {{key-esc}}&lt;br /&gt;
** Select the brush entity&lt;br /&gt;
** Add a property &amp;quot;bind&amp;quot; to it.&lt;br /&gt;
** Change the value of the property by pasting in the door name&lt;br /&gt;
** Click {{check}} or press {{key-enter}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add &#039;&#039;brush&#039;&#039; static items&#039;&#039;&#039;: knockers, hinges, static handles to a Model Door:&lt;br /&gt;
* This method is not ideal but it seems to work OK.&lt;br /&gt;
* Select the brush.&lt;br /&gt;
* Right click in orthoview and select Create Entity then &#039;&#039;atdm:mover_door_handle&#039;&#039;&lt;br /&gt;
* Position it where you wish on your door.&lt;br /&gt;
&lt;br /&gt;
To synchronize this with your particular door you need to add the property &#039;&#039;door_handle&#039;&#039; on the door, and give as the value the name of the brush you just created.&lt;br /&gt;
&lt;br /&gt;
This brush turns like a handle. To stop it:&lt;br /&gt;
&lt;br /&gt;
* Adding &#039;&#039;rotate 0 0 0&#039;&#039; or disabling the handle script won&#039;t help.&lt;br /&gt;
* Add a real working handle (as in the section above &#039;&#039;To add a working model door handle...&#039;&#039; and it must be added LAST.)&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want too see a real working handle added maybe try another tiny brush with the handle function and hide it inside the door?&lt;br /&gt;
&lt;br /&gt;
===Locking Doors===&lt;br /&gt;
&lt;br /&gt;
To lock a door check the &#039;&#039;show inherited properties&#039;&#039; in the entity inspector for a &#039;&#039;atdm:mover_door&#039;&#039; entity and you should see the &#039;&#039;locked&#039;&#039; property. Select it and in the input box below the properties you can change its value:&lt;br /&gt;
&lt;br /&gt;
* 0 = unlocked (default)&lt;br /&gt;
* 1 = locked&lt;br /&gt;
&lt;br /&gt;
If locked it will require an entity that is associated with it to be able to act as a key to unlock it.&lt;br /&gt;
&lt;br /&gt;
Currently door handles on locked doors will rotate when frobbed, they will bounce back though and the door will stay locked until unlocked.&lt;br /&gt;
&lt;br /&gt;
===Keys===&lt;br /&gt;
&lt;br /&gt;
Assigning specific keys to specific doors is simple.&lt;br /&gt;
&lt;br /&gt;
* It is recommended that you create an existing key entity. These keys have all required props, they just need to be named.&lt;br /&gt;
&lt;br /&gt;
Alternatively you can create a key from the Model Viewer and want it to be useable&lt;br /&gt;
* Make sure it has the properties:&lt;br /&gt;
 useable 1 [so it can be used by the door]&lt;br /&gt;
 frobable 1&lt;br /&gt;
 inv_name &amp;lt;unique name&amp;gt;&lt;br /&gt;
 inv_category Keys&lt;br /&gt;
 inv_target player1&lt;br /&gt;
 inv_icon guis/assets/hud/inventory_icons/&amp;lt;icon name&amp;gt;&lt;br /&gt;
 inv_stackable 0 or 1 where 1 can be used on all copies of the same key so they show as one entry in the inventory with a total.&lt;br /&gt;
&lt;br /&gt;
Add to the door the property &amp;lt;code&amp;gt;used_by&amp;lt;/code&amp;gt; with the name of the key as the value. Multiple keys can open the same door by using several &amp;lt;tt&amp;gt;used_by&amp;lt;/tt&amp;gt; spawnargs:&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;used_by&amp;quot;  &amp;quot;doorkey_1&amp;quot;&lt;br /&gt;
 &amp;quot;used_by1&amp;quot; &amp;quot;doorkey_2&lt;br /&gt;
&lt;br /&gt;
==== Keys Carried by AI ====&lt;br /&gt;
&lt;br /&gt;
So you have a door and you have a guard AI and you want the guard to be able to open/close/lock the door, but you also want the player to be able to pickpocket the key. Keys can be attached to AI in two ways.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The Def_Attach Method&#039;&#039;. This method is the best one for doors that you expect the AI to operate. It uses spawnargs to spawn the key at game start.&lt;br /&gt;
&lt;br /&gt;
*&amp;quot;def_attach6&amp;quot; &amp;quot;atdm:prop_silverkey&amp;quot; // the entity to spawn - in this case a key.&lt;br /&gt;
*&amp;quot;pos_attach6&amp;quot; &amp;quot;belt_back_right&amp;quot; // where the key will spawn on the Ai.&lt;br /&gt;
*&amp;quot;name_attach6&amp;quot; &amp;quot;door_key&amp;quot; // this gives &#039;attach6&#039; arg the name &amp;quot;door_key&amp;quot; and is the name the arg &amp;quot;used_by&amp;quot; will need, eg: &amp;quot;used_by&amp;quot; &amp;quot;door_key&amp;quot;&lt;br /&gt;
*&amp;quot;set inv_name on door_key&amp;quot; &amp;quot;Door key&amp;quot; // The name the key get when the play adds it to their inventory.&lt;br /&gt;
*&amp;quot;set name on door_key&amp;quot; &amp;quot;door_key&amp;quot; // here it gets a name to be used in the map in general.&lt;br /&gt;
&lt;br /&gt;
For more info on this method, see [[Attaching Props to AI]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The Bind Method&#039;&#039;. This lacks the animation finesse of def_attach, but does let you see the key in DR. The method is particularly helpful in, say, adding a second key to an AI in the back middle of a belt. The AI cannot use a bound key to open a locked door; the workaround is to fake it with &amp;quot;can_unlock&amp;quot; as discussed further below. Or to use bound keys mainly for items the AI will not attempt to open, such as hatches, duct covers, or chests.&lt;br /&gt;
&lt;br /&gt;
* Load a key entity&lt;br /&gt;
* Position where you want it in relation to the AI, and bind it to them (i.e., &amp;quot;bind&amp;quot; &amp;quot;&amp;lt;AIname&amp;gt;&amp;quot;)&lt;br /&gt;
* Add the spawnarg &amp;quot;bindToJoint&amp;quot; &amp;quot;Hips&amp;quot; (or another location like LeftHips_Dummy; see AI for list)&lt;br /&gt;
* Adjust existing spawnargs accordingly (that is, be sure the name and door&#039;s/chest&#039;s &amp;quot;used_by&amp;quot; match, if you aren&#039;t using a prefab chest with key). This is for the benefit of the player after pickpocketing the key; as stated above, the AI itself can&#039;t use it for unlocking.&lt;br /&gt;
&lt;br /&gt;
For more info on this method, see [[Attaching_Items]] and [[BindToJoint]].&lt;br /&gt;
&lt;br /&gt;
====Keys Carried by Player====&lt;br /&gt;
&lt;br /&gt;
With a door&#039;s key selected in your inventory and the door highlighted, you can...&lt;br /&gt;
* unlock it (which will also auto-open if enabled) by either frobbing it or hitting the Use key (typically U or Enter).&lt;br /&gt;
* lock (or relock) it via the Use key. Why do this? To avoid pursuit, or to lure guards into a room, and then lock them in (if they don&#039;t have a key or specific can_unlock powers). &lt;br /&gt;
&lt;br /&gt;
====Master Key for Testing====&lt;br /&gt;
&lt;br /&gt;
By default, ALL locks can be opened by any key named &#039;&#039;key_master&#039;&#039;. Just create a key in your map, name it &#039;&#039;key_master&#039;&#039; and it becomes a master key for use while testing. Add inv_map_start 1 to it so it is in the player inventory at game start. Remember to delete it when your mission is finished.&lt;br /&gt;
&lt;br /&gt;
====Automatically Removing Keys from Player Inventory After Use====&lt;br /&gt;
&lt;br /&gt;
If a fan mission has a lot of keys it can clog up the player inventory. If the key is single-use, it can be useful to automatically remove it from the player inventory after use.  Below is a way to do it using a simple setup and a generic script function that can be used for multiple doors.&lt;br /&gt;
You&#039;ll need the following entities, preferably set up near each other in your map:&lt;br /&gt;
* The door entity itself&lt;br /&gt;
* A trigger_count entity&lt;br /&gt;
* An atdm:target_callscriptfunction entity&lt;br /&gt;
* some random entity for the target_callscriptfunction to target (explanation below)&lt;br /&gt;
&lt;br /&gt;
The below diagram shows the spawnargs and targeting required for the setup:&lt;br /&gt;
[[File:Key remove2.png|left|thumb]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
The script being called (&#039;openDoor&#039;) is defined in fms/&amp;lt;mapname&amp;gt;/maps/&amp;lt;mapname&amp;gt;.script and looks like this:&lt;br /&gt;
&lt;br /&gt;
 void openDoor(entity target, entity door, entity callscriptfunction)&lt;br /&gt;
 {&lt;br /&gt;
     string keyName = door.getKey(&amp;quot;used_by&amp;quot;);&lt;br /&gt;
     entity key = sys.getEntity(keyName);&lt;br /&gt;
     $player1.replaceInvItem(key, $null_entity);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Explanation as follows:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;For the door:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;trigger_on_open&#039;&#039;&#039; spawnarg: The door is configured to trigger its targets when it opens&lt;br /&gt;
* target &#039;&#039;&#039;trigger_count&#039;&#039;&#039; entity: this is the entity that is triggered when the door is opened&lt;br /&gt;
* &#039;&#039;&#039;used_by&#039;&#039;&#039; spawnarg: This names the key entity required for unlocking the door&lt;br /&gt;
* The other spawnargs are just the usual for setting the door as locked and unpickable&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;trigger_count entity:&#039;&#039;&#039;&lt;br /&gt;
* When triggered, this entity will in turn trigger the script that removes the key from the player inventory.&lt;br /&gt;
* &#039;&#039;&#039;count&#039;&#039;&#039; spawnarg: This is set to 1 because we only want the key removal script called once - the first time the player opens the door.&lt;br /&gt;
* this entity targets the atdm:target_callscriptfunction, which contains details of the script to execute&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;atdm:target_callscriptfunction entity:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;call&#039;&#039;&#039; spawnarg: This is the name of the script function to call&lt;br /&gt;
* &#039;&#039;&#039;foreach&#039;&#039;&#039; spawnarg: This version of the script event provides access to the &#039;activator&#039;, or the entity that triggered it (in this case, the door).  Using that information we can obtain the key name. See [[A to Z Scripting: Ways of calling a script#target_callscriptfunction|here]] for details.&lt;br /&gt;
* &#039;&#039;&#039;target any static entity&#039;&#039;&#039;: For this version of the script event to work, the target_callscriptfunction entity needs to target something.  This can be any static entity in the map (i.e. one that won&#039;t get removed or anything). I usually just target the nearest entity (e.g. a light or a lamp, or a model).  This provides no functionality in the context of this tutorial, it just satisfies the conditions of the script event.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The script:&#039;&#039;&#039;&lt;br /&gt;
* Pretty self-explanatory.  The script gets the name of the key entity via the &#039;&#039;&#039;used_by&#039;&#039;&#039; spawnarg on the door, retrieves the key entity, and then replaces it in the player inventory with a null entity, effectively removing it.&lt;br /&gt;
* Any door can use this script as its generic (although they will need their own trigger_count and target_callscriptfunction entities)&lt;br /&gt;
&lt;br /&gt;
===Lockpicks===&lt;br /&gt;
&#039;&#039;by Baddcog&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
There are two lock pick types.&lt;br /&gt;
*&#039;&#039;&#039;s&#039;&#039;&#039;=snake&lt;br /&gt;
*&#039;&#039;&#039;t&#039;&#039;&#039;=triangular&lt;br /&gt;
&lt;br /&gt;
A lock can be set with many pins. Each pin has a click sequence and each needs a designated lockpick type (see above). Keep in mind that the lockpicking in The Darkmod is much more involved than in T2 or T3. The player has to listen to sounds or watch a handle or lockbar to know when a lock is pin is picked.&lt;br /&gt;
&lt;br /&gt;
This means that authors can be very evil and really frustrate the player, in which case their missions will probably not be played. So be nice to the player and don&#039;t waste your time. Use simple locks for the most part and save complicated locks for important sections and to build tension. Don&#039;t make the player have 20 pins to pick all with different lockpicks. In most cases 1 or 2 pins will suffice and it isn&#039;t necessary to use both lockpicks on every lock.&lt;br /&gt;
Also try to include a lock lever on lockboxes or chests, door handles will rotate as the pins are being picked. This gives the player visual clues to help with the picking (and essential in noisy environments where you can&#039;t hear the clicks.)&lt;br /&gt;
IMO this system is a huge leap foward for lockpicking but also has the ability to completely frustrate the player as stated above. Keep this in mind when designing your lockpick systems.&lt;br /&gt;
&lt;br /&gt;
These props go on the door itself, or the lid of a chest, eg,&lt;br /&gt;
*&#039;&#039;&#039;lock_pins&#039;&#039;&#039; 1327&lt;br /&gt;
*&#039;&#039;&#039;lock_picktype&#039;&#039;&#039; stts&lt;br /&gt;
&lt;br /&gt;
The lock_pins property specifies how many pins each lockpicktype has.&lt;br /&gt;
The lockpick_type property specifies how many times the player has to switch picks and which pick they have to use. You can see there must always be an equal number of lock_pins and lock_picktypes specified&lt;br /&gt;
&lt;br /&gt;
So looking at the example above we have lockpick_type s(snake), t(triangular), t(triangular), and s(snake). The player will have to use these lockpicks in this order. Once the snake lockpick&#039;s pins are open the player can advance to the triangular pick and so forth.&lt;br /&gt;
5 is added to every click sequence so 5 is the minimum click pattern even if you set it to 0.&lt;br /&gt;
In the example above the lockpins specify in order which pick types have how many pins, so the s pick has 1 + 5 = 6 clicks, the t pick has 8 and so on.&lt;br /&gt;
The above is a difficult lock and to avoid annoying the player it is best only used rarely on a special lock like an important big vault door. Ordinary footlockers and common doors can be just 1 or 2 click sequences, eg, lock_pins 2 and lock_picktype t means the player uses one pick and listens for the end of one sequence of 7 clicks.&lt;br /&gt;
&lt;br /&gt;
lockpick_rotate - is placed on the door. It is the amount the visible rotating handle or pin rotates while picking. For a rotating handle or lockbar normally ignore this and leave the default. During lockpicking it oscillates and progresses to the normal full turn of the handle. Example 0 45 0.&lt;br /&gt;
&lt;br /&gt;
lockpick_translate - is placed on the door. It is the amount the visible handle or pin moves in a straight line while picking. Use this if you have eg, a lockbar that you want to move in a straight line and not rotate, eg sliding catch. Example 0 -5 0&lt;br /&gt;
&lt;br /&gt;
By default, doors are pickable. If you don&#039;t set up the above lockpick spawnargs then it can&#039;t be picked. So there is normally no need to enable lockpicking - just set up the above spawnargs. There is a &#039;&#039;pickable&#039;&#039; spawnarg set to 1 by default. If set to 0 then the door becomes unpickable. But hard to think of an application except in testing or perhaps a special custom situation where it is switched by script perhaps.&lt;br /&gt;
&lt;br /&gt;
===Open, Partially Open, or Closed Door at Game Start===&lt;br /&gt;
&lt;br /&gt;
By default, doors are closed at game start. If you want a door to be already open or partially open then do the following.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note well: Create all doors in their &#039;&#039;closed&#039;&#039; position. Adjust as follows and they will automatically be at the open position when game starts.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Already Open Rotating Door:&lt;br /&gt;
* Select the door.&lt;br /&gt;
* Select the entity inspector&lt;br /&gt;
* Check &#039;&#039;show inherited properties&#039;&#039;&lt;br /&gt;
* Select the &#039;&#039;open&#039;&#039; property&lt;br /&gt;
* Edit the value to 1 in the input box below and tick the check button&lt;br /&gt;
* The door will now be fully open at game start.&lt;br /&gt;
&lt;br /&gt;
* If you want it only partly open:&lt;br /&gt;
* Make sure its &#039;&#039;open&#039;&#039; property is set to 1 as above.&lt;br /&gt;
* Right click the entity inspector and select &#039;&#039;add property&#039;&#039; &lt;br /&gt;
* Click the + sign on the left of the top line where atdm:mover_door is listed to open the folder. (if atdm:mover_door is not listed then the entity was likely changed from eg, func_static. If so, save the map and reload to update the add property list)&lt;br /&gt;
*  scroll down, select &#039;&#039;start_rotate&#039;&#039; then click {{ok}}&lt;br /&gt;
* This adds it to the property list.&lt;br /&gt;
* Now select &#039;&#039;start_rotate&#039;&#039; in the property list.&lt;br /&gt;
* Edit the bottom line of the input box &#039;&#039;below&#039;&#039; the properties window to the angle you want in the same form as described in the &#039;&#039;Rotate Direction and Open Angle&#039;&#039; section. So for example, to have a door that has a fully open default &#039;&#039;rotate&#039;&#039; value of 0 90 0 to start only half open you would give it a &#039;&#039;start_rotate&#039;&#039; value of 0 45 0. &lt;br /&gt;
* In a similar way add the property &#039;&#039;first_frob_open&amp;quot;.&lt;br /&gt;
* Set it to 1 and a partly open door should then open fully on the first frob.&lt;br /&gt;
* Set it to 0 and a partly open door should close on the first frob.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Already Open Sliding Door:&lt;br /&gt;
* Select the door.&lt;br /&gt;
* Select the entity inspector&lt;br /&gt;
* Check &#039;&#039;show inherited properties&#039;&#039;&lt;br /&gt;
* Select the &#039;&#039;open&#039;&#039; property&lt;br /&gt;
* Edit the value to 1 in the input box below and click {{check}} or press {{key-enter}}&lt;br /&gt;
* The door will now be fully open at game start.&lt;br /&gt;
&lt;br /&gt;
* If you want it only partly open:&lt;br /&gt;
* Right click the entity inspector and select &#039;&#039;add property&#039;&#039; &lt;br /&gt;
* Make sure its &#039;&#039;open&#039;&#039; property is set to 1&lt;br /&gt;
* Click the + sign on the left of the top line where atdm:mover_door is listed to open the folder.&lt;br /&gt;
*  scroll down, select &#039;&#039;start_position&#039;&#039; then click OK. (if atdm:mover_door is not listed then the entity was likely changed from eg, func_static. If so, save the map and reload to update the add property list)&lt;br /&gt;
* This adds it to the property list.&lt;br /&gt;
* Now select &#039;&#039;start_position&#039;&#039; in the property list.&lt;br /&gt;
* Edit the bottom line of the input box &#039;&#039;below&#039;&#039; the properties window to the position you want in the same form as described in the &#039;&#039;Sliding (Translation) Amount and Direction&#039;&#039; section. So for example, to have a door that has a fully open default &#039;&#039;translate&#039;&#039; value of 0 50 0 to start only half open you would give it a &#039;&#039;start_position&#039;&#039; value of 0 25 0.&lt;br /&gt;
* In a similar way add the property &#039;&#039;first_frob_open&amp;quot;.&lt;br /&gt;
* Set it to 1 and a partly open door should then open fully on the first frob.&lt;br /&gt;
* Set it to 0 and a partly open door should close on the first frob.&lt;br /&gt;
&lt;br /&gt;
===Rotation Centre, Pivot, Hinge point===&lt;br /&gt;
&lt;br /&gt;
The centre of rotation of a door is at the origin point of its entity and the door rotates with reference to the orientation of that origin point, not the world map. See &#039;&#039;Rotate Direction...&#039;&#039; for more about that. This section only deals with the &#039;&#039;position&#039;&#039; of the rotation centre in the door.&lt;br /&gt;
&lt;br /&gt;
Model Door Centre of Rotation:&amp;lt;br&amp;gt;&lt;br /&gt;
The centre of rotation of a model door cannot be changed within Dark Radiant. Because a model door rotates around the centre &#039;spine&#039; of its back edge this will cause clipping (penetration into solid) as in this example (where the door is set to open to 89 degrees for clarity):&amp;lt;BR&amp;gt;[[Image:modelClipping.jpg]]&amp;lt;BR&amp;gt; So care is needed with placement. You will not normally position a door right next to a wall as in the example but against a shallow frame so clipping will barely be noticeable but either way it can be fixed. You can correct it by adding a translation (see &#039;&#039;Sliding (Translation) Directions&#039;&#039;) value of half the door width in the direction of the door handle. This will gently move the door out as it rotates to clear any solid on that side as in this diagram:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:DoorClip.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
Half a door width will typically be about 2. Any &#039;attachments&#039; such as door handles will still synchronize with the door movement whether the door is rotating, sliding, or both.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Brush Door Centre of Rotation:&amp;lt;br&amp;gt;&lt;br /&gt;
The centre of rotation of a brush door &#039;&#039;can&#039;&#039; be changed. The default origin point of a brush is at its centre. Therefore a default rotating brush door will rotate around its centre when you first create it. So, mappers will commonly need to move that rotation point to a corner or even to some other offset position for example, for an openable window using the door function.&lt;br /&gt;
&lt;br /&gt;
Put simply, to move the rotation point of a brush door you need to move the entity origin relative to the brush(es.)&lt;br /&gt;
&lt;br /&gt;
Moving the entity origin (centre of rotation) relative to a brush door:&lt;br /&gt;
&lt;br /&gt;
* Select the brush door&lt;br /&gt;
* Select &#039;&#039;Vertices mode&#039;&#039; (default shortcut key is {{key|name=V}} or button on top toolbar &#039;Select Vertices&#039;)&lt;br /&gt;
* Drag the door&#039;s entity origin to the point where you want the door to rotate. This should be on the corner on the leading edge side (the side to where the door is opening.) to avoid clipping as in this diagram....&lt;br /&gt;
[[Image:getCorner.jpg]]&lt;br /&gt;
* You should now find that door rotates around that point.&lt;br /&gt;
&lt;br /&gt;
===Rotate Direction and Open Angle===&lt;br /&gt;
&lt;br /&gt;
By default, rotating doors open anti-clockwise (viewed from above) by 90 degrees from the start orientation. If you want to change this edit the &#039;&#039;rotate&#039;&#039; property in the entity inspector. Don&#039;t confuse this &#039;&#039;rotate&#039;&#039; property with the &#039;&#039;rotation&#039;&#039; property. In the entity inspector remember that to see the inherited rotate property you must check the box &#039;Show inherited properties&#039;.&lt;br /&gt;
&lt;br /&gt;
The three values shown in the rotate property are degrees from the closed position around Y Z X (absolute map axes Front, Top, Side views in DR&#039;s ortho view.)&lt;br /&gt;
&lt;br /&gt;
* Positive Y = Open clockwise (Dark Radiant grid front view, looking north)&lt;br /&gt;
* Negative Y = Open anti-clockwise (Dark Radiant grid front view, looking north)&lt;br /&gt;
&lt;br /&gt;
* Positive Z = Open anti-clockwise (Dark Radiant grid top view, looking down)&lt;br /&gt;
* Negative Z = Open clockwise (Dark Radiant grid top view, looking down)&lt;br /&gt;
&lt;br /&gt;
* Positive X = Open anti-clockwise (Dark Radiant grid side view, looking west)&lt;br /&gt;
* Negative X = Open clockwise (Dark Radiant grid side view, looking west)&lt;br /&gt;
&lt;br /&gt;
There is a problem when you come to rotations that are not around the main Y Z X axes of the map, for instance a drawbridge that lowers down to the south east. You might think you can combine Y Z X values to get the result you want - and this can be done (for south east use 45 45 90) but it is a bit of a kludge and the drawbridge twists eccentrically as it lowers (though it arrives correctly!)&lt;br /&gt;
&lt;br /&gt;
The values are in the range -179 to +180. Positive values give an anti-clockwise opening rotation (looking down from above) and negative values give a clockwise opening rotation. The value 180 is unique in that it continues in an anti-clockwise rotation when closing rather than returning clockwise so might be used if you can think of some object that might need such a motion when frobbed!&lt;br /&gt;
&lt;br /&gt;
Edit the rotate value by selecting it and using the input box at the bottom and clicking the check(tick) button. That will change the angle the door will open to. Note that the line with the original default of 0 90 0 will still be there but your new entry will be added on a separate line and that is the one that will work in the game. CAUTION: when adjusting later make sure you have your new line selected and not the original! If you do it will appear to change but your first setting will remain unaltered.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
* 0 90 0 = Opens anti-clockwise round the entity&#039;s &#039;vertical&#039; to 90 degrees - typical default vertical door.&lt;br /&gt;
* 0 0 90 = Lowers a drawbridge from the entity &#039;vertical&#039; to horizontal.&lt;br /&gt;
* 0 0 -45 = Opens clockwise by 45 degrees viewed from the east side. This might suit a skylight in a sloping roof.&lt;br /&gt;
&lt;br /&gt;
&#039;rotate&#039; cannot be combined with translate motions (see [[#Sliding (Translation) Amount and Direction]]) in one door; you need to bind one door to another and link they by targetting one to the other. By that means you can produce exotic and useful motions. A door opening against an upward-sloping floor can thus have a &#039;&#039;lifting hinge&#039;&#039; and raise up slightly to clear the floor; a door can rotate towards you and slide back to one side very effectively.&lt;br /&gt;
&lt;br /&gt;
===Sliding (Translation) Amount and Direction===&lt;br /&gt;
&lt;br /&gt;
By default a Dark Mod door will rotate open. For most sliding doors you want to stop them rotating as well as make them slide. You cannot delete (remove) the &#039;&#039;rotate&#039;&#039; property - you have to set the &#039;&#039;rotate&#039;&#039; property to 0 0 0 to stop a door rotating (see &#039;&#039;Rotate Direction and Open Angle&#039;&#039;.)&lt;br /&gt;
&lt;br /&gt;
Now edit the &#039;&#039;translate&#039;&#039; property value by selecting it (remember to have inherited properties box checked) and using the input box at the bottom and clicking the check(tick) button. That will change the distance the door will slide to. Note that the line with the original default of 0 0 0 will still be there but your new entry will be added on a separate line and that is the one that will work in the game. CAUTION: when adjusting later make sure you have your new line selected and not the original! If you do it will appear to change but your first setting will remain unaltered.&lt;br /&gt;
&lt;br /&gt;
Typically (but not always) you will want your sliding door to slide the width of the door. The three values in the translate property by default are 0 0 0 and are X Y Z &#039;&#039;absolute map&#039;&#039; values (irrespective of door orientation) where:&lt;br /&gt;
&lt;br /&gt;
* Positive X = Slide East (Right side of Dark Radiant grid in top view)&lt;br /&gt;
* Negative X = Slide West (Left side of Dark Radiant grid in top view)&lt;br /&gt;
* Positive Y = Slide North (top of Dark Radiant grid in top view)&lt;br /&gt;
* Negative Y = Slide South (bottom of Dark Radiant grid in top view)&lt;br /&gt;
* Positive Z = Slide Up (Top of Dark Radiant grid in side views)&lt;br /&gt;
* Negative Z = Slide Down (Bottom of Dark Radiant grid in side views)&lt;br /&gt;
&lt;br /&gt;
So for a 50 unit wide door you want to slide fully to the east you would use 50 0 0 for the translate property values. A 100 unit portcullis sliding vertically up would need 0 0 100 to be fully raised.&lt;br /&gt;
&lt;br /&gt;
=== Doors Collision/Push Behaviour ===&lt;br /&gt;
Doors push all entities by default, except for the player. Doors will also stop moving when anything blocks their movement. However, this default behaviour can be changed by setting appropriate spawnargs:&lt;br /&gt;
&lt;br /&gt;
Set &#039;&#039;&#039;push_player&#039;&#039;&#039; to &#039;&#039;&#039;1&#039;&#039;&#039; to let the player be pushed by this door:&lt;br /&gt;
 &amp;quot;push_player&amp;quot;  &amp;quot;1&amp;quot;  // Push the player too (default is off)&lt;br /&gt;
&lt;br /&gt;
By default &#039;&#039;&#039;stop_when_blocked&#039;&#039;&#039; is set to 1 and if a door is blocked by an entity then even if the entity is removed afterwards, the door stays where it is. The next frob will close the door.&lt;br /&gt;
&lt;br /&gt;
Set &#039;&#039;&#039;stop_when_blocked&#039;&#039;&#039; to &#039;&#039;&#039;0&#039;&#039;&#039; to prevent the door from ending the opening sequence when anything blocks its way. It will still pause - but continue to open if the block is removed.&lt;br /&gt;
 &amp;quot;stop_when_blocked&amp;quot;   &amp;quot;0&amp;quot;  // door keeps moving after being blocked (default is off)&lt;br /&gt;
With this setting, doors will still stop at blocking entities (the player, for instance), but will continue to move when the entity moves out of the way.&lt;br /&gt;
&lt;br /&gt;
There is another spawnarg which stops a door pushing a moveable. Apply this to the &#039;&#039;moveable&#039;&#039;, not the door...&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;notPushable&amp;quot;   &amp;quot;1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Door Sounds===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are multiple ways to put sounds on doors.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_open&#039;&#039; &amp;lt;br&amp;gt; &lt;br /&gt;
Sound is triggered as the door begins to open.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_opened&#039;&#039; &amp;lt;br&amp;gt; &lt;br /&gt;
Sound is triggered when the door finishes opening. Defaults to &amp;quot;nosound&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_move&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
The sound plays while the door moves.  Defaults to &amp;quot;nosound&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_close&#039;&#039;  &amp;lt;br&amp;gt;&lt;br /&gt;
Sound is triggered as the door finishes closing.&lt;br /&gt;
&lt;br /&gt;
The following sounds should be left on the default sound in most cases so players clearly know what is going on:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_locked&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
The sound played when a player or an AI tries to open a locked door.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_unlock string&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
The sound played when a door is unlocked.&lt;br /&gt;
&lt;br /&gt;
You can silence any of these sounds by setting the following properties as shown:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_open nosound&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;snd_close nosound&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Don&#039;t just use a dash - as it seems to cause a sound of its own.&lt;br /&gt;
&lt;br /&gt;
===Sound Propagation through Doors and Doorways===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This information will change significantly with the release of 2.0.  See&#039;&#039; [[Controlling Sound Loss Across Portals]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The sound volume reduction to the player (ie, the sound the player hears) is fixed and constant in a cvar which adds a distance factor to the original sound. It is recommended that you do not change that because it will affect other FMs. Currently there is no way to change the way that sound to the player is reduced through doors and doorways.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sound propagation to AI, eg, impact sounds or guard yells is treated separately:&lt;br /&gt;
&lt;br /&gt;
Sound propagation to AI relies on visportals. For details study [[Sound Propagation: Part 1]] and [[Sound Propagation: Part 2]] as well as [[Visportals]] This tutorial will just cover the relevant sound and sound propagation &#039;&#039;properties&#039;&#039; of doors. If you set the &#039;&#039;show inherited properties&#039;&#039; box in the entity inspector you can see them as described here.&lt;br /&gt;
&lt;br /&gt;
Remember, the following have no effect on what the player hears through a door or doorway.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;loss_open&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Drop in sound volume in dB propagated to AI (not player) when going through an open door. (default 1dB)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;loss_closed&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Drop in sound volume in dB propagated to AI (not player) when going through a closed door. (default 15dB) You would want to set this very high to block all sound with a thick door but very low for a barred gate for example.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;loss_double_open&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Drop in sound volume in dB propagated to AI (not player) when going through double doors when only one is open. (default 1dB)&lt;br /&gt;
&lt;br /&gt;
There are also various sound properties for lockpicking:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;snd_lockpick_pin_1 through 14&#039;&#039; and &#039;&#039;snd_lockpick_pin_success&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Allowing the Player to Interrupt Door Motion===&lt;br /&gt;
&lt;br /&gt;
The door property &#039;&#039;interruptable&#039;&#039; determines whether a door can be stopped by frobbing while it is opening or closing. It is enabled (i.e., set to 1) by default. Then the player, by frobbing to start the normal opening, then frobbing again to interrupt, can open a door to any position, e.g., slightly ajar to peek through. Another frob will begin closing, and so on with any additional frobs to stop/reverse-direction.&lt;br /&gt;
&lt;br /&gt;
Be aware that an rotating-style door, when left ajar, will subsequently open or close more slowly than normal in an angular-velocity sense. It instead takes the same time as a full (uninterrupted) opening or closing would take in seconds, as given by &#039;&#039;move_time&#039;&#039; discussed next.&lt;br /&gt;
&lt;br /&gt;
===Speed of Door Opening and Closing===&lt;br /&gt;
&lt;br /&gt;
Rotating Door Speed:&amp;lt;br&amp;gt;&lt;br /&gt;
The time a rotating door takes to open or close is set in the &#039;&#039;move_time&#039;&#039; property, no matter what its maximum open angle may be. So with rotation set at, say, 150 degrees the door just opens faster than at, say, 80 degrees. To change this value, make sure the door is selected then...&lt;br /&gt;
&lt;br /&gt;
* Right click the entity inspector and check &#039;&#039;show inherited properties&#039;&#039;&lt;br /&gt;
* Scroll down, select &#039;&#039;move_time&#039;&#039;&lt;br /&gt;
* Edit the second line of the input box &#039;&#039;below&#039;&#039; the properties window to the time you want.&lt;br /&gt;
* The time is in seconds and decimal fractions can be used. The default is currently 1.75 seconds.&lt;br /&gt;
&lt;br /&gt;
Sliding Door Speed:&amp;lt;br&amp;gt;&lt;br /&gt;
The speed of a sliding door is set in the &#039;&#039;translate_speed&#039;&#039; property. To add this, make sure the door is selected then...&lt;br /&gt;
&lt;br /&gt;
* Right click the entity inspector and check &#039;&#039;show inherited properties&#039;&#039;&lt;br /&gt;
* Scroll down, select &#039;&#039;translate_speed&#039;&#039;&lt;br /&gt;
* Edit the second line of the input box &#039;&#039;below&#039;&#039; the properties window to the speed you want.&lt;br /&gt;
* The speed is in Dark Radiant grid units per second.&lt;br /&gt;
* The default is 0 and if set to this then the door slides open in one second whatever the distance, great or small.&lt;br /&gt;
* CAUTION: It is assumed &#039;&#039;translate&#039;&#039; has been changed from its default value of 0 0 0. If not, a non-zero &#039;&#039;translate_speed&#039;&#039; may cause problems.&lt;br /&gt;
&lt;br /&gt;
===Visportals and Doors===&lt;br /&gt;
&lt;br /&gt;
A visportal face surrounded by solid at its edges and in contact with a door is closed when the door is closed and enabled when the door is open. In most cases you will place a visportal in contact with a working door unless you can see through the door (such as a true glass door or barred gate*.) For full details see [[Visportals]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;*As of 2.0 it is possible to make visportals that remain transparent when closed for gates and windows.  See&#039;&#039; [[Controlling Sound Loss Across Portals]]&lt;br /&gt;
&lt;br /&gt;
==Auto-Closing/Opening Doors==&lt;br /&gt;
Doors that automatically close after being open for some time are easy to setup: Each frobmover entity supports these spawnargs:&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;auto_close_time&amp;quot;:Set this to something &amp;gt;= 0 to let the mover automatically close (again) after this time when being fully opened (measured in seconds). Defaults to -1, which means &#039;do not autoclose&#039;. The event is also activated when the mover starts at the open position at map start.&lt;br /&gt;
;&amp;quot;auto_open_time&amp;quot;:&amp;quot;Set this to something &amp;gt;= 0 to let the mover automatically open (again) after this time when being fully closed (measured in seconds). Defaults to -1, which means &#039;do not autoopen&#039;. The event is also activated when the mover starts at the closed position at map start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Before auto_close_time and the AI Door Management spawnargs next were provided, a more laborious method was used to auto-close doors as if AI were closing doors behind them. Hit &amp;quot;Expand&amp;quot; to review it.&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;I have one door that I particularly want the AI to close as there is a bit of frame lag inside if not. So I set this up and it works good as an auto-closing door - not as good as a true AI closing door as it will auto close when the player goes through as well but it does look very effective to see AI going through and closing the door behind them. Not tested exhaustively so I don&#039;t know if there could be any downside. Here&#039;s what to do....&lt;br /&gt;
&lt;br /&gt;
First a quick summary to make it more clear:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;A trigger_relay is used both as a relay AND carries a stim. We put the trigger_relay with its stim in the path of the open door. The door has a response property. When it opens and contacts the stim its response is to send a signal back to the relay. The relay pauses then closes the door...&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* First, optionally give your door a suitable name like autodoor1, whatever.&lt;br /&gt;
* Copy that name to the clipboard.&lt;br /&gt;
&lt;br /&gt;
Next we need a relay with a delay:&lt;br /&gt;
&lt;br /&gt;
* Create entity &amp;gt; darkmod &amp;gt; trigger_relay&lt;br /&gt;
&lt;br /&gt;
* Place it roughly at the position the door will be at when open and to be on the safe side 3/4th of the way to the far end of the door (not the hinge end) to give max distance from the close door.&lt;br /&gt;
&lt;br /&gt;
* Add the property &#039;target&#039; and paste in the door name you just copied.&lt;br /&gt;
&lt;br /&gt;
* Give the relay itself a name, eg, autoDoor_relay_1, and copy that name to the clipboard, you&#039;ll need that too in a bit.&lt;br /&gt;
&lt;br /&gt;
* Add the property delay and the value 3 - this is the delay in seconds before the door will close; 3 seems about right but 2 might be worth a try because to that 3 is added a random value between 0 to 0.5 seconds from the Time Interval we entered for the stim firings.&lt;br /&gt;
&lt;br /&gt;
* Add the property &#039;wait&#039; and the value 3. This is the time before it can work again in seconds. If you set it too low then in theory the door might trigger again but in this situation I don&#039;t think it&#039;s possible. Too long, eg, one minute, and it won&#039;t work if the AI goes back through the door before then. If this value is -1 then the whole thing will only work ONCE so might be used for an AI who goes through once, closes it behind him, but you don&#039;t want it to be an autodoor thereafter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That&#039;s the relay, now we add a stim to it:&lt;br /&gt;
&lt;br /&gt;
* Still with the trigger relay selected, go to {{menu|Entity|Stim/Response}}&lt;br /&gt;
&lt;br /&gt;
* Custom stim tab.&lt;br /&gt;
&lt;br /&gt;
* Click Add stim type, select the new custom stim type you just made at the bottom of the list and type in eg, autoDoorStim at top right in the input box.&lt;br /&gt;
&lt;br /&gt;
* Click the stim tab and the little drop down arrow against the &#039;type&#039; selector at bottom left and you should see your new custom stim name. Select it.&lt;br /&gt;
&lt;br /&gt;
* Select the new autoDoorStim in the list and on the right you need only type in the radius box 15.0 There is quite a lot of room for error. I had it working on 10 and also on 25. The value should be less than the distance to the closed door else it will trigger open! But no so small that the door might not reach it.&lt;br /&gt;
&lt;br /&gt;
* Select the check box for Time Interval and enter 500 (millisecs.) This is so it doesn&#039;t keep firing more frequently than is necessary. This stim will be firing all through your mission whether the door is used or not so if you had dozens of these then maybe it would affect performance. Too big a number and there may be a long delay before the door shuts - but it will be random depending on the next time the stim happens to fire. We&#039;ll control the delay we want more precisely later.&lt;br /&gt;
&lt;br /&gt;
* Click {{ok}} to confirm it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That&#039;s the stim set up, now for the response to it which is put on the door....&lt;br /&gt;
&lt;br /&gt;
* Select the doorm, then use {{menu|Entity|Stim/response}} and select the response tab.&lt;br /&gt;
&lt;br /&gt;
* Click the little drop down arrow against the &#039;type&#039; selector at bottom left and you should see your new custom stim name. Select it.&lt;br /&gt;
&lt;br /&gt;
* Right click in the big &#039;&#039;Response Effects&#039;&#039; box on the bottom right of the panel.&lt;br /&gt;
&lt;br /&gt;
* Add New Effect and you should get a default &#039;Activate Response&#039; response added to the list. Double click it.&lt;br /&gt;
&lt;br /&gt;
* In the Effect selector at the stop select &#039;Trigger&#039;&lt;br /&gt;
&lt;br /&gt;
* in the Target box, paste in the name of the relay you copied or you can select it from the list at the little arrow.&lt;br /&gt;
&lt;br /&gt;
* Leave the Activator box empty.&lt;br /&gt;
&lt;br /&gt;
* Click {{apply}} and then {{ok}} on the main S &amp;amp; R panel bottom right.&lt;br /&gt;
&lt;br /&gt;
It should now work. No need to wait for an AI, just frob the door and watch it close itself. If not, check the position of the stim brush is close to where the door stops when open.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==AI Door management==&lt;br /&gt;
&lt;br /&gt;
By default AI will open doors and close them behind them. Here are some spawnargs &#039;&#039;&#039;on the door&#039;&#039;&#039; the mapper can use to modify that behaviour:&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;ai_should_not_handle&amp;quot; :If set to 1, AI will not attempt to handle it and add it to the forbidden areas (so that it doesn&#039;t try to path through). They might still walk through the door when it is open though. Useful if you have some special use door that you don&#039;t want the AI to operate.&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;ai_should_not_close&amp;quot; :If set to 1, AI will not close the door behind them unless it obstructs them.&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;canRemainOpen&amp;quot; :If set to 1, it&#039;s the same as &amp;quot;ai_should_not_close, with the added behavior that this is ignored if the door needs to be relocked, or the door is marked &amp;quot;shouldBeClosed&amp;quot;. &#039;&#039;&#039;(This spawnarg is available starting in TDM 2.02.)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Spawnargs &#039;&#039;&#039;on the AI&#039;&#039;&#039; that the mapper can use:&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;canCloseDoors&amp;quot; :Added in 2.12. Defaults to 1.  If set to 0, the AI will not close doors after passing through them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To get AI to unlock/relock specific doors there are two methods:&lt;br /&gt;
&lt;br /&gt;
1. Provide the AI with the key, as detailed in the def_attach method in [[#Keys_carried_by_AI]] above.&lt;br /&gt;
&lt;br /&gt;
2. Add the following spawnarg/value to the AI:&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;can_unlock&amp;quot; &#039;&#039;&amp;lt;doorname&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For additional doors on the same AI use &#039;&#039;can_unlock1 doorname&#039;, `can_unlock2 doorname&#039; etc. &#039;&#039;&#039;Do NOT use can_unlock_1.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If both (1) and (2) are used, then the AI can still go through the door after the player pickpockets the key. Otherwise, unless someone else opens the door for the AI, a typical sequence is that the AI checks their pockets for the missing key, stalls a bit at the locked door, and then (with now-better pathing algorithms) the AI uses an alternate route to the next path_corner, or &amp;quot;mentally&amp;quot; skips ahead in the route to next reachable node and goes there.&lt;br /&gt;
&lt;br /&gt;
===Door Handling Positions===&lt;br /&gt;
&lt;br /&gt;
It is also possible to set custom door handling positions for the AI. This is especially useful when the standard routine that lets the AI choose their standing positions while opening and closing the door fails, leaving them standing still, or circling around in front of the door helplessly.&lt;br /&gt;
&lt;br /&gt;
Place a movers &amp;gt; &#039;&#039;atdm:door_handling_position&#039;&#039; entity where you want the AI to stand while opening/closing the door from this side.&lt;br /&gt;
&lt;br /&gt;
On the door, you need to set the spawnarg &amp;quot;door_handle_position&amp;quot; &amp;quot;name_of_door_handling_position&amp;quot;. You can also place a &#039;&#039;door_handling_position&#039;&#039; on each side of the door, and the AI will automatically choose the right one. In this case, you need to set spawnargs with &amp;quot;door_handle_position_1&amp;quot; etc., and the corresponding names of the &#039;&#039;door_handling_position&#039;&#039; entities on the door.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;door_handling_position&#039;&#039; entities can also carry spawnargs that define the behaviour of the AI, which are useful for example for doors that can only be opened or locked from one side:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;ai_no_open&amp;quot;&#039;&#039;&#039; If set to &amp;quot;1&amp;quot;, the AI will not try to open the door from this side (but will still walk through when the door is already open).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;ai_no_close&amp;quot;&#039;&#039;&#039; If set to &amp;quot;1&amp;quot;, the AI will not attempt to close the door from this side.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;ai_no_unlock&amp;quot;&#039;&#039;&#039; If set &amp;quot;1&amp;quot;, the AI will not be able to unlock the door from this side, but still use it when it is not locked.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;ai_no_lock&amp;quot;&#039;&#039;&#039; If this is set &amp;quot;1&amp;quot;, the AI will not lock the door from this side.&lt;br /&gt;
&lt;br /&gt;
===Door Controllers===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Available in TDM 2.02+&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can design a door so it&#039;s operated by buttons or levers or switches (aka &#039;&#039;controllers&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
A controller is simply an entity that targets the door.  Typical examples of entities that can be used are:&lt;br /&gt;
&lt;br /&gt;
* Buttons: atdm:mover_button&lt;br /&gt;
* Levers: atdm:switch_rotate_lever&lt;br /&gt;
* Switch: atdm:mover_lever&lt;br /&gt;
* Lock: atdm:froblock. (See also next section)&lt;br /&gt;
&lt;br /&gt;
1. Set up the door in the normal manner. It can be a rotating door, a sliding door, a locked door, etc.&lt;br /&gt;
&lt;br /&gt;
2. Turn off the &amp;quot;frobable&amp;quot; spawnarg on the door. (&amp;quot;frobable&amp;quot; &amp;quot;0&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
3. Create a controller entity on each side of the door. If you&#039;re setting up a locked door using atdm:froblock, there&#039;s no need to put any locking information on the controllers. When the game starts, it will transfer any locking information from the door to the controllers.&lt;br /&gt;
&lt;br /&gt;
4. Give each controller the door as a target.&lt;br /&gt;
&lt;br /&gt;
Both the player and any AI that wants to use the door will use the controllers to operate it. Any key, &amp;quot;can_unlock&amp;quot;, or lockpick settings you would normally use at the door are now used at the controllers.&lt;br /&gt;
&lt;br /&gt;
Controllers and &#039;&#039;door_handling_position&#039;&#039; entities can be used on the same door, but in that situation the &#039;&#039;door_handling_position&#039;&#039; entities don&#039;t define where the AI stands to operate the door. They simply provide the &amp;quot;ai_no_*&amp;quot; spawnargs that define AI behavior on each side of the door.&lt;br /&gt;
&lt;br /&gt;
If you wish, you could provide a controller on only one side of the door instead of both sides. Note that, since the door is not frobable, the player won&#039;t be able to operate the door from the non-controller side.&lt;br /&gt;
&lt;br /&gt;
====More about Using a Separate &amp;quot;Froblock&amp;quot; Lock Plate====&lt;br /&gt;
&#039;&#039;by Geep, 2021-22&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Froblock, just discussed as a controller method, actually predated the controller concept in TDM. Here we recap that earlier context, with an alternative treatment of highlighting, and thoughts on texturing and usage.&lt;br /&gt;
&lt;br /&gt;
Suppose you want to have a lock plate (typically mounted on a door frame or wall) that opens a nearby door, where the door and lock plate highlight separately. A traditional way is to adapt the &#039;&#039;froblock&#039;&#039; method described under the &amp;quot;Making your own&amp;quot; section of [[Containers, Chests, etc.]]&lt;br /&gt;
&lt;br /&gt;
Basically, your door is the &amp;quot;chest lid&amp;quot; (of class atdm:mover_door) and your lock is the &amp;quot;chest body&amp;quot; (of class atdm:froblock). Set the properties as described in the wiki. There is a stock texture (darkmod/door/keyhole_metal_001) you can use to decorate a surface of your lock plate, or a patch on it. This method is probably most apt for small hatches and grates designed for the player alone, and with no handles, or non-turning handles attached with &amp;quot;bind&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===AI and &#039;non-frobable&#039; Doors===&lt;br /&gt;
Be aware that the &#039;frobable&#039; spawnarg only applies to the player, not AI.  If you set a door to be non-frobable (i.e. &#039;frobable&#039; &#039;0&#039;), AI can still operate it by interacting directly with it, even if it has a controller.  For example they will do this if:&lt;br /&gt;
&lt;br /&gt;
* they are fleeing or chasing the player&lt;br /&gt;
* the door has a controller but the AI can&#039;t reach it (for example the controller is on the other side of the door)&lt;br /&gt;
&lt;br /&gt;
The best way to mitigate this is to use Door Handling Position entities (see above) with the &#039;ai_no_open&#039; spawnarg set on them. &lt;br /&gt;
&lt;br /&gt;
===AI locking doors behind them===&lt;br /&gt;
&lt;br /&gt;
If one AI is involved (no one else is in the queue), he&#039;ll lock it behind him if he had to unlock it in the first place.&lt;br /&gt;
&lt;br /&gt;
Prior to TDM 1.08, if more than one AI is using the door at the same time (there&#039;s a queue), the first AI unlocks the door, and the last AI through will only lock it if it&#039;s marked &amp;quot;should_always_be_locked&amp;quot; AND they have a &amp;quot;can_unlock&amp;quot; for that door or they have a key for that door. The last AI to use the door doesn&#039;t know that the first AI found it locked, because that info is kept per AI, and not per door. &lt;br /&gt;
&lt;br /&gt;
Starting in TDM 1.08, if the first AI in a door queue found the door locked, that information is remembered by the door and the last AI through uses it to relock the door, as long as they have a &amp;quot;can_unlock&amp;quot; for that door or they have a key for that door.&lt;br /&gt;
&lt;br /&gt;
In the rare case where a door is set up to use door-handling position entities (necessary for AI to use sliding doors), either or both of those entities can have the &amp;quot;ai_no_lock&amp;quot; spawnarg, which means AI aren&#039;t allowed to lock the door from that side.&lt;br /&gt;
&lt;br /&gt;
==Initially Blocking a Door - Partially or Fully==&lt;br /&gt;
&#039;&#039;by Geep 2021&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Suppose you have a door that you want to start out either as unopenable, or able to open just a crack, then later, after something happens, be fully openable and operational. One method known to work:&lt;br /&gt;
&lt;br /&gt;
* Create a moveable object that the opening door runs into and tries to push.&lt;br /&gt;
* Arrange that the far side of the moveable object is jammed against some immovable worldspawn.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s two specific examples that use a wooden plank moveable:&lt;br /&gt;
&lt;br /&gt;
* In &amp;quot;Perilous Refuge&amp;quot;, a plank blocks the door leading out of the player&#039;s starting location, until the player carries it away. &lt;br /&gt;
* At the end of &amp;quot;Away0&amp;quot; (WIP 2021), the player tries to open a door. But if preconditions aren&#039;t met, the occupant seems to let the door open only a crack and complains. Blockage is done by an unseen plank resting on the floor hitting a knob of worldspawn. Preconditions met causes a &amp;quot;$plank.remove()&amp;quot; script call.&lt;br /&gt;
&lt;br /&gt;
Other methods that you might think would work but don’t:&lt;br /&gt;
&lt;br /&gt;
* Block with a func_static object, or an unjammed moveable with &amp;quot;notpushable 1&amp;quot; set. In both cases, the door travels through the object.&lt;br /&gt;
* In advance, &amp;quot;grab&amp;quot; an unjammed moveable to make it appear &amp;quot;solid&amp;quot; to the physics engine. (This was tested by having the player manipulate it; if it had worked, a “grabber” script call might suffice.)&lt;br /&gt;
* Dynamically change the door’s &amp;quot;rotate&amp;quot; limit from script using &amp;quot;setSpawnArg&amp;quot;; this function would only work before you spawn the door, not afterwards.&lt;br /&gt;
&lt;br /&gt;
(Others possibilities not yet tested:&lt;br /&gt;
&lt;br /&gt;
* Change &amp;quot;rotate&amp;quot; using the &amp;quot;setKey&amp;quot; script function; for some spawnargs this works even after spawn.&lt;br /&gt;
* Create a moveable and bind it to the world entity.&lt;br /&gt;
* If you are mainly interested in initially blocking an AI from using a door: it&#039;s possible that the AI re-reads the spawnargs for what doors it&#039;s allowed to open. Try adding a frob Response to the key (Entity -&amp;gt; Stim/Response... -&amp;gt; Response) with an effect that sets the “can_unlock&amp;quot; spawnarg on that AI to &amp;quot;-&amp;quot;.)&lt;br /&gt;
&lt;br /&gt;
==Controlling a Door by Scripting==&lt;br /&gt;
&#039;&#039;by Geep 2021&#039;&#039;&lt;br /&gt;
===If Unlocked===&lt;br /&gt;
&lt;br /&gt;
Simply use, for example with a door named &#039;&#039;door1&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 $door1.Open();&lt;br /&gt;
 ...&lt;br /&gt;
 $door1.Close();&lt;br /&gt;
&lt;br /&gt;
Alternatively, toggle it open or closed with:&lt;br /&gt;
&lt;br /&gt;
 $door1.frob();&lt;br /&gt;
&lt;br /&gt;
If the door has &amp;quot;interruptable 1&amp;quot; (which is the default with atdm:mover_door), you can also frob() it twice to leave it ajar. Interpose and adjust a sys.wait(...) to tune it.&lt;br /&gt;
===If Locked===&lt;br /&gt;
&lt;br /&gt;
You need to unlock it first. Changing the door&#039;s &amp;quot;locked&amp;quot; spawnarg value won&#039;t work. Instead you will use:&lt;br /&gt;
&lt;br /&gt;
 $door1.Unlock();&lt;br /&gt;
&lt;br /&gt;
But there are complications. By default, the door has spawnarg &amp;quot;open_on_unlock 1&amp;quot;. So, assuming you didn&#039;t change that, you&#039;d think unlocking the door would open it. But this spawnarg will be ignored if the gamer has global menu option &amp;quot;Open Doors on Unlock&amp;quot; set to Off. Assuming you want to reliably have the door open, do this:&lt;br /&gt;
&lt;br /&gt;
 $door1.Unlock(); // MAYBE will open door too.&lt;br /&gt;
 sys.wait(3); // If so, wait for door to fully open. Value may need adjusting based on door&#039;s speed&lt;br /&gt;
 $door1.Open(); // Otherwise, open it now.&lt;br /&gt;
&lt;br /&gt;
The wait is added, because otherwise, the opening begun by Unlock may be stopped by Open with the door only partially open. (Probably an alternative to using sys.wait here is to zero the door&#039;s &amp;quot;interruptable&amp;quot; spawnarg.) &lt;br /&gt;
&lt;br /&gt;
==Doors as Triggers==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;by Ishtvan &amp;amp; greebo&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Doors (or any binary frob mover, buttons, levers, etc) now have the option to [[Triggers|trigger]] their target on closing or opening. (For definition purposes, a button is defined as &amp;quot;closed&amp;quot; in the state when it starts out and &amp;quot;open&amp;quot; in the state you press it down to. I know that&#039;s a little non-intuitive, but it came from deriving from doors).&lt;br /&gt;
&lt;br /&gt;
New spawnargs on frob movers:&lt;br /&gt;
;&amp;quot;trigger_on_open&amp;quot; :If set to 1, this binary mover will trigger its targets when it starts out completely closed and is opened.&lt;br /&gt;
;&amp;quot;trigger_when_opened&amp;quot;:If set to 1, this binary mover will trigger its targets when it is completely opened. Code defaults to 0.&lt;br /&gt;
;&amp;quot;trigger_on_close&amp;quot;:If set to 1, this binary mover will trigger its targets when it completely closes after being open.&lt;br /&gt;
&lt;br /&gt;
== Suspicious Doors ==&lt;br /&gt;
&lt;br /&gt;
If you give a door the spawnarg &#039;&#039;&#039;&amp;quot;shouldBeClosed&amp;quot; &amp;quot;1&amp;quot;&#039;&#039;&#039;, then AI will treat it as suspicious if they find the door open.&lt;br /&gt;
&lt;br /&gt;
Doors with that spawnarg should work like this:&lt;br /&gt;
&lt;br /&gt;
- an AI opening the door knows he&#039;s not to become suspicious if he opened the door&lt;br /&gt;
&lt;br /&gt;
- nearby AI alerted by the open door will also not react if they can see the door, and can see the AI that opened it&lt;br /&gt;
&lt;br /&gt;
- AI who come upon the open door later probably won&#039;t be able to see the AI that opened it, so they&#039;ll treat it as suspicious&lt;br /&gt;
&lt;br /&gt;
- if the AI who opened the door comes upon the door later, and it&#039;s still open, and no one&#039;s touched it since he opened it, he&#039;ll see his name on the door and won&#039;t become suspicious. &amp;quot;Oh, crap. I forgot to close it earlier.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
- If an AI comes upon an open door that should be closed, he should close it whether he becomes suspicious or not.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Post TDM 2.00:&#039;&#039;&#039;&lt;br /&gt;
-  AI turn to look at a door they see opening.  The player can crack open a suspicious door to peek out w/o grabbing the attention of a nearby AI. After 5s, the AI will notice the cracked open door. Non-suspicious doors can be cracked open indefinitely w/o nearby AI noticing.&lt;br /&gt;
&lt;br /&gt;
==Slanted or Tilted Doors==&lt;br /&gt;
Slanted or tilted doors can be made as follows:&lt;br /&gt;
&lt;br /&gt;
1) Place your door, preferrably one of the prefab doors, which have a model door and model handle and all the rotation spawnargs pre-set.&lt;br /&gt;
&lt;br /&gt;
2) rotate and place the door+handle model into place you want it to be. Now, if you use the door in the game, the door will rotate around the world z-axis, and not the door model z-axis (which is rotated).&lt;br /&gt;
&lt;br /&gt;
3) to get the door to rotate around the door model z-axis, you must place a model (any model will do, and it can be placed anywhere in the map). Rotate the new model into the same orientation your door model was rotated, i.e. if you door is rotated 45 degrees around the x-axis, do the same rotation on the new model.&lt;br /&gt;
&lt;br /&gt;
4) bind the doors on the new model. This makes the doors start rotating along the new model origin (which is rotated the same way as the doors).&lt;br /&gt;
&lt;br /&gt;
5) working slanted door.&lt;br /&gt;
&lt;br /&gt;
Do note, that all the rotated objects need to be models (suspicion, not tested). You can export DR built stuff into a model using the DR ase exporter script. For custom doors, remember that the exporter places the model origin at the map origin if you do not choose the &amp;quot;place origin in the middle of the object&amp;quot; option.&lt;br /&gt;
&lt;br /&gt;
Also note that the AI probably cannot use slanted doors and might get stuck (suspicion, not tested).&lt;br /&gt;
&lt;br /&gt;
There is a link to a test map here:&lt;br /&gt;
http://forums.thedarkmod.com/topic/9082-newbie-darkradiant-questions/?p=395486&lt;br /&gt;
&lt;br /&gt;
==Skins: A Wide Variety of Door Textures==&lt;br /&gt;
&lt;br /&gt;
This is to remind you that as with many Dark Mod models, there is a wide range of extras skins (textures) available for door models. There are now several basic door entities of different sizes so choose your size first. Then enter the spawnarg: skin with any temporary value. Now select it and click the skin button at the bottom of Dark Radiant&#039;s Entity Inspector and you will find a large of range of skin textures from which to select to give you a choice of appearances for your door.&lt;br /&gt;
&lt;br /&gt;
==Extra Notes==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;func_darkmod_door&#039;&#039; is no longer used (just in case you come across it in the Dark Mod forums or wiki.) &#039;&#039;&#039;&amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt;&#039;&#039;&#039; is the entity to use.&lt;br /&gt;
&lt;br /&gt;
{{tutorial-editing}}&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=Doors&amp;diff=34101</id>
		<title>Doors</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=Doors&amp;diff=34101"/>
		<updated>2025-11-06T19:44:21Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: /* Automatically Removing Keys from Player Inventory After Use */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{todo}}&lt;br /&gt;
&#039;&#039;Written by Fidcal&#039;&#039; &#039;&#039;edit Baddcog&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Quick Summary==&lt;br /&gt;
&lt;br /&gt;
Quick way to get an unlocked door in your map:&lt;br /&gt;
&lt;br /&gt;
* Insert one of the prefab doors complete with handles and select its skin property and click the button to change its skin appearance to whatever you want. Set any other properties you need.&lt;br /&gt;
&lt;br /&gt;
Alternatively,&lt;br /&gt;
&lt;br /&gt;
* Create a door from the entity list&lt;br /&gt;
* Use the &amp;quot;skin&amp;quot; spawnarg on the door to change its appearance. &lt;br /&gt;
* Create a handle from the entity list&lt;br /&gt;
* Add the &#039;&#039;door_handle&#039;&#039; property to the door and give it the name of the handle&lt;br /&gt;
* To the door handle add the value frob_peer and use the name of the door.&lt;br /&gt;
* To open clockwise, change the &#039;&#039;rotate&#039;&#039; property from &amp;lt;code&amp;gt;0 90 0&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;0 -90 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
This tutorial explains how to put doors into your map using Dark Radiant, as well as adjust them and their properties.&lt;br /&gt;
&lt;br /&gt;
The rest of this tutorial assumes that you have a basic understanding of using DarkRadiant. If you haven&#039;t done so, please go read the [[Dark Radiant Must Know Basic Intro]] article first.&lt;br /&gt;
&lt;br /&gt;
Additionally:&lt;br /&gt;
&lt;br /&gt;
* Up, down, right, and left in Dark Radiant&#039;s &#039;&#039;top&#039;&#039; orthoview are regarded here as the standard map directions of North, South, East, and West where useful for clarity.&lt;br /&gt;
* Where the term &#039;&#039;brush&#039;&#039; is used with a door it mostly also applies to a door made up of a group of brushes and/or patches.&lt;br /&gt;
* Where the term &#039;&#039;door&#039;&#039; is used it often will also apply to any object you wish to rotate when frobbed, for instance an openable window, box lid, or even more exotic objects that the imaginative mapper might conceive like a signal, engine part, toy, or whatever. So long as it needs to turn or slide just a fixed amount when frobbed then return when frobbed again then the following applies.&lt;br /&gt;
&lt;br /&gt;
==Door types==&lt;br /&gt;
&lt;br /&gt;
All tangible objects in Dark Mod are &#039;&#039;entities&#039;&#039;, having either a pre-made model shape or else brush/patch(es). So there are two ways to create a door in Dark Radiant: as a model door or a textured brush door (or a hybrid of the two).&lt;br /&gt;
&lt;br /&gt;
Models are ready made door objects but cannot within Dark Radiant (at the time of writing) be resized, rescaled, cropped or clipped whereas brushes are very flexible in that respect and can be worked into custom shapes for your map, including secret doors that blend into walls and other surfaces.&lt;br /&gt;
&lt;br /&gt;
Most of the current door models are found in two places along with the door handles.&lt;br /&gt;
*Model Viewer: doors created from here will be static in the world and have no props other than material type.&lt;br /&gt;
You can add any props to them to make them working doors. If nothing else it is a good place to view the different size and skin options for the doors.&lt;br /&gt;
*Entity List: most of the door models can be found here. These doors have properties already assigned so they are ready to be used. Only one base door of each type is listed, create the size/hinge count door you want (2 hinge doors have a &#039;no hinge&#039; skin). You can choose a skin for the door once it has been created in the editor with the &amp;quot;skin&amp;quot; spawnarg (use the model name of the door you want, taken from the model list, as its value). This is the easiest way to create a door. The same goes for door handles.&lt;br /&gt;
&lt;br /&gt;
Remember also that door functions may be applied to objects other than doors, such as openable windows, drawbridges, gates, etc. In fact, anything that needs a partial rotation or slide when frobbed then return when frobbed again, such as a signal device. Lockboxes and chests use similar properties.&lt;br /&gt;
&lt;br /&gt;
You can create one door/handle set and copy/paste it, but you need to take great care that all the name props are changed to match in each clone. Otherwise you get handles that fly off when a distant door moves, and handles that don&#039;t move.&lt;br /&gt;
&lt;br /&gt;
==Creating a Door==&lt;br /&gt;
&lt;br /&gt;
Put simply, to make a door you will be creating an &#039;entity with model&#039; or &#039;entity with brush&#039; or some variation thereof.&lt;br /&gt;
&lt;br /&gt;
===Creating a Model Door===&lt;br /&gt;
&lt;br /&gt;
There are several approaches to making a model door; the simplest is to create a door from the entity list; or create a door from the model viewer (good for static unusable prop doors).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Entity List&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
*Deselect everything in editor by hitting the Esc button&lt;br /&gt;
*Right-click an ortho view and select Create Entity&lt;br /&gt;
*Navigate to darkmod/movers/&#039;&#039;atdm:door_...&#039;&#039;, choose the door you want&lt;br /&gt;
*Click Add&lt;br /&gt;
*To change its appearance, add a &amp;quot;skin&amp;quot; spawnarg to the door, with the value being the model name of the door you want.&lt;br /&gt;
&lt;br /&gt;
You now have a workable door in your level.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Model Viewer&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Right click in the orthoview, select &#039;&#039;Create Model&#039;&#039; then &amp;lt;code&amp;gt;darkmod&amp;lt;/code&amp;gt; and select a door.&lt;br /&gt;
* Note that you can left drag the image in the &#039;&#039;Choose Model&#039;&#039; dialog to rotate it around.&lt;br /&gt;
* Click [[Image:Button ok.png]] and you have a static door.&lt;br /&gt;
* If you want to make it work (openable, frobbable) then:&lt;br /&gt;
** Select the entity inspector,&lt;br /&gt;
** Select the top classname line so it highlights&lt;br /&gt;
** Select the func_static line in the input box &#039;&#039;below&#039;&#039; the properties window.&lt;br /&gt;
** Edit &amp;lt;code&amp;gt;func_static&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt;&lt;br /&gt;
** Click {{check}} or press {{key-enter}}&lt;br /&gt;
&lt;br /&gt;
Alternatively you can do it the old way:&lt;br /&gt;
&lt;br /&gt;
* Create any temporary brush&lt;br /&gt;
* Right click in orthoview and select &amp;lt;code&amp;gt;Create Entity&amp;lt;/code&amp;gt; then &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Left lick the model name line in the entity inspector.&lt;br /&gt;
* Below it on the &#039;&#039;Entity Inspector&#039;&#039; panel you should now see a button &#039;Choose Model&#039;&lt;br /&gt;
* Left click it, select a door model from the darkmod group.&lt;br /&gt;
* Note that you can left drag the image in the &#039;&#039;Choose Model&#039;&#039; dialog to rotate it around.&lt;br /&gt;
* The temporary brush was deleted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In all three instances, you now have a working door with default properties. &lt;br /&gt;
&lt;br /&gt;
Name your door by adding the prop (or modifing it) to name &#039;&#039;My_Door_1&#039;&#039;. You can use any name that you feel is appropriate but all doors with handles attached &#039;&#039;must&#039;&#039; have their own specific name. Use the name My_Door_1 for your first attempt as it will be referenced when you get around to attaching handles (see below).&lt;br /&gt;
&lt;br /&gt;
To add a handle and other adjustments, see [[#Customising and Adjusting Door Properties]] below.&lt;br /&gt;
&lt;br /&gt;
===Creating a Textured Brush Door===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tip:&#039;&#039;&#039; If unsure of size then you might insert a temporary human AI first to get a sense of height.&lt;br /&gt;
&lt;br /&gt;
==== The simplest brush door: ====&lt;br /&gt;
&lt;br /&gt;
* Drag out a new brush to the size required, eg, a seven foot high door is 84&amp;quot; x 1.1 = about 90 units in Dark Radiant.&lt;br /&gt;
* Give it a door texture from the texture browser (or wall texture for a secret door)&lt;br /&gt;
* Right click in orthoview and select &#039;&#039;Create Entity&#039;&#039; then &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You now have a working door but it will rotate around its center. To move the rotation point to where you want the door hinges to be:&lt;br /&gt;
* Select the door and press &#039;v&#039; or the &#039;&#039;Select Vertices&#039;&#039; button to enter vertex editing mode. The door&#039;s origin will show up as a small green square in the middle of the brush.&lt;br /&gt;
* In top-down orthoview, move the origin from the center to the corner of the brush. This is easiest in drag mode (&#039;q&#039; or the &#039;&#039;Resize&#039;&#039; button), although you can use translate mode (&#039;w&#039; or the &#039;&#039;Translate&#039;&#039; button) by manually selecting the vertex first.&lt;br /&gt;
&lt;br /&gt;
==== Multi-brush doors: ====&lt;br /&gt;
&lt;br /&gt;
More complex multi-brush doors can be created using the [[Clipper]] tool, CSG, etc. - this is not covered in this tutorial. Then assign &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt; for that whole brush structure. Also you can collect various brushes positioned together in relation to one another as needed, select them all, then assign &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt; for the group. All the brushes will be children of the &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt; entity and will rotate and be frobbable, etc. as one unit, as one door. To add further brushes or even model shapes later see the section on [[#Adding handles and other items to doors]].&lt;br /&gt;
&lt;br /&gt;
Name your door by adding the prop (or modifing it) to name My_Door_1. You can use any name that you feel is appropriate but all doors with handles attached must have their own specific name. Use the name My_Door_1 for your first attempt as it will be referenced when you get around to attaching handles (see below). (repeated from above in case you didn&#039;t choose to create a model door)&lt;br /&gt;
&lt;br /&gt;
=== Double Doors ===&lt;br /&gt;
Double doors are automatically recognised by the code when the doors are spawned. The prerequisite is that both doors are sharing/touching the same visportal. The spawnarg &#039;&#039;auto_setup_double_door&#039;&#039; (which defaults to &amp;quot;1&amp;quot;) will take care of setting up the open/lock peer relationship between the two doors. The doors will open/close and lock/unlock along with each other as a result.&lt;br /&gt;
&lt;br /&gt;
What happens behind the scenes: the doors are adding each other to their internal open_peer and lock_peer list, which causes the double doors to perform the same action when frobbed or used.&lt;br /&gt;
&lt;br /&gt;
Note that &#039;&#039;auto_setup_double_door&#039;&#039; will not set the frob_peer relationship, i.e. each door will frob-highlight on its own without highlighting the other door. You&#039;ll need to add that spawnarg manually if you want to highlight the entire double door as one.&lt;br /&gt;
&lt;br /&gt;
==Customising and Adjusting Door Properties==&lt;br /&gt;
&lt;br /&gt;
Handles, lockplates, etc. can be added to doors and door properties can be adjusted for rotation, sliding, locking, and more.&lt;br /&gt;
&lt;br /&gt;
Some of the door models have hinge plates and lockboxes that are reskinnable with a good variety of skins.&lt;br /&gt;
&lt;br /&gt;
===Door handles and other door attachments===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Summary: just add the property &#039;&#039;bind&#039;&#039; with the door&#039;s name to the attachment and position it where you want it on the door. If it&#039;s a &#039;&#039;atdm:mover_door_handle&#039;&#039; then it automatically will work as a handle but you can bind virtually anything.&#039;&#039;&#039;&lt;br /&gt;
You can add handles and other items to doors such that they move correctly with the door whether rotating, sliding, or both and even if the door is not vertical such as a skylight or trapdoor.&lt;br /&gt;
Handle models come in two types, &#039;&#039;single handles&#039;&#039; and &#039;&#039;double handles&#039;&#039;. A single handle is one sided, this means the handle will be inside the door or outside the door, but not both. A double handle has a lever on the inside of the door and a handle on the outside of the door. Each has benefits.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;Single door handles&#039;&#039;&#039;&#039;&#039;:&lt;br /&gt;
Single door handles can be used on a static door, a door that&#039;s just for show that no AI&#039;s or the player can use. In this case you should just create a door handle from the model viewer, it will be static and have no properties such as scripts. It is for looks only.  Note that TDM is trying to establish the expectation that decorative doors that cannot be opened do not have handles (though not all maps follow this).&lt;br /&gt;
&lt;br /&gt;
I will call this &#039;&#039;multiple handles&#039;&#039;, see more below.&lt;br /&gt;
&lt;br /&gt;
These can also be useful on brush doors created in the editor that may be very thin or very wide.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;Double door handles&#039;&#039;&#039;&#039;&#039;:&lt;br /&gt;
These are models have have a handle inside and outside. The bonus is that they only use one entity. Maps are limited to about 4,000 entities but when you count lights, AI, sound speakers, ect... you can run out of entities quickly on a large map. If you plan on building a large map this is the way to go, even in a small map they have benefits, namely that you only have to attach one handle per door.&lt;br /&gt;
&lt;br /&gt;
Whether you decide to use a single handle or a double handle you must first follow the instructions below and attach one handle first. If you choose a double handle, follow the instructions below and you are done. If you choose a single handle type follow the instructions then also follow the &#039;&#039;multiple handle&#039;&#039; instructions for the second handle.&lt;br /&gt;
&lt;br /&gt;
Both single and double handle types can be found in two places. The model viewer which will create a static model good for show, you can manually add props to make them work OR you can look in the entity browser.&lt;br /&gt;
Using a handle from the entity browser saves you a little bit of time as some props are already added, you just need to add the frob_peer names for the doors/handles and the door_handle name to the door.&lt;br /&gt;
&lt;br /&gt;
=== Adding a working model door handle===&lt;br /&gt;
&lt;br /&gt;
Quick summary:&lt;br /&gt;
* Create a model or brush handle and make it an &#039;&#039;atdm:mover_door_handle&#039;&#039; entity.&lt;br /&gt;
* Position it on your door.  Use the opposite side from the door&#039;s multicolor X-Y-Z indicator (highlight the door to see it) if it&#039;s not obvious which side it goes on.  &lt;br /&gt;
* &#039;&#039;&#039;Bind&#039;&#039;&#039; the handle to the door (bind &amp;lt;doorname&amp;gt;)&lt;br /&gt;
* It should now be a working handle though may need adjustments of rotation etc. see later. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Important: read preceding section on door handle types and performance issues first.&lt;br /&gt;
&lt;br /&gt;
This works with both a model door and a brush door:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rotation&#039;&#039;&#039;:&lt;br /&gt;
* By default the door handle entity rotates &#039;&#039;anti-clockwise&#039;&#039; (looked at from the front) then springs back. A &#039;&#039;double handle&#039;&#039; model is OK but two singles (see &#039;&#039;Multiple door handles&#039;&#039; below) need more care as only one is the functioning entity and the other is just attached to it. So anti-clockwise is fine for a door with its hinge on the left and the handle on the right - the handle will rotate down then spring back. If you put the functioning door handle on the other side you will have to change the default &#039;&#039;rotate&#039;&#039; property from -45 0 0 to 45 0 0. &#039;&#039;&#039;&#039;&#039;Therefore it is easier to generally put this handle on the side of the door where the hinge is on the left and the non-functioning attachment handle on the other side.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*If your door only needs one handle, eg, a cupboard door, and from outside its hinge is on the right then you will need to change the &#039;&#039;rotate&#039;&#039; property of the handle as described above.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;The functioning handle entity:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
* Create an entity door handle (movers folder) or create a brush or model handle and assign it the entity &#039;&#039;atdm:mover_door_handle&#039;&#039;.&lt;br /&gt;
* Position it where you wish on your door.&lt;br /&gt;
* &#039;&#039;&#039;Bind&#039;&#039;&#039; the handle to the door, by adding the &amp;quot;bind&amp;quot; spawnarg to the handle.&lt;br /&gt;
&lt;br /&gt;
You now have a working door handle with default properties.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Multiple door handles&#039;&#039;&#039;:&lt;br /&gt;
Now that you&#039;ve got a handle attached to one side of the door it is time to add one to the other side (unless you used a double handle).&lt;br /&gt;
* Create the new handle. The single handles come in left and right persuasions. A door needs a left facing handle on one side and a right facing handle on the other, so if you have already added the left handle create a right handle and line it up on the other side of the door.&lt;br /&gt;
* Name this handle. I prefer to keep a naming convention for each door and it&#039;s respective handles, it makes things alot easier. The door is named &#039;&#039;&#039;My_Door_1&#039;&#039;&#039;, the first handle is named &#039;&#039;&#039;My_Handle_1&#039;&#039;&#039; so name the second handle &#039;&#039;&#039;My_Handle_1_1&#039;&#039;&#039;. This will make it stay with the first handle in the entity list. This is important to keep organized. If you name it My_Handle_2 then when you get to another door named My_Door_2 you&#039;ll be confused.&lt;br /&gt;
* Place and &#039;&#039;&#039;bind&#039;&#039;&#039; that handle to your door.&lt;br /&gt;
&lt;br /&gt;
You now have two single door handles on either side of the door that rotate together as if they were physically attached.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add a brush to a brush door&#039;&#039;&#039;:&lt;br /&gt;
* Select the new brush &#039;&#039;and&#039;&#039; the brush door all together; &#039;&#039;the entity &#039;&#039;&#039;must&#039;&#039;&#039; be selected &#039;&#039;&#039;last&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
* Use {{menu|Edit|Reparent primitives}}. This ensures the parent entity adopts the new item(s).&lt;br /&gt;
* If you have trouble selecting them in the orthoview because other brushes, etc. get selected then try in the camera view or as a last resort move them temporarily to an open area (but keep them in the same positions relative to each other.) Use {{key-shift}}+{{LMB}} on new item(s) then {{key-shift}}+{{LMB}} on main entity. Once they are all selected, use the {{menu|Edit|Reparent primitives}}.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add &#039;&#039;model&#039;&#039; static items&#039;&#039;&#039;: knockers, hinges, static handles etc. to a &#039;&#039;Model Door&#039;&#039;:&lt;br /&gt;
* Select item&lt;br /&gt;
* Right click in orthoview and select &#039;&#039;Create Entity&#039;&#039; then &amp;lt;code&amp;gt;entity func_static&amp;lt;/code&amp;gt;&lt;br /&gt;
* Position it where you wish on your door.&lt;br /&gt;
* To synchronize this with your particular door you need to add the property &#039;&#039;bind&#039;&#039; and the individual door name to the brush entity. To do this...&lt;br /&gt;
** Select the model door.&lt;br /&gt;
** In the entity inspector, select the &#039;&#039;name&#039;&#039; line&lt;br /&gt;
** Select the bottom line in the input box &#039;&#039;below&#039;&#039; the properties window.&lt;br /&gt;
** Copy the name&lt;br /&gt;
** Deselect the door with {{key-esc}}&lt;br /&gt;
** Select the brush entity&lt;br /&gt;
** Add a property &amp;quot;bind&amp;quot; to it.&lt;br /&gt;
** Change the value of the property by pasting in the door name&lt;br /&gt;
** Click {{check}} or press {{key-enter}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add &#039;&#039;brush&#039;&#039; static items&#039;&#039;&#039;: knockers, hinges, static handles to a Model Door:&lt;br /&gt;
* This method is not ideal but it seems to work OK.&lt;br /&gt;
* Select the brush.&lt;br /&gt;
* Right click in orthoview and select Create Entity then &#039;&#039;atdm:mover_door_handle&#039;&#039;&lt;br /&gt;
* Position it where you wish on your door.&lt;br /&gt;
&lt;br /&gt;
To synchronize this with your particular door you need to add the property &#039;&#039;door_handle&#039;&#039; on the door, and give as the value the name of the brush you just created.&lt;br /&gt;
&lt;br /&gt;
This brush turns like a handle. To stop it:&lt;br /&gt;
&lt;br /&gt;
* Adding &#039;&#039;rotate 0 0 0&#039;&#039; or disabling the handle script won&#039;t help.&lt;br /&gt;
* Add a real working handle (as in the section above &#039;&#039;To add a working model door handle...&#039;&#039; and it must be added LAST.)&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want too see a real working handle added maybe try another tiny brush with the handle function and hide it inside the door?&lt;br /&gt;
&lt;br /&gt;
===Locking Doors===&lt;br /&gt;
&lt;br /&gt;
To lock a door check the &#039;&#039;show inherited properties&#039;&#039; in the entity inspector for a &#039;&#039;atdm:mover_door&#039;&#039; entity and you should see the &#039;&#039;locked&#039;&#039; property. Select it and in the input box below the properties you can change its value:&lt;br /&gt;
&lt;br /&gt;
* 0 = unlocked (default)&lt;br /&gt;
* 1 = locked&lt;br /&gt;
&lt;br /&gt;
If locked it will require an entity that is associated with it to be able to act as a key to unlock it.&lt;br /&gt;
&lt;br /&gt;
Currently door handles on locked doors will rotate when frobbed, they will bounce back though and the door will stay locked until unlocked.&lt;br /&gt;
&lt;br /&gt;
===Keys===&lt;br /&gt;
&lt;br /&gt;
Assigning specific keys to specific doors is simple.&lt;br /&gt;
&lt;br /&gt;
* It is recommended that you create an existing key entity. These keys have all required props, they just need to be named.&lt;br /&gt;
&lt;br /&gt;
Alternatively you can create a key from the Model Viewer and want it to be useable&lt;br /&gt;
* Make sure it has the properties:&lt;br /&gt;
 useable 1 [so it can be used by the door]&lt;br /&gt;
 frobable 1&lt;br /&gt;
 inv_name &amp;lt;unique name&amp;gt;&lt;br /&gt;
 inv_category Keys&lt;br /&gt;
 inv_target player1&lt;br /&gt;
 inv_icon guis/assets/hud/inventory_icons/&amp;lt;icon name&amp;gt;&lt;br /&gt;
 inv_stackable 0 or 1 where 1 can be used on all copies of the same key so they show as one entry in the inventory with a total.&lt;br /&gt;
&lt;br /&gt;
Add to the door the property &amp;lt;code&amp;gt;used_by&amp;lt;/code&amp;gt; with the name of the key as the value. Multiple keys can open the same door by using several &amp;lt;tt&amp;gt;used_by&amp;lt;/tt&amp;gt; spawnargs:&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;used_by&amp;quot;  &amp;quot;doorkey_1&amp;quot;&lt;br /&gt;
 &amp;quot;used_by1&amp;quot; &amp;quot;doorkey_2&lt;br /&gt;
&lt;br /&gt;
==== Keys Carried by AI ====&lt;br /&gt;
&lt;br /&gt;
So you have a door and you have a guard AI and you want the guard to be able to open/close/lock the door, but you also want the player to be able to pickpocket the key. Keys can be attached to AI in two ways.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The Def_Attach Method&#039;&#039;. This method is the best one for doors that you expect the AI to operate. It uses spawnargs to spawn the key at game start.&lt;br /&gt;
&lt;br /&gt;
*&amp;quot;def_attach6&amp;quot; &amp;quot;atdm:prop_silverkey&amp;quot; // the entity to spawn - in this case a key.&lt;br /&gt;
*&amp;quot;pos_attach6&amp;quot; &amp;quot;belt_back_right&amp;quot; // where the key will spawn on the Ai.&lt;br /&gt;
*&amp;quot;name_attach6&amp;quot; &amp;quot;door_key&amp;quot; // this gives &#039;attach6&#039; arg the name &amp;quot;door_key&amp;quot; and is the name the arg &amp;quot;used_by&amp;quot; will need, eg: &amp;quot;used_by&amp;quot; &amp;quot;door_key&amp;quot;&lt;br /&gt;
*&amp;quot;set inv_name on door_key&amp;quot; &amp;quot;Door key&amp;quot; // The name the key get when the play adds it to their inventory.&lt;br /&gt;
*&amp;quot;set name on door_key&amp;quot; &amp;quot;door_key&amp;quot; // here it gets a name to be used in the map in general.&lt;br /&gt;
&lt;br /&gt;
For more info on this method, see [[Attaching Props to AI]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The Bind Method&#039;&#039;. This lacks the animation finesse of def_attach, but does let you see the key in DR. The method is particularly helpful in, say, adding a second key to an AI in the back middle of a belt. The AI cannot use a bound key to open a locked door; the workaround is to fake it with &amp;quot;can_unlock&amp;quot; as discussed further below. Or to use bound keys mainly for items the AI will not attempt to open, such as hatches, duct covers, or chests.&lt;br /&gt;
&lt;br /&gt;
* Load a key entity&lt;br /&gt;
* Position where you want it in relation to the AI, and bind it to them (i.e., &amp;quot;bind&amp;quot; &amp;quot;&amp;lt;AIname&amp;gt;&amp;quot;)&lt;br /&gt;
* Add the spawnarg &amp;quot;bindToJoint&amp;quot; &amp;quot;Hips&amp;quot; (or another location like LeftHips_Dummy; see AI for list)&lt;br /&gt;
* Adjust existing spawnargs accordingly (that is, be sure the name and door&#039;s/chest&#039;s &amp;quot;used_by&amp;quot; match, if you aren&#039;t using a prefab chest with key). This is for the benefit of the player after pickpocketing the key; as stated above, the AI itself can&#039;t use it for unlocking.&lt;br /&gt;
&lt;br /&gt;
For more info on this method, see [[Attaching_Items]] and [[BindToJoint]].&lt;br /&gt;
&lt;br /&gt;
====Keys Carried by Player====&lt;br /&gt;
&lt;br /&gt;
With a door&#039;s key selected in your inventory and the door highlighted, you can...&lt;br /&gt;
* unlock it (which will also auto-open if enabled) by either frobbing it or hitting the Use key (typically U or Enter).&lt;br /&gt;
* lock (or relock) it via the Use key. Why do this? To avoid pursuit, or to lure guards into a room, and then lock them in (if they don&#039;t have a key or specific can_unlock powers). &lt;br /&gt;
&lt;br /&gt;
====Master Key for Testing====&lt;br /&gt;
&lt;br /&gt;
By default, ALL locks can be opened by any key named &#039;&#039;key_master&#039;&#039;. Just create a key in your map, name it &#039;&#039;key_master&#039;&#039; and it becomes a master key for use while testing. Add inv_map_start 1 to it so it is in the player inventory at game start. Remember to delete it when your mission is finished.&lt;br /&gt;
&lt;br /&gt;
====Automatically Removing Keys from Player Inventory After Use====&lt;br /&gt;
&lt;br /&gt;
If a fan mission has a lot of keys it can clog up the player inventory. If the key is single-use, it can be useful to automatically remove it from the player inventory after use.  Below is a way to do it using a simple setup and a generic script function that can be used for multiple doors.&lt;br /&gt;
You&#039;ll need the following entities, preferably set up near each other in your map:&lt;br /&gt;
* The door entity itself&lt;br /&gt;
* A trigger_count entity&lt;br /&gt;
* An atdm:target_callscriptfunction entity&lt;br /&gt;
* some random entity for the target_callscriptfunction to target (explanation below)&lt;br /&gt;
&lt;br /&gt;
The below diagram shows the spawnargs and targeting required for the setup:&lt;br /&gt;
[[File:Key remove2.png|left|thumb]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
The script being called (&#039;openDoor&#039;) is defined in fms/&amp;lt;mapname&amp;gt;/maps/&amp;lt;mapname&amp;gt;.script and looks like this:&lt;br /&gt;
&lt;br /&gt;
 void openDoor(entity target, entity door, entity callscriptfunction)&lt;br /&gt;
 {&lt;br /&gt;
     string keyName = door.getKey(&amp;quot;used_by&amp;quot;);&lt;br /&gt;
     entity key = sys.getEntity(keyName);&lt;br /&gt;
     $player1.replaceInvItem(key, $null_entity);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Explanation as follows:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;For the door:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;trigger_on_open&#039;&#039;&#039; spawnarg: The door is configured to trigger its targets when it opens&lt;br /&gt;
* target &#039;&#039;&#039;trigger_count&#039;&#039;&#039; entity: this is the entity that is triggered when the door is opened&lt;br /&gt;
* &#039;&#039;&#039;used_by&#039;&#039;&#039; spawnarg: This names the key entity required for unlocking the door&lt;br /&gt;
* The other spawnargs are just the usual for setting the door as locked and unpickable&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;trigger_count entity:&#039;&#039;&#039;&lt;br /&gt;
* When triggered, this entity will in turn trigger the script that removes the key from the player inventory.&lt;br /&gt;
* &#039;&#039;&#039;count&#039;&#039;&#039; spawnarg: This is set to 1 because we only want the key removal script called once - the first time the player opens the door.&lt;br /&gt;
* this entity targets the atdm:target_callscriptfunction, which contains details of the script to execute&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;atdm:target_callscriptfunction entity:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;call&#039;&#039;&#039; spawnarg: This is the name of the script function to call&lt;br /&gt;
* &#039;&#039;&#039;foreach&#039;&#039;&#039; spawnarg: This version of the script event provides access to &#039;activator&#039;, or the entity that triggered it (in this case, the door).  Using that information we can obtain the key name. See [[A to Z Scripting: Ways of calling a script#target_callscriptfunction|here]] for details.&lt;br /&gt;
* &#039;&#039;&#039;target any static entity&#039;&#039;&#039;: For this version of the script event to work, the target_callscriptfunction entity needs to target something.  This can be any static entity in the map (i.e. one that won&#039;t get removed or anything). I usually just target the nearest entity (e.g. a light or a lamp, or a model).  This provides no functionality in the context of this tutorial, it just satisfies the conditions of the script event.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The script:&#039;&#039;&#039;&lt;br /&gt;
* Pretty self-explanatory.  The script gets the name of the key entity via the &#039;&#039;&#039;used_by&#039;&#039;&#039; spawnarg on the door, retrieves the key entity, and then replaces it in the player inventory with a null entity, effectively removing it.&lt;br /&gt;
* Any door can use this script as its generic (although they will need their own trigger_count and target_callscriptfunction entities)&lt;br /&gt;
&lt;br /&gt;
===Lockpicks===&lt;br /&gt;
&#039;&#039;by Baddcog&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
There are two lock pick types.&lt;br /&gt;
*&#039;&#039;&#039;s&#039;&#039;&#039;=snake&lt;br /&gt;
*&#039;&#039;&#039;t&#039;&#039;&#039;=triangular&lt;br /&gt;
&lt;br /&gt;
A lock can be set with many pins. Each pin has a click sequence and each needs a designated lockpick type (see above). Keep in mind that the lockpicking in The Darkmod is much more involved than in T2 or T3. The player has to listen to sounds or watch a handle or lockbar to know when a lock is pin is picked.&lt;br /&gt;
&lt;br /&gt;
This means that authors can be very evil and really frustrate the player, in which case their missions will probably not be played. So be nice to the player and don&#039;t waste your time. Use simple locks for the most part and save complicated locks for important sections and to build tension. Don&#039;t make the player have 20 pins to pick all with different lockpicks. In most cases 1 or 2 pins will suffice and it isn&#039;t necessary to use both lockpicks on every lock.&lt;br /&gt;
Also try to include a lock lever on lockboxes or chests, door handles will rotate as the pins are being picked. This gives the player visual clues to help with the picking (and essential in noisy environments where you can&#039;t hear the clicks.)&lt;br /&gt;
IMO this system is a huge leap foward for lockpicking but also has the ability to completely frustrate the player as stated above. Keep this in mind when designing your lockpick systems.&lt;br /&gt;
&lt;br /&gt;
These props go on the door itself, or the lid of a chest, eg,&lt;br /&gt;
*&#039;&#039;&#039;lock_pins&#039;&#039;&#039; 1327&lt;br /&gt;
*&#039;&#039;&#039;lock_picktype&#039;&#039;&#039; stts&lt;br /&gt;
&lt;br /&gt;
The lock_pins property specifies how many pins each lockpicktype has.&lt;br /&gt;
The lockpick_type property specifies how many times the player has to switch picks and which pick they have to use. You can see there must always be an equal number of lock_pins and lock_picktypes specified&lt;br /&gt;
&lt;br /&gt;
So looking at the example above we have lockpick_type s(snake), t(triangular), t(triangular), and s(snake). The player will have to use these lockpicks in this order. Once the snake lockpick&#039;s pins are open the player can advance to the triangular pick and so forth.&lt;br /&gt;
5 is added to every click sequence so 5 is the minimum click pattern even if you set it to 0.&lt;br /&gt;
In the example above the lockpins specify in order which pick types have how many pins, so the s pick has 1 + 5 = 6 clicks, the t pick has 8 and so on.&lt;br /&gt;
The above is a difficult lock and to avoid annoying the player it is best only used rarely on a special lock like an important big vault door. Ordinary footlockers and common doors can be just 1 or 2 click sequences, eg, lock_pins 2 and lock_picktype t means the player uses one pick and listens for the end of one sequence of 7 clicks.&lt;br /&gt;
&lt;br /&gt;
lockpick_rotate - is placed on the door. It is the amount the visible rotating handle or pin rotates while picking. For a rotating handle or lockbar normally ignore this and leave the default. During lockpicking it oscillates and progresses to the normal full turn of the handle. Example 0 45 0.&lt;br /&gt;
&lt;br /&gt;
lockpick_translate - is placed on the door. It is the amount the visible handle or pin moves in a straight line while picking. Use this if you have eg, a lockbar that you want to move in a straight line and not rotate, eg sliding catch. Example 0 -5 0&lt;br /&gt;
&lt;br /&gt;
By default, doors are pickable. If you don&#039;t set up the above lockpick spawnargs then it can&#039;t be picked. So there is normally no need to enable lockpicking - just set up the above spawnargs. There is a &#039;&#039;pickable&#039;&#039; spawnarg set to 1 by default. If set to 0 then the door becomes unpickable. But hard to think of an application except in testing or perhaps a special custom situation where it is switched by script perhaps.&lt;br /&gt;
&lt;br /&gt;
===Open, Partially Open, or Closed Door at Game Start===&lt;br /&gt;
&lt;br /&gt;
By default, doors are closed at game start. If you want a door to be already open or partially open then do the following.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note well: Create all doors in their &#039;&#039;closed&#039;&#039; position. Adjust as follows and they will automatically be at the open position when game starts.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Already Open Rotating Door:&lt;br /&gt;
* Select the door.&lt;br /&gt;
* Select the entity inspector&lt;br /&gt;
* Check &#039;&#039;show inherited properties&#039;&#039;&lt;br /&gt;
* Select the &#039;&#039;open&#039;&#039; property&lt;br /&gt;
* Edit the value to 1 in the input box below and tick the check button&lt;br /&gt;
* The door will now be fully open at game start.&lt;br /&gt;
&lt;br /&gt;
* If you want it only partly open:&lt;br /&gt;
* Make sure its &#039;&#039;open&#039;&#039; property is set to 1 as above.&lt;br /&gt;
* Right click the entity inspector and select &#039;&#039;add property&#039;&#039; &lt;br /&gt;
* Click the + sign on the left of the top line where atdm:mover_door is listed to open the folder. (if atdm:mover_door is not listed then the entity was likely changed from eg, func_static. If so, save the map and reload to update the add property list)&lt;br /&gt;
*  scroll down, select &#039;&#039;start_rotate&#039;&#039; then click {{ok}}&lt;br /&gt;
* This adds it to the property list.&lt;br /&gt;
* Now select &#039;&#039;start_rotate&#039;&#039; in the property list.&lt;br /&gt;
* Edit the bottom line of the input box &#039;&#039;below&#039;&#039; the properties window to the angle you want in the same form as described in the &#039;&#039;Rotate Direction and Open Angle&#039;&#039; section. So for example, to have a door that has a fully open default &#039;&#039;rotate&#039;&#039; value of 0 90 0 to start only half open you would give it a &#039;&#039;start_rotate&#039;&#039; value of 0 45 0. &lt;br /&gt;
* In a similar way add the property &#039;&#039;first_frob_open&amp;quot;.&lt;br /&gt;
* Set it to 1 and a partly open door should then open fully on the first frob.&lt;br /&gt;
* Set it to 0 and a partly open door should close on the first frob.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Already Open Sliding Door:&lt;br /&gt;
* Select the door.&lt;br /&gt;
* Select the entity inspector&lt;br /&gt;
* Check &#039;&#039;show inherited properties&#039;&#039;&lt;br /&gt;
* Select the &#039;&#039;open&#039;&#039; property&lt;br /&gt;
* Edit the value to 1 in the input box below and click {{check}} or press {{key-enter}}&lt;br /&gt;
* The door will now be fully open at game start.&lt;br /&gt;
&lt;br /&gt;
* If you want it only partly open:&lt;br /&gt;
* Right click the entity inspector and select &#039;&#039;add property&#039;&#039; &lt;br /&gt;
* Make sure its &#039;&#039;open&#039;&#039; property is set to 1&lt;br /&gt;
* Click the + sign on the left of the top line where atdm:mover_door is listed to open the folder.&lt;br /&gt;
*  scroll down, select &#039;&#039;start_position&#039;&#039; then click OK. (if atdm:mover_door is not listed then the entity was likely changed from eg, func_static. If so, save the map and reload to update the add property list)&lt;br /&gt;
* This adds it to the property list.&lt;br /&gt;
* Now select &#039;&#039;start_position&#039;&#039; in the property list.&lt;br /&gt;
* Edit the bottom line of the input box &#039;&#039;below&#039;&#039; the properties window to the position you want in the same form as described in the &#039;&#039;Sliding (Translation) Amount and Direction&#039;&#039; section. So for example, to have a door that has a fully open default &#039;&#039;translate&#039;&#039; value of 0 50 0 to start only half open you would give it a &#039;&#039;start_position&#039;&#039; value of 0 25 0.&lt;br /&gt;
* In a similar way add the property &#039;&#039;first_frob_open&amp;quot;.&lt;br /&gt;
* Set it to 1 and a partly open door should then open fully on the first frob.&lt;br /&gt;
* Set it to 0 and a partly open door should close on the first frob.&lt;br /&gt;
&lt;br /&gt;
===Rotation Centre, Pivot, Hinge point===&lt;br /&gt;
&lt;br /&gt;
The centre of rotation of a door is at the origin point of its entity and the door rotates with reference to the orientation of that origin point, not the world map. See &#039;&#039;Rotate Direction...&#039;&#039; for more about that. This section only deals with the &#039;&#039;position&#039;&#039; of the rotation centre in the door.&lt;br /&gt;
&lt;br /&gt;
Model Door Centre of Rotation:&amp;lt;br&amp;gt;&lt;br /&gt;
The centre of rotation of a model door cannot be changed within Dark Radiant. Because a model door rotates around the centre &#039;spine&#039; of its back edge this will cause clipping (penetration into solid) as in this example (where the door is set to open to 89 degrees for clarity):&amp;lt;BR&amp;gt;[[Image:modelClipping.jpg]]&amp;lt;BR&amp;gt; So care is needed with placement. You will not normally position a door right next to a wall as in the example but against a shallow frame so clipping will barely be noticeable but either way it can be fixed. You can correct it by adding a translation (see &#039;&#039;Sliding (Translation) Directions&#039;&#039;) value of half the door width in the direction of the door handle. This will gently move the door out as it rotates to clear any solid on that side as in this diagram:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:DoorClip.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
Half a door width will typically be about 2. Any &#039;attachments&#039; such as door handles will still synchronize with the door movement whether the door is rotating, sliding, or both.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Brush Door Centre of Rotation:&amp;lt;br&amp;gt;&lt;br /&gt;
The centre of rotation of a brush door &#039;&#039;can&#039;&#039; be changed. The default origin point of a brush is at its centre. Therefore a default rotating brush door will rotate around its centre when you first create it. So, mappers will commonly need to move that rotation point to a corner or even to some other offset position for example, for an openable window using the door function.&lt;br /&gt;
&lt;br /&gt;
Put simply, to move the rotation point of a brush door you need to move the entity origin relative to the brush(es.)&lt;br /&gt;
&lt;br /&gt;
Moving the entity origin (centre of rotation) relative to a brush door:&lt;br /&gt;
&lt;br /&gt;
* Select the brush door&lt;br /&gt;
* Select &#039;&#039;Vertices mode&#039;&#039; (default shortcut key is {{key|name=V}} or button on top toolbar &#039;Select Vertices&#039;)&lt;br /&gt;
* Drag the door&#039;s entity origin to the point where you want the door to rotate. This should be on the corner on the leading edge side (the side to where the door is opening.) to avoid clipping as in this diagram....&lt;br /&gt;
[[Image:getCorner.jpg]]&lt;br /&gt;
* You should now find that door rotates around that point.&lt;br /&gt;
&lt;br /&gt;
===Rotate Direction and Open Angle===&lt;br /&gt;
&lt;br /&gt;
By default, rotating doors open anti-clockwise (viewed from above) by 90 degrees from the start orientation. If you want to change this edit the &#039;&#039;rotate&#039;&#039; property in the entity inspector. Don&#039;t confuse this &#039;&#039;rotate&#039;&#039; property with the &#039;&#039;rotation&#039;&#039; property. In the entity inspector remember that to see the inherited rotate property you must check the box &#039;Show inherited properties&#039;.&lt;br /&gt;
&lt;br /&gt;
The three values shown in the rotate property are degrees from the closed position around Y Z X (absolute map axes Front, Top, Side views in DR&#039;s ortho view.)&lt;br /&gt;
&lt;br /&gt;
* Positive Y = Open clockwise (Dark Radiant grid front view, looking north)&lt;br /&gt;
* Negative Y = Open anti-clockwise (Dark Radiant grid front view, looking north)&lt;br /&gt;
&lt;br /&gt;
* Positive Z = Open anti-clockwise (Dark Radiant grid top view, looking down)&lt;br /&gt;
* Negative Z = Open clockwise (Dark Radiant grid top view, looking down)&lt;br /&gt;
&lt;br /&gt;
* Positive X = Open anti-clockwise (Dark Radiant grid side view, looking west)&lt;br /&gt;
* Negative X = Open clockwise (Dark Radiant grid side view, looking west)&lt;br /&gt;
&lt;br /&gt;
There is a problem when you come to rotations that are not around the main Y Z X axes of the map, for instance a drawbridge that lowers down to the south east. You might think you can combine Y Z X values to get the result you want - and this can be done (for south east use 45 45 90) but it is a bit of a kludge and the drawbridge twists eccentrically as it lowers (though it arrives correctly!)&lt;br /&gt;
&lt;br /&gt;
The values are in the range -179 to +180. Positive values give an anti-clockwise opening rotation (looking down from above) and negative values give a clockwise opening rotation. The value 180 is unique in that it continues in an anti-clockwise rotation when closing rather than returning clockwise so might be used if you can think of some object that might need such a motion when frobbed!&lt;br /&gt;
&lt;br /&gt;
Edit the rotate value by selecting it and using the input box at the bottom and clicking the check(tick) button. That will change the angle the door will open to. Note that the line with the original default of 0 90 0 will still be there but your new entry will be added on a separate line and that is the one that will work in the game. CAUTION: when adjusting later make sure you have your new line selected and not the original! If you do it will appear to change but your first setting will remain unaltered.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
* 0 90 0 = Opens anti-clockwise round the entity&#039;s &#039;vertical&#039; to 90 degrees - typical default vertical door.&lt;br /&gt;
* 0 0 90 = Lowers a drawbridge from the entity &#039;vertical&#039; to horizontal.&lt;br /&gt;
* 0 0 -45 = Opens clockwise by 45 degrees viewed from the east side. This might suit a skylight in a sloping roof.&lt;br /&gt;
&lt;br /&gt;
&#039;rotate&#039; cannot be combined with translate motions (see [[#Sliding (Translation) Amount and Direction]]) in one door; you need to bind one door to another and link they by targetting one to the other. By that means you can produce exotic and useful motions. A door opening against an upward-sloping floor can thus have a &#039;&#039;lifting hinge&#039;&#039; and raise up slightly to clear the floor; a door can rotate towards you and slide back to one side very effectively.&lt;br /&gt;
&lt;br /&gt;
===Sliding (Translation) Amount and Direction===&lt;br /&gt;
&lt;br /&gt;
By default a Dark Mod door will rotate open. For most sliding doors you want to stop them rotating as well as make them slide. You cannot delete (remove) the &#039;&#039;rotate&#039;&#039; property - you have to set the &#039;&#039;rotate&#039;&#039; property to 0 0 0 to stop a door rotating (see &#039;&#039;Rotate Direction and Open Angle&#039;&#039;.)&lt;br /&gt;
&lt;br /&gt;
Now edit the &#039;&#039;translate&#039;&#039; property value by selecting it (remember to have inherited properties box checked) and using the input box at the bottom and clicking the check(tick) button. That will change the distance the door will slide to. Note that the line with the original default of 0 0 0 will still be there but your new entry will be added on a separate line and that is the one that will work in the game. CAUTION: when adjusting later make sure you have your new line selected and not the original! If you do it will appear to change but your first setting will remain unaltered.&lt;br /&gt;
&lt;br /&gt;
Typically (but not always) you will want your sliding door to slide the width of the door. The three values in the translate property by default are 0 0 0 and are X Y Z &#039;&#039;absolute map&#039;&#039; values (irrespective of door orientation) where:&lt;br /&gt;
&lt;br /&gt;
* Positive X = Slide East (Right side of Dark Radiant grid in top view)&lt;br /&gt;
* Negative X = Slide West (Left side of Dark Radiant grid in top view)&lt;br /&gt;
* Positive Y = Slide North (top of Dark Radiant grid in top view)&lt;br /&gt;
* Negative Y = Slide South (bottom of Dark Radiant grid in top view)&lt;br /&gt;
* Positive Z = Slide Up (Top of Dark Radiant grid in side views)&lt;br /&gt;
* Negative Z = Slide Down (Bottom of Dark Radiant grid in side views)&lt;br /&gt;
&lt;br /&gt;
So for a 50 unit wide door you want to slide fully to the east you would use 50 0 0 for the translate property values. A 100 unit portcullis sliding vertically up would need 0 0 100 to be fully raised.&lt;br /&gt;
&lt;br /&gt;
=== Doors Collision/Push Behaviour ===&lt;br /&gt;
Doors push all entities by default, except for the player. Doors will also stop moving when anything blocks their movement. However, this default behaviour can be changed by setting appropriate spawnargs:&lt;br /&gt;
&lt;br /&gt;
Set &#039;&#039;&#039;push_player&#039;&#039;&#039; to &#039;&#039;&#039;1&#039;&#039;&#039; to let the player be pushed by this door:&lt;br /&gt;
 &amp;quot;push_player&amp;quot;  &amp;quot;1&amp;quot;  // Push the player too (default is off)&lt;br /&gt;
&lt;br /&gt;
By default &#039;&#039;&#039;stop_when_blocked&#039;&#039;&#039; is set to 1 and if a door is blocked by an entity then even if the entity is removed afterwards, the door stays where it is. The next frob will close the door.&lt;br /&gt;
&lt;br /&gt;
Set &#039;&#039;&#039;stop_when_blocked&#039;&#039;&#039; to &#039;&#039;&#039;0&#039;&#039;&#039; to prevent the door from ending the opening sequence when anything blocks its way. It will still pause - but continue to open if the block is removed.&lt;br /&gt;
 &amp;quot;stop_when_blocked&amp;quot;   &amp;quot;0&amp;quot;  // door keeps moving after being blocked (default is off)&lt;br /&gt;
With this setting, doors will still stop at blocking entities (the player, for instance), but will continue to move when the entity moves out of the way.&lt;br /&gt;
&lt;br /&gt;
There is another spawnarg which stops a door pushing a moveable. Apply this to the &#039;&#039;moveable&#039;&#039;, not the door...&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;notPushable&amp;quot;   &amp;quot;1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Door Sounds===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are multiple ways to put sounds on doors.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_open&#039;&#039; &amp;lt;br&amp;gt; &lt;br /&gt;
Sound is triggered as the door begins to open.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_opened&#039;&#039; &amp;lt;br&amp;gt; &lt;br /&gt;
Sound is triggered when the door finishes opening. Defaults to &amp;quot;nosound&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_move&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
The sound plays while the door moves.  Defaults to &amp;quot;nosound&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_close&#039;&#039;  &amp;lt;br&amp;gt;&lt;br /&gt;
Sound is triggered as the door finishes closing.&lt;br /&gt;
&lt;br /&gt;
The following sounds should be left on the default sound in most cases so players clearly know what is going on:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_locked&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
The sound played when a player or an AI tries to open a locked door.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_unlock string&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
The sound played when a door is unlocked.&lt;br /&gt;
&lt;br /&gt;
You can silence any of these sounds by setting the following properties as shown:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_open nosound&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;snd_close nosound&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Don&#039;t just use a dash - as it seems to cause a sound of its own.&lt;br /&gt;
&lt;br /&gt;
===Sound Propagation through Doors and Doorways===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This information will change significantly with the release of 2.0.  See&#039;&#039; [[Controlling Sound Loss Across Portals]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The sound volume reduction to the player (ie, the sound the player hears) is fixed and constant in a cvar which adds a distance factor to the original sound. It is recommended that you do not change that because it will affect other FMs. Currently there is no way to change the way that sound to the player is reduced through doors and doorways.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sound propagation to AI, eg, impact sounds or guard yells is treated separately:&lt;br /&gt;
&lt;br /&gt;
Sound propagation to AI relies on visportals. For details study [[Sound Propagation: Part 1]] and [[Sound Propagation: Part 2]] as well as [[Visportals]] This tutorial will just cover the relevant sound and sound propagation &#039;&#039;properties&#039;&#039; of doors. If you set the &#039;&#039;show inherited properties&#039;&#039; box in the entity inspector you can see them as described here.&lt;br /&gt;
&lt;br /&gt;
Remember, the following have no effect on what the player hears through a door or doorway.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;loss_open&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Drop in sound volume in dB propagated to AI (not player) when going through an open door. (default 1dB)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;loss_closed&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Drop in sound volume in dB propagated to AI (not player) when going through a closed door. (default 15dB) You would want to set this very high to block all sound with a thick door but very low for a barred gate for example.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;loss_double_open&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Drop in sound volume in dB propagated to AI (not player) when going through double doors when only one is open. (default 1dB)&lt;br /&gt;
&lt;br /&gt;
There are also various sound properties for lockpicking:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;snd_lockpick_pin_1 through 14&#039;&#039; and &#039;&#039;snd_lockpick_pin_success&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Allowing the Player to Interrupt Door Motion===&lt;br /&gt;
&lt;br /&gt;
The door property &#039;&#039;interruptable&#039;&#039; determines whether a door can be stopped by frobbing while it is opening or closing. It is enabled (i.e., set to 1) by default. Then the player, by frobbing to start the normal opening, then frobbing again to interrupt, can open a door to any position, e.g., slightly ajar to peek through. Another frob will begin closing, and so on with any additional frobs to stop/reverse-direction.&lt;br /&gt;
&lt;br /&gt;
Be aware that an rotating-style door, when left ajar, will subsequently open or close more slowly than normal in an angular-velocity sense. It instead takes the same time as a full (uninterrupted) opening or closing would take in seconds, as given by &#039;&#039;move_time&#039;&#039; discussed next.&lt;br /&gt;
&lt;br /&gt;
===Speed of Door Opening and Closing===&lt;br /&gt;
&lt;br /&gt;
Rotating Door Speed:&amp;lt;br&amp;gt;&lt;br /&gt;
The time a rotating door takes to open or close is set in the &#039;&#039;move_time&#039;&#039; property, no matter what its maximum open angle may be. So with rotation set at, say, 150 degrees the door just opens faster than at, say, 80 degrees. To change this value, make sure the door is selected then...&lt;br /&gt;
&lt;br /&gt;
* Right click the entity inspector and check &#039;&#039;show inherited properties&#039;&#039;&lt;br /&gt;
* Scroll down, select &#039;&#039;move_time&#039;&#039;&lt;br /&gt;
* Edit the second line of the input box &#039;&#039;below&#039;&#039; the properties window to the time you want.&lt;br /&gt;
* The time is in seconds and decimal fractions can be used. The default is currently 1.75 seconds.&lt;br /&gt;
&lt;br /&gt;
Sliding Door Speed:&amp;lt;br&amp;gt;&lt;br /&gt;
The speed of a sliding door is set in the &#039;&#039;translate_speed&#039;&#039; property. To add this, make sure the door is selected then...&lt;br /&gt;
&lt;br /&gt;
* Right click the entity inspector and check &#039;&#039;show inherited properties&#039;&#039;&lt;br /&gt;
* Scroll down, select &#039;&#039;translate_speed&#039;&#039;&lt;br /&gt;
* Edit the second line of the input box &#039;&#039;below&#039;&#039; the properties window to the speed you want.&lt;br /&gt;
* The speed is in Dark Radiant grid units per second.&lt;br /&gt;
* The default is 0 and if set to this then the door slides open in one second whatever the distance, great or small.&lt;br /&gt;
* CAUTION: It is assumed &#039;&#039;translate&#039;&#039; has been changed from its default value of 0 0 0. If not, a non-zero &#039;&#039;translate_speed&#039;&#039; may cause problems.&lt;br /&gt;
&lt;br /&gt;
===Visportals and Doors===&lt;br /&gt;
&lt;br /&gt;
A visportal face surrounded by solid at its edges and in contact with a door is closed when the door is closed and enabled when the door is open. In most cases you will place a visportal in contact with a working door unless you can see through the door (such as a true glass door or barred gate*.) For full details see [[Visportals]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;*As of 2.0 it is possible to make visportals that remain transparent when closed for gates and windows.  See&#039;&#039; [[Controlling Sound Loss Across Portals]]&lt;br /&gt;
&lt;br /&gt;
==Auto-Closing/Opening Doors==&lt;br /&gt;
Doors that automatically close after being open for some time are easy to setup: Each frobmover entity supports these spawnargs:&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;auto_close_time&amp;quot;:Set this to something &amp;gt;= 0 to let the mover automatically close (again) after this time when being fully opened (measured in seconds). Defaults to -1, which means &#039;do not autoclose&#039;. The event is also activated when the mover starts at the open position at map start.&lt;br /&gt;
;&amp;quot;auto_open_time&amp;quot;:&amp;quot;Set this to something &amp;gt;= 0 to let the mover automatically open (again) after this time when being fully closed (measured in seconds). Defaults to -1, which means &#039;do not autoopen&#039;. The event is also activated when the mover starts at the closed position at map start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Before auto_close_time and the AI Door Management spawnargs next were provided, a more laborious method was used to auto-close doors as if AI were closing doors behind them. Hit &amp;quot;Expand&amp;quot; to review it.&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;I have one door that I particularly want the AI to close as there is a bit of frame lag inside if not. So I set this up and it works good as an auto-closing door - not as good as a true AI closing door as it will auto close when the player goes through as well but it does look very effective to see AI going through and closing the door behind them. Not tested exhaustively so I don&#039;t know if there could be any downside. Here&#039;s what to do....&lt;br /&gt;
&lt;br /&gt;
First a quick summary to make it more clear:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;A trigger_relay is used both as a relay AND carries a stim. We put the trigger_relay with its stim in the path of the open door. The door has a response property. When it opens and contacts the stim its response is to send a signal back to the relay. The relay pauses then closes the door...&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* First, optionally give your door a suitable name like autodoor1, whatever.&lt;br /&gt;
* Copy that name to the clipboard.&lt;br /&gt;
&lt;br /&gt;
Next we need a relay with a delay:&lt;br /&gt;
&lt;br /&gt;
* Create entity &amp;gt; darkmod &amp;gt; trigger_relay&lt;br /&gt;
&lt;br /&gt;
* Place it roughly at the position the door will be at when open and to be on the safe side 3/4th of the way to the far end of the door (not the hinge end) to give max distance from the close door.&lt;br /&gt;
&lt;br /&gt;
* Add the property &#039;target&#039; and paste in the door name you just copied.&lt;br /&gt;
&lt;br /&gt;
* Give the relay itself a name, eg, autoDoor_relay_1, and copy that name to the clipboard, you&#039;ll need that too in a bit.&lt;br /&gt;
&lt;br /&gt;
* Add the property delay and the value 3 - this is the delay in seconds before the door will close; 3 seems about right but 2 might be worth a try because to that 3 is added a random value between 0 to 0.5 seconds from the Time Interval we entered for the stim firings.&lt;br /&gt;
&lt;br /&gt;
* Add the property &#039;wait&#039; and the value 3. This is the time before it can work again in seconds. If you set it too low then in theory the door might trigger again but in this situation I don&#039;t think it&#039;s possible. Too long, eg, one minute, and it won&#039;t work if the AI goes back through the door before then. If this value is -1 then the whole thing will only work ONCE so might be used for an AI who goes through once, closes it behind him, but you don&#039;t want it to be an autodoor thereafter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That&#039;s the relay, now we add a stim to it:&lt;br /&gt;
&lt;br /&gt;
* Still with the trigger relay selected, go to {{menu|Entity|Stim/Response}}&lt;br /&gt;
&lt;br /&gt;
* Custom stim tab.&lt;br /&gt;
&lt;br /&gt;
* Click Add stim type, select the new custom stim type you just made at the bottom of the list and type in eg, autoDoorStim at top right in the input box.&lt;br /&gt;
&lt;br /&gt;
* Click the stim tab and the little drop down arrow against the &#039;type&#039; selector at bottom left and you should see your new custom stim name. Select it.&lt;br /&gt;
&lt;br /&gt;
* Select the new autoDoorStim in the list and on the right you need only type in the radius box 15.0 There is quite a lot of room for error. I had it working on 10 and also on 25. The value should be less than the distance to the closed door else it will trigger open! But no so small that the door might not reach it.&lt;br /&gt;
&lt;br /&gt;
* Select the check box for Time Interval and enter 500 (millisecs.) This is so it doesn&#039;t keep firing more frequently than is necessary. This stim will be firing all through your mission whether the door is used or not so if you had dozens of these then maybe it would affect performance. Too big a number and there may be a long delay before the door shuts - but it will be random depending on the next time the stim happens to fire. We&#039;ll control the delay we want more precisely later.&lt;br /&gt;
&lt;br /&gt;
* Click {{ok}} to confirm it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That&#039;s the stim set up, now for the response to it which is put on the door....&lt;br /&gt;
&lt;br /&gt;
* Select the doorm, then use {{menu|Entity|Stim/response}} and select the response tab.&lt;br /&gt;
&lt;br /&gt;
* Click the little drop down arrow against the &#039;type&#039; selector at bottom left and you should see your new custom stim name. Select it.&lt;br /&gt;
&lt;br /&gt;
* Right click in the big &#039;&#039;Response Effects&#039;&#039; box on the bottom right of the panel.&lt;br /&gt;
&lt;br /&gt;
* Add New Effect and you should get a default &#039;Activate Response&#039; response added to the list. Double click it.&lt;br /&gt;
&lt;br /&gt;
* In the Effect selector at the stop select &#039;Trigger&#039;&lt;br /&gt;
&lt;br /&gt;
* in the Target box, paste in the name of the relay you copied or you can select it from the list at the little arrow.&lt;br /&gt;
&lt;br /&gt;
* Leave the Activator box empty.&lt;br /&gt;
&lt;br /&gt;
* Click {{apply}} and then {{ok}} on the main S &amp;amp; R panel bottom right.&lt;br /&gt;
&lt;br /&gt;
It should now work. No need to wait for an AI, just frob the door and watch it close itself. If not, check the position of the stim brush is close to where the door stops when open.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==AI Door management==&lt;br /&gt;
&lt;br /&gt;
By default AI will open doors and close them behind them. Here are some spawnargs &#039;&#039;&#039;on the door&#039;&#039;&#039; the mapper can use to modify that behaviour:&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;ai_should_not_handle&amp;quot; :If set to 1, AI will not attempt to handle it and add it to the forbidden areas (so that it doesn&#039;t try to path through). They might still walk through the door when it is open though. Useful if you have some special use door that you don&#039;t want the AI to operate.&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;ai_should_not_close&amp;quot; :If set to 1, AI will not close the door behind them unless it obstructs them.&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;canRemainOpen&amp;quot; :If set to 1, it&#039;s the same as &amp;quot;ai_should_not_close, with the added behavior that this is ignored if the door needs to be relocked, or the door is marked &amp;quot;shouldBeClosed&amp;quot;. &#039;&#039;&#039;(This spawnarg is available starting in TDM 2.02.)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Spawnargs &#039;&#039;&#039;on the AI&#039;&#039;&#039; that the mapper can use:&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;canCloseDoors&amp;quot; :Added in 2.12. Defaults to 1.  If set to 0, the AI will not close doors after passing through them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To get AI to unlock/relock specific doors there are two methods:&lt;br /&gt;
&lt;br /&gt;
1. Provide the AI with the key, as detailed in the def_attach method in [[#Keys_carried_by_AI]] above.&lt;br /&gt;
&lt;br /&gt;
2. Add the following spawnarg/value to the AI:&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;can_unlock&amp;quot; &#039;&#039;&amp;lt;doorname&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For additional doors on the same AI use &#039;&#039;can_unlock1 doorname&#039;, `can_unlock2 doorname&#039; etc. &#039;&#039;&#039;Do NOT use can_unlock_1.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If both (1) and (2) are used, then the AI can still go through the door after the player pickpockets the key. Otherwise, unless someone else opens the door for the AI, a typical sequence is that the AI checks their pockets for the missing key, stalls a bit at the locked door, and then (with now-better pathing algorithms) the AI uses an alternate route to the next path_corner, or &amp;quot;mentally&amp;quot; skips ahead in the route to next reachable node and goes there.&lt;br /&gt;
&lt;br /&gt;
===Door Handling Positions===&lt;br /&gt;
&lt;br /&gt;
It is also possible to set custom door handling positions for the AI. This is especially useful when the standard routine that lets the AI choose their standing positions while opening and closing the door fails, leaving them standing still, or circling around in front of the door helplessly.&lt;br /&gt;
&lt;br /&gt;
Place a movers &amp;gt; &#039;&#039;atdm:door_handling_position&#039;&#039; entity where you want the AI to stand while opening/closing the door from this side.&lt;br /&gt;
&lt;br /&gt;
On the door, you need to set the spawnarg &amp;quot;door_handle_position&amp;quot; &amp;quot;name_of_door_handling_position&amp;quot;. You can also place a &#039;&#039;door_handling_position&#039;&#039; on each side of the door, and the AI will automatically choose the right one. In this case, you need to set spawnargs with &amp;quot;door_handle_position_1&amp;quot; etc., and the corresponding names of the &#039;&#039;door_handling_position&#039;&#039; entities on the door.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;door_handling_position&#039;&#039; entities can also carry spawnargs that define the behaviour of the AI, which are useful for example for doors that can only be opened or locked from one side:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;ai_no_open&amp;quot;&#039;&#039;&#039; If set to &amp;quot;1&amp;quot;, the AI will not try to open the door from this side (but will still walk through when the door is already open).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;ai_no_close&amp;quot;&#039;&#039;&#039; If set to &amp;quot;1&amp;quot;, the AI will not attempt to close the door from this side.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;ai_no_unlock&amp;quot;&#039;&#039;&#039; If set &amp;quot;1&amp;quot;, the AI will not be able to unlock the door from this side, but still use it when it is not locked.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;ai_no_lock&amp;quot;&#039;&#039;&#039; If this is set &amp;quot;1&amp;quot;, the AI will not lock the door from this side.&lt;br /&gt;
&lt;br /&gt;
===Door Controllers===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Available in TDM 2.02+&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can design a door so it&#039;s operated by buttons or levers or switches (aka &#039;&#039;controllers&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
A controller is simply an entity that targets the door.  Typical examples of entities that can be used are:&lt;br /&gt;
&lt;br /&gt;
* Buttons: atdm:mover_button&lt;br /&gt;
* Levers: atdm:switch_rotate_lever&lt;br /&gt;
* Switch: atdm:mover_lever&lt;br /&gt;
* Lock: atdm:froblock. (See also next section)&lt;br /&gt;
&lt;br /&gt;
1. Set up the door in the normal manner. It can be a rotating door, a sliding door, a locked door, etc.&lt;br /&gt;
&lt;br /&gt;
2. Turn off the &amp;quot;frobable&amp;quot; spawnarg on the door. (&amp;quot;frobable&amp;quot; &amp;quot;0&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
3. Create a controller entity on each side of the door. If you&#039;re setting up a locked door using atdm:froblock, there&#039;s no need to put any locking information on the controllers. When the game starts, it will transfer any locking information from the door to the controllers.&lt;br /&gt;
&lt;br /&gt;
4. Give each controller the door as a target.&lt;br /&gt;
&lt;br /&gt;
Both the player and any AI that wants to use the door will use the controllers to operate it. Any key, &amp;quot;can_unlock&amp;quot;, or lockpick settings you would normally use at the door are now used at the controllers.&lt;br /&gt;
&lt;br /&gt;
Controllers and &#039;&#039;door_handling_position&#039;&#039; entities can be used on the same door, but in that situation the &#039;&#039;door_handling_position&#039;&#039; entities don&#039;t define where the AI stands to operate the door. They simply provide the &amp;quot;ai_no_*&amp;quot; spawnargs that define AI behavior on each side of the door.&lt;br /&gt;
&lt;br /&gt;
If you wish, you could provide a controller on only one side of the door instead of both sides. Note that, since the door is not frobable, the player won&#039;t be able to operate the door from the non-controller side.&lt;br /&gt;
&lt;br /&gt;
====More about Using a Separate &amp;quot;Froblock&amp;quot; Lock Plate====&lt;br /&gt;
&#039;&#039;by Geep, 2021-22&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Froblock, just discussed as a controller method, actually predated the controller concept in TDM. Here we recap that earlier context, with an alternative treatment of highlighting, and thoughts on texturing and usage.&lt;br /&gt;
&lt;br /&gt;
Suppose you want to have a lock plate (typically mounted on a door frame or wall) that opens a nearby door, where the door and lock plate highlight separately. A traditional way is to adapt the &#039;&#039;froblock&#039;&#039; method described under the &amp;quot;Making your own&amp;quot; section of [[Containers, Chests, etc.]]&lt;br /&gt;
&lt;br /&gt;
Basically, your door is the &amp;quot;chest lid&amp;quot; (of class atdm:mover_door) and your lock is the &amp;quot;chest body&amp;quot; (of class atdm:froblock). Set the properties as described in the wiki. There is a stock texture (darkmod/door/keyhole_metal_001) you can use to decorate a surface of your lock plate, or a patch on it. This method is probably most apt for small hatches and grates designed for the player alone, and with no handles, or non-turning handles attached with &amp;quot;bind&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===AI and &#039;non-frobable&#039; Doors===&lt;br /&gt;
Be aware that the &#039;frobable&#039; spawnarg only applies to the player, not AI.  If you set a door to be non-frobable (i.e. &#039;frobable&#039; &#039;0&#039;), AI can still operate it by interacting directly with it, even if it has a controller.  For example they will do this if:&lt;br /&gt;
&lt;br /&gt;
* they are fleeing or chasing the player&lt;br /&gt;
* the door has a controller but the AI can&#039;t reach it (for example the controller is on the other side of the door)&lt;br /&gt;
&lt;br /&gt;
The best way to mitigate this is to use Door Handling Position entities (see above) with the &#039;ai_no_open&#039; spawnarg set on them. &lt;br /&gt;
&lt;br /&gt;
===AI locking doors behind them===&lt;br /&gt;
&lt;br /&gt;
If one AI is involved (no one else is in the queue), he&#039;ll lock it behind him if he had to unlock it in the first place.&lt;br /&gt;
&lt;br /&gt;
Prior to TDM 1.08, if more than one AI is using the door at the same time (there&#039;s a queue), the first AI unlocks the door, and the last AI through will only lock it if it&#039;s marked &amp;quot;should_always_be_locked&amp;quot; AND they have a &amp;quot;can_unlock&amp;quot; for that door or they have a key for that door. The last AI to use the door doesn&#039;t know that the first AI found it locked, because that info is kept per AI, and not per door. &lt;br /&gt;
&lt;br /&gt;
Starting in TDM 1.08, if the first AI in a door queue found the door locked, that information is remembered by the door and the last AI through uses it to relock the door, as long as they have a &amp;quot;can_unlock&amp;quot; for that door or they have a key for that door.&lt;br /&gt;
&lt;br /&gt;
In the rare case where a door is set up to use door-handling position entities (necessary for AI to use sliding doors), either or both of those entities can have the &amp;quot;ai_no_lock&amp;quot; spawnarg, which means AI aren&#039;t allowed to lock the door from that side.&lt;br /&gt;
&lt;br /&gt;
==Initially Blocking a Door - Partially or Fully==&lt;br /&gt;
&#039;&#039;by Geep 2021&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Suppose you have a door that you want to start out either as unopenable, or able to open just a crack, then later, after something happens, be fully openable and operational. One method known to work:&lt;br /&gt;
&lt;br /&gt;
* Create a moveable object that the opening door runs into and tries to push.&lt;br /&gt;
* Arrange that the far side of the moveable object is jammed against some immovable worldspawn.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s two specific examples that use a wooden plank moveable:&lt;br /&gt;
&lt;br /&gt;
* In &amp;quot;Perilous Refuge&amp;quot;, a plank blocks the door leading out of the player&#039;s starting location, until the player carries it away. &lt;br /&gt;
* At the end of &amp;quot;Away0&amp;quot; (WIP 2021), the player tries to open a door. But if preconditions aren&#039;t met, the occupant seems to let the door open only a crack and complains. Blockage is done by an unseen plank resting on the floor hitting a knob of worldspawn. Preconditions met causes a &amp;quot;$plank.remove()&amp;quot; script call.&lt;br /&gt;
&lt;br /&gt;
Other methods that you might think would work but don’t:&lt;br /&gt;
&lt;br /&gt;
* Block with a func_static object, or an unjammed moveable with &amp;quot;notpushable 1&amp;quot; set. In both cases, the door travels through the object.&lt;br /&gt;
* In advance, &amp;quot;grab&amp;quot; an unjammed moveable to make it appear &amp;quot;solid&amp;quot; to the physics engine. (This was tested by having the player manipulate it; if it had worked, a “grabber” script call might suffice.)&lt;br /&gt;
* Dynamically change the door’s &amp;quot;rotate&amp;quot; limit from script using &amp;quot;setSpawnArg&amp;quot;; this function would only work before you spawn the door, not afterwards.&lt;br /&gt;
&lt;br /&gt;
(Others possibilities not yet tested:&lt;br /&gt;
&lt;br /&gt;
* Change &amp;quot;rotate&amp;quot; using the &amp;quot;setKey&amp;quot; script function; for some spawnargs this works even after spawn.&lt;br /&gt;
* Create a moveable and bind it to the world entity.&lt;br /&gt;
* If you are mainly interested in initially blocking an AI from using a door: it&#039;s possible that the AI re-reads the spawnargs for what doors it&#039;s allowed to open. Try adding a frob Response to the key (Entity -&amp;gt; Stim/Response... -&amp;gt; Response) with an effect that sets the “can_unlock&amp;quot; spawnarg on that AI to &amp;quot;-&amp;quot;.)&lt;br /&gt;
&lt;br /&gt;
==Controlling a Door by Scripting==&lt;br /&gt;
&#039;&#039;by Geep 2021&#039;&#039;&lt;br /&gt;
===If Unlocked===&lt;br /&gt;
&lt;br /&gt;
Simply use, for example with a door named &#039;&#039;door1&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 $door1.Open();&lt;br /&gt;
 ...&lt;br /&gt;
 $door1.Close();&lt;br /&gt;
&lt;br /&gt;
Alternatively, toggle it open or closed with:&lt;br /&gt;
&lt;br /&gt;
 $door1.frob();&lt;br /&gt;
&lt;br /&gt;
If the door has &amp;quot;interruptable 1&amp;quot; (which is the default with atdm:mover_door), you can also frob() it twice to leave it ajar. Interpose and adjust a sys.wait(...) to tune it.&lt;br /&gt;
===If Locked===&lt;br /&gt;
&lt;br /&gt;
You need to unlock it first. Changing the door&#039;s &amp;quot;locked&amp;quot; spawnarg value won&#039;t work. Instead you will use:&lt;br /&gt;
&lt;br /&gt;
 $door1.Unlock();&lt;br /&gt;
&lt;br /&gt;
But there are complications. By default, the door has spawnarg &amp;quot;open_on_unlock 1&amp;quot;. So, assuming you didn&#039;t change that, you&#039;d think unlocking the door would open it. But this spawnarg will be ignored if the gamer has global menu option &amp;quot;Open Doors on Unlock&amp;quot; set to Off. Assuming you want to reliably have the door open, do this:&lt;br /&gt;
&lt;br /&gt;
 $door1.Unlock(); // MAYBE will open door too.&lt;br /&gt;
 sys.wait(3); // If so, wait for door to fully open. Value may need adjusting based on door&#039;s speed&lt;br /&gt;
 $door1.Open(); // Otherwise, open it now.&lt;br /&gt;
&lt;br /&gt;
The wait is added, because otherwise, the opening begun by Unlock may be stopped by Open with the door only partially open. (Probably an alternative to using sys.wait here is to zero the door&#039;s &amp;quot;interruptable&amp;quot; spawnarg.) &lt;br /&gt;
&lt;br /&gt;
==Doors as Triggers==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;by Ishtvan &amp;amp; greebo&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Doors (or any binary frob mover, buttons, levers, etc) now have the option to [[Triggers|trigger]] their target on closing or opening. (For definition purposes, a button is defined as &amp;quot;closed&amp;quot; in the state when it starts out and &amp;quot;open&amp;quot; in the state you press it down to. I know that&#039;s a little non-intuitive, but it came from deriving from doors).&lt;br /&gt;
&lt;br /&gt;
New spawnargs on frob movers:&lt;br /&gt;
;&amp;quot;trigger_on_open&amp;quot; :If set to 1, this binary mover will trigger its targets when it starts out completely closed and is opened.&lt;br /&gt;
;&amp;quot;trigger_when_opened&amp;quot;:If set to 1, this binary mover will trigger its targets when it is completely opened. Code defaults to 0.&lt;br /&gt;
;&amp;quot;trigger_on_close&amp;quot;:If set to 1, this binary mover will trigger its targets when it completely closes after being open.&lt;br /&gt;
&lt;br /&gt;
== Suspicious Doors ==&lt;br /&gt;
&lt;br /&gt;
If you give a door the spawnarg &#039;&#039;&#039;&amp;quot;shouldBeClosed&amp;quot; &amp;quot;1&amp;quot;&#039;&#039;&#039;, then AI will treat it as suspicious if they find the door open.&lt;br /&gt;
&lt;br /&gt;
Doors with that spawnarg should work like this:&lt;br /&gt;
&lt;br /&gt;
- an AI opening the door knows he&#039;s not to become suspicious if he opened the door&lt;br /&gt;
&lt;br /&gt;
- nearby AI alerted by the open door will also not react if they can see the door, and can see the AI that opened it&lt;br /&gt;
&lt;br /&gt;
- AI who come upon the open door later probably won&#039;t be able to see the AI that opened it, so they&#039;ll treat it as suspicious&lt;br /&gt;
&lt;br /&gt;
- if the AI who opened the door comes upon the door later, and it&#039;s still open, and no one&#039;s touched it since he opened it, he&#039;ll see his name on the door and won&#039;t become suspicious. &amp;quot;Oh, crap. I forgot to close it earlier.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
- If an AI comes upon an open door that should be closed, he should close it whether he becomes suspicious or not.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Post TDM 2.00:&#039;&#039;&#039;&lt;br /&gt;
-  AI turn to look at a door they see opening.  The player can crack open a suspicious door to peek out w/o grabbing the attention of a nearby AI. After 5s, the AI will notice the cracked open door. Non-suspicious doors can be cracked open indefinitely w/o nearby AI noticing.&lt;br /&gt;
&lt;br /&gt;
==Slanted or Tilted Doors==&lt;br /&gt;
Slanted or tilted doors can be made as follows:&lt;br /&gt;
&lt;br /&gt;
1) Place your door, preferrably one of the prefab doors, which have a model door and model handle and all the rotation spawnargs pre-set.&lt;br /&gt;
&lt;br /&gt;
2) rotate and place the door+handle model into place you want it to be. Now, if you use the door in the game, the door will rotate around the world z-axis, and not the door model z-axis (which is rotated).&lt;br /&gt;
&lt;br /&gt;
3) to get the door to rotate around the door model z-axis, you must place a model (any model will do, and it can be placed anywhere in the map). Rotate the new model into the same orientation your door model was rotated, i.e. if you door is rotated 45 degrees around the x-axis, do the same rotation on the new model.&lt;br /&gt;
&lt;br /&gt;
4) bind the doors on the new model. This makes the doors start rotating along the new model origin (which is rotated the same way as the doors).&lt;br /&gt;
&lt;br /&gt;
5) working slanted door.&lt;br /&gt;
&lt;br /&gt;
Do note, that all the rotated objects need to be models (suspicion, not tested). You can export DR built stuff into a model using the DR ase exporter script. For custom doors, remember that the exporter places the model origin at the map origin if you do not choose the &amp;quot;place origin in the middle of the object&amp;quot; option.&lt;br /&gt;
&lt;br /&gt;
Also note that the AI probably cannot use slanted doors and might get stuck (suspicion, not tested).&lt;br /&gt;
&lt;br /&gt;
There is a link to a test map here:&lt;br /&gt;
http://forums.thedarkmod.com/topic/9082-newbie-darkradiant-questions/?p=395486&lt;br /&gt;
&lt;br /&gt;
==Skins: A Wide Variety of Door Textures==&lt;br /&gt;
&lt;br /&gt;
This is to remind you that as with many Dark Mod models, there is a wide range of extras skins (textures) available for door models. There are now several basic door entities of different sizes so choose your size first. Then enter the spawnarg: skin with any temporary value. Now select it and click the skin button at the bottom of Dark Radiant&#039;s Entity Inspector and you will find a large of range of skin textures from which to select to give you a choice of appearances for your door.&lt;br /&gt;
&lt;br /&gt;
==Extra Notes==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;func_darkmod_door&#039;&#039; is no longer used (just in case you come across it in the Dark Mod forums or wiki.) &#039;&#039;&#039;&amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt;&#039;&#039;&#039; is the entity to use.&lt;br /&gt;
&lt;br /&gt;
{{tutorial-editing}}&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=Doors&amp;diff=34100</id>
		<title>Doors</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=Doors&amp;diff=34100"/>
		<updated>2025-11-06T19:42:34Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: /* Keys */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{todo}}&lt;br /&gt;
&#039;&#039;Written by Fidcal&#039;&#039; &#039;&#039;edit Baddcog&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Quick Summary==&lt;br /&gt;
&lt;br /&gt;
Quick way to get an unlocked door in your map:&lt;br /&gt;
&lt;br /&gt;
* Insert one of the prefab doors complete with handles and select its skin property and click the button to change its skin appearance to whatever you want. Set any other properties you need.&lt;br /&gt;
&lt;br /&gt;
Alternatively,&lt;br /&gt;
&lt;br /&gt;
* Create a door from the entity list&lt;br /&gt;
* Use the &amp;quot;skin&amp;quot; spawnarg on the door to change its appearance. &lt;br /&gt;
* Create a handle from the entity list&lt;br /&gt;
* Add the &#039;&#039;door_handle&#039;&#039; property to the door and give it the name of the handle&lt;br /&gt;
* To the door handle add the value frob_peer and use the name of the door.&lt;br /&gt;
* To open clockwise, change the &#039;&#039;rotate&#039;&#039; property from &amp;lt;code&amp;gt;0 90 0&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;0 -90 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
This tutorial explains how to put doors into your map using Dark Radiant, as well as adjust them and their properties.&lt;br /&gt;
&lt;br /&gt;
The rest of this tutorial assumes that you have a basic understanding of using DarkRadiant. If you haven&#039;t done so, please go read the [[Dark Radiant Must Know Basic Intro]] article first.&lt;br /&gt;
&lt;br /&gt;
Additionally:&lt;br /&gt;
&lt;br /&gt;
* Up, down, right, and left in Dark Radiant&#039;s &#039;&#039;top&#039;&#039; orthoview are regarded here as the standard map directions of North, South, East, and West where useful for clarity.&lt;br /&gt;
* Where the term &#039;&#039;brush&#039;&#039; is used with a door it mostly also applies to a door made up of a group of brushes and/or patches.&lt;br /&gt;
* Where the term &#039;&#039;door&#039;&#039; is used it often will also apply to any object you wish to rotate when frobbed, for instance an openable window, box lid, or even more exotic objects that the imaginative mapper might conceive like a signal, engine part, toy, or whatever. So long as it needs to turn or slide just a fixed amount when frobbed then return when frobbed again then the following applies.&lt;br /&gt;
&lt;br /&gt;
==Door types==&lt;br /&gt;
&lt;br /&gt;
All tangible objects in Dark Mod are &#039;&#039;entities&#039;&#039;, having either a pre-made model shape or else brush/patch(es). So there are two ways to create a door in Dark Radiant: as a model door or a textured brush door (or a hybrid of the two).&lt;br /&gt;
&lt;br /&gt;
Models are ready made door objects but cannot within Dark Radiant (at the time of writing) be resized, rescaled, cropped or clipped whereas brushes are very flexible in that respect and can be worked into custom shapes for your map, including secret doors that blend into walls and other surfaces.&lt;br /&gt;
&lt;br /&gt;
Most of the current door models are found in two places along with the door handles.&lt;br /&gt;
*Model Viewer: doors created from here will be static in the world and have no props other than material type.&lt;br /&gt;
You can add any props to them to make them working doors. If nothing else it is a good place to view the different size and skin options for the doors.&lt;br /&gt;
*Entity List: most of the door models can be found here. These doors have properties already assigned so they are ready to be used. Only one base door of each type is listed, create the size/hinge count door you want (2 hinge doors have a &#039;no hinge&#039; skin). You can choose a skin for the door once it has been created in the editor with the &amp;quot;skin&amp;quot; spawnarg (use the model name of the door you want, taken from the model list, as its value). This is the easiest way to create a door. The same goes for door handles.&lt;br /&gt;
&lt;br /&gt;
Remember also that door functions may be applied to objects other than doors, such as openable windows, drawbridges, gates, etc. In fact, anything that needs a partial rotation or slide when frobbed then return when frobbed again, such as a signal device. Lockboxes and chests use similar properties.&lt;br /&gt;
&lt;br /&gt;
You can create one door/handle set and copy/paste it, but you need to take great care that all the name props are changed to match in each clone. Otherwise you get handles that fly off when a distant door moves, and handles that don&#039;t move.&lt;br /&gt;
&lt;br /&gt;
==Creating a Door==&lt;br /&gt;
&lt;br /&gt;
Put simply, to make a door you will be creating an &#039;entity with model&#039; or &#039;entity with brush&#039; or some variation thereof.&lt;br /&gt;
&lt;br /&gt;
===Creating a Model Door===&lt;br /&gt;
&lt;br /&gt;
There are several approaches to making a model door; the simplest is to create a door from the entity list; or create a door from the model viewer (good for static unusable prop doors).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Entity List&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
*Deselect everything in editor by hitting the Esc button&lt;br /&gt;
*Right-click an ortho view and select Create Entity&lt;br /&gt;
*Navigate to darkmod/movers/&#039;&#039;atdm:door_...&#039;&#039;, choose the door you want&lt;br /&gt;
*Click Add&lt;br /&gt;
*To change its appearance, add a &amp;quot;skin&amp;quot; spawnarg to the door, with the value being the model name of the door you want.&lt;br /&gt;
&lt;br /&gt;
You now have a workable door in your level.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Model Viewer&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Right click in the orthoview, select &#039;&#039;Create Model&#039;&#039; then &amp;lt;code&amp;gt;darkmod&amp;lt;/code&amp;gt; and select a door.&lt;br /&gt;
* Note that you can left drag the image in the &#039;&#039;Choose Model&#039;&#039; dialog to rotate it around.&lt;br /&gt;
* Click [[Image:Button ok.png]] and you have a static door.&lt;br /&gt;
* If you want to make it work (openable, frobbable) then:&lt;br /&gt;
** Select the entity inspector,&lt;br /&gt;
** Select the top classname line so it highlights&lt;br /&gt;
** Select the func_static line in the input box &#039;&#039;below&#039;&#039; the properties window.&lt;br /&gt;
** Edit &amp;lt;code&amp;gt;func_static&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt;&lt;br /&gt;
** Click {{check}} or press {{key-enter}}&lt;br /&gt;
&lt;br /&gt;
Alternatively you can do it the old way:&lt;br /&gt;
&lt;br /&gt;
* Create any temporary brush&lt;br /&gt;
* Right click in orthoview and select &amp;lt;code&amp;gt;Create Entity&amp;lt;/code&amp;gt; then &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Left lick the model name line in the entity inspector.&lt;br /&gt;
* Below it on the &#039;&#039;Entity Inspector&#039;&#039; panel you should now see a button &#039;Choose Model&#039;&lt;br /&gt;
* Left click it, select a door model from the darkmod group.&lt;br /&gt;
* Note that you can left drag the image in the &#039;&#039;Choose Model&#039;&#039; dialog to rotate it around.&lt;br /&gt;
* The temporary brush was deleted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In all three instances, you now have a working door with default properties. &lt;br /&gt;
&lt;br /&gt;
Name your door by adding the prop (or modifing it) to name &#039;&#039;My_Door_1&#039;&#039;. You can use any name that you feel is appropriate but all doors with handles attached &#039;&#039;must&#039;&#039; have their own specific name. Use the name My_Door_1 for your first attempt as it will be referenced when you get around to attaching handles (see below).&lt;br /&gt;
&lt;br /&gt;
To add a handle and other adjustments, see [[#Customising and Adjusting Door Properties]] below.&lt;br /&gt;
&lt;br /&gt;
===Creating a Textured Brush Door===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tip:&#039;&#039;&#039; If unsure of size then you might insert a temporary human AI first to get a sense of height.&lt;br /&gt;
&lt;br /&gt;
==== The simplest brush door: ====&lt;br /&gt;
&lt;br /&gt;
* Drag out a new brush to the size required, eg, a seven foot high door is 84&amp;quot; x 1.1 = about 90 units in Dark Radiant.&lt;br /&gt;
* Give it a door texture from the texture browser (or wall texture for a secret door)&lt;br /&gt;
* Right click in orthoview and select &#039;&#039;Create Entity&#039;&#039; then &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You now have a working door but it will rotate around its center. To move the rotation point to where you want the door hinges to be:&lt;br /&gt;
* Select the door and press &#039;v&#039; or the &#039;&#039;Select Vertices&#039;&#039; button to enter vertex editing mode. The door&#039;s origin will show up as a small green square in the middle of the brush.&lt;br /&gt;
* In top-down orthoview, move the origin from the center to the corner of the brush. This is easiest in drag mode (&#039;q&#039; or the &#039;&#039;Resize&#039;&#039; button), although you can use translate mode (&#039;w&#039; or the &#039;&#039;Translate&#039;&#039; button) by manually selecting the vertex first.&lt;br /&gt;
&lt;br /&gt;
==== Multi-brush doors: ====&lt;br /&gt;
&lt;br /&gt;
More complex multi-brush doors can be created using the [[Clipper]] tool, CSG, etc. - this is not covered in this tutorial. Then assign &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt; for that whole brush structure. Also you can collect various brushes positioned together in relation to one another as needed, select them all, then assign &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt; for the group. All the brushes will be children of the &amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt; entity and will rotate and be frobbable, etc. as one unit, as one door. To add further brushes or even model shapes later see the section on [[#Adding handles and other items to doors]].&lt;br /&gt;
&lt;br /&gt;
Name your door by adding the prop (or modifing it) to name My_Door_1. You can use any name that you feel is appropriate but all doors with handles attached must have their own specific name. Use the name My_Door_1 for your first attempt as it will be referenced when you get around to attaching handles (see below). (repeated from above in case you didn&#039;t choose to create a model door)&lt;br /&gt;
&lt;br /&gt;
=== Double Doors ===&lt;br /&gt;
Double doors are automatically recognised by the code when the doors are spawned. The prerequisite is that both doors are sharing/touching the same visportal. The spawnarg &#039;&#039;auto_setup_double_door&#039;&#039; (which defaults to &amp;quot;1&amp;quot;) will take care of setting up the open/lock peer relationship between the two doors. The doors will open/close and lock/unlock along with each other as a result.&lt;br /&gt;
&lt;br /&gt;
What happens behind the scenes: the doors are adding each other to their internal open_peer and lock_peer list, which causes the double doors to perform the same action when frobbed or used.&lt;br /&gt;
&lt;br /&gt;
Note that &#039;&#039;auto_setup_double_door&#039;&#039; will not set the frob_peer relationship, i.e. each door will frob-highlight on its own without highlighting the other door. You&#039;ll need to add that spawnarg manually if you want to highlight the entire double door as one.&lt;br /&gt;
&lt;br /&gt;
==Customising and Adjusting Door Properties==&lt;br /&gt;
&lt;br /&gt;
Handles, lockplates, etc. can be added to doors and door properties can be adjusted for rotation, sliding, locking, and more.&lt;br /&gt;
&lt;br /&gt;
Some of the door models have hinge plates and lockboxes that are reskinnable with a good variety of skins.&lt;br /&gt;
&lt;br /&gt;
===Door handles and other door attachments===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Summary: just add the property &#039;&#039;bind&#039;&#039; with the door&#039;s name to the attachment and position it where you want it on the door. If it&#039;s a &#039;&#039;atdm:mover_door_handle&#039;&#039; then it automatically will work as a handle but you can bind virtually anything.&#039;&#039;&#039;&lt;br /&gt;
You can add handles and other items to doors such that they move correctly with the door whether rotating, sliding, or both and even if the door is not vertical such as a skylight or trapdoor.&lt;br /&gt;
Handle models come in two types, &#039;&#039;single handles&#039;&#039; and &#039;&#039;double handles&#039;&#039;. A single handle is one sided, this means the handle will be inside the door or outside the door, but not both. A double handle has a lever on the inside of the door and a handle on the outside of the door. Each has benefits.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;Single door handles&#039;&#039;&#039;&#039;&#039;:&lt;br /&gt;
Single door handles can be used on a static door, a door that&#039;s just for show that no AI&#039;s or the player can use. In this case you should just create a door handle from the model viewer, it will be static and have no properties such as scripts. It is for looks only.  Note that TDM is trying to establish the expectation that decorative doors that cannot be opened do not have handles (though not all maps follow this).&lt;br /&gt;
&lt;br /&gt;
I will call this &#039;&#039;multiple handles&#039;&#039;, see more below.&lt;br /&gt;
&lt;br /&gt;
These can also be useful on brush doors created in the editor that may be very thin or very wide.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;Double door handles&#039;&#039;&#039;&#039;&#039;:&lt;br /&gt;
These are models have have a handle inside and outside. The bonus is that they only use one entity. Maps are limited to about 4,000 entities but when you count lights, AI, sound speakers, ect... you can run out of entities quickly on a large map. If you plan on building a large map this is the way to go, even in a small map they have benefits, namely that you only have to attach one handle per door.&lt;br /&gt;
&lt;br /&gt;
Whether you decide to use a single handle or a double handle you must first follow the instructions below and attach one handle first. If you choose a double handle, follow the instructions below and you are done. If you choose a single handle type follow the instructions then also follow the &#039;&#039;multiple handle&#039;&#039; instructions for the second handle.&lt;br /&gt;
&lt;br /&gt;
Both single and double handle types can be found in two places. The model viewer which will create a static model good for show, you can manually add props to make them work OR you can look in the entity browser.&lt;br /&gt;
Using a handle from the entity browser saves you a little bit of time as some props are already added, you just need to add the frob_peer names for the doors/handles and the door_handle name to the door.&lt;br /&gt;
&lt;br /&gt;
=== Adding a working model door handle===&lt;br /&gt;
&lt;br /&gt;
Quick summary:&lt;br /&gt;
* Create a model or brush handle and make it an &#039;&#039;atdm:mover_door_handle&#039;&#039; entity.&lt;br /&gt;
* Position it on your door.  Use the opposite side from the door&#039;s multicolor X-Y-Z indicator (highlight the door to see it) if it&#039;s not obvious which side it goes on.  &lt;br /&gt;
* &#039;&#039;&#039;Bind&#039;&#039;&#039; the handle to the door (bind &amp;lt;doorname&amp;gt;)&lt;br /&gt;
* It should now be a working handle though may need adjustments of rotation etc. see later. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Important: read preceding section on door handle types and performance issues first.&lt;br /&gt;
&lt;br /&gt;
This works with both a model door and a brush door:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rotation&#039;&#039;&#039;:&lt;br /&gt;
* By default the door handle entity rotates &#039;&#039;anti-clockwise&#039;&#039; (looked at from the front) then springs back. A &#039;&#039;double handle&#039;&#039; model is OK but two singles (see &#039;&#039;Multiple door handles&#039;&#039; below) need more care as only one is the functioning entity and the other is just attached to it. So anti-clockwise is fine for a door with its hinge on the left and the handle on the right - the handle will rotate down then spring back. If you put the functioning door handle on the other side you will have to change the default &#039;&#039;rotate&#039;&#039; property from -45 0 0 to 45 0 0. &#039;&#039;&#039;&#039;&#039;Therefore it is easier to generally put this handle on the side of the door where the hinge is on the left and the non-functioning attachment handle on the other side.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*If your door only needs one handle, eg, a cupboard door, and from outside its hinge is on the right then you will need to change the &#039;&#039;rotate&#039;&#039; property of the handle as described above.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;The functioning handle entity:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
* Create an entity door handle (movers folder) or create a brush or model handle and assign it the entity &#039;&#039;atdm:mover_door_handle&#039;&#039;.&lt;br /&gt;
* Position it where you wish on your door.&lt;br /&gt;
* &#039;&#039;&#039;Bind&#039;&#039;&#039; the handle to the door, by adding the &amp;quot;bind&amp;quot; spawnarg to the handle.&lt;br /&gt;
&lt;br /&gt;
You now have a working door handle with default properties.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Multiple door handles&#039;&#039;&#039;:&lt;br /&gt;
Now that you&#039;ve got a handle attached to one side of the door it is time to add one to the other side (unless you used a double handle).&lt;br /&gt;
* Create the new handle. The single handles come in left and right persuasions. A door needs a left facing handle on one side and a right facing handle on the other, so if you have already added the left handle create a right handle and line it up on the other side of the door.&lt;br /&gt;
* Name this handle. I prefer to keep a naming convention for each door and it&#039;s respective handles, it makes things alot easier. The door is named &#039;&#039;&#039;My_Door_1&#039;&#039;&#039;, the first handle is named &#039;&#039;&#039;My_Handle_1&#039;&#039;&#039; so name the second handle &#039;&#039;&#039;My_Handle_1_1&#039;&#039;&#039;. This will make it stay with the first handle in the entity list. This is important to keep organized. If you name it My_Handle_2 then when you get to another door named My_Door_2 you&#039;ll be confused.&lt;br /&gt;
* Place and &#039;&#039;&#039;bind&#039;&#039;&#039; that handle to your door.&lt;br /&gt;
&lt;br /&gt;
You now have two single door handles on either side of the door that rotate together as if they were physically attached.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add a brush to a brush door&#039;&#039;&#039;:&lt;br /&gt;
* Select the new brush &#039;&#039;and&#039;&#039; the brush door all together; &#039;&#039;the entity &#039;&#039;&#039;must&#039;&#039;&#039; be selected &#039;&#039;&#039;last&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
* Use {{menu|Edit|Reparent primitives}}. This ensures the parent entity adopts the new item(s).&lt;br /&gt;
* If you have trouble selecting them in the orthoview because other brushes, etc. get selected then try in the camera view or as a last resort move them temporarily to an open area (but keep them in the same positions relative to each other.) Use {{key-shift}}+{{LMB}} on new item(s) then {{key-shift}}+{{LMB}} on main entity. Once they are all selected, use the {{menu|Edit|Reparent primitives}}.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add &#039;&#039;model&#039;&#039; static items&#039;&#039;&#039;: knockers, hinges, static handles etc. to a &#039;&#039;Model Door&#039;&#039;:&lt;br /&gt;
* Select item&lt;br /&gt;
* Right click in orthoview and select &#039;&#039;Create Entity&#039;&#039; then &amp;lt;code&amp;gt;entity func_static&amp;lt;/code&amp;gt;&lt;br /&gt;
* Position it where you wish on your door.&lt;br /&gt;
* To synchronize this with your particular door you need to add the property &#039;&#039;bind&#039;&#039; and the individual door name to the brush entity. To do this...&lt;br /&gt;
** Select the model door.&lt;br /&gt;
** In the entity inspector, select the &#039;&#039;name&#039;&#039; line&lt;br /&gt;
** Select the bottom line in the input box &#039;&#039;below&#039;&#039; the properties window.&lt;br /&gt;
** Copy the name&lt;br /&gt;
** Deselect the door with {{key-esc}}&lt;br /&gt;
** Select the brush entity&lt;br /&gt;
** Add a property &amp;quot;bind&amp;quot; to it.&lt;br /&gt;
** Change the value of the property by pasting in the door name&lt;br /&gt;
** Click {{check}} or press {{key-enter}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add &#039;&#039;brush&#039;&#039; static items&#039;&#039;&#039;: knockers, hinges, static handles to a Model Door:&lt;br /&gt;
* This method is not ideal but it seems to work OK.&lt;br /&gt;
* Select the brush.&lt;br /&gt;
* Right click in orthoview and select Create Entity then &#039;&#039;atdm:mover_door_handle&#039;&#039;&lt;br /&gt;
* Position it where you wish on your door.&lt;br /&gt;
&lt;br /&gt;
To synchronize this with your particular door you need to add the property &#039;&#039;door_handle&#039;&#039; on the door, and give as the value the name of the brush you just created.&lt;br /&gt;
&lt;br /&gt;
This brush turns like a handle. To stop it:&lt;br /&gt;
&lt;br /&gt;
* Adding &#039;&#039;rotate 0 0 0&#039;&#039; or disabling the handle script won&#039;t help.&lt;br /&gt;
* Add a real working handle (as in the section above &#039;&#039;To add a working model door handle...&#039;&#039; and it must be added LAST.)&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want too see a real working handle added maybe try another tiny brush with the handle function and hide it inside the door?&lt;br /&gt;
&lt;br /&gt;
===Locking Doors===&lt;br /&gt;
&lt;br /&gt;
To lock a door check the &#039;&#039;show inherited properties&#039;&#039; in the entity inspector for a &#039;&#039;atdm:mover_door&#039;&#039; entity and you should see the &#039;&#039;locked&#039;&#039; property. Select it and in the input box below the properties you can change its value:&lt;br /&gt;
&lt;br /&gt;
* 0 = unlocked (default)&lt;br /&gt;
* 1 = locked&lt;br /&gt;
&lt;br /&gt;
If locked it will require an entity that is associated with it to be able to act as a key to unlock it.&lt;br /&gt;
&lt;br /&gt;
Currently door handles on locked doors will rotate when frobbed, they will bounce back though and the door will stay locked until unlocked.&lt;br /&gt;
&lt;br /&gt;
===Keys===&lt;br /&gt;
&lt;br /&gt;
Assigning specific keys to specific doors is simple.&lt;br /&gt;
&lt;br /&gt;
* It is recommended that you create an existing key entity. These keys have all required props, they just need to be named.&lt;br /&gt;
&lt;br /&gt;
Alternatively you can create a key from the Model Viewer and want it to be useable&lt;br /&gt;
* Make sure it has the properties:&lt;br /&gt;
 useable 1 [so it can be used by the door]&lt;br /&gt;
 frobable 1&lt;br /&gt;
 inv_name &amp;lt;unique name&amp;gt;&lt;br /&gt;
 inv_category Keys&lt;br /&gt;
 inv_target player1&lt;br /&gt;
 inv_icon guis/assets/hud/inventory_icons/&amp;lt;icon name&amp;gt;&lt;br /&gt;
 inv_stackable 0 or 1 where 1 can be used on all copies of the same key so they show as one entry in the inventory with a total.&lt;br /&gt;
&lt;br /&gt;
Add to the door the property &amp;lt;code&amp;gt;used_by&amp;lt;/code&amp;gt; with the name of the key as the value. Multiple keys can open the same door by using several &amp;lt;tt&amp;gt;used_by&amp;lt;/tt&amp;gt; spawnargs:&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;used_by&amp;quot;  &amp;quot;doorkey_1&amp;quot;&lt;br /&gt;
 &amp;quot;used_by1&amp;quot; &amp;quot;doorkey_2&lt;br /&gt;
&lt;br /&gt;
==== Keys Carried by AI ====&lt;br /&gt;
&lt;br /&gt;
So you have a door and you have a guard AI and you want the guard to be able to open/close/lock the door, but you also want the player to be able to pickpocket the key. Keys can be attached to AI in two ways.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The Def_Attach Method&#039;&#039;. This method is the best one for doors that you expect the AI to operate. It uses spawnargs to spawn the key at game start.&lt;br /&gt;
&lt;br /&gt;
*&amp;quot;def_attach6&amp;quot; &amp;quot;atdm:prop_silverkey&amp;quot; // the entity to spawn - in this case a key.&lt;br /&gt;
*&amp;quot;pos_attach6&amp;quot; &amp;quot;belt_back_right&amp;quot; // where the key will spawn on the Ai.&lt;br /&gt;
*&amp;quot;name_attach6&amp;quot; &amp;quot;door_key&amp;quot; // this gives &#039;attach6&#039; arg the name &amp;quot;door_key&amp;quot; and is the name the arg &amp;quot;used_by&amp;quot; will need, eg: &amp;quot;used_by&amp;quot; &amp;quot;door_key&amp;quot;&lt;br /&gt;
*&amp;quot;set inv_name on door_key&amp;quot; &amp;quot;Door key&amp;quot; // The name the key get when the play adds it to their inventory.&lt;br /&gt;
*&amp;quot;set name on door_key&amp;quot; &amp;quot;door_key&amp;quot; // here it gets a name to be used in the map in general.&lt;br /&gt;
&lt;br /&gt;
For more info on this method, see [[Attaching Props to AI]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The Bind Method&#039;&#039;. This lacks the animation finesse of def_attach, but does let you see the key in DR. The method is particularly helpful in, say, adding a second key to an AI in the back middle of a belt. The AI cannot use a bound key to open a locked door; the workaround is to fake it with &amp;quot;can_unlock&amp;quot; as discussed further below. Or to use bound keys mainly for items the AI will not attempt to open, such as hatches, duct covers, or chests.&lt;br /&gt;
&lt;br /&gt;
* Load a key entity&lt;br /&gt;
* Position where you want it in relation to the AI, and bind it to them (i.e., &amp;quot;bind&amp;quot; &amp;quot;&amp;lt;AIname&amp;gt;&amp;quot;)&lt;br /&gt;
* Add the spawnarg &amp;quot;bindToJoint&amp;quot; &amp;quot;Hips&amp;quot; (or another location like LeftHips_Dummy; see AI for list)&lt;br /&gt;
* Adjust existing spawnargs accordingly (that is, be sure the name and door&#039;s/chest&#039;s &amp;quot;used_by&amp;quot; match, if you aren&#039;t using a prefab chest with key). This is for the benefit of the player after pickpocketing the key; as stated above, the AI itself can&#039;t use it for unlocking.&lt;br /&gt;
&lt;br /&gt;
For more info on this method, see [[Attaching_Items]] and [[BindToJoint]].&lt;br /&gt;
&lt;br /&gt;
====Keys Carried by Player====&lt;br /&gt;
&lt;br /&gt;
With a door&#039;s key selected in your inventory and the door highlighted, you can...&lt;br /&gt;
* unlock it (which will also auto-open if enabled) by either frobbing it or hitting the Use key (typically U or Enter).&lt;br /&gt;
* lock (or relock) it via the Use key. Why do this? To avoid pursuit, or to lure guards into a room, and then lock them in (if they don&#039;t have a key or specific can_unlock powers). &lt;br /&gt;
&lt;br /&gt;
====Master Key for Testing====&lt;br /&gt;
&lt;br /&gt;
By default, ALL locks can be opened by any key named &#039;&#039;key_master&#039;&#039;. Just create a key in your map, name it &#039;&#039;key_master&#039;&#039; and it becomes a master key for use while testing. Add inv_map_start 1 to it so it is in the player inventory at game start. Remember to delete it when your mission is finished.&lt;br /&gt;
&lt;br /&gt;
====Automatically Removing Keys from Player Inventory After Use====&lt;br /&gt;
&lt;br /&gt;
If a fan mission has a lot of keys it can clog up the player inventory. If the key is single-use, it can be useful to automatically remove it from the player inventory after use.  Below is a way to do it using a simple setup and a generic script function that can be used for multiple doors.&lt;br /&gt;
You&#039;ll need the following entities, preferably set up near each other in your map:&lt;br /&gt;
* The door entity itself&lt;br /&gt;
* A trigger_count entity&lt;br /&gt;
* An atdm:target_callscriptfunction entity&lt;br /&gt;
&lt;br /&gt;
The below diagram shows the spawnargs and targeting required for the setup:&lt;br /&gt;
[[File:Key remove2.png|left|thumb]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
The script being called (&#039;openDoor&#039;) is defined in fms/&amp;lt;mapname&amp;gt;/maps/&amp;lt;mapname&amp;gt;.script and looks like this:&lt;br /&gt;
&lt;br /&gt;
 void openDoor(entity target, entity door, entity callscriptfunction)&lt;br /&gt;
 {&lt;br /&gt;
     string keyName = door.getKey(&amp;quot;used_by&amp;quot;);&lt;br /&gt;
     entity key = sys.getEntity(keyName);&lt;br /&gt;
     $player1.replaceInvItem(key, $null_entity);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Explanation as follows:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;For the door:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;trigger_on_open&#039;&#039;&#039; spawnarg: The door is configured to trigger its targets when it opens&lt;br /&gt;
* target &#039;&#039;&#039;trigger_count&#039;&#039;&#039; entity: this is the entity that is triggered when the door is opened&lt;br /&gt;
* &#039;&#039;&#039;used_by&#039;&#039;&#039; spawnarg: This names the key entity required for unlocking the door&lt;br /&gt;
* The other spawnargs are just the usual for setting the door as locked and unpickable&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;trigger_count entity:&#039;&#039;&#039;&lt;br /&gt;
* When triggered, this entity will in turn trigger the script that removes the key from the player inventory.&lt;br /&gt;
* &#039;&#039;&#039;count&#039;&#039;&#039; spawnarg: This is set to 1 because we only want the key removal script called once - the first time the player opens the door.&lt;br /&gt;
* this entity targets the atdm:target_callscriptfunction, which contains details of the script to execute&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;atdm:target_callscriptfunction entity:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;call&#039;&#039;&#039; spawnarg: This is the name of the script function to call&lt;br /&gt;
* &#039;&#039;&#039;foreach&#039;&#039;&#039; spawnarg: This version of the script event provides access to &#039;activator&#039;, or the entity that triggered it (in this case, the door).  Using that information we can obtain the key name. See [[A to Z Scripting: Ways of calling a script#target_callscriptfunction|here]] for details.&lt;br /&gt;
* &#039;&#039;&#039;target any static entity&#039;&#039;&#039;: For this version of the script event to work, the target_callscriptfunction entity needs to target something.  This can be any static entity in the map (i.e. one that won&#039;t get removed or anything). I usually just target the nearest entity (e.g. a light or a lamp, or a model).  This provides no functionality in the context of this tutorial, it just satisfies the conditions of the script event.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The script:&#039;&#039;&#039;&lt;br /&gt;
* Pretty self-explanatory.  The script gets the name of the key entity via the &#039;&#039;&#039;used_by&#039;&#039;&#039; spawnarg on the door, retrieves the key entity, and then replaces it in the player inventory with a null entity, effectively removing it.&lt;br /&gt;
* Any door can use this script as its generic (although they will need their own trigger_count and target_callscriptfunction entities)&lt;br /&gt;
&lt;br /&gt;
===Lockpicks===&lt;br /&gt;
&#039;&#039;by Baddcog&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
There are two lock pick types.&lt;br /&gt;
*&#039;&#039;&#039;s&#039;&#039;&#039;=snake&lt;br /&gt;
*&#039;&#039;&#039;t&#039;&#039;&#039;=triangular&lt;br /&gt;
&lt;br /&gt;
A lock can be set with many pins. Each pin has a click sequence and each needs a designated lockpick type (see above). Keep in mind that the lockpicking in The Darkmod is much more involved than in T2 or T3. The player has to listen to sounds or watch a handle or lockbar to know when a lock is pin is picked.&lt;br /&gt;
&lt;br /&gt;
This means that authors can be very evil and really frustrate the player, in which case their missions will probably not be played. So be nice to the player and don&#039;t waste your time. Use simple locks for the most part and save complicated locks for important sections and to build tension. Don&#039;t make the player have 20 pins to pick all with different lockpicks. In most cases 1 or 2 pins will suffice and it isn&#039;t necessary to use both lockpicks on every lock.&lt;br /&gt;
Also try to include a lock lever on lockboxes or chests, door handles will rotate as the pins are being picked. This gives the player visual clues to help with the picking (and essential in noisy environments where you can&#039;t hear the clicks.)&lt;br /&gt;
IMO this system is a huge leap foward for lockpicking but also has the ability to completely frustrate the player as stated above. Keep this in mind when designing your lockpick systems.&lt;br /&gt;
&lt;br /&gt;
These props go on the door itself, or the lid of a chest, eg,&lt;br /&gt;
*&#039;&#039;&#039;lock_pins&#039;&#039;&#039; 1327&lt;br /&gt;
*&#039;&#039;&#039;lock_picktype&#039;&#039;&#039; stts&lt;br /&gt;
&lt;br /&gt;
The lock_pins property specifies how many pins each lockpicktype has.&lt;br /&gt;
The lockpick_type property specifies how many times the player has to switch picks and which pick they have to use. You can see there must always be an equal number of lock_pins and lock_picktypes specified&lt;br /&gt;
&lt;br /&gt;
So looking at the example above we have lockpick_type s(snake), t(triangular), t(triangular), and s(snake). The player will have to use these lockpicks in this order. Once the snake lockpick&#039;s pins are open the player can advance to the triangular pick and so forth.&lt;br /&gt;
5 is added to every click sequence so 5 is the minimum click pattern even if you set it to 0.&lt;br /&gt;
In the example above the lockpins specify in order which pick types have how many pins, so the s pick has 1 + 5 = 6 clicks, the t pick has 8 and so on.&lt;br /&gt;
The above is a difficult lock and to avoid annoying the player it is best only used rarely on a special lock like an important big vault door. Ordinary footlockers and common doors can be just 1 or 2 click sequences, eg, lock_pins 2 and lock_picktype t means the player uses one pick and listens for the end of one sequence of 7 clicks.&lt;br /&gt;
&lt;br /&gt;
lockpick_rotate - is placed on the door. It is the amount the visible rotating handle or pin rotates while picking. For a rotating handle or lockbar normally ignore this and leave the default. During lockpicking it oscillates and progresses to the normal full turn of the handle. Example 0 45 0.&lt;br /&gt;
&lt;br /&gt;
lockpick_translate - is placed on the door. It is the amount the visible handle or pin moves in a straight line while picking. Use this if you have eg, a lockbar that you want to move in a straight line and not rotate, eg sliding catch. Example 0 -5 0&lt;br /&gt;
&lt;br /&gt;
By default, doors are pickable. If you don&#039;t set up the above lockpick spawnargs then it can&#039;t be picked. So there is normally no need to enable lockpicking - just set up the above spawnargs. There is a &#039;&#039;pickable&#039;&#039; spawnarg set to 1 by default. If set to 0 then the door becomes unpickable. But hard to think of an application except in testing or perhaps a special custom situation where it is switched by script perhaps.&lt;br /&gt;
&lt;br /&gt;
===Open, Partially Open, or Closed Door at Game Start===&lt;br /&gt;
&lt;br /&gt;
By default, doors are closed at game start. If you want a door to be already open or partially open then do the following.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note well: Create all doors in their &#039;&#039;closed&#039;&#039; position. Adjust as follows and they will automatically be at the open position when game starts.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Already Open Rotating Door:&lt;br /&gt;
* Select the door.&lt;br /&gt;
* Select the entity inspector&lt;br /&gt;
* Check &#039;&#039;show inherited properties&#039;&#039;&lt;br /&gt;
* Select the &#039;&#039;open&#039;&#039; property&lt;br /&gt;
* Edit the value to 1 in the input box below and tick the check button&lt;br /&gt;
* The door will now be fully open at game start.&lt;br /&gt;
&lt;br /&gt;
* If you want it only partly open:&lt;br /&gt;
* Make sure its &#039;&#039;open&#039;&#039; property is set to 1 as above.&lt;br /&gt;
* Right click the entity inspector and select &#039;&#039;add property&#039;&#039; &lt;br /&gt;
* Click the + sign on the left of the top line where atdm:mover_door is listed to open the folder. (if atdm:mover_door is not listed then the entity was likely changed from eg, func_static. If so, save the map and reload to update the add property list)&lt;br /&gt;
*  scroll down, select &#039;&#039;start_rotate&#039;&#039; then click {{ok}}&lt;br /&gt;
* This adds it to the property list.&lt;br /&gt;
* Now select &#039;&#039;start_rotate&#039;&#039; in the property list.&lt;br /&gt;
* Edit the bottom line of the input box &#039;&#039;below&#039;&#039; the properties window to the angle you want in the same form as described in the &#039;&#039;Rotate Direction and Open Angle&#039;&#039; section. So for example, to have a door that has a fully open default &#039;&#039;rotate&#039;&#039; value of 0 90 0 to start only half open you would give it a &#039;&#039;start_rotate&#039;&#039; value of 0 45 0. &lt;br /&gt;
* In a similar way add the property &#039;&#039;first_frob_open&amp;quot;.&lt;br /&gt;
* Set it to 1 and a partly open door should then open fully on the first frob.&lt;br /&gt;
* Set it to 0 and a partly open door should close on the first frob.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Already Open Sliding Door:&lt;br /&gt;
* Select the door.&lt;br /&gt;
* Select the entity inspector&lt;br /&gt;
* Check &#039;&#039;show inherited properties&#039;&#039;&lt;br /&gt;
* Select the &#039;&#039;open&#039;&#039; property&lt;br /&gt;
* Edit the value to 1 in the input box below and click {{check}} or press {{key-enter}}&lt;br /&gt;
* The door will now be fully open at game start.&lt;br /&gt;
&lt;br /&gt;
* If you want it only partly open:&lt;br /&gt;
* Right click the entity inspector and select &#039;&#039;add property&#039;&#039; &lt;br /&gt;
* Make sure its &#039;&#039;open&#039;&#039; property is set to 1&lt;br /&gt;
* Click the + sign on the left of the top line where atdm:mover_door is listed to open the folder.&lt;br /&gt;
*  scroll down, select &#039;&#039;start_position&#039;&#039; then click OK. (if atdm:mover_door is not listed then the entity was likely changed from eg, func_static. If so, save the map and reload to update the add property list)&lt;br /&gt;
* This adds it to the property list.&lt;br /&gt;
* Now select &#039;&#039;start_position&#039;&#039; in the property list.&lt;br /&gt;
* Edit the bottom line of the input box &#039;&#039;below&#039;&#039; the properties window to the position you want in the same form as described in the &#039;&#039;Sliding (Translation) Amount and Direction&#039;&#039; section. So for example, to have a door that has a fully open default &#039;&#039;translate&#039;&#039; value of 0 50 0 to start only half open you would give it a &#039;&#039;start_position&#039;&#039; value of 0 25 0.&lt;br /&gt;
* In a similar way add the property &#039;&#039;first_frob_open&amp;quot;.&lt;br /&gt;
* Set it to 1 and a partly open door should then open fully on the first frob.&lt;br /&gt;
* Set it to 0 and a partly open door should close on the first frob.&lt;br /&gt;
&lt;br /&gt;
===Rotation Centre, Pivot, Hinge point===&lt;br /&gt;
&lt;br /&gt;
The centre of rotation of a door is at the origin point of its entity and the door rotates with reference to the orientation of that origin point, not the world map. See &#039;&#039;Rotate Direction...&#039;&#039; for more about that. This section only deals with the &#039;&#039;position&#039;&#039; of the rotation centre in the door.&lt;br /&gt;
&lt;br /&gt;
Model Door Centre of Rotation:&amp;lt;br&amp;gt;&lt;br /&gt;
The centre of rotation of a model door cannot be changed within Dark Radiant. Because a model door rotates around the centre &#039;spine&#039; of its back edge this will cause clipping (penetration into solid) as in this example (where the door is set to open to 89 degrees for clarity):&amp;lt;BR&amp;gt;[[Image:modelClipping.jpg]]&amp;lt;BR&amp;gt; So care is needed with placement. You will not normally position a door right next to a wall as in the example but against a shallow frame so clipping will barely be noticeable but either way it can be fixed. You can correct it by adding a translation (see &#039;&#039;Sliding (Translation) Directions&#039;&#039;) value of half the door width in the direction of the door handle. This will gently move the door out as it rotates to clear any solid on that side as in this diagram:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:DoorClip.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
Half a door width will typically be about 2. Any &#039;attachments&#039; such as door handles will still synchronize with the door movement whether the door is rotating, sliding, or both.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Brush Door Centre of Rotation:&amp;lt;br&amp;gt;&lt;br /&gt;
The centre of rotation of a brush door &#039;&#039;can&#039;&#039; be changed. The default origin point of a brush is at its centre. Therefore a default rotating brush door will rotate around its centre when you first create it. So, mappers will commonly need to move that rotation point to a corner or even to some other offset position for example, for an openable window using the door function.&lt;br /&gt;
&lt;br /&gt;
Put simply, to move the rotation point of a brush door you need to move the entity origin relative to the brush(es.)&lt;br /&gt;
&lt;br /&gt;
Moving the entity origin (centre of rotation) relative to a brush door:&lt;br /&gt;
&lt;br /&gt;
* Select the brush door&lt;br /&gt;
* Select &#039;&#039;Vertices mode&#039;&#039; (default shortcut key is {{key|name=V}} or button on top toolbar &#039;Select Vertices&#039;)&lt;br /&gt;
* Drag the door&#039;s entity origin to the point where you want the door to rotate. This should be on the corner on the leading edge side (the side to where the door is opening.) to avoid clipping as in this diagram....&lt;br /&gt;
[[Image:getCorner.jpg]]&lt;br /&gt;
* You should now find that door rotates around that point.&lt;br /&gt;
&lt;br /&gt;
===Rotate Direction and Open Angle===&lt;br /&gt;
&lt;br /&gt;
By default, rotating doors open anti-clockwise (viewed from above) by 90 degrees from the start orientation. If you want to change this edit the &#039;&#039;rotate&#039;&#039; property in the entity inspector. Don&#039;t confuse this &#039;&#039;rotate&#039;&#039; property with the &#039;&#039;rotation&#039;&#039; property. In the entity inspector remember that to see the inherited rotate property you must check the box &#039;Show inherited properties&#039;.&lt;br /&gt;
&lt;br /&gt;
The three values shown in the rotate property are degrees from the closed position around Y Z X (absolute map axes Front, Top, Side views in DR&#039;s ortho view.)&lt;br /&gt;
&lt;br /&gt;
* Positive Y = Open clockwise (Dark Radiant grid front view, looking north)&lt;br /&gt;
* Negative Y = Open anti-clockwise (Dark Radiant grid front view, looking north)&lt;br /&gt;
&lt;br /&gt;
* Positive Z = Open anti-clockwise (Dark Radiant grid top view, looking down)&lt;br /&gt;
* Negative Z = Open clockwise (Dark Radiant grid top view, looking down)&lt;br /&gt;
&lt;br /&gt;
* Positive X = Open anti-clockwise (Dark Radiant grid side view, looking west)&lt;br /&gt;
* Negative X = Open clockwise (Dark Radiant grid side view, looking west)&lt;br /&gt;
&lt;br /&gt;
There is a problem when you come to rotations that are not around the main Y Z X axes of the map, for instance a drawbridge that lowers down to the south east. You might think you can combine Y Z X values to get the result you want - and this can be done (for south east use 45 45 90) but it is a bit of a kludge and the drawbridge twists eccentrically as it lowers (though it arrives correctly!)&lt;br /&gt;
&lt;br /&gt;
The values are in the range -179 to +180. Positive values give an anti-clockwise opening rotation (looking down from above) and negative values give a clockwise opening rotation. The value 180 is unique in that it continues in an anti-clockwise rotation when closing rather than returning clockwise so might be used if you can think of some object that might need such a motion when frobbed!&lt;br /&gt;
&lt;br /&gt;
Edit the rotate value by selecting it and using the input box at the bottom and clicking the check(tick) button. That will change the angle the door will open to. Note that the line with the original default of 0 90 0 will still be there but your new entry will be added on a separate line and that is the one that will work in the game. CAUTION: when adjusting later make sure you have your new line selected and not the original! If you do it will appear to change but your first setting will remain unaltered.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
* 0 90 0 = Opens anti-clockwise round the entity&#039;s &#039;vertical&#039; to 90 degrees - typical default vertical door.&lt;br /&gt;
* 0 0 90 = Lowers a drawbridge from the entity &#039;vertical&#039; to horizontal.&lt;br /&gt;
* 0 0 -45 = Opens clockwise by 45 degrees viewed from the east side. This might suit a skylight in a sloping roof.&lt;br /&gt;
&lt;br /&gt;
&#039;rotate&#039; cannot be combined with translate motions (see [[#Sliding (Translation) Amount and Direction]]) in one door; you need to bind one door to another and link they by targetting one to the other. By that means you can produce exotic and useful motions. A door opening against an upward-sloping floor can thus have a &#039;&#039;lifting hinge&#039;&#039; and raise up slightly to clear the floor; a door can rotate towards you and slide back to one side very effectively.&lt;br /&gt;
&lt;br /&gt;
===Sliding (Translation) Amount and Direction===&lt;br /&gt;
&lt;br /&gt;
By default a Dark Mod door will rotate open. For most sliding doors you want to stop them rotating as well as make them slide. You cannot delete (remove) the &#039;&#039;rotate&#039;&#039; property - you have to set the &#039;&#039;rotate&#039;&#039; property to 0 0 0 to stop a door rotating (see &#039;&#039;Rotate Direction and Open Angle&#039;&#039;.)&lt;br /&gt;
&lt;br /&gt;
Now edit the &#039;&#039;translate&#039;&#039; property value by selecting it (remember to have inherited properties box checked) and using the input box at the bottom and clicking the check(tick) button. That will change the distance the door will slide to. Note that the line with the original default of 0 0 0 will still be there but your new entry will be added on a separate line and that is the one that will work in the game. CAUTION: when adjusting later make sure you have your new line selected and not the original! If you do it will appear to change but your first setting will remain unaltered.&lt;br /&gt;
&lt;br /&gt;
Typically (but not always) you will want your sliding door to slide the width of the door. The three values in the translate property by default are 0 0 0 and are X Y Z &#039;&#039;absolute map&#039;&#039; values (irrespective of door orientation) where:&lt;br /&gt;
&lt;br /&gt;
* Positive X = Slide East (Right side of Dark Radiant grid in top view)&lt;br /&gt;
* Negative X = Slide West (Left side of Dark Radiant grid in top view)&lt;br /&gt;
* Positive Y = Slide North (top of Dark Radiant grid in top view)&lt;br /&gt;
* Negative Y = Slide South (bottom of Dark Radiant grid in top view)&lt;br /&gt;
* Positive Z = Slide Up (Top of Dark Radiant grid in side views)&lt;br /&gt;
* Negative Z = Slide Down (Bottom of Dark Radiant grid in side views)&lt;br /&gt;
&lt;br /&gt;
So for a 50 unit wide door you want to slide fully to the east you would use 50 0 0 for the translate property values. A 100 unit portcullis sliding vertically up would need 0 0 100 to be fully raised.&lt;br /&gt;
&lt;br /&gt;
=== Doors Collision/Push Behaviour ===&lt;br /&gt;
Doors push all entities by default, except for the player. Doors will also stop moving when anything blocks their movement. However, this default behaviour can be changed by setting appropriate spawnargs:&lt;br /&gt;
&lt;br /&gt;
Set &#039;&#039;&#039;push_player&#039;&#039;&#039; to &#039;&#039;&#039;1&#039;&#039;&#039; to let the player be pushed by this door:&lt;br /&gt;
 &amp;quot;push_player&amp;quot;  &amp;quot;1&amp;quot;  // Push the player too (default is off)&lt;br /&gt;
&lt;br /&gt;
By default &#039;&#039;&#039;stop_when_blocked&#039;&#039;&#039; is set to 1 and if a door is blocked by an entity then even if the entity is removed afterwards, the door stays where it is. The next frob will close the door.&lt;br /&gt;
&lt;br /&gt;
Set &#039;&#039;&#039;stop_when_blocked&#039;&#039;&#039; to &#039;&#039;&#039;0&#039;&#039;&#039; to prevent the door from ending the opening sequence when anything blocks its way. It will still pause - but continue to open if the block is removed.&lt;br /&gt;
 &amp;quot;stop_when_blocked&amp;quot;   &amp;quot;0&amp;quot;  // door keeps moving after being blocked (default is off)&lt;br /&gt;
With this setting, doors will still stop at blocking entities (the player, for instance), but will continue to move when the entity moves out of the way.&lt;br /&gt;
&lt;br /&gt;
There is another spawnarg which stops a door pushing a moveable. Apply this to the &#039;&#039;moveable&#039;&#039;, not the door...&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;notPushable&amp;quot;   &amp;quot;1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Door Sounds===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are multiple ways to put sounds on doors.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_open&#039;&#039; &amp;lt;br&amp;gt; &lt;br /&gt;
Sound is triggered as the door begins to open.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_opened&#039;&#039; &amp;lt;br&amp;gt; &lt;br /&gt;
Sound is triggered when the door finishes opening. Defaults to &amp;quot;nosound&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_move&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
The sound plays while the door moves.  Defaults to &amp;quot;nosound&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_close&#039;&#039;  &amp;lt;br&amp;gt;&lt;br /&gt;
Sound is triggered as the door finishes closing.&lt;br /&gt;
&lt;br /&gt;
The following sounds should be left on the default sound in most cases so players clearly know what is going on:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_locked&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
The sound played when a player or an AI tries to open a locked door.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_unlock string&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
The sound played when a door is unlocked.&lt;br /&gt;
&lt;br /&gt;
You can silence any of these sounds by setting the following properties as shown:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;snd_open nosound&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;snd_close nosound&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Don&#039;t just use a dash - as it seems to cause a sound of its own.&lt;br /&gt;
&lt;br /&gt;
===Sound Propagation through Doors and Doorways===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This information will change significantly with the release of 2.0.  See&#039;&#039; [[Controlling Sound Loss Across Portals]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The sound volume reduction to the player (ie, the sound the player hears) is fixed and constant in a cvar which adds a distance factor to the original sound. It is recommended that you do not change that because it will affect other FMs. Currently there is no way to change the way that sound to the player is reduced through doors and doorways.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sound propagation to AI, eg, impact sounds or guard yells is treated separately:&lt;br /&gt;
&lt;br /&gt;
Sound propagation to AI relies on visportals. For details study [[Sound Propagation: Part 1]] and [[Sound Propagation: Part 2]] as well as [[Visportals]] This tutorial will just cover the relevant sound and sound propagation &#039;&#039;properties&#039;&#039; of doors. If you set the &#039;&#039;show inherited properties&#039;&#039; box in the entity inspector you can see them as described here.&lt;br /&gt;
&lt;br /&gt;
Remember, the following have no effect on what the player hears through a door or doorway.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;loss_open&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Drop in sound volume in dB propagated to AI (not player) when going through an open door. (default 1dB)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;loss_closed&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Drop in sound volume in dB propagated to AI (not player) when going through a closed door. (default 15dB) You would want to set this very high to block all sound with a thick door but very low for a barred gate for example.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;loss_double_open&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Drop in sound volume in dB propagated to AI (not player) when going through double doors when only one is open. (default 1dB)&lt;br /&gt;
&lt;br /&gt;
There are also various sound properties for lockpicking:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;snd_lockpick_pin_1 through 14&#039;&#039; and &#039;&#039;snd_lockpick_pin_success&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Allowing the Player to Interrupt Door Motion===&lt;br /&gt;
&lt;br /&gt;
The door property &#039;&#039;interruptable&#039;&#039; determines whether a door can be stopped by frobbing while it is opening or closing. It is enabled (i.e., set to 1) by default. Then the player, by frobbing to start the normal opening, then frobbing again to interrupt, can open a door to any position, e.g., slightly ajar to peek through. Another frob will begin closing, and so on with any additional frobs to stop/reverse-direction.&lt;br /&gt;
&lt;br /&gt;
Be aware that an rotating-style door, when left ajar, will subsequently open or close more slowly than normal in an angular-velocity sense. It instead takes the same time as a full (uninterrupted) opening or closing would take in seconds, as given by &#039;&#039;move_time&#039;&#039; discussed next.&lt;br /&gt;
&lt;br /&gt;
===Speed of Door Opening and Closing===&lt;br /&gt;
&lt;br /&gt;
Rotating Door Speed:&amp;lt;br&amp;gt;&lt;br /&gt;
The time a rotating door takes to open or close is set in the &#039;&#039;move_time&#039;&#039; property, no matter what its maximum open angle may be. So with rotation set at, say, 150 degrees the door just opens faster than at, say, 80 degrees. To change this value, make sure the door is selected then...&lt;br /&gt;
&lt;br /&gt;
* Right click the entity inspector and check &#039;&#039;show inherited properties&#039;&#039;&lt;br /&gt;
* Scroll down, select &#039;&#039;move_time&#039;&#039;&lt;br /&gt;
* Edit the second line of the input box &#039;&#039;below&#039;&#039; the properties window to the time you want.&lt;br /&gt;
* The time is in seconds and decimal fractions can be used. The default is currently 1.75 seconds.&lt;br /&gt;
&lt;br /&gt;
Sliding Door Speed:&amp;lt;br&amp;gt;&lt;br /&gt;
The speed of a sliding door is set in the &#039;&#039;translate_speed&#039;&#039; property. To add this, make sure the door is selected then...&lt;br /&gt;
&lt;br /&gt;
* Right click the entity inspector and check &#039;&#039;show inherited properties&#039;&#039;&lt;br /&gt;
* Scroll down, select &#039;&#039;translate_speed&#039;&#039;&lt;br /&gt;
* Edit the second line of the input box &#039;&#039;below&#039;&#039; the properties window to the speed you want.&lt;br /&gt;
* The speed is in Dark Radiant grid units per second.&lt;br /&gt;
* The default is 0 and if set to this then the door slides open in one second whatever the distance, great or small.&lt;br /&gt;
* CAUTION: It is assumed &#039;&#039;translate&#039;&#039; has been changed from its default value of 0 0 0. If not, a non-zero &#039;&#039;translate_speed&#039;&#039; may cause problems.&lt;br /&gt;
&lt;br /&gt;
===Visportals and Doors===&lt;br /&gt;
&lt;br /&gt;
A visportal face surrounded by solid at its edges and in contact with a door is closed when the door is closed and enabled when the door is open. In most cases you will place a visportal in contact with a working door unless you can see through the door (such as a true glass door or barred gate*.) For full details see [[Visportals]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;*As of 2.0 it is possible to make visportals that remain transparent when closed for gates and windows.  See&#039;&#039; [[Controlling Sound Loss Across Portals]]&lt;br /&gt;
&lt;br /&gt;
==Auto-Closing/Opening Doors==&lt;br /&gt;
Doors that automatically close after being open for some time are easy to setup: Each frobmover entity supports these spawnargs:&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;auto_close_time&amp;quot;:Set this to something &amp;gt;= 0 to let the mover automatically close (again) after this time when being fully opened (measured in seconds). Defaults to -1, which means &#039;do not autoclose&#039;. The event is also activated when the mover starts at the open position at map start.&lt;br /&gt;
;&amp;quot;auto_open_time&amp;quot;:&amp;quot;Set this to something &amp;gt;= 0 to let the mover automatically open (again) after this time when being fully closed (measured in seconds). Defaults to -1, which means &#039;do not autoopen&#039;. The event is also activated when the mover starts at the closed position at map start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Before auto_close_time and the AI Door Management spawnargs next were provided, a more laborious method was used to auto-close doors as if AI were closing doors behind them. Hit &amp;quot;Expand&amp;quot; to review it.&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;I have one door that I particularly want the AI to close as there is a bit of frame lag inside if not. So I set this up and it works good as an auto-closing door - not as good as a true AI closing door as it will auto close when the player goes through as well but it does look very effective to see AI going through and closing the door behind them. Not tested exhaustively so I don&#039;t know if there could be any downside. Here&#039;s what to do....&lt;br /&gt;
&lt;br /&gt;
First a quick summary to make it more clear:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;A trigger_relay is used both as a relay AND carries a stim. We put the trigger_relay with its stim in the path of the open door. The door has a response property. When it opens and contacts the stim its response is to send a signal back to the relay. The relay pauses then closes the door...&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* First, optionally give your door a suitable name like autodoor1, whatever.&lt;br /&gt;
* Copy that name to the clipboard.&lt;br /&gt;
&lt;br /&gt;
Next we need a relay with a delay:&lt;br /&gt;
&lt;br /&gt;
* Create entity &amp;gt; darkmod &amp;gt; trigger_relay&lt;br /&gt;
&lt;br /&gt;
* Place it roughly at the position the door will be at when open and to be on the safe side 3/4th of the way to the far end of the door (not the hinge end) to give max distance from the close door.&lt;br /&gt;
&lt;br /&gt;
* Add the property &#039;target&#039; and paste in the door name you just copied.&lt;br /&gt;
&lt;br /&gt;
* Give the relay itself a name, eg, autoDoor_relay_1, and copy that name to the clipboard, you&#039;ll need that too in a bit.&lt;br /&gt;
&lt;br /&gt;
* Add the property delay and the value 3 - this is the delay in seconds before the door will close; 3 seems about right but 2 might be worth a try because to that 3 is added a random value between 0 to 0.5 seconds from the Time Interval we entered for the stim firings.&lt;br /&gt;
&lt;br /&gt;
* Add the property &#039;wait&#039; and the value 3. This is the time before it can work again in seconds. If you set it too low then in theory the door might trigger again but in this situation I don&#039;t think it&#039;s possible. Too long, eg, one minute, and it won&#039;t work if the AI goes back through the door before then. If this value is -1 then the whole thing will only work ONCE so might be used for an AI who goes through once, closes it behind him, but you don&#039;t want it to be an autodoor thereafter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That&#039;s the relay, now we add a stim to it:&lt;br /&gt;
&lt;br /&gt;
* Still with the trigger relay selected, go to {{menu|Entity|Stim/Response}}&lt;br /&gt;
&lt;br /&gt;
* Custom stim tab.&lt;br /&gt;
&lt;br /&gt;
* Click Add stim type, select the new custom stim type you just made at the bottom of the list and type in eg, autoDoorStim at top right in the input box.&lt;br /&gt;
&lt;br /&gt;
* Click the stim tab and the little drop down arrow against the &#039;type&#039; selector at bottom left and you should see your new custom stim name. Select it.&lt;br /&gt;
&lt;br /&gt;
* Select the new autoDoorStim in the list and on the right you need only type in the radius box 15.0 There is quite a lot of room for error. I had it working on 10 and also on 25. The value should be less than the distance to the closed door else it will trigger open! But no so small that the door might not reach it.&lt;br /&gt;
&lt;br /&gt;
* Select the check box for Time Interval and enter 500 (millisecs.) This is so it doesn&#039;t keep firing more frequently than is necessary. This stim will be firing all through your mission whether the door is used or not so if you had dozens of these then maybe it would affect performance. Too big a number and there may be a long delay before the door shuts - but it will be random depending on the next time the stim happens to fire. We&#039;ll control the delay we want more precisely later.&lt;br /&gt;
&lt;br /&gt;
* Click {{ok}} to confirm it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That&#039;s the stim set up, now for the response to it which is put on the door....&lt;br /&gt;
&lt;br /&gt;
* Select the doorm, then use {{menu|Entity|Stim/response}} and select the response tab.&lt;br /&gt;
&lt;br /&gt;
* Click the little drop down arrow against the &#039;type&#039; selector at bottom left and you should see your new custom stim name. Select it.&lt;br /&gt;
&lt;br /&gt;
* Right click in the big &#039;&#039;Response Effects&#039;&#039; box on the bottom right of the panel.&lt;br /&gt;
&lt;br /&gt;
* Add New Effect and you should get a default &#039;Activate Response&#039; response added to the list. Double click it.&lt;br /&gt;
&lt;br /&gt;
* In the Effect selector at the stop select &#039;Trigger&#039;&lt;br /&gt;
&lt;br /&gt;
* in the Target box, paste in the name of the relay you copied or you can select it from the list at the little arrow.&lt;br /&gt;
&lt;br /&gt;
* Leave the Activator box empty.&lt;br /&gt;
&lt;br /&gt;
* Click {{apply}} and then {{ok}} on the main S &amp;amp; R panel bottom right.&lt;br /&gt;
&lt;br /&gt;
It should now work. No need to wait for an AI, just frob the door and watch it close itself. If not, check the position of the stim brush is close to where the door stops when open.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==AI Door management==&lt;br /&gt;
&lt;br /&gt;
By default AI will open doors and close them behind them. Here are some spawnargs &#039;&#039;&#039;on the door&#039;&#039;&#039; the mapper can use to modify that behaviour:&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;ai_should_not_handle&amp;quot; :If set to 1, AI will not attempt to handle it and add it to the forbidden areas (so that it doesn&#039;t try to path through). They might still walk through the door when it is open though. Useful if you have some special use door that you don&#039;t want the AI to operate.&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;ai_should_not_close&amp;quot; :If set to 1, AI will not close the door behind them unless it obstructs them.&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;canRemainOpen&amp;quot; :If set to 1, it&#039;s the same as &amp;quot;ai_should_not_close, with the added behavior that this is ignored if the door needs to be relocked, or the door is marked &amp;quot;shouldBeClosed&amp;quot;. &#039;&#039;&#039;(This spawnarg is available starting in TDM 2.02.)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Spawnargs &#039;&#039;&#039;on the AI&#039;&#039;&#039; that the mapper can use:&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;canCloseDoors&amp;quot; :Added in 2.12. Defaults to 1.  If set to 0, the AI will not close doors after passing through them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To get AI to unlock/relock specific doors there are two methods:&lt;br /&gt;
&lt;br /&gt;
1. Provide the AI with the key, as detailed in the def_attach method in [[#Keys_carried_by_AI]] above.&lt;br /&gt;
&lt;br /&gt;
2. Add the following spawnarg/value to the AI:&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;can_unlock&amp;quot; &#039;&#039;&amp;lt;doorname&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For additional doors on the same AI use &#039;&#039;can_unlock1 doorname&#039;, `can_unlock2 doorname&#039; etc. &#039;&#039;&#039;Do NOT use can_unlock_1.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If both (1) and (2) are used, then the AI can still go through the door after the player pickpockets the key. Otherwise, unless someone else opens the door for the AI, a typical sequence is that the AI checks their pockets for the missing key, stalls a bit at the locked door, and then (with now-better pathing algorithms) the AI uses an alternate route to the next path_corner, or &amp;quot;mentally&amp;quot; skips ahead in the route to next reachable node and goes there.&lt;br /&gt;
&lt;br /&gt;
===Door Handling Positions===&lt;br /&gt;
&lt;br /&gt;
It is also possible to set custom door handling positions for the AI. This is especially useful when the standard routine that lets the AI choose their standing positions while opening and closing the door fails, leaving them standing still, or circling around in front of the door helplessly.&lt;br /&gt;
&lt;br /&gt;
Place a movers &amp;gt; &#039;&#039;atdm:door_handling_position&#039;&#039; entity where you want the AI to stand while opening/closing the door from this side.&lt;br /&gt;
&lt;br /&gt;
On the door, you need to set the spawnarg &amp;quot;door_handle_position&amp;quot; &amp;quot;name_of_door_handling_position&amp;quot;. You can also place a &#039;&#039;door_handling_position&#039;&#039; on each side of the door, and the AI will automatically choose the right one. In this case, you need to set spawnargs with &amp;quot;door_handle_position_1&amp;quot; etc., and the corresponding names of the &#039;&#039;door_handling_position&#039;&#039; entities on the door.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;door_handling_position&#039;&#039; entities can also carry spawnargs that define the behaviour of the AI, which are useful for example for doors that can only be opened or locked from one side:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;ai_no_open&amp;quot;&#039;&#039;&#039; If set to &amp;quot;1&amp;quot;, the AI will not try to open the door from this side (but will still walk through when the door is already open).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;ai_no_close&amp;quot;&#039;&#039;&#039; If set to &amp;quot;1&amp;quot;, the AI will not attempt to close the door from this side.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;ai_no_unlock&amp;quot;&#039;&#039;&#039; If set &amp;quot;1&amp;quot;, the AI will not be able to unlock the door from this side, but still use it when it is not locked.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;ai_no_lock&amp;quot;&#039;&#039;&#039; If this is set &amp;quot;1&amp;quot;, the AI will not lock the door from this side.&lt;br /&gt;
&lt;br /&gt;
===Door Controllers===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Available in TDM 2.02+&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can design a door so it&#039;s operated by buttons or levers or switches (aka &#039;&#039;controllers&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
A controller is simply an entity that targets the door.  Typical examples of entities that can be used are:&lt;br /&gt;
&lt;br /&gt;
* Buttons: atdm:mover_button&lt;br /&gt;
* Levers: atdm:switch_rotate_lever&lt;br /&gt;
* Switch: atdm:mover_lever&lt;br /&gt;
* Lock: atdm:froblock. (See also next section)&lt;br /&gt;
&lt;br /&gt;
1. Set up the door in the normal manner. It can be a rotating door, a sliding door, a locked door, etc.&lt;br /&gt;
&lt;br /&gt;
2. Turn off the &amp;quot;frobable&amp;quot; spawnarg on the door. (&amp;quot;frobable&amp;quot; &amp;quot;0&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
3. Create a controller entity on each side of the door. If you&#039;re setting up a locked door using atdm:froblock, there&#039;s no need to put any locking information on the controllers. When the game starts, it will transfer any locking information from the door to the controllers.&lt;br /&gt;
&lt;br /&gt;
4. Give each controller the door as a target.&lt;br /&gt;
&lt;br /&gt;
Both the player and any AI that wants to use the door will use the controllers to operate it. Any key, &amp;quot;can_unlock&amp;quot;, or lockpick settings you would normally use at the door are now used at the controllers.&lt;br /&gt;
&lt;br /&gt;
Controllers and &#039;&#039;door_handling_position&#039;&#039; entities can be used on the same door, but in that situation the &#039;&#039;door_handling_position&#039;&#039; entities don&#039;t define where the AI stands to operate the door. They simply provide the &amp;quot;ai_no_*&amp;quot; spawnargs that define AI behavior on each side of the door.&lt;br /&gt;
&lt;br /&gt;
If you wish, you could provide a controller on only one side of the door instead of both sides. Note that, since the door is not frobable, the player won&#039;t be able to operate the door from the non-controller side.&lt;br /&gt;
&lt;br /&gt;
====More about Using a Separate &amp;quot;Froblock&amp;quot; Lock Plate====&lt;br /&gt;
&#039;&#039;by Geep, 2021-22&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Froblock, just discussed as a controller method, actually predated the controller concept in TDM. Here we recap that earlier context, with an alternative treatment of highlighting, and thoughts on texturing and usage.&lt;br /&gt;
&lt;br /&gt;
Suppose you want to have a lock plate (typically mounted on a door frame or wall) that opens a nearby door, where the door and lock plate highlight separately. A traditional way is to adapt the &#039;&#039;froblock&#039;&#039; method described under the &amp;quot;Making your own&amp;quot; section of [[Containers, Chests, etc.]]&lt;br /&gt;
&lt;br /&gt;
Basically, your door is the &amp;quot;chest lid&amp;quot; (of class atdm:mover_door) and your lock is the &amp;quot;chest body&amp;quot; (of class atdm:froblock). Set the properties as described in the wiki. There is a stock texture (darkmod/door/keyhole_metal_001) you can use to decorate a surface of your lock plate, or a patch on it. This method is probably most apt for small hatches and grates designed for the player alone, and with no handles, or non-turning handles attached with &amp;quot;bind&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===AI and &#039;non-frobable&#039; Doors===&lt;br /&gt;
Be aware that the &#039;frobable&#039; spawnarg only applies to the player, not AI.  If you set a door to be non-frobable (i.e. &#039;frobable&#039; &#039;0&#039;), AI can still operate it by interacting directly with it, even if it has a controller.  For example they will do this if:&lt;br /&gt;
&lt;br /&gt;
* they are fleeing or chasing the player&lt;br /&gt;
* the door has a controller but the AI can&#039;t reach it (for example the controller is on the other side of the door)&lt;br /&gt;
&lt;br /&gt;
The best way to mitigate this is to use Door Handling Position entities (see above) with the &#039;ai_no_open&#039; spawnarg set on them. &lt;br /&gt;
&lt;br /&gt;
===AI locking doors behind them===&lt;br /&gt;
&lt;br /&gt;
If one AI is involved (no one else is in the queue), he&#039;ll lock it behind him if he had to unlock it in the first place.&lt;br /&gt;
&lt;br /&gt;
Prior to TDM 1.08, if more than one AI is using the door at the same time (there&#039;s a queue), the first AI unlocks the door, and the last AI through will only lock it if it&#039;s marked &amp;quot;should_always_be_locked&amp;quot; AND they have a &amp;quot;can_unlock&amp;quot; for that door or they have a key for that door. The last AI to use the door doesn&#039;t know that the first AI found it locked, because that info is kept per AI, and not per door. &lt;br /&gt;
&lt;br /&gt;
Starting in TDM 1.08, if the first AI in a door queue found the door locked, that information is remembered by the door and the last AI through uses it to relock the door, as long as they have a &amp;quot;can_unlock&amp;quot; for that door or they have a key for that door.&lt;br /&gt;
&lt;br /&gt;
In the rare case where a door is set up to use door-handling position entities (necessary for AI to use sliding doors), either or both of those entities can have the &amp;quot;ai_no_lock&amp;quot; spawnarg, which means AI aren&#039;t allowed to lock the door from that side.&lt;br /&gt;
&lt;br /&gt;
==Initially Blocking a Door - Partially or Fully==&lt;br /&gt;
&#039;&#039;by Geep 2021&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Suppose you have a door that you want to start out either as unopenable, or able to open just a crack, then later, after something happens, be fully openable and operational. One method known to work:&lt;br /&gt;
&lt;br /&gt;
* Create a moveable object that the opening door runs into and tries to push.&lt;br /&gt;
* Arrange that the far side of the moveable object is jammed against some immovable worldspawn.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s two specific examples that use a wooden plank moveable:&lt;br /&gt;
&lt;br /&gt;
* In &amp;quot;Perilous Refuge&amp;quot;, a plank blocks the door leading out of the player&#039;s starting location, until the player carries it away. &lt;br /&gt;
* At the end of &amp;quot;Away0&amp;quot; (WIP 2021), the player tries to open a door. But if preconditions aren&#039;t met, the occupant seems to let the door open only a crack and complains. Blockage is done by an unseen plank resting on the floor hitting a knob of worldspawn. Preconditions met causes a &amp;quot;$plank.remove()&amp;quot; script call.&lt;br /&gt;
&lt;br /&gt;
Other methods that you might think would work but don’t:&lt;br /&gt;
&lt;br /&gt;
* Block with a func_static object, or an unjammed moveable with &amp;quot;notpushable 1&amp;quot; set. In both cases, the door travels through the object.&lt;br /&gt;
* In advance, &amp;quot;grab&amp;quot; an unjammed moveable to make it appear &amp;quot;solid&amp;quot; to the physics engine. (This was tested by having the player manipulate it; if it had worked, a “grabber” script call might suffice.)&lt;br /&gt;
* Dynamically change the door’s &amp;quot;rotate&amp;quot; limit from script using &amp;quot;setSpawnArg&amp;quot;; this function would only work before you spawn the door, not afterwards.&lt;br /&gt;
&lt;br /&gt;
(Others possibilities not yet tested:&lt;br /&gt;
&lt;br /&gt;
* Change &amp;quot;rotate&amp;quot; using the &amp;quot;setKey&amp;quot; script function; for some spawnargs this works even after spawn.&lt;br /&gt;
* Create a moveable and bind it to the world entity.&lt;br /&gt;
* If you are mainly interested in initially blocking an AI from using a door: it&#039;s possible that the AI re-reads the spawnargs for what doors it&#039;s allowed to open. Try adding a frob Response to the key (Entity -&amp;gt; Stim/Response... -&amp;gt; Response) with an effect that sets the “can_unlock&amp;quot; spawnarg on that AI to &amp;quot;-&amp;quot;.)&lt;br /&gt;
&lt;br /&gt;
==Controlling a Door by Scripting==&lt;br /&gt;
&#039;&#039;by Geep 2021&#039;&#039;&lt;br /&gt;
===If Unlocked===&lt;br /&gt;
&lt;br /&gt;
Simply use, for example with a door named &#039;&#039;door1&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 $door1.Open();&lt;br /&gt;
 ...&lt;br /&gt;
 $door1.Close();&lt;br /&gt;
&lt;br /&gt;
Alternatively, toggle it open or closed with:&lt;br /&gt;
&lt;br /&gt;
 $door1.frob();&lt;br /&gt;
&lt;br /&gt;
If the door has &amp;quot;interruptable 1&amp;quot; (which is the default with atdm:mover_door), you can also frob() it twice to leave it ajar. Interpose and adjust a sys.wait(...) to tune it.&lt;br /&gt;
===If Locked===&lt;br /&gt;
&lt;br /&gt;
You need to unlock it first. Changing the door&#039;s &amp;quot;locked&amp;quot; spawnarg value won&#039;t work. Instead you will use:&lt;br /&gt;
&lt;br /&gt;
 $door1.Unlock();&lt;br /&gt;
&lt;br /&gt;
But there are complications. By default, the door has spawnarg &amp;quot;open_on_unlock 1&amp;quot;. So, assuming you didn&#039;t change that, you&#039;d think unlocking the door would open it. But this spawnarg will be ignored if the gamer has global menu option &amp;quot;Open Doors on Unlock&amp;quot; set to Off. Assuming you want to reliably have the door open, do this:&lt;br /&gt;
&lt;br /&gt;
 $door1.Unlock(); // MAYBE will open door too.&lt;br /&gt;
 sys.wait(3); // If so, wait for door to fully open. Value may need adjusting based on door&#039;s speed&lt;br /&gt;
 $door1.Open(); // Otherwise, open it now.&lt;br /&gt;
&lt;br /&gt;
The wait is added, because otherwise, the opening begun by Unlock may be stopped by Open with the door only partially open. (Probably an alternative to using sys.wait here is to zero the door&#039;s &amp;quot;interruptable&amp;quot; spawnarg.) &lt;br /&gt;
&lt;br /&gt;
==Doors as Triggers==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;by Ishtvan &amp;amp; greebo&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Doors (or any binary frob mover, buttons, levers, etc) now have the option to [[Triggers|trigger]] their target on closing or opening. (For definition purposes, a button is defined as &amp;quot;closed&amp;quot; in the state when it starts out and &amp;quot;open&amp;quot; in the state you press it down to. I know that&#039;s a little non-intuitive, but it came from deriving from doors).&lt;br /&gt;
&lt;br /&gt;
New spawnargs on frob movers:&lt;br /&gt;
;&amp;quot;trigger_on_open&amp;quot; :If set to 1, this binary mover will trigger its targets when it starts out completely closed and is opened.&lt;br /&gt;
;&amp;quot;trigger_when_opened&amp;quot;:If set to 1, this binary mover will trigger its targets when it is completely opened. Code defaults to 0.&lt;br /&gt;
;&amp;quot;trigger_on_close&amp;quot;:If set to 1, this binary mover will trigger its targets when it completely closes after being open.&lt;br /&gt;
&lt;br /&gt;
== Suspicious Doors ==&lt;br /&gt;
&lt;br /&gt;
If you give a door the spawnarg &#039;&#039;&#039;&amp;quot;shouldBeClosed&amp;quot; &amp;quot;1&amp;quot;&#039;&#039;&#039;, then AI will treat it as suspicious if they find the door open.&lt;br /&gt;
&lt;br /&gt;
Doors with that spawnarg should work like this:&lt;br /&gt;
&lt;br /&gt;
- an AI opening the door knows he&#039;s not to become suspicious if he opened the door&lt;br /&gt;
&lt;br /&gt;
- nearby AI alerted by the open door will also not react if they can see the door, and can see the AI that opened it&lt;br /&gt;
&lt;br /&gt;
- AI who come upon the open door later probably won&#039;t be able to see the AI that opened it, so they&#039;ll treat it as suspicious&lt;br /&gt;
&lt;br /&gt;
- if the AI who opened the door comes upon the door later, and it&#039;s still open, and no one&#039;s touched it since he opened it, he&#039;ll see his name on the door and won&#039;t become suspicious. &amp;quot;Oh, crap. I forgot to close it earlier.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
- If an AI comes upon an open door that should be closed, he should close it whether he becomes suspicious or not.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Post TDM 2.00:&#039;&#039;&#039;&lt;br /&gt;
-  AI turn to look at a door they see opening.  The player can crack open a suspicious door to peek out w/o grabbing the attention of a nearby AI. After 5s, the AI will notice the cracked open door. Non-suspicious doors can be cracked open indefinitely w/o nearby AI noticing.&lt;br /&gt;
&lt;br /&gt;
==Slanted or Tilted Doors==&lt;br /&gt;
Slanted or tilted doors can be made as follows:&lt;br /&gt;
&lt;br /&gt;
1) Place your door, preferrably one of the prefab doors, which have a model door and model handle and all the rotation spawnargs pre-set.&lt;br /&gt;
&lt;br /&gt;
2) rotate and place the door+handle model into place you want it to be. Now, if you use the door in the game, the door will rotate around the world z-axis, and not the door model z-axis (which is rotated).&lt;br /&gt;
&lt;br /&gt;
3) to get the door to rotate around the door model z-axis, you must place a model (any model will do, and it can be placed anywhere in the map). Rotate the new model into the same orientation your door model was rotated, i.e. if you door is rotated 45 degrees around the x-axis, do the same rotation on the new model.&lt;br /&gt;
&lt;br /&gt;
4) bind the doors on the new model. This makes the doors start rotating along the new model origin (which is rotated the same way as the doors).&lt;br /&gt;
&lt;br /&gt;
5) working slanted door.&lt;br /&gt;
&lt;br /&gt;
Do note, that all the rotated objects need to be models (suspicion, not tested). You can export DR built stuff into a model using the DR ase exporter script. For custom doors, remember that the exporter places the model origin at the map origin if you do not choose the &amp;quot;place origin in the middle of the object&amp;quot; option.&lt;br /&gt;
&lt;br /&gt;
Also note that the AI probably cannot use slanted doors and might get stuck (suspicion, not tested).&lt;br /&gt;
&lt;br /&gt;
There is a link to a test map here:&lt;br /&gt;
http://forums.thedarkmod.com/topic/9082-newbie-darkradiant-questions/?p=395486&lt;br /&gt;
&lt;br /&gt;
==Skins: A Wide Variety of Door Textures==&lt;br /&gt;
&lt;br /&gt;
This is to remind you that as with many Dark Mod models, there is a wide range of extras skins (textures) available for door models. There are now several basic door entities of different sizes so choose your size first. Then enter the spawnarg: skin with any temporary value. Now select it and click the skin button at the bottom of Dark Radiant&#039;s Entity Inspector and you will find a large of range of skin textures from which to select to give you a choice of appearances for your door.&lt;br /&gt;
&lt;br /&gt;
==Extra Notes==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;func_darkmod_door&#039;&#039; is no longer used (just in case you come across it in the Dark Mod forums or wiki.) &#039;&#039;&#039;&amp;lt;code&amp;gt;atdm:mover_door&amp;lt;/code&amp;gt;&#039;&#039;&#039; is the entity to use.&lt;br /&gt;
&lt;br /&gt;
{{tutorial-editing}}&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=File:Key_remove2.png&amp;diff=34099</id>
		<title>File:Key remove2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=File:Key_remove2.png&amp;diff=34099"/>
		<updated>2025-11-06T19:39:45Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;diagram showing key removal entities&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=File:Key_remove.png&amp;diff=34098</id>
		<title>File:Key remove.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=File:Key_remove.png&amp;diff=34098"/>
		<updated>2025-11-06T19:08:53Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;diagram showing required entities for automatic key removal&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=The_Lieutenant_1:_In_Plain_Sight_(FM)&amp;diff=33999</id>
		<title>The Lieutenant 1: In Plain Sight (FM)</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=The_Lieutenant_1:_In_Plain_Sight_(FM)&amp;diff=33999"/>
		<updated>2025-06-26T21:36:08Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A fan mission for &#039;&#039;The Dark Mod&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Information ==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Author:&#039;&#039;&#039; [[:Category:Missions by Frost_Salamander|Frost_Salamander]]&lt;br /&gt;
*&#039;&#039;&#039;Type:&#039;&#039;&#039; Single Mission&lt;br /&gt;
*&#039;&#039;&#039;Releases:&#039;&#039;&#039; 2022-07-08 (8 July 2022) - latest&lt;br /&gt;
*&#039;&#039;&#039;Version:&#039;&#039;&#039; 5&lt;br /&gt;
*&#039;&#039;&#039;Size:&#039;&#039;&#039; 13 MB&lt;br /&gt;
*&#039;&#039;&#039;EFX Reverb:&#039;&#039;&#039; Yes&lt;br /&gt;
*&#039;&#039;&#039;Subtitles:&#039;&#039;&#039; No&lt;br /&gt;
&lt;br /&gt;
== Synopsis ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;You are an intelligence officer tasked with revealing the source of a political uprising in the city of Watchgate.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Series ==&lt;br /&gt;
&lt;br /&gt;
This FM is part of [[Fan_Mission_Series#The_Lieutenant_series|The Lieutenant]] series.&lt;br /&gt;
&lt;br /&gt;
== Theme / &amp;quot;Genre&amp;quot; / Setting ==&lt;br /&gt;
 &lt;br /&gt;
{|class=&amp;quot;wikitable sortable mw-collapsible mw-collapsed&amp;quot; border=1 style=&amp;quot;border-collapse: collapse;&amp;quot; cellspacing=0 cellpadding=2 width=30% data-expandtext=&amp;quot;Show&amp;quot; data-collapsetext=&amp;quot;Hide&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Click to reveal spoiler...&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|City Missions  &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Threats ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable mw-collapsible mw-collapsed&amp;quot; border=1 style=&amp;quot;border-collapse: collapse;&amp;quot; cellspacing=0 cellpadding=2 width=30% data-expandtext=&amp;quot;Show&amp;quot; data-collapsetext=&amp;quot;Hide&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Click to reveal spoiler...&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|City Missions &lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|Horror themes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
[https://www.thedarkmod.com/missiondetails/?internalName=inplainsight Official Mission List link]&lt;br /&gt;
&lt;br /&gt;
You can download the mission directly while in game, by using the built-in TDM fan mission downloader.&lt;br /&gt;
&lt;br /&gt;
Additional DL links:&lt;br /&gt;
&lt;br /&gt;
* https://missions.thedarkmod.com/inplainsight_3b85c65964c2c3cd.pk4&lt;br /&gt;
* https://darkmod.taaaki.za.net/fmsv2/inplainsight_3b85c65964c2c3cd.pk4&lt;br /&gt;
* https://darkmod-alt02.taaaki.za.net/fms/inplainsight_3b85c65964c2c3cd.pk4&lt;br /&gt;
* https://tdm.frydrych.org/missions/inplainsight_3b85c65964c2c3cd.pk4&lt;br /&gt;
* http://mirror.mstrmnds.me/missions/inplainsight_3b85c65964c2c3cd.pk4&lt;br /&gt;
&lt;br /&gt;
== Gallery ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
The Lieutenant 1 In Plain Sight (FM) promo 1.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 1 In Plain Sight (FM) promo 2.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 1 In Plain Sight (FM) promo 3.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 1 In Plain Sight (FM) promo 4.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 1 In Plain Sight (FM) promo 5.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 1 In Plain Sight (FM) promo 6.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 1 In Plain Sight (FM) promo 7.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 1 In Plain Sight (FM) promo 8.jpg|Promotional screenshot&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Discussions ==&lt;br /&gt;
&lt;br /&gt;
*[https://forums.thedarkmod.com/index.php?/topic/21549-fan-mission-in-plain-sight-by-frost_salamander-20220807 TDM forums thread]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Beware of potential spoilers !&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Lootlists ==&lt;br /&gt;
&lt;br /&gt;
TBA&lt;br /&gt;
&lt;br /&gt;
== Walkthroughs ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Spoilers abound !&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Boy Lag&#039;&#039;&#039;&lt;br /&gt;
* [https://www.youtube.com/watch?v=scgUJ1nUHUA Video playthrough - Part 1]&lt;br /&gt;
* [https://www.youtube.com/watch?v=LHsoI2_egMY Video playthrough - Part 2]&lt;br /&gt;
* [https://www.youtube.com/watch?v=S6v0xnhN2Pg Video playthrough - Part 3]&lt;br /&gt;
* [https://www.youtube.com/watch?v=WvDceJVdcNI Video playthrough - Part 4]&lt;br /&gt;
* [https://www.youtube.com/watch?v=BFZg0faxu2g Video playthrough - Part 5]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Steve0Greatness&#039;&#039;&#039;&lt;br /&gt;
*[https://www.youtube.com/watch?v=SbDYvP6xhKI Video playthrough]&lt;br /&gt;
&lt;br /&gt;
== Trivia ==&lt;br /&gt;
&lt;br /&gt;
TBA&lt;br /&gt;
&lt;br /&gt;
== External sites and reviews ==&lt;br /&gt;
&lt;br /&gt;
*[https://www.thiefguild.com/fanmissions/39931/the-lieutenant-1-in-plain-sight Thief Guild.com FM overview and review]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.thedarkmod.com/missions/ Official FMs list]&lt;br /&gt;
* [[Fan Missions for The Dark Mod]] - Main article on all of the published fan missions to date, in addition to the official list on the website.&lt;br /&gt;
* [[Fan Mission Series]] - An overview of all currently known series or campaigns of fan missions interconnected by their stories or characters. There are already plenty in TDM, and have been since its early days as an expandable game.&lt;br /&gt;
* [[Upcoming Fan Missions]] - An overview of Fan Missions in development or tentatively planned. (&#039;&#039;Do not&#039;&#039; edit the overview.)&lt;br /&gt;
* [[Mission recommendation discussions]] - An overview of past discussions on what FMs the community recommends to players looking for various challenges (difficulty, size, theme, setting, objectives, etc.).&lt;br /&gt;
* [[Fan Mission Contests]] - An overview of past and present contests in Fan Mission creation, by members of the TDM community.&lt;br /&gt;
&lt;br /&gt;
[[Category:Official FMs|The Lieutenant 1: In Plain Sight]]&lt;br /&gt;
[[Category:Missions by Frost_Salamander|The Lieutenant 1: In Plain Sight]]&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=The_Lieutenant_2:_High_Expectations_(FM)&amp;diff=33998</id>
		<title>The Lieutenant 2: High Expectations (FM)</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=The_Lieutenant_2:_High_Expectations_(FM)&amp;diff=33998"/>
		<updated>2025-06-26T21:35:44Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: /* Series */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A fan mission for &#039;&#039;The Dark Mod&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Information ==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Author:&#039;&#039;&#039; [[:Category:Missions by Frost_Salamander|Frost_Salamander]]&lt;br /&gt;
*&#039;&#039;&#039;Type:&#039;&#039;&#039; Single Mission&lt;br /&gt;
*&#039;&#039;&#039;Releases:&#039;&#039;&#039; 2023-04-24 (24 April 2023) - latest&lt;br /&gt;
*&#039;&#039;&#039;Version:&#039;&#039;&#039; 3&lt;br /&gt;
*&#039;&#039;&#039;Size:&#039;&#039;&#039; 42 MB&lt;br /&gt;
*&#039;&#039;&#039;EFX Reverb:&#039;&#039;&#039; Yes&lt;br /&gt;
*&#039;&#039;&#039;Subtitles:&#039;&#039;&#039; No&lt;br /&gt;
&lt;br /&gt;
== Synopsis ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Follow the Lieutenant on his next mission to the City of Highborough.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Series ==&lt;br /&gt;
&lt;br /&gt;
This FM is part of [[Fan_Mission_Series#The_Lieutenant_series|The Lieutenant]] series.&lt;br /&gt;
&lt;br /&gt;
== Theme / &amp;quot;Genre&amp;quot; / Setting ==&lt;br /&gt;
 &lt;br /&gt;
{|class=&amp;quot;wikitable sortable mw-collapsible mw-collapsed&amp;quot; border=1 style=&amp;quot;border-collapse: collapse;&amp;quot; cellspacing=0 cellpadding=2 width=30% data-expandtext=&amp;quot;Show&amp;quot; data-collapsetext=&amp;quot;Hide&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Click to reveal spoiler...&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|City Missions &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Threats ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable mw-collapsible mw-collapsed&amp;quot; border=1 style=&amp;quot;border-collapse: collapse;&amp;quot; cellspacing=0 cellpadding=2 width=30% data-expandtext=&amp;quot;Show&amp;quot; data-collapsetext=&amp;quot;Hide&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Click to reveal spoiler...&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|Guards &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
[https://www.thedarkmod.com/missiondetails/?internalName=highex Official Mission List link]&lt;br /&gt;
&lt;br /&gt;
You can download the mission directly while in game, by using the built-in TDM fan mission downloader.&lt;br /&gt;
&lt;br /&gt;
Additional DL links:&lt;br /&gt;
&lt;br /&gt;
* https://missions.thedarkmod.com/highex_84e60f7992ca1e51.pk4&lt;br /&gt;
* https://darkmod.taaaki.za.net/fmsv2/highex_84e60f7992ca1e51.pk4&lt;br /&gt;
* https://darkmod-alt02.taaaki.za.net/fms/highex_84e60f7992ca1e51.pk4&lt;br /&gt;
* https://tdm.frydrych.org/missions/highex_84e60f7992ca1e51.pk4&lt;br /&gt;
* http://mirror.mstrmnds.me/missions/highex_84e60f7992ca1e51.pk4&lt;br /&gt;
&lt;br /&gt;
== Gallery ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 01.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 02.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 03.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 04.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 05.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 06.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 07.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 08.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 09.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 10.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 11.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 12.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 13.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 14.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 15.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 16.jpg|Promotional screenshot&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Discussions ==&lt;br /&gt;
&lt;br /&gt;
*[https://forums.thedarkmod.com/index.php?/topic/21837-fan-mission-the-lieutenant-2-high-expectations-by-frost_salamander-20230424 TDM forums thread]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Beware of potential spoilers !&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Lootlists ==&lt;br /&gt;
&lt;br /&gt;
TBA&lt;br /&gt;
&lt;br /&gt;
== Walkthroughs ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Spoilers abound !&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Boy Lag&#039;&#039;&#039;&lt;br /&gt;
* [https://www.youtube.com/watch?v=ocLPBvEIqec Video playthrough - Part 1]&lt;br /&gt;
* [https://www.youtube.com/watch?v=KtSm9F3aBIU Video playthrough - Part 2]&lt;br /&gt;
* [https://www.youtube.com/watch?v=cbx_cbvtllQ Video playthrough - Part 3]&lt;br /&gt;
* [https://www.youtube.com/watch?v=V1R-LarggHo Video playthrough - Part 4]&lt;br /&gt;
* [https://www.youtube.com/watch?v=jjXv7fbJvAQ Video playthrough - Part 5]&lt;br /&gt;
* [https://www.youtube.com/watch?v=1XNs2J5DkUk Video playthrough - Part 6]&lt;br /&gt;
* [https://www.youtube.com/watch?v=8JluJnJM2OE Video playthrough - Part 7]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Onegin III&#039;&#039;&#039;&lt;br /&gt;
*[https://www.youtube.com/watch?v=i4UPXURwhaI Video playthrough]&lt;br /&gt;
*[https://www.youtube.com/watch?v=PBRHcmZqAMk Video playthrough] (Extra)&lt;br /&gt;
&lt;br /&gt;
== Trivia ==&lt;br /&gt;
&lt;br /&gt;
TBA&lt;br /&gt;
&lt;br /&gt;
== External sites and reviews ==&lt;br /&gt;
&lt;br /&gt;
*[https://www.thiefguild.com/fanmissions/39931/the-lieutenant-1-in-plain-sight Thief Guild.com FM overview and review]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.thedarkmod.com/missions/ Official FMs list]&lt;br /&gt;
* [[Fan Missions for The Dark Mod]] - Main article on all of the published fan missions to date, in addition to the official list on the website.&lt;br /&gt;
* [[Fan Mission Series]] - An overview of all currently known series or campaigns of fan missions interconnected by their stories or characters. There are already plenty in TDM, and have been since its early days as an expandable game.&lt;br /&gt;
* [[Upcoming Fan Missions]] - An overview of Fan Missions in development or tentatively planned. (&#039;&#039;Do not&#039;&#039; edit the overview.)&lt;br /&gt;
* [[Mission recommendation discussions]] - An overview of past discussions on what FMs the community recommends to players looking for various challenges (difficulty, size, theme, setting, objectives, etc.).&lt;br /&gt;
* [[Fan Mission Contests]] - An overview of past and present contests in Fan Mission creation, by members of the TDM community.&lt;br /&gt;
&lt;br /&gt;
[[Category:Official FMs|The Lieutenant 2: High Expectations]]&lt;br /&gt;
[[Category:Missions by Frost_Salamander|The Lieutenant 2: High Expectations]]&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=The_Lieutenant_2:_High_Expectations_(FM)&amp;diff=33997</id>
		<title>The Lieutenant 2: High Expectations (FM)</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=The_Lieutenant_2:_High_Expectations_(FM)&amp;diff=33997"/>
		<updated>2025-06-26T21:34:47Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: /* Series */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A fan mission for &#039;&#039;The Dark Mod&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Information ==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Author:&#039;&#039;&#039; [[:Category:Missions by Frost_Salamander|Frost_Salamander]]&lt;br /&gt;
*&#039;&#039;&#039;Type:&#039;&#039;&#039; Single Mission&lt;br /&gt;
*&#039;&#039;&#039;Releases:&#039;&#039;&#039; 2023-04-24 (24 April 2023) - latest&lt;br /&gt;
*&#039;&#039;&#039;Version:&#039;&#039;&#039; 3&lt;br /&gt;
*&#039;&#039;&#039;Size:&#039;&#039;&#039; 42 MB&lt;br /&gt;
*&#039;&#039;&#039;EFX Reverb:&#039;&#039;&#039; Yes&lt;br /&gt;
*&#039;&#039;&#039;Subtitles:&#039;&#039;&#039; No&lt;br /&gt;
&lt;br /&gt;
== Synopsis ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Follow the Lieutenant on his next mission to the City of Highborough.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Series ==&lt;br /&gt;
&lt;br /&gt;
The FM is part of [[Fan_Mission_Series#The_Lieutenant_series|The Lieutenant]] series.&lt;br /&gt;
&lt;br /&gt;
== Theme / &amp;quot;Genre&amp;quot; / Setting ==&lt;br /&gt;
 &lt;br /&gt;
{|class=&amp;quot;wikitable sortable mw-collapsible mw-collapsed&amp;quot; border=1 style=&amp;quot;border-collapse: collapse;&amp;quot; cellspacing=0 cellpadding=2 width=30% data-expandtext=&amp;quot;Show&amp;quot; data-collapsetext=&amp;quot;Hide&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Click to reveal spoiler...&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|City Missions &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Threats ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable mw-collapsible mw-collapsed&amp;quot; border=1 style=&amp;quot;border-collapse: collapse;&amp;quot; cellspacing=0 cellpadding=2 width=30% data-expandtext=&amp;quot;Show&amp;quot; data-collapsetext=&amp;quot;Hide&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Click to reveal spoiler...&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|Guards &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
[https://www.thedarkmod.com/missiondetails/?internalName=highex Official Mission List link]&lt;br /&gt;
&lt;br /&gt;
You can download the mission directly while in game, by using the built-in TDM fan mission downloader.&lt;br /&gt;
&lt;br /&gt;
Additional DL links:&lt;br /&gt;
&lt;br /&gt;
* https://missions.thedarkmod.com/highex_84e60f7992ca1e51.pk4&lt;br /&gt;
* https://darkmod.taaaki.za.net/fmsv2/highex_84e60f7992ca1e51.pk4&lt;br /&gt;
* https://darkmod-alt02.taaaki.za.net/fms/highex_84e60f7992ca1e51.pk4&lt;br /&gt;
* https://tdm.frydrych.org/missions/highex_84e60f7992ca1e51.pk4&lt;br /&gt;
* http://mirror.mstrmnds.me/missions/highex_84e60f7992ca1e51.pk4&lt;br /&gt;
&lt;br /&gt;
== Gallery ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 01.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 02.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 03.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 04.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 05.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 06.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 07.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 08.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 09.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 10.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 11.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 12.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 13.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 14.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 15.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 16.jpg|Promotional screenshot&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Discussions ==&lt;br /&gt;
&lt;br /&gt;
*[https://forums.thedarkmod.com/index.php?/topic/21837-fan-mission-the-lieutenant-2-high-expectations-by-frost_salamander-20230424 TDM forums thread]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Beware of potential spoilers !&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Lootlists ==&lt;br /&gt;
&lt;br /&gt;
TBA&lt;br /&gt;
&lt;br /&gt;
== Walkthroughs ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Spoilers abound !&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Boy Lag&#039;&#039;&#039;&lt;br /&gt;
* [https://www.youtube.com/watch?v=ocLPBvEIqec Video playthrough - Part 1]&lt;br /&gt;
* [https://www.youtube.com/watch?v=KtSm9F3aBIU Video playthrough - Part 2]&lt;br /&gt;
* [https://www.youtube.com/watch?v=cbx_cbvtllQ Video playthrough - Part 3]&lt;br /&gt;
* [https://www.youtube.com/watch?v=V1R-LarggHo Video playthrough - Part 4]&lt;br /&gt;
* [https://www.youtube.com/watch?v=jjXv7fbJvAQ Video playthrough - Part 5]&lt;br /&gt;
* [https://www.youtube.com/watch?v=1XNs2J5DkUk Video playthrough - Part 6]&lt;br /&gt;
* [https://www.youtube.com/watch?v=8JluJnJM2OE Video playthrough - Part 7]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Onegin III&#039;&#039;&#039;&lt;br /&gt;
*[https://www.youtube.com/watch?v=i4UPXURwhaI Video playthrough]&lt;br /&gt;
*[https://www.youtube.com/watch?v=PBRHcmZqAMk Video playthrough] (Extra)&lt;br /&gt;
&lt;br /&gt;
== Trivia ==&lt;br /&gt;
&lt;br /&gt;
TBA&lt;br /&gt;
&lt;br /&gt;
== External sites and reviews ==&lt;br /&gt;
&lt;br /&gt;
*[https://www.thiefguild.com/fanmissions/39931/the-lieutenant-1-in-plain-sight Thief Guild.com FM overview and review]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.thedarkmod.com/missions/ Official FMs list]&lt;br /&gt;
* [[Fan Missions for The Dark Mod]] - Main article on all of the published fan missions to date, in addition to the official list on the website.&lt;br /&gt;
* [[Fan Mission Series]] - An overview of all currently known series or campaigns of fan missions interconnected by their stories or characters. There are already plenty in TDM, and have been since its early days as an expandable game.&lt;br /&gt;
* [[Upcoming Fan Missions]] - An overview of Fan Missions in development or tentatively planned. (&#039;&#039;Do not&#039;&#039; edit the overview.)&lt;br /&gt;
* [[Mission recommendation discussions]] - An overview of past discussions on what FMs the community recommends to players looking for various challenges (difficulty, size, theme, setting, objectives, etc.).&lt;br /&gt;
* [[Fan Mission Contests]] - An overview of past and present contests in Fan Mission creation, by members of the TDM community.&lt;br /&gt;
&lt;br /&gt;
[[Category:Official FMs|The Lieutenant 2: High Expectations]]&lt;br /&gt;
[[Category:Missions by Frost_Salamander|The Lieutenant 2: High Expectations]]&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=The_Lieutenant_2:_High_Expectations_(FM)&amp;diff=33996</id>
		<title>The Lieutenant 2: High Expectations (FM)</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=The_Lieutenant_2:_High_Expectations_(FM)&amp;diff=33996"/>
		<updated>2025-06-26T21:33:48Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: /* Series */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A fan mission for &#039;&#039;The Dark Mod&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Information ==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Author:&#039;&#039;&#039; [[:Category:Missions by Frost_Salamander|Frost_Salamander]]&lt;br /&gt;
*&#039;&#039;&#039;Type:&#039;&#039;&#039; Single Mission&lt;br /&gt;
*&#039;&#039;&#039;Releases:&#039;&#039;&#039; 2023-04-24 (24 April 2023) - latest&lt;br /&gt;
*&#039;&#039;&#039;Version:&#039;&#039;&#039; 3&lt;br /&gt;
*&#039;&#039;&#039;Size:&#039;&#039;&#039; 42 MB&lt;br /&gt;
*&#039;&#039;&#039;EFX Reverb:&#039;&#039;&#039; Yes&lt;br /&gt;
*&#039;&#039;&#039;Subtitles:&#039;&#039;&#039; No&lt;br /&gt;
&lt;br /&gt;
== Synopsis ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Follow the Lieutenant on his next mission to the City of Highborough.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Series ==&lt;br /&gt;
&lt;br /&gt;
The FM is part of [[https://wiki.thedarkmod.com/index.php?title=Fan_Mission_Series#The_Lieutenant_series|The Lieutenant]] series.&lt;br /&gt;
&lt;br /&gt;
== Theme / &amp;quot;Genre&amp;quot; / Setting ==&lt;br /&gt;
 &lt;br /&gt;
{|class=&amp;quot;wikitable sortable mw-collapsible mw-collapsed&amp;quot; border=1 style=&amp;quot;border-collapse: collapse;&amp;quot; cellspacing=0 cellpadding=2 width=30% data-expandtext=&amp;quot;Show&amp;quot; data-collapsetext=&amp;quot;Hide&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Click to reveal spoiler...&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|City Missions &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Threats ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable mw-collapsible mw-collapsed&amp;quot; border=1 style=&amp;quot;border-collapse: collapse;&amp;quot; cellspacing=0 cellpadding=2 width=30% data-expandtext=&amp;quot;Show&amp;quot; data-collapsetext=&amp;quot;Hide&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Click to reveal spoiler...&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|Guards &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
[https://www.thedarkmod.com/missiondetails/?internalName=highex Official Mission List link]&lt;br /&gt;
&lt;br /&gt;
You can download the mission directly while in game, by using the built-in TDM fan mission downloader.&lt;br /&gt;
&lt;br /&gt;
Additional DL links:&lt;br /&gt;
&lt;br /&gt;
* https://missions.thedarkmod.com/highex_84e60f7992ca1e51.pk4&lt;br /&gt;
* https://darkmod.taaaki.za.net/fmsv2/highex_84e60f7992ca1e51.pk4&lt;br /&gt;
* https://darkmod-alt02.taaaki.za.net/fms/highex_84e60f7992ca1e51.pk4&lt;br /&gt;
* https://tdm.frydrych.org/missions/highex_84e60f7992ca1e51.pk4&lt;br /&gt;
* http://mirror.mstrmnds.me/missions/highex_84e60f7992ca1e51.pk4&lt;br /&gt;
&lt;br /&gt;
== Gallery ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 01.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 02.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 03.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 04.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 05.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 06.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 07.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 08.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 09.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 10.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 11.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 12.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 13.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 14.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 15.jpg|Promotional screenshot&lt;br /&gt;
The Lieutenant 2 High Expectations (FM) promo 16.jpg|Promotional screenshot&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Discussions ==&lt;br /&gt;
&lt;br /&gt;
*[https://forums.thedarkmod.com/index.php?/topic/21837-fan-mission-the-lieutenant-2-high-expectations-by-frost_salamander-20230424 TDM forums thread]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Beware of potential spoilers !&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Lootlists ==&lt;br /&gt;
&lt;br /&gt;
TBA&lt;br /&gt;
&lt;br /&gt;
== Walkthroughs ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Spoilers abound !&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Boy Lag&#039;&#039;&#039;&lt;br /&gt;
* [https://www.youtube.com/watch?v=ocLPBvEIqec Video playthrough - Part 1]&lt;br /&gt;
* [https://www.youtube.com/watch?v=KtSm9F3aBIU Video playthrough - Part 2]&lt;br /&gt;
* [https://www.youtube.com/watch?v=cbx_cbvtllQ Video playthrough - Part 3]&lt;br /&gt;
* [https://www.youtube.com/watch?v=V1R-LarggHo Video playthrough - Part 4]&lt;br /&gt;
* [https://www.youtube.com/watch?v=jjXv7fbJvAQ Video playthrough - Part 5]&lt;br /&gt;
* [https://www.youtube.com/watch?v=1XNs2J5DkUk Video playthrough - Part 6]&lt;br /&gt;
* [https://www.youtube.com/watch?v=8JluJnJM2OE Video playthrough - Part 7]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Onegin III&#039;&#039;&#039;&lt;br /&gt;
*[https://www.youtube.com/watch?v=i4UPXURwhaI Video playthrough]&lt;br /&gt;
*[https://www.youtube.com/watch?v=PBRHcmZqAMk Video playthrough] (Extra)&lt;br /&gt;
&lt;br /&gt;
== Trivia ==&lt;br /&gt;
&lt;br /&gt;
TBA&lt;br /&gt;
&lt;br /&gt;
== External sites and reviews ==&lt;br /&gt;
&lt;br /&gt;
*[https://www.thiefguild.com/fanmissions/39931/the-lieutenant-1-in-plain-sight Thief Guild.com FM overview and review]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.thedarkmod.com/missions/ Official FMs list]&lt;br /&gt;
* [[Fan Missions for The Dark Mod]] - Main article on all of the published fan missions to date, in addition to the official list on the website.&lt;br /&gt;
* [[Fan Mission Series]] - An overview of all currently known series or campaigns of fan missions interconnected by their stories or characters. There are already plenty in TDM, and have been since its early days as an expandable game.&lt;br /&gt;
* [[Upcoming Fan Missions]] - An overview of Fan Missions in development or tentatively planned. (&#039;&#039;Do not&#039;&#039; edit the overview.)&lt;br /&gt;
* [[Mission recommendation discussions]] - An overview of past discussions on what FMs the community recommends to players looking for various challenges (difficulty, size, theme, setting, objectives, etc.).&lt;br /&gt;
* [[Fan Mission Contests]] - An overview of past and present contests in Fan Mission creation, by members of the TDM community.&lt;br /&gt;
&lt;br /&gt;
[[Category:Official FMs|The Lieutenant 2: High Expectations]]&lt;br /&gt;
[[Category:Missions by Frost_Salamander|The Lieutenant 2: High Expectations]]&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=Fan_Mission_Series&amp;diff=33995</id>
		<title>Fan Mission Series</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=Fan_Mission_Series&amp;diff=33995"/>
		<updated>2025-06-26T21:32:03Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: /* The Lieutenant series */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article serves as an overview of the known existing FM series. &lt;br /&gt;
&lt;br /&gt;
Over the years, &#039;&#039;The Dark Mod&#039;&#039; has accumulated a number of Fan Missions that form a larger interconnected series or an overarching/continuing narrative. Many series are connected by their main characters, some by other FM inter-related elements.&lt;br /&gt;
&lt;br /&gt;
The FMs of each series are sorted in chronological order. &lt;br /&gt;
&lt;br /&gt;
The number of each FM includes a link to its page on the official website. &lt;br /&gt;
&lt;br /&gt;
The name of each FM includes a link to its page on the official TDM wiki.&lt;br /&gt;
&lt;br /&gt;
Beware of potential (minor) spoilers behind the character links.&lt;br /&gt;
&lt;br /&gt;
== Official campaigns ==&lt;br /&gt;
&lt;br /&gt;
While all TDM missions are technically Fan Missions, the ones belonging to these official campaigns are as close as TDM will ever get to its own official in-game missions, or in-game story campaigns. These core missions for the base game are in slow and patient continuous development (due to TDM being a hobbyist project of a fan community), and have been gradually added to the base game over the course of several years. &lt;br /&gt;
&lt;br /&gt;
For additional series by TDM authors, please see the next section.&lt;br /&gt;
&lt;br /&gt;
=== Introduction campaign ===&lt;br /&gt;
&lt;br /&gt;
The missions of this campaign serve as a gradual introduction into the setting and gameplay of &#039;&#039;The Dark Mod&#039;&#039;. The missions are shorter and fairly easy, and gradually put the player&#039;s newly acquired skills to the test. &lt;br /&gt;
&lt;br /&gt;
Currently, this is the only series that is bundled directly as part of the base game. By installing TDM, the first three missions available to you will be part of this official mini-campaign. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Series&#039; characters:&#039;&#039;&#039; [[Thief Characters#Corbin|Corbin]] (protagonist), Paschal Murnerus, Moorish adventurers (background)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Series&#039; status:&#039;&#039;&#039; In development, but currently on hiatus. 3 missions currently available, including the (generally plotless) training mission.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=1 style=&amp;quot;border-collapse: collapse;&amp;quot; cellspacing=0 cellpadding=2 width=100%&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;1%&amp;quot;|No.&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;21%&amp;quot;|Fan Mission Title&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;11%&amp;quot;|Author(s)&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;4%&amp;quot; class=&amp;quot;unsortable&amp;quot;|Forum link&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Releases&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Mission Type&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Notes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
!align=left|[[Training Mission (OM)|Training mission]]&lt;br /&gt;
|TDM dev team&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/9932-fan-mission-training-mission-20091017/}} &lt;br /&gt;
|2009-10-17 (original version)&lt;br /&gt;
|Training &amp;lt;br&amp;gt; Jumping/Platforming&lt;br /&gt;
|Unique. The official tutorial mission of TDM, with open-ended gameplay.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
!align=left|[[A New Job (OM)|A New Job]]&lt;br /&gt;
|Springheel&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/18647-tdm-205-official-introductory-missions/}}  &lt;br /&gt;
|2017-03-14&lt;br /&gt;
|City Missions &amp;lt;br&amp;gt; Inn/Tavern&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|2 &lt;br /&gt;
!align=left|[[The Tears of Saint Lucia (OM)|The Tears of Saint Lucia]] &lt;br /&gt;
|TDM dev team&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/10579-fan-mission-the-tears-of-st-lucia-20081021/}} (original version), {{Forumlink|http://forums.thedarkmod.com/topic/18647-tdm-205-official-introductory-missions/}} (current version)&lt;br /&gt;
|2008-10-21 (original version), 2017-02-14 (current version, 3.0)&lt;br /&gt;
|Church/Cathedral&lt;br /&gt;
|[https://www.youtube.com/watch?v=yrGxoi3LSGg Briefing] &amp;lt;br&amp;gt; &#039;&#039;{{TDM-FM|15|standalone release link}}&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Individual authors&#039; series ==&lt;br /&gt;
&lt;br /&gt;
The majority of missions created for &#039;&#039;The Dark Mod&#039;&#039;. For the sake of easier searching, these FM series are arranged in alphabetical order, based on their titles. In terms of release, a Single-mission (S) series consists of several single-mission FM releases over time (the commonest sort), while a Campaign (C) series is an FM containing a storyline consisting of several missions.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;The Accountant&#039;&#039; series ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Release:&#039;&#039;&#039; Single-mission (S)&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; characters:&#039;&#039;&#039; [[Thief_Characters#Corbin|Corbin]] (protagonist)&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; status:&#039;&#039;&#039; Currently on hold.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=1 style=&amp;quot;border-collapse: collapse;&amp;quot; cellspacing=0 cellpadding=2 width=100%&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;1%&amp;quot;|No.&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;21%&amp;quot;|Fan Mission Title&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;11%&amp;quot;|Author(s)&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;4%&amp;quot; class=&amp;quot;unsortable&amp;quot;|Forum link&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Releases&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Mission Type&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Notes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|ac1|1}} &lt;br /&gt;
!align=left|[[The Accountant 1: Thieves and Heirs (FM)|The Accountant 1: Thieves and Heirs]]&lt;br /&gt;
|[[:Category:Missions by Goldwell|Goldwell]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/19164-fan-mission-the-accountant-1-thieves-and-heirs-by-goldwell-20171108/}}&lt;br /&gt;
|2017-11-08&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|[https://www.youtube.com/watch?v=Tk9DtOT4kjc Briefing]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|ac2|2}} &lt;br /&gt;
!align=left|[[The Accountant 2: New in Town (FM)|The Accountant 2: New in Town]]&lt;br /&gt;
|[[:Category:Missions by Goldwell|Goldwell]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/18054-fan-mission-the-accountant-2-new-in-town-by-goldwell-20160509/}} &lt;br /&gt;
|2016-05-08&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|[https://www.youtube.com/watch?v=xeuIO_GcYjQ Briefing] &amp;lt;br&amp;gt; [https://www.youtube.com/watch?v=w6e_SJ0_JOM Gameplay trailer]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Away&#039;&#039; series ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Release:&#039;&#039;&#039; Single-mission (S)&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; characters:&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;Series&#039; status:&#039;&#039;&#039; Currently on hold. Planned to continue.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=1 style=&amp;quot;border-collapse: collapse;&amp;quot; cellspacing=0 cellpadding=2 width=100%&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;1%&amp;quot;|No.&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;21%&amp;quot;|Fan Mission Title&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;11%&amp;quot;|Author(s)&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;4%&amp;quot; class=&amp;quot;unsortable&amp;quot;|Forum link&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Releases&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Mission Type&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Notes&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|away0|0}} &lt;br /&gt;
!align=left|[[Away 0: Stolen Heart (FM)|Away 0: Stolen Heart]]&lt;br /&gt;
|[[:Category:Missions by Geep|Geep]]&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20964-away-0-stolen-heart-by-geep-_atti_-20211112/}}&lt;br /&gt;
|2021-11-12&lt;br /&gt;
|Inn/Tavern, Jail/Prison, Museum Heist, Bank Job&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|airpocket|1}} &lt;br /&gt;
!align=left|[[Away 1: Air Pocket (FM)|Away 1: Air Pocket]]&lt;br /&gt;
|[[:Category:Missions by Geep|Geep]]&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20252-fan-mission-away-1-air-pocket-by-geep-20200207/}}&lt;br /&gt;
|2020-02-06&lt;br /&gt;
|Pirate/Ship&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Chronicles of Skulduggery&#039;&#039; series ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Release:&#039;&#039;&#039; Single-mission (S)&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; characters:&#039;&#039;&#039; [[Thief_Characters#Elyas_Thorne|Elyas Thorne]] (protagonist)&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; status:&#039;&#039;&#039; TBA&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=1 style=&amp;quot;border-collapse: collapse;&amp;quot; cellspacing=0 cellpadding=2 width=100%&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;1%&amp;quot;|No.&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;21%&amp;quot;|Fan Mission Title&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;11%&amp;quot;|Author(s)&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;4%&amp;quot; class=&amp;quot;unsortable&amp;quot;|Forum link&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Releases&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Mission Type&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Notes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|cos0_thief|0}}&lt;br /&gt;
!align=left|[[Chronicles of Skulduggery 0: To Catch a Thief (FM)|To Catch a Thief]] &lt;br /&gt;
|[[:Category:Missions by Bienie|Bienie]]&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/21156-fan-mission-chronicles-of-skulduggery-0-to-catch-a-thief-20211120/}}&lt;br /&gt;
|2021-11-20&lt;br /&gt;
|City Missions Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|127|1}}&lt;br /&gt;
!align=left|[[Chronicles of Skulduggery 1: Pearls and Swine (FM)|Pearls and Swine]] &lt;br /&gt;
|[[:Category:Missions by Bienie|Bienie]]&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/19439-chronicles-of-skulduggery-pearls-and-swine/}}&lt;br /&gt;
|2018-05-25&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|137|2}}&lt;br /&gt;
!align=left|[[Chronicles of Skulduggery 2: A Precarious Position (FM)|A Precarious Position]] &lt;br /&gt;
|[[:Category:Missions by Bienie|Bienie]]&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/19975-fan-mission-chronicles-of-skulduggery-2-a-precarious-position-20190504/}} &lt;br /&gt;
|2019-05-03&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|149|3}}&lt;br /&gt;
!align=left|[[Chronicles of Skulduggery 3: Sacricide (FM)|Sacricide]]&lt;br /&gt;
|[[:Category:Missions by Bienie|Bienie]]&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20483-fan-mission-chronicles-of-skulduggery-3-sacricide-20200718/}}&lt;br /&gt;
|2020-07-18&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Corbin&#039;&#039; series ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Release:&#039;&#039;&#039; Single-mission (S)&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; characters:&#039;&#039;&#039; [[Thief_Characters#Corbin|Corbin]] (protagonist), cardinal Laurenti (background), Keshka brotherhood members (antagonists)&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; status:&#039;&#039;&#039; TBA&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=1 style=&amp;quot;border-collapse: collapse;&amp;quot; cellspacing=0 cellpadding=2 width=100%&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;1%&amp;quot;|No.&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;21%&amp;quot;|Fan Mission Title&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;11%&amp;quot;|Author(s)&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;4%&amp;quot; class=&amp;quot;unsortable&amp;quot;|Forum link&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Releases&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Mission Type&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Notes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|builders_influence|1}}&lt;br /&gt;
!align=left|[[The Builder&#039;s Influence (FM)|The Builder&#039;s Influence]] &lt;br /&gt;
|[[:Category:Missions by RailGun|RailGun]], [[:Category:Missions by Springheel|Springheel]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/10811-fan-mission-the-builders-influence-20100320/}}&lt;br /&gt;
|2010-03-20 (original version), 2010-03-23 (version 2.0) &lt;br /&gt;
|Castle/Fortress&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|score_to_settle|2}}&lt;br /&gt;
!align=left|[[A Score to Settle (FM)|A Score to Settle]] &lt;br /&gt;
|[[:Category:Missions by Springheel|Springheel]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/12894-fan-mission-48-a-score-to-settle-by-springheel-20110701/}} &lt;br /&gt;
|2011-07-01&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|follow|3}} &lt;br /&gt;
!align=left|[[A Reputation to Uphold (FM)|A Reputation to Uphold]]&lt;br /&gt;
|[[:Category:Missions by Springheel|Springheel]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/16204-fan-mission-a-reputation-to-uphold-by-springheel/}} &lt;br /&gt;
|2014-04-18&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|matterofhours|4}}&lt;br /&gt;
!align=left|[[A Matter of Hours (FM)|A Matter of Hours]]&lt;br /&gt;
|[[:Category:Missions by Springheel|Springheel]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/18809-fan-mission-a-matter-of-hours-by-springheel-2842017/}}&lt;br /&gt;
|2017-04-28&lt;br /&gt;
|Warehouse&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Crucible of Omens&#039;&#039; series ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Description:&#039;&#039;&#039; Though originally planned as a major campaign for future releases of TDM, development progress has been halted.&lt;br /&gt;
* &#039;&#039;&#039;Release:&#039;&#039;&#039; Released as Single-mission (S), possibly would have been a Campaign (C) if finished.&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; status:&#039;&#039;&#039; Development halted, campaign apparently cancelled. Only 1 mission has been completed and made available.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=1 style=&amp;quot;border-collapse: collapse;&amp;quot; cellspacing=0 cellpadding=2 width=100%&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;1%&amp;quot;|No.&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;21%&amp;quot;|Fan Mission Title&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;11%&amp;quot;|Author(s)&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;4%&amp;quot; class=&amp;quot;unsortable&amp;quot;|Forum link&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Releases&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Mission Type&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Notes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|bcd|1}} &lt;br /&gt;
!align=left|[[Crucible of Omens: Behind Closed Doors (FM)|Crucible of Omens: Behind Closed Doors]]&lt;br /&gt;
|[[:Category:Missions by Bikerdude|Bikerdude]], Crucible of Omens Team&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/17627-crucible-of-omens-behind-closed-doors-by-bikerdude-the-crucible-team-updated-18122015/}}&lt;br /&gt;
|2015-12-19&lt;br /&gt;
|City Missions&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Duncan Lynch&#039;&#039; series ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Release:&#039;&#039;&#039; Single-mission (S)&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; characters:&#039;&#039;&#039; [[Thief_Characters#Duncan_Lynch|Duncan Lynch]] (protagonist)&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; status:&#039;&#039;&#039; TBA&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=1 style=&amp;quot;border-collapse: collapse;&amp;quot; cellspacing=0 cellpadding=2 width=100%&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;1%&amp;quot;|No.&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;21%&amp;quot;|Fan Mission Title&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;11%&amp;quot;|Author(s)&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;4%&amp;quot; class=&amp;quot;unsortable&amp;quot;|Forum link&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Releases&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Mission Type&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Notes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|factoryheist|1}}&lt;br /&gt;
!align=left|[[The Factory Heist (FM)|The Factory Heist]] &lt;br /&gt;
|[[:Category:Missions by thebigh|thebigh]]&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20562-the-factory-heist-12-sep-2020/}}&lt;br /&gt;
|2020-09-12&lt;br /&gt;
|Warehouse&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|housecall|2}}&lt;br /&gt;
!align=left|[[A House Call (FM)|A House Call]] &lt;br /&gt;
|[[:Category:Missions by thebigh|thebigh]]&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/21329-a-house-call-by-thebigh-mar-10-2022/}}&lt;br /&gt;
|2022-03-10&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|delisle|3}}&lt;br /&gt;
!align=left|[[The House of deLisle (FM)|The House of deLisle]] &lt;br /&gt;
|[[:Category:Missions by thebigh|thebigh]]&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22227-fan-mission-the-house-of-delisle/}} &lt;br /&gt;
|2023-10-01&lt;br /&gt;
|Mansion/Estate, City Missions &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;The Hare in the Snare&#039;&#039; series ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Release:&#039;&#039;&#039; Single-mission (S)&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; characters:&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;Series&#039; status:&#039;&#039;&#039; Planned to continue.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=1 style=&amp;quot;border-collapse: collapse;&amp;quot; cellspacing=0 cellpadding=2 width=100%&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;1%&amp;quot;|No.&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;21%&amp;quot;|Fan Mission Title&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;11%&amp;quot;|Author(s)&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;4%&amp;quot; class=&amp;quot;unsortable&amp;quot;|Forum link&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Releases&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Mission Type&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Notes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|hareinthesnare|1}} &lt;br /&gt;
!align=left|[[The Hare in the Snare: Part 1 (FM)|The Hare in the Snare: Part 1]]&lt;br /&gt;
|[[:Category:Missions by Frost_Salamander|Frost_Salamander]] &amp;amp; [[:Category:Missions by Kerry000|Kerry000]]&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20883-fan-mission-the-hare-in-the-snare-part-1}}&lt;br /&gt;
|2021-04-09&lt;br /&gt;
|City Missions &amp;lt;br&amp;gt; Inn/Tavern &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Hidden Hands&#039;&#039; series ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Release:&#039;&#039;&#039; Single-mission (S)&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; characters:&#039;&#039;&#039; TBA&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; status:&#039;&#039;&#039; TBA&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=1 style=&amp;quot;border-collapse: collapse;&amp;quot; cellspacing=0 cellpadding=2 width=100%&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;1%&amp;quot;|No.&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;21%&amp;quot;|Fan Mission Title&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;11%&amp;quot;|Author(s)&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;4%&amp;quot; class=&amp;quot;unsortable&amp;quot;|Forum link&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Releases&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Mission Type&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Notes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|hhi|1}}&lt;br /&gt;
!align=left|[[Hidden Hands 1: Initiation (FM)|Initiation]] &lt;br /&gt;
|[[:Category:Missions by JackFarmer|JackFarmer]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/index.php?/topic/19796-hidden-hands-initiation-27122018/}}&lt;br /&gt;
|2018-12-27&lt;br /&gt;
|Mansion/Estate &amp;lt;br&amp;gt; Ship&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|hhvf|2}}&lt;br /&gt;
!align=left|[[Hidden Hands 2: Vitalic Fever (FM)|Vitalic Fever]] &lt;br /&gt;
|[[:Category:Missions by JackFarmer|JackFarmer]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/index.php?/topic/20051-hidden-hands-vitalic-fever-20072019/}} &lt;br /&gt;
|2019-07-20&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|hhtlc|3}}&lt;br /&gt;
!align=left|[[Hidden Hands 3: The Lost Citadel (FM)|The Lost Citadel]] &lt;br /&gt;
|[[:Category:Missions by JackFarmer|JackFarmer]]&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20490-hidden-hands-the-lost-citadel-23072020}} &lt;br /&gt;
|2020-07-23&lt;br /&gt;
|Castle/Fortress &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|hhta|4}}&lt;br /&gt;
!align=left|[[Hidden Hands 4: The Anomaly (FM)|The Anomaly]] &lt;br /&gt;
|[[:Category:Missions by JackFarmer|JackFarmer]]&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20909-hidden-hands-the-anomaly}}&lt;br /&gt;
|2021-05-01&lt;br /&gt;
|Castle/Fortress  &amp;lt;br&amp;gt; Forest&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;In A Time of Need&#039;&#039; series ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Release:&#039;&#039;&#039; Single-mission (S)&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; characters:&#039;&#039;&#039; [[Thief_Characters#Terry|Terry]] (supporting)&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; status:&#039;&#039;&#039; TBA&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=1 style=&amp;quot;border-collapse: collapse;&amp;quot; cellspacing=0 cellpadding=2 width=100%&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;1%&amp;quot;|No.&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;21%&amp;quot;|Fan Mission Title&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;11%&amp;quot;|Author(s)&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;4%&amp;quot; class=&amp;quot;unsortable&amp;quot;|Forum link&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Releases&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Mission Type&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Notes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|timeofneed|1}}&lt;br /&gt;
!align=left|[[In A Time of Need 1 (FM)|In A Time Of Need]] &lt;br /&gt;
|[[:Category:Missions by Kyyrma|Kyyrma]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/15354-fan-mission-in-a-time-of-need-by-kyyrma-20131112/}}&lt;br /&gt;
|2013-11-12 &lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|breakingout|2}}&lt;br /&gt;
!align=left|[[In A Time of Need 2: Breaking Out the Fence (FM)|Breaking Out the Fence]]&lt;br /&gt;
|[[:Category:Missions by Kyyrma|Kyyrma]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/16091-fan-mission-breaking-out-the-fence-17032014-by-kyyrma/}} &lt;br /&gt;
|2014-03-17&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Master thief Corso&#039;&#039; series ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Release:&#039;&#039;&#039; Single-mission (S)&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; characters:&#039;&#039;&#039; [[Thief Characters#Corso|Corso]] (protagonist), [[Thief Characters#Mingus|Mingus]] (background, supporting)&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; status:&#039;&#039;&#039; On hiatus.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=1 style=&amp;quot;border-collapse: collapse;&amp;quot; cellspacing=0 cellpadding=2 width=100%&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;1%&amp;quot;|No.&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;21%&amp;quot;|Fan Mission Title&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;11%&amp;quot;|Author(s)&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;4%&amp;quot; class=&amp;quot;unsortable&amp;quot;|Forum link&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Releases&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Mission Type&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Notes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|lockner|1}}&lt;br /&gt;
!align=left|[[Lockner Manor (FM)|Lockner Manor]] &lt;br /&gt;
|[[:Category:Missions by Buck28|buck28]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/16452-new-mission-lockner-manor/}}&lt;br /&gt;
|2014-08-02&lt;br /&gt;
|Mansion/Estate &amp;lt;br&amp;gt; Inn/Tavern&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|briarwood|2}}&lt;br /&gt;
!align=left|[[Briarwood Cathedral (FM)|Briarwood Cathedral]] &lt;br /&gt;
|[[:Category:Missions by Buck28|buck28]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/16644-briarwood-cathedral/}} &lt;br /&gt;
|2014-10-29&lt;br /&gt;
|Church/Cathedral &amp;lt;br&amp;gt; Horror&lt;br /&gt;
|Winner of the [[Fan Mission Contests#2014 Halloween Speed-build Contest|2014 Halloween Speed-build Contest]].&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;No Honor Among Thieves&#039;&#039; campaign ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Release:&#039;&#039;&#039; Campaign (C)&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; characters:&#039;&#039;&#039; TBA&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; status:&#039;&#039;&#039; TBA&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=1 style=&amp;quot;border-collapse: collapse;&amp;quot; cellspacing=0 cellpadding=2 width=100%&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;1%&amp;quot;|No.&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;21%&amp;quot;|Fan Mission Title&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;11%&amp;quot;|Author(s)&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;4%&amp;quot; class=&amp;quot;unsortable&amp;quot;|Forum link&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Releases&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Mission Type&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Notes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|nhat3|1}}&lt;br /&gt;
!align=left|[[No Honor Among Thieves (FM)|Politics]] &lt;br /&gt;
|[[:Category:Missions by Goldchocobo|Goldchocobo]], [[:Category:Missions by RailGun|RailGun]], [[:Category:Missions by Mortem Desino|Mortem Desino]], [[:Category:Missions by Bikerdude|Bikerdude]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/10993-fan-mission-no-honor-among-thieves-20100429/}}&lt;br /&gt;
|2010-04-29 (original version), 2015-05-30 (current version, 3.0)&lt;br /&gt;
|Church/Cathedral&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|nhat3|2}} &lt;br /&gt;
!align=left|[[No Honor Among Thieves (FM)|A Night Out on the Town]]&lt;br /&gt;
|[[:Category:Missions by Goldchocobo|Goldchocobo]], [[:Category:Missions by RailGun|RailGun]], [[:Category:Missions by Mortem Desino|Mortem Desino]], [[:Category:Missions by Bikerdude|Bikerdude]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/10993-fan-mission-no-honor-among-thieves-20100429/}}&lt;br /&gt;
|2010-04-29 (original version), 2015-05-30 (current version, 3.0)&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|nhat3|3}}&lt;br /&gt;
!align=left|[[No Honor Among Thieves (FM)|No Honor Among Anyone &amp;lt;br&amp;gt; (a.k.a. Forest)]] &lt;br /&gt;
|[[:Category:Missions by Goldchocobo|Goldchocobo]], [[:Category:Missions by RailGun|RailGun]], [[:Category:Missions by Mortem Desino|Mortem Desino]], [[:Category:Missions by Bikerdude|Bikerdude]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/10993-fan-mission-no-honor-among-thieves-20100429/}}&lt;br /&gt;
|2010-04-29 (original version), 2015-05-30 (current version, 3.0)&lt;br /&gt;
|Outdoor/Pagan, Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Of Brambles and Thorns&#039;&#039; series ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Release:&#039;&#039;&#039; Single-mission (S)&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; characters:&#039;&#039;&#039; TBA&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; status:&#039;&#039;&#039; TBA&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=1 style=&amp;quot;border-collapse: collapse;&amp;quot; cellspacing=0 cellpadding=2 width=100%&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;1%&amp;quot;|No.&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;21%&amp;quot;|Fan Mission Title&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;11%&amp;quot;|Author(s)&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;4%&amp;quot; class=&amp;quot;unsortable&amp;quot;|Forum link&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Releases&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Mission Type&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Notes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|onesteptoofar|1}} &lt;br /&gt;
!align=left|[[One Step Too Far (FM)|One Step Too Far]]&lt;br /&gt;
|[[:Category:Missions by Dragofer|Dragofer]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/16457-fan-mission-one-step-too-far-by-dragofer-20140804/}}&lt;br /&gt;
|2014-08-04&lt;br /&gt;
|Pirate &amp;lt;br&amp;gt; Horror&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|river|2}} &lt;br /&gt;
!align=left|[[Down by the Riverside (FM)|Down by the Riverside]]&lt;br /&gt;
|[[:Category:Missions by Dragofer|Dragofer]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/18402-fan-mission-down-by-the-riverside-by-dragofer-20160925/}} &lt;br /&gt;
|2016-09-25&lt;br /&gt;
|Mansion/Estate &amp;lt;br&amp;gt; Ship&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Penny Dreadful&#039;&#039; series ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Release:&#039;&#039;&#039; Single-mission (S)&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; characters:&#039;&#039;&#039; Gerald Foxley (protagonist)&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; status:&#039;&#039;&#039; TBA&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=1 style=&amp;quot;border-collapse: collapse;&amp;quot; cellspacing=0 cellpadding=2 width=100%&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;1%&amp;quot;|No.&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;21%&amp;quot;|Fan Mission Title&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;11%&amp;quot;|Author(s)&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;4%&amp;quot; class=&amp;quot;unsortable&amp;quot;|Forum link&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Releases&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Mission Type&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Notes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|penny1_1|1}}&lt;br /&gt;
!align=left|[[Penny Dreadful 1: The Grail of Regrets (FM)|Penny Dreadful 1: The Grail of Regrets]] &lt;br /&gt;
|[[:Category:Missions by Melan|Melan]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/14952-fan-mission-penny-dreadful-by-melan-20130728/}} &lt;br /&gt;
|2013-07-27&lt;br /&gt;
|Horror &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|penny2_1|2}}&lt;br /&gt;
!align=left|[[Penny Dreadful 2: All the Way Up (FM)|Penny Dreadful 2: All the Way Up]] &lt;br /&gt;
|[[:Category:Missions by Melan|Melan]], [[:Category:Missions by Bikerdude|Bikerdude]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/16387-fan-mission-penny-dreadful-2-by-melan-and-bikerdude-2014078/}} &lt;br /&gt;
|2014-07-08&lt;br /&gt;
|Thieves&#039; Highway (Rooftop) &lt;br /&gt;
|[https://www.youtube.com/watch?v=WmPfCfbeWvg Trailer]&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|penny3|3}}&lt;br /&gt;
!align=left|[[Penny Dreadful 3: Erasing the Trail (FM)|Penny Dreadful 3: Erasing the Trail]] &lt;br /&gt;
|[[:Category:Missions by Melan|Melan]], [[:Category:Missions by Bikerdude|Bikerdude]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/18200-fan-mission-penny-dreadful-3-by-melan-and-bikerdude-20160710/}} &lt;br /&gt;
|2016-07-09&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Quinn Co.&#039;&#039; campaign ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Release:&#039;&#039;&#039; Campaign (C) (originally single mission (S))&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; characters:&#039;&#039;&#039; TBA&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; status:&#039;&#039;&#039; Completed and released.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=1 style=&amp;quot;border-collapse: collapse;&amp;quot; cellspacing=0 cellpadding=2 width=100%&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;1%&amp;quot;|No.&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;21%&amp;quot;|Fan Mission Title&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;11%&amp;quot;|Author(s)&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;4%&amp;quot; class=&amp;quot;unsortable&amp;quot;|Forum link&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Releases&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Mission Type&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Notes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|quinn|1}} &lt;br /&gt;
!align=left|[[Quinn Co. (FM)|La Banque Bienveillante]]&lt;br /&gt;
|[[:Category:Missions by Airship Ballet|Airship Ballet]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/16702-fan-mission-la-banque-bienveillante-by-airship-ballet-20141122/}}&lt;br /&gt;
|2014-11-22 (original version), 2015-02-04 (current version, bundled with Chase Mercantile) &lt;br /&gt;
|Bank Jobs &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|quinn|2}}&lt;br /&gt;
!align=left|[[Quinn Co. (FM)|Chase Mercantile]]&lt;br /&gt;
|[[:Category:Missions by Airship Ballet|Airship Ballet]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/16912-fan-mission-chase-mercantile-by-airship-ballet-20150204/}}&lt;br /&gt;
|2015-02-04 (now bundled with La Banque Bienveillante) &lt;br /&gt;
|Bank Jobs &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Sam Wilson&#039;&#039; series ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Release:&#039;&#039;&#039; Single-mission (S)&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; characters:&#039;&#039;&#039; [[Thief_Characters#Sam Wilson|Samuel &amp;quot;Sam&amp;quot; Wilson]] (protagonist)&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; status:&#039;&#039;&#039; Ongoing.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=1 style=&amp;quot;border-collapse: collapse;&amp;quot; cellspacing=0 cellpadding=2 width=100%&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;1%&amp;quot;|No.&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;21%&amp;quot;|Fan Mission Title&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;11%&amp;quot;|Author(s)&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;4%&amp;quot; class=&amp;quot;unsortable&amp;quot;|Forum link&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Releases&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Mission Type&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Notes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|sw1_ebound|1}}&lt;br /&gt;
!align=left|[[Sam Wilson 1: Eastbound (FM)|Sam Wilson 1: Eastbound]] &lt;br /&gt;
|[[:Category:Missions by jonri|jonri]]&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/21402-fan-mission-sam-wilson-1-eastbound-2022-05-07}}&lt;br /&gt;
|2022-05-07 &lt;br /&gt;
|Train &lt;br /&gt;
|The first TDM FM to be set on a steam train.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Selis Woderose&#039;&#039; series ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Release:&#039;&#039;&#039; Single-mission (S)&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; characters:&#039;&#039;&#039; [[Thief_Characters#Selis_Woderose|Selis Woderose]] (protagonist)&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; status:&#039;&#039;&#039; Currently on hiatus.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=1 style=&amp;quot;border-collapse: collapse;&amp;quot; cellspacing=0 cellpadding=2 width=100%&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;1%&amp;quot;|No.&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;21%&amp;quot;|Fan Mission Title&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;11%&amp;quot;|Author(s)&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;4%&amp;quot; class=&amp;quot;unsortable&amp;quot;|Forum link&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Releases&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Mission Type&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Notes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|flakebridge|1}}&lt;br /&gt;
!align=left|[[Selis Woderose 1: Flakebridge Monastery (FM)|Flakebridge Monastery]] &lt;br /&gt;
|[[:Category:Missions by Jesps|Jesps]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/11991-fm-flakebridge-monastery-by-jesps/}}&lt;br /&gt;
|2010-12-05&lt;br /&gt;
|Church/Cathedral &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|rake_off|2}}&lt;br /&gt;
!align=left|[[Selis Woderose 2: Rake-off (FM)|Rake-off]]&lt;br /&gt;
|[[:Category:Missions by Jesps|Jesps]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/12846-fm-rake-off-19-06-2011/}} &lt;br /&gt;
|2011-06-19&lt;br /&gt;
|Castle/Fortress &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Shadowcursed&#039;&#039; series ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Release:&#039;&#039;&#039; Single-mission (S) for the first mission and Campaign (C) for the second mission.&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; characters:&#039;&#039;&#039; [[Thief_Characters#Bolen|Bolen]] (protagonist)&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; status:&#039;&#039;&#039; Ongoing, currently on hiatus.&lt;br /&gt;
* &#039;&#039;&#039;Ancilliary materials:&#039;&#039;&#039; &#039;&#039;[http://www.amazon.com/Shadowcursed-ebook/dp/B00BYEW02M Shadowcursed]&#039;&#039; novella (e-book)&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=1 style=&amp;quot;border-collapse: collapse;&amp;quot; cellspacing=0 cellpadding=2 width=100%&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;1%&amp;quot;|No.&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;21%&amp;quot;|Fan Mission Title&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;11%&amp;quot;|Author(s)&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;4%&amp;quot; class=&amp;quot;unsortable&amp;quot;|Forum link&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Releases&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Mission Type&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Notes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|requiem|1}}&lt;br /&gt;
!align=left|[[Requiem (FM)|Requiem]]&lt;br /&gt;
|[[:Category:Missions by Moonbo|Moonbo]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/15101-fan-mission-requiem-by-gelo-moonbo-fleisher-2013106/}}&lt;br /&gt;
|2013-10-08&lt;br /&gt;
|Church/Cathedral &amp;lt;br&amp;gt; Lost Civilizations&lt;br /&gt;
|[https://web.archive.org/web/20160409012413/https://community.eidosmontreal.com/blogs/thief-mod-winners Winner] of the 2014 official &#039;&#039;[http://forums.thedarkmod.com/topic/15956-square-enix-and-amazoncom-announce-thief-mod-contest/ Thief Mod Competition]&#039;&#039; by Square Enix &amp;amp; Amazon.com.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|ahouseoflockedsecrets|2}}&lt;br /&gt;
!align=left|[[A House of Locked Secrets (FM)|A House of Locked Secrets]] &lt;br /&gt;
|[[:Category:Missions by Moonbo|Moonbo]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/17163-fan-mission-a-house-of-locked-secrets-by-gelo-moonbo-fleisher-20150528/}} &lt;br /&gt;
|2015-05-29 	&lt;br /&gt;
|Church/Cathedral &amp;lt;br&amp;gt; Mansion/Estate&lt;br /&gt;
|[https://www.youtube.com/watch?v=f5NuTJEZ8VE Trailer] &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Shadows of Northdale&#039;&#039; series ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Release:&#039;&#039;&#039; Single-mission (S)&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; characters:&#039;&#039;&#039; [[Thief Characters#Corbin|Corbin]] (protagonist)&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; status:&#039;&#039;&#039; Ongoing, currently in gradual development.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=1 style=&amp;quot;border-collapse: collapse;&amp;quot; cellspacing=0 cellpadding=2 width=100%&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;1%&amp;quot;|No.&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;21%&amp;quot;|Fan Mission Title&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;11%&amp;quot;|Author(s)&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;4%&amp;quot; class=&amp;quot;unsortable&amp;quot;|Forum link&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Releases&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Mission Type&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Notes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|northdale1|1}}&lt;br /&gt;
!align=left|[[Shadows of Northdale Act I (FM)|Shadows of Northdale ACT I: &amp;lt;br&amp;gt; A Curious Mind]] &lt;br /&gt;
|[[:Category:Missions by Goldwell|Goldwell]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/19368-fan-mission-shadows-of-northdale-act-i-by-goldwell-20180323/}} &lt;br /&gt;
|2018-03-23&lt;br /&gt;
|City Missions&lt;br /&gt;
|[https://www.youtube.com/watch?v=p4nP3lYd6wg Briefing]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|northdale2|2}}&lt;br /&gt;
!align=left|[[Shadows of Northdale Act II (FM)|Shadows of Northdale ACT II: &amp;lt;br&amp;gt; Down the Rabbit Hole]] &lt;br /&gt;
|[[:Category:Missions by Goldwell|Goldwell]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/19936-fan-mission-shadows-of-northdale-act-ii-by-goldwell-20190320/}} &lt;br /&gt;
|2019-03-20&lt;br /&gt;
|City Missions&lt;br /&gt;
|[https://www.youtube.com/watch?v=KO-eIOX9nqI Briefing]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;St Alban&#039;&#039; series ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Release:&#039;&#039;&#039; Single-mission (S)&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; characters:&#039;&#039;&#039; TBA&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; status:&#039;&#039;&#039; TBA &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=1 style=&amp;quot;border-collapse: collapse;&amp;quot; cellspacing=0 cellpadding=2 width=100%&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;1%&amp;quot;|No.&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;21%&amp;quot;|Fan Mission Title&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;11%&amp;quot;|Author(s)&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;4%&amp;quot; class=&amp;quot;unsortable&amp;quot;|Forum link&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Releases&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Mission Type&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Notes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|caduceus|1}}&lt;br /&gt;
!align=left|[[St Alban 1: The Caduceus of St Alban (FM)|The Caduceus of St. Alban]] &lt;br /&gt;
|[[:Category:Missions by Bikerdude|Bikerdude]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/11644-the-caduceus-of-st-alban-vertical-fm-contest-entry-aug-8th-2010/}} &lt;br /&gt;
|2010-08-23 (original version), 2010-08-26 (version 1.5.5)&lt;br /&gt;
|Church/Cathedral&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|cathedral|2}}&lt;br /&gt;
!align=left|[[St Alban 2: St Albans Cathedral (FM)|St. Albans Cathedral]]&lt;br /&gt;
|[[:Category:Missions by Bikerdude|Bikerdude]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/16343-fan-mission-st-albans-cathedral-v20-11062014/}} (current, 2.0 version)&lt;br /&gt;
|2010-11-01 (original version), 2014-06-11 (version 2.0)&lt;br /&gt;
|Church/Cathedral&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Talbot&#039;&#039; series ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Release:&#039;&#039;&#039; Single-mission (S)&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; characters:&#039;&#039;&#039; Talbot&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; status:&#039;&#039;&#039; Ongoing, currently on hiatus.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=1 style=&amp;quot;border-collapse: collapse;&amp;quot; cellspacing=0 cellpadding=2 width=100%&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;1%&amp;quot;|No.&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;21%&amp;quot;|Fan Mission Title&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;11%&amp;quot;|Author(s)&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;4%&amp;quot; class=&amp;quot;unsortable&amp;quot;|Forum link&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Releases&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Mission Type&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Notes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|returntothecity|1}} &lt;br /&gt;
!align=left|[[Talbot 2: Return to the City (FM)|Return to the City]]&lt;br /&gt;
|[[:Category:Missions by Melan|Melan]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/10509-fan-mission-return-to-the-city-by-melan-20100110/}} (original version), {{Forumlink|http://forums.thedarkmod.com/topic/12390-fan-mission-return-to-the-city-v2-01032011/}} (version 2.0)&lt;br /&gt;
|2010-01-10 (original version), 2015-01-03 (2.0), 2015-01-03 (current version, 3.0)&lt;br /&gt;
|City Missions&lt;br /&gt;
|Winner of the [[Fan Mission Contests#2009 Grand Christmas Contest|2009 Grand Christmas Contest]].&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|fauchard1_1|2}}&lt;br /&gt;
!align=left|[[Talbot 3: Fiasco at Fauchard Street (FM)|Fiasco at Fauchard Street]]&lt;br /&gt;
|[[:Category:Missions by Melan|Melan]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/12655-fan-mission-fiasco-at-fauchard-street-by-melan-20110501/}} &lt;br /&gt;
|2011-05-01&lt;br /&gt;
|Thieves&#039; Highway (Rooftop)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note:&#039;&#039;&#039; [[Sir Talbot&#039;s Collateral (FM)|Sir Talbot&#039;s Collateral]] by Bikerdude and Baal is actually an unrelated mission, just with a similarly named character.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;The Lieutenant&#039;&#039; series ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Release:&#039;&#039;&#039; Single-mission (S)&lt;br /&gt;
* &#039;&#039;&#039;Description:&#039;&#039;&#039; The series follows the cases of an intelligence officer.&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; characters:&#039;&#039;&#039; The titular Lieutenant &lt;br /&gt;
* &#039;&#039;&#039;Series&#039; status:&#039;&#039;&#039; Ongoing.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=1 style=&amp;quot;border-collapse: collapse;&amp;quot; cellspacing=0 cellpadding=2 width=100%&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;1%&amp;quot;|No.&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;21%&amp;quot;|Fan Mission Title&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;11%&amp;quot;|Author(s)&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;4%&amp;quot; class=&amp;quot;unsortable&amp;quot;|Forum link&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Releases&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Mission Type&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Notes&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|inplainsight|1}}&lt;br /&gt;
!align=left|[[The Lieutenant 1: In Plain Sight (FM)|The Lieutenant 1: In Plain Sight]] &lt;br /&gt;
|[[:Category:Missions by Frost_Salamander|Frost_Salamander]]&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/21549-fan-mission-in-plain-sight-by-frost_salamander-20220807}} &lt;br /&gt;
|2022-08-07&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|highex|2}}&lt;br /&gt;
!align=left|[[The Lieutenant 2: High Expectations (FM)|The Lieutenant 2: High Expectations]] &lt;br /&gt;
|[[:Category:Missions by Frost_Salamander|Frost_Salamander]]&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/21837-fan-mission-the-lieutenant-2-high-expectations-by-frost_salamander-20230424}} &lt;br /&gt;
|2023-04-24&lt;br /&gt;
|Mansion/Estate &amp;lt;br&amp;gt; City Missions &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|foreignaffaris|3}}&lt;br /&gt;
!align=left|[[The Lieutenant 3: Foreign Affairs (FM)|The Lieutenant 3: Foreign Affairs]] &lt;br /&gt;
|[[:Category:Missions by Frost_Salamander|Frost_Salamander]]&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22452-fan-mission-the-lieutenant-3-foreign-affairs-by-frost_salamander}} &lt;br /&gt;
|2024/11/08&lt;br /&gt;
|City Missions, Moorish Architecture&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|reciprocalgambit|4}}&lt;br /&gt;
!align=left|[[The Lieutenant 4: A Reciprocal Gambit (FM)|The Lieutenant 4: A Reciprocal Gambit]] &lt;br /&gt;
|[[:Category:Missions by Frost_Salamander|Frost_Salamander]]&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22945-fan-mission-the-lieutenant-4-a-reciprocal-gambit-by-frost_salamander}} &lt;br /&gt;
|2025-06-18&lt;br /&gt;
|City Missions, Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Thief&#039;s Den&#039;&#039; series ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Release:&#039;&#039;&#039; Single-mission (S)&lt;br /&gt;
* &#039;&#039;&#039;Description:&#039;&#039;&#039; The &#039;&#039;de facto&#039;&#039; oldest FM series in &#039;&#039;The Dark Mod&#039;&#039;. Follow the skillful thief Farrell as he navigates the criminal underworld of [[The City|Bridgeport]] and the surrounding world.&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; characters:&#039;&#039;&#039; [[Thief Characters#Farrell|Farrell]] (protagonist), [[Thief Characters#Sebastian_Creep|Sebastian Creep]] (supporting)&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; status:&#039;&#039;&#039; Currently on hiatus.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=1 style=&amp;quot;border-collapse: collapse;&amp;quot; cellspacing=0 cellpadding=2 width=100%&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;1%&amp;quot;|No.&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;21%&amp;quot;|Fan Mission Title&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;11%&amp;quot;|Author(s)&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;4%&amp;quot; class=&amp;quot;unsortable&amp;quot;|Forum link&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Releases&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Mission Type&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Notes&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|thiefsden|1}}&lt;br /&gt;
!align=left|[[Thief&#039;s Den 1: Thief&#039;s Den (FM)|Thief&#039;s Den]] &lt;br /&gt;
|[[:Category:Missions by Fidcal|Fidcal]], [[:Category:Missions by Greebo|Greebo]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/11347-fan-mission-thiefs-den-re-release-by-fidcal20100704/}} &lt;br /&gt;
|2008-01-18 (original version), 2010-07-04 (version 2.0)&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|chalice1_1|2}}&lt;br /&gt;
!align=left|[[Thief&#039;s Den 2: The Chalice of Kings (FM)|The Chalice of Kings]] &lt;br /&gt;
|[[:Category:Missions by Fidcal|Fidcal]] (original version), [[:Category:Missions by Bikerdude|Bikerdude]], [[:Category:Missions by Xarg|Xarg]] (edits, version 2.0)&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/9935-fan-mission-chalice-of-kings-by-fidcal-20091017/}} &lt;br /&gt;
|2009-10-15 (original version), 2015-09-24 (version 2.0)&lt;br /&gt;
|Castle/Fortress&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|heartv2|3}}&lt;br /&gt;
!align=left|[[Thief&#039;s Den 3: The Heart of Lone Salvation (FM)|The Heart of Lone Salvation]] &lt;br /&gt;
|[[:Category:Missions by Fidcal|Fidcal]], Baddcog, [[:Category:Missions by Bikerdude|Bikerdude]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/10878-fan-mission-the-heart-of-lone-salvation-by-fidcal-baddcog-bikerdude-20100402/}}&lt;br /&gt;
|2010-04-02 (original version), 2014-04-12 (version 2.0)&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|alchemist|4}}&lt;br /&gt;
!align=left|[[Thief&#039;s Den 4: The Alchemist (FM)|The Alchemist]]&lt;br /&gt;
|[[:Category:Missions by Sotha|Sotha]], [[:Category:Missions by Fidcal|Fidcal]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/11170-fan-mission-the-alchemist-by-sotha-fidcal20100601/}}&lt;br /&gt;
|2010-06-01 (original version) 2010-06-04 (update)&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Thomas Porter&#039;&#039; series ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Release:&#039;&#039;&#039; Single-mission (S)&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; characters:&#039;&#039;&#039; [[Thief_Characters#Thomas Porter|Thomas Porter]] (protagonist), [[Thief_Characters#Lark Butternose|Lark Butternose]] (supporting), [[Noble/Wealthy_Characters#Godfrey_Knighton|Godfrey Knighton]] (background)&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; status:&#039;&#039;&#039; Concluded. &lt;br /&gt;
* &#039;&#039;&#039;Overview:&#039;&#039;&#039; [http://forums.thedarkmod.com/topic/15179-the-thomas-porter-series/ Courtesy of] Sotha.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=1 style=&amp;quot;border-collapse: collapse;&amp;quot; cellspacing=0 cellpadding=2 width=100%&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;1%&amp;quot;|No.&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;21%&amp;quot;|Fan Mission Title&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;11%&amp;quot;|Author(s)&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;4%&amp;quot; class=&amp;quot;unsortable&amp;quot;|Forum link&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Releases&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Mission Type&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Notes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|mandrasola|1}}&lt;br /&gt;
!align=left|[[Thomas Porter 1: Mandrasola (FM)|Mandrasola]] &lt;br /&gt;
|[[:Category:Missions by Sotha|Sotha]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/12575-fan-mission-mandrasola-by-sotha-20110410/}} &lt;br /&gt;
|2011-04-10&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|knighton_manor|2}}&lt;br /&gt;
!align=left|[[Thomas Porter 2: Knighton Manor (FM)|Knighton Manor]]&lt;br /&gt;
|[[:Category:Missions by Sotha|Sotha]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/11898-fan-mission-the-knighton-manor-by-sotha-20101109/}} &lt;br /&gt;
|2010-11-09&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|beleaguered_fence|3}}&lt;br /&gt;
!align=left|[[Thomas Porter 3: The Beleaguered Fence (FM)|The Beleaguered Fence]]&lt;br /&gt;
|[[:Category:Missions by Sotha|Sotha]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/11298-fan-mission-the-beleaguered-fence-by-sotha-20100623/}}&lt;br /&gt;
|2010-06-23&lt;br /&gt;
|Jail/Prison&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|glenham_tower|4}}&lt;br /&gt;
!align=left|[[Thomas Porter 4: Glenham Tower (FM)|Glenham Tower]]&lt;br /&gt;
|[[:Category:Missions by Sotha|Sotha]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/11423-fan-mission-the-glenham-tower-by-sotha-20100717/}}&lt;br /&gt;
|2010-07-17&lt;br /&gt;
|Castle/Fortress &amp;lt;br&amp;gt; Horror&lt;br /&gt;
|Winner of the [[Fan_Mission_Contests#2010_Summer_Vertical_Contest|2010 Summer Vertical Contest]].&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|transaction|5}}&lt;br /&gt;
!align=left|[[Thomas Porter 5: The Transaction (FM)|The Transaction]] &lt;br /&gt;
|[[:Category:Missions by Sotha|Sotha]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/12408-fan-mission-the-transaction-by-sotha-20110304/}}&lt;br /&gt;
|2011-03-04&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|phrase_book|6}}&lt;br /&gt;
!align=left|[[Thomas Porter 6: The Phrase Book (FM)|The Phrase Book]] &lt;br /&gt;
|[[:Category:Missions by Sotha|Sotha]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/13799-fan-mission-the-phrase-book-by-sotha-20120512/}}&lt;br /&gt;
|2012-05-11 &lt;br /&gt;
|City Missions &amp;lt;br&amp;gt; Thieves&#039; Highway (Rooftop)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|lich_queens_demise|7}} &lt;br /&gt;
!align=left|[[Thomas Porter 7: The Lich Queen&#039;s Demise (FM)|The Lich Queen&#039;s Demise]]&lt;br /&gt;
|[[:Category:Missions by Sotha|Sotha]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/14826-fan-mission-the-lich-queens-demise-by-sotha-20130520/}}&lt;br /&gt;
|2013-05-20&lt;br /&gt;
|Horror&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Ulysses&#039;&#039; series ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Release:&#039;&#039;&#039; Single-mission (S)&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; characters:&#039;&#039;&#039; Ulysses (protagonist)&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; status:&#039;&#039;&#039; TBA &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=1 style=&amp;quot;border-collapse: collapse;&amp;quot; cellspacing=0 cellpadding=2 width=100%&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;1%&amp;quot;|No.&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;21%&amp;quot;|Fan Mission Title&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;11%&amp;quot;|Author(s)&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;4%&amp;quot; class=&amp;quot;unsortable&amp;quot;|Forum link&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Releases&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Mission Type&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Notes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|ulysses_genesis|1}}&lt;br /&gt;
!align=left|[[Ulysses 1: Genesis (FM)|Ulysses: Genesis]] &lt;br /&gt;
|[[:Category:Missions by Sotha|Sotha]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/16428-fan-mission-ulysses-genesis-by-sotha-20140724/}}&lt;br /&gt;
|2014-07-24&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|u2_flock|2}}&lt;br /&gt;
!align=left|[[Ulysses 2: Protecting the Flock (FM)|Ulysses: Protecting the Flock]]&lt;br /&gt;
|[[:Category:Missions by Sotha|Sotha]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/17162-fan-mission-ulysses-2-protecting-the-flock-by-sotha-20150528/}}&lt;br /&gt;
|2015-05-28&lt;br /&gt;
|Church/Cathedral&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Vengeance for a Thief&#039;&#039; campaign ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Release:&#039;&#039;&#039; Single-mission (S) for the first two published missions, Campaign (C) for the final release that also includes a new first mission.&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; characters:&#039;&#039;&#039; TBA&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; status:&#039;&#039;&#039; TBA &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=1 style=&amp;quot;border-collapse: collapse;&amp;quot; cellspacing=0 cellpadding=2 width=100%&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;1%&amp;quot;|No.&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;21%&amp;quot;|Fan Mission Title&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;11%&amp;quot;|Author(s)&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;4%&amp;quot; class=&amp;quot;unsortable&amp;quot;|Forum link&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Releases&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Mission Type&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Notes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|vfat3|1}}&lt;br /&gt;
!align=left|[[Vengeance for a Thief (FM)|The Angel&#039;s Tear]] &lt;br /&gt;
|[[:Category:Missions by Sir Taffsalot|Sir Taffsalot]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/16953-the-complete-vengeance-for-a-thief-campaign/}} &lt;br /&gt;
|2015-02-16&lt;br /&gt;
|Church/Cathedral&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|vfat1|2}}&lt;br /&gt;
!align=left|[[Vengeance for a Thief (FM)|A Pawn in the Game]] &lt;br /&gt;
|[[:Category:Missions by Sir Taffsalot|Sir Taffsalot]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/14068-fan-mission-vengeance-for-a-thief-part-1-by-sir-taffsalot-06092012/}} &lt;br /&gt;
|2012-09-06&lt;br /&gt;
|Jail/Prison&lt;br /&gt;
|&#039;&#039;{{TDM-FM|62|standalone release link}}&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|vfat2|3}}&lt;br /&gt;
!align=left|[[Vengeance for a Thief (FM)|The Art of Revenge]]&lt;br /&gt;
|[[:Category:Missions by Sir Taffsalot|Sir Taffsalot]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/15051-fan-mission-vengeance-for-a-thief-part-2-by-sir-taffsalot-06092013/}} &lt;br /&gt;
|2013-09-06&lt;br /&gt;
|Museum Heists&lt;br /&gt;
|&#039;&#039;{{TDM-FM|75|standalone release link}}&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Volta&#039;&#039; series ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Release:&#039;&#039;&#039; Single-mission (S)&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; characters:&#039;&#039;&#039; TBA&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; status:&#039;&#039;&#039; TBA &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=1 style=&amp;quot;border-collapse: collapse;&amp;quot; cellspacing=0 cellpadding=2 width=100%&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;1%&amp;quot;|No.&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;21%&amp;quot;|Fan Mission Title&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;11%&amp;quot;|Author(s)&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;4%&amp;quot; class=&amp;quot;unsortable&amp;quot;|Forum link&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Releases&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Mission Type&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Notes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|volta1_3|1}} &lt;br /&gt;
!align=left|[[Volta I: The Stone (FM)|Volta and the Stone]]&lt;br /&gt;
|[[:Category:Missions by Kingsal|Kingsal]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/18087-fan-mission-volta-and-the-stone-by-kingsal-05262016/}}&lt;br /&gt;
|2016-05-27&lt;br /&gt;
|Mansion/Estate &amp;lt;br&amp;gt; City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|cauldron_v2_2|2}} &lt;br /&gt;
!align=left|[[Volta II: Cauldron of the Gods (FM)|Volta 2: Cauldron of the Gods]]&lt;br /&gt;
|[[:Category:Missions by Kingsal|Kingsal]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/19207-fan-mission-volta-ii-cauldron-of-the-gods-by-kingsal-113017-update-v20/}}&lt;br /&gt;
|2017-11-30 &lt;br /&gt;
|Lost Civilizations&lt;br /&gt;
|[https://www.youtube.com/watch?v=SRRCRVFHruc Briefing]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;William Steele&#039;&#039; series ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Release:&#039;&#039;&#039; Single-mission (S)&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; characters:&#039;&#039;&#039; [[Thief_Characters#William_Steele|William Steele]] (protagonist)&lt;br /&gt;
* &#039;&#039;&#039;Series&#039; status:&#039;&#039;&#039; Concluded. &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=1 style=&amp;quot;border-collapse: collapse;&amp;quot; cellspacing=0 cellpadding=2 width=100%&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;1%&amp;quot;|No.&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;21%&amp;quot;|Fan Mission Title&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;11%&amp;quot;|Author(s)&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;4%&amp;quot; class=&amp;quot;unsortable&amp;quot;|Forum link&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Releases&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Mission Type&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|Notes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|ws1_north|1}}&lt;br /&gt;
!align=left|[[William Steele 1: In the North (FM)|In the North]] &lt;br /&gt;
|[[:Category:Missions by Grayman|grayman]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/14214-fan-mission-in-the-north-by-grayman-20121020/}}&lt;br /&gt;
|2012-10-20&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|ws2_homeagain|2}}&lt;br /&gt;
!align=left|[[William Steele 2: Home Again (FM)|Home Again]] &lt;br /&gt;
|[[:Category:Missions by Grayman|grayman]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/15919-fan-mission-home-again-by-grayman-2014212/}}&lt;br /&gt;
|2014-02-12&lt;br /&gt;
|Thieves&#039; Highway (Rooftop)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|ws3_cleighmoor|3}}&lt;br /&gt;
!align=left|[[William Steele 3: Cleighmoor (FM)|Cleighmoor]] &lt;br /&gt;
|[[:Category:Missions by Grayman|grayman]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/16011-fan-mission-cleighmoor-by-grayman-201431/}}&lt;br /&gt;
|2014-03-01&lt;br /&gt;
|Sewers &amp;lt;br&amp;gt; Jail/Prison&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|ws4_warrens|4}}&lt;br /&gt;
!align=left|[[William Steele 4: The Warrens (FM)|The Warrens]] &lt;br /&gt;
|[[:Category:Missions by Grayman|grayman]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/19618-fan-mission-the-warrens-by-grayman-201891/}}&lt;br /&gt;
|2018-09-01&lt;br /&gt;
|City Missions &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|{{TDM-FM|ws5_commerce|5}}&lt;br /&gt;
!align=left|[[William Steele 5: Commerce Bank (FM)|Commerce Bank]] &lt;br /&gt;
|[[:Category:Missions by Grayman|grayman]]&lt;br /&gt;
|{{Forumlink|http://forums.thedarkmod.com/topic/19957-fan-mission-commerce-bank-by-grayman-2019410/}}&lt;br /&gt;
|2019-04-10&lt;br /&gt;
|Bank Jobs &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Note ==&lt;br /&gt;
&lt;br /&gt;
For a key to the descriptions of each Mission Type, please see [[Fan_Missions_for_The_Dark_Mod#Table_notes|this overview]].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
*[[Fan Missions for The Dark Mod]] - Main article on TDM fan missions.&lt;br /&gt;
&lt;br /&gt;
[[Category:Fan Missions|S]]&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=Fan_Missions_for_The_Dark_Mod&amp;diff=33994</id>
		<title>Fan Missions for The Dark Mod</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=Fan_Missions_for_The_Dark_Mod&amp;diff=33994"/>
		<updated>2025-06-26T21:25:07Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: /* Missions table */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{infobox|&amp;lt;center&amp;gt;&amp;lt;br&amp;gt;&#039;&#039;&#039;Big Ugly Disclaimer:&#039;&#039;&#039;&amp;lt;/center&amp;gt;&amp;lt;br&amp;gt; &#039;&#039;&#039;The Dark Mod&#039;&#039;&#039; team does not necessarily support or endorse content listed here, and only hosts missions listed on the &#039;&#039;&#039;[https://www.thedarkmod.com/ official TDM website]&#039;&#039;&#039;. This is a community maintained list, and an ongoing work in progress.  Most of the mirror links in this list are dead or are for missions that are not 2.0 compliant. Mission entries which are suspected to violate copyright must be text-only, and cannot contain links.  Report and/or remove links found in violation of this rule.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* For details about editing this table, see [[#Editing_this_table|below]].&lt;br /&gt;
* For details about how to install Fan Missions please visit: [[Installing and Running Fan Missions]]&lt;br /&gt;
* To sort by a different criterion, click the [[Image:Sort none.gif]] icon in the relevant column header.&lt;br /&gt;
&lt;br /&gt;
== Missions table ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=1 style=&amp;quot;border-collapse: collapse;&amp;quot; cellspacing=0 cellpadding=2 width=100%&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;19%&amp;quot;|Fan Mission Title&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;14%&amp;quot;|Author(s)&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;4%&amp;quot; class=&amp;quot;unsortable&amp;quot;|Links&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|First Release&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;2%&amp;quot;|Size (MB)&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;2%&amp;quot;|EFX Reverb&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;3%&amp;quot;|Translation Pack&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;2%&amp;quot;|Sub - Titles&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;10%&amp;quot;|Series&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;16%&amp;quot;|Mission Type&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;6%&amp;quot;|Spiders and Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--INSERT NEW MISSIONS BELOW THIS LINE--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|crookshank|The Last Night on Crookshank Lane}}&lt;br /&gt;
|Jnon&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22947-fan-mission-the-last-night-on-crookshank-lane/}}&lt;br /&gt;
|2025-06-19&lt;br /&gt;
|77&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|&lt;br /&gt;
|City Missions, Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|lt4|The Lieutenant 4: A Reciprocal Gambit}}&lt;br /&gt;
|Frost_Salamander&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22945-fan-mission-the-lieutenant-4-a-reciprocal-gambit-by-frost_salamander/}}&lt;br /&gt;
|2025-06-18&lt;br /&gt;
|62&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#The_Lieutenant_series|The Lieutenant]]&lt;br /&gt;
|City Missions, Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|footloose|Footloose museum theft}}&lt;br /&gt;
|Goblin of Akenash&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22654-fan-mission-footloose-museum-theft}}&lt;br /&gt;
|2025-02-05&lt;br /&gt;
|1.2&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Museum Heist&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|scrooge|A Winter&#039;s Tale}} &amp;lt;br&amp;gt;(v1.4, 2025/01/13)&lt;br /&gt;
|Bikerdude&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22609-fan-mission-a-winters-tale-by-bikerdude-2024-11-30/}}&lt;br /&gt;
|2024-11-30&lt;br /&gt;
|140&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|[https://www.ttlg.com/forums/showthread.php?t=152747 TTLG Speed Jam]&lt;br /&gt;
|City Missions, Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|lastoffering|The Last Offering}} &lt;br /&gt;
|Sotha&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22594-fan-mission-the-last-offering-2024-11-16/}}&lt;br /&gt;
|2024-11-16&lt;br /&gt;
|2.7&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Tombs, Catacombs &amp;amp; Crypts&lt;br /&gt;
|Horror Themes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|gem_of_souls|Gem of Souls}} &lt;br /&gt;
|MirceaKitsune&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22583-fan-mission-gem-of-souls-31-10-2024/}}&lt;br /&gt;
|2024-10-31&lt;br /&gt;
|10&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Church/Cathedral&lt;br /&gt;
|Undead, Horror Themes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|pinnacle|Pinnacle: A Test of Talents}} &amp;lt;br&amp;gt;(v2.0, 2024/10/24)&lt;br /&gt;
|UncertainTitle, TwilitWitch&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22569-fan-mission-pinnacle-a-test-of-talents-hbd-tdm-15th-anniversary-contest/}}&lt;br /&gt;
|2024-10-17&lt;br /&gt;
|5&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2024_15th_Anniversary_Contest|15YR]] Contest&lt;br /&gt;
|City Missions, Experimental&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|gemcutter|Volta 3: Gemcutter}}&lt;br /&gt;
|Kingsal&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22566-fan-mission-volta-iii-gemcutter-15th-anniversary-contest}}&lt;br /&gt;
|2024-10-16&lt;br /&gt;
|852&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Contests#2024_15th_Anniversary_Contest|15YR]] &#039;&#039;&#039;WINNER&#039;&#039;&#039;&amp;lt;br&amp;gt; [[Fan_Mission_Series#Volta series|Volta]]&lt;br /&gt;
|Ship, City Missions, Moorish Architecture&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|yoft|You Only Fly Thrice}}&lt;br /&gt;
|DeTeEff&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22565-fan-mission-you-only-fly-thrice-by-deteeff-20241016/}}&lt;br /&gt;
|2024-10-16&lt;br /&gt;
|45&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Contests#2024_15th_Anniversary_Contest|15YR]] Contest&lt;br /&gt;
|Ship &amp;lt;br&amp;gt; Experimental&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|wizt|The Wizard&#039;s Treasure}}&lt;br /&gt;
|thebigh&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22558-fan-mission-the-wizards-treasure-15th-anniversary-contest/}}&lt;br /&gt;
|2024-10-13&lt;br /&gt;
|7&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2024_15th_Anniversary_Contest|15YR]] Contest&lt;br /&gt;
|Castle/Fortress&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|imperial_sword|The Imperial Sword}} &amp;lt;br&amp;gt;(v1.3.6, 2024/10/11)&lt;br /&gt;
|Bikerdude&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22541-fan-mission-the-imperial-sword-15yr-anniversary-contest/}}&lt;br /&gt;
|2024-09-21&lt;br /&gt;
|419&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Contests#2024_15th_Anniversary_Contest|15YR]] Contest&lt;br /&gt;
|City Missions, Mansion/Estate&lt;br /&gt;
|Spiders&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|hhbam|Hidden Hands: Blood &amp;amp; Metal}} &amp;lt;br&amp;gt;(v4.0, 2024/11/29)&lt;br /&gt;
|JackFarmer&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22532-hidden-hands-blood-metal-campaign-01092024/}}&lt;br /&gt;
|2024-09-02&lt;br /&gt;
|1200&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|Hidden Hands 5&lt;br /&gt;
|&lt;br /&gt;
|Spiders, Undead, Horror Themes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|faffairs|The Lieutenant 3: Foreign Affairs}} &amp;lt;br&amp;gt;(v4.0, 2024/11/08)&lt;br /&gt;
|Frost_Salamander&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22452-fan-mission-the-lieutenant-3-foreign-affairs-by-frost_salamander/}}&lt;br /&gt;
|2024-05-19&lt;br /&gt;
|501&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#The_Lieutenant_series|The Lieutenant]]&lt;br /&gt;
|City Missions, Moorish Architecture&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|lookwhosmoving|Moving Day 2: Look Who&#039;s Moving Now}}&lt;br /&gt;
|wellingtoncrab&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22416-sad-news-%F0%9F%98%A2-but-fm-release/}}&lt;br /&gt;
|2024-04-01&lt;br /&gt;
|337&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|April Fools, &amp;lt;br&amp;gt;PTB (unofficial) &lt;br /&gt;
|Mansion/Estate, City Missions&lt;br /&gt;
|Humor&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|sneakandsouffle|Sneak &amp;amp; Soufflé}}&lt;br /&gt;
|Goldwell&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22417-fm-release-sneak-and-souffl%C3%A9-april-fools-mission-01042024/}}&lt;br /&gt;
|2024-04-01&lt;br /&gt;
|95&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|April Fools&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|Humor&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|moongate|Moongate Ruckus}}&lt;br /&gt;
|Kingsal&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22419-having-trouble-sleeping-is-the-%F0%9F%8C%95moon-too-bright-the-%F0%9F%8E%BBmusic-too-loud-ive-got-an-fm-for-you/}}&lt;br /&gt;
|2024-04-01&lt;br /&gt;
|218&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|April Fools&lt;br /&gt;
|City Missions&lt;br /&gt;
|Humor&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|prize|Eye on the Prize}}&lt;br /&gt;
|Amadeus&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22418-fan-mission-eye-on-the-prize-412024/}}&lt;br /&gt;
|2024-04-01&lt;br /&gt;
|278&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|April Fools&lt;br /&gt;
|City Missions&lt;br /&gt;
|Humor&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|oldman|The Terrible Old Man}} &amp;lt;br&amp;gt;(v2.0, 2024/12/30)&lt;br /&gt;
|Ansome&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22393-fan-mission-the-terrible-old-man/}}&lt;br /&gt;
|2024-03-10&lt;br /&gt;
|11.7&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
| &lt;br /&gt;
|Mansion/Estate, City Missions&lt;br /&gt;
|Horror Themes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|sk_cooks|By The Cookbook}}&amp;lt;br&amp;gt;(v4.0 2024/07/08)&lt;br /&gt;
|Skaruts&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22357-fan-mission-by-the-cookbook/}}&lt;br /&gt;
|2024-02-02&lt;br /&gt;
|8.4&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
| &lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|altham|A Night in Altham}}&lt;br /&gt;
|joebarnin&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22296-fan-mission-a-night-in-altham/}}&lt;br /&gt;
|2023-12-05&lt;br /&gt;
|441&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
| &lt;br /&gt;
|City Missions &amp;lt;br&amp;gt; Outdoor/Forest&lt;br /&gt;
|Spiders, Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|spiderfinch|The Spider And The Finch}}&amp;lt;br&amp;gt;(v1.5.0 2024/07/11)&lt;br /&gt;
|GrodenVR&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22275-fan-mission-the-spider-and-the-finch-by-grodenglaive/}}&lt;br /&gt;
|2023-11-18&lt;br /&gt;
|45&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
| &lt;br /&gt;
|Mansion/Estate &amp;lt;br&amp;gt; Outdoor/Forest&lt;br /&gt;
|Spiders&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|threepenny|The Threepenny Revue}}&lt;br /&gt;
|Jnon&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22229-fan-mission-the-threepenny-revue/}}&lt;br /&gt;
|2023-10-01&lt;br /&gt;
|21&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
| &lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|delisle|The House of deLisle}}&lt;br /&gt;
|thebigh&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22227-fan-mission-the-house-of-delisle/}}&lt;br /&gt;
|2023-10-01&lt;br /&gt;
|38&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|Duncan Lynch &lt;br /&gt;
|Mansion/Estate, City Missions&lt;br /&gt;
|Spiders, Undead, Body Horror&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|bridge2far|A Bridge Too Far}}&lt;br /&gt;
|cugzkani&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22220-fan-mission-a-bridge-too-far/}}&lt;br /&gt;
|2023-09-22&lt;br /&gt;
|6&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|highex|The Lieutenant 2: High Expectations}}&lt;br /&gt;
|Frost_Salamander&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/21837-fan-mission-the-lieutenant-2-high-expectations-by-frost_salamander-20230424}}&lt;br /&gt;
|2023-04-24&lt;br /&gt;
|34.9&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#The_Lieutenant_series|The Lieutenant]]&lt;br /&gt;
|Mansion/Estate, City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|seeking|Seeking Lady Leicester}}&lt;br /&gt;
|Grayman, Bikerdude, Amadeus, Dragofer, WellingtonCrab&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/21799-fan-mission-seeking-lady-leicester-by-grayman-3212023/}}&lt;br /&gt;
|2023-03-22&lt;br /&gt;
|493&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|&lt;br /&gt;
|Mansion/Estate, City Missions&lt;br /&gt;
|Undead, Horror Themes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|inplainsight|The Lieutenant 1: In Plain Sight}}&lt;br /&gt;
|Frost_Salamander&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/21549-fan-mission-in-plain-sight-by-frost_salamander-20220807}}&lt;br /&gt;
|2022-08-07&lt;br /&gt;
|14&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#The_Lieutenant_series|The Lieutenant]]&lt;br /&gt;
|City Missions&lt;br /&gt;
|Undead, Horror Themes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|at1_lucy|The Adventures of Thomas: Lucy&#039;s Quest}}&lt;br /&gt;
|gg&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/21453-the-adventures-of-thomas-lucys-quest-2022-06-08}}&lt;br /&gt;
|2022-06-08&lt;br /&gt;
|484&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|Thomas 1&lt;br /&gt;
|City Missions&lt;br /&gt;
|Spiders, Undead, Horror Themes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|wwtw|Who Watches the Watcher?}}&lt;br /&gt;
|DeTeEff (Fieldmedic)&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/21434-fan-mission-who-watches-the-watcher-v10-by-deteeff-20220528}}&lt;br /&gt;
|2022-05-28&lt;br /&gt;
|86&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|&lt;br /&gt;
|City Missions&lt;br /&gt;
|Horror Themes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|sw1_ebound|Sam Wilson 1: Eastbound}}&lt;br /&gt;
|jonri&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/21402-fan-mission-sam-wilson-1-eastbound-2022-05-07}}&lt;br /&gt;
|2022-05-07&lt;br /&gt;
|18&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|Sam Wilson&lt;br /&gt;
|Train &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|byanyothername|By Any Other Name}}&amp;lt;br&amp;gt;(v3 2024/06/05)&lt;br /&gt;
|joebarnin&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/21331-fan-mission-by-any-other-name-by-joebarnin-2022310/}}&lt;br /&gt;
|2022-03-10&lt;br /&gt;
|124&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|&lt;br /&gt;
|Mansion/Estate, City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|housecall|A House Call}}&lt;br /&gt;
|thebigh&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/21329-a-house-call-by-thebigh-mar-10-2022/}}&lt;br /&gt;
|2022-03-10&lt;br /&gt;
|10&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|Duncan Lynch&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|nobleaffairs|Noble Affairs}}&lt;br /&gt;
|Goldwell&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/21318-fan-mission-noble-affairs-by-goldwell-20220222-tdm-210-required/}}&lt;br /&gt;
|2022-02-22&lt;br /&gt;
|488&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|City Missions&lt;br /&gt;
|Horror Themes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|iris|Iris}} &amp;lt;br&amp;gt;(v1.3, 2024/05/26)&lt;br /&gt;
|Wellingtoncrab&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/21289-fan-mission-iris-by-wellingtoncrab-tdm-210-required-20220213/}}&lt;br /&gt;
|2022-02-13&lt;br /&gt;
|549&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2022_Christmas_Connection_Contest|CCC 22]] - &#039;&#039;&#039;WINNER&#039;&#039;&#039;&lt;br /&gt;
|City Missions&lt;br /&gt;
|Horror Themes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|ptb0|PtB 0: Moving Day}}&lt;br /&gt;
|Jedi_Wannabe&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/21283-fan-mission-paying-the-bills-0-moving-day-tdm-210-beta-only-202228/}}&lt;br /&gt;
|2022-02-08&lt;br /&gt;
|160&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2022_Christmas_Connection_Contest|CCC 22]], PTB&lt;br /&gt;
|Mansion/Estate &amp;lt;br&amp;gt; Outdoor/Forest&lt;br /&gt;
|Spiders&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|written|Written in Stone}}&lt;br /&gt;
|Bikerdude, Amadeus, Dragofer&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/21265-written-in-stone-beta-210-only-20220128/}}&lt;br /&gt;
|2022-01-28&lt;br /&gt;
|338&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Contests#2022_Christmas_Connection_Contest|CCC 22]], Elixir&lt;br /&gt;
|City Missions&lt;br /&gt;
|Undead, Horror Themes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|hazard|Hazard Pay}}&lt;br /&gt;
|Kingsal&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/21264-fan-mission-hazard-pay-by-kingsal-tdm-beta-210-only/}}&lt;br /&gt;
|2022-01-28&lt;br /&gt;
|404&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Contests#2022_Christmas_Connection_Contest|CCC 22]]&lt;br /&gt;
|Tombs, Catacombs &amp;amp; Crypts&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|newford|Down and Out on Newford Road}}&lt;br /&gt;
|thebigh&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/21260-down-and-out-on-newford-road-by-thebigh-jan-26-2022-christmas-connections-contest-entry/}}&lt;br /&gt;
|2022-01-26&lt;br /&gt;
|17&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2022_Christmas_Connection_Contest|CCC 22]]&lt;br /&gt;
|Church/Cathedral, City Missions&lt;br /&gt;
|Undead, Horror Themes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|deadeye|Deadeye}}&lt;br /&gt;
|Sotha&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/21225-fan-mission-deadeye-by-sotha-20211231/}}&lt;br /&gt;
|2021-12-31&lt;br /&gt;
|1.8&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|black_mage|The Black Mage}}&lt;br /&gt;
|Grayman, JackFarmer&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/21215-the-black-mage/}}&lt;br /&gt;
|2021-12-23&lt;br /&gt;
|410&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
| &lt;br /&gt;
|Castle/Fortress &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;In memoriam of Grayman {{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20933-we-have-lost-a-member-of-the-tdm-development-team/}}&lt;br /&gt;
|Horror Themes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|ch1_eaton|Cole Hurst 1: Eaton}}&lt;br /&gt;
|bwyan&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/21170-fan-mission-cole-hurst-1-eaton-by-bwyan-20211202/}}&lt;br /&gt;
|2021-12-01&lt;br /&gt;
|41&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|Cole Hurst&lt;br /&gt;
|Mansion/Estate, City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|cos0_thief|Chronicles of Skulduggery 0: To Catch a Thief}}&lt;br /&gt;
|Bienie&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/21156-fan-mission-chronicles-of-skulduggery-0-to-catch-a-thief-20211120/}}&lt;br /&gt;
|2021-11-20&lt;br /&gt;
|15&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Chronicles_of_Skulduggery_series|Chronicles of Skulduggery]]&lt;br /&gt;
|City Missions, Mansion/Estate&lt;br /&gt;
|Horror Themes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|away0|Away 0 - Stolen Heart}}&lt;br /&gt;
|Geep,_Atti_&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20964-away-0-stolen-heart-by-geep-_atti_-20210924/}}&lt;br /&gt;
|2021-11-12&lt;br /&gt;
|189.5&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Away_series|Away]]&lt;br /&gt;
|Inn/Tavern, Jail/Prison, &amp;lt;br&amp;gt; Museum Heist, Bank Job&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|hhta|Hidden Hands: Anomaly}}&lt;br /&gt;
|JackFarmer&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20909-hidden-hands-the-anomaly}}&lt;br /&gt;
|2021-05-01&lt;br /&gt;
|532.7&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Hidden_Hands_series|Hidden Hands]]&lt;br /&gt;
|Castle/Fortress &amp;lt;br&amp;gt; Outdoor/Forest&lt;br /&gt;
|Undead, Spiders&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|hareinthesnare|The Hare in the Snare: Part 1}}&lt;br /&gt;
|Frost_Salamander,Kerry000&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20883-fan-mission-the-hare-in-the-snare-part-1}}&lt;br /&gt;
|2021-04-09&lt;br /&gt;
|102.3&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|Hare in the Snare 1&lt;br /&gt;
|City Missions &amp;lt;br&amp;gt; Inn/Tavern&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|blackgrove|Blackgrove Manor}}&amp;lt;br&amp;gt;(v1.02, 2021/04/24)&lt;br /&gt;
|ddaazzaa&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20844-fan-mission-blackgrove-manor-by-ddaazzaa-20210314/}}&lt;br /&gt;
|2021-03-14&lt;br /&gt;
|24.7&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|Undead, Horror Themes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|scroll|Scroll of Remembrance}}&lt;br /&gt;
|MirceaKitsune&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20613-fan-mission-scroll-of-remembrance-by-mirceakitsune-03112020/}}&lt;br /&gt;
|2020-11-03&lt;br /&gt;
|16.2&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|Undead, Horror Themes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|factoryheist|The Factory Heist}}&lt;br /&gt;
|thebigh&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20562-the-factory-heist-12-sep-2020/}}&lt;br /&gt;
|2020-09-12&lt;br /&gt;
|1.1&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|Duncan Lynch&lt;br /&gt;
|Warehouse&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|nowandthen|Now and Then}}&amp;lt;br&amp;gt;(v3.0. 2025/03/19) &lt;br /&gt;
|joebarnin&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20560-fan-mission-now-and-then-by-joebarnin-20200908/}}&lt;br /&gt;
|2020-09-08&lt;br /&gt;
|236.1&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|&lt;br /&gt;
|Museum Heists&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|hhtlc|Hidden Hands: The Lost Citadel}}&lt;br /&gt;
|JackFarmer&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20490-hidden-hands-the-lost-citadel-23072020}}&lt;br /&gt;
|2020-07-23&lt;br /&gt;
|444&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Hidden_Hands_series|Hidden Hands]]&lt;br /&gt;
|Castle/Fortress&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|cos3_sacricide|Chronicles of Skulduggery 3: Sacricide}}&lt;br /&gt;
|Bienie&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20483-fan-mission-chronicles-of-skulduggery-3-sacricide-20200718/}}&lt;br /&gt;
|2020-07-18&lt;br /&gt;
|97.8&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Chronicles_of_Skulduggery_series|Chronicles of Skulduggery]]&lt;br /&gt;
|City Missions&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|painterswife|The Painter&#039;s Wife}}&amp;lt;br&amp;gt;(v1.4, 2025/06/10)&lt;br /&gt;
|Fractured Glass Company&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20436-fan-mission-the-painter’s-wife-by-fractured-glass-company-20200701/}}&lt;br /&gt;
|2020-07-01&lt;br /&gt;
|205&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|&lt;br /&gt;
|City Missions&lt;br /&gt;
|Spiders, Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|anol|A Night Of Loot: One Man&#039;s Treasure}}&lt;br /&gt;
|OGDA&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20416-fan-mission-a-night-of-loot-one-mans-treasure/}}&lt;br /&gt;
|2020-06-13&lt;br /&gt;
|3.9&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Shop/House&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|good|A Good Neighbor}}&lt;br /&gt;
|Amadeus&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20292-fan-mission-a-good-neighbor/}}&lt;br /&gt;
|2020-03-08&lt;br /&gt;
|54.6&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|City Missions &amp;lt;br&amp;gt; Inn/Tavern&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|airpocket|Away 1 - Air Pocket}}&lt;br /&gt;
|Geep&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20252-fan-mission-away-1-air-pocket-by-geep-20200207}}&lt;br /&gt;
|2020-02-06&lt;br /&gt;
|15.3&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Away_series|Away]]&lt;br /&gt;
|Pirate &amp;lt;br&amp;gt; Ship&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|snowed_inn|Snowed Inn}}&lt;br /&gt;
|Goldwell and Kingsal&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20201-fan-mission-snowed-inn-by-goldwell-kingsal-20191225}}&lt;br /&gt;
|2019-12-25&lt;br /&gt;
|382&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|indangerofjudgment|In Danger of Judgment}}&lt;br /&gt;
|krrg&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20155-fan-mission-in-danger-of-judgment-20191115/}}&lt;br /&gt;
|2019-11-15&lt;br /&gt;
|11.9&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|lhl|Langhorne Lodge}}&lt;br /&gt;
|Bienie&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20143-fan-mission-langhorne-lodge/}}&lt;br /&gt;
|2019-10-30&lt;br /&gt;
|8.2&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|Undead &amp;lt;br&amp;gt; Ghosts &amp;lt;br&amp;gt; Spiders&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|heartstmattis|The Heart of Saint Mattis}}&lt;br /&gt;
|joebarnin&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20091-fan-mission-the-heart-of-saint-mattis-by-joebarnin-20190910/}}&lt;br /&gt;
|2019-09-10&lt;br /&gt;
|58.7&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Church/Cathedral&lt;br /&gt;
|Spiders, Undead, Horror Themes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|peril|Perilous Refuge}}&lt;br /&gt;
|Dragofer, Crucible Team&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20090-fan-mission-perilous-refuge-by-dragofer-20190910/}}&lt;br /&gt;
|2019-09-10&lt;br /&gt;
|34.7&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Ship, City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|hhvf|Hidden Hands: Vitalic Fever}}&amp;lt;br&amp;gt;(v6, 2025/04/20)&lt;br /&gt;
|JackFarmer&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20051-hidden-hands-vitalic-fever-20072019}}&lt;br /&gt;
|2019-07-20&lt;br /&gt;
|269&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Series#Hidden_Hands_series|Hidden Hands]]&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|Spiders, Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|cos2_precpos|Chronicles of Skulduggery 2: A Precarious Position}}&lt;br /&gt;
|Bienie&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/19975-fan-mission-chronicles-of-skulduggery-2-a-precarious-position-20190504/}}&lt;br /&gt;
|2019-05-04&lt;br /&gt;
|14.5&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Chronicles_of_Skulduggery_series|Chronicles of Skulduggery]]&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|ws5_commerce|William Steele 5: Commerce Bank}}&lt;br /&gt;
|grayman&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/19957-fan-mission-commerce-bank-by-grayman-2019410/}}&lt;br /&gt;
|2019-04-10&lt;br /&gt;
|30&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Series#William_Steele_series|William Steele]]&lt;br /&gt;
|Bank Jobs&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|marshofrahena|Marsh of Rahena}}&lt;br /&gt;
|ERH+&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/19951-fan-mission-marsh-of-rahena-by-erh-201945}}&lt;br /&gt;
|2019-04-05&lt;br /&gt;
|60.3&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Castle/Fortress, Horror &lt;br /&gt;
|Spiders, Undead, Horror Themes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|northdale2|Shadows of Northdale ACT 2}}&lt;br /&gt;
|Goldwell&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/19936-fan-mission-shadows-of-northdale-act-ii-by-goldwell-20190320/}} [https://www.youtube.com/watch?v=KO-eIOX9nqI Briefing]&lt;br /&gt;
|2019-03-20&lt;br /&gt;
|417&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Shadows of Northdale series|Shadows of Northdale]]&lt;br /&gt;
|City Missions&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|cleanneighbourhood|Cleaning Up the Neighbourhood}}&lt;br /&gt;
|some1stoleit and Bikerdude&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/19898-fan-mission-cleaning-up-the-neighbourhood-by-some1stoleitbikerdude-20190219/}}&lt;br /&gt;
|2019-02-18&lt;br /&gt;
|34.3&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|hhi|Hidden Hands: Initiation}}&lt;br /&gt;
|JackFarmer&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/19796-hidden-hands-initiation-27122018/}}&lt;br /&gt;
|2018-12-27&lt;br /&gt;
|92.5&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Hidden_Hands_series|Hidden Hands]]&lt;br /&gt;
|Mansion/Estate &amp;lt;br&amp;gt;Ship&lt;br /&gt;
|Spiders, Extra-natural entities&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|reluctantbenefaction|The Night of Reluctant Benefaction}}&lt;br /&gt;
|Bienie&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/19787-fan-mission-the-night-of-reluctant-benefaction/}}&lt;br /&gt;
|2018-12-24&lt;br /&gt;
|11.9&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|mercwarehouse|Mission of Mercy}}&lt;br /&gt;
|joebarnin&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/19642-fan-mission-mission-of-mercy-by-joebarnin-20180914/}}&lt;br /&gt;
|2018-09-14&lt;br /&gt;
|10.1&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Warehouse&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|ws4_warrens|William Steele 4: The Warrens}}&lt;br /&gt;
|grayman&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/19618-fan-mission-the-warrens-by-grayman-201891/}}&lt;br /&gt;
|2018-09-01&lt;br /&gt;
|53&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Series#William_Steele_series|William Steele]]&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|braeden_church|Braeden Church}}&lt;br /&gt;
|grayman&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/19533-fan-mission-braeden-church-by-grayman-201871/}}&lt;br /&gt;
|2018-07-01&lt;br /&gt;
|24&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|pearlsnswine|Chronicles of Skulduggery: Pearls and Swine}}&lt;br /&gt;
|Bienie&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/19439-chronicles-of-skulduggery-pearls-and-swine/}}&lt;br /&gt;
|2018-05-25&lt;br /&gt;
|23&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Series#Chronicles_of_Skulduggery_series|Chronicles of Skulduggery]]&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|northdale1|Shadows of Northdale ACT I}}&lt;br /&gt;
|Goldwell&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/19368-fan-mission-shadows-of-northdale-act-i-by-goldwell-20180323/}} [https://www.youtube.com/watch?v=p4nP3lYd6wg Briefing]&lt;br /&gt;
|2018-03-23&lt;br /&gt;
|295&lt;br /&gt;
|Custom &amp;lt;br&amp;gt;(not EFX)&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Shadows of Northdale series|Shadows of Northdale]]&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|sirt|Sir Taffsalot&#039;s Sword}}&lt;br /&gt;
|grayman&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/19361-fan-mission-sir-taffsalots-sword-by-grayman-2018318/}}&lt;br /&gt;
|2018-03-17&lt;br /&gt;
|11.3&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Mansion/Estate &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; In memoriam of Gary (Sir Taffsalot) {{Forumlink|https://forums.thedarkmod.com/topic/19306-sad-news-we-lost-one-of-our-own-sir-taffsalot/}}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|arena|The Arena}}&lt;br /&gt;
|ERH+&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/19350-fan-mission-the-arena-by-erh/}}&lt;br /&gt;
|2018-03-12&lt;br /&gt;
|3&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Arena Deathmatch &amp;lt;br&amp;gt; Experimental&lt;br /&gt;
|Spiders, Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|elixir|The Elixir}}&lt;br /&gt;
|Bikerdude and Obsttorte&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/19323-fan-mission-the-elixir-by-b1k3rdude-obsttorte-17022018/}} [https://www.youtube.com/watch?v=KfElYZs-FaE Briefing]&lt;br /&gt;
|2018-02-17&lt;br /&gt;
|112&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|Elixir&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|cauldron_v2_2|Volta 2: Cauldron of the Gods}}&lt;br /&gt;
|Kingsal&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/19207-volta-ii-cauldron-of-the-gods/}} [https://www.youtube.com/watch?v=SRRCRVFHruc Briefing]&lt;br /&gt;
|2017-11-30&lt;br /&gt;
|252&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Volta series|Volta]]&lt;br /&gt;
|Lost Civilizations&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|itb|In the Black}}&lt;br /&gt;
|VanishedOne&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/19185-fan-mission-in-the-black/}}&lt;br /&gt;
|2017-11-18&lt;br /&gt;
|103&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|ac1|Accountant 1: Thieves and Heirs}}&lt;br /&gt;
|Goldwell&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/19164-fan-mission-the-accountant-1-thieves-and-heirs-by-goldwell-20171108}} [https://www.youtube.com/watch?v=Tk9DtOT4kjc Briefing]&lt;br /&gt;
|2017-11-08&lt;br /&gt;
|247&lt;br /&gt;
|No&lt;br /&gt;
|Yes &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;(Darkfate version is better for Russian players, fully dubbed audio)&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#The Accountant series|The Accountant]]&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|Spiders&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|kotm|King of the Mountain}}&lt;br /&gt;
|Spoonman&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/19105-fan-mission-king-of-the-mountain-by-spoonman-18092017/}}&lt;br /&gt;
|2017-09-18&lt;br /&gt;
|8.07&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Jail/Prison&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|briarwood_manor|Briarwood Manor}}&lt;br /&gt;
|NeonStyle&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/18980-fan-mission-briarwood-manor-by-neonsstyle-first-mission-2017-07-11}} [https://www.youtube.com/watch?v=BZnSuLVatYM Trailer] [https://www.youtube.com/watch?v=CPlu8fEzyGM Briefing]&lt;br /&gt;
|2017-07-11&lt;br /&gt;
|90&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|Spider&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|matterofhours|A Matter of Hours}}&lt;br /&gt;
|Springheel&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/18809-fan-mission-a-matter-of-hours-by-springheel-2842017/}}&lt;br /&gt;
|2017-04-28&lt;br /&gt;
|13&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan Mission Series#Corbin series|Corbin]]&lt;br /&gt;
|Warehouse&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|ravine|The Ravine}}&lt;br /&gt;
|Spoonman&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/18782-fan-mission-the-ravine-by-spoonman-17042017/}}&lt;br /&gt;
|2017-04-17&lt;br /&gt;
|30.6&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Outdoor/Pagan&lt;br /&gt;
|Spiders&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|bakery_job|The Bakery Job}}&lt;br /&gt;
|Sotha&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/18707-fan-mission-the-bakery-job-by-sotha-20170309/}}&lt;br /&gt;
|2017-03-09&lt;br /&gt;
|2&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM||Mission 1: A New Job}}&lt;br /&gt;
|Springheel&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/18647-tdm-205-official-introductory-missions/}}&lt;br /&gt;
|2017-03-14&lt;br /&gt;
|13.8&lt;br /&gt;
|Yes&lt;br /&gt;
|&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Series#Introduction_campaign|Official Campaign]]&lt;br /&gt;
|City Missions &amp;lt;br&amp;gt; Inn/Tavern&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|coercion|Coercion}}&lt;br /&gt;
|Sotha&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/18405-fan-mission-coercion-by-sotha-20160927}}&lt;br /&gt;
|2016-09-27&lt;br /&gt;
|10&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|river|Down by the Riverside}}&lt;br /&gt;
|Dragofer&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/18402-fan-mission-down-by-the-riverside-by-dragofer-20160925}}&lt;br /&gt;
|2016-09-25&lt;br /&gt;
|56&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Series#Of Brambles and Thorns series|Of Brambles and Thorns]]&lt;br /&gt;
|Mansion/Estate &amp;lt;br&amp;gt; Ship &amp;lt;br&amp;gt; Horror&lt;br /&gt;
|Horror themes, Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|penny3|Penny Dreadful 3: Erasing the Trail}}&lt;br /&gt;
|Melan and Bikerdude&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/18200-fan-mission-penny-dreadful-3-by-melan-and-bikerdude-20160710}}&lt;br /&gt;
|2016-07-09&lt;br /&gt;
|200&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Penny Dreadful series|Penny Dreadful]]&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|volta1_3|Volta 1: Volta and the Stone}}&lt;br /&gt;
|Kingsal&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/18087-fan-mission-volta-and-the-stone-by-kingsal-05262016}}&lt;br /&gt;
|2016-05-27&lt;br /&gt;
|102&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Volta series|Volta]]&lt;br /&gt;
|Mansion/Estate &amp;lt;br&amp;gt; City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|fever|Full Moon Fever}}&amp;lt;br&amp;gt;(v2.0 2018/02/21)&lt;br /&gt;
|Spoonman&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/18066-fan-mission-full-moon-fever-by-spoonman-14052016/}}&lt;br /&gt;
|2016-05-14&lt;br /&gt;
|21&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|kingofdiamonds|King of Diamonds}}&lt;br /&gt;
|Spooks&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/18064-fan-mission-the-king-of-diamonds-by-spooks-20160513}}&lt;br /&gt;
|2016-05-13&lt;br /&gt;
|26.3&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|City Missions&lt;br /&gt;
|Occult themes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|ac2|Accountant 2: New in Town}}&lt;br /&gt;
|Goldwell&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/18054-fan-mission-the-accountant-2-new-in-town-by-goldwell-20160509/}} [https://www.youtube.com/watch?v=xeuIO_GcYjQ Briefing] &amp;lt;br&amp;gt; [https://www.youtube.com/watch?v=w6e_SJ0_JOM Gameplay trailer] &lt;br /&gt;
|2016-05-08&lt;br /&gt;
|358&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#The Accountant series|The Accountant]]&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|cutpurse|The Smiling Cutpurse}}&lt;br /&gt;
|Airship Ballet&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/17850-fan-mission-the-smiling-cutpurse-by-airship-ballet-20160325/}}&lt;br /&gt;
|2016-03-25&lt;br /&gt;
|87&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Mansion/Estate &amp;lt;br&amp;gt; Sewers&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|mother|Mother Rose}}&lt;br /&gt;
|grayman&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/17653-fan-mission-mother-rose-by-grayman-20160101/#entry385131/}}&lt;br /&gt;
|2016-01-01&lt;br /&gt;
|10&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|Ghost&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|bcd|Behind Closed Doors}}&lt;br /&gt;
|Bikerdude and the Crucible Team&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/17627-crucible-of-omens-behind-closed-doors-by-bikerdude-the-crucible-team-updated-18122015/}}&lt;br /&gt;
|2015-12-19&lt;br /&gt;
|359&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Crucible of Omens series|Crucible of Omens]]&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|theratst|The Rats Triumphant}}&lt;br /&gt;
|Melan&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/17512-fan-mission-the-rats-triumphant-by-melan-20151031/}}&lt;br /&gt;
|2015-10-31&lt;br /&gt;
|11&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2015_Halloween_Speed-build_Contest|HSC 15]] &#039;&#039;&#039;WINNER&#039;&#039;&#039;&lt;br /&gt;
|City Missions&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|deaddrunk|Dead Drunk}}&lt;br /&gt;
|Stumpy&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/17511-fan-mission-dead-drunk-by-stumpy-20151030/}}&lt;br /&gt;
|2015-10-30&lt;br /&gt;
|4&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2015_Halloween_Speed-build_Contest|HSC 15]]&lt;br /&gt;
|Tombs, Catacombs &amp;amp; Crypts&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|remorse|Thief&#039;s Remorse}}&lt;br /&gt;
|Airship Ballet&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/17509-fan-mission-thiefs-remorse-by-airship-ballet-20151030/}}&lt;br /&gt;
|2015-10-30&lt;br /&gt;
|42&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2015_Halloween_Speed-build_Contest|HSC 15]]&lt;br /&gt;
|Tombs, Catacombs &amp;amp; Crypts&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|springcleaning|Spring Cleaning}}&lt;br /&gt;
|Goldwell&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/17510-fan-mission-spring-cleaning-by-goldwell-20151030/}} [https://www.youtube.com/watch?v=JzPpmDK9Fxw Briefing] &lt;br /&gt;
|2015-10-30&lt;br /&gt;
|45&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Contests#2015_Halloween_Speed-build_Contest|HSC 15]]&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|Spiders, Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|the_golden_skull|The Golden Skull}}&lt;br /&gt;
|Sotha&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/17497-fan-mission-the-golden-skull-by-sotha-20151024/}}&lt;br /&gt;
|2015-10-25&lt;br /&gt;
|7&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2015_Halloween_Speed-build_Contest|HSC 15]]&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|ahouseoflockedsecrets|A House of Locked Secrets}}&lt;br /&gt;
|Moonbo&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/17163-fan-mission-a-house-of-locked-secrets-by-gelo-moonbo-fleisher-20150528/}} [https://www.youtube.com/watch?v=f5NuTJEZ8VE Trailer]&lt;br /&gt;
|2015-05-29&lt;br /&gt;
|195&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Series#Shadowcursed series|Shadowcursed]]&lt;br /&gt;
|Church/Cathedral &amp;lt;br&amp;gt; Mansion/Estate&lt;br /&gt;
|Horror themes, &amp;lt;br&amp;gt; Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|u2_flock|Ulysses 2: Protecting the Flock}}&lt;br /&gt;
|Sotha&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/17162-fan-mission-ulysses-2-protecting-the-flock-by-sotha-20150528/}}&lt;br /&gt;
|2015-05-28&lt;br /&gt;
|102&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Ulysses series|Ulysses]]&lt;br /&gt;
|Church/Cathedral&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|talbot|Sir Talbot&#039;s Collateral}}&amp;lt;br&amp;gt;(v6 2024/01/29)&lt;br /&gt;
|Baal and Bikerdude&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/17093-fan-mission-sir-talbots-collateral-by-baal-bikerdude-15042015/}} [https://www.youtube.com/watch?v=e3rdZfq4Omc Trailer]&lt;br /&gt;
|2015-04-15&lt;br /&gt;
|60&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Series#Sir Talbot series|Sir Talbot]]&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|vfat3|Vengeance for a Thief Part 3}}&lt;br /&gt;
|Sir Taffsalot&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/16953-the-complete-vengeance-for-a-thief-campaign/}}&lt;br /&gt;
|2015-02-16&lt;br /&gt;
|25&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Vengeance for a Thief series|VFAT]]&lt;br /&gt;
|Church/Cathedral&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|bathhouse|Lord Edgar&#039;s Bathhouse}}&lt;br /&gt;
|Goldwell&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/topic/16828-fan-mission-lord-edgars-bathhouse-by-goldwell-27122014/}} [https://www.youtube.com/watch?v=vYSZY7VzFEo Briefing]&lt;br /&gt;
|2014-12-27&lt;br /&gt;
|71&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|Lord Edgar&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|quinn|Quinn Co.}}&amp;lt;br&amp;gt;(Made into a campaign, 2015/02/04)&amp;lt;br&amp;gt;{{TDM-FM|m_lbb|La Banque Bienveillante}} {{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/21488-fan-mission-quinn-co-part-1-la-banque-bienveillante-remake-by-airship-ballet}}&amp;lt;br&amp;gt;(Re-Release, 2022/06/24)&lt;br /&gt;
|Airship Ballet&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/topic/16912-fan-mission-chase-mercantile-by-airship-ballet-20150204/}}&lt;br /&gt;
|2014-11-22&lt;br /&gt;
|111&lt;br /&gt;
|No&lt;br /&gt;
|Yes : Quinn&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;No : Part 1&lt;br /&gt;
|No&lt;br /&gt;
|Quinn Co.&lt;br /&gt;
|Bank Jobs&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|exhumed|Exhumed}}&lt;br /&gt;
|Airship Ballet and Kyyrma&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/topic/16658-fan-mission-exhumed-by-kyyrma-and-airship-ballet-20141104/}}&lt;br /&gt;
|2014-11-04&lt;br /&gt;
|24&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2014 Halloween Speed-build Contest|HSC 14]]&lt;br /&gt;
|Church/Cathedral &amp;lt;br&amp;gt; Horror&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|briarwood|Briarwood Cathedral}}&lt;br /&gt;
|buck28&lt;br /&gt;
|{{Mirrorlink|https://www64.zippyshare.com/v/25705489/file.html}}{{Forumlink|1=https://forums.thedarkmod.com/topic/16644-briarwood-cathedral/}}&lt;br /&gt;
|2014-10-29&lt;br /&gt;
|7&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Master thief Corso series|Corso]] &amp;lt;br&amp;gt; [[Fan_Mission_Contests#2014 Halloween Speed-build Contest|HSC 14]] &#039;&#039;&#039;WINNER&#039;&#039;&#039;&lt;br /&gt;
|Church/Cathedral &amp;lt;br&amp;gt; Horror&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|onesteptoofar|One Step Too Far}}&amp;lt;br&amp;gt;(v2.0 2023/06/18)&lt;br /&gt;
|Dragofer&lt;br /&gt;
|{{Mirrorlink|https://www.dropbox.com/s/sfxcap1gfdzf318/onesteptoofar.pk4}}{{Forumlink|1=https://forums.thedarkmod.com/topic/16457-fan-mission-one-step-too-far-by-dragofer-20140804/}}&lt;br /&gt;
|2014-08-04&lt;br /&gt;
|9&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Series#Of Brambles and Thorns series|Of Brambles and Thorns]]&lt;br /&gt;
|Pirate &amp;lt;br&amp;gt; Ship&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|lockner|Lockner Manor}}&lt;br /&gt;
|buck28&lt;br /&gt;
|{{Mirrorlink|https://www76.zippyshare.com/v/44108372/file.html}}{{Forumlink|1=https://forums.thedarkmod.com/topic/16452-new-mission-lockner-manor/}}&lt;br /&gt;
|2014-08-02&lt;br /&gt;
|6&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Master thief Corso series|Corso]]&lt;br /&gt;
|Mansion/Estate &amp;lt;br&amp;gt; Inn/Tavern&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|ulysses_genesis|Ulysses: Genesis}}&lt;br /&gt;
|Sotha&lt;br /&gt;
|{{Mirrorlink|https://www4.zippyshare.com/v/67195436/file.html}}{{Forumlink|1=https://forums.thedarkmod.com/topic/16428-fan-mission-ulysses-genesis-by-sotha-20140724/}}&lt;br /&gt;
|2014-07-24&lt;br /&gt;
|98&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Series#Ulysses series|Ulysses]]&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|Horror theme?&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|penny2_1|Penny Dreadful 2: All the way up}}&lt;br /&gt;
|Melan and Bikerdude&lt;br /&gt;
|{{Mirrorlink|https://mega.co.nz/#!EwoXHZYZ!tE_sKon2h4AWtWPNt9QS3FQClwmXdimhfjIMPcpCQ34}}{{Forumlink|1=https://forums.thedarkmod.com/topic/16387-fan-mission-penny-dreadful-2-by-melan-and-bikerdude-2014078/}} [https://www.youtube.com/watch?v=WmPfCfbeWvg Trailer]&lt;br /&gt;
|2014-07-08&lt;br /&gt;
|102&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Penny Dreadful series|Penny Dreadful]]&lt;br /&gt;
|Thieves&#039; Highway / Rooftop&lt;br /&gt;
|Spiders&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|poets|Poets and Peasants}}&lt;br /&gt;
|Digi&lt;br /&gt;
|{{Mirrorlink|https://drive.google.com/file/d/0B1HHvWAgbWGfTkI0SXFubXZucXM}}{{Forumlink|1=https://forums.thedarkmod.com/topic/16373-fan-mission-poets-peasants-by-digi-62914}}&lt;br /&gt;
|2014-06-29&lt;br /&gt;
|1&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|follow|A Reputation to Uphold}}&lt;br /&gt;
|Springheel&lt;br /&gt;
|{{Mirrorlink|https://www.mindplaces.com/follow.pk4}}{{Forumlink|1=https://forums.thedarkmod.com/topic/16204-fan-mission-a-reputation-to-uphold-by-springheel/}}&lt;br /&gt;
|2014-04-18&lt;br /&gt;
|25.5&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Corbin series|Corbin]]&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|breakingout|Breaking Out the Fence}}&lt;br /&gt;
|Kyyrma&lt;br /&gt;
|{{Mirrorlink|https://dl.dropboxusercontent.com/u/17706561/breakingout.pk4}}{{Forumlink|1=https://forums.thedarkmod.com/topic/16091-fan-mission-breaking-out-the-fence-17032014-by-kyyrma/}}&lt;br /&gt;
|2014-03-17&lt;br /&gt;
|11.6&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#In A Time of Need series|In A Time of Need]]&lt;br /&gt;
|City Missions &amp;lt;br&amp;gt; Jail/Prison&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|innbiz|Inn Business}}&amp;lt;br&amp;gt;(v.1.48, 2014/03/08)&lt;br /&gt;
|RJFerret&lt;br /&gt;
|{{Mirrorlink|https://drive.google.com/file/d/0B81T2ZXLPqhTYWVaODRiSExGeGc}} {{Forumlink|1=https://forums.thedarkmod.com/topic/16018-fan-mission-inn-business-by-rjferret-20140303/}}&lt;br /&gt;
|2014-03-03&lt;br /&gt;
|6&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Inn/Tavern &amp;lt;br&amp;gt; City Streets&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|ws3_cleighmoor|William Steele 3: Cleighmoor}}&lt;br /&gt;
|grayman&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/16011-fan-mission-cleighmoor-by-grayman-201431/#entry338349/}}&lt;br /&gt;
|2014-03-01&lt;br /&gt;
|38&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Series#William Steele series|William Steele]]&lt;br /&gt;
|Sewers &amp;lt;br&amp;gt; Jail/Prison&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|ws2_homeagain|William Steele 2: Home Again}}&lt;br /&gt;
|grayman&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/15919-fan-mission-home-again-by-grayman-2014212/page__fromsearch__1}}&lt;br /&gt;
|2014-02-12&lt;br /&gt;
|26&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Series#William Steele series|William Steele]]&lt;br /&gt;
|Thieves&#039; Highway / Rooftop&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|gatehouse1_3|The Gatehouse}}&lt;br /&gt;
|Bikerdude Goldchocobo&lt;br /&gt;
|{{Mirrorlink|https://www.southquarter.com/tdm/fms/gatehouse.pk4}} {{Forumlink|https://forums.thedarkmod.com/topic/15844-fan-mission-the-gatehouse-by-bikerdude-goldchocobo-20140114/}} [https://www.youtube.com/watch?v=kcIe2Ucojqw Briefing]&lt;br /&gt;
|2014-01-29&lt;br /&gt;
|100&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|Remake of Evilartist&#039;s Doom 3 mod&lt;br /&gt;
|Castle/Fortress&lt;br /&gt;
|Ghosts&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|windowopportunity|Window of Opportunity}}&amp;lt;br&amp;gt;(v.1.43, 2014/01/01)&lt;br /&gt;
|RJFerret&lt;br /&gt;
|{{Mirrorlink|https://drive.google.com/file/d/0B81T2ZXLPqhTWTMzQXZtMVFBSG8}} {{Forumlink|1=https://forums.thedarkmod.com/topic/15727-fan-mission-window-of-opportunity-by-rjferret-20140101/}}&lt;br /&gt;
|2014-01-01&lt;br /&gt;
|7&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Outdoor/Caves&lt;br /&gt;
|Spiders (not in short mode)&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|timeofneed|In A Time Of Need}}&lt;br /&gt;
|kyyrma&lt;br /&gt;
| {{Mirrorlink|https://www.mediafire.com/download/a97or40t1xrybh3/timeofneed_v1.zip}} {{Forumlink|https://forums.thedarkmod.com/topic/15354-fan-mission-in-a-time-of-need-by-kyyrma-20131112/}}&lt;br /&gt;
|2013-11-12&lt;br /&gt;
|5.6&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#In A Time of Need series|In A Time of Need]]&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|requiem|Requiem}}&lt;br /&gt;
|Moonbo&lt;br /&gt;
| {{Mirrorlink|https://www.mediafire.com/download/l6o3vvj9y78hu89/requiem.pk4}} {{Forumlink|https://forums.thedarkmod.com/topic/15101-fan-mission-requiem-by-gelo-moonbo-fleisher-2013106/}}&lt;br /&gt;
|2013-10-08&lt;br /&gt;
|107.3&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Series#Shadowcursed series|Shadowcursed]]&lt;br /&gt;
|Lost Civilizations &amp;lt;br&amp;gt; Church/Cathedral&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|vfat2|Vengeance for a Thief Part 2}}&lt;br /&gt;
|Sir Taffsalot&lt;br /&gt;
| {{Mirrorlink|https://dl.dropboxusercontent.com/u/17706561/vfat2.pk4}} {{Forumlink|https://forums.thedarkmod.com/topic/15051-fan-mission-vengeance-for-a-thief-part-2-by-sir-taffsalot-06092013/}}&lt;br /&gt;
|2013-09-06&lt;br /&gt;
|22&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Vengeance for a Thief series|VFAT]] &amp;lt;br&amp;gt; [[Fan_Mission_Contests#2013 Community Unusual Contest|CUC 13]]&lt;br /&gt;
|Museum Heists&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|lordsnlegacy|Lords and Legacy}}&lt;br /&gt;
|Kvorning&lt;br /&gt;
| {{Mirrorlink|https://dl.dropboxusercontent.com/u/17706561/lordsnlegacy.pk4}} {{Forumlink|https://forums.thedarkmod.com/topic/15016-fan-mission-lords-legacy-by-kvorning-20130830/}}&lt;br /&gt;
|2013-08-30&lt;br /&gt;
|45&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Thieves&#039; Highway / Rooftop&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|naog|Not An Ordinary Guest}}&lt;br /&gt;
|DeTeEff (Fieldmedic)&lt;br /&gt;
| {{Mirrorlink|https://dl.dropboxusercontent.com/u/17706561/naog.pk4}} {{Forumlink|https://forums.thedarkmod.com/topic/14965-fan-mission-not-an-ordinary-guest-by-fieldmedic-20130801/}}&lt;br /&gt;
|2013-08-01&lt;br /&gt;
|79.6&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2013 Community Unusual Contest|CUC 13]]&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|penny1_1|Penny Dreadful: Grail of Regrets}}&lt;br /&gt;
|Melan&lt;br /&gt;
| {{Forumlink|https://forums.thedarkmod.com/topic/14952-fan-mission-penny-dreadful-by-melan-20130728/}}&lt;br /&gt;
|2013-07-27&lt;br /&gt;
|74&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Penny Dreadful series|Penny Dreadful]]&lt;br /&gt;
|Horror &lt;br /&gt;
|Spiders, Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|solarescape1|Solar Escape 1}}&lt;br /&gt;
|Tr00pertj&lt;br /&gt;
| {{Forumlink|https://forums.thedarkmod.com/topic/14944-fan-mission-solar-escape-1/}}&lt;br /&gt;
|2013-07-22&lt;br /&gt;
|6&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Mansion/Estate &amp;lt;br&amp;gt; Sewers&lt;br /&gt;
|Spiders, Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|lich_queens_demise|The Lich Queen&#039;s Demise}}&lt;br /&gt;
|Sotha&lt;br /&gt;
|{{Mirrorlink|https://dl.dropboxusercontent.com/u/17706561/lich_queens_demise.pk4}} {{Forumlink|https://forums.thedarkmod.com/topic/14826-fan-mission-the-lich-queens-demise-by-sotha-20130520/unread/}}&lt;br /&gt;
|2013-05-20&lt;br /&gt;
|97.6&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Thomas Porter series|Thomas Porter]] &amp;lt;br&amp;gt; [[Fan_Mission_Contests#2013 Community Unusual Contest|CUC 13]] &#039;&#039;&#039;WINNER&#039;&#039;&#039;&lt;br /&gt;
|Horror&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|oldhabits2|Old Habits Rebuild}}&lt;br /&gt;
|Obsttorte&lt;br /&gt;
|{{Mirrorlink|https://www.mediafire.com/download/u2gwucibh17c45a/oldhabits.pk4}} {{Forumlink|https://forums.thedarkmod.com/topic/14827-fan-mission-old-habits-rebuild-by-obsttorte-20052013/}}&lt;br /&gt;
|2013-05-20&lt;br /&gt;
|28.6&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|builders_blocks|The Builder&#039;s Blocks}}&lt;br /&gt;
|Jesps&lt;br /&gt;
|{{Mirrorlink|https://dl.dropboxusercontent.com/u/17706561/builders_blocks.pk4}} {{Forumlink|https://forums.thedarkmod.com/topic/14592-unusual-gameplay-contest-fm-the-builders-blocks-by-jesps/}}&lt;br /&gt;
|2013-03-18&lt;br /&gt;
|2.85&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2013 Community Unusual Contest|CUC 13]]&lt;br /&gt;
|Experimental&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|broads|The Builder Roads}}&lt;br /&gt;
|Obsttorte&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/14449-fan-mission-the-builder-roads-by-obsttorte-20130119/}}&lt;br /&gt;
|2013-01-19&lt;br /&gt;
|2.3&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Church/Experimental &lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|ws1_north|William Steele 1: In the North}}&lt;br /&gt;
|grayman&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/14214-fan-mission-in-the-north-by-grayman-20121020/}}&lt;br /&gt;
|2012-10-20&lt;br /&gt;
|39.8&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Series#William Steele series|William Steele]]&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|oldhabits1|Old Habits}}&lt;br /&gt;
|Obsttorte&lt;br /&gt;
|{{Mirrorlink|https://www.mediafire.com/download.php?andes2xnsonssfj}} {{Forumlink|https://forums.thedarkmod.com/topic/14206-fan-mission-old-habits-by-obsttorte-20121019/}}&lt;br /&gt;
|2012-10-19&lt;br /&gt;
|12.8&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|deceptiveshadowsv1_2|Deceptive Shadows}}&lt;br /&gt;
|ShadowHide&lt;br /&gt;
|{{Mirrorlink|https://www.sendspace.com/file/jzr9s7}} {{Forumlink|https://forums.thedarkmod.com/topic/14103-fan-mission-deceptive-shadows-by-shadowhide-16sep12/}}&lt;br /&gt;
|2012-09-16&lt;br /&gt;
|22.4&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|&lt;br /&gt;
|Outdoor/Pagan&lt;br /&gt;
|Spiders, Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|vfat1|Vengeance for a Thief: Part 1}}&lt;br /&gt;
|Sir Taffsalot &lt;br /&gt;
|{{Mirrorlink|https://dl.dropbox.com/u/17706561/VFAT1.pk4}} {{Forumlink|https://forums.thedarkmod.com/topic/14068-fan-mission-vengeance-for-a-thief-part-1-by-sir-taffsalot-06092012/}}&lt;br /&gt;
|2012-09-06&lt;br /&gt;
|20.9&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Vengeance for a Thief series|VFAT]]&lt;br /&gt;
|Jail/Prison&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|phrase_book|The Phrase Book}}&lt;br /&gt;
|Sotha&lt;br /&gt;
|{{Mirrorlink|https://dl.dropbox.com/u/17706561/phrase_book.pk4}} {{Forumlink|https://forums.thedarkmod.com/topic/13799-fan-mission-the-phrase-book-by-sotha-20120512/}}&lt;br /&gt;
|2012-05-11&lt;br /&gt;
|24&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Thomas Porter series|Thomas Porter]]&lt;br /&gt;
|Thieves&#039; Highway / Rooftop&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|remembrance|In Remembrance of Him}}&lt;br /&gt;
|RPGista&lt;br /&gt;
|{{Mirrorlink|https://dl.dropbox.com/u/17706561/remembrance.pk4}} {{Forumlink|https://forums.thedarkmod.com/topic/13749-fan-mission-in-remembrance-of-him-by-rpgista/}}&lt;br /&gt;
|2012-04-22&lt;br /&gt;
|27.6&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2012_Community_Beginner_Contest|CBC 12]]&lt;br /&gt;
|City Missions&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|rightful|Rightful Property}}&lt;br /&gt;
|jysk&lt;br /&gt;
|{{Mirrorlink|https://dl.dropbox.com/u/17706561/rightful1.1b.pk4}} {{Forumlink|https://forums.thedarkmod.com/topic/13711-fan-mission-rightful-property-by-jysk-20120413/}}&lt;br /&gt;
|2012-04-12&lt;br /&gt;
|22.5&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2012_Community_Beginner_Contest|CBC 12]]&lt;br /&gt;
|Bank Jobs&lt;br /&gt;
|Spiders&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|sneak_destroy|Sneak &amp;amp; Destroy}}&amp;lt;br&amp;gt;(v2 EFX, 2022/11/16)&lt;br /&gt;
|SeriousToni&lt;br /&gt;
|{{Mirrorlink|https://minus.com/mVcf61n3G/1f}} {{Forumlink|https://forums.thedarkmod.com/topic/13706-fan-mission-sneak-destroy-by-serioustoni-beginners-contest-2012/}}&lt;br /&gt;
|2012-04-11&lt;br /&gt;
|147&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Contests#2012_Community_Beginner_Contest|CBC 12]] &#039;&#039;&#039;WINNER&#039;&#039;&#039;&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|houseoftheo|House of Theo}}&lt;br /&gt;
|Theothesnopp&lt;br /&gt;
|{{Mirrorlink|https://www.gamefront.com/files/21053391/houseoftheo__2__2.pk4}} {{Forumlink|https://forums.thedarkmod.com/topic/13242-fan-mission-house-of-theo/}}&lt;br /&gt;
|2011-12-04&lt;br /&gt;
|6.2&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Castle/Fortress&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|crystalgrave2_1|Crystal Grave}} &amp;lt;br&amp;gt;(v.2.0, 2013/02/09)&lt;br /&gt;
|ERH+ Bikerdude&lt;br /&gt;
|{{Mirrorlink|https://dl.dropbox.com/u/17706561/crystalgravev2.pk4}} {{Forumlink|https://forums.thedarkmod.com/topic/14510-fan-mission-crystal-grave-v2-by-erh-and-bikerdude-20130209/unread/}}&lt;br /&gt;
|2011-11-15&lt;br /&gt;
|12.4&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Horror&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|claw1_31|Dragon&#039;s Claw}}&amp;lt;br&amp;gt;(v1.31, 2020/11/02)&lt;br /&gt;
|Bikerdude, Flanders (map assets)&lt;br /&gt;
|{{Mirrorlink|https://www.gamefront.com/files/20948800/claw.pk4}} {{Forumlink|https://forums.thedarkmod.com/topic/13181-fan-missiondragons-claw-by-b1k3rdude-31102011/}}&lt;br /&gt;
|2011-10-31&lt;br /&gt;
|98&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2011_Halloween_Speed-build_Contest|HSC 11]]&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|antr|A Night to Remember}}&amp;lt;br&amp;gt;(v2.1, 2023/05/04)&lt;br /&gt;
|DeTeEff (Fieldmedic)&lt;br /&gt;
|New &amp;amp;rarr; {{Forumlink|https://forums.thedarkmod.com/topic/19452-a-night-to-remember/}} &amp;lt;br&amp;gt;Old &amp;amp;rarr; {{Forumlink|https://forums.thedarkmod.com/topic/13177-fan-mission-a-night-to-remember-by-fieldmedic-20111030/}}&lt;br /&gt;
|2011-10-31&lt;br /&gt;
|33&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2011_Halloween_Speed-build_Contest|HSC 11]]&lt;br /&gt;
|Mansion/Estate &amp;lt;br&amp;gt; Horror&lt;br /&gt;
|Ghosts&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|thecreeps|The Creeps}}&lt;br /&gt;
|Mortem Desino&lt;br /&gt;
|{{Mirrorlink|https://www.gamefront.com/files/20939925/thecreeps.pk4}} {{Forumlink|https://forums.thedarkmod.com/topic/13176-fan-mission-creeps-the-20111030-by-mortem-desino/}}&lt;br /&gt;
|2011-10-30&lt;br /&gt;
|61&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2011_Halloween_Speed-build_Contest|HSC 11]]&lt;br /&gt;
|Horror&lt;br /&gt;
|Ghosts&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|blackbog|House in Blackbog Hollow}}&lt;br /&gt;
|Stumpy&lt;br /&gt;
|{{Mirrorlink|https://www.bookofages.co.uk/doom3/mods/blackbog.html}} {{Forumlink|https://forums.thedarkmod.com/topic/13172-fan-mission-house-in-blackbog-hollow-by-stumpy-20111028/}}&lt;br /&gt;
|2011-10-28&lt;br /&gt;
|12&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2011_Halloween_Speed-build_Contest|HSC 11]]&lt;br /&gt;
|Horror&lt;br /&gt;
|Spiders, Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|lstl|Let Sleeping Thieves Lie}}&lt;br /&gt;
|Sir Taffsalot, Bikerdude&lt;br /&gt;
|{{Mirrorlink|https://www.mediafire.com/?zkd1jn4lpwgioh9}} {{Forumlink|https://forums.thedarkmod.com/index.php?/topic/13153-let-sleeping-thieves-lie-by-sir-taffsalot-bikerdude-20102011/}}&lt;br /&gt;
|2011-10-20&lt;br /&gt;
|13&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Tombs, Catacombs &amp;amp; Crypts&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|samhain|Samhain Night}}&amp;lt;br&amp;gt;(v3.3, 2020/03/02)&lt;br /&gt;
|PranQster&lt;br /&gt;
|{{Mirrorlink|https://jdchoate.mcn.org/games/darkmod/samhain.zip}} {{Forumlink|https://forums.thedarkmod.com/index.php?/topic/13127-fan-mission-samhain-night-on-bone-hill-by-pranqster-20111009/}}&lt;br /&gt;
|2011-10-09&lt;br /&gt;
|4.8&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2011_Halloween_Speed-build_Contest|HSC 11]]&lt;br /&gt;
|Horror&lt;br /&gt;
|Spiders, Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|score_to_settle|A Score to Settle}}&lt;br /&gt;
|Springheel&lt;br /&gt;
|{{Mirrorlink|https://www.mediafire.com/?f3o7hm4h4ew7o3l}} {{Forumlink|https://forums.thedarkmod.com/index.php?/topic/12894-fan-mission-%2348-a-score-to-settle-by-springheel-20110701/}}&lt;br /&gt;
|2011-07-01&lt;br /&gt;
|135&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Corbin series|Corbin]]&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|siegeshop|Siege Shop}}&amp;lt;br&amp;gt;(v5.0 2020/09/07)&lt;br /&gt;
|PranQster and Lowenz&lt;br /&gt;
|{{Mirrorlink|https://jdchoate.mcn.org/games/darkmod/siegeshop.pk4}} {{Forumlink|https://forums.thedarkmod.com/index.php?/topic/12874-fan-mission-the-siege-shop-by-pranqster-20110626/}} {{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20559-the-siege-shop-07092020/}}&lt;br /&gt;
|2011-06-26&lt;br /&gt;
|32.2&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Castle/Fortress&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|alberic3|Alberic&#039;s Curse}}&amp;lt;br&amp;gt;( v3.11 EFX, 2024/02/23 )&lt;br /&gt;
|Bikerdude&lt;br /&gt;
|{{Mirrorlink|https://www.gamefront.com/files/20459738/alberic.pk4}} {{Forumlink|https://forums.thedarkmod.com/index.php?/topic/12850-fan-mission-alberics-curse-by-b1k3rdude-20062011/}}&lt;br /&gt;
|2011-06-20&lt;br /&gt;
|51.6&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2011_Community Seasons Contest|CSC 11]] &#039;&#039;&#039;WINNER&#039;&#039;&#039; &amp;lt;br&amp;gt; T2 FM homage&lt;br /&gt;
|Church/Cathedral&lt;br /&gt;
|Spiders, Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|reap|Reap As You Sow}}&lt;br /&gt;
|DeTeEff (Fieldmedic)&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/12849-fan-mission-reap-as-you-sow-by-fieldmedic-20110619/}}&lt;br /&gt;
|2011-06-19&lt;br /&gt;
|52&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2011_Community Seasons Contest|CSC 11]]&lt;br /&gt;
|Outdoor/Daylight &amp;lt;br&amp;gt; Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|rake_off|Rake Off}}&lt;br /&gt;
|Jesps&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/12846-fm-rake-off-19-06-2011/}}&lt;br /&gt;
|2011-06-19&lt;br /&gt;
|8&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Selis Woderose series|Selis Woderose]] &amp;lt;br&amp;gt; [[Fan_Mission_Contests#2011_Community Seasons Contest|CSC 11]] &lt;br /&gt;
|Castle/Fortress&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|winterharvest|Winter Harvest}}&amp;lt;br&amp;gt;(v2.5 2024/12/15 with Bikerdude)&lt;br /&gt;
|ShadowHide&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/12690-seasons-contest-entry-winter-harvest-by-shadowhide/}} &#039;&#039;&#039;[https://forums.thedarkmod.com/index.php?/topic/12952-fm-winter-harvest-v2-by-bikerdude-and-shadowhide/ V2]&#039;&#039;&#039;&lt;br /&gt;
|2011-05-08&lt;br /&gt;
|20.2&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Contests#2011_Community Seasons Contest|CSC 11]]&lt;br /&gt;
|Outdoor/Pagan&lt;br /&gt;
|Spiders&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|fauchard1_1|Fiasco at Fauchard Street}}&lt;br /&gt;
|Melan&lt;br /&gt;
|{{Mirrorlink|https://rapidshare.com/files/460141132/fauchard.pk4}} {{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/12655-fan-mission-fiasco-at-fauchard-street-by-melan-20110501//}}&lt;br /&gt;
|2011-05-01&lt;br /&gt;
|62&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Sir Talbot series|Sir Talbot]]&lt;br /&gt;
|Thieves&#039; Highway / Rooftop&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|mandrasola|Mandrasola}}&lt;br /&gt;
|Sotha&lt;br /&gt;
|{{Mirrorlink|https://www.mediafire.com/?2ox2nbhh796ne71}} {{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/12575-fan-mission-mandrasola-by-sotha-20110410/}}&lt;br /&gt;
|2011-04-10&lt;br /&gt;
|10&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Series#Thomas Porter series|Thomas Porter]] &amp;lt;br&amp;gt; [[Fan_Mission_Contests#2011_Community Seasons Contest|CSC 11]]&lt;br /&gt;
|City Missions&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left| Q4 Conversion: Yan&#039;s Test&lt;br /&gt;
|Bikerdude&lt;br /&gt;
|{{Mirrorlink|https://www.moddb.com/mods/the-dark-mod/addons/yantdm1-1}} {{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/12506-fan-mission-q4-map-conversion-yantdm1-280311/}}&lt;br /&gt;
|2011-03-28&lt;br /&gt;
|28&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|transaction|The Transaction}}&lt;br /&gt;
|Sotha&lt;br /&gt;
|{{Mirrorlink|https://www.mediafire.com/?ux7mx79wumnvcb6}} {{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/12408-fan-mission-the-transaction-by-sotha-20110304/}}&lt;br /&gt;
|2011-03-04&lt;br /&gt;
|10&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Thomas Porter series|Thomas Porter]]&lt;br /&gt;
|City Missions&lt;br /&gt;
|Horror Themes, Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|lockdown1_2_1|Lockdown}}&lt;br /&gt;
|GameDevGoro Bikerdude Fidcal&lt;br /&gt;
|{{Mirrorlink|https://www.fidcal.com/darkuser/missions/lockdown1_2_1.pk4}} {{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/12064-fm-lockdown-part-1-by-gamedevgoro-and-bikerdude-20101224/}}&lt;br /&gt;
|2010-12-25&lt;br /&gt;
|3&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Lockdown 1&lt;br /&gt;
|City Missions&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|flakebridge|Flakebridge Monastery}}&lt;br /&gt;
|Jesps&lt;br /&gt;
|{{Mirrorlink|https://www.file-upload.net/download-3024426/flakebridge.pk4.html}} {{Mirrorlink|https://rapidshare.com/files/434997519/flakebridge.pk4}} {{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/11991-fm-flakebridge-monastery-by-jesps/}}&lt;br /&gt;
|2010-12-05&lt;br /&gt;
|16&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Selis Woderose series|Selis Woderose]]&lt;br /&gt;
|Church/Cathedral&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|knighton_manor|Knighton Manor, The}}&lt;br /&gt;
|Sotha&lt;br /&gt;
|{{Mirrorlink|https://www.mediafire.com/?xrdts3j4t2qxre2}}  {{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/11898-fan-mission-the-knighton-manor-by-sotha-20101109/page__view__getnewpost}}&lt;br /&gt;
|2010-11-09&lt;br /&gt;
|21&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Thomas Porter series|Thomas Porter]]&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|cathedral|St Albans Cathedral}}&amp;lt;br&amp;gt;(v2.0 2014/06/11)&lt;br /&gt;
|Bikerdude&lt;br /&gt;
|{{Mirrorlink|https://www.filefront.com/17464439/stac141.pk4}}{{Forumlink|1=https://forums.thedarkmod.com/topic/16343-fan-mission-st-albans-cathedral-v20-11062014/}} {{Loot|FM:TDM_St_Alban&#039;s_Cathedral_-_Bikerdude}}&lt;br /&gt;
|2010-11-01&lt;br /&gt;
|67&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#St Alban series|St Alban]] &lt;br /&gt;
|Church/Cathedral&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|swing1_2|Swing}}&lt;br /&gt;
|Komag&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/11660-vertigo-contest-entry-swing-by-komag-20100825/}} {{Loot|FM:TDM_Swing_-_Komag}}&lt;br /&gt;
|2010-08-25&lt;br /&gt;
|3&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2010 Summer Vertical Contest|SVC 10]]&lt;br /&gt;
|Platforming/Jumping &amp;lt;br&amp;gt; Experimental&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|caduceus|The Caduceus of St. Alban}}&amp;lt;br&amp;gt;(v.1.5.5 2010/08/26)&lt;br /&gt;
|Bikerdude&lt;br /&gt;
|{{Mirrorlink|https://www.filefront.com/17237609/stalban.pk4/}}{{Forumlink|https://forums.thedarkmod.com/topic/11644-the-caduceus-of-st-alban-vertical-fm-contest-entry-aug-8th-2010/}}&lt;br /&gt;
|2010-08-23&lt;br /&gt;
|11.3&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#St Alban series|St Alban]] &amp;lt;br&amp;gt; [[Fan_Mission_Contests#2010 Summer Vertical Contest|SVC 10]]&lt;br /&gt;
|Church/Cathedral&lt;br /&gt;
|Spiders&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|somewhere1_1|Somewhere Above the City}}&amp;lt;br&amp;gt;(v1.1 2010/08/27)&lt;br /&gt;
|grayman&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/11619-vertical-contest-mission-somewhere-above-the-city-by-grayman-aug-20-2010/}} {{Loot|FM:TDM_Somewhere_Above_the_City_-_grayman}}&lt;br /&gt;
|2010-08-20&lt;br /&gt;
|11&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Contests#2010 Summer Vertical Contest|SVC 10]]&lt;br /&gt;
|Tombs, Catacombs &amp;amp; Crypts&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|betrayal|Betrayal}}&amp;lt;br&amp;gt;(v.1.1, 2010/09/01)&lt;br /&gt;
|DeTeEff (Fieldmedic)&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/11605-betrayal-by-fieldmedic-20100817-summer-fm-vertical-contest-entry/}} {{Loot|FM:TDM_Awaiting_the_Storm_-_HappyCheeze}}&lt;br /&gt;
|2010-08-17&lt;br /&gt;
|12&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2010 Summer Vertical Contest|SVC 10]]&lt;br /&gt;
|Horror&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|rift|Rift, The}}&lt;br /&gt;
|Baddcog&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/11599-vert-contest-mission-the-rift-by-baddcog-aug-15-2010/}}&lt;br /&gt;
|2010-08-15&lt;br /&gt;
|10&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2010 Summer Vertical Contest|SVC 10]]&lt;br /&gt;
|Lost Civilizations&lt;br /&gt;
|Spiders, Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|holetower|Illusionist&#039;s Tower}}&lt;br /&gt;
|stumpy&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/11541-illusionists-tower-by-stumpy-201085-summer-fm-vertical-contest-entry}} {{Forumlink|1=https://www.bookofages.co.uk/doom3/mods/holetower.html}} {{Loot|FM:TDM_Illusionist%27s_Tower_-_stumpy}}&lt;br /&gt;
|2010-08-05&lt;br /&gt;
|9&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2010 Summer Vertical Contest|SVC 10]]&lt;br /&gt;
|Horror &amp;lt;br&amp;gt; Experimental&lt;br /&gt;
|Spiders, Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|madmountain|Mad&#039;s Mountain}}&lt;br /&gt;
|Jesps&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/11510-fan-mission-mads-mountain-by-jesps-20100731}} {{Loot|FM:TDM_Lord_Dufford%27s_-_stumpy}}&lt;br /&gt;
|2010-07-31&lt;br /&gt;
|2&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2010 Summer Vertical Contest|SVC 10]]&lt;br /&gt;
|Outdoor/Caves&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|glenham_tower|Glenham Tower, The}}&lt;br /&gt;
|Sotha&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/11423-fan-mission-the-glenham-tower-by-sotha-20100717}}&lt;br /&gt;
|2010-07-17&lt;br /&gt;
|5&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Thomas Porter series|Thomas Porter]] &amp;lt;br&amp;gt; [[Fan_Mission_Contests#2010 Summer Vertical Contest|SVC 10]] &#039;&#039;&#039;WINNER&#039;&#039;&#039;&lt;br /&gt;
|Castle/Fortress &amp;lt;br&amp;gt; Horror&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|pandoras_box|Pandora&#039;s Box}}&lt;br /&gt;
|Jesps, Fidcal&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/11381-fan-mission-pandoras-box-by-jesps20100711}} {{Loot|FM:TDM_Pandora%27s_Box_-_Jesps}}&lt;br /&gt;
|2010-07-11&lt;br /&gt;
|7&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Pirate &amp;lt;br&amp;gt; Ship &amp;lt;br&amp;gt; Experimental&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|beleaguered_fence|Beleaguered Fence, The}}&lt;br /&gt;
|Sotha&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/11298-fan-mission-the-beleaguered-fence-by-sotha-20100623}} {{Loot|FM:TDM_The_Beleaguered_Fence_-_Sotha}}&lt;br /&gt;
|2010-06-23&lt;br /&gt;
|11&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Thomas Porter series|Thomas Porter]]&lt;br /&gt;
|Jail/Prison&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|delivery|Special Delivery, A}}&lt;br /&gt;
|Silencium18&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/11247-fan-mission-a-special-delivery-by-silencium1820100612}} {{Loot|FM:TDM_A_Special_Delivery_-_Silencium18}}&lt;br /&gt;
|2010-06-12&lt;br /&gt;
|2&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Warehouse&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|alchemist|Alchemist, The}}&amp;lt;br&amp;gt;(2010/06/04)&lt;br /&gt;
|Sotha, Fidcal&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/11170-fan-mission-the-alchemist-by-sotha-fidcal20100601}} {{Loot|FM:TDM_The_Alchemist_-_Sotha_%26_Fidcal}}&lt;br /&gt;
|2010-06-01&lt;br /&gt;
|27&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Thief&#039;s Den series|Thief&#039;s Den]]&lt;br /&gt;
|City Missions&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|storm|Awaiting The Storm}}&lt;br /&gt;
|HappyCheeze&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/11095-fm-awaiting-the-storm-by-happycheeze-20200522}} {{Loot|FM:TDM_Awaiting_the_Storm_-_HappyCheeze}}&lt;br /&gt;
|2010-05-22&lt;br /&gt;
|4&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|sound_alert_trainer|Sound Alert &amp;amp; Blackjack Trainer}}&lt;br /&gt;
|Dark Mod Team&lt;br /&gt;
| &lt;br /&gt;
|2010-05-14&lt;br /&gt;
|0.2&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Training &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|nhat3|No Honor Among Thieves}}&amp;lt;br&amp;gt;(v.4.3 EFX, Subtitles, Water Effects 2024/02/23)&lt;br /&gt;
|Goldchocobo, RailGun, Mortem Desino, Bikerdude&lt;br /&gt;
|{{Mirrorlink|https://tinyurl.com/2a9mdcs}}{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/10993-fan-mission-no-honor-among-thieves-20100429}} {{Loot|FM:TDM_No_Honor_Among_Thieves_-_Goldchocobo}}&lt;br /&gt;
|2010-04-29&lt;br /&gt;
|229.8&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|&lt;br /&gt;
|Church/Cathedral; City Missions; Outdoor/Pagan, Mansion/Estate&lt;br /&gt;
|Spiders, Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|heartv2|Heart of Lone Salvation, The}}&amp;lt;br&amp;gt;(v.2.0, 2014/04/12)&lt;br /&gt;
|Fidcal, Baddcog, Bikerdude&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/topic/10878-fan-mission-the-heart-of-lone-salvation-by-fidcal-baddcog-bikerdude-20100402/?p=213506}} {{Walkthrough|FM:TDM_The_Heart_of_Lone_Salvation_-_Fidcal_%26_Baddcog_%26_Bikerdude}} {{loot|FM:TDM_The_Heart_of_Lone_Salvation_-_Fidcal_%26_Baddcog_%26_Bikerdude}}&lt;br /&gt;
|2010-04-02&lt;br /&gt;
|41&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Thief&#039;s Den series|Thief&#039;s Den]]&lt;br /&gt;
|City Missions&lt;br /&gt;
|Spiders&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|dufford|Lord Dufford&#039;s}}&lt;br /&gt;
|stumpy&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/10868-fan-mission-lord-duffords-20100331}} {{Loot|FM:TDM_Lord_Dufford%27s_-_stumpy}}&lt;br /&gt;
|2010-03-31&lt;br /&gt;
|22&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|builders_influence|Builder&#039;s Influence, The}}&amp;lt;br&amp;gt;(2010/03/23)&lt;br /&gt;
|Railgun, Springheel&lt;br /&gt;
|{{Mirrorlink|https://www.fidcal.com/darkuser/missions/builders_influence.pk4}}{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/10811-fan-mission-the-builders-influence-20100320/}} {{Loot|FM:TDM_The_Builders_Influence_-_Railgun%26Springheel}}&lt;br /&gt;
|2010-03-20&lt;br /&gt;
|15&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Corbin series|Corbin]]&lt;br /&gt;
|Castle/Fortress&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|business3|Business as Usual}}&amp;lt;br&amp;gt;(v3.0 2013/01/19)&lt;br /&gt;
|Bikerdude&lt;br /&gt;
|{{Mirrorlink|1=https://rapidshare.com/files/335299431/business.pk4.html}}{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/10533-fan-mission-business-as-usual-by-b1k3rdude-14012010-christmas-fm-contest-entry/page__view__findpost__p__207055}}{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/14450-fan-mission-business-as-usual-v30-20130119/}}&lt;br /&gt;
|2010-01-14&lt;br /&gt;
|16.1&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2009 Grand Christmas Contest|GCC 09]]&lt;br /&gt;
|Sewers&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|returntothecity|Return to the City}}&amp;lt;br&amp;gt;(v3.0 2015/01/03)&lt;br /&gt;
|Melan, Bikerdude&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/10509-fan-mission-return-to-the-city-by-melan-20100110/}} {{Forumlink|1=https://www.ttlg.com/forums/showthread.php?t=130519/}} {{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/12390-fan-mission-return-to-the-city-v2-01032011/}}&lt;br /&gt;
|2010-01-10&lt;br /&gt;
|26&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Sir Talbot series|Sir Talbot]] &amp;lt;br&amp;gt; [[Fan_Mission_Contests#2009 Grand Christmas Contest|GCC 09]] &#039;&#039;&#039;WINNER&#039;&#039;&#039; &lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|sons_of_baltona_1|Sons of Baltona 1, The}}&lt;br /&gt;
|Carnage&lt;br /&gt;
|{{Mirrorlink|1=https://www.mediafire.com/?m4ywobjodm0}}{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/10498-fan-mission-the-sons-of-baltona-1-by-carnage-20100109}}&lt;br /&gt;
|2010-01-09&lt;br /&gt;
|3&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2009 Grand Christmas Contest|GCC 09]] / Baltona 1&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|living_expenses|Living Expenses}}&lt;br /&gt;
|Sonosuke&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/10451-fm-living-expenses-by-sonosuke-2-jan-10/page__view__findpost__p__205386}}&lt;br /&gt;
|2010-01-02&lt;br /&gt;
|6&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2009 Grand Christmas Contest|GCC 09]]&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|trapped|Trapped!}}&lt;br /&gt;
|RailGun&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/10442-fm-trapped-by-railgun-dec-30/page__view__findpost__p__205092}}&lt;br /&gt;
|2009-12-30&lt;br /&gt;
|6&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Jail/Prison&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|parcel|Parcel, The}}&lt;br /&gt;
|Xonze&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/10404-fm-the-parcel-by-xonze-dec-24/page__view__findpost__p__204459}}&lt;br /&gt;
|2009-12-24&lt;br /&gt;
|7&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2009 Grand Christmas Contest|GCC 09]]&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|too_late|Too Late}}&lt;br /&gt;
|Nielsen74&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/10400-fm-too-late-by-nielsen74-24-dec-09/page__view__findpost__p__204396}}&lt;br /&gt;
|2009-12-24&lt;br /&gt;
|4&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2009 Grand Christmas Contest|GCC 09]]&lt;br /&gt;
|Warehouse&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|thieves|Thieves}}&lt;br /&gt;
|Silencium, RailGun, Fidcal&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/10286-fm-the-thieves-nov-2509/}}&lt;br /&gt;
|2009-11-26&lt;br /&gt;
|9&lt;br /&gt;
|No &amp;lt;br&amp;gt; [https://www.moddb.com/mods/the-dark-mod/addons/unofficial-thieves-efx  Unofficial EFX Build]&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|patently_dangerous|Patently Dangerous}}&amp;lt;br&amp;gt;(v.2.0 EFX, 2021/01/03)&lt;br /&gt;
|demagogue&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/10125-fm-patently-dangerous-oct3109/page__view__findpost__p__199324/}}&lt;br /&gt;
|2009-10-31&lt;br /&gt;
|22.5&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM||Dark Mod Training Mission, The}}&lt;br /&gt;
|TDM Team&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/9932-fm-training-mission-17-oct-09/}}&lt;br /&gt;
|2009-10-17&lt;br /&gt;
|6&lt;br /&gt;
|Yes ( 2.13 beta )&lt;br /&gt;
|&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Introduction_campaign|Official Campaign]]&lt;br /&gt;
|Training &amp;lt;br&amp;gt; Platforming/Jumping&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|crown_of_penitence|Crown of Penitence, The}}&lt;br /&gt;
|Jesps&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/9934-fm-crown-of-penitence-by-jesps-17-oct-09/}}&lt;br /&gt;
|2009-10-16&lt;br /&gt;
|12&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|chalice1_1|Chalice of Kings, The}}&amp;lt;br&amp;gt;(v.2.0, 2015/09/24) (Bikerdude and Xarg)&lt;br /&gt;
|Fidcal&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/9935-fm-chalice-of-kings-by-fidcal-17-oct-09/}} {{Loot|FM:TDM_Chalice_of_Kings_-_Fidcal}}&lt;br /&gt;
|2009-10-15&lt;br /&gt;
|3&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Thief&#039;s Den series|Thief&#039;s Den]]&lt;br /&gt;
|Castle/Fortress&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|outpost|Outpost, The}}&lt;br /&gt;
|angua, greebo&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/9937-fm-the-outpost-by-angua-greebo-17-oct-09/}}&lt;br /&gt;
|2008-12-23&lt;br /&gt;
|2&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Castle/Fortress&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM||Mission 2: Tears of Saint Lucia, The}}&amp;lt;br&amp;gt;(v.3.0, 2017/02/14)&lt;br /&gt;
|TDM Team&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/10579-fan-mission-the-tears-of-st-lucia-20081021/page__view__findpost__p__207972}} {{Loot|FM:TDM_The_Tears_of_Saint_Lucia_-_jdude}} [https://www.youtube.com/watch?v=yrGxoi3LSGg Briefing]&lt;br /&gt;
|2008-10-21&lt;br /&gt;
|20.3&lt;br /&gt;
|Yes (2.11)&lt;br /&gt;
|&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Series#Introduction_campaign|Official Campaign]]&lt;br /&gt;
|Church/Cathedral&lt;br /&gt;
|Spiders&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|closemouthed_shadows|Closemouthed Shadows}}&amp;lt;br&amp;gt;(v.2.0, 2012/01/15)&lt;br /&gt;
|LordSavage, Bikerdude&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/topic/13383-fan-mission-closemouthed-shadows-2008-reworked-for-tdm-107-20120115/}} &lt;br /&gt;
|2008-09-21&lt;br /&gt;
|2&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Closemouthed Shadows 1&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|thiefsden|Thief&#039;s Den}}&amp;lt;br&amp;gt;(v.2.0, 2010/07/04)&lt;br /&gt;
|Fidcal, greebo&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/11347-fan-mission-thiefs-den-re-release-by-fidcal20100704}} {{Walkthrough|FM:TDM_Thief&#039;s_Den_-_Fidcal}} {{Loot|FM:TDM_Thief%27s_Den_-_Fidcal}}&lt;br /&gt;
|2008-01-18&lt;br /&gt;
|3&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Thief&#039;s Den series|Thief&#039;s Den]]&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To see a speculative list of Upcoming Fan Missions, please visit: [[Upcoming Fan Missions]]&lt;br /&gt;
&lt;br /&gt;
== Table notes ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Links Key&#039;&#039;&#039;&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; border=1 style=&amp;quot;border-collapse: collapse;&amp;quot; cellspacing=0 cellpadding=2&lt;br /&gt;
|-&lt;br /&gt;
|[https://wiki.thedarkmod.com/images/b/be/Icon_forum.png https://wiki.thedarkmod.com/images/b/be/Icon_forum.png]&lt;br /&gt;
|Link to discussion in Forums&lt;br /&gt;
|-&lt;br /&gt;
|{{Mirrorlink|}}&lt;br /&gt;
|Misc. download mirror&lt;br /&gt;
|-&lt;br /&gt;
|{{Loot|}}&lt;br /&gt;
|Loot list&lt;br /&gt;
|-&lt;br /&gt;
|{{Walkthrough|}}&lt;br /&gt;
|Walkthrough&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mission Type Key&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Bear in mind that individual FMs can have combinations of two or three of these overarching genres/themes, rather than just a single one.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; border=1 style=&amp;quot;border-collapse: collapse;&amp;quot; cellspacing=0 cellpadding=2&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Bank Jobs&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission involving a heist or other thievy action inside a local banking institution. Will often contain the outsmarting of security systems, gaining access to a safe and cracking its code.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Castle/Fortress&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission involving a heist or other thievy action inside or outside a castle or fortress, either one that serves as a military garrison, or as someone&#039;s private residence. Frequently involves background characters from the nobility. &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;City Missions&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission that is set mainly in the streets and public spaces of an urban area, such as a town or city. Though the player is most often out on the streets, these missions tend to also involve some degree of exploration and infiltration into private and public buildings alike.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Church/Cathedral&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission set in and around religious buildings and institutions, such as churches, monasteries, cathedrals, church bureaus, church workshops, etc. Frequently involves [[Clergy/Builder_Characters|ecclesiastical characters]] from the TDM setting&#039;s [[Builders|Builder Church]].&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Experimental&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission which involves some creative design or gameplay element that isn&#039;t typical for the vast majority of TDM missions. FMs set in highly unusual environments, or with a puzzle-like nature, can fit under this label.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Inn/Tavern&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission set mostly in and around an inn, tavern or shanty. Usually focused on robbing some rich guest, acquiring an item stored by the guest at the inn, or gathering intel at the inn.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Jail/Prison&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission involving an escape from a prison (by the imprisoned player character), infiltration of a prison to gather intel from inmates or help an inmate escape the prison, etc.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Lost Civilizations&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission focused on the exploration of ancient ruins, whether above ground or in deep subterranean caverns. Can often overlap with the &#039;&#039;Horror&#039;&#039; or &#039;&#039;Tombs, Catacombs &amp;amp; Crypts&#039;&#039; type of mission, but not necessarily.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Horror&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission with an overt horror theme. Depending on the author&#039;s approach and intentions, it can focus on psychological horror, or horror based on danger from supernatural threats, or varying combinations of both. &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Mansion/Estate&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission involving a heist or other thievy action inside someone&#039;s private residence (a fancy house, a manor house) and its surrounding grounds. Frequently involves background characters from the nobility or the more affluent townsmen or citizens. &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Museum Heists&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission focusing on a heist in a museum, art gallery or other institution storing priceless artefacts, artworks, gemstone collections, etc.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Outdoor/Forest&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission set in a mostly natural outdoor environment, involving the exploration of forested areas and woodland. Can overlap with other Outdoor style missions.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Outdoor/Caves&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission set in a mostly natural outdoor environment, but involving the exploration of natural caves and caverns. Can overlap with other Outdoor style missions.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Outdoor/Daylight&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission set in a mostly outdoor environment, during the daytime (in contrast to the usual TDM missions, set at night time or early dusk). Can overlap with other Outdoor style missions.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Outdoor/Pagan&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission set in a mostly natural outdoor environment, involving some presence of [[Pagans|pagan tribes]] from TDM&#039;s setting. Perhaps even pagan camps and settlements. Can overlap with other Outdoor style missions.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Pirate&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission involving the presence of characters engaging in piracy or smuggling, and various related piratical themes. Can overlap with the &#039;&#039;Ship&#039;&#039; type of mission, but not necessarily.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Platforming/Jumping&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission focusing on testing the player&#039;s movement, jumping and climbing skills, with or without equipment. &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Sewers&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission which involves the use of the city sewers or others sewers in some way, often as a stealthy means of entry or escape.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Ship&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission which takes place aboard a vessel, in port or at sea, or otherwise involves ships to a great degree. Can overlap with the &#039;&#039;Pirate&#039;&#039; type of mission, but not necessarily.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Thieves&#039; Highway / Rooftop&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission involving a lot of movement and travel on the rooftops of a town or city (colloquially &amp;quot;The Thieves&#039; Highway&amp;quot;).&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Tombs, Catacombs &amp;amp; Crypts&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission involving the exploration of old tombs, catacombs and crypts, often for the purposes of treasure and artefact hunting. Can often overlap with the &#039;&#039;Horror&#039;&#039; or &#039;&#039;Lost Civilizations&#039;&#039; type of mission, but not necessarily.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Train&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission which takes place aboard a train, either one already underway or one waiting at a station. Given TDM&#039;s setting, most likely a train with an early steam locomotive.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Training&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission label that is unique to the official Training Mission, an open-ended tutorial mission where players can practice and test their TDM gameplay skills at their own leisure, and to the smaller blackjacking-trainer FM, which focuses on practicing NPC knockouts by the player.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Warehouse&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission which takes place in and around a warehouse, usually in some industrial area of a city, or at a port. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Contest Key&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
GCC 09: [[Fan_Mission_Contests#2009 Grand Christmas Contest|Grand Christmas Contest 2009]]&lt;br /&gt;
&lt;br /&gt;
SVC 10: [[Fan_Mission_Contests#2010 Summer Vertical Contest|Summer Vertical Contest 2010]]&lt;br /&gt;
&lt;br /&gt;
CSC 11: [[Fan_Mission_Contests#2011 Community Seasons Contest|Community Seasons Contest 2011]]&lt;br /&gt;
&lt;br /&gt;
HSC 11: [[Fan_Mission_Contests#2011 Halloween Speed-build Contest|Halloween Speed-Build Contest 2011]]&lt;br /&gt;
&lt;br /&gt;
CBC 12: [[Fan_Mission_Contests#2012 Community Beginner Contest|Community Beginner Contest 2012]]&lt;br /&gt;
&lt;br /&gt;
CUC 13: [[Fan_Mission_Contests#2013 Community Unusual Contest|Community Unusual Contest 2013]]&lt;br /&gt;
&lt;br /&gt;
HSC 14: [[Fan_Mission_Contests#2014 Halloween Speed-build Contest|Halloween Speed-Build Contest 2014]]&lt;br /&gt;
&lt;br /&gt;
HSC 15: [[Fan_Mission_Contests#2015 Halloween Speed-build Contest|Halloween Speed-Build Contest 2015]]&lt;br /&gt;
&lt;br /&gt;
CCC 22: [[Fan_Mission_Contests#2022_Christmas_Connection_Contest|Christmas Connections Contest 2022]]&lt;br /&gt;
&lt;br /&gt;
15YR:   [[Fan_Mission_Contests#2024_15th_Anniversary_Contest|15th Anniversary Contest (2024)]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Editing this table ==&lt;br /&gt;
* Please only include playable missions that are fully released, not those currently in development or testing.  Tutorials, demos, prefabs, etc. should be listed elsewhere. &lt;br /&gt;
* A mission title may be listed in plain text as a record of release, or preferably a link to an information page or primary direct download.&lt;br /&gt;
* List by release date descending (newest at the top).&lt;br /&gt;
* If a fan mission only has a single mirror/host please consider adding additional mirrors.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://wiki.thedarkmod.com/index.php?title=Category:Official_FMs Fan missions] - An index of fan mission pages on this wiki.&lt;br /&gt;
* [https://wiki.thedarkmod.com/index.php?title=Category:Official_missions_(OMs) Official missions] - An index of Oficial mission pages on this wiki.&lt;br /&gt;
* [[Fan Mission Series]] - An overview of all currently known series or campaigns of fan missions interconnected by their stories or characters. There are already plenty in TDM, and have been since its early days as an expandable game.&lt;br /&gt;
* [[Mission recommendation discussions]] - An overview of past discussions on what FMs the community recommends to players looking for various challenges (difficulty, size, theme, setting, objectives, etc.).&lt;br /&gt;
* [[Fan Mission Contests]] - An overview of past and present contests in Fan Mission creation, by members of the TDM community.&lt;br /&gt;
* [[Upcoming Fan Missions]] - An overview of Fan Missions in development or tentatively planned. (&#039;&#039;Do not&#039;&#039; edit the overview.)&lt;br /&gt;
* [https://tdmdb.com/missions tdmdb.com] An external TDM mission database, which data is partly coming from this wiki page.&lt;br /&gt;
&lt;br /&gt;
{{general|sort=Fan Missions}}&lt;br /&gt;
[[Category:Fan Missions]]&lt;br /&gt;
[[Category:Official FMs| ]]&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=Fan_Missions_for_The_Dark_Mod&amp;diff=33993</id>
		<title>Fan Missions for The Dark Mod</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=Fan_Missions_for_The_Dark_Mod&amp;diff=33993"/>
		<updated>2025-06-26T21:24:01Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: /* Missions table */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{infobox|&amp;lt;center&amp;gt;&amp;lt;br&amp;gt;&#039;&#039;&#039;Big Ugly Disclaimer:&#039;&#039;&#039;&amp;lt;/center&amp;gt;&amp;lt;br&amp;gt; &#039;&#039;&#039;The Dark Mod&#039;&#039;&#039; team does not necessarily support or endorse content listed here, and only hosts missions listed on the &#039;&#039;&#039;[https://www.thedarkmod.com/ official TDM website]&#039;&#039;&#039;. This is a community maintained list, and an ongoing work in progress.  Most of the mirror links in this list are dead or are for missions that are not 2.0 compliant. Mission entries which are suspected to violate copyright must be text-only, and cannot contain links.  Report and/or remove links found in violation of this rule.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* For details about editing this table, see [[#Editing_this_table|below]].&lt;br /&gt;
* For details about how to install Fan Missions please visit: [[Installing and Running Fan Missions]]&lt;br /&gt;
* To sort by a different criterion, click the [[Image:Sort none.gif]] icon in the relevant column header.&lt;br /&gt;
&lt;br /&gt;
== Missions table ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=1 style=&amp;quot;border-collapse: collapse;&amp;quot; cellspacing=0 cellpadding=2 width=100%&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;19%&amp;quot;|Fan Mission Title&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;14%&amp;quot;|Author(s)&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;4%&amp;quot; class=&amp;quot;unsortable&amp;quot;|Links&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;5%&amp;quot;|First Release&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;2%&amp;quot;|Size (MB)&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;2%&amp;quot;|EFX Reverb&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;3%&amp;quot;|Translation Pack&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;2%&amp;quot;|Sub - Titles&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;10%&amp;quot;|Series&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;16%&amp;quot;|Mission Type&lt;br /&gt;
!bgcolor=#d0d0e0 width=&amp;quot;6%&amp;quot;|Spiders and Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--INSERT NEW MISSIONS BELOW THIS LINE--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|crookshank|The Last Night on Crookshank Lane}}&lt;br /&gt;
|Jnon&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22947-fan-mission-the-last-night-on-crookshank-lane/}}&lt;br /&gt;
|2025-06-19&lt;br /&gt;
|77&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|&lt;br /&gt;
|City Missions, Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|lt4|The Lieutenant 4: A Reciprocal Gambit}}&lt;br /&gt;
|Frost_Salamander&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22945-fan-mission-the-lieutenant-4-a-reciprocal-gambit-by-frost_salamander/}}&lt;br /&gt;
|2025-06-18&lt;br /&gt;
|62&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#The_Lieutenant_series|The Lieutenant]]&lt;br /&gt;
|City Missions, Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|footloose|Footloose museum theft}}&lt;br /&gt;
|Goblin of Akenash&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22654-fan-mission-footloose-museum-theft}}&lt;br /&gt;
|2025-02-05&lt;br /&gt;
|1.2&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Museum Heist&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|scrooge|A Winter&#039;s Tale}} &amp;lt;br&amp;gt;(v1.4, 2025/01/13)&lt;br /&gt;
|Bikerdude&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22609-fan-mission-a-winters-tale-by-bikerdude-2024-11-30/}}&lt;br /&gt;
|2024-11-30&lt;br /&gt;
|140&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|[https://www.ttlg.com/forums/showthread.php?t=152747 TTLG Speed Jam]&lt;br /&gt;
|City Missions, Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|lastoffering|The Last Offering}} &lt;br /&gt;
|Sotha&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22594-fan-mission-the-last-offering-2024-11-16/}}&lt;br /&gt;
|2024-11-16&lt;br /&gt;
|2.7&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Tombs, Catacombs &amp;amp; Crypts&lt;br /&gt;
|Horror Themes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|gem_of_souls|Gem of Souls}} &lt;br /&gt;
|MirceaKitsune&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22583-fan-mission-gem-of-souls-31-10-2024/}}&lt;br /&gt;
|2024-10-31&lt;br /&gt;
|10&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Church/Cathedral&lt;br /&gt;
|Undead, Horror Themes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|pinnacle|Pinnacle: A Test of Talents}} &amp;lt;br&amp;gt;(v2.0, 2024/10/24)&lt;br /&gt;
|UncertainTitle, TwilitWitch&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22569-fan-mission-pinnacle-a-test-of-talents-hbd-tdm-15th-anniversary-contest/}}&lt;br /&gt;
|2024-10-17&lt;br /&gt;
|5&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2024_15th_Anniversary_Contest|15YR]] Contest&lt;br /&gt;
|City Missions, Experimental&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|gemcutter|Volta 3: Gemcutter}}&lt;br /&gt;
|Kingsal&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22566-fan-mission-volta-iii-gemcutter-15th-anniversary-contest}}&lt;br /&gt;
|2024-10-16&lt;br /&gt;
|852&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Contests#2024_15th_Anniversary_Contest|15YR]] &#039;&#039;&#039;WINNER&#039;&#039;&#039;&amp;lt;br&amp;gt; [[Fan_Mission_Series#Volta series|Volta]]&lt;br /&gt;
|Ship, City Missions, Moorish Architecture&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|yoft|You Only Fly Thrice}}&lt;br /&gt;
|DeTeEff&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22565-fan-mission-you-only-fly-thrice-by-deteeff-20241016/}}&lt;br /&gt;
|2024-10-16&lt;br /&gt;
|45&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Contests#2024_15th_Anniversary_Contest|15YR]] Contest&lt;br /&gt;
|Ship &amp;lt;br&amp;gt; Experimental&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|wizt|The Wizard&#039;s Treasure}}&lt;br /&gt;
|thebigh&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22558-fan-mission-the-wizards-treasure-15th-anniversary-contest/}}&lt;br /&gt;
|2024-10-13&lt;br /&gt;
|7&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2024_15th_Anniversary_Contest|15YR]] Contest&lt;br /&gt;
|Castle/Fortress&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|imperial_sword|The Imperial Sword}} &amp;lt;br&amp;gt;(v1.3.6, 2024/10/11)&lt;br /&gt;
|Bikerdude&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22541-fan-mission-the-imperial-sword-15yr-anniversary-contest/}}&lt;br /&gt;
|2024-09-21&lt;br /&gt;
|419&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Contests#2024_15th_Anniversary_Contest|15YR]] Contest&lt;br /&gt;
|City Missions, Mansion/Estate&lt;br /&gt;
|Spiders&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|hhbam|Hidden Hands: Blood &amp;amp; Metal}} &amp;lt;br&amp;gt;(v4.0, 2024/11/29)&lt;br /&gt;
|JackFarmer&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22532-hidden-hands-blood-metal-campaign-01092024/}}&lt;br /&gt;
|2024-09-02&lt;br /&gt;
|1200&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|Hidden Hands 5&lt;br /&gt;
|&lt;br /&gt;
|Spiders, Undead, Horror Themes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|faffairs|The Lieutenant 3: Foreign Affairs}} &amp;lt;br&amp;gt;(v4.0, 2024/11/08)&lt;br /&gt;
|Frost_Salamander&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22452-fan-mission-the-lieutenant-3-foreign-affairs-by-frost_salamander/}}&lt;br /&gt;
|2024-05-19&lt;br /&gt;
|501&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|The Lieutenant&lt;br /&gt;
|City Missions, Moorish Architecture&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|lookwhosmoving|Moving Day 2: Look Who&#039;s Moving Now}}&lt;br /&gt;
|wellingtoncrab&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22416-sad-news-%F0%9F%98%A2-but-fm-release/}}&lt;br /&gt;
|2024-04-01&lt;br /&gt;
|337&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|April Fools, &amp;lt;br&amp;gt;PTB (unofficial) &lt;br /&gt;
|Mansion/Estate, City Missions&lt;br /&gt;
|Humor&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|sneakandsouffle|Sneak &amp;amp; Soufflé}}&lt;br /&gt;
|Goldwell&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22417-fm-release-sneak-and-souffl%C3%A9-april-fools-mission-01042024/}}&lt;br /&gt;
|2024-04-01&lt;br /&gt;
|95&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|April Fools&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|Humor&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|moongate|Moongate Ruckus}}&lt;br /&gt;
|Kingsal&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22419-having-trouble-sleeping-is-the-%F0%9F%8C%95moon-too-bright-the-%F0%9F%8E%BBmusic-too-loud-ive-got-an-fm-for-you/}}&lt;br /&gt;
|2024-04-01&lt;br /&gt;
|218&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|April Fools&lt;br /&gt;
|City Missions&lt;br /&gt;
|Humor&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|prize|Eye on the Prize}}&lt;br /&gt;
|Amadeus&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22418-fan-mission-eye-on-the-prize-412024/}}&lt;br /&gt;
|2024-04-01&lt;br /&gt;
|278&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|April Fools&lt;br /&gt;
|City Missions&lt;br /&gt;
|Humor&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|oldman|The Terrible Old Man}} &amp;lt;br&amp;gt;(v2.0, 2024/12/30)&lt;br /&gt;
|Ansome&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22393-fan-mission-the-terrible-old-man/}}&lt;br /&gt;
|2024-03-10&lt;br /&gt;
|11.7&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
| &lt;br /&gt;
|Mansion/Estate, City Missions&lt;br /&gt;
|Horror Themes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|sk_cooks|By The Cookbook}}&amp;lt;br&amp;gt;(v4.0 2024/07/08)&lt;br /&gt;
|Skaruts&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22357-fan-mission-by-the-cookbook/}}&lt;br /&gt;
|2024-02-02&lt;br /&gt;
|8.4&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
| &lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|altham|A Night in Altham}}&lt;br /&gt;
|joebarnin&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22296-fan-mission-a-night-in-altham/}}&lt;br /&gt;
|2023-12-05&lt;br /&gt;
|441&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
| &lt;br /&gt;
|City Missions &amp;lt;br&amp;gt; Outdoor/Forest&lt;br /&gt;
|Spiders, Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|spiderfinch|The Spider And The Finch}}&amp;lt;br&amp;gt;(v1.5.0 2024/07/11)&lt;br /&gt;
|GrodenVR&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22275-fan-mission-the-spider-and-the-finch-by-grodenglaive/}}&lt;br /&gt;
|2023-11-18&lt;br /&gt;
|45&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
| &lt;br /&gt;
|Mansion/Estate &amp;lt;br&amp;gt; Outdoor/Forest&lt;br /&gt;
|Spiders&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|threepenny|The Threepenny Revue}}&lt;br /&gt;
|Jnon&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22229-fan-mission-the-threepenny-revue/}}&lt;br /&gt;
|2023-10-01&lt;br /&gt;
|21&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
| &lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|delisle|The House of deLisle}}&lt;br /&gt;
|thebigh&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22227-fan-mission-the-house-of-delisle/}}&lt;br /&gt;
|2023-10-01&lt;br /&gt;
|38&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|Duncan Lynch &lt;br /&gt;
|Mansion/Estate, City Missions&lt;br /&gt;
|Spiders, Undead, Body Horror&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|bridge2far|A Bridge Too Far}}&lt;br /&gt;
|cugzkani&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/22220-fan-mission-a-bridge-too-far/}}&lt;br /&gt;
|2023-09-22&lt;br /&gt;
|6&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|highex|The Lieutenant 2: High Expectations}}&lt;br /&gt;
|Frost_Salamander&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/21837-fan-mission-the-lieutenant-2-high-expectations-by-frost_salamander-20230424}}&lt;br /&gt;
|2023-04-24&lt;br /&gt;
|34.9&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|The Lieutenant&lt;br /&gt;
|Mansion/Estate, City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|seeking|Seeking Lady Leicester}}&lt;br /&gt;
|Grayman, Bikerdude, Amadeus, Dragofer, WellingtonCrab&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/21799-fan-mission-seeking-lady-leicester-by-grayman-3212023/}}&lt;br /&gt;
|2023-03-22&lt;br /&gt;
|493&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|&lt;br /&gt;
|Mansion/Estate, City Missions&lt;br /&gt;
|Undead, Horror Themes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|inplainsight|The Lieutenant 1: In Plain Sight}}&lt;br /&gt;
|Frost_Salamander&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/21549-fan-mission-in-plain-sight-by-frost_salamander-20220807}}&lt;br /&gt;
|2022-08-07&lt;br /&gt;
|14&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|The Lieutenant&lt;br /&gt;
|City Missions&lt;br /&gt;
|Undead, Horror Themes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|at1_lucy|The Adventures of Thomas: Lucy&#039;s Quest}}&lt;br /&gt;
|gg&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/21453-the-adventures-of-thomas-lucys-quest-2022-06-08}}&lt;br /&gt;
|2022-06-08&lt;br /&gt;
|484&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|Thomas 1&lt;br /&gt;
|City Missions&lt;br /&gt;
|Spiders, Undead, Horror Themes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|wwtw|Who Watches the Watcher?}}&lt;br /&gt;
|DeTeEff (Fieldmedic)&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/21434-fan-mission-who-watches-the-watcher-v10-by-deteeff-20220528}}&lt;br /&gt;
|2022-05-28&lt;br /&gt;
|86&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|&lt;br /&gt;
|City Missions&lt;br /&gt;
|Horror Themes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|sw1_ebound|Sam Wilson 1: Eastbound}}&lt;br /&gt;
|jonri&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/21402-fan-mission-sam-wilson-1-eastbound-2022-05-07}}&lt;br /&gt;
|2022-05-07&lt;br /&gt;
|18&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|Sam Wilson&lt;br /&gt;
|Train &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|byanyothername|By Any Other Name}}&amp;lt;br&amp;gt;(v3 2024/06/05)&lt;br /&gt;
|joebarnin&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/21331-fan-mission-by-any-other-name-by-joebarnin-2022310/}}&lt;br /&gt;
|2022-03-10&lt;br /&gt;
|124&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|&lt;br /&gt;
|Mansion/Estate, City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|housecall|A House Call}}&lt;br /&gt;
|thebigh&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/21329-a-house-call-by-thebigh-mar-10-2022/}}&lt;br /&gt;
|2022-03-10&lt;br /&gt;
|10&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|Duncan Lynch&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|nobleaffairs|Noble Affairs}}&lt;br /&gt;
|Goldwell&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/21318-fan-mission-noble-affairs-by-goldwell-20220222-tdm-210-required/}}&lt;br /&gt;
|2022-02-22&lt;br /&gt;
|488&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|City Missions&lt;br /&gt;
|Horror Themes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|iris|Iris}} &amp;lt;br&amp;gt;(v1.3, 2024/05/26)&lt;br /&gt;
|Wellingtoncrab&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/21289-fan-mission-iris-by-wellingtoncrab-tdm-210-required-20220213/}}&lt;br /&gt;
|2022-02-13&lt;br /&gt;
|549&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2022_Christmas_Connection_Contest|CCC 22]] - &#039;&#039;&#039;WINNER&#039;&#039;&#039;&lt;br /&gt;
|City Missions&lt;br /&gt;
|Horror Themes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|ptb0|PtB 0: Moving Day}}&lt;br /&gt;
|Jedi_Wannabe&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/21283-fan-mission-paying-the-bills-0-moving-day-tdm-210-beta-only-202228/}}&lt;br /&gt;
|2022-02-08&lt;br /&gt;
|160&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2022_Christmas_Connection_Contest|CCC 22]], PTB&lt;br /&gt;
|Mansion/Estate &amp;lt;br&amp;gt; Outdoor/Forest&lt;br /&gt;
|Spiders&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|written|Written in Stone}}&lt;br /&gt;
|Bikerdude, Amadeus, Dragofer&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/21265-written-in-stone-beta-210-only-20220128/}}&lt;br /&gt;
|2022-01-28&lt;br /&gt;
|338&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Contests#2022_Christmas_Connection_Contest|CCC 22]], Elixir&lt;br /&gt;
|City Missions&lt;br /&gt;
|Undead, Horror Themes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|hazard|Hazard Pay}}&lt;br /&gt;
|Kingsal&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/21264-fan-mission-hazard-pay-by-kingsal-tdm-beta-210-only/}}&lt;br /&gt;
|2022-01-28&lt;br /&gt;
|404&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Contests#2022_Christmas_Connection_Contest|CCC 22]]&lt;br /&gt;
|Tombs, Catacombs &amp;amp; Crypts&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|newford|Down and Out on Newford Road}}&lt;br /&gt;
|thebigh&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/21260-down-and-out-on-newford-road-by-thebigh-jan-26-2022-christmas-connections-contest-entry/}}&lt;br /&gt;
|2022-01-26&lt;br /&gt;
|17&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2022_Christmas_Connection_Contest|CCC 22]]&lt;br /&gt;
|Church/Cathedral, City Missions&lt;br /&gt;
|Undead, Horror Themes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|deadeye|Deadeye}}&lt;br /&gt;
|Sotha&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/21225-fan-mission-deadeye-by-sotha-20211231/}}&lt;br /&gt;
|2021-12-31&lt;br /&gt;
|1.8&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|black_mage|The Black Mage}}&lt;br /&gt;
|Grayman, JackFarmer&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/21215-the-black-mage/}}&lt;br /&gt;
|2021-12-23&lt;br /&gt;
|410&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
| &lt;br /&gt;
|Castle/Fortress &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;In memoriam of Grayman {{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20933-we-have-lost-a-member-of-the-tdm-development-team/}}&lt;br /&gt;
|Horror Themes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|ch1_eaton|Cole Hurst 1: Eaton}}&lt;br /&gt;
|bwyan&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/21170-fan-mission-cole-hurst-1-eaton-by-bwyan-20211202/}}&lt;br /&gt;
|2021-12-01&lt;br /&gt;
|41&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|Cole Hurst&lt;br /&gt;
|Mansion/Estate, City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|cos0_thief|Chronicles of Skulduggery 0: To Catch a Thief}}&lt;br /&gt;
|Bienie&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/21156-fan-mission-chronicles-of-skulduggery-0-to-catch-a-thief-20211120/}}&lt;br /&gt;
|2021-11-20&lt;br /&gt;
|15&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Chronicles_of_Skulduggery_series|Chronicles of Skulduggery]]&lt;br /&gt;
|City Missions, Mansion/Estate&lt;br /&gt;
|Horror Themes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|away0|Away 0 - Stolen Heart}}&lt;br /&gt;
|Geep,_Atti_&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20964-away-0-stolen-heart-by-geep-_atti_-20210924/}}&lt;br /&gt;
|2021-11-12&lt;br /&gt;
|189.5&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Away_series|Away]]&lt;br /&gt;
|Inn/Tavern, Jail/Prison, &amp;lt;br&amp;gt; Museum Heist, Bank Job&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|hhta|Hidden Hands: Anomaly}}&lt;br /&gt;
|JackFarmer&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20909-hidden-hands-the-anomaly}}&lt;br /&gt;
|2021-05-01&lt;br /&gt;
|532.7&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Hidden_Hands_series|Hidden Hands]]&lt;br /&gt;
|Castle/Fortress &amp;lt;br&amp;gt; Outdoor/Forest&lt;br /&gt;
|Undead, Spiders&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|hareinthesnare|The Hare in the Snare: Part 1}}&lt;br /&gt;
|Frost_Salamander,Kerry000&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20883-fan-mission-the-hare-in-the-snare-part-1}}&lt;br /&gt;
|2021-04-09&lt;br /&gt;
|102.3&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|Hare in the Snare 1&lt;br /&gt;
|City Missions &amp;lt;br&amp;gt; Inn/Tavern&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|blackgrove|Blackgrove Manor}}&amp;lt;br&amp;gt;(v1.02, 2021/04/24)&lt;br /&gt;
|ddaazzaa&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20844-fan-mission-blackgrove-manor-by-ddaazzaa-20210314/}}&lt;br /&gt;
|2021-03-14&lt;br /&gt;
|24.7&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|Undead, Horror Themes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|scroll|Scroll of Remembrance}}&lt;br /&gt;
|MirceaKitsune&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20613-fan-mission-scroll-of-remembrance-by-mirceakitsune-03112020/}}&lt;br /&gt;
|2020-11-03&lt;br /&gt;
|16.2&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|Undead, Horror Themes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|factoryheist|The Factory Heist}}&lt;br /&gt;
|thebigh&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20562-the-factory-heist-12-sep-2020/}}&lt;br /&gt;
|2020-09-12&lt;br /&gt;
|1.1&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|Duncan Lynch&lt;br /&gt;
|Warehouse&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|nowandthen|Now and Then}}&amp;lt;br&amp;gt;(v3.0. 2025/03/19) &lt;br /&gt;
|joebarnin&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20560-fan-mission-now-and-then-by-joebarnin-20200908/}}&lt;br /&gt;
|2020-09-08&lt;br /&gt;
|236.1&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|&lt;br /&gt;
|Museum Heists&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|hhtlc|Hidden Hands: The Lost Citadel}}&lt;br /&gt;
|JackFarmer&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20490-hidden-hands-the-lost-citadel-23072020}}&lt;br /&gt;
|2020-07-23&lt;br /&gt;
|444&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Hidden_Hands_series|Hidden Hands]]&lt;br /&gt;
|Castle/Fortress&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|cos3_sacricide|Chronicles of Skulduggery 3: Sacricide}}&lt;br /&gt;
|Bienie&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20483-fan-mission-chronicles-of-skulduggery-3-sacricide-20200718/}}&lt;br /&gt;
|2020-07-18&lt;br /&gt;
|97.8&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Chronicles_of_Skulduggery_series|Chronicles of Skulduggery]]&lt;br /&gt;
|City Missions&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|painterswife|The Painter&#039;s Wife}}&amp;lt;br&amp;gt;(v1.4, 2025/06/10)&lt;br /&gt;
|Fractured Glass Company&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20436-fan-mission-the-painter’s-wife-by-fractured-glass-company-20200701/}}&lt;br /&gt;
|2020-07-01&lt;br /&gt;
|205&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|&lt;br /&gt;
|City Missions&lt;br /&gt;
|Spiders, Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|anol|A Night Of Loot: One Man&#039;s Treasure}}&lt;br /&gt;
|OGDA&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20416-fan-mission-a-night-of-loot-one-mans-treasure/}}&lt;br /&gt;
|2020-06-13&lt;br /&gt;
|3.9&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Shop/House&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|good|A Good Neighbor}}&lt;br /&gt;
|Amadeus&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20292-fan-mission-a-good-neighbor/}}&lt;br /&gt;
|2020-03-08&lt;br /&gt;
|54.6&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|City Missions &amp;lt;br&amp;gt; Inn/Tavern&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|airpocket|Away 1 - Air Pocket}}&lt;br /&gt;
|Geep&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20252-fan-mission-away-1-air-pocket-by-geep-20200207}}&lt;br /&gt;
|2020-02-06&lt;br /&gt;
|15.3&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Away_series|Away]]&lt;br /&gt;
|Pirate &amp;lt;br&amp;gt; Ship&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|snowed_inn|Snowed Inn}}&lt;br /&gt;
|Goldwell and Kingsal&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20201-fan-mission-snowed-inn-by-goldwell-kingsal-20191225}}&lt;br /&gt;
|2019-12-25&lt;br /&gt;
|382&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|indangerofjudgment|In Danger of Judgment}}&lt;br /&gt;
|krrg&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20155-fan-mission-in-danger-of-judgment-20191115/}}&lt;br /&gt;
|2019-11-15&lt;br /&gt;
|11.9&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|lhl|Langhorne Lodge}}&lt;br /&gt;
|Bienie&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20143-fan-mission-langhorne-lodge/}}&lt;br /&gt;
|2019-10-30&lt;br /&gt;
|8.2&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|Undead &amp;lt;br&amp;gt; Ghosts &amp;lt;br&amp;gt; Spiders&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|heartstmattis|The Heart of Saint Mattis}}&lt;br /&gt;
|joebarnin&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20091-fan-mission-the-heart-of-saint-mattis-by-joebarnin-20190910/}}&lt;br /&gt;
|2019-09-10&lt;br /&gt;
|58.7&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Church/Cathedral&lt;br /&gt;
|Spiders, Undead, Horror Themes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|peril|Perilous Refuge}}&lt;br /&gt;
|Dragofer, Crucible Team&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20090-fan-mission-perilous-refuge-by-dragofer-20190910/}}&lt;br /&gt;
|2019-09-10&lt;br /&gt;
|34.7&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Ship, City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|hhvf|Hidden Hands: Vitalic Fever}}&amp;lt;br&amp;gt;(v6, 2025/04/20)&lt;br /&gt;
|JackFarmer&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20051-hidden-hands-vitalic-fever-20072019}}&lt;br /&gt;
|2019-07-20&lt;br /&gt;
|269&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Series#Hidden_Hands_series|Hidden Hands]]&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|Spiders, Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|cos2_precpos|Chronicles of Skulduggery 2: A Precarious Position}}&lt;br /&gt;
|Bienie&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/19975-fan-mission-chronicles-of-skulduggery-2-a-precarious-position-20190504/}}&lt;br /&gt;
|2019-05-04&lt;br /&gt;
|14.5&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Chronicles_of_Skulduggery_series|Chronicles of Skulduggery]]&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|ws5_commerce|William Steele 5: Commerce Bank}}&lt;br /&gt;
|grayman&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/19957-fan-mission-commerce-bank-by-grayman-2019410/}}&lt;br /&gt;
|2019-04-10&lt;br /&gt;
|30&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Series#William_Steele_series|William Steele]]&lt;br /&gt;
|Bank Jobs&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|marshofrahena|Marsh of Rahena}}&lt;br /&gt;
|ERH+&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/19951-fan-mission-marsh-of-rahena-by-erh-201945}}&lt;br /&gt;
|2019-04-05&lt;br /&gt;
|60.3&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Castle/Fortress, Horror &lt;br /&gt;
|Spiders, Undead, Horror Themes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|northdale2|Shadows of Northdale ACT 2}}&lt;br /&gt;
|Goldwell&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/19936-fan-mission-shadows-of-northdale-act-ii-by-goldwell-20190320/}} [https://www.youtube.com/watch?v=KO-eIOX9nqI Briefing]&lt;br /&gt;
|2019-03-20&lt;br /&gt;
|417&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Shadows of Northdale series|Shadows of Northdale]]&lt;br /&gt;
|City Missions&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|cleanneighbourhood|Cleaning Up the Neighbourhood}}&lt;br /&gt;
|some1stoleit and Bikerdude&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/19898-fan-mission-cleaning-up-the-neighbourhood-by-some1stoleitbikerdude-20190219/}}&lt;br /&gt;
|2019-02-18&lt;br /&gt;
|34.3&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|hhi|Hidden Hands: Initiation}}&lt;br /&gt;
|JackFarmer&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/19796-hidden-hands-initiation-27122018/}}&lt;br /&gt;
|2018-12-27&lt;br /&gt;
|92.5&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Hidden_Hands_series|Hidden Hands]]&lt;br /&gt;
|Mansion/Estate &amp;lt;br&amp;gt;Ship&lt;br /&gt;
|Spiders, Extra-natural entities&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|reluctantbenefaction|The Night of Reluctant Benefaction}}&lt;br /&gt;
|Bienie&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/19787-fan-mission-the-night-of-reluctant-benefaction/}}&lt;br /&gt;
|2018-12-24&lt;br /&gt;
|11.9&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|mercwarehouse|Mission of Mercy}}&lt;br /&gt;
|joebarnin&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/19642-fan-mission-mission-of-mercy-by-joebarnin-20180914/}}&lt;br /&gt;
|2018-09-14&lt;br /&gt;
|10.1&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Warehouse&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|ws4_warrens|William Steele 4: The Warrens}}&lt;br /&gt;
|grayman&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/19618-fan-mission-the-warrens-by-grayman-201891/}}&lt;br /&gt;
|2018-09-01&lt;br /&gt;
|53&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Series#William_Steele_series|William Steele]]&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|braeden_church|Braeden Church}}&lt;br /&gt;
|grayman&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/19533-fan-mission-braeden-church-by-grayman-201871/}}&lt;br /&gt;
|2018-07-01&lt;br /&gt;
|24&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|pearlsnswine|Chronicles of Skulduggery: Pearls and Swine}}&lt;br /&gt;
|Bienie&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/19439-chronicles-of-skulduggery-pearls-and-swine/}}&lt;br /&gt;
|2018-05-25&lt;br /&gt;
|23&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Series#Chronicles_of_Skulduggery_series|Chronicles of Skulduggery]]&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|northdale1|Shadows of Northdale ACT I}}&lt;br /&gt;
|Goldwell&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/19368-fan-mission-shadows-of-northdale-act-i-by-goldwell-20180323/}} [https://www.youtube.com/watch?v=p4nP3lYd6wg Briefing]&lt;br /&gt;
|2018-03-23&lt;br /&gt;
|295&lt;br /&gt;
|Custom &amp;lt;br&amp;gt;(not EFX)&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Shadows of Northdale series|Shadows of Northdale]]&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|sirt|Sir Taffsalot&#039;s Sword}}&lt;br /&gt;
|grayman&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/19361-fan-mission-sir-taffsalots-sword-by-grayman-2018318/}}&lt;br /&gt;
|2018-03-17&lt;br /&gt;
|11.3&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Mansion/Estate &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; In memoriam of Gary (Sir Taffsalot) {{Forumlink|https://forums.thedarkmod.com/topic/19306-sad-news-we-lost-one-of-our-own-sir-taffsalot/}}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|arena|The Arena}}&lt;br /&gt;
|ERH+&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/19350-fan-mission-the-arena-by-erh/}}&lt;br /&gt;
|2018-03-12&lt;br /&gt;
|3&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Arena Deathmatch &amp;lt;br&amp;gt; Experimental&lt;br /&gt;
|Spiders, Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|elixir|The Elixir}}&lt;br /&gt;
|Bikerdude and Obsttorte&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/19323-fan-mission-the-elixir-by-b1k3rdude-obsttorte-17022018/}} [https://www.youtube.com/watch?v=KfElYZs-FaE Briefing]&lt;br /&gt;
|2018-02-17&lt;br /&gt;
|112&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|Elixir&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|cauldron_v2_2|Volta 2: Cauldron of the Gods}}&lt;br /&gt;
|Kingsal&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/19207-volta-ii-cauldron-of-the-gods/}} [https://www.youtube.com/watch?v=SRRCRVFHruc Briefing]&lt;br /&gt;
|2017-11-30&lt;br /&gt;
|252&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Volta series|Volta]]&lt;br /&gt;
|Lost Civilizations&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|itb|In the Black}}&lt;br /&gt;
|VanishedOne&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/19185-fan-mission-in-the-black/}}&lt;br /&gt;
|2017-11-18&lt;br /&gt;
|103&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|ac1|Accountant 1: Thieves and Heirs}}&lt;br /&gt;
|Goldwell&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/19164-fan-mission-the-accountant-1-thieves-and-heirs-by-goldwell-20171108}} [https://www.youtube.com/watch?v=Tk9DtOT4kjc Briefing]&lt;br /&gt;
|2017-11-08&lt;br /&gt;
|247&lt;br /&gt;
|No&lt;br /&gt;
|Yes &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;(Darkfate version is better for Russian players, fully dubbed audio)&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#The Accountant series|The Accountant]]&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|Spiders&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|kotm|King of the Mountain}}&lt;br /&gt;
|Spoonman&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/19105-fan-mission-king-of-the-mountain-by-spoonman-18092017/}}&lt;br /&gt;
|2017-09-18&lt;br /&gt;
|8.07&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Jail/Prison&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|briarwood_manor|Briarwood Manor}}&lt;br /&gt;
|NeonStyle&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/18980-fan-mission-briarwood-manor-by-neonsstyle-first-mission-2017-07-11}} [https://www.youtube.com/watch?v=BZnSuLVatYM Trailer] [https://www.youtube.com/watch?v=CPlu8fEzyGM Briefing]&lt;br /&gt;
|2017-07-11&lt;br /&gt;
|90&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|Spider&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|matterofhours|A Matter of Hours}}&lt;br /&gt;
|Springheel&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/18809-fan-mission-a-matter-of-hours-by-springheel-2842017/}}&lt;br /&gt;
|2017-04-28&lt;br /&gt;
|13&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan Mission Series#Corbin series|Corbin]]&lt;br /&gt;
|Warehouse&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|ravine|The Ravine}}&lt;br /&gt;
|Spoonman&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/18782-fan-mission-the-ravine-by-spoonman-17042017/}}&lt;br /&gt;
|2017-04-17&lt;br /&gt;
|30.6&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Outdoor/Pagan&lt;br /&gt;
|Spiders&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|bakery_job|The Bakery Job}}&lt;br /&gt;
|Sotha&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/18707-fan-mission-the-bakery-job-by-sotha-20170309/}}&lt;br /&gt;
|2017-03-09&lt;br /&gt;
|2&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM||Mission 1: A New Job}}&lt;br /&gt;
|Springheel&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/18647-tdm-205-official-introductory-missions/}}&lt;br /&gt;
|2017-03-14&lt;br /&gt;
|13.8&lt;br /&gt;
|Yes&lt;br /&gt;
|&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Series#Introduction_campaign|Official Campaign]]&lt;br /&gt;
|City Missions &amp;lt;br&amp;gt; Inn/Tavern&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|coercion|Coercion}}&lt;br /&gt;
|Sotha&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/18405-fan-mission-coercion-by-sotha-20160927}}&lt;br /&gt;
|2016-09-27&lt;br /&gt;
|10&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|river|Down by the Riverside}}&lt;br /&gt;
|Dragofer&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/18402-fan-mission-down-by-the-riverside-by-dragofer-20160925}}&lt;br /&gt;
|2016-09-25&lt;br /&gt;
|56&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Series#Of Brambles and Thorns series|Of Brambles and Thorns]]&lt;br /&gt;
|Mansion/Estate &amp;lt;br&amp;gt; Ship &amp;lt;br&amp;gt; Horror&lt;br /&gt;
|Horror themes, Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|penny3|Penny Dreadful 3: Erasing the Trail}}&lt;br /&gt;
|Melan and Bikerdude&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/18200-fan-mission-penny-dreadful-3-by-melan-and-bikerdude-20160710}}&lt;br /&gt;
|2016-07-09&lt;br /&gt;
|200&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Penny Dreadful series|Penny Dreadful]]&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|volta1_3|Volta 1: Volta and the Stone}}&lt;br /&gt;
|Kingsal&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/18087-fan-mission-volta-and-the-stone-by-kingsal-05262016}}&lt;br /&gt;
|2016-05-27&lt;br /&gt;
|102&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Volta series|Volta]]&lt;br /&gt;
|Mansion/Estate &amp;lt;br&amp;gt; City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|fever|Full Moon Fever}}&amp;lt;br&amp;gt;(v2.0 2018/02/21)&lt;br /&gt;
|Spoonman&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/18066-fan-mission-full-moon-fever-by-spoonman-14052016/}}&lt;br /&gt;
|2016-05-14&lt;br /&gt;
|21&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|kingofdiamonds|King of Diamonds}}&lt;br /&gt;
|Spooks&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/18064-fan-mission-the-king-of-diamonds-by-spooks-20160513}}&lt;br /&gt;
|2016-05-13&lt;br /&gt;
|26.3&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|City Missions&lt;br /&gt;
|Occult themes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|ac2|Accountant 2: New in Town}}&lt;br /&gt;
|Goldwell&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/18054-fan-mission-the-accountant-2-new-in-town-by-goldwell-20160509/}} [https://www.youtube.com/watch?v=xeuIO_GcYjQ Briefing] &amp;lt;br&amp;gt; [https://www.youtube.com/watch?v=w6e_SJ0_JOM Gameplay trailer] &lt;br /&gt;
|2016-05-08&lt;br /&gt;
|358&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#The Accountant series|The Accountant]]&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|cutpurse|The Smiling Cutpurse}}&lt;br /&gt;
|Airship Ballet&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/17850-fan-mission-the-smiling-cutpurse-by-airship-ballet-20160325/}}&lt;br /&gt;
|2016-03-25&lt;br /&gt;
|87&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Mansion/Estate &amp;lt;br&amp;gt; Sewers&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|mother|Mother Rose}}&lt;br /&gt;
|grayman&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/17653-fan-mission-mother-rose-by-grayman-20160101/#entry385131/}}&lt;br /&gt;
|2016-01-01&lt;br /&gt;
|10&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|Ghost&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|bcd|Behind Closed Doors}}&lt;br /&gt;
|Bikerdude and the Crucible Team&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/17627-crucible-of-omens-behind-closed-doors-by-bikerdude-the-crucible-team-updated-18122015/}}&lt;br /&gt;
|2015-12-19&lt;br /&gt;
|359&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Crucible of Omens series|Crucible of Omens]]&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|theratst|The Rats Triumphant}}&lt;br /&gt;
|Melan&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/17512-fan-mission-the-rats-triumphant-by-melan-20151031/}}&lt;br /&gt;
|2015-10-31&lt;br /&gt;
|11&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2015_Halloween_Speed-build_Contest|HSC 15]] &#039;&#039;&#039;WINNER&#039;&#039;&#039;&lt;br /&gt;
|City Missions&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|deaddrunk|Dead Drunk}}&lt;br /&gt;
|Stumpy&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/17511-fan-mission-dead-drunk-by-stumpy-20151030/}}&lt;br /&gt;
|2015-10-30&lt;br /&gt;
|4&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2015_Halloween_Speed-build_Contest|HSC 15]]&lt;br /&gt;
|Tombs, Catacombs &amp;amp; Crypts&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|remorse|Thief&#039;s Remorse}}&lt;br /&gt;
|Airship Ballet&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/17509-fan-mission-thiefs-remorse-by-airship-ballet-20151030/}}&lt;br /&gt;
|2015-10-30&lt;br /&gt;
|42&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2015_Halloween_Speed-build_Contest|HSC 15]]&lt;br /&gt;
|Tombs, Catacombs &amp;amp; Crypts&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|springcleaning|Spring Cleaning}}&lt;br /&gt;
|Goldwell&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/17510-fan-mission-spring-cleaning-by-goldwell-20151030/}} [https://www.youtube.com/watch?v=JzPpmDK9Fxw Briefing] &lt;br /&gt;
|2015-10-30&lt;br /&gt;
|45&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Contests#2015_Halloween_Speed-build_Contest|HSC 15]]&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|Spiders, Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|the_golden_skull|The Golden Skull}}&lt;br /&gt;
|Sotha&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/17497-fan-mission-the-golden-skull-by-sotha-20151024/}}&lt;br /&gt;
|2015-10-25&lt;br /&gt;
|7&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2015_Halloween_Speed-build_Contest|HSC 15]]&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|ahouseoflockedsecrets|A House of Locked Secrets}}&lt;br /&gt;
|Moonbo&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/17163-fan-mission-a-house-of-locked-secrets-by-gelo-moonbo-fleisher-20150528/}} [https://www.youtube.com/watch?v=f5NuTJEZ8VE Trailer]&lt;br /&gt;
|2015-05-29&lt;br /&gt;
|195&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Series#Shadowcursed series|Shadowcursed]]&lt;br /&gt;
|Church/Cathedral &amp;lt;br&amp;gt; Mansion/Estate&lt;br /&gt;
|Horror themes, &amp;lt;br&amp;gt; Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|u2_flock|Ulysses 2: Protecting the Flock}}&lt;br /&gt;
|Sotha&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/17162-fan-mission-ulysses-2-protecting-the-flock-by-sotha-20150528/}}&lt;br /&gt;
|2015-05-28&lt;br /&gt;
|102&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Ulysses series|Ulysses]]&lt;br /&gt;
|Church/Cathedral&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|talbot|Sir Talbot&#039;s Collateral}}&amp;lt;br&amp;gt;(v6 2024/01/29)&lt;br /&gt;
|Baal and Bikerdude&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/17093-fan-mission-sir-talbots-collateral-by-baal-bikerdude-15042015/}} [https://www.youtube.com/watch?v=e3rdZfq4Omc Trailer]&lt;br /&gt;
|2015-04-15&lt;br /&gt;
|60&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Series#Sir Talbot series|Sir Talbot]]&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|vfat3|Vengeance for a Thief Part 3}}&lt;br /&gt;
|Sir Taffsalot&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/16953-the-complete-vengeance-for-a-thief-campaign/}}&lt;br /&gt;
|2015-02-16&lt;br /&gt;
|25&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Vengeance for a Thief series|VFAT]]&lt;br /&gt;
|Church/Cathedral&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|bathhouse|Lord Edgar&#039;s Bathhouse}}&lt;br /&gt;
|Goldwell&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/topic/16828-fan-mission-lord-edgars-bathhouse-by-goldwell-27122014/}} [https://www.youtube.com/watch?v=vYSZY7VzFEo Briefing]&lt;br /&gt;
|2014-12-27&lt;br /&gt;
|71&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|Lord Edgar&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|quinn|Quinn Co.}}&amp;lt;br&amp;gt;(Made into a campaign, 2015/02/04)&amp;lt;br&amp;gt;{{TDM-FM|m_lbb|La Banque Bienveillante}} {{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/21488-fan-mission-quinn-co-part-1-la-banque-bienveillante-remake-by-airship-ballet}}&amp;lt;br&amp;gt;(Re-Release, 2022/06/24)&lt;br /&gt;
|Airship Ballet&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/topic/16912-fan-mission-chase-mercantile-by-airship-ballet-20150204/}}&lt;br /&gt;
|2014-11-22&lt;br /&gt;
|111&lt;br /&gt;
|No&lt;br /&gt;
|Yes : Quinn&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;No : Part 1&lt;br /&gt;
|No&lt;br /&gt;
|Quinn Co.&lt;br /&gt;
|Bank Jobs&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|exhumed|Exhumed}}&lt;br /&gt;
|Airship Ballet and Kyyrma&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/topic/16658-fan-mission-exhumed-by-kyyrma-and-airship-ballet-20141104/}}&lt;br /&gt;
|2014-11-04&lt;br /&gt;
|24&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2014 Halloween Speed-build Contest|HSC 14]]&lt;br /&gt;
|Church/Cathedral &amp;lt;br&amp;gt; Horror&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|briarwood|Briarwood Cathedral}}&lt;br /&gt;
|buck28&lt;br /&gt;
|{{Mirrorlink|https://www64.zippyshare.com/v/25705489/file.html}}{{Forumlink|1=https://forums.thedarkmod.com/topic/16644-briarwood-cathedral/}}&lt;br /&gt;
|2014-10-29&lt;br /&gt;
|7&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Master thief Corso series|Corso]] &amp;lt;br&amp;gt; [[Fan_Mission_Contests#2014 Halloween Speed-build Contest|HSC 14]] &#039;&#039;&#039;WINNER&#039;&#039;&#039;&lt;br /&gt;
|Church/Cathedral &amp;lt;br&amp;gt; Horror&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|onesteptoofar|One Step Too Far}}&amp;lt;br&amp;gt;(v2.0 2023/06/18)&lt;br /&gt;
|Dragofer&lt;br /&gt;
|{{Mirrorlink|https://www.dropbox.com/s/sfxcap1gfdzf318/onesteptoofar.pk4}}{{Forumlink|1=https://forums.thedarkmod.com/topic/16457-fan-mission-one-step-too-far-by-dragofer-20140804/}}&lt;br /&gt;
|2014-08-04&lt;br /&gt;
|9&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Series#Of Brambles and Thorns series|Of Brambles and Thorns]]&lt;br /&gt;
|Pirate &amp;lt;br&amp;gt; Ship&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|lockner|Lockner Manor}}&lt;br /&gt;
|buck28&lt;br /&gt;
|{{Mirrorlink|https://www76.zippyshare.com/v/44108372/file.html}}{{Forumlink|1=https://forums.thedarkmod.com/topic/16452-new-mission-lockner-manor/}}&lt;br /&gt;
|2014-08-02&lt;br /&gt;
|6&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Master thief Corso series|Corso]]&lt;br /&gt;
|Mansion/Estate &amp;lt;br&amp;gt; Inn/Tavern&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|ulysses_genesis|Ulysses: Genesis}}&lt;br /&gt;
|Sotha&lt;br /&gt;
|{{Mirrorlink|https://www4.zippyshare.com/v/67195436/file.html}}{{Forumlink|1=https://forums.thedarkmod.com/topic/16428-fan-mission-ulysses-genesis-by-sotha-20140724/}}&lt;br /&gt;
|2014-07-24&lt;br /&gt;
|98&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Series#Ulysses series|Ulysses]]&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|Horror theme?&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|penny2_1|Penny Dreadful 2: All the way up}}&lt;br /&gt;
|Melan and Bikerdude&lt;br /&gt;
|{{Mirrorlink|https://mega.co.nz/#!EwoXHZYZ!tE_sKon2h4AWtWPNt9QS3FQClwmXdimhfjIMPcpCQ34}}{{Forumlink|1=https://forums.thedarkmod.com/topic/16387-fan-mission-penny-dreadful-2-by-melan-and-bikerdude-2014078/}} [https://www.youtube.com/watch?v=WmPfCfbeWvg Trailer]&lt;br /&gt;
|2014-07-08&lt;br /&gt;
|102&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Penny Dreadful series|Penny Dreadful]]&lt;br /&gt;
|Thieves&#039; Highway / Rooftop&lt;br /&gt;
|Spiders&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|poets|Poets and Peasants}}&lt;br /&gt;
|Digi&lt;br /&gt;
|{{Mirrorlink|https://drive.google.com/file/d/0B1HHvWAgbWGfTkI0SXFubXZucXM}}{{Forumlink|1=https://forums.thedarkmod.com/topic/16373-fan-mission-poets-peasants-by-digi-62914}}&lt;br /&gt;
|2014-06-29&lt;br /&gt;
|1&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|follow|A Reputation to Uphold}}&lt;br /&gt;
|Springheel&lt;br /&gt;
|{{Mirrorlink|https://www.mindplaces.com/follow.pk4}}{{Forumlink|1=https://forums.thedarkmod.com/topic/16204-fan-mission-a-reputation-to-uphold-by-springheel/}}&lt;br /&gt;
|2014-04-18&lt;br /&gt;
|25.5&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Corbin series|Corbin]]&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|breakingout|Breaking Out the Fence}}&lt;br /&gt;
|Kyyrma&lt;br /&gt;
|{{Mirrorlink|https://dl.dropboxusercontent.com/u/17706561/breakingout.pk4}}{{Forumlink|1=https://forums.thedarkmod.com/topic/16091-fan-mission-breaking-out-the-fence-17032014-by-kyyrma/}}&lt;br /&gt;
|2014-03-17&lt;br /&gt;
|11.6&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#In A Time of Need series|In A Time of Need]]&lt;br /&gt;
|City Missions &amp;lt;br&amp;gt; Jail/Prison&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|innbiz|Inn Business}}&amp;lt;br&amp;gt;(v.1.48, 2014/03/08)&lt;br /&gt;
|RJFerret&lt;br /&gt;
|{{Mirrorlink|https://drive.google.com/file/d/0B81T2ZXLPqhTYWVaODRiSExGeGc}} {{Forumlink|1=https://forums.thedarkmod.com/topic/16018-fan-mission-inn-business-by-rjferret-20140303/}}&lt;br /&gt;
|2014-03-03&lt;br /&gt;
|6&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Inn/Tavern &amp;lt;br&amp;gt; City Streets&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|ws3_cleighmoor|William Steele 3: Cleighmoor}}&lt;br /&gt;
|grayman&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/16011-fan-mission-cleighmoor-by-grayman-201431/#entry338349/}}&lt;br /&gt;
|2014-03-01&lt;br /&gt;
|38&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Series#William Steele series|William Steele]]&lt;br /&gt;
|Sewers &amp;lt;br&amp;gt; Jail/Prison&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|ws2_homeagain|William Steele 2: Home Again}}&lt;br /&gt;
|grayman&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/15919-fan-mission-home-again-by-grayman-2014212/page__fromsearch__1}}&lt;br /&gt;
|2014-02-12&lt;br /&gt;
|26&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Series#William Steele series|William Steele]]&lt;br /&gt;
|Thieves&#039; Highway / Rooftop&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|gatehouse1_3|The Gatehouse}}&lt;br /&gt;
|Bikerdude Goldchocobo&lt;br /&gt;
|{{Mirrorlink|https://www.southquarter.com/tdm/fms/gatehouse.pk4}} {{Forumlink|https://forums.thedarkmod.com/topic/15844-fan-mission-the-gatehouse-by-bikerdude-goldchocobo-20140114/}} [https://www.youtube.com/watch?v=kcIe2Ucojqw Briefing]&lt;br /&gt;
|2014-01-29&lt;br /&gt;
|100&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|Remake of Evilartist&#039;s Doom 3 mod&lt;br /&gt;
|Castle/Fortress&lt;br /&gt;
|Ghosts&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|windowopportunity|Window of Opportunity}}&amp;lt;br&amp;gt;(v.1.43, 2014/01/01)&lt;br /&gt;
|RJFerret&lt;br /&gt;
|{{Mirrorlink|https://drive.google.com/file/d/0B81T2ZXLPqhTWTMzQXZtMVFBSG8}} {{Forumlink|1=https://forums.thedarkmod.com/topic/15727-fan-mission-window-of-opportunity-by-rjferret-20140101/}}&lt;br /&gt;
|2014-01-01&lt;br /&gt;
|7&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Outdoor/Caves&lt;br /&gt;
|Spiders (not in short mode)&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|timeofneed|In A Time Of Need}}&lt;br /&gt;
|kyyrma&lt;br /&gt;
| {{Mirrorlink|https://www.mediafire.com/download/a97or40t1xrybh3/timeofneed_v1.zip}} {{Forumlink|https://forums.thedarkmod.com/topic/15354-fan-mission-in-a-time-of-need-by-kyyrma-20131112/}}&lt;br /&gt;
|2013-11-12&lt;br /&gt;
|5.6&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#In A Time of Need series|In A Time of Need]]&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|requiem|Requiem}}&lt;br /&gt;
|Moonbo&lt;br /&gt;
| {{Mirrorlink|https://www.mediafire.com/download/l6o3vvj9y78hu89/requiem.pk4}} {{Forumlink|https://forums.thedarkmod.com/topic/15101-fan-mission-requiem-by-gelo-moonbo-fleisher-2013106/}}&lt;br /&gt;
|2013-10-08&lt;br /&gt;
|107.3&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Series#Shadowcursed series|Shadowcursed]]&lt;br /&gt;
|Lost Civilizations &amp;lt;br&amp;gt; Church/Cathedral&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|vfat2|Vengeance for a Thief Part 2}}&lt;br /&gt;
|Sir Taffsalot&lt;br /&gt;
| {{Mirrorlink|https://dl.dropboxusercontent.com/u/17706561/vfat2.pk4}} {{Forumlink|https://forums.thedarkmod.com/topic/15051-fan-mission-vengeance-for-a-thief-part-2-by-sir-taffsalot-06092013/}}&lt;br /&gt;
|2013-09-06&lt;br /&gt;
|22&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Vengeance for a Thief series|VFAT]] &amp;lt;br&amp;gt; [[Fan_Mission_Contests#2013 Community Unusual Contest|CUC 13]]&lt;br /&gt;
|Museum Heists&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|lordsnlegacy|Lords and Legacy}}&lt;br /&gt;
|Kvorning&lt;br /&gt;
| {{Mirrorlink|https://dl.dropboxusercontent.com/u/17706561/lordsnlegacy.pk4}} {{Forumlink|https://forums.thedarkmod.com/topic/15016-fan-mission-lords-legacy-by-kvorning-20130830/}}&lt;br /&gt;
|2013-08-30&lt;br /&gt;
|45&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Thieves&#039; Highway / Rooftop&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|naog|Not An Ordinary Guest}}&lt;br /&gt;
|DeTeEff (Fieldmedic)&lt;br /&gt;
| {{Mirrorlink|https://dl.dropboxusercontent.com/u/17706561/naog.pk4}} {{Forumlink|https://forums.thedarkmod.com/topic/14965-fan-mission-not-an-ordinary-guest-by-fieldmedic-20130801/}}&lt;br /&gt;
|2013-08-01&lt;br /&gt;
|79.6&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2013 Community Unusual Contest|CUC 13]]&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|penny1_1|Penny Dreadful: Grail of Regrets}}&lt;br /&gt;
|Melan&lt;br /&gt;
| {{Forumlink|https://forums.thedarkmod.com/topic/14952-fan-mission-penny-dreadful-by-melan-20130728/}}&lt;br /&gt;
|2013-07-27&lt;br /&gt;
|74&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Penny Dreadful series|Penny Dreadful]]&lt;br /&gt;
|Horror &lt;br /&gt;
|Spiders, Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|solarescape1|Solar Escape 1}}&lt;br /&gt;
|Tr00pertj&lt;br /&gt;
| {{Forumlink|https://forums.thedarkmod.com/topic/14944-fan-mission-solar-escape-1/}}&lt;br /&gt;
|2013-07-22&lt;br /&gt;
|6&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Mansion/Estate &amp;lt;br&amp;gt; Sewers&lt;br /&gt;
|Spiders, Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|lich_queens_demise|The Lich Queen&#039;s Demise}}&lt;br /&gt;
|Sotha&lt;br /&gt;
|{{Mirrorlink|https://dl.dropboxusercontent.com/u/17706561/lich_queens_demise.pk4}} {{Forumlink|https://forums.thedarkmod.com/topic/14826-fan-mission-the-lich-queens-demise-by-sotha-20130520/unread/}}&lt;br /&gt;
|2013-05-20&lt;br /&gt;
|97.6&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Thomas Porter series|Thomas Porter]] &amp;lt;br&amp;gt; [[Fan_Mission_Contests#2013 Community Unusual Contest|CUC 13]] &#039;&#039;&#039;WINNER&#039;&#039;&#039;&lt;br /&gt;
|Horror&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|oldhabits2|Old Habits Rebuild}}&lt;br /&gt;
|Obsttorte&lt;br /&gt;
|{{Mirrorlink|https://www.mediafire.com/download/u2gwucibh17c45a/oldhabits.pk4}} {{Forumlink|https://forums.thedarkmod.com/topic/14827-fan-mission-old-habits-rebuild-by-obsttorte-20052013/}}&lt;br /&gt;
|2013-05-20&lt;br /&gt;
|28.6&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|builders_blocks|The Builder&#039;s Blocks}}&lt;br /&gt;
|Jesps&lt;br /&gt;
|{{Mirrorlink|https://dl.dropboxusercontent.com/u/17706561/builders_blocks.pk4}} {{Forumlink|https://forums.thedarkmod.com/topic/14592-unusual-gameplay-contest-fm-the-builders-blocks-by-jesps/}}&lt;br /&gt;
|2013-03-18&lt;br /&gt;
|2.85&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2013 Community Unusual Contest|CUC 13]]&lt;br /&gt;
|Experimental&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|broads|The Builder Roads}}&lt;br /&gt;
|Obsttorte&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/14449-fan-mission-the-builder-roads-by-obsttorte-20130119/}}&lt;br /&gt;
|2013-01-19&lt;br /&gt;
|2.3&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Church/Experimental &lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|ws1_north|William Steele 1: In the North}}&lt;br /&gt;
|grayman&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/topic/14214-fan-mission-in-the-north-by-grayman-20121020/}}&lt;br /&gt;
|2012-10-20&lt;br /&gt;
|39.8&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Series#William Steele series|William Steele]]&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|oldhabits1|Old Habits}}&lt;br /&gt;
|Obsttorte&lt;br /&gt;
|{{Mirrorlink|https://www.mediafire.com/download.php?andes2xnsonssfj}} {{Forumlink|https://forums.thedarkmod.com/topic/14206-fan-mission-old-habits-by-obsttorte-20121019/}}&lt;br /&gt;
|2012-10-19&lt;br /&gt;
|12.8&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|deceptiveshadowsv1_2|Deceptive Shadows}}&lt;br /&gt;
|ShadowHide&lt;br /&gt;
|{{Mirrorlink|https://www.sendspace.com/file/jzr9s7}} {{Forumlink|https://forums.thedarkmod.com/topic/14103-fan-mission-deceptive-shadows-by-shadowhide-16sep12/}}&lt;br /&gt;
|2012-09-16&lt;br /&gt;
|22.4&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|&lt;br /&gt;
|Outdoor/Pagan&lt;br /&gt;
|Spiders, Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|vfat1|Vengeance for a Thief: Part 1}}&lt;br /&gt;
|Sir Taffsalot &lt;br /&gt;
|{{Mirrorlink|https://dl.dropbox.com/u/17706561/VFAT1.pk4}} {{Forumlink|https://forums.thedarkmod.com/topic/14068-fan-mission-vengeance-for-a-thief-part-1-by-sir-taffsalot-06092012/}}&lt;br /&gt;
|2012-09-06&lt;br /&gt;
|20.9&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Vengeance for a Thief series|VFAT]]&lt;br /&gt;
|Jail/Prison&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|phrase_book|The Phrase Book}}&lt;br /&gt;
|Sotha&lt;br /&gt;
|{{Mirrorlink|https://dl.dropbox.com/u/17706561/phrase_book.pk4}} {{Forumlink|https://forums.thedarkmod.com/topic/13799-fan-mission-the-phrase-book-by-sotha-20120512/}}&lt;br /&gt;
|2012-05-11&lt;br /&gt;
|24&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Thomas Porter series|Thomas Porter]]&lt;br /&gt;
|Thieves&#039; Highway / Rooftop&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|remembrance|In Remembrance of Him}}&lt;br /&gt;
|RPGista&lt;br /&gt;
|{{Mirrorlink|https://dl.dropbox.com/u/17706561/remembrance.pk4}} {{Forumlink|https://forums.thedarkmod.com/topic/13749-fan-mission-in-remembrance-of-him-by-rpgista/}}&lt;br /&gt;
|2012-04-22&lt;br /&gt;
|27.6&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2012_Community_Beginner_Contest|CBC 12]]&lt;br /&gt;
|City Missions&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|rightful|Rightful Property}}&lt;br /&gt;
|jysk&lt;br /&gt;
|{{Mirrorlink|https://dl.dropbox.com/u/17706561/rightful1.1b.pk4}} {{Forumlink|https://forums.thedarkmod.com/topic/13711-fan-mission-rightful-property-by-jysk-20120413/}}&lt;br /&gt;
|2012-04-12&lt;br /&gt;
|22.5&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2012_Community_Beginner_Contest|CBC 12]]&lt;br /&gt;
|Bank Jobs&lt;br /&gt;
|Spiders&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|sneak_destroy|Sneak &amp;amp; Destroy}}&amp;lt;br&amp;gt;(v2 EFX, 2022/11/16)&lt;br /&gt;
|SeriousToni&lt;br /&gt;
|{{Mirrorlink|https://minus.com/mVcf61n3G/1f}} {{Forumlink|https://forums.thedarkmod.com/topic/13706-fan-mission-sneak-destroy-by-serioustoni-beginners-contest-2012/}}&lt;br /&gt;
|2012-04-11&lt;br /&gt;
|147&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Contests#2012_Community_Beginner_Contest|CBC 12]] &#039;&#039;&#039;WINNER&#039;&#039;&#039;&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|houseoftheo|House of Theo}}&lt;br /&gt;
|Theothesnopp&lt;br /&gt;
|{{Mirrorlink|https://www.gamefront.com/files/21053391/houseoftheo__2__2.pk4}} {{Forumlink|https://forums.thedarkmod.com/topic/13242-fan-mission-house-of-theo/}}&lt;br /&gt;
|2011-12-04&lt;br /&gt;
|6.2&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Castle/Fortress&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|crystalgrave2_1|Crystal Grave}} &amp;lt;br&amp;gt;(v.2.0, 2013/02/09)&lt;br /&gt;
|ERH+ Bikerdude&lt;br /&gt;
|{{Mirrorlink|https://dl.dropbox.com/u/17706561/crystalgravev2.pk4}} {{Forumlink|https://forums.thedarkmod.com/topic/14510-fan-mission-crystal-grave-v2-by-erh-and-bikerdude-20130209/unread/}}&lt;br /&gt;
|2011-11-15&lt;br /&gt;
|12.4&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Horror&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|claw1_31|Dragon&#039;s Claw}}&amp;lt;br&amp;gt;(v1.31, 2020/11/02)&lt;br /&gt;
|Bikerdude, Flanders (map assets)&lt;br /&gt;
|{{Mirrorlink|https://www.gamefront.com/files/20948800/claw.pk4}} {{Forumlink|https://forums.thedarkmod.com/topic/13181-fan-missiondragons-claw-by-b1k3rdude-31102011/}}&lt;br /&gt;
|2011-10-31&lt;br /&gt;
|98&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2011_Halloween_Speed-build_Contest|HSC 11]]&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|antr|A Night to Remember}}&amp;lt;br&amp;gt;(v2.1, 2023/05/04)&lt;br /&gt;
|DeTeEff (Fieldmedic)&lt;br /&gt;
|New &amp;amp;rarr; {{Forumlink|https://forums.thedarkmod.com/topic/19452-a-night-to-remember/}} &amp;lt;br&amp;gt;Old &amp;amp;rarr; {{Forumlink|https://forums.thedarkmod.com/topic/13177-fan-mission-a-night-to-remember-by-fieldmedic-20111030/}}&lt;br /&gt;
|2011-10-31&lt;br /&gt;
|33&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2011_Halloween_Speed-build_Contest|HSC 11]]&lt;br /&gt;
|Mansion/Estate &amp;lt;br&amp;gt; Horror&lt;br /&gt;
|Ghosts&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|thecreeps|The Creeps}}&lt;br /&gt;
|Mortem Desino&lt;br /&gt;
|{{Mirrorlink|https://www.gamefront.com/files/20939925/thecreeps.pk4}} {{Forumlink|https://forums.thedarkmod.com/topic/13176-fan-mission-creeps-the-20111030-by-mortem-desino/}}&lt;br /&gt;
|2011-10-30&lt;br /&gt;
|61&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2011_Halloween_Speed-build_Contest|HSC 11]]&lt;br /&gt;
|Horror&lt;br /&gt;
|Ghosts&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|blackbog|House in Blackbog Hollow}}&lt;br /&gt;
|Stumpy&lt;br /&gt;
|{{Mirrorlink|https://www.bookofages.co.uk/doom3/mods/blackbog.html}} {{Forumlink|https://forums.thedarkmod.com/topic/13172-fan-mission-house-in-blackbog-hollow-by-stumpy-20111028/}}&lt;br /&gt;
|2011-10-28&lt;br /&gt;
|12&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2011_Halloween_Speed-build_Contest|HSC 11]]&lt;br /&gt;
|Horror&lt;br /&gt;
|Spiders, Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|lstl|Let Sleeping Thieves Lie}}&lt;br /&gt;
|Sir Taffsalot, Bikerdude&lt;br /&gt;
|{{Mirrorlink|https://www.mediafire.com/?zkd1jn4lpwgioh9}} {{Forumlink|https://forums.thedarkmod.com/index.php?/topic/13153-let-sleeping-thieves-lie-by-sir-taffsalot-bikerdude-20102011/}}&lt;br /&gt;
|2011-10-20&lt;br /&gt;
|13&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Tombs, Catacombs &amp;amp; Crypts&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|samhain|Samhain Night}}&amp;lt;br&amp;gt;(v3.3, 2020/03/02)&lt;br /&gt;
|PranQster&lt;br /&gt;
|{{Mirrorlink|https://jdchoate.mcn.org/games/darkmod/samhain.zip}} {{Forumlink|https://forums.thedarkmod.com/index.php?/topic/13127-fan-mission-samhain-night-on-bone-hill-by-pranqster-20111009/}}&lt;br /&gt;
|2011-10-09&lt;br /&gt;
|4.8&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2011_Halloween_Speed-build_Contest|HSC 11]]&lt;br /&gt;
|Horror&lt;br /&gt;
|Spiders, Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|score_to_settle|A Score to Settle}}&lt;br /&gt;
|Springheel&lt;br /&gt;
|{{Mirrorlink|https://www.mediafire.com/?f3o7hm4h4ew7o3l}} {{Forumlink|https://forums.thedarkmod.com/index.php?/topic/12894-fan-mission-%2348-a-score-to-settle-by-springheel-20110701/}}&lt;br /&gt;
|2011-07-01&lt;br /&gt;
|135&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Corbin series|Corbin]]&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|siegeshop|Siege Shop}}&amp;lt;br&amp;gt;(v5.0 2020/09/07)&lt;br /&gt;
|PranQster and Lowenz&lt;br /&gt;
|{{Mirrorlink|https://jdchoate.mcn.org/games/darkmod/siegeshop.pk4}} {{Forumlink|https://forums.thedarkmod.com/index.php?/topic/12874-fan-mission-the-siege-shop-by-pranqster-20110626/}} {{Forumlink|https://forums.thedarkmod.com/index.php?/topic/20559-the-siege-shop-07092020/}}&lt;br /&gt;
|2011-06-26&lt;br /&gt;
|32.2&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Castle/Fortress&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|alberic3|Alberic&#039;s Curse}}&amp;lt;br&amp;gt;( v3.11 EFX, 2024/02/23 )&lt;br /&gt;
|Bikerdude&lt;br /&gt;
|{{Mirrorlink|https://www.gamefront.com/files/20459738/alberic.pk4}} {{Forumlink|https://forums.thedarkmod.com/index.php?/topic/12850-fan-mission-alberics-curse-by-b1k3rdude-20062011/}}&lt;br /&gt;
|2011-06-20&lt;br /&gt;
|51.6&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2011_Community Seasons Contest|CSC 11]] &#039;&#039;&#039;WINNER&#039;&#039;&#039; &amp;lt;br&amp;gt; T2 FM homage&lt;br /&gt;
|Church/Cathedral&lt;br /&gt;
|Spiders, Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|reap|Reap As You Sow}}&lt;br /&gt;
|DeTeEff (Fieldmedic)&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/12849-fan-mission-reap-as-you-sow-by-fieldmedic-20110619/}}&lt;br /&gt;
|2011-06-19&lt;br /&gt;
|52&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2011_Community Seasons Contest|CSC 11]]&lt;br /&gt;
|Outdoor/Daylight &amp;lt;br&amp;gt; Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|rake_off|Rake Off}}&lt;br /&gt;
|Jesps&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/12846-fm-rake-off-19-06-2011/}}&lt;br /&gt;
|2011-06-19&lt;br /&gt;
|8&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Selis Woderose series|Selis Woderose]] &amp;lt;br&amp;gt; [[Fan_Mission_Contests#2011_Community Seasons Contest|CSC 11]] &lt;br /&gt;
|Castle/Fortress&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|winterharvest|Winter Harvest}}&amp;lt;br&amp;gt;(v2.5 2024/12/15 with Bikerdude)&lt;br /&gt;
|ShadowHide&lt;br /&gt;
|{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/12690-seasons-contest-entry-winter-harvest-by-shadowhide/}} &#039;&#039;&#039;[https://forums.thedarkmod.com/index.php?/topic/12952-fm-winter-harvest-v2-by-bikerdude-and-shadowhide/ V2]&#039;&#039;&#039;&lt;br /&gt;
|2011-05-08&lt;br /&gt;
|20.2&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Contests#2011_Community Seasons Contest|CSC 11]]&lt;br /&gt;
|Outdoor/Pagan&lt;br /&gt;
|Spiders&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|fauchard1_1|Fiasco at Fauchard Street}}&lt;br /&gt;
|Melan&lt;br /&gt;
|{{Mirrorlink|https://rapidshare.com/files/460141132/fauchard.pk4}} {{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/12655-fan-mission-fiasco-at-fauchard-street-by-melan-20110501//}}&lt;br /&gt;
|2011-05-01&lt;br /&gt;
|62&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Sir Talbot series|Sir Talbot]]&lt;br /&gt;
|Thieves&#039; Highway / Rooftop&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|mandrasola|Mandrasola}}&lt;br /&gt;
|Sotha&lt;br /&gt;
|{{Mirrorlink|https://www.mediafire.com/?2ox2nbhh796ne71}} {{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/12575-fan-mission-mandrasola-by-sotha-20110410/}}&lt;br /&gt;
|2011-04-10&lt;br /&gt;
|10&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Series#Thomas Porter series|Thomas Porter]] &amp;lt;br&amp;gt; [[Fan_Mission_Contests#2011_Community Seasons Contest|CSC 11]]&lt;br /&gt;
|City Missions&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left| Q4 Conversion: Yan&#039;s Test&lt;br /&gt;
|Bikerdude&lt;br /&gt;
|{{Mirrorlink|https://www.moddb.com/mods/the-dark-mod/addons/yantdm1-1}} {{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/12506-fan-mission-q4-map-conversion-yantdm1-280311/}}&lt;br /&gt;
|2011-03-28&lt;br /&gt;
|28&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|transaction|The Transaction}}&lt;br /&gt;
|Sotha&lt;br /&gt;
|{{Mirrorlink|https://www.mediafire.com/?ux7mx79wumnvcb6}} {{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/12408-fan-mission-the-transaction-by-sotha-20110304/}}&lt;br /&gt;
|2011-03-04&lt;br /&gt;
|10&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Thomas Porter series|Thomas Porter]]&lt;br /&gt;
|City Missions&lt;br /&gt;
|Horror Themes, Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|lockdown1_2_1|Lockdown}}&lt;br /&gt;
|GameDevGoro Bikerdude Fidcal&lt;br /&gt;
|{{Mirrorlink|https://www.fidcal.com/darkuser/missions/lockdown1_2_1.pk4}} {{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/12064-fm-lockdown-part-1-by-gamedevgoro-and-bikerdude-20101224/}}&lt;br /&gt;
|2010-12-25&lt;br /&gt;
|3&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Lockdown 1&lt;br /&gt;
|City Missions&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|flakebridge|Flakebridge Monastery}}&lt;br /&gt;
|Jesps&lt;br /&gt;
|{{Mirrorlink|https://www.file-upload.net/download-3024426/flakebridge.pk4.html}} {{Mirrorlink|https://rapidshare.com/files/434997519/flakebridge.pk4}} {{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/11991-fm-flakebridge-monastery-by-jesps/}}&lt;br /&gt;
|2010-12-05&lt;br /&gt;
|16&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Selis Woderose series|Selis Woderose]]&lt;br /&gt;
|Church/Cathedral&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|knighton_manor|Knighton Manor, The}}&lt;br /&gt;
|Sotha&lt;br /&gt;
|{{Mirrorlink|https://www.mediafire.com/?xrdts3j4t2qxre2}}  {{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/11898-fan-mission-the-knighton-manor-by-sotha-20101109/page__view__getnewpost}}&lt;br /&gt;
|2010-11-09&lt;br /&gt;
|21&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Thomas Porter series|Thomas Porter]]&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|cathedral|St Albans Cathedral}}&amp;lt;br&amp;gt;(v2.0 2014/06/11)&lt;br /&gt;
|Bikerdude&lt;br /&gt;
|{{Mirrorlink|https://www.filefront.com/17464439/stac141.pk4}}{{Forumlink|1=https://forums.thedarkmod.com/topic/16343-fan-mission-st-albans-cathedral-v20-11062014/}} {{Loot|FM:TDM_St_Alban&#039;s_Cathedral_-_Bikerdude}}&lt;br /&gt;
|2010-11-01&lt;br /&gt;
|67&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#St Alban series|St Alban]] &lt;br /&gt;
|Church/Cathedral&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|swing1_2|Swing}}&lt;br /&gt;
|Komag&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/11660-vertigo-contest-entry-swing-by-komag-20100825/}} {{Loot|FM:TDM_Swing_-_Komag}}&lt;br /&gt;
|2010-08-25&lt;br /&gt;
|3&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2010 Summer Vertical Contest|SVC 10]]&lt;br /&gt;
|Platforming/Jumping &amp;lt;br&amp;gt; Experimental&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|caduceus|The Caduceus of St. Alban}}&amp;lt;br&amp;gt;(v.1.5.5 2010/08/26)&lt;br /&gt;
|Bikerdude&lt;br /&gt;
|{{Mirrorlink|https://www.filefront.com/17237609/stalban.pk4/}}{{Forumlink|https://forums.thedarkmod.com/topic/11644-the-caduceus-of-st-alban-vertical-fm-contest-entry-aug-8th-2010/}}&lt;br /&gt;
|2010-08-23&lt;br /&gt;
|11.3&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#St Alban series|St Alban]] &amp;lt;br&amp;gt; [[Fan_Mission_Contests#2010 Summer Vertical Contest|SVC 10]]&lt;br /&gt;
|Church/Cathedral&lt;br /&gt;
|Spiders&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|somewhere1_1|Somewhere Above the City}}&amp;lt;br&amp;gt;(v1.1 2010/08/27)&lt;br /&gt;
|grayman&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/11619-vertical-contest-mission-somewhere-above-the-city-by-grayman-aug-20-2010/}} {{Loot|FM:TDM_Somewhere_Above_the_City_-_grayman}}&lt;br /&gt;
|2010-08-20&lt;br /&gt;
|11&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Contests#2010 Summer Vertical Contest|SVC 10]]&lt;br /&gt;
|Tombs, Catacombs &amp;amp; Crypts&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|betrayal|Betrayal}}&amp;lt;br&amp;gt;(v.1.1, 2010/09/01)&lt;br /&gt;
|DeTeEff (Fieldmedic)&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/11605-betrayal-by-fieldmedic-20100817-summer-fm-vertical-contest-entry/}} {{Loot|FM:TDM_Awaiting_the_Storm_-_HappyCheeze}}&lt;br /&gt;
|2010-08-17&lt;br /&gt;
|12&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2010 Summer Vertical Contest|SVC 10]]&lt;br /&gt;
|Horror&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|rift|Rift, The}}&lt;br /&gt;
|Baddcog&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/11599-vert-contest-mission-the-rift-by-baddcog-aug-15-2010/}}&lt;br /&gt;
|2010-08-15&lt;br /&gt;
|10&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2010 Summer Vertical Contest|SVC 10]]&lt;br /&gt;
|Lost Civilizations&lt;br /&gt;
|Spiders, Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|holetower|Illusionist&#039;s Tower}}&lt;br /&gt;
|stumpy&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/11541-illusionists-tower-by-stumpy-201085-summer-fm-vertical-contest-entry}} {{Forumlink|1=https://www.bookofages.co.uk/doom3/mods/holetower.html}} {{Loot|FM:TDM_Illusionist%27s_Tower_-_stumpy}}&lt;br /&gt;
|2010-08-05&lt;br /&gt;
|9&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2010 Summer Vertical Contest|SVC 10]]&lt;br /&gt;
|Horror &amp;lt;br&amp;gt; Experimental&lt;br /&gt;
|Spiders, Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|madmountain|Mad&#039;s Mountain}}&lt;br /&gt;
|Jesps&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/11510-fan-mission-mads-mountain-by-jesps-20100731}} {{Loot|FM:TDM_Lord_Dufford%27s_-_stumpy}}&lt;br /&gt;
|2010-07-31&lt;br /&gt;
|2&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2010 Summer Vertical Contest|SVC 10]]&lt;br /&gt;
|Outdoor/Caves&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|glenham_tower|Glenham Tower, The}}&lt;br /&gt;
|Sotha&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/11423-fan-mission-the-glenham-tower-by-sotha-20100717}}&lt;br /&gt;
|2010-07-17&lt;br /&gt;
|5&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Thomas Porter series|Thomas Porter]] &amp;lt;br&amp;gt; [[Fan_Mission_Contests#2010 Summer Vertical Contest|SVC 10]] &#039;&#039;&#039;WINNER&#039;&#039;&#039;&lt;br /&gt;
|Castle/Fortress &amp;lt;br&amp;gt; Horror&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|pandoras_box|Pandora&#039;s Box}}&lt;br /&gt;
|Jesps, Fidcal&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/11381-fan-mission-pandoras-box-by-jesps20100711}} {{Loot|FM:TDM_Pandora%27s_Box_-_Jesps}}&lt;br /&gt;
|2010-07-11&lt;br /&gt;
|7&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Pirate &amp;lt;br&amp;gt; Ship &amp;lt;br&amp;gt; Experimental&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|beleaguered_fence|Beleaguered Fence, The}}&lt;br /&gt;
|Sotha&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/11298-fan-mission-the-beleaguered-fence-by-sotha-20100623}} {{Loot|FM:TDM_The_Beleaguered_Fence_-_Sotha}}&lt;br /&gt;
|2010-06-23&lt;br /&gt;
|11&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Thomas Porter series|Thomas Porter]]&lt;br /&gt;
|Jail/Prison&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|delivery|Special Delivery, A}}&lt;br /&gt;
|Silencium18&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/11247-fan-mission-a-special-delivery-by-silencium1820100612}} {{Loot|FM:TDM_A_Special_Delivery_-_Silencium18}}&lt;br /&gt;
|2010-06-12&lt;br /&gt;
|2&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Warehouse&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|alchemist|Alchemist, The}}&amp;lt;br&amp;gt;(2010/06/04)&lt;br /&gt;
|Sotha, Fidcal&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/11170-fan-mission-the-alchemist-by-sotha-fidcal20100601}} {{Loot|FM:TDM_The_Alchemist_-_Sotha_%26_Fidcal}}&lt;br /&gt;
|2010-06-01&lt;br /&gt;
|27&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Thief&#039;s Den series|Thief&#039;s Den]]&lt;br /&gt;
|City Missions&lt;br /&gt;
|Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|storm|Awaiting The Storm}}&lt;br /&gt;
|HappyCheeze&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/11095-fm-awaiting-the-storm-by-happycheeze-20200522}} {{Loot|FM:TDM_Awaiting_the_Storm_-_HappyCheeze}}&lt;br /&gt;
|2010-05-22&lt;br /&gt;
|4&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|sound_alert_trainer|Sound Alert &amp;amp; Blackjack Trainer}}&lt;br /&gt;
|Dark Mod Team&lt;br /&gt;
| &lt;br /&gt;
|2010-05-14&lt;br /&gt;
|0.2&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Training &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|nhat3|No Honor Among Thieves}}&amp;lt;br&amp;gt;(v.4.3 EFX, Subtitles, Water Effects 2024/02/23)&lt;br /&gt;
|Goldchocobo, RailGun, Mortem Desino, Bikerdude&lt;br /&gt;
|{{Mirrorlink|https://tinyurl.com/2a9mdcs}}{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/10993-fan-mission-no-honor-among-thieves-20100429}} {{Loot|FM:TDM_No_Honor_Among_Thieves_-_Goldchocobo}}&lt;br /&gt;
|2010-04-29&lt;br /&gt;
|229.8&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|&lt;br /&gt;
|Church/Cathedral; City Missions; Outdoor/Pagan, Mansion/Estate&lt;br /&gt;
|Spiders, Undead&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|heartv2|Heart of Lone Salvation, The}}&amp;lt;br&amp;gt;(v.2.0, 2014/04/12)&lt;br /&gt;
|Fidcal, Baddcog, Bikerdude&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/topic/10878-fan-mission-the-heart-of-lone-salvation-by-fidcal-baddcog-bikerdude-20100402/?p=213506}} {{Walkthrough|FM:TDM_The_Heart_of_Lone_Salvation_-_Fidcal_%26_Baddcog_%26_Bikerdude}} {{loot|FM:TDM_The_Heart_of_Lone_Salvation_-_Fidcal_%26_Baddcog_%26_Bikerdude}}&lt;br /&gt;
|2010-04-02&lt;br /&gt;
|41&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Thief&#039;s Den series|Thief&#039;s Den]]&lt;br /&gt;
|City Missions&lt;br /&gt;
|Spiders&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|dufford|Lord Dufford&#039;s}}&lt;br /&gt;
|stumpy&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/10868-fan-mission-lord-duffords-20100331}} {{Loot|FM:TDM_Lord_Dufford%27s_-_stumpy}}&lt;br /&gt;
|2010-03-31&lt;br /&gt;
|22&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|builders_influence|Builder&#039;s Influence, The}}&amp;lt;br&amp;gt;(2010/03/23)&lt;br /&gt;
|Railgun, Springheel&lt;br /&gt;
|{{Mirrorlink|https://www.fidcal.com/darkuser/missions/builders_influence.pk4}}{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/10811-fan-mission-the-builders-influence-20100320/}} {{Loot|FM:TDM_The_Builders_Influence_-_Railgun%26Springheel}}&lt;br /&gt;
|2010-03-20&lt;br /&gt;
|15&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Corbin series|Corbin]]&lt;br /&gt;
|Castle/Fortress&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|business3|Business as Usual}}&amp;lt;br&amp;gt;(v3.0 2013/01/19)&lt;br /&gt;
|Bikerdude&lt;br /&gt;
|{{Mirrorlink|1=https://rapidshare.com/files/335299431/business.pk4.html}}{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/10533-fan-mission-business-as-usual-by-b1k3rdude-14012010-christmas-fm-contest-entry/page__view__findpost__p__207055}}{{Forumlink|https://forums.thedarkmod.com/index.php?/topic/14450-fan-mission-business-as-usual-v30-20130119/}}&lt;br /&gt;
|2010-01-14&lt;br /&gt;
|16.1&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2009 Grand Christmas Contest|GCC 09]]&lt;br /&gt;
|Sewers&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|returntothecity|Return to the City}}&amp;lt;br&amp;gt;(v3.0 2015/01/03)&lt;br /&gt;
|Melan, Bikerdude&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/10509-fan-mission-return-to-the-city-by-melan-20100110/}} {{Forumlink|1=https://www.ttlg.com/forums/showthread.php?t=130519/}} {{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/12390-fan-mission-return-to-the-city-v2-01032011/}}&lt;br /&gt;
|2010-01-10&lt;br /&gt;
|26&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Sir Talbot series|Sir Talbot]] &amp;lt;br&amp;gt; [[Fan_Mission_Contests#2009 Grand Christmas Contest|GCC 09]] &#039;&#039;&#039;WINNER&#039;&#039;&#039; &lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|sons_of_baltona_1|Sons of Baltona 1, The}}&lt;br /&gt;
|Carnage&lt;br /&gt;
|{{Mirrorlink|1=https://www.mediafire.com/?m4ywobjodm0}}{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/10498-fan-mission-the-sons-of-baltona-1-by-carnage-20100109}}&lt;br /&gt;
|2010-01-09&lt;br /&gt;
|3&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2009 Grand Christmas Contest|GCC 09]] / Baltona 1&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|living_expenses|Living Expenses}}&lt;br /&gt;
|Sonosuke&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/10451-fm-living-expenses-by-sonosuke-2-jan-10/page__view__findpost__p__205386}}&lt;br /&gt;
|2010-01-02&lt;br /&gt;
|6&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2009 Grand Christmas Contest|GCC 09]]&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|trapped|Trapped!}}&lt;br /&gt;
|RailGun&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/10442-fm-trapped-by-railgun-dec-30/page__view__findpost__p__205092}}&lt;br /&gt;
|2009-12-30&lt;br /&gt;
|6&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Jail/Prison&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|parcel|Parcel, The}}&lt;br /&gt;
|Xonze&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/10404-fm-the-parcel-by-xonze-dec-24/page__view__findpost__p__204459}}&lt;br /&gt;
|2009-12-24&lt;br /&gt;
|7&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2009 Grand Christmas Contest|GCC 09]]&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|too_late|Too Late}}&lt;br /&gt;
|Nielsen74&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/10400-fm-too-late-by-nielsen74-24-dec-09/page__view__findpost__p__204396}}&lt;br /&gt;
|2009-12-24&lt;br /&gt;
|4&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Contests#2009 Grand Christmas Contest|GCC 09]]&lt;br /&gt;
|Warehouse&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|thieves|Thieves}}&lt;br /&gt;
|Silencium, RailGun, Fidcal&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/10286-fm-the-thieves-nov-2509/}}&lt;br /&gt;
|2009-11-26&lt;br /&gt;
|9&lt;br /&gt;
|No &amp;lt;br&amp;gt; [https://www.moddb.com/mods/the-dark-mod/addons/unofficial-thieves-efx  Unofficial EFX Build]&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|patently_dangerous|Patently Dangerous}}&amp;lt;br&amp;gt;(v.2.0 EFX, 2021/01/03)&lt;br /&gt;
|demagogue&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/10125-fm-patently-dangerous-oct3109/page__view__findpost__p__199324/}}&lt;br /&gt;
|2009-10-31&lt;br /&gt;
|22.5&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM||Dark Mod Training Mission, The}}&lt;br /&gt;
|TDM Team&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/9932-fm-training-mission-17-oct-09/}}&lt;br /&gt;
|2009-10-17&lt;br /&gt;
|6&lt;br /&gt;
|Yes ( 2.13 beta )&lt;br /&gt;
|&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Introduction_campaign|Official Campaign]]&lt;br /&gt;
|Training &amp;lt;br&amp;gt; Platforming/Jumping&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|crown_of_penitence|Crown of Penitence, The}}&lt;br /&gt;
|Jesps&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/9934-fm-crown-of-penitence-by-jesps-17-oct-09/}}&lt;br /&gt;
|2009-10-16&lt;br /&gt;
|12&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|chalice1_1|Chalice of Kings, The}}&amp;lt;br&amp;gt;(v.2.0, 2015/09/24) (Bikerdude and Xarg)&lt;br /&gt;
|Fidcal&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/9935-fm-chalice-of-kings-by-fidcal-17-oct-09/}} {{Loot|FM:TDM_Chalice_of_Kings_-_Fidcal}}&lt;br /&gt;
|2009-10-15&lt;br /&gt;
|3&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Thief&#039;s Den series|Thief&#039;s Den]]&lt;br /&gt;
|Castle/Fortress&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|outpost|Outpost, The}}&lt;br /&gt;
|angua, greebo&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/9937-fm-the-outpost-by-angua-greebo-17-oct-09/}}&lt;br /&gt;
|2008-12-23&lt;br /&gt;
|2&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|&lt;br /&gt;
|Castle/Fortress&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM||Mission 2: Tears of Saint Lucia, The}}&amp;lt;br&amp;gt;(v.3.0, 2017/02/14)&lt;br /&gt;
|TDM Team&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/10579-fan-mission-the-tears-of-st-lucia-20081021/page__view__findpost__p__207972}} {{Loot|FM:TDM_The_Tears_of_Saint_Lucia_-_jdude}} [https://www.youtube.com/watch?v=yrGxoi3LSGg Briefing]&lt;br /&gt;
|2008-10-21&lt;br /&gt;
|20.3&lt;br /&gt;
|Yes (2.11)&lt;br /&gt;
|&lt;br /&gt;
|Yes&lt;br /&gt;
|[[Fan_Mission_Series#Introduction_campaign|Official Campaign]]&lt;br /&gt;
|Church/Cathedral&lt;br /&gt;
|Spiders&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|closemouthed_shadows|Closemouthed Shadows}}&amp;lt;br&amp;gt;(v.2.0, 2012/01/15)&lt;br /&gt;
|LordSavage, Bikerdude&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/topic/13383-fan-mission-closemouthed-shadows-2008-reworked-for-tdm-107-20120115/}} &lt;br /&gt;
|2008-09-21&lt;br /&gt;
|2&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Closemouthed Shadows 1&lt;br /&gt;
|Mansion/Estate&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!align=left|{{TDM-FM|thiefsden|Thief&#039;s Den}}&amp;lt;br&amp;gt;(v.2.0, 2010/07/04)&lt;br /&gt;
|Fidcal, greebo&lt;br /&gt;
|{{Forumlink|1=https://forums.thedarkmod.com/index.php?/topic/11347-fan-mission-thiefs-den-re-release-by-fidcal20100704}} {{Walkthrough|FM:TDM_Thief&#039;s_Den_-_Fidcal}} {{Loot|FM:TDM_Thief%27s_Den_-_Fidcal}}&lt;br /&gt;
|2008-01-18&lt;br /&gt;
|3&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|[[Fan_Mission_Series#Thief&#039;s Den series|Thief&#039;s Den]]&lt;br /&gt;
|City Missions&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To see a speculative list of Upcoming Fan Missions, please visit: [[Upcoming Fan Missions]]&lt;br /&gt;
&lt;br /&gt;
== Table notes ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Links Key&#039;&#039;&#039;&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; border=1 style=&amp;quot;border-collapse: collapse;&amp;quot; cellspacing=0 cellpadding=2&lt;br /&gt;
|-&lt;br /&gt;
|[https://wiki.thedarkmod.com/images/b/be/Icon_forum.png https://wiki.thedarkmod.com/images/b/be/Icon_forum.png]&lt;br /&gt;
|Link to discussion in Forums&lt;br /&gt;
|-&lt;br /&gt;
|{{Mirrorlink|}}&lt;br /&gt;
|Misc. download mirror&lt;br /&gt;
|-&lt;br /&gt;
|{{Loot|}}&lt;br /&gt;
|Loot list&lt;br /&gt;
|-&lt;br /&gt;
|{{Walkthrough|}}&lt;br /&gt;
|Walkthrough&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mission Type Key&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Bear in mind that individual FMs can have combinations of two or three of these overarching genres/themes, rather than just a single one.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; border=1 style=&amp;quot;border-collapse: collapse;&amp;quot; cellspacing=0 cellpadding=2&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Bank Jobs&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission involving a heist or other thievy action inside a local banking institution. Will often contain the outsmarting of security systems, gaining access to a safe and cracking its code.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Castle/Fortress&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission involving a heist or other thievy action inside or outside a castle or fortress, either one that serves as a military garrison, or as someone&#039;s private residence. Frequently involves background characters from the nobility. &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;City Missions&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission that is set mainly in the streets and public spaces of an urban area, such as a town or city. Though the player is most often out on the streets, these missions tend to also involve some degree of exploration and infiltration into private and public buildings alike.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Church/Cathedral&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission set in and around religious buildings and institutions, such as churches, monasteries, cathedrals, church bureaus, church workshops, etc. Frequently involves [[Clergy/Builder_Characters|ecclesiastical characters]] from the TDM setting&#039;s [[Builders|Builder Church]].&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Experimental&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission which involves some creative design or gameplay element that isn&#039;t typical for the vast majority of TDM missions. FMs set in highly unusual environments, or with a puzzle-like nature, can fit under this label.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Inn/Tavern&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission set mostly in and around an inn, tavern or shanty. Usually focused on robbing some rich guest, acquiring an item stored by the guest at the inn, or gathering intel at the inn.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Jail/Prison&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission involving an escape from a prison (by the imprisoned player character), infiltration of a prison to gather intel from inmates or help an inmate escape the prison, etc.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Lost Civilizations&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission focused on the exploration of ancient ruins, whether above ground or in deep subterranean caverns. Can often overlap with the &#039;&#039;Horror&#039;&#039; or &#039;&#039;Tombs, Catacombs &amp;amp; Crypts&#039;&#039; type of mission, but not necessarily.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Horror&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission with an overt horror theme. Depending on the author&#039;s approach and intentions, it can focus on psychological horror, or horror based on danger from supernatural threats, or varying combinations of both. &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Mansion/Estate&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission involving a heist or other thievy action inside someone&#039;s private residence (a fancy house, a manor house) and its surrounding grounds. Frequently involves background characters from the nobility or the more affluent townsmen or citizens. &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Museum Heists&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission focusing on a heist in a museum, art gallery or other institution storing priceless artefacts, artworks, gemstone collections, etc.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Outdoor/Forest&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission set in a mostly natural outdoor environment, involving the exploration of forested areas and woodland. Can overlap with other Outdoor style missions.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Outdoor/Caves&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission set in a mostly natural outdoor environment, but involving the exploration of natural caves and caverns. Can overlap with other Outdoor style missions.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Outdoor/Daylight&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission set in a mostly outdoor environment, during the daytime (in contrast to the usual TDM missions, set at night time or early dusk). Can overlap with other Outdoor style missions.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Outdoor/Pagan&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission set in a mostly natural outdoor environment, involving some presence of [[Pagans|pagan tribes]] from TDM&#039;s setting. Perhaps even pagan camps and settlements. Can overlap with other Outdoor style missions.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Pirate&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission involving the presence of characters engaging in piracy or smuggling, and various related piratical themes. Can overlap with the &#039;&#039;Ship&#039;&#039; type of mission, but not necessarily.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Platforming/Jumping&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission focusing on testing the player&#039;s movement, jumping and climbing skills, with or without equipment. &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Sewers&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission which involves the use of the city sewers or others sewers in some way, often as a stealthy means of entry or escape.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Ship&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission which takes place aboard a vessel, in port or at sea, or otherwise involves ships to a great degree. Can overlap with the &#039;&#039;Pirate&#039;&#039; type of mission, but not necessarily.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Thieves&#039; Highway / Rooftop&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission involving a lot of movement and travel on the rooftops of a town or city (colloquially &amp;quot;The Thieves&#039; Highway&amp;quot;).&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Tombs, Catacombs &amp;amp; Crypts&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission involving the exploration of old tombs, catacombs and crypts, often for the purposes of treasure and artefact hunting. Can often overlap with the &#039;&#039;Horror&#039;&#039; or &#039;&#039;Lost Civilizations&#039;&#039; type of mission, but not necessarily.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Train&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission which takes place aboard a train, either one already underway or one waiting at a station. Given TDM&#039;s setting, most likely a train with an early steam locomotive.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Training&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission label that is unique to the official Training Mission, an open-ended tutorial mission where players can practice and test their TDM gameplay skills at their own leisure, and to the smaller blackjacking-trainer FM, which focuses on practicing NPC knockouts by the player.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;Warehouse&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|Fan mission which takes place in and around a warehouse, usually in some industrial area of a city, or at a port. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Contest Key&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
GCC 09: [[Fan_Mission_Contests#2009 Grand Christmas Contest|Grand Christmas Contest 2009]]&lt;br /&gt;
&lt;br /&gt;
SVC 10: [[Fan_Mission_Contests#2010 Summer Vertical Contest|Summer Vertical Contest 2010]]&lt;br /&gt;
&lt;br /&gt;
CSC 11: [[Fan_Mission_Contests#2011 Community Seasons Contest|Community Seasons Contest 2011]]&lt;br /&gt;
&lt;br /&gt;
HSC 11: [[Fan_Mission_Contests#2011 Halloween Speed-build Contest|Halloween Speed-Build Contest 2011]]&lt;br /&gt;
&lt;br /&gt;
CBC 12: [[Fan_Mission_Contests#2012 Community Beginner Contest|Community Beginner Contest 2012]]&lt;br /&gt;
&lt;br /&gt;
CUC 13: [[Fan_Mission_Contests#2013 Community Unusual Contest|Community Unusual Contest 2013]]&lt;br /&gt;
&lt;br /&gt;
HSC 14: [[Fan_Mission_Contests#2014 Halloween Speed-build Contest|Halloween Speed-Build Contest 2014]]&lt;br /&gt;
&lt;br /&gt;
HSC 15: [[Fan_Mission_Contests#2015 Halloween Speed-build Contest|Halloween Speed-Build Contest 2015]]&lt;br /&gt;
&lt;br /&gt;
CCC 22: [[Fan_Mission_Contests#2022_Christmas_Connection_Contest|Christmas Connections Contest 2022]]&lt;br /&gt;
&lt;br /&gt;
15YR:   [[Fan_Mission_Contests#2024_15th_Anniversary_Contest|15th Anniversary Contest (2024)]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Editing this table ==&lt;br /&gt;
* Please only include playable missions that are fully released, not those currently in development or testing.  Tutorials, demos, prefabs, etc. should be listed elsewhere. &lt;br /&gt;
* A mission title may be listed in plain text as a record of release, or preferably a link to an information page or primary direct download.&lt;br /&gt;
* List by release date descending (newest at the top).&lt;br /&gt;
* If a fan mission only has a single mirror/host please consider adding additional mirrors.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://wiki.thedarkmod.com/index.php?title=Category:Official_FMs Fan missions] - An index of fan mission pages on this wiki.&lt;br /&gt;
* [https://wiki.thedarkmod.com/index.php?title=Category:Official_missions_(OMs) Official missions] - An index of Oficial mission pages on this wiki.&lt;br /&gt;
* [[Fan Mission Series]] - An overview of all currently known series or campaigns of fan missions interconnected by their stories or characters. There are already plenty in TDM, and have been since its early days as an expandable game.&lt;br /&gt;
* [[Mission recommendation discussions]] - An overview of past discussions on what FMs the community recommends to players looking for various challenges (difficulty, size, theme, setting, objectives, etc.).&lt;br /&gt;
* [[Fan Mission Contests]] - An overview of past and present contests in Fan Mission creation, by members of the TDM community.&lt;br /&gt;
* [[Upcoming Fan Missions]] - An overview of Fan Missions in development or tentatively planned. (&#039;&#039;Do not&#039;&#039; edit the overview.)&lt;br /&gt;
* [https://tdmdb.com/missions tdmdb.com] An external TDM mission database, which data is partly coming from this wiki page.&lt;br /&gt;
&lt;br /&gt;
{{general|sort=Fan Missions}}&lt;br /&gt;
[[Category:Fan Missions]]&lt;br /&gt;
[[Category:Official FMs| ]]&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=Conversation_Tutorial&amp;diff=33985</id>
		<title>Conversation Tutorial</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=Conversation_Tutorial&amp;diff=33985"/>
		<updated>2025-06-13T20:45:48Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: /* Conversation Editor window */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Presumably your AI are pathing along, minding their own business, when you want them to interact, say something specific, or glance at one another.  Here&#039;s how to set that up, step by step...    ([[Conversations]] are more than just talk, they may control movement, animations, or other things.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Triggering =&lt;br /&gt;
First they have to run into a [[Triggers|trigger]] to initiate a &amp;quot;conversation&amp;quot;, either as the target of a [[Path Nodes|path node]] (as of TDM 2.02), another trigger entity, a stim/response trigger, or equivalent.&lt;br /&gt;
&lt;br /&gt;
The trigger targets an &amp;quot;atdm:target_startconversation&amp;quot; entity (found in targets folder). That entity gets the spawnarg &amp;quot;conversation&amp;quot; &amp;quot;whatever&amp;quot; (substitute &amp;quot;whatever&amp;quot; with a label to identify this conversation compared to future ones in the list).&lt;br /&gt;
&lt;br /&gt;
[[File:Conversation Start Setup.png|large|center]]&lt;br /&gt;
&#039;&#039;&#039;Make sure to use the actual conversation as the value for &amp;quot;conversation&amp;quot;, NOT the entity itself! In this example the correct value for the conversation start is &amp;quot;lost_key&amp;quot;, NOT &amp;quot;convo_kitchen&amp;quot;.&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
=Sounds/Lines=&lt;br /&gt;
Before you jump in, you will need to type in which soundshaders you will be using if you want them to talk. So if you haven&#039;t already picked your lines, pop in a temporary Speaker and get the names of the [[Sound_Folder_Structure|soundshaders]] you&#039;ll want to use.&lt;br /&gt;
&lt;br /&gt;
For example, I have an AI greet a horse with &amp;quot;tdm_ai_wench_greet_civilian_to_civilian&amp;quot;, to which the horse whinnies via &amp;quot;animal_horse_idle&amp;quot;, then she commiserates to it from, &amp;quot;tdm_ai_wench_idle&amp;quot;. If you desire a specific line, or custom, you&#039;ll have to create your own soundshader (a text file listing an audiofile).&lt;br /&gt;
&lt;br /&gt;
An audiofile (e.g., .ogg file) intended for use in a conversation should be mono, not stereo. Stereo will play, but AI lip-sync will lag.&lt;br /&gt;
&lt;br /&gt;
=Conversation Editor window=&lt;br /&gt;
Now enter the Conversation Editor (map menu), which will create an entity if you don&#039;t already have one. Be sure it&#039;s not placed in the void!&lt;br /&gt;
&lt;br /&gt;
Click +Add down at the bottom to create a new conversation, then edit it. You&#039;ll notice toward the top, &amp;quot;Actors must be within talk distance&amp;quot; and &amp;quot;always facing&amp;quot;. These cause them to move toward each other, and/or turn when the conversation is triggered, not that the conversation waits until they are in range. For each actor (whether you have just one, or multiple AI interacting), +Add that actor and enter their &#039;&#039;&#039;entity name&#039;&#039;&#039;. Names identify who does what and when in the next step.&lt;br /&gt;
&lt;br /&gt;
Now in the bottom you may add commands, which run in sequence (generally). You may choose for one to not wait, in which case the next will occur perhaps before the current completes. This can be good to have AI talk more naturally overlapping, rather than a lengthy pause between each spoken line.&lt;br /&gt;
&lt;br /&gt;
Typical commands are &amp;quot;Talk&amp;quot; to say something (paste in a soundshader name you noted earlier), look at something or someone (including player1), wait a few seconds, etc. For example, my wench looks at the horse, says her line, the horse whinnies in reply, then she delivers her final line. That&#039;s it, now check to see how it works out in game.&lt;br /&gt;
&lt;br /&gt;
(Note: if you want to mute your AI generally, so they don&#039;t use their usual vocalizations the rest of the time (perhaps not making sense leading in or out of your conversation), change &amp;quot;def_vocal_set&amp;quot; to &amp;quot;atdm:ai_vocal_set_mute&amp;quot;.)&lt;br /&gt;
&lt;br /&gt;
=See also=&lt;br /&gt;
[[Conversations]]&lt;br /&gt;
&lt;br /&gt;
[[Cutscenes Part 3: Lighting, Placing the Player, and Conversations#Conversations]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorial]]&lt;br /&gt;
[[Category:AI]]&lt;br /&gt;
[[Category:AI Tutorials]]&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=User:Frost_Salamander&amp;diff=33979</id>
		<title>User:Frost Salamander</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=User:Frost_Salamander&amp;diff=33979"/>
		<updated>2025-05-21T19:06:32Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: /* Create an inventory icon for an existing model from a DR screenshot */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== TDM Files and Contents ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Caption text&lt;br /&gt;
|-&lt;br /&gt;
! Content !! File path !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Skins || tdm_models_decls01.pk4\skins || skin files shipped with TDM&lt;br /&gt;
|-&lt;br /&gt;
| Script Constants|| tdm_base01.pk4\script\tdm_defs.script || constant values. Useful if you need to know the literal values for use in your scripts.&lt;br /&gt;
|-&lt;br /&gt;
| Script Objects|| tdm_base01.pk4\script || various script objects for entities.&lt;br /&gt;
|-&lt;br /&gt;
| tdm_ai_humanoid_newskel.def || tdm_ai_humanoid_undead01.pk4\def\tdm_ai_humanoid_newskel.def || Base class for all TDM humanoid entities&lt;br /&gt;
|-&lt;br /&gt;
| GUI Icons || tdm_gui01.pk4\dds\guis\assets\hud\ || HUD icons. e.g. loot, potions, etc&lt;br /&gt;
|-&lt;br /&gt;
| sound shaders || tdm_sound_ambient_decls01.pk4\sound || ambient environmental sound shaders&lt;br /&gt;
|-&lt;br /&gt;
| materials definitions || tdm_textures_base01.pk4\materials || base materials files &lt;br /&gt;
|-&lt;br /&gt;
| guard model materials || tdm_ai_humanoid_guards01.pk4 || guard materials and texture files &lt;br /&gt;
|-&lt;br /&gt;
| Stim types || tdm_base01.pk4/script/tdm_stim_response.script || &lt;br /&gt;
|-&lt;br /&gt;
| Readable textures || tdm_gui01.pk4/dds/guis/assets/readables || various parchment textures&lt;br /&gt;
|-&lt;br /&gt;
| Blueprint textures || tdm_models02.pk4 || textures/readables/blueprint01*&lt;br /&gt;
|-&lt;br /&gt;
| Light textures || tdm_textures_base01.pk4 || In both /lights and textures/lights&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Creating an Image Decal with Gimp ==&lt;br /&gt;
# Go to somewhere like pixabay.com and search for free images.  I usually filter by &#039;vector graphics&#039; (e.g. PNG) because it supports alpha channel which you&#039;ll need for decals.&lt;br /&gt;
# Once you find an image, download it.  I tend to get medium-sized versions (e.g. close to 1024 x 1024)&lt;br /&gt;
# Open the file in Gimp&lt;br /&gt;
# Scale the image to 1024x1024 pixels.&lt;br /&gt;
# export as TGA&lt;br /&gt;
&lt;br /&gt;
== Creating a Text Decal with Gimp ==&lt;br /&gt;
# Open Gimp - New -&amp;gt; &lt;br /&gt;
# Set image size to 1024 x 1024 (or something more rectangular like 1024 x 512)&lt;br /&gt;
# Click Advanced -&amp;gt; Fill with: transparency&lt;br /&gt;
# Add text layer&lt;br /&gt;
# When happy with text, right-click the text layer and &#039;merge down&#039; into alpha layer&lt;br /&gt;
# save and export as TGA.&lt;br /&gt;
# Create a materials file (.mtr) like so:&lt;br /&gt;
&lt;br /&gt;
  textures/darkmod/decals/signs/coronet&lt;br /&gt;
  {&lt;br /&gt;
  	DECAL_MACRO&lt;br /&gt;
  	noimpact&lt;br /&gt;
  	&lt;br /&gt;
  	{&lt;br /&gt;
  		blend blend&lt;br /&gt;
  		map textures/darkmod/decals/signs/coronet&lt;br /&gt;
  	}&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
== Create an inventory icon for an existing model from a DR screenshot ==&lt;br /&gt;
# In DarkRadiant, right-click and choose &#039;Create Model...&#039; and choose the object you wish to use.&lt;br /&gt;
# in the preview window with the model showing, take a screenshot selection using something like the Windows Snipping Tool. Leave a centimeter or so of grey color around the object so that the in-game icon doesn&#039;t touch the text. Additionally, make sure the screenshot is square-shaped as we will be resizing the image to 128x128 pixels.&lt;br /&gt;
# Save the screenshot as a JPEG somewhere on your local disk.&lt;br /&gt;
# Open the file with GIMP.&lt;br /&gt;
# From the menu, choose Layer -&amp;gt; Transparency -&amp;gt; Color to Alpha...&lt;br /&gt;
# A pop up will appear. Next to the Color bar there will be an eye dropper icon. This is the color picker.&lt;br /&gt;
# Click the color picker and then click the grey area that surrounds your image. Don&#039;t worry if it looks like it&#039;s already been converted to alpha (the grey squares). The grey squares should turn a lighter colour.&lt;br /&gt;
# Click OK&lt;br /&gt;
# TIP: If the image becomes transparent as well, this is because its color is not far off from the grey background.  Reduce the &#039;Opacity Threshold&#039; until the checkerboard pattern doesn&#039;t cover your image (try 0.1).&lt;br /&gt;
# Resize the image by clicking Image -&amp;gt; Scale Image... Make it 128 x 128 pixels. Click &#039;Scale&#039;&lt;br /&gt;
# Export as DDS by clicking File -&amp;gt; Export As... and type a file name that ends in .dds. Choose BC3 / DXT5 compression and don&#039;t bother with mipmaps.&lt;br /&gt;
# Add the .dds file to your FM folder under &#039;dds\guis\assets\hud\inventory_icons&#039; if you want them to be in the same folder as the stock icons.&lt;br /&gt;
&lt;br /&gt;
== Creating a material using existing images (e.g. from textures.com) using GIMP ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Written on May 28th, 2023 using GIMP 2.10.34&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This will describe how to create your own texture (material) using an image found on the internet.  I will use textures.com as an example.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ensure that the license for whatever source you use is appropriate for TDM (e.g. allows use in video games)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
We will end up with 3 image files and one materials file:&lt;br /&gt;
* diffuse map (the base image with colour details, etc)&lt;br /&gt;
* normal map (faked bump/dent data)&lt;br /&gt;
* DarkRadiant editor icon&lt;br /&gt;
&lt;br /&gt;
This doesn&#039;t cover creation of a specular map.  This isn&#039;t needed unless your material needs a shiny surface (e.g. metal or wet surfaces).&lt;br /&gt;
&lt;br /&gt;
=== Obtain your image ===&lt;br /&gt;
# Log into textures.com and find an image you like under the &#039;Regular Photos&#039; section (&#039;&#039;&#039;NOT&#039;&#039;&#039; &#039;Special Content&#039;).  Make sure it&#039;s seamless if it needs to be tiled/repeatable (e.g. for bricks or walls). If it&#039;s something like a door or window, it doesn&#039;t need to be seamless. There is normally a JPG format that that is close to or exactly 1024x1024 pixels. Download it.&lt;br /&gt;
&lt;br /&gt;
=== Open your Image in GIMP ===&lt;br /&gt;
The first thing you may see here is a pop-up asking if you want to convert the image to &#039;the built-in sRGB color profile&#039;. I&#039;m not sure the implications of doing this but just choose &#039;Convert&#039;. &#039;&#039;&#039;(ADVICE NEEDED)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Resize Image (if needed) ===&lt;br /&gt;
TDM standard resolution for textures is 1024 x 1024.  However it&#039;s possible to get away with 2048 x 2048 at the cost of file size and performance.&lt;br /&gt;
If you can&#039;t find a 1024 x 1024 image for whatever reason (say it&#039;s 4K instead), you can scale it down:&lt;br /&gt;
# With the image open in GIMP, click Image -&amp;gt; Scale Image...&lt;br /&gt;
# Set the width in &#039;Image Size&#039; in pixels to 1024.  Make sure the width and height are &#039;chained&#039; (the little link icon should be whole). The height will then scale down proportionately to match the width.&lt;br /&gt;
&lt;br /&gt;
=== Crop your Image ===&lt;br /&gt;
This is only needed if you don&#039;t intend to use the entire image as-is (e.g. if you want to cut a door or window out of an image).  Skip this section if that is not the case.&lt;br /&gt;
# With the image in GIMP, select the Crop Tool (Shift+C).&lt;br /&gt;
# Under the &#039;Tool Options&#039; tab, tick the box for &#039;Delete cropped pixels&#039;&lt;br /&gt;
# Using the crop tool select the area you want to keep on the image with your mouse, and press &#039;Enter&#039; when done.&lt;br /&gt;
&lt;br /&gt;
=== Create the Diffuse Map (DDS File) ===&lt;br /&gt;
# With the original or cropped image open in GIMP Choose File -&amp;gt; Export as...&lt;br /&gt;
# In the next popup, change the filename to &#039;texturename.dds&#039; and click &#039;Export&#039;. &lt;br /&gt;
# On the next pop-up, choose your compression format (see below) and select &#039;Generate mipmaps&#039;. Under &#039;Mipmap Options&#039; choose &#039;Filter&#039;: &#039;Kaiser&#039; for best quality. Click &#039;Export&#039;&lt;br /&gt;
  - Compression:&lt;br /&gt;
    - if your image contains an alpha channel, choose &#039;BC3 / DXT5&#039;&lt;br /&gt;
    - if your image does not contain an alpha channel, choose &#039;BC1 / DXT1&#039;&lt;br /&gt;
&lt;br /&gt;
=== Create the Normal Map (TGA File)===&lt;br /&gt;
Apart from creating the normal map, the point of the first few steps is to reduce the amount of &#039;noise&#039; in the image which can lead to a grainy appearance.&lt;br /&gt;
# With the original or cropped image open in GIMP, select Colors -&amp;gt; Desaturate -&amp;gt; Desaturate. Click &#039;OK&#039;&lt;br /&gt;
# Select Filters -&amp;gt; Blur -&amp;gt; Gaussian Blur.  Leave the defaults and click &#039;OK&#039;.&lt;br /&gt;
# Select Colors -&amp;gt; Curves and adjust the curve to &#039;wash out&#039; (i.e. brighten) the image to remove any noise detail.&lt;br /&gt;
# Select Filters -&amp;gt; Generic -&amp;gt; Normal Map..&lt;br /&gt;
# The image will change to a blueish colour and you will be able to see the &#039;bumps&#039;. The only thing I adjust here is the &#039;Scale&#039; property.  If it looks very grainy, just reduce the scale. For things like bricks, I use a value &amp;lt; 5 or else the finished texture will look very grainy in TDM.  For stuff like doors, a value of about 10 looks OK.&lt;br /&gt;
# After adjusting the scale, click &#039;OK&#039;&lt;br /&gt;
# Choose File -&amp;gt; Export as..., change the file name to &#039;texturename_local.tga&#039; and click &#039;Export&#039;&lt;br /&gt;
# On the next pop-up, untick &#039;RLE compression&#039; and leave &#039;Origin&#039; at &#039;Bottom left&#039;. Click &#039;Export&#039;. &#039;&#039;&#039;(ADVICE NEEDED)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Create the editor icon (JPG File) ===&lt;br /&gt;
# Since you&#039;ve modified the image, either close and re-open the image in GIMP, or go back into your Undo History and select the original image (or cropped image if it&#039;s been cropped).&lt;br /&gt;
# Choose Image -&amp;gt; Scale Image... from the menu.&lt;br /&gt;
# On the dialogue, either scale it to 256x256 px (if it was a 1024x1024 image originally), or just scale it down to 25% if it was something else. Click &#039;Scale&#039;. If the image looks too blurry, you can try 512 x 512.&lt;br /&gt;
# Choose File -&amp;gt; Export as..., change the file name to &#039;texturename_ed.jpg&#039; and click &#039;Export&#039;&lt;br /&gt;
# On the next pop-up, untick all the &#039;save data&#039; boxes except for &#039;Save color profile&#039; &#039;&#039;&#039;(ADVICE NEEDED)&#039;&#039;&#039;.  Click &#039;Export&#039;&lt;br /&gt;
&lt;br /&gt;
=== Create TDM materials file ===&lt;br /&gt;
# Within your FM folder, save all your images in the appropriate TDM folder structure.  Just follow the existing conventions.  For example your DDS files go into &#039;dds/textures/darkmod/stone/brick&#039; and your normal map and editor files go into &#039;textures/darkmod/stone/brick&#039;&lt;br /&gt;
# Create the materials file as follows below. Give it a name like &#039;mybricks.mtr&#039; and put it in the /materials folder in your FM. The material name as it appears in DarkRadiant appears at the top.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: &#039;texturename&#039; in this example is &#039;bricks_dirty&#039;&lt;br /&gt;
 textures/darkmod/stone/brick/bricks_dirty&lt;br /&gt;
 {&lt;br /&gt;
     stone&lt;br /&gt;
     description	&amp;quot;vine_friendly&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
     qer_editorimage textures/darkmod/stone/brick/bricks_dirty_ed&lt;br /&gt;
     diffusemap      textures/darkmod/stone/brick/bricks_dirty&lt;br /&gt;
     bumpmap         textures/darkmod/stone/brick/bricks_dirty_local&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=User:Frost_Salamander&amp;diff=33978</id>
		<title>User:Frost Salamander</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=User:Frost_Salamander&amp;diff=33978"/>
		<updated>2025-05-21T19:06:18Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: /* Create an inventory icon for an existing model from a DR screenshot */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== TDM Files and Contents ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Caption text&lt;br /&gt;
|-&lt;br /&gt;
! Content !! File path !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Skins || tdm_models_decls01.pk4\skins || skin files shipped with TDM&lt;br /&gt;
|-&lt;br /&gt;
| Script Constants|| tdm_base01.pk4\script\tdm_defs.script || constant values. Useful if you need to know the literal values for use in your scripts.&lt;br /&gt;
|-&lt;br /&gt;
| Script Objects|| tdm_base01.pk4\script || various script objects for entities.&lt;br /&gt;
|-&lt;br /&gt;
| tdm_ai_humanoid_newskel.def || tdm_ai_humanoid_undead01.pk4\def\tdm_ai_humanoid_newskel.def || Base class for all TDM humanoid entities&lt;br /&gt;
|-&lt;br /&gt;
| GUI Icons || tdm_gui01.pk4\dds\guis\assets\hud\ || HUD icons. e.g. loot, potions, etc&lt;br /&gt;
|-&lt;br /&gt;
| sound shaders || tdm_sound_ambient_decls01.pk4\sound || ambient environmental sound shaders&lt;br /&gt;
|-&lt;br /&gt;
| materials definitions || tdm_textures_base01.pk4\materials || base materials files &lt;br /&gt;
|-&lt;br /&gt;
| guard model materials || tdm_ai_humanoid_guards01.pk4 || guard materials and texture files &lt;br /&gt;
|-&lt;br /&gt;
| Stim types || tdm_base01.pk4/script/tdm_stim_response.script || &lt;br /&gt;
|-&lt;br /&gt;
| Readable textures || tdm_gui01.pk4/dds/guis/assets/readables || various parchment textures&lt;br /&gt;
|-&lt;br /&gt;
| Blueprint textures || tdm_models02.pk4 || textures/readables/blueprint01*&lt;br /&gt;
|-&lt;br /&gt;
| Light textures || tdm_textures_base01.pk4 || In both /lights and textures/lights&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Creating an Image Decal with Gimp ==&lt;br /&gt;
# Go to somewhere like pixabay.com and search for free images.  I usually filter by &#039;vector graphics&#039; (e.g. PNG) because it supports alpha channel which you&#039;ll need for decals.&lt;br /&gt;
# Once you find an image, download it.  I tend to get medium-sized versions (e.g. close to 1024 x 1024)&lt;br /&gt;
# Open the file in Gimp&lt;br /&gt;
# Scale the image to 1024x1024 pixels.&lt;br /&gt;
# export as TGA&lt;br /&gt;
&lt;br /&gt;
== Creating a Text Decal with Gimp ==&lt;br /&gt;
# Open Gimp - New -&amp;gt; &lt;br /&gt;
# Set image size to 1024 x 1024 (or something more rectangular like 1024 x 512)&lt;br /&gt;
# Click Advanced -&amp;gt; Fill with: transparency&lt;br /&gt;
# Add text layer&lt;br /&gt;
# When happy with text, right-click the text layer and &#039;merge down&#039; into alpha layer&lt;br /&gt;
# save and export as TGA.&lt;br /&gt;
# Create a materials file (.mtr) like so:&lt;br /&gt;
&lt;br /&gt;
  textures/darkmod/decals/signs/coronet&lt;br /&gt;
  {&lt;br /&gt;
  	DECAL_MACRO&lt;br /&gt;
  	noimpact&lt;br /&gt;
  	&lt;br /&gt;
  	{&lt;br /&gt;
  		blend blend&lt;br /&gt;
  		map textures/darkmod/decals/signs/coronet&lt;br /&gt;
  	}&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
== Create an inventory icon for an existing model from a DR screenshot ==&lt;br /&gt;
# In DarkRadiant, right-click and choose &#039;Create Entity...&#039; or &#039;Create Model...&#039; and choose the object you wish to use.&lt;br /&gt;
# in the preview window with the model showing, take a screenshot selection using something like the Windows Snipping Tool. Leave a centimeter or so of grey color around the object so that the in-game icon doesn&#039;t touch the text. Additionally, make sure the screenshot is square-shaped as we will be resizing the image to 128x128 pixels.&lt;br /&gt;
# Save the screenshot as a JPEG somewhere on your local disk.&lt;br /&gt;
# Open the file with GIMP.&lt;br /&gt;
# From the menu, choose Layer -&amp;gt; Transparency -&amp;gt; Color to Alpha...&lt;br /&gt;
# A pop up will appear. Next to the Color bar there will be an eye dropper icon. This is the color picker.&lt;br /&gt;
# Click the color picker and then click the grey area that surrounds your image. Don&#039;t worry if it looks like it&#039;s already been converted to alpha (the grey squares). The grey squares should turn a lighter colour.&lt;br /&gt;
# Click OK&lt;br /&gt;
# TIP: If the image becomes transparent as well, this is because its color is not far off from the grey background.  Reduce the &#039;Opacity Threshold&#039; until the checkerboard pattern doesn&#039;t cover your image (try 0.1).&lt;br /&gt;
# Resize the image by clicking Image -&amp;gt; Scale Image... Make it 128 x 128 pixels. Click &#039;Scale&#039;&lt;br /&gt;
# Export as DDS by clicking File -&amp;gt; Export As... and type a file name that ends in .dds. Choose BC3 / DXT5 compression and don&#039;t bother with mipmaps.&lt;br /&gt;
# Add the .dds file to your FM folder under &#039;dds\guis\assets\hud\inventory_icons&#039; if you want them to be in the same folder as the stock icons.&lt;br /&gt;
&lt;br /&gt;
== Creating a material using existing images (e.g. from textures.com) using GIMP ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Written on May 28th, 2023 using GIMP 2.10.34&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This will describe how to create your own texture (material) using an image found on the internet.  I will use textures.com as an example.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ensure that the license for whatever source you use is appropriate for TDM (e.g. allows use in video games)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
We will end up with 3 image files and one materials file:&lt;br /&gt;
* diffuse map (the base image with colour details, etc)&lt;br /&gt;
* normal map (faked bump/dent data)&lt;br /&gt;
* DarkRadiant editor icon&lt;br /&gt;
&lt;br /&gt;
This doesn&#039;t cover creation of a specular map.  This isn&#039;t needed unless your material needs a shiny surface (e.g. metal or wet surfaces).&lt;br /&gt;
&lt;br /&gt;
=== Obtain your image ===&lt;br /&gt;
# Log into textures.com and find an image you like under the &#039;Regular Photos&#039; section (&#039;&#039;&#039;NOT&#039;&#039;&#039; &#039;Special Content&#039;).  Make sure it&#039;s seamless if it needs to be tiled/repeatable (e.g. for bricks or walls). If it&#039;s something like a door or window, it doesn&#039;t need to be seamless. There is normally a JPG format that that is close to or exactly 1024x1024 pixels. Download it.&lt;br /&gt;
&lt;br /&gt;
=== Open your Image in GIMP ===&lt;br /&gt;
The first thing you may see here is a pop-up asking if you want to convert the image to &#039;the built-in sRGB color profile&#039;. I&#039;m not sure the implications of doing this but just choose &#039;Convert&#039;. &#039;&#039;&#039;(ADVICE NEEDED)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Resize Image (if needed) ===&lt;br /&gt;
TDM standard resolution for textures is 1024 x 1024.  However it&#039;s possible to get away with 2048 x 2048 at the cost of file size and performance.&lt;br /&gt;
If you can&#039;t find a 1024 x 1024 image for whatever reason (say it&#039;s 4K instead), you can scale it down:&lt;br /&gt;
# With the image open in GIMP, click Image -&amp;gt; Scale Image...&lt;br /&gt;
# Set the width in &#039;Image Size&#039; in pixels to 1024.  Make sure the width and height are &#039;chained&#039; (the little link icon should be whole). The height will then scale down proportionately to match the width.&lt;br /&gt;
&lt;br /&gt;
=== Crop your Image ===&lt;br /&gt;
This is only needed if you don&#039;t intend to use the entire image as-is (e.g. if you want to cut a door or window out of an image).  Skip this section if that is not the case.&lt;br /&gt;
# With the image in GIMP, select the Crop Tool (Shift+C).&lt;br /&gt;
# Under the &#039;Tool Options&#039; tab, tick the box for &#039;Delete cropped pixels&#039;&lt;br /&gt;
# Using the crop tool select the area you want to keep on the image with your mouse, and press &#039;Enter&#039; when done.&lt;br /&gt;
&lt;br /&gt;
=== Create the Diffuse Map (DDS File) ===&lt;br /&gt;
# With the original or cropped image open in GIMP Choose File -&amp;gt; Export as...&lt;br /&gt;
# In the next popup, change the filename to &#039;texturename.dds&#039; and click &#039;Export&#039;. &lt;br /&gt;
# On the next pop-up, choose your compression format (see below) and select &#039;Generate mipmaps&#039;. Under &#039;Mipmap Options&#039; choose &#039;Filter&#039;: &#039;Kaiser&#039; for best quality. Click &#039;Export&#039;&lt;br /&gt;
  - Compression:&lt;br /&gt;
    - if your image contains an alpha channel, choose &#039;BC3 / DXT5&#039;&lt;br /&gt;
    - if your image does not contain an alpha channel, choose &#039;BC1 / DXT1&#039;&lt;br /&gt;
&lt;br /&gt;
=== Create the Normal Map (TGA File)===&lt;br /&gt;
Apart from creating the normal map, the point of the first few steps is to reduce the amount of &#039;noise&#039; in the image which can lead to a grainy appearance.&lt;br /&gt;
# With the original or cropped image open in GIMP, select Colors -&amp;gt; Desaturate -&amp;gt; Desaturate. Click &#039;OK&#039;&lt;br /&gt;
# Select Filters -&amp;gt; Blur -&amp;gt; Gaussian Blur.  Leave the defaults and click &#039;OK&#039;.&lt;br /&gt;
# Select Colors -&amp;gt; Curves and adjust the curve to &#039;wash out&#039; (i.e. brighten) the image to remove any noise detail.&lt;br /&gt;
# Select Filters -&amp;gt; Generic -&amp;gt; Normal Map..&lt;br /&gt;
# The image will change to a blueish colour and you will be able to see the &#039;bumps&#039;. The only thing I adjust here is the &#039;Scale&#039; property.  If it looks very grainy, just reduce the scale. For things like bricks, I use a value &amp;lt; 5 or else the finished texture will look very grainy in TDM.  For stuff like doors, a value of about 10 looks OK.&lt;br /&gt;
# After adjusting the scale, click &#039;OK&#039;&lt;br /&gt;
# Choose File -&amp;gt; Export as..., change the file name to &#039;texturename_local.tga&#039; and click &#039;Export&#039;&lt;br /&gt;
# On the next pop-up, untick &#039;RLE compression&#039; and leave &#039;Origin&#039; at &#039;Bottom left&#039;. Click &#039;Export&#039;. &#039;&#039;&#039;(ADVICE NEEDED)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Create the editor icon (JPG File) ===&lt;br /&gt;
# Since you&#039;ve modified the image, either close and re-open the image in GIMP, or go back into your Undo History and select the original image (or cropped image if it&#039;s been cropped).&lt;br /&gt;
# Choose Image -&amp;gt; Scale Image... from the menu.&lt;br /&gt;
# On the dialogue, either scale it to 256x256 px (if it was a 1024x1024 image originally), or just scale it down to 25% if it was something else. Click &#039;Scale&#039;. If the image looks too blurry, you can try 512 x 512.&lt;br /&gt;
# Choose File -&amp;gt; Export as..., change the file name to &#039;texturename_ed.jpg&#039; and click &#039;Export&#039;&lt;br /&gt;
# On the next pop-up, untick all the &#039;save data&#039; boxes except for &#039;Save color profile&#039; &#039;&#039;&#039;(ADVICE NEEDED)&#039;&#039;&#039;.  Click &#039;Export&#039;&lt;br /&gt;
&lt;br /&gt;
=== Create TDM materials file ===&lt;br /&gt;
# Within your FM folder, save all your images in the appropriate TDM folder structure.  Just follow the existing conventions.  For example your DDS files go into &#039;dds/textures/darkmod/stone/brick&#039; and your normal map and editor files go into &#039;textures/darkmod/stone/brick&#039;&lt;br /&gt;
# Create the materials file as follows below. Give it a name like &#039;mybricks.mtr&#039; and put it in the /materials folder in your FM. The material name as it appears in DarkRadiant appears at the top.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: &#039;texturename&#039; in this example is &#039;bricks_dirty&#039;&lt;br /&gt;
 textures/darkmod/stone/brick/bricks_dirty&lt;br /&gt;
 {&lt;br /&gt;
     stone&lt;br /&gt;
     description	&amp;quot;vine_friendly&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
     qer_editorimage textures/darkmod/stone/brick/bricks_dirty_ed&lt;br /&gt;
     diffusemap      textures/darkmod/stone/brick/bricks_dirty&lt;br /&gt;
     bumpmap         textures/darkmod/stone/brick/bricks_dirty_local&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=User:Frost_Salamander&amp;diff=33977</id>
		<title>User:Frost Salamander</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=User:Frost_Salamander&amp;diff=33977"/>
		<updated>2025-05-17T16:53:01Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: /* Create an inventory icon for an existing model from a DR screenshot */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== TDM Files and Contents ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Caption text&lt;br /&gt;
|-&lt;br /&gt;
! Content !! File path !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Skins || tdm_models_decls01.pk4\skins || skin files shipped with TDM&lt;br /&gt;
|-&lt;br /&gt;
| Script Constants|| tdm_base01.pk4\script\tdm_defs.script || constant values. Useful if you need to know the literal values for use in your scripts.&lt;br /&gt;
|-&lt;br /&gt;
| Script Objects|| tdm_base01.pk4\script || various script objects for entities.&lt;br /&gt;
|-&lt;br /&gt;
| tdm_ai_humanoid_newskel.def || tdm_ai_humanoid_undead01.pk4\def\tdm_ai_humanoid_newskel.def || Base class for all TDM humanoid entities&lt;br /&gt;
|-&lt;br /&gt;
| GUI Icons || tdm_gui01.pk4\dds\guis\assets\hud\ || HUD icons. e.g. loot, potions, etc&lt;br /&gt;
|-&lt;br /&gt;
| sound shaders || tdm_sound_ambient_decls01.pk4\sound || ambient environmental sound shaders&lt;br /&gt;
|-&lt;br /&gt;
| materials definitions || tdm_textures_base01.pk4\materials || base materials files &lt;br /&gt;
|-&lt;br /&gt;
| guard model materials || tdm_ai_humanoid_guards01.pk4 || guard materials and texture files &lt;br /&gt;
|-&lt;br /&gt;
| Stim types || tdm_base01.pk4/script/tdm_stim_response.script || &lt;br /&gt;
|-&lt;br /&gt;
| Readable textures || tdm_gui01.pk4/dds/guis/assets/readables || various parchment textures&lt;br /&gt;
|-&lt;br /&gt;
| Blueprint textures || tdm_models02.pk4 || textures/readables/blueprint01*&lt;br /&gt;
|-&lt;br /&gt;
| Light textures || tdm_textures_base01.pk4 || In both /lights and textures/lights&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Creating an Image Decal with Gimp ==&lt;br /&gt;
# Go to somewhere like pixabay.com and search for free images.  I usually filter by &#039;vector graphics&#039; (e.g. PNG) because it supports alpha channel which you&#039;ll need for decals.&lt;br /&gt;
# Once you find an image, download it.  I tend to get medium-sized versions (e.g. close to 1024 x 1024)&lt;br /&gt;
# Open the file in Gimp&lt;br /&gt;
# Scale the image to 1024x1024 pixels.&lt;br /&gt;
# export as TGA&lt;br /&gt;
&lt;br /&gt;
== Creating a Text Decal with Gimp ==&lt;br /&gt;
# Open Gimp - New -&amp;gt; &lt;br /&gt;
# Set image size to 1024 x 1024 (or something more rectangular like 1024 x 512)&lt;br /&gt;
# Click Advanced -&amp;gt; Fill with: transparency&lt;br /&gt;
# Add text layer&lt;br /&gt;
# When happy with text, right-click the text layer and &#039;merge down&#039; into alpha layer&lt;br /&gt;
# save and export as TGA.&lt;br /&gt;
# Create a materials file (.mtr) like so:&lt;br /&gt;
&lt;br /&gt;
  textures/darkmod/decals/signs/coronet&lt;br /&gt;
  {&lt;br /&gt;
  	DECAL_MACRO&lt;br /&gt;
  	noimpact&lt;br /&gt;
  	&lt;br /&gt;
  	{&lt;br /&gt;
  		blend blend&lt;br /&gt;
  		map textures/darkmod/decals/signs/coronet&lt;br /&gt;
  	}&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
== Create an inventory icon for an existing model from a DR screenshot ==&lt;br /&gt;
# In DarkRadiant, right-click and choose &#039;Create Entity...&#039; or &#039;Create Model...&#039; and choose the object you wish to use.&lt;br /&gt;
# in the preview window with the model showing, take a screenshot selection using something like the Windows Snipping Tool. Leave a centimeter or two of grey color around the object that we can convert to alpha transparency later.&lt;br /&gt;
# Save the screenshot as a JPEG somewhere on your local disk.&lt;br /&gt;
# Open the file with GIMP.&lt;br /&gt;
# From the menu, choose Layer -&amp;gt; Transparency -&amp;gt; Color to Alpha...&lt;br /&gt;
# A pop up will appear. Next to the Color bar there will be an eye dropper icon. This is the color picker.&lt;br /&gt;
# Click the color picker and then click the grey area that surrounds your image. Don&#039;t worry if it looks like it&#039;s already been converted to alpha (the grey squares). The grey squares should turn a lighter colour.&lt;br /&gt;
# Click OK&lt;br /&gt;
# TIP: If the image becomes transparent as well, this is because its color is not far off from the grey background.  Reduce the &#039;Opacity Threshold&#039; until the checkerboard pattern doesn&#039;t cover your image (try 0.1).&lt;br /&gt;
# Resize the image by clicking Image -&amp;gt; Scale Image... Make it 128 x 128 pixels. Click &#039;Scale&#039;&lt;br /&gt;
# Export as DDS by clicking File -&amp;gt; Export As... and type a file name that ends in .dds. Choose BC3 / DXT5 compression and don&#039;t bother with mipmaps.&lt;br /&gt;
# Add the .dds file to your FM folder under &#039;dds\guis\assets\hud\inventory_icons&#039; if you want them to be in the same folder as the stock icons.&lt;br /&gt;
&lt;br /&gt;
== Creating a material using existing images (e.g. from textures.com) using GIMP ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Written on May 28th, 2023 using GIMP 2.10.34&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This will describe how to create your own texture (material) using an image found on the internet.  I will use textures.com as an example.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ensure that the license for whatever source you use is appropriate for TDM (e.g. allows use in video games)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
We will end up with 3 image files and one materials file:&lt;br /&gt;
* diffuse map (the base image with colour details, etc)&lt;br /&gt;
* normal map (faked bump/dent data)&lt;br /&gt;
* DarkRadiant editor icon&lt;br /&gt;
&lt;br /&gt;
This doesn&#039;t cover creation of a specular map.  This isn&#039;t needed unless your material needs a shiny surface (e.g. metal or wet surfaces).&lt;br /&gt;
&lt;br /&gt;
=== Obtain your image ===&lt;br /&gt;
# Log into textures.com and find an image you like under the &#039;Regular Photos&#039; section (&#039;&#039;&#039;NOT&#039;&#039;&#039; &#039;Special Content&#039;).  Make sure it&#039;s seamless if it needs to be tiled/repeatable (e.g. for bricks or walls). If it&#039;s something like a door or window, it doesn&#039;t need to be seamless. There is normally a JPG format that that is close to or exactly 1024x1024 pixels. Download it.&lt;br /&gt;
&lt;br /&gt;
=== Open your Image in GIMP ===&lt;br /&gt;
The first thing you may see here is a pop-up asking if you want to convert the image to &#039;the built-in sRGB color profile&#039;. I&#039;m not sure the implications of doing this but just choose &#039;Convert&#039;. &#039;&#039;&#039;(ADVICE NEEDED)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Resize Image (if needed) ===&lt;br /&gt;
TDM standard resolution for textures is 1024 x 1024.  However it&#039;s possible to get away with 2048 x 2048 at the cost of file size and performance.&lt;br /&gt;
If you can&#039;t find a 1024 x 1024 image for whatever reason (say it&#039;s 4K instead), you can scale it down:&lt;br /&gt;
# With the image open in GIMP, click Image -&amp;gt; Scale Image...&lt;br /&gt;
# Set the width in &#039;Image Size&#039; in pixels to 1024.  Make sure the width and height are &#039;chained&#039; (the little link icon should be whole). The height will then scale down proportionately to match the width.&lt;br /&gt;
&lt;br /&gt;
=== Crop your Image ===&lt;br /&gt;
This is only needed if you don&#039;t intend to use the entire image as-is (e.g. if you want to cut a door or window out of an image).  Skip this section if that is not the case.&lt;br /&gt;
# With the image in GIMP, select the Crop Tool (Shift+C).&lt;br /&gt;
# Under the &#039;Tool Options&#039; tab, tick the box for &#039;Delete cropped pixels&#039;&lt;br /&gt;
# Using the crop tool select the area you want to keep on the image with your mouse, and press &#039;Enter&#039; when done.&lt;br /&gt;
&lt;br /&gt;
=== Create the Diffuse Map (DDS File) ===&lt;br /&gt;
# With the original or cropped image open in GIMP Choose File -&amp;gt; Export as...&lt;br /&gt;
# In the next popup, change the filename to &#039;texturename.dds&#039; and click &#039;Export&#039;. &lt;br /&gt;
# On the next pop-up, choose your compression format (see below) and select &#039;Generate mipmaps&#039;. Under &#039;Mipmap Options&#039; choose &#039;Filter&#039;: &#039;Kaiser&#039; for best quality. Click &#039;Export&#039;&lt;br /&gt;
  - Compression:&lt;br /&gt;
    - if your image contains an alpha channel, choose &#039;BC3 / DXT5&#039;&lt;br /&gt;
    - if your image does not contain an alpha channel, choose &#039;BC1 / DXT1&#039;&lt;br /&gt;
&lt;br /&gt;
=== Create the Normal Map (TGA File)===&lt;br /&gt;
Apart from creating the normal map, the point of the first few steps is to reduce the amount of &#039;noise&#039; in the image which can lead to a grainy appearance.&lt;br /&gt;
# With the original or cropped image open in GIMP, select Colors -&amp;gt; Desaturate -&amp;gt; Desaturate. Click &#039;OK&#039;&lt;br /&gt;
# Select Filters -&amp;gt; Blur -&amp;gt; Gaussian Blur.  Leave the defaults and click &#039;OK&#039;.&lt;br /&gt;
# Select Colors -&amp;gt; Curves and adjust the curve to &#039;wash out&#039; (i.e. brighten) the image to remove any noise detail.&lt;br /&gt;
# Select Filters -&amp;gt; Generic -&amp;gt; Normal Map..&lt;br /&gt;
# The image will change to a blueish colour and you will be able to see the &#039;bumps&#039;. The only thing I adjust here is the &#039;Scale&#039; property.  If it looks very grainy, just reduce the scale. For things like bricks, I use a value &amp;lt; 5 or else the finished texture will look very grainy in TDM.  For stuff like doors, a value of about 10 looks OK.&lt;br /&gt;
# After adjusting the scale, click &#039;OK&#039;&lt;br /&gt;
# Choose File -&amp;gt; Export as..., change the file name to &#039;texturename_local.tga&#039; and click &#039;Export&#039;&lt;br /&gt;
# On the next pop-up, untick &#039;RLE compression&#039; and leave &#039;Origin&#039; at &#039;Bottom left&#039;. Click &#039;Export&#039;. &#039;&#039;&#039;(ADVICE NEEDED)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Create the editor icon (JPG File) ===&lt;br /&gt;
# Since you&#039;ve modified the image, either close and re-open the image in GIMP, or go back into your Undo History and select the original image (or cropped image if it&#039;s been cropped).&lt;br /&gt;
# Choose Image -&amp;gt; Scale Image... from the menu.&lt;br /&gt;
# On the dialogue, either scale it to 256x256 px (if it was a 1024x1024 image originally), or just scale it down to 25% if it was something else. Click &#039;Scale&#039;. If the image looks too blurry, you can try 512 x 512.&lt;br /&gt;
# Choose File -&amp;gt; Export as..., change the file name to &#039;texturename_ed.jpg&#039; and click &#039;Export&#039;&lt;br /&gt;
# On the next pop-up, untick all the &#039;save data&#039; boxes except for &#039;Save color profile&#039; &#039;&#039;&#039;(ADVICE NEEDED)&#039;&#039;&#039;.  Click &#039;Export&#039;&lt;br /&gt;
&lt;br /&gt;
=== Create TDM materials file ===&lt;br /&gt;
# Within your FM folder, save all your images in the appropriate TDM folder structure.  Just follow the existing conventions.  For example your DDS files go into &#039;dds/textures/darkmod/stone/brick&#039; and your normal map and editor files go into &#039;textures/darkmod/stone/brick&#039;&lt;br /&gt;
# Create the materials file as follows below. Give it a name like &#039;mybricks.mtr&#039; and put it in the /materials folder in your FM. The material name as it appears in DarkRadiant appears at the top.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: &#039;texturename&#039; in this example is &#039;bricks_dirty&#039;&lt;br /&gt;
 textures/darkmod/stone/brick/bricks_dirty&lt;br /&gt;
 {&lt;br /&gt;
     stone&lt;br /&gt;
     description	&amp;quot;vine_friendly&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
     qer_editorimage textures/darkmod/stone/brick/bricks_dirty_ed&lt;br /&gt;
     diffusemap      textures/darkmod/stone/brick/bricks_dirty&lt;br /&gt;
     bumpmap         textures/darkmod/stone/brick/bricks_dirty_local&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=User:Frost_Salamander&amp;diff=33976</id>
		<title>User:Frost Salamander</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=User:Frost_Salamander&amp;diff=33976"/>
		<updated>2025-05-17T16:52:45Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: /* Create an inventory icon for an existing model from a DR screenshot */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== TDM Files and Contents ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Caption text&lt;br /&gt;
|-&lt;br /&gt;
! Content !! File path !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Skins || tdm_models_decls01.pk4\skins || skin files shipped with TDM&lt;br /&gt;
|-&lt;br /&gt;
| Script Constants|| tdm_base01.pk4\script\tdm_defs.script || constant values. Useful if you need to know the literal values for use in your scripts.&lt;br /&gt;
|-&lt;br /&gt;
| Script Objects|| tdm_base01.pk4\script || various script objects for entities.&lt;br /&gt;
|-&lt;br /&gt;
| tdm_ai_humanoid_newskel.def || tdm_ai_humanoid_undead01.pk4\def\tdm_ai_humanoid_newskel.def || Base class for all TDM humanoid entities&lt;br /&gt;
|-&lt;br /&gt;
| GUI Icons || tdm_gui01.pk4\dds\guis\assets\hud\ || HUD icons. e.g. loot, potions, etc&lt;br /&gt;
|-&lt;br /&gt;
| sound shaders || tdm_sound_ambient_decls01.pk4\sound || ambient environmental sound shaders&lt;br /&gt;
|-&lt;br /&gt;
| materials definitions || tdm_textures_base01.pk4\materials || base materials files &lt;br /&gt;
|-&lt;br /&gt;
| guard model materials || tdm_ai_humanoid_guards01.pk4 || guard materials and texture files &lt;br /&gt;
|-&lt;br /&gt;
| Stim types || tdm_base01.pk4/script/tdm_stim_response.script || &lt;br /&gt;
|-&lt;br /&gt;
| Readable textures || tdm_gui01.pk4/dds/guis/assets/readables || various parchment textures&lt;br /&gt;
|-&lt;br /&gt;
| Blueprint textures || tdm_models02.pk4 || textures/readables/blueprint01*&lt;br /&gt;
|-&lt;br /&gt;
| Light textures || tdm_textures_base01.pk4 || In both /lights and textures/lights&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Creating an Image Decal with Gimp ==&lt;br /&gt;
# Go to somewhere like pixabay.com and search for free images.  I usually filter by &#039;vector graphics&#039; (e.g. PNG) because it supports alpha channel which you&#039;ll need for decals.&lt;br /&gt;
# Once you find an image, download it.  I tend to get medium-sized versions (e.g. close to 1024 x 1024)&lt;br /&gt;
# Open the file in Gimp&lt;br /&gt;
# Scale the image to 1024x1024 pixels.&lt;br /&gt;
# export as TGA&lt;br /&gt;
&lt;br /&gt;
== Creating a Text Decal with Gimp ==&lt;br /&gt;
# Open Gimp - New -&amp;gt; &lt;br /&gt;
# Set image size to 1024 x 1024 (or something more rectangular like 1024 x 512)&lt;br /&gt;
# Click Advanced -&amp;gt; Fill with: transparency&lt;br /&gt;
# Add text layer&lt;br /&gt;
# When happy with text, right-click the text layer and &#039;merge down&#039; into alpha layer&lt;br /&gt;
# save and export as TGA.&lt;br /&gt;
# Create a materials file (.mtr) like so:&lt;br /&gt;
&lt;br /&gt;
  textures/darkmod/decals/signs/coronet&lt;br /&gt;
  {&lt;br /&gt;
  	DECAL_MACRO&lt;br /&gt;
  	noimpact&lt;br /&gt;
  	&lt;br /&gt;
  	{&lt;br /&gt;
  		blend blend&lt;br /&gt;
  		map textures/darkmod/decals/signs/coronet&lt;br /&gt;
  	}&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
== Create an inventory icon for an existing model from a DR screenshot ==&lt;br /&gt;
# In DarkRadiant, right-click and choose &#039;Create Entity...&#039; or &#039;Create Model...&#039; and choose the object you wish to use.&lt;br /&gt;
# in the preview window with the model showing, take a screenshot selection using something like the Windows Snipping Tool. Leave a centimeter or two of grey color around the object that we can convert to alpha transparency later.&lt;br /&gt;
# Save the screenshot as a JPEG somewhere on your local disk.&lt;br /&gt;
# Open the file with GIMP.&lt;br /&gt;
# From the menu, choose Layer -&amp;gt; Transparency -&amp;gt; Color to Alpha...&lt;br /&gt;
# A pop up will appear. Next to the Color bar there will be an eye dropper icon. This is the color picker.&lt;br /&gt;
# Click the color picker and then click the grey area that surrounds your image. Don&#039;t worry if it looks like it&#039;s already been converted to alpha (the grey squares). The grey squares should turn a lighter colour.&lt;br /&gt;
# Click OK&lt;br /&gt;
# TIP: If the image becomes transparent as well, this is because its color is not far off from the grey background.  Reduce the &#039;Opacity Threshold&#039; until the checkerboard pattern doesn&#039;t cover your image (try 0.1).&lt;br /&gt;
Resize the image by clicking Image -&amp;gt; Scale Image... Make it 128 x 128 pixels. Click &#039;Scale&#039;&lt;br /&gt;
# Export as DDS by clicking File -&amp;gt; Export As... and type a file name that ends in .dds. Choose BC3 / DXT5 compression and don&#039;t bother with mipmaps.&lt;br /&gt;
# Add the .dds file to your FM folder under &#039;dds\guis\assets\hud\inventory_icons&#039; if you want them to be in the same folder as the stock icons.&lt;br /&gt;
&lt;br /&gt;
== Creating a material using existing images (e.g. from textures.com) using GIMP ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Written on May 28th, 2023 using GIMP 2.10.34&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This will describe how to create your own texture (material) using an image found on the internet.  I will use textures.com as an example.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ensure that the license for whatever source you use is appropriate for TDM (e.g. allows use in video games)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
We will end up with 3 image files and one materials file:&lt;br /&gt;
* diffuse map (the base image with colour details, etc)&lt;br /&gt;
* normal map (faked bump/dent data)&lt;br /&gt;
* DarkRadiant editor icon&lt;br /&gt;
&lt;br /&gt;
This doesn&#039;t cover creation of a specular map.  This isn&#039;t needed unless your material needs a shiny surface (e.g. metal or wet surfaces).&lt;br /&gt;
&lt;br /&gt;
=== Obtain your image ===&lt;br /&gt;
# Log into textures.com and find an image you like under the &#039;Regular Photos&#039; section (&#039;&#039;&#039;NOT&#039;&#039;&#039; &#039;Special Content&#039;).  Make sure it&#039;s seamless if it needs to be tiled/repeatable (e.g. for bricks or walls). If it&#039;s something like a door or window, it doesn&#039;t need to be seamless. There is normally a JPG format that that is close to or exactly 1024x1024 pixels. Download it.&lt;br /&gt;
&lt;br /&gt;
=== Open your Image in GIMP ===&lt;br /&gt;
The first thing you may see here is a pop-up asking if you want to convert the image to &#039;the built-in sRGB color profile&#039;. I&#039;m not sure the implications of doing this but just choose &#039;Convert&#039;. &#039;&#039;&#039;(ADVICE NEEDED)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Resize Image (if needed) ===&lt;br /&gt;
TDM standard resolution for textures is 1024 x 1024.  However it&#039;s possible to get away with 2048 x 2048 at the cost of file size and performance.&lt;br /&gt;
If you can&#039;t find a 1024 x 1024 image for whatever reason (say it&#039;s 4K instead), you can scale it down:&lt;br /&gt;
# With the image open in GIMP, click Image -&amp;gt; Scale Image...&lt;br /&gt;
# Set the width in &#039;Image Size&#039; in pixels to 1024.  Make sure the width and height are &#039;chained&#039; (the little link icon should be whole). The height will then scale down proportionately to match the width.&lt;br /&gt;
&lt;br /&gt;
=== Crop your Image ===&lt;br /&gt;
This is only needed if you don&#039;t intend to use the entire image as-is (e.g. if you want to cut a door or window out of an image).  Skip this section if that is not the case.&lt;br /&gt;
# With the image in GIMP, select the Crop Tool (Shift+C).&lt;br /&gt;
# Under the &#039;Tool Options&#039; tab, tick the box for &#039;Delete cropped pixels&#039;&lt;br /&gt;
# Using the crop tool select the area you want to keep on the image with your mouse, and press &#039;Enter&#039; when done.&lt;br /&gt;
&lt;br /&gt;
=== Create the Diffuse Map (DDS File) ===&lt;br /&gt;
# With the original or cropped image open in GIMP Choose File -&amp;gt; Export as...&lt;br /&gt;
# In the next popup, change the filename to &#039;texturename.dds&#039; and click &#039;Export&#039;. &lt;br /&gt;
# On the next pop-up, choose your compression format (see below) and select &#039;Generate mipmaps&#039;. Under &#039;Mipmap Options&#039; choose &#039;Filter&#039;: &#039;Kaiser&#039; for best quality. Click &#039;Export&#039;&lt;br /&gt;
  - Compression:&lt;br /&gt;
    - if your image contains an alpha channel, choose &#039;BC3 / DXT5&#039;&lt;br /&gt;
    - if your image does not contain an alpha channel, choose &#039;BC1 / DXT1&#039;&lt;br /&gt;
&lt;br /&gt;
=== Create the Normal Map (TGA File)===&lt;br /&gt;
Apart from creating the normal map, the point of the first few steps is to reduce the amount of &#039;noise&#039; in the image which can lead to a grainy appearance.&lt;br /&gt;
# With the original or cropped image open in GIMP, select Colors -&amp;gt; Desaturate -&amp;gt; Desaturate. Click &#039;OK&#039;&lt;br /&gt;
# Select Filters -&amp;gt; Blur -&amp;gt; Gaussian Blur.  Leave the defaults and click &#039;OK&#039;.&lt;br /&gt;
# Select Colors -&amp;gt; Curves and adjust the curve to &#039;wash out&#039; (i.e. brighten) the image to remove any noise detail.&lt;br /&gt;
# Select Filters -&amp;gt; Generic -&amp;gt; Normal Map..&lt;br /&gt;
# The image will change to a blueish colour and you will be able to see the &#039;bumps&#039;. The only thing I adjust here is the &#039;Scale&#039; property.  If it looks very grainy, just reduce the scale. For things like bricks, I use a value &amp;lt; 5 or else the finished texture will look very grainy in TDM.  For stuff like doors, a value of about 10 looks OK.&lt;br /&gt;
# After adjusting the scale, click &#039;OK&#039;&lt;br /&gt;
# Choose File -&amp;gt; Export as..., change the file name to &#039;texturename_local.tga&#039; and click &#039;Export&#039;&lt;br /&gt;
# On the next pop-up, untick &#039;RLE compression&#039; and leave &#039;Origin&#039; at &#039;Bottom left&#039;. Click &#039;Export&#039;. &#039;&#039;&#039;(ADVICE NEEDED)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Create the editor icon (JPG File) ===&lt;br /&gt;
# Since you&#039;ve modified the image, either close and re-open the image in GIMP, or go back into your Undo History and select the original image (or cropped image if it&#039;s been cropped).&lt;br /&gt;
# Choose Image -&amp;gt; Scale Image... from the menu.&lt;br /&gt;
# On the dialogue, either scale it to 256x256 px (if it was a 1024x1024 image originally), or just scale it down to 25% if it was something else. Click &#039;Scale&#039;. If the image looks too blurry, you can try 512 x 512.&lt;br /&gt;
# Choose File -&amp;gt; Export as..., change the file name to &#039;texturename_ed.jpg&#039; and click &#039;Export&#039;&lt;br /&gt;
# On the next pop-up, untick all the &#039;save data&#039; boxes except for &#039;Save color profile&#039; &#039;&#039;&#039;(ADVICE NEEDED)&#039;&#039;&#039;.  Click &#039;Export&#039;&lt;br /&gt;
&lt;br /&gt;
=== Create TDM materials file ===&lt;br /&gt;
# Within your FM folder, save all your images in the appropriate TDM folder structure.  Just follow the existing conventions.  For example your DDS files go into &#039;dds/textures/darkmod/stone/brick&#039; and your normal map and editor files go into &#039;textures/darkmod/stone/brick&#039;&lt;br /&gt;
# Create the materials file as follows below. Give it a name like &#039;mybricks.mtr&#039; and put it in the /materials folder in your FM. The material name as it appears in DarkRadiant appears at the top.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: &#039;texturename&#039; in this example is &#039;bricks_dirty&#039;&lt;br /&gt;
 textures/darkmod/stone/brick/bricks_dirty&lt;br /&gt;
 {&lt;br /&gt;
     stone&lt;br /&gt;
     description	&amp;quot;vine_friendly&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
     qer_editorimage textures/darkmod/stone/brick/bricks_dirty_ed&lt;br /&gt;
     diffusemap      textures/darkmod/stone/brick/bricks_dirty&lt;br /&gt;
     bumpmap         textures/darkmod/stone/brick/bricks_dirty_local&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=User:Frost_Salamander&amp;diff=33975</id>
		<title>User:Frost Salamander</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=User:Frost_Salamander&amp;diff=33975"/>
		<updated>2025-05-17T16:34:15Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: /* Create an inventory icon for an existing model from a DR screenshot */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== TDM Files and Contents ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Caption text&lt;br /&gt;
|-&lt;br /&gt;
! Content !! File path !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Skins || tdm_models_decls01.pk4\skins || skin files shipped with TDM&lt;br /&gt;
|-&lt;br /&gt;
| Script Constants|| tdm_base01.pk4\script\tdm_defs.script || constant values. Useful if you need to know the literal values for use in your scripts.&lt;br /&gt;
|-&lt;br /&gt;
| Script Objects|| tdm_base01.pk4\script || various script objects for entities.&lt;br /&gt;
|-&lt;br /&gt;
| tdm_ai_humanoid_newskel.def || tdm_ai_humanoid_undead01.pk4\def\tdm_ai_humanoid_newskel.def || Base class for all TDM humanoid entities&lt;br /&gt;
|-&lt;br /&gt;
| GUI Icons || tdm_gui01.pk4\dds\guis\assets\hud\ || HUD icons. e.g. loot, potions, etc&lt;br /&gt;
|-&lt;br /&gt;
| sound shaders || tdm_sound_ambient_decls01.pk4\sound || ambient environmental sound shaders&lt;br /&gt;
|-&lt;br /&gt;
| materials definitions || tdm_textures_base01.pk4\materials || base materials files &lt;br /&gt;
|-&lt;br /&gt;
| guard model materials || tdm_ai_humanoid_guards01.pk4 || guard materials and texture files &lt;br /&gt;
|-&lt;br /&gt;
| Stim types || tdm_base01.pk4/script/tdm_stim_response.script || &lt;br /&gt;
|-&lt;br /&gt;
| Readable textures || tdm_gui01.pk4/dds/guis/assets/readables || various parchment textures&lt;br /&gt;
|-&lt;br /&gt;
| Blueprint textures || tdm_models02.pk4 || textures/readables/blueprint01*&lt;br /&gt;
|-&lt;br /&gt;
| Light textures || tdm_textures_base01.pk4 || In both /lights and textures/lights&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Creating an Image Decal with Gimp ==&lt;br /&gt;
# Go to somewhere like pixabay.com and search for free images.  I usually filter by &#039;vector graphics&#039; (e.g. PNG) because it supports alpha channel which you&#039;ll need for decals.&lt;br /&gt;
# Once you find an image, download it.  I tend to get medium-sized versions (e.g. close to 1024 x 1024)&lt;br /&gt;
# Open the file in Gimp&lt;br /&gt;
# Scale the image to 1024x1024 pixels.&lt;br /&gt;
# export as TGA&lt;br /&gt;
&lt;br /&gt;
== Creating a Text Decal with Gimp ==&lt;br /&gt;
# Open Gimp - New -&amp;gt; &lt;br /&gt;
# Set image size to 1024 x 1024 (or something more rectangular like 1024 x 512)&lt;br /&gt;
# Click Advanced -&amp;gt; Fill with: transparency&lt;br /&gt;
# Add text layer&lt;br /&gt;
# When happy with text, right-click the text layer and &#039;merge down&#039; into alpha layer&lt;br /&gt;
# save and export as TGA.&lt;br /&gt;
# Create a materials file (.mtr) like so:&lt;br /&gt;
&lt;br /&gt;
  textures/darkmod/decals/signs/coronet&lt;br /&gt;
  {&lt;br /&gt;
  	DECAL_MACRO&lt;br /&gt;
  	noimpact&lt;br /&gt;
  	&lt;br /&gt;
  	{&lt;br /&gt;
  		blend blend&lt;br /&gt;
  		map textures/darkmod/decals/signs/coronet&lt;br /&gt;
  	}&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
== Create an inventory icon for an existing model from a DR screenshot ==&lt;br /&gt;
# In DarkRadiant, right-click and choose &#039;Create Entity...&#039; or &#039;Create Model...&#039; and choose the object you wish to use.&lt;br /&gt;
# in the preview window with the model showing, take a screenshot selection using something like the Windows Snipping Tool. Leave a centimeter or two of grey color around the object that we can convert to alpha transparency later.&lt;br /&gt;
# Save the screenshot as a JPEG somewhere on your local disk.&lt;br /&gt;
# Open the file with GIMP.&lt;br /&gt;
# From the menu, choose Layer -&amp;gt; Transparency -&amp;gt; Color to Alpha...&lt;br /&gt;
# A pop up will appear. Next to the Color bar there will be an eye dropper icon. This is the color picker.&lt;br /&gt;
# Click the color picker and then click the grey area that surrounds your image. Don&#039;t worry if it looks like it&#039;s already been converted to alpha (the grey squares). The grey squares should turn a lighter colour.&lt;br /&gt;
# Click OK&lt;br /&gt;
# Resize the image by clicking Image -&amp;gt; Scale Image... Make it 128 x 128 pixels. Click &#039;Scale&#039;&lt;br /&gt;
# Export as DDS by clicking File -&amp;gt; Export As... and type a file name that ends in .dds. Choose BC3 / DXT5 compression and don&#039;t bother with mipmaps.&lt;br /&gt;
# Add the .dds file to your FM folder under &#039;dds\guis\assets\hud\inventory_icons&#039; if you want them to be in the same folder as the stock icons.&lt;br /&gt;
&lt;br /&gt;
== Creating a material using existing images (e.g. from textures.com) using GIMP ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Written on May 28th, 2023 using GIMP 2.10.34&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This will describe how to create your own texture (material) using an image found on the internet.  I will use textures.com as an example.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ensure that the license for whatever source you use is appropriate for TDM (e.g. allows use in video games)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
We will end up with 3 image files and one materials file:&lt;br /&gt;
* diffuse map (the base image with colour details, etc)&lt;br /&gt;
* normal map (faked bump/dent data)&lt;br /&gt;
* DarkRadiant editor icon&lt;br /&gt;
&lt;br /&gt;
This doesn&#039;t cover creation of a specular map.  This isn&#039;t needed unless your material needs a shiny surface (e.g. metal or wet surfaces).&lt;br /&gt;
&lt;br /&gt;
=== Obtain your image ===&lt;br /&gt;
# Log into textures.com and find an image you like under the &#039;Regular Photos&#039; section (&#039;&#039;&#039;NOT&#039;&#039;&#039; &#039;Special Content&#039;).  Make sure it&#039;s seamless if it needs to be tiled/repeatable (e.g. for bricks or walls). If it&#039;s something like a door or window, it doesn&#039;t need to be seamless. There is normally a JPG format that that is close to or exactly 1024x1024 pixels. Download it.&lt;br /&gt;
&lt;br /&gt;
=== Open your Image in GIMP ===&lt;br /&gt;
The first thing you may see here is a pop-up asking if you want to convert the image to &#039;the built-in sRGB color profile&#039;. I&#039;m not sure the implications of doing this but just choose &#039;Convert&#039;. &#039;&#039;&#039;(ADVICE NEEDED)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Resize Image (if needed) ===&lt;br /&gt;
TDM standard resolution for textures is 1024 x 1024.  However it&#039;s possible to get away with 2048 x 2048 at the cost of file size and performance.&lt;br /&gt;
If you can&#039;t find a 1024 x 1024 image for whatever reason (say it&#039;s 4K instead), you can scale it down:&lt;br /&gt;
# With the image open in GIMP, click Image -&amp;gt; Scale Image...&lt;br /&gt;
# Set the width in &#039;Image Size&#039; in pixels to 1024.  Make sure the width and height are &#039;chained&#039; (the little link icon should be whole). The height will then scale down proportionately to match the width.&lt;br /&gt;
&lt;br /&gt;
=== Crop your Image ===&lt;br /&gt;
This is only needed if you don&#039;t intend to use the entire image as-is (e.g. if you want to cut a door or window out of an image).  Skip this section if that is not the case.&lt;br /&gt;
# With the image in GIMP, select the Crop Tool (Shift+C).&lt;br /&gt;
# Under the &#039;Tool Options&#039; tab, tick the box for &#039;Delete cropped pixels&#039;&lt;br /&gt;
# Using the crop tool select the area you want to keep on the image with your mouse, and press &#039;Enter&#039; when done.&lt;br /&gt;
&lt;br /&gt;
=== Create the Diffuse Map (DDS File) ===&lt;br /&gt;
# With the original or cropped image open in GIMP Choose File -&amp;gt; Export as...&lt;br /&gt;
# In the next popup, change the filename to &#039;texturename.dds&#039; and click &#039;Export&#039;. &lt;br /&gt;
# On the next pop-up, choose your compression format (see below) and select &#039;Generate mipmaps&#039;. Under &#039;Mipmap Options&#039; choose &#039;Filter&#039;: &#039;Kaiser&#039; for best quality. Click &#039;Export&#039;&lt;br /&gt;
  - Compression:&lt;br /&gt;
    - if your image contains an alpha channel, choose &#039;BC3 / DXT5&#039;&lt;br /&gt;
    - if your image does not contain an alpha channel, choose &#039;BC1 / DXT1&#039;&lt;br /&gt;
&lt;br /&gt;
=== Create the Normal Map (TGA File)===&lt;br /&gt;
Apart from creating the normal map, the point of the first few steps is to reduce the amount of &#039;noise&#039; in the image which can lead to a grainy appearance.&lt;br /&gt;
# With the original or cropped image open in GIMP, select Colors -&amp;gt; Desaturate -&amp;gt; Desaturate. Click &#039;OK&#039;&lt;br /&gt;
# Select Filters -&amp;gt; Blur -&amp;gt; Gaussian Blur.  Leave the defaults and click &#039;OK&#039;.&lt;br /&gt;
# Select Colors -&amp;gt; Curves and adjust the curve to &#039;wash out&#039; (i.e. brighten) the image to remove any noise detail.&lt;br /&gt;
# Select Filters -&amp;gt; Generic -&amp;gt; Normal Map..&lt;br /&gt;
# The image will change to a blueish colour and you will be able to see the &#039;bumps&#039;. The only thing I adjust here is the &#039;Scale&#039; property.  If it looks very grainy, just reduce the scale. For things like bricks, I use a value &amp;lt; 5 or else the finished texture will look very grainy in TDM.  For stuff like doors, a value of about 10 looks OK.&lt;br /&gt;
# After adjusting the scale, click &#039;OK&#039;&lt;br /&gt;
# Choose File -&amp;gt; Export as..., change the file name to &#039;texturename_local.tga&#039; and click &#039;Export&#039;&lt;br /&gt;
# On the next pop-up, untick &#039;RLE compression&#039; and leave &#039;Origin&#039; at &#039;Bottom left&#039;. Click &#039;Export&#039;. &#039;&#039;&#039;(ADVICE NEEDED)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Create the editor icon (JPG File) ===&lt;br /&gt;
# Since you&#039;ve modified the image, either close and re-open the image in GIMP, or go back into your Undo History and select the original image (or cropped image if it&#039;s been cropped).&lt;br /&gt;
# Choose Image -&amp;gt; Scale Image... from the menu.&lt;br /&gt;
# On the dialogue, either scale it to 256x256 px (if it was a 1024x1024 image originally), or just scale it down to 25% if it was something else. Click &#039;Scale&#039;. If the image looks too blurry, you can try 512 x 512.&lt;br /&gt;
# Choose File -&amp;gt; Export as..., change the file name to &#039;texturename_ed.jpg&#039; and click &#039;Export&#039;&lt;br /&gt;
# On the next pop-up, untick all the &#039;save data&#039; boxes except for &#039;Save color profile&#039; &#039;&#039;&#039;(ADVICE NEEDED)&#039;&#039;&#039;.  Click &#039;Export&#039;&lt;br /&gt;
&lt;br /&gt;
=== Create TDM materials file ===&lt;br /&gt;
# Within your FM folder, save all your images in the appropriate TDM folder structure.  Just follow the existing conventions.  For example your DDS files go into &#039;dds/textures/darkmod/stone/brick&#039; and your normal map and editor files go into &#039;textures/darkmod/stone/brick&#039;&lt;br /&gt;
# Create the materials file as follows below. Give it a name like &#039;mybricks.mtr&#039; and put it in the /materials folder in your FM. The material name as it appears in DarkRadiant appears at the top.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: &#039;texturename&#039; in this example is &#039;bricks_dirty&#039;&lt;br /&gt;
 textures/darkmod/stone/brick/bricks_dirty&lt;br /&gt;
 {&lt;br /&gt;
     stone&lt;br /&gt;
     description	&amp;quot;vine_friendly&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
     qer_editorimage textures/darkmod/stone/brick/bricks_dirty_ed&lt;br /&gt;
     diffusemap      textures/darkmod/stone/brick/bricks_dirty&lt;br /&gt;
     bumpmap         textures/darkmod/stone/brick/bricks_dirty_local&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=Attaching_Props_to_AI&amp;diff=33974</id>
		<title>Attaching Props to AI</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=Attaching_Props_to_AI&amp;diff=33974"/>
		<updated>2025-05-13T19:42:44Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: /* Belt Objects - Keys */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Attaching things to AI is an important way to make your AI unique.  &lt;br /&gt;
&lt;br /&gt;
There are two ways to attach things (hereafter referred to as &#039;props&#039;) to AI.  Each has its strengths and weaknesses.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;To attach working weapons and heads see [[Adding Heads and Weapons to AI]]&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Using Def_Attach ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Benefits:&#039;&#039;&#039;  The mapper can easily attach pre-existing prop entities; no fiddling with positions or rotations.  More importantly, def_attached entities often adjusts AI animations appropriately (eg, def_attaching a torch automatically makes the AI use the &#039;torch&#039; animations).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Weaknesses:&#039;&#039;&#039; It is time-consuming to make prop entities that don&#039;t already exist.  Def_attached objects will not be visible in DR.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Each AI has a set of pre-determined coordinates (attachment points).  The mapper can attach things to these points by using the following spawnargs in an AI&#039;s entity window:&lt;br /&gt;
&lt;br /&gt;
 def_attach5       [entity name]&lt;br /&gt;
 pos_attach5       [attachment point name]&lt;br /&gt;
&lt;br /&gt;
The number is arbitrary.  As long as both lines have the same number, you could use 999.  Best to stay away from numbers 1-5, however, as some AI come with default props (pauldrons, weapons, etc), and you could overwrite them.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[entity name]&#039;&#039;&#039; is the entity that you want to attach, like &amp;quot;atdm:prop_torch_gothic_on&amp;quot;.  You can find a list of preset attachable objects in prop_items.def and prop_wearable_items.def.  Or see the quick list below.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[attachment point name]&#039;&#039;&#039; is the name of the predefined point you want to attach the object to, like &amp;quot;hand_l&amp;quot;.  See the list of preset attachment points below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This image indicates some common attachment points.  You can cut and paste the names below:&lt;br /&gt;
&lt;br /&gt;
http://www.mindplaces.com/save/attachment_points.jpg&lt;br /&gt;
&lt;br /&gt;
1.  &#039;&#039;&#039;&amp;quot;hip_sheath_l&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is designed for sheathed weapons on the hip.&lt;br /&gt;
&lt;br /&gt;
2.  &#039;&#039;&#039;&amp;quot;hand_l&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The left hand, used for torches, bottles, etc.  You can attach a weapon to this hand but AI will not attack with it.&lt;br /&gt;
&lt;br /&gt;
3.  &#039;&#039;&#039;&amp;quot;belt_back_right&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is on the back of the belt on the right hand side, designed for purses, keys, or other things players may want to pickpocket.&lt;br /&gt;
&lt;br /&gt;
4.  &#039;&#039;&#039;&amp;quot;hand_r&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The right hand.  Generally reserved for weapon use.&lt;br /&gt;
&lt;br /&gt;
5.  &#039;&#039;&#039;&amp;quot;slung_across_back_rl&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is primarily used for weapons worn on the back, like hammers or bows.&lt;br /&gt;
&lt;br /&gt;
=== List of Attachable Objects ===&lt;br /&gt;
The following are prop entities already created for def_attaching.  After you select one and copy its spawnargs into the AI&#039;s entity window in DR, you may need to change the &#039;&#039;attach&#039;&#039; number to something unique.&lt;br /&gt;
&lt;br /&gt;
For information on making new attachment points, or positioning new entities, see [[Attachment Positions]].&lt;br /&gt;
&lt;br /&gt;
==== Hand Objects - Lights ====&lt;br /&gt;
&lt;br /&gt;
 def_attach5        atdm:prop_torch_on         &#039;&#039;// a regular, lit torch&#039;&#039;&lt;br /&gt;
 pos_attach5        hand_l&lt;br /&gt;
&lt;br /&gt;
 def_attach5        atdm:prop_torch_gothic_on  &#039;&#039;// a lit torch with a cage&#039;&#039;&lt;br /&gt;
 pos_attach5        hand_l&lt;br /&gt;
&lt;br /&gt;
 def_attach5        atdm:prop_lantern_on       &#039;&#039;// a brass oil lantern&#039;&#039;&lt;br /&gt;
 pos_attach5        hand_l&lt;br /&gt;
&lt;br /&gt;
 def_attach5        atdm:prop_lantern02_on     &#039;&#039;// an alternate metal oil lantern&#039;&#039;&lt;br /&gt;
 pos_attach5        hand_l&lt;br /&gt;
&lt;br /&gt;
==== Hand Objects - Other Than Lights ====&lt;br /&gt;
&lt;br /&gt;
 def_attach5        atdm:prop_halberd         &#039;&#039;// a long halberd; decorative only--dropped when AI alerted&#039;&#039;&lt;br /&gt;
 pos_attach5        hand_l&lt;br /&gt;
&lt;br /&gt;
 def_attach5        atdm:prop_winebottle      &#039;&#039;// AI holds bottle and occasionally drinks from it&#039;&#039;&lt;br /&gt;
 pos_attach5        hand_l&lt;br /&gt;
&lt;br /&gt;
 def_attach5        atdm:prop_cards           &#039;&#039;// AI holds hand of cards and occasionally draws another one.  For use when sitting.&#039;&#039;&lt;br /&gt;
 pos_attach5        hand_l&lt;br /&gt;
&lt;br /&gt;
==== Belt Objects ====&lt;br /&gt;
&lt;br /&gt;
 def_attach6        atdm:prop_lootbag          &#039;&#039;// used for loot&#039;&#039;&lt;br /&gt;
 pos_attach6        belt_back_right&lt;br /&gt;
&lt;br /&gt;
 def_attach6        atdm:prop_belt_pouch       &#039;&#039;// used for decoration&#039;&#039;&lt;br /&gt;
 pos_attach6        belt_back_right&lt;br /&gt;
&lt;br /&gt;
 def_attach6        atdm:prop_potion_healing  &#039;&#039;// for pick-pocketing; AI will not use it.&#039;&#039;&lt;br /&gt;
 pos_attach6        belt_back_right&lt;br /&gt;
&lt;br /&gt;
 def_attach6        atdm:prop_smithyhammer    &#039;&#039;// a simple work hammer, decorative only at the moment&#039;&#039;&lt;br /&gt;
 pos_attach6        hip_sheath_l&lt;br /&gt;
&lt;br /&gt;
==== Belt Objects - Keys ====&lt;br /&gt;
&#039;&#039;Example of key attachment by bikerdude&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 def_attach6                atdm:prop_key_simple&lt;br /&gt;
 pos_attach6                belt_back_right&lt;br /&gt;
 name_attach6               gate_key&lt;br /&gt;
 set inv_name on gate_key   gate key          &#039;&#039;// name shown in inventory&#039;&#039;&lt;br /&gt;
 set name on gate_key       gate_key&lt;br /&gt;
&lt;br /&gt;
More info can be found on the following thread - http://forums.thedarkmod.com/topic/13084-ai-attach-keys/&lt;br /&gt;
&lt;br /&gt;
Other attachable key styles include:&lt;br /&gt;
 atdm:prop_key_gold&lt;br /&gt;
 atdm:prop_silverkey&lt;br /&gt;
 atdm:prop_key_fancy01&lt;br /&gt;
 atdm:prop_key_padlock&lt;br /&gt;
&lt;br /&gt;
=== Changing the Behavior of Def-Attached Props ===&lt;br /&gt;
&#039;&#039;by Geep&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
As with the Keys example above, you have to name the prop:&lt;br /&gt;
 name_attach[number]   [my_prop_name]   &#039;&#039;where [number] is the def_attach number and my_prop_name contains no spaces&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Then reference that name:&lt;br /&gt;
 set [spawnarg] on [my_prop_name]   [value]&lt;br /&gt;
&lt;br /&gt;
For instance:&lt;br /&gt;
 set frob_distance on gate_key      100&lt;br /&gt;
&lt;br /&gt;
This can be done not just for props you attach, but for those pre-provisioned with an AI. For example, consider an archer whose quiver comes with 1 frobable arrow. Suppose you wish to override the default frob behavior. If you examine the archer with the Entity Inspector (including inherited items), you will find that there&#039;s an arrow on def_attach3, but it is unnamed. Fix that:&lt;br /&gt;
 name_attach3       quiver_arrow&lt;br /&gt;
Then, to replace the default frob action with a function FrobbedQuiverArrow you defined in &amp;lt;fm&amp;gt;.script:&lt;br /&gt;
 set frob_action_script on quiver_arrow     FrobbedQuiverArrow&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Suggested by Destined&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you want to instead use Stimulus/Response to affect behavior, note that props that are def_attached are not visible as selectable objects in DR. So the usual direct method of using the S/R Editor is not possible.&lt;br /&gt;
&lt;br /&gt;
Instead, create all the S/R spawnargs manually. The easiest way to do that is create a dummy entity and, with it selected, set up the response effects you want with the S/R Editor. Once you have generated all the spawnargs you need, apply each to your AI as:&lt;br /&gt;
 set [S/R spawnarg] on [my_prop_name]   [S/R value]   &#039;&#039;where [my_prop_name] might be &amp;quot;quiver_arrow&amp;quot; from above&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If there is any problem when overriding a behavior for an existing prop, a safe bet is to write a new definition. Thus, in our arrow example, copy the definition of atdm:prop_quiver_arrow to a new definition file, rename the definition to a unique name (e.g. &amp;quot;atdm:prop_quiver_arrow_special&amp;quot;). Again, use a dummy entity to create the S/R spawnargs. Then add those spawnargs to the definition, and change the spawnarg def_attach_3 on the AI to the new name.&lt;br /&gt;
&lt;br /&gt;
This latter alternative is especially useful if you want this response on multiple AI: just set up the S/R spawnargs once, then easily give the special arrow to various AI by changing the def_attach_3 spawnarg.&lt;br /&gt;
&lt;br /&gt;
=== Difficulty Levels ===&lt;br /&gt;
&#039;&#039;by Spooks, [https://forums.thedarkmod.com/index.php?/topic/9082-newbie-darkradiant-questions/&amp;amp;do=findComment&amp;amp;comment=471432 2022 forum post]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[https://forums.thedarkmod.com/index.php?/topic/9082-newbie-darkradiant-questions/page/264/&amp;amp;tab=comments#comment-387803 Traditionally], it was thought you cannot directly vary the presence of a def_attached item, like a key, by Difficulty Level. Specifically, using diff_x_nospawn doesn&#039;t work, because the def_attached item is automatically spawned when the AI is spawned, and then it is too late for spawn prevention with diff_x_nospawn. (The recommended work-around was to clone your AI, then make them differ in their diff_n_nospawn spawnargs and their attached items.)&lt;br /&gt;
&lt;br /&gt;
However, it turns out there is a way to conditionally-spawn the def_attached item &#039;&#039;after&#039;&#039; the AI is spawned: use diff_x_change_n and diff_x_arg_n. As an example, consider an AI carrying a grey steel key on its belt. The AI would typically have spawnargs like:&lt;br /&gt;
&lt;br /&gt;
  def_attach6                atdm:prop_key_simple_steel&lt;br /&gt;
  name_attach6               test_key&lt;br /&gt;
  pos_attach6                belt_back_right&lt;br /&gt;
  set inv_name on test_key   A Key For Testing&lt;br /&gt;
  set name on test_key       test_key&lt;br /&gt;
&lt;br /&gt;
Now, let&#039;s redo it, so the key is only present on the easiest difficulty (diff_0). First, and required to make this work, &#039;&#039;&#039;DON&#039;T&#039;&#039;&#039; have present (even blank or defaulted) any unconditional spawnargs related to the item we want conditional, e.g, all of those spawnargs in our example above. Instead, each line above becomes a pair of spawnargs, of form diff_0_change_n and diff_0_arg_n:&lt;br /&gt;
&lt;br /&gt;
 diff_0_change_0  def_attach6&lt;br /&gt;
 diff_0_arg_0     atdm:prop_key_simple_steel&lt;br /&gt;
 &lt;br /&gt;
 diff_0_change_1  name_attach6&lt;br /&gt;
 diff_0_arg_1     test_key&lt;br /&gt;
 &lt;br /&gt;
 diff_0_change_2  pos_attach6&lt;br /&gt;
 diff_0_arg_2     belt_back_right&lt;br /&gt;
 &lt;br /&gt;
 diff_0_change_3  set inv_name on test_key&lt;br /&gt;
 diff_0_arg_3     A Key For Testing&lt;br /&gt;
 &lt;br /&gt;
 diff_0_change_4  set name on test_key&lt;br /&gt;
 diff_0_arg_4     test_key&lt;br /&gt;
&lt;br /&gt;
== Binding ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Benefits:&#039;&#039;&#039; You can bind any object to an AI, so it is a great deal more flexible.  You can also see and position the object in DR.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Weaknesses:&#039;&#039;&#039; Bound objects cannot affect AI animations.  You must adjust each object individually. An AI can&#039;t use a bound key to open locked doors (but see [[Doors]] for a workaround).&lt;br /&gt;
&lt;br /&gt;
See [[BindToJoint]] and [[Attaching Items]] for more info on using bind.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
[[Def attach]] applied to non-AI entities, such as combined light sources.&lt;br /&gt;
{{tutorial-ai}}&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=Setting_Reverb_Data_of_Rooms_(EAX)&amp;diff=33970</id>
		<title>Setting Reverb Data of Rooms (EAX)</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=Setting_Reverb_Data_of_Rooms_(EAX)&amp;diff=33970"/>
		<updated>2025-05-10T14:50:28Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: /* Preset Values */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
This document will attempt to explain how to set the new EFX settings in your rooms when mapping.&lt;br /&gt;
&lt;br /&gt;
Previously these settings were known as EAX settings, and required EAX 4.0-compatible sound card.&lt;br /&gt;
In TDM 2.06, EAX technology was completely replaced with OpenAL EFX, which is now processed in software (by [https://github.com/kcat/openal-soft openal-soft]) without any requirements on sound card.&lt;br /&gt;
&lt;br /&gt;
= General =&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
&lt;br /&gt;
EFX for a fan mission can be configured with or without a configuration file.  However, fileless configuration is only supported for [[Setting_Reverb_Data_of_Rooms_(EAX)#Presets_(Version_2)|EFX presets]].&lt;br /&gt;
&lt;br /&gt;
== EFX file ==&lt;br /&gt;
The EFX info for a map should be stored in the file &amp;quot;&amp;lt;tt&amp;gt;efxs/&amp;lt;mapname&amp;gt;.efx&amp;lt;/tt&amp;gt;&amp;quot;, where &amp;lt;mapname&amp;gt; is the name of your .map file (without extension).&lt;br /&gt;
&lt;br /&gt;
In order to check that you have put the file into right location, start your mission in game.&lt;br /&gt;
If TDM manages to load your efx file, then you will see the following message in console:&lt;br /&gt;
 sound: found efxs/&amp;lt;mapname&amp;gt;.efx&lt;br /&gt;
If you failed something, then you will see a bit different message there:&lt;br /&gt;
 sound: missing efxs/&amp;lt;mapname&amp;gt;.efx&lt;br /&gt;
In both cases some additional diagnostic messages can be present nearby.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; you must enable &amp;quot;&amp;lt;tt&amp;gt;OpenAL EFX&amp;lt;/tt&amp;gt;&amp;quot; in sound settings in the main menu, otherwise TDM won&#039;t even try to load the efx file.&lt;br /&gt;
&lt;br /&gt;
It is a plain text file, so you can open it up in your text editor of choice.&lt;br /&gt;
&lt;br /&gt;
Any EFX file must start with a header which specifies its &#039;&#039;&#039;version&#039;&#039;&#039;:&lt;br /&gt;
 Version 2&lt;br /&gt;
If you forget this line, then your EFX file will &#039;&#039;&#039;not&#039;&#039;&#039; be loaded.&lt;br /&gt;
The following versions are supported:&lt;br /&gt;
* &amp;lt;tt&amp;gt;Version 1&amp;lt;/tt&amp;gt; was supported by TDM from the very beginning. It uses some non-standard terms and quantities, which makes it hard to work with.&lt;br /&gt;
* &amp;lt;tt&amp;gt;Version 2&amp;lt;/tt&amp;gt; was added in TDM 2.07. It uses the parameters from OpenAL EFX and supports a lot of presets. &#039;&#039;&#039;Recommended for all new missions.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The rest of the file consists of separate blocks, one for each &amp;quot;reverb zone&amp;quot;.&lt;br /&gt;
Each block must start with &amp;lt;tt&amp;gt;reverb&amp;lt;/tt&amp;gt; keyword for Version 1 definitions, and &amp;lt;tt&amp;gt;eaxreverb&amp;lt;/tt&amp;gt; keyword for Version 2 definitions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here is an example of such block from mars_city1.efx of the original Doom 3 game (Version 1):&lt;br /&gt;
&lt;br /&gt;
 // reverb maintenance&lt;br /&gt;
 reverb &amp;quot;maintenance&amp;quot; {&lt;br /&gt;
  &amp;quot;environment&amp;quot; 26&lt;br /&gt;
  &amp;quot;environment size&amp;quot; 5.0670&lt;br /&gt;
  &amp;quot;environment diffusion&amp;quot; 0.6030&lt;br /&gt;
  &amp;quot;room&amp;quot; -411&lt;br /&gt;
  &amp;quot;room hf&amp;quot; -685&lt;br /&gt;
  &amp;quot;room lf&amp;quot; 0&lt;br /&gt;
  &amp;quot;decay time&amp;quot; 1.7360&lt;br /&gt;
  &amp;quot;decay hf ratio&amp;quot; 0.8030&lt;br /&gt;
  &amp;quot;decay lf ratio&amp;quot; 1.0000&lt;br /&gt;
  &amp;quot;reflections&amp;quot; 96&lt;br /&gt;
  &amp;quot;reflections delay&amp;quot; 0.0080&lt;br /&gt;
  &amp;quot;reflections pan&amp;quot; 0.0000 0.0000 0.0000&lt;br /&gt;
  &amp;quot;reverb&amp;quot; 27&lt;br /&gt;
  &amp;quot;reverb delay&amp;quot; 0.0050&lt;br /&gt;
  &amp;quot;reverb pan&amp;quot; 0.0000 0.0000 0.0000&lt;br /&gt;
  &amp;quot;echo time&amp;quot; 0.0750&lt;br /&gt;
  &amp;quot;echo depth&amp;quot; 1.0000&lt;br /&gt;
  &amp;quot;modulation time&amp;quot; 0.2500&lt;br /&gt;
  &amp;quot;modulation depth&amp;quot; 0.0000&lt;br /&gt;
  &amp;quot;air absorption hf&amp;quot; -5.0000&lt;br /&gt;
  &amp;quot;hf reference&amp;quot; 5000.0000&lt;br /&gt;
  &amp;quot;lf reference&amp;quot; 250.0000&lt;br /&gt;
  &amp;quot;room rolloff factor&amp;quot; 0.0000&lt;br /&gt;
  &amp;quot;flags&amp;quot; 56&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And here is an artificial example of Version 2 definitions:&lt;br /&gt;
&lt;br /&gt;
  eaxreverb &amp;quot;myweirdstreets&amp;quot; {&lt;br /&gt;
    reflections_gain 0.5&lt;br /&gt;
    reflections_delay 0.0050&lt;br /&gt;
    late_reverb_gain 2.5&lt;br /&gt;
    late_reverb_delay 0.050&lt;br /&gt;
    echo_time 0.25&lt;br /&gt;
    echo_depth 0.9000&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
What does all this mean? &lt;br /&gt;
&lt;br /&gt;
There is a lot of sound design stuff that one could make guesses at if you&#039;ve ever used a reverb plugin in any sort of sound editing program. hf = high frequency, lf = low frequency, etc.&lt;br /&gt;
&lt;br /&gt;
A proper explanation of the parameters is given below.&lt;br /&gt;
&lt;br /&gt;
== Locations ==&lt;br /&gt;
Each reverb zone definition starts with a line which specifies to which location it must be applied:&lt;br /&gt;
&lt;br /&gt;
 reverb &amp;quot;&amp;lt;name of the location area you want to apply this to&amp;gt;&amp;quot;&lt;br /&gt;
 {&lt;br /&gt;
     //... (settings)&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Information about locations and how to set them up is available in another article: [[Location Settings #The Location Entities]].&lt;br /&gt;
Reverb zones use exactly the same locations as the ones which are used to specify per-area ambient sounds.&lt;br /&gt;
You should name every info_location entity, i.e. provide a &amp;quot;&amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt;&amp;quot; spawnarg for it. This is the name used in reverb zone definitions.&lt;br /&gt;
&lt;br /&gt;
As of TDM 2.06, you can&#039;t use capital letters in the name of your location entity or reverb zone. This may or may not change in the future.&lt;br /&gt;
&lt;br /&gt;
Here is an example of an entity which defines &amp;quot;canal_tunnel&amp;quot; location:&lt;br /&gt;
&lt;br /&gt;
 //======================= from volta_v1.map ====================&lt;br /&gt;
 // entity 3532&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;classname&amp;quot; &amp;quot;info_location&amp;quot;&lt;br /&gt;
   &amp;quot;name&amp;quot; &amp;quot;canal_tunnel&amp;quot;             //this is the name used&lt;br /&gt;
   &amp;quot;ambient&amp;quot; &amp;quot;snd_streets&amp;quot;&lt;br /&gt;
   &amp;quot;ambient_light&amp;quot; &amp;quot;0.04 0.03 0.02&amp;quot;&lt;br /&gt;
   &amp;quot;ambient_light_dynamic&amp;quot; &amp;quot;0.01 0.01 0.01&amp;quot;&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And this is the EFX effect (reverb zone) for it:&lt;br /&gt;
&lt;br /&gt;
 //======================= from volta_v1.efx ====================&lt;br /&gt;
 reverb &amp;quot;canal_tunnel&amp;quot; {             //name put to here&lt;br /&gt;
   &amp;quot;environment&amp;quot; 22&lt;br /&gt;
   &amp;quot;environment size&amp;quot; 1.8000&lt;br /&gt;
   &amp;quot;environment diffusion&amp;quot; 1.0000&lt;br /&gt;
   &amp;quot;room&amp;quot; -1000&lt;br /&gt;
   &amp;quot;room hf&amp;quot; -4000&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
During playing, the engine prints a message whenever the player&#039;s location changes.&lt;br /&gt;
It allows you to check if you have set up locations properly.&lt;br /&gt;
For instance, here are console messages showing a proper EFX location change:&lt;br /&gt;
&lt;br /&gt;
 Switching to EFX &#039;canal_tunnel&#039; (#295)&lt;br /&gt;
 Changed location from &#039;canal_streets&#039; to &#039;canal_tunnel&#039;.&lt;br /&gt;
&lt;br /&gt;
It is also possible to specify portal-area number instead of location name in the reverb zone definition.&lt;br /&gt;
The portal-area number is listed in the .proc file, which is created in the dmap process, in the format of &amp;lt;tt&amp;gt;_area&amp;lt;num&amp;gt;&amp;lt;/tt&amp;gt; (where &amp;lt;num&amp;gt; is the portal area number), e.g. &amp;lt;tt&amp;gt;_area15&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&#039;&#039;&#039;Beware:&#039;&#039;&#039; this functionality exists for fast hacking only! Do not release a mission with portal-area numbers in .efx file!&lt;br /&gt;
The main reason to avoid it is that portal-area numbers are auto-generated, so minor changes in your mission can change all of them.&lt;br /&gt;
&lt;br /&gt;
Finally, there is a &amp;quot;default&amp;quot; reverb environment which is used for any area in the map which does not have reverb information specified.&lt;br /&gt;
&lt;br /&gt;
The order that the sound system checks for reverb data is: area number -&amp;gt; location name -&amp;gt; default.&lt;br /&gt;
&lt;br /&gt;
== Changes during playing ==&lt;br /&gt;
Type &amp;quot;&amp;lt;tt&amp;gt;reloadSounds&amp;lt;/tt&amp;gt;&amp;quot; command into game console in order to reload EFX definitions.&lt;br /&gt;
&lt;br /&gt;
So when you experiment with EFX, execute this command after each tweak to EFX file to hear the difference immediately.&lt;br /&gt;
&lt;br /&gt;
== Suppress effect ==&lt;br /&gt;
Sometimes you want to disable EFX effect on a specific sound.&lt;br /&gt;
A typical example is when you have a voice in player&#039;s head, which must not depend on player&#039;s physical environment.&lt;br /&gt;
Another case is when some sound already has reverb baked in, so you don&#039;t what to double-reverb it. Although the best practice is to use sound samples without embedded reverb, combined with proper EFX definitions.&lt;br /&gt;
&lt;br /&gt;
You can disable all EFX effects on one specific sound shader by adding &amp;quot;&amp;lt;tt&amp;gt;no_efx&amp;lt;/tt&amp;gt;&amp;quot; keyword to its body.&lt;br /&gt;
For instance, here is how non-EFX version of blackjack unsheathing looks like:&lt;br /&gt;
 blackjack_unsheath&lt;br /&gt;
 {&lt;br /&gt;
   description &amp;quot;Made by pakmannen&amp;quot;&lt;br /&gt;
   sound/sfx/tools/melee/blackjack_unsheath.ogg&lt;br /&gt;
   no_efx                       //do NOT apply EFX to this sound&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note that if you change sound shaders, writing &amp;quot;&amp;lt;tt&amp;gt;reloadDecls&amp;lt;/tt&amp;gt;&amp;quot; in TDM game console is enough to reload them.&lt;br /&gt;
&lt;br /&gt;
There are a lot of stock sounds in TDM which should not be affected by EFX effects.&lt;br /&gt;
Starting from TDM 2.07, the corresponding core sounds are marked with &amp;quot;&amp;lt;tt&amp;gt;no_efx&amp;lt;/tt&amp;gt;&amp;quot; keyword (see issue [http://bugs.thedarkmod.com/view.php?id=4688 4688]).&lt;br /&gt;
If you discover any core sound which is affected by EFX while you believe it should not, start a discussion on forums.&lt;br /&gt;
&lt;br /&gt;
=Environment properties=&lt;br /&gt;
&lt;br /&gt;
== New properties (Version 2) ==&lt;br /&gt;
&lt;br /&gt;
With Version 2 of EFX file, the set of supported properties exactly matches the set of properties defined in OpenAL EFX for the &amp;quot;EAX Reverb&amp;quot; effect.&lt;br /&gt;
Note that EFX defines several types of effects, including &amp;quot;EAX Reverb&amp;quot;, &amp;quot;Standard Reverb&amp;quot;, &amp;quot;Chorus&amp;quot;, &amp;quot;Distortion&amp;quot;, &amp;quot;Echo&amp;quot;, &amp;quot;Flanger&amp;quot;, etc.&lt;br /&gt;
Only the first one is important, ignore all the rest (including the so-called &amp;quot;Standard Reverb&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
The detailed description of all the properties is given in &amp;quot;Appendix 1 – Effect property descriptions&amp;quot; of the [https://usermanual.wiki/Pdf/Effects20Extension20Guide.90272296/view#95 OpenAL Effects Extension Guide](pages 95-101).&lt;br /&gt;
The short list is also available in a table on [https://usermanual.wiki/Pdf/Effects20Extension20Guide.90272296/view#66 page 66 of the guide]:&lt;br /&gt;
&lt;br /&gt;
[[File:Eaxreverb_properties_screenshot.png|500px]]&lt;br /&gt;
&lt;br /&gt;
The only difference is that the property names in the guide have the &amp;lt;tt&amp;gt;AL_EAXREVERB_&amp;lt;/tt&amp;gt; prefix, while in TDM definitions this prefix is removed.&lt;br /&gt;
&lt;br /&gt;
== Presets (Version 2) ==&lt;br /&gt;
Presets can be set in 2 ways:&lt;br /&gt;
* in the .efx file&lt;br /&gt;
* As of TDM 2.13, the &#039;&#039;&#039;efx_preset&#039;&#039;&#039; spawnarg on the location entity for the location where you want to use the effect.&lt;br /&gt;
&lt;br /&gt;
=== File Method ===&lt;br /&gt;
&lt;br /&gt;
There is one special property &amp;lt;tt&amp;gt;PRESET&amp;lt;/tt&amp;gt;, which is not present in the EFX guide.&lt;br /&gt;
This property accepts the name of the preset which you want to use:&lt;br /&gt;
&lt;br /&gt;
 eaxreverb &amp;quot;myclassroom&amp;quot; {&lt;br /&gt;
   preset auditorium&lt;br /&gt;
 }&lt;br /&gt;
 eaxreverb &amp;quot;mycave&amp;quot; {&lt;br /&gt;
   preset cave&lt;br /&gt;
 }&lt;br /&gt;
 eaxreverb &amp;quot;mycorridor&amp;quot; {&lt;br /&gt;
   preset hallway&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
If you specify the preset like this, the values for all the reverb properties will be taken from the specified preset.&lt;br /&gt;
Additionally, you can override values of some properties if you define them manually &#039;&#039;&#039;after&#039;&#039;&#039; defining the preset.&lt;br /&gt;
&lt;br /&gt;
The preset property also accepts index of preset. Don&#039;t use indices for anything except experimentation, since they may change in future.&lt;br /&gt;
&lt;br /&gt;
=== Location Entity Method ===&lt;br /&gt;
On the location entity where you want to use the preset, set the spawnarg &#039;&#039;&#039;efx_preset&#039;&#039;&#039; to the value of the preset.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
efx_preset    CITY_SUBWAY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If using this method no .efx file is required at all, but using both methods simultaneously is supported.  In the case that both are used to set the preset value for a single location, the spawnarg value will take precedence.&lt;br /&gt;
&lt;br /&gt;
=== Preset Values ===&lt;br /&gt;
The presets were taken from OpenAL-Soft implementation which TDM uses.&lt;br /&gt;
Here is the full list of preset names:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;height:350px; overflow:scroll;&amp;quot;&amp;gt;&lt;br /&gt;
GENERIC&lt;br /&gt;
PADDEDCELL&lt;br /&gt;
ROOM&lt;br /&gt;
BATHROOM&lt;br /&gt;
LIVINGROOM&lt;br /&gt;
STONEROOM&lt;br /&gt;
AUDITORIUM&lt;br /&gt;
CONCERTHALL&lt;br /&gt;
CAVE&lt;br /&gt;
ARENA&lt;br /&gt;
HANGAR&lt;br /&gt;
CARPETEDHALLWAY&lt;br /&gt;
HALLWAY&lt;br /&gt;
STONECORRIDOR&lt;br /&gt;
ALLEY&lt;br /&gt;
FOREST&lt;br /&gt;
CITY&lt;br /&gt;
MOUNTAINS&lt;br /&gt;
QUARRY&lt;br /&gt;
PLAIN&lt;br /&gt;
PARKINGLOT&lt;br /&gt;
SEWERPIPE&lt;br /&gt;
UNDERWATER&lt;br /&gt;
DRUGGED&lt;br /&gt;
DIZZY&lt;br /&gt;
PSYCHOTIC&lt;br /&gt;
CASTLE_SMALLROOM&lt;br /&gt;
CASTLE_SHORTPASSAGE&lt;br /&gt;
CASTLE_MEDIUMROOM&lt;br /&gt;
CASTLE_LARGEROOM&lt;br /&gt;
CASTLE_LONGPASSAGE&lt;br /&gt;
CASTLE_HALL&lt;br /&gt;
CASTLE_CUPBOARD&lt;br /&gt;
CASTLE_COURTYARD&lt;br /&gt;
CASTLE_ALCOVE&lt;br /&gt;
FACTORY_SMALLROOM&lt;br /&gt;
FACTORY_SHORTPASSAGE&lt;br /&gt;
FACTORY_MEDIUMROOM&lt;br /&gt;
FACTORY_LARGEROOM&lt;br /&gt;
FACTORY_LONGPASSAGE&lt;br /&gt;
FACTORY_HALL&lt;br /&gt;
FACTORY_CUPBOARD&lt;br /&gt;
FACTORY_COURTYARD&lt;br /&gt;
FACTORY_ALCOVE&lt;br /&gt;
ICEPALACE_SMALLROOM&lt;br /&gt;
ICEPALACE_SHORTPASSAGE&lt;br /&gt;
ICEPALACE_MEDIUMROOM&lt;br /&gt;
ICEPALACE_LARGEROOM&lt;br /&gt;
ICEPALACE_LONGPASSAGE&lt;br /&gt;
ICEPALACE_HALL&lt;br /&gt;
ICEPALACE_CUPBOARD&lt;br /&gt;
ICEPALACE_COURTYARD&lt;br /&gt;
ICEPALACE_ALCOVE&lt;br /&gt;
SPACESTATION_SMALLROOM&lt;br /&gt;
SPACESTATION_SHORTPASSAGE&lt;br /&gt;
SPACESTATION_MEDIUMROOM&lt;br /&gt;
SPACESTATION_LARGEROOM&lt;br /&gt;
SPACESTATION_LONGPASSAGE&lt;br /&gt;
SPACESTATION_HALL&lt;br /&gt;
SPACESTATION_CUPBOARD&lt;br /&gt;
SPACESTATION_ALCOVE&lt;br /&gt;
WOODEN_SMALLROOM&lt;br /&gt;
WOODEN_SHORTPASSAGE&lt;br /&gt;
WOODEN_MEDIUMROOM&lt;br /&gt;
WOODEN_LARGEROOM&lt;br /&gt;
WOODEN_LONGPASSAGE&lt;br /&gt;
WOODEN_HALL&lt;br /&gt;
WOODEN_CUPBOARD&lt;br /&gt;
WOODEN_COURTYARD&lt;br /&gt;
WOODEN_ALCOVE&lt;br /&gt;
SPORT_EMPTYSTADIUM&lt;br /&gt;
SPORT_SQUASHCOURT&lt;br /&gt;
SPORT_SMALLSWIMMINGPOOL&lt;br /&gt;
SPORT_LARGESWIMMINGPOOL&lt;br /&gt;
SPORT_GYMNASIUM&lt;br /&gt;
SPORT_FULLSTADIUM&lt;br /&gt;
SPORT_STADIUMTANNOY&lt;br /&gt;
PREFAB_WORKSHOP&lt;br /&gt;
PREFAB_SCHOOLROOM&lt;br /&gt;
PREFAB_PRACTISEROOM&lt;br /&gt;
PREFAB_OUTHOUSE&lt;br /&gt;
PREFAB_CARAVAN&lt;br /&gt;
DOME_TOMB&lt;br /&gt;
PIPE_SMALL&lt;br /&gt;
DOME_SAINTPAULS&lt;br /&gt;
PIPE_LONGTHIN&lt;br /&gt;
PIPE_LARGE&lt;br /&gt;
PIPE_RESONANT&lt;br /&gt;
OUTDOORS_BACKYARD&lt;br /&gt;
OUTDOORS_ROLLINGPLAINS&lt;br /&gt;
OUTDOORS_DEEPCANYON&lt;br /&gt;
OUTDOORS_CREEK&lt;br /&gt;
OUTDOORS_VALLEY&lt;br /&gt;
MOOD_HEAVEN&lt;br /&gt;
MOOD_HELL&lt;br /&gt;
MOOD_MEMORY&lt;br /&gt;
DRIVING_COMMENTATOR&lt;br /&gt;
DRIVING_PITGARAGE&lt;br /&gt;
DRIVING_INCAR_RACER&lt;br /&gt;
DRIVING_INCAR_SPORTS&lt;br /&gt;
DRIVING_INCAR_LUXURY&lt;br /&gt;
DRIVING_FULLGRANDSTAND&lt;br /&gt;
DRIVING_EMPTYGRANDSTAND&lt;br /&gt;
DRIVING_TUNNEL&lt;br /&gt;
CITY_STREETS&lt;br /&gt;
CITY_SUBWAY&lt;br /&gt;
CITY_MUSEUM&lt;br /&gt;
CITY_LIBRARY&lt;br /&gt;
CITY_UNDERPASS&lt;br /&gt;
CITY_ABANDONED&lt;br /&gt;
DUSTYROOM&lt;br /&gt;
CHAPEL&lt;br /&gt;
SMALLWATERROOM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Their definitions can be seen in [https://github.com/kcat/openal-soft/blob/master/include/AL/efx-presets.h efx-presets.h] from OpenAL-Soft source code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-expandtext=&amp;quot;Show&amp;quot; data-collapsetext=&amp;quot;Hide&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Legacy info (Version 1) ==&lt;br /&gt;
&lt;br /&gt;
This information is from the old official EAX 2.0 documentation, although some properties may have changed in scope and focus from EAX 2.0 to EAX 4.0. One can assume that the properties serve the same general purpose and that each property&#039;s value bounds are approximately the same.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;environment&#039;&#039;&#039; - Unknown. Likely sets the room to one of an unknown number of environment presets.&lt;br /&gt;
* &#039;&#039;&#039;environment size&#039;&#039;&#039; - The Environment Size property sets the apparent size of the surrounding “room.” The value of Environment Size can be considered a characteristic dimension of the room expressed in meters. Scaling Environment Size is equivalent to scaling all dimensions of the room by the same factor. Value type is FLOAT; value range is 1.0 to 100.0, expressed in linear meters.&lt;br /&gt;
* &#039;&#039;&#039;environment diffusion&#039;&#039;&#039; - The Environment Diffusion property controls the echo density in the reverberation decay. Reducing diffusion gives the reverberation a more “grainy” character that is especially noticeable with percussive sound sources. If you set a diffusion value of 0.0, the later reverberation sounds like a succession of distinct echoes. Value type is FLOAT; value range is 0.0 to 1.0, expressed in a linear multiplier value.&lt;br /&gt;
* &#039;&#039;&#039;room&#039;&#039;&#039; - The Room property is the master volume control for the reflected sound (both early reflections and reverberation) that EAX adds to all sound sources. It sets the maximum amount of reflections and reverberation added to the sound mix in the primary buffer (the listener). Value is LONG; value range is -10000 to 0, expressed in hundredths of one decibel (-100 dB to 0 dB).&lt;br /&gt;
* &#039;&#039;&#039;room hf&#039;&#039;&#039; - The Room HF property further tweaks reflected sound by attenuating it at high frequencies. It controls a low-pass filter that applies globally to the reflected sound of all sound sources. The exact qualities of this low-pass filter -- its frequency and its bandwidth (Q) -- are unknown. Value type is LONG; value range is -10000 to 0, expressed in hundredths of one decibel (-100 dB to 0 dB).&lt;br /&gt;
* &#039;&#039;&#039;room lf&#039;&#039;&#039; - Undocumented. Assumably, the Room LF property applies a high-pass to reflected sound in much the same way as Room HF applies low-pass. The value type and range is unknown, but is likely LONG, must be between -10000 and 0 and is expressed in hundredths of one decibel.&lt;br /&gt;
* &#039;&#039;&#039;decay time&#039;&#039;&#039; - The Decay Time property sets the reverberation decay time, or the time in which reverberation is diminished. It ranges from 0.1 (typically a small room with very dead surfaces) to 20.0 (typically a large room with very live surfaces). Value is FLOAT; value range is 0.1 to 20.0, expressed in seconds.&lt;br /&gt;
* &#039;&#039;&#039;decay hf ratio&#039;&#039;&#039; - The Decay HF Ratio property sets the spectral quality of the Decay Time parameter. It is the ratio of high-frequency decay time relative to the time set by Decay Time. The Decay HF Ratio value 1.0 is neutral: the decay time is equal for all frequencies. As Decay HF Ratio increases above 1.0, the high-frequency decay time increases so it’s longer than the decay time at low frequencies. You hear a more brilliant reverberation with a longer decay at high frequencies. As the Decay HF Ratio value decreases below 1.0, the high-frequency decay time decreases so it’s shorter than the decay time of the low frequencies. You hear a more natural reverberation. Value is FLOAT; value range is 0.1 to 20.0, expressed in a linear multiplier variable.&lt;br /&gt;
* &#039;&#039;&#039;decay lf ratio&#039;&#039;&#039; - Undocumented. It&#039;s likely best to leave the value at 1.0, though the value&#039;s type and range is probably the same as the Decay HF Ratio property.&lt;br /&gt;
* &#039;&#039;&#039;reflections&#039;&#039;&#039; - The Reflections property controls the overall amount of initial reflections relative to the Room property. The value of Reflections ranges from a maximum of 10 dB to a minimum of -100 dB (no initial reflections at all), and is corrected by the value of the Room property. The Reflections property does not affect the subsequent reverberation decay. You can increase the amount of initial reflections to simulate a more narrow space or closer walls, especially effective if you associate the initial reflections increase with a reduction in reflections delays by lowering the value of the Reflection Delay property. To simulate open or semi-open environments, you can maintain the amount of early reflections while reducing the value of the Reverb property, which controls later reflections. Value type is LONG; value range is -10000 to 1000, expressed in hundredths of one decibel (-100 dB to -10 dB).&lt;br /&gt;
* &#039;&#039;&#039;reflections delay&#039;&#039;&#039; - The Reflections Delay property is the amount of delay between the arrival time of the direct path from the source to the first reflection from the source. It ranges from 0 to 300 milliseconds. You can reduce or increase Reflections Delay to simulate closer or more distant reflective surfaces—and therefore control the perceived size of the room. Value is FLOAT; value range is 0.0 to 0.3, expressed in seconds (0 to 300 milliseconds).&lt;br /&gt;
* &#039;&#039;&#039;reflections pan&#039;&#039;&#039; - Undocumented. Three values are specified which may correspond to a generic &amp;quot;front&amp;quot;, &amp;quot;side&amp;quot; and &amp;quot;back/rear&amp;quot; configuration to control the directivity of early reflections in a 7.1 surround matrix. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;reverb&#039;&#039;&#039; - The Reverb property controls the overall amount of later reverberation relative to the Room property. (The Room property sets the overall amount of both initial reflections and later reverberation.) The value of Reverb ranges from a maximum of 20 dB to a minimum of -100 dB (no late reverberation at all). Value is LONG; value range is -10000 to 2000, expressed in hundredths of a decibel (-100 dB to 20 dB).&lt;br /&gt;
* &#039;&#039;&#039;reverb delay&#039;&#039;&#039; - The Reverb Delay property defines the begin time of the late reverberation relative to the time of the initial reflection (the first of the early reflections). It ranges from 0 to 100 milliseconds. Reducing or increasing Reverb Delay is useful for simulating a smaller or larger room. Value is FLOAT; value range is 0.0 to 0.1, expressed in seconds (0 to 100 milliseconds).&lt;br /&gt;
* &#039;&#039;&#039;reverb pan&#039;&#039;&#039; - Undocumented. Three values are specified which may correspond to a generic &amp;quot;front&amp;quot;, &amp;quot;side&amp;quot; and &amp;quot;back/rear&amp;quot; configuration to control the directivity of reverberation in a 7.1 surround matrix. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;echo time&#039;&#039;&#039; - Undocumented. Likely controls the decay time of echoes, or late reflections. A value of 0.1 likely presents a natural amount of echo, while increasing the value likely causes a &amp;quot;Grand Canyon&amp;quot; effect. Value type is likely FLOAT; value range is likely between 0.075 and 0.25, expressed in seconds.&lt;br /&gt;
* &#039;&#039;&#039;echo depth&#039;&#039;&#039; - Undocumented. May control directionality or tonal qualities of echoes arriving at the listener. Probably best to leave at 1.0. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;modulation time&#039;&#039;&#039; - Undocumented. Unknown purpose. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;modulation depth&#039;&#039;&#039; - Undocumented. Unknown purpose. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;air absorption hf&#039;&#039;&#039; - The Air Absorption HF property controls the distance-dependent attenuation at high frequencies caused by the propagation medium. It applies to both the direct path and reflected sound. You can use Air Absorption HF to simulate sound transmission through foggy air, dry air, smoky atmosphere, and so on. The default value is -0.05 dB per meter, which roughly corresponds to typical condition of atmospheric humidity, temperature, and so on. Lowering the value simulates a more absorbent medium (more humidity in the air, for example); raising the value simulates a less absorbent medium (dry desert air, for example). Value is FLOAT; value range is -100.0 to 0.0, expressed in hundredths of one decibel per meter (-1 dB to 0 dB). Default value is -5.0, which corresponds to -0.05 dB per meter attenuation.&lt;br /&gt;
* &#039;&#039;&#039;hf reference&#039;&#039;&#039; - Likely defines the frequency used for low-pass filters. Value is likely LONG; value range is likely between 0.0 and 20000.0, expressed in Hz. This value is probably best left at 5000.0.&lt;br /&gt;
* &#039;&#039;&#039;lf reference&#039;&#039;&#039; - Likely defines the frequency used for high-pass filters. Value is likely LONG; value range is likely between 0.0 and 20000.0, expressed in Hz. This value is probably best left at 250.0.&lt;br /&gt;
* &#039;&#039;&#039;room rolloff factor&#039;&#039;&#039; - The Room Rolloff property is one of two methods available in EAX to attenuate the reflected sound (containing both reflections, reverberation and echoes) according to source-listener distance. Value type is FLOAT; value range is 0.0 to 10.0, expressed in a linear multiplier value. It&#039;s recommended that users use 0.0, as id Software did not deviate from this value with Doom 3.&lt;br /&gt;
* &#039;&#039;&#039;flags&#039;&#039;&#039; - The Flags property is intended to control the relationship of high-level EAX properties to low-level properties. If certain EAX flags are set by setting the Flags property to a particular value, the setting of high-level properties is supposed to control the values of low-level properties based upon a defined scale, overriding specified values. In EAX 2.0, the value type is DWORD, whereas in Doom 3, it appears to be INT or some other type commonly used to store numeric values. In Doom 3, common values are 0, 2, 15, 31, 32, 56 and 63, but no documentation details what these values correspond to. If users wish to experiment with the Flags property, it is recommended that they choose from one of the above values. For reference, here is a table with the counts for each flag value as used in Doom 3:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 0.5em; margin-left: 2em; border: 1px solid #a0a0a0; text-align: right; border-collapse: collapse;&amp;quot; cellpadding=&amp;quot;2&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Flag decimal&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Flag binary&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Count&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|00000000&lt;br /&gt;
|497&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|00000010&lt;br /&gt;
|6&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|00001110&lt;br /&gt;
|15&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|00001111&lt;br /&gt;
|94&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|31&lt;br /&gt;
|00011111&lt;br /&gt;
|511&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|32&lt;br /&gt;
|00100000&lt;br /&gt;
|247&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|56&lt;br /&gt;
|00111000&lt;br /&gt;
|59&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|63&lt;br /&gt;
|00111111&lt;br /&gt;
|168&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Design.&#039;&#039;&#039;&lt;br /&gt;
In terms of the actual sound design for the values you put into these variables, here is a general tutorial on reverb from FruityLoops (NOTE: This is for a music production plugin, some of these don&#039;t apply, it&#039;s just to give a general idea on what certain variables do):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Low Cut&#039;&#039;&#039; Adjusts the low cutoff frequency. Use this to remove low frequencies from the input signal before reverb is added. For example, if you are adding reverb to, say a drum track, you might want to remove some of the &#039;rumble&#039; from the bass drum by attenuating the bass frequencies. Setting this parameter to the minimum value will bypass the Low Cut filter, displaying OFF in the value field.&lt;br /&gt;
* &#039;&#039;&#039;High Cut&#039;&#039;&#039; - Similar to the Low Cut, this adjusts the high cutoff frequency. Use this to remove high frequencies from the input signal.&lt;br /&gt;
* &#039;&#039;&#039;Predelay&#039;&#039;&#039; - Controls the delay time between the direct input signal and the first reverb reflection. This should be set to modest values for small rooms, and can be increased in relation to increases in room size. &#039;&#039;&#039;Predelay&#039;&#039;&#039; creates a slap-back echo effect that can both add atmosphere and muffle the signal, so use it wisely.&lt;br /&gt;
* &#039;&#039;&#039;Room Size&#039;&#039;&#039; - Use this to set the size of the virtual room where the reverb is created. The Room Size should be adjusted according to the decay time. Small rooms sound better with a short decay time, large rooms sound better with longer reverb times.&lt;br /&gt;
* &#039;&#039;&#039;Diffusion&#039;&#039;&#039; - Controls the density of the reflections bouncing off the walls of the virtual room. A low diffusion setting makes the reflections sound more distinct, like closely spaced echoes. A high diffusion setting creates reflections so close they sound more like noise, where no echoes can be distinguished.&lt;br /&gt;
* &#039;&#039;&#039;Color&#039;&#039;&#039; - The Color parameter is used for adjusting the decay time of the bass frequencies of the signal. This allows you to change the overall perceived mood or &#039;sound&#039; of the virtual room. A bright room has a low bass response, while warm rooms have a higher bass response. In a flat room, the response of the bass is equal to the general frequency response. Color has five settings: Brighter, Bright, Flat, Warm, Warmer.&lt;br /&gt;
* &#039;&#039;&#039;Decay&#039;&#039;&#039; - Controls the decay time of the reverb, the time it takes for the signal to decay to -60dB (1/1000 of the maximum amplitude). Use low decay times for small rooms or boxes, and long decay times for large rooms, halls or churches. You should also make sure that the Room Size parameter has an appropriate value.&lt;br /&gt;
* &#039;&#039;&#039;High Damping&#039;&#039;&#039; - This parameter allows you to adjust damping of the high frequencies in the reverb signal over time. Damping refers to the high frequencies being attenuated and dying out. This causes the sound to become gradually muffled and warm like it is being absorbed in the room. Setting this parameter to the maximum value will bypass the High Damping, displaying OFF in the value field.&lt;br /&gt;
* &#039;&#039;&#039;Dry&#039;&#039;&#039; - Sets the relative dry output level.&lt;br /&gt;
* &#039;&#039;&#039;Reverb&#039;&#039;&#039; - Sets the relative reverb (wet) signal level.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Error Check=&lt;br /&gt;
If you modified the presets in your EFX file, you can check for errors ingame. Load your map and open the console. Type &#039;&#039;reloadSounds&#039;&#039;, this will trigger the reload of the EFX used in your map and print out the vars which cause an error (like a value exceeding the maximum range). Note that if your EFX files contain errors, this will make the game ignore the EFX settings you chose. &lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
See the &amp;quot;EFX Reverb&amp;quot; column of &#039;&#039;&#039;[[Fan_Missions_for_The_Dark_Mod|Fan Missions page]]&#039;&#039;&#039;. Missions with &amp;quot;Yes&amp;quot; have EFX Reverb. &lt;br /&gt;
&amp;lt;br&amp;gt;Most missions use v2.0 presets but a few missions such as &amp;quot;Volta and the Stone&amp;quot; and Behind Closed Doors use v1.0 settings.&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
The Version 2 definitions were implemented due to [http://bugs.thedarkmod.com/view.php?id=4815 issue 4815], it has some brief explanation.&lt;br /&gt;
&lt;br /&gt;
A tutorial based around EFX can be found [http://forums.thedarkmod.com/topic/19205-getting-started-with-the-efx-room-reverb-system-wip/ here]&lt;br /&gt;
&lt;br /&gt;
An old demonstration map of EAX in TDM is included [http://forums.thedarkmod.com/topic/11045-environmental-audio-extensions-eax-in-tdm/ here]&lt;br /&gt;
&lt;br /&gt;
A discussion about no_efx is [http://forums.thedarkmod.com/topic/19213-efx-discussion here]&lt;br /&gt;
&lt;br /&gt;
The first version of this article was written by Ishtvan [https://forums.thedarkmod.com/index.php?/topic/2071-setting-reverb-data-in-new-soundengine-wiki/ here]&lt;br /&gt;
&lt;br /&gt;
[[Category:Sound]]&lt;br /&gt;
[[Category:Tutorial]]&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=User:Frost_Salamander&amp;diff=33966</id>
		<title>User:Frost Salamander</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=User:Frost_Salamander&amp;diff=33966"/>
		<updated>2025-05-05T14:16:14Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== TDM Files and Contents ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Caption text&lt;br /&gt;
|-&lt;br /&gt;
! Content !! File path !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Skins || tdm_models_decls01.pk4\skins || skin files shipped with TDM&lt;br /&gt;
|-&lt;br /&gt;
| Script Constants|| tdm_base01.pk4\script\tdm_defs.script || constant values. Useful if you need to know the literal values for use in your scripts.&lt;br /&gt;
|-&lt;br /&gt;
| Script Objects|| tdm_base01.pk4\script || various script objects for entities.&lt;br /&gt;
|-&lt;br /&gt;
| tdm_ai_humanoid_newskel.def || tdm_ai_humanoid_undead01.pk4\def\tdm_ai_humanoid_newskel.def || Base class for all TDM humanoid entities&lt;br /&gt;
|-&lt;br /&gt;
| GUI Icons || tdm_gui01.pk4\dds\guis\assets\hud\ || HUD icons. e.g. loot, potions, etc&lt;br /&gt;
|-&lt;br /&gt;
| sound shaders || tdm_sound_ambient_decls01.pk4\sound || ambient environmental sound shaders&lt;br /&gt;
|-&lt;br /&gt;
| materials definitions || tdm_textures_base01.pk4\materials || base materials files &lt;br /&gt;
|-&lt;br /&gt;
| guard model materials || tdm_ai_humanoid_guards01.pk4 || guard materials and texture files &lt;br /&gt;
|-&lt;br /&gt;
| Stim types || tdm_base01.pk4/script/tdm_stim_response.script || &lt;br /&gt;
|-&lt;br /&gt;
| Readable textures || tdm_gui01.pk4/dds/guis/assets/readables || various parchment textures&lt;br /&gt;
|-&lt;br /&gt;
| Blueprint textures || tdm_models02.pk4 || textures/readables/blueprint01*&lt;br /&gt;
|-&lt;br /&gt;
| Light textures || tdm_textures_base01.pk4 || In both /lights and textures/lights&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Creating an Image Decal with Gimp ==&lt;br /&gt;
# Go to somewhere like pixabay.com and search for free images.  I usually filter by &#039;vector graphics&#039; (e.g. PNG) because it supports alpha channel which you&#039;ll need for decals.&lt;br /&gt;
# Once you find an image, download it.  I tend to get medium-sized versions (e.g. close to 1024 x 1024)&lt;br /&gt;
# Open the file in Gimp&lt;br /&gt;
# Scale the image to 1024x1024 pixels.&lt;br /&gt;
# export as TGA&lt;br /&gt;
&lt;br /&gt;
== Creating a Text Decal with Gimp ==&lt;br /&gt;
# Open Gimp - New -&amp;gt; &lt;br /&gt;
# Set image size to 1024 x 1024 (or something more rectangular like 1024 x 512)&lt;br /&gt;
# Click Advanced -&amp;gt; Fill with: transparency&lt;br /&gt;
# Add text layer&lt;br /&gt;
# When happy with text, right-click the text layer and &#039;merge down&#039; into alpha layer&lt;br /&gt;
# save and export as TGA.&lt;br /&gt;
# Create a materials file (.mtr) like so:&lt;br /&gt;
&lt;br /&gt;
  textures/darkmod/decals/signs/coronet&lt;br /&gt;
  {&lt;br /&gt;
  	DECAL_MACRO&lt;br /&gt;
  	noimpact&lt;br /&gt;
  	&lt;br /&gt;
  	{&lt;br /&gt;
  		blend blend&lt;br /&gt;
  		map textures/darkmod/decals/signs/coronet&lt;br /&gt;
  	}&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
== Create an inventory icon for an existing model from a DR screenshot ==&lt;br /&gt;
# In DarkRadiant, right-click and choose &#039;Create Entity...&#039; or &#039;Create Model...&#039; and choose the object you wish to use.&lt;br /&gt;
# in the preview window with the model showing, take a screenshot selection using something like the Windows Snipping Tool. Leave a centimeter or two of grey color around the object that we can convert to alpha transparency later.&lt;br /&gt;
# Save the screenshot as a JPEG somewhere on your local disk.&lt;br /&gt;
# Open the file with GIMP.&lt;br /&gt;
# From the menu, choose Layer -&amp;gt; Transparency -&amp;gt; Color to Alpha...&lt;br /&gt;
# A pop up will appear. Next to the Color bar there will be an eye dropper icon. This is the color picker.&lt;br /&gt;
# Click the color picker and then click the grey area that surrounds your image. Don&#039;t worry if it looks like it&#039;s already been converted to alpha (the grey squares). The grey squares should turn a lighter colour.&lt;br /&gt;
# Click OK&lt;br /&gt;
# Resize the image by clicking Image -&amp;gt; Scale Image... Make it 128 x 128 pixels. Click &#039;Scale&#039;&lt;br /&gt;
# Export as DDS by clicking File -&amp;gt; Export As... and type a file name that ends in .dds. Choose BC£ / DXT5 compression and don&#039;t bother with mipmaps.&lt;br /&gt;
# Add the .dds file to your FM folder under &#039;dds\guis\assets\hud\inventory_icons&#039; if you want them to be in the same folder as the stock icons.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Creating a material using existing images (e.g. from textures.com) using GIMP ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Written on May 28th, 2023 using GIMP 2.10.34&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This will describe how to create your own texture (material) using an image found on the internet.  I will use textures.com as an example.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ensure that the license for whatever source you use is appropriate for TDM (e.g. allows use in video games)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
We will end up with 3 image files and one materials file:&lt;br /&gt;
* diffuse map (the base image with colour details, etc)&lt;br /&gt;
* normal map (faked bump/dent data)&lt;br /&gt;
* DarkRadiant editor icon&lt;br /&gt;
&lt;br /&gt;
This doesn&#039;t cover creation of a specular map.  This isn&#039;t needed unless your material needs a shiny surface (e.g. metal or wet surfaces).&lt;br /&gt;
&lt;br /&gt;
=== Obtain your image ===&lt;br /&gt;
# Log into textures.com and find an image you like under the &#039;Regular Photos&#039; section (&#039;&#039;&#039;NOT&#039;&#039;&#039; &#039;Special Content&#039;).  Make sure it&#039;s seamless if it needs to be tiled/repeatable (e.g. for bricks or walls). If it&#039;s something like a door or window, it doesn&#039;t need to be seamless. There is normally a JPG format that that is close to or exactly 1024x1024 pixels. Download it.&lt;br /&gt;
&lt;br /&gt;
=== Open your Image in GIMP ===&lt;br /&gt;
The first thing you may see here is a pop-up asking if you want to convert the image to &#039;the built-in sRGB color profile&#039;. I&#039;m not sure the implications of doing this but just choose &#039;Convert&#039;. &#039;&#039;&#039;(ADVICE NEEDED)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Resize Image (if needed) ===&lt;br /&gt;
TDM standard resolution for textures is 1024 x 1024.  However it&#039;s possible to get away with 2048 x 2048 at the cost of file size and performance.&lt;br /&gt;
If you can&#039;t find a 1024 x 1024 image for whatever reason (say it&#039;s 4K instead), you can scale it down:&lt;br /&gt;
# With the image open in GIMP, click Image -&amp;gt; Scale Image...&lt;br /&gt;
# Set the width in &#039;Image Size&#039; in pixels to 1024.  Make sure the width and height are &#039;chained&#039; (the little link icon should be whole). The height will then scale down proportionately to match the width.&lt;br /&gt;
&lt;br /&gt;
=== Crop your Image ===&lt;br /&gt;
This is only needed if you don&#039;t intend to use the entire image as-is (e.g. if you want to cut a door or window out of an image).  Skip this section if that is not the case.&lt;br /&gt;
# With the image in GIMP, select the Crop Tool (Shift+C).&lt;br /&gt;
# Under the &#039;Tool Options&#039; tab, tick the box for &#039;Delete cropped pixels&#039;&lt;br /&gt;
# Using the crop tool select the area you want to keep on the image with your mouse, and press &#039;Enter&#039; when done.&lt;br /&gt;
&lt;br /&gt;
=== Create the Diffuse Map (DDS File) ===&lt;br /&gt;
# With the original or cropped image open in GIMP Choose File -&amp;gt; Export as...&lt;br /&gt;
# In the next popup, change the filename to &#039;texturename.dds&#039; and click &#039;Export&#039;. &lt;br /&gt;
# On the next pop-up, choose your compression format (see below) and select &#039;Generate mipmaps&#039;. Under &#039;Mipmap Options&#039; choose &#039;Filter&#039;: &#039;Kaiser&#039; for best quality. Click &#039;Export&#039;&lt;br /&gt;
  - Compression:&lt;br /&gt;
    - if your image contains an alpha channel, choose &#039;BC3 / DXT5&#039;&lt;br /&gt;
    - if your image does not contain an alpha channel, choose &#039;BC1 / DXT1&#039;&lt;br /&gt;
&lt;br /&gt;
=== Create the Normal Map (TGA File)===&lt;br /&gt;
Apart from creating the normal map, the point of the first few steps is to reduce the amount of &#039;noise&#039; in the image which can lead to a grainy appearance.&lt;br /&gt;
# With the original or cropped image open in GIMP, select Colors -&amp;gt; Desaturate -&amp;gt; Desaturate. Click &#039;OK&#039;&lt;br /&gt;
# Select Filters -&amp;gt; Blur -&amp;gt; Gaussian Blur.  Leave the defaults and click &#039;OK&#039;.&lt;br /&gt;
# Select Colors -&amp;gt; Curves and adjust the curve to &#039;wash out&#039; (i.e. brighten) the image to remove any noise detail.&lt;br /&gt;
# Select Filters -&amp;gt; Generic -&amp;gt; Normal Map..&lt;br /&gt;
# The image will change to a blueish colour and you will be able to see the &#039;bumps&#039;. The only thing I adjust here is the &#039;Scale&#039; property.  If it looks very grainy, just reduce the scale. For things like bricks, I use a value &amp;lt; 5 or else the finished texture will look very grainy in TDM.  For stuff like doors, a value of about 10 looks OK.&lt;br /&gt;
# After adjusting the scale, click &#039;OK&#039;&lt;br /&gt;
# Choose File -&amp;gt; Export as..., change the file name to &#039;texturename_local.tga&#039; and click &#039;Export&#039;&lt;br /&gt;
# On the next pop-up, untick &#039;RLE compression&#039; and leave &#039;Origin&#039; at &#039;Bottom left&#039;. Click &#039;Export&#039;. &#039;&#039;&#039;(ADVICE NEEDED)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Create the editor icon (JPG File) ===&lt;br /&gt;
# Since you&#039;ve modified the image, either close and re-open the image in GIMP, or go back into your Undo History and select the original image (or cropped image if it&#039;s been cropped).&lt;br /&gt;
# Choose Image -&amp;gt; Scale Image... from the menu.&lt;br /&gt;
# On the dialogue, either scale it to 256x256 px (if it was a 1024x1024 image originally), or just scale it down to 25% if it was something else. Click &#039;Scale&#039;. If the image looks too blurry, you can try 512 x 512.&lt;br /&gt;
# Choose File -&amp;gt; Export as..., change the file name to &#039;texturename_ed.jpg&#039; and click &#039;Export&#039;&lt;br /&gt;
# On the next pop-up, untick all the &#039;save data&#039; boxes except for &#039;Save color profile&#039; &#039;&#039;&#039;(ADVICE NEEDED)&#039;&#039;&#039;.  Click &#039;Export&#039;&lt;br /&gt;
&lt;br /&gt;
=== Create TDM materials file ===&lt;br /&gt;
# Within your FM folder, save all your images in the appropriate TDM folder structure.  Just follow the existing conventions.  For example your DDS files go into &#039;dds/textures/darkmod/stone/brick&#039; and your normal map and editor files go into &#039;textures/darkmod/stone/brick&#039;&lt;br /&gt;
# Create the materials file as follows below. Give it a name like &#039;mybricks.mtr&#039; and put it in the /materials folder in your FM. The material name as it appears in DarkRadiant appears at the top.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: &#039;texturename&#039; in this example is &#039;bricks_dirty&#039;&lt;br /&gt;
 textures/darkmod/stone/brick/bricks_dirty&lt;br /&gt;
 {&lt;br /&gt;
     stone&lt;br /&gt;
     description	&amp;quot;vine_friendly&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
     qer_editorimage textures/darkmod/stone/brick/bricks_dirty_ed&lt;br /&gt;
     diffusemap      textures/darkmod/stone/brick/bricks_dirty&lt;br /&gt;
     bumpmap         textures/darkmod/stone/brick/bricks_dirty_local&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=Setting_Reverb_Data_of_Rooms_(EAX)&amp;diff=33808</id>
		<title>Setting Reverb Data of Rooms (EAX)</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=Setting_Reverb_Data_of_Rooms_(EAX)&amp;diff=33808"/>
		<updated>2025-01-12T12:34:53Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: /* Location Entity Method */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
This document will attempt to explain how to set the new EFX settings in your rooms when mapping.&lt;br /&gt;
&lt;br /&gt;
Previously these settings were known as EAX settings, and required EAX 4.0-compatible sound card.&lt;br /&gt;
In TDM 2.06, EAX technology was completely replaced with OpenAL EFX, which is now processed in software (by [https://github.com/kcat/openal-soft openal-soft]) without any requirements on sound card.&lt;br /&gt;
&lt;br /&gt;
= General =&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
&lt;br /&gt;
EFX for a fan mission can be configured with or without a configuration file.  However, fileless configuration is only supported for [[Setting_Reverb_Data_of_Rooms_(EAX)#Presets_(Version_2)|EFX presets]].&lt;br /&gt;
&lt;br /&gt;
== EFX file ==&lt;br /&gt;
The EFX info for a map should be stored in the file &amp;quot;&amp;lt;tt&amp;gt;efxs/&amp;lt;mapname&amp;gt;.efx&amp;lt;/tt&amp;gt;&amp;quot;, where &amp;lt;mapname&amp;gt; is the name of your .map file (without extension).&lt;br /&gt;
&lt;br /&gt;
In order to check that you have put the file into right location, start your mission in game.&lt;br /&gt;
If TDM manages to load your efx file, then you will see the following message in console:&lt;br /&gt;
 sound: found efxs/&amp;lt;mapname&amp;gt;.efx&lt;br /&gt;
If you failed something, then you will see a bit different message there:&lt;br /&gt;
 sound: missing efxs/&amp;lt;mapname&amp;gt;.efx&lt;br /&gt;
In both cases some additional diagnostic messages can be present nearby.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; you must enable &amp;quot;&amp;lt;tt&amp;gt;OpenAL EFX&amp;lt;/tt&amp;gt;&amp;quot; in sound settings in the main menu, otherwise TDM won&#039;t even try to load the efx file.&lt;br /&gt;
&lt;br /&gt;
It is a plain text file, so you can open it up in your text editor of choice.&lt;br /&gt;
&lt;br /&gt;
Any EFX file must start with a header which specifies its &#039;&#039;&#039;version&#039;&#039;&#039;:&lt;br /&gt;
 Version 2&lt;br /&gt;
If you forget this line, then your EFX file will &#039;&#039;&#039;not&#039;&#039;&#039; be loaded.&lt;br /&gt;
The following versions are supported:&lt;br /&gt;
* &amp;lt;tt&amp;gt;Version 1&amp;lt;/tt&amp;gt; was supported by TDM from the very beginning. It uses some non-standard terms and quantities, which makes it hard to work with.&lt;br /&gt;
* &amp;lt;tt&amp;gt;Version 2&amp;lt;/tt&amp;gt; was added in TDM 2.07. It uses the parameters from OpenAL EFX and supports a lot of presets. &#039;&#039;&#039;Recommended for all new missions.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The rest of the file consists of separate blocks, one for each &amp;quot;reverb zone&amp;quot;.&lt;br /&gt;
Each block must start with &amp;lt;tt&amp;gt;reverb&amp;lt;/tt&amp;gt; keyword for Version 1 definitions, and &amp;lt;tt&amp;gt;eaxreverb&amp;lt;/tt&amp;gt; keyword for Version 2 definitions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here is an example of such block from mars_city1.efx of the original Doom 3 game (Version 1):&lt;br /&gt;
&lt;br /&gt;
 // reverb maintenance&lt;br /&gt;
 reverb &amp;quot;maintenance&amp;quot; {&lt;br /&gt;
  &amp;quot;environment&amp;quot; 26&lt;br /&gt;
  &amp;quot;environment size&amp;quot; 5.0670&lt;br /&gt;
  &amp;quot;environment diffusion&amp;quot; 0.6030&lt;br /&gt;
  &amp;quot;room&amp;quot; -411&lt;br /&gt;
  &amp;quot;room hf&amp;quot; -685&lt;br /&gt;
  &amp;quot;room lf&amp;quot; 0&lt;br /&gt;
  &amp;quot;decay time&amp;quot; 1.7360&lt;br /&gt;
  &amp;quot;decay hf ratio&amp;quot; 0.8030&lt;br /&gt;
  &amp;quot;decay lf ratio&amp;quot; 1.0000&lt;br /&gt;
  &amp;quot;reflections&amp;quot; 96&lt;br /&gt;
  &amp;quot;reflections delay&amp;quot; 0.0080&lt;br /&gt;
  &amp;quot;reflections pan&amp;quot; 0.0000 0.0000 0.0000&lt;br /&gt;
  &amp;quot;reverb&amp;quot; 27&lt;br /&gt;
  &amp;quot;reverb delay&amp;quot; 0.0050&lt;br /&gt;
  &amp;quot;reverb pan&amp;quot; 0.0000 0.0000 0.0000&lt;br /&gt;
  &amp;quot;echo time&amp;quot; 0.0750&lt;br /&gt;
  &amp;quot;echo depth&amp;quot; 1.0000&lt;br /&gt;
  &amp;quot;modulation time&amp;quot; 0.2500&lt;br /&gt;
  &amp;quot;modulation depth&amp;quot; 0.0000&lt;br /&gt;
  &amp;quot;air absorption hf&amp;quot; -5.0000&lt;br /&gt;
  &amp;quot;hf reference&amp;quot; 5000.0000&lt;br /&gt;
  &amp;quot;lf reference&amp;quot; 250.0000&lt;br /&gt;
  &amp;quot;room rolloff factor&amp;quot; 0.0000&lt;br /&gt;
  &amp;quot;flags&amp;quot; 56&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And here is an artificial example of Version 2 definitions:&lt;br /&gt;
&lt;br /&gt;
  eaxreverb &amp;quot;myweirdstreets&amp;quot; {&lt;br /&gt;
    reflections_gain 0.5&lt;br /&gt;
    reflections_delay 0.0050&lt;br /&gt;
    late_reverb_gain 2.5&lt;br /&gt;
    late_reverb_delay 0.050&lt;br /&gt;
    echo_time 0.25&lt;br /&gt;
    echo_depth 0.9000&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
What does all this mean? &lt;br /&gt;
&lt;br /&gt;
There is a lot of sound design stuff that one could make guesses at if you&#039;ve ever used a reverb plugin in any sort of sound editing program. hf = high frequency, lf = low frequency, etc.&lt;br /&gt;
&lt;br /&gt;
A proper explanation of the parameters is given below.&lt;br /&gt;
&lt;br /&gt;
== Locations ==&lt;br /&gt;
Each reverb zone definition starts with a line which specifies to which location it must be applied:&lt;br /&gt;
&lt;br /&gt;
 reverb &amp;quot;&amp;lt;name of the location area you want to apply this to&amp;gt;&amp;quot;&lt;br /&gt;
 {&lt;br /&gt;
     //... (settings)&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Information about locations and how to set them up is available in another article: [[Location Settings #The Location Entities]].&lt;br /&gt;
Reverb zones use exactly the same locations as the ones which are used to specify per-area ambient sounds.&lt;br /&gt;
You should name every info_location entity, i.e. provide a &amp;quot;&amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt;&amp;quot; spawnarg for it. This is the name used in reverb zone definitions.&lt;br /&gt;
&lt;br /&gt;
As of TDM 2.06, you can&#039;t use capital letters in the name of your location entity or reverb zone. This may or may not change in the future.&lt;br /&gt;
&lt;br /&gt;
Here is an example of an entity which defines &amp;quot;canal_tunnel&amp;quot; location:&lt;br /&gt;
&lt;br /&gt;
 //======================= from volta_v1.map ====================&lt;br /&gt;
 // entity 3532&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;classname&amp;quot; &amp;quot;info_location&amp;quot;&lt;br /&gt;
   &amp;quot;name&amp;quot; &amp;quot;canal_tunnel&amp;quot;             //this is the name used&lt;br /&gt;
   &amp;quot;ambient&amp;quot; &amp;quot;snd_streets&amp;quot;&lt;br /&gt;
   &amp;quot;ambient_light&amp;quot; &amp;quot;0.04 0.03 0.02&amp;quot;&lt;br /&gt;
   &amp;quot;ambient_light_dynamic&amp;quot; &amp;quot;0.01 0.01 0.01&amp;quot;&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And this is the EFX effect (reverb zone) for it:&lt;br /&gt;
&lt;br /&gt;
 //======================= from volta_v1.efx ====================&lt;br /&gt;
 reverb &amp;quot;canal_tunnel&amp;quot; {             //name put to here&lt;br /&gt;
   &amp;quot;environment&amp;quot; 22&lt;br /&gt;
   &amp;quot;environment size&amp;quot; 1.8000&lt;br /&gt;
   &amp;quot;environment diffusion&amp;quot; 1.0000&lt;br /&gt;
   &amp;quot;room&amp;quot; -1000&lt;br /&gt;
   &amp;quot;room hf&amp;quot; -4000&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
During playing, the engine prints a message whenever the player&#039;s location changes.&lt;br /&gt;
It allows you to check if you have set up locations properly.&lt;br /&gt;
For instance, here are console messages showing a proper EFX location change:&lt;br /&gt;
&lt;br /&gt;
 Switching to EFX &#039;canal_tunnel&#039; (#295)&lt;br /&gt;
 Changed location from &#039;canal_streets&#039; to &#039;canal_tunnel&#039;.&lt;br /&gt;
&lt;br /&gt;
It is also possible to specify portal-area number instead of location name in the reverb zone definition.&lt;br /&gt;
The portal-area number is listed in the .proc file, which is created in the dmap process, in the format of &amp;lt;tt&amp;gt;_area&amp;lt;num&amp;gt;&amp;lt;/tt&amp;gt; (where &amp;lt;num&amp;gt; is the portal area number), e.g. &amp;lt;tt&amp;gt;_area15&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&#039;&#039;&#039;Beware:&#039;&#039;&#039; this functionality exists for fast hacking only! Do not release a mission with portal-area numbers in .efx file!&lt;br /&gt;
The main reason to avoid it is that portal-area numbers are auto-generated, so minor changes in your mission can change all of them.&lt;br /&gt;
&lt;br /&gt;
Finally, there is a &amp;quot;default&amp;quot; reverb environment which is used for any area in the map which does not have reverb information specified.&lt;br /&gt;
&lt;br /&gt;
The order that the sound system checks for reverb data is: area number -&amp;gt; location name -&amp;gt; default.&lt;br /&gt;
&lt;br /&gt;
== Changes during playing ==&lt;br /&gt;
Type &amp;quot;&amp;lt;tt&amp;gt;reloadSounds&amp;lt;/tt&amp;gt;&amp;quot; command into game console in order to reload EFX definitions.&lt;br /&gt;
&lt;br /&gt;
So when you experiment with EFX, execute this command after each tweak to EFX file to hear the difference immediately.&lt;br /&gt;
&lt;br /&gt;
== Suppress effect ==&lt;br /&gt;
Sometimes you want to disable EFX effect on a specific sound.&lt;br /&gt;
A typical example is when you have a voice in player&#039;s head, which must not depend on player&#039;s physical environment.&lt;br /&gt;
Another case is when some sound already has reverb baked in, so you don&#039;t what to double-reverb it. Although the best practice is to use sound samples without embedded reverb, combined with proper EFX definitions.&lt;br /&gt;
&lt;br /&gt;
You can disable all EFX effects on one specific sound shader by adding &amp;quot;&amp;lt;tt&amp;gt;no_efx&amp;lt;/tt&amp;gt;&amp;quot; keyword to its body.&lt;br /&gt;
For instance, here is how non-EFX version of blackjack unsheathing looks like:&lt;br /&gt;
 blackjack_unsheath&lt;br /&gt;
 {&lt;br /&gt;
   description &amp;quot;Made by pakmannen&amp;quot;&lt;br /&gt;
   sound/sfx/tools/melee/blackjack_unsheath.ogg&lt;br /&gt;
   no_efx                       //do NOT apply EFX to this sound&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note that if you change sound shaders, writing &amp;quot;&amp;lt;tt&amp;gt;reloadDecls&amp;lt;/tt&amp;gt;&amp;quot; in TDM game console is enough to reload them.&lt;br /&gt;
&lt;br /&gt;
There are a lot of stock sounds in TDM which should not be affected by EFX effects.&lt;br /&gt;
Starting from TDM 2.07, the corresponding core sounds are marked with &amp;quot;&amp;lt;tt&amp;gt;no_efx&amp;lt;/tt&amp;gt;&amp;quot; keyword (see issue [http://bugs.thedarkmod.com/view.php?id=4688 4688]).&lt;br /&gt;
If you discover any core sound which is affected by EFX while you believe it should not, start a discussion on forums.&lt;br /&gt;
&lt;br /&gt;
=Environment properties=&lt;br /&gt;
&lt;br /&gt;
== New properties (Version 2) ==&lt;br /&gt;
&lt;br /&gt;
With Version 2 of EFX file, the set of supported properties exactly matches the set of properties defined in OpenAL EFX for the &amp;quot;EAX Reverb&amp;quot; effect.&lt;br /&gt;
Note that EFX defines several types of effects, including &amp;quot;EAX Reverb&amp;quot;, &amp;quot;Standard Reverb&amp;quot;, &amp;quot;Chorus&amp;quot;, &amp;quot;Distortion&amp;quot;, &amp;quot;Echo&amp;quot;, &amp;quot;Flanger&amp;quot;, etc.&lt;br /&gt;
Only the first one is important, ignore all the rest (including the so-called &amp;quot;Standard Reverb&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
The detailed description of all the properties is given in &amp;quot;Appendix 1 – Effect property descriptions&amp;quot; of the [https://usermanual.wiki/Pdf/Effects20Extension20Guide.90272296/view#95 OpenAL Effects Extension Guide](pages 95-101).&lt;br /&gt;
The short list is also available in a table on [https://usermanual.wiki/Pdf/Effects20Extension20Guide.90272296/view#66 page 66 of the guide]:&lt;br /&gt;
&lt;br /&gt;
[[File:Eaxreverb_properties_screenshot.png|500px]]&lt;br /&gt;
&lt;br /&gt;
The only difference is that the property names in the guide have the &amp;lt;tt&amp;gt;AL_EAXREVERB_&amp;lt;/tt&amp;gt; prefix, while in TDM definitions this prefix is removed.&lt;br /&gt;
&lt;br /&gt;
== Presets (Version 2) ==&lt;br /&gt;
Presets can be set in 2 ways:&lt;br /&gt;
* in the .efx file&lt;br /&gt;
* As of TDM 2.13, the &#039;&#039;&#039;efx_preset&#039;&#039;&#039; spawnarg on the location entity for the location where you want to use the effect.&lt;br /&gt;
&lt;br /&gt;
=== File Method ===&lt;br /&gt;
&lt;br /&gt;
There is one special property &amp;lt;tt&amp;gt;PRESET&amp;lt;/tt&amp;gt;, which is not present in the EFX guide.&lt;br /&gt;
This property accepts the name of the preset which you want to use:&lt;br /&gt;
&lt;br /&gt;
 eaxreverb &amp;quot;myclassroom&amp;quot; {&lt;br /&gt;
   preset auditorium&lt;br /&gt;
 }&lt;br /&gt;
 eaxreverb &amp;quot;mycave&amp;quot; {&lt;br /&gt;
   preset cave&lt;br /&gt;
 }&lt;br /&gt;
 eaxreverb &amp;quot;mycorridor&amp;quot; {&lt;br /&gt;
   preset hallway&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
If you specify the preset like this, the values for all the reverb properties will be taken from the specified preset.&lt;br /&gt;
Additionally, you can override values of some properties if you define them manually &#039;&#039;&#039;after&#039;&#039;&#039; defining the preset.&lt;br /&gt;
&lt;br /&gt;
The preset property also accepts index of preset. Don&#039;t use indices for anything except experimentation, since they may change in future.&lt;br /&gt;
&lt;br /&gt;
=== Location Entity Method ===&lt;br /&gt;
On the location entity where you want to use the preset, set the spawnarg &#039;&#039;&#039;efx_preset&#039;&#039;&#039; to the value of the preset.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
efx_preset    CITY_SUBWAY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If using this method no .efx file is required at all, but using both methods simultaneously is supported.  In the case that both are used to set the preset value for a single location, the spawnarg value will take precedence.&lt;br /&gt;
&lt;br /&gt;
=== Preset Values ===&lt;br /&gt;
The presets were taken from OpenAL-Soft implementation which TDM uses.&lt;br /&gt;
Here is the full list of preset names:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;height:350px; overflow:scroll;&amp;quot;&amp;gt;&lt;br /&gt;
GENERIC&lt;br /&gt;
PADDEDCELL&lt;br /&gt;
ROOM&lt;br /&gt;
BATHROOM&lt;br /&gt;
LIVINGROOM&lt;br /&gt;
STONEROOM&lt;br /&gt;
AUDITORIUM&lt;br /&gt;
CONCERTHALL&lt;br /&gt;
CAVE&lt;br /&gt;
ARENA&lt;br /&gt;
HANGAR&lt;br /&gt;
CARPETEDHALLWAY&lt;br /&gt;
HALLWAY&lt;br /&gt;
STONECORRIDOR&lt;br /&gt;
ALLEY&lt;br /&gt;
FOREST&lt;br /&gt;
CITY&lt;br /&gt;
MOUNTAINS&lt;br /&gt;
QUARRY&lt;br /&gt;
PLAIN&lt;br /&gt;
PARKINGLOT&lt;br /&gt;
SEWERPIPE&lt;br /&gt;
UNDERWATER&lt;br /&gt;
DRUGGED&lt;br /&gt;
DIZZY&lt;br /&gt;
PSYCHOTIC&lt;br /&gt;
CASTLE_SMALLROOM&lt;br /&gt;
CASTLE_SHORTPASSAGE&lt;br /&gt;
CASTLE_MEDIUMROOM&lt;br /&gt;
CASTLE_LARGEROOM&lt;br /&gt;
CASTLE_LONGPASSAGE&lt;br /&gt;
CASTLE_HALL&lt;br /&gt;
CASTLE_CUPBOARD&lt;br /&gt;
CASTLE_COURTYARD&lt;br /&gt;
CASTLE_ALCOVE&lt;br /&gt;
FACTORY_SMALLROOM&lt;br /&gt;
FACTORY_SHORTPASSAGE&lt;br /&gt;
FACTORY_MEDIUMROOM&lt;br /&gt;
FACTORY_LARGEROOM&lt;br /&gt;
FACTORY_LONGPASSAGE&lt;br /&gt;
FACTORY_HALL&lt;br /&gt;
FACTORY_CUPBOARD&lt;br /&gt;
FACTORY_COURTYARD&lt;br /&gt;
FACTORY_ALCOVE&lt;br /&gt;
ICEPALACE_SMALLROOM&lt;br /&gt;
ICEPALACE_SHORTPASSAGE&lt;br /&gt;
ICEPALACE_MEDIUMROOM&lt;br /&gt;
ICEPALACE_LARGEROOM&lt;br /&gt;
ICEPALACE_LONGPASSAGE&lt;br /&gt;
ICEPALACE_HALL&lt;br /&gt;
ICEPALACE_CUPBOARD&lt;br /&gt;
ICEPALACE_COURTYARD&lt;br /&gt;
ICEPALACE_ALCOVE&lt;br /&gt;
SPACESTATION_SMALLROOM&lt;br /&gt;
SPACESTATION_SHORTPASSAGE&lt;br /&gt;
SPACESTATION_MEDIUMROOM&lt;br /&gt;
SPACESTATION_LARGEROOM&lt;br /&gt;
SPACESTATION_LONGPASSAGE&lt;br /&gt;
SPACESTATION_HALL&lt;br /&gt;
SPACESTATION_CUPBOARD&lt;br /&gt;
SPACESTATION_ALCOVE&lt;br /&gt;
WOODEN_SMALLROOM&lt;br /&gt;
WOODEN_SHORTPASSAGE&lt;br /&gt;
WOODEN_MEDIUMROOM&lt;br /&gt;
WOODEN_LARGEROOM&lt;br /&gt;
WOODEN_LONGPASSAGE&lt;br /&gt;
WOODEN_HALL&lt;br /&gt;
WOODEN_CUPBOARD&lt;br /&gt;
WOODEN_COURTYARD&lt;br /&gt;
WOODEN_ALCOVE&lt;br /&gt;
SPORT_EMPTYSTADIUM&lt;br /&gt;
SPORT_SQUASHCOURT&lt;br /&gt;
SPORT_SMALLSWIMMINGPOOL&lt;br /&gt;
SPORT_LARGESWIMMINGPOOL&lt;br /&gt;
SPORT_GYMNASIUM&lt;br /&gt;
SPORT_FULLSTADIUM&lt;br /&gt;
SPORT_STADIUMTANNOY&lt;br /&gt;
PREFAB_WORKSHOP&lt;br /&gt;
PREFAB_SCHOOLROOM&lt;br /&gt;
PREFAB_PRACTISEROOM&lt;br /&gt;
PREFAB_OUTHOUSE&lt;br /&gt;
PREFAB_CARAVAN&lt;br /&gt;
DOME_TOMB&lt;br /&gt;
PIPE_SMALL&lt;br /&gt;
DOME_SAINTPAULS&lt;br /&gt;
PIPE_LONGTHIN&lt;br /&gt;
PIPE_LARGE&lt;br /&gt;
PIPE_RESONANT&lt;br /&gt;
OUTDOORS_BACKYARD&lt;br /&gt;
OUTDOORS_ROLLINGPLAINS&lt;br /&gt;
OUTDOORS_DEEPCANYON&lt;br /&gt;
OUTDOORS_CREEK&lt;br /&gt;
OUTDOORS_VALLEY&lt;br /&gt;
MOOD_HEAVEN&lt;br /&gt;
MOOD_HELL&lt;br /&gt;
MOOD_MEMORY&lt;br /&gt;
DRIVING_COMMENTATOR&lt;br /&gt;
DRIVING_PITGARAGE&lt;br /&gt;
DRIVING_INCAR_RACER&lt;br /&gt;
DRIVING_INCAR_SPORTS&lt;br /&gt;
DRIVING_INCAR_LUXURY&lt;br /&gt;
DRIVING_FULLGRANDSTAND&lt;br /&gt;
DRIVING_EMPTYGRANDSTAND&lt;br /&gt;
DRIVING_TUNNEL&lt;br /&gt;
CITY_STREETS&lt;br /&gt;
CITY_SUBWAY&lt;br /&gt;
CITY_MUSEUM&lt;br /&gt;
CITY_LIBRARY&lt;br /&gt;
CITY_UNDERPASS&lt;br /&gt;
CITY_ABANDONED&lt;br /&gt;
DUSTYROOM&lt;br /&gt;
CHAPEL&lt;br /&gt;
SMALLWATERROOM                              &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Their definitions can be seen in [https://github.com/kcat/openal-soft/blob/master/include/AL/efx-presets.h efx-presets.h] from OpenAL-Soft source code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-expandtext=&amp;quot;Show&amp;quot; data-collapsetext=&amp;quot;Hide&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Legacy info (Version 1) ==&lt;br /&gt;
&lt;br /&gt;
This information is from the old official EAX 2.0 documentation, although some properties may have changed in scope and focus from EAX 2.0 to EAX 4.0. One can assume that the properties serve the same general purpose and that each property&#039;s value bounds are approximately the same.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;environment&#039;&#039;&#039; - Unknown. Likely sets the room to one of an unknown number of environment presets.&lt;br /&gt;
* &#039;&#039;&#039;environment size&#039;&#039;&#039; - The Environment Size property sets the apparent size of the surrounding “room.” The value of Environment Size can be considered a characteristic dimension of the room expressed in meters. Scaling Environment Size is equivalent to scaling all dimensions of the room by the same factor. Value type is FLOAT; value range is 1.0 to 100.0, expressed in linear meters.&lt;br /&gt;
* &#039;&#039;&#039;environment diffusion&#039;&#039;&#039; - The Environment Diffusion property controls the echo density in the reverberation decay. Reducing diffusion gives the reverberation a more “grainy” character that is especially noticeable with percussive sound sources. If you set a diffusion value of 0.0, the later reverberation sounds like a succession of distinct echoes. Value type is FLOAT; value range is 0.0 to 1.0, expressed in a linear multiplier value.&lt;br /&gt;
* &#039;&#039;&#039;room&#039;&#039;&#039; - The Room property is the master volume control for the reflected sound (both early reflections and reverberation) that EAX adds to all sound sources. It sets the maximum amount of reflections and reverberation added to the sound mix in the primary buffer (the listener). Value is LONG; value range is -10000 to 0, expressed in hundredths of one decibel (-100 dB to 0 dB).&lt;br /&gt;
* &#039;&#039;&#039;room hf&#039;&#039;&#039; - The Room HF property further tweaks reflected sound by attenuating it at high frequencies. It controls a low-pass filter that applies globally to the reflected sound of all sound sources. The exact qualities of this low-pass filter -- its frequency and its bandwidth (Q) -- are unknown. Value type is LONG; value range is -10000 to 0, expressed in hundredths of one decibel (-100 dB to 0 dB).&lt;br /&gt;
* &#039;&#039;&#039;room lf&#039;&#039;&#039; - Undocumented. Assumably, the Room LF property applies a high-pass to reflected sound in much the same way as Room HF applies low-pass. The value type and range is unknown, but is likely LONG, must be between -10000 and 0 and is expressed in hundredths of one decibel.&lt;br /&gt;
* &#039;&#039;&#039;decay time&#039;&#039;&#039; - The Decay Time property sets the reverberation decay time, or the time in which reverberation is diminished. It ranges from 0.1 (typically a small room with very dead surfaces) to 20.0 (typically a large room with very live surfaces). Value is FLOAT; value range is 0.1 to 20.0, expressed in seconds.&lt;br /&gt;
* &#039;&#039;&#039;decay hf ratio&#039;&#039;&#039; - The Decay HF Ratio property sets the spectral quality of the Decay Time parameter. It is the ratio of high-frequency decay time relative to the time set by Decay Time. The Decay HF Ratio value 1.0 is neutral: the decay time is equal for all frequencies. As Decay HF Ratio increases above 1.0, the high-frequency decay time increases so it’s longer than the decay time at low frequencies. You hear a more brilliant reverberation with a longer decay at high frequencies. As the Decay HF Ratio value decreases below 1.0, the high-frequency decay time decreases so it’s shorter than the decay time of the low frequencies. You hear a more natural reverberation. Value is FLOAT; value range is 0.1 to 20.0, expressed in a linear multiplier variable.&lt;br /&gt;
* &#039;&#039;&#039;decay lf ratio&#039;&#039;&#039; - Undocumented. It&#039;s likely best to leave the value at 1.0, though the value&#039;s type and range is probably the same as the Decay HF Ratio property.&lt;br /&gt;
* &#039;&#039;&#039;reflections&#039;&#039;&#039; - The Reflections property controls the overall amount of initial reflections relative to the Room property. The value of Reflections ranges from a maximum of 10 dB to a minimum of -100 dB (no initial reflections at all), and is corrected by the value of the Room property. The Reflections property does not affect the subsequent reverberation decay. You can increase the amount of initial reflections to simulate a more narrow space or closer walls, especially effective if you associate the initial reflections increase with a reduction in reflections delays by lowering the value of the Reflection Delay property. To simulate open or semi-open environments, you can maintain the amount of early reflections while reducing the value of the Reverb property, which controls later reflections. Value type is LONG; value range is -10000 to 1000, expressed in hundredths of one decibel (-100 dB to -10 dB).&lt;br /&gt;
* &#039;&#039;&#039;reflections delay&#039;&#039;&#039; - The Reflections Delay property is the amount of delay between the arrival time of the direct path from the source to the first reflection from the source. It ranges from 0 to 300 milliseconds. You can reduce or increase Reflections Delay to simulate closer or more distant reflective surfaces—and therefore control the perceived size of the room. Value is FLOAT; value range is 0.0 to 0.3, expressed in seconds (0 to 300 milliseconds).&lt;br /&gt;
* &#039;&#039;&#039;reflections pan&#039;&#039;&#039; - Undocumented. Three values are specified which may correspond to a generic &amp;quot;front&amp;quot;, &amp;quot;side&amp;quot; and &amp;quot;back/rear&amp;quot; configuration to control the directivity of early reflections in a 7.1 surround matrix. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;reverb&#039;&#039;&#039; - The Reverb property controls the overall amount of later reverberation relative to the Room property. (The Room property sets the overall amount of both initial reflections and later reverberation.) The value of Reverb ranges from a maximum of 20 dB to a minimum of -100 dB (no late reverberation at all). Value is LONG; value range is -10000 to 2000, expressed in hundredths of a decibel (-100 dB to 20 dB).&lt;br /&gt;
* &#039;&#039;&#039;reverb delay&#039;&#039;&#039; - The Reverb Delay property defines the begin time of the late reverberation relative to the time of the initial reflection (the first of the early reflections). It ranges from 0 to 100 milliseconds. Reducing or increasing Reverb Delay is useful for simulating a smaller or larger room. Value is FLOAT; value range is 0.0 to 0.1, expressed in seconds (0 to 100 milliseconds).&lt;br /&gt;
* &#039;&#039;&#039;reverb pan&#039;&#039;&#039; - Undocumented. Three values are specified which may correspond to a generic &amp;quot;front&amp;quot;, &amp;quot;side&amp;quot; and &amp;quot;back/rear&amp;quot; configuration to control the directivity of reverberation in a 7.1 surround matrix. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;echo time&#039;&#039;&#039; - Undocumented. Likely controls the decay time of echoes, or late reflections. A value of 0.1 likely presents a natural amount of echo, while increasing the value likely causes a &amp;quot;Grand Canyon&amp;quot; effect. Value type is likely FLOAT; value range is likely between 0.075 and 0.25, expressed in seconds.&lt;br /&gt;
* &#039;&#039;&#039;echo depth&#039;&#039;&#039; - Undocumented. May control directionality or tonal qualities of echoes arriving at the listener. Probably best to leave at 1.0. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;modulation time&#039;&#039;&#039; - Undocumented. Unknown purpose. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;modulation depth&#039;&#039;&#039; - Undocumented. Unknown purpose. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;air absorption hf&#039;&#039;&#039; - The Air Absorption HF property controls the distance-dependent attenuation at high frequencies caused by the propagation medium. It applies to both the direct path and reflected sound. You can use Air Absorption HF to simulate sound transmission through foggy air, dry air, smoky atmosphere, and so on. The default value is -0.05 dB per meter, which roughly corresponds to typical condition of atmospheric humidity, temperature, and so on. Lowering the value simulates a more absorbent medium (more humidity in the air, for example); raising the value simulates a less absorbent medium (dry desert air, for example). Value is FLOAT; value range is -100.0 to 0.0, expressed in hundredths of one decibel per meter (-1 dB to 0 dB). Default value is -5.0, which corresponds to -0.05 dB per meter attenuation.&lt;br /&gt;
* &#039;&#039;&#039;hf reference&#039;&#039;&#039; - Likely defines the frequency used for low-pass filters. Value is likely LONG; value range is likely between 0.0 and 20000.0, expressed in Hz. This value is probably best left at 5000.0.&lt;br /&gt;
* &#039;&#039;&#039;lf reference&#039;&#039;&#039; - Likely defines the frequency used for high-pass filters. Value is likely LONG; value range is likely between 0.0 and 20000.0, expressed in Hz. This value is probably best left at 250.0.&lt;br /&gt;
* &#039;&#039;&#039;room rolloff factor&#039;&#039;&#039; - The Room Rolloff property is one of two methods available in EAX to attenuate the reflected sound (containing both reflections, reverberation and echoes) according to source-listener distance. Value type is FLOAT; value range is 0.0 to 10.0, expressed in a linear multiplier value. It&#039;s recommended that users use 0.0, as id Software did not deviate from this value with Doom 3.&lt;br /&gt;
* &#039;&#039;&#039;flags&#039;&#039;&#039; - The Flags property is intended to control the relationship of high-level EAX properties to low-level properties. If certain EAX flags are set by setting the Flags property to a particular value, the setting of high-level properties is supposed to control the values of low-level properties based upon a defined scale, overriding specified values. In EAX 2.0, the value type is DWORD, whereas in Doom 3, it appears to be INT or some other type commonly used to store numeric values. In Doom 3, common values are 0, 2, 15, 31, 32, 56 and 63, but no documentation details what these values correspond to. If users wish to experiment with the Flags property, it is recommended that they choose from one of the above values. For reference, here is a table with the counts for each flag value as used in Doom 3:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 0.5em; margin-left: 2em; border: 1px solid #a0a0a0; text-align: right; border-collapse: collapse;&amp;quot; cellpadding=&amp;quot;2&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Flag decimal&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Flag binary&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Count&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|00000000&lt;br /&gt;
|497&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|00000010&lt;br /&gt;
|6&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|00001110&lt;br /&gt;
|15&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|00001111&lt;br /&gt;
|94&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|31&lt;br /&gt;
|00011111&lt;br /&gt;
|511&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|32&lt;br /&gt;
|00100000&lt;br /&gt;
|247&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|56&lt;br /&gt;
|00111000&lt;br /&gt;
|59&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|63&lt;br /&gt;
|00111111&lt;br /&gt;
|168&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Design.&#039;&#039;&#039;&lt;br /&gt;
In terms of the actual sound design for the values you put into these variables, here is a general tutorial on reverb from FruityLoops (NOTE: This is for a music production plugin, some of these don&#039;t apply, it&#039;s just to give a general idea on what certain variables do):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Low Cut&#039;&#039;&#039; Adjusts the low cutoff frequency. Use this to remove low frequencies from the input signal before reverb is added. For example, if you are adding reverb to, say a drum track, you might want to remove some of the &#039;rumble&#039; from the bass drum by attenuating the bass frequencies. Setting this parameter to the minimum value will bypass the Low Cut filter, displaying OFF in the value field.&lt;br /&gt;
* &#039;&#039;&#039;High Cut&#039;&#039;&#039; - Similar to the Low Cut, this adjusts the high cutoff frequency. Use this to remove high frequencies from the input signal.&lt;br /&gt;
* &#039;&#039;&#039;Predelay&#039;&#039;&#039; - Controls the delay time between the direct input signal and the first reverb reflection. This should be set to modest values for small rooms, and can be increased in relation to increases in room size. &#039;&#039;&#039;Predelay&#039;&#039;&#039; creates a slap-back echo effect that can both add atmosphere and muffle the signal, so use it wisely.&lt;br /&gt;
* &#039;&#039;&#039;Room Size&#039;&#039;&#039; - Use this to set the size of the virtual room where the reverb is created. The Room Size should be adjusted according to the decay time. Small rooms sound better with a short decay time, large rooms sound better with longer reverb times.&lt;br /&gt;
* &#039;&#039;&#039;Diffusion&#039;&#039;&#039; - Controls the density of the reflections bouncing off the walls of the virtual room. A low diffusion setting makes the reflections sound more distinct, like closely spaced echoes. A high diffusion setting creates reflections so close they sound more like noise, where no echoes can be distinguished.&lt;br /&gt;
* &#039;&#039;&#039;Color&#039;&#039;&#039; - The Color parameter is used for adjusting the decay time of the bass frequencies of the signal. This allows you to change the overall perceived mood or &#039;sound&#039; of the virtual room. A bright room has a low bass response, while warm rooms have a higher bass response. In a flat room, the response of the bass is equal to the general frequency response. Color has five settings: Brighter, Bright, Flat, Warm, Warmer.&lt;br /&gt;
* &#039;&#039;&#039;Decay&#039;&#039;&#039; - Controls the decay time of the reverb, the time it takes for the signal to decay to -60dB (1/1000 of the maximum amplitude). Use low decay times for small rooms or boxes, and long decay times for large rooms, halls or churches. You should also make sure that the Room Size parameter has an appropriate value.&lt;br /&gt;
* &#039;&#039;&#039;High Damping&#039;&#039;&#039; - This parameter allows you to adjust damping of the high frequencies in the reverb signal over time. Damping refers to the high frequencies being attenuated and dying out. This causes the sound to become gradually muffled and warm like it is being absorbed in the room. Setting this parameter to the maximum value will bypass the High Damping, displaying OFF in the value field.&lt;br /&gt;
* &#039;&#039;&#039;Dry&#039;&#039;&#039; - Sets the relative dry output level.&lt;br /&gt;
* &#039;&#039;&#039;Reverb&#039;&#039;&#039; - Sets the relative reverb (wet) signal level.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Error Check=&lt;br /&gt;
If you modified the presets in your EFX file, you can check for errors ingame. Load your map and open the console. Type &#039;&#039;reloadSounds&#039;&#039;, this will trigger the reload of the EFX used in your map and print out the vars which cause an error (like a value exceeding the maximum range). Note that if your EFX files contain errors, this will make the game ignore the EFX settings you chose. &lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
See the &amp;quot;EFX Reverb&amp;quot; column of &#039;&#039;&#039;[[Fan_Missions_for_The_Dark_Mod|Fan Missions page]]&#039;&#039;&#039;. Missions with &amp;quot;Yes&amp;quot; have EFX Reverb. &lt;br /&gt;
&amp;lt;br&amp;gt;Most missions use v2.0 presets but a few missions such as &amp;quot;Volta and the Stone&amp;quot; and Behind Closed Doors use v1.0 settings.&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
The Version 2 definitions were implemented due to [http://bugs.thedarkmod.com/view.php?id=4815 issue 4815], it has some brief explanation.&lt;br /&gt;
&lt;br /&gt;
A tutorial based around EFX can be found [http://forums.thedarkmod.com/topic/19205-getting-started-with-the-efx-room-reverb-system-wip/ here]&lt;br /&gt;
&lt;br /&gt;
An old demonstration map of EAX in TDM is included [http://forums.thedarkmod.com/topic/11045-environmental-audio-extensions-eax-in-tdm/ here]&lt;br /&gt;
&lt;br /&gt;
A discussion about no_efx is [http://forums.thedarkmod.com/topic/19213-efx-discussion here]&lt;br /&gt;
&lt;br /&gt;
The first version of this article was written by Ishtvan [https://forums.thedarkmod.com/index.php?/topic/2071-setting-reverb-data-in-new-soundengine-wiki/ here]&lt;br /&gt;
&lt;br /&gt;
[[Category:Sound]]&lt;br /&gt;
[[Category:Tutorial]]&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=Setting_Reverb_Data_of_Rooms_(EAX)&amp;diff=33807</id>
		<title>Setting Reverb Data of Rooms (EAX)</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=Setting_Reverb_Data_of_Rooms_(EAX)&amp;diff=33807"/>
		<updated>2025-01-11T22:03:05Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: /* Location Entity Method */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
This document will attempt to explain how to set the new EFX settings in your rooms when mapping.&lt;br /&gt;
&lt;br /&gt;
Previously these settings were known as EAX settings, and required EAX 4.0-compatible sound card.&lt;br /&gt;
In TDM 2.06, EAX technology was completely replaced with OpenAL EFX, which is now processed in software (by [https://github.com/kcat/openal-soft openal-soft]) without any requirements on sound card.&lt;br /&gt;
&lt;br /&gt;
= General =&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
&lt;br /&gt;
EFX for a fan mission can be configured with or without a configuration file.  However, fileless configuration is only supported for [[Setting_Reverb_Data_of_Rooms_(EAX)#Presets_(Version_2)|EFX presets]].&lt;br /&gt;
&lt;br /&gt;
== EFX file ==&lt;br /&gt;
The EFX info for a map should be stored in the file &amp;quot;&amp;lt;tt&amp;gt;efxs/&amp;lt;mapname&amp;gt;.efx&amp;lt;/tt&amp;gt;&amp;quot;, where &amp;lt;mapname&amp;gt; is the name of your .map file (without extension).&lt;br /&gt;
&lt;br /&gt;
In order to check that you have put the file into right location, start your mission in game.&lt;br /&gt;
If TDM manages to load your efx file, then you will see the following message in console:&lt;br /&gt;
 sound: found efxs/&amp;lt;mapname&amp;gt;.efx&lt;br /&gt;
If you failed something, then you will see a bit different message there:&lt;br /&gt;
 sound: missing efxs/&amp;lt;mapname&amp;gt;.efx&lt;br /&gt;
In both cases some additional diagnostic messages can be present nearby.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; you must enable &amp;quot;&amp;lt;tt&amp;gt;OpenAL EFX&amp;lt;/tt&amp;gt;&amp;quot; in sound settings in the main menu, otherwise TDM won&#039;t even try to load the efx file.&lt;br /&gt;
&lt;br /&gt;
It is a plain text file, so you can open it up in your text editor of choice.&lt;br /&gt;
&lt;br /&gt;
Any EFX file must start with a header which specifies its &#039;&#039;&#039;version&#039;&#039;&#039;:&lt;br /&gt;
 Version 2&lt;br /&gt;
If you forget this line, then your EFX file will &#039;&#039;&#039;not&#039;&#039;&#039; be loaded.&lt;br /&gt;
The following versions are supported:&lt;br /&gt;
* &amp;lt;tt&amp;gt;Version 1&amp;lt;/tt&amp;gt; was supported by TDM from the very beginning. It uses some non-standard terms and quantities, which makes it hard to work with.&lt;br /&gt;
* &amp;lt;tt&amp;gt;Version 2&amp;lt;/tt&amp;gt; was added in TDM 2.07. It uses the parameters from OpenAL EFX and supports a lot of presets. &#039;&#039;&#039;Recommended for all new missions.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The rest of the file consists of separate blocks, one for each &amp;quot;reverb zone&amp;quot;.&lt;br /&gt;
Each block must start with &amp;lt;tt&amp;gt;reverb&amp;lt;/tt&amp;gt; keyword for Version 1 definitions, and &amp;lt;tt&amp;gt;eaxreverb&amp;lt;/tt&amp;gt; keyword for Version 2 definitions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here is an example of such block from mars_city1.efx of the original Doom 3 game (Version 1):&lt;br /&gt;
&lt;br /&gt;
 // reverb maintenance&lt;br /&gt;
 reverb &amp;quot;maintenance&amp;quot; {&lt;br /&gt;
  &amp;quot;environment&amp;quot; 26&lt;br /&gt;
  &amp;quot;environment size&amp;quot; 5.0670&lt;br /&gt;
  &amp;quot;environment diffusion&amp;quot; 0.6030&lt;br /&gt;
  &amp;quot;room&amp;quot; -411&lt;br /&gt;
  &amp;quot;room hf&amp;quot; -685&lt;br /&gt;
  &amp;quot;room lf&amp;quot; 0&lt;br /&gt;
  &amp;quot;decay time&amp;quot; 1.7360&lt;br /&gt;
  &amp;quot;decay hf ratio&amp;quot; 0.8030&lt;br /&gt;
  &amp;quot;decay lf ratio&amp;quot; 1.0000&lt;br /&gt;
  &amp;quot;reflections&amp;quot; 96&lt;br /&gt;
  &amp;quot;reflections delay&amp;quot; 0.0080&lt;br /&gt;
  &amp;quot;reflections pan&amp;quot; 0.0000 0.0000 0.0000&lt;br /&gt;
  &amp;quot;reverb&amp;quot; 27&lt;br /&gt;
  &amp;quot;reverb delay&amp;quot; 0.0050&lt;br /&gt;
  &amp;quot;reverb pan&amp;quot; 0.0000 0.0000 0.0000&lt;br /&gt;
  &amp;quot;echo time&amp;quot; 0.0750&lt;br /&gt;
  &amp;quot;echo depth&amp;quot; 1.0000&lt;br /&gt;
  &amp;quot;modulation time&amp;quot; 0.2500&lt;br /&gt;
  &amp;quot;modulation depth&amp;quot; 0.0000&lt;br /&gt;
  &amp;quot;air absorption hf&amp;quot; -5.0000&lt;br /&gt;
  &amp;quot;hf reference&amp;quot; 5000.0000&lt;br /&gt;
  &amp;quot;lf reference&amp;quot; 250.0000&lt;br /&gt;
  &amp;quot;room rolloff factor&amp;quot; 0.0000&lt;br /&gt;
  &amp;quot;flags&amp;quot; 56&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And here is an artificial example of Version 2 definitions:&lt;br /&gt;
&lt;br /&gt;
  eaxreverb &amp;quot;myweirdstreets&amp;quot; {&lt;br /&gt;
    reflections_gain 0.5&lt;br /&gt;
    reflections_delay 0.0050&lt;br /&gt;
    late_reverb_gain 2.5&lt;br /&gt;
    late_reverb_delay 0.050&lt;br /&gt;
    echo_time 0.25&lt;br /&gt;
    echo_depth 0.9000&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
What does all this mean? &lt;br /&gt;
&lt;br /&gt;
There is a lot of sound design stuff that one could make guesses at if you&#039;ve ever used a reverb plugin in any sort of sound editing program. hf = high frequency, lf = low frequency, etc.&lt;br /&gt;
&lt;br /&gt;
A proper explanation of the parameters is given below.&lt;br /&gt;
&lt;br /&gt;
== Locations ==&lt;br /&gt;
Each reverb zone definition starts with a line which specifies to which location it must be applied:&lt;br /&gt;
&lt;br /&gt;
 reverb &amp;quot;&amp;lt;name of the location area you want to apply this to&amp;gt;&amp;quot;&lt;br /&gt;
 {&lt;br /&gt;
     //... (settings)&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Information about locations and how to set them up is available in another article: [[Location Settings #The Location Entities]].&lt;br /&gt;
Reverb zones use exactly the same locations as the ones which are used to specify per-area ambient sounds.&lt;br /&gt;
You should name every info_location entity, i.e. provide a &amp;quot;&amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt;&amp;quot; spawnarg for it. This is the name used in reverb zone definitions.&lt;br /&gt;
&lt;br /&gt;
As of TDM 2.06, you can&#039;t use capital letters in the name of your location entity or reverb zone. This may or may not change in the future.&lt;br /&gt;
&lt;br /&gt;
Here is an example of an entity which defines &amp;quot;canal_tunnel&amp;quot; location:&lt;br /&gt;
&lt;br /&gt;
 //======================= from volta_v1.map ====================&lt;br /&gt;
 // entity 3532&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;classname&amp;quot; &amp;quot;info_location&amp;quot;&lt;br /&gt;
   &amp;quot;name&amp;quot; &amp;quot;canal_tunnel&amp;quot;             //this is the name used&lt;br /&gt;
   &amp;quot;ambient&amp;quot; &amp;quot;snd_streets&amp;quot;&lt;br /&gt;
   &amp;quot;ambient_light&amp;quot; &amp;quot;0.04 0.03 0.02&amp;quot;&lt;br /&gt;
   &amp;quot;ambient_light_dynamic&amp;quot; &amp;quot;0.01 0.01 0.01&amp;quot;&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And this is the EFX effect (reverb zone) for it:&lt;br /&gt;
&lt;br /&gt;
 //======================= from volta_v1.efx ====================&lt;br /&gt;
 reverb &amp;quot;canal_tunnel&amp;quot; {             //name put to here&lt;br /&gt;
   &amp;quot;environment&amp;quot; 22&lt;br /&gt;
   &amp;quot;environment size&amp;quot; 1.8000&lt;br /&gt;
   &amp;quot;environment diffusion&amp;quot; 1.0000&lt;br /&gt;
   &amp;quot;room&amp;quot; -1000&lt;br /&gt;
   &amp;quot;room hf&amp;quot; -4000&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
During playing, the engine prints a message whenever the player&#039;s location changes.&lt;br /&gt;
It allows you to check if you have set up locations properly.&lt;br /&gt;
For instance, here are console messages showing a proper EFX location change:&lt;br /&gt;
&lt;br /&gt;
 Switching to EFX &#039;canal_tunnel&#039; (#295)&lt;br /&gt;
 Changed location from &#039;canal_streets&#039; to &#039;canal_tunnel&#039;.&lt;br /&gt;
&lt;br /&gt;
It is also possible to specify portal-area number instead of location name in the reverb zone definition.&lt;br /&gt;
The portal-area number is listed in the .proc file, which is created in the dmap process, in the format of &amp;lt;tt&amp;gt;_area&amp;lt;num&amp;gt;&amp;lt;/tt&amp;gt; (where &amp;lt;num&amp;gt; is the portal area number), e.g. &amp;lt;tt&amp;gt;_area15&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&#039;&#039;&#039;Beware:&#039;&#039;&#039; this functionality exists for fast hacking only! Do not release a mission with portal-area numbers in .efx file!&lt;br /&gt;
The main reason to avoid it is that portal-area numbers are auto-generated, so minor changes in your mission can change all of them.&lt;br /&gt;
&lt;br /&gt;
Finally, there is a &amp;quot;default&amp;quot; reverb environment which is used for any area in the map which does not have reverb information specified.&lt;br /&gt;
&lt;br /&gt;
The order that the sound system checks for reverb data is: area number -&amp;gt; location name -&amp;gt; default.&lt;br /&gt;
&lt;br /&gt;
== Changes during playing ==&lt;br /&gt;
Type &amp;quot;&amp;lt;tt&amp;gt;reloadSounds&amp;lt;/tt&amp;gt;&amp;quot; command into game console in order to reload EFX definitions.&lt;br /&gt;
&lt;br /&gt;
So when you experiment with EFX, execute this command after each tweak to EFX file to hear the difference immediately.&lt;br /&gt;
&lt;br /&gt;
== Suppress effect ==&lt;br /&gt;
Sometimes you want to disable EFX effect on a specific sound.&lt;br /&gt;
A typical example is when you have a voice in player&#039;s head, which must not depend on player&#039;s physical environment.&lt;br /&gt;
Another case is when some sound already has reverb baked in, so you don&#039;t what to double-reverb it. Although the best practice is to use sound samples without embedded reverb, combined with proper EFX definitions.&lt;br /&gt;
&lt;br /&gt;
You can disable all EFX effects on one specific sound shader by adding &amp;quot;&amp;lt;tt&amp;gt;no_efx&amp;lt;/tt&amp;gt;&amp;quot; keyword to its body.&lt;br /&gt;
For instance, here is how non-EFX version of blackjack unsheathing looks like:&lt;br /&gt;
 blackjack_unsheath&lt;br /&gt;
 {&lt;br /&gt;
   description &amp;quot;Made by pakmannen&amp;quot;&lt;br /&gt;
   sound/sfx/tools/melee/blackjack_unsheath.ogg&lt;br /&gt;
   no_efx                       //do NOT apply EFX to this sound&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note that if you change sound shaders, writing &amp;quot;&amp;lt;tt&amp;gt;reloadDecls&amp;lt;/tt&amp;gt;&amp;quot; in TDM game console is enough to reload them.&lt;br /&gt;
&lt;br /&gt;
There are a lot of stock sounds in TDM which should not be affected by EFX effects.&lt;br /&gt;
Starting from TDM 2.07, the corresponding core sounds are marked with &amp;quot;&amp;lt;tt&amp;gt;no_efx&amp;lt;/tt&amp;gt;&amp;quot; keyword (see issue [http://bugs.thedarkmod.com/view.php?id=4688 4688]).&lt;br /&gt;
If you discover any core sound which is affected by EFX while you believe it should not, start a discussion on forums.&lt;br /&gt;
&lt;br /&gt;
=Environment properties=&lt;br /&gt;
&lt;br /&gt;
== New properties (Version 2) ==&lt;br /&gt;
&lt;br /&gt;
With Version 2 of EFX file, the set of supported properties exactly matches the set of properties defined in OpenAL EFX for the &amp;quot;EAX Reverb&amp;quot; effect.&lt;br /&gt;
Note that EFX defines several types of effects, including &amp;quot;EAX Reverb&amp;quot;, &amp;quot;Standard Reverb&amp;quot;, &amp;quot;Chorus&amp;quot;, &amp;quot;Distortion&amp;quot;, &amp;quot;Echo&amp;quot;, &amp;quot;Flanger&amp;quot;, etc.&lt;br /&gt;
Only the first one is important, ignore all the rest (including the so-called &amp;quot;Standard Reverb&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
The detailed description of all the properties is given in &amp;quot;Appendix 1 – Effect property descriptions&amp;quot; of the [https://usermanual.wiki/Pdf/Effects20Extension20Guide.90272296/view#95 OpenAL Effects Extension Guide](pages 95-101).&lt;br /&gt;
The short list is also available in a table on [https://usermanual.wiki/Pdf/Effects20Extension20Guide.90272296/view#66 page 66 of the guide]:&lt;br /&gt;
&lt;br /&gt;
[[File:Eaxreverb_properties_screenshot.png|500px]]&lt;br /&gt;
&lt;br /&gt;
The only difference is that the property names in the guide have the &amp;lt;tt&amp;gt;AL_EAXREVERB_&amp;lt;/tt&amp;gt; prefix, while in TDM definitions this prefix is removed.&lt;br /&gt;
&lt;br /&gt;
== Presets (Version 2) ==&lt;br /&gt;
Presets can be set in 2 ways:&lt;br /&gt;
* in the .efx file&lt;br /&gt;
* As of TDM 2.13, the &#039;&#039;&#039;efx_preset&#039;&#039;&#039; spawnarg on the location entity for the location where you want to use the effect.&lt;br /&gt;
&lt;br /&gt;
=== File Method ===&lt;br /&gt;
&lt;br /&gt;
There is one special property &amp;lt;tt&amp;gt;PRESET&amp;lt;/tt&amp;gt;, which is not present in the EFX guide.&lt;br /&gt;
This property accepts the name of the preset which you want to use:&lt;br /&gt;
&lt;br /&gt;
 eaxreverb &amp;quot;myclassroom&amp;quot; {&lt;br /&gt;
   preset auditorium&lt;br /&gt;
 }&lt;br /&gt;
 eaxreverb &amp;quot;mycave&amp;quot; {&lt;br /&gt;
   preset cave&lt;br /&gt;
 }&lt;br /&gt;
 eaxreverb &amp;quot;mycorridor&amp;quot; {&lt;br /&gt;
   preset hallway&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
If you specify the preset like this, the values for all the reverb properties will be taken from the specified preset.&lt;br /&gt;
Additionally, you can override values of some properties if you define them manually &#039;&#039;&#039;after&#039;&#039;&#039; defining the preset.&lt;br /&gt;
&lt;br /&gt;
The preset property also accepts index of preset. Don&#039;t use indices for anything except experimentation, since they may change in future.&lt;br /&gt;
&lt;br /&gt;
=== Location Entity Method ===&lt;br /&gt;
On the location entity where you want to use the preset, set the spawnarg &#039;&#039;&#039;efx_preset&#039;&#039;&#039; to the value of the preset.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
efx_preset    CITY_SUBWAY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If using this method the .efx file is required at all, but using both methods simultaneously is supported.  In the case that both are used to set the preset value for a single location, the spawnarg value will take precedence.&lt;br /&gt;
&lt;br /&gt;
=== Preset Values ===&lt;br /&gt;
The presets were taken from OpenAL-Soft implementation which TDM uses.&lt;br /&gt;
Here is the full list of preset names:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;height:350px; overflow:scroll;&amp;quot;&amp;gt;&lt;br /&gt;
GENERIC&lt;br /&gt;
PADDEDCELL&lt;br /&gt;
ROOM&lt;br /&gt;
BATHROOM&lt;br /&gt;
LIVINGROOM&lt;br /&gt;
STONEROOM&lt;br /&gt;
AUDITORIUM&lt;br /&gt;
CONCERTHALL&lt;br /&gt;
CAVE&lt;br /&gt;
ARENA&lt;br /&gt;
HANGAR&lt;br /&gt;
CARPETEDHALLWAY&lt;br /&gt;
HALLWAY&lt;br /&gt;
STONECORRIDOR&lt;br /&gt;
ALLEY&lt;br /&gt;
FOREST&lt;br /&gt;
CITY&lt;br /&gt;
MOUNTAINS&lt;br /&gt;
QUARRY&lt;br /&gt;
PLAIN&lt;br /&gt;
PARKINGLOT&lt;br /&gt;
SEWERPIPE&lt;br /&gt;
UNDERWATER&lt;br /&gt;
DRUGGED&lt;br /&gt;
DIZZY&lt;br /&gt;
PSYCHOTIC&lt;br /&gt;
CASTLE_SMALLROOM&lt;br /&gt;
CASTLE_SHORTPASSAGE&lt;br /&gt;
CASTLE_MEDIUMROOM&lt;br /&gt;
CASTLE_LARGEROOM&lt;br /&gt;
CASTLE_LONGPASSAGE&lt;br /&gt;
CASTLE_HALL&lt;br /&gt;
CASTLE_CUPBOARD&lt;br /&gt;
CASTLE_COURTYARD&lt;br /&gt;
CASTLE_ALCOVE&lt;br /&gt;
FACTORY_SMALLROOM&lt;br /&gt;
FACTORY_SHORTPASSAGE&lt;br /&gt;
FACTORY_MEDIUMROOM&lt;br /&gt;
FACTORY_LARGEROOM&lt;br /&gt;
FACTORY_LONGPASSAGE&lt;br /&gt;
FACTORY_HALL&lt;br /&gt;
FACTORY_CUPBOARD&lt;br /&gt;
FACTORY_COURTYARD&lt;br /&gt;
FACTORY_ALCOVE&lt;br /&gt;
ICEPALACE_SMALLROOM&lt;br /&gt;
ICEPALACE_SHORTPASSAGE&lt;br /&gt;
ICEPALACE_MEDIUMROOM&lt;br /&gt;
ICEPALACE_LARGEROOM&lt;br /&gt;
ICEPALACE_LONGPASSAGE&lt;br /&gt;
ICEPALACE_HALL&lt;br /&gt;
ICEPALACE_CUPBOARD&lt;br /&gt;
ICEPALACE_COURTYARD&lt;br /&gt;
ICEPALACE_ALCOVE&lt;br /&gt;
SPACESTATION_SMALLROOM&lt;br /&gt;
SPACESTATION_SHORTPASSAGE&lt;br /&gt;
SPACESTATION_MEDIUMROOM&lt;br /&gt;
SPACESTATION_LARGEROOM&lt;br /&gt;
SPACESTATION_LONGPASSAGE&lt;br /&gt;
SPACESTATION_HALL&lt;br /&gt;
SPACESTATION_CUPBOARD&lt;br /&gt;
SPACESTATION_ALCOVE&lt;br /&gt;
WOODEN_SMALLROOM&lt;br /&gt;
WOODEN_SHORTPASSAGE&lt;br /&gt;
WOODEN_MEDIUMROOM&lt;br /&gt;
WOODEN_LARGEROOM&lt;br /&gt;
WOODEN_LONGPASSAGE&lt;br /&gt;
WOODEN_HALL&lt;br /&gt;
WOODEN_CUPBOARD&lt;br /&gt;
WOODEN_COURTYARD&lt;br /&gt;
WOODEN_ALCOVE&lt;br /&gt;
SPORT_EMPTYSTADIUM&lt;br /&gt;
SPORT_SQUASHCOURT&lt;br /&gt;
SPORT_SMALLSWIMMINGPOOL&lt;br /&gt;
SPORT_LARGESWIMMINGPOOL&lt;br /&gt;
SPORT_GYMNASIUM&lt;br /&gt;
SPORT_FULLSTADIUM&lt;br /&gt;
SPORT_STADIUMTANNOY&lt;br /&gt;
PREFAB_WORKSHOP&lt;br /&gt;
PREFAB_SCHOOLROOM&lt;br /&gt;
PREFAB_PRACTISEROOM&lt;br /&gt;
PREFAB_OUTHOUSE&lt;br /&gt;
PREFAB_CARAVAN&lt;br /&gt;
DOME_TOMB&lt;br /&gt;
PIPE_SMALL&lt;br /&gt;
DOME_SAINTPAULS&lt;br /&gt;
PIPE_LONGTHIN&lt;br /&gt;
PIPE_LARGE&lt;br /&gt;
PIPE_RESONANT&lt;br /&gt;
OUTDOORS_BACKYARD&lt;br /&gt;
OUTDOORS_ROLLINGPLAINS&lt;br /&gt;
OUTDOORS_DEEPCANYON&lt;br /&gt;
OUTDOORS_CREEK&lt;br /&gt;
OUTDOORS_VALLEY&lt;br /&gt;
MOOD_HEAVEN&lt;br /&gt;
MOOD_HELL&lt;br /&gt;
MOOD_MEMORY&lt;br /&gt;
DRIVING_COMMENTATOR&lt;br /&gt;
DRIVING_PITGARAGE&lt;br /&gt;
DRIVING_INCAR_RACER&lt;br /&gt;
DRIVING_INCAR_SPORTS&lt;br /&gt;
DRIVING_INCAR_LUXURY&lt;br /&gt;
DRIVING_FULLGRANDSTAND&lt;br /&gt;
DRIVING_EMPTYGRANDSTAND&lt;br /&gt;
DRIVING_TUNNEL&lt;br /&gt;
CITY_STREETS&lt;br /&gt;
CITY_SUBWAY&lt;br /&gt;
CITY_MUSEUM&lt;br /&gt;
CITY_LIBRARY&lt;br /&gt;
CITY_UNDERPASS&lt;br /&gt;
CITY_ABANDONED&lt;br /&gt;
DUSTYROOM&lt;br /&gt;
CHAPEL&lt;br /&gt;
SMALLWATERROOM                              &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Their definitions can be seen in [https://github.com/kcat/openal-soft/blob/master/include/AL/efx-presets.h efx-presets.h] from OpenAL-Soft source code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-expandtext=&amp;quot;Show&amp;quot; data-collapsetext=&amp;quot;Hide&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Legacy info (Version 1) ==&lt;br /&gt;
&lt;br /&gt;
This information is from the old official EAX 2.0 documentation, although some properties may have changed in scope and focus from EAX 2.0 to EAX 4.0. One can assume that the properties serve the same general purpose and that each property&#039;s value bounds are approximately the same.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;environment&#039;&#039;&#039; - Unknown. Likely sets the room to one of an unknown number of environment presets.&lt;br /&gt;
* &#039;&#039;&#039;environment size&#039;&#039;&#039; - The Environment Size property sets the apparent size of the surrounding “room.” The value of Environment Size can be considered a characteristic dimension of the room expressed in meters. Scaling Environment Size is equivalent to scaling all dimensions of the room by the same factor. Value type is FLOAT; value range is 1.0 to 100.0, expressed in linear meters.&lt;br /&gt;
* &#039;&#039;&#039;environment diffusion&#039;&#039;&#039; - The Environment Diffusion property controls the echo density in the reverberation decay. Reducing diffusion gives the reverberation a more “grainy” character that is especially noticeable with percussive sound sources. If you set a diffusion value of 0.0, the later reverberation sounds like a succession of distinct echoes. Value type is FLOAT; value range is 0.0 to 1.0, expressed in a linear multiplier value.&lt;br /&gt;
* &#039;&#039;&#039;room&#039;&#039;&#039; - The Room property is the master volume control for the reflected sound (both early reflections and reverberation) that EAX adds to all sound sources. It sets the maximum amount of reflections and reverberation added to the sound mix in the primary buffer (the listener). Value is LONG; value range is -10000 to 0, expressed in hundredths of one decibel (-100 dB to 0 dB).&lt;br /&gt;
* &#039;&#039;&#039;room hf&#039;&#039;&#039; - The Room HF property further tweaks reflected sound by attenuating it at high frequencies. It controls a low-pass filter that applies globally to the reflected sound of all sound sources. The exact qualities of this low-pass filter -- its frequency and its bandwidth (Q) -- are unknown. Value type is LONG; value range is -10000 to 0, expressed in hundredths of one decibel (-100 dB to 0 dB).&lt;br /&gt;
* &#039;&#039;&#039;room lf&#039;&#039;&#039; - Undocumented. Assumably, the Room LF property applies a high-pass to reflected sound in much the same way as Room HF applies low-pass. The value type and range is unknown, but is likely LONG, must be between -10000 and 0 and is expressed in hundredths of one decibel.&lt;br /&gt;
* &#039;&#039;&#039;decay time&#039;&#039;&#039; - The Decay Time property sets the reverberation decay time, or the time in which reverberation is diminished. It ranges from 0.1 (typically a small room with very dead surfaces) to 20.0 (typically a large room with very live surfaces). Value is FLOAT; value range is 0.1 to 20.0, expressed in seconds.&lt;br /&gt;
* &#039;&#039;&#039;decay hf ratio&#039;&#039;&#039; - The Decay HF Ratio property sets the spectral quality of the Decay Time parameter. It is the ratio of high-frequency decay time relative to the time set by Decay Time. The Decay HF Ratio value 1.0 is neutral: the decay time is equal for all frequencies. As Decay HF Ratio increases above 1.0, the high-frequency decay time increases so it’s longer than the decay time at low frequencies. You hear a more brilliant reverberation with a longer decay at high frequencies. As the Decay HF Ratio value decreases below 1.0, the high-frequency decay time decreases so it’s shorter than the decay time of the low frequencies. You hear a more natural reverberation. Value is FLOAT; value range is 0.1 to 20.0, expressed in a linear multiplier variable.&lt;br /&gt;
* &#039;&#039;&#039;decay lf ratio&#039;&#039;&#039; - Undocumented. It&#039;s likely best to leave the value at 1.0, though the value&#039;s type and range is probably the same as the Decay HF Ratio property.&lt;br /&gt;
* &#039;&#039;&#039;reflections&#039;&#039;&#039; - The Reflections property controls the overall amount of initial reflections relative to the Room property. The value of Reflections ranges from a maximum of 10 dB to a minimum of -100 dB (no initial reflections at all), and is corrected by the value of the Room property. The Reflections property does not affect the subsequent reverberation decay. You can increase the amount of initial reflections to simulate a more narrow space or closer walls, especially effective if you associate the initial reflections increase with a reduction in reflections delays by lowering the value of the Reflection Delay property. To simulate open or semi-open environments, you can maintain the amount of early reflections while reducing the value of the Reverb property, which controls later reflections. Value type is LONG; value range is -10000 to 1000, expressed in hundredths of one decibel (-100 dB to -10 dB).&lt;br /&gt;
* &#039;&#039;&#039;reflections delay&#039;&#039;&#039; - The Reflections Delay property is the amount of delay between the arrival time of the direct path from the source to the first reflection from the source. It ranges from 0 to 300 milliseconds. You can reduce or increase Reflections Delay to simulate closer or more distant reflective surfaces—and therefore control the perceived size of the room. Value is FLOAT; value range is 0.0 to 0.3, expressed in seconds (0 to 300 milliseconds).&lt;br /&gt;
* &#039;&#039;&#039;reflections pan&#039;&#039;&#039; - Undocumented. Three values are specified which may correspond to a generic &amp;quot;front&amp;quot;, &amp;quot;side&amp;quot; and &amp;quot;back/rear&amp;quot; configuration to control the directivity of early reflections in a 7.1 surround matrix. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;reverb&#039;&#039;&#039; - The Reverb property controls the overall amount of later reverberation relative to the Room property. (The Room property sets the overall amount of both initial reflections and later reverberation.) The value of Reverb ranges from a maximum of 20 dB to a minimum of -100 dB (no late reverberation at all). Value is LONG; value range is -10000 to 2000, expressed in hundredths of a decibel (-100 dB to 20 dB).&lt;br /&gt;
* &#039;&#039;&#039;reverb delay&#039;&#039;&#039; - The Reverb Delay property defines the begin time of the late reverberation relative to the time of the initial reflection (the first of the early reflections). It ranges from 0 to 100 milliseconds. Reducing or increasing Reverb Delay is useful for simulating a smaller or larger room. Value is FLOAT; value range is 0.0 to 0.1, expressed in seconds (0 to 100 milliseconds).&lt;br /&gt;
* &#039;&#039;&#039;reverb pan&#039;&#039;&#039; - Undocumented. Three values are specified which may correspond to a generic &amp;quot;front&amp;quot;, &amp;quot;side&amp;quot; and &amp;quot;back/rear&amp;quot; configuration to control the directivity of reverberation in a 7.1 surround matrix. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;echo time&#039;&#039;&#039; - Undocumented. Likely controls the decay time of echoes, or late reflections. A value of 0.1 likely presents a natural amount of echo, while increasing the value likely causes a &amp;quot;Grand Canyon&amp;quot; effect. Value type is likely FLOAT; value range is likely between 0.075 and 0.25, expressed in seconds.&lt;br /&gt;
* &#039;&#039;&#039;echo depth&#039;&#039;&#039; - Undocumented. May control directionality or tonal qualities of echoes arriving at the listener. Probably best to leave at 1.0. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;modulation time&#039;&#039;&#039; - Undocumented. Unknown purpose. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;modulation depth&#039;&#039;&#039; - Undocumented. Unknown purpose. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;air absorption hf&#039;&#039;&#039; - The Air Absorption HF property controls the distance-dependent attenuation at high frequencies caused by the propagation medium. It applies to both the direct path and reflected sound. You can use Air Absorption HF to simulate sound transmission through foggy air, dry air, smoky atmosphere, and so on. The default value is -0.05 dB per meter, which roughly corresponds to typical condition of atmospheric humidity, temperature, and so on. Lowering the value simulates a more absorbent medium (more humidity in the air, for example); raising the value simulates a less absorbent medium (dry desert air, for example). Value is FLOAT; value range is -100.0 to 0.0, expressed in hundredths of one decibel per meter (-1 dB to 0 dB). Default value is -5.0, which corresponds to -0.05 dB per meter attenuation.&lt;br /&gt;
* &#039;&#039;&#039;hf reference&#039;&#039;&#039; - Likely defines the frequency used for low-pass filters. Value is likely LONG; value range is likely between 0.0 and 20000.0, expressed in Hz. This value is probably best left at 5000.0.&lt;br /&gt;
* &#039;&#039;&#039;lf reference&#039;&#039;&#039; - Likely defines the frequency used for high-pass filters. Value is likely LONG; value range is likely between 0.0 and 20000.0, expressed in Hz. This value is probably best left at 250.0.&lt;br /&gt;
* &#039;&#039;&#039;room rolloff factor&#039;&#039;&#039; - The Room Rolloff property is one of two methods available in EAX to attenuate the reflected sound (containing both reflections, reverberation and echoes) according to source-listener distance. Value type is FLOAT; value range is 0.0 to 10.0, expressed in a linear multiplier value. It&#039;s recommended that users use 0.0, as id Software did not deviate from this value with Doom 3.&lt;br /&gt;
* &#039;&#039;&#039;flags&#039;&#039;&#039; - The Flags property is intended to control the relationship of high-level EAX properties to low-level properties. If certain EAX flags are set by setting the Flags property to a particular value, the setting of high-level properties is supposed to control the values of low-level properties based upon a defined scale, overriding specified values. In EAX 2.0, the value type is DWORD, whereas in Doom 3, it appears to be INT or some other type commonly used to store numeric values. In Doom 3, common values are 0, 2, 15, 31, 32, 56 and 63, but no documentation details what these values correspond to. If users wish to experiment with the Flags property, it is recommended that they choose from one of the above values. For reference, here is a table with the counts for each flag value as used in Doom 3:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 0.5em; margin-left: 2em; border: 1px solid #a0a0a0; text-align: right; border-collapse: collapse;&amp;quot; cellpadding=&amp;quot;2&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Flag decimal&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Flag binary&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Count&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|00000000&lt;br /&gt;
|497&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|00000010&lt;br /&gt;
|6&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|00001110&lt;br /&gt;
|15&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|00001111&lt;br /&gt;
|94&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|31&lt;br /&gt;
|00011111&lt;br /&gt;
|511&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|32&lt;br /&gt;
|00100000&lt;br /&gt;
|247&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|56&lt;br /&gt;
|00111000&lt;br /&gt;
|59&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|63&lt;br /&gt;
|00111111&lt;br /&gt;
|168&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Design.&#039;&#039;&#039;&lt;br /&gt;
In terms of the actual sound design for the values you put into these variables, here is a general tutorial on reverb from FruityLoops (NOTE: This is for a music production plugin, some of these don&#039;t apply, it&#039;s just to give a general idea on what certain variables do):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Low Cut&#039;&#039;&#039; Adjusts the low cutoff frequency. Use this to remove low frequencies from the input signal before reverb is added. For example, if you are adding reverb to, say a drum track, you might want to remove some of the &#039;rumble&#039; from the bass drum by attenuating the bass frequencies. Setting this parameter to the minimum value will bypass the Low Cut filter, displaying OFF in the value field.&lt;br /&gt;
* &#039;&#039;&#039;High Cut&#039;&#039;&#039; - Similar to the Low Cut, this adjusts the high cutoff frequency. Use this to remove high frequencies from the input signal.&lt;br /&gt;
* &#039;&#039;&#039;Predelay&#039;&#039;&#039; - Controls the delay time between the direct input signal and the first reverb reflection. This should be set to modest values for small rooms, and can be increased in relation to increases in room size. &#039;&#039;&#039;Predelay&#039;&#039;&#039; creates a slap-back echo effect that can both add atmosphere and muffle the signal, so use it wisely.&lt;br /&gt;
* &#039;&#039;&#039;Room Size&#039;&#039;&#039; - Use this to set the size of the virtual room where the reverb is created. The Room Size should be adjusted according to the decay time. Small rooms sound better with a short decay time, large rooms sound better with longer reverb times.&lt;br /&gt;
* &#039;&#039;&#039;Diffusion&#039;&#039;&#039; - Controls the density of the reflections bouncing off the walls of the virtual room. A low diffusion setting makes the reflections sound more distinct, like closely spaced echoes. A high diffusion setting creates reflections so close they sound more like noise, where no echoes can be distinguished.&lt;br /&gt;
* &#039;&#039;&#039;Color&#039;&#039;&#039; - The Color parameter is used for adjusting the decay time of the bass frequencies of the signal. This allows you to change the overall perceived mood or &#039;sound&#039; of the virtual room. A bright room has a low bass response, while warm rooms have a higher bass response. In a flat room, the response of the bass is equal to the general frequency response. Color has five settings: Brighter, Bright, Flat, Warm, Warmer.&lt;br /&gt;
* &#039;&#039;&#039;Decay&#039;&#039;&#039; - Controls the decay time of the reverb, the time it takes for the signal to decay to -60dB (1/1000 of the maximum amplitude). Use low decay times for small rooms or boxes, and long decay times for large rooms, halls or churches. You should also make sure that the Room Size parameter has an appropriate value.&lt;br /&gt;
* &#039;&#039;&#039;High Damping&#039;&#039;&#039; - This parameter allows you to adjust damping of the high frequencies in the reverb signal over time. Damping refers to the high frequencies being attenuated and dying out. This causes the sound to become gradually muffled and warm like it is being absorbed in the room. Setting this parameter to the maximum value will bypass the High Damping, displaying OFF in the value field.&lt;br /&gt;
* &#039;&#039;&#039;Dry&#039;&#039;&#039; - Sets the relative dry output level.&lt;br /&gt;
* &#039;&#039;&#039;Reverb&#039;&#039;&#039; - Sets the relative reverb (wet) signal level.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Error Check=&lt;br /&gt;
If you modified the presets in your EFX file, you can check for errors ingame. Load your map and open the console. Type &#039;&#039;reloadSounds&#039;&#039;, this will trigger the reload of the EFX used in your map and print out the vars which cause an error (like a value exceeding the maximum range). Note that if your EFX files contain errors, this will make the game ignore the EFX settings you chose. &lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
See the &amp;quot;EFX Reverb&amp;quot; column of &#039;&#039;&#039;[[Fan_Missions_for_The_Dark_Mod|Fan Missions page]]&#039;&#039;&#039;. Missions with &amp;quot;Yes&amp;quot; have EFX Reverb. &lt;br /&gt;
&amp;lt;br&amp;gt;Most missions use v2.0 presets but a few missions such as &amp;quot;Volta and the Stone&amp;quot; and Behind Closed Doors use v1.0 settings.&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
The Version 2 definitions were implemented due to [http://bugs.thedarkmod.com/view.php?id=4815 issue 4815], it has some brief explanation.&lt;br /&gt;
&lt;br /&gt;
A tutorial based around EFX can be found [http://forums.thedarkmod.com/topic/19205-getting-started-with-the-efx-room-reverb-system-wip/ here]&lt;br /&gt;
&lt;br /&gt;
An old demonstration map of EAX in TDM is included [http://forums.thedarkmod.com/topic/11045-environmental-audio-extensions-eax-in-tdm/ here]&lt;br /&gt;
&lt;br /&gt;
A discussion about no_efx is [http://forums.thedarkmod.com/topic/19213-efx-discussion here]&lt;br /&gt;
&lt;br /&gt;
The first version of this article was written by Ishtvan [https://forums.thedarkmod.com/index.php?/topic/2071-setting-reverb-data-in-new-soundengine-wiki/ here]&lt;br /&gt;
&lt;br /&gt;
[[Category:Sound]]&lt;br /&gt;
[[Category:Tutorial]]&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=Setting_Reverb_Data_of_Rooms_(EAX)&amp;diff=33806</id>
		<title>Setting Reverb Data of Rooms (EAX)</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=Setting_Reverb_Data_of_Rooms_(EAX)&amp;diff=33806"/>
		<updated>2025-01-11T22:01:04Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: /* Location Entity Method */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
This document will attempt to explain how to set the new EFX settings in your rooms when mapping.&lt;br /&gt;
&lt;br /&gt;
Previously these settings were known as EAX settings, and required EAX 4.0-compatible sound card.&lt;br /&gt;
In TDM 2.06, EAX technology was completely replaced with OpenAL EFX, which is now processed in software (by [https://github.com/kcat/openal-soft openal-soft]) without any requirements on sound card.&lt;br /&gt;
&lt;br /&gt;
= General =&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
&lt;br /&gt;
EFX for a fan mission can be configured with or without a configuration file.  However, fileless configuration is only supported for [[Setting_Reverb_Data_of_Rooms_(EAX)#Presets_(Version_2)|EFX presets]].&lt;br /&gt;
&lt;br /&gt;
== EFX file ==&lt;br /&gt;
The EFX info for a map should be stored in the file &amp;quot;&amp;lt;tt&amp;gt;efxs/&amp;lt;mapname&amp;gt;.efx&amp;lt;/tt&amp;gt;&amp;quot;, where &amp;lt;mapname&amp;gt; is the name of your .map file (without extension).&lt;br /&gt;
&lt;br /&gt;
In order to check that you have put the file into right location, start your mission in game.&lt;br /&gt;
If TDM manages to load your efx file, then you will see the following message in console:&lt;br /&gt;
 sound: found efxs/&amp;lt;mapname&amp;gt;.efx&lt;br /&gt;
If you failed something, then you will see a bit different message there:&lt;br /&gt;
 sound: missing efxs/&amp;lt;mapname&amp;gt;.efx&lt;br /&gt;
In both cases some additional diagnostic messages can be present nearby.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; you must enable &amp;quot;&amp;lt;tt&amp;gt;OpenAL EFX&amp;lt;/tt&amp;gt;&amp;quot; in sound settings in the main menu, otherwise TDM won&#039;t even try to load the efx file.&lt;br /&gt;
&lt;br /&gt;
It is a plain text file, so you can open it up in your text editor of choice.&lt;br /&gt;
&lt;br /&gt;
Any EFX file must start with a header which specifies its &#039;&#039;&#039;version&#039;&#039;&#039;:&lt;br /&gt;
 Version 2&lt;br /&gt;
If you forget this line, then your EFX file will &#039;&#039;&#039;not&#039;&#039;&#039; be loaded.&lt;br /&gt;
The following versions are supported:&lt;br /&gt;
* &amp;lt;tt&amp;gt;Version 1&amp;lt;/tt&amp;gt; was supported by TDM from the very beginning. It uses some non-standard terms and quantities, which makes it hard to work with.&lt;br /&gt;
* &amp;lt;tt&amp;gt;Version 2&amp;lt;/tt&amp;gt; was added in TDM 2.07. It uses the parameters from OpenAL EFX and supports a lot of presets. &#039;&#039;&#039;Recommended for all new missions.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The rest of the file consists of separate blocks, one for each &amp;quot;reverb zone&amp;quot;.&lt;br /&gt;
Each block must start with &amp;lt;tt&amp;gt;reverb&amp;lt;/tt&amp;gt; keyword for Version 1 definitions, and &amp;lt;tt&amp;gt;eaxreverb&amp;lt;/tt&amp;gt; keyword for Version 2 definitions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here is an example of such block from mars_city1.efx of the original Doom 3 game (Version 1):&lt;br /&gt;
&lt;br /&gt;
 // reverb maintenance&lt;br /&gt;
 reverb &amp;quot;maintenance&amp;quot; {&lt;br /&gt;
  &amp;quot;environment&amp;quot; 26&lt;br /&gt;
  &amp;quot;environment size&amp;quot; 5.0670&lt;br /&gt;
  &amp;quot;environment diffusion&amp;quot; 0.6030&lt;br /&gt;
  &amp;quot;room&amp;quot; -411&lt;br /&gt;
  &amp;quot;room hf&amp;quot; -685&lt;br /&gt;
  &amp;quot;room lf&amp;quot; 0&lt;br /&gt;
  &amp;quot;decay time&amp;quot; 1.7360&lt;br /&gt;
  &amp;quot;decay hf ratio&amp;quot; 0.8030&lt;br /&gt;
  &amp;quot;decay lf ratio&amp;quot; 1.0000&lt;br /&gt;
  &amp;quot;reflections&amp;quot; 96&lt;br /&gt;
  &amp;quot;reflections delay&amp;quot; 0.0080&lt;br /&gt;
  &amp;quot;reflections pan&amp;quot; 0.0000 0.0000 0.0000&lt;br /&gt;
  &amp;quot;reverb&amp;quot; 27&lt;br /&gt;
  &amp;quot;reverb delay&amp;quot; 0.0050&lt;br /&gt;
  &amp;quot;reverb pan&amp;quot; 0.0000 0.0000 0.0000&lt;br /&gt;
  &amp;quot;echo time&amp;quot; 0.0750&lt;br /&gt;
  &amp;quot;echo depth&amp;quot; 1.0000&lt;br /&gt;
  &amp;quot;modulation time&amp;quot; 0.2500&lt;br /&gt;
  &amp;quot;modulation depth&amp;quot; 0.0000&lt;br /&gt;
  &amp;quot;air absorption hf&amp;quot; -5.0000&lt;br /&gt;
  &amp;quot;hf reference&amp;quot; 5000.0000&lt;br /&gt;
  &amp;quot;lf reference&amp;quot; 250.0000&lt;br /&gt;
  &amp;quot;room rolloff factor&amp;quot; 0.0000&lt;br /&gt;
  &amp;quot;flags&amp;quot; 56&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And here is an artificial example of Version 2 definitions:&lt;br /&gt;
&lt;br /&gt;
  eaxreverb &amp;quot;myweirdstreets&amp;quot; {&lt;br /&gt;
    reflections_gain 0.5&lt;br /&gt;
    reflections_delay 0.0050&lt;br /&gt;
    late_reverb_gain 2.5&lt;br /&gt;
    late_reverb_delay 0.050&lt;br /&gt;
    echo_time 0.25&lt;br /&gt;
    echo_depth 0.9000&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
What does all this mean? &lt;br /&gt;
&lt;br /&gt;
There is a lot of sound design stuff that one could make guesses at if you&#039;ve ever used a reverb plugin in any sort of sound editing program. hf = high frequency, lf = low frequency, etc.&lt;br /&gt;
&lt;br /&gt;
A proper explanation of the parameters is given below.&lt;br /&gt;
&lt;br /&gt;
== Locations ==&lt;br /&gt;
Each reverb zone definition starts with a line which specifies to which location it must be applied:&lt;br /&gt;
&lt;br /&gt;
 reverb &amp;quot;&amp;lt;name of the location area you want to apply this to&amp;gt;&amp;quot;&lt;br /&gt;
 {&lt;br /&gt;
     //... (settings)&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Information about locations and how to set them up is available in another article: [[Location Settings #The Location Entities]].&lt;br /&gt;
Reverb zones use exactly the same locations as the ones which are used to specify per-area ambient sounds.&lt;br /&gt;
You should name every info_location entity, i.e. provide a &amp;quot;&amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt;&amp;quot; spawnarg for it. This is the name used in reverb zone definitions.&lt;br /&gt;
&lt;br /&gt;
As of TDM 2.06, you can&#039;t use capital letters in the name of your location entity or reverb zone. This may or may not change in the future.&lt;br /&gt;
&lt;br /&gt;
Here is an example of an entity which defines &amp;quot;canal_tunnel&amp;quot; location:&lt;br /&gt;
&lt;br /&gt;
 //======================= from volta_v1.map ====================&lt;br /&gt;
 // entity 3532&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;classname&amp;quot; &amp;quot;info_location&amp;quot;&lt;br /&gt;
   &amp;quot;name&amp;quot; &amp;quot;canal_tunnel&amp;quot;             //this is the name used&lt;br /&gt;
   &amp;quot;ambient&amp;quot; &amp;quot;snd_streets&amp;quot;&lt;br /&gt;
   &amp;quot;ambient_light&amp;quot; &amp;quot;0.04 0.03 0.02&amp;quot;&lt;br /&gt;
   &amp;quot;ambient_light_dynamic&amp;quot; &amp;quot;0.01 0.01 0.01&amp;quot;&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And this is the EFX effect (reverb zone) for it:&lt;br /&gt;
&lt;br /&gt;
 //======================= from volta_v1.efx ====================&lt;br /&gt;
 reverb &amp;quot;canal_tunnel&amp;quot; {             //name put to here&lt;br /&gt;
   &amp;quot;environment&amp;quot; 22&lt;br /&gt;
   &amp;quot;environment size&amp;quot; 1.8000&lt;br /&gt;
   &amp;quot;environment diffusion&amp;quot; 1.0000&lt;br /&gt;
   &amp;quot;room&amp;quot; -1000&lt;br /&gt;
   &amp;quot;room hf&amp;quot; -4000&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
During playing, the engine prints a message whenever the player&#039;s location changes.&lt;br /&gt;
It allows you to check if you have set up locations properly.&lt;br /&gt;
For instance, here are console messages showing a proper EFX location change:&lt;br /&gt;
&lt;br /&gt;
 Switching to EFX &#039;canal_tunnel&#039; (#295)&lt;br /&gt;
 Changed location from &#039;canal_streets&#039; to &#039;canal_tunnel&#039;.&lt;br /&gt;
&lt;br /&gt;
It is also possible to specify portal-area number instead of location name in the reverb zone definition.&lt;br /&gt;
The portal-area number is listed in the .proc file, which is created in the dmap process, in the format of &amp;lt;tt&amp;gt;_area&amp;lt;num&amp;gt;&amp;lt;/tt&amp;gt; (where &amp;lt;num&amp;gt; is the portal area number), e.g. &amp;lt;tt&amp;gt;_area15&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&#039;&#039;&#039;Beware:&#039;&#039;&#039; this functionality exists for fast hacking only! Do not release a mission with portal-area numbers in .efx file!&lt;br /&gt;
The main reason to avoid it is that portal-area numbers are auto-generated, so minor changes in your mission can change all of them.&lt;br /&gt;
&lt;br /&gt;
Finally, there is a &amp;quot;default&amp;quot; reverb environment which is used for any area in the map which does not have reverb information specified.&lt;br /&gt;
&lt;br /&gt;
The order that the sound system checks for reverb data is: area number -&amp;gt; location name -&amp;gt; default.&lt;br /&gt;
&lt;br /&gt;
== Changes during playing ==&lt;br /&gt;
Type &amp;quot;&amp;lt;tt&amp;gt;reloadSounds&amp;lt;/tt&amp;gt;&amp;quot; command into game console in order to reload EFX definitions.&lt;br /&gt;
&lt;br /&gt;
So when you experiment with EFX, execute this command after each tweak to EFX file to hear the difference immediately.&lt;br /&gt;
&lt;br /&gt;
== Suppress effect ==&lt;br /&gt;
Sometimes you want to disable EFX effect on a specific sound.&lt;br /&gt;
A typical example is when you have a voice in player&#039;s head, which must not depend on player&#039;s physical environment.&lt;br /&gt;
Another case is when some sound already has reverb baked in, so you don&#039;t what to double-reverb it. Although the best practice is to use sound samples without embedded reverb, combined with proper EFX definitions.&lt;br /&gt;
&lt;br /&gt;
You can disable all EFX effects on one specific sound shader by adding &amp;quot;&amp;lt;tt&amp;gt;no_efx&amp;lt;/tt&amp;gt;&amp;quot; keyword to its body.&lt;br /&gt;
For instance, here is how non-EFX version of blackjack unsheathing looks like:&lt;br /&gt;
 blackjack_unsheath&lt;br /&gt;
 {&lt;br /&gt;
   description &amp;quot;Made by pakmannen&amp;quot;&lt;br /&gt;
   sound/sfx/tools/melee/blackjack_unsheath.ogg&lt;br /&gt;
   no_efx                       //do NOT apply EFX to this sound&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note that if you change sound shaders, writing &amp;quot;&amp;lt;tt&amp;gt;reloadDecls&amp;lt;/tt&amp;gt;&amp;quot; in TDM game console is enough to reload them.&lt;br /&gt;
&lt;br /&gt;
There are a lot of stock sounds in TDM which should not be affected by EFX effects.&lt;br /&gt;
Starting from TDM 2.07, the corresponding core sounds are marked with &amp;quot;&amp;lt;tt&amp;gt;no_efx&amp;lt;/tt&amp;gt;&amp;quot; keyword (see issue [http://bugs.thedarkmod.com/view.php?id=4688 4688]).&lt;br /&gt;
If you discover any core sound which is affected by EFX while you believe it should not, start a discussion on forums.&lt;br /&gt;
&lt;br /&gt;
=Environment properties=&lt;br /&gt;
&lt;br /&gt;
== New properties (Version 2) ==&lt;br /&gt;
&lt;br /&gt;
With Version 2 of EFX file, the set of supported properties exactly matches the set of properties defined in OpenAL EFX for the &amp;quot;EAX Reverb&amp;quot; effect.&lt;br /&gt;
Note that EFX defines several types of effects, including &amp;quot;EAX Reverb&amp;quot;, &amp;quot;Standard Reverb&amp;quot;, &amp;quot;Chorus&amp;quot;, &amp;quot;Distortion&amp;quot;, &amp;quot;Echo&amp;quot;, &amp;quot;Flanger&amp;quot;, etc.&lt;br /&gt;
Only the first one is important, ignore all the rest (including the so-called &amp;quot;Standard Reverb&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
The detailed description of all the properties is given in &amp;quot;Appendix 1 – Effect property descriptions&amp;quot; of the [https://usermanual.wiki/Pdf/Effects20Extension20Guide.90272296/view#95 OpenAL Effects Extension Guide](pages 95-101).&lt;br /&gt;
The short list is also available in a table on [https://usermanual.wiki/Pdf/Effects20Extension20Guide.90272296/view#66 page 66 of the guide]:&lt;br /&gt;
&lt;br /&gt;
[[File:Eaxreverb_properties_screenshot.png|500px]]&lt;br /&gt;
&lt;br /&gt;
The only difference is that the property names in the guide have the &amp;lt;tt&amp;gt;AL_EAXREVERB_&amp;lt;/tt&amp;gt; prefix, while in TDM definitions this prefix is removed.&lt;br /&gt;
&lt;br /&gt;
== Presets (Version 2) ==&lt;br /&gt;
Presets can be set in 2 ways:&lt;br /&gt;
* in the .efx file&lt;br /&gt;
* As of TDM 2.13, the &#039;&#039;&#039;efx_preset&#039;&#039;&#039; spawnarg on the location entity for the location where you want to use the effect.&lt;br /&gt;
&lt;br /&gt;
=== File Method ===&lt;br /&gt;
&lt;br /&gt;
There is one special property &amp;lt;tt&amp;gt;PRESET&amp;lt;/tt&amp;gt;, which is not present in the EFX guide.&lt;br /&gt;
This property accepts the name of the preset which you want to use:&lt;br /&gt;
&lt;br /&gt;
 eaxreverb &amp;quot;myclassroom&amp;quot; {&lt;br /&gt;
   preset auditorium&lt;br /&gt;
 }&lt;br /&gt;
 eaxreverb &amp;quot;mycave&amp;quot; {&lt;br /&gt;
   preset cave&lt;br /&gt;
 }&lt;br /&gt;
 eaxreverb &amp;quot;mycorridor&amp;quot; {&lt;br /&gt;
   preset hallway&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
If you specify the preset like this, the values for all the reverb properties will be taken from the specified preset.&lt;br /&gt;
Additionally, you can override values of some properties if you define them manually &#039;&#039;&#039;after&#039;&#039;&#039; defining the preset.&lt;br /&gt;
&lt;br /&gt;
The preset property also accepts index of preset. Don&#039;t use indices for anything except experimentation, since they may change in future.&lt;br /&gt;
&lt;br /&gt;
=== Location Entity Method ===&lt;br /&gt;
If using this method, no .efx file is required at all. On the location entity where you want to use the preset, set the spawnarg &#039;&#039;&#039;efx_preset&#039;&#039;&#039; to the value of the preset.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
efx_preset    CITY_SUBWAY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that both the configuration file and the location entity spawnargs can be used simultaneously.  In the case that both are used to set the preset value for a single location, the spawnarg value will take precedence.&lt;br /&gt;
&lt;br /&gt;
=== Preset Values ===&lt;br /&gt;
The presets were taken from OpenAL-Soft implementation which TDM uses.&lt;br /&gt;
Here is the full list of preset names:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;height:350px; overflow:scroll;&amp;quot;&amp;gt;&lt;br /&gt;
GENERIC&lt;br /&gt;
PADDEDCELL&lt;br /&gt;
ROOM&lt;br /&gt;
BATHROOM&lt;br /&gt;
LIVINGROOM&lt;br /&gt;
STONEROOM&lt;br /&gt;
AUDITORIUM&lt;br /&gt;
CONCERTHALL&lt;br /&gt;
CAVE&lt;br /&gt;
ARENA&lt;br /&gt;
HANGAR&lt;br /&gt;
CARPETEDHALLWAY&lt;br /&gt;
HALLWAY&lt;br /&gt;
STONECORRIDOR&lt;br /&gt;
ALLEY&lt;br /&gt;
FOREST&lt;br /&gt;
CITY&lt;br /&gt;
MOUNTAINS&lt;br /&gt;
QUARRY&lt;br /&gt;
PLAIN&lt;br /&gt;
PARKINGLOT&lt;br /&gt;
SEWERPIPE&lt;br /&gt;
UNDERWATER&lt;br /&gt;
DRUGGED&lt;br /&gt;
DIZZY&lt;br /&gt;
PSYCHOTIC&lt;br /&gt;
CASTLE_SMALLROOM&lt;br /&gt;
CASTLE_SHORTPASSAGE&lt;br /&gt;
CASTLE_MEDIUMROOM&lt;br /&gt;
CASTLE_LARGEROOM&lt;br /&gt;
CASTLE_LONGPASSAGE&lt;br /&gt;
CASTLE_HALL&lt;br /&gt;
CASTLE_CUPBOARD&lt;br /&gt;
CASTLE_COURTYARD&lt;br /&gt;
CASTLE_ALCOVE&lt;br /&gt;
FACTORY_SMALLROOM&lt;br /&gt;
FACTORY_SHORTPASSAGE&lt;br /&gt;
FACTORY_MEDIUMROOM&lt;br /&gt;
FACTORY_LARGEROOM&lt;br /&gt;
FACTORY_LONGPASSAGE&lt;br /&gt;
FACTORY_HALL&lt;br /&gt;
FACTORY_CUPBOARD&lt;br /&gt;
FACTORY_COURTYARD&lt;br /&gt;
FACTORY_ALCOVE&lt;br /&gt;
ICEPALACE_SMALLROOM&lt;br /&gt;
ICEPALACE_SHORTPASSAGE&lt;br /&gt;
ICEPALACE_MEDIUMROOM&lt;br /&gt;
ICEPALACE_LARGEROOM&lt;br /&gt;
ICEPALACE_LONGPASSAGE&lt;br /&gt;
ICEPALACE_HALL&lt;br /&gt;
ICEPALACE_CUPBOARD&lt;br /&gt;
ICEPALACE_COURTYARD&lt;br /&gt;
ICEPALACE_ALCOVE&lt;br /&gt;
SPACESTATION_SMALLROOM&lt;br /&gt;
SPACESTATION_SHORTPASSAGE&lt;br /&gt;
SPACESTATION_MEDIUMROOM&lt;br /&gt;
SPACESTATION_LARGEROOM&lt;br /&gt;
SPACESTATION_LONGPASSAGE&lt;br /&gt;
SPACESTATION_HALL&lt;br /&gt;
SPACESTATION_CUPBOARD&lt;br /&gt;
SPACESTATION_ALCOVE&lt;br /&gt;
WOODEN_SMALLROOM&lt;br /&gt;
WOODEN_SHORTPASSAGE&lt;br /&gt;
WOODEN_MEDIUMROOM&lt;br /&gt;
WOODEN_LARGEROOM&lt;br /&gt;
WOODEN_LONGPASSAGE&lt;br /&gt;
WOODEN_HALL&lt;br /&gt;
WOODEN_CUPBOARD&lt;br /&gt;
WOODEN_COURTYARD&lt;br /&gt;
WOODEN_ALCOVE&lt;br /&gt;
SPORT_EMPTYSTADIUM&lt;br /&gt;
SPORT_SQUASHCOURT&lt;br /&gt;
SPORT_SMALLSWIMMINGPOOL&lt;br /&gt;
SPORT_LARGESWIMMINGPOOL&lt;br /&gt;
SPORT_GYMNASIUM&lt;br /&gt;
SPORT_FULLSTADIUM&lt;br /&gt;
SPORT_STADIUMTANNOY&lt;br /&gt;
PREFAB_WORKSHOP&lt;br /&gt;
PREFAB_SCHOOLROOM&lt;br /&gt;
PREFAB_PRACTISEROOM&lt;br /&gt;
PREFAB_OUTHOUSE&lt;br /&gt;
PREFAB_CARAVAN&lt;br /&gt;
DOME_TOMB&lt;br /&gt;
PIPE_SMALL&lt;br /&gt;
DOME_SAINTPAULS&lt;br /&gt;
PIPE_LONGTHIN&lt;br /&gt;
PIPE_LARGE&lt;br /&gt;
PIPE_RESONANT&lt;br /&gt;
OUTDOORS_BACKYARD&lt;br /&gt;
OUTDOORS_ROLLINGPLAINS&lt;br /&gt;
OUTDOORS_DEEPCANYON&lt;br /&gt;
OUTDOORS_CREEK&lt;br /&gt;
OUTDOORS_VALLEY&lt;br /&gt;
MOOD_HEAVEN&lt;br /&gt;
MOOD_HELL&lt;br /&gt;
MOOD_MEMORY&lt;br /&gt;
DRIVING_COMMENTATOR&lt;br /&gt;
DRIVING_PITGARAGE&lt;br /&gt;
DRIVING_INCAR_RACER&lt;br /&gt;
DRIVING_INCAR_SPORTS&lt;br /&gt;
DRIVING_INCAR_LUXURY&lt;br /&gt;
DRIVING_FULLGRANDSTAND&lt;br /&gt;
DRIVING_EMPTYGRANDSTAND&lt;br /&gt;
DRIVING_TUNNEL&lt;br /&gt;
CITY_STREETS&lt;br /&gt;
CITY_SUBWAY&lt;br /&gt;
CITY_MUSEUM&lt;br /&gt;
CITY_LIBRARY&lt;br /&gt;
CITY_UNDERPASS&lt;br /&gt;
CITY_ABANDONED&lt;br /&gt;
DUSTYROOM&lt;br /&gt;
CHAPEL&lt;br /&gt;
SMALLWATERROOM                              &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Their definitions can be seen in [https://github.com/kcat/openal-soft/blob/master/include/AL/efx-presets.h efx-presets.h] from OpenAL-Soft source code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-expandtext=&amp;quot;Show&amp;quot; data-collapsetext=&amp;quot;Hide&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Legacy info (Version 1) ==&lt;br /&gt;
&lt;br /&gt;
This information is from the old official EAX 2.0 documentation, although some properties may have changed in scope and focus from EAX 2.0 to EAX 4.0. One can assume that the properties serve the same general purpose and that each property&#039;s value bounds are approximately the same.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;environment&#039;&#039;&#039; - Unknown. Likely sets the room to one of an unknown number of environment presets.&lt;br /&gt;
* &#039;&#039;&#039;environment size&#039;&#039;&#039; - The Environment Size property sets the apparent size of the surrounding “room.” The value of Environment Size can be considered a characteristic dimension of the room expressed in meters. Scaling Environment Size is equivalent to scaling all dimensions of the room by the same factor. Value type is FLOAT; value range is 1.0 to 100.0, expressed in linear meters.&lt;br /&gt;
* &#039;&#039;&#039;environment diffusion&#039;&#039;&#039; - The Environment Diffusion property controls the echo density in the reverberation decay. Reducing diffusion gives the reverberation a more “grainy” character that is especially noticeable with percussive sound sources. If you set a diffusion value of 0.0, the later reverberation sounds like a succession of distinct echoes. Value type is FLOAT; value range is 0.0 to 1.0, expressed in a linear multiplier value.&lt;br /&gt;
* &#039;&#039;&#039;room&#039;&#039;&#039; - The Room property is the master volume control for the reflected sound (both early reflections and reverberation) that EAX adds to all sound sources. It sets the maximum amount of reflections and reverberation added to the sound mix in the primary buffer (the listener). Value is LONG; value range is -10000 to 0, expressed in hundredths of one decibel (-100 dB to 0 dB).&lt;br /&gt;
* &#039;&#039;&#039;room hf&#039;&#039;&#039; - The Room HF property further tweaks reflected sound by attenuating it at high frequencies. It controls a low-pass filter that applies globally to the reflected sound of all sound sources. The exact qualities of this low-pass filter -- its frequency and its bandwidth (Q) -- are unknown. Value type is LONG; value range is -10000 to 0, expressed in hundredths of one decibel (-100 dB to 0 dB).&lt;br /&gt;
* &#039;&#039;&#039;room lf&#039;&#039;&#039; - Undocumented. Assumably, the Room LF property applies a high-pass to reflected sound in much the same way as Room HF applies low-pass. The value type and range is unknown, but is likely LONG, must be between -10000 and 0 and is expressed in hundredths of one decibel.&lt;br /&gt;
* &#039;&#039;&#039;decay time&#039;&#039;&#039; - The Decay Time property sets the reverberation decay time, or the time in which reverberation is diminished. It ranges from 0.1 (typically a small room with very dead surfaces) to 20.0 (typically a large room with very live surfaces). Value is FLOAT; value range is 0.1 to 20.0, expressed in seconds.&lt;br /&gt;
* &#039;&#039;&#039;decay hf ratio&#039;&#039;&#039; - The Decay HF Ratio property sets the spectral quality of the Decay Time parameter. It is the ratio of high-frequency decay time relative to the time set by Decay Time. The Decay HF Ratio value 1.0 is neutral: the decay time is equal for all frequencies. As Decay HF Ratio increases above 1.0, the high-frequency decay time increases so it’s longer than the decay time at low frequencies. You hear a more brilliant reverberation with a longer decay at high frequencies. As the Decay HF Ratio value decreases below 1.0, the high-frequency decay time decreases so it’s shorter than the decay time of the low frequencies. You hear a more natural reverberation. Value is FLOAT; value range is 0.1 to 20.0, expressed in a linear multiplier variable.&lt;br /&gt;
* &#039;&#039;&#039;decay lf ratio&#039;&#039;&#039; - Undocumented. It&#039;s likely best to leave the value at 1.0, though the value&#039;s type and range is probably the same as the Decay HF Ratio property.&lt;br /&gt;
* &#039;&#039;&#039;reflections&#039;&#039;&#039; - The Reflections property controls the overall amount of initial reflections relative to the Room property. The value of Reflections ranges from a maximum of 10 dB to a minimum of -100 dB (no initial reflections at all), and is corrected by the value of the Room property. The Reflections property does not affect the subsequent reverberation decay. You can increase the amount of initial reflections to simulate a more narrow space or closer walls, especially effective if you associate the initial reflections increase with a reduction in reflections delays by lowering the value of the Reflection Delay property. To simulate open or semi-open environments, you can maintain the amount of early reflections while reducing the value of the Reverb property, which controls later reflections. Value type is LONG; value range is -10000 to 1000, expressed in hundredths of one decibel (-100 dB to -10 dB).&lt;br /&gt;
* &#039;&#039;&#039;reflections delay&#039;&#039;&#039; - The Reflections Delay property is the amount of delay between the arrival time of the direct path from the source to the first reflection from the source. It ranges from 0 to 300 milliseconds. You can reduce or increase Reflections Delay to simulate closer or more distant reflective surfaces—and therefore control the perceived size of the room. Value is FLOAT; value range is 0.0 to 0.3, expressed in seconds (0 to 300 milliseconds).&lt;br /&gt;
* &#039;&#039;&#039;reflections pan&#039;&#039;&#039; - Undocumented. Three values are specified which may correspond to a generic &amp;quot;front&amp;quot;, &amp;quot;side&amp;quot; and &amp;quot;back/rear&amp;quot; configuration to control the directivity of early reflections in a 7.1 surround matrix. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;reverb&#039;&#039;&#039; - The Reverb property controls the overall amount of later reverberation relative to the Room property. (The Room property sets the overall amount of both initial reflections and later reverberation.) The value of Reverb ranges from a maximum of 20 dB to a minimum of -100 dB (no late reverberation at all). Value is LONG; value range is -10000 to 2000, expressed in hundredths of a decibel (-100 dB to 20 dB).&lt;br /&gt;
* &#039;&#039;&#039;reverb delay&#039;&#039;&#039; - The Reverb Delay property defines the begin time of the late reverberation relative to the time of the initial reflection (the first of the early reflections). It ranges from 0 to 100 milliseconds. Reducing or increasing Reverb Delay is useful for simulating a smaller or larger room. Value is FLOAT; value range is 0.0 to 0.1, expressed in seconds (0 to 100 milliseconds).&lt;br /&gt;
* &#039;&#039;&#039;reverb pan&#039;&#039;&#039; - Undocumented. Three values are specified which may correspond to a generic &amp;quot;front&amp;quot;, &amp;quot;side&amp;quot; and &amp;quot;back/rear&amp;quot; configuration to control the directivity of reverberation in a 7.1 surround matrix. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;echo time&#039;&#039;&#039; - Undocumented. Likely controls the decay time of echoes, or late reflections. A value of 0.1 likely presents a natural amount of echo, while increasing the value likely causes a &amp;quot;Grand Canyon&amp;quot; effect. Value type is likely FLOAT; value range is likely between 0.075 and 0.25, expressed in seconds.&lt;br /&gt;
* &#039;&#039;&#039;echo depth&#039;&#039;&#039; - Undocumented. May control directionality or tonal qualities of echoes arriving at the listener. Probably best to leave at 1.0. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;modulation time&#039;&#039;&#039; - Undocumented. Unknown purpose. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;modulation depth&#039;&#039;&#039; - Undocumented. Unknown purpose. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;air absorption hf&#039;&#039;&#039; - The Air Absorption HF property controls the distance-dependent attenuation at high frequencies caused by the propagation medium. It applies to both the direct path and reflected sound. You can use Air Absorption HF to simulate sound transmission through foggy air, dry air, smoky atmosphere, and so on. The default value is -0.05 dB per meter, which roughly corresponds to typical condition of atmospheric humidity, temperature, and so on. Lowering the value simulates a more absorbent medium (more humidity in the air, for example); raising the value simulates a less absorbent medium (dry desert air, for example). Value is FLOAT; value range is -100.0 to 0.0, expressed in hundredths of one decibel per meter (-1 dB to 0 dB). Default value is -5.0, which corresponds to -0.05 dB per meter attenuation.&lt;br /&gt;
* &#039;&#039;&#039;hf reference&#039;&#039;&#039; - Likely defines the frequency used for low-pass filters. Value is likely LONG; value range is likely between 0.0 and 20000.0, expressed in Hz. This value is probably best left at 5000.0.&lt;br /&gt;
* &#039;&#039;&#039;lf reference&#039;&#039;&#039; - Likely defines the frequency used for high-pass filters. Value is likely LONG; value range is likely between 0.0 and 20000.0, expressed in Hz. This value is probably best left at 250.0.&lt;br /&gt;
* &#039;&#039;&#039;room rolloff factor&#039;&#039;&#039; - The Room Rolloff property is one of two methods available in EAX to attenuate the reflected sound (containing both reflections, reverberation and echoes) according to source-listener distance. Value type is FLOAT; value range is 0.0 to 10.0, expressed in a linear multiplier value. It&#039;s recommended that users use 0.0, as id Software did not deviate from this value with Doom 3.&lt;br /&gt;
* &#039;&#039;&#039;flags&#039;&#039;&#039; - The Flags property is intended to control the relationship of high-level EAX properties to low-level properties. If certain EAX flags are set by setting the Flags property to a particular value, the setting of high-level properties is supposed to control the values of low-level properties based upon a defined scale, overriding specified values. In EAX 2.0, the value type is DWORD, whereas in Doom 3, it appears to be INT or some other type commonly used to store numeric values. In Doom 3, common values are 0, 2, 15, 31, 32, 56 and 63, but no documentation details what these values correspond to. If users wish to experiment with the Flags property, it is recommended that they choose from one of the above values. For reference, here is a table with the counts for each flag value as used in Doom 3:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 0.5em; margin-left: 2em; border: 1px solid #a0a0a0; text-align: right; border-collapse: collapse;&amp;quot; cellpadding=&amp;quot;2&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Flag decimal&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Flag binary&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Count&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|00000000&lt;br /&gt;
|497&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|00000010&lt;br /&gt;
|6&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|00001110&lt;br /&gt;
|15&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|00001111&lt;br /&gt;
|94&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|31&lt;br /&gt;
|00011111&lt;br /&gt;
|511&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|32&lt;br /&gt;
|00100000&lt;br /&gt;
|247&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|56&lt;br /&gt;
|00111000&lt;br /&gt;
|59&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|63&lt;br /&gt;
|00111111&lt;br /&gt;
|168&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Design.&#039;&#039;&#039;&lt;br /&gt;
In terms of the actual sound design for the values you put into these variables, here is a general tutorial on reverb from FruityLoops (NOTE: This is for a music production plugin, some of these don&#039;t apply, it&#039;s just to give a general idea on what certain variables do):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Low Cut&#039;&#039;&#039; Adjusts the low cutoff frequency. Use this to remove low frequencies from the input signal before reverb is added. For example, if you are adding reverb to, say a drum track, you might want to remove some of the &#039;rumble&#039; from the bass drum by attenuating the bass frequencies. Setting this parameter to the minimum value will bypass the Low Cut filter, displaying OFF in the value field.&lt;br /&gt;
* &#039;&#039;&#039;High Cut&#039;&#039;&#039; - Similar to the Low Cut, this adjusts the high cutoff frequency. Use this to remove high frequencies from the input signal.&lt;br /&gt;
* &#039;&#039;&#039;Predelay&#039;&#039;&#039; - Controls the delay time between the direct input signal and the first reverb reflection. This should be set to modest values for small rooms, and can be increased in relation to increases in room size. &#039;&#039;&#039;Predelay&#039;&#039;&#039; creates a slap-back echo effect that can both add atmosphere and muffle the signal, so use it wisely.&lt;br /&gt;
* &#039;&#039;&#039;Room Size&#039;&#039;&#039; - Use this to set the size of the virtual room where the reverb is created. The Room Size should be adjusted according to the decay time. Small rooms sound better with a short decay time, large rooms sound better with longer reverb times.&lt;br /&gt;
* &#039;&#039;&#039;Diffusion&#039;&#039;&#039; - Controls the density of the reflections bouncing off the walls of the virtual room. A low diffusion setting makes the reflections sound more distinct, like closely spaced echoes. A high diffusion setting creates reflections so close they sound more like noise, where no echoes can be distinguished.&lt;br /&gt;
* &#039;&#039;&#039;Color&#039;&#039;&#039; - The Color parameter is used for adjusting the decay time of the bass frequencies of the signal. This allows you to change the overall perceived mood or &#039;sound&#039; of the virtual room. A bright room has a low bass response, while warm rooms have a higher bass response. In a flat room, the response of the bass is equal to the general frequency response. Color has five settings: Brighter, Bright, Flat, Warm, Warmer.&lt;br /&gt;
* &#039;&#039;&#039;Decay&#039;&#039;&#039; - Controls the decay time of the reverb, the time it takes for the signal to decay to -60dB (1/1000 of the maximum amplitude). Use low decay times for small rooms or boxes, and long decay times for large rooms, halls or churches. You should also make sure that the Room Size parameter has an appropriate value.&lt;br /&gt;
* &#039;&#039;&#039;High Damping&#039;&#039;&#039; - This parameter allows you to adjust damping of the high frequencies in the reverb signal over time. Damping refers to the high frequencies being attenuated and dying out. This causes the sound to become gradually muffled and warm like it is being absorbed in the room. Setting this parameter to the maximum value will bypass the High Damping, displaying OFF in the value field.&lt;br /&gt;
* &#039;&#039;&#039;Dry&#039;&#039;&#039; - Sets the relative dry output level.&lt;br /&gt;
* &#039;&#039;&#039;Reverb&#039;&#039;&#039; - Sets the relative reverb (wet) signal level.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Error Check=&lt;br /&gt;
If you modified the presets in your EFX file, you can check for errors ingame. Load your map and open the console. Type &#039;&#039;reloadSounds&#039;&#039;, this will trigger the reload of the EFX used in your map and print out the vars which cause an error (like a value exceeding the maximum range). Note that if your EFX files contain errors, this will make the game ignore the EFX settings you chose. &lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
See the &amp;quot;EFX Reverb&amp;quot; column of &#039;&#039;&#039;[[Fan_Missions_for_The_Dark_Mod|Fan Missions page]]&#039;&#039;&#039;. Missions with &amp;quot;Yes&amp;quot; have EFX Reverb. &lt;br /&gt;
&amp;lt;br&amp;gt;Most missions use v2.0 presets but a few missions such as &amp;quot;Volta and the Stone&amp;quot; and Behind Closed Doors use v1.0 settings.&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
The Version 2 definitions were implemented due to [http://bugs.thedarkmod.com/view.php?id=4815 issue 4815], it has some brief explanation.&lt;br /&gt;
&lt;br /&gt;
A tutorial based around EFX can be found [http://forums.thedarkmod.com/topic/19205-getting-started-with-the-efx-room-reverb-system-wip/ here]&lt;br /&gt;
&lt;br /&gt;
An old demonstration map of EAX in TDM is included [http://forums.thedarkmod.com/topic/11045-environmental-audio-extensions-eax-in-tdm/ here]&lt;br /&gt;
&lt;br /&gt;
A discussion about no_efx is [http://forums.thedarkmod.com/topic/19213-efx-discussion here]&lt;br /&gt;
&lt;br /&gt;
The first version of this article was written by Ishtvan [https://forums.thedarkmod.com/index.php?/topic/2071-setting-reverb-data-in-new-soundengine-wiki/ here]&lt;br /&gt;
&lt;br /&gt;
[[Category:Sound]]&lt;br /&gt;
[[Category:Tutorial]]&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=Setting_Reverb_Data_of_Rooms_(EAX)&amp;diff=33805</id>
		<title>Setting Reverb Data of Rooms (EAX)</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=Setting_Reverb_Data_of_Rooms_(EAX)&amp;diff=33805"/>
		<updated>2025-01-11T21:05:24Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: /* Location Entity Method */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
This document will attempt to explain how to set the new EFX settings in your rooms when mapping.&lt;br /&gt;
&lt;br /&gt;
Previously these settings were known as EAX settings, and required EAX 4.0-compatible sound card.&lt;br /&gt;
In TDM 2.06, EAX technology was completely replaced with OpenAL EFX, which is now processed in software (by [https://github.com/kcat/openal-soft openal-soft]) without any requirements on sound card.&lt;br /&gt;
&lt;br /&gt;
= General =&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
&lt;br /&gt;
EFX for a fan mission can be configured with or without a configuration file.  However, fileless configuration is only supported for [[Setting_Reverb_Data_of_Rooms_(EAX)#Presets_(Version_2)|EFX presets]].&lt;br /&gt;
&lt;br /&gt;
== EFX file ==&lt;br /&gt;
The EFX info for a map should be stored in the file &amp;quot;&amp;lt;tt&amp;gt;efxs/&amp;lt;mapname&amp;gt;.efx&amp;lt;/tt&amp;gt;&amp;quot;, where &amp;lt;mapname&amp;gt; is the name of your .map file (without extension).&lt;br /&gt;
&lt;br /&gt;
In order to check that you have put the file into right location, start your mission in game.&lt;br /&gt;
If TDM manages to load your efx file, then you will see the following message in console:&lt;br /&gt;
 sound: found efxs/&amp;lt;mapname&amp;gt;.efx&lt;br /&gt;
If you failed something, then you will see a bit different message there:&lt;br /&gt;
 sound: missing efxs/&amp;lt;mapname&amp;gt;.efx&lt;br /&gt;
In both cases some additional diagnostic messages can be present nearby.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; you must enable &amp;quot;&amp;lt;tt&amp;gt;OpenAL EFX&amp;lt;/tt&amp;gt;&amp;quot; in sound settings in the main menu, otherwise TDM won&#039;t even try to load the efx file.&lt;br /&gt;
&lt;br /&gt;
It is a plain text file, so you can open it up in your text editor of choice.&lt;br /&gt;
&lt;br /&gt;
Any EFX file must start with a header which specifies its &#039;&#039;&#039;version&#039;&#039;&#039;:&lt;br /&gt;
 Version 2&lt;br /&gt;
If you forget this line, then your EFX file will &#039;&#039;&#039;not&#039;&#039;&#039; be loaded.&lt;br /&gt;
The following versions are supported:&lt;br /&gt;
* &amp;lt;tt&amp;gt;Version 1&amp;lt;/tt&amp;gt; was supported by TDM from the very beginning. It uses some non-standard terms and quantities, which makes it hard to work with.&lt;br /&gt;
* &amp;lt;tt&amp;gt;Version 2&amp;lt;/tt&amp;gt; was added in TDM 2.07. It uses the parameters from OpenAL EFX and supports a lot of presets. &#039;&#039;&#039;Recommended for all new missions.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The rest of the file consists of separate blocks, one for each &amp;quot;reverb zone&amp;quot;.&lt;br /&gt;
Each block must start with &amp;lt;tt&amp;gt;reverb&amp;lt;/tt&amp;gt; keyword for Version 1 definitions, and &amp;lt;tt&amp;gt;eaxreverb&amp;lt;/tt&amp;gt; keyword for Version 2 definitions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here is an example of such block from mars_city1.efx of the original Doom 3 game (Version 1):&lt;br /&gt;
&lt;br /&gt;
 // reverb maintenance&lt;br /&gt;
 reverb &amp;quot;maintenance&amp;quot; {&lt;br /&gt;
  &amp;quot;environment&amp;quot; 26&lt;br /&gt;
  &amp;quot;environment size&amp;quot; 5.0670&lt;br /&gt;
  &amp;quot;environment diffusion&amp;quot; 0.6030&lt;br /&gt;
  &amp;quot;room&amp;quot; -411&lt;br /&gt;
  &amp;quot;room hf&amp;quot; -685&lt;br /&gt;
  &amp;quot;room lf&amp;quot; 0&lt;br /&gt;
  &amp;quot;decay time&amp;quot; 1.7360&lt;br /&gt;
  &amp;quot;decay hf ratio&amp;quot; 0.8030&lt;br /&gt;
  &amp;quot;decay lf ratio&amp;quot; 1.0000&lt;br /&gt;
  &amp;quot;reflections&amp;quot; 96&lt;br /&gt;
  &amp;quot;reflections delay&amp;quot; 0.0080&lt;br /&gt;
  &amp;quot;reflections pan&amp;quot; 0.0000 0.0000 0.0000&lt;br /&gt;
  &amp;quot;reverb&amp;quot; 27&lt;br /&gt;
  &amp;quot;reverb delay&amp;quot; 0.0050&lt;br /&gt;
  &amp;quot;reverb pan&amp;quot; 0.0000 0.0000 0.0000&lt;br /&gt;
  &amp;quot;echo time&amp;quot; 0.0750&lt;br /&gt;
  &amp;quot;echo depth&amp;quot; 1.0000&lt;br /&gt;
  &amp;quot;modulation time&amp;quot; 0.2500&lt;br /&gt;
  &amp;quot;modulation depth&amp;quot; 0.0000&lt;br /&gt;
  &amp;quot;air absorption hf&amp;quot; -5.0000&lt;br /&gt;
  &amp;quot;hf reference&amp;quot; 5000.0000&lt;br /&gt;
  &amp;quot;lf reference&amp;quot; 250.0000&lt;br /&gt;
  &amp;quot;room rolloff factor&amp;quot; 0.0000&lt;br /&gt;
  &amp;quot;flags&amp;quot; 56&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And here is an artificial example of Version 2 definitions:&lt;br /&gt;
&lt;br /&gt;
  eaxreverb &amp;quot;myweirdstreets&amp;quot; {&lt;br /&gt;
    reflections_gain 0.5&lt;br /&gt;
    reflections_delay 0.0050&lt;br /&gt;
    late_reverb_gain 2.5&lt;br /&gt;
    late_reverb_delay 0.050&lt;br /&gt;
    echo_time 0.25&lt;br /&gt;
    echo_depth 0.9000&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
What does all this mean? &lt;br /&gt;
&lt;br /&gt;
There is a lot of sound design stuff that one could make guesses at if you&#039;ve ever used a reverb plugin in any sort of sound editing program. hf = high frequency, lf = low frequency, etc.&lt;br /&gt;
&lt;br /&gt;
A proper explanation of the parameters is given below.&lt;br /&gt;
&lt;br /&gt;
== Locations ==&lt;br /&gt;
Each reverb zone definition starts with a line which specifies to which location it must be applied:&lt;br /&gt;
&lt;br /&gt;
 reverb &amp;quot;&amp;lt;name of the location area you want to apply this to&amp;gt;&amp;quot;&lt;br /&gt;
 {&lt;br /&gt;
     //... (settings)&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Information about locations and how to set them up is available in another article: [[Location Settings #The Location Entities]].&lt;br /&gt;
Reverb zones use exactly the same locations as the ones which are used to specify per-area ambient sounds.&lt;br /&gt;
You should name every info_location entity, i.e. provide a &amp;quot;&amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt;&amp;quot; spawnarg for it. This is the name used in reverb zone definitions.&lt;br /&gt;
&lt;br /&gt;
As of TDM 2.06, you can&#039;t use capital letters in the name of your location entity or reverb zone. This may or may not change in the future.&lt;br /&gt;
&lt;br /&gt;
Here is an example of an entity which defines &amp;quot;canal_tunnel&amp;quot; location:&lt;br /&gt;
&lt;br /&gt;
 //======================= from volta_v1.map ====================&lt;br /&gt;
 // entity 3532&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;classname&amp;quot; &amp;quot;info_location&amp;quot;&lt;br /&gt;
   &amp;quot;name&amp;quot; &amp;quot;canal_tunnel&amp;quot;             //this is the name used&lt;br /&gt;
   &amp;quot;ambient&amp;quot; &amp;quot;snd_streets&amp;quot;&lt;br /&gt;
   &amp;quot;ambient_light&amp;quot; &amp;quot;0.04 0.03 0.02&amp;quot;&lt;br /&gt;
   &amp;quot;ambient_light_dynamic&amp;quot; &amp;quot;0.01 0.01 0.01&amp;quot;&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And this is the EFX effect (reverb zone) for it:&lt;br /&gt;
&lt;br /&gt;
 //======================= from volta_v1.efx ====================&lt;br /&gt;
 reverb &amp;quot;canal_tunnel&amp;quot; {             //name put to here&lt;br /&gt;
   &amp;quot;environment&amp;quot; 22&lt;br /&gt;
   &amp;quot;environment size&amp;quot; 1.8000&lt;br /&gt;
   &amp;quot;environment diffusion&amp;quot; 1.0000&lt;br /&gt;
   &amp;quot;room&amp;quot; -1000&lt;br /&gt;
   &amp;quot;room hf&amp;quot; -4000&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
During playing, the engine prints a message whenever the player&#039;s location changes.&lt;br /&gt;
It allows you to check if you have set up locations properly.&lt;br /&gt;
For instance, here are console messages showing a proper EFX location change:&lt;br /&gt;
&lt;br /&gt;
 Switching to EFX &#039;canal_tunnel&#039; (#295)&lt;br /&gt;
 Changed location from &#039;canal_streets&#039; to &#039;canal_tunnel&#039;.&lt;br /&gt;
&lt;br /&gt;
It is also possible to specify portal-area number instead of location name in the reverb zone definition.&lt;br /&gt;
The portal-area number is listed in the .proc file, which is created in the dmap process, in the format of &amp;lt;tt&amp;gt;_area&amp;lt;num&amp;gt;&amp;lt;/tt&amp;gt; (where &amp;lt;num&amp;gt; is the portal area number), e.g. &amp;lt;tt&amp;gt;_area15&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&#039;&#039;&#039;Beware:&#039;&#039;&#039; this functionality exists for fast hacking only! Do not release a mission with portal-area numbers in .efx file!&lt;br /&gt;
The main reason to avoid it is that portal-area numbers are auto-generated, so minor changes in your mission can change all of them.&lt;br /&gt;
&lt;br /&gt;
Finally, there is a &amp;quot;default&amp;quot; reverb environment which is used for any area in the map which does not have reverb information specified.&lt;br /&gt;
&lt;br /&gt;
The order that the sound system checks for reverb data is: area number -&amp;gt; location name -&amp;gt; default.&lt;br /&gt;
&lt;br /&gt;
== Changes during playing ==&lt;br /&gt;
Type &amp;quot;&amp;lt;tt&amp;gt;reloadSounds&amp;lt;/tt&amp;gt;&amp;quot; command into game console in order to reload EFX definitions.&lt;br /&gt;
&lt;br /&gt;
So when you experiment with EFX, execute this command after each tweak to EFX file to hear the difference immediately.&lt;br /&gt;
&lt;br /&gt;
== Suppress effect ==&lt;br /&gt;
Sometimes you want to disable EFX effect on a specific sound.&lt;br /&gt;
A typical example is when you have a voice in player&#039;s head, which must not depend on player&#039;s physical environment.&lt;br /&gt;
Another case is when some sound already has reverb baked in, so you don&#039;t what to double-reverb it. Although the best practice is to use sound samples without embedded reverb, combined with proper EFX definitions.&lt;br /&gt;
&lt;br /&gt;
You can disable all EFX effects on one specific sound shader by adding &amp;quot;&amp;lt;tt&amp;gt;no_efx&amp;lt;/tt&amp;gt;&amp;quot; keyword to its body.&lt;br /&gt;
For instance, here is how non-EFX version of blackjack unsheathing looks like:&lt;br /&gt;
 blackjack_unsheath&lt;br /&gt;
 {&lt;br /&gt;
   description &amp;quot;Made by pakmannen&amp;quot;&lt;br /&gt;
   sound/sfx/tools/melee/blackjack_unsheath.ogg&lt;br /&gt;
   no_efx                       //do NOT apply EFX to this sound&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note that if you change sound shaders, writing &amp;quot;&amp;lt;tt&amp;gt;reloadDecls&amp;lt;/tt&amp;gt;&amp;quot; in TDM game console is enough to reload them.&lt;br /&gt;
&lt;br /&gt;
There are a lot of stock sounds in TDM which should not be affected by EFX effects.&lt;br /&gt;
Starting from TDM 2.07, the corresponding core sounds are marked with &amp;quot;&amp;lt;tt&amp;gt;no_efx&amp;lt;/tt&amp;gt;&amp;quot; keyword (see issue [http://bugs.thedarkmod.com/view.php?id=4688 4688]).&lt;br /&gt;
If you discover any core sound which is affected by EFX while you believe it should not, start a discussion on forums.&lt;br /&gt;
&lt;br /&gt;
=Environment properties=&lt;br /&gt;
&lt;br /&gt;
== New properties (Version 2) ==&lt;br /&gt;
&lt;br /&gt;
With Version 2 of EFX file, the set of supported properties exactly matches the set of properties defined in OpenAL EFX for the &amp;quot;EAX Reverb&amp;quot; effect.&lt;br /&gt;
Note that EFX defines several types of effects, including &amp;quot;EAX Reverb&amp;quot;, &amp;quot;Standard Reverb&amp;quot;, &amp;quot;Chorus&amp;quot;, &amp;quot;Distortion&amp;quot;, &amp;quot;Echo&amp;quot;, &amp;quot;Flanger&amp;quot;, etc.&lt;br /&gt;
Only the first one is important, ignore all the rest (including the so-called &amp;quot;Standard Reverb&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
The detailed description of all the properties is given in &amp;quot;Appendix 1 – Effect property descriptions&amp;quot; of the [https://usermanual.wiki/Pdf/Effects20Extension20Guide.90272296/view#95 OpenAL Effects Extension Guide](pages 95-101).&lt;br /&gt;
The short list is also available in a table on [https://usermanual.wiki/Pdf/Effects20Extension20Guide.90272296/view#66 page 66 of the guide]:&lt;br /&gt;
&lt;br /&gt;
[[File:Eaxreverb_properties_screenshot.png|500px]]&lt;br /&gt;
&lt;br /&gt;
The only difference is that the property names in the guide have the &amp;lt;tt&amp;gt;AL_EAXREVERB_&amp;lt;/tt&amp;gt; prefix, while in TDM definitions this prefix is removed.&lt;br /&gt;
&lt;br /&gt;
== Presets (Version 2) ==&lt;br /&gt;
Presets can be set in 2 ways:&lt;br /&gt;
* in the .efx file&lt;br /&gt;
* As of TDM 2.13, the &#039;&#039;&#039;efx_preset&#039;&#039;&#039; spawnarg on the location entity for the location where you want to use the effect.&lt;br /&gt;
&lt;br /&gt;
=== File Method ===&lt;br /&gt;
&lt;br /&gt;
There is one special property &amp;lt;tt&amp;gt;PRESET&amp;lt;/tt&amp;gt;, which is not present in the EFX guide.&lt;br /&gt;
This property accepts the name of the preset which you want to use:&lt;br /&gt;
&lt;br /&gt;
 eaxreverb &amp;quot;myclassroom&amp;quot; {&lt;br /&gt;
   preset auditorium&lt;br /&gt;
 }&lt;br /&gt;
 eaxreverb &amp;quot;mycave&amp;quot; {&lt;br /&gt;
   preset cave&lt;br /&gt;
 }&lt;br /&gt;
 eaxreverb &amp;quot;mycorridor&amp;quot; {&lt;br /&gt;
   preset hallway&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
If you specify the preset like this, the values for all the reverb properties will be taken from the specified preset.&lt;br /&gt;
Additionally, you can override values of some properties if you define them manually &#039;&#039;&#039;after&#039;&#039;&#039; defining the preset.&lt;br /&gt;
&lt;br /&gt;
The preset property also accepts index of preset. Don&#039;t use indices for anything except experimentation, since they may change in future.&lt;br /&gt;
&lt;br /&gt;
=== Location Entity Method ===&lt;br /&gt;
On the location entity where you want to use the preset, set the spawnarg &#039;&#039;&#039;efx_preset&#039;&#039;&#039; to the value of the preset.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
efx_preset    CITY_SUBWAY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that both the configuration file and the location entity spawnargs can be used simultaneously.  In the case that both are used to set the preset value for a single location, the spawnarg value will take precedence.&lt;br /&gt;
&lt;br /&gt;
=== Preset Values ===&lt;br /&gt;
The presets were taken from OpenAL-Soft implementation which TDM uses.&lt;br /&gt;
Here is the full list of preset names:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;height:350px; overflow:scroll;&amp;quot;&amp;gt;&lt;br /&gt;
GENERIC&lt;br /&gt;
PADDEDCELL&lt;br /&gt;
ROOM&lt;br /&gt;
BATHROOM&lt;br /&gt;
LIVINGROOM&lt;br /&gt;
STONEROOM&lt;br /&gt;
AUDITORIUM&lt;br /&gt;
CONCERTHALL&lt;br /&gt;
CAVE&lt;br /&gt;
ARENA&lt;br /&gt;
HANGAR&lt;br /&gt;
CARPETEDHALLWAY&lt;br /&gt;
HALLWAY&lt;br /&gt;
STONECORRIDOR&lt;br /&gt;
ALLEY&lt;br /&gt;
FOREST&lt;br /&gt;
CITY&lt;br /&gt;
MOUNTAINS&lt;br /&gt;
QUARRY&lt;br /&gt;
PLAIN&lt;br /&gt;
PARKINGLOT&lt;br /&gt;
SEWERPIPE&lt;br /&gt;
UNDERWATER&lt;br /&gt;
DRUGGED&lt;br /&gt;
DIZZY&lt;br /&gt;
PSYCHOTIC&lt;br /&gt;
CASTLE_SMALLROOM&lt;br /&gt;
CASTLE_SHORTPASSAGE&lt;br /&gt;
CASTLE_MEDIUMROOM&lt;br /&gt;
CASTLE_LARGEROOM&lt;br /&gt;
CASTLE_LONGPASSAGE&lt;br /&gt;
CASTLE_HALL&lt;br /&gt;
CASTLE_CUPBOARD&lt;br /&gt;
CASTLE_COURTYARD&lt;br /&gt;
CASTLE_ALCOVE&lt;br /&gt;
FACTORY_SMALLROOM&lt;br /&gt;
FACTORY_SHORTPASSAGE&lt;br /&gt;
FACTORY_MEDIUMROOM&lt;br /&gt;
FACTORY_LARGEROOM&lt;br /&gt;
FACTORY_LONGPASSAGE&lt;br /&gt;
FACTORY_HALL&lt;br /&gt;
FACTORY_CUPBOARD&lt;br /&gt;
FACTORY_COURTYARD&lt;br /&gt;
FACTORY_ALCOVE&lt;br /&gt;
ICEPALACE_SMALLROOM&lt;br /&gt;
ICEPALACE_SHORTPASSAGE&lt;br /&gt;
ICEPALACE_MEDIUMROOM&lt;br /&gt;
ICEPALACE_LARGEROOM&lt;br /&gt;
ICEPALACE_LONGPASSAGE&lt;br /&gt;
ICEPALACE_HALL&lt;br /&gt;
ICEPALACE_CUPBOARD&lt;br /&gt;
ICEPALACE_COURTYARD&lt;br /&gt;
ICEPALACE_ALCOVE&lt;br /&gt;
SPACESTATION_SMALLROOM&lt;br /&gt;
SPACESTATION_SHORTPASSAGE&lt;br /&gt;
SPACESTATION_MEDIUMROOM&lt;br /&gt;
SPACESTATION_LARGEROOM&lt;br /&gt;
SPACESTATION_LONGPASSAGE&lt;br /&gt;
SPACESTATION_HALL&lt;br /&gt;
SPACESTATION_CUPBOARD&lt;br /&gt;
SPACESTATION_ALCOVE&lt;br /&gt;
WOODEN_SMALLROOM&lt;br /&gt;
WOODEN_SHORTPASSAGE&lt;br /&gt;
WOODEN_MEDIUMROOM&lt;br /&gt;
WOODEN_LARGEROOM&lt;br /&gt;
WOODEN_LONGPASSAGE&lt;br /&gt;
WOODEN_HALL&lt;br /&gt;
WOODEN_CUPBOARD&lt;br /&gt;
WOODEN_COURTYARD&lt;br /&gt;
WOODEN_ALCOVE&lt;br /&gt;
SPORT_EMPTYSTADIUM&lt;br /&gt;
SPORT_SQUASHCOURT&lt;br /&gt;
SPORT_SMALLSWIMMINGPOOL&lt;br /&gt;
SPORT_LARGESWIMMINGPOOL&lt;br /&gt;
SPORT_GYMNASIUM&lt;br /&gt;
SPORT_FULLSTADIUM&lt;br /&gt;
SPORT_STADIUMTANNOY&lt;br /&gt;
PREFAB_WORKSHOP&lt;br /&gt;
PREFAB_SCHOOLROOM&lt;br /&gt;
PREFAB_PRACTISEROOM&lt;br /&gt;
PREFAB_OUTHOUSE&lt;br /&gt;
PREFAB_CARAVAN&lt;br /&gt;
DOME_TOMB&lt;br /&gt;
PIPE_SMALL&lt;br /&gt;
DOME_SAINTPAULS&lt;br /&gt;
PIPE_LONGTHIN&lt;br /&gt;
PIPE_LARGE&lt;br /&gt;
PIPE_RESONANT&lt;br /&gt;
OUTDOORS_BACKYARD&lt;br /&gt;
OUTDOORS_ROLLINGPLAINS&lt;br /&gt;
OUTDOORS_DEEPCANYON&lt;br /&gt;
OUTDOORS_CREEK&lt;br /&gt;
OUTDOORS_VALLEY&lt;br /&gt;
MOOD_HEAVEN&lt;br /&gt;
MOOD_HELL&lt;br /&gt;
MOOD_MEMORY&lt;br /&gt;
DRIVING_COMMENTATOR&lt;br /&gt;
DRIVING_PITGARAGE&lt;br /&gt;
DRIVING_INCAR_RACER&lt;br /&gt;
DRIVING_INCAR_SPORTS&lt;br /&gt;
DRIVING_INCAR_LUXURY&lt;br /&gt;
DRIVING_FULLGRANDSTAND&lt;br /&gt;
DRIVING_EMPTYGRANDSTAND&lt;br /&gt;
DRIVING_TUNNEL&lt;br /&gt;
CITY_STREETS&lt;br /&gt;
CITY_SUBWAY&lt;br /&gt;
CITY_MUSEUM&lt;br /&gt;
CITY_LIBRARY&lt;br /&gt;
CITY_UNDERPASS&lt;br /&gt;
CITY_ABANDONED&lt;br /&gt;
DUSTYROOM&lt;br /&gt;
CHAPEL&lt;br /&gt;
SMALLWATERROOM                              &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Their definitions can be seen in [https://github.com/kcat/openal-soft/blob/master/include/AL/efx-presets.h efx-presets.h] from OpenAL-Soft source code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-expandtext=&amp;quot;Show&amp;quot; data-collapsetext=&amp;quot;Hide&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Legacy info (Version 1) ==&lt;br /&gt;
&lt;br /&gt;
This information is from the old official EAX 2.0 documentation, although some properties may have changed in scope and focus from EAX 2.0 to EAX 4.0. One can assume that the properties serve the same general purpose and that each property&#039;s value bounds are approximately the same.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;environment&#039;&#039;&#039; - Unknown. Likely sets the room to one of an unknown number of environment presets.&lt;br /&gt;
* &#039;&#039;&#039;environment size&#039;&#039;&#039; - The Environment Size property sets the apparent size of the surrounding “room.” The value of Environment Size can be considered a characteristic dimension of the room expressed in meters. Scaling Environment Size is equivalent to scaling all dimensions of the room by the same factor. Value type is FLOAT; value range is 1.0 to 100.0, expressed in linear meters.&lt;br /&gt;
* &#039;&#039;&#039;environment diffusion&#039;&#039;&#039; - The Environment Diffusion property controls the echo density in the reverberation decay. Reducing diffusion gives the reverberation a more “grainy” character that is especially noticeable with percussive sound sources. If you set a diffusion value of 0.0, the later reverberation sounds like a succession of distinct echoes. Value type is FLOAT; value range is 0.0 to 1.0, expressed in a linear multiplier value.&lt;br /&gt;
* &#039;&#039;&#039;room&#039;&#039;&#039; - The Room property is the master volume control for the reflected sound (both early reflections and reverberation) that EAX adds to all sound sources. It sets the maximum amount of reflections and reverberation added to the sound mix in the primary buffer (the listener). Value is LONG; value range is -10000 to 0, expressed in hundredths of one decibel (-100 dB to 0 dB).&lt;br /&gt;
* &#039;&#039;&#039;room hf&#039;&#039;&#039; - The Room HF property further tweaks reflected sound by attenuating it at high frequencies. It controls a low-pass filter that applies globally to the reflected sound of all sound sources. The exact qualities of this low-pass filter -- its frequency and its bandwidth (Q) -- are unknown. Value type is LONG; value range is -10000 to 0, expressed in hundredths of one decibel (-100 dB to 0 dB).&lt;br /&gt;
* &#039;&#039;&#039;room lf&#039;&#039;&#039; - Undocumented. Assumably, the Room LF property applies a high-pass to reflected sound in much the same way as Room HF applies low-pass. The value type and range is unknown, but is likely LONG, must be between -10000 and 0 and is expressed in hundredths of one decibel.&lt;br /&gt;
* &#039;&#039;&#039;decay time&#039;&#039;&#039; - The Decay Time property sets the reverberation decay time, or the time in which reverberation is diminished. It ranges from 0.1 (typically a small room with very dead surfaces) to 20.0 (typically a large room with very live surfaces). Value is FLOAT; value range is 0.1 to 20.0, expressed in seconds.&lt;br /&gt;
* &#039;&#039;&#039;decay hf ratio&#039;&#039;&#039; - The Decay HF Ratio property sets the spectral quality of the Decay Time parameter. It is the ratio of high-frequency decay time relative to the time set by Decay Time. The Decay HF Ratio value 1.0 is neutral: the decay time is equal for all frequencies. As Decay HF Ratio increases above 1.0, the high-frequency decay time increases so it’s longer than the decay time at low frequencies. You hear a more brilliant reverberation with a longer decay at high frequencies. As the Decay HF Ratio value decreases below 1.0, the high-frequency decay time decreases so it’s shorter than the decay time of the low frequencies. You hear a more natural reverberation. Value is FLOAT; value range is 0.1 to 20.0, expressed in a linear multiplier variable.&lt;br /&gt;
* &#039;&#039;&#039;decay lf ratio&#039;&#039;&#039; - Undocumented. It&#039;s likely best to leave the value at 1.0, though the value&#039;s type and range is probably the same as the Decay HF Ratio property.&lt;br /&gt;
* &#039;&#039;&#039;reflections&#039;&#039;&#039; - The Reflections property controls the overall amount of initial reflections relative to the Room property. The value of Reflections ranges from a maximum of 10 dB to a minimum of -100 dB (no initial reflections at all), and is corrected by the value of the Room property. The Reflections property does not affect the subsequent reverberation decay. You can increase the amount of initial reflections to simulate a more narrow space or closer walls, especially effective if you associate the initial reflections increase with a reduction in reflections delays by lowering the value of the Reflection Delay property. To simulate open or semi-open environments, you can maintain the amount of early reflections while reducing the value of the Reverb property, which controls later reflections. Value type is LONG; value range is -10000 to 1000, expressed in hundredths of one decibel (-100 dB to -10 dB).&lt;br /&gt;
* &#039;&#039;&#039;reflections delay&#039;&#039;&#039; - The Reflections Delay property is the amount of delay between the arrival time of the direct path from the source to the first reflection from the source. It ranges from 0 to 300 milliseconds. You can reduce or increase Reflections Delay to simulate closer or more distant reflective surfaces—and therefore control the perceived size of the room. Value is FLOAT; value range is 0.0 to 0.3, expressed in seconds (0 to 300 milliseconds).&lt;br /&gt;
* &#039;&#039;&#039;reflections pan&#039;&#039;&#039; - Undocumented. Three values are specified which may correspond to a generic &amp;quot;front&amp;quot;, &amp;quot;side&amp;quot; and &amp;quot;back/rear&amp;quot; configuration to control the directivity of early reflections in a 7.1 surround matrix. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;reverb&#039;&#039;&#039; - The Reverb property controls the overall amount of later reverberation relative to the Room property. (The Room property sets the overall amount of both initial reflections and later reverberation.) The value of Reverb ranges from a maximum of 20 dB to a minimum of -100 dB (no late reverberation at all). Value is LONG; value range is -10000 to 2000, expressed in hundredths of a decibel (-100 dB to 20 dB).&lt;br /&gt;
* &#039;&#039;&#039;reverb delay&#039;&#039;&#039; - The Reverb Delay property defines the begin time of the late reverberation relative to the time of the initial reflection (the first of the early reflections). It ranges from 0 to 100 milliseconds. Reducing or increasing Reverb Delay is useful for simulating a smaller or larger room. Value is FLOAT; value range is 0.0 to 0.1, expressed in seconds (0 to 100 milliseconds).&lt;br /&gt;
* &#039;&#039;&#039;reverb pan&#039;&#039;&#039; - Undocumented. Three values are specified which may correspond to a generic &amp;quot;front&amp;quot;, &amp;quot;side&amp;quot; and &amp;quot;back/rear&amp;quot; configuration to control the directivity of reverberation in a 7.1 surround matrix. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;echo time&#039;&#039;&#039; - Undocumented. Likely controls the decay time of echoes, or late reflections. A value of 0.1 likely presents a natural amount of echo, while increasing the value likely causes a &amp;quot;Grand Canyon&amp;quot; effect. Value type is likely FLOAT; value range is likely between 0.075 and 0.25, expressed in seconds.&lt;br /&gt;
* &#039;&#039;&#039;echo depth&#039;&#039;&#039; - Undocumented. May control directionality or tonal qualities of echoes arriving at the listener. Probably best to leave at 1.0. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;modulation time&#039;&#039;&#039; - Undocumented. Unknown purpose. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;modulation depth&#039;&#039;&#039; - Undocumented. Unknown purpose. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;air absorption hf&#039;&#039;&#039; - The Air Absorption HF property controls the distance-dependent attenuation at high frequencies caused by the propagation medium. It applies to both the direct path and reflected sound. You can use Air Absorption HF to simulate sound transmission through foggy air, dry air, smoky atmosphere, and so on. The default value is -0.05 dB per meter, which roughly corresponds to typical condition of atmospheric humidity, temperature, and so on. Lowering the value simulates a more absorbent medium (more humidity in the air, for example); raising the value simulates a less absorbent medium (dry desert air, for example). Value is FLOAT; value range is -100.0 to 0.0, expressed in hundredths of one decibel per meter (-1 dB to 0 dB). Default value is -5.0, which corresponds to -0.05 dB per meter attenuation.&lt;br /&gt;
* &#039;&#039;&#039;hf reference&#039;&#039;&#039; - Likely defines the frequency used for low-pass filters. Value is likely LONG; value range is likely between 0.0 and 20000.0, expressed in Hz. This value is probably best left at 5000.0.&lt;br /&gt;
* &#039;&#039;&#039;lf reference&#039;&#039;&#039; - Likely defines the frequency used for high-pass filters. Value is likely LONG; value range is likely between 0.0 and 20000.0, expressed in Hz. This value is probably best left at 250.0.&lt;br /&gt;
* &#039;&#039;&#039;room rolloff factor&#039;&#039;&#039; - The Room Rolloff property is one of two methods available in EAX to attenuate the reflected sound (containing both reflections, reverberation and echoes) according to source-listener distance. Value type is FLOAT; value range is 0.0 to 10.0, expressed in a linear multiplier value. It&#039;s recommended that users use 0.0, as id Software did not deviate from this value with Doom 3.&lt;br /&gt;
* &#039;&#039;&#039;flags&#039;&#039;&#039; - The Flags property is intended to control the relationship of high-level EAX properties to low-level properties. If certain EAX flags are set by setting the Flags property to a particular value, the setting of high-level properties is supposed to control the values of low-level properties based upon a defined scale, overriding specified values. In EAX 2.0, the value type is DWORD, whereas in Doom 3, it appears to be INT or some other type commonly used to store numeric values. In Doom 3, common values are 0, 2, 15, 31, 32, 56 and 63, but no documentation details what these values correspond to. If users wish to experiment with the Flags property, it is recommended that they choose from one of the above values. For reference, here is a table with the counts for each flag value as used in Doom 3:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 0.5em; margin-left: 2em; border: 1px solid #a0a0a0; text-align: right; border-collapse: collapse;&amp;quot; cellpadding=&amp;quot;2&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Flag decimal&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Flag binary&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Count&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|00000000&lt;br /&gt;
|497&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|00000010&lt;br /&gt;
|6&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|00001110&lt;br /&gt;
|15&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|00001111&lt;br /&gt;
|94&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|31&lt;br /&gt;
|00011111&lt;br /&gt;
|511&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|32&lt;br /&gt;
|00100000&lt;br /&gt;
|247&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|56&lt;br /&gt;
|00111000&lt;br /&gt;
|59&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|63&lt;br /&gt;
|00111111&lt;br /&gt;
|168&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Design.&#039;&#039;&#039;&lt;br /&gt;
In terms of the actual sound design for the values you put into these variables, here is a general tutorial on reverb from FruityLoops (NOTE: This is for a music production plugin, some of these don&#039;t apply, it&#039;s just to give a general idea on what certain variables do):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Low Cut&#039;&#039;&#039; Adjusts the low cutoff frequency. Use this to remove low frequencies from the input signal before reverb is added. For example, if you are adding reverb to, say a drum track, you might want to remove some of the &#039;rumble&#039; from the bass drum by attenuating the bass frequencies. Setting this parameter to the minimum value will bypass the Low Cut filter, displaying OFF in the value field.&lt;br /&gt;
* &#039;&#039;&#039;High Cut&#039;&#039;&#039; - Similar to the Low Cut, this adjusts the high cutoff frequency. Use this to remove high frequencies from the input signal.&lt;br /&gt;
* &#039;&#039;&#039;Predelay&#039;&#039;&#039; - Controls the delay time between the direct input signal and the first reverb reflection. This should be set to modest values for small rooms, and can be increased in relation to increases in room size. &#039;&#039;&#039;Predelay&#039;&#039;&#039; creates a slap-back echo effect that can both add atmosphere and muffle the signal, so use it wisely.&lt;br /&gt;
* &#039;&#039;&#039;Room Size&#039;&#039;&#039; - Use this to set the size of the virtual room where the reverb is created. The Room Size should be adjusted according to the decay time. Small rooms sound better with a short decay time, large rooms sound better with longer reverb times.&lt;br /&gt;
* &#039;&#039;&#039;Diffusion&#039;&#039;&#039; - Controls the density of the reflections bouncing off the walls of the virtual room. A low diffusion setting makes the reflections sound more distinct, like closely spaced echoes. A high diffusion setting creates reflections so close they sound more like noise, where no echoes can be distinguished.&lt;br /&gt;
* &#039;&#039;&#039;Color&#039;&#039;&#039; - The Color parameter is used for adjusting the decay time of the bass frequencies of the signal. This allows you to change the overall perceived mood or &#039;sound&#039; of the virtual room. A bright room has a low bass response, while warm rooms have a higher bass response. In a flat room, the response of the bass is equal to the general frequency response. Color has five settings: Brighter, Bright, Flat, Warm, Warmer.&lt;br /&gt;
* &#039;&#039;&#039;Decay&#039;&#039;&#039; - Controls the decay time of the reverb, the time it takes for the signal to decay to -60dB (1/1000 of the maximum amplitude). Use low decay times for small rooms or boxes, and long decay times for large rooms, halls or churches. You should also make sure that the Room Size parameter has an appropriate value.&lt;br /&gt;
* &#039;&#039;&#039;High Damping&#039;&#039;&#039; - This parameter allows you to adjust damping of the high frequencies in the reverb signal over time. Damping refers to the high frequencies being attenuated and dying out. This causes the sound to become gradually muffled and warm like it is being absorbed in the room. Setting this parameter to the maximum value will bypass the High Damping, displaying OFF in the value field.&lt;br /&gt;
* &#039;&#039;&#039;Dry&#039;&#039;&#039; - Sets the relative dry output level.&lt;br /&gt;
* &#039;&#039;&#039;Reverb&#039;&#039;&#039; - Sets the relative reverb (wet) signal level.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Error Check=&lt;br /&gt;
If you modified the presets in your EFX file, you can check for errors ingame. Load your map and open the console. Type &#039;&#039;reloadSounds&#039;&#039;, this will trigger the reload of the EFX used in your map and print out the vars which cause an error (like a value exceeding the maximum range). Note that if your EFX files contain errors, this will make the game ignore the EFX settings you chose. &lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
See the &amp;quot;EFX Reverb&amp;quot; column of &#039;&#039;&#039;[[Fan_Missions_for_The_Dark_Mod|Fan Missions page]]&#039;&#039;&#039;. Missions with &amp;quot;Yes&amp;quot; have EFX Reverb. &lt;br /&gt;
&amp;lt;br&amp;gt;Most missions use v2.0 presets but a few missions such as &amp;quot;Volta and the Stone&amp;quot; and Behind Closed Doors use v1.0 settings.&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
The Version 2 definitions were implemented due to [http://bugs.thedarkmod.com/view.php?id=4815 issue 4815], it has some brief explanation.&lt;br /&gt;
&lt;br /&gt;
A tutorial based around EFX can be found [http://forums.thedarkmod.com/topic/19205-getting-started-with-the-efx-room-reverb-system-wip/ here]&lt;br /&gt;
&lt;br /&gt;
An old demonstration map of EAX in TDM is included [http://forums.thedarkmod.com/topic/11045-environmental-audio-extensions-eax-in-tdm/ here]&lt;br /&gt;
&lt;br /&gt;
A discussion about no_efx is [http://forums.thedarkmod.com/topic/19213-efx-discussion here]&lt;br /&gt;
&lt;br /&gt;
The first version of this article was written by Ishtvan [https://forums.thedarkmod.com/index.php?/topic/2071-setting-reverb-data-in-new-soundengine-wiki/ here]&lt;br /&gt;
&lt;br /&gt;
[[Category:Sound]]&lt;br /&gt;
[[Category:Tutorial]]&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=Setting_Reverb_Data_of_Rooms_(EAX)&amp;diff=33804</id>
		<title>Setting Reverb Data of Rooms (EAX)</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=Setting_Reverb_Data_of_Rooms_(EAX)&amp;diff=33804"/>
		<updated>2025-01-11T21:03:38Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: /* Presets (Version 2) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
This document will attempt to explain how to set the new EFX settings in your rooms when mapping.&lt;br /&gt;
&lt;br /&gt;
Previously these settings were known as EAX settings, and required EAX 4.0-compatible sound card.&lt;br /&gt;
In TDM 2.06, EAX technology was completely replaced with OpenAL EFX, which is now processed in software (by [https://github.com/kcat/openal-soft openal-soft]) without any requirements on sound card.&lt;br /&gt;
&lt;br /&gt;
= General =&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
&lt;br /&gt;
EFX for a fan mission can be configured with or without a configuration file.  However, fileless configuration is only supported for [[Setting_Reverb_Data_of_Rooms_(EAX)#Presets_(Version_2)|EFX presets]].&lt;br /&gt;
&lt;br /&gt;
== EFX file ==&lt;br /&gt;
The EFX info for a map should be stored in the file &amp;quot;&amp;lt;tt&amp;gt;efxs/&amp;lt;mapname&amp;gt;.efx&amp;lt;/tt&amp;gt;&amp;quot;, where &amp;lt;mapname&amp;gt; is the name of your .map file (without extension).&lt;br /&gt;
&lt;br /&gt;
In order to check that you have put the file into right location, start your mission in game.&lt;br /&gt;
If TDM manages to load your efx file, then you will see the following message in console:&lt;br /&gt;
 sound: found efxs/&amp;lt;mapname&amp;gt;.efx&lt;br /&gt;
If you failed something, then you will see a bit different message there:&lt;br /&gt;
 sound: missing efxs/&amp;lt;mapname&amp;gt;.efx&lt;br /&gt;
In both cases some additional diagnostic messages can be present nearby.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; you must enable &amp;quot;&amp;lt;tt&amp;gt;OpenAL EFX&amp;lt;/tt&amp;gt;&amp;quot; in sound settings in the main menu, otherwise TDM won&#039;t even try to load the efx file.&lt;br /&gt;
&lt;br /&gt;
It is a plain text file, so you can open it up in your text editor of choice.&lt;br /&gt;
&lt;br /&gt;
Any EFX file must start with a header which specifies its &#039;&#039;&#039;version&#039;&#039;&#039;:&lt;br /&gt;
 Version 2&lt;br /&gt;
If you forget this line, then your EFX file will &#039;&#039;&#039;not&#039;&#039;&#039; be loaded.&lt;br /&gt;
The following versions are supported:&lt;br /&gt;
* &amp;lt;tt&amp;gt;Version 1&amp;lt;/tt&amp;gt; was supported by TDM from the very beginning. It uses some non-standard terms and quantities, which makes it hard to work with.&lt;br /&gt;
* &amp;lt;tt&amp;gt;Version 2&amp;lt;/tt&amp;gt; was added in TDM 2.07. It uses the parameters from OpenAL EFX and supports a lot of presets. &#039;&#039;&#039;Recommended for all new missions.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The rest of the file consists of separate blocks, one for each &amp;quot;reverb zone&amp;quot;.&lt;br /&gt;
Each block must start with &amp;lt;tt&amp;gt;reverb&amp;lt;/tt&amp;gt; keyword for Version 1 definitions, and &amp;lt;tt&amp;gt;eaxreverb&amp;lt;/tt&amp;gt; keyword for Version 2 definitions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here is an example of such block from mars_city1.efx of the original Doom 3 game (Version 1):&lt;br /&gt;
&lt;br /&gt;
 // reverb maintenance&lt;br /&gt;
 reverb &amp;quot;maintenance&amp;quot; {&lt;br /&gt;
  &amp;quot;environment&amp;quot; 26&lt;br /&gt;
  &amp;quot;environment size&amp;quot; 5.0670&lt;br /&gt;
  &amp;quot;environment diffusion&amp;quot; 0.6030&lt;br /&gt;
  &amp;quot;room&amp;quot; -411&lt;br /&gt;
  &amp;quot;room hf&amp;quot; -685&lt;br /&gt;
  &amp;quot;room lf&amp;quot; 0&lt;br /&gt;
  &amp;quot;decay time&amp;quot; 1.7360&lt;br /&gt;
  &amp;quot;decay hf ratio&amp;quot; 0.8030&lt;br /&gt;
  &amp;quot;decay lf ratio&amp;quot; 1.0000&lt;br /&gt;
  &amp;quot;reflections&amp;quot; 96&lt;br /&gt;
  &amp;quot;reflections delay&amp;quot; 0.0080&lt;br /&gt;
  &amp;quot;reflections pan&amp;quot; 0.0000 0.0000 0.0000&lt;br /&gt;
  &amp;quot;reverb&amp;quot; 27&lt;br /&gt;
  &amp;quot;reverb delay&amp;quot; 0.0050&lt;br /&gt;
  &amp;quot;reverb pan&amp;quot; 0.0000 0.0000 0.0000&lt;br /&gt;
  &amp;quot;echo time&amp;quot; 0.0750&lt;br /&gt;
  &amp;quot;echo depth&amp;quot; 1.0000&lt;br /&gt;
  &amp;quot;modulation time&amp;quot; 0.2500&lt;br /&gt;
  &amp;quot;modulation depth&amp;quot; 0.0000&lt;br /&gt;
  &amp;quot;air absorption hf&amp;quot; -5.0000&lt;br /&gt;
  &amp;quot;hf reference&amp;quot; 5000.0000&lt;br /&gt;
  &amp;quot;lf reference&amp;quot; 250.0000&lt;br /&gt;
  &amp;quot;room rolloff factor&amp;quot; 0.0000&lt;br /&gt;
  &amp;quot;flags&amp;quot; 56&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And here is an artificial example of Version 2 definitions:&lt;br /&gt;
&lt;br /&gt;
  eaxreverb &amp;quot;myweirdstreets&amp;quot; {&lt;br /&gt;
    reflections_gain 0.5&lt;br /&gt;
    reflections_delay 0.0050&lt;br /&gt;
    late_reverb_gain 2.5&lt;br /&gt;
    late_reverb_delay 0.050&lt;br /&gt;
    echo_time 0.25&lt;br /&gt;
    echo_depth 0.9000&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
What does all this mean? &lt;br /&gt;
&lt;br /&gt;
There is a lot of sound design stuff that one could make guesses at if you&#039;ve ever used a reverb plugin in any sort of sound editing program. hf = high frequency, lf = low frequency, etc.&lt;br /&gt;
&lt;br /&gt;
A proper explanation of the parameters is given below.&lt;br /&gt;
&lt;br /&gt;
== Locations ==&lt;br /&gt;
Each reverb zone definition starts with a line which specifies to which location it must be applied:&lt;br /&gt;
&lt;br /&gt;
 reverb &amp;quot;&amp;lt;name of the location area you want to apply this to&amp;gt;&amp;quot;&lt;br /&gt;
 {&lt;br /&gt;
     //... (settings)&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Information about locations and how to set them up is available in another article: [[Location Settings #The Location Entities]].&lt;br /&gt;
Reverb zones use exactly the same locations as the ones which are used to specify per-area ambient sounds.&lt;br /&gt;
You should name every info_location entity, i.e. provide a &amp;quot;&amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt;&amp;quot; spawnarg for it. This is the name used in reverb zone definitions.&lt;br /&gt;
&lt;br /&gt;
As of TDM 2.06, you can&#039;t use capital letters in the name of your location entity or reverb zone. This may or may not change in the future.&lt;br /&gt;
&lt;br /&gt;
Here is an example of an entity which defines &amp;quot;canal_tunnel&amp;quot; location:&lt;br /&gt;
&lt;br /&gt;
 //======================= from volta_v1.map ====================&lt;br /&gt;
 // entity 3532&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;classname&amp;quot; &amp;quot;info_location&amp;quot;&lt;br /&gt;
   &amp;quot;name&amp;quot; &amp;quot;canal_tunnel&amp;quot;             //this is the name used&lt;br /&gt;
   &amp;quot;ambient&amp;quot; &amp;quot;snd_streets&amp;quot;&lt;br /&gt;
   &amp;quot;ambient_light&amp;quot; &amp;quot;0.04 0.03 0.02&amp;quot;&lt;br /&gt;
   &amp;quot;ambient_light_dynamic&amp;quot; &amp;quot;0.01 0.01 0.01&amp;quot;&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And this is the EFX effect (reverb zone) for it:&lt;br /&gt;
&lt;br /&gt;
 //======================= from volta_v1.efx ====================&lt;br /&gt;
 reverb &amp;quot;canal_tunnel&amp;quot; {             //name put to here&lt;br /&gt;
   &amp;quot;environment&amp;quot; 22&lt;br /&gt;
   &amp;quot;environment size&amp;quot; 1.8000&lt;br /&gt;
   &amp;quot;environment diffusion&amp;quot; 1.0000&lt;br /&gt;
   &amp;quot;room&amp;quot; -1000&lt;br /&gt;
   &amp;quot;room hf&amp;quot; -4000&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
During playing, the engine prints a message whenever the player&#039;s location changes.&lt;br /&gt;
It allows you to check if you have set up locations properly.&lt;br /&gt;
For instance, here are console messages showing a proper EFX location change:&lt;br /&gt;
&lt;br /&gt;
 Switching to EFX &#039;canal_tunnel&#039; (#295)&lt;br /&gt;
 Changed location from &#039;canal_streets&#039; to &#039;canal_tunnel&#039;.&lt;br /&gt;
&lt;br /&gt;
It is also possible to specify portal-area number instead of location name in the reverb zone definition.&lt;br /&gt;
The portal-area number is listed in the .proc file, which is created in the dmap process, in the format of &amp;lt;tt&amp;gt;_area&amp;lt;num&amp;gt;&amp;lt;/tt&amp;gt; (where &amp;lt;num&amp;gt; is the portal area number), e.g. &amp;lt;tt&amp;gt;_area15&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&#039;&#039;&#039;Beware:&#039;&#039;&#039; this functionality exists for fast hacking only! Do not release a mission with portal-area numbers in .efx file!&lt;br /&gt;
The main reason to avoid it is that portal-area numbers are auto-generated, so minor changes in your mission can change all of them.&lt;br /&gt;
&lt;br /&gt;
Finally, there is a &amp;quot;default&amp;quot; reverb environment which is used for any area in the map which does not have reverb information specified.&lt;br /&gt;
&lt;br /&gt;
The order that the sound system checks for reverb data is: area number -&amp;gt; location name -&amp;gt; default.&lt;br /&gt;
&lt;br /&gt;
== Changes during playing ==&lt;br /&gt;
Type &amp;quot;&amp;lt;tt&amp;gt;reloadSounds&amp;lt;/tt&amp;gt;&amp;quot; command into game console in order to reload EFX definitions.&lt;br /&gt;
&lt;br /&gt;
So when you experiment with EFX, execute this command after each tweak to EFX file to hear the difference immediately.&lt;br /&gt;
&lt;br /&gt;
== Suppress effect ==&lt;br /&gt;
Sometimes you want to disable EFX effect on a specific sound.&lt;br /&gt;
A typical example is when you have a voice in player&#039;s head, which must not depend on player&#039;s physical environment.&lt;br /&gt;
Another case is when some sound already has reverb baked in, so you don&#039;t what to double-reverb it. Although the best practice is to use sound samples without embedded reverb, combined with proper EFX definitions.&lt;br /&gt;
&lt;br /&gt;
You can disable all EFX effects on one specific sound shader by adding &amp;quot;&amp;lt;tt&amp;gt;no_efx&amp;lt;/tt&amp;gt;&amp;quot; keyword to its body.&lt;br /&gt;
For instance, here is how non-EFX version of blackjack unsheathing looks like:&lt;br /&gt;
 blackjack_unsheath&lt;br /&gt;
 {&lt;br /&gt;
   description &amp;quot;Made by pakmannen&amp;quot;&lt;br /&gt;
   sound/sfx/tools/melee/blackjack_unsheath.ogg&lt;br /&gt;
   no_efx                       //do NOT apply EFX to this sound&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note that if you change sound shaders, writing &amp;quot;&amp;lt;tt&amp;gt;reloadDecls&amp;lt;/tt&amp;gt;&amp;quot; in TDM game console is enough to reload them.&lt;br /&gt;
&lt;br /&gt;
There are a lot of stock sounds in TDM which should not be affected by EFX effects.&lt;br /&gt;
Starting from TDM 2.07, the corresponding core sounds are marked with &amp;quot;&amp;lt;tt&amp;gt;no_efx&amp;lt;/tt&amp;gt;&amp;quot; keyword (see issue [http://bugs.thedarkmod.com/view.php?id=4688 4688]).&lt;br /&gt;
If you discover any core sound which is affected by EFX while you believe it should not, start a discussion on forums.&lt;br /&gt;
&lt;br /&gt;
=Environment properties=&lt;br /&gt;
&lt;br /&gt;
== New properties (Version 2) ==&lt;br /&gt;
&lt;br /&gt;
With Version 2 of EFX file, the set of supported properties exactly matches the set of properties defined in OpenAL EFX for the &amp;quot;EAX Reverb&amp;quot; effect.&lt;br /&gt;
Note that EFX defines several types of effects, including &amp;quot;EAX Reverb&amp;quot;, &amp;quot;Standard Reverb&amp;quot;, &amp;quot;Chorus&amp;quot;, &amp;quot;Distortion&amp;quot;, &amp;quot;Echo&amp;quot;, &amp;quot;Flanger&amp;quot;, etc.&lt;br /&gt;
Only the first one is important, ignore all the rest (including the so-called &amp;quot;Standard Reverb&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
The detailed description of all the properties is given in &amp;quot;Appendix 1 – Effect property descriptions&amp;quot; of the [https://usermanual.wiki/Pdf/Effects20Extension20Guide.90272296/view#95 OpenAL Effects Extension Guide](pages 95-101).&lt;br /&gt;
The short list is also available in a table on [https://usermanual.wiki/Pdf/Effects20Extension20Guide.90272296/view#66 page 66 of the guide]:&lt;br /&gt;
&lt;br /&gt;
[[File:Eaxreverb_properties_screenshot.png|500px]]&lt;br /&gt;
&lt;br /&gt;
The only difference is that the property names in the guide have the &amp;lt;tt&amp;gt;AL_EAXREVERB_&amp;lt;/tt&amp;gt; prefix, while in TDM definitions this prefix is removed.&lt;br /&gt;
&lt;br /&gt;
== Presets (Version 2) ==&lt;br /&gt;
Presets can be set in 2 ways:&lt;br /&gt;
* in the .efx file&lt;br /&gt;
* As of TDM 2.13, the &#039;&#039;&#039;efx_preset&#039;&#039;&#039; spawnarg on the location entity for the location where you want to use the effect.&lt;br /&gt;
&lt;br /&gt;
=== File Method ===&lt;br /&gt;
&lt;br /&gt;
There is one special property &amp;lt;tt&amp;gt;PRESET&amp;lt;/tt&amp;gt;, which is not present in the EFX guide.&lt;br /&gt;
This property accepts the name of the preset which you want to use:&lt;br /&gt;
&lt;br /&gt;
 eaxreverb &amp;quot;myclassroom&amp;quot; {&lt;br /&gt;
   preset auditorium&lt;br /&gt;
 }&lt;br /&gt;
 eaxreverb &amp;quot;mycave&amp;quot; {&lt;br /&gt;
   preset cave&lt;br /&gt;
 }&lt;br /&gt;
 eaxreverb &amp;quot;mycorridor&amp;quot; {&lt;br /&gt;
   preset hallway&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
If you specify the preset like this, the values for all the reverb properties will be taken from the specified preset.&lt;br /&gt;
Additionally, you can override values of some properties if you define them manually &#039;&#039;&#039;after&#039;&#039;&#039; defining the preset.&lt;br /&gt;
&lt;br /&gt;
The preset property also accepts index of preset. Don&#039;t use indices for anything except experimentation, since they may change in future.&lt;br /&gt;
&lt;br /&gt;
=== Location Entity Method ===&lt;br /&gt;
On the location entity where you want to use the preset, set the spawnarg &#039;&#039;&#039;efx_preset&#039;&#039;&#039; to the value of the preset.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
efx_preset    CITY_SUBWAY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that both the configuration file and the location entity spawnarg can be used simultaneously.  In case that both are set for a single location, the spawnarg value will take precedence.&lt;br /&gt;
&lt;br /&gt;
=== Preset Values ===&lt;br /&gt;
The presets were taken from OpenAL-Soft implementation which TDM uses.&lt;br /&gt;
Here is the full list of preset names:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;height:350px; overflow:scroll;&amp;quot;&amp;gt;&lt;br /&gt;
GENERIC&lt;br /&gt;
PADDEDCELL&lt;br /&gt;
ROOM&lt;br /&gt;
BATHROOM&lt;br /&gt;
LIVINGROOM&lt;br /&gt;
STONEROOM&lt;br /&gt;
AUDITORIUM&lt;br /&gt;
CONCERTHALL&lt;br /&gt;
CAVE&lt;br /&gt;
ARENA&lt;br /&gt;
HANGAR&lt;br /&gt;
CARPETEDHALLWAY&lt;br /&gt;
HALLWAY&lt;br /&gt;
STONECORRIDOR&lt;br /&gt;
ALLEY&lt;br /&gt;
FOREST&lt;br /&gt;
CITY&lt;br /&gt;
MOUNTAINS&lt;br /&gt;
QUARRY&lt;br /&gt;
PLAIN&lt;br /&gt;
PARKINGLOT&lt;br /&gt;
SEWERPIPE&lt;br /&gt;
UNDERWATER&lt;br /&gt;
DRUGGED&lt;br /&gt;
DIZZY&lt;br /&gt;
PSYCHOTIC&lt;br /&gt;
CASTLE_SMALLROOM&lt;br /&gt;
CASTLE_SHORTPASSAGE&lt;br /&gt;
CASTLE_MEDIUMROOM&lt;br /&gt;
CASTLE_LARGEROOM&lt;br /&gt;
CASTLE_LONGPASSAGE&lt;br /&gt;
CASTLE_HALL&lt;br /&gt;
CASTLE_CUPBOARD&lt;br /&gt;
CASTLE_COURTYARD&lt;br /&gt;
CASTLE_ALCOVE&lt;br /&gt;
FACTORY_SMALLROOM&lt;br /&gt;
FACTORY_SHORTPASSAGE&lt;br /&gt;
FACTORY_MEDIUMROOM&lt;br /&gt;
FACTORY_LARGEROOM&lt;br /&gt;
FACTORY_LONGPASSAGE&lt;br /&gt;
FACTORY_HALL&lt;br /&gt;
FACTORY_CUPBOARD&lt;br /&gt;
FACTORY_COURTYARD&lt;br /&gt;
FACTORY_ALCOVE&lt;br /&gt;
ICEPALACE_SMALLROOM&lt;br /&gt;
ICEPALACE_SHORTPASSAGE&lt;br /&gt;
ICEPALACE_MEDIUMROOM&lt;br /&gt;
ICEPALACE_LARGEROOM&lt;br /&gt;
ICEPALACE_LONGPASSAGE&lt;br /&gt;
ICEPALACE_HALL&lt;br /&gt;
ICEPALACE_CUPBOARD&lt;br /&gt;
ICEPALACE_COURTYARD&lt;br /&gt;
ICEPALACE_ALCOVE&lt;br /&gt;
SPACESTATION_SMALLROOM&lt;br /&gt;
SPACESTATION_SHORTPASSAGE&lt;br /&gt;
SPACESTATION_MEDIUMROOM&lt;br /&gt;
SPACESTATION_LARGEROOM&lt;br /&gt;
SPACESTATION_LONGPASSAGE&lt;br /&gt;
SPACESTATION_HALL&lt;br /&gt;
SPACESTATION_CUPBOARD&lt;br /&gt;
SPACESTATION_ALCOVE&lt;br /&gt;
WOODEN_SMALLROOM&lt;br /&gt;
WOODEN_SHORTPASSAGE&lt;br /&gt;
WOODEN_MEDIUMROOM&lt;br /&gt;
WOODEN_LARGEROOM&lt;br /&gt;
WOODEN_LONGPASSAGE&lt;br /&gt;
WOODEN_HALL&lt;br /&gt;
WOODEN_CUPBOARD&lt;br /&gt;
WOODEN_COURTYARD&lt;br /&gt;
WOODEN_ALCOVE&lt;br /&gt;
SPORT_EMPTYSTADIUM&lt;br /&gt;
SPORT_SQUASHCOURT&lt;br /&gt;
SPORT_SMALLSWIMMINGPOOL&lt;br /&gt;
SPORT_LARGESWIMMINGPOOL&lt;br /&gt;
SPORT_GYMNASIUM&lt;br /&gt;
SPORT_FULLSTADIUM&lt;br /&gt;
SPORT_STADIUMTANNOY&lt;br /&gt;
PREFAB_WORKSHOP&lt;br /&gt;
PREFAB_SCHOOLROOM&lt;br /&gt;
PREFAB_PRACTISEROOM&lt;br /&gt;
PREFAB_OUTHOUSE&lt;br /&gt;
PREFAB_CARAVAN&lt;br /&gt;
DOME_TOMB&lt;br /&gt;
PIPE_SMALL&lt;br /&gt;
DOME_SAINTPAULS&lt;br /&gt;
PIPE_LONGTHIN&lt;br /&gt;
PIPE_LARGE&lt;br /&gt;
PIPE_RESONANT&lt;br /&gt;
OUTDOORS_BACKYARD&lt;br /&gt;
OUTDOORS_ROLLINGPLAINS&lt;br /&gt;
OUTDOORS_DEEPCANYON&lt;br /&gt;
OUTDOORS_CREEK&lt;br /&gt;
OUTDOORS_VALLEY&lt;br /&gt;
MOOD_HEAVEN&lt;br /&gt;
MOOD_HELL&lt;br /&gt;
MOOD_MEMORY&lt;br /&gt;
DRIVING_COMMENTATOR&lt;br /&gt;
DRIVING_PITGARAGE&lt;br /&gt;
DRIVING_INCAR_RACER&lt;br /&gt;
DRIVING_INCAR_SPORTS&lt;br /&gt;
DRIVING_INCAR_LUXURY&lt;br /&gt;
DRIVING_FULLGRANDSTAND&lt;br /&gt;
DRIVING_EMPTYGRANDSTAND&lt;br /&gt;
DRIVING_TUNNEL&lt;br /&gt;
CITY_STREETS&lt;br /&gt;
CITY_SUBWAY&lt;br /&gt;
CITY_MUSEUM&lt;br /&gt;
CITY_LIBRARY&lt;br /&gt;
CITY_UNDERPASS&lt;br /&gt;
CITY_ABANDONED&lt;br /&gt;
DUSTYROOM&lt;br /&gt;
CHAPEL&lt;br /&gt;
SMALLWATERROOM                              &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Their definitions can be seen in [https://github.com/kcat/openal-soft/blob/master/include/AL/efx-presets.h efx-presets.h] from OpenAL-Soft source code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-expandtext=&amp;quot;Show&amp;quot; data-collapsetext=&amp;quot;Hide&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Legacy info (Version 1) ==&lt;br /&gt;
&lt;br /&gt;
This information is from the old official EAX 2.0 documentation, although some properties may have changed in scope and focus from EAX 2.0 to EAX 4.0. One can assume that the properties serve the same general purpose and that each property&#039;s value bounds are approximately the same.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;environment&#039;&#039;&#039; - Unknown. Likely sets the room to one of an unknown number of environment presets.&lt;br /&gt;
* &#039;&#039;&#039;environment size&#039;&#039;&#039; - The Environment Size property sets the apparent size of the surrounding “room.” The value of Environment Size can be considered a characteristic dimension of the room expressed in meters. Scaling Environment Size is equivalent to scaling all dimensions of the room by the same factor. Value type is FLOAT; value range is 1.0 to 100.0, expressed in linear meters.&lt;br /&gt;
* &#039;&#039;&#039;environment diffusion&#039;&#039;&#039; - The Environment Diffusion property controls the echo density in the reverberation decay. Reducing diffusion gives the reverberation a more “grainy” character that is especially noticeable with percussive sound sources. If you set a diffusion value of 0.0, the later reverberation sounds like a succession of distinct echoes. Value type is FLOAT; value range is 0.0 to 1.0, expressed in a linear multiplier value.&lt;br /&gt;
* &#039;&#039;&#039;room&#039;&#039;&#039; - The Room property is the master volume control for the reflected sound (both early reflections and reverberation) that EAX adds to all sound sources. It sets the maximum amount of reflections and reverberation added to the sound mix in the primary buffer (the listener). Value is LONG; value range is -10000 to 0, expressed in hundredths of one decibel (-100 dB to 0 dB).&lt;br /&gt;
* &#039;&#039;&#039;room hf&#039;&#039;&#039; - The Room HF property further tweaks reflected sound by attenuating it at high frequencies. It controls a low-pass filter that applies globally to the reflected sound of all sound sources. The exact qualities of this low-pass filter -- its frequency and its bandwidth (Q) -- are unknown. Value type is LONG; value range is -10000 to 0, expressed in hundredths of one decibel (-100 dB to 0 dB).&lt;br /&gt;
* &#039;&#039;&#039;room lf&#039;&#039;&#039; - Undocumented. Assumably, the Room LF property applies a high-pass to reflected sound in much the same way as Room HF applies low-pass. The value type and range is unknown, but is likely LONG, must be between -10000 and 0 and is expressed in hundredths of one decibel.&lt;br /&gt;
* &#039;&#039;&#039;decay time&#039;&#039;&#039; - The Decay Time property sets the reverberation decay time, or the time in which reverberation is diminished. It ranges from 0.1 (typically a small room with very dead surfaces) to 20.0 (typically a large room with very live surfaces). Value is FLOAT; value range is 0.1 to 20.0, expressed in seconds.&lt;br /&gt;
* &#039;&#039;&#039;decay hf ratio&#039;&#039;&#039; - The Decay HF Ratio property sets the spectral quality of the Decay Time parameter. It is the ratio of high-frequency decay time relative to the time set by Decay Time. The Decay HF Ratio value 1.0 is neutral: the decay time is equal for all frequencies. As Decay HF Ratio increases above 1.0, the high-frequency decay time increases so it’s longer than the decay time at low frequencies. You hear a more brilliant reverberation with a longer decay at high frequencies. As the Decay HF Ratio value decreases below 1.0, the high-frequency decay time decreases so it’s shorter than the decay time of the low frequencies. You hear a more natural reverberation. Value is FLOAT; value range is 0.1 to 20.0, expressed in a linear multiplier variable.&lt;br /&gt;
* &#039;&#039;&#039;decay lf ratio&#039;&#039;&#039; - Undocumented. It&#039;s likely best to leave the value at 1.0, though the value&#039;s type and range is probably the same as the Decay HF Ratio property.&lt;br /&gt;
* &#039;&#039;&#039;reflections&#039;&#039;&#039; - The Reflections property controls the overall amount of initial reflections relative to the Room property. The value of Reflections ranges from a maximum of 10 dB to a minimum of -100 dB (no initial reflections at all), and is corrected by the value of the Room property. The Reflections property does not affect the subsequent reverberation decay. You can increase the amount of initial reflections to simulate a more narrow space or closer walls, especially effective if you associate the initial reflections increase with a reduction in reflections delays by lowering the value of the Reflection Delay property. To simulate open or semi-open environments, you can maintain the amount of early reflections while reducing the value of the Reverb property, which controls later reflections. Value type is LONG; value range is -10000 to 1000, expressed in hundredths of one decibel (-100 dB to -10 dB).&lt;br /&gt;
* &#039;&#039;&#039;reflections delay&#039;&#039;&#039; - The Reflections Delay property is the amount of delay between the arrival time of the direct path from the source to the first reflection from the source. It ranges from 0 to 300 milliseconds. You can reduce or increase Reflections Delay to simulate closer or more distant reflective surfaces—and therefore control the perceived size of the room. Value is FLOAT; value range is 0.0 to 0.3, expressed in seconds (0 to 300 milliseconds).&lt;br /&gt;
* &#039;&#039;&#039;reflections pan&#039;&#039;&#039; - Undocumented. Three values are specified which may correspond to a generic &amp;quot;front&amp;quot;, &amp;quot;side&amp;quot; and &amp;quot;back/rear&amp;quot; configuration to control the directivity of early reflections in a 7.1 surround matrix. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;reverb&#039;&#039;&#039; - The Reverb property controls the overall amount of later reverberation relative to the Room property. (The Room property sets the overall amount of both initial reflections and later reverberation.) The value of Reverb ranges from a maximum of 20 dB to a minimum of -100 dB (no late reverberation at all). Value is LONG; value range is -10000 to 2000, expressed in hundredths of a decibel (-100 dB to 20 dB).&lt;br /&gt;
* &#039;&#039;&#039;reverb delay&#039;&#039;&#039; - The Reverb Delay property defines the begin time of the late reverberation relative to the time of the initial reflection (the first of the early reflections). It ranges from 0 to 100 milliseconds. Reducing or increasing Reverb Delay is useful for simulating a smaller or larger room. Value is FLOAT; value range is 0.0 to 0.1, expressed in seconds (0 to 100 milliseconds).&lt;br /&gt;
* &#039;&#039;&#039;reverb pan&#039;&#039;&#039; - Undocumented. Three values are specified which may correspond to a generic &amp;quot;front&amp;quot;, &amp;quot;side&amp;quot; and &amp;quot;back/rear&amp;quot; configuration to control the directivity of reverberation in a 7.1 surround matrix. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;echo time&#039;&#039;&#039; - Undocumented. Likely controls the decay time of echoes, or late reflections. A value of 0.1 likely presents a natural amount of echo, while increasing the value likely causes a &amp;quot;Grand Canyon&amp;quot; effect. Value type is likely FLOAT; value range is likely between 0.075 and 0.25, expressed in seconds.&lt;br /&gt;
* &#039;&#039;&#039;echo depth&#039;&#039;&#039; - Undocumented. May control directionality or tonal qualities of echoes arriving at the listener. Probably best to leave at 1.0. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;modulation time&#039;&#039;&#039; - Undocumented. Unknown purpose. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;modulation depth&#039;&#039;&#039; - Undocumented. Unknown purpose. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;air absorption hf&#039;&#039;&#039; - The Air Absorption HF property controls the distance-dependent attenuation at high frequencies caused by the propagation medium. It applies to both the direct path and reflected sound. You can use Air Absorption HF to simulate sound transmission through foggy air, dry air, smoky atmosphere, and so on. The default value is -0.05 dB per meter, which roughly corresponds to typical condition of atmospheric humidity, temperature, and so on. Lowering the value simulates a more absorbent medium (more humidity in the air, for example); raising the value simulates a less absorbent medium (dry desert air, for example). Value is FLOAT; value range is -100.0 to 0.0, expressed in hundredths of one decibel per meter (-1 dB to 0 dB). Default value is -5.0, which corresponds to -0.05 dB per meter attenuation.&lt;br /&gt;
* &#039;&#039;&#039;hf reference&#039;&#039;&#039; - Likely defines the frequency used for low-pass filters. Value is likely LONG; value range is likely between 0.0 and 20000.0, expressed in Hz. This value is probably best left at 5000.0.&lt;br /&gt;
* &#039;&#039;&#039;lf reference&#039;&#039;&#039; - Likely defines the frequency used for high-pass filters. Value is likely LONG; value range is likely between 0.0 and 20000.0, expressed in Hz. This value is probably best left at 250.0.&lt;br /&gt;
* &#039;&#039;&#039;room rolloff factor&#039;&#039;&#039; - The Room Rolloff property is one of two methods available in EAX to attenuate the reflected sound (containing both reflections, reverberation and echoes) according to source-listener distance. Value type is FLOAT; value range is 0.0 to 10.0, expressed in a linear multiplier value. It&#039;s recommended that users use 0.0, as id Software did not deviate from this value with Doom 3.&lt;br /&gt;
* &#039;&#039;&#039;flags&#039;&#039;&#039; - The Flags property is intended to control the relationship of high-level EAX properties to low-level properties. If certain EAX flags are set by setting the Flags property to a particular value, the setting of high-level properties is supposed to control the values of low-level properties based upon a defined scale, overriding specified values. In EAX 2.0, the value type is DWORD, whereas in Doom 3, it appears to be INT or some other type commonly used to store numeric values. In Doom 3, common values are 0, 2, 15, 31, 32, 56 and 63, but no documentation details what these values correspond to. If users wish to experiment with the Flags property, it is recommended that they choose from one of the above values. For reference, here is a table with the counts for each flag value as used in Doom 3:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 0.5em; margin-left: 2em; border: 1px solid #a0a0a0; text-align: right; border-collapse: collapse;&amp;quot; cellpadding=&amp;quot;2&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Flag decimal&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Flag binary&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Count&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|00000000&lt;br /&gt;
|497&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|00000010&lt;br /&gt;
|6&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|00001110&lt;br /&gt;
|15&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|00001111&lt;br /&gt;
|94&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|31&lt;br /&gt;
|00011111&lt;br /&gt;
|511&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|32&lt;br /&gt;
|00100000&lt;br /&gt;
|247&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|56&lt;br /&gt;
|00111000&lt;br /&gt;
|59&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|63&lt;br /&gt;
|00111111&lt;br /&gt;
|168&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Design.&#039;&#039;&#039;&lt;br /&gt;
In terms of the actual sound design for the values you put into these variables, here is a general tutorial on reverb from FruityLoops (NOTE: This is for a music production plugin, some of these don&#039;t apply, it&#039;s just to give a general idea on what certain variables do):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Low Cut&#039;&#039;&#039; Adjusts the low cutoff frequency. Use this to remove low frequencies from the input signal before reverb is added. For example, if you are adding reverb to, say a drum track, you might want to remove some of the &#039;rumble&#039; from the bass drum by attenuating the bass frequencies. Setting this parameter to the minimum value will bypass the Low Cut filter, displaying OFF in the value field.&lt;br /&gt;
* &#039;&#039;&#039;High Cut&#039;&#039;&#039; - Similar to the Low Cut, this adjusts the high cutoff frequency. Use this to remove high frequencies from the input signal.&lt;br /&gt;
* &#039;&#039;&#039;Predelay&#039;&#039;&#039; - Controls the delay time between the direct input signal and the first reverb reflection. This should be set to modest values for small rooms, and can be increased in relation to increases in room size. &#039;&#039;&#039;Predelay&#039;&#039;&#039; creates a slap-back echo effect that can both add atmosphere and muffle the signal, so use it wisely.&lt;br /&gt;
* &#039;&#039;&#039;Room Size&#039;&#039;&#039; - Use this to set the size of the virtual room where the reverb is created. The Room Size should be adjusted according to the decay time. Small rooms sound better with a short decay time, large rooms sound better with longer reverb times.&lt;br /&gt;
* &#039;&#039;&#039;Diffusion&#039;&#039;&#039; - Controls the density of the reflections bouncing off the walls of the virtual room. A low diffusion setting makes the reflections sound more distinct, like closely spaced echoes. A high diffusion setting creates reflections so close they sound more like noise, where no echoes can be distinguished.&lt;br /&gt;
* &#039;&#039;&#039;Color&#039;&#039;&#039; - The Color parameter is used for adjusting the decay time of the bass frequencies of the signal. This allows you to change the overall perceived mood or &#039;sound&#039; of the virtual room. A bright room has a low bass response, while warm rooms have a higher bass response. In a flat room, the response of the bass is equal to the general frequency response. Color has five settings: Brighter, Bright, Flat, Warm, Warmer.&lt;br /&gt;
* &#039;&#039;&#039;Decay&#039;&#039;&#039; - Controls the decay time of the reverb, the time it takes for the signal to decay to -60dB (1/1000 of the maximum amplitude). Use low decay times for small rooms or boxes, and long decay times for large rooms, halls or churches. You should also make sure that the Room Size parameter has an appropriate value.&lt;br /&gt;
* &#039;&#039;&#039;High Damping&#039;&#039;&#039; - This parameter allows you to adjust damping of the high frequencies in the reverb signal over time. Damping refers to the high frequencies being attenuated and dying out. This causes the sound to become gradually muffled and warm like it is being absorbed in the room. Setting this parameter to the maximum value will bypass the High Damping, displaying OFF in the value field.&lt;br /&gt;
* &#039;&#039;&#039;Dry&#039;&#039;&#039; - Sets the relative dry output level.&lt;br /&gt;
* &#039;&#039;&#039;Reverb&#039;&#039;&#039; - Sets the relative reverb (wet) signal level.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Error Check=&lt;br /&gt;
If you modified the presets in your EFX file, you can check for errors ingame. Load your map and open the console. Type &#039;&#039;reloadSounds&#039;&#039;, this will trigger the reload of the EFX used in your map and print out the vars which cause an error (like a value exceeding the maximum range). Note that if your EFX files contain errors, this will make the game ignore the EFX settings you chose. &lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
See the &amp;quot;EFX Reverb&amp;quot; column of &#039;&#039;&#039;[[Fan_Missions_for_The_Dark_Mod|Fan Missions page]]&#039;&#039;&#039;. Missions with &amp;quot;Yes&amp;quot; have EFX Reverb. &lt;br /&gt;
&amp;lt;br&amp;gt;Most missions use v2.0 presets but a few missions such as &amp;quot;Volta and the Stone&amp;quot; and Behind Closed Doors use v1.0 settings.&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
The Version 2 definitions were implemented due to [http://bugs.thedarkmod.com/view.php?id=4815 issue 4815], it has some brief explanation.&lt;br /&gt;
&lt;br /&gt;
A tutorial based around EFX can be found [http://forums.thedarkmod.com/topic/19205-getting-started-with-the-efx-room-reverb-system-wip/ here]&lt;br /&gt;
&lt;br /&gt;
An old demonstration map of EAX in TDM is included [http://forums.thedarkmod.com/topic/11045-environmental-audio-extensions-eax-in-tdm/ here]&lt;br /&gt;
&lt;br /&gt;
A discussion about no_efx is [http://forums.thedarkmod.com/topic/19213-efx-discussion here]&lt;br /&gt;
&lt;br /&gt;
The first version of this article was written by Ishtvan [https://forums.thedarkmod.com/index.php?/topic/2071-setting-reverb-data-in-new-soundengine-wiki/ here]&lt;br /&gt;
&lt;br /&gt;
[[Category:Sound]]&lt;br /&gt;
[[Category:Tutorial]]&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=Setting_Reverb_Data_of_Rooms_(EAX)&amp;diff=33803</id>
		<title>Setting Reverb Data of Rooms (EAX)</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=Setting_Reverb_Data_of_Rooms_(EAX)&amp;diff=33803"/>
		<updated>2025-01-11T21:03:11Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: /* Location Entity Method */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
This document will attempt to explain how to set the new EFX settings in your rooms when mapping.&lt;br /&gt;
&lt;br /&gt;
Previously these settings were known as EAX settings, and required EAX 4.0-compatible sound card.&lt;br /&gt;
In TDM 2.06, EAX technology was completely replaced with OpenAL EFX, which is now processed in software (by [https://github.com/kcat/openal-soft openal-soft]) without any requirements on sound card.&lt;br /&gt;
&lt;br /&gt;
= General =&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
&lt;br /&gt;
EFX for a fan mission can be configured with or without a configuration file.  However, fileless configuration is only supported for [[Setting_Reverb_Data_of_Rooms_(EAX)#Presets_(Version_2)|EFX presets]].&lt;br /&gt;
&lt;br /&gt;
== EFX file ==&lt;br /&gt;
The EFX info for a map should be stored in the file &amp;quot;&amp;lt;tt&amp;gt;efxs/&amp;lt;mapname&amp;gt;.efx&amp;lt;/tt&amp;gt;&amp;quot;, where &amp;lt;mapname&amp;gt; is the name of your .map file (without extension).&lt;br /&gt;
&lt;br /&gt;
In order to check that you have put the file into right location, start your mission in game.&lt;br /&gt;
If TDM manages to load your efx file, then you will see the following message in console:&lt;br /&gt;
 sound: found efxs/&amp;lt;mapname&amp;gt;.efx&lt;br /&gt;
If you failed something, then you will see a bit different message there:&lt;br /&gt;
 sound: missing efxs/&amp;lt;mapname&amp;gt;.efx&lt;br /&gt;
In both cases some additional diagnostic messages can be present nearby.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; you must enable &amp;quot;&amp;lt;tt&amp;gt;OpenAL EFX&amp;lt;/tt&amp;gt;&amp;quot; in sound settings in the main menu, otherwise TDM won&#039;t even try to load the efx file.&lt;br /&gt;
&lt;br /&gt;
It is a plain text file, so you can open it up in your text editor of choice.&lt;br /&gt;
&lt;br /&gt;
Any EFX file must start with a header which specifies its &#039;&#039;&#039;version&#039;&#039;&#039;:&lt;br /&gt;
 Version 2&lt;br /&gt;
If you forget this line, then your EFX file will &#039;&#039;&#039;not&#039;&#039;&#039; be loaded.&lt;br /&gt;
The following versions are supported:&lt;br /&gt;
* &amp;lt;tt&amp;gt;Version 1&amp;lt;/tt&amp;gt; was supported by TDM from the very beginning. It uses some non-standard terms and quantities, which makes it hard to work with.&lt;br /&gt;
* &amp;lt;tt&amp;gt;Version 2&amp;lt;/tt&amp;gt; was added in TDM 2.07. It uses the parameters from OpenAL EFX and supports a lot of presets. &#039;&#039;&#039;Recommended for all new missions.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The rest of the file consists of separate blocks, one for each &amp;quot;reverb zone&amp;quot;.&lt;br /&gt;
Each block must start with &amp;lt;tt&amp;gt;reverb&amp;lt;/tt&amp;gt; keyword for Version 1 definitions, and &amp;lt;tt&amp;gt;eaxreverb&amp;lt;/tt&amp;gt; keyword for Version 2 definitions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here is an example of such block from mars_city1.efx of the original Doom 3 game (Version 1):&lt;br /&gt;
&lt;br /&gt;
 // reverb maintenance&lt;br /&gt;
 reverb &amp;quot;maintenance&amp;quot; {&lt;br /&gt;
  &amp;quot;environment&amp;quot; 26&lt;br /&gt;
  &amp;quot;environment size&amp;quot; 5.0670&lt;br /&gt;
  &amp;quot;environment diffusion&amp;quot; 0.6030&lt;br /&gt;
  &amp;quot;room&amp;quot; -411&lt;br /&gt;
  &amp;quot;room hf&amp;quot; -685&lt;br /&gt;
  &amp;quot;room lf&amp;quot; 0&lt;br /&gt;
  &amp;quot;decay time&amp;quot; 1.7360&lt;br /&gt;
  &amp;quot;decay hf ratio&amp;quot; 0.8030&lt;br /&gt;
  &amp;quot;decay lf ratio&amp;quot; 1.0000&lt;br /&gt;
  &amp;quot;reflections&amp;quot; 96&lt;br /&gt;
  &amp;quot;reflections delay&amp;quot; 0.0080&lt;br /&gt;
  &amp;quot;reflections pan&amp;quot; 0.0000 0.0000 0.0000&lt;br /&gt;
  &amp;quot;reverb&amp;quot; 27&lt;br /&gt;
  &amp;quot;reverb delay&amp;quot; 0.0050&lt;br /&gt;
  &amp;quot;reverb pan&amp;quot; 0.0000 0.0000 0.0000&lt;br /&gt;
  &amp;quot;echo time&amp;quot; 0.0750&lt;br /&gt;
  &amp;quot;echo depth&amp;quot; 1.0000&lt;br /&gt;
  &amp;quot;modulation time&amp;quot; 0.2500&lt;br /&gt;
  &amp;quot;modulation depth&amp;quot; 0.0000&lt;br /&gt;
  &amp;quot;air absorption hf&amp;quot; -5.0000&lt;br /&gt;
  &amp;quot;hf reference&amp;quot; 5000.0000&lt;br /&gt;
  &amp;quot;lf reference&amp;quot; 250.0000&lt;br /&gt;
  &amp;quot;room rolloff factor&amp;quot; 0.0000&lt;br /&gt;
  &amp;quot;flags&amp;quot; 56&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And here is an artificial example of Version 2 definitions:&lt;br /&gt;
&lt;br /&gt;
  eaxreverb &amp;quot;myweirdstreets&amp;quot; {&lt;br /&gt;
    reflections_gain 0.5&lt;br /&gt;
    reflections_delay 0.0050&lt;br /&gt;
    late_reverb_gain 2.5&lt;br /&gt;
    late_reverb_delay 0.050&lt;br /&gt;
    echo_time 0.25&lt;br /&gt;
    echo_depth 0.9000&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
What does all this mean? &lt;br /&gt;
&lt;br /&gt;
There is a lot of sound design stuff that one could make guesses at if you&#039;ve ever used a reverb plugin in any sort of sound editing program. hf = high frequency, lf = low frequency, etc.&lt;br /&gt;
&lt;br /&gt;
A proper explanation of the parameters is given below.&lt;br /&gt;
&lt;br /&gt;
== Locations ==&lt;br /&gt;
Each reverb zone definition starts with a line which specifies to which location it must be applied:&lt;br /&gt;
&lt;br /&gt;
 reverb &amp;quot;&amp;lt;name of the location area you want to apply this to&amp;gt;&amp;quot;&lt;br /&gt;
 {&lt;br /&gt;
     //... (settings)&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Information about locations and how to set them up is available in another article: [[Location Settings #The Location Entities]].&lt;br /&gt;
Reverb zones use exactly the same locations as the ones which are used to specify per-area ambient sounds.&lt;br /&gt;
You should name every info_location entity, i.e. provide a &amp;quot;&amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt;&amp;quot; spawnarg for it. This is the name used in reverb zone definitions.&lt;br /&gt;
&lt;br /&gt;
As of TDM 2.06, you can&#039;t use capital letters in the name of your location entity or reverb zone. This may or may not change in the future.&lt;br /&gt;
&lt;br /&gt;
Here is an example of an entity which defines &amp;quot;canal_tunnel&amp;quot; location:&lt;br /&gt;
&lt;br /&gt;
 //======================= from volta_v1.map ====================&lt;br /&gt;
 // entity 3532&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;classname&amp;quot; &amp;quot;info_location&amp;quot;&lt;br /&gt;
   &amp;quot;name&amp;quot; &amp;quot;canal_tunnel&amp;quot;             //this is the name used&lt;br /&gt;
   &amp;quot;ambient&amp;quot; &amp;quot;snd_streets&amp;quot;&lt;br /&gt;
   &amp;quot;ambient_light&amp;quot; &amp;quot;0.04 0.03 0.02&amp;quot;&lt;br /&gt;
   &amp;quot;ambient_light_dynamic&amp;quot; &amp;quot;0.01 0.01 0.01&amp;quot;&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And this is the EFX effect (reverb zone) for it:&lt;br /&gt;
&lt;br /&gt;
 //======================= from volta_v1.efx ====================&lt;br /&gt;
 reverb &amp;quot;canal_tunnel&amp;quot; {             //name put to here&lt;br /&gt;
   &amp;quot;environment&amp;quot; 22&lt;br /&gt;
   &amp;quot;environment size&amp;quot; 1.8000&lt;br /&gt;
   &amp;quot;environment diffusion&amp;quot; 1.0000&lt;br /&gt;
   &amp;quot;room&amp;quot; -1000&lt;br /&gt;
   &amp;quot;room hf&amp;quot; -4000&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
During playing, the engine prints a message whenever the player&#039;s location changes.&lt;br /&gt;
It allows you to check if you have set up locations properly.&lt;br /&gt;
For instance, here are console messages showing a proper EFX location change:&lt;br /&gt;
&lt;br /&gt;
 Switching to EFX &#039;canal_tunnel&#039; (#295)&lt;br /&gt;
 Changed location from &#039;canal_streets&#039; to &#039;canal_tunnel&#039;.&lt;br /&gt;
&lt;br /&gt;
It is also possible to specify portal-area number instead of location name in the reverb zone definition.&lt;br /&gt;
The portal-area number is listed in the .proc file, which is created in the dmap process, in the format of &amp;lt;tt&amp;gt;_area&amp;lt;num&amp;gt;&amp;lt;/tt&amp;gt; (where &amp;lt;num&amp;gt; is the portal area number), e.g. &amp;lt;tt&amp;gt;_area15&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&#039;&#039;&#039;Beware:&#039;&#039;&#039; this functionality exists for fast hacking only! Do not release a mission with portal-area numbers in .efx file!&lt;br /&gt;
The main reason to avoid it is that portal-area numbers are auto-generated, so minor changes in your mission can change all of them.&lt;br /&gt;
&lt;br /&gt;
Finally, there is a &amp;quot;default&amp;quot; reverb environment which is used for any area in the map which does not have reverb information specified.&lt;br /&gt;
&lt;br /&gt;
The order that the sound system checks for reverb data is: area number -&amp;gt; location name -&amp;gt; default.&lt;br /&gt;
&lt;br /&gt;
== Changes during playing ==&lt;br /&gt;
Type &amp;quot;&amp;lt;tt&amp;gt;reloadSounds&amp;lt;/tt&amp;gt;&amp;quot; command into game console in order to reload EFX definitions.&lt;br /&gt;
&lt;br /&gt;
So when you experiment with EFX, execute this command after each tweak to EFX file to hear the difference immediately.&lt;br /&gt;
&lt;br /&gt;
== Suppress effect ==&lt;br /&gt;
Sometimes you want to disable EFX effect on a specific sound.&lt;br /&gt;
A typical example is when you have a voice in player&#039;s head, which must not depend on player&#039;s physical environment.&lt;br /&gt;
Another case is when some sound already has reverb baked in, so you don&#039;t what to double-reverb it. Although the best practice is to use sound samples without embedded reverb, combined with proper EFX definitions.&lt;br /&gt;
&lt;br /&gt;
You can disable all EFX effects on one specific sound shader by adding &amp;quot;&amp;lt;tt&amp;gt;no_efx&amp;lt;/tt&amp;gt;&amp;quot; keyword to its body.&lt;br /&gt;
For instance, here is how non-EFX version of blackjack unsheathing looks like:&lt;br /&gt;
 blackjack_unsheath&lt;br /&gt;
 {&lt;br /&gt;
   description &amp;quot;Made by pakmannen&amp;quot;&lt;br /&gt;
   sound/sfx/tools/melee/blackjack_unsheath.ogg&lt;br /&gt;
   no_efx                       //do NOT apply EFX to this sound&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note that if you change sound shaders, writing &amp;quot;&amp;lt;tt&amp;gt;reloadDecls&amp;lt;/tt&amp;gt;&amp;quot; in TDM game console is enough to reload them.&lt;br /&gt;
&lt;br /&gt;
There are a lot of stock sounds in TDM which should not be affected by EFX effects.&lt;br /&gt;
Starting from TDM 2.07, the corresponding core sounds are marked with &amp;quot;&amp;lt;tt&amp;gt;no_efx&amp;lt;/tt&amp;gt;&amp;quot; keyword (see issue [http://bugs.thedarkmod.com/view.php?id=4688 4688]).&lt;br /&gt;
If you discover any core sound which is affected by EFX while you believe it should not, start a discussion on forums.&lt;br /&gt;
&lt;br /&gt;
=Environment properties=&lt;br /&gt;
&lt;br /&gt;
== New properties (Version 2) ==&lt;br /&gt;
&lt;br /&gt;
With Version 2 of EFX file, the set of supported properties exactly matches the set of properties defined in OpenAL EFX for the &amp;quot;EAX Reverb&amp;quot; effect.&lt;br /&gt;
Note that EFX defines several types of effects, including &amp;quot;EAX Reverb&amp;quot;, &amp;quot;Standard Reverb&amp;quot;, &amp;quot;Chorus&amp;quot;, &amp;quot;Distortion&amp;quot;, &amp;quot;Echo&amp;quot;, &amp;quot;Flanger&amp;quot;, etc.&lt;br /&gt;
Only the first one is important, ignore all the rest (including the so-called &amp;quot;Standard Reverb&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
The detailed description of all the properties is given in &amp;quot;Appendix 1 – Effect property descriptions&amp;quot; of the [https://usermanual.wiki/Pdf/Effects20Extension20Guide.90272296/view#95 OpenAL Effects Extension Guide](pages 95-101).&lt;br /&gt;
The short list is also available in a table on [https://usermanual.wiki/Pdf/Effects20Extension20Guide.90272296/view#66 page 66 of the guide]:&lt;br /&gt;
&lt;br /&gt;
[[File:Eaxreverb_properties_screenshot.png|500px]]&lt;br /&gt;
&lt;br /&gt;
The only difference is that the property names in the guide have the &amp;lt;tt&amp;gt;AL_EAXREVERB_&amp;lt;/tt&amp;gt; prefix, while in TDM definitions this prefix is removed.&lt;br /&gt;
&lt;br /&gt;
== Presets (Version 2) ==&lt;br /&gt;
Presets can be set in 2 ways:&lt;br /&gt;
* in the .efx file&lt;br /&gt;
* the efx_preset spawnarg on the location entity for the location where you want to use the effect (since TDM 2.13)&lt;br /&gt;
&lt;br /&gt;
=== File Method ===&lt;br /&gt;
&lt;br /&gt;
There is one special property &amp;lt;tt&amp;gt;PRESET&amp;lt;/tt&amp;gt;, which is not present in the EFX guide.&lt;br /&gt;
This property accepts the name of the preset which you want to use:&lt;br /&gt;
&lt;br /&gt;
 eaxreverb &amp;quot;myclassroom&amp;quot; {&lt;br /&gt;
   preset auditorium&lt;br /&gt;
 }&lt;br /&gt;
 eaxreverb &amp;quot;mycave&amp;quot; {&lt;br /&gt;
   preset cave&lt;br /&gt;
 }&lt;br /&gt;
 eaxreverb &amp;quot;mycorridor&amp;quot; {&lt;br /&gt;
   preset hallway&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
If you specify the preset like this, the values for all the reverb properties will be taken from the specified preset.&lt;br /&gt;
Additionally, you can override values of some properties if you define them manually &#039;&#039;&#039;after&#039;&#039;&#039; defining the preset.&lt;br /&gt;
&lt;br /&gt;
The preset property also accepts index of preset. Don&#039;t use indices for anything except experimentation, since they may change in future.&lt;br /&gt;
&lt;br /&gt;
=== Location Entity Method ===&lt;br /&gt;
On the location entity where you want to use the preset, set the spawnarg &#039;&#039;&#039;efx_preset&#039;&#039;&#039; to the value of the preset.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
efx_preset    CITY_SUBWAY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that both the configuration file and the location entity spawnarg can be used simultaneously.  In case that both are set for a single location, the spawnarg value will take precedence.&lt;br /&gt;
&lt;br /&gt;
=== Preset Values ===&lt;br /&gt;
The presets were taken from OpenAL-Soft implementation which TDM uses.&lt;br /&gt;
Here is the full list of preset names:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;height:350px; overflow:scroll;&amp;quot;&amp;gt;&lt;br /&gt;
GENERIC&lt;br /&gt;
PADDEDCELL&lt;br /&gt;
ROOM&lt;br /&gt;
BATHROOM&lt;br /&gt;
LIVINGROOM&lt;br /&gt;
STONEROOM&lt;br /&gt;
AUDITORIUM&lt;br /&gt;
CONCERTHALL&lt;br /&gt;
CAVE&lt;br /&gt;
ARENA&lt;br /&gt;
HANGAR&lt;br /&gt;
CARPETEDHALLWAY&lt;br /&gt;
HALLWAY&lt;br /&gt;
STONECORRIDOR&lt;br /&gt;
ALLEY&lt;br /&gt;
FOREST&lt;br /&gt;
CITY&lt;br /&gt;
MOUNTAINS&lt;br /&gt;
QUARRY&lt;br /&gt;
PLAIN&lt;br /&gt;
PARKINGLOT&lt;br /&gt;
SEWERPIPE&lt;br /&gt;
UNDERWATER&lt;br /&gt;
DRUGGED&lt;br /&gt;
DIZZY&lt;br /&gt;
PSYCHOTIC&lt;br /&gt;
CASTLE_SMALLROOM&lt;br /&gt;
CASTLE_SHORTPASSAGE&lt;br /&gt;
CASTLE_MEDIUMROOM&lt;br /&gt;
CASTLE_LARGEROOM&lt;br /&gt;
CASTLE_LONGPASSAGE&lt;br /&gt;
CASTLE_HALL&lt;br /&gt;
CASTLE_CUPBOARD&lt;br /&gt;
CASTLE_COURTYARD&lt;br /&gt;
CASTLE_ALCOVE&lt;br /&gt;
FACTORY_SMALLROOM&lt;br /&gt;
FACTORY_SHORTPASSAGE&lt;br /&gt;
FACTORY_MEDIUMROOM&lt;br /&gt;
FACTORY_LARGEROOM&lt;br /&gt;
FACTORY_LONGPASSAGE&lt;br /&gt;
FACTORY_HALL&lt;br /&gt;
FACTORY_CUPBOARD&lt;br /&gt;
FACTORY_COURTYARD&lt;br /&gt;
FACTORY_ALCOVE&lt;br /&gt;
ICEPALACE_SMALLROOM&lt;br /&gt;
ICEPALACE_SHORTPASSAGE&lt;br /&gt;
ICEPALACE_MEDIUMROOM&lt;br /&gt;
ICEPALACE_LARGEROOM&lt;br /&gt;
ICEPALACE_LONGPASSAGE&lt;br /&gt;
ICEPALACE_HALL&lt;br /&gt;
ICEPALACE_CUPBOARD&lt;br /&gt;
ICEPALACE_COURTYARD&lt;br /&gt;
ICEPALACE_ALCOVE&lt;br /&gt;
SPACESTATION_SMALLROOM&lt;br /&gt;
SPACESTATION_SHORTPASSAGE&lt;br /&gt;
SPACESTATION_MEDIUMROOM&lt;br /&gt;
SPACESTATION_LARGEROOM&lt;br /&gt;
SPACESTATION_LONGPASSAGE&lt;br /&gt;
SPACESTATION_HALL&lt;br /&gt;
SPACESTATION_CUPBOARD&lt;br /&gt;
SPACESTATION_ALCOVE&lt;br /&gt;
WOODEN_SMALLROOM&lt;br /&gt;
WOODEN_SHORTPASSAGE&lt;br /&gt;
WOODEN_MEDIUMROOM&lt;br /&gt;
WOODEN_LARGEROOM&lt;br /&gt;
WOODEN_LONGPASSAGE&lt;br /&gt;
WOODEN_HALL&lt;br /&gt;
WOODEN_CUPBOARD&lt;br /&gt;
WOODEN_COURTYARD&lt;br /&gt;
WOODEN_ALCOVE&lt;br /&gt;
SPORT_EMPTYSTADIUM&lt;br /&gt;
SPORT_SQUASHCOURT&lt;br /&gt;
SPORT_SMALLSWIMMINGPOOL&lt;br /&gt;
SPORT_LARGESWIMMINGPOOL&lt;br /&gt;
SPORT_GYMNASIUM&lt;br /&gt;
SPORT_FULLSTADIUM&lt;br /&gt;
SPORT_STADIUMTANNOY&lt;br /&gt;
PREFAB_WORKSHOP&lt;br /&gt;
PREFAB_SCHOOLROOM&lt;br /&gt;
PREFAB_PRACTISEROOM&lt;br /&gt;
PREFAB_OUTHOUSE&lt;br /&gt;
PREFAB_CARAVAN&lt;br /&gt;
DOME_TOMB&lt;br /&gt;
PIPE_SMALL&lt;br /&gt;
DOME_SAINTPAULS&lt;br /&gt;
PIPE_LONGTHIN&lt;br /&gt;
PIPE_LARGE&lt;br /&gt;
PIPE_RESONANT&lt;br /&gt;
OUTDOORS_BACKYARD&lt;br /&gt;
OUTDOORS_ROLLINGPLAINS&lt;br /&gt;
OUTDOORS_DEEPCANYON&lt;br /&gt;
OUTDOORS_CREEK&lt;br /&gt;
OUTDOORS_VALLEY&lt;br /&gt;
MOOD_HEAVEN&lt;br /&gt;
MOOD_HELL&lt;br /&gt;
MOOD_MEMORY&lt;br /&gt;
DRIVING_COMMENTATOR&lt;br /&gt;
DRIVING_PITGARAGE&lt;br /&gt;
DRIVING_INCAR_RACER&lt;br /&gt;
DRIVING_INCAR_SPORTS&lt;br /&gt;
DRIVING_INCAR_LUXURY&lt;br /&gt;
DRIVING_FULLGRANDSTAND&lt;br /&gt;
DRIVING_EMPTYGRANDSTAND&lt;br /&gt;
DRIVING_TUNNEL&lt;br /&gt;
CITY_STREETS&lt;br /&gt;
CITY_SUBWAY&lt;br /&gt;
CITY_MUSEUM&lt;br /&gt;
CITY_LIBRARY&lt;br /&gt;
CITY_UNDERPASS&lt;br /&gt;
CITY_ABANDONED&lt;br /&gt;
DUSTYROOM&lt;br /&gt;
CHAPEL&lt;br /&gt;
SMALLWATERROOM                              &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Their definitions can be seen in [https://github.com/kcat/openal-soft/blob/master/include/AL/efx-presets.h efx-presets.h] from OpenAL-Soft source code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-expandtext=&amp;quot;Show&amp;quot; data-collapsetext=&amp;quot;Hide&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Legacy info (Version 1) ==&lt;br /&gt;
&lt;br /&gt;
This information is from the old official EAX 2.0 documentation, although some properties may have changed in scope and focus from EAX 2.0 to EAX 4.0. One can assume that the properties serve the same general purpose and that each property&#039;s value bounds are approximately the same.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;environment&#039;&#039;&#039; - Unknown. Likely sets the room to one of an unknown number of environment presets.&lt;br /&gt;
* &#039;&#039;&#039;environment size&#039;&#039;&#039; - The Environment Size property sets the apparent size of the surrounding “room.” The value of Environment Size can be considered a characteristic dimension of the room expressed in meters. Scaling Environment Size is equivalent to scaling all dimensions of the room by the same factor. Value type is FLOAT; value range is 1.0 to 100.0, expressed in linear meters.&lt;br /&gt;
* &#039;&#039;&#039;environment diffusion&#039;&#039;&#039; - The Environment Diffusion property controls the echo density in the reverberation decay. Reducing diffusion gives the reverberation a more “grainy” character that is especially noticeable with percussive sound sources. If you set a diffusion value of 0.0, the later reverberation sounds like a succession of distinct echoes. Value type is FLOAT; value range is 0.0 to 1.0, expressed in a linear multiplier value.&lt;br /&gt;
* &#039;&#039;&#039;room&#039;&#039;&#039; - The Room property is the master volume control for the reflected sound (both early reflections and reverberation) that EAX adds to all sound sources. It sets the maximum amount of reflections and reverberation added to the sound mix in the primary buffer (the listener). Value is LONG; value range is -10000 to 0, expressed in hundredths of one decibel (-100 dB to 0 dB).&lt;br /&gt;
* &#039;&#039;&#039;room hf&#039;&#039;&#039; - The Room HF property further tweaks reflected sound by attenuating it at high frequencies. It controls a low-pass filter that applies globally to the reflected sound of all sound sources. The exact qualities of this low-pass filter -- its frequency and its bandwidth (Q) -- are unknown. Value type is LONG; value range is -10000 to 0, expressed in hundredths of one decibel (-100 dB to 0 dB).&lt;br /&gt;
* &#039;&#039;&#039;room lf&#039;&#039;&#039; - Undocumented. Assumably, the Room LF property applies a high-pass to reflected sound in much the same way as Room HF applies low-pass. The value type and range is unknown, but is likely LONG, must be between -10000 and 0 and is expressed in hundredths of one decibel.&lt;br /&gt;
* &#039;&#039;&#039;decay time&#039;&#039;&#039; - The Decay Time property sets the reverberation decay time, or the time in which reverberation is diminished. It ranges from 0.1 (typically a small room with very dead surfaces) to 20.0 (typically a large room with very live surfaces). Value is FLOAT; value range is 0.1 to 20.0, expressed in seconds.&lt;br /&gt;
* &#039;&#039;&#039;decay hf ratio&#039;&#039;&#039; - The Decay HF Ratio property sets the spectral quality of the Decay Time parameter. It is the ratio of high-frequency decay time relative to the time set by Decay Time. The Decay HF Ratio value 1.0 is neutral: the decay time is equal for all frequencies. As Decay HF Ratio increases above 1.0, the high-frequency decay time increases so it’s longer than the decay time at low frequencies. You hear a more brilliant reverberation with a longer decay at high frequencies. As the Decay HF Ratio value decreases below 1.0, the high-frequency decay time decreases so it’s shorter than the decay time of the low frequencies. You hear a more natural reverberation. Value is FLOAT; value range is 0.1 to 20.0, expressed in a linear multiplier variable.&lt;br /&gt;
* &#039;&#039;&#039;decay lf ratio&#039;&#039;&#039; - Undocumented. It&#039;s likely best to leave the value at 1.0, though the value&#039;s type and range is probably the same as the Decay HF Ratio property.&lt;br /&gt;
* &#039;&#039;&#039;reflections&#039;&#039;&#039; - The Reflections property controls the overall amount of initial reflections relative to the Room property. The value of Reflections ranges from a maximum of 10 dB to a minimum of -100 dB (no initial reflections at all), and is corrected by the value of the Room property. The Reflections property does not affect the subsequent reverberation decay. You can increase the amount of initial reflections to simulate a more narrow space or closer walls, especially effective if you associate the initial reflections increase with a reduction in reflections delays by lowering the value of the Reflection Delay property. To simulate open or semi-open environments, you can maintain the amount of early reflections while reducing the value of the Reverb property, which controls later reflections. Value type is LONG; value range is -10000 to 1000, expressed in hundredths of one decibel (-100 dB to -10 dB).&lt;br /&gt;
* &#039;&#039;&#039;reflections delay&#039;&#039;&#039; - The Reflections Delay property is the amount of delay between the arrival time of the direct path from the source to the first reflection from the source. It ranges from 0 to 300 milliseconds. You can reduce or increase Reflections Delay to simulate closer or more distant reflective surfaces—and therefore control the perceived size of the room. Value is FLOAT; value range is 0.0 to 0.3, expressed in seconds (0 to 300 milliseconds).&lt;br /&gt;
* &#039;&#039;&#039;reflections pan&#039;&#039;&#039; - Undocumented. Three values are specified which may correspond to a generic &amp;quot;front&amp;quot;, &amp;quot;side&amp;quot; and &amp;quot;back/rear&amp;quot; configuration to control the directivity of early reflections in a 7.1 surround matrix. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;reverb&#039;&#039;&#039; - The Reverb property controls the overall amount of later reverberation relative to the Room property. (The Room property sets the overall amount of both initial reflections and later reverberation.) The value of Reverb ranges from a maximum of 20 dB to a minimum of -100 dB (no late reverberation at all). Value is LONG; value range is -10000 to 2000, expressed in hundredths of a decibel (-100 dB to 20 dB).&lt;br /&gt;
* &#039;&#039;&#039;reverb delay&#039;&#039;&#039; - The Reverb Delay property defines the begin time of the late reverberation relative to the time of the initial reflection (the first of the early reflections). It ranges from 0 to 100 milliseconds. Reducing or increasing Reverb Delay is useful for simulating a smaller or larger room. Value is FLOAT; value range is 0.0 to 0.1, expressed in seconds (0 to 100 milliseconds).&lt;br /&gt;
* &#039;&#039;&#039;reverb pan&#039;&#039;&#039; - Undocumented. Three values are specified which may correspond to a generic &amp;quot;front&amp;quot;, &amp;quot;side&amp;quot; and &amp;quot;back/rear&amp;quot; configuration to control the directivity of reverberation in a 7.1 surround matrix. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;echo time&#039;&#039;&#039; - Undocumented. Likely controls the decay time of echoes, or late reflections. A value of 0.1 likely presents a natural amount of echo, while increasing the value likely causes a &amp;quot;Grand Canyon&amp;quot; effect. Value type is likely FLOAT; value range is likely between 0.075 and 0.25, expressed in seconds.&lt;br /&gt;
* &#039;&#039;&#039;echo depth&#039;&#039;&#039; - Undocumented. May control directionality or tonal qualities of echoes arriving at the listener. Probably best to leave at 1.0. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;modulation time&#039;&#039;&#039; - Undocumented. Unknown purpose. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;modulation depth&#039;&#039;&#039; - Undocumented. Unknown purpose. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;air absorption hf&#039;&#039;&#039; - The Air Absorption HF property controls the distance-dependent attenuation at high frequencies caused by the propagation medium. It applies to both the direct path and reflected sound. You can use Air Absorption HF to simulate sound transmission through foggy air, dry air, smoky atmosphere, and so on. The default value is -0.05 dB per meter, which roughly corresponds to typical condition of atmospheric humidity, temperature, and so on. Lowering the value simulates a more absorbent medium (more humidity in the air, for example); raising the value simulates a less absorbent medium (dry desert air, for example). Value is FLOAT; value range is -100.0 to 0.0, expressed in hundredths of one decibel per meter (-1 dB to 0 dB). Default value is -5.0, which corresponds to -0.05 dB per meter attenuation.&lt;br /&gt;
* &#039;&#039;&#039;hf reference&#039;&#039;&#039; - Likely defines the frequency used for low-pass filters. Value is likely LONG; value range is likely between 0.0 and 20000.0, expressed in Hz. This value is probably best left at 5000.0.&lt;br /&gt;
* &#039;&#039;&#039;lf reference&#039;&#039;&#039; - Likely defines the frequency used for high-pass filters. Value is likely LONG; value range is likely between 0.0 and 20000.0, expressed in Hz. This value is probably best left at 250.0.&lt;br /&gt;
* &#039;&#039;&#039;room rolloff factor&#039;&#039;&#039; - The Room Rolloff property is one of two methods available in EAX to attenuate the reflected sound (containing both reflections, reverberation and echoes) according to source-listener distance. Value type is FLOAT; value range is 0.0 to 10.0, expressed in a linear multiplier value. It&#039;s recommended that users use 0.0, as id Software did not deviate from this value with Doom 3.&lt;br /&gt;
* &#039;&#039;&#039;flags&#039;&#039;&#039; - The Flags property is intended to control the relationship of high-level EAX properties to low-level properties. If certain EAX flags are set by setting the Flags property to a particular value, the setting of high-level properties is supposed to control the values of low-level properties based upon a defined scale, overriding specified values. In EAX 2.0, the value type is DWORD, whereas in Doom 3, it appears to be INT or some other type commonly used to store numeric values. In Doom 3, common values are 0, 2, 15, 31, 32, 56 and 63, but no documentation details what these values correspond to. If users wish to experiment with the Flags property, it is recommended that they choose from one of the above values. For reference, here is a table with the counts for each flag value as used in Doom 3:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 0.5em; margin-left: 2em; border: 1px solid #a0a0a0; text-align: right; border-collapse: collapse;&amp;quot; cellpadding=&amp;quot;2&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Flag decimal&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Flag binary&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Count&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|00000000&lt;br /&gt;
|497&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|00000010&lt;br /&gt;
|6&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|00001110&lt;br /&gt;
|15&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|00001111&lt;br /&gt;
|94&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|31&lt;br /&gt;
|00011111&lt;br /&gt;
|511&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|32&lt;br /&gt;
|00100000&lt;br /&gt;
|247&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|56&lt;br /&gt;
|00111000&lt;br /&gt;
|59&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|63&lt;br /&gt;
|00111111&lt;br /&gt;
|168&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Design.&#039;&#039;&#039;&lt;br /&gt;
In terms of the actual sound design for the values you put into these variables, here is a general tutorial on reverb from FruityLoops (NOTE: This is for a music production plugin, some of these don&#039;t apply, it&#039;s just to give a general idea on what certain variables do):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Low Cut&#039;&#039;&#039; Adjusts the low cutoff frequency. Use this to remove low frequencies from the input signal before reverb is added. For example, if you are adding reverb to, say a drum track, you might want to remove some of the &#039;rumble&#039; from the bass drum by attenuating the bass frequencies. Setting this parameter to the minimum value will bypass the Low Cut filter, displaying OFF in the value field.&lt;br /&gt;
* &#039;&#039;&#039;High Cut&#039;&#039;&#039; - Similar to the Low Cut, this adjusts the high cutoff frequency. Use this to remove high frequencies from the input signal.&lt;br /&gt;
* &#039;&#039;&#039;Predelay&#039;&#039;&#039; - Controls the delay time between the direct input signal and the first reverb reflection. This should be set to modest values for small rooms, and can be increased in relation to increases in room size. &#039;&#039;&#039;Predelay&#039;&#039;&#039; creates a slap-back echo effect that can both add atmosphere and muffle the signal, so use it wisely.&lt;br /&gt;
* &#039;&#039;&#039;Room Size&#039;&#039;&#039; - Use this to set the size of the virtual room where the reverb is created. The Room Size should be adjusted according to the decay time. Small rooms sound better with a short decay time, large rooms sound better with longer reverb times.&lt;br /&gt;
* &#039;&#039;&#039;Diffusion&#039;&#039;&#039; - Controls the density of the reflections bouncing off the walls of the virtual room. A low diffusion setting makes the reflections sound more distinct, like closely spaced echoes. A high diffusion setting creates reflections so close they sound more like noise, where no echoes can be distinguished.&lt;br /&gt;
* &#039;&#039;&#039;Color&#039;&#039;&#039; - The Color parameter is used for adjusting the decay time of the bass frequencies of the signal. This allows you to change the overall perceived mood or &#039;sound&#039; of the virtual room. A bright room has a low bass response, while warm rooms have a higher bass response. In a flat room, the response of the bass is equal to the general frequency response. Color has five settings: Brighter, Bright, Flat, Warm, Warmer.&lt;br /&gt;
* &#039;&#039;&#039;Decay&#039;&#039;&#039; - Controls the decay time of the reverb, the time it takes for the signal to decay to -60dB (1/1000 of the maximum amplitude). Use low decay times for small rooms or boxes, and long decay times for large rooms, halls or churches. You should also make sure that the Room Size parameter has an appropriate value.&lt;br /&gt;
* &#039;&#039;&#039;High Damping&#039;&#039;&#039; - This parameter allows you to adjust damping of the high frequencies in the reverb signal over time. Damping refers to the high frequencies being attenuated and dying out. This causes the sound to become gradually muffled and warm like it is being absorbed in the room. Setting this parameter to the maximum value will bypass the High Damping, displaying OFF in the value field.&lt;br /&gt;
* &#039;&#039;&#039;Dry&#039;&#039;&#039; - Sets the relative dry output level.&lt;br /&gt;
* &#039;&#039;&#039;Reverb&#039;&#039;&#039; - Sets the relative reverb (wet) signal level.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Error Check=&lt;br /&gt;
If you modified the presets in your EFX file, you can check for errors ingame. Load your map and open the console. Type &#039;&#039;reloadSounds&#039;&#039;, this will trigger the reload of the EFX used in your map and print out the vars which cause an error (like a value exceeding the maximum range). Note that if your EFX files contain errors, this will make the game ignore the EFX settings you chose. &lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
See the &amp;quot;EFX Reverb&amp;quot; column of &#039;&#039;&#039;[[Fan_Missions_for_The_Dark_Mod|Fan Missions page]]&#039;&#039;&#039;. Missions with &amp;quot;Yes&amp;quot; have EFX Reverb. &lt;br /&gt;
&amp;lt;br&amp;gt;Most missions use v2.0 presets but a few missions such as &amp;quot;Volta and the Stone&amp;quot; and Behind Closed Doors use v1.0 settings.&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
The Version 2 definitions were implemented due to [http://bugs.thedarkmod.com/view.php?id=4815 issue 4815], it has some brief explanation.&lt;br /&gt;
&lt;br /&gt;
A tutorial based around EFX can be found [http://forums.thedarkmod.com/topic/19205-getting-started-with-the-efx-room-reverb-system-wip/ here]&lt;br /&gt;
&lt;br /&gt;
An old demonstration map of EAX in TDM is included [http://forums.thedarkmod.com/topic/11045-environmental-audio-extensions-eax-in-tdm/ here]&lt;br /&gt;
&lt;br /&gt;
A discussion about no_efx is [http://forums.thedarkmod.com/topic/19213-efx-discussion here]&lt;br /&gt;
&lt;br /&gt;
The first version of this article was written by Ishtvan [https://forums.thedarkmod.com/index.php?/topic/2071-setting-reverb-data-in-new-soundengine-wiki/ here]&lt;br /&gt;
&lt;br /&gt;
[[Category:Sound]]&lt;br /&gt;
[[Category:Tutorial]]&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=Setting_Reverb_Data_of_Rooms_(EAX)&amp;diff=33802</id>
		<title>Setting Reverb Data of Rooms (EAX)</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=Setting_Reverb_Data_of_Rooms_(EAX)&amp;diff=33802"/>
		<updated>2025-01-11T21:02:31Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: /* Location Entity Method */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
This document will attempt to explain how to set the new EFX settings in your rooms when mapping.&lt;br /&gt;
&lt;br /&gt;
Previously these settings were known as EAX settings, and required EAX 4.0-compatible sound card.&lt;br /&gt;
In TDM 2.06, EAX technology was completely replaced with OpenAL EFX, which is now processed in software (by [https://github.com/kcat/openal-soft openal-soft]) without any requirements on sound card.&lt;br /&gt;
&lt;br /&gt;
= General =&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
&lt;br /&gt;
EFX for a fan mission can be configured with or without a configuration file.  However, fileless configuration is only supported for [[Setting_Reverb_Data_of_Rooms_(EAX)#Presets_(Version_2)|EFX presets]].&lt;br /&gt;
&lt;br /&gt;
== EFX file ==&lt;br /&gt;
The EFX info for a map should be stored in the file &amp;quot;&amp;lt;tt&amp;gt;efxs/&amp;lt;mapname&amp;gt;.efx&amp;lt;/tt&amp;gt;&amp;quot;, where &amp;lt;mapname&amp;gt; is the name of your .map file (without extension).&lt;br /&gt;
&lt;br /&gt;
In order to check that you have put the file into right location, start your mission in game.&lt;br /&gt;
If TDM manages to load your efx file, then you will see the following message in console:&lt;br /&gt;
 sound: found efxs/&amp;lt;mapname&amp;gt;.efx&lt;br /&gt;
If you failed something, then you will see a bit different message there:&lt;br /&gt;
 sound: missing efxs/&amp;lt;mapname&amp;gt;.efx&lt;br /&gt;
In both cases some additional diagnostic messages can be present nearby.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; you must enable &amp;quot;&amp;lt;tt&amp;gt;OpenAL EFX&amp;lt;/tt&amp;gt;&amp;quot; in sound settings in the main menu, otherwise TDM won&#039;t even try to load the efx file.&lt;br /&gt;
&lt;br /&gt;
It is a plain text file, so you can open it up in your text editor of choice.&lt;br /&gt;
&lt;br /&gt;
Any EFX file must start with a header which specifies its &#039;&#039;&#039;version&#039;&#039;&#039;:&lt;br /&gt;
 Version 2&lt;br /&gt;
If you forget this line, then your EFX file will &#039;&#039;&#039;not&#039;&#039;&#039; be loaded.&lt;br /&gt;
The following versions are supported:&lt;br /&gt;
* &amp;lt;tt&amp;gt;Version 1&amp;lt;/tt&amp;gt; was supported by TDM from the very beginning. It uses some non-standard terms and quantities, which makes it hard to work with.&lt;br /&gt;
* &amp;lt;tt&amp;gt;Version 2&amp;lt;/tt&amp;gt; was added in TDM 2.07. It uses the parameters from OpenAL EFX and supports a lot of presets. &#039;&#039;&#039;Recommended for all new missions.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The rest of the file consists of separate blocks, one for each &amp;quot;reverb zone&amp;quot;.&lt;br /&gt;
Each block must start with &amp;lt;tt&amp;gt;reverb&amp;lt;/tt&amp;gt; keyword for Version 1 definitions, and &amp;lt;tt&amp;gt;eaxreverb&amp;lt;/tt&amp;gt; keyword for Version 2 definitions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here is an example of such block from mars_city1.efx of the original Doom 3 game (Version 1):&lt;br /&gt;
&lt;br /&gt;
 // reverb maintenance&lt;br /&gt;
 reverb &amp;quot;maintenance&amp;quot; {&lt;br /&gt;
  &amp;quot;environment&amp;quot; 26&lt;br /&gt;
  &amp;quot;environment size&amp;quot; 5.0670&lt;br /&gt;
  &amp;quot;environment diffusion&amp;quot; 0.6030&lt;br /&gt;
  &amp;quot;room&amp;quot; -411&lt;br /&gt;
  &amp;quot;room hf&amp;quot; -685&lt;br /&gt;
  &amp;quot;room lf&amp;quot; 0&lt;br /&gt;
  &amp;quot;decay time&amp;quot; 1.7360&lt;br /&gt;
  &amp;quot;decay hf ratio&amp;quot; 0.8030&lt;br /&gt;
  &amp;quot;decay lf ratio&amp;quot; 1.0000&lt;br /&gt;
  &amp;quot;reflections&amp;quot; 96&lt;br /&gt;
  &amp;quot;reflections delay&amp;quot; 0.0080&lt;br /&gt;
  &amp;quot;reflections pan&amp;quot; 0.0000 0.0000 0.0000&lt;br /&gt;
  &amp;quot;reverb&amp;quot; 27&lt;br /&gt;
  &amp;quot;reverb delay&amp;quot; 0.0050&lt;br /&gt;
  &amp;quot;reverb pan&amp;quot; 0.0000 0.0000 0.0000&lt;br /&gt;
  &amp;quot;echo time&amp;quot; 0.0750&lt;br /&gt;
  &amp;quot;echo depth&amp;quot; 1.0000&lt;br /&gt;
  &amp;quot;modulation time&amp;quot; 0.2500&lt;br /&gt;
  &amp;quot;modulation depth&amp;quot; 0.0000&lt;br /&gt;
  &amp;quot;air absorption hf&amp;quot; -5.0000&lt;br /&gt;
  &amp;quot;hf reference&amp;quot; 5000.0000&lt;br /&gt;
  &amp;quot;lf reference&amp;quot; 250.0000&lt;br /&gt;
  &amp;quot;room rolloff factor&amp;quot; 0.0000&lt;br /&gt;
  &amp;quot;flags&amp;quot; 56&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And here is an artificial example of Version 2 definitions:&lt;br /&gt;
&lt;br /&gt;
  eaxreverb &amp;quot;myweirdstreets&amp;quot; {&lt;br /&gt;
    reflections_gain 0.5&lt;br /&gt;
    reflections_delay 0.0050&lt;br /&gt;
    late_reverb_gain 2.5&lt;br /&gt;
    late_reverb_delay 0.050&lt;br /&gt;
    echo_time 0.25&lt;br /&gt;
    echo_depth 0.9000&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
What does all this mean? &lt;br /&gt;
&lt;br /&gt;
There is a lot of sound design stuff that one could make guesses at if you&#039;ve ever used a reverb plugin in any sort of sound editing program. hf = high frequency, lf = low frequency, etc.&lt;br /&gt;
&lt;br /&gt;
A proper explanation of the parameters is given below.&lt;br /&gt;
&lt;br /&gt;
== Locations ==&lt;br /&gt;
Each reverb zone definition starts with a line which specifies to which location it must be applied:&lt;br /&gt;
&lt;br /&gt;
 reverb &amp;quot;&amp;lt;name of the location area you want to apply this to&amp;gt;&amp;quot;&lt;br /&gt;
 {&lt;br /&gt;
     //... (settings)&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Information about locations and how to set them up is available in another article: [[Location Settings #The Location Entities]].&lt;br /&gt;
Reverb zones use exactly the same locations as the ones which are used to specify per-area ambient sounds.&lt;br /&gt;
You should name every info_location entity, i.e. provide a &amp;quot;&amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt;&amp;quot; spawnarg for it. This is the name used in reverb zone definitions.&lt;br /&gt;
&lt;br /&gt;
As of TDM 2.06, you can&#039;t use capital letters in the name of your location entity or reverb zone. This may or may not change in the future.&lt;br /&gt;
&lt;br /&gt;
Here is an example of an entity which defines &amp;quot;canal_tunnel&amp;quot; location:&lt;br /&gt;
&lt;br /&gt;
 //======================= from volta_v1.map ====================&lt;br /&gt;
 // entity 3532&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;classname&amp;quot; &amp;quot;info_location&amp;quot;&lt;br /&gt;
   &amp;quot;name&amp;quot; &amp;quot;canal_tunnel&amp;quot;             //this is the name used&lt;br /&gt;
   &amp;quot;ambient&amp;quot; &amp;quot;snd_streets&amp;quot;&lt;br /&gt;
   &amp;quot;ambient_light&amp;quot; &amp;quot;0.04 0.03 0.02&amp;quot;&lt;br /&gt;
   &amp;quot;ambient_light_dynamic&amp;quot; &amp;quot;0.01 0.01 0.01&amp;quot;&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And this is the EFX effect (reverb zone) for it:&lt;br /&gt;
&lt;br /&gt;
 //======================= from volta_v1.efx ====================&lt;br /&gt;
 reverb &amp;quot;canal_tunnel&amp;quot; {             //name put to here&lt;br /&gt;
   &amp;quot;environment&amp;quot; 22&lt;br /&gt;
   &amp;quot;environment size&amp;quot; 1.8000&lt;br /&gt;
   &amp;quot;environment diffusion&amp;quot; 1.0000&lt;br /&gt;
   &amp;quot;room&amp;quot; -1000&lt;br /&gt;
   &amp;quot;room hf&amp;quot; -4000&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
During playing, the engine prints a message whenever the player&#039;s location changes.&lt;br /&gt;
It allows you to check if you have set up locations properly.&lt;br /&gt;
For instance, here are console messages showing a proper EFX location change:&lt;br /&gt;
&lt;br /&gt;
 Switching to EFX &#039;canal_tunnel&#039; (#295)&lt;br /&gt;
 Changed location from &#039;canal_streets&#039; to &#039;canal_tunnel&#039;.&lt;br /&gt;
&lt;br /&gt;
It is also possible to specify portal-area number instead of location name in the reverb zone definition.&lt;br /&gt;
The portal-area number is listed in the .proc file, which is created in the dmap process, in the format of &amp;lt;tt&amp;gt;_area&amp;lt;num&amp;gt;&amp;lt;/tt&amp;gt; (where &amp;lt;num&amp;gt; is the portal area number), e.g. &amp;lt;tt&amp;gt;_area15&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&#039;&#039;&#039;Beware:&#039;&#039;&#039; this functionality exists for fast hacking only! Do not release a mission with portal-area numbers in .efx file!&lt;br /&gt;
The main reason to avoid it is that portal-area numbers are auto-generated, so minor changes in your mission can change all of them.&lt;br /&gt;
&lt;br /&gt;
Finally, there is a &amp;quot;default&amp;quot; reverb environment which is used for any area in the map which does not have reverb information specified.&lt;br /&gt;
&lt;br /&gt;
The order that the sound system checks for reverb data is: area number -&amp;gt; location name -&amp;gt; default.&lt;br /&gt;
&lt;br /&gt;
== Changes during playing ==&lt;br /&gt;
Type &amp;quot;&amp;lt;tt&amp;gt;reloadSounds&amp;lt;/tt&amp;gt;&amp;quot; command into game console in order to reload EFX definitions.&lt;br /&gt;
&lt;br /&gt;
So when you experiment with EFX, execute this command after each tweak to EFX file to hear the difference immediately.&lt;br /&gt;
&lt;br /&gt;
== Suppress effect ==&lt;br /&gt;
Sometimes you want to disable EFX effect on a specific sound.&lt;br /&gt;
A typical example is when you have a voice in player&#039;s head, which must not depend on player&#039;s physical environment.&lt;br /&gt;
Another case is when some sound already has reverb baked in, so you don&#039;t what to double-reverb it. Although the best practice is to use sound samples without embedded reverb, combined with proper EFX definitions.&lt;br /&gt;
&lt;br /&gt;
You can disable all EFX effects on one specific sound shader by adding &amp;quot;&amp;lt;tt&amp;gt;no_efx&amp;lt;/tt&amp;gt;&amp;quot; keyword to its body.&lt;br /&gt;
For instance, here is how non-EFX version of blackjack unsheathing looks like:&lt;br /&gt;
 blackjack_unsheath&lt;br /&gt;
 {&lt;br /&gt;
   description &amp;quot;Made by pakmannen&amp;quot;&lt;br /&gt;
   sound/sfx/tools/melee/blackjack_unsheath.ogg&lt;br /&gt;
   no_efx                       //do NOT apply EFX to this sound&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note that if you change sound shaders, writing &amp;quot;&amp;lt;tt&amp;gt;reloadDecls&amp;lt;/tt&amp;gt;&amp;quot; in TDM game console is enough to reload them.&lt;br /&gt;
&lt;br /&gt;
There are a lot of stock sounds in TDM which should not be affected by EFX effects.&lt;br /&gt;
Starting from TDM 2.07, the corresponding core sounds are marked with &amp;quot;&amp;lt;tt&amp;gt;no_efx&amp;lt;/tt&amp;gt;&amp;quot; keyword (see issue [http://bugs.thedarkmod.com/view.php?id=4688 4688]).&lt;br /&gt;
If you discover any core sound which is affected by EFX while you believe it should not, start a discussion on forums.&lt;br /&gt;
&lt;br /&gt;
=Environment properties=&lt;br /&gt;
&lt;br /&gt;
== New properties (Version 2) ==&lt;br /&gt;
&lt;br /&gt;
With Version 2 of EFX file, the set of supported properties exactly matches the set of properties defined in OpenAL EFX for the &amp;quot;EAX Reverb&amp;quot; effect.&lt;br /&gt;
Note that EFX defines several types of effects, including &amp;quot;EAX Reverb&amp;quot;, &amp;quot;Standard Reverb&amp;quot;, &amp;quot;Chorus&amp;quot;, &amp;quot;Distortion&amp;quot;, &amp;quot;Echo&amp;quot;, &amp;quot;Flanger&amp;quot;, etc.&lt;br /&gt;
Only the first one is important, ignore all the rest (including the so-called &amp;quot;Standard Reverb&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
The detailed description of all the properties is given in &amp;quot;Appendix 1 – Effect property descriptions&amp;quot; of the [https://usermanual.wiki/Pdf/Effects20Extension20Guide.90272296/view#95 OpenAL Effects Extension Guide](pages 95-101).&lt;br /&gt;
The short list is also available in a table on [https://usermanual.wiki/Pdf/Effects20Extension20Guide.90272296/view#66 page 66 of the guide]:&lt;br /&gt;
&lt;br /&gt;
[[File:Eaxreverb_properties_screenshot.png|500px]]&lt;br /&gt;
&lt;br /&gt;
The only difference is that the property names in the guide have the &amp;lt;tt&amp;gt;AL_EAXREVERB_&amp;lt;/tt&amp;gt; prefix, while in TDM definitions this prefix is removed.&lt;br /&gt;
&lt;br /&gt;
== Presets (Version 2) ==&lt;br /&gt;
Presets can be set in 2 ways:&lt;br /&gt;
* in the .efx file&lt;br /&gt;
* the efx_preset spawnarg on the location entity for the location where you want to use the effect (since TDM 2.13)&lt;br /&gt;
&lt;br /&gt;
=== File Method ===&lt;br /&gt;
&lt;br /&gt;
There is one special property &amp;lt;tt&amp;gt;PRESET&amp;lt;/tt&amp;gt;, which is not present in the EFX guide.&lt;br /&gt;
This property accepts the name of the preset which you want to use:&lt;br /&gt;
&lt;br /&gt;
 eaxreverb &amp;quot;myclassroom&amp;quot; {&lt;br /&gt;
   preset auditorium&lt;br /&gt;
 }&lt;br /&gt;
 eaxreverb &amp;quot;mycave&amp;quot; {&lt;br /&gt;
   preset cave&lt;br /&gt;
 }&lt;br /&gt;
 eaxreverb &amp;quot;mycorridor&amp;quot; {&lt;br /&gt;
   preset hallway&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
If you specify the preset like this, the values for all the reverb properties will be taken from the specified preset.&lt;br /&gt;
Additionally, you can override values of some properties if you define them manually &#039;&#039;&#039;after&#039;&#039;&#039; defining the preset.&lt;br /&gt;
&lt;br /&gt;
The preset property also accepts index of preset. Don&#039;t use indices for anything except experimentation, since they may change in future.&lt;br /&gt;
&lt;br /&gt;
=== Location Entity Method ===&lt;br /&gt;
On the location entity where you want to use the preset, set the spawnarg &amp;lt;pre&amp;gt;efx_preset&amp;lt;/pre&amp;gt; to the value of the preset.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
efx_preset    CITY_SUBWAY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that both the configuration file and the location entity spawnarg can be used simultaneously.  In case that both are set for a single location, the spawnarg value will take precedence.&lt;br /&gt;
&lt;br /&gt;
=== Preset Values ===&lt;br /&gt;
The presets were taken from OpenAL-Soft implementation which TDM uses.&lt;br /&gt;
Here is the full list of preset names:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;height:350px; overflow:scroll;&amp;quot;&amp;gt;&lt;br /&gt;
GENERIC&lt;br /&gt;
PADDEDCELL&lt;br /&gt;
ROOM&lt;br /&gt;
BATHROOM&lt;br /&gt;
LIVINGROOM&lt;br /&gt;
STONEROOM&lt;br /&gt;
AUDITORIUM&lt;br /&gt;
CONCERTHALL&lt;br /&gt;
CAVE&lt;br /&gt;
ARENA&lt;br /&gt;
HANGAR&lt;br /&gt;
CARPETEDHALLWAY&lt;br /&gt;
HALLWAY&lt;br /&gt;
STONECORRIDOR&lt;br /&gt;
ALLEY&lt;br /&gt;
FOREST&lt;br /&gt;
CITY&lt;br /&gt;
MOUNTAINS&lt;br /&gt;
QUARRY&lt;br /&gt;
PLAIN&lt;br /&gt;
PARKINGLOT&lt;br /&gt;
SEWERPIPE&lt;br /&gt;
UNDERWATER&lt;br /&gt;
DRUGGED&lt;br /&gt;
DIZZY&lt;br /&gt;
PSYCHOTIC&lt;br /&gt;
CASTLE_SMALLROOM&lt;br /&gt;
CASTLE_SHORTPASSAGE&lt;br /&gt;
CASTLE_MEDIUMROOM&lt;br /&gt;
CASTLE_LARGEROOM&lt;br /&gt;
CASTLE_LONGPASSAGE&lt;br /&gt;
CASTLE_HALL&lt;br /&gt;
CASTLE_CUPBOARD&lt;br /&gt;
CASTLE_COURTYARD&lt;br /&gt;
CASTLE_ALCOVE&lt;br /&gt;
FACTORY_SMALLROOM&lt;br /&gt;
FACTORY_SHORTPASSAGE&lt;br /&gt;
FACTORY_MEDIUMROOM&lt;br /&gt;
FACTORY_LARGEROOM&lt;br /&gt;
FACTORY_LONGPASSAGE&lt;br /&gt;
FACTORY_HALL&lt;br /&gt;
FACTORY_CUPBOARD&lt;br /&gt;
FACTORY_COURTYARD&lt;br /&gt;
FACTORY_ALCOVE&lt;br /&gt;
ICEPALACE_SMALLROOM&lt;br /&gt;
ICEPALACE_SHORTPASSAGE&lt;br /&gt;
ICEPALACE_MEDIUMROOM&lt;br /&gt;
ICEPALACE_LARGEROOM&lt;br /&gt;
ICEPALACE_LONGPASSAGE&lt;br /&gt;
ICEPALACE_HALL&lt;br /&gt;
ICEPALACE_CUPBOARD&lt;br /&gt;
ICEPALACE_COURTYARD&lt;br /&gt;
ICEPALACE_ALCOVE&lt;br /&gt;
SPACESTATION_SMALLROOM&lt;br /&gt;
SPACESTATION_SHORTPASSAGE&lt;br /&gt;
SPACESTATION_MEDIUMROOM&lt;br /&gt;
SPACESTATION_LARGEROOM&lt;br /&gt;
SPACESTATION_LONGPASSAGE&lt;br /&gt;
SPACESTATION_HALL&lt;br /&gt;
SPACESTATION_CUPBOARD&lt;br /&gt;
SPACESTATION_ALCOVE&lt;br /&gt;
WOODEN_SMALLROOM&lt;br /&gt;
WOODEN_SHORTPASSAGE&lt;br /&gt;
WOODEN_MEDIUMROOM&lt;br /&gt;
WOODEN_LARGEROOM&lt;br /&gt;
WOODEN_LONGPASSAGE&lt;br /&gt;
WOODEN_HALL&lt;br /&gt;
WOODEN_CUPBOARD&lt;br /&gt;
WOODEN_COURTYARD&lt;br /&gt;
WOODEN_ALCOVE&lt;br /&gt;
SPORT_EMPTYSTADIUM&lt;br /&gt;
SPORT_SQUASHCOURT&lt;br /&gt;
SPORT_SMALLSWIMMINGPOOL&lt;br /&gt;
SPORT_LARGESWIMMINGPOOL&lt;br /&gt;
SPORT_GYMNASIUM&lt;br /&gt;
SPORT_FULLSTADIUM&lt;br /&gt;
SPORT_STADIUMTANNOY&lt;br /&gt;
PREFAB_WORKSHOP&lt;br /&gt;
PREFAB_SCHOOLROOM&lt;br /&gt;
PREFAB_PRACTISEROOM&lt;br /&gt;
PREFAB_OUTHOUSE&lt;br /&gt;
PREFAB_CARAVAN&lt;br /&gt;
DOME_TOMB&lt;br /&gt;
PIPE_SMALL&lt;br /&gt;
DOME_SAINTPAULS&lt;br /&gt;
PIPE_LONGTHIN&lt;br /&gt;
PIPE_LARGE&lt;br /&gt;
PIPE_RESONANT&lt;br /&gt;
OUTDOORS_BACKYARD&lt;br /&gt;
OUTDOORS_ROLLINGPLAINS&lt;br /&gt;
OUTDOORS_DEEPCANYON&lt;br /&gt;
OUTDOORS_CREEK&lt;br /&gt;
OUTDOORS_VALLEY&lt;br /&gt;
MOOD_HEAVEN&lt;br /&gt;
MOOD_HELL&lt;br /&gt;
MOOD_MEMORY&lt;br /&gt;
DRIVING_COMMENTATOR&lt;br /&gt;
DRIVING_PITGARAGE&lt;br /&gt;
DRIVING_INCAR_RACER&lt;br /&gt;
DRIVING_INCAR_SPORTS&lt;br /&gt;
DRIVING_INCAR_LUXURY&lt;br /&gt;
DRIVING_FULLGRANDSTAND&lt;br /&gt;
DRIVING_EMPTYGRANDSTAND&lt;br /&gt;
DRIVING_TUNNEL&lt;br /&gt;
CITY_STREETS&lt;br /&gt;
CITY_SUBWAY&lt;br /&gt;
CITY_MUSEUM&lt;br /&gt;
CITY_LIBRARY&lt;br /&gt;
CITY_UNDERPASS&lt;br /&gt;
CITY_ABANDONED&lt;br /&gt;
DUSTYROOM&lt;br /&gt;
CHAPEL&lt;br /&gt;
SMALLWATERROOM                              &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Their definitions can be seen in [https://github.com/kcat/openal-soft/blob/master/include/AL/efx-presets.h efx-presets.h] from OpenAL-Soft source code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-expandtext=&amp;quot;Show&amp;quot; data-collapsetext=&amp;quot;Hide&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Legacy info (Version 1) ==&lt;br /&gt;
&lt;br /&gt;
This information is from the old official EAX 2.0 documentation, although some properties may have changed in scope and focus from EAX 2.0 to EAX 4.0. One can assume that the properties serve the same general purpose and that each property&#039;s value bounds are approximately the same.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;environment&#039;&#039;&#039; - Unknown. Likely sets the room to one of an unknown number of environment presets.&lt;br /&gt;
* &#039;&#039;&#039;environment size&#039;&#039;&#039; - The Environment Size property sets the apparent size of the surrounding “room.” The value of Environment Size can be considered a characteristic dimension of the room expressed in meters. Scaling Environment Size is equivalent to scaling all dimensions of the room by the same factor. Value type is FLOAT; value range is 1.0 to 100.0, expressed in linear meters.&lt;br /&gt;
* &#039;&#039;&#039;environment diffusion&#039;&#039;&#039; - The Environment Diffusion property controls the echo density in the reverberation decay. Reducing diffusion gives the reverberation a more “grainy” character that is especially noticeable with percussive sound sources. If you set a diffusion value of 0.0, the later reverberation sounds like a succession of distinct echoes. Value type is FLOAT; value range is 0.0 to 1.0, expressed in a linear multiplier value.&lt;br /&gt;
* &#039;&#039;&#039;room&#039;&#039;&#039; - The Room property is the master volume control for the reflected sound (both early reflections and reverberation) that EAX adds to all sound sources. It sets the maximum amount of reflections and reverberation added to the sound mix in the primary buffer (the listener). Value is LONG; value range is -10000 to 0, expressed in hundredths of one decibel (-100 dB to 0 dB).&lt;br /&gt;
* &#039;&#039;&#039;room hf&#039;&#039;&#039; - The Room HF property further tweaks reflected sound by attenuating it at high frequencies. It controls a low-pass filter that applies globally to the reflected sound of all sound sources. The exact qualities of this low-pass filter -- its frequency and its bandwidth (Q) -- are unknown. Value type is LONG; value range is -10000 to 0, expressed in hundredths of one decibel (-100 dB to 0 dB).&lt;br /&gt;
* &#039;&#039;&#039;room lf&#039;&#039;&#039; - Undocumented. Assumably, the Room LF property applies a high-pass to reflected sound in much the same way as Room HF applies low-pass. The value type and range is unknown, but is likely LONG, must be between -10000 and 0 and is expressed in hundredths of one decibel.&lt;br /&gt;
* &#039;&#039;&#039;decay time&#039;&#039;&#039; - The Decay Time property sets the reverberation decay time, or the time in which reverberation is diminished. It ranges from 0.1 (typically a small room with very dead surfaces) to 20.0 (typically a large room with very live surfaces). Value is FLOAT; value range is 0.1 to 20.0, expressed in seconds.&lt;br /&gt;
* &#039;&#039;&#039;decay hf ratio&#039;&#039;&#039; - The Decay HF Ratio property sets the spectral quality of the Decay Time parameter. It is the ratio of high-frequency decay time relative to the time set by Decay Time. The Decay HF Ratio value 1.0 is neutral: the decay time is equal for all frequencies. As Decay HF Ratio increases above 1.0, the high-frequency decay time increases so it’s longer than the decay time at low frequencies. You hear a more brilliant reverberation with a longer decay at high frequencies. As the Decay HF Ratio value decreases below 1.0, the high-frequency decay time decreases so it’s shorter than the decay time of the low frequencies. You hear a more natural reverberation. Value is FLOAT; value range is 0.1 to 20.0, expressed in a linear multiplier variable.&lt;br /&gt;
* &#039;&#039;&#039;decay lf ratio&#039;&#039;&#039; - Undocumented. It&#039;s likely best to leave the value at 1.0, though the value&#039;s type and range is probably the same as the Decay HF Ratio property.&lt;br /&gt;
* &#039;&#039;&#039;reflections&#039;&#039;&#039; - The Reflections property controls the overall amount of initial reflections relative to the Room property. The value of Reflections ranges from a maximum of 10 dB to a minimum of -100 dB (no initial reflections at all), and is corrected by the value of the Room property. The Reflections property does not affect the subsequent reverberation decay. You can increase the amount of initial reflections to simulate a more narrow space or closer walls, especially effective if you associate the initial reflections increase with a reduction in reflections delays by lowering the value of the Reflection Delay property. To simulate open or semi-open environments, you can maintain the amount of early reflections while reducing the value of the Reverb property, which controls later reflections. Value type is LONG; value range is -10000 to 1000, expressed in hundredths of one decibel (-100 dB to -10 dB).&lt;br /&gt;
* &#039;&#039;&#039;reflections delay&#039;&#039;&#039; - The Reflections Delay property is the amount of delay between the arrival time of the direct path from the source to the first reflection from the source. It ranges from 0 to 300 milliseconds. You can reduce or increase Reflections Delay to simulate closer or more distant reflective surfaces—and therefore control the perceived size of the room. Value is FLOAT; value range is 0.0 to 0.3, expressed in seconds (0 to 300 milliseconds).&lt;br /&gt;
* &#039;&#039;&#039;reflections pan&#039;&#039;&#039; - Undocumented. Three values are specified which may correspond to a generic &amp;quot;front&amp;quot;, &amp;quot;side&amp;quot; and &amp;quot;back/rear&amp;quot; configuration to control the directivity of early reflections in a 7.1 surround matrix. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;reverb&#039;&#039;&#039; - The Reverb property controls the overall amount of later reverberation relative to the Room property. (The Room property sets the overall amount of both initial reflections and later reverberation.) The value of Reverb ranges from a maximum of 20 dB to a minimum of -100 dB (no late reverberation at all). Value is LONG; value range is -10000 to 2000, expressed in hundredths of a decibel (-100 dB to 20 dB).&lt;br /&gt;
* &#039;&#039;&#039;reverb delay&#039;&#039;&#039; - The Reverb Delay property defines the begin time of the late reverberation relative to the time of the initial reflection (the first of the early reflections). It ranges from 0 to 100 milliseconds. Reducing or increasing Reverb Delay is useful for simulating a smaller or larger room. Value is FLOAT; value range is 0.0 to 0.1, expressed in seconds (0 to 100 milliseconds).&lt;br /&gt;
* &#039;&#039;&#039;reverb pan&#039;&#039;&#039; - Undocumented. Three values are specified which may correspond to a generic &amp;quot;front&amp;quot;, &amp;quot;side&amp;quot; and &amp;quot;back/rear&amp;quot; configuration to control the directivity of reverberation in a 7.1 surround matrix. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;echo time&#039;&#039;&#039; - Undocumented. Likely controls the decay time of echoes, or late reflections. A value of 0.1 likely presents a natural amount of echo, while increasing the value likely causes a &amp;quot;Grand Canyon&amp;quot; effect. Value type is likely FLOAT; value range is likely between 0.075 and 0.25, expressed in seconds.&lt;br /&gt;
* &#039;&#039;&#039;echo depth&#039;&#039;&#039; - Undocumented. May control directionality or tonal qualities of echoes arriving at the listener. Probably best to leave at 1.0. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;modulation time&#039;&#039;&#039; - Undocumented. Unknown purpose. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;modulation depth&#039;&#039;&#039; - Undocumented. Unknown purpose. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;air absorption hf&#039;&#039;&#039; - The Air Absorption HF property controls the distance-dependent attenuation at high frequencies caused by the propagation medium. It applies to both the direct path and reflected sound. You can use Air Absorption HF to simulate sound transmission through foggy air, dry air, smoky atmosphere, and so on. The default value is -0.05 dB per meter, which roughly corresponds to typical condition of atmospheric humidity, temperature, and so on. Lowering the value simulates a more absorbent medium (more humidity in the air, for example); raising the value simulates a less absorbent medium (dry desert air, for example). Value is FLOAT; value range is -100.0 to 0.0, expressed in hundredths of one decibel per meter (-1 dB to 0 dB). Default value is -5.0, which corresponds to -0.05 dB per meter attenuation.&lt;br /&gt;
* &#039;&#039;&#039;hf reference&#039;&#039;&#039; - Likely defines the frequency used for low-pass filters. Value is likely LONG; value range is likely between 0.0 and 20000.0, expressed in Hz. This value is probably best left at 5000.0.&lt;br /&gt;
* &#039;&#039;&#039;lf reference&#039;&#039;&#039; - Likely defines the frequency used for high-pass filters. Value is likely LONG; value range is likely between 0.0 and 20000.0, expressed in Hz. This value is probably best left at 250.0.&lt;br /&gt;
* &#039;&#039;&#039;room rolloff factor&#039;&#039;&#039; - The Room Rolloff property is one of two methods available in EAX to attenuate the reflected sound (containing both reflections, reverberation and echoes) according to source-listener distance. Value type is FLOAT; value range is 0.0 to 10.0, expressed in a linear multiplier value. It&#039;s recommended that users use 0.0, as id Software did not deviate from this value with Doom 3.&lt;br /&gt;
* &#039;&#039;&#039;flags&#039;&#039;&#039; - The Flags property is intended to control the relationship of high-level EAX properties to low-level properties. If certain EAX flags are set by setting the Flags property to a particular value, the setting of high-level properties is supposed to control the values of low-level properties based upon a defined scale, overriding specified values. In EAX 2.0, the value type is DWORD, whereas in Doom 3, it appears to be INT or some other type commonly used to store numeric values. In Doom 3, common values are 0, 2, 15, 31, 32, 56 and 63, but no documentation details what these values correspond to. If users wish to experiment with the Flags property, it is recommended that they choose from one of the above values. For reference, here is a table with the counts for each flag value as used in Doom 3:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 0.5em; margin-left: 2em; border: 1px solid #a0a0a0; text-align: right; border-collapse: collapse;&amp;quot; cellpadding=&amp;quot;2&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Flag decimal&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Flag binary&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Count&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|00000000&lt;br /&gt;
|497&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|00000010&lt;br /&gt;
|6&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|00001110&lt;br /&gt;
|15&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|00001111&lt;br /&gt;
|94&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|31&lt;br /&gt;
|00011111&lt;br /&gt;
|511&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|32&lt;br /&gt;
|00100000&lt;br /&gt;
|247&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|56&lt;br /&gt;
|00111000&lt;br /&gt;
|59&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|63&lt;br /&gt;
|00111111&lt;br /&gt;
|168&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Design.&#039;&#039;&#039;&lt;br /&gt;
In terms of the actual sound design for the values you put into these variables, here is a general tutorial on reverb from FruityLoops (NOTE: This is for a music production plugin, some of these don&#039;t apply, it&#039;s just to give a general idea on what certain variables do):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Low Cut&#039;&#039;&#039; Adjusts the low cutoff frequency. Use this to remove low frequencies from the input signal before reverb is added. For example, if you are adding reverb to, say a drum track, you might want to remove some of the &#039;rumble&#039; from the bass drum by attenuating the bass frequencies. Setting this parameter to the minimum value will bypass the Low Cut filter, displaying OFF in the value field.&lt;br /&gt;
* &#039;&#039;&#039;High Cut&#039;&#039;&#039; - Similar to the Low Cut, this adjusts the high cutoff frequency. Use this to remove high frequencies from the input signal.&lt;br /&gt;
* &#039;&#039;&#039;Predelay&#039;&#039;&#039; - Controls the delay time between the direct input signal and the first reverb reflection. This should be set to modest values for small rooms, and can be increased in relation to increases in room size. &#039;&#039;&#039;Predelay&#039;&#039;&#039; creates a slap-back echo effect that can both add atmosphere and muffle the signal, so use it wisely.&lt;br /&gt;
* &#039;&#039;&#039;Room Size&#039;&#039;&#039; - Use this to set the size of the virtual room where the reverb is created. The Room Size should be adjusted according to the decay time. Small rooms sound better with a short decay time, large rooms sound better with longer reverb times.&lt;br /&gt;
* &#039;&#039;&#039;Diffusion&#039;&#039;&#039; - Controls the density of the reflections bouncing off the walls of the virtual room. A low diffusion setting makes the reflections sound more distinct, like closely spaced echoes. A high diffusion setting creates reflections so close they sound more like noise, where no echoes can be distinguished.&lt;br /&gt;
* &#039;&#039;&#039;Color&#039;&#039;&#039; - The Color parameter is used for adjusting the decay time of the bass frequencies of the signal. This allows you to change the overall perceived mood or &#039;sound&#039; of the virtual room. A bright room has a low bass response, while warm rooms have a higher bass response. In a flat room, the response of the bass is equal to the general frequency response. Color has five settings: Brighter, Bright, Flat, Warm, Warmer.&lt;br /&gt;
* &#039;&#039;&#039;Decay&#039;&#039;&#039; - Controls the decay time of the reverb, the time it takes for the signal to decay to -60dB (1/1000 of the maximum amplitude). Use low decay times for small rooms or boxes, and long decay times for large rooms, halls or churches. You should also make sure that the Room Size parameter has an appropriate value.&lt;br /&gt;
* &#039;&#039;&#039;High Damping&#039;&#039;&#039; - This parameter allows you to adjust damping of the high frequencies in the reverb signal over time. Damping refers to the high frequencies being attenuated and dying out. This causes the sound to become gradually muffled and warm like it is being absorbed in the room. Setting this parameter to the maximum value will bypass the High Damping, displaying OFF in the value field.&lt;br /&gt;
* &#039;&#039;&#039;Dry&#039;&#039;&#039; - Sets the relative dry output level.&lt;br /&gt;
* &#039;&#039;&#039;Reverb&#039;&#039;&#039; - Sets the relative reverb (wet) signal level.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Error Check=&lt;br /&gt;
If you modified the presets in your EFX file, you can check for errors ingame. Load your map and open the console. Type &#039;&#039;reloadSounds&#039;&#039;, this will trigger the reload of the EFX used in your map and print out the vars which cause an error (like a value exceeding the maximum range). Note that if your EFX files contain errors, this will make the game ignore the EFX settings you chose. &lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
See the &amp;quot;EFX Reverb&amp;quot; column of &#039;&#039;&#039;[[Fan_Missions_for_The_Dark_Mod|Fan Missions page]]&#039;&#039;&#039;. Missions with &amp;quot;Yes&amp;quot; have EFX Reverb. &lt;br /&gt;
&amp;lt;br&amp;gt;Most missions use v2.0 presets but a few missions such as &amp;quot;Volta and the Stone&amp;quot; and Behind Closed Doors use v1.0 settings.&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
The Version 2 definitions were implemented due to [http://bugs.thedarkmod.com/view.php?id=4815 issue 4815], it has some brief explanation.&lt;br /&gt;
&lt;br /&gt;
A tutorial based around EFX can be found [http://forums.thedarkmod.com/topic/19205-getting-started-with-the-efx-room-reverb-system-wip/ here]&lt;br /&gt;
&lt;br /&gt;
An old demonstration map of EAX in TDM is included [http://forums.thedarkmod.com/topic/11045-environmental-audio-extensions-eax-in-tdm/ here]&lt;br /&gt;
&lt;br /&gt;
A discussion about no_efx is [http://forums.thedarkmod.com/topic/19213-efx-discussion here]&lt;br /&gt;
&lt;br /&gt;
The first version of this article was written by Ishtvan [https://forums.thedarkmod.com/index.php?/topic/2071-setting-reverb-data-in-new-soundengine-wiki/ here]&lt;br /&gt;
&lt;br /&gt;
[[Category:Sound]]&lt;br /&gt;
[[Category:Tutorial]]&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=Setting_Reverb_Data_of_Rooms_(EAX)&amp;diff=33801</id>
		<title>Setting Reverb Data of Rooms (EAX)</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=Setting_Reverb_Data_of_Rooms_(EAX)&amp;diff=33801"/>
		<updated>2025-01-11T21:02:05Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: /* Location Entity Method */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
This document will attempt to explain how to set the new EFX settings in your rooms when mapping.&lt;br /&gt;
&lt;br /&gt;
Previously these settings were known as EAX settings, and required EAX 4.0-compatible sound card.&lt;br /&gt;
In TDM 2.06, EAX technology was completely replaced with OpenAL EFX, which is now processed in software (by [https://github.com/kcat/openal-soft openal-soft]) without any requirements on sound card.&lt;br /&gt;
&lt;br /&gt;
= General =&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
&lt;br /&gt;
EFX for a fan mission can be configured with or without a configuration file.  However, fileless configuration is only supported for [[Setting_Reverb_Data_of_Rooms_(EAX)#Presets_(Version_2)|EFX presets]].&lt;br /&gt;
&lt;br /&gt;
== EFX file ==&lt;br /&gt;
The EFX info for a map should be stored in the file &amp;quot;&amp;lt;tt&amp;gt;efxs/&amp;lt;mapname&amp;gt;.efx&amp;lt;/tt&amp;gt;&amp;quot;, where &amp;lt;mapname&amp;gt; is the name of your .map file (without extension).&lt;br /&gt;
&lt;br /&gt;
In order to check that you have put the file into right location, start your mission in game.&lt;br /&gt;
If TDM manages to load your efx file, then you will see the following message in console:&lt;br /&gt;
 sound: found efxs/&amp;lt;mapname&amp;gt;.efx&lt;br /&gt;
If you failed something, then you will see a bit different message there:&lt;br /&gt;
 sound: missing efxs/&amp;lt;mapname&amp;gt;.efx&lt;br /&gt;
In both cases some additional diagnostic messages can be present nearby.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; you must enable &amp;quot;&amp;lt;tt&amp;gt;OpenAL EFX&amp;lt;/tt&amp;gt;&amp;quot; in sound settings in the main menu, otherwise TDM won&#039;t even try to load the efx file.&lt;br /&gt;
&lt;br /&gt;
It is a plain text file, so you can open it up in your text editor of choice.&lt;br /&gt;
&lt;br /&gt;
Any EFX file must start with a header which specifies its &#039;&#039;&#039;version&#039;&#039;&#039;:&lt;br /&gt;
 Version 2&lt;br /&gt;
If you forget this line, then your EFX file will &#039;&#039;&#039;not&#039;&#039;&#039; be loaded.&lt;br /&gt;
The following versions are supported:&lt;br /&gt;
* &amp;lt;tt&amp;gt;Version 1&amp;lt;/tt&amp;gt; was supported by TDM from the very beginning. It uses some non-standard terms and quantities, which makes it hard to work with.&lt;br /&gt;
* &amp;lt;tt&amp;gt;Version 2&amp;lt;/tt&amp;gt; was added in TDM 2.07. It uses the parameters from OpenAL EFX and supports a lot of presets. &#039;&#039;&#039;Recommended for all new missions.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The rest of the file consists of separate blocks, one for each &amp;quot;reverb zone&amp;quot;.&lt;br /&gt;
Each block must start with &amp;lt;tt&amp;gt;reverb&amp;lt;/tt&amp;gt; keyword for Version 1 definitions, and &amp;lt;tt&amp;gt;eaxreverb&amp;lt;/tt&amp;gt; keyword for Version 2 definitions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here is an example of such block from mars_city1.efx of the original Doom 3 game (Version 1):&lt;br /&gt;
&lt;br /&gt;
 // reverb maintenance&lt;br /&gt;
 reverb &amp;quot;maintenance&amp;quot; {&lt;br /&gt;
  &amp;quot;environment&amp;quot; 26&lt;br /&gt;
  &amp;quot;environment size&amp;quot; 5.0670&lt;br /&gt;
  &amp;quot;environment diffusion&amp;quot; 0.6030&lt;br /&gt;
  &amp;quot;room&amp;quot; -411&lt;br /&gt;
  &amp;quot;room hf&amp;quot; -685&lt;br /&gt;
  &amp;quot;room lf&amp;quot; 0&lt;br /&gt;
  &amp;quot;decay time&amp;quot; 1.7360&lt;br /&gt;
  &amp;quot;decay hf ratio&amp;quot; 0.8030&lt;br /&gt;
  &amp;quot;decay lf ratio&amp;quot; 1.0000&lt;br /&gt;
  &amp;quot;reflections&amp;quot; 96&lt;br /&gt;
  &amp;quot;reflections delay&amp;quot; 0.0080&lt;br /&gt;
  &amp;quot;reflections pan&amp;quot; 0.0000 0.0000 0.0000&lt;br /&gt;
  &amp;quot;reverb&amp;quot; 27&lt;br /&gt;
  &amp;quot;reverb delay&amp;quot; 0.0050&lt;br /&gt;
  &amp;quot;reverb pan&amp;quot; 0.0000 0.0000 0.0000&lt;br /&gt;
  &amp;quot;echo time&amp;quot; 0.0750&lt;br /&gt;
  &amp;quot;echo depth&amp;quot; 1.0000&lt;br /&gt;
  &amp;quot;modulation time&amp;quot; 0.2500&lt;br /&gt;
  &amp;quot;modulation depth&amp;quot; 0.0000&lt;br /&gt;
  &amp;quot;air absorption hf&amp;quot; -5.0000&lt;br /&gt;
  &amp;quot;hf reference&amp;quot; 5000.0000&lt;br /&gt;
  &amp;quot;lf reference&amp;quot; 250.0000&lt;br /&gt;
  &amp;quot;room rolloff factor&amp;quot; 0.0000&lt;br /&gt;
  &amp;quot;flags&amp;quot; 56&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And here is an artificial example of Version 2 definitions:&lt;br /&gt;
&lt;br /&gt;
  eaxreverb &amp;quot;myweirdstreets&amp;quot; {&lt;br /&gt;
    reflections_gain 0.5&lt;br /&gt;
    reflections_delay 0.0050&lt;br /&gt;
    late_reverb_gain 2.5&lt;br /&gt;
    late_reverb_delay 0.050&lt;br /&gt;
    echo_time 0.25&lt;br /&gt;
    echo_depth 0.9000&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
What does all this mean? &lt;br /&gt;
&lt;br /&gt;
There is a lot of sound design stuff that one could make guesses at if you&#039;ve ever used a reverb plugin in any sort of sound editing program. hf = high frequency, lf = low frequency, etc.&lt;br /&gt;
&lt;br /&gt;
A proper explanation of the parameters is given below.&lt;br /&gt;
&lt;br /&gt;
== Locations ==&lt;br /&gt;
Each reverb zone definition starts with a line which specifies to which location it must be applied:&lt;br /&gt;
&lt;br /&gt;
 reverb &amp;quot;&amp;lt;name of the location area you want to apply this to&amp;gt;&amp;quot;&lt;br /&gt;
 {&lt;br /&gt;
     //... (settings)&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Information about locations and how to set them up is available in another article: [[Location Settings #The Location Entities]].&lt;br /&gt;
Reverb zones use exactly the same locations as the ones which are used to specify per-area ambient sounds.&lt;br /&gt;
You should name every info_location entity, i.e. provide a &amp;quot;&amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt;&amp;quot; spawnarg for it. This is the name used in reverb zone definitions.&lt;br /&gt;
&lt;br /&gt;
As of TDM 2.06, you can&#039;t use capital letters in the name of your location entity or reverb zone. This may or may not change in the future.&lt;br /&gt;
&lt;br /&gt;
Here is an example of an entity which defines &amp;quot;canal_tunnel&amp;quot; location:&lt;br /&gt;
&lt;br /&gt;
 //======================= from volta_v1.map ====================&lt;br /&gt;
 // entity 3532&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;classname&amp;quot; &amp;quot;info_location&amp;quot;&lt;br /&gt;
   &amp;quot;name&amp;quot; &amp;quot;canal_tunnel&amp;quot;             //this is the name used&lt;br /&gt;
   &amp;quot;ambient&amp;quot; &amp;quot;snd_streets&amp;quot;&lt;br /&gt;
   &amp;quot;ambient_light&amp;quot; &amp;quot;0.04 0.03 0.02&amp;quot;&lt;br /&gt;
   &amp;quot;ambient_light_dynamic&amp;quot; &amp;quot;0.01 0.01 0.01&amp;quot;&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And this is the EFX effect (reverb zone) for it:&lt;br /&gt;
&lt;br /&gt;
 //======================= from volta_v1.efx ====================&lt;br /&gt;
 reverb &amp;quot;canal_tunnel&amp;quot; {             //name put to here&lt;br /&gt;
   &amp;quot;environment&amp;quot; 22&lt;br /&gt;
   &amp;quot;environment size&amp;quot; 1.8000&lt;br /&gt;
   &amp;quot;environment diffusion&amp;quot; 1.0000&lt;br /&gt;
   &amp;quot;room&amp;quot; -1000&lt;br /&gt;
   &amp;quot;room hf&amp;quot; -4000&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
During playing, the engine prints a message whenever the player&#039;s location changes.&lt;br /&gt;
It allows you to check if you have set up locations properly.&lt;br /&gt;
For instance, here are console messages showing a proper EFX location change:&lt;br /&gt;
&lt;br /&gt;
 Switching to EFX &#039;canal_tunnel&#039; (#295)&lt;br /&gt;
 Changed location from &#039;canal_streets&#039; to &#039;canal_tunnel&#039;.&lt;br /&gt;
&lt;br /&gt;
It is also possible to specify portal-area number instead of location name in the reverb zone definition.&lt;br /&gt;
The portal-area number is listed in the .proc file, which is created in the dmap process, in the format of &amp;lt;tt&amp;gt;_area&amp;lt;num&amp;gt;&amp;lt;/tt&amp;gt; (where &amp;lt;num&amp;gt; is the portal area number), e.g. &amp;lt;tt&amp;gt;_area15&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&#039;&#039;&#039;Beware:&#039;&#039;&#039; this functionality exists for fast hacking only! Do not release a mission with portal-area numbers in .efx file!&lt;br /&gt;
The main reason to avoid it is that portal-area numbers are auto-generated, so minor changes in your mission can change all of them.&lt;br /&gt;
&lt;br /&gt;
Finally, there is a &amp;quot;default&amp;quot; reverb environment which is used for any area in the map which does not have reverb information specified.&lt;br /&gt;
&lt;br /&gt;
The order that the sound system checks for reverb data is: area number -&amp;gt; location name -&amp;gt; default.&lt;br /&gt;
&lt;br /&gt;
== Changes during playing ==&lt;br /&gt;
Type &amp;quot;&amp;lt;tt&amp;gt;reloadSounds&amp;lt;/tt&amp;gt;&amp;quot; command into game console in order to reload EFX definitions.&lt;br /&gt;
&lt;br /&gt;
So when you experiment with EFX, execute this command after each tweak to EFX file to hear the difference immediately.&lt;br /&gt;
&lt;br /&gt;
== Suppress effect ==&lt;br /&gt;
Sometimes you want to disable EFX effect on a specific sound.&lt;br /&gt;
A typical example is when you have a voice in player&#039;s head, which must not depend on player&#039;s physical environment.&lt;br /&gt;
Another case is when some sound already has reverb baked in, so you don&#039;t what to double-reverb it. Although the best practice is to use sound samples without embedded reverb, combined with proper EFX definitions.&lt;br /&gt;
&lt;br /&gt;
You can disable all EFX effects on one specific sound shader by adding &amp;quot;&amp;lt;tt&amp;gt;no_efx&amp;lt;/tt&amp;gt;&amp;quot; keyword to its body.&lt;br /&gt;
For instance, here is how non-EFX version of blackjack unsheathing looks like:&lt;br /&gt;
 blackjack_unsheath&lt;br /&gt;
 {&lt;br /&gt;
   description &amp;quot;Made by pakmannen&amp;quot;&lt;br /&gt;
   sound/sfx/tools/melee/blackjack_unsheath.ogg&lt;br /&gt;
   no_efx                       //do NOT apply EFX to this sound&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note that if you change sound shaders, writing &amp;quot;&amp;lt;tt&amp;gt;reloadDecls&amp;lt;/tt&amp;gt;&amp;quot; in TDM game console is enough to reload them.&lt;br /&gt;
&lt;br /&gt;
There are a lot of stock sounds in TDM which should not be affected by EFX effects.&lt;br /&gt;
Starting from TDM 2.07, the corresponding core sounds are marked with &amp;quot;&amp;lt;tt&amp;gt;no_efx&amp;lt;/tt&amp;gt;&amp;quot; keyword (see issue [http://bugs.thedarkmod.com/view.php?id=4688 4688]).&lt;br /&gt;
If you discover any core sound which is affected by EFX while you believe it should not, start a discussion on forums.&lt;br /&gt;
&lt;br /&gt;
=Environment properties=&lt;br /&gt;
&lt;br /&gt;
== New properties (Version 2) ==&lt;br /&gt;
&lt;br /&gt;
With Version 2 of EFX file, the set of supported properties exactly matches the set of properties defined in OpenAL EFX for the &amp;quot;EAX Reverb&amp;quot; effect.&lt;br /&gt;
Note that EFX defines several types of effects, including &amp;quot;EAX Reverb&amp;quot;, &amp;quot;Standard Reverb&amp;quot;, &amp;quot;Chorus&amp;quot;, &amp;quot;Distortion&amp;quot;, &amp;quot;Echo&amp;quot;, &amp;quot;Flanger&amp;quot;, etc.&lt;br /&gt;
Only the first one is important, ignore all the rest (including the so-called &amp;quot;Standard Reverb&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
The detailed description of all the properties is given in &amp;quot;Appendix 1 – Effect property descriptions&amp;quot; of the [https://usermanual.wiki/Pdf/Effects20Extension20Guide.90272296/view#95 OpenAL Effects Extension Guide](pages 95-101).&lt;br /&gt;
The short list is also available in a table on [https://usermanual.wiki/Pdf/Effects20Extension20Guide.90272296/view#66 page 66 of the guide]:&lt;br /&gt;
&lt;br /&gt;
[[File:Eaxreverb_properties_screenshot.png|500px]]&lt;br /&gt;
&lt;br /&gt;
The only difference is that the property names in the guide have the &amp;lt;tt&amp;gt;AL_EAXREVERB_&amp;lt;/tt&amp;gt; prefix, while in TDM definitions this prefix is removed.&lt;br /&gt;
&lt;br /&gt;
== Presets (Version 2) ==&lt;br /&gt;
Presets can be set in 2 ways:&lt;br /&gt;
* in the .efx file&lt;br /&gt;
* the efx_preset spawnarg on the location entity for the location where you want to use the effect (since TDM 2.13)&lt;br /&gt;
&lt;br /&gt;
=== File Method ===&lt;br /&gt;
&lt;br /&gt;
There is one special property &amp;lt;tt&amp;gt;PRESET&amp;lt;/tt&amp;gt;, which is not present in the EFX guide.&lt;br /&gt;
This property accepts the name of the preset which you want to use:&lt;br /&gt;
&lt;br /&gt;
 eaxreverb &amp;quot;myclassroom&amp;quot; {&lt;br /&gt;
   preset auditorium&lt;br /&gt;
 }&lt;br /&gt;
 eaxreverb &amp;quot;mycave&amp;quot; {&lt;br /&gt;
   preset cave&lt;br /&gt;
 }&lt;br /&gt;
 eaxreverb &amp;quot;mycorridor&amp;quot; {&lt;br /&gt;
   preset hallway&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
If you specify the preset like this, the values for all the reverb properties will be taken from the specified preset.&lt;br /&gt;
Additionally, you can override values of some properties if you define them manually &#039;&#039;&#039;after&#039;&#039;&#039; defining the preset.&lt;br /&gt;
&lt;br /&gt;
The preset property also accepts index of preset. Don&#039;t use indices for anything except experimentation, since they may change in future.&lt;br /&gt;
&lt;br /&gt;
=== Location Entity Method ===&lt;br /&gt;
On the location entity where you want to use the preset, set the spawnarg &#039;&#039;&#039;&#039;&#039;&#039;efx_preset&#039;&#039;&#039;&#039;&#039;&#039; to the value of the preset.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
efx_preset    CITY_SUBWAY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that both the configuration file and the location entity spawnarg can be used simultaneously.  In case that both are set for a single location, the spawnarg value will take precedence.&lt;br /&gt;
&lt;br /&gt;
=== Preset Values ===&lt;br /&gt;
The presets were taken from OpenAL-Soft implementation which TDM uses.&lt;br /&gt;
Here is the full list of preset names:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;height:350px; overflow:scroll;&amp;quot;&amp;gt;&lt;br /&gt;
GENERIC&lt;br /&gt;
PADDEDCELL&lt;br /&gt;
ROOM&lt;br /&gt;
BATHROOM&lt;br /&gt;
LIVINGROOM&lt;br /&gt;
STONEROOM&lt;br /&gt;
AUDITORIUM&lt;br /&gt;
CONCERTHALL&lt;br /&gt;
CAVE&lt;br /&gt;
ARENA&lt;br /&gt;
HANGAR&lt;br /&gt;
CARPETEDHALLWAY&lt;br /&gt;
HALLWAY&lt;br /&gt;
STONECORRIDOR&lt;br /&gt;
ALLEY&lt;br /&gt;
FOREST&lt;br /&gt;
CITY&lt;br /&gt;
MOUNTAINS&lt;br /&gt;
QUARRY&lt;br /&gt;
PLAIN&lt;br /&gt;
PARKINGLOT&lt;br /&gt;
SEWERPIPE&lt;br /&gt;
UNDERWATER&lt;br /&gt;
DRUGGED&lt;br /&gt;
DIZZY&lt;br /&gt;
PSYCHOTIC&lt;br /&gt;
CASTLE_SMALLROOM&lt;br /&gt;
CASTLE_SHORTPASSAGE&lt;br /&gt;
CASTLE_MEDIUMROOM&lt;br /&gt;
CASTLE_LARGEROOM&lt;br /&gt;
CASTLE_LONGPASSAGE&lt;br /&gt;
CASTLE_HALL&lt;br /&gt;
CASTLE_CUPBOARD&lt;br /&gt;
CASTLE_COURTYARD&lt;br /&gt;
CASTLE_ALCOVE&lt;br /&gt;
FACTORY_SMALLROOM&lt;br /&gt;
FACTORY_SHORTPASSAGE&lt;br /&gt;
FACTORY_MEDIUMROOM&lt;br /&gt;
FACTORY_LARGEROOM&lt;br /&gt;
FACTORY_LONGPASSAGE&lt;br /&gt;
FACTORY_HALL&lt;br /&gt;
FACTORY_CUPBOARD&lt;br /&gt;
FACTORY_COURTYARD&lt;br /&gt;
FACTORY_ALCOVE&lt;br /&gt;
ICEPALACE_SMALLROOM&lt;br /&gt;
ICEPALACE_SHORTPASSAGE&lt;br /&gt;
ICEPALACE_MEDIUMROOM&lt;br /&gt;
ICEPALACE_LARGEROOM&lt;br /&gt;
ICEPALACE_LONGPASSAGE&lt;br /&gt;
ICEPALACE_HALL&lt;br /&gt;
ICEPALACE_CUPBOARD&lt;br /&gt;
ICEPALACE_COURTYARD&lt;br /&gt;
ICEPALACE_ALCOVE&lt;br /&gt;
SPACESTATION_SMALLROOM&lt;br /&gt;
SPACESTATION_SHORTPASSAGE&lt;br /&gt;
SPACESTATION_MEDIUMROOM&lt;br /&gt;
SPACESTATION_LARGEROOM&lt;br /&gt;
SPACESTATION_LONGPASSAGE&lt;br /&gt;
SPACESTATION_HALL&lt;br /&gt;
SPACESTATION_CUPBOARD&lt;br /&gt;
SPACESTATION_ALCOVE&lt;br /&gt;
WOODEN_SMALLROOM&lt;br /&gt;
WOODEN_SHORTPASSAGE&lt;br /&gt;
WOODEN_MEDIUMROOM&lt;br /&gt;
WOODEN_LARGEROOM&lt;br /&gt;
WOODEN_LONGPASSAGE&lt;br /&gt;
WOODEN_HALL&lt;br /&gt;
WOODEN_CUPBOARD&lt;br /&gt;
WOODEN_COURTYARD&lt;br /&gt;
WOODEN_ALCOVE&lt;br /&gt;
SPORT_EMPTYSTADIUM&lt;br /&gt;
SPORT_SQUASHCOURT&lt;br /&gt;
SPORT_SMALLSWIMMINGPOOL&lt;br /&gt;
SPORT_LARGESWIMMINGPOOL&lt;br /&gt;
SPORT_GYMNASIUM&lt;br /&gt;
SPORT_FULLSTADIUM&lt;br /&gt;
SPORT_STADIUMTANNOY&lt;br /&gt;
PREFAB_WORKSHOP&lt;br /&gt;
PREFAB_SCHOOLROOM&lt;br /&gt;
PREFAB_PRACTISEROOM&lt;br /&gt;
PREFAB_OUTHOUSE&lt;br /&gt;
PREFAB_CARAVAN&lt;br /&gt;
DOME_TOMB&lt;br /&gt;
PIPE_SMALL&lt;br /&gt;
DOME_SAINTPAULS&lt;br /&gt;
PIPE_LONGTHIN&lt;br /&gt;
PIPE_LARGE&lt;br /&gt;
PIPE_RESONANT&lt;br /&gt;
OUTDOORS_BACKYARD&lt;br /&gt;
OUTDOORS_ROLLINGPLAINS&lt;br /&gt;
OUTDOORS_DEEPCANYON&lt;br /&gt;
OUTDOORS_CREEK&lt;br /&gt;
OUTDOORS_VALLEY&lt;br /&gt;
MOOD_HEAVEN&lt;br /&gt;
MOOD_HELL&lt;br /&gt;
MOOD_MEMORY&lt;br /&gt;
DRIVING_COMMENTATOR&lt;br /&gt;
DRIVING_PITGARAGE&lt;br /&gt;
DRIVING_INCAR_RACER&lt;br /&gt;
DRIVING_INCAR_SPORTS&lt;br /&gt;
DRIVING_INCAR_LUXURY&lt;br /&gt;
DRIVING_FULLGRANDSTAND&lt;br /&gt;
DRIVING_EMPTYGRANDSTAND&lt;br /&gt;
DRIVING_TUNNEL&lt;br /&gt;
CITY_STREETS&lt;br /&gt;
CITY_SUBWAY&lt;br /&gt;
CITY_MUSEUM&lt;br /&gt;
CITY_LIBRARY&lt;br /&gt;
CITY_UNDERPASS&lt;br /&gt;
CITY_ABANDONED&lt;br /&gt;
DUSTYROOM&lt;br /&gt;
CHAPEL&lt;br /&gt;
SMALLWATERROOM                              &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Their definitions can be seen in [https://github.com/kcat/openal-soft/blob/master/include/AL/efx-presets.h efx-presets.h] from OpenAL-Soft source code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-expandtext=&amp;quot;Show&amp;quot; data-collapsetext=&amp;quot;Hide&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Legacy info (Version 1) ==&lt;br /&gt;
&lt;br /&gt;
This information is from the old official EAX 2.0 documentation, although some properties may have changed in scope and focus from EAX 2.0 to EAX 4.0. One can assume that the properties serve the same general purpose and that each property&#039;s value bounds are approximately the same.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;environment&#039;&#039;&#039; - Unknown. Likely sets the room to one of an unknown number of environment presets.&lt;br /&gt;
* &#039;&#039;&#039;environment size&#039;&#039;&#039; - The Environment Size property sets the apparent size of the surrounding “room.” The value of Environment Size can be considered a characteristic dimension of the room expressed in meters. Scaling Environment Size is equivalent to scaling all dimensions of the room by the same factor. Value type is FLOAT; value range is 1.0 to 100.0, expressed in linear meters.&lt;br /&gt;
* &#039;&#039;&#039;environment diffusion&#039;&#039;&#039; - The Environment Diffusion property controls the echo density in the reverberation decay. Reducing diffusion gives the reverberation a more “grainy” character that is especially noticeable with percussive sound sources. If you set a diffusion value of 0.0, the later reverberation sounds like a succession of distinct echoes. Value type is FLOAT; value range is 0.0 to 1.0, expressed in a linear multiplier value.&lt;br /&gt;
* &#039;&#039;&#039;room&#039;&#039;&#039; - The Room property is the master volume control for the reflected sound (both early reflections and reverberation) that EAX adds to all sound sources. It sets the maximum amount of reflections and reverberation added to the sound mix in the primary buffer (the listener). Value is LONG; value range is -10000 to 0, expressed in hundredths of one decibel (-100 dB to 0 dB).&lt;br /&gt;
* &#039;&#039;&#039;room hf&#039;&#039;&#039; - The Room HF property further tweaks reflected sound by attenuating it at high frequencies. It controls a low-pass filter that applies globally to the reflected sound of all sound sources. The exact qualities of this low-pass filter -- its frequency and its bandwidth (Q) -- are unknown. Value type is LONG; value range is -10000 to 0, expressed in hundredths of one decibel (-100 dB to 0 dB).&lt;br /&gt;
* &#039;&#039;&#039;room lf&#039;&#039;&#039; - Undocumented. Assumably, the Room LF property applies a high-pass to reflected sound in much the same way as Room HF applies low-pass. The value type and range is unknown, but is likely LONG, must be between -10000 and 0 and is expressed in hundredths of one decibel.&lt;br /&gt;
* &#039;&#039;&#039;decay time&#039;&#039;&#039; - The Decay Time property sets the reverberation decay time, or the time in which reverberation is diminished. It ranges from 0.1 (typically a small room with very dead surfaces) to 20.0 (typically a large room with very live surfaces). Value is FLOAT; value range is 0.1 to 20.0, expressed in seconds.&lt;br /&gt;
* &#039;&#039;&#039;decay hf ratio&#039;&#039;&#039; - The Decay HF Ratio property sets the spectral quality of the Decay Time parameter. It is the ratio of high-frequency decay time relative to the time set by Decay Time. The Decay HF Ratio value 1.0 is neutral: the decay time is equal for all frequencies. As Decay HF Ratio increases above 1.0, the high-frequency decay time increases so it’s longer than the decay time at low frequencies. You hear a more brilliant reverberation with a longer decay at high frequencies. As the Decay HF Ratio value decreases below 1.0, the high-frequency decay time decreases so it’s shorter than the decay time of the low frequencies. You hear a more natural reverberation. Value is FLOAT; value range is 0.1 to 20.0, expressed in a linear multiplier variable.&lt;br /&gt;
* &#039;&#039;&#039;decay lf ratio&#039;&#039;&#039; - Undocumented. It&#039;s likely best to leave the value at 1.0, though the value&#039;s type and range is probably the same as the Decay HF Ratio property.&lt;br /&gt;
* &#039;&#039;&#039;reflections&#039;&#039;&#039; - The Reflections property controls the overall amount of initial reflections relative to the Room property. The value of Reflections ranges from a maximum of 10 dB to a minimum of -100 dB (no initial reflections at all), and is corrected by the value of the Room property. The Reflections property does not affect the subsequent reverberation decay. You can increase the amount of initial reflections to simulate a more narrow space or closer walls, especially effective if you associate the initial reflections increase with a reduction in reflections delays by lowering the value of the Reflection Delay property. To simulate open or semi-open environments, you can maintain the amount of early reflections while reducing the value of the Reverb property, which controls later reflections. Value type is LONG; value range is -10000 to 1000, expressed in hundredths of one decibel (-100 dB to -10 dB).&lt;br /&gt;
* &#039;&#039;&#039;reflections delay&#039;&#039;&#039; - The Reflections Delay property is the amount of delay between the arrival time of the direct path from the source to the first reflection from the source. It ranges from 0 to 300 milliseconds. You can reduce or increase Reflections Delay to simulate closer or more distant reflective surfaces—and therefore control the perceived size of the room. Value is FLOAT; value range is 0.0 to 0.3, expressed in seconds (0 to 300 milliseconds).&lt;br /&gt;
* &#039;&#039;&#039;reflections pan&#039;&#039;&#039; - Undocumented. Three values are specified which may correspond to a generic &amp;quot;front&amp;quot;, &amp;quot;side&amp;quot; and &amp;quot;back/rear&amp;quot; configuration to control the directivity of early reflections in a 7.1 surround matrix. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;reverb&#039;&#039;&#039; - The Reverb property controls the overall amount of later reverberation relative to the Room property. (The Room property sets the overall amount of both initial reflections and later reverberation.) The value of Reverb ranges from a maximum of 20 dB to a minimum of -100 dB (no late reverberation at all). Value is LONG; value range is -10000 to 2000, expressed in hundredths of a decibel (-100 dB to 20 dB).&lt;br /&gt;
* &#039;&#039;&#039;reverb delay&#039;&#039;&#039; - The Reverb Delay property defines the begin time of the late reverberation relative to the time of the initial reflection (the first of the early reflections). It ranges from 0 to 100 milliseconds. Reducing or increasing Reverb Delay is useful for simulating a smaller or larger room. Value is FLOAT; value range is 0.0 to 0.1, expressed in seconds (0 to 100 milliseconds).&lt;br /&gt;
* &#039;&#039;&#039;reverb pan&#039;&#039;&#039; - Undocumented. Three values are specified which may correspond to a generic &amp;quot;front&amp;quot;, &amp;quot;side&amp;quot; and &amp;quot;back/rear&amp;quot; configuration to control the directivity of reverberation in a 7.1 surround matrix. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;echo time&#039;&#039;&#039; - Undocumented. Likely controls the decay time of echoes, or late reflections. A value of 0.1 likely presents a natural amount of echo, while increasing the value likely causes a &amp;quot;Grand Canyon&amp;quot; effect. Value type is likely FLOAT; value range is likely between 0.075 and 0.25, expressed in seconds.&lt;br /&gt;
* &#039;&#039;&#039;echo depth&#039;&#039;&#039; - Undocumented. May control directionality or tonal qualities of echoes arriving at the listener. Probably best to leave at 1.0. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;modulation time&#039;&#039;&#039; - Undocumented. Unknown purpose. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;modulation depth&#039;&#039;&#039; - Undocumented. Unknown purpose. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;air absorption hf&#039;&#039;&#039; - The Air Absorption HF property controls the distance-dependent attenuation at high frequencies caused by the propagation medium. It applies to both the direct path and reflected sound. You can use Air Absorption HF to simulate sound transmission through foggy air, dry air, smoky atmosphere, and so on. The default value is -0.05 dB per meter, which roughly corresponds to typical condition of atmospheric humidity, temperature, and so on. Lowering the value simulates a more absorbent medium (more humidity in the air, for example); raising the value simulates a less absorbent medium (dry desert air, for example). Value is FLOAT; value range is -100.0 to 0.0, expressed in hundredths of one decibel per meter (-1 dB to 0 dB). Default value is -5.0, which corresponds to -0.05 dB per meter attenuation.&lt;br /&gt;
* &#039;&#039;&#039;hf reference&#039;&#039;&#039; - Likely defines the frequency used for low-pass filters. Value is likely LONG; value range is likely between 0.0 and 20000.0, expressed in Hz. This value is probably best left at 5000.0.&lt;br /&gt;
* &#039;&#039;&#039;lf reference&#039;&#039;&#039; - Likely defines the frequency used for high-pass filters. Value is likely LONG; value range is likely between 0.0 and 20000.0, expressed in Hz. This value is probably best left at 250.0.&lt;br /&gt;
* &#039;&#039;&#039;room rolloff factor&#039;&#039;&#039; - The Room Rolloff property is one of two methods available in EAX to attenuate the reflected sound (containing both reflections, reverberation and echoes) according to source-listener distance. Value type is FLOAT; value range is 0.0 to 10.0, expressed in a linear multiplier value. It&#039;s recommended that users use 0.0, as id Software did not deviate from this value with Doom 3.&lt;br /&gt;
* &#039;&#039;&#039;flags&#039;&#039;&#039; - The Flags property is intended to control the relationship of high-level EAX properties to low-level properties. If certain EAX flags are set by setting the Flags property to a particular value, the setting of high-level properties is supposed to control the values of low-level properties based upon a defined scale, overriding specified values. In EAX 2.0, the value type is DWORD, whereas in Doom 3, it appears to be INT or some other type commonly used to store numeric values. In Doom 3, common values are 0, 2, 15, 31, 32, 56 and 63, but no documentation details what these values correspond to. If users wish to experiment with the Flags property, it is recommended that they choose from one of the above values. For reference, here is a table with the counts for each flag value as used in Doom 3:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 0.5em; margin-left: 2em; border: 1px solid #a0a0a0; text-align: right; border-collapse: collapse;&amp;quot; cellpadding=&amp;quot;2&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Flag decimal&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Flag binary&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Count&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|00000000&lt;br /&gt;
|497&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|00000010&lt;br /&gt;
|6&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|00001110&lt;br /&gt;
|15&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|00001111&lt;br /&gt;
|94&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|31&lt;br /&gt;
|00011111&lt;br /&gt;
|511&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|32&lt;br /&gt;
|00100000&lt;br /&gt;
|247&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|56&lt;br /&gt;
|00111000&lt;br /&gt;
|59&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|63&lt;br /&gt;
|00111111&lt;br /&gt;
|168&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Design.&#039;&#039;&#039;&lt;br /&gt;
In terms of the actual sound design for the values you put into these variables, here is a general tutorial on reverb from FruityLoops (NOTE: This is for a music production plugin, some of these don&#039;t apply, it&#039;s just to give a general idea on what certain variables do):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Low Cut&#039;&#039;&#039; Adjusts the low cutoff frequency. Use this to remove low frequencies from the input signal before reverb is added. For example, if you are adding reverb to, say a drum track, you might want to remove some of the &#039;rumble&#039; from the bass drum by attenuating the bass frequencies. Setting this parameter to the minimum value will bypass the Low Cut filter, displaying OFF in the value field.&lt;br /&gt;
* &#039;&#039;&#039;High Cut&#039;&#039;&#039; - Similar to the Low Cut, this adjusts the high cutoff frequency. Use this to remove high frequencies from the input signal.&lt;br /&gt;
* &#039;&#039;&#039;Predelay&#039;&#039;&#039; - Controls the delay time between the direct input signal and the first reverb reflection. This should be set to modest values for small rooms, and can be increased in relation to increases in room size. &#039;&#039;&#039;Predelay&#039;&#039;&#039; creates a slap-back echo effect that can both add atmosphere and muffle the signal, so use it wisely.&lt;br /&gt;
* &#039;&#039;&#039;Room Size&#039;&#039;&#039; - Use this to set the size of the virtual room where the reverb is created. The Room Size should be adjusted according to the decay time. Small rooms sound better with a short decay time, large rooms sound better with longer reverb times.&lt;br /&gt;
* &#039;&#039;&#039;Diffusion&#039;&#039;&#039; - Controls the density of the reflections bouncing off the walls of the virtual room. A low diffusion setting makes the reflections sound more distinct, like closely spaced echoes. A high diffusion setting creates reflections so close they sound more like noise, where no echoes can be distinguished.&lt;br /&gt;
* &#039;&#039;&#039;Color&#039;&#039;&#039; - The Color parameter is used for adjusting the decay time of the bass frequencies of the signal. This allows you to change the overall perceived mood or &#039;sound&#039; of the virtual room. A bright room has a low bass response, while warm rooms have a higher bass response. In a flat room, the response of the bass is equal to the general frequency response. Color has five settings: Brighter, Bright, Flat, Warm, Warmer.&lt;br /&gt;
* &#039;&#039;&#039;Decay&#039;&#039;&#039; - Controls the decay time of the reverb, the time it takes for the signal to decay to -60dB (1/1000 of the maximum amplitude). Use low decay times for small rooms or boxes, and long decay times for large rooms, halls or churches. You should also make sure that the Room Size parameter has an appropriate value.&lt;br /&gt;
* &#039;&#039;&#039;High Damping&#039;&#039;&#039; - This parameter allows you to adjust damping of the high frequencies in the reverb signal over time. Damping refers to the high frequencies being attenuated and dying out. This causes the sound to become gradually muffled and warm like it is being absorbed in the room. Setting this parameter to the maximum value will bypass the High Damping, displaying OFF in the value field.&lt;br /&gt;
* &#039;&#039;&#039;Dry&#039;&#039;&#039; - Sets the relative dry output level.&lt;br /&gt;
* &#039;&#039;&#039;Reverb&#039;&#039;&#039; - Sets the relative reverb (wet) signal level.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Error Check=&lt;br /&gt;
If you modified the presets in your EFX file, you can check for errors ingame. Load your map and open the console. Type &#039;&#039;reloadSounds&#039;&#039;, this will trigger the reload of the EFX used in your map and print out the vars which cause an error (like a value exceeding the maximum range). Note that if your EFX files contain errors, this will make the game ignore the EFX settings you chose. &lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
See the &amp;quot;EFX Reverb&amp;quot; column of &#039;&#039;&#039;[[Fan_Missions_for_The_Dark_Mod|Fan Missions page]]&#039;&#039;&#039;. Missions with &amp;quot;Yes&amp;quot; have EFX Reverb. &lt;br /&gt;
&amp;lt;br&amp;gt;Most missions use v2.0 presets but a few missions such as &amp;quot;Volta and the Stone&amp;quot; and Behind Closed Doors use v1.0 settings.&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
The Version 2 definitions were implemented due to [http://bugs.thedarkmod.com/view.php?id=4815 issue 4815], it has some brief explanation.&lt;br /&gt;
&lt;br /&gt;
A tutorial based around EFX can be found [http://forums.thedarkmod.com/topic/19205-getting-started-with-the-efx-room-reverb-system-wip/ here]&lt;br /&gt;
&lt;br /&gt;
An old demonstration map of EAX in TDM is included [http://forums.thedarkmod.com/topic/11045-environmental-audio-extensions-eax-in-tdm/ here]&lt;br /&gt;
&lt;br /&gt;
A discussion about no_efx is [http://forums.thedarkmod.com/topic/19213-efx-discussion here]&lt;br /&gt;
&lt;br /&gt;
The first version of this article was written by Ishtvan [https://forums.thedarkmod.com/index.php?/topic/2071-setting-reverb-data-in-new-soundengine-wiki/ here]&lt;br /&gt;
&lt;br /&gt;
[[Category:Sound]]&lt;br /&gt;
[[Category:Tutorial]]&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=Setting_Reverb_Data_of_Rooms_(EAX)&amp;diff=33800</id>
		<title>Setting Reverb Data of Rooms (EAX)</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=Setting_Reverb_Data_of_Rooms_(EAX)&amp;diff=33800"/>
		<updated>2025-01-11T21:01:42Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: /* Location Entity Method */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
This document will attempt to explain how to set the new EFX settings in your rooms when mapping.&lt;br /&gt;
&lt;br /&gt;
Previously these settings were known as EAX settings, and required EAX 4.0-compatible sound card.&lt;br /&gt;
In TDM 2.06, EAX technology was completely replaced with OpenAL EFX, which is now processed in software (by [https://github.com/kcat/openal-soft openal-soft]) without any requirements on sound card.&lt;br /&gt;
&lt;br /&gt;
= General =&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
&lt;br /&gt;
EFX for a fan mission can be configured with or without a configuration file.  However, fileless configuration is only supported for [[Setting_Reverb_Data_of_Rooms_(EAX)#Presets_(Version_2)|EFX presets]].&lt;br /&gt;
&lt;br /&gt;
== EFX file ==&lt;br /&gt;
The EFX info for a map should be stored in the file &amp;quot;&amp;lt;tt&amp;gt;efxs/&amp;lt;mapname&amp;gt;.efx&amp;lt;/tt&amp;gt;&amp;quot;, where &amp;lt;mapname&amp;gt; is the name of your .map file (without extension).&lt;br /&gt;
&lt;br /&gt;
In order to check that you have put the file into right location, start your mission in game.&lt;br /&gt;
If TDM manages to load your efx file, then you will see the following message in console:&lt;br /&gt;
 sound: found efxs/&amp;lt;mapname&amp;gt;.efx&lt;br /&gt;
If you failed something, then you will see a bit different message there:&lt;br /&gt;
 sound: missing efxs/&amp;lt;mapname&amp;gt;.efx&lt;br /&gt;
In both cases some additional diagnostic messages can be present nearby.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; you must enable &amp;quot;&amp;lt;tt&amp;gt;OpenAL EFX&amp;lt;/tt&amp;gt;&amp;quot; in sound settings in the main menu, otherwise TDM won&#039;t even try to load the efx file.&lt;br /&gt;
&lt;br /&gt;
It is a plain text file, so you can open it up in your text editor of choice.&lt;br /&gt;
&lt;br /&gt;
Any EFX file must start with a header which specifies its &#039;&#039;&#039;version&#039;&#039;&#039;:&lt;br /&gt;
 Version 2&lt;br /&gt;
If you forget this line, then your EFX file will &#039;&#039;&#039;not&#039;&#039;&#039; be loaded.&lt;br /&gt;
The following versions are supported:&lt;br /&gt;
* &amp;lt;tt&amp;gt;Version 1&amp;lt;/tt&amp;gt; was supported by TDM from the very beginning. It uses some non-standard terms and quantities, which makes it hard to work with.&lt;br /&gt;
* &amp;lt;tt&amp;gt;Version 2&amp;lt;/tt&amp;gt; was added in TDM 2.07. It uses the parameters from OpenAL EFX and supports a lot of presets. &#039;&#039;&#039;Recommended for all new missions.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The rest of the file consists of separate blocks, one for each &amp;quot;reverb zone&amp;quot;.&lt;br /&gt;
Each block must start with &amp;lt;tt&amp;gt;reverb&amp;lt;/tt&amp;gt; keyword for Version 1 definitions, and &amp;lt;tt&amp;gt;eaxreverb&amp;lt;/tt&amp;gt; keyword for Version 2 definitions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here is an example of such block from mars_city1.efx of the original Doom 3 game (Version 1):&lt;br /&gt;
&lt;br /&gt;
 // reverb maintenance&lt;br /&gt;
 reverb &amp;quot;maintenance&amp;quot; {&lt;br /&gt;
  &amp;quot;environment&amp;quot; 26&lt;br /&gt;
  &amp;quot;environment size&amp;quot; 5.0670&lt;br /&gt;
  &amp;quot;environment diffusion&amp;quot; 0.6030&lt;br /&gt;
  &amp;quot;room&amp;quot; -411&lt;br /&gt;
  &amp;quot;room hf&amp;quot; -685&lt;br /&gt;
  &amp;quot;room lf&amp;quot; 0&lt;br /&gt;
  &amp;quot;decay time&amp;quot; 1.7360&lt;br /&gt;
  &amp;quot;decay hf ratio&amp;quot; 0.8030&lt;br /&gt;
  &amp;quot;decay lf ratio&amp;quot; 1.0000&lt;br /&gt;
  &amp;quot;reflections&amp;quot; 96&lt;br /&gt;
  &amp;quot;reflections delay&amp;quot; 0.0080&lt;br /&gt;
  &amp;quot;reflections pan&amp;quot; 0.0000 0.0000 0.0000&lt;br /&gt;
  &amp;quot;reverb&amp;quot; 27&lt;br /&gt;
  &amp;quot;reverb delay&amp;quot; 0.0050&lt;br /&gt;
  &amp;quot;reverb pan&amp;quot; 0.0000 0.0000 0.0000&lt;br /&gt;
  &amp;quot;echo time&amp;quot; 0.0750&lt;br /&gt;
  &amp;quot;echo depth&amp;quot; 1.0000&lt;br /&gt;
  &amp;quot;modulation time&amp;quot; 0.2500&lt;br /&gt;
  &amp;quot;modulation depth&amp;quot; 0.0000&lt;br /&gt;
  &amp;quot;air absorption hf&amp;quot; -5.0000&lt;br /&gt;
  &amp;quot;hf reference&amp;quot; 5000.0000&lt;br /&gt;
  &amp;quot;lf reference&amp;quot; 250.0000&lt;br /&gt;
  &amp;quot;room rolloff factor&amp;quot; 0.0000&lt;br /&gt;
  &amp;quot;flags&amp;quot; 56&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And here is an artificial example of Version 2 definitions:&lt;br /&gt;
&lt;br /&gt;
  eaxreverb &amp;quot;myweirdstreets&amp;quot; {&lt;br /&gt;
    reflections_gain 0.5&lt;br /&gt;
    reflections_delay 0.0050&lt;br /&gt;
    late_reverb_gain 2.5&lt;br /&gt;
    late_reverb_delay 0.050&lt;br /&gt;
    echo_time 0.25&lt;br /&gt;
    echo_depth 0.9000&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
What does all this mean? &lt;br /&gt;
&lt;br /&gt;
There is a lot of sound design stuff that one could make guesses at if you&#039;ve ever used a reverb plugin in any sort of sound editing program. hf = high frequency, lf = low frequency, etc.&lt;br /&gt;
&lt;br /&gt;
A proper explanation of the parameters is given below.&lt;br /&gt;
&lt;br /&gt;
== Locations ==&lt;br /&gt;
Each reverb zone definition starts with a line which specifies to which location it must be applied:&lt;br /&gt;
&lt;br /&gt;
 reverb &amp;quot;&amp;lt;name of the location area you want to apply this to&amp;gt;&amp;quot;&lt;br /&gt;
 {&lt;br /&gt;
     //... (settings)&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Information about locations and how to set them up is available in another article: [[Location Settings #The Location Entities]].&lt;br /&gt;
Reverb zones use exactly the same locations as the ones which are used to specify per-area ambient sounds.&lt;br /&gt;
You should name every info_location entity, i.e. provide a &amp;quot;&amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt;&amp;quot; spawnarg for it. This is the name used in reverb zone definitions.&lt;br /&gt;
&lt;br /&gt;
As of TDM 2.06, you can&#039;t use capital letters in the name of your location entity or reverb zone. This may or may not change in the future.&lt;br /&gt;
&lt;br /&gt;
Here is an example of an entity which defines &amp;quot;canal_tunnel&amp;quot; location:&lt;br /&gt;
&lt;br /&gt;
 //======================= from volta_v1.map ====================&lt;br /&gt;
 // entity 3532&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;classname&amp;quot; &amp;quot;info_location&amp;quot;&lt;br /&gt;
   &amp;quot;name&amp;quot; &amp;quot;canal_tunnel&amp;quot;             //this is the name used&lt;br /&gt;
   &amp;quot;ambient&amp;quot; &amp;quot;snd_streets&amp;quot;&lt;br /&gt;
   &amp;quot;ambient_light&amp;quot; &amp;quot;0.04 0.03 0.02&amp;quot;&lt;br /&gt;
   &amp;quot;ambient_light_dynamic&amp;quot; &amp;quot;0.01 0.01 0.01&amp;quot;&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And this is the EFX effect (reverb zone) for it:&lt;br /&gt;
&lt;br /&gt;
 //======================= from volta_v1.efx ====================&lt;br /&gt;
 reverb &amp;quot;canal_tunnel&amp;quot; {             //name put to here&lt;br /&gt;
   &amp;quot;environment&amp;quot; 22&lt;br /&gt;
   &amp;quot;environment size&amp;quot; 1.8000&lt;br /&gt;
   &amp;quot;environment diffusion&amp;quot; 1.0000&lt;br /&gt;
   &amp;quot;room&amp;quot; -1000&lt;br /&gt;
   &amp;quot;room hf&amp;quot; -4000&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
During playing, the engine prints a message whenever the player&#039;s location changes.&lt;br /&gt;
It allows you to check if you have set up locations properly.&lt;br /&gt;
For instance, here are console messages showing a proper EFX location change:&lt;br /&gt;
&lt;br /&gt;
 Switching to EFX &#039;canal_tunnel&#039; (#295)&lt;br /&gt;
 Changed location from &#039;canal_streets&#039; to &#039;canal_tunnel&#039;.&lt;br /&gt;
&lt;br /&gt;
It is also possible to specify portal-area number instead of location name in the reverb zone definition.&lt;br /&gt;
The portal-area number is listed in the .proc file, which is created in the dmap process, in the format of &amp;lt;tt&amp;gt;_area&amp;lt;num&amp;gt;&amp;lt;/tt&amp;gt; (where &amp;lt;num&amp;gt; is the portal area number), e.g. &amp;lt;tt&amp;gt;_area15&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&#039;&#039;&#039;Beware:&#039;&#039;&#039; this functionality exists for fast hacking only! Do not release a mission with portal-area numbers in .efx file!&lt;br /&gt;
The main reason to avoid it is that portal-area numbers are auto-generated, so minor changes in your mission can change all of them.&lt;br /&gt;
&lt;br /&gt;
Finally, there is a &amp;quot;default&amp;quot; reverb environment which is used for any area in the map which does not have reverb information specified.&lt;br /&gt;
&lt;br /&gt;
The order that the sound system checks for reverb data is: area number -&amp;gt; location name -&amp;gt; default.&lt;br /&gt;
&lt;br /&gt;
== Changes during playing ==&lt;br /&gt;
Type &amp;quot;&amp;lt;tt&amp;gt;reloadSounds&amp;lt;/tt&amp;gt;&amp;quot; command into game console in order to reload EFX definitions.&lt;br /&gt;
&lt;br /&gt;
So when you experiment with EFX, execute this command after each tweak to EFX file to hear the difference immediately.&lt;br /&gt;
&lt;br /&gt;
== Suppress effect ==&lt;br /&gt;
Sometimes you want to disable EFX effect on a specific sound.&lt;br /&gt;
A typical example is when you have a voice in player&#039;s head, which must not depend on player&#039;s physical environment.&lt;br /&gt;
Another case is when some sound already has reverb baked in, so you don&#039;t what to double-reverb it. Although the best practice is to use sound samples without embedded reverb, combined with proper EFX definitions.&lt;br /&gt;
&lt;br /&gt;
You can disable all EFX effects on one specific sound shader by adding &amp;quot;&amp;lt;tt&amp;gt;no_efx&amp;lt;/tt&amp;gt;&amp;quot; keyword to its body.&lt;br /&gt;
For instance, here is how non-EFX version of blackjack unsheathing looks like:&lt;br /&gt;
 blackjack_unsheath&lt;br /&gt;
 {&lt;br /&gt;
   description &amp;quot;Made by pakmannen&amp;quot;&lt;br /&gt;
   sound/sfx/tools/melee/blackjack_unsheath.ogg&lt;br /&gt;
   no_efx                       //do NOT apply EFX to this sound&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note that if you change sound shaders, writing &amp;quot;&amp;lt;tt&amp;gt;reloadDecls&amp;lt;/tt&amp;gt;&amp;quot; in TDM game console is enough to reload them.&lt;br /&gt;
&lt;br /&gt;
There are a lot of stock sounds in TDM which should not be affected by EFX effects.&lt;br /&gt;
Starting from TDM 2.07, the corresponding core sounds are marked with &amp;quot;&amp;lt;tt&amp;gt;no_efx&amp;lt;/tt&amp;gt;&amp;quot; keyword (see issue [http://bugs.thedarkmod.com/view.php?id=4688 4688]).&lt;br /&gt;
If you discover any core sound which is affected by EFX while you believe it should not, start a discussion on forums.&lt;br /&gt;
&lt;br /&gt;
=Environment properties=&lt;br /&gt;
&lt;br /&gt;
== New properties (Version 2) ==&lt;br /&gt;
&lt;br /&gt;
With Version 2 of EFX file, the set of supported properties exactly matches the set of properties defined in OpenAL EFX for the &amp;quot;EAX Reverb&amp;quot; effect.&lt;br /&gt;
Note that EFX defines several types of effects, including &amp;quot;EAX Reverb&amp;quot;, &amp;quot;Standard Reverb&amp;quot;, &amp;quot;Chorus&amp;quot;, &amp;quot;Distortion&amp;quot;, &amp;quot;Echo&amp;quot;, &amp;quot;Flanger&amp;quot;, etc.&lt;br /&gt;
Only the first one is important, ignore all the rest (including the so-called &amp;quot;Standard Reverb&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
The detailed description of all the properties is given in &amp;quot;Appendix 1 – Effect property descriptions&amp;quot; of the [https://usermanual.wiki/Pdf/Effects20Extension20Guide.90272296/view#95 OpenAL Effects Extension Guide](pages 95-101).&lt;br /&gt;
The short list is also available in a table on [https://usermanual.wiki/Pdf/Effects20Extension20Guide.90272296/view#66 page 66 of the guide]:&lt;br /&gt;
&lt;br /&gt;
[[File:Eaxreverb_properties_screenshot.png|500px]]&lt;br /&gt;
&lt;br /&gt;
The only difference is that the property names in the guide have the &amp;lt;tt&amp;gt;AL_EAXREVERB_&amp;lt;/tt&amp;gt; prefix, while in TDM definitions this prefix is removed.&lt;br /&gt;
&lt;br /&gt;
== Presets (Version 2) ==&lt;br /&gt;
Presets can be set in 2 ways:&lt;br /&gt;
* in the .efx file&lt;br /&gt;
* the efx_preset spawnarg on the location entity for the location where you want to use the effect (since TDM 2.13)&lt;br /&gt;
&lt;br /&gt;
=== File Method ===&lt;br /&gt;
&lt;br /&gt;
There is one special property &amp;lt;tt&amp;gt;PRESET&amp;lt;/tt&amp;gt;, which is not present in the EFX guide.&lt;br /&gt;
This property accepts the name of the preset which you want to use:&lt;br /&gt;
&lt;br /&gt;
 eaxreverb &amp;quot;myclassroom&amp;quot; {&lt;br /&gt;
   preset auditorium&lt;br /&gt;
 }&lt;br /&gt;
 eaxreverb &amp;quot;mycave&amp;quot; {&lt;br /&gt;
   preset cave&lt;br /&gt;
 }&lt;br /&gt;
 eaxreverb &amp;quot;mycorridor&amp;quot; {&lt;br /&gt;
   preset hallway&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
If you specify the preset like this, the values for all the reverb properties will be taken from the specified preset.&lt;br /&gt;
Additionally, you can override values of some properties if you define them manually &#039;&#039;&#039;after&#039;&#039;&#039; defining the preset.&lt;br /&gt;
&lt;br /&gt;
The preset property also accepts index of preset. Don&#039;t use indices for anything except experimentation, since they may change in future.&lt;br /&gt;
&lt;br /&gt;
=== Location Entity Method ===&lt;br /&gt;
On the location entity where you want to use the preset, set the spawnarg &#039;&#039;&#039;efx_preset&#039;&#039;&#039; &#039;&#039;Italic text&#039;&#039;to the value of the preset.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
efx_preset    CITY_SUBWAY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that both the configuration file and the location entity spawnarg can be used simultaneously.  In case that both are set for a single location, the spawnarg value will take precedence.&lt;br /&gt;
&lt;br /&gt;
=== Preset Values ===&lt;br /&gt;
The presets were taken from OpenAL-Soft implementation which TDM uses.&lt;br /&gt;
Here is the full list of preset names:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;height:350px; overflow:scroll;&amp;quot;&amp;gt;&lt;br /&gt;
GENERIC&lt;br /&gt;
PADDEDCELL&lt;br /&gt;
ROOM&lt;br /&gt;
BATHROOM&lt;br /&gt;
LIVINGROOM&lt;br /&gt;
STONEROOM&lt;br /&gt;
AUDITORIUM&lt;br /&gt;
CONCERTHALL&lt;br /&gt;
CAVE&lt;br /&gt;
ARENA&lt;br /&gt;
HANGAR&lt;br /&gt;
CARPETEDHALLWAY&lt;br /&gt;
HALLWAY&lt;br /&gt;
STONECORRIDOR&lt;br /&gt;
ALLEY&lt;br /&gt;
FOREST&lt;br /&gt;
CITY&lt;br /&gt;
MOUNTAINS&lt;br /&gt;
QUARRY&lt;br /&gt;
PLAIN&lt;br /&gt;
PARKINGLOT&lt;br /&gt;
SEWERPIPE&lt;br /&gt;
UNDERWATER&lt;br /&gt;
DRUGGED&lt;br /&gt;
DIZZY&lt;br /&gt;
PSYCHOTIC&lt;br /&gt;
CASTLE_SMALLROOM&lt;br /&gt;
CASTLE_SHORTPASSAGE&lt;br /&gt;
CASTLE_MEDIUMROOM&lt;br /&gt;
CASTLE_LARGEROOM&lt;br /&gt;
CASTLE_LONGPASSAGE&lt;br /&gt;
CASTLE_HALL&lt;br /&gt;
CASTLE_CUPBOARD&lt;br /&gt;
CASTLE_COURTYARD&lt;br /&gt;
CASTLE_ALCOVE&lt;br /&gt;
FACTORY_SMALLROOM&lt;br /&gt;
FACTORY_SHORTPASSAGE&lt;br /&gt;
FACTORY_MEDIUMROOM&lt;br /&gt;
FACTORY_LARGEROOM&lt;br /&gt;
FACTORY_LONGPASSAGE&lt;br /&gt;
FACTORY_HALL&lt;br /&gt;
FACTORY_CUPBOARD&lt;br /&gt;
FACTORY_COURTYARD&lt;br /&gt;
FACTORY_ALCOVE&lt;br /&gt;
ICEPALACE_SMALLROOM&lt;br /&gt;
ICEPALACE_SHORTPASSAGE&lt;br /&gt;
ICEPALACE_MEDIUMROOM&lt;br /&gt;
ICEPALACE_LARGEROOM&lt;br /&gt;
ICEPALACE_LONGPASSAGE&lt;br /&gt;
ICEPALACE_HALL&lt;br /&gt;
ICEPALACE_CUPBOARD&lt;br /&gt;
ICEPALACE_COURTYARD&lt;br /&gt;
ICEPALACE_ALCOVE&lt;br /&gt;
SPACESTATION_SMALLROOM&lt;br /&gt;
SPACESTATION_SHORTPASSAGE&lt;br /&gt;
SPACESTATION_MEDIUMROOM&lt;br /&gt;
SPACESTATION_LARGEROOM&lt;br /&gt;
SPACESTATION_LONGPASSAGE&lt;br /&gt;
SPACESTATION_HALL&lt;br /&gt;
SPACESTATION_CUPBOARD&lt;br /&gt;
SPACESTATION_ALCOVE&lt;br /&gt;
WOODEN_SMALLROOM&lt;br /&gt;
WOODEN_SHORTPASSAGE&lt;br /&gt;
WOODEN_MEDIUMROOM&lt;br /&gt;
WOODEN_LARGEROOM&lt;br /&gt;
WOODEN_LONGPASSAGE&lt;br /&gt;
WOODEN_HALL&lt;br /&gt;
WOODEN_CUPBOARD&lt;br /&gt;
WOODEN_COURTYARD&lt;br /&gt;
WOODEN_ALCOVE&lt;br /&gt;
SPORT_EMPTYSTADIUM&lt;br /&gt;
SPORT_SQUASHCOURT&lt;br /&gt;
SPORT_SMALLSWIMMINGPOOL&lt;br /&gt;
SPORT_LARGESWIMMINGPOOL&lt;br /&gt;
SPORT_GYMNASIUM&lt;br /&gt;
SPORT_FULLSTADIUM&lt;br /&gt;
SPORT_STADIUMTANNOY&lt;br /&gt;
PREFAB_WORKSHOP&lt;br /&gt;
PREFAB_SCHOOLROOM&lt;br /&gt;
PREFAB_PRACTISEROOM&lt;br /&gt;
PREFAB_OUTHOUSE&lt;br /&gt;
PREFAB_CARAVAN&lt;br /&gt;
DOME_TOMB&lt;br /&gt;
PIPE_SMALL&lt;br /&gt;
DOME_SAINTPAULS&lt;br /&gt;
PIPE_LONGTHIN&lt;br /&gt;
PIPE_LARGE&lt;br /&gt;
PIPE_RESONANT&lt;br /&gt;
OUTDOORS_BACKYARD&lt;br /&gt;
OUTDOORS_ROLLINGPLAINS&lt;br /&gt;
OUTDOORS_DEEPCANYON&lt;br /&gt;
OUTDOORS_CREEK&lt;br /&gt;
OUTDOORS_VALLEY&lt;br /&gt;
MOOD_HEAVEN&lt;br /&gt;
MOOD_HELL&lt;br /&gt;
MOOD_MEMORY&lt;br /&gt;
DRIVING_COMMENTATOR&lt;br /&gt;
DRIVING_PITGARAGE&lt;br /&gt;
DRIVING_INCAR_RACER&lt;br /&gt;
DRIVING_INCAR_SPORTS&lt;br /&gt;
DRIVING_INCAR_LUXURY&lt;br /&gt;
DRIVING_FULLGRANDSTAND&lt;br /&gt;
DRIVING_EMPTYGRANDSTAND&lt;br /&gt;
DRIVING_TUNNEL&lt;br /&gt;
CITY_STREETS&lt;br /&gt;
CITY_SUBWAY&lt;br /&gt;
CITY_MUSEUM&lt;br /&gt;
CITY_LIBRARY&lt;br /&gt;
CITY_UNDERPASS&lt;br /&gt;
CITY_ABANDONED&lt;br /&gt;
DUSTYROOM&lt;br /&gt;
CHAPEL&lt;br /&gt;
SMALLWATERROOM                              &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Their definitions can be seen in [https://github.com/kcat/openal-soft/blob/master/include/AL/efx-presets.h efx-presets.h] from OpenAL-Soft source code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-expandtext=&amp;quot;Show&amp;quot; data-collapsetext=&amp;quot;Hide&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Legacy info (Version 1) ==&lt;br /&gt;
&lt;br /&gt;
This information is from the old official EAX 2.0 documentation, although some properties may have changed in scope and focus from EAX 2.0 to EAX 4.0. One can assume that the properties serve the same general purpose and that each property&#039;s value bounds are approximately the same.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;environment&#039;&#039;&#039; - Unknown. Likely sets the room to one of an unknown number of environment presets.&lt;br /&gt;
* &#039;&#039;&#039;environment size&#039;&#039;&#039; - The Environment Size property sets the apparent size of the surrounding “room.” The value of Environment Size can be considered a characteristic dimension of the room expressed in meters. Scaling Environment Size is equivalent to scaling all dimensions of the room by the same factor. Value type is FLOAT; value range is 1.0 to 100.0, expressed in linear meters.&lt;br /&gt;
* &#039;&#039;&#039;environment diffusion&#039;&#039;&#039; - The Environment Diffusion property controls the echo density in the reverberation decay. Reducing diffusion gives the reverberation a more “grainy” character that is especially noticeable with percussive sound sources. If you set a diffusion value of 0.0, the later reverberation sounds like a succession of distinct echoes. Value type is FLOAT; value range is 0.0 to 1.0, expressed in a linear multiplier value.&lt;br /&gt;
* &#039;&#039;&#039;room&#039;&#039;&#039; - The Room property is the master volume control for the reflected sound (both early reflections and reverberation) that EAX adds to all sound sources. It sets the maximum amount of reflections and reverberation added to the sound mix in the primary buffer (the listener). Value is LONG; value range is -10000 to 0, expressed in hundredths of one decibel (-100 dB to 0 dB).&lt;br /&gt;
* &#039;&#039;&#039;room hf&#039;&#039;&#039; - The Room HF property further tweaks reflected sound by attenuating it at high frequencies. It controls a low-pass filter that applies globally to the reflected sound of all sound sources. The exact qualities of this low-pass filter -- its frequency and its bandwidth (Q) -- are unknown. Value type is LONG; value range is -10000 to 0, expressed in hundredths of one decibel (-100 dB to 0 dB).&lt;br /&gt;
* &#039;&#039;&#039;room lf&#039;&#039;&#039; - Undocumented. Assumably, the Room LF property applies a high-pass to reflected sound in much the same way as Room HF applies low-pass. The value type and range is unknown, but is likely LONG, must be between -10000 and 0 and is expressed in hundredths of one decibel.&lt;br /&gt;
* &#039;&#039;&#039;decay time&#039;&#039;&#039; - The Decay Time property sets the reverberation decay time, or the time in which reverberation is diminished. It ranges from 0.1 (typically a small room with very dead surfaces) to 20.0 (typically a large room with very live surfaces). Value is FLOAT; value range is 0.1 to 20.0, expressed in seconds.&lt;br /&gt;
* &#039;&#039;&#039;decay hf ratio&#039;&#039;&#039; - The Decay HF Ratio property sets the spectral quality of the Decay Time parameter. It is the ratio of high-frequency decay time relative to the time set by Decay Time. The Decay HF Ratio value 1.0 is neutral: the decay time is equal for all frequencies. As Decay HF Ratio increases above 1.0, the high-frequency decay time increases so it’s longer than the decay time at low frequencies. You hear a more brilliant reverberation with a longer decay at high frequencies. As the Decay HF Ratio value decreases below 1.0, the high-frequency decay time decreases so it’s shorter than the decay time of the low frequencies. You hear a more natural reverberation. Value is FLOAT; value range is 0.1 to 20.0, expressed in a linear multiplier variable.&lt;br /&gt;
* &#039;&#039;&#039;decay lf ratio&#039;&#039;&#039; - Undocumented. It&#039;s likely best to leave the value at 1.0, though the value&#039;s type and range is probably the same as the Decay HF Ratio property.&lt;br /&gt;
* &#039;&#039;&#039;reflections&#039;&#039;&#039; - The Reflections property controls the overall amount of initial reflections relative to the Room property. The value of Reflections ranges from a maximum of 10 dB to a minimum of -100 dB (no initial reflections at all), and is corrected by the value of the Room property. The Reflections property does not affect the subsequent reverberation decay. You can increase the amount of initial reflections to simulate a more narrow space or closer walls, especially effective if you associate the initial reflections increase with a reduction in reflections delays by lowering the value of the Reflection Delay property. To simulate open or semi-open environments, you can maintain the amount of early reflections while reducing the value of the Reverb property, which controls later reflections. Value type is LONG; value range is -10000 to 1000, expressed in hundredths of one decibel (-100 dB to -10 dB).&lt;br /&gt;
* &#039;&#039;&#039;reflections delay&#039;&#039;&#039; - The Reflections Delay property is the amount of delay between the arrival time of the direct path from the source to the first reflection from the source. It ranges from 0 to 300 milliseconds. You can reduce or increase Reflections Delay to simulate closer or more distant reflective surfaces—and therefore control the perceived size of the room. Value is FLOAT; value range is 0.0 to 0.3, expressed in seconds (0 to 300 milliseconds).&lt;br /&gt;
* &#039;&#039;&#039;reflections pan&#039;&#039;&#039; - Undocumented. Three values are specified which may correspond to a generic &amp;quot;front&amp;quot;, &amp;quot;side&amp;quot; and &amp;quot;back/rear&amp;quot; configuration to control the directivity of early reflections in a 7.1 surround matrix. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;reverb&#039;&#039;&#039; - The Reverb property controls the overall amount of later reverberation relative to the Room property. (The Room property sets the overall amount of both initial reflections and later reverberation.) The value of Reverb ranges from a maximum of 20 dB to a minimum of -100 dB (no late reverberation at all). Value is LONG; value range is -10000 to 2000, expressed in hundredths of a decibel (-100 dB to 20 dB).&lt;br /&gt;
* &#039;&#039;&#039;reverb delay&#039;&#039;&#039; - The Reverb Delay property defines the begin time of the late reverberation relative to the time of the initial reflection (the first of the early reflections). It ranges from 0 to 100 milliseconds. Reducing or increasing Reverb Delay is useful for simulating a smaller or larger room. Value is FLOAT; value range is 0.0 to 0.1, expressed in seconds (0 to 100 milliseconds).&lt;br /&gt;
* &#039;&#039;&#039;reverb pan&#039;&#039;&#039; - Undocumented. Three values are specified which may correspond to a generic &amp;quot;front&amp;quot;, &amp;quot;side&amp;quot; and &amp;quot;back/rear&amp;quot; configuration to control the directivity of reverberation in a 7.1 surround matrix. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;echo time&#039;&#039;&#039; - Undocumented. Likely controls the decay time of echoes, or late reflections. A value of 0.1 likely presents a natural amount of echo, while increasing the value likely causes a &amp;quot;Grand Canyon&amp;quot; effect. Value type is likely FLOAT; value range is likely between 0.075 and 0.25, expressed in seconds.&lt;br /&gt;
* &#039;&#039;&#039;echo depth&#039;&#039;&#039; - Undocumented. May control directionality or tonal qualities of echoes arriving at the listener. Probably best to leave at 1.0. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;modulation time&#039;&#039;&#039; - Undocumented. Unknown purpose. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;modulation depth&#039;&#039;&#039; - Undocumented. Unknown purpose. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;air absorption hf&#039;&#039;&#039; - The Air Absorption HF property controls the distance-dependent attenuation at high frequencies caused by the propagation medium. It applies to both the direct path and reflected sound. You can use Air Absorption HF to simulate sound transmission through foggy air, dry air, smoky atmosphere, and so on. The default value is -0.05 dB per meter, which roughly corresponds to typical condition of atmospheric humidity, temperature, and so on. Lowering the value simulates a more absorbent medium (more humidity in the air, for example); raising the value simulates a less absorbent medium (dry desert air, for example). Value is FLOAT; value range is -100.0 to 0.0, expressed in hundredths of one decibel per meter (-1 dB to 0 dB). Default value is -5.0, which corresponds to -0.05 dB per meter attenuation.&lt;br /&gt;
* &#039;&#039;&#039;hf reference&#039;&#039;&#039; - Likely defines the frequency used for low-pass filters. Value is likely LONG; value range is likely between 0.0 and 20000.0, expressed in Hz. This value is probably best left at 5000.0.&lt;br /&gt;
* &#039;&#039;&#039;lf reference&#039;&#039;&#039; - Likely defines the frequency used for high-pass filters. Value is likely LONG; value range is likely between 0.0 and 20000.0, expressed in Hz. This value is probably best left at 250.0.&lt;br /&gt;
* &#039;&#039;&#039;room rolloff factor&#039;&#039;&#039; - The Room Rolloff property is one of two methods available in EAX to attenuate the reflected sound (containing both reflections, reverberation and echoes) according to source-listener distance. Value type is FLOAT; value range is 0.0 to 10.0, expressed in a linear multiplier value. It&#039;s recommended that users use 0.0, as id Software did not deviate from this value with Doom 3.&lt;br /&gt;
* &#039;&#039;&#039;flags&#039;&#039;&#039; - The Flags property is intended to control the relationship of high-level EAX properties to low-level properties. If certain EAX flags are set by setting the Flags property to a particular value, the setting of high-level properties is supposed to control the values of low-level properties based upon a defined scale, overriding specified values. In EAX 2.0, the value type is DWORD, whereas in Doom 3, it appears to be INT or some other type commonly used to store numeric values. In Doom 3, common values are 0, 2, 15, 31, 32, 56 and 63, but no documentation details what these values correspond to. If users wish to experiment with the Flags property, it is recommended that they choose from one of the above values. For reference, here is a table with the counts for each flag value as used in Doom 3:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 0.5em; margin-left: 2em; border: 1px solid #a0a0a0; text-align: right; border-collapse: collapse;&amp;quot; cellpadding=&amp;quot;2&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Flag decimal&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Flag binary&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Count&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|00000000&lt;br /&gt;
|497&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|00000010&lt;br /&gt;
|6&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|00001110&lt;br /&gt;
|15&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|00001111&lt;br /&gt;
|94&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|31&lt;br /&gt;
|00011111&lt;br /&gt;
|511&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|32&lt;br /&gt;
|00100000&lt;br /&gt;
|247&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|56&lt;br /&gt;
|00111000&lt;br /&gt;
|59&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|63&lt;br /&gt;
|00111111&lt;br /&gt;
|168&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Design.&#039;&#039;&#039;&lt;br /&gt;
In terms of the actual sound design for the values you put into these variables, here is a general tutorial on reverb from FruityLoops (NOTE: This is for a music production plugin, some of these don&#039;t apply, it&#039;s just to give a general idea on what certain variables do):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Low Cut&#039;&#039;&#039; Adjusts the low cutoff frequency. Use this to remove low frequencies from the input signal before reverb is added. For example, if you are adding reverb to, say a drum track, you might want to remove some of the &#039;rumble&#039; from the bass drum by attenuating the bass frequencies. Setting this parameter to the minimum value will bypass the Low Cut filter, displaying OFF in the value field.&lt;br /&gt;
* &#039;&#039;&#039;High Cut&#039;&#039;&#039; - Similar to the Low Cut, this adjusts the high cutoff frequency. Use this to remove high frequencies from the input signal.&lt;br /&gt;
* &#039;&#039;&#039;Predelay&#039;&#039;&#039; - Controls the delay time between the direct input signal and the first reverb reflection. This should be set to modest values for small rooms, and can be increased in relation to increases in room size. &#039;&#039;&#039;Predelay&#039;&#039;&#039; creates a slap-back echo effect that can both add atmosphere and muffle the signal, so use it wisely.&lt;br /&gt;
* &#039;&#039;&#039;Room Size&#039;&#039;&#039; - Use this to set the size of the virtual room where the reverb is created. The Room Size should be adjusted according to the decay time. Small rooms sound better with a short decay time, large rooms sound better with longer reverb times.&lt;br /&gt;
* &#039;&#039;&#039;Diffusion&#039;&#039;&#039; - Controls the density of the reflections bouncing off the walls of the virtual room. A low diffusion setting makes the reflections sound more distinct, like closely spaced echoes. A high diffusion setting creates reflections so close they sound more like noise, where no echoes can be distinguished.&lt;br /&gt;
* &#039;&#039;&#039;Color&#039;&#039;&#039; - The Color parameter is used for adjusting the decay time of the bass frequencies of the signal. This allows you to change the overall perceived mood or &#039;sound&#039; of the virtual room. A bright room has a low bass response, while warm rooms have a higher bass response. In a flat room, the response of the bass is equal to the general frequency response. Color has five settings: Brighter, Bright, Flat, Warm, Warmer.&lt;br /&gt;
* &#039;&#039;&#039;Decay&#039;&#039;&#039; - Controls the decay time of the reverb, the time it takes for the signal to decay to -60dB (1/1000 of the maximum amplitude). Use low decay times for small rooms or boxes, and long decay times for large rooms, halls or churches. You should also make sure that the Room Size parameter has an appropriate value.&lt;br /&gt;
* &#039;&#039;&#039;High Damping&#039;&#039;&#039; - This parameter allows you to adjust damping of the high frequencies in the reverb signal over time. Damping refers to the high frequencies being attenuated and dying out. This causes the sound to become gradually muffled and warm like it is being absorbed in the room. Setting this parameter to the maximum value will bypass the High Damping, displaying OFF in the value field.&lt;br /&gt;
* &#039;&#039;&#039;Dry&#039;&#039;&#039; - Sets the relative dry output level.&lt;br /&gt;
* &#039;&#039;&#039;Reverb&#039;&#039;&#039; - Sets the relative reverb (wet) signal level.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Error Check=&lt;br /&gt;
If you modified the presets in your EFX file, you can check for errors ingame. Load your map and open the console. Type &#039;&#039;reloadSounds&#039;&#039;, this will trigger the reload of the EFX used in your map and print out the vars which cause an error (like a value exceeding the maximum range). Note that if your EFX files contain errors, this will make the game ignore the EFX settings you chose. &lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
See the &amp;quot;EFX Reverb&amp;quot; column of &#039;&#039;&#039;[[Fan_Missions_for_The_Dark_Mod|Fan Missions page]]&#039;&#039;&#039;. Missions with &amp;quot;Yes&amp;quot; have EFX Reverb. &lt;br /&gt;
&amp;lt;br&amp;gt;Most missions use v2.0 presets but a few missions such as &amp;quot;Volta and the Stone&amp;quot; and Behind Closed Doors use v1.0 settings.&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
The Version 2 definitions were implemented due to [http://bugs.thedarkmod.com/view.php?id=4815 issue 4815], it has some brief explanation.&lt;br /&gt;
&lt;br /&gt;
A tutorial based around EFX can be found [http://forums.thedarkmod.com/topic/19205-getting-started-with-the-efx-room-reverb-system-wip/ here]&lt;br /&gt;
&lt;br /&gt;
An old demonstration map of EAX in TDM is included [http://forums.thedarkmod.com/topic/11045-environmental-audio-extensions-eax-in-tdm/ here]&lt;br /&gt;
&lt;br /&gt;
A discussion about no_efx is [http://forums.thedarkmod.com/topic/19213-efx-discussion here]&lt;br /&gt;
&lt;br /&gt;
The first version of this article was written by Ishtvan [https://forums.thedarkmod.com/index.php?/topic/2071-setting-reverb-data-in-new-soundengine-wiki/ here]&lt;br /&gt;
&lt;br /&gt;
[[Category:Sound]]&lt;br /&gt;
[[Category:Tutorial]]&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=Setting_Reverb_Data_of_Rooms_(EAX)&amp;diff=33799</id>
		<title>Setting Reverb Data of Rooms (EAX)</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=Setting_Reverb_Data_of_Rooms_(EAX)&amp;diff=33799"/>
		<updated>2025-01-11T21:01:20Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: /* Location Entity Method */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
This document will attempt to explain how to set the new EFX settings in your rooms when mapping.&lt;br /&gt;
&lt;br /&gt;
Previously these settings were known as EAX settings, and required EAX 4.0-compatible sound card.&lt;br /&gt;
In TDM 2.06, EAX technology was completely replaced with OpenAL EFX, which is now processed in software (by [https://github.com/kcat/openal-soft openal-soft]) without any requirements on sound card.&lt;br /&gt;
&lt;br /&gt;
= General =&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
&lt;br /&gt;
EFX for a fan mission can be configured with or without a configuration file.  However, fileless configuration is only supported for [[Setting_Reverb_Data_of_Rooms_(EAX)#Presets_(Version_2)|EFX presets]].&lt;br /&gt;
&lt;br /&gt;
== EFX file ==&lt;br /&gt;
The EFX info for a map should be stored in the file &amp;quot;&amp;lt;tt&amp;gt;efxs/&amp;lt;mapname&amp;gt;.efx&amp;lt;/tt&amp;gt;&amp;quot;, where &amp;lt;mapname&amp;gt; is the name of your .map file (without extension).&lt;br /&gt;
&lt;br /&gt;
In order to check that you have put the file into right location, start your mission in game.&lt;br /&gt;
If TDM manages to load your efx file, then you will see the following message in console:&lt;br /&gt;
 sound: found efxs/&amp;lt;mapname&amp;gt;.efx&lt;br /&gt;
If you failed something, then you will see a bit different message there:&lt;br /&gt;
 sound: missing efxs/&amp;lt;mapname&amp;gt;.efx&lt;br /&gt;
In both cases some additional diagnostic messages can be present nearby.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; you must enable &amp;quot;&amp;lt;tt&amp;gt;OpenAL EFX&amp;lt;/tt&amp;gt;&amp;quot; in sound settings in the main menu, otherwise TDM won&#039;t even try to load the efx file.&lt;br /&gt;
&lt;br /&gt;
It is a plain text file, so you can open it up in your text editor of choice.&lt;br /&gt;
&lt;br /&gt;
Any EFX file must start with a header which specifies its &#039;&#039;&#039;version&#039;&#039;&#039;:&lt;br /&gt;
 Version 2&lt;br /&gt;
If you forget this line, then your EFX file will &#039;&#039;&#039;not&#039;&#039;&#039; be loaded.&lt;br /&gt;
The following versions are supported:&lt;br /&gt;
* &amp;lt;tt&amp;gt;Version 1&amp;lt;/tt&amp;gt; was supported by TDM from the very beginning. It uses some non-standard terms and quantities, which makes it hard to work with.&lt;br /&gt;
* &amp;lt;tt&amp;gt;Version 2&amp;lt;/tt&amp;gt; was added in TDM 2.07. It uses the parameters from OpenAL EFX and supports a lot of presets. &#039;&#039;&#039;Recommended for all new missions.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The rest of the file consists of separate blocks, one for each &amp;quot;reverb zone&amp;quot;.&lt;br /&gt;
Each block must start with &amp;lt;tt&amp;gt;reverb&amp;lt;/tt&amp;gt; keyword for Version 1 definitions, and &amp;lt;tt&amp;gt;eaxreverb&amp;lt;/tt&amp;gt; keyword for Version 2 definitions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here is an example of such block from mars_city1.efx of the original Doom 3 game (Version 1):&lt;br /&gt;
&lt;br /&gt;
 // reverb maintenance&lt;br /&gt;
 reverb &amp;quot;maintenance&amp;quot; {&lt;br /&gt;
  &amp;quot;environment&amp;quot; 26&lt;br /&gt;
  &amp;quot;environment size&amp;quot; 5.0670&lt;br /&gt;
  &amp;quot;environment diffusion&amp;quot; 0.6030&lt;br /&gt;
  &amp;quot;room&amp;quot; -411&lt;br /&gt;
  &amp;quot;room hf&amp;quot; -685&lt;br /&gt;
  &amp;quot;room lf&amp;quot; 0&lt;br /&gt;
  &amp;quot;decay time&amp;quot; 1.7360&lt;br /&gt;
  &amp;quot;decay hf ratio&amp;quot; 0.8030&lt;br /&gt;
  &amp;quot;decay lf ratio&amp;quot; 1.0000&lt;br /&gt;
  &amp;quot;reflections&amp;quot; 96&lt;br /&gt;
  &amp;quot;reflections delay&amp;quot; 0.0080&lt;br /&gt;
  &amp;quot;reflections pan&amp;quot; 0.0000 0.0000 0.0000&lt;br /&gt;
  &amp;quot;reverb&amp;quot; 27&lt;br /&gt;
  &amp;quot;reverb delay&amp;quot; 0.0050&lt;br /&gt;
  &amp;quot;reverb pan&amp;quot; 0.0000 0.0000 0.0000&lt;br /&gt;
  &amp;quot;echo time&amp;quot; 0.0750&lt;br /&gt;
  &amp;quot;echo depth&amp;quot; 1.0000&lt;br /&gt;
  &amp;quot;modulation time&amp;quot; 0.2500&lt;br /&gt;
  &amp;quot;modulation depth&amp;quot; 0.0000&lt;br /&gt;
  &amp;quot;air absorption hf&amp;quot; -5.0000&lt;br /&gt;
  &amp;quot;hf reference&amp;quot; 5000.0000&lt;br /&gt;
  &amp;quot;lf reference&amp;quot; 250.0000&lt;br /&gt;
  &amp;quot;room rolloff factor&amp;quot; 0.0000&lt;br /&gt;
  &amp;quot;flags&amp;quot; 56&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And here is an artificial example of Version 2 definitions:&lt;br /&gt;
&lt;br /&gt;
  eaxreverb &amp;quot;myweirdstreets&amp;quot; {&lt;br /&gt;
    reflections_gain 0.5&lt;br /&gt;
    reflections_delay 0.0050&lt;br /&gt;
    late_reverb_gain 2.5&lt;br /&gt;
    late_reverb_delay 0.050&lt;br /&gt;
    echo_time 0.25&lt;br /&gt;
    echo_depth 0.9000&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
What does all this mean? &lt;br /&gt;
&lt;br /&gt;
There is a lot of sound design stuff that one could make guesses at if you&#039;ve ever used a reverb plugin in any sort of sound editing program. hf = high frequency, lf = low frequency, etc.&lt;br /&gt;
&lt;br /&gt;
A proper explanation of the parameters is given below.&lt;br /&gt;
&lt;br /&gt;
== Locations ==&lt;br /&gt;
Each reverb zone definition starts with a line which specifies to which location it must be applied:&lt;br /&gt;
&lt;br /&gt;
 reverb &amp;quot;&amp;lt;name of the location area you want to apply this to&amp;gt;&amp;quot;&lt;br /&gt;
 {&lt;br /&gt;
     //... (settings)&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Information about locations and how to set them up is available in another article: [[Location Settings #The Location Entities]].&lt;br /&gt;
Reverb zones use exactly the same locations as the ones which are used to specify per-area ambient sounds.&lt;br /&gt;
You should name every info_location entity, i.e. provide a &amp;quot;&amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt;&amp;quot; spawnarg for it. This is the name used in reverb zone definitions.&lt;br /&gt;
&lt;br /&gt;
As of TDM 2.06, you can&#039;t use capital letters in the name of your location entity or reverb zone. This may or may not change in the future.&lt;br /&gt;
&lt;br /&gt;
Here is an example of an entity which defines &amp;quot;canal_tunnel&amp;quot; location:&lt;br /&gt;
&lt;br /&gt;
 //======================= from volta_v1.map ====================&lt;br /&gt;
 // entity 3532&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;classname&amp;quot; &amp;quot;info_location&amp;quot;&lt;br /&gt;
   &amp;quot;name&amp;quot; &amp;quot;canal_tunnel&amp;quot;             //this is the name used&lt;br /&gt;
   &amp;quot;ambient&amp;quot; &amp;quot;snd_streets&amp;quot;&lt;br /&gt;
   &amp;quot;ambient_light&amp;quot; &amp;quot;0.04 0.03 0.02&amp;quot;&lt;br /&gt;
   &amp;quot;ambient_light_dynamic&amp;quot; &amp;quot;0.01 0.01 0.01&amp;quot;&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And this is the EFX effect (reverb zone) for it:&lt;br /&gt;
&lt;br /&gt;
 //======================= from volta_v1.efx ====================&lt;br /&gt;
 reverb &amp;quot;canal_tunnel&amp;quot; {             //name put to here&lt;br /&gt;
   &amp;quot;environment&amp;quot; 22&lt;br /&gt;
   &amp;quot;environment size&amp;quot; 1.8000&lt;br /&gt;
   &amp;quot;environment diffusion&amp;quot; 1.0000&lt;br /&gt;
   &amp;quot;room&amp;quot; -1000&lt;br /&gt;
   &amp;quot;room hf&amp;quot; -4000&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
During playing, the engine prints a message whenever the player&#039;s location changes.&lt;br /&gt;
It allows you to check if you have set up locations properly.&lt;br /&gt;
For instance, here are console messages showing a proper EFX location change:&lt;br /&gt;
&lt;br /&gt;
 Switching to EFX &#039;canal_tunnel&#039; (#295)&lt;br /&gt;
 Changed location from &#039;canal_streets&#039; to &#039;canal_tunnel&#039;.&lt;br /&gt;
&lt;br /&gt;
It is also possible to specify portal-area number instead of location name in the reverb zone definition.&lt;br /&gt;
The portal-area number is listed in the .proc file, which is created in the dmap process, in the format of &amp;lt;tt&amp;gt;_area&amp;lt;num&amp;gt;&amp;lt;/tt&amp;gt; (where &amp;lt;num&amp;gt; is the portal area number), e.g. &amp;lt;tt&amp;gt;_area15&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&#039;&#039;&#039;Beware:&#039;&#039;&#039; this functionality exists for fast hacking only! Do not release a mission with portal-area numbers in .efx file!&lt;br /&gt;
The main reason to avoid it is that portal-area numbers are auto-generated, so minor changes in your mission can change all of them.&lt;br /&gt;
&lt;br /&gt;
Finally, there is a &amp;quot;default&amp;quot; reverb environment which is used for any area in the map which does not have reverb information specified.&lt;br /&gt;
&lt;br /&gt;
The order that the sound system checks for reverb data is: area number -&amp;gt; location name -&amp;gt; default.&lt;br /&gt;
&lt;br /&gt;
== Changes during playing ==&lt;br /&gt;
Type &amp;quot;&amp;lt;tt&amp;gt;reloadSounds&amp;lt;/tt&amp;gt;&amp;quot; command into game console in order to reload EFX definitions.&lt;br /&gt;
&lt;br /&gt;
So when you experiment with EFX, execute this command after each tweak to EFX file to hear the difference immediately.&lt;br /&gt;
&lt;br /&gt;
== Suppress effect ==&lt;br /&gt;
Sometimes you want to disable EFX effect on a specific sound.&lt;br /&gt;
A typical example is when you have a voice in player&#039;s head, which must not depend on player&#039;s physical environment.&lt;br /&gt;
Another case is when some sound already has reverb baked in, so you don&#039;t what to double-reverb it. Although the best practice is to use sound samples without embedded reverb, combined with proper EFX definitions.&lt;br /&gt;
&lt;br /&gt;
You can disable all EFX effects on one specific sound shader by adding &amp;quot;&amp;lt;tt&amp;gt;no_efx&amp;lt;/tt&amp;gt;&amp;quot; keyword to its body.&lt;br /&gt;
For instance, here is how non-EFX version of blackjack unsheathing looks like:&lt;br /&gt;
 blackjack_unsheath&lt;br /&gt;
 {&lt;br /&gt;
   description &amp;quot;Made by pakmannen&amp;quot;&lt;br /&gt;
   sound/sfx/tools/melee/blackjack_unsheath.ogg&lt;br /&gt;
   no_efx                       //do NOT apply EFX to this sound&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note that if you change sound shaders, writing &amp;quot;&amp;lt;tt&amp;gt;reloadDecls&amp;lt;/tt&amp;gt;&amp;quot; in TDM game console is enough to reload them.&lt;br /&gt;
&lt;br /&gt;
There are a lot of stock sounds in TDM which should not be affected by EFX effects.&lt;br /&gt;
Starting from TDM 2.07, the corresponding core sounds are marked with &amp;quot;&amp;lt;tt&amp;gt;no_efx&amp;lt;/tt&amp;gt;&amp;quot; keyword (see issue [http://bugs.thedarkmod.com/view.php?id=4688 4688]).&lt;br /&gt;
If you discover any core sound which is affected by EFX while you believe it should not, start a discussion on forums.&lt;br /&gt;
&lt;br /&gt;
=Environment properties=&lt;br /&gt;
&lt;br /&gt;
== New properties (Version 2) ==&lt;br /&gt;
&lt;br /&gt;
With Version 2 of EFX file, the set of supported properties exactly matches the set of properties defined in OpenAL EFX for the &amp;quot;EAX Reverb&amp;quot; effect.&lt;br /&gt;
Note that EFX defines several types of effects, including &amp;quot;EAX Reverb&amp;quot;, &amp;quot;Standard Reverb&amp;quot;, &amp;quot;Chorus&amp;quot;, &amp;quot;Distortion&amp;quot;, &amp;quot;Echo&amp;quot;, &amp;quot;Flanger&amp;quot;, etc.&lt;br /&gt;
Only the first one is important, ignore all the rest (including the so-called &amp;quot;Standard Reverb&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
The detailed description of all the properties is given in &amp;quot;Appendix 1 – Effect property descriptions&amp;quot; of the [https://usermanual.wiki/Pdf/Effects20Extension20Guide.90272296/view#95 OpenAL Effects Extension Guide](pages 95-101).&lt;br /&gt;
The short list is also available in a table on [https://usermanual.wiki/Pdf/Effects20Extension20Guide.90272296/view#66 page 66 of the guide]:&lt;br /&gt;
&lt;br /&gt;
[[File:Eaxreverb_properties_screenshot.png|500px]]&lt;br /&gt;
&lt;br /&gt;
The only difference is that the property names in the guide have the &amp;lt;tt&amp;gt;AL_EAXREVERB_&amp;lt;/tt&amp;gt; prefix, while in TDM definitions this prefix is removed.&lt;br /&gt;
&lt;br /&gt;
== Presets (Version 2) ==&lt;br /&gt;
Presets can be set in 2 ways:&lt;br /&gt;
* in the .efx file&lt;br /&gt;
* the efx_preset spawnarg on the location entity for the location where you want to use the effect (since TDM 2.13)&lt;br /&gt;
&lt;br /&gt;
=== File Method ===&lt;br /&gt;
&lt;br /&gt;
There is one special property &amp;lt;tt&amp;gt;PRESET&amp;lt;/tt&amp;gt;, which is not present in the EFX guide.&lt;br /&gt;
This property accepts the name of the preset which you want to use:&lt;br /&gt;
&lt;br /&gt;
 eaxreverb &amp;quot;myclassroom&amp;quot; {&lt;br /&gt;
   preset auditorium&lt;br /&gt;
 }&lt;br /&gt;
 eaxreverb &amp;quot;mycave&amp;quot; {&lt;br /&gt;
   preset cave&lt;br /&gt;
 }&lt;br /&gt;
 eaxreverb &amp;quot;mycorridor&amp;quot; {&lt;br /&gt;
   preset hallway&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
If you specify the preset like this, the values for all the reverb properties will be taken from the specified preset.&lt;br /&gt;
Additionally, you can override values of some properties if you define them manually &#039;&#039;&#039;after&#039;&#039;&#039; defining the preset.&lt;br /&gt;
&lt;br /&gt;
The preset property also accepts index of preset. Don&#039;t use indices for anything except experimentation, since they may change in future.&lt;br /&gt;
&lt;br /&gt;
=== Location Entity Method ===&lt;br /&gt;
On the location entity where you want to use the preset, set the spawnarg efx_preset to the value of the preset.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
efx_preset    CITY_SUBWAY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that both the configuration file and the location entity spawnarg can be used simultaneously.  In case that both are set for a single location, the spawnarg value will take precedence.&lt;br /&gt;
&lt;br /&gt;
=== Preset Values ===&lt;br /&gt;
The presets were taken from OpenAL-Soft implementation which TDM uses.&lt;br /&gt;
Here is the full list of preset names:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;height:350px; overflow:scroll;&amp;quot;&amp;gt;&lt;br /&gt;
GENERIC&lt;br /&gt;
PADDEDCELL&lt;br /&gt;
ROOM&lt;br /&gt;
BATHROOM&lt;br /&gt;
LIVINGROOM&lt;br /&gt;
STONEROOM&lt;br /&gt;
AUDITORIUM&lt;br /&gt;
CONCERTHALL&lt;br /&gt;
CAVE&lt;br /&gt;
ARENA&lt;br /&gt;
HANGAR&lt;br /&gt;
CARPETEDHALLWAY&lt;br /&gt;
HALLWAY&lt;br /&gt;
STONECORRIDOR&lt;br /&gt;
ALLEY&lt;br /&gt;
FOREST&lt;br /&gt;
CITY&lt;br /&gt;
MOUNTAINS&lt;br /&gt;
QUARRY&lt;br /&gt;
PLAIN&lt;br /&gt;
PARKINGLOT&lt;br /&gt;
SEWERPIPE&lt;br /&gt;
UNDERWATER&lt;br /&gt;
DRUGGED&lt;br /&gt;
DIZZY&lt;br /&gt;
PSYCHOTIC&lt;br /&gt;
CASTLE_SMALLROOM&lt;br /&gt;
CASTLE_SHORTPASSAGE&lt;br /&gt;
CASTLE_MEDIUMROOM&lt;br /&gt;
CASTLE_LARGEROOM&lt;br /&gt;
CASTLE_LONGPASSAGE&lt;br /&gt;
CASTLE_HALL&lt;br /&gt;
CASTLE_CUPBOARD&lt;br /&gt;
CASTLE_COURTYARD&lt;br /&gt;
CASTLE_ALCOVE&lt;br /&gt;
FACTORY_SMALLROOM&lt;br /&gt;
FACTORY_SHORTPASSAGE&lt;br /&gt;
FACTORY_MEDIUMROOM&lt;br /&gt;
FACTORY_LARGEROOM&lt;br /&gt;
FACTORY_LONGPASSAGE&lt;br /&gt;
FACTORY_HALL&lt;br /&gt;
FACTORY_CUPBOARD&lt;br /&gt;
FACTORY_COURTYARD&lt;br /&gt;
FACTORY_ALCOVE&lt;br /&gt;
ICEPALACE_SMALLROOM&lt;br /&gt;
ICEPALACE_SHORTPASSAGE&lt;br /&gt;
ICEPALACE_MEDIUMROOM&lt;br /&gt;
ICEPALACE_LARGEROOM&lt;br /&gt;
ICEPALACE_LONGPASSAGE&lt;br /&gt;
ICEPALACE_HALL&lt;br /&gt;
ICEPALACE_CUPBOARD&lt;br /&gt;
ICEPALACE_COURTYARD&lt;br /&gt;
ICEPALACE_ALCOVE&lt;br /&gt;
SPACESTATION_SMALLROOM&lt;br /&gt;
SPACESTATION_SHORTPASSAGE&lt;br /&gt;
SPACESTATION_MEDIUMROOM&lt;br /&gt;
SPACESTATION_LARGEROOM&lt;br /&gt;
SPACESTATION_LONGPASSAGE&lt;br /&gt;
SPACESTATION_HALL&lt;br /&gt;
SPACESTATION_CUPBOARD&lt;br /&gt;
SPACESTATION_ALCOVE&lt;br /&gt;
WOODEN_SMALLROOM&lt;br /&gt;
WOODEN_SHORTPASSAGE&lt;br /&gt;
WOODEN_MEDIUMROOM&lt;br /&gt;
WOODEN_LARGEROOM&lt;br /&gt;
WOODEN_LONGPASSAGE&lt;br /&gt;
WOODEN_HALL&lt;br /&gt;
WOODEN_CUPBOARD&lt;br /&gt;
WOODEN_COURTYARD&lt;br /&gt;
WOODEN_ALCOVE&lt;br /&gt;
SPORT_EMPTYSTADIUM&lt;br /&gt;
SPORT_SQUASHCOURT&lt;br /&gt;
SPORT_SMALLSWIMMINGPOOL&lt;br /&gt;
SPORT_LARGESWIMMINGPOOL&lt;br /&gt;
SPORT_GYMNASIUM&lt;br /&gt;
SPORT_FULLSTADIUM&lt;br /&gt;
SPORT_STADIUMTANNOY&lt;br /&gt;
PREFAB_WORKSHOP&lt;br /&gt;
PREFAB_SCHOOLROOM&lt;br /&gt;
PREFAB_PRACTISEROOM&lt;br /&gt;
PREFAB_OUTHOUSE&lt;br /&gt;
PREFAB_CARAVAN&lt;br /&gt;
DOME_TOMB&lt;br /&gt;
PIPE_SMALL&lt;br /&gt;
DOME_SAINTPAULS&lt;br /&gt;
PIPE_LONGTHIN&lt;br /&gt;
PIPE_LARGE&lt;br /&gt;
PIPE_RESONANT&lt;br /&gt;
OUTDOORS_BACKYARD&lt;br /&gt;
OUTDOORS_ROLLINGPLAINS&lt;br /&gt;
OUTDOORS_DEEPCANYON&lt;br /&gt;
OUTDOORS_CREEK&lt;br /&gt;
OUTDOORS_VALLEY&lt;br /&gt;
MOOD_HEAVEN&lt;br /&gt;
MOOD_HELL&lt;br /&gt;
MOOD_MEMORY&lt;br /&gt;
DRIVING_COMMENTATOR&lt;br /&gt;
DRIVING_PITGARAGE&lt;br /&gt;
DRIVING_INCAR_RACER&lt;br /&gt;
DRIVING_INCAR_SPORTS&lt;br /&gt;
DRIVING_INCAR_LUXURY&lt;br /&gt;
DRIVING_FULLGRANDSTAND&lt;br /&gt;
DRIVING_EMPTYGRANDSTAND&lt;br /&gt;
DRIVING_TUNNEL&lt;br /&gt;
CITY_STREETS&lt;br /&gt;
CITY_SUBWAY&lt;br /&gt;
CITY_MUSEUM&lt;br /&gt;
CITY_LIBRARY&lt;br /&gt;
CITY_UNDERPASS&lt;br /&gt;
CITY_ABANDONED&lt;br /&gt;
DUSTYROOM&lt;br /&gt;
CHAPEL&lt;br /&gt;
SMALLWATERROOM                              &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Their definitions can be seen in [https://github.com/kcat/openal-soft/blob/master/include/AL/efx-presets.h efx-presets.h] from OpenAL-Soft source code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-expandtext=&amp;quot;Show&amp;quot; data-collapsetext=&amp;quot;Hide&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Legacy info (Version 1) ==&lt;br /&gt;
&lt;br /&gt;
This information is from the old official EAX 2.0 documentation, although some properties may have changed in scope and focus from EAX 2.0 to EAX 4.0. One can assume that the properties serve the same general purpose and that each property&#039;s value bounds are approximately the same.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;environment&#039;&#039;&#039; - Unknown. Likely sets the room to one of an unknown number of environment presets.&lt;br /&gt;
* &#039;&#039;&#039;environment size&#039;&#039;&#039; - The Environment Size property sets the apparent size of the surrounding “room.” The value of Environment Size can be considered a characteristic dimension of the room expressed in meters. Scaling Environment Size is equivalent to scaling all dimensions of the room by the same factor. Value type is FLOAT; value range is 1.0 to 100.0, expressed in linear meters.&lt;br /&gt;
* &#039;&#039;&#039;environment diffusion&#039;&#039;&#039; - The Environment Diffusion property controls the echo density in the reverberation decay. Reducing diffusion gives the reverberation a more “grainy” character that is especially noticeable with percussive sound sources. If you set a diffusion value of 0.0, the later reverberation sounds like a succession of distinct echoes. Value type is FLOAT; value range is 0.0 to 1.0, expressed in a linear multiplier value.&lt;br /&gt;
* &#039;&#039;&#039;room&#039;&#039;&#039; - The Room property is the master volume control for the reflected sound (both early reflections and reverberation) that EAX adds to all sound sources. It sets the maximum amount of reflections and reverberation added to the sound mix in the primary buffer (the listener). Value is LONG; value range is -10000 to 0, expressed in hundredths of one decibel (-100 dB to 0 dB).&lt;br /&gt;
* &#039;&#039;&#039;room hf&#039;&#039;&#039; - The Room HF property further tweaks reflected sound by attenuating it at high frequencies. It controls a low-pass filter that applies globally to the reflected sound of all sound sources. The exact qualities of this low-pass filter -- its frequency and its bandwidth (Q) -- are unknown. Value type is LONG; value range is -10000 to 0, expressed in hundredths of one decibel (-100 dB to 0 dB).&lt;br /&gt;
* &#039;&#039;&#039;room lf&#039;&#039;&#039; - Undocumented. Assumably, the Room LF property applies a high-pass to reflected sound in much the same way as Room HF applies low-pass. The value type and range is unknown, but is likely LONG, must be between -10000 and 0 and is expressed in hundredths of one decibel.&lt;br /&gt;
* &#039;&#039;&#039;decay time&#039;&#039;&#039; - The Decay Time property sets the reverberation decay time, or the time in which reverberation is diminished. It ranges from 0.1 (typically a small room with very dead surfaces) to 20.0 (typically a large room with very live surfaces). Value is FLOAT; value range is 0.1 to 20.0, expressed in seconds.&lt;br /&gt;
* &#039;&#039;&#039;decay hf ratio&#039;&#039;&#039; - The Decay HF Ratio property sets the spectral quality of the Decay Time parameter. It is the ratio of high-frequency decay time relative to the time set by Decay Time. The Decay HF Ratio value 1.0 is neutral: the decay time is equal for all frequencies. As Decay HF Ratio increases above 1.0, the high-frequency decay time increases so it’s longer than the decay time at low frequencies. You hear a more brilliant reverberation with a longer decay at high frequencies. As the Decay HF Ratio value decreases below 1.0, the high-frequency decay time decreases so it’s shorter than the decay time of the low frequencies. You hear a more natural reverberation. Value is FLOAT; value range is 0.1 to 20.0, expressed in a linear multiplier variable.&lt;br /&gt;
* &#039;&#039;&#039;decay lf ratio&#039;&#039;&#039; - Undocumented. It&#039;s likely best to leave the value at 1.0, though the value&#039;s type and range is probably the same as the Decay HF Ratio property.&lt;br /&gt;
* &#039;&#039;&#039;reflections&#039;&#039;&#039; - The Reflections property controls the overall amount of initial reflections relative to the Room property. The value of Reflections ranges from a maximum of 10 dB to a minimum of -100 dB (no initial reflections at all), and is corrected by the value of the Room property. The Reflections property does not affect the subsequent reverberation decay. You can increase the amount of initial reflections to simulate a more narrow space or closer walls, especially effective if you associate the initial reflections increase with a reduction in reflections delays by lowering the value of the Reflection Delay property. To simulate open or semi-open environments, you can maintain the amount of early reflections while reducing the value of the Reverb property, which controls later reflections. Value type is LONG; value range is -10000 to 1000, expressed in hundredths of one decibel (-100 dB to -10 dB).&lt;br /&gt;
* &#039;&#039;&#039;reflections delay&#039;&#039;&#039; - The Reflections Delay property is the amount of delay between the arrival time of the direct path from the source to the first reflection from the source. It ranges from 0 to 300 milliseconds. You can reduce or increase Reflections Delay to simulate closer or more distant reflective surfaces—and therefore control the perceived size of the room. Value is FLOAT; value range is 0.0 to 0.3, expressed in seconds (0 to 300 milliseconds).&lt;br /&gt;
* &#039;&#039;&#039;reflections pan&#039;&#039;&#039; - Undocumented. Three values are specified which may correspond to a generic &amp;quot;front&amp;quot;, &amp;quot;side&amp;quot; and &amp;quot;back/rear&amp;quot; configuration to control the directivity of early reflections in a 7.1 surround matrix. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;reverb&#039;&#039;&#039; - The Reverb property controls the overall amount of later reverberation relative to the Room property. (The Room property sets the overall amount of both initial reflections and later reverberation.) The value of Reverb ranges from a maximum of 20 dB to a minimum of -100 dB (no late reverberation at all). Value is LONG; value range is -10000 to 2000, expressed in hundredths of a decibel (-100 dB to 20 dB).&lt;br /&gt;
* &#039;&#039;&#039;reverb delay&#039;&#039;&#039; - The Reverb Delay property defines the begin time of the late reverberation relative to the time of the initial reflection (the first of the early reflections). It ranges from 0 to 100 milliseconds. Reducing or increasing Reverb Delay is useful for simulating a smaller or larger room. Value is FLOAT; value range is 0.0 to 0.1, expressed in seconds (0 to 100 milliseconds).&lt;br /&gt;
* &#039;&#039;&#039;reverb pan&#039;&#039;&#039; - Undocumented. Three values are specified which may correspond to a generic &amp;quot;front&amp;quot;, &amp;quot;side&amp;quot; and &amp;quot;back/rear&amp;quot; configuration to control the directivity of reverberation in a 7.1 surround matrix. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;echo time&#039;&#039;&#039; - Undocumented. Likely controls the decay time of echoes, or late reflections. A value of 0.1 likely presents a natural amount of echo, while increasing the value likely causes a &amp;quot;Grand Canyon&amp;quot; effect. Value type is likely FLOAT; value range is likely between 0.075 and 0.25, expressed in seconds.&lt;br /&gt;
* &#039;&#039;&#039;echo depth&#039;&#039;&#039; - Undocumented. May control directionality or tonal qualities of echoes arriving at the listener. Probably best to leave at 1.0. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;modulation time&#039;&#039;&#039; - Undocumented. Unknown purpose. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;modulation depth&#039;&#039;&#039; - Undocumented. Unknown purpose. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;air absorption hf&#039;&#039;&#039; - The Air Absorption HF property controls the distance-dependent attenuation at high frequencies caused by the propagation medium. It applies to both the direct path and reflected sound. You can use Air Absorption HF to simulate sound transmission through foggy air, dry air, smoky atmosphere, and so on. The default value is -0.05 dB per meter, which roughly corresponds to typical condition of atmospheric humidity, temperature, and so on. Lowering the value simulates a more absorbent medium (more humidity in the air, for example); raising the value simulates a less absorbent medium (dry desert air, for example). Value is FLOAT; value range is -100.0 to 0.0, expressed in hundredths of one decibel per meter (-1 dB to 0 dB). Default value is -5.0, which corresponds to -0.05 dB per meter attenuation.&lt;br /&gt;
* &#039;&#039;&#039;hf reference&#039;&#039;&#039; - Likely defines the frequency used for low-pass filters. Value is likely LONG; value range is likely between 0.0 and 20000.0, expressed in Hz. This value is probably best left at 5000.0.&lt;br /&gt;
* &#039;&#039;&#039;lf reference&#039;&#039;&#039; - Likely defines the frequency used for high-pass filters. Value is likely LONG; value range is likely between 0.0 and 20000.0, expressed in Hz. This value is probably best left at 250.0.&lt;br /&gt;
* &#039;&#039;&#039;room rolloff factor&#039;&#039;&#039; - The Room Rolloff property is one of two methods available in EAX to attenuate the reflected sound (containing both reflections, reverberation and echoes) according to source-listener distance. Value type is FLOAT; value range is 0.0 to 10.0, expressed in a linear multiplier value. It&#039;s recommended that users use 0.0, as id Software did not deviate from this value with Doom 3.&lt;br /&gt;
* &#039;&#039;&#039;flags&#039;&#039;&#039; - The Flags property is intended to control the relationship of high-level EAX properties to low-level properties. If certain EAX flags are set by setting the Flags property to a particular value, the setting of high-level properties is supposed to control the values of low-level properties based upon a defined scale, overriding specified values. In EAX 2.0, the value type is DWORD, whereas in Doom 3, it appears to be INT or some other type commonly used to store numeric values. In Doom 3, common values are 0, 2, 15, 31, 32, 56 and 63, but no documentation details what these values correspond to. If users wish to experiment with the Flags property, it is recommended that they choose from one of the above values. For reference, here is a table with the counts for each flag value as used in Doom 3:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 0.5em; margin-left: 2em; border: 1px solid #a0a0a0; text-align: right; border-collapse: collapse;&amp;quot; cellpadding=&amp;quot;2&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Flag decimal&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Flag binary&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Count&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|00000000&lt;br /&gt;
|497&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|00000010&lt;br /&gt;
|6&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|00001110&lt;br /&gt;
|15&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|00001111&lt;br /&gt;
|94&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|31&lt;br /&gt;
|00011111&lt;br /&gt;
|511&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|32&lt;br /&gt;
|00100000&lt;br /&gt;
|247&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|56&lt;br /&gt;
|00111000&lt;br /&gt;
|59&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|63&lt;br /&gt;
|00111111&lt;br /&gt;
|168&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Design.&#039;&#039;&#039;&lt;br /&gt;
In terms of the actual sound design for the values you put into these variables, here is a general tutorial on reverb from FruityLoops (NOTE: This is for a music production plugin, some of these don&#039;t apply, it&#039;s just to give a general idea on what certain variables do):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Low Cut&#039;&#039;&#039; Adjusts the low cutoff frequency. Use this to remove low frequencies from the input signal before reverb is added. For example, if you are adding reverb to, say a drum track, you might want to remove some of the &#039;rumble&#039; from the bass drum by attenuating the bass frequencies. Setting this parameter to the minimum value will bypass the Low Cut filter, displaying OFF in the value field.&lt;br /&gt;
* &#039;&#039;&#039;High Cut&#039;&#039;&#039; - Similar to the Low Cut, this adjusts the high cutoff frequency. Use this to remove high frequencies from the input signal.&lt;br /&gt;
* &#039;&#039;&#039;Predelay&#039;&#039;&#039; - Controls the delay time between the direct input signal and the first reverb reflection. This should be set to modest values for small rooms, and can be increased in relation to increases in room size. &#039;&#039;&#039;Predelay&#039;&#039;&#039; creates a slap-back echo effect that can both add atmosphere and muffle the signal, so use it wisely.&lt;br /&gt;
* &#039;&#039;&#039;Room Size&#039;&#039;&#039; - Use this to set the size of the virtual room where the reverb is created. The Room Size should be adjusted according to the decay time. Small rooms sound better with a short decay time, large rooms sound better with longer reverb times.&lt;br /&gt;
* &#039;&#039;&#039;Diffusion&#039;&#039;&#039; - Controls the density of the reflections bouncing off the walls of the virtual room. A low diffusion setting makes the reflections sound more distinct, like closely spaced echoes. A high diffusion setting creates reflections so close they sound more like noise, where no echoes can be distinguished.&lt;br /&gt;
* &#039;&#039;&#039;Color&#039;&#039;&#039; - The Color parameter is used for adjusting the decay time of the bass frequencies of the signal. This allows you to change the overall perceived mood or &#039;sound&#039; of the virtual room. A bright room has a low bass response, while warm rooms have a higher bass response. In a flat room, the response of the bass is equal to the general frequency response. Color has five settings: Brighter, Bright, Flat, Warm, Warmer.&lt;br /&gt;
* &#039;&#039;&#039;Decay&#039;&#039;&#039; - Controls the decay time of the reverb, the time it takes for the signal to decay to -60dB (1/1000 of the maximum amplitude). Use low decay times for small rooms or boxes, and long decay times for large rooms, halls or churches. You should also make sure that the Room Size parameter has an appropriate value.&lt;br /&gt;
* &#039;&#039;&#039;High Damping&#039;&#039;&#039; - This parameter allows you to adjust damping of the high frequencies in the reverb signal over time. Damping refers to the high frequencies being attenuated and dying out. This causes the sound to become gradually muffled and warm like it is being absorbed in the room. Setting this parameter to the maximum value will bypass the High Damping, displaying OFF in the value field.&lt;br /&gt;
* &#039;&#039;&#039;Dry&#039;&#039;&#039; - Sets the relative dry output level.&lt;br /&gt;
* &#039;&#039;&#039;Reverb&#039;&#039;&#039; - Sets the relative reverb (wet) signal level.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Error Check=&lt;br /&gt;
If you modified the presets in your EFX file, you can check for errors ingame. Load your map and open the console. Type &#039;&#039;reloadSounds&#039;&#039;, this will trigger the reload of the EFX used in your map and print out the vars which cause an error (like a value exceeding the maximum range). Note that if your EFX files contain errors, this will make the game ignore the EFX settings you chose. &lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
See the &amp;quot;EFX Reverb&amp;quot; column of &#039;&#039;&#039;[[Fan_Missions_for_The_Dark_Mod|Fan Missions page]]&#039;&#039;&#039;. Missions with &amp;quot;Yes&amp;quot; have EFX Reverb. &lt;br /&gt;
&amp;lt;br&amp;gt;Most missions use v2.0 presets but a few missions such as &amp;quot;Volta and the Stone&amp;quot; and Behind Closed Doors use v1.0 settings.&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
The Version 2 definitions were implemented due to [http://bugs.thedarkmod.com/view.php?id=4815 issue 4815], it has some brief explanation.&lt;br /&gt;
&lt;br /&gt;
A tutorial based around EFX can be found [http://forums.thedarkmod.com/topic/19205-getting-started-with-the-efx-room-reverb-system-wip/ here]&lt;br /&gt;
&lt;br /&gt;
An old demonstration map of EAX in TDM is included [http://forums.thedarkmod.com/topic/11045-environmental-audio-extensions-eax-in-tdm/ here]&lt;br /&gt;
&lt;br /&gt;
A discussion about no_efx is [http://forums.thedarkmod.com/topic/19213-efx-discussion here]&lt;br /&gt;
&lt;br /&gt;
The first version of this article was written by Ishtvan [https://forums.thedarkmod.com/index.php?/topic/2071-setting-reverb-data-in-new-soundengine-wiki/ here]&lt;br /&gt;
&lt;br /&gt;
[[Category:Sound]]&lt;br /&gt;
[[Category:Tutorial]]&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=Setting_Reverb_Data_of_Rooms_(EAX)&amp;diff=33798</id>
		<title>Setting Reverb Data of Rooms (EAX)</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=Setting_Reverb_Data_of_Rooms_(EAX)&amp;diff=33798"/>
		<updated>2025-01-11T21:00:52Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: /* Location Entity Method */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
This document will attempt to explain how to set the new EFX settings in your rooms when mapping.&lt;br /&gt;
&lt;br /&gt;
Previously these settings were known as EAX settings, and required EAX 4.0-compatible sound card.&lt;br /&gt;
In TDM 2.06, EAX technology was completely replaced with OpenAL EFX, which is now processed in software (by [https://github.com/kcat/openal-soft openal-soft]) without any requirements on sound card.&lt;br /&gt;
&lt;br /&gt;
= General =&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
&lt;br /&gt;
EFX for a fan mission can be configured with or without a configuration file.  However, fileless configuration is only supported for [[Setting_Reverb_Data_of_Rooms_(EAX)#Presets_(Version_2)|EFX presets]].&lt;br /&gt;
&lt;br /&gt;
== EFX file ==&lt;br /&gt;
The EFX info for a map should be stored in the file &amp;quot;&amp;lt;tt&amp;gt;efxs/&amp;lt;mapname&amp;gt;.efx&amp;lt;/tt&amp;gt;&amp;quot;, where &amp;lt;mapname&amp;gt; is the name of your .map file (without extension).&lt;br /&gt;
&lt;br /&gt;
In order to check that you have put the file into right location, start your mission in game.&lt;br /&gt;
If TDM manages to load your efx file, then you will see the following message in console:&lt;br /&gt;
 sound: found efxs/&amp;lt;mapname&amp;gt;.efx&lt;br /&gt;
If you failed something, then you will see a bit different message there:&lt;br /&gt;
 sound: missing efxs/&amp;lt;mapname&amp;gt;.efx&lt;br /&gt;
In both cases some additional diagnostic messages can be present nearby.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; you must enable &amp;quot;&amp;lt;tt&amp;gt;OpenAL EFX&amp;lt;/tt&amp;gt;&amp;quot; in sound settings in the main menu, otherwise TDM won&#039;t even try to load the efx file.&lt;br /&gt;
&lt;br /&gt;
It is a plain text file, so you can open it up in your text editor of choice.&lt;br /&gt;
&lt;br /&gt;
Any EFX file must start with a header which specifies its &#039;&#039;&#039;version&#039;&#039;&#039;:&lt;br /&gt;
 Version 2&lt;br /&gt;
If you forget this line, then your EFX file will &#039;&#039;&#039;not&#039;&#039;&#039; be loaded.&lt;br /&gt;
The following versions are supported:&lt;br /&gt;
* &amp;lt;tt&amp;gt;Version 1&amp;lt;/tt&amp;gt; was supported by TDM from the very beginning. It uses some non-standard terms and quantities, which makes it hard to work with.&lt;br /&gt;
* &amp;lt;tt&amp;gt;Version 2&amp;lt;/tt&amp;gt; was added in TDM 2.07. It uses the parameters from OpenAL EFX and supports a lot of presets. &#039;&#039;&#039;Recommended for all new missions.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The rest of the file consists of separate blocks, one for each &amp;quot;reverb zone&amp;quot;.&lt;br /&gt;
Each block must start with &amp;lt;tt&amp;gt;reverb&amp;lt;/tt&amp;gt; keyword for Version 1 definitions, and &amp;lt;tt&amp;gt;eaxreverb&amp;lt;/tt&amp;gt; keyword for Version 2 definitions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here is an example of such block from mars_city1.efx of the original Doom 3 game (Version 1):&lt;br /&gt;
&lt;br /&gt;
 // reverb maintenance&lt;br /&gt;
 reverb &amp;quot;maintenance&amp;quot; {&lt;br /&gt;
  &amp;quot;environment&amp;quot; 26&lt;br /&gt;
  &amp;quot;environment size&amp;quot; 5.0670&lt;br /&gt;
  &amp;quot;environment diffusion&amp;quot; 0.6030&lt;br /&gt;
  &amp;quot;room&amp;quot; -411&lt;br /&gt;
  &amp;quot;room hf&amp;quot; -685&lt;br /&gt;
  &amp;quot;room lf&amp;quot; 0&lt;br /&gt;
  &amp;quot;decay time&amp;quot; 1.7360&lt;br /&gt;
  &amp;quot;decay hf ratio&amp;quot; 0.8030&lt;br /&gt;
  &amp;quot;decay lf ratio&amp;quot; 1.0000&lt;br /&gt;
  &amp;quot;reflections&amp;quot; 96&lt;br /&gt;
  &amp;quot;reflections delay&amp;quot; 0.0080&lt;br /&gt;
  &amp;quot;reflections pan&amp;quot; 0.0000 0.0000 0.0000&lt;br /&gt;
  &amp;quot;reverb&amp;quot; 27&lt;br /&gt;
  &amp;quot;reverb delay&amp;quot; 0.0050&lt;br /&gt;
  &amp;quot;reverb pan&amp;quot; 0.0000 0.0000 0.0000&lt;br /&gt;
  &amp;quot;echo time&amp;quot; 0.0750&lt;br /&gt;
  &amp;quot;echo depth&amp;quot; 1.0000&lt;br /&gt;
  &amp;quot;modulation time&amp;quot; 0.2500&lt;br /&gt;
  &amp;quot;modulation depth&amp;quot; 0.0000&lt;br /&gt;
  &amp;quot;air absorption hf&amp;quot; -5.0000&lt;br /&gt;
  &amp;quot;hf reference&amp;quot; 5000.0000&lt;br /&gt;
  &amp;quot;lf reference&amp;quot; 250.0000&lt;br /&gt;
  &amp;quot;room rolloff factor&amp;quot; 0.0000&lt;br /&gt;
  &amp;quot;flags&amp;quot; 56&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And here is an artificial example of Version 2 definitions:&lt;br /&gt;
&lt;br /&gt;
  eaxreverb &amp;quot;myweirdstreets&amp;quot; {&lt;br /&gt;
    reflections_gain 0.5&lt;br /&gt;
    reflections_delay 0.0050&lt;br /&gt;
    late_reverb_gain 2.5&lt;br /&gt;
    late_reverb_delay 0.050&lt;br /&gt;
    echo_time 0.25&lt;br /&gt;
    echo_depth 0.9000&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
What does all this mean? &lt;br /&gt;
&lt;br /&gt;
There is a lot of sound design stuff that one could make guesses at if you&#039;ve ever used a reverb plugin in any sort of sound editing program. hf = high frequency, lf = low frequency, etc.&lt;br /&gt;
&lt;br /&gt;
A proper explanation of the parameters is given below.&lt;br /&gt;
&lt;br /&gt;
== Locations ==&lt;br /&gt;
Each reverb zone definition starts with a line which specifies to which location it must be applied:&lt;br /&gt;
&lt;br /&gt;
 reverb &amp;quot;&amp;lt;name of the location area you want to apply this to&amp;gt;&amp;quot;&lt;br /&gt;
 {&lt;br /&gt;
     //... (settings)&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Information about locations and how to set them up is available in another article: [[Location Settings #The Location Entities]].&lt;br /&gt;
Reverb zones use exactly the same locations as the ones which are used to specify per-area ambient sounds.&lt;br /&gt;
You should name every info_location entity, i.e. provide a &amp;quot;&amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt;&amp;quot; spawnarg for it. This is the name used in reverb zone definitions.&lt;br /&gt;
&lt;br /&gt;
As of TDM 2.06, you can&#039;t use capital letters in the name of your location entity or reverb zone. This may or may not change in the future.&lt;br /&gt;
&lt;br /&gt;
Here is an example of an entity which defines &amp;quot;canal_tunnel&amp;quot; location:&lt;br /&gt;
&lt;br /&gt;
 //======================= from volta_v1.map ====================&lt;br /&gt;
 // entity 3532&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;classname&amp;quot; &amp;quot;info_location&amp;quot;&lt;br /&gt;
   &amp;quot;name&amp;quot; &amp;quot;canal_tunnel&amp;quot;             //this is the name used&lt;br /&gt;
   &amp;quot;ambient&amp;quot; &amp;quot;snd_streets&amp;quot;&lt;br /&gt;
   &amp;quot;ambient_light&amp;quot; &amp;quot;0.04 0.03 0.02&amp;quot;&lt;br /&gt;
   &amp;quot;ambient_light_dynamic&amp;quot; &amp;quot;0.01 0.01 0.01&amp;quot;&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And this is the EFX effect (reverb zone) for it:&lt;br /&gt;
&lt;br /&gt;
 //======================= from volta_v1.efx ====================&lt;br /&gt;
 reverb &amp;quot;canal_tunnel&amp;quot; {             //name put to here&lt;br /&gt;
   &amp;quot;environment&amp;quot; 22&lt;br /&gt;
   &amp;quot;environment size&amp;quot; 1.8000&lt;br /&gt;
   &amp;quot;environment diffusion&amp;quot; 1.0000&lt;br /&gt;
   &amp;quot;room&amp;quot; -1000&lt;br /&gt;
   &amp;quot;room hf&amp;quot; -4000&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
During playing, the engine prints a message whenever the player&#039;s location changes.&lt;br /&gt;
It allows you to check if you have set up locations properly.&lt;br /&gt;
For instance, here are console messages showing a proper EFX location change:&lt;br /&gt;
&lt;br /&gt;
 Switching to EFX &#039;canal_tunnel&#039; (#295)&lt;br /&gt;
 Changed location from &#039;canal_streets&#039; to &#039;canal_tunnel&#039;.&lt;br /&gt;
&lt;br /&gt;
It is also possible to specify portal-area number instead of location name in the reverb zone definition.&lt;br /&gt;
The portal-area number is listed in the .proc file, which is created in the dmap process, in the format of &amp;lt;tt&amp;gt;_area&amp;lt;num&amp;gt;&amp;lt;/tt&amp;gt; (where &amp;lt;num&amp;gt; is the portal area number), e.g. &amp;lt;tt&amp;gt;_area15&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&#039;&#039;&#039;Beware:&#039;&#039;&#039; this functionality exists for fast hacking only! Do not release a mission with portal-area numbers in .efx file!&lt;br /&gt;
The main reason to avoid it is that portal-area numbers are auto-generated, so minor changes in your mission can change all of them.&lt;br /&gt;
&lt;br /&gt;
Finally, there is a &amp;quot;default&amp;quot; reverb environment which is used for any area in the map which does not have reverb information specified.&lt;br /&gt;
&lt;br /&gt;
The order that the sound system checks for reverb data is: area number -&amp;gt; location name -&amp;gt; default.&lt;br /&gt;
&lt;br /&gt;
== Changes during playing ==&lt;br /&gt;
Type &amp;quot;&amp;lt;tt&amp;gt;reloadSounds&amp;lt;/tt&amp;gt;&amp;quot; command into game console in order to reload EFX definitions.&lt;br /&gt;
&lt;br /&gt;
So when you experiment with EFX, execute this command after each tweak to EFX file to hear the difference immediately.&lt;br /&gt;
&lt;br /&gt;
== Suppress effect ==&lt;br /&gt;
Sometimes you want to disable EFX effect on a specific sound.&lt;br /&gt;
A typical example is when you have a voice in player&#039;s head, which must not depend on player&#039;s physical environment.&lt;br /&gt;
Another case is when some sound already has reverb baked in, so you don&#039;t what to double-reverb it. Although the best practice is to use sound samples without embedded reverb, combined with proper EFX definitions.&lt;br /&gt;
&lt;br /&gt;
You can disable all EFX effects on one specific sound shader by adding &amp;quot;&amp;lt;tt&amp;gt;no_efx&amp;lt;/tt&amp;gt;&amp;quot; keyword to its body.&lt;br /&gt;
For instance, here is how non-EFX version of blackjack unsheathing looks like:&lt;br /&gt;
 blackjack_unsheath&lt;br /&gt;
 {&lt;br /&gt;
   description &amp;quot;Made by pakmannen&amp;quot;&lt;br /&gt;
   sound/sfx/tools/melee/blackjack_unsheath.ogg&lt;br /&gt;
   no_efx                       //do NOT apply EFX to this sound&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note that if you change sound shaders, writing &amp;quot;&amp;lt;tt&amp;gt;reloadDecls&amp;lt;/tt&amp;gt;&amp;quot; in TDM game console is enough to reload them.&lt;br /&gt;
&lt;br /&gt;
There are a lot of stock sounds in TDM which should not be affected by EFX effects.&lt;br /&gt;
Starting from TDM 2.07, the corresponding core sounds are marked with &amp;quot;&amp;lt;tt&amp;gt;no_efx&amp;lt;/tt&amp;gt;&amp;quot; keyword (see issue [http://bugs.thedarkmod.com/view.php?id=4688 4688]).&lt;br /&gt;
If you discover any core sound which is affected by EFX while you believe it should not, start a discussion on forums.&lt;br /&gt;
&lt;br /&gt;
=Environment properties=&lt;br /&gt;
&lt;br /&gt;
== New properties (Version 2) ==&lt;br /&gt;
&lt;br /&gt;
With Version 2 of EFX file, the set of supported properties exactly matches the set of properties defined in OpenAL EFX for the &amp;quot;EAX Reverb&amp;quot; effect.&lt;br /&gt;
Note that EFX defines several types of effects, including &amp;quot;EAX Reverb&amp;quot;, &amp;quot;Standard Reverb&amp;quot;, &amp;quot;Chorus&amp;quot;, &amp;quot;Distortion&amp;quot;, &amp;quot;Echo&amp;quot;, &amp;quot;Flanger&amp;quot;, etc.&lt;br /&gt;
Only the first one is important, ignore all the rest (including the so-called &amp;quot;Standard Reverb&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
The detailed description of all the properties is given in &amp;quot;Appendix 1 – Effect property descriptions&amp;quot; of the [https://usermanual.wiki/Pdf/Effects20Extension20Guide.90272296/view#95 OpenAL Effects Extension Guide](pages 95-101).&lt;br /&gt;
The short list is also available in a table on [https://usermanual.wiki/Pdf/Effects20Extension20Guide.90272296/view#66 page 66 of the guide]:&lt;br /&gt;
&lt;br /&gt;
[[File:Eaxreverb_properties_screenshot.png|500px]]&lt;br /&gt;
&lt;br /&gt;
The only difference is that the property names in the guide have the &amp;lt;tt&amp;gt;AL_EAXREVERB_&amp;lt;/tt&amp;gt; prefix, while in TDM definitions this prefix is removed.&lt;br /&gt;
&lt;br /&gt;
== Presets (Version 2) ==&lt;br /&gt;
Presets can be set in 2 ways:&lt;br /&gt;
* in the .efx file&lt;br /&gt;
* the efx_preset spawnarg on the location entity for the location where you want to use the effect (since TDM 2.13)&lt;br /&gt;
&lt;br /&gt;
=== File Method ===&lt;br /&gt;
&lt;br /&gt;
There is one special property &amp;lt;tt&amp;gt;PRESET&amp;lt;/tt&amp;gt;, which is not present in the EFX guide.&lt;br /&gt;
This property accepts the name of the preset which you want to use:&lt;br /&gt;
&lt;br /&gt;
 eaxreverb &amp;quot;myclassroom&amp;quot; {&lt;br /&gt;
   preset auditorium&lt;br /&gt;
 }&lt;br /&gt;
 eaxreverb &amp;quot;mycave&amp;quot; {&lt;br /&gt;
   preset cave&lt;br /&gt;
 }&lt;br /&gt;
 eaxreverb &amp;quot;mycorridor&amp;quot; {&lt;br /&gt;
   preset hallway&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
If you specify the preset like this, the values for all the reverb properties will be taken from the specified preset.&lt;br /&gt;
Additionally, you can override values of some properties if you define them manually &#039;&#039;&#039;after&#039;&#039;&#039; defining the preset.&lt;br /&gt;
&lt;br /&gt;
The preset property also accepts index of preset. Don&#039;t use indices for anything except experimentation, since they may change in future.&lt;br /&gt;
&lt;br /&gt;
=== Location Entity Method ===&lt;br /&gt;
On the location entity where you want to use the preset, set the spawnarg efx_preset to the value of the preset.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
efx_preset    CITY_SUBWAY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that both the configuration file and the location entity spawnarg can be used simultaneously.  In this case, the spawnarg value will take precedence.&lt;br /&gt;
&lt;br /&gt;
=== Preset Values ===&lt;br /&gt;
The presets were taken from OpenAL-Soft implementation which TDM uses.&lt;br /&gt;
Here is the full list of preset names:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;height:350px; overflow:scroll;&amp;quot;&amp;gt;&lt;br /&gt;
GENERIC&lt;br /&gt;
PADDEDCELL&lt;br /&gt;
ROOM&lt;br /&gt;
BATHROOM&lt;br /&gt;
LIVINGROOM&lt;br /&gt;
STONEROOM&lt;br /&gt;
AUDITORIUM&lt;br /&gt;
CONCERTHALL&lt;br /&gt;
CAVE&lt;br /&gt;
ARENA&lt;br /&gt;
HANGAR&lt;br /&gt;
CARPETEDHALLWAY&lt;br /&gt;
HALLWAY&lt;br /&gt;
STONECORRIDOR&lt;br /&gt;
ALLEY&lt;br /&gt;
FOREST&lt;br /&gt;
CITY&lt;br /&gt;
MOUNTAINS&lt;br /&gt;
QUARRY&lt;br /&gt;
PLAIN&lt;br /&gt;
PARKINGLOT&lt;br /&gt;
SEWERPIPE&lt;br /&gt;
UNDERWATER&lt;br /&gt;
DRUGGED&lt;br /&gt;
DIZZY&lt;br /&gt;
PSYCHOTIC&lt;br /&gt;
CASTLE_SMALLROOM&lt;br /&gt;
CASTLE_SHORTPASSAGE&lt;br /&gt;
CASTLE_MEDIUMROOM&lt;br /&gt;
CASTLE_LARGEROOM&lt;br /&gt;
CASTLE_LONGPASSAGE&lt;br /&gt;
CASTLE_HALL&lt;br /&gt;
CASTLE_CUPBOARD&lt;br /&gt;
CASTLE_COURTYARD&lt;br /&gt;
CASTLE_ALCOVE&lt;br /&gt;
FACTORY_SMALLROOM&lt;br /&gt;
FACTORY_SHORTPASSAGE&lt;br /&gt;
FACTORY_MEDIUMROOM&lt;br /&gt;
FACTORY_LARGEROOM&lt;br /&gt;
FACTORY_LONGPASSAGE&lt;br /&gt;
FACTORY_HALL&lt;br /&gt;
FACTORY_CUPBOARD&lt;br /&gt;
FACTORY_COURTYARD&lt;br /&gt;
FACTORY_ALCOVE&lt;br /&gt;
ICEPALACE_SMALLROOM&lt;br /&gt;
ICEPALACE_SHORTPASSAGE&lt;br /&gt;
ICEPALACE_MEDIUMROOM&lt;br /&gt;
ICEPALACE_LARGEROOM&lt;br /&gt;
ICEPALACE_LONGPASSAGE&lt;br /&gt;
ICEPALACE_HALL&lt;br /&gt;
ICEPALACE_CUPBOARD&lt;br /&gt;
ICEPALACE_COURTYARD&lt;br /&gt;
ICEPALACE_ALCOVE&lt;br /&gt;
SPACESTATION_SMALLROOM&lt;br /&gt;
SPACESTATION_SHORTPASSAGE&lt;br /&gt;
SPACESTATION_MEDIUMROOM&lt;br /&gt;
SPACESTATION_LARGEROOM&lt;br /&gt;
SPACESTATION_LONGPASSAGE&lt;br /&gt;
SPACESTATION_HALL&lt;br /&gt;
SPACESTATION_CUPBOARD&lt;br /&gt;
SPACESTATION_ALCOVE&lt;br /&gt;
WOODEN_SMALLROOM&lt;br /&gt;
WOODEN_SHORTPASSAGE&lt;br /&gt;
WOODEN_MEDIUMROOM&lt;br /&gt;
WOODEN_LARGEROOM&lt;br /&gt;
WOODEN_LONGPASSAGE&lt;br /&gt;
WOODEN_HALL&lt;br /&gt;
WOODEN_CUPBOARD&lt;br /&gt;
WOODEN_COURTYARD&lt;br /&gt;
WOODEN_ALCOVE&lt;br /&gt;
SPORT_EMPTYSTADIUM&lt;br /&gt;
SPORT_SQUASHCOURT&lt;br /&gt;
SPORT_SMALLSWIMMINGPOOL&lt;br /&gt;
SPORT_LARGESWIMMINGPOOL&lt;br /&gt;
SPORT_GYMNASIUM&lt;br /&gt;
SPORT_FULLSTADIUM&lt;br /&gt;
SPORT_STADIUMTANNOY&lt;br /&gt;
PREFAB_WORKSHOP&lt;br /&gt;
PREFAB_SCHOOLROOM&lt;br /&gt;
PREFAB_PRACTISEROOM&lt;br /&gt;
PREFAB_OUTHOUSE&lt;br /&gt;
PREFAB_CARAVAN&lt;br /&gt;
DOME_TOMB&lt;br /&gt;
PIPE_SMALL&lt;br /&gt;
DOME_SAINTPAULS&lt;br /&gt;
PIPE_LONGTHIN&lt;br /&gt;
PIPE_LARGE&lt;br /&gt;
PIPE_RESONANT&lt;br /&gt;
OUTDOORS_BACKYARD&lt;br /&gt;
OUTDOORS_ROLLINGPLAINS&lt;br /&gt;
OUTDOORS_DEEPCANYON&lt;br /&gt;
OUTDOORS_CREEK&lt;br /&gt;
OUTDOORS_VALLEY&lt;br /&gt;
MOOD_HEAVEN&lt;br /&gt;
MOOD_HELL&lt;br /&gt;
MOOD_MEMORY&lt;br /&gt;
DRIVING_COMMENTATOR&lt;br /&gt;
DRIVING_PITGARAGE&lt;br /&gt;
DRIVING_INCAR_RACER&lt;br /&gt;
DRIVING_INCAR_SPORTS&lt;br /&gt;
DRIVING_INCAR_LUXURY&lt;br /&gt;
DRIVING_FULLGRANDSTAND&lt;br /&gt;
DRIVING_EMPTYGRANDSTAND&lt;br /&gt;
DRIVING_TUNNEL&lt;br /&gt;
CITY_STREETS&lt;br /&gt;
CITY_SUBWAY&lt;br /&gt;
CITY_MUSEUM&lt;br /&gt;
CITY_LIBRARY&lt;br /&gt;
CITY_UNDERPASS&lt;br /&gt;
CITY_ABANDONED&lt;br /&gt;
DUSTYROOM&lt;br /&gt;
CHAPEL&lt;br /&gt;
SMALLWATERROOM                              &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Their definitions can be seen in [https://github.com/kcat/openal-soft/blob/master/include/AL/efx-presets.h efx-presets.h] from OpenAL-Soft source code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-expandtext=&amp;quot;Show&amp;quot; data-collapsetext=&amp;quot;Hide&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Legacy info (Version 1) ==&lt;br /&gt;
&lt;br /&gt;
This information is from the old official EAX 2.0 documentation, although some properties may have changed in scope and focus from EAX 2.0 to EAX 4.0. One can assume that the properties serve the same general purpose and that each property&#039;s value bounds are approximately the same.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;environment&#039;&#039;&#039; - Unknown. Likely sets the room to one of an unknown number of environment presets.&lt;br /&gt;
* &#039;&#039;&#039;environment size&#039;&#039;&#039; - The Environment Size property sets the apparent size of the surrounding “room.” The value of Environment Size can be considered a characteristic dimension of the room expressed in meters. Scaling Environment Size is equivalent to scaling all dimensions of the room by the same factor. Value type is FLOAT; value range is 1.0 to 100.0, expressed in linear meters.&lt;br /&gt;
* &#039;&#039;&#039;environment diffusion&#039;&#039;&#039; - The Environment Diffusion property controls the echo density in the reverberation decay. Reducing diffusion gives the reverberation a more “grainy” character that is especially noticeable with percussive sound sources. If you set a diffusion value of 0.0, the later reverberation sounds like a succession of distinct echoes. Value type is FLOAT; value range is 0.0 to 1.0, expressed in a linear multiplier value.&lt;br /&gt;
* &#039;&#039;&#039;room&#039;&#039;&#039; - The Room property is the master volume control for the reflected sound (both early reflections and reverberation) that EAX adds to all sound sources. It sets the maximum amount of reflections and reverberation added to the sound mix in the primary buffer (the listener). Value is LONG; value range is -10000 to 0, expressed in hundredths of one decibel (-100 dB to 0 dB).&lt;br /&gt;
* &#039;&#039;&#039;room hf&#039;&#039;&#039; - The Room HF property further tweaks reflected sound by attenuating it at high frequencies. It controls a low-pass filter that applies globally to the reflected sound of all sound sources. The exact qualities of this low-pass filter -- its frequency and its bandwidth (Q) -- are unknown. Value type is LONG; value range is -10000 to 0, expressed in hundredths of one decibel (-100 dB to 0 dB).&lt;br /&gt;
* &#039;&#039;&#039;room lf&#039;&#039;&#039; - Undocumented. Assumably, the Room LF property applies a high-pass to reflected sound in much the same way as Room HF applies low-pass. The value type and range is unknown, but is likely LONG, must be between -10000 and 0 and is expressed in hundredths of one decibel.&lt;br /&gt;
* &#039;&#039;&#039;decay time&#039;&#039;&#039; - The Decay Time property sets the reverberation decay time, or the time in which reverberation is diminished. It ranges from 0.1 (typically a small room with very dead surfaces) to 20.0 (typically a large room with very live surfaces). Value is FLOAT; value range is 0.1 to 20.0, expressed in seconds.&lt;br /&gt;
* &#039;&#039;&#039;decay hf ratio&#039;&#039;&#039; - The Decay HF Ratio property sets the spectral quality of the Decay Time parameter. It is the ratio of high-frequency decay time relative to the time set by Decay Time. The Decay HF Ratio value 1.0 is neutral: the decay time is equal for all frequencies. As Decay HF Ratio increases above 1.0, the high-frequency decay time increases so it’s longer than the decay time at low frequencies. You hear a more brilliant reverberation with a longer decay at high frequencies. As the Decay HF Ratio value decreases below 1.0, the high-frequency decay time decreases so it’s shorter than the decay time of the low frequencies. You hear a more natural reverberation. Value is FLOAT; value range is 0.1 to 20.0, expressed in a linear multiplier variable.&lt;br /&gt;
* &#039;&#039;&#039;decay lf ratio&#039;&#039;&#039; - Undocumented. It&#039;s likely best to leave the value at 1.0, though the value&#039;s type and range is probably the same as the Decay HF Ratio property.&lt;br /&gt;
* &#039;&#039;&#039;reflections&#039;&#039;&#039; - The Reflections property controls the overall amount of initial reflections relative to the Room property. The value of Reflections ranges from a maximum of 10 dB to a minimum of -100 dB (no initial reflections at all), and is corrected by the value of the Room property. The Reflections property does not affect the subsequent reverberation decay. You can increase the amount of initial reflections to simulate a more narrow space or closer walls, especially effective if you associate the initial reflections increase with a reduction in reflections delays by lowering the value of the Reflection Delay property. To simulate open or semi-open environments, you can maintain the amount of early reflections while reducing the value of the Reverb property, which controls later reflections. Value type is LONG; value range is -10000 to 1000, expressed in hundredths of one decibel (-100 dB to -10 dB).&lt;br /&gt;
* &#039;&#039;&#039;reflections delay&#039;&#039;&#039; - The Reflections Delay property is the amount of delay between the arrival time of the direct path from the source to the first reflection from the source. It ranges from 0 to 300 milliseconds. You can reduce or increase Reflections Delay to simulate closer or more distant reflective surfaces—and therefore control the perceived size of the room. Value is FLOAT; value range is 0.0 to 0.3, expressed in seconds (0 to 300 milliseconds).&lt;br /&gt;
* &#039;&#039;&#039;reflections pan&#039;&#039;&#039; - Undocumented. Three values are specified which may correspond to a generic &amp;quot;front&amp;quot;, &amp;quot;side&amp;quot; and &amp;quot;back/rear&amp;quot; configuration to control the directivity of early reflections in a 7.1 surround matrix. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;reverb&#039;&#039;&#039; - The Reverb property controls the overall amount of later reverberation relative to the Room property. (The Room property sets the overall amount of both initial reflections and later reverberation.) The value of Reverb ranges from a maximum of 20 dB to a minimum of -100 dB (no late reverberation at all). Value is LONG; value range is -10000 to 2000, expressed in hundredths of a decibel (-100 dB to 20 dB).&lt;br /&gt;
* &#039;&#039;&#039;reverb delay&#039;&#039;&#039; - The Reverb Delay property defines the begin time of the late reverberation relative to the time of the initial reflection (the first of the early reflections). It ranges from 0 to 100 milliseconds. Reducing or increasing Reverb Delay is useful for simulating a smaller or larger room. Value is FLOAT; value range is 0.0 to 0.1, expressed in seconds (0 to 100 milliseconds).&lt;br /&gt;
* &#039;&#039;&#039;reverb pan&#039;&#039;&#039; - Undocumented. Three values are specified which may correspond to a generic &amp;quot;front&amp;quot;, &amp;quot;side&amp;quot; and &amp;quot;back/rear&amp;quot; configuration to control the directivity of reverberation in a 7.1 surround matrix. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;echo time&#039;&#039;&#039; - Undocumented. Likely controls the decay time of echoes, or late reflections. A value of 0.1 likely presents a natural amount of echo, while increasing the value likely causes a &amp;quot;Grand Canyon&amp;quot; effect. Value type is likely FLOAT; value range is likely between 0.075 and 0.25, expressed in seconds.&lt;br /&gt;
* &#039;&#039;&#039;echo depth&#039;&#039;&#039; - Undocumented. May control directionality or tonal qualities of echoes arriving at the listener. Probably best to leave at 1.0. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;modulation time&#039;&#039;&#039; - Undocumented. Unknown purpose. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;modulation depth&#039;&#039;&#039; - Undocumented. Unknown purpose. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;air absorption hf&#039;&#039;&#039; - The Air Absorption HF property controls the distance-dependent attenuation at high frequencies caused by the propagation medium. It applies to both the direct path and reflected sound. You can use Air Absorption HF to simulate sound transmission through foggy air, dry air, smoky atmosphere, and so on. The default value is -0.05 dB per meter, which roughly corresponds to typical condition of atmospheric humidity, temperature, and so on. Lowering the value simulates a more absorbent medium (more humidity in the air, for example); raising the value simulates a less absorbent medium (dry desert air, for example). Value is FLOAT; value range is -100.0 to 0.0, expressed in hundredths of one decibel per meter (-1 dB to 0 dB). Default value is -5.0, which corresponds to -0.05 dB per meter attenuation.&lt;br /&gt;
* &#039;&#039;&#039;hf reference&#039;&#039;&#039; - Likely defines the frequency used for low-pass filters. Value is likely LONG; value range is likely between 0.0 and 20000.0, expressed in Hz. This value is probably best left at 5000.0.&lt;br /&gt;
* &#039;&#039;&#039;lf reference&#039;&#039;&#039; - Likely defines the frequency used for high-pass filters. Value is likely LONG; value range is likely between 0.0 and 20000.0, expressed in Hz. This value is probably best left at 250.0.&lt;br /&gt;
* &#039;&#039;&#039;room rolloff factor&#039;&#039;&#039; - The Room Rolloff property is one of two methods available in EAX to attenuate the reflected sound (containing both reflections, reverberation and echoes) according to source-listener distance. Value type is FLOAT; value range is 0.0 to 10.0, expressed in a linear multiplier value. It&#039;s recommended that users use 0.0, as id Software did not deviate from this value with Doom 3.&lt;br /&gt;
* &#039;&#039;&#039;flags&#039;&#039;&#039; - The Flags property is intended to control the relationship of high-level EAX properties to low-level properties. If certain EAX flags are set by setting the Flags property to a particular value, the setting of high-level properties is supposed to control the values of low-level properties based upon a defined scale, overriding specified values. In EAX 2.0, the value type is DWORD, whereas in Doom 3, it appears to be INT or some other type commonly used to store numeric values. In Doom 3, common values are 0, 2, 15, 31, 32, 56 and 63, but no documentation details what these values correspond to. If users wish to experiment with the Flags property, it is recommended that they choose from one of the above values. For reference, here is a table with the counts for each flag value as used in Doom 3:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 0.5em; margin-left: 2em; border: 1px solid #a0a0a0; text-align: right; border-collapse: collapse;&amp;quot; cellpadding=&amp;quot;2&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Flag decimal&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Flag binary&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Count&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|00000000&lt;br /&gt;
|497&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|00000010&lt;br /&gt;
|6&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|00001110&lt;br /&gt;
|15&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|00001111&lt;br /&gt;
|94&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|31&lt;br /&gt;
|00011111&lt;br /&gt;
|511&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|32&lt;br /&gt;
|00100000&lt;br /&gt;
|247&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|56&lt;br /&gt;
|00111000&lt;br /&gt;
|59&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|63&lt;br /&gt;
|00111111&lt;br /&gt;
|168&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Design.&#039;&#039;&#039;&lt;br /&gt;
In terms of the actual sound design for the values you put into these variables, here is a general tutorial on reverb from FruityLoops (NOTE: This is for a music production plugin, some of these don&#039;t apply, it&#039;s just to give a general idea on what certain variables do):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Low Cut&#039;&#039;&#039; Adjusts the low cutoff frequency. Use this to remove low frequencies from the input signal before reverb is added. For example, if you are adding reverb to, say a drum track, you might want to remove some of the &#039;rumble&#039; from the bass drum by attenuating the bass frequencies. Setting this parameter to the minimum value will bypass the Low Cut filter, displaying OFF in the value field.&lt;br /&gt;
* &#039;&#039;&#039;High Cut&#039;&#039;&#039; - Similar to the Low Cut, this adjusts the high cutoff frequency. Use this to remove high frequencies from the input signal.&lt;br /&gt;
* &#039;&#039;&#039;Predelay&#039;&#039;&#039; - Controls the delay time between the direct input signal and the first reverb reflection. This should be set to modest values for small rooms, and can be increased in relation to increases in room size. &#039;&#039;&#039;Predelay&#039;&#039;&#039; creates a slap-back echo effect that can both add atmosphere and muffle the signal, so use it wisely.&lt;br /&gt;
* &#039;&#039;&#039;Room Size&#039;&#039;&#039; - Use this to set the size of the virtual room where the reverb is created. The Room Size should be adjusted according to the decay time. Small rooms sound better with a short decay time, large rooms sound better with longer reverb times.&lt;br /&gt;
* &#039;&#039;&#039;Diffusion&#039;&#039;&#039; - Controls the density of the reflections bouncing off the walls of the virtual room. A low diffusion setting makes the reflections sound more distinct, like closely spaced echoes. A high diffusion setting creates reflections so close they sound more like noise, where no echoes can be distinguished.&lt;br /&gt;
* &#039;&#039;&#039;Color&#039;&#039;&#039; - The Color parameter is used for adjusting the decay time of the bass frequencies of the signal. This allows you to change the overall perceived mood or &#039;sound&#039; of the virtual room. A bright room has a low bass response, while warm rooms have a higher bass response. In a flat room, the response of the bass is equal to the general frequency response. Color has five settings: Brighter, Bright, Flat, Warm, Warmer.&lt;br /&gt;
* &#039;&#039;&#039;Decay&#039;&#039;&#039; - Controls the decay time of the reverb, the time it takes for the signal to decay to -60dB (1/1000 of the maximum amplitude). Use low decay times for small rooms or boxes, and long decay times for large rooms, halls or churches. You should also make sure that the Room Size parameter has an appropriate value.&lt;br /&gt;
* &#039;&#039;&#039;High Damping&#039;&#039;&#039; - This parameter allows you to adjust damping of the high frequencies in the reverb signal over time. Damping refers to the high frequencies being attenuated and dying out. This causes the sound to become gradually muffled and warm like it is being absorbed in the room. Setting this parameter to the maximum value will bypass the High Damping, displaying OFF in the value field.&lt;br /&gt;
* &#039;&#039;&#039;Dry&#039;&#039;&#039; - Sets the relative dry output level.&lt;br /&gt;
* &#039;&#039;&#039;Reverb&#039;&#039;&#039; - Sets the relative reverb (wet) signal level.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Error Check=&lt;br /&gt;
If you modified the presets in your EFX file, you can check for errors ingame. Load your map and open the console. Type &#039;&#039;reloadSounds&#039;&#039;, this will trigger the reload of the EFX used in your map and print out the vars which cause an error (like a value exceeding the maximum range). Note that if your EFX files contain errors, this will make the game ignore the EFX settings you chose. &lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
See the &amp;quot;EFX Reverb&amp;quot; column of &#039;&#039;&#039;[[Fan_Missions_for_The_Dark_Mod|Fan Missions page]]&#039;&#039;&#039;. Missions with &amp;quot;Yes&amp;quot; have EFX Reverb. &lt;br /&gt;
&amp;lt;br&amp;gt;Most missions use v2.0 presets but a few missions such as &amp;quot;Volta and the Stone&amp;quot; and Behind Closed Doors use v1.0 settings.&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
The Version 2 definitions were implemented due to [http://bugs.thedarkmod.com/view.php?id=4815 issue 4815], it has some brief explanation.&lt;br /&gt;
&lt;br /&gt;
A tutorial based around EFX can be found [http://forums.thedarkmod.com/topic/19205-getting-started-with-the-efx-room-reverb-system-wip/ here]&lt;br /&gt;
&lt;br /&gt;
An old demonstration map of EAX in TDM is included [http://forums.thedarkmod.com/topic/11045-environmental-audio-extensions-eax-in-tdm/ here]&lt;br /&gt;
&lt;br /&gt;
A discussion about no_efx is [http://forums.thedarkmod.com/topic/19213-efx-discussion here]&lt;br /&gt;
&lt;br /&gt;
The first version of this article was written by Ishtvan [https://forums.thedarkmod.com/index.php?/topic/2071-setting-reverb-data-in-new-soundengine-wiki/ here]&lt;br /&gt;
&lt;br /&gt;
[[Category:Sound]]&lt;br /&gt;
[[Category:Tutorial]]&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=Setting_Reverb_Data_of_Rooms_(EAX)&amp;diff=33797</id>
		<title>Setting Reverb Data of Rooms (EAX)</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=Setting_Reverb_Data_of_Rooms_(EAX)&amp;diff=33797"/>
		<updated>2025-01-11T20:59:20Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: /* General */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
This document will attempt to explain how to set the new EFX settings in your rooms when mapping.&lt;br /&gt;
&lt;br /&gt;
Previously these settings were known as EAX settings, and required EAX 4.0-compatible sound card.&lt;br /&gt;
In TDM 2.06, EAX technology was completely replaced with OpenAL EFX, which is now processed in software (by [https://github.com/kcat/openal-soft openal-soft]) without any requirements on sound card.&lt;br /&gt;
&lt;br /&gt;
= General =&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
&lt;br /&gt;
EFX for a fan mission can be configured with or without a configuration file.  However, fileless configuration is only supported for [[Setting_Reverb_Data_of_Rooms_(EAX)#Presets_(Version_2)|EFX presets]].&lt;br /&gt;
&lt;br /&gt;
== EFX file ==&lt;br /&gt;
The EFX info for a map should be stored in the file &amp;quot;&amp;lt;tt&amp;gt;efxs/&amp;lt;mapname&amp;gt;.efx&amp;lt;/tt&amp;gt;&amp;quot;, where &amp;lt;mapname&amp;gt; is the name of your .map file (without extension).&lt;br /&gt;
&lt;br /&gt;
In order to check that you have put the file into right location, start your mission in game.&lt;br /&gt;
If TDM manages to load your efx file, then you will see the following message in console:&lt;br /&gt;
 sound: found efxs/&amp;lt;mapname&amp;gt;.efx&lt;br /&gt;
If you failed something, then you will see a bit different message there:&lt;br /&gt;
 sound: missing efxs/&amp;lt;mapname&amp;gt;.efx&lt;br /&gt;
In both cases some additional diagnostic messages can be present nearby.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; you must enable &amp;quot;&amp;lt;tt&amp;gt;OpenAL EFX&amp;lt;/tt&amp;gt;&amp;quot; in sound settings in the main menu, otherwise TDM won&#039;t even try to load the efx file.&lt;br /&gt;
&lt;br /&gt;
It is a plain text file, so you can open it up in your text editor of choice.&lt;br /&gt;
&lt;br /&gt;
Any EFX file must start with a header which specifies its &#039;&#039;&#039;version&#039;&#039;&#039;:&lt;br /&gt;
 Version 2&lt;br /&gt;
If you forget this line, then your EFX file will &#039;&#039;&#039;not&#039;&#039;&#039; be loaded.&lt;br /&gt;
The following versions are supported:&lt;br /&gt;
* &amp;lt;tt&amp;gt;Version 1&amp;lt;/tt&amp;gt; was supported by TDM from the very beginning. It uses some non-standard terms and quantities, which makes it hard to work with.&lt;br /&gt;
* &amp;lt;tt&amp;gt;Version 2&amp;lt;/tt&amp;gt; was added in TDM 2.07. It uses the parameters from OpenAL EFX and supports a lot of presets. &#039;&#039;&#039;Recommended for all new missions.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The rest of the file consists of separate blocks, one for each &amp;quot;reverb zone&amp;quot;.&lt;br /&gt;
Each block must start with &amp;lt;tt&amp;gt;reverb&amp;lt;/tt&amp;gt; keyword for Version 1 definitions, and &amp;lt;tt&amp;gt;eaxreverb&amp;lt;/tt&amp;gt; keyword for Version 2 definitions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here is an example of such block from mars_city1.efx of the original Doom 3 game (Version 1):&lt;br /&gt;
&lt;br /&gt;
 // reverb maintenance&lt;br /&gt;
 reverb &amp;quot;maintenance&amp;quot; {&lt;br /&gt;
  &amp;quot;environment&amp;quot; 26&lt;br /&gt;
  &amp;quot;environment size&amp;quot; 5.0670&lt;br /&gt;
  &amp;quot;environment diffusion&amp;quot; 0.6030&lt;br /&gt;
  &amp;quot;room&amp;quot; -411&lt;br /&gt;
  &amp;quot;room hf&amp;quot; -685&lt;br /&gt;
  &amp;quot;room lf&amp;quot; 0&lt;br /&gt;
  &amp;quot;decay time&amp;quot; 1.7360&lt;br /&gt;
  &amp;quot;decay hf ratio&amp;quot; 0.8030&lt;br /&gt;
  &amp;quot;decay lf ratio&amp;quot; 1.0000&lt;br /&gt;
  &amp;quot;reflections&amp;quot; 96&lt;br /&gt;
  &amp;quot;reflections delay&amp;quot; 0.0080&lt;br /&gt;
  &amp;quot;reflections pan&amp;quot; 0.0000 0.0000 0.0000&lt;br /&gt;
  &amp;quot;reverb&amp;quot; 27&lt;br /&gt;
  &amp;quot;reverb delay&amp;quot; 0.0050&lt;br /&gt;
  &amp;quot;reverb pan&amp;quot; 0.0000 0.0000 0.0000&lt;br /&gt;
  &amp;quot;echo time&amp;quot; 0.0750&lt;br /&gt;
  &amp;quot;echo depth&amp;quot; 1.0000&lt;br /&gt;
  &amp;quot;modulation time&amp;quot; 0.2500&lt;br /&gt;
  &amp;quot;modulation depth&amp;quot; 0.0000&lt;br /&gt;
  &amp;quot;air absorption hf&amp;quot; -5.0000&lt;br /&gt;
  &amp;quot;hf reference&amp;quot; 5000.0000&lt;br /&gt;
  &amp;quot;lf reference&amp;quot; 250.0000&lt;br /&gt;
  &amp;quot;room rolloff factor&amp;quot; 0.0000&lt;br /&gt;
  &amp;quot;flags&amp;quot; 56&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And here is an artificial example of Version 2 definitions:&lt;br /&gt;
&lt;br /&gt;
  eaxreverb &amp;quot;myweirdstreets&amp;quot; {&lt;br /&gt;
    reflections_gain 0.5&lt;br /&gt;
    reflections_delay 0.0050&lt;br /&gt;
    late_reverb_gain 2.5&lt;br /&gt;
    late_reverb_delay 0.050&lt;br /&gt;
    echo_time 0.25&lt;br /&gt;
    echo_depth 0.9000&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
What does all this mean? &lt;br /&gt;
&lt;br /&gt;
There is a lot of sound design stuff that one could make guesses at if you&#039;ve ever used a reverb plugin in any sort of sound editing program. hf = high frequency, lf = low frequency, etc.&lt;br /&gt;
&lt;br /&gt;
A proper explanation of the parameters is given below.&lt;br /&gt;
&lt;br /&gt;
== Locations ==&lt;br /&gt;
Each reverb zone definition starts with a line which specifies to which location it must be applied:&lt;br /&gt;
&lt;br /&gt;
 reverb &amp;quot;&amp;lt;name of the location area you want to apply this to&amp;gt;&amp;quot;&lt;br /&gt;
 {&lt;br /&gt;
     //... (settings)&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Information about locations and how to set them up is available in another article: [[Location Settings #The Location Entities]].&lt;br /&gt;
Reverb zones use exactly the same locations as the ones which are used to specify per-area ambient sounds.&lt;br /&gt;
You should name every info_location entity, i.e. provide a &amp;quot;&amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt;&amp;quot; spawnarg for it. This is the name used in reverb zone definitions.&lt;br /&gt;
&lt;br /&gt;
As of TDM 2.06, you can&#039;t use capital letters in the name of your location entity or reverb zone. This may or may not change in the future.&lt;br /&gt;
&lt;br /&gt;
Here is an example of an entity which defines &amp;quot;canal_tunnel&amp;quot; location:&lt;br /&gt;
&lt;br /&gt;
 //======================= from volta_v1.map ====================&lt;br /&gt;
 // entity 3532&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;classname&amp;quot; &amp;quot;info_location&amp;quot;&lt;br /&gt;
   &amp;quot;name&amp;quot; &amp;quot;canal_tunnel&amp;quot;             //this is the name used&lt;br /&gt;
   &amp;quot;ambient&amp;quot; &amp;quot;snd_streets&amp;quot;&lt;br /&gt;
   &amp;quot;ambient_light&amp;quot; &amp;quot;0.04 0.03 0.02&amp;quot;&lt;br /&gt;
   &amp;quot;ambient_light_dynamic&amp;quot; &amp;quot;0.01 0.01 0.01&amp;quot;&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And this is the EFX effect (reverb zone) for it:&lt;br /&gt;
&lt;br /&gt;
 //======================= from volta_v1.efx ====================&lt;br /&gt;
 reverb &amp;quot;canal_tunnel&amp;quot; {             //name put to here&lt;br /&gt;
   &amp;quot;environment&amp;quot; 22&lt;br /&gt;
   &amp;quot;environment size&amp;quot; 1.8000&lt;br /&gt;
   &amp;quot;environment diffusion&amp;quot; 1.0000&lt;br /&gt;
   &amp;quot;room&amp;quot; -1000&lt;br /&gt;
   &amp;quot;room hf&amp;quot; -4000&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
During playing, the engine prints a message whenever the player&#039;s location changes.&lt;br /&gt;
It allows you to check if you have set up locations properly.&lt;br /&gt;
For instance, here are console messages showing a proper EFX location change:&lt;br /&gt;
&lt;br /&gt;
 Switching to EFX &#039;canal_tunnel&#039; (#295)&lt;br /&gt;
 Changed location from &#039;canal_streets&#039; to &#039;canal_tunnel&#039;.&lt;br /&gt;
&lt;br /&gt;
It is also possible to specify portal-area number instead of location name in the reverb zone definition.&lt;br /&gt;
The portal-area number is listed in the .proc file, which is created in the dmap process, in the format of &amp;lt;tt&amp;gt;_area&amp;lt;num&amp;gt;&amp;lt;/tt&amp;gt; (where &amp;lt;num&amp;gt; is the portal area number), e.g. &amp;lt;tt&amp;gt;_area15&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&#039;&#039;&#039;Beware:&#039;&#039;&#039; this functionality exists for fast hacking only! Do not release a mission with portal-area numbers in .efx file!&lt;br /&gt;
The main reason to avoid it is that portal-area numbers are auto-generated, so minor changes in your mission can change all of them.&lt;br /&gt;
&lt;br /&gt;
Finally, there is a &amp;quot;default&amp;quot; reverb environment which is used for any area in the map which does not have reverb information specified.&lt;br /&gt;
&lt;br /&gt;
The order that the sound system checks for reverb data is: area number -&amp;gt; location name -&amp;gt; default.&lt;br /&gt;
&lt;br /&gt;
== Changes during playing ==&lt;br /&gt;
Type &amp;quot;&amp;lt;tt&amp;gt;reloadSounds&amp;lt;/tt&amp;gt;&amp;quot; command into game console in order to reload EFX definitions.&lt;br /&gt;
&lt;br /&gt;
So when you experiment with EFX, execute this command after each tweak to EFX file to hear the difference immediately.&lt;br /&gt;
&lt;br /&gt;
== Suppress effect ==&lt;br /&gt;
Sometimes you want to disable EFX effect on a specific sound.&lt;br /&gt;
A typical example is when you have a voice in player&#039;s head, which must not depend on player&#039;s physical environment.&lt;br /&gt;
Another case is when some sound already has reverb baked in, so you don&#039;t what to double-reverb it. Although the best practice is to use sound samples without embedded reverb, combined with proper EFX definitions.&lt;br /&gt;
&lt;br /&gt;
You can disable all EFX effects on one specific sound shader by adding &amp;quot;&amp;lt;tt&amp;gt;no_efx&amp;lt;/tt&amp;gt;&amp;quot; keyword to its body.&lt;br /&gt;
For instance, here is how non-EFX version of blackjack unsheathing looks like:&lt;br /&gt;
 blackjack_unsheath&lt;br /&gt;
 {&lt;br /&gt;
   description &amp;quot;Made by pakmannen&amp;quot;&lt;br /&gt;
   sound/sfx/tools/melee/blackjack_unsheath.ogg&lt;br /&gt;
   no_efx                       //do NOT apply EFX to this sound&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note that if you change sound shaders, writing &amp;quot;&amp;lt;tt&amp;gt;reloadDecls&amp;lt;/tt&amp;gt;&amp;quot; in TDM game console is enough to reload them.&lt;br /&gt;
&lt;br /&gt;
There are a lot of stock sounds in TDM which should not be affected by EFX effects.&lt;br /&gt;
Starting from TDM 2.07, the corresponding core sounds are marked with &amp;quot;&amp;lt;tt&amp;gt;no_efx&amp;lt;/tt&amp;gt;&amp;quot; keyword (see issue [http://bugs.thedarkmod.com/view.php?id=4688 4688]).&lt;br /&gt;
If you discover any core sound which is affected by EFX while you believe it should not, start a discussion on forums.&lt;br /&gt;
&lt;br /&gt;
=Environment properties=&lt;br /&gt;
&lt;br /&gt;
== New properties (Version 2) ==&lt;br /&gt;
&lt;br /&gt;
With Version 2 of EFX file, the set of supported properties exactly matches the set of properties defined in OpenAL EFX for the &amp;quot;EAX Reverb&amp;quot; effect.&lt;br /&gt;
Note that EFX defines several types of effects, including &amp;quot;EAX Reverb&amp;quot;, &amp;quot;Standard Reverb&amp;quot;, &amp;quot;Chorus&amp;quot;, &amp;quot;Distortion&amp;quot;, &amp;quot;Echo&amp;quot;, &amp;quot;Flanger&amp;quot;, etc.&lt;br /&gt;
Only the first one is important, ignore all the rest (including the so-called &amp;quot;Standard Reverb&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
The detailed description of all the properties is given in &amp;quot;Appendix 1 – Effect property descriptions&amp;quot; of the [https://usermanual.wiki/Pdf/Effects20Extension20Guide.90272296/view#95 OpenAL Effects Extension Guide](pages 95-101).&lt;br /&gt;
The short list is also available in a table on [https://usermanual.wiki/Pdf/Effects20Extension20Guide.90272296/view#66 page 66 of the guide]:&lt;br /&gt;
&lt;br /&gt;
[[File:Eaxreverb_properties_screenshot.png|500px]]&lt;br /&gt;
&lt;br /&gt;
The only difference is that the property names in the guide have the &amp;lt;tt&amp;gt;AL_EAXREVERB_&amp;lt;/tt&amp;gt; prefix, while in TDM definitions this prefix is removed.&lt;br /&gt;
&lt;br /&gt;
== Presets (Version 2) ==&lt;br /&gt;
Presets can be set in 2 ways:&lt;br /&gt;
* in the .efx file&lt;br /&gt;
* the efx_preset spawnarg on the location entity for the location where you want to use the effect (since TDM 2.13)&lt;br /&gt;
&lt;br /&gt;
=== File Method ===&lt;br /&gt;
&lt;br /&gt;
There is one special property &amp;lt;tt&amp;gt;PRESET&amp;lt;/tt&amp;gt;, which is not present in the EFX guide.&lt;br /&gt;
This property accepts the name of the preset which you want to use:&lt;br /&gt;
&lt;br /&gt;
 eaxreverb &amp;quot;myclassroom&amp;quot; {&lt;br /&gt;
   preset auditorium&lt;br /&gt;
 }&lt;br /&gt;
 eaxreverb &amp;quot;mycave&amp;quot; {&lt;br /&gt;
   preset cave&lt;br /&gt;
 }&lt;br /&gt;
 eaxreverb &amp;quot;mycorridor&amp;quot; {&lt;br /&gt;
   preset hallway&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
If you specify the preset like this, the values for all the reverb properties will be taken from the specified preset.&lt;br /&gt;
Additionally, you can override values of some properties if you define them manually &#039;&#039;&#039;after&#039;&#039;&#039; defining the preset.&lt;br /&gt;
&lt;br /&gt;
The preset property also accepts index of preset. Don&#039;t use indices for anything except experimentation, since they may change in future.&lt;br /&gt;
&lt;br /&gt;
=== Location Entity Method ===&lt;br /&gt;
On the location entity where you want to use the preset, set the spawnarg efx_preset to the value of the preset.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
efx_preset    CITY_SUBWAY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The presets were taken from OpenAL-Soft implementation which TDM uses.&lt;br /&gt;
Here is the full list of preset names:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;height:350px; overflow:scroll;&amp;quot;&amp;gt;&lt;br /&gt;
GENERIC&lt;br /&gt;
PADDEDCELL&lt;br /&gt;
ROOM&lt;br /&gt;
BATHROOM&lt;br /&gt;
LIVINGROOM&lt;br /&gt;
STONEROOM&lt;br /&gt;
AUDITORIUM&lt;br /&gt;
CONCERTHALL&lt;br /&gt;
CAVE&lt;br /&gt;
ARENA&lt;br /&gt;
HANGAR&lt;br /&gt;
CARPETEDHALLWAY&lt;br /&gt;
HALLWAY&lt;br /&gt;
STONECORRIDOR&lt;br /&gt;
ALLEY&lt;br /&gt;
FOREST&lt;br /&gt;
CITY&lt;br /&gt;
MOUNTAINS&lt;br /&gt;
QUARRY&lt;br /&gt;
PLAIN&lt;br /&gt;
PARKINGLOT&lt;br /&gt;
SEWERPIPE&lt;br /&gt;
UNDERWATER&lt;br /&gt;
DRUGGED&lt;br /&gt;
DIZZY&lt;br /&gt;
PSYCHOTIC&lt;br /&gt;
CASTLE_SMALLROOM&lt;br /&gt;
CASTLE_SHORTPASSAGE&lt;br /&gt;
CASTLE_MEDIUMROOM&lt;br /&gt;
CASTLE_LARGEROOM&lt;br /&gt;
CASTLE_LONGPASSAGE&lt;br /&gt;
CASTLE_HALL&lt;br /&gt;
CASTLE_CUPBOARD&lt;br /&gt;
CASTLE_COURTYARD&lt;br /&gt;
CASTLE_ALCOVE&lt;br /&gt;
FACTORY_SMALLROOM&lt;br /&gt;
FACTORY_SHORTPASSAGE&lt;br /&gt;
FACTORY_MEDIUMROOM&lt;br /&gt;
FACTORY_LARGEROOM&lt;br /&gt;
FACTORY_LONGPASSAGE&lt;br /&gt;
FACTORY_HALL&lt;br /&gt;
FACTORY_CUPBOARD&lt;br /&gt;
FACTORY_COURTYARD&lt;br /&gt;
FACTORY_ALCOVE&lt;br /&gt;
ICEPALACE_SMALLROOM&lt;br /&gt;
ICEPALACE_SHORTPASSAGE&lt;br /&gt;
ICEPALACE_MEDIUMROOM&lt;br /&gt;
ICEPALACE_LARGEROOM&lt;br /&gt;
ICEPALACE_LONGPASSAGE&lt;br /&gt;
ICEPALACE_HALL&lt;br /&gt;
ICEPALACE_CUPBOARD&lt;br /&gt;
ICEPALACE_COURTYARD&lt;br /&gt;
ICEPALACE_ALCOVE&lt;br /&gt;
SPACESTATION_SMALLROOM&lt;br /&gt;
SPACESTATION_SHORTPASSAGE&lt;br /&gt;
SPACESTATION_MEDIUMROOM&lt;br /&gt;
SPACESTATION_LARGEROOM&lt;br /&gt;
SPACESTATION_LONGPASSAGE&lt;br /&gt;
SPACESTATION_HALL&lt;br /&gt;
SPACESTATION_CUPBOARD&lt;br /&gt;
SPACESTATION_ALCOVE&lt;br /&gt;
WOODEN_SMALLROOM&lt;br /&gt;
WOODEN_SHORTPASSAGE&lt;br /&gt;
WOODEN_MEDIUMROOM&lt;br /&gt;
WOODEN_LARGEROOM&lt;br /&gt;
WOODEN_LONGPASSAGE&lt;br /&gt;
WOODEN_HALL&lt;br /&gt;
WOODEN_CUPBOARD&lt;br /&gt;
WOODEN_COURTYARD&lt;br /&gt;
WOODEN_ALCOVE&lt;br /&gt;
SPORT_EMPTYSTADIUM&lt;br /&gt;
SPORT_SQUASHCOURT&lt;br /&gt;
SPORT_SMALLSWIMMINGPOOL&lt;br /&gt;
SPORT_LARGESWIMMINGPOOL&lt;br /&gt;
SPORT_GYMNASIUM&lt;br /&gt;
SPORT_FULLSTADIUM&lt;br /&gt;
SPORT_STADIUMTANNOY&lt;br /&gt;
PREFAB_WORKSHOP&lt;br /&gt;
PREFAB_SCHOOLROOM&lt;br /&gt;
PREFAB_PRACTISEROOM&lt;br /&gt;
PREFAB_OUTHOUSE&lt;br /&gt;
PREFAB_CARAVAN&lt;br /&gt;
DOME_TOMB&lt;br /&gt;
PIPE_SMALL&lt;br /&gt;
DOME_SAINTPAULS&lt;br /&gt;
PIPE_LONGTHIN&lt;br /&gt;
PIPE_LARGE&lt;br /&gt;
PIPE_RESONANT&lt;br /&gt;
OUTDOORS_BACKYARD&lt;br /&gt;
OUTDOORS_ROLLINGPLAINS&lt;br /&gt;
OUTDOORS_DEEPCANYON&lt;br /&gt;
OUTDOORS_CREEK&lt;br /&gt;
OUTDOORS_VALLEY&lt;br /&gt;
MOOD_HEAVEN&lt;br /&gt;
MOOD_HELL&lt;br /&gt;
MOOD_MEMORY&lt;br /&gt;
DRIVING_COMMENTATOR&lt;br /&gt;
DRIVING_PITGARAGE&lt;br /&gt;
DRIVING_INCAR_RACER&lt;br /&gt;
DRIVING_INCAR_SPORTS&lt;br /&gt;
DRIVING_INCAR_LUXURY&lt;br /&gt;
DRIVING_FULLGRANDSTAND&lt;br /&gt;
DRIVING_EMPTYGRANDSTAND&lt;br /&gt;
DRIVING_TUNNEL&lt;br /&gt;
CITY_STREETS&lt;br /&gt;
CITY_SUBWAY&lt;br /&gt;
CITY_MUSEUM&lt;br /&gt;
CITY_LIBRARY&lt;br /&gt;
CITY_UNDERPASS&lt;br /&gt;
CITY_ABANDONED&lt;br /&gt;
DUSTYROOM&lt;br /&gt;
CHAPEL&lt;br /&gt;
SMALLWATERROOM                              &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Their definitions can be seen in [https://github.com/kcat/openal-soft/blob/master/include/AL/efx-presets.h efx-presets.h] from OpenAL-Soft source code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-expandtext=&amp;quot;Show&amp;quot; data-collapsetext=&amp;quot;Hide&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Legacy info (Version 1) ==&lt;br /&gt;
&lt;br /&gt;
This information is from the old official EAX 2.0 documentation, although some properties may have changed in scope and focus from EAX 2.0 to EAX 4.0. One can assume that the properties serve the same general purpose and that each property&#039;s value bounds are approximately the same.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;environment&#039;&#039;&#039; - Unknown. Likely sets the room to one of an unknown number of environment presets.&lt;br /&gt;
* &#039;&#039;&#039;environment size&#039;&#039;&#039; - The Environment Size property sets the apparent size of the surrounding “room.” The value of Environment Size can be considered a characteristic dimension of the room expressed in meters. Scaling Environment Size is equivalent to scaling all dimensions of the room by the same factor. Value type is FLOAT; value range is 1.0 to 100.0, expressed in linear meters.&lt;br /&gt;
* &#039;&#039;&#039;environment diffusion&#039;&#039;&#039; - The Environment Diffusion property controls the echo density in the reverberation decay. Reducing diffusion gives the reverberation a more “grainy” character that is especially noticeable with percussive sound sources. If you set a diffusion value of 0.0, the later reverberation sounds like a succession of distinct echoes. Value type is FLOAT; value range is 0.0 to 1.0, expressed in a linear multiplier value.&lt;br /&gt;
* &#039;&#039;&#039;room&#039;&#039;&#039; - The Room property is the master volume control for the reflected sound (both early reflections and reverberation) that EAX adds to all sound sources. It sets the maximum amount of reflections and reverberation added to the sound mix in the primary buffer (the listener). Value is LONG; value range is -10000 to 0, expressed in hundredths of one decibel (-100 dB to 0 dB).&lt;br /&gt;
* &#039;&#039;&#039;room hf&#039;&#039;&#039; - The Room HF property further tweaks reflected sound by attenuating it at high frequencies. It controls a low-pass filter that applies globally to the reflected sound of all sound sources. The exact qualities of this low-pass filter -- its frequency and its bandwidth (Q) -- are unknown. Value type is LONG; value range is -10000 to 0, expressed in hundredths of one decibel (-100 dB to 0 dB).&lt;br /&gt;
* &#039;&#039;&#039;room lf&#039;&#039;&#039; - Undocumented. Assumably, the Room LF property applies a high-pass to reflected sound in much the same way as Room HF applies low-pass. The value type and range is unknown, but is likely LONG, must be between -10000 and 0 and is expressed in hundredths of one decibel.&lt;br /&gt;
* &#039;&#039;&#039;decay time&#039;&#039;&#039; - The Decay Time property sets the reverberation decay time, or the time in which reverberation is diminished. It ranges from 0.1 (typically a small room with very dead surfaces) to 20.0 (typically a large room with very live surfaces). Value is FLOAT; value range is 0.1 to 20.0, expressed in seconds.&lt;br /&gt;
* &#039;&#039;&#039;decay hf ratio&#039;&#039;&#039; - The Decay HF Ratio property sets the spectral quality of the Decay Time parameter. It is the ratio of high-frequency decay time relative to the time set by Decay Time. The Decay HF Ratio value 1.0 is neutral: the decay time is equal for all frequencies. As Decay HF Ratio increases above 1.0, the high-frequency decay time increases so it’s longer than the decay time at low frequencies. You hear a more brilliant reverberation with a longer decay at high frequencies. As the Decay HF Ratio value decreases below 1.0, the high-frequency decay time decreases so it’s shorter than the decay time of the low frequencies. You hear a more natural reverberation. Value is FLOAT; value range is 0.1 to 20.0, expressed in a linear multiplier variable.&lt;br /&gt;
* &#039;&#039;&#039;decay lf ratio&#039;&#039;&#039; - Undocumented. It&#039;s likely best to leave the value at 1.0, though the value&#039;s type and range is probably the same as the Decay HF Ratio property.&lt;br /&gt;
* &#039;&#039;&#039;reflections&#039;&#039;&#039; - The Reflections property controls the overall amount of initial reflections relative to the Room property. The value of Reflections ranges from a maximum of 10 dB to a minimum of -100 dB (no initial reflections at all), and is corrected by the value of the Room property. The Reflections property does not affect the subsequent reverberation decay. You can increase the amount of initial reflections to simulate a more narrow space or closer walls, especially effective if you associate the initial reflections increase with a reduction in reflections delays by lowering the value of the Reflection Delay property. To simulate open or semi-open environments, you can maintain the amount of early reflections while reducing the value of the Reverb property, which controls later reflections. Value type is LONG; value range is -10000 to 1000, expressed in hundredths of one decibel (-100 dB to -10 dB).&lt;br /&gt;
* &#039;&#039;&#039;reflections delay&#039;&#039;&#039; - The Reflections Delay property is the amount of delay between the arrival time of the direct path from the source to the first reflection from the source. It ranges from 0 to 300 milliseconds. You can reduce or increase Reflections Delay to simulate closer or more distant reflective surfaces—and therefore control the perceived size of the room. Value is FLOAT; value range is 0.0 to 0.3, expressed in seconds (0 to 300 milliseconds).&lt;br /&gt;
* &#039;&#039;&#039;reflections pan&#039;&#039;&#039; - Undocumented. Three values are specified which may correspond to a generic &amp;quot;front&amp;quot;, &amp;quot;side&amp;quot; and &amp;quot;back/rear&amp;quot; configuration to control the directivity of early reflections in a 7.1 surround matrix. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;reverb&#039;&#039;&#039; - The Reverb property controls the overall amount of later reverberation relative to the Room property. (The Room property sets the overall amount of both initial reflections and later reverberation.) The value of Reverb ranges from a maximum of 20 dB to a minimum of -100 dB (no late reverberation at all). Value is LONG; value range is -10000 to 2000, expressed in hundredths of a decibel (-100 dB to 20 dB).&lt;br /&gt;
* &#039;&#039;&#039;reverb delay&#039;&#039;&#039; - The Reverb Delay property defines the begin time of the late reverberation relative to the time of the initial reflection (the first of the early reflections). It ranges from 0 to 100 milliseconds. Reducing or increasing Reverb Delay is useful for simulating a smaller or larger room. Value is FLOAT; value range is 0.0 to 0.1, expressed in seconds (0 to 100 milliseconds).&lt;br /&gt;
* &#039;&#039;&#039;reverb pan&#039;&#039;&#039; - Undocumented. Three values are specified which may correspond to a generic &amp;quot;front&amp;quot;, &amp;quot;side&amp;quot; and &amp;quot;back/rear&amp;quot; configuration to control the directivity of reverberation in a 7.1 surround matrix. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;echo time&#039;&#039;&#039; - Undocumented. Likely controls the decay time of echoes, or late reflections. A value of 0.1 likely presents a natural amount of echo, while increasing the value likely causes a &amp;quot;Grand Canyon&amp;quot; effect. Value type is likely FLOAT; value range is likely between 0.075 and 0.25, expressed in seconds.&lt;br /&gt;
* &#039;&#039;&#039;echo depth&#039;&#039;&#039; - Undocumented. May control directionality or tonal qualities of echoes arriving at the listener. Probably best to leave at 1.0. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;modulation time&#039;&#039;&#039; - Undocumented. Unknown purpose. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;modulation depth&#039;&#039;&#039; - Undocumented. Unknown purpose. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;air absorption hf&#039;&#039;&#039; - The Air Absorption HF property controls the distance-dependent attenuation at high frequencies caused by the propagation medium. It applies to both the direct path and reflected sound. You can use Air Absorption HF to simulate sound transmission through foggy air, dry air, smoky atmosphere, and so on. The default value is -0.05 dB per meter, which roughly corresponds to typical condition of atmospheric humidity, temperature, and so on. Lowering the value simulates a more absorbent medium (more humidity in the air, for example); raising the value simulates a less absorbent medium (dry desert air, for example). Value is FLOAT; value range is -100.0 to 0.0, expressed in hundredths of one decibel per meter (-1 dB to 0 dB). Default value is -5.0, which corresponds to -0.05 dB per meter attenuation.&lt;br /&gt;
* &#039;&#039;&#039;hf reference&#039;&#039;&#039; - Likely defines the frequency used for low-pass filters. Value is likely LONG; value range is likely between 0.0 and 20000.0, expressed in Hz. This value is probably best left at 5000.0.&lt;br /&gt;
* &#039;&#039;&#039;lf reference&#039;&#039;&#039; - Likely defines the frequency used for high-pass filters. Value is likely LONG; value range is likely between 0.0 and 20000.0, expressed in Hz. This value is probably best left at 250.0.&lt;br /&gt;
* &#039;&#039;&#039;room rolloff factor&#039;&#039;&#039; - The Room Rolloff property is one of two methods available in EAX to attenuate the reflected sound (containing both reflections, reverberation and echoes) according to source-listener distance. Value type is FLOAT; value range is 0.0 to 10.0, expressed in a linear multiplier value. It&#039;s recommended that users use 0.0, as id Software did not deviate from this value with Doom 3.&lt;br /&gt;
* &#039;&#039;&#039;flags&#039;&#039;&#039; - The Flags property is intended to control the relationship of high-level EAX properties to low-level properties. If certain EAX flags are set by setting the Flags property to a particular value, the setting of high-level properties is supposed to control the values of low-level properties based upon a defined scale, overriding specified values. In EAX 2.0, the value type is DWORD, whereas in Doom 3, it appears to be INT or some other type commonly used to store numeric values. In Doom 3, common values are 0, 2, 15, 31, 32, 56 and 63, but no documentation details what these values correspond to. If users wish to experiment with the Flags property, it is recommended that they choose from one of the above values. For reference, here is a table with the counts for each flag value as used in Doom 3:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 0.5em; margin-left: 2em; border: 1px solid #a0a0a0; text-align: right; border-collapse: collapse;&amp;quot; cellpadding=&amp;quot;2&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Flag decimal&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Flag binary&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Count&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|00000000&lt;br /&gt;
|497&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|00000010&lt;br /&gt;
|6&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|00001110&lt;br /&gt;
|15&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|00001111&lt;br /&gt;
|94&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|31&lt;br /&gt;
|00011111&lt;br /&gt;
|511&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|32&lt;br /&gt;
|00100000&lt;br /&gt;
|247&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|56&lt;br /&gt;
|00111000&lt;br /&gt;
|59&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|63&lt;br /&gt;
|00111111&lt;br /&gt;
|168&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Design.&#039;&#039;&#039;&lt;br /&gt;
In terms of the actual sound design for the values you put into these variables, here is a general tutorial on reverb from FruityLoops (NOTE: This is for a music production plugin, some of these don&#039;t apply, it&#039;s just to give a general idea on what certain variables do):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Low Cut&#039;&#039;&#039; Adjusts the low cutoff frequency. Use this to remove low frequencies from the input signal before reverb is added. For example, if you are adding reverb to, say a drum track, you might want to remove some of the &#039;rumble&#039; from the bass drum by attenuating the bass frequencies. Setting this parameter to the minimum value will bypass the Low Cut filter, displaying OFF in the value field.&lt;br /&gt;
* &#039;&#039;&#039;High Cut&#039;&#039;&#039; - Similar to the Low Cut, this adjusts the high cutoff frequency. Use this to remove high frequencies from the input signal.&lt;br /&gt;
* &#039;&#039;&#039;Predelay&#039;&#039;&#039; - Controls the delay time between the direct input signal and the first reverb reflection. This should be set to modest values for small rooms, and can be increased in relation to increases in room size. &#039;&#039;&#039;Predelay&#039;&#039;&#039; creates a slap-back echo effect that can both add atmosphere and muffle the signal, so use it wisely.&lt;br /&gt;
* &#039;&#039;&#039;Room Size&#039;&#039;&#039; - Use this to set the size of the virtual room where the reverb is created. The Room Size should be adjusted according to the decay time. Small rooms sound better with a short decay time, large rooms sound better with longer reverb times.&lt;br /&gt;
* &#039;&#039;&#039;Diffusion&#039;&#039;&#039; - Controls the density of the reflections bouncing off the walls of the virtual room. A low diffusion setting makes the reflections sound more distinct, like closely spaced echoes. A high diffusion setting creates reflections so close they sound more like noise, where no echoes can be distinguished.&lt;br /&gt;
* &#039;&#039;&#039;Color&#039;&#039;&#039; - The Color parameter is used for adjusting the decay time of the bass frequencies of the signal. This allows you to change the overall perceived mood or &#039;sound&#039; of the virtual room. A bright room has a low bass response, while warm rooms have a higher bass response. In a flat room, the response of the bass is equal to the general frequency response. Color has five settings: Brighter, Bright, Flat, Warm, Warmer.&lt;br /&gt;
* &#039;&#039;&#039;Decay&#039;&#039;&#039; - Controls the decay time of the reverb, the time it takes for the signal to decay to -60dB (1/1000 of the maximum amplitude). Use low decay times for small rooms or boxes, and long decay times for large rooms, halls or churches. You should also make sure that the Room Size parameter has an appropriate value.&lt;br /&gt;
* &#039;&#039;&#039;High Damping&#039;&#039;&#039; - This parameter allows you to adjust damping of the high frequencies in the reverb signal over time. Damping refers to the high frequencies being attenuated and dying out. This causes the sound to become gradually muffled and warm like it is being absorbed in the room. Setting this parameter to the maximum value will bypass the High Damping, displaying OFF in the value field.&lt;br /&gt;
* &#039;&#039;&#039;Dry&#039;&#039;&#039; - Sets the relative dry output level.&lt;br /&gt;
* &#039;&#039;&#039;Reverb&#039;&#039;&#039; - Sets the relative reverb (wet) signal level.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Error Check=&lt;br /&gt;
If you modified the presets in your EFX file, you can check for errors ingame. Load your map and open the console. Type &#039;&#039;reloadSounds&#039;&#039;, this will trigger the reload of the EFX used in your map and print out the vars which cause an error (like a value exceeding the maximum range). Note that if your EFX files contain errors, this will make the game ignore the EFX settings you chose. &lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
See the &amp;quot;EFX Reverb&amp;quot; column of &#039;&#039;&#039;[[Fan_Missions_for_The_Dark_Mod|Fan Missions page]]&#039;&#039;&#039;. Missions with &amp;quot;Yes&amp;quot; have EFX Reverb. &lt;br /&gt;
&amp;lt;br&amp;gt;Most missions use v2.0 presets but a few missions such as &amp;quot;Volta and the Stone&amp;quot; and Behind Closed Doors use v1.0 settings.&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
The Version 2 definitions were implemented due to [http://bugs.thedarkmod.com/view.php?id=4815 issue 4815], it has some brief explanation.&lt;br /&gt;
&lt;br /&gt;
A tutorial based around EFX can be found [http://forums.thedarkmod.com/topic/19205-getting-started-with-the-efx-room-reverb-system-wip/ here]&lt;br /&gt;
&lt;br /&gt;
An old demonstration map of EAX in TDM is included [http://forums.thedarkmod.com/topic/11045-environmental-audio-extensions-eax-in-tdm/ here]&lt;br /&gt;
&lt;br /&gt;
A discussion about no_efx is [http://forums.thedarkmod.com/topic/19213-efx-discussion here]&lt;br /&gt;
&lt;br /&gt;
The first version of this article was written by Ishtvan [https://forums.thedarkmod.com/index.php?/topic/2071-setting-reverb-data-in-new-soundengine-wiki/ here]&lt;br /&gt;
&lt;br /&gt;
[[Category:Sound]]&lt;br /&gt;
[[Category:Tutorial]]&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=Setting_Reverb_Data_of_Rooms_(EAX)&amp;diff=33796</id>
		<title>Setting Reverb Data of Rooms (EAX)</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=Setting_Reverb_Data_of_Rooms_(EAX)&amp;diff=33796"/>
		<updated>2025-01-11T20:58:53Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: /* Presets (Version 2) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
This document will attempt to explain how to set the new EFX settings in your rooms when mapping.&lt;br /&gt;
&lt;br /&gt;
Previously these settings were known as EAX settings, and required EAX 4.0-compatible sound card.&lt;br /&gt;
In TDM 2.06, EAX technology was completely replaced with OpenAL EFX, which is now processed in software (by [https://github.com/kcat/openal-soft openal-soft]) without any requirements on sound card.&lt;br /&gt;
&lt;br /&gt;
= General =&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
&lt;br /&gt;
EFX for an FM can be configured with or without a configuration file.  However, fileless configuration is only supported for [[Setting_Reverb_Data_of_Rooms_(EAX)#Presets_(Version_2)|EFX presets]].&lt;br /&gt;
&lt;br /&gt;
== EFX file ==&lt;br /&gt;
The EFX info for a map should be stored in the file &amp;quot;&amp;lt;tt&amp;gt;efxs/&amp;lt;mapname&amp;gt;.efx&amp;lt;/tt&amp;gt;&amp;quot;, where &amp;lt;mapname&amp;gt; is the name of your .map file (without extension).&lt;br /&gt;
&lt;br /&gt;
In order to check that you have put the file into right location, start your mission in game.&lt;br /&gt;
If TDM manages to load your efx file, then you will see the following message in console:&lt;br /&gt;
 sound: found efxs/&amp;lt;mapname&amp;gt;.efx&lt;br /&gt;
If you failed something, then you will see a bit different message there:&lt;br /&gt;
 sound: missing efxs/&amp;lt;mapname&amp;gt;.efx&lt;br /&gt;
In both cases some additional diagnostic messages can be present nearby.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; you must enable &amp;quot;&amp;lt;tt&amp;gt;OpenAL EFX&amp;lt;/tt&amp;gt;&amp;quot; in sound settings in the main menu, otherwise TDM won&#039;t even try to load the efx file.&lt;br /&gt;
&lt;br /&gt;
It is a plain text file, so you can open it up in your text editor of choice.&lt;br /&gt;
&lt;br /&gt;
Any EFX file must start with a header which specifies its &#039;&#039;&#039;version&#039;&#039;&#039;:&lt;br /&gt;
 Version 2&lt;br /&gt;
If you forget this line, then your EFX file will &#039;&#039;&#039;not&#039;&#039;&#039; be loaded.&lt;br /&gt;
The following versions are supported:&lt;br /&gt;
* &amp;lt;tt&amp;gt;Version 1&amp;lt;/tt&amp;gt; was supported by TDM from the very beginning. It uses some non-standard terms and quantities, which makes it hard to work with.&lt;br /&gt;
* &amp;lt;tt&amp;gt;Version 2&amp;lt;/tt&amp;gt; was added in TDM 2.07. It uses the parameters from OpenAL EFX and supports a lot of presets. &#039;&#039;&#039;Recommended for all new missions.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The rest of the file consists of separate blocks, one for each &amp;quot;reverb zone&amp;quot;.&lt;br /&gt;
Each block must start with &amp;lt;tt&amp;gt;reverb&amp;lt;/tt&amp;gt; keyword for Version 1 definitions, and &amp;lt;tt&amp;gt;eaxreverb&amp;lt;/tt&amp;gt; keyword for Version 2 definitions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here is an example of such block from mars_city1.efx of the original Doom 3 game (Version 1):&lt;br /&gt;
&lt;br /&gt;
 // reverb maintenance&lt;br /&gt;
 reverb &amp;quot;maintenance&amp;quot; {&lt;br /&gt;
  &amp;quot;environment&amp;quot; 26&lt;br /&gt;
  &amp;quot;environment size&amp;quot; 5.0670&lt;br /&gt;
  &amp;quot;environment diffusion&amp;quot; 0.6030&lt;br /&gt;
  &amp;quot;room&amp;quot; -411&lt;br /&gt;
  &amp;quot;room hf&amp;quot; -685&lt;br /&gt;
  &amp;quot;room lf&amp;quot; 0&lt;br /&gt;
  &amp;quot;decay time&amp;quot; 1.7360&lt;br /&gt;
  &amp;quot;decay hf ratio&amp;quot; 0.8030&lt;br /&gt;
  &amp;quot;decay lf ratio&amp;quot; 1.0000&lt;br /&gt;
  &amp;quot;reflections&amp;quot; 96&lt;br /&gt;
  &amp;quot;reflections delay&amp;quot; 0.0080&lt;br /&gt;
  &amp;quot;reflections pan&amp;quot; 0.0000 0.0000 0.0000&lt;br /&gt;
  &amp;quot;reverb&amp;quot; 27&lt;br /&gt;
  &amp;quot;reverb delay&amp;quot; 0.0050&lt;br /&gt;
  &amp;quot;reverb pan&amp;quot; 0.0000 0.0000 0.0000&lt;br /&gt;
  &amp;quot;echo time&amp;quot; 0.0750&lt;br /&gt;
  &amp;quot;echo depth&amp;quot; 1.0000&lt;br /&gt;
  &amp;quot;modulation time&amp;quot; 0.2500&lt;br /&gt;
  &amp;quot;modulation depth&amp;quot; 0.0000&lt;br /&gt;
  &amp;quot;air absorption hf&amp;quot; -5.0000&lt;br /&gt;
  &amp;quot;hf reference&amp;quot; 5000.0000&lt;br /&gt;
  &amp;quot;lf reference&amp;quot; 250.0000&lt;br /&gt;
  &amp;quot;room rolloff factor&amp;quot; 0.0000&lt;br /&gt;
  &amp;quot;flags&amp;quot; 56&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And here is an artificial example of Version 2 definitions:&lt;br /&gt;
&lt;br /&gt;
  eaxreverb &amp;quot;myweirdstreets&amp;quot; {&lt;br /&gt;
    reflections_gain 0.5&lt;br /&gt;
    reflections_delay 0.0050&lt;br /&gt;
    late_reverb_gain 2.5&lt;br /&gt;
    late_reverb_delay 0.050&lt;br /&gt;
    echo_time 0.25&lt;br /&gt;
    echo_depth 0.9000&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
What does all this mean? &lt;br /&gt;
&lt;br /&gt;
There is a lot of sound design stuff that one could make guesses at if you&#039;ve ever used a reverb plugin in any sort of sound editing program. hf = high frequency, lf = low frequency, etc.&lt;br /&gt;
&lt;br /&gt;
A proper explanation of the parameters is given below.&lt;br /&gt;
&lt;br /&gt;
== Locations ==&lt;br /&gt;
Each reverb zone definition starts with a line which specifies to which location it must be applied:&lt;br /&gt;
&lt;br /&gt;
 reverb &amp;quot;&amp;lt;name of the location area you want to apply this to&amp;gt;&amp;quot;&lt;br /&gt;
 {&lt;br /&gt;
     //... (settings)&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Information about locations and how to set them up is available in another article: [[Location Settings #The Location Entities]].&lt;br /&gt;
Reverb zones use exactly the same locations as the ones which are used to specify per-area ambient sounds.&lt;br /&gt;
You should name every info_location entity, i.e. provide a &amp;quot;&amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt;&amp;quot; spawnarg for it. This is the name used in reverb zone definitions.&lt;br /&gt;
&lt;br /&gt;
As of TDM 2.06, you can&#039;t use capital letters in the name of your location entity or reverb zone. This may or may not change in the future.&lt;br /&gt;
&lt;br /&gt;
Here is an example of an entity which defines &amp;quot;canal_tunnel&amp;quot; location:&lt;br /&gt;
&lt;br /&gt;
 //======================= from volta_v1.map ====================&lt;br /&gt;
 // entity 3532&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;classname&amp;quot; &amp;quot;info_location&amp;quot;&lt;br /&gt;
   &amp;quot;name&amp;quot; &amp;quot;canal_tunnel&amp;quot;             //this is the name used&lt;br /&gt;
   &amp;quot;ambient&amp;quot; &amp;quot;snd_streets&amp;quot;&lt;br /&gt;
   &amp;quot;ambient_light&amp;quot; &amp;quot;0.04 0.03 0.02&amp;quot;&lt;br /&gt;
   &amp;quot;ambient_light_dynamic&amp;quot; &amp;quot;0.01 0.01 0.01&amp;quot;&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And this is the EFX effect (reverb zone) for it:&lt;br /&gt;
&lt;br /&gt;
 //======================= from volta_v1.efx ====================&lt;br /&gt;
 reverb &amp;quot;canal_tunnel&amp;quot; {             //name put to here&lt;br /&gt;
   &amp;quot;environment&amp;quot; 22&lt;br /&gt;
   &amp;quot;environment size&amp;quot; 1.8000&lt;br /&gt;
   &amp;quot;environment diffusion&amp;quot; 1.0000&lt;br /&gt;
   &amp;quot;room&amp;quot; -1000&lt;br /&gt;
   &amp;quot;room hf&amp;quot; -4000&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
During playing, the engine prints a message whenever the player&#039;s location changes.&lt;br /&gt;
It allows you to check if you have set up locations properly.&lt;br /&gt;
For instance, here are console messages showing a proper EFX location change:&lt;br /&gt;
&lt;br /&gt;
 Switching to EFX &#039;canal_tunnel&#039; (#295)&lt;br /&gt;
 Changed location from &#039;canal_streets&#039; to &#039;canal_tunnel&#039;.&lt;br /&gt;
&lt;br /&gt;
It is also possible to specify portal-area number instead of location name in the reverb zone definition.&lt;br /&gt;
The portal-area number is listed in the .proc file, which is created in the dmap process, in the format of &amp;lt;tt&amp;gt;_area&amp;lt;num&amp;gt;&amp;lt;/tt&amp;gt; (where &amp;lt;num&amp;gt; is the portal area number), e.g. &amp;lt;tt&amp;gt;_area15&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&#039;&#039;&#039;Beware:&#039;&#039;&#039; this functionality exists for fast hacking only! Do not release a mission with portal-area numbers in .efx file!&lt;br /&gt;
The main reason to avoid it is that portal-area numbers are auto-generated, so minor changes in your mission can change all of them.&lt;br /&gt;
&lt;br /&gt;
Finally, there is a &amp;quot;default&amp;quot; reverb environment which is used for any area in the map which does not have reverb information specified.&lt;br /&gt;
&lt;br /&gt;
The order that the sound system checks for reverb data is: area number -&amp;gt; location name -&amp;gt; default.&lt;br /&gt;
&lt;br /&gt;
== Changes during playing ==&lt;br /&gt;
Type &amp;quot;&amp;lt;tt&amp;gt;reloadSounds&amp;lt;/tt&amp;gt;&amp;quot; command into game console in order to reload EFX definitions.&lt;br /&gt;
&lt;br /&gt;
So when you experiment with EFX, execute this command after each tweak to EFX file to hear the difference immediately.&lt;br /&gt;
&lt;br /&gt;
== Suppress effect ==&lt;br /&gt;
Sometimes you want to disable EFX effect on a specific sound.&lt;br /&gt;
A typical example is when you have a voice in player&#039;s head, which must not depend on player&#039;s physical environment.&lt;br /&gt;
Another case is when some sound already has reverb baked in, so you don&#039;t what to double-reverb it. Although the best practice is to use sound samples without embedded reverb, combined with proper EFX definitions.&lt;br /&gt;
&lt;br /&gt;
You can disable all EFX effects on one specific sound shader by adding &amp;quot;&amp;lt;tt&amp;gt;no_efx&amp;lt;/tt&amp;gt;&amp;quot; keyword to its body.&lt;br /&gt;
For instance, here is how non-EFX version of blackjack unsheathing looks like:&lt;br /&gt;
 blackjack_unsheath&lt;br /&gt;
 {&lt;br /&gt;
   description &amp;quot;Made by pakmannen&amp;quot;&lt;br /&gt;
   sound/sfx/tools/melee/blackjack_unsheath.ogg&lt;br /&gt;
   no_efx                       //do NOT apply EFX to this sound&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note that if you change sound shaders, writing &amp;quot;&amp;lt;tt&amp;gt;reloadDecls&amp;lt;/tt&amp;gt;&amp;quot; in TDM game console is enough to reload them.&lt;br /&gt;
&lt;br /&gt;
There are a lot of stock sounds in TDM which should not be affected by EFX effects.&lt;br /&gt;
Starting from TDM 2.07, the corresponding core sounds are marked with &amp;quot;&amp;lt;tt&amp;gt;no_efx&amp;lt;/tt&amp;gt;&amp;quot; keyword (see issue [http://bugs.thedarkmod.com/view.php?id=4688 4688]).&lt;br /&gt;
If you discover any core sound which is affected by EFX while you believe it should not, start a discussion on forums.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Environment properties=&lt;br /&gt;
&lt;br /&gt;
== New properties (Version 2) ==&lt;br /&gt;
&lt;br /&gt;
With Version 2 of EFX file, the set of supported properties exactly matches the set of properties defined in OpenAL EFX for the &amp;quot;EAX Reverb&amp;quot; effect.&lt;br /&gt;
Note that EFX defines several types of effects, including &amp;quot;EAX Reverb&amp;quot;, &amp;quot;Standard Reverb&amp;quot;, &amp;quot;Chorus&amp;quot;, &amp;quot;Distortion&amp;quot;, &amp;quot;Echo&amp;quot;, &amp;quot;Flanger&amp;quot;, etc.&lt;br /&gt;
Only the first one is important, ignore all the rest (including the so-called &amp;quot;Standard Reverb&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
The detailed description of all the properties is given in &amp;quot;Appendix 1 – Effect property descriptions&amp;quot; of the [https://usermanual.wiki/Pdf/Effects20Extension20Guide.90272296/view#95 OpenAL Effects Extension Guide](pages 95-101).&lt;br /&gt;
The short list is also available in a table on [https://usermanual.wiki/Pdf/Effects20Extension20Guide.90272296/view#66 page 66 of the guide]:&lt;br /&gt;
&lt;br /&gt;
[[File:Eaxreverb_properties_screenshot.png|500px]]&lt;br /&gt;
&lt;br /&gt;
The only difference is that the property names in the guide have the &amp;lt;tt&amp;gt;AL_EAXREVERB_&amp;lt;/tt&amp;gt; prefix, while in TDM definitions this prefix is removed.&lt;br /&gt;
&lt;br /&gt;
== Presets (Version 2) ==&lt;br /&gt;
Presets can be set in 2 ways:&lt;br /&gt;
* in the .efx file&lt;br /&gt;
* the efx_preset spawnarg on the location entity for the location where you want to use the effect (since TDM 2.13)&lt;br /&gt;
&lt;br /&gt;
=== File Method ===&lt;br /&gt;
&lt;br /&gt;
There is one special property &amp;lt;tt&amp;gt;PRESET&amp;lt;/tt&amp;gt;, which is not present in the EFX guide.&lt;br /&gt;
This property accepts the name of the preset which you want to use:&lt;br /&gt;
&lt;br /&gt;
 eaxreverb &amp;quot;myclassroom&amp;quot; {&lt;br /&gt;
   preset auditorium&lt;br /&gt;
 }&lt;br /&gt;
 eaxreverb &amp;quot;mycave&amp;quot; {&lt;br /&gt;
   preset cave&lt;br /&gt;
 }&lt;br /&gt;
 eaxreverb &amp;quot;mycorridor&amp;quot; {&lt;br /&gt;
   preset hallway&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
If you specify the preset like this, the values for all the reverb properties will be taken from the specified preset.&lt;br /&gt;
Additionally, you can override values of some properties if you define them manually &#039;&#039;&#039;after&#039;&#039;&#039; defining the preset.&lt;br /&gt;
&lt;br /&gt;
The preset property also accepts index of preset. Don&#039;t use indices for anything except experimentation, since they may change in future.&lt;br /&gt;
&lt;br /&gt;
=== Location Entity Method ===&lt;br /&gt;
On the location entity where you want to use the preset, set the spawnarg efx_preset to the value of the preset.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
efx_preset    CITY_SUBWAY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The presets were taken from OpenAL-Soft implementation which TDM uses.&lt;br /&gt;
Here is the full list of preset names:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;height:350px; overflow:scroll;&amp;quot;&amp;gt;&lt;br /&gt;
GENERIC&lt;br /&gt;
PADDEDCELL&lt;br /&gt;
ROOM&lt;br /&gt;
BATHROOM&lt;br /&gt;
LIVINGROOM&lt;br /&gt;
STONEROOM&lt;br /&gt;
AUDITORIUM&lt;br /&gt;
CONCERTHALL&lt;br /&gt;
CAVE&lt;br /&gt;
ARENA&lt;br /&gt;
HANGAR&lt;br /&gt;
CARPETEDHALLWAY&lt;br /&gt;
HALLWAY&lt;br /&gt;
STONECORRIDOR&lt;br /&gt;
ALLEY&lt;br /&gt;
FOREST&lt;br /&gt;
CITY&lt;br /&gt;
MOUNTAINS&lt;br /&gt;
QUARRY&lt;br /&gt;
PLAIN&lt;br /&gt;
PARKINGLOT&lt;br /&gt;
SEWERPIPE&lt;br /&gt;
UNDERWATER&lt;br /&gt;
DRUGGED&lt;br /&gt;
DIZZY&lt;br /&gt;
PSYCHOTIC&lt;br /&gt;
CASTLE_SMALLROOM&lt;br /&gt;
CASTLE_SHORTPASSAGE&lt;br /&gt;
CASTLE_MEDIUMROOM&lt;br /&gt;
CASTLE_LARGEROOM&lt;br /&gt;
CASTLE_LONGPASSAGE&lt;br /&gt;
CASTLE_HALL&lt;br /&gt;
CASTLE_CUPBOARD&lt;br /&gt;
CASTLE_COURTYARD&lt;br /&gt;
CASTLE_ALCOVE&lt;br /&gt;
FACTORY_SMALLROOM&lt;br /&gt;
FACTORY_SHORTPASSAGE&lt;br /&gt;
FACTORY_MEDIUMROOM&lt;br /&gt;
FACTORY_LARGEROOM&lt;br /&gt;
FACTORY_LONGPASSAGE&lt;br /&gt;
FACTORY_HALL&lt;br /&gt;
FACTORY_CUPBOARD&lt;br /&gt;
FACTORY_COURTYARD&lt;br /&gt;
FACTORY_ALCOVE&lt;br /&gt;
ICEPALACE_SMALLROOM&lt;br /&gt;
ICEPALACE_SHORTPASSAGE&lt;br /&gt;
ICEPALACE_MEDIUMROOM&lt;br /&gt;
ICEPALACE_LARGEROOM&lt;br /&gt;
ICEPALACE_LONGPASSAGE&lt;br /&gt;
ICEPALACE_HALL&lt;br /&gt;
ICEPALACE_CUPBOARD&lt;br /&gt;
ICEPALACE_COURTYARD&lt;br /&gt;
ICEPALACE_ALCOVE&lt;br /&gt;
SPACESTATION_SMALLROOM&lt;br /&gt;
SPACESTATION_SHORTPASSAGE&lt;br /&gt;
SPACESTATION_MEDIUMROOM&lt;br /&gt;
SPACESTATION_LARGEROOM&lt;br /&gt;
SPACESTATION_LONGPASSAGE&lt;br /&gt;
SPACESTATION_HALL&lt;br /&gt;
SPACESTATION_CUPBOARD&lt;br /&gt;
SPACESTATION_ALCOVE&lt;br /&gt;
WOODEN_SMALLROOM&lt;br /&gt;
WOODEN_SHORTPASSAGE&lt;br /&gt;
WOODEN_MEDIUMROOM&lt;br /&gt;
WOODEN_LARGEROOM&lt;br /&gt;
WOODEN_LONGPASSAGE&lt;br /&gt;
WOODEN_HALL&lt;br /&gt;
WOODEN_CUPBOARD&lt;br /&gt;
WOODEN_COURTYARD&lt;br /&gt;
WOODEN_ALCOVE&lt;br /&gt;
SPORT_EMPTYSTADIUM&lt;br /&gt;
SPORT_SQUASHCOURT&lt;br /&gt;
SPORT_SMALLSWIMMINGPOOL&lt;br /&gt;
SPORT_LARGESWIMMINGPOOL&lt;br /&gt;
SPORT_GYMNASIUM&lt;br /&gt;
SPORT_FULLSTADIUM&lt;br /&gt;
SPORT_STADIUMTANNOY&lt;br /&gt;
PREFAB_WORKSHOP&lt;br /&gt;
PREFAB_SCHOOLROOM&lt;br /&gt;
PREFAB_PRACTISEROOM&lt;br /&gt;
PREFAB_OUTHOUSE&lt;br /&gt;
PREFAB_CARAVAN&lt;br /&gt;
DOME_TOMB&lt;br /&gt;
PIPE_SMALL&lt;br /&gt;
DOME_SAINTPAULS&lt;br /&gt;
PIPE_LONGTHIN&lt;br /&gt;
PIPE_LARGE&lt;br /&gt;
PIPE_RESONANT&lt;br /&gt;
OUTDOORS_BACKYARD&lt;br /&gt;
OUTDOORS_ROLLINGPLAINS&lt;br /&gt;
OUTDOORS_DEEPCANYON&lt;br /&gt;
OUTDOORS_CREEK&lt;br /&gt;
OUTDOORS_VALLEY&lt;br /&gt;
MOOD_HEAVEN&lt;br /&gt;
MOOD_HELL&lt;br /&gt;
MOOD_MEMORY&lt;br /&gt;
DRIVING_COMMENTATOR&lt;br /&gt;
DRIVING_PITGARAGE&lt;br /&gt;
DRIVING_INCAR_RACER&lt;br /&gt;
DRIVING_INCAR_SPORTS&lt;br /&gt;
DRIVING_INCAR_LUXURY&lt;br /&gt;
DRIVING_FULLGRANDSTAND&lt;br /&gt;
DRIVING_EMPTYGRANDSTAND&lt;br /&gt;
DRIVING_TUNNEL&lt;br /&gt;
CITY_STREETS&lt;br /&gt;
CITY_SUBWAY&lt;br /&gt;
CITY_MUSEUM&lt;br /&gt;
CITY_LIBRARY&lt;br /&gt;
CITY_UNDERPASS&lt;br /&gt;
CITY_ABANDONED&lt;br /&gt;
DUSTYROOM&lt;br /&gt;
CHAPEL&lt;br /&gt;
SMALLWATERROOM                              &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Their definitions can be seen in [https://github.com/kcat/openal-soft/blob/master/include/AL/efx-presets.h efx-presets.h] from OpenAL-Soft source code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-expandtext=&amp;quot;Show&amp;quot; data-collapsetext=&amp;quot;Hide&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Legacy info (Version 1) ==&lt;br /&gt;
&lt;br /&gt;
This information is from the old official EAX 2.0 documentation, although some properties may have changed in scope and focus from EAX 2.0 to EAX 4.0. One can assume that the properties serve the same general purpose and that each property&#039;s value bounds are approximately the same.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;environment&#039;&#039;&#039; - Unknown. Likely sets the room to one of an unknown number of environment presets.&lt;br /&gt;
* &#039;&#039;&#039;environment size&#039;&#039;&#039; - The Environment Size property sets the apparent size of the surrounding “room.” The value of Environment Size can be considered a characteristic dimension of the room expressed in meters. Scaling Environment Size is equivalent to scaling all dimensions of the room by the same factor. Value type is FLOAT; value range is 1.0 to 100.0, expressed in linear meters.&lt;br /&gt;
* &#039;&#039;&#039;environment diffusion&#039;&#039;&#039; - The Environment Diffusion property controls the echo density in the reverberation decay. Reducing diffusion gives the reverberation a more “grainy” character that is especially noticeable with percussive sound sources. If you set a diffusion value of 0.0, the later reverberation sounds like a succession of distinct echoes. Value type is FLOAT; value range is 0.0 to 1.0, expressed in a linear multiplier value.&lt;br /&gt;
* &#039;&#039;&#039;room&#039;&#039;&#039; - The Room property is the master volume control for the reflected sound (both early reflections and reverberation) that EAX adds to all sound sources. It sets the maximum amount of reflections and reverberation added to the sound mix in the primary buffer (the listener). Value is LONG; value range is -10000 to 0, expressed in hundredths of one decibel (-100 dB to 0 dB).&lt;br /&gt;
* &#039;&#039;&#039;room hf&#039;&#039;&#039; - The Room HF property further tweaks reflected sound by attenuating it at high frequencies. It controls a low-pass filter that applies globally to the reflected sound of all sound sources. The exact qualities of this low-pass filter -- its frequency and its bandwidth (Q) -- are unknown. Value type is LONG; value range is -10000 to 0, expressed in hundredths of one decibel (-100 dB to 0 dB).&lt;br /&gt;
* &#039;&#039;&#039;room lf&#039;&#039;&#039; - Undocumented. Assumably, the Room LF property applies a high-pass to reflected sound in much the same way as Room HF applies low-pass. The value type and range is unknown, but is likely LONG, must be between -10000 and 0 and is expressed in hundredths of one decibel.&lt;br /&gt;
* &#039;&#039;&#039;decay time&#039;&#039;&#039; - The Decay Time property sets the reverberation decay time, or the time in which reverberation is diminished. It ranges from 0.1 (typically a small room with very dead surfaces) to 20.0 (typically a large room with very live surfaces). Value is FLOAT; value range is 0.1 to 20.0, expressed in seconds.&lt;br /&gt;
* &#039;&#039;&#039;decay hf ratio&#039;&#039;&#039; - The Decay HF Ratio property sets the spectral quality of the Decay Time parameter. It is the ratio of high-frequency decay time relative to the time set by Decay Time. The Decay HF Ratio value 1.0 is neutral: the decay time is equal for all frequencies. As Decay HF Ratio increases above 1.0, the high-frequency decay time increases so it’s longer than the decay time at low frequencies. You hear a more brilliant reverberation with a longer decay at high frequencies. As the Decay HF Ratio value decreases below 1.0, the high-frequency decay time decreases so it’s shorter than the decay time of the low frequencies. You hear a more natural reverberation. Value is FLOAT; value range is 0.1 to 20.0, expressed in a linear multiplier variable.&lt;br /&gt;
* &#039;&#039;&#039;decay lf ratio&#039;&#039;&#039; - Undocumented. It&#039;s likely best to leave the value at 1.0, though the value&#039;s type and range is probably the same as the Decay HF Ratio property.&lt;br /&gt;
* &#039;&#039;&#039;reflections&#039;&#039;&#039; - The Reflections property controls the overall amount of initial reflections relative to the Room property. The value of Reflections ranges from a maximum of 10 dB to a minimum of -100 dB (no initial reflections at all), and is corrected by the value of the Room property. The Reflections property does not affect the subsequent reverberation decay. You can increase the amount of initial reflections to simulate a more narrow space or closer walls, especially effective if you associate the initial reflections increase with a reduction in reflections delays by lowering the value of the Reflection Delay property. To simulate open or semi-open environments, you can maintain the amount of early reflections while reducing the value of the Reverb property, which controls later reflections. Value type is LONG; value range is -10000 to 1000, expressed in hundredths of one decibel (-100 dB to -10 dB).&lt;br /&gt;
* &#039;&#039;&#039;reflections delay&#039;&#039;&#039; - The Reflections Delay property is the amount of delay between the arrival time of the direct path from the source to the first reflection from the source. It ranges from 0 to 300 milliseconds. You can reduce or increase Reflections Delay to simulate closer or more distant reflective surfaces—and therefore control the perceived size of the room. Value is FLOAT; value range is 0.0 to 0.3, expressed in seconds (0 to 300 milliseconds).&lt;br /&gt;
* &#039;&#039;&#039;reflections pan&#039;&#039;&#039; - Undocumented. Three values are specified which may correspond to a generic &amp;quot;front&amp;quot;, &amp;quot;side&amp;quot; and &amp;quot;back/rear&amp;quot; configuration to control the directivity of early reflections in a 7.1 surround matrix. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;reverb&#039;&#039;&#039; - The Reverb property controls the overall amount of later reverberation relative to the Room property. (The Room property sets the overall amount of both initial reflections and later reverberation.) The value of Reverb ranges from a maximum of 20 dB to a minimum of -100 dB (no late reverberation at all). Value is LONG; value range is -10000 to 2000, expressed in hundredths of a decibel (-100 dB to 20 dB).&lt;br /&gt;
* &#039;&#039;&#039;reverb delay&#039;&#039;&#039; - The Reverb Delay property defines the begin time of the late reverberation relative to the time of the initial reflection (the first of the early reflections). It ranges from 0 to 100 milliseconds. Reducing or increasing Reverb Delay is useful for simulating a smaller or larger room. Value is FLOAT; value range is 0.0 to 0.1, expressed in seconds (0 to 100 milliseconds).&lt;br /&gt;
* &#039;&#039;&#039;reverb pan&#039;&#039;&#039; - Undocumented. Three values are specified which may correspond to a generic &amp;quot;front&amp;quot;, &amp;quot;side&amp;quot; and &amp;quot;back/rear&amp;quot; configuration to control the directivity of reverberation in a 7.1 surround matrix. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;echo time&#039;&#039;&#039; - Undocumented. Likely controls the decay time of echoes, or late reflections. A value of 0.1 likely presents a natural amount of echo, while increasing the value likely causes a &amp;quot;Grand Canyon&amp;quot; effect. Value type is likely FLOAT; value range is likely between 0.075 and 0.25, expressed in seconds.&lt;br /&gt;
* &#039;&#039;&#039;echo depth&#039;&#039;&#039; - Undocumented. May control directionality or tonal qualities of echoes arriving at the listener. Probably best to leave at 1.0. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;modulation time&#039;&#039;&#039; - Undocumented. Unknown purpose. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;modulation depth&#039;&#039;&#039; - Undocumented. Unknown purpose. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;air absorption hf&#039;&#039;&#039; - The Air Absorption HF property controls the distance-dependent attenuation at high frequencies caused by the propagation medium. It applies to both the direct path and reflected sound. You can use Air Absorption HF to simulate sound transmission through foggy air, dry air, smoky atmosphere, and so on. The default value is -0.05 dB per meter, which roughly corresponds to typical condition of atmospheric humidity, temperature, and so on. Lowering the value simulates a more absorbent medium (more humidity in the air, for example); raising the value simulates a less absorbent medium (dry desert air, for example). Value is FLOAT; value range is -100.0 to 0.0, expressed in hundredths of one decibel per meter (-1 dB to 0 dB). Default value is -5.0, which corresponds to -0.05 dB per meter attenuation.&lt;br /&gt;
* &#039;&#039;&#039;hf reference&#039;&#039;&#039; - Likely defines the frequency used for low-pass filters. Value is likely LONG; value range is likely between 0.0 and 20000.0, expressed in Hz. This value is probably best left at 5000.0.&lt;br /&gt;
* &#039;&#039;&#039;lf reference&#039;&#039;&#039; - Likely defines the frequency used for high-pass filters. Value is likely LONG; value range is likely between 0.0 and 20000.0, expressed in Hz. This value is probably best left at 250.0.&lt;br /&gt;
* &#039;&#039;&#039;room rolloff factor&#039;&#039;&#039; - The Room Rolloff property is one of two methods available in EAX to attenuate the reflected sound (containing both reflections, reverberation and echoes) according to source-listener distance. Value type is FLOAT; value range is 0.0 to 10.0, expressed in a linear multiplier value. It&#039;s recommended that users use 0.0, as id Software did not deviate from this value with Doom 3.&lt;br /&gt;
* &#039;&#039;&#039;flags&#039;&#039;&#039; - The Flags property is intended to control the relationship of high-level EAX properties to low-level properties. If certain EAX flags are set by setting the Flags property to a particular value, the setting of high-level properties is supposed to control the values of low-level properties based upon a defined scale, overriding specified values. In EAX 2.0, the value type is DWORD, whereas in Doom 3, it appears to be INT or some other type commonly used to store numeric values. In Doom 3, common values are 0, 2, 15, 31, 32, 56 and 63, but no documentation details what these values correspond to. If users wish to experiment with the Flags property, it is recommended that they choose from one of the above values. For reference, here is a table with the counts for each flag value as used in Doom 3:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 0.5em; margin-left: 2em; border: 1px solid #a0a0a0; text-align: right; border-collapse: collapse;&amp;quot; cellpadding=&amp;quot;2&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Flag decimal&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Flag binary&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Count&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|00000000&lt;br /&gt;
|497&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|00000010&lt;br /&gt;
|6&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|00001110&lt;br /&gt;
|15&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|00001111&lt;br /&gt;
|94&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|31&lt;br /&gt;
|00011111&lt;br /&gt;
|511&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|32&lt;br /&gt;
|00100000&lt;br /&gt;
|247&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|56&lt;br /&gt;
|00111000&lt;br /&gt;
|59&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|63&lt;br /&gt;
|00111111&lt;br /&gt;
|168&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Design.&#039;&#039;&#039;&lt;br /&gt;
In terms of the actual sound design for the values you put into these variables, here is a general tutorial on reverb from FruityLoops (NOTE: This is for a music production plugin, some of these don&#039;t apply, it&#039;s just to give a general idea on what certain variables do):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Low Cut&#039;&#039;&#039; Adjusts the low cutoff frequency. Use this to remove low frequencies from the input signal before reverb is added. For example, if you are adding reverb to, say a drum track, you might want to remove some of the &#039;rumble&#039; from the bass drum by attenuating the bass frequencies. Setting this parameter to the minimum value will bypass the Low Cut filter, displaying OFF in the value field.&lt;br /&gt;
* &#039;&#039;&#039;High Cut&#039;&#039;&#039; - Similar to the Low Cut, this adjusts the high cutoff frequency. Use this to remove high frequencies from the input signal.&lt;br /&gt;
* &#039;&#039;&#039;Predelay&#039;&#039;&#039; - Controls the delay time between the direct input signal and the first reverb reflection. This should be set to modest values for small rooms, and can be increased in relation to increases in room size. &#039;&#039;&#039;Predelay&#039;&#039;&#039; creates a slap-back echo effect that can both add atmosphere and muffle the signal, so use it wisely.&lt;br /&gt;
* &#039;&#039;&#039;Room Size&#039;&#039;&#039; - Use this to set the size of the virtual room where the reverb is created. The Room Size should be adjusted according to the decay time. Small rooms sound better with a short decay time, large rooms sound better with longer reverb times.&lt;br /&gt;
* &#039;&#039;&#039;Diffusion&#039;&#039;&#039; - Controls the density of the reflections bouncing off the walls of the virtual room. A low diffusion setting makes the reflections sound more distinct, like closely spaced echoes. A high diffusion setting creates reflections so close they sound more like noise, where no echoes can be distinguished.&lt;br /&gt;
* &#039;&#039;&#039;Color&#039;&#039;&#039; - The Color parameter is used for adjusting the decay time of the bass frequencies of the signal. This allows you to change the overall perceived mood or &#039;sound&#039; of the virtual room. A bright room has a low bass response, while warm rooms have a higher bass response. In a flat room, the response of the bass is equal to the general frequency response. Color has five settings: Brighter, Bright, Flat, Warm, Warmer.&lt;br /&gt;
* &#039;&#039;&#039;Decay&#039;&#039;&#039; - Controls the decay time of the reverb, the time it takes for the signal to decay to -60dB (1/1000 of the maximum amplitude). Use low decay times for small rooms or boxes, and long decay times for large rooms, halls or churches. You should also make sure that the Room Size parameter has an appropriate value.&lt;br /&gt;
* &#039;&#039;&#039;High Damping&#039;&#039;&#039; - This parameter allows you to adjust damping of the high frequencies in the reverb signal over time. Damping refers to the high frequencies being attenuated and dying out. This causes the sound to become gradually muffled and warm like it is being absorbed in the room. Setting this parameter to the maximum value will bypass the High Damping, displaying OFF in the value field.&lt;br /&gt;
* &#039;&#039;&#039;Dry&#039;&#039;&#039; - Sets the relative dry output level.&lt;br /&gt;
* &#039;&#039;&#039;Reverb&#039;&#039;&#039; - Sets the relative reverb (wet) signal level.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Error Check=&lt;br /&gt;
If you modified the presets in your EFX file, you can check for errors ingame. Load your map and open the console. Type &#039;&#039;reloadSounds&#039;&#039;, this will trigger the reload of the EFX used in your map and print out the vars which cause an error (like a value exceeding the maximum range). Note that if your EFX files contain errors, this will make the game ignore the EFX settings you chose. &lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
See the &amp;quot;EFX Reverb&amp;quot; column of &#039;&#039;&#039;[[Fan_Missions_for_The_Dark_Mod|Fan Missions page]]&#039;&#039;&#039;. Missions with &amp;quot;Yes&amp;quot; have EFX Reverb. &lt;br /&gt;
&amp;lt;br&amp;gt;Most missions use v2.0 presets but a few missions such as &amp;quot;Volta and the Stone&amp;quot; and Behind Closed Doors use v1.0 settings.&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
The Version 2 definitions were implemented due to [http://bugs.thedarkmod.com/view.php?id=4815 issue 4815], it has some brief explanation.&lt;br /&gt;
&lt;br /&gt;
A tutorial based around EFX can be found [http://forums.thedarkmod.com/topic/19205-getting-started-with-the-efx-room-reverb-system-wip/ here]&lt;br /&gt;
&lt;br /&gt;
An old demonstration map of EAX in TDM is included [http://forums.thedarkmod.com/topic/11045-environmental-audio-extensions-eax-in-tdm/ here]&lt;br /&gt;
&lt;br /&gt;
A discussion about no_efx is [http://forums.thedarkmod.com/topic/19213-efx-discussion here]&lt;br /&gt;
&lt;br /&gt;
The first version of this article was written by Ishtvan [https://forums.thedarkmod.com/index.php?/topic/2071-setting-reverb-data-in-new-soundengine-wiki/ here]&lt;br /&gt;
&lt;br /&gt;
[[Category:Sound]]&lt;br /&gt;
[[Category:Tutorial]]&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=Setting_Reverb_Data_of_Rooms_(EAX)&amp;diff=33795</id>
		<title>Setting Reverb Data of Rooms (EAX)</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=Setting_Reverb_Data_of_Rooms_(EAX)&amp;diff=33795"/>
		<updated>2025-01-11T20:51:12Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: /* Setup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
This document will attempt to explain how to set the new EFX settings in your rooms when mapping.&lt;br /&gt;
&lt;br /&gt;
Previously these settings were known as EAX settings, and required EAX 4.0-compatible sound card.&lt;br /&gt;
In TDM 2.06, EAX technology was completely replaced with OpenAL EFX, which is now processed in software (by [https://github.com/kcat/openal-soft openal-soft]) without any requirements on sound card.&lt;br /&gt;
&lt;br /&gt;
= General =&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
&lt;br /&gt;
EFX for an FM can be configured with or without a configuration file.  However, fileless configuration is only supported for [[Setting_Reverb_Data_of_Rooms_(EAX)#Presets_(Version_2)|EFX presets]].&lt;br /&gt;
&lt;br /&gt;
== EFX file ==&lt;br /&gt;
The EFX info for a map should be stored in the file &amp;quot;&amp;lt;tt&amp;gt;efxs/&amp;lt;mapname&amp;gt;.efx&amp;lt;/tt&amp;gt;&amp;quot;, where &amp;lt;mapname&amp;gt; is the name of your .map file (without extension).&lt;br /&gt;
&lt;br /&gt;
In order to check that you have put the file into right location, start your mission in game.&lt;br /&gt;
If TDM manages to load your efx file, then you will see the following message in console:&lt;br /&gt;
 sound: found efxs/&amp;lt;mapname&amp;gt;.efx&lt;br /&gt;
If you failed something, then you will see a bit different message there:&lt;br /&gt;
 sound: missing efxs/&amp;lt;mapname&amp;gt;.efx&lt;br /&gt;
In both cases some additional diagnostic messages can be present nearby.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; you must enable &amp;quot;&amp;lt;tt&amp;gt;OpenAL EFX&amp;lt;/tt&amp;gt;&amp;quot; in sound settings in the main menu, otherwise TDM won&#039;t even try to load the efx file.&lt;br /&gt;
&lt;br /&gt;
It is a plain text file, so you can open it up in your text editor of choice.&lt;br /&gt;
&lt;br /&gt;
Any EFX file must start with a header which specifies its &#039;&#039;&#039;version&#039;&#039;&#039;:&lt;br /&gt;
 Version 2&lt;br /&gt;
If you forget this line, then your EFX file will &#039;&#039;&#039;not&#039;&#039;&#039; be loaded.&lt;br /&gt;
The following versions are supported:&lt;br /&gt;
* &amp;lt;tt&amp;gt;Version 1&amp;lt;/tt&amp;gt; was supported by TDM from the very beginning. It uses some non-standard terms and quantities, which makes it hard to work with.&lt;br /&gt;
* &amp;lt;tt&amp;gt;Version 2&amp;lt;/tt&amp;gt; was added in TDM 2.07. It uses the parameters from OpenAL EFX and supports a lot of presets. &#039;&#039;&#039;Recommended for all new missions.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The rest of the file consists of separate blocks, one for each &amp;quot;reverb zone&amp;quot;.&lt;br /&gt;
Each block must start with &amp;lt;tt&amp;gt;reverb&amp;lt;/tt&amp;gt; keyword for Version 1 definitions, and &amp;lt;tt&amp;gt;eaxreverb&amp;lt;/tt&amp;gt; keyword for Version 2 definitions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here is an example of such block from mars_city1.efx of the original Doom 3 game (Version 1):&lt;br /&gt;
&lt;br /&gt;
 // reverb maintenance&lt;br /&gt;
 reverb &amp;quot;maintenance&amp;quot; {&lt;br /&gt;
  &amp;quot;environment&amp;quot; 26&lt;br /&gt;
  &amp;quot;environment size&amp;quot; 5.0670&lt;br /&gt;
  &amp;quot;environment diffusion&amp;quot; 0.6030&lt;br /&gt;
  &amp;quot;room&amp;quot; -411&lt;br /&gt;
  &amp;quot;room hf&amp;quot; -685&lt;br /&gt;
  &amp;quot;room lf&amp;quot; 0&lt;br /&gt;
  &amp;quot;decay time&amp;quot; 1.7360&lt;br /&gt;
  &amp;quot;decay hf ratio&amp;quot; 0.8030&lt;br /&gt;
  &amp;quot;decay lf ratio&amp;quot; 1.0000&lt;br /&gt;
  &amp;quot;reflections&amp;quot; 96&lt;br /&gt;
  &amp;quot;reflections delay&amp;quot; 0.0080&lt;br /&gt;
  &amp;quot;reflections pan&amp;quot; 0.0000 0.0000 0.0000&lt;br /&gt;
  &amp;quot;reverb&amp;quot; 27&lt;br /&gt;
  &amp;quot;reverb delay&amp;quot; 0.0050&lt;br /&gt;
  &amp;quot;reverb pan&amp;quot; 0.0000 0.0000 0.0000&lt;br /&gt;
  &amp;quot;echo time&amp;quot; 0.0750&lt;br /&gt;
  &amp;quot;echo depth&amp;quot; 1.0000&lt;br /&gt;
  &amp;quot;modulation time&amp;quot; 0.2500&lt;br /&gt;
  &amp;quot;modulation depth&amp;quot; 0.0000&lt;br /&gt;
  &amp;quot;air absorption hf&amp;quot; -5.0000&lt;br /&gt;
  &amp;quot;hf reference&amp;quot; 5000.0000&lt;br /&gt;
  &amp;quot;lf reference&amp;quot; 250.0000&lt;br /&gt;
  &amp;quot;room rolloff factor&amp;quot; 0.0000&lt;br /&gt;
  &amp;quot;flags&amp;quot; 56&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And here is an artificial example of Version 2 definitions:&lt;br /&gt;
&lt;br /&gt;
  eaxreverb &amp;quot;myweirdstreets&amp;quot; {&lt;br /&gt;
    reflections_gain 0.5&lt;br /&gt;
    reflections_delay 0.0050&lt;br /&gt;
    late_reverb_gain 2.5&lt;br /&gt;
    late_reverb_delay 0.050&lt;br /&gt;
    echo_time 0.25&lt;br /&gt;
    echo_depth 0.9000&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
What does all this mean? &lt;br /&gt;
&lt;br /&gt;
There is a lot of sound design stuff that one could make guesses at if you&#039;ve ever used a reverb plugin in any sort of sound editing program. hf = high frequency, lf = low frequency, etc.&lt;br /&gt;
&lt;br /&gt;
A proper explanation of the parameters is given below.&lt;br /&gt;
&lt;br /&gt;
== Locations ==&lt;br /&gt;
Each reverb zone definition starts with a line which specifies to which location it must be applied:&lt;br /&gt;
&lt;br /&gt;
 reverb &amp;quot;&amp;lt;name of the location area you want to apply this to&amp;gt;&amp;quot;&lt;br /&gt;
 {&lt;br /&gt;
     //... (settings)&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Information about locations and how to set them up is available in another article: [[Location Settings #The Location Entities]].&lt;br /&gt;
Reverb zones use exactly the same locations as the ones which are used to specify per-area ambient sounds.&lt;br /&gt;
You should name every info_location entity, i.e. provide a &amp;quot;&amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt;&amp;quot; spawnarg for it. This is the name used in reverb zone definitions.&lt;br /&gt;
&lt;br /&gt;
As of TDM 2.06, you can&#039;t use capital letters in the name of your location entity or reverb zone. This may or may not change in the future.&lt;br /&gt;
&lt;br /&gt;
Here is an example of an entity which defines &amp;quot;canal_tunnel&amp;quot; location:&lt;br /&gt;
&lt;br /&gt;
 //======================= from volta_v1.map ====================&lt;br /&gt;
 // entity 3532&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;classname&amp;quot; &amp;quot;info_location&amp;quot;&lt;br /&gt;
   &amp;quot;name&amp;quot; &amp;quot;canal_tunnel&amp;quot;             //this is the name used&lt;br /&gt;
   &amp;quot;ambient&amp;quot; &amp;quot;snd_streets&amp;quot;&lt;br /&gt;
   &amp;quot;ambient_light&amp;quot; &amp;quot;0.04 0.03 0.02&amp;quot;&lt;br /&gt;
   &amp;quot;ambient_light_dynamic&amp;quot; &amp;quot;0.01 0.01 0.01&amp;quot;&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And this is the EFX effect (reverb zone) for it:&lt;br /&gt;
&lt;br /&gt;
 //======================= from volta_v1.efx ====================&lt;br /&gt;
 reverb &amp;quot;canal_tunnel&amp;quot; {             //name put to here&lt;br /&gt;
   &amp;quot;environment&amp;quot; 22&lt;br /&gt;
   &amp;quot;environment size&amp;quot; 1.8000&lt;br /&gt;
   &amp;quot;environment diffusion&amp;quot; 1.0000&lt;br /&gt;
   &amp;quot;room&amp;quot; -1000&lt;br /&gt;
   &amp;quot;room hf&amp;quot; -4000&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
During playing, the engine prints a message whenever the player&#039;s location changes.&lt;br /&gt;
It allows you to check if you have set up locations properly.&lt;br /&gt;
For instance, here are console messages showing a proper EFX location change:&lt;br /&gt;
&lt;br /&gt;
 Switching to EFX &#039;canal_tunnel&#039; (#295)&lt;br /&gt;
 Changed location from &#039;canal_streets&#039; to &#039;canal_tunnel&#039;.&lt;br /&gt;
&lt;br /&gt;
It is also possible to specify portal-area number instead of location name in the reverb zone definition.&lt;br /&gt;
The portal-area number is listed in the .proc file, which is created in the dmap process, in the format of &amp;lt;tt&amp;gt;_area&amp;lt;num&amp;gt;&amp;lt;/tt&amp;gt; (where &amp;lt;num&amp;gt; is the portal area number), e.g. &amp;lt;tt&amp;gt;_area15&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&#039;&#039;&#039;Beware:&#039;&#039;&#039; this functionality exists for fast hacking only! Do not release a mission with portal-area numbers in .efx file!&lt;br /&gt;
The main reason to avoid it is that portal-area numbers are auto-generated, so minor changes in your mission can change all of them.&lt;br /&gt;
&lt;br /&gt;
Finally, there is a &amp;quot;default&amp;quot; reverb environment which is used for any area in the map which does not have reverb information specified.&lt;br /&gt;
&lt;br /&gt;
The order that the sound system checks for reverb data is: area number -&amp;gt; location name -&amp;gt; default.&lt;br /&gt;
&lt;br /&gt;
== Changes during playing ==&lt;br /&gt;
Type &amp;quot;&amp;lt;tt&amp;gt;reloadSounds&amp;lt;/tt&amp;gt;&amp;quot; command into game console in order to reload EFX definitions.&lt;br /&gt;
&lt;br /&gt;
So when you experiment with EFX, execute this command after each tweak to EFX file to hear the difference immediately.&lt;br /&gt;
&lt;br /&gt;
== Suppress effect ==&lt;br /&gt;
Sometimes you want to disable EFX effect on a specific sound.&lt;br /&gt;
A typical example is when you have a voice in player&#039;s head, which must not depend on player&#039;s physical environment.&lt;br /&gt;
Another case is when some sound already has reverb baked in, so you don&#039;t what to double-reverb it. Although the best practice is to use sound samples without embedded reverb, combined with proper EFX definitions.&lt;br /&gt;
&lt;br /&gt;
You can disable all EFX effects on one specific sound shader by adding &amp;quot;&amp;lt;tt&amp;gt;no_efx&amp;lt;/tt&amp;gt;&amp;quot; keyword to its body.&lt;br /&gt;
For instance, here is how non-EFX version of blackjack unsheathing looks like:&lt;br /&gt;
 blackjack_unsheath&lt;br /&gt;
 {&lt;br /&gt;
   description &amp;quot;Made by pakmannen&amp;quot;&lt;br /&gt;
   sound/sfx/tools/melee/blackjack_unsheath.ogg&lt;br /&gt;
   no_efx                       //do NOT apply EFX to this sound&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note that if you change sound shaders, writing &amp;quot;&amp;lt;tt&amp;gt;reloadDecls&amp;lt;/tt&amp;gt;&amp;quot; in TDM game console is enough to reload them.&lt;br /&gt;
&lt;br /&gt;
There are a lot of stock sounds in TDM which should not be affected by EFX effects.&lt;br /&gt;
Starting from TDM 2.07, the corresponding core sounds are marked with &amp;quot;&amp;lt;tt&amp;gt;no_efx&amp;lt;/tt&amp;gt;&amp;quot; keyword (see issue [http://bugs.thedarkmod.com/view.php?id=4688 4688]).&lt;br /&gt;
If you discover any core sound which is affected by EFX while you believe it should not, start a discussion on forums.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Environment properties=&lt;br /&gt;
&lt;br /&gt;
== New properties (Version 2) ==&lt;br /&gt;
&lt;br /&gt;
With Version 2 of EFX file, the set of supported properties exactly matches the set of properties defined in OpenAL EFX for the &amp;quot;EAX Reverb&amp;quot; effect.&lt;br /&gt;
Note that EFX defines several types of effects, including &amp;quot;EAX Reverb&amp;quot;, &amp;quot;Standard Reverb&amp;quot;, &amp;quot;Chorus&amp;quot;, &amp;quot;Distortion&amp;quot;, &amp;quot;Echo&amp;quot;, &amp;quot;Flanger&amp;quot;, etc.&lt;br /&gt;
Only the first one is important, ignore all the rest (including the so-called &amp;quot;Standard Reverb&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
The detailed description of all the properties is given in &amp;quot;Appendix 1 – Effect property descriptions&amp;quot; of the [https://usermanual.wiki/Pdf/Effects20Extension20Guide.90272296/view#95 OpenAL Effects Extension Guide](pages 95-101).&lt;br /&gt;
The short list is also available in a table on [https://usermanual.wiki/Pdf/Effects20Extension20Guide.90272296/view#66 page 66 of the guide]:&lt;br /&gt;
&lt;br /&gt;
[[File:Eaxreverb_properties_screenshot.png|500px]]&lt;br /&gt;
&lt;br /&gt;
The only difference is that the property names in the guide have the &amp;lt;tt&amp;gt;AL_EAXREVERB_&amp;lt;/tt&amp;gt; prefix, while in TDM definitions this prefix is removed.&lt;br /&gt;
&lt;br /&gt;
== Presets (Version 2) ==&lt;br /&gt;
&lt;br /&gt;
There is one special property &amp;lt;tt&amp;gt;PRESET&amp;lt;/tt&amp;gt;, which is not present in the EFX guide.&lt;br /&gt;
This property accepts the name of the preset which you want to use:&lt;br /&gt;
&lt;br /&gt;
 eaxreverb &amp;quot;myclassroom&amp;quot; {&lt;br /&gt;
   preset auditorium&lt;br /&gt;
 }&lt;br /&gt;
 eaxreverb &amp;quot;mycave&amp;quot; {&lt;br /&gt;
   preset cave&lt;br /&gt;
 }&lt;br /&gt;
 eaxreverb &amp;quot;mycorridor&amp;quot; {&lt;br /&gt;
   preset hallway&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
If you specify the preset like this, the values for all the reverb properties will be taken from the specified preset.&lt;br /&gt;
Additionally, you can override values of some properties if you define them manually &#039;&#039;&#039;after&#039;&#039;&#039; defining the preset.&lt;br /&gt;
&lt;br /&gt;
The preset property also accepts index of preset. Don&#039;t use indices for anything except experimentation, since they may change in future.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The presets were taken from OpenAL-Soft implementation which TDM uses.&lt;br /&gt;
Here is the full list of preset names:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;height:350px; overflow:scroll;&amp;quot;&amp;gt;&lt;br /&gt;
GENERIC&lt;br /&gt;
PADDEDCELL&lt;br /&gt;
ROOM&lt;br /&gt;
BATHROOM&lt;br /&gt;
LIVINGROOM&lt;br /&gt;
STONEROOM&lt;br /&gt;
AUDITORIUM&lt;br /&gt;
CONCERTHALL&lt;br /&gt;
CAVE&lt;br /&gt;
ARENA&lt;br /&gt;
HANGAR&lt;br /&gt;
CARPETEDHALLWAY&lt;br /&gt;
HALLWAY&lt;br /&gt;
STONECORRIDOR&lt;br /&gt;
ALLEY&lt;br /&gt;
FOREST&lt;br /&gt;
CITY&lt;br /&gt;
MOUNTAINS&lt;br /&gt;
QUARRY&lt;br /&gt;
PLAIN&lt;br /&gt;
PARKINGLOT&lt;br /&gt;
SEWERPIPE&lt;br /&gt;
UNDERWATER&lt;br /&gt;
DRUGGED&lt;br /&gt;
DIZZY&lt;br /&gt;
PSYCHOTIC&lt;br /&gt;
CASTLE_SMALLROOM&lt;br /&gt;
CASTLE_SHORTPASSAGE&lt;br /&gt;
CASTLE_MEDIUMROOM&lt;br /&gt;
CASTLE_LARGEROOM&lt;br /&gt;
CASTLE_LONGPASSAGE&lt;br /&gt;
CASTLE_HALL&lt;br /&gt;
CASTLE_CUPBOARD&lt;br /&gt;
CASTLE_COURTYARD&lt;br /&gt;
CASTLE_ALCOVE&lt;br /&gt;
FACTORY_SMALLROOM&lt;br /&gt;
FACTORY_SHORTPASSAGE&lt;br /&gt;
FACTORY_MEDIUMROOM&lt;br /&gt;
FACTORY_LARGEROOM&lt;br /&gt;
FACTORY_LONGPASSAGE&lt;br /&gt;
FACTORY_HALL&lt;br /&gt;
FACTORY_CUPBOARD&lt;br /&gt;
FACTORY_COURTYARD&lt;br /&gt;
FACTORY_ALCOVE&lt;br /&gt;
ICEPALACE_SMALLROOM&lt;br /&gt;
ICEPALACE_SHORTPASSAGE&lt;br /&gt;
ICEPALACE_MEDIUMROOM&lt;br /&gt;
ICEPALACE_LARGEROOM&lt;br /&gt;
ICEPALACE_LONGPASSAGE&lt;br /&gt;
ICEPALACE_HALL&lt;br /&gt;
ICEPALACE_CUPBOARD&lt;br /&gt;
ICEPALACE_COURTYARD&lt;br /&gt;
ICEPALACE_ALCOVE&lt;br /&gt;
SPACESTATION_SMALLROOM&lt;br /&gt;
SPACESTATION_SHORTPASSAGE&lt;br /&gt;
SPACESTATION_MEDIUMROOM&lt;br /&gt;
SPACESTATION_LARGEROOM&lt;br /&gt;
SPACESTATION_LONGPASSAGE&lt;br /&gt;
SPACESTATION_HALL&lt;br /&gt;
SPACESTATION_CUPBOARD&lt;br /&gt;
SPACESTATION_ALCOVE&lt;br /&gt;
WOODEN_SMALLROOM&lt;br /&gt;
WOODEN_SHORTPASSAGE&lt;br /&gt;
WOODEN_MEDIUMROOM&lt;br /&gt;
WOODEN_LARGEROOM&lt;br /&gt;
WOODEN_LONGPASSAGE&lt;br /&gt;
WOODEN_HALL&lt;br /&gt;
WOODEN_CUPBOARD&lt;br /&gt;
WOODEN_COURTYARD&lt;br /&gt;
WOODEN_ALCOVE&lt;br /&gt;
SPORT_EMPTYSTADIUM&lt;br /&gt;
SPORT_SQUASHCOURT&lt;br /&gt;
SPORT_SMALLSWIMMINGPOOL&lt;br /&gt;
SPORT_LARGESWIMMINGPOOL&lt;br /&gt;
SPORT_GYMNASIUM&lt;br /&gt;
SPORT_FULLSTADIUM&lt;br /&gt;
SPORT_STADIUMTANNOY&lt;br /&gt;
PREFAB_WORKSHOP&lt;br /&gt;
PREFAB_SCHOOLROOM&lt;br /&gt;
PREFAB_PRACTISEROOM&lt;br /&gt;
PREFAB_OUTHOUSE&lt;br /&gt;
PREFAB_CARAVAN&lt;br /&gt;
DOME_TOMB&lt;br /&gt;
PIPE_SMALL&lt;br /&gt;
DOME_SAINTPAULS&lt;br /&gt;
PIPE_LONGTHIN&lt;br /&gt;
PIPE_LARGE&lt;br /&gt;
PIPE_RESONANT&lt;br /&gt;
OUTDOORS_BACKYARD&lt;br /&gt;
OUTDOORS_ROLLINGPLAINS&lt;br /&gt;
OUTDOORS_DEEPCANYON&lt;br /&gt;
OUTDOORS_CREEK&lt;br /&gt;
OUTDOORS_VALLEY&lt;br /&gt;
MOOD_HEAVEN&lt;br /&gt;
MOOD_HELL&lt;br /&gt;
MOOD_MEMORY&lt;br /&gt;
DRIVING_COMMENTATOR&lt;br /&gt;
DRIVING_PITGARAGE&lt;br /&gt;
DRIVING_INCAR_RACER&lt;br /&gt;
DRIVING_INCAR_SPORTS&lt;br /&gt;
DRIVING_INCAR_LUXURY&lt;br /&gt;
DRIVING_FULLGRANDSTAND&lt;br /&gt;
DRIVING_EMPTYGRANDSTAND&lt;br /&gt;
DRIVING_TUNNEL&lt;br /&gt;
CITY_STREETS&lt;br /&gt;
CITY_SUBWAY&lt;br /&gt;
CITY_MUSEUM&lt;br /&gt;
CITY_LIBRARY&lt;br /&gt;
CITY_UNDERPASS&lt;br /&gt;
CITY_ABANDONED&lt;br /&gt;
DUSTYROOM&lt;br /&gt;
CHAPEL&lt;br /&gt;
SMALLWATERROOM                              &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Their definitions can be seen in [https://github.com/kcat/openal-soft/blob/master/include/AL/efx-presets.h efx-presets.h] from OpenAL-Soft source code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-expandtext=&amp;quot;Show&amp;quot; data-collapsetext=&amp;quot;Hide&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Legacy info (Version 1) ==&lt;br /&gt;
&lt;br /&gt;
This information is from the old official EAX 2.0 documentation, although some properties may have changed in scope and focus from EAX 2.0 to EAX 4.0. One can assume that the properties serve the same general purpose and that each property&#039;s value bounds are approximately the same.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;environment&#039;&#039;&#039; - Unknown. Likely sets the room to one of an unknown number of environment presets.&lt;br /&gt;
* &#039;&#039;&#039;environment size&#039;&#039;&#039; - The Environment Size property sets the apparent size of the surrounding “room.” The value of Environment Size can be considered a characteristic dimension of the room expressed in meters. Scaling Environment Size is equivalent to scaling all dimensions of the room by the same factor. Value type is FLOAT; value range is 1.0 to 100.0, expressed in linear meters.&lt;br /&gt;
* &#039;&#039;&#039;environment diffusion&#039;&#039;&#039; - The Environment Diffusion property controls the echo density in the reverberation decay. Reducing diffusion gives the reverberation a more “grainy” character that is especially noticeable with percussive sound sources. If you set a diffusion value of 0.0, the later reverberation sounds like a succession of distinct echoes. Value type is FLOAT; value range is 0.0 to 1.0, expressed in a linear multiplier value.&lt;br /&gt;
* &#039;&#039;&#039;room&#039;&#039;&#039; - The Room property is the master volume control for the reflected sound (both early reflections and reverberation) that EAX adds to all sound sources. It sets the maximum amount of reflections and reverberation added to the sound mix in the primary buffer (the listener). Value is LONG; value range is -10000 to 0, expressed in hundredths of one decibel (-100 dB to 0 dB).&lt;br /&gt;
* &#039;&#039;&#039;room hf&#039;&#039;&#039; - The Room HF property further tweaks reflected sound by attenuating it at high frequencies. It controls a low-pass filter that applies globally to the reflected sound of all sound sources. The exact qualities of this low-pass filter -- its frequency and its bandwidth (Q) -- are unknown. Value type is LONG; value range is -10000 to 0, expressed in hundredths of one decibel (-100 dB to 0 dB).&lt;br /&gt;
* &#039;&#039;&#039;room lf&#039;&#039;&#039; - Undocumented. Assumably, the Room LF property applies a high-pass to reflected sound in much the same way as Room HF applies low-pass. The value type and range is unknown, but is likely LONG, must be between -10000 and 0 and is expressed in hundredths of one decibel.&lt;br /&gt;
* &#039;&#039;&#039;decay time&#039;&#039;&#039; - The Decay Time property sets the reverberation decay time, or the time in which reverberation is diminished. It ranges from 0.1 (typically a small room with very dead surfaces) to 20.0 (typically a large room with very live surfaces). Value is FLOAT; value range is 0.1 to 20.0, expressed in seconds.&lt;br /&gt;
* &#039;&#039;&#039;decay hf ratio&#039;&#039;&#039; - The Decay HF Ratio property sets the spectral quality of the Decay Time parameter. It is the ratio of high-frequency decay time relative to the time set by Decay Time. The Decay HF Ratio value 1.0 is neutral: the decay time is equal for all frequencies. As Decay HF Ratio increases above 1.0, the high-frequency decay time increases so it’s longer than the decay time at low frequencies. You hear a more brilliant reverberation with a longer decay at high frequencies. As the Decay HF Ratio value decreases below 1.0, the high-frequency decay time decreases so it’s shorter than the decay time of the low frequencies. You hear a more natural reverberation. Value is FLOAT; value range is 0.1 to 20.0, expressed in a linear multiplier variable.&lt;br /&gt;
* &#039;&#039;&#039;decay lf ratio&#039;&#039;&#039; - Undocumented. It&#039;s likely best to leave the value at 1.0, though the value&#039;s type and range is probably the same as the Decay HF Ratio property.&lt;br /&gt;
* &#039;&#039;&#039;reflections&#039;&#039;&#039; - The Reflections property controls the overall amount of initial reflections relative to the Room property. The value of Reflections ranges from a maximum of 10 dB to a minimum of -100 dB (no initial reflections at all), and is corrected by the value of the Room property. The Reflections property does not affect the subsequent reverberation decay. You can increase the amount of initial reflections to simulate a more narrow space or closer walls, especially effective if you associate the initial reflections increase with a reduction in reflections delays by lowering the value of the Reflection Delay property. To simulate open or semi-open environments, you can maintain the amount of early reflections while reducing the value of the Reverb property, which controls later reflections. Value type is LONG; value range is -10000 to 1000, expressed in hundredths of one decibel (-100 dB to -10 dB).&lt;br /&gt;
* &#039;&#039;&#039;reflections delay&#039;&#039;&#039; - The Reflections Delay property is the amount of delay between the arrival time of the direct path from the source to the first reflection from the source. It ranges from 0 to 300 milliseconds. You can reduce or increase Reflections Delay to simulate closer or more distant reflective surfaces—and therefore control the perceived size of the room. Value is FLOAT; value range is 0.0 to 0.3, expressed in seconds (0 to 300 milliseconds).&lt;br /&gt;
* &#039;&#039;&#039;reflections pan&#039;&#039;&#039; - Undocumented. Three values are specified which may correspond to a generic &amp;quot;front&amp;quot;, &amp;quot;side&amp;quot; and &amp;quot;back/rear&amp;quot; configuration to control the directivity of early reflections in a 7.1 surround matrix. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;reverb&#039;&#039;&#039; - The Reverb property controls the overall amount of later reverberation relative to the Room property. (The Room property sets the overall amount of both initial reflections and later reverberation.) The value of Reverb ranges from a maximum of 20 dB to a minimum of -100 dB (no late reverberation at all). Value is LONG; value range is -10000 to 2000, expressed in hundredths of a decibel (-100 dB to 20 dB).&lt;br /&gt;
* &#039;&#039;&#039;reverb delay&#039;&#039;&#039; - The Reverb Delay property defines the begin time of the late reverberation relative to the time of the initial reflection (the first of the early reflections). It ranges from 0 to 100 milliseconds. Reducing or increasing Reverb Delay is useful for simulating a smaller or larger room. Value is FLOAT; value range is 0.0 to 0.1, expressed in seconds (0 to 100 milliseconds).&lt;br /&gt;
* &#039;&#039;&#039;reverb pan&#039;&#039;&#039; - Undocumented. Three values are specified which may correspond to a generic &amp;quot;front&amp;quot;, &amp;quot;side&amp;quot; and &amp;quot;back/rear&amp;quot; configuration to control the directivity of reverberation in a 7.1 surround matrix. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;echo time&#039;&#039;&#039; - Undocumented. Likely controls the decay time of echoes, or late reflections. A value of 0.1 likely presents a natural amount of echo, while increasing the value likely causes a &amp;quot;Grand Canyon&amp;quot; effect. Value type is likely FLOAT; value range is likely between 0.075 and 0.25, expressed in seconds.&lt;br /&gt;
* &#039;&#039;&#039;echo depth&#039;&#039;&#039; - Undocumented. May control directionality or tonal qualities of echoes arriving at the listener. Probably best to leave at 1.0. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;modulation time&#039;&#039;&#039; - Undocumented. Unknown purpose. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;modulation depth&#039;&#039;&#039; - Undocumented. Unknown purpose. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;air absorption hf&#039;&#039;&#039; - The Air Absorption HF property controls the distance-dependent attenuation at high frequencies caused by the propagation medium. It applies to both the direct path and reflected sound. You can use Air Absorption HF to simulate sound transmission through foggy air, dry air, smoky atmosphere, and so on. The default value is -0.05 dB per meter, which roughly corresponds to typical condition of atmospheric humidity, temperature, and so on. Lowering the value simulates a more absorbent medium (more humidity in the air, for example); raising the value simulates a less absorbent medium (dry desert air, for example). Value is FLOAT; value range is -100.0 to 0.0, expressed in hundredths of one decibel per meter (-1 dB to 0 dB). Default value is -5.0, which corresponds to -0.05 dB per meter attenuation.&lt;br /&gt;
* &#039;&#039;&#039;hf reference&#039;&#039;&#039; - Likely defines the frequency used for low-pass filters. Value is likely LONG; value range is likely between 0.0 and 20000.0, expressed in Hz. This value is probably best left at 5000.0.&lt;br /&gt;
* &#039;&#039;&#039;lf reference&#039;&#039;&#039; - Likely defines the frequency used for high-pass filters. Value is likely LONG; value range is likely between 0.0 and 20000.0, expressed in Hz. This value is probably best left at 250.0.&lt;br /&gt;
* &#039;&#039;&#039;room rolloff factor&#039;&#039;&#039; - The Room Rolloff property is one of two methods available in EAX to attenuate the reflected sound (containing both reflections, reverberation and echoes) according to source-listener distance. Value type is FLOAT; value range is 0.0 to 10.0, expressed in a linear multiplier value. It&#039;s recommended that users use 0.0, as id Software did not deviate from this value with Doom 3.&lt;br /&gt;
* &#039;&#039;&#039;flags&#039;&#039;&#039; - The Flags property is intended to control the relationship of high-level EAX properties to low-level properties. If certain EAX flags are set by setting the Flags property to a particular value, the setting of high-level properties is supposed to control the values of low-level properties based upon a defined scale, overriding specified values. In EAX 2.0, the value type is DWORD, whereas in Doom 3, it appears to be INT or some other type commonly used to store numeric values. In Doom 3, common values are 0, 2, 15, 31, 32, 56 and 63, but no documentation details what these values correspond to. If users wish to experiment with the Flags property, it is recommended that they choose from one of the above values. For reference, here is a table with the counts for each flag value as used in Doom 3:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 0.5em; margin-left: 2em; border: 1px solid #a0a0a0; text-align: right; border-collapse: collapse;&amp;quot; cellpadding=&amp;quot;2&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Flag decimal&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Flag binary&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Count&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|00000000&lt;br /&gt;
|497&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|00000010&lt;br /&gt;
|6&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|00001110&lt;br /&gt;
|15&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|00001111&lt;br /&gt;
|94&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|31&lt;br /&gt;
|00011111&lt;br /&gt;
|511&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|32&lt;br /&gt;
|00100000&lt;br /&gt;
|247&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|56&lt;br /&gt;
|00111000&lt;br /&gt;
|59&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|63&lt;br /&gt;
|00111111&lt;br /&gt;
|168&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Design.&#039;&#039;&#039;&lt;br /&gt;
In terms of the actual sound design for the values you put into these variables, here is a general tutorial on reverb from FruityLoops (NOTE: This is for a music production plugin, some of these don&#039;t apply, it&#039;s just to give a general idea on what certain variables do):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Low Cut&#039;&#039;&#039; Adjusts the low cutoff frequency. Use this to remove low frequencies from the input signal before reverb is added. For example, if you are adding reverb to, say a drum track, you might want to remove some of the &#039;rumble&#039; from the bass drum by attenuating the bass frequencies. Setting this parameter to the minimum value will bypass the Low Cut filter, displaying OFF in the value field.&lt;br /&gt;
* &#039;&#039;&#039;High Cut&#039;&#039;&#039; - Similar to the Low Cut, this adjusts the high cutoff frequency. Use this to remove high frequencies from the input signal.&lt;br /&gt;
* &#039;&#039;&#039;Predelay&#039;&#039;&#039; - Controls the delay time between the direct input signal and the first reverb reflection. This should be set to modest values for small rooms, and can be increased in relation to increases in room size. &#039;&#039;&#039;Predelay&#039;&#039;&#039; creates a slap-back echo effect that can both add atmosphere and muffle the signal, so use it wisely.&lt;br /&gt;
* &#039;&#039;&#039;Room Size&#039;&#039;&#039; - Use this to set the size of the virtual room where the reverb is created. The Room Size should be adjusted according to the decay time. Small rooms sound better with a short decay time, large rooms sound better with longer reverb times.&lt;br /&gt;
* &#039;&#039;&#039;Diffusion&#039;&#039;&#039; - Controls the density of the reflections bouncing off the walls of the virtual room. A low diffusion setting makes the reflections sound more distinct, like closely spaced echoes. A high diffusion setting creates reflections so close they sound more like noise, where no echoes can be distinguished.&lt;br /&gt;
* &#039;&#039;&#039;Color&#039;&#039;&#039; - The Color parameter is used for adjusting the decay time of the bass frequencies of the signal. This allows you to change the overall perceived mood or &#039;sound&#039; of the virtual room. A bright room has a low bass response, while warm rooms have a higher bass response. In a flat room, the response of the bass is equal to the general frequency response. Color has five settings: Brighter, Bright, Flat, Warm, Warmer.&lt;br /&gt;
* &#039;&#039;&#039;Decay&#039;&#039;&#039; - Controls the decay time of the reverb, the time it takes for the signal to decay to -60dB (1/1000 of the maximum amplitude). Use low decay times for small rooms or boxes, and long decay times for large rooms, halls or churches. You should also make sure that the Room Size parameter has an appropriate value.&lt;br /&gt;
* &#039;&#039;&#039;High Damping&#039;&#039;&#039; - This parameter allows you to adjust damping of the high frequencies in the reverb signal over time. Damping refers to the high frequencies being attenuated and dying out. This causes the sound to become gradually muffled and warm like it is being absorbed in the room. Setting this parameter to the maximum value will bypass the High Damping, displaying OFF in the value field.&lt;br /&gt;
* &#039;&#039;&#039;Dry&#039;&#039;&#039; - Sets the relative dry output level.&lt;br /&gt;
* &#039;&#039;&#039;Reverb&#039;&#039;&#039; - Sets the relative reverb (wet) signal level.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Error Check=&lt;br /&gt;
If you modified the presets in your EFX file, you can check for errors ingame. Load your map and open the console. Type &#039;&#039;reloadSounds&#039;&#039;, this will trigger the reload of the EFX used in your map and print out the vars which cause an error (like a value exceeding the maximum range). Note that if your EFX files contain errors, this will make the game ignore the EFX settings you chose. &lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
See the &amp;quot;EFX Reverb&amp;quot; column of &#039;&#039;&#039;[[Fan_Missions_for_The_Dark_Mod|Fan Missions page]]&#039;&#039;&#039;. Missions with &amp;quot;Yes&amp;quot; have EFX Reverb. &lt;br /&gt;
&amp;lt;br&amp;gt;Most missions use v2.0 presets but a few missions such as &amp;quot;Volta and the Stone&amp;quot; and Behind Closed Doors use v1.0 settings.&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
The Version 2 definitions were implemented due to [http://bugs.thedarkmod.com/view.php?id=4815 issue 4815], it has some brief explanation.&lt;br /&gt;
&lt;br /&gt;
A tutorial based around EFX can be found [http://forums.thedarkmod.com/topic/19205-getting-started-with-the-efx-room-reverb-system-wip/ here]&lt;br /&gt;
&lt;br /&gt;
An old demonstration map of EAX in TDM is included [http://forums.thedarkmod.com/topic/11045-environmental-audio-extensions-eax-in-tdm/ here]&lt;br /&gt;
&lt;br /&gt;
A discussion about no_efx is [http://forums.thedarkmod.com/topic/19213-efx-discussion here]&lt;br /&gt;
&lt;br /&gt;
The first version of this article was written by Ishtvan [https://forums.thedarkmod.com/index.php?/topic/2071-setting-reverb-data-in-new-soundengine-wiki/ here]&lt;br /&gt;
&lt;br /&gt;
[[Category:Sound]]&lt;br /&gt;
[[Category:Tutorial]]&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=Setting_Reverb_Data_of_Rooms_(EAX)&amp;diff=33794</id>
		<title>Setting Reverb Data of Rooms (EAX)</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=Setting_Reverb_Data_of_Rooms_(EAX)&amp;diff=33794"/>
		<updated>2025-01-11T20:49:53Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: /* EFX file */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
This document will attempt to explain how to set the new EFX settings in your rooms when mapping.&lt;br /&gt;
&lt;br /&gt;
Previously these settings were known as EAX settings, and required EAX 4.0-compatible sound card.&lt;br /&gt;
In TDM 2.06, EAX technology was completely replaced with OpenAL EFX, which is now processed in software (by [https://github.com/kcat/openal-soft openal-soft]) without any requirements on sound card.&lt;br /&gt;
&lt;br /&gt;
= General =&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
&lt;br /&gt;
EFX for an FM can be configured with or without a configuration file.  However, fileless configuration is only supported for EFX presets.&lt;br /&gt;
&lt;br /&gt;
== EFX file ==&lt;br /&gt;
The EFX info for a map should be stored in the file &amp;quot;&amp;lt;tt&amp;gt;efxs/&amp;lt;mapname&amp;gt;.efx&amp;lt;/tt&amp;gt;&amp;quot;, where &amp;lt;mapname&amp;gt; is the name of your .map file (without extension).&lt;br /&gt;
&lt;br /&gt;
In order to check that you have put the file into right location, start your mission in game.&lt;br /&gt;
If TDM manages to load your efx file, then you will see the following message in console:&lt;br /&gt;
 sound: found efxs/&amp;lt;mapname&amp;gt;.efx&lt;br /&gt;
If you failed something, then you will see a bit different message there:&lt;br /&gt;
 sound: missing efxs/&amp;lt;mapname&amp;gt;.efx&lt;br /&gt;
In both cases some additional diagnostic messages can be present nearby.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; you must enable &amp;quot;&amp;lt;tt&amp;gt;OpenAL EFX&amp;lt;/tt&amp;gt;&amp;quot; in sound settings in the main menu, otherwise TDM won&#039;t even try to load the efx file.&lt;br /&gt;
&lt;br /&gt;
It is a plain text file, so you can open it up in your text editor of choice.&lt;br /&gt;
&lt;br /&gt;
Any EFX file must start with a header which specifies its &#039;&#039;&#039;version&#039;&#039;&#039;:&lt;br /&gt;
 Version 2&lt;br /&gt;
If you forget this line, then your EFX file will &#039;&#039;&#039;not&#039;&#039;&#039; be loaded.&lt;br /&gt;
The following versions are supported:&lt;br /&gt;
* &amp;lt;tt&amp;gt;Version 1&amp;lt;/tt&amp;gt; was supported by TDM from the very beginning. It uses some non-standard terms and quantities, which makes it hard to work with.&lt;br /&gt;
* &amp;lt;tt&amp;gt;Version 2&amp;lt;/tt&amp;gt; was added in TDM 2.07. It uses the parameters from OpenAL EFX and supports a lot of presets. &#039;&#039;&#039;Recommended for all new missions.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The rest of the file consists of separate blocks, one for each &amp;quot;reverb zone&amp;quot;.&lt;br /&gt;
Each block must start with &amp;lt;tt&amp;gt;reverb&amp;lt;/tt&amp;gt; keyword for Version 1 definitions, and &amp;lt;tt&amp;gt;eaxreverb&amp;lt;/tt&amp;gt; keyword for Version 2 definitions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here is an example of such block from mars_city1.efx of the original Doom 3 game (Version 1):&lt;br /&gt;
&lt;br /&gt;
 // reverb maintenance&lt;br /&gt;
 reverb &amp;quot;maintenance&amp;quot; {&lt;br /&gt;
  &amp;quot;environment&amp;quot; 26&lt;br /&gt;
  &amp;quot;environment size&amp;quot; 5.0670&lt;br /&gt;
  &amp;quot;environment diffusion&amp;quot; 0.6030&lt;br /&gt;
  &amp;quot;room&amp;quot; -411&lt;br /&gt;
  &amp;quot;room hf&amp;quot; -685&lt;br /&gt;
  &amp;quot;room lf&amp;quot; 0&lt;br /&gt;
  &amp;quot;decay time&amp;quot; 1.7360&lt;br /&gt;
  &amp;quot;decay hf ratio&amp;quot; 0.8030&lt;br /&gt;
  &amp;quot;decay lf ratio&amp;quot; 1.0000&lt;br /&gt;
  &amp;quot;reflections&amp;quot; 96&lt;br /&gt;
  &amp;quot;reflections delay&amp;quot; 0.0080&lt;br /&gt;
  &amp;quot;reflections pan&amp;quot; 0.0000 0.0000 0.0000&lt;br /&gt;
  &amp;quot;reverb&amp;quot; 27&lt;br /&gt;
  &amp;quot;reverb delay&amp;quot; 0.0050&lt;br /&gt;
  &amp;quot;reverb pan&amp;quot; 0.0000 0.0000 0.0000&lt;br /&gt;
  &amp;quot;echo time&amp;quot; 0.0750&lt;br /&gt;
  &amp;quot;echo depth&amp;quot; 1.0000&lt;br /&gt;
  &amp;quot;modulation time&amp;quot; 0.2500&lt;br /&gt;
  &amp;quot;modulation depth&amp;quot; 0.0000&lt;br /&gt;
  &amp;quot;air absorption hf&amp;quot; -5.0000&lt;br /&gt;
  &amp;quot;hf reference&amp;quot; 5000.0000&lt;br /&gt;
  &amp;quot;lf reference&amp;quot; 250.0000&lt;br /&gt;
  &amp;quot;room rolloff factor&amp;quot; 0.0000&lt;br /&gt;
  &amp;quot;flags&amp;quot; 56&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And here is an artificial example of Version 2 definitions:&lt;br /&gt;
&lt;br /&gt;
  eaxreverb &amp;quot;myweirdstreets&amp;quot; {&lt;br /&gt;
    reflections_gain 0.5&lt;br /&gt;
    reflections_delay 0.0050&lt;br /&gt;
    late_reverb_gain 2.5&lt;br /&gt;
    late_reverb_delay 0.050&lt;br /&gt;
    echo_time 0.25&lt;br /&gt;
    echo_depth 0.9000&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
What does all this mean? &lt;br /&gt;
&lt;br /&gt;
There is a lot of sound design stuff that one could make guesses at if you&#039;ve ever used a reverb plugin in any sort of sound editing program. hf = high frequency, lf = low frequency, etc.&lt;br /&gt;
&lt;br /&gt;
A proper explanation of the parameters is given below.&lt;br /&gt;
&lt;br /&gt;
== Locations ==&lt;br /&gt;
Each reverb zone definition starts with a line which specifies to which location it must be applied:&lt;br /&gt;
&lt;br /&gt;
 reverb &amp;quot;&amp;lt;name of the location area you want to apply this to&amp;gt;&amp;quot;&lt;br /&gt;
 {&lt;br /&gt;
     //... (settings)&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Information about locations and how to set them up is available in another article: [[Location Settings #The Location Entities]].&lt;br /&gt;
Reverb zones use exactly the same locations as the ones which are used to specify per-area ambient sounds.&lt;br /&gt;
You should name every info_location entity, i.e. provide a &amp;quot;&amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt;&amp;quot; spawnarg for it. This is the name used in reverb zone definitions.&lt;br /&gt;
&lt;br /&gt;
As of TDM 2.06, you can&#039;t use capital letters in the name of your location entity or reverb zone. This may or may not change in the future.&lt;br /&gt;
&lt;br /&gt;
Here is an example of an entity which defines &amp;quot;canal_tunnel&amp;quot; location:&lt;br /&gt;
&lt;br /&gt;
 //======================= from volta_v1.map ====================&lt;br /&gt;
 // entity 3532&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;classname&amp;quot; &amp;quot;info_location&amp;quot;&lt;br /&gt;
   &amp;quot;name&amp;quot; &amp;quot;canal_tunnel&amp;quot;             //this is the name used&lt;br /&gt;
   &amp;quot;ambient&amp;quot; &amp;quot;snd_streets&amp;quot;&lt;br /&gt;
   &amp;quot;ambient_light&amp;quot; &amp;quot;0.04 0.03 0.02&amp;quot;&lt;br /&gt;
   &amp;quot;ambient_light_dynamic&amp;quot; &amp;quot;0.01 0.01 0.01&amp;quot;&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And this is the EFX effect (reverb zone) for it:&lt;br /&gt;
&lt;br /&gt;
 //======================= from volta_v1.efx ====================&lt;br /&gt;
 reverb &amp;quot;canal_tunnel&amp;quot; {             //name put to here&lt;br /&gt;
   &amp;quot;environment&amp;quot; 22&lt;br /&gt;
   &amp;quot;environment size&amp;quot; 1.8000&lt;br /&gt;
   &amp;quot;environment diffusion&amp;quot; 1.0000&lt;br /&gt;
   &amp;quot;room&amp;quot; -1000&lt;br /&gt;
   &amp;quot;room hf&amp;quot; -4000&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
During playing, the engine prints a message whenever the player&#039;s location changes.&lt;br /&gt;
It allows you to check if you have set up locations properly.&lt;br /&gt;
For instance, here are console messages showing a proper EFX location change:&lt;br /&gt;
&lt;br /&gt;
 Switching to EFX &#039;canal_tunnel&#039; (#295)&lt;br /&gt;
 Changed location from &#039;canal_streets&#039; to &#039;canal_tunnel&#039;.&lt;br /&gt;
&lt;br /&gt;
It is also possible to specify portal-area number instead of location name in the reverb zone definition.&lt;br /&gt;
The portal-area number is listed in the .proc file, which is created in the dmap process, in the format of &amp;lt;tt&amp;gt;_area&amp;lt;num&amp;gt;&amp;lt;/tt&amp;gt; (where &amp;lt;num&amp;gt; is the portal area number), e.g. &amp;lt;tt&amp;gt;_area15&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&#039;&#039;&#039;Beware:&#039;&#039;&#039; this functionality exists for fast hacking only! Do not release a mission with portal-area numbers in .efx file!&lt;br /&gt;
The main reason to avoid it is that portal-area numbers are auto-generated, so minor changes in your mission can change all of them.&lt;br /&gt;
&lt;br /&gt;
Finally, there is a &amp;quot;default&amp;quot; reverb environment which is used for any area in the map which does not have reverb information specified.&lt;br /&gt;
&lt;br /&gt;
The order that the sound system checks for reverb data is: area number -&amp;gt; location name -&amp;gt; default.&lt;br /&gt;
&lt;br /&gt;
== Changes during playing ==&lt;br /&gt;
Type &amp;quot;&amp;lt;tt&amp;gt;reloadSounds&amp;lt;/tt&amp;gt;&amp;quot; command into game console in order to reload EFX definitions.&lt;br /&gt;
&lt;br /&gt;
So when you experiment with EFX, execute this command after each tweak to EFX file to hear the difference immediately.&lt;br /&gt;
&lt;br /&gt;
== Suppress effect ==&lt;br /&gt;
Sometimes you want to disable EFX effect on a specific sound.&lt;br /&gt;
A typical example is when you have a voice in player&#039;s head, which must not depend on player&#039;s physical environment.&lt;br /&gt;
Another case is when some sound already has reverb baked in, so you don&#039;t what to double-reverb it. Although the best practice is to use sound samples without embedded reverb, combined with proper EFX definitions.&lt;br /&gt;
&lt;br /&gt;
You can disable all EFX effects on one specific sound shader by adding &amp;quot;&amp;lt;tt&amp;gt;no_efx&amp;lt;/tt&amp;gt;&amp;quot; keyword to its body.&lt;br /&gt;
For instance, here is how non-EFX version of blackjack unsheathing looks like:&lt;br /&gt;
 blackjack_unsheath&lt;br /&gt;
 {&lt;br /&gt;
   description &amp;quot;Made by pakmannen&amp;quot;&lt;br /&gt;
   sound/sfx/tools/melee/blackjack_unsheath.ogg&lt;br /&gt;
   no_efx                       //do NOT apply EFX to this sound&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note that if you change sound shaders, writing &amp;quot;&amp;lt;tt&amp;gt;reloadDecls&amp;lt;/tt&amp;gt;&amp;quot; in TDM game console is enough to reload them.&lt;br /&gt;
&lt;br /&gt;
There are a lot of stock sounds in TDM which should not be affected by EFX effects.&lt;br /&gt;
Starting from TDM 2.07, the corresponding core sounds are marked with &amp;quot;&amp;lt;tt&amp;gt;no_efx&amp;lt;/tt&amp;gt;&amp;quot; keyword (see issue [http://bugs.thedarkmod.com/view.php?id=4688 4688]).&lt;br /&gt;
If you discover any core sound which is affected by EFX while you believe it should not, start a discussion on forums.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Environment properties=&lt;br /&gt;
&lt;br /&gt;
== New properties (Version 2) ==&lt;br /&gt;
&lt;br /&gt;
With Version 2 of EFX file, the set of supported properties exactly matches the set of properties defined in OpenAL EFX for the &amp;quot;EAX Reverb&amp;quot; effect.&lt;br /&gt;
Note that EFX defines several types of effects, including &amp;quot;EAX Reverb&amp;quot;, &amp;quot;Standard Reverb&amp;quot;, &amp;quot;Chorus&amp;quot;, &amp;quot;Distortion&amp;quot;, &amp;quot;Echo&amp;quot;, &amp;quot;Flanger&amp;quot;, etc.&lt;br /&gt;
Only the first one is important, ignore all the rest (including the so-called &amp;quot;Standard Reverb&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
The detailed description of all the properties is given in &amp;quot;Appendix 1 – Effect property descriptions&amp;quot; of the [https://usermanual.wiki/Pdf/Effects20Extension20Guide.90272296/view#95 OpenAL Effects Extension Guide](pages 95-101).&lt;br /&gt;
The short list is also available in a table on [https://usermanual.wiki/Pdf/Effects20Extension20Guide.90272296/view#66 page 66 of the guide]:&lt;br /&gt;
&lt;br /&gt;
[[File:Eaxreverb_properties_screenshot.png|500px]]&lt;br /&gt;
&lt;br /&gt;
The only difference is that the property names in the guide have the &amp;lt;tt&amp;gt;AL_EAXREVERB_&amp;lt;/tt&amp;gt; prefix, while in TDM definitions this prefix is removed.&lt;br /&gt;
&lt;br /&gt;
== Presets (Version 2) ==&lt;br /&gt;
&lt;br /&gt;
There is one special property &amp;lt;tt&amp;gt;PRESET&amp;lt;/tt&amp;gt;, which is not present in the EFX guide.&lt;br /&gt;
This property accepts the name of the preset which you want to use:&lt;br /&gt;
&lt;br /&gt;
 eaxreverb &amp;quot;myclassroom&amp;quot; {&lt;br /&gt;
   preset auditorium&lt;br /&gt;
 }&lt;br /&gt;
 eaxreverb &amp;quot;mycave&amp;quot; {&lt;br /&gt;
   preset cave&lt;br /&gt;
 }&lt;br /&gt;
 eaxreverb &amp;quot;mycorridor&amp;quot; {&lt;br /&gt;
   preset hallway&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
If you specify the preset like this, the values for all the reverb properties will be taken from the specified preset.&lt;br /&gt;
Additionally, you can override values of some properties if you define them manually &#039;&#039;&#039;after&#039;&#039;&#039; defining the preset.&lt;br /&gt;
&lt;br /&gt;
The preset property also accepts index of preset. Don&#039;t use indices for anything except experimentation, since they may change in future.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The presets were taken from OpenAL-Soft implementation which TDM uses.&lt;br /&gt;
Here is the full list of preset names:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;height:350px; overflow:scroll;&amp;quot;&amp;gt;&lt;br /&gt;
GENERIC&lt;br /&gt;
PADDEDCELL&lt;br /&gt;
ROOM&lt;br /&gt;
BATHROOM&lt;br /&gt;
LIVINGROOM&lt;br /&gt;
STONEROOM&lt;br /&gt;
AUDITORIUM&lt;br /&gt;
CONCERTHALL&lt;br /&gt;
CAVE&lt;br /&gt;
ARENA&lt;br /&gt;
HANGAR&lt;br /&gt;
CARPETEDHALLWAY&lt;br /&gt;
HALLWAY&lt;br /&gt;
STONECORRIDOR&lt;br /&gt;
ALLEY&lt;br /&gt;
FOREST&lt;br /&gt;
CITY&lt;br /&gt;
MOUNTAINS&lt;br /&gt;
QUARRY&lt;br /&gt;
PLAIN&lt;br /&gt;
PARKINGLOT&lt;br /&gt;
SEWERPIPE&lt;br /&gt;
UNDERWATER&lt;br /&gt;
DRUGGED&lt;br /&gt;
DIZZY&lt;br /&gt;
PSYCHOTIC&lt;br /&gt;
CASTLE_SMALLROOM&lt;br /&gt;
CASTLE_SHORTPASSAGE&lt;br /&gt;
CASTLE_MEDIUMROOM&lt;br /&gt;
CASTLE_LARGEROOM&lt;br /&gt;
CASTLE_LONGPASSAGE&lt;br /&gt;
CASTLE_HALL&lt;br /&gt;
CASTLE_CUPBOARD&lt;br /&gt;
CASTLE_COURTYARD&lt;br /&gt;
CASTLE_ALCOVE&lt;br /&gt;
FACTORY_SMALLROOM&lt;br /&gt;
FACTORY_SHORTPASSAGE&lt;br /&gt;
FACTORY_MEDIUMROOM&lt;br /&gt;
FACTORY_LARGEROOM&lt;br /&gt;
FACTORY_LONGPASSAGE&lt;br /&gt;
FACTORY_HALL&lt;br /&gt;
FACTORY_CUPBOARD&lt;br /&gt;
FACTORY_COURTYARD&lt;br /&gt;
FACTORY_ALCOVE&lt;br /&gt;
ICEPALACE_SMALLROOM&lt;br /&gt;
ICEPALACE_SHORTPASSAGE&lt;br /&gt;
ICEPALACE_MEDIUMROOM&lt;br /&gt;
ICEPALACE_LARGEROOM&lt;br /&gt;
ICEPALACE_LONGPASSAGE&lt;br /&gt;
ICEPALACE_HALL&lt;br /&gt;
ICEPALACE_CUPBOARD&lt;br /&gt;
ICEPALACE_COURTYARD&lt;br /&gt;
ICEPALACE_ALCOVE&lt;br /&gt;
SPACESTATION_SMALLROOM&lt;br /&gt;
SPACESTATION_SHORTPASSAGE&lt;br /&gt;
SPACESTATION_MEDIUMROOM&lt;br /&gt;
SPACESTATION_LARGEROOM&lt;br /&gt;
SPACESTATION_LONGPASSAGE&lt;br /&gt;
SPACESTATION_HALL&lt;br /&gt;
SPACESTATION_CUPBOARD&lt;br /&gt;
SPACESTATION_ALCOVE&lt;br /&gt;
WOODEN_SMALLROOM&lt;br /&gt;
WOODEN_SHORTPASSAGE&lt;br /&gt;
WOODEN_MEDIUMROOM&lt;br /&gt;
WOODEN_LARGEROOM&lt;br /&gt;
WOODEN_LONGPASSAGE&lt;br /&gt;
WOODEN_HALL&lt;br /&gt;
WOODEN_CUPBOARD&lt;br /&gt;
WOODEN_COURTYARD&lt;br /&gt;
WOODEN_ALCOVE&lt;br /&gt;
SPORT_EMPTYSTADIUM&lt;br /&gt;
SPORT_SQUASHCOURT&lt;br /&gt;
SPORT_SMALLSWIMMINGPOOL&lt;br /&gt;
SPORT_LARGESWIMMINGPOOL&lt;br /&gt;
SPORT_GYMNASIUM&lt;br /&gt;
SPORT_FULLSTADIUM&lt;br /&gt;
SPORT_STADIUMTANNOY&lt;br /&gt;
PREFAB_WORKSHOP&lt;br /&gt;
PREFAB_SCHOOLROOM&lt;br /&gt;
PREFAB_PRACTISEROOM&lt;br /&gt;
PREFAB_OUTHOUSE&lt;br /&gt;
PREFAB_CARAVAN&lt;br /&gt;
DOME_TOMB&lt;br /&gt;
PIPE_SMALL&lt;br /&gt;
DOME_SAINTPAULS&lt;br /&gt;
PIPE_LONGTHIN&lt;br /&gt;
PIPE_LARGE&lt;br /&gt;
PIPE_RESONANT&lt;br /&gt;
OUTDOORS_BACKYARD&lt;br /&gt;
OUTDOORS_ROLLINGPLAINS&lt;br /&gt;
OUTDOORS_DEEPCANYON&lt;br /&gt;
OUTDOORS_CREEK&lt;br /&gt;
OUTDOORS_VALLEY&lt;br /&gt;
MOOD_HEAVEN&lt;br /&gt;
MOOD_HELL&lt;br /&gt;
MOOD_MEMORY&lt;br /&gt;
DRIVING_COMMENTATOR&lt;br /&gt;
DRIVING_PITGARAGE&lt;br /&gt;
DRIVING_INCAR_RACER&lt;br /&gt;
DRIVING_INCAR_SPORTS&lt;br /&gt;
DRIVING_INCAR_LUXURY&lt;br /&gt;
DRIVING_FULLGRANDSTAND&lt;br /&gt;
DRIVING_EMPTYGRANDSTAND&lt;br /&gt;
DRIVING_TUNNEL&lt;br /&gt;
CITY_STREETS&lt;br /&gt;
CITY_SUBWAY&lt;br /&gt;
CITY_MUSEUM&lt;br /&gt;
CITY_LIBRARY&lt;br /&gt;
CITY_UNDERPASS&lt;br /&gt;
CITY_ABANDONED&lt;br /&gt;
DUSTYROOM&lt;br /&gt;
CHAPEL&lt;br /&gt;
SMALLWATERROOM                              &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Their definitions can be seen in [https://github.com/kcat/openal-soft/blob/master/include/AL/efx-presets.h efx-presets.h] from OpenAL-Soft source code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-expandtext=&amp;quot;Show&amp;quot; data-collapsetext=&amp;quot;Hide&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Legacy info (Version 1) ==&lt;br /&gt;
&lt;br /&gt;
This information is from the old official EAX 2.0 documentation, although some properties may have changed in scope and focus from EAX 2.0 to EAX 4.0. One can assume that the properties serve the same general purpose and that each property&#039;s value bounds are approximately the same.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;environment&#039;&#039;&#039; - Unknown. Likely sets the room to one of an unknown number of environment presets.&lt;br /&gt;
* &#039;&#039;&#039;environment size&#039;&#039;&#039; - The Environment Size property sets the apparent size of the surrounding “room.” The value of Environment Size can be considered a characteristic dimension of the room expressed in meters. Scaling Environment Size is equivalent to scaling all dimensions of the room by the same factor. Value type is FLOAT; value range is 1.0 to 100.0, expressed in linear meters.&lt;br /&gt;
* &#039;&#039;&#039;environment diffusion&#039;&#039;&#039; - The Environment Diffusion property controls the echo density in the reverberation decay. Reducing diffusion gives the reverberation a more “grainy” character that is especially noticeable with percussive sound sources. If you set a diffusion value of 0.0, the later reverberation sounds like a succession of distinct echoes. Value type is FLOAT; value range is 0.0 to 1.0, expressed in a linear multiplier value.&lt;br /&gt;
* &#039;&#039;&#039;room&#039;&#039;&#039; - The Room property is the master volume control for the reflected sound (both early reflections and reverberation) that EAX adds to all sound sources. It sets the maximum amount of reflections and reverberation added to the sound mix in the primary buffer (the listener). Value is LONG; value range is -10000 to 0, expressed in hundredths of one decibel (-100 dB to 0 dB).&lt;br /&gt;
* &#039;&#039;&#039;room hf&#039;&#039;&#039; - The Room HF property further tweaks reflected sound by attenuating it at high frequencies. It controls a low-pass filter that applies globally to the reflected sound of all sound sources. The exact qualities of this low-pass filter -- its frequency and its bandwidth (Q) -- are unknown. Value type is LONG; value range is -10000 to 0, expressed in hundredths of one decibel (-100 dB to 0 dB).&lt;br /&gt;
* &#039;&#039;&#039;room lf&#039;&#039;&#039; - Undocumented. Assumably, the Room LF property applies a high-pass to reflected sound in much the same way as Room HF applies low-pass. The value type and range is unknown, but is likely LONG, must be between -10000 and 0 and is expressed in hundredths of one decibel.&lt;br /&gt;
* &#039;&#039;&#039;decay time&#039;&#039;&#039; - The Decay Time property sets the reverberation decay time, or the time in which reverberation is diminished. It ranges from 0.1 (typically a small room with very dead surfaces) to 20.0 (typically a large room with very live surfaces). Value is FLOAT; value range is 0.1 to 20.0, expressed in seconds.&lt;br /&gt;
* &#039;&#039;&#039;decay hf ratio&#039;&#039;&#039; - The Decay HF Ratio property sets the spectral quality of the Decay Time parameter. It is the ratio of high-frequency decay time relative to the time set by Decay Time. The Decay HF Ratio value 1.0 is neutral: the decay time is equal for all frequencies. As Decay HF Ratio increases above 1.0, the high-frequency decay time increases so it’s longer than the decay time at low frequencies. You hear a more brilliant reverberation with a longer decay at high frequencies. As the Decay HF Ratio value decreases below 1.0, the high-frequency decay time decreases so it’s shorter than the decay time of the low frequencies. You hear a more natural reverberation. Value is FLOAT; value range is 0.1 to 20.0, expressed in a linear multiplier variable.&lt;br /&gt;
* &#039;&#039;&#039;decay lf ratio&#039;&#039;&#039; - Undocumented. It&#039;s likely best to leave the value at 1.0, though the value&#039;s type and range is probably the same as the Decay HF Ratio property.&lt;br /&gt;
* &#039;&#039;&#039;reflections&#039;&#039;&#039; - The Reflections property controls the overall amount of initial reflections relative to the Room property. The value of Reflections ranges from a maximum of 10 dB to a minimum of -100 dB (no initial reflections at all), and is corrected by the value of the Room property. The Reflections property does not affect the subsequent reverberation decay. You can increase the amount of initial reflections to simulate a more narrow space or closer walls, especially effective if you associate the initial reflections increase with a reduction in reflections delays by lowering the value of the Reflection Delay property. To simulate open or semi-open environments, you can maintain the amount of early reflections while reducing the value of the Reverb property, which controls later reflections. Value type is LONG; value range is -10000 to 1000, expressed in hundredths of one decibel (-100 dB to -10 dB).&lt;br /&gt;
* &#039;&#039;&#039;reflections delay&#039;&#039;&#039; - The Reflections Delay property is the amount of delay between the arrival time of the direct path from the source to the first reflection from the source. It ranges from 0 to 300 milliseconds. You can reduce or increase Reflections Delay to simulate closer or more distant reflective surfaces—and therefore control the perceived size of the room. Value is FLOAT; value range is 0.0 to 0.3, expressed in seconds (0 to 300 milliseconds).&lt;br /&gt;
* &#039;&#039;&#039;reflections pan&#039;&#039;&#039; - Undocumented. Three values are specified which may correspond to a generic &amp;quot;front&amp;quot;, &amp;quot;side&amp;quot; and &amp;quot;back/rear&amp;quot; configuration to control the directivity of early reflections in a 7.1 surround matrix. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;reverb&#039;&#039;&#039; - The Reverb property controls the overall amount of later reverberation relative to the Room property. (The Room property sets the overall amount of both initial reflections and later reverberation.) The value of Reverb ranges from a maximum of 20 dB to a minimum of -100 dB (no late reverberation at all). Value is LONG; value range is -10000 to 2000, expressed in hundredths of a decibel (-100 dB to 20 dB).&lt;br /&gt;
* &#039;&#039;&#039;reverb delay&#039;&#039;&#039; - The Reverb Delay property defines the begin time of the late reverberation relative to the time of the initial reflection (the first of the early reflections). It ranges from 0 to 100 milliseconds. Reducing or increasing Reverb Delay is useful for simulating a smaller or larger room. Value is FLOAT; value range is 0.0 to 0.1, expressed in seconds (0 to 100 milliseconds).&lt;br /&gt;
* &#039;&#039;&#039;reverb pan&#039;&#039;&#039; - Undocumented. Three values are specified which may correspond to a generic &amp;quot;front&amp;quot;, &amp;quot;side&amp;quot; and &amp;quot;back/rear&amp;quot; configuration to control the directivity of reverberation in a 7.1 surround matrix. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;echo time&#039;&#039;&#039; - Undocumented. Likely controls the decay time of echoes, or late reflections. A value of 0.1 likely presents a natural amount of echo, while increasing the value likely causes a &amp;quot;Grand Canyon&amp;quot; effect. Value type is likely FLOAT; value range is likely between 0.075 and 0.25, expressed in seconds.&lt;br /&gt;
* &#039;&#039;&#039;echo depth&#039;&#039;&#039; - Undocumented. May control directionality or tonal qualities of echoes arriving at the listener. Probably best to leave at 1.0. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;modulation time&#039;&#039;&#039; - Undocumented. Unknown purpose. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;modulation depth&#039;&#039;&#039; - Undocumented. Unknown purpose. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;air absorption hf&#039;&#039;&#039; - The Air Absorption HF property controls the distance-dependent attenuation at high frequencies caused by the propagation medium. It applies to both the direct path and reflected sound. You can use Air Absorption HF to simulate sound transmission through foggy air, dry air, smoky atmosphere, and so on. The default value is -0.05 dB per meter, which roughly corresponds to typical condition of atmospheric humidity, temperature, and so on. Lowering the value simulates a more absorbent medium (more humidity in the air, for example); raising the value simulates a less absorbent medium (dry desert air, for example). Value is FLOAT; value range is -100.0 to 0.0, expressed in hundredths of one decibel per meter (-1 dB to 0 dB). Default value is -5.0, which corresponds to -0.05 dB per meter attenuation.&lt;br /&gt;
* &#039;&#039;&#039;hf reference&#039;&#039;&#039; - Likely defines the frequency used for low-pass filters. Value is likely LONG; value range is likely between 0.0 and 20000.0, expressed in Hz. This value is probably best left at 5000.0.&lt;br /&gt;
* &#039;&#039;&#039;lf reference&#039;&#039;&#039; - Likely defines the frequency used for high-pass filters. Value is likely LONG; value range is likely between 0.0 and 20000.0, expressed in Hz. This value is probably best left at 250.0.&lt;br /&gt;
* &#039;&#039;&#039;room rolloff factor&#039;&#039;&#039; - The Room Rolloff property is one of two methods available in EAX to attenuate the reflected sound (containing both reflections, reverberation and echoes) according to source-listener distance. Value type is FLOAT; value range is 0.0 to 10.0, expressed in a linear multiplier value. It&#039;s recommended that users use 0.0, as id Software did not deviate from this value with Doom 3.&lt;br /&gt;
* &#039;&#039;&#039;flags&#039;&#039;&#039; - The Flags property is intended to control the relationship of high-level EAX properties to low-level properties. If certain EAX flags are set by setting the Flags property to a particular value, the setting of high-level properties is supposed to control the values of low-level properties based upon a defined scale, overriding specified values. In EAX 2.0, the value type is DWORD, whereas in Doom 3, it appears to be INT or some other type commonly used to store numeric values. In Doom 3, common values are 0, 2, 15, 31, 32, 56 and 63, but no documentation details what these values correspond to. If users wish to experiment with the Flags property, it is recommended that they choose from one of the above values. For reference, here is a table with the counts for each flag value as used in Doom 3:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 0.5em; margin-left: 2em; border: 1px solid #a0a0a0; text-align: right; border-collapse: collapse;&amp;quot; cellpadding=&amp;quot;2&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Flag decimal&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Flag binary&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Count&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|00000000&lt;br /&gt;
|497&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|00000010&lt;br /&gt;
|6&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|00001110&lt;br /&gt;
|15&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|00001111&lt;br /&gt;
|94&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|31&lt;br /&gt;
|00011111&lt;br /&gt;
|511&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|32&lt;br /&gt;
|00100000&lt;br /&gt;
|247&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|56&lt;br /&gt;
|00111000&lt;br /&gt;
|59&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|63&lt;br /&gt;
|00111111&lt;br /&gt;
|168&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Design.&#039;&#039;&#039;&lt;br /&gt;
In terms of the actual sound design for the values you put into these variables, here is a general tutorial on reverb from FruityLoops (NOTE: This is for a music production plugin, some of these don&#039;t apply, it&#039;s just to give a general idea on what certain variables do):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Low Cut&#039;&#039;&#039; Adjusts the low cutoff frequency. Use this to remove low frequencies from the input signal before reverb is added. For example, if you are adding reverb to, say a drum track, you might want to remove some of the &#039;rumble&#039; from the bass drum by attenuating the bass frequencies. Setting this parameter to the minimum value will bypass the Low Cut filter, displaying OFF in the value field.&lt;br /&gt;
* &#039;&#039;&#039;High Cut&#039;&#039;&#039; - Similar to the Low Cut, this adjusts the high cutoff frequency. Use this to remove high frequencies from the input signal.&lt;br /&gt;
* &#039;&#039;&#039;Predelay&#039;&#039;&#039; - Controls the delay time between the direct input signal and the first reverb reflection. This should be set to modest values for small rooms, and can be increased in relation to increases in room size. &#039;&#039;&#039;Predelay&#039;&#039;&#039; creates a slap-back echo effect that can both add atmosphere and muffle the signal, so use it wisely.&lt;br /&gt;
* &#039;&#039;&#039;Room Size&#039;&#039;&#039; - Use this to set the size of the virtual room where the reverb is created. The Room Size should be adjusted according to the decay time. Small rooms sound better with a short decay time, large rooms sound better with longer reverb times.&lt;br /&gt;
* &#039;&#039;&#039;Diffusion&#039;&#039;&#039; - Controls the density of the reflections bouncing off the walls of the virtual room. A low diffusion setting makes the reflections sound more distinct, like closely spaced echoes. A high diffusion setting creates reflections so close they sound more like noise, where no echoes can be distinguished.&lt;br /&gt;
* &#039;&#039;&#039;Color&#039;&#039;&#039; - The Color parameter is used for adjusting the decay time of the bass frequencies of the signal. This allows you to change the overall perceived mood or &#039;sound&#039; of the virtual room. A bright room has a low bass response, while warm rooms have a higher bass response. In a flat room, the response of the bass is equal to the general frequency response. Color has five settings: Brighter, Bright, Flat, Warm, Warmer.&lt;br /&gt;
* &#039;&#039;&#039;Decay&#039;&#039;&#039; - Controls the decay time of the reverb, the time it takes for the signal to decay to -60dB (1/1000 of the maximum amplitude). Use low decay times for small rooms or boxes, and long decay times for large rooms, halls or churches. You should also make sure that the Room Size parameter has an appropriate value.&lt;br /&gt;
* &#039;&#039;&#039;High Damping&#039;&#039;&#039; - This parameter allows you to adjust damping of the high frequencies in the reverb signal over time. Damping refers to the high frequencies being attenuated and dying out. This causes the sound to become gradually muffled and warm like it is being absorbed in the room. Setting this parameter to the maximum value will bypass the High Damping, displaying OFF in the value field.&lt;br /&gt;
* &#039;&#039;&#039;Dry&#039;&#039;&#039; - Sets the relative dry output level.&lt;br /&gt;
* &#039;&#039;&#039;Reverb&#039;&#039;&#039; - Sets the relative reverb (wet) signal level.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Error Check=&lt;br /&gt;
If you modified the presets in your EFX file, you can check for errors ingame. Load your map and open the console. Type &#039;&#039;reloadSounds&#039;&#039;, this will trigger the reload of the EFX used in your map and print out the vars which cause an error (like a value exceeding the maximum range). Note that if your EFX files contain errors, this will make the game ignore the EFX settings you chose. &lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
See the &amp;quot;EFX Reverb&amp;quot; column of &#039;&#039;&#039;[[Fan_Missions_for_The_Dark_Mod|Fan Missions page]]&#039;&#039;&#039;. Missions with &amp;quot;Yes&amp;quot; have EFX Reverb. &lt;br /&gt;
&amp;lt;br&amp;gt;Most missions use v2.0 presets but a few missions such as &amp;quot;Volta and the Stone&amp;quot; and Behind Closed Doors use v1.0 settings.&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
The Version 2 definitions were implemented due to [http://bugs.thedarkmod.com/view.php?id=4815 issue 4815], it has some brief explanation.&lt;br /&gt;
&lt;br /&gt;
A tutorial based around EFX can be found [http://forums.thedarkmod.com/topic/19205-getting-started-with-the-efx-room-reverb-system-wip/ here]&lt;br /&gt;
&lt;br /&gt;
An old demonstration map of EAX in TDM is included [http://forums.thedarkmod.com/topic/11045-environmental-audio-extensions-eax-in-tdm/ here]&lt;br /&gt;
&lt;br /&gt;
A discussion about no_efx is [http://forums.thedarkmod.com/topic/19213-efx-discussion here]&lt;br /&gt;
&lt;br /&gt;
The first version of this article was written by Ishtvan [https://forums.thedarkmod.com/index.php?/topic/2071-setting-reverb-data-in-new-soundengine-wiki/ here]&lt;br /&gt;
&lt;br /&gt;
[[Category:Sound]]&lt;br /&gt;
[[Category:Tutorial]]&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=Setting_Reverb_Data_of_Rooms_(EAX)&amp;diff=33793</id>
		<title>Setting Reverb Data of Rooms (EAX)</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=Setting_Reverb_Data_of_Rooms_(EAX)&amp;diff=33793"/>
		<updated>2025-01-11T20:49:42Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: /* Setup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
This document will attempt to explain how to set the new EFX settings in your rooms when mapping.&lt;br /&gt;
&lt;br /&gt;
Previously these settings were known as EAX settings, and required EAX 4.0-compatible sound card.&lt;br /&gt;
In TDM 2.06, EAX technology was completely replaced with OpenAL EFX, which is now processed in software (by [https://github.com/kcat/openal-soft openal-soft]) without any requirements on sound card.&lt;br /&gt;
&lt;br /&gt;
= General =&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
&lt;br /&gt;
EFX for an FM can be configured with or without a configuration file.  However, fileless configuration is only supported for EFX presets.&lt;br /&gt;
&lt;br /&gt;
== EFX file ==&lt;br /&gt;
&lt;br /&gt;
It is a plain text file, so you can open it up in your text editor of choice.&lt;br /&gt;
&lt;br /&gt;
Any EFX file must start with a header which specifies its &#039;&#039;&#039;version&#039;&#039;&#039;:&lt;br /&gt;
 Version 2&lt;br /&gt;
If you forget this line, then your EFX file will &#039;&#039;&#039;not&#039;&#039;&#039; be loaded.&lt;br /&gt;
The following versions are supported:&lt;br /&gt;
* &amp;lt;tt&amp;gt;Version 1&amp;lt;/tt&amp;gt; was supported by TDM from the very beginning. It uses some non-standard terms and quantities, which makes it hard to work with.&lt;br /&gt;
* &amp;lt;tt&amp;gt;Version 2&amp;lt;/tt&amp;gt; was added in TDM 2.07. It uses the parameters from OpenAL EFX and supports a lot of presets. &#039;&#039;&#039;Recommended for all new missions.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The rest of the file consists of separate blocks, one for each &amp;quot;reverb zone&amp;quot;.&lt;br /&gt;
Each block must start with &amp;lt;tt&amp;gt;reverb&amp;lt;/tt&amp;gt; keyword for Version 1 definitions, and &amp;lt;tt&amp;gt;eaxreverb&amp;lt;/tt&amp;gt; keyword for Version 2 definitions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here is an example of such block from mars_city1.efx of the original Doom 3 game (Version 1):&lt;br /&gt;
&lt;br /&gt;
 // reverb maintenance&lt;br /&gt;
 reverb &amp;quot;maintenance&amp;quot; {&lt;br /&gt;
  &amp;quot;environment&amp;quot; 26&lt;br /&gt;
  &amp;quot;environment size&amp;quot; 5.0670&lt;br /&gt;
  &amp;quot;environment diffusion&amp;quot; 0.6030&lt;br /&gt;
  &amp;quot;room&amp;quot; -411&lt;br /&gt;
  &amp;quot;room hf&amp;quot; -685&lt;br /&gt;
  &amp;quot;room lf&amp;quot; 0&lt;br /&gt;
  &amp;quot;decay time&amp;quot; 1.7360&lt;br /&gt;
  &amp;quot;decay hf ratio&amp;quot; 0.8030&lt;br /&gt;
  &amp;quot;decay lf ratio&amp;quot; 1.0000&lt;br /&gt;
  &amp;quot;reflections&amp;quot; 96&lt;br /&gt;
  &amp;quot;reflections delay&amp;quot; 0.0080&lt;br /&gt;
  &amp;quot;reflections pan&amp;quot; 0.0000 0.0000 0.0000&lt;br /&gt;
  &amp;quot;reverb&amp;quot; 27&lt;br /&gt;
  &amp;quot;reverb delay&amp;quot; 0.0050&lt;br /&gt;
  &amp;quot;reverb pan&amp;quot; 0.0000 0.0000 0.0000&lt;br /&gt;
  &amp;quot;echo time&amp;quot; 0.0750&lt;br /&gt;
  &amp;quot;echo depth&amp;quot; 1.0000&lt;br /&gt;
  &amp;quot;modulation time&amp;quot; 0.2500&lt;br /&gt;
  &amp;quot;modulation depth&amp;quot; 0.0000&lt;br /&gt;
  &amp;quot;air absorption hf&amp;quot; -5.0000&lt;br /&gt;
  &amp;quot;hf reference&amp;quot; 5000.0000&lt;br /&gt;
  &amp;quot;lf reference&amp;quot; 250.0000&lt;br /&gt;
  &amp;quot;room rolloff factor&amp;quot; 0.0000&lt;br /&gt;
  &amp;quot;flags&amp;quot; 56&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And here is an artificial example of Version 2 definitions:&lt;br /&gt;
&lt;br /&gt;
  eaxreverb &amp;quot;myweirdstreets&amp;quot; {&lt;br /&gt;
    reflections_gain 0.5&lt;br /&gt;
    reflections_delay 0.0050&lt;br /&gt;
    late_reverb_gain 2.5&lt;br /&gt;
    late_reverb_delay 0.050&lt;br /&gt;
    echo_time 0.25&lt;br /&gt;
    echo_depth 0.9000&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
What does all this mean? &lt;br /&gt;
&lt;br /&gt;
There is a lot of sound design stuff that one could make guesses at if you&#039;ve ever used a reverb plugin in any sort of sound editing program. hf = high frequency, lf = low frequency, etc.&lt;br /&gt;
&lt;br /&gt;
A proper explanation of the parameters is given below.&lt;br /&gt;
&lt;br /&gt;
== Locations ==&lt;br /&gt;
Each reverb zone definition starts with a line which specifies to which location it must be applied:&lt;br /&gt;
&lt;br /&gt;
 reverb &amp;quot;&amp;lt;name of the location area you want to apply this to&amp;gt;&amp;quot;&lt;br /&gt;
 {&lt;br /&gt;
     //... (settings)&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Information about locations and how to set them up is available in another article: [[Location Settings #The Location Entities]].&lt;br /&gt;
Reverb zones use exactly the same locations as the ones which are used to specify per-area ambient sounds.&lt;br /&gt;
You should name every info_location entity, i.e. provide a &amp;quot;&amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt;&amp;quot; spawnarg for it. This is the name used in reverb zone definitions.&lt;br /&gt;
&lt;br /&gt;
As of TDM 2.06, you can&#039;t use capital letters in the name of your location entity or reverb zone. This may or may not change in the future.&lt;br /&gt;
&lt;br /&gt;
Here is an example of an entity which defines &amp;quot;canal_tunnel&amp;quot; location:&lt;br /&gt;
&lt;br /&gt;
 //======================= from volta_v1.map ====================&lt;br /&gt;
 // entity 3532&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;classname&amp;quot; &amp;quot;info_location&amp;quot;&lt;br /&gt;
   &amp;quot;name&amp;quot; &amp;quot;canal_tunnel&amp;quot;             //this is the name used&lt;br /&gt;
   &amp;quot;ambient&amp;quot; &amp;quot;snd_streets&amp;quot;&lt;br /&gt;
   &amp;quot;ambient_light&amp;quot; &amp;quot;0.04 0.03 0.02&amp;quot;&lt;br /&gt;
   &amp;quot;ambient_light_dynamic&amp;quot; &amp;quot;0.01 0.01 0.01&amp;quot;&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And this is the EFX effect (reverb zone) for it:&lt;br /&gt;
&lt;br /&gt;
 //======================= from volta_v1.efx ====================&lt;br /&gt;
 reverb &amp;quot;canal_tunnel&amp;quot; {             //name put to here&lt;br /&gt;
   &amp;quot;environment&amp;quot; 22&lt;br /&gt;
   &amp;quot;environment size&amp;quot; 1.8000&lt;br /&gt;
   &amp;quot;environment diffusion&amp;quot; 1.0000&lt;br /&gt;
   &amp;quot;room&amp;quot; -1000&lt;br /&gt;
   &amp;quot;room hf&amp;quot; -4000&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
During playing, the engine prints a message whenever the player&#039;s location changes.&lt;br /&gt;
It allows you to check if you have set up locations properly.&lt;br /&gt;
For instance, here are console messages showing a proper EFX location change:&lt;br /&gt;
&lt;br /&gt;
 Switching to EFX &#039;canal_tunnel&#039; (#295)&lt;br /&gt;
 Changed location from &#039;canal_streets&#039; to &#039;canal_tunnel&#039;.&lt;br /&gt;
&lt;br /&gt;
It is also possible to specify portal-area number instead of location name in the reverb zone definition.&lt;br /&gt;
The portal-area number is listed in the .proc file, which is created in the dmap process, in the format of &amp;lt;tt&amp;gt;_area&amp;lt;num&amp;gt;&amp;lt;/tt&amp;gt; (where &amp;lt;num&amp;gt; is the portal area number), e.g. &amp;lt;tt&amp;gt;_area15&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&#039;&#039;&#039;Beware:&#039;&#039;&#039; this functionality exists for fast hacking only! Do not release a mission with portal-area numbers in .efx file!&lt;br /&gt;
The main reason to avoid it is that portal-area numbers are auto-generated, so minor changes in your mission can change all of them.&lt;br /&gt;
&lt;br /&gt;
Finally, there is a &amp;quot;default&amp;quot; reverb environment which is used for any area in the map which does not have reverb information specified.&lt;br /&gt;
&lt;br /&gt;
The order that the sound system checks for reverb data is: area number -&amp;gt; location name -&amp;gt; default.&lt;br /&gt;
&lt;br /&gt;
== Changes during playing ==&lt;br /&gt;
Type &amp;quot;&amp;lt;tt&amp;gt;reloadSounds&amp;lt;/tt&amp;gt;&amp;quot; command into game console in order to reload EFX definitions.&lt;br /&gt;
&lt;br /&gt;
So when you experiment with EFX, execute this command after each tweak to EFX file to hear the difference immediately.&lt;br /&gt;
&lt;br /&gt;
== Suppress effect ==&lt;br /&gt;
Sometimes you want to disable EFX effect on a specific sound.&lt;br /&gt;
A typical example is when you have a voice in player&#039;s head, which must not depend on player&#039;s physical environment.&lt;br /&gt;
Another case is when some sound already has reverb baked in, so you don&#039;t what to double-reverb it. Although the best practice is to use sound samples without embedded reverb, combined with proper EFX definitions.&lt;br /&gt;
&lt;br /&gt;
You can disable all EFX effects on one specific sound shader by adding &amp;quot;&amp;lt;tt&amp;gt;no_efx&amp;lt;/tt&amp;gt;&amp;quot; keyword to its body.&lt;br /&gt;
For instance, here is how non-EFX version of blackjack unsheathing looks like:&lt;br /&gt;
 blackjack_unsheath&lt;br /&gt;
 {&lt;br /&gt;
   description &amp;quot;Made by pakmannen&amp;quot;&lt;br /&gt;
   sound/sfx/tools/melee/blackjack_unsheath.ogg&lt;br /&gt;
   no_efx                       //do NOT apply EFX to this sound&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note that if you change sound shaders, writing &amp;quot;&amp;lt;tt&amp;gt;reloadDecls&amp;lt;/tt&amp;gt;&amp;quot; in TDM game console is enough to reload them.&lt;br /&gt;
&lt;br /&gt;
There are a lot of stock sounds in TDM which should not be affected by EFX effects.&lt;br /&gt;
Starting from TDM 2.07, the corresponding core sounds are marked with &amp;quot;&amp;lt;tt&amp;gt;no_efx&amp;lt;/tt&amp;gt;&amp;quot; keyword (see issue [http://bugs.thedarkmod.com/view.php?id=4688 4688]).&lt;br /&gt;
If you discover any core sound which is affected by EFX while you believe it should not, start a discussion on forums.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Environment properties=&lt;br /&gt;
&lt;br /&gt;
== New properties (Version 2) ==&lt;br /&gt;
&lt;br /&gt;
With Version 2 of EFX file, the set of supported properties exactly matches the set of properties defined in OpenAL EFX for the &amp;quot;EAX Reverb&amp;quot; effect.&lt;br /&gt;
Note that EFX defines several types of effects, including &amp;quot;EAX Reverb&amp;quot;, &amp;quot;Standard Reverb&amp;quot;, &amp;quot;Chorus&amp;quot;, &amp;quot;Distortion&amp;quot;, &amp;quot;Echo&amp;quot;, &amp;quot;Flanger&amp;quot;, etc.&lt;br /&gt;
Only the first one is important, ignore all the rest (including the so-called &amp;quot;Standard Reverb&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
The detailed description of all the properties is given in &amp;quot;Appendix 1 – Effect property descriptions&amp;quot; of the [https://usermanual.wiki/Pdf/Effects20Extension20Guide.90272296/view#95 OpenAL Effects Extension Guide](pages 95-101).&lt;br /&gt;
The short list is also available in a table on [https://usermanual.wiki/Pdf/Effects20Extension20Guide.90272296/view#66 page 66 of the guide]:&lt;br /&gt;
&lt;br /&gt;
[[File:Eaxreverb_properties_screenshot.png|500px]]&lt;br /&gt;
&lt;br /&gt;
The only difference is that the property names in the guide have the &amp;lt;tt&amp;gt;AL_EAXREVERB_&amp;lt;/tt&amp;gt; prefix, while in TDM definitions this prefix is removed.&lt;br /&gt;
&lt;br /&gt;
== Presets (Version 2) ==&lt;br /&gt;
&lt;br /&gt;
There is one special property &amp;lt;tt&amp;gt;PRESET&amp;lt;/tt&amp;gt;, which is not present in the EFX guide.&lt;br /&gt;
This property accepts the name of the preset which you want to use:&lt;br /&gt;
&lt;br /&gt;
 eaxreverb &amp;quot;myclassroom&amp;quot; {&lt;br /&gt;
   preset auditorium&lt;br /&gt;
 }&lt;br /&gt;
 eaxreverb &amp;quot;mycave&amp;quot; {&lt;br /&gt;
   preset cave&lt;br /&gt;
 }&lt;br /&gt;
 eaxreverb &amp;quot;mycorridor&amp;quot; {&lt;br /&gt;
   preset hallway&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
If you specify the preset like this, the values for all the reverb properties will be taken from the specified preset.&lt;br /&gt;
Additionally, you can override values of some properties if you define them manually &#039;&#039;&#039;after&#039;&#039;&#039; defining the preset.&lt;br /&gt;
&lt;br /&gt;
The preset property also accepts index of preset. Don&#039;t use indices for anything except experimentation, since they may change in future.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The presets were taken from OpenAL-Soft implementation which TDM uses.&lt;br /&gt;
Here is the full list of preset names:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;height:350px; overflow:scroll;&amp;quot;&amp;gt;&lt;br /&gt;
GENERIC&lt;br /&gt;
PADDEDCELL&lt;br /&gt;
ROOM&lt;br /&gt;
BATHROOM&lt;br /&gt;
LIVINGROOM&lt;br /&gt;
STONEROOM&lt;br /&gt;
AUDITORIUM&lt;br /&gt;
CONCERTHALL&lt;br /&gt;
CAVE&lt;br /&gt;
ARENA&lt;br /&gt;
HANGAR&lt;br /&gt;
CARPETEDHALLWAY&lt;br /&gt;
HALLWAY&lt;br /&gt;
STONECORRIDOR&lt;br /&gt;
ALLEY&lt;br /&gt;
FOREST&lt;br /&gt;
CITY&lt;br /&gt;
MOUNTAINS&lt;br /&gt;
QUARRY&lt;br /&gt;
PLAIN&lt;br /&gt;
PARKINGLOT&lt;br /&gt;
SEWERPIPE&lt;br /&gt;
UNDERWATER&lt;br /&gt;
DRUGGED&lt;br /&gt;
DIZZY&lt;br /&gt;
PSYCHOTIC&lt;br /&gt;
CASTLE_SMALLROOM&lt;br /&gt;
CASTLE_SHORTPASSAGE&lt;br /&gt;
CASTLE_MEDIUMROOM&lt;br /&gt;
CASTLE_LARGEROOM&lt;br /&gt;
CASTLE_LONGPASSAGE&lt;br /&gt;
CASTLE_HALL&lt;br /&gt;
CASTLE_CUPBOARD&lt;br /&gt;
CASTLE_COURTYARD&lt;br /&gt;
CASTLE_ALCOVE&lt;br /&gt;
FACTORY_SMALLROOM&lt;br /&gt;
FACTORY_SHORTPASSAGE&lt;br /&gt;
FACTORY_MEDIUMROOM&lt;br /&gt;
FACTORY_LARGEROOM&lt;br /&gt;
FACTORY_LONGPASSAGE&lt;br /&gt;
FACTORY_HALL&lt;br /&gt;
FACTORY_CUPBOARD&lt;br /&gt;
FACTORY_COURTYARD&lt;br /&gt;
FACTORY_ALCOVE&lt;br /&gt;
ICEPALACE_SMALLROOM&lt;br /&gt;
ICEPALACE_SHORTPASSAGE&lt;br /&gt;
ICEPALACE_MEDIUMROOM&lt;br /&gt;
ICEPALACE_LARGEROOM&lt;br /&gt;
ICEPALACE_LONGPASSAGE&lt;br /&gt;
ICEPALACE_HALL&lt;br /&gt;
ICEPALACE_CUPBOARD&lt;br /&gt;
ICEPALACE_COURTYARD&lt;br /&gt;
ICEPALACE_ALCOVE&lt;br /&gt;
SPACESTATION_SMALLROOM&lt;br /&gt;
SPACESTATION_SHORTPASSAGE&lt;br /&gt;
SPACESTATION_MEDIUMROOM&lt;br /&gt;
SPACESTATION_LARGEROOM&lt;br /&gt;
SPACESTATION_LONGPASSAGE&lt;br /&gt;
SPACESTATION_HALL&lt;br /&gt;
SPACESTATION_CUPBOARD&lt;br /&gt;
SPACESTATION_ALCOVE&lt;br /&gt;
WOODEN_SMALLROOM&lt;br /&gt;
WOODEN_SHORTPASSAGE&lt;br /&gt;
WOODEN_MEDIUMROOM&lt;br /&gt;
WOODEN_LARGEROOM&lt;br /&gt;
WOODEN_LONGPASSAGE&lt;br /&gt;
WOODEN_HALL&lt;br /&gt;
WOODEN_CUPBOARD&lt;br /&gt;
WOODEN_COURTYARD&lt;br /&gt;
WOODEN_ALCOVE&lt;br /&gt;
SPORT_EMPTYSTADIUM&lt;br /&gt;
SPORT_SQUASHCOURT&lt;br /&gt;
SPORT_SMALLSWIMMINGPOOL&lt;br /&gt;
SPORT_LARGESWIMMINGPOOL&lt;br /&gt;
SPORT_GYMNASIUM&lt;br /&gt;
SPORT_FULLSTADIUM&lt;br /&gt;
SPORT_STADIUMTANNOY&lt;br /&gt;
PREFAB_WORKSHOP&lt;br /&gt;
PREFAB_SCHOOLROOM&lt;br /&gt;
PREFAB_PRACTISEROOM&lt;br /&gt;
PREFAB_OUTHOUSE&lt;br /&gt;
PREFAB_CARAVAN&lt;br /&gt;
DOME_TOMB&lt;br /&gt;
PIPE_SMALL&lt;br /&gt;
DOME_SAINTPAULS&lt;br /&gt;
PIPE_LONGTHIN&lt;br /&gt;
PIPE_LARGE&lt;br /&gt;
PIPE_RESONANT&lt;br /&gt;
OUTDOORS_BACKYARD&lt;br /&gt;
OUTDOORS_ROLLINGPLAINS&lt;br /&gt;
OUTDOORS_DEEPCANYON&lt;br /&gt;
OUTDOORS_CREEK&lt;br /&gt;
OUTDOORS_VALLEY&lt;br /&gt;
MOOD_HEAVEN&lt;br /&gt;
MOOD_HELL&lt;br /&gt;
MOOD_MEMORY&lt;br /&gt;
DRIVING_COMMENTATOR&lt;br /&gt;
DRIVING_PITGARAGE&lt;br /&gt;
DRIVING_INCAR_RACER&lt;br /&gt;
DRIVING_INCAR_SPORTS&lt;br /&gt;
DRIVING_INCAR_LUXURY&lt;br /&gt;
DRIVING_FULLGRANDSTAND&lt;br /&gt;
DRIVING_EMPTYGRANDSTAND&lt;br /&gt;
DRIVING_TUNNEL&lt;br /&gt;
CITY_STREETS&lt;br /&gt;
CITY_SUBWAY&lt;br /&gt;
CITY_MUSEUM&lt;br /&gt;
CITY_LIBRARY&lt;br /&gt;
CITY_UNDERPASS&lt;br /&gt;
CITY_ABANDONED&lt;br /&gt;
DUSTYROOM&lt;br /&gt;
CHAPEL&lt;br /&gt;
SMALLWATERROOM                              &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Their definitions can be seen in [https://github.com/kcat/openal-soft/blob/master/include/AL/efx-presets.h efx-presets.h] from OpenAL-Soft source code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-expandtext=&amp;quot;Show&amp;quot; data-collapsetext=&amp;quot;Hide&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Legacy info (Version 1) ==&lt;br /&gt;
&lt;br /&gt;
This information is from the old official EAX 2.0 documentation, although some properties may have changed in scope and focus from EAX 2.0 to EAX 4.0. One can assume that the properties serve the same general purpose and that each property&#039;s value bounds are approximately the same.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;environment&#039;&#039;&#039; - Unknown. Likely sets the room to one of an unknown number of environment presets.&lt;br /&gt;
* &#039;&#039;&#039;environment size&#039;&#039;&#039; - The Environment Size property sets the apparent size of the surrounding “room.” The value of Environment Size can be considered a characteristic dimension of the room expressed in meters. Scaling Environment Size is equivalent to scaling all dimensions of the room by the same factor. Value type is FLOAT; value range is 1.0 to 100.0, expressed in linear meters.&lt;br /&gt;
* &#039;&#039;&#039;environment diffusion&#039;&#039;&#039; - The Environment Diffusion property controls the echo density in the reverberation decay. Reducing diffusion gives the reverberation a more “grainy” character that is especially noticeable with percussive sound sources. If you set a diffusion value of 0.0, the later reverberation sounds like a succession of distinct echoes. Value type is FLOAT; value range is 0.0 to 1.0, expressed in a linear multiplier value.&lt;br /&gt;
* &#039;&#039;&#039;room&#039;&#039;&#039; - The Room property is the master volume control for the reflected sound (both early reflections and reverberation) that EAX adds to all sound sources. It sets the maximum amount of reflections and reverberation added to the sound mix in the primary buffer (the listener). Value is LONG; value range is -10000 to 0, expressed in hundredths of one decibel (-100 dB to 0 dB).&lt;br /&gt;
* &#039;&#039;&#039;room hf&#039;&#039;&#039; - The Room HF property further tweaks reflected sound by attenuating it at high frequencies. It controls a low-pass filter that applies globally to the reflected sound of all sound sources. The exact qualities of this low-pass filter -- its frequency and its bandwidth (Q) -- are unknown. Value type is LONG; value range is -10000 to 0, expressed in hundredths of one decibel (-100 dB to 0 dB).&lt;br /&gt;
* &#039;&#039;&#039;room lf&#039;&#039;&#039; - Undocumented. Assumably, the Room LF property applies a high-pass to reflected sound in much the same way as Room HF applies low-pass. The value type and range is unknown, but is likely LONG, must be between -10000 and 0 and is expressed in hundredths of one decibel.&lt;br /&gt;
* &#039;&#039;&#039;decay time&#039;&#039;&#039; - The Decay Time property sets the reverberation decay time, or the time in which reverberation is diminished. It ranges from 0.1 (typically a small room with very dead surfaces) to 20.0 (typically a large room with very live surfaces). Value is FLOAT; value range is 0.1 to 20.0, expressed in seconds.&lt;br /&gt;
* &#039;&#039;&#039;decay hf ratio&#039;&#039;&#039; - The Decay HF Ratio property sets the spectral quality of the Decay Time parameter. It is the ratio of high-frequency decay time relative to the time set by Decay Time. The Decay HF Ratio value 1.0 is neutral: the decay time is equal for all frequencies. As Decay HF Ratio increases above 1.0, the high-frequency decay time increases so it’s longer than the decay time at low frequencies. You hear a more brilliant reverberation with a longer decay at high frequencies. As the Decay HF Ratio value decreases below 1.0, the high-frequency decay time decreases so it’s shorter than the decay time of the low frequencies. You hear a more natural reverberation. Value is FLOAT; value range is 0.1 to 20.0, expressed in a linear multiplier variable.&lt;br /&gt;
* &#039;&#039;&#039;decay lf ratio&#039;&#039;&#039; - Undocumented. It&#039;s likely best to leave the value at 1.0, though the value&#039;s type and range is probably the same as the Decay HF Ratio property.&lt;br /&gt;
* &#039;&#039;&#039;reflections&#039;&#039;&#039; - The Reflections property controls the overall amount of initial reflections relative to the Room property. The value of Reflections ranges from a maximum of 10 dB to a minimum of -100 dB (no initial reflections at all), and is corrected by the value of the Room property. The Reflections property does not affect the subsequent reverberation decay. You can increase the amount of initial reflections to simulate a more narrow space or closer walls, especially effective if you associate the initial reflections increase with a reduction in reflections delays by lowering the value of the Reflection Delay property. To simulate open or semi-open environments, you can maintain the amount of early reflections while reducing the value of the Reverb property, which controls later reflections. Value type is LONG; value range is -10000 to 1000, expressed in hundredths of one decibel (-100 dB to -10 dB).&lt;br /&gt;
* &#039;&#039;&#039;reflections delay&#039;&#039;&#039; - The Reflections Delay property is the amount of delay between the arrival time of the direct path from the source to the first reflection from the source. It ranges from 0 to 300 milliseconds. You can reduce or increase Reflections Delay to simulate closer or more distant reflective surfaces—and therefore control the perceived size of the room. Value is FLOAT; value range is 0.0 to 0.3, expressed in seconds (0 to 300 milliseconds).&lt;br /&gt;
* &#039;&#039;&#039;reflections pan&#039;&#039;&#039; - Undocumented. Three values are specified which may correspond to a generic &amp;quot;front&amp;quot;, &amp;quot;side&amp;quot; and &amp;quot;back/rear&amp;quot; configuration to control the directivity of early reflections in a 7.1 surround matrix. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;reverb&#039;&#039;&#039; - The Reverb property controls the overall amount of later reverberation relative to the Room property. (The Room property sets the overall amount of both initial reflections and later reverberation.) The value of Reverb ranges from a maximum of 20 dB to a minimum of -100 dB (no late reverberation at all). Value is LONG; value range is -10000 to 2000, expressed in hundredths of a decibel (-100 dB to 20 dB).&lt;br /&gt;
* &#039;&#039;&#039;reverb delay&#039;&#039;&#039; - The Reverb Delay property defines the begin time of the late reverberation relative to the time of the initial reflection (the first of the early reflections). It ranges from 0 to 100 milliseconds. Reducing or increasing Reverb Delay is useful for simulating a smaller or larger room. Value is FLOAT; value range is 0.0 to 0.1, expressed in seconds (0 to 100 milliseconds).&lt;br /&gt;
* &#039;&#039;&#039;reverb pan&#039;&#039;&#039; - Undocumented. Three values are specified which may correspond to a generic &amp;quot;front&amp;quot;, &amp;quot;side&amp;quot; and &amp;quot;back/rear&amp;quot; configuration to control the directivity of reverberation in a 7.1 surround matrix. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;echo time&#039;&#039;&#039; - Undocumented. Likely controls the decay time of echoes, or late reflections. A value of 0.1 likely presents a natural amount of echo, while increasing the value likely causes a &amp;quot;Grand Canyon&amp;quot; effect. Value type is likely FLOAT; value range is likely between 0.075 and 0.25, expressed in seconds.&lt;br /&gt;
* &#039;&#039;&#039;echo depth&#039;&#039;&#039; - Undocumented. May control directionality or tonal qualities of echoes arriving at the listener. Probably best to leave at 1.0. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;modulation time&#039;&#039;&#039; - Undocumented. Unknown purpose. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;modulation depth&#039;&#039;&#039; - Undocumented. Unknown purpose. Value type and range is unknown.&lt;br /&gt;
* &#039;&#039;&#039;air absorption hf&#039;&#039;&#039; - The Air Absorption HF property controls the distance-dependent attenuation at high frequencies caused by the propagation medium. It applies to both the direct path and reflected sound. You can use Air Absorption HF to simulate sound transmission through foggy air, dry air, smoky atmosphere, and so on. The default value is -0.05 dB per meter, which roughly corresponds to typical condition of atmospheric humidity, temperature, and so on. Lowering the value simulates a more absorbent medium (more humidity in the air, for example); raising the value simulates a less absorbent medium (dry desert air, for example). Value is FLOAT; value range is -100.0 to 0.0, expressed in hundredths of one decibel per meter (-1 dB to 0 dB). Default value is -5.0, which corresponds to -0.05 dB per meter attenuation.&lt;br /&gt;
* &#039;&#039;&#039;hf reference&#039;&#039;&#039; - Likely defines the frequency used for low-pass filters. Value is likely LONG; value range is likely between 0.0 and 20000.0, expressed in Hz. This value is probably best left at 5000.0.&lt;br /&gt;
* &#039;&#039;&#039;lf reference&#039;&#039;&#039; - Likely defines the frequency used for high-pass filters. Value is likely LONG; value range is likely between 0.0 and 20000.0, expressed in Hz. This value is probably best left at 250.0.&lt;br /&gt;
* &#039;&#039;&#039;room rolloff factor&#039;&#039;&#039; - The Room Rolloff property is one of two methods available in EAX to attenuate the reflected sound (containing both reflections, reverberation and echoes) according to source-listener distance. Value type is FLOAT; value range is 0.0 to 10.0, expressed in a linear multiplier value. It&#039;s recommended that users use 0.0, as id Software did not deviate from this value with Doom 3.&lt;br /&gt;
* &#039;&#039;&#039;flags&#039;&#039;&#039; - The Flags property is intended to control the relationship of high-level EAX properties to low-level properties. If certain EAX flags are set by setting the Flags property to a particular value, the setting of high-level properties is supposed to control the values of low-level properties based upon a defined scale, overriding specified values. In EAX 2.0, the value type is DWORD, whereas in Doom 3, it appears to be INT or some other type commonly used to store numeric values. In Doom 3, common values are 0, 2, 15, 31, 32, 56 and 63, but no documentation details what these values correspond to. If users wish to experiment with the Flags property, it is recommended that they choose from one of the above values. For reference, here is a table with the counts for each flag value as used in Doom 3:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 0.5em; margin-left: 2em; border: 1px solid #a0a0a0; text-align: right; border-collapse: collapse;&amp;quot; cellpadding=&amp;quot;2&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Flag decimal&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Flag binary&lt;br /&gt;
!bgcolor=&amp;quot;#ffdead&amp;quot;|Count&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|00000000&lt;br /&gt;
|497&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|00000010&lt;br /&gt;
|6&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|00001110&lt;br /&gt;
|15&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|00001111&lt;br /&gt;
|94&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|31&lt;br /&gt;
|00011111&lt;br /&gt;
|511&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|32&lt;br /&gt;
|00100000&lt;br /&gt;
|247&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|56&lt;br /&gt;
|00111000&lt;br /&gt;
|59&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|63&lt;br /&gt;
|00111111&lt;br /&gt;
|168&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Design.&#039;&#039;&#039;&lt;br /&gt;
In terms of the actual sound design for the values you put into these variables, here is a general tutorial on reverb from FruityLoops (NOTE: This is for a music production plugin, some of these don&#039;t apply, it&#039;s just to give a general idea on what certain variables do):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Low Cut&#039;&#039;&#039; Adjusts the low cutoff frequency. Use this to remove low frequencies from the input signal before reverb is added. For example, if you are adding reverb to, say a drum track, you might want to remove some of the &#039;rumble&#039; from the bass drum by attenuating the bass frequencies. Setting this parameter to the minimum value will bypass the Low Cut filter, displaying OFF in the value field.&lt;br /&gt;
* &#039;&#039;&#039;High Cut&#039;&#039;&#039; - Similar to the Low Cut, this adjusts the high cutoff frequency. Use this to remove high frequencies from the input signal.&lt;br /&gt;
* &#039;&#039;&#039;Predelay&#039;&#039;&#039; - Controls the delay time between the direct input signal and the first reverb reflection. This should be set to modest values for small rooms, and can be increased in relation to increases in room size. &#039;&#039;&#039;Predelay&#039;&#039;&#039; creates a slap-back echo effect that can both add atmosphere and muffle the signal, so use it wisely.&lt;br /&gt;
* &#039;&#039;&#039;Room Size&#039;&#039;&#039; - Use this to set the size of the virtual room where the reverb is created. The Room Size should be adjusted according to the decay time. Small rooms sound better with a short decay time, large rooms sound better with longer reverb times.&lt;br /&gt;
* &#039;&#039;&#039;Diffusion&#039;&#039;&#039; - Controls the density of the reflections bouncing off the walls of the virtual room. A low diffusion setting makes the reflections sound more distinct, like closely spaced echoes. A high diffusion setting creates reflections so close they sound more like noise, where no echoes can be distinguished.&lt;br /&gt;
* &#039;&#039;&#039;Color&#039;&#039;&#039; - The Color parameter is used for adjusting the decay time of the bass frequencies of the signal. This allows you to change the overall perceived mood or &#039;sound&#039; of the virtual room. A bright room has a low bass response, while warm rooms have a higher bass response. In a flat room, the response of the bass is equal to the general frequency response. Color has five settings: Brighter, Bright, Flat, Warm, Warmer.&lt;br /&gt;
* &#039;&#039;&#039;Decay&#039;&#039;&#039; - Controls the decay time of the reverb, the time it takes for the signal to decay to -60dB (1/1000 of the maximum amplitude). Use low decay times for small rooms or boxes, and long decay times for large rooms, halls or churches. You should also make sure that the Room Size parameter has an appropriate value.&lt;br /&gt;
* &#039;&#039;&#039;High Damping&#039;&#039;&#039; - This parameter allows you to adjust damping of the high frequencies in the reverb signal over time. Damping refers to the high frequencies being attenuated and dying out. This causes the sound to become gradually muffled and warm like it is being absorbed in the room. Setting this parameter to the maximum value will bypass the High Damping, displaying OFF in the value field.&lt;br /&gt;
* &#039;&#039;&#039;Dry&#039;&#039;&#039; - Sets the relative dry output level.&lt;br /&gt;
* &#039;&#039;&#039;Reverb&#039;&#039;&#039; - Sets the relative reverb (wet) signal level.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Error Check=&lt;br /&gt;
If you modified the presets in your EFX file, you can check for errors ingame. Load your map and open the console. Type &#039;&#039;reloadSounds&#039;&#039;, this will trigger the reload of the EFX used in your map and print out the vars which cause an error (like a value exceeding the maximum range). Note that if your EFX files contain errors, this will make the game ignore the EFX settings you chose. &lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
See the &amp;quot;EFX Reverb&amp;quot; column of &#039;&#039;&#039;[[Fan_Missions_for_The_Dark_Mod|Fan Missions page]]&#039;&#039;&#039;. Missions with &amp;quot;Yes&amp;quot; have EFX Reverb. &lt;br /&gt;
&amp;lt;br&amp;gt;Most missions use v2.0 presets but a few missions such as &amp;quot;Volta and the Stone&amp;quot; and Behind Closed Doors use v1.0 settings.&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
The Version 2 definitions were implemented due to [http://bugs.thedarkmod.com/view.php?id=4815 issue 4815], it has some brief explanation.&lt;br /&gt;
&lt;br /&gt;
A tutorial based around EFX can be found [http://forums.thedarkmod.com/topic/19205-getting-started-with-the-efx-room-reverb-system-wip/ here]&lt;br /&gt;
&lt;br /&gt;
An old demonstration map of EAX in TDM is included [http://forums.thedarkmod.com/topic/11045-environmental-audio-extensions-eax-in-tdm/ here]&lt;br /&gt;
&lt;br /&gt;
A discussion about no_efx is [http://forums.thedarkmod.com/topic/19213-efx-discussion here]&lt;br /&gt;
&lt;br /&gt;
The first version of this article was written by Ishtvan [https://forums.thedarkmod.com/index.php?/topic/2071-setting-reverb-data-in-new-soundengine-wiki/ here]&lt;br /&gt;
&lt;br /&gt;
[[Category:Sound]]&lt;br /&gt;
[[Category:Tutorial]]&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=What%27s_new_in_TDM_2.13&amp;diff=33790</id>
		<title>What&#039;s new in TDM 2.13</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=What%27s_new_in_TDM_2.13&amp;diff=33790"/>
		<updated>2025-01-08T21:05:49Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: /* Sound */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- keywords whats new --&amp;gt;&lt;br /&gt;
{{notreleasedyet|2.13}}&lt;br /&gt;
See the [http://bugs.thedarkmod.com/roadmap_page.php roadmap] on our bugtracker.&lt;br /&gt;
&amp;lt;!-- See the [https://bugs.thedarkmod.com/changelog_page.php?version_id=111 changelog] on our bugtracker. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- {{released|2.13|XXXX-XX-XX}} --&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Source Revision 10920&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;font size=&amp;quot;5&amp;quot;&amp;gt;The Dark Mod 2.13 Enhanced AI and GUI Edition!&amp;lt;/font&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
A major focus for The Dark Mod 2.13 development cycle was improving how AI see bodies, loot, and other non-player objects.&lt;br /&gt;
&amp;lt;br&amp;gt;While our lightgem system is possibly one of the most effective ways to calculate player visibility, it would not be practical&lt;br /&gt;
&amp;lt;br&amp;gt;to give all in-game objects, ragdolls, etc their own lightgem calculations. As such, we have historically used a simplified and less&lt;br /&gt;
&amp;lt;br&amp;gt;accurate design to determine visibility of non-player items. With 2.13 we reach near parity to the accuracy of the lightgem due to&lt;br /&gt;
&amp;lt;br&amp;gt;an improved stochastic sampling system for all objects that an AI can possibly see. ( Thanks stgatilov )&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Now that the AI are more perceptive, why not dull them down again? That is exactly what Amadeus decided and he worked tirelessly on figuring&lt;br /&gt;
&amp;lt;br&amp;gt;how to make the &amp;quot;drunken&amp;quot; AI work more reliably and easier to implement for mission authors. Now we have both more and less perceptive AI!&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;The long requested Parallax Map feature is now available in TDM! While it was possible to offer this before Doom 3 source was released,&lt;br /&gt;
&amp;lt;br&amp;gt;it is quite an expensive effect. With POM integrated into TDM it is now optimized enough for production use. WellingtonCrab has already&lt;br /&gt;
&amp;lt;br&amp;gt;created a large set of POM textures ready for inclusion in TDM 2.13 missions!&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Finally, the TDM community restarted it&#039;s perennial debate about how mission names should be displayed and sorted in the mission list. &lt;br /&gt;
&amp;lt;br&amp;gt;Previously, there was a compromise where the missions would display naturally but would be sorted ignoring &amp;quot;the&amp;quot; and &amp;quot;a&amp;quot; in the title.&lt;br /&gt;
&amp;lt;br&amp;gt;This was the status quo for quite some time but players have emerged to request that we revert to &amp;quot;Mission Name, The&amp;quot; in the GUI.&lt;br /&gt;
&amp;lt;br&amp;gt;Daft Mugi solved this by creating a toggle that allows either sorting style. He also made the whole debate pretty much moot by implementing&lt;br /&gt;
&amp;lt;br&amp;gt;a search window so you can easily find the desired mission by typing all or part of it&#039;s name! Mission management is has never been smoother! &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;See our [https://forums.thedarkmod.com/index.php?/topic/22641-213-feature-discussion-threads/ Feature Discuss Threads] for more details about substantial changes.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;&#039;&#039;&#039;Important CVARS&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;PLAYER&amp;lt;/font&amp;gt; ===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
tdm_holdfrob_* --- set of variables that affect the reworked frob controls.&lt;br /&gt;
&lt;br /&gt;
tdm_autosearch_bodies --- automatically take items attached to unconscious bodies on frob.&lt;br /&gt;
&lt;br /&gt;
pm_headbob_mod, pm_lean_* --- allows for the reduction of some player movements.&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;HELPER&amp;lt;/font&amp;gt; ===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
tdm_show_viewpos, screenshot_viewpos --- embedding viewpos into screenshots for better bug reports.&lt;br /&gt;
&lt;br /&gt;
tdm_open_doors, tdm_close_doors --- cheats to make mission testing faster. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;TROUBLESHOOTING&amp;lt;/font&amp;gt; ===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
g_lightQuotientAlgo 0 ( revert to the old AI vision system )&lt;br /&gt;
&lt;br /&gt;
jobs_numThreadsRealtime 2 ( force 2 threads )&lt;br /&gt;
&lt;br /&gt;
r_subviewMaxDepth 1 ( no subview recursion )&lt;br /&gt;
&lt;br /&gt;
r_skipParallax 1 ( disable POM effect )&lt;br /&gt;
&lt;br /&gt;
r_envmapBumpyBehavior 0 ( revert to old environment map behavior )&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Graphics&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
* Parallax Occlusion Mapping support ( See [https://forums.thedarkmod.com/index.php?/topic/22574-experimental-support-of-parallax-mapping-in-213/ thread] )&lt;br /&gt;
* Environment mapped textures with bumpmaps now properly respond to stage keywords ( See [https://forums.thedarkmod.com/index.php?/topic/22402-213-environment-mapping-bumpmap/ thread] )&lt;br /&gt;
* Nested subviews (mirrors, remotes, sky, etc.) now work properly (6434).&lt;br /&gt;
* Fixed rendering of volumetric light and particles in X-ray views and mirrors (6538).&lt;br /&gt;
* Shadow Map specific features are enabled by default in &amp;quot;Maps&amp;quot; mode ( alpha tested shadows, etc)&lt;br /&gt;
* Minor change in shadow map acne / blur radius computation (6571).&lt;br /&gt;
* Tonemapping has been altered to improve appearance of overly bright colors. Such colors are no longer clamped at value = 1 and they desaturate at high brightness. Finally, brightness slider should be much more useful now ( [https://forums.thedarkmod.com/index.php?/topic/22600-tone-mapping/page/2/#findComment-498990 post] ).&lt;br /&gt;
* Refactored the &amp;quot;HeatHaze&amp;quot; shaders so that one shader can produce multiple variations via parameters&lt;br /&gt;
* Disabled texture compression for light images: falloff and IBL cubemaps.&lt;br /&gt;
* Fixed light culling bug on elongated models with non-identity rotation (6557).&lt;br /&gt;
{{clear}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;AI&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
* AI now have a more accurate vision system ( see [https://forums.thedarkmod.com/index.php?/topic/22639-213-ai-vision-uses-different-light-estimate-system/ thread] )&lt;br /&gt;
* Major improvements in drunk AIs: setting &amp;quot;drunk&amp;quot; spawnarg is enough now; new sounds, animation improvements, greetings, etc. (6507). Fixed drunk women AI (5047).&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Mapping&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
* Added improved editor images for textures/darkmod/metal/detailed materials (6575)&lt;br /&gt;
* Added editor spawnarg for &amp;quot;parallelsky&amp;quot; (6496)&lt;br /&gt;
* Added &amp;quot;particle collision-ready&amp;quot; weather materials (6545)&lt;br /&gt;
* Added min/max builtin functions to game scripts.&lt;br /&gt;
* Added script events about gravity, health, in-air movement.&lt;br /&gt;
* Added script events setUserBy, setFrobActionScript. &lt;br /&gt;
* Added  &amp;quot;distance_follower_reached&amp;quot;, &amp;quot;distance_follower_catchup_distance&amp;quot; and &amp;quot;distance_follower_stop_running&amp;quot; spawnargs allowing mappers to customize AI follower distances (6552)&lt;br /&gt;
* Added &amp;quot;def_vocal_set_drunk&amp;quot; spawnarg to allow mappers to specify which drunk vocal set an AI should use (6507).&lt;br /&gt;
* Added &amp;quot;idle_bark_interval_max_drunk&amp;quot; &amp;quot;idle_bark_interval_min_drunk&amp;quot; spawnargs allowing mappers to customize drunk bark intervals (6507).&lt;br /&gt;
* Added &amp;quot;snd_greeting_generic_drunk&amp;quot; spawnarg for drunk AI (6507)&lt;br /&gt;
* Added cm_allocator debug cvar (6505).&lt;br /&gt;
* Added r_lockView debug rendering cvar ( [https://forums.thedarkmod.com/index.php?/topic/22388-r_lockview-debug-cvar/ thread] ).&lt;br /&gt;
* Added proper dmap error message if map file contains an entity before worldspawn.&lt;br /&gt;
* Fixed dmap making almost axis-aligned visportals buggy (6480)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Coding&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
* Auto-detect number of parallel threads to use in jobs system (6503)&lt;br /&gt;
* Vsync now properly works on Linux&lt;br /&gt;
* FPS limit code has been improved&lt;br /&gt;
* Level loading is further accelerated with better utilization of multicore CPUs and parallel loading of sound samples.&lt;br /&gt;
* CVAR system has been made fully thread safe&lt;br /&gt;
* Missions can now safely override CVAR values via config or script operations&lt;br /&gt;
* The system for third-party dependencies has been moved to Conan 2 and extended. Now the CI server regularly builds TDM and its dependencies completely from source code.&lt;br /&gt;
* Deleted a lot of old rendering code under useNewRenderPasses + some cleanup (6271).&lt;br /&gt;
* Core missions are now stored uncompressed in assets SVN (6498).&lt;br /&gt;
* Optimization: don&#039;t render interaction groups with black diffuse &amp;amp; specular.&lt;br /&gt;
{{clear}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Assets&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
* Added several parallax materials, as well as their non-parallax equivalents &lt;br /&gt;
* Added 17 modular industrial pipe models from Polyhaven&lt;br /&gt;
* Added combined lampion light entity&lt;br /&gt;
* Added several factory_machines models (6537)&lt;br /&gt;
* Added textures/darkmod/decals/distant_cityscape_01_tiling material (6487)&lt;br /&gt;
* Added missing normalmap to stainglass_saint_03 (6521)&lt;br /&gt;
* Added missing textures for rough_boards_scratched material (4157)&lt;br /&gt;
* Added [[Creating_textures_from_Ornate_Photos|ornate]] wood/panels/mary_panel texture&lt;br /&gt;
* Added [[Creating_textures_from_Ornate_Photos|ornate]] stone/sculpted/girard_relief texture&lt;br /&gt;
* Added colored versions of gen3 environment cubemaps for metallic materials.&lt;br /&gt;
* Added new environment cubemaps: sparkles, studio, blurry.&lt;br /&gt;
* Added skybox materials clouds3 and clouds_4_small + prefabs. &lt;br /&gt;
* Fixed several issues with largesquare01 window textures (6579)&lt;br /&gt;
* Fixed broken material for stove_open02.lwo (6580)&lt;br /&gt;
* Fixed floating decals for ext_timber01_window01.lwo (5782)&lt;br /&gt;
* Fixed gaps in mesh and UV for generator_big.lwo and warehouse_front_doorframe.lwo (6581)&lt;br /&gt;
* Fixed broken UV for longbanner_ragged.lwo (6573)&lt;br /&gt;
* Fixed issues with newspaper01.lwo (6568)&lt;br /&gt;
* Fixed normal map of ornament_relief_mold_eaglelshield (6585).&lt;br /&gt;
* Fixed handle_curved02_latch prefab, deleted pull_handle (6286).&lt;br /&gt;
* Improved &amp;quot;scepter&amp;quot; material ( [https://forums.thedarkmod.com/index.php?/topic/22586-better-looking-metals-in-darkmod/page/4/#comment-498297 thread] ).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Gameplay and Interaction&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
* Updated Training Mission with Vine Arrow tutorial, graphics enhancements, and EFX Reverb&lt;br /&gt;
* Added entityDef archery_target01 with hit detection, it is now used in Training Mission.&lt;br /&gt;
* Added gas mine playertool&lt;br /&gt;
* Added slowfall potion&lt;br /&gt;
* Added invisibility potion by Kingsal     &lt;br /&gt;
* Fixed frob interaction with candle holder that&#039;s initially extinguished (6577).&lt;br /&gt;
* Improved lightgem calculations while leaning ( [https://forums.thedarkmod.com/index.php?/topic/22587-bug-lean-light-calculation/#comment-498247 post] ).&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;GUIs&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
* Massive improvements in mission select &amp;amp; download menus, added search (6339 6570 6449).&lt;br /&gt;
* Loading progress bar has been re-implemented to reflect all the loading optimizations of the past years.&lt;br /&gt;
* Mission Notes ( readme data ) can now be scrolled&lt;br /&gt;
* Mission Debriefing feature ( See [https://forums.thedarkmod.com/index.php?/topic/21831-support-for-gui-based-debrief/ thread] )&lt;br /&gt;
* Stone font improvements&lt;br /&gt;
* Reduced font size of mission list, which allows to see more missions and longer names&lt;br /&gt;
* Texture Quality option for lowend players&lt;br /&gt;
* Added TDM version + engine revision in lower-left corner of main menu.&lt;br /&gt;
* Increased size of secret message overlay GUI.&lt;br /&gt;
* Fixed map immobilization not applied if opening map with inv use key.&lt;br /&gt;
* Forbid adding missions to download when download is in progress (6368).&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Sound&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
* EFX reverb presets can now be set on location entities using the &#039;&#039;&#039;efx_preset&#039;&#039;&#039; spawnarg, rather than requiring an .efx file (6273).&lt;br /&gt;
* Fixed sleeping sounds for drunk AIs (6539), and other sounds for them too (6507).&lt;br /&gt;
* Added improved footstep sounds for broken glass and ice material surfaces (6551).&lt;br /&gt;
* Fixed water_medium_running soundshader (5384)&lt;br /&gt;
* Subtitles volume estimation is much better now, subtitles for too quiet sounds are no longer shown. Visual appearance of the subtitles font has been greatly improved. &lt;br /&gt;
* Added two drunk AI vocalsets voiced by Goldwell and Bikerdude: Drunk Moor and Drunk Jack&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
{{whatsnew|sort=213}}&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=What%27s_new_in_TDM_2.13&amp;diff=33789</id>
		<title>What&#039;s new in TDM 2.13</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=What%27s_new_in_TDM_2.13&amp;diff=33789"/>
		<updated>2025-01-08T20:59:52Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: /* Sound */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- keywords whats new --&amp;gt;&lt;br /&gt;
{{notreleasedyet|2.13}}&lt;br /&gt;
See the [http://bugs.thedarkmod.com/roadmap_page.php roadmap] on our bugtracker.&lt;br /&gt;
&amp;lt;!-- See the [https://bugs.thedarkmod.com/changelog_page.php?version_id=111 changelog] on our bugtracker. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- {{released|2.13|XXXX-XX-XX}} --&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Source Revision 10920&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;font size=&amp;quot;5&amp;quot;&amp;gt;The Dark Mod 2.13 Enhanced AI and GUI Edition!&amp;lt;/font&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
A major focus for The Dark Mod 2.13 development cycle was improving how AI see bodies, loot, and other non-player objects.&lt;br /&gt;
&amp;lt;br&amp;gt;While our lightgem system is possibly one of the most effective ways to calculate player visibility, it would not be practical&lt;br /&gt;
&amp;lt;br&amp;gt;to give all in-game objects, ragdolls, etc their own lightgem calculations. As such, we have historically used a simplified and less&lt;br /&gt;
&amp;lt;br&amp;gt;accurate design to determine visibility of non-player items. With 2.13 we reach near parity to the accuracy of the lightgem due to&lt;br /&gt;
&amp;lt;br&amp;gt;an improved stochastic sampling system for all objects that an AI can possibly see. ( Thanks stgatilov )&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Now that the AI are more perceptive, why not dull them down again? That is exactly what Amadeus decided and he worked tirelessly on figuring&lt;br /&gt;
&amp;lt;br&amp;gt;how to make the &amp;quot;drunken&amp;quot; AI work more reliably and easier to implement for mission authors. Now we have both more and less perceptive AI!&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;The long requested Parallax Map feature is now available in TDM! While it was possible to offer this before Doom 3 source was released,&lt;br /&gt;
&amp;lt;br&amp;gt;it is quite an expensive effect. With POM integrated into TDM it is now optimized enough for production use. WellingtonCrab has already&lt;br /&gt;
&amp;lt;br&amp;gt;created a large set of POM textures ready for inclusion in TDM 2.13 missions!&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Finally, the TDM community restarted it&#039;s perennial debate about how mission names should be displayed and sorted in the mission list. &lt;br /&gt;
&amp;lt;br&amp;gt;Previously, there was a compromise where the missions would display naturally but would be sorted ignoring &amp;quot;the&amp;quot; and &amp;quot;a&amp;quot; in the title.&lt;br /&gt;
&amp;lt;br&amp;gt;This was the status quo for quite some time but players have emerged to request that we revert to &amp;quot;Mission Name, The&amp;quot; in the GUI.&lt;br /&gt;
&amp;lt;br&amp;gt;Daft Mugi solved this by creating a toggle that allows either sorting style. He also made the whole debate pretty much moot by implementing&lt;br /&gt;
&amp;lt;br&amp;gt;a search window so you can easily find the desired mission by typing all or part of it&#039;s name! Mission management is has never been smoother! &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;See our [https://forums.thedarkmod.com/index.php?/topic/22641-213-feature-discussion-threads/ Feature Discuss Threads] for more details about substantial changes.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;&#039;&#039;&#039;Important CVARS&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;PLAYER&amp;lt;/font&amp;gt; ===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
tdm_holdfrob_* --- set of variables that affect the reworked frob controls.&lt;br /&gt;
&lt;br /&gt;
tdm_autosearch_bodies --- automatically take items attached to unconscious bodies on frob.&lt;br /&gt;
&lt;br /&gt;
pm_headbob_mod, pm_lean_* --- allows for the reduction of some player movements.&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;HELPER&amp;lt;/font&amp;gt; ===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
tdm_show_viewpos, screenshot_viewpos --- embedding viewpos into screenshots for better bug reports.&lt;br /&gt;
&lt;br /&gt;
tdm_open_doors, tdm_close_doors --- cheats to make mission testing faster. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;TROUBLESHOOTING&amp;lt;/font&amp;gt; ===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
g_lightQuotientAlgo 0 ( revert to the old AI vision system )&lt;br /&gt;
&lt;br /&gt;
jobs_numThreadsRealtime 2 ( force 2 threads )&lt;br /&gt;
&lt;br /&gt;
r_subviewMaxDepth 1 ( no subview recursion )&lt;br /&gt;
&lt;br /&gt;
r_skipParallax 1 ( disable POM effect )&lt;br /&gt;
&lt;br /&gt;
r_envmapBumpyBehavior 0 ( revert to old environment map behavior )&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Graphics&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
* Parallax Occlusion Mapping support ( See [https://forums.thedarkmod.com/index.php?/topic/22574-experimental-support-of-parallax-mapping-in-213/ thread] )&lt;br /&gt;
* Environment mapped textures with bumpmaps now properly respond to stage keywords ( See [https://forums.thedarkmod.com/index.php?/topic/22402-213-environment-mapping-bumpmap/ thread] )&lt;br /&gt;
* Nested subviews (mirrors, remotes, sky, etc.) now work properly (6434).&lt;br /&gt;
* Fixed rendering of volumetric light and particles in X-ray views and mirrors (6538).&lt;br /&gt;
* Shadow Map specific features are enabled by default in &amp;quot;Maps&amp;quot; mode ( alpha tested shadows, etc)&lt;br /&gt;
* Minor change in shadow map acne / blur radius computation (6571).&lt;br /&gt;
* Tonemapping has been altered to improve appearance of overly bright colors. Such colors are no longer clamped at value = 1 and they desaturate at high brightness. Finally, brightness slider should be much more useful now ( [https://forums.thedarkmod.com/index.php?/topic/22600-tone-mapping/page/2/#findComment-498990 post] ).&lt;br /&gt;
* Refactored the &amp;quot;HeatHaze&amp;quot; shaders so that one shader can produce multiple variations via parameters&lt;br /&gt;
* Disabled texture compression for light images: falloff and IBL cubemaps.&lt;br /&gt;
* Fixed light culling bug on elongated models with non-identity rotation (6557).&lt;br /&gt;
{{clear}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;AI&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
* AI now have a more accurate vision system ( see [https://forums.thedarkmod.com/index.php?/topic/22639-213-ai-vision-uses-different-light-estimate-system/ thread] )&lt;br /&gt;
* Major improvements in drunk AIs: setting &amp;quot;drunk&amp;quot; spawnarg is enough now; new sounds, animation improvements, greetings, etc. (6507). Fixed drunk women AI (5047).&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Mapping&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
* Added improved editor images for textures/darkmod/metal/detailed materials (6575)&lt;br /&gt;
* Added editor spawnarg for &amp;quot;parallelsky&amp;quot; (6496)&lt;br /&gt;
* Added &amp;quot;particle collision-ready&amp;quot; weather materials (6545)&lt;br /&gt;
* Added min/max builtin functions to game scripts.&lt;br /&gt;
* Added script events about gravity, health, in-air movement.&lt;br /&gt;
* Added script events setUserBy, setFrobActionScript. &lt;br /&gt;
* Added  &amp;quot;distance_follower_reached&amp;quot;, &amp;quot;distance_follower_catchup_distance&amp;quot; and &amp;quot;distance_follower_stop_running&amp;quot; spawnargs allowing mappers to customize AI follower distances (6552)&lt;br /&gt;
* Added &amp;quot;def_vocal_set_drunk&amp;quot; spawnarg to allow mappers to specify which drunk vocal set an AI should use (6507).&lt;br /&gt;
* Added &amp;quot;idle_bark_interval_max_drunk&amp;quot; &amp;quot;idle_bark_interval_min_drunk&amp;quot; spawnargs allowing mappers to customize drunk bark intervals (6507).&lt;br /&gt;
* Added &amp;quot;snd_greeting_generic_drunk&amp;quot; spawnarg for drunk AI (6507)&lt;br /&gt;
* Added cm_allocator debug cvar (6505).&lt;br /&gt;
* Added r_lockView debug rendering cvar ( [https://forums.thedarkmod.com/index.php?/topic/22388-r_lockview-debug-cvar/ thread] ).&lt;br /&gt;
* Added proper dmap error message if map file contains an entity before worldspawn.&lt;br /&gt;
* Fixed dmap making almost axis-aligned visportals buggy (6480)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Coding&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
* Auto-detect number of parallel threads to use in jobs system (6503)&lt;br /&gt;
* Vsync now properly works on Linux&lt;br /&gt;
* FPS limit code has been improved&lt;br /&gt;
* Level loading is further accelerated with better utilization of multicore CPUs and parallel loading of sound samples.&lt;br /&gt;
* CVAR system has been made fully thread safe&lt;br /&gt;
* Missions can now safely override CVAR values via config or script operations&lt;br /&gt;
* The system for third-party dependencies has been moved to Conan 2 and extended. Now the CI server regularly builds TDM and its dependencies completely from source code.&lt;br /&gt;
* Deleted a lot of old rendering code under useNewRenderPasses + some cleanup (6271).&lt;br /&gt;
* Core missions are now stored uncompressed in assets SVN (6498).&lt;br /&gt;
* Optimization: don&#039;t render interaction groups with black diffuse &amp;amp; specular.&lt;br /&gt;
{{clear}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Assets&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
* Added several parallax materials, as well as their non-parallax equivalents &lt;br /&gt;
* Added 17 modular industrial pipe models from Polyhaven&lt;br /&gt;
* Added combined lampion light entity&lt;br /&gt;
* Added several factory_machines models (6537)&lt;br /&gt;
* Added textures/darkmod/decals/distant_cityscape_01_tiling material (6487)&lt;br /&gt;
* Added missing normalmap to stainglass_saint_03 (6521)&lt;br /&gt;
* Added missing textures for rough_boards_scratched material (4157)&lt;br /&gt;
* Added [[Creating_textures_from_Ornate_Photos|ornate]] wood/panels/mary_panel texture&lt;br /&gt;
* Added [[Creating_textures_from_Ornate_Photos|ornate]] stone/sculpted/girard_relief texture&lt;br /&gt;
* Added colored versions of gen3 environment cubemaps for metallic materials.&lt;br /&gt;
* Added new environment cubemaps: sparkles, studio, blurry.&lt;br /&gt;
* Added skybox materials clouds3 and clouds_4_small + prefabs. &lt;br /&gt;
* Fixed several issues with largesquare01 window textures (6579)&lt;br /&gt;
* Fixed broken material for stove_open02.lwo (6580)&lt;br /&gt;
* Fixed floating decals for ext_timber01_window01.lwo (5782)&lt;br /&gt;
* Fixed gaps in mesh and UV for generator_big.lwo and warehouse_front_doorframe.lwo (6581)&lt;br /&gt;
* Fixed broken UV for longbanner_ragged.lwo (6573)&lt;br /&gt;
* Fixed issues with newspaper01.lwo (6568)&lt;br /&gt;
* Fixed normal map of ornament_relief_mold_eaglelshield (6585).&lt;br /&gt;
* Fixed handle_curved02_latch prefab, deleted pull_handle (6286).&lt;br /&gt;
* Improved &amp;quot;scepter&amp;quot; material ( [https://forums.thedarkmod.com/index.php?/topic/22586-better-looking-metals-in-darkmod/page/4/#comment-498297 thread] ).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Gameplay and Interaction&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
* Updated Training Mission with Vine Arrow tutorial, graphics enhancements, and EFX Reverb&lt;br /&gt;
* Added entityDef archery_target01 with hit detection, it is now used in Training Mission.&lt;br /&gt;
* Added gas mine playertool&lt;br /&gt;
* Added slowfall potion&lt;br /&gt;
* Added invisibility potion by Kingsal     &lt;br /&gt;
* Fixed frob interaction with candle holder that&#039;s initially extinguished (6577).&lt;br /&gt;
* Improved lightgem calculations while leaning ( [https://forums.thedarkmod.com/index.php?/topic/22587-bug-lean-light-calculation/#comment-498247 post] ).&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;GUIs&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
* Massive improvements in mission select &amp;amp; download menus, added search (6339 6570 6449).&lt;br /&gt;
* Loading progress bar has been re-implemented to reflect all the loading optimizations of the past years.&lt;br /&gt;
* Mission Notes ( readme data ) can now be scrolled&lt;br /&gt;
* Mission Debriefing feature ( See [https://forums.thedarkmod.com/index.php?/topic/21831-support-for-gui-based-debrief/ thread] )&lt;br /&gt;
* Stone font improvements&lt;br /&gt;
* Reduced font size of mission list, which allows to see more missions and longer names&lt;br /&gt;
* Texture Quality option for lowend players&lt;br /&gt;
* Added TDM version + engine revision in lower-left corner of main menu.&lt;br /&gt;
* Increased size of secret message overlay GUI.&lt;br /&gt;
* Fixed map immobilization not applied if opening map with inv use key.&lt;br /&gt;
* Forbid adding missions to download when download is in progress (6368).&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Sound&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
* EFX reverb presets can now be set on location entities using a spawnarg, rather than requiring an .efx file (6273).&lt;br /&gt;
* Fixed sleeping sounds for drunk AIs (6539), and other sounds for them too (6507).&lt;br /&gt;
* Added improved footstep sounds for broken glass and ice material surfaces (6551).&lt;br /&gt;
* Fixed water_medium_running soundshader (5384)&lt;br /&gt;
* Subtitles volume estimation is much better now, subtitles for too quiet sounds are no longer shown. Visual appearance of the subtitles font has been greatly improved. &lt;br /&gt;
* Added two drunk AI vocalsets voiced by Goldwell and Bikerdude: Drunk Moor and Drunk Jack&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
{{whatsnew|sort=213}}&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=User:Frost_Salamander&amp;diff=33658</id>
		<title>User:Frost Salamander</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=User:Frost_Salamander&amp;diff=33658"/>
		<updated>2024-12-24T10:24:49Z</updated>

		<summary type="html">&lt;p&gt;Frost Salamander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== TDM Files and Contents ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Caption text&lt;br /&gt;
|-&lt;br /&gt;
! Content !! File path !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Skins || tdm_models_decls01.pk4\skins || skin files shipped with TDM&lt;br /&gt;
|-&lt;br /&gt;
| Script Constants|| tdm_base01.pk4\script\tdm_defs.script || constant values. Useful if you need to know the literal values for use in your scripts.&lt;br /&gt;
|-&lt;br /&gt;
| Script Objects|| tdm_base01.pk4\script || various script objects for entities.&lt;br /&gt;
|-&lt;br /&gt;
| tdm_ai_humanoid_newskel.def || tdm_ai_humanoid_undead01.pk4\def\tdm_ai_humanoid_newskel.def || Base class for all TDM humanoid entities&lt;br /&gt;
|-&lt;br /&gt;
| GUI Icons || tdm_gui01.pk4\dds\guis\assets\hud\ || HUD icons. e.g. loot, potions, etc&lt;br /&gt;
|-&lt;br /&gt;
| sound shaders || tdm_sound_ambient_decls01.pk4\sound || ambient environmental sound shaders&lt;br /&gt;
|-&lt;br /&gt;
| materials definitions || tdm_textures_base01.pk4\materials || base materials files &lt;br /&gt;
|-&lt;br /&gt;
| guard model materials || tdm_ai_humanoid_guards01.pk4 || guard materials and texture files &lt;br /&gt;
|-&lt;br /&gt;
| Stim types || tdm_base01.pk4/script/tdm_stim_response.script || &lt;br /&gt;
|-&lt;br /&gt;
| Readable textures || tdm_gui01.pk4/dds/guis/assets/readables || various parchment textures&lt;br /&gt;
|-&lt;br /&gt;
| Blueprint textures || tdm_models02.pk4 || textures/readables/blueprint01*&lt;br /&gt;
|-&lt;br /&gt;
| Light textures || tdm_textures_base01.pk4 || In both /lights and textures/lights&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Creating an Image Decal with Gimp ==&lt;br /&gt;
# Go to somewhere like pixabay.com and search for free images.  I usually filter by &#039;vector graphics&#039; (e.g. PNG) because it supports alpha channel which you&#039;ll need for decals.&lt;br /&gt;
# Once you find an image, download it.  I tend to get medium-sized versions (e.g. close to 1024 x 1024)&lt;br /&gt;
# Open the file in Gimp&lt;br /&gt;
# Scale the image to 1024x1024 pixels.&lt;br /&gt;
# export as TGA&lt;br /&gt;
&lt;br /&gt;
== Creating a Text Decal with Gimp ==&lt;br /&gt;
# Open Gimp - New -&amp;gt; &lt;br /&gt;
# Set image size to 1024 x 1024 (or something more rectangular like 1024 x 512)&lt;br /&gt;
# Click Advanced -&amp;gt; Fill with: transparency&lt;br /&gt;
# Add text layer&lt;br /&gt;
# When happy with text, right-click the text layer and &#039;merge down&#039; into alpha layer&lt;br /&gt;
# save and export as TGA.&lt;br /&gt;
# Create a materials file (.mtr) like so:&lt;br /&gt;
&lt;br /&gt;
  textures/darkmod/decals/signs/coronet&lt;br /&gt;
  {&lt;br /&gt;
  	DECAL_MACRO&lt;br /&gt;
  	noimpact&lt;br /&gt;
  	&lt;br /&gt;
  	{&lt;br /&gt;
  		blend blend&lt;br /&gt;
  		map textures/darkmod/decals/signs/coronet&lt;br /&gt;
  	}&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
== Creating a material using existing images (e.g. from textures.com) using GIMP ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Written on May 28th, 2023 using GIMP 2.10.34&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This will describe how to create your own texture (material) using an image found on the internet.  I will use textures.com as an example.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ensure that the license for whatever source you use is appropriate for TDM (e.g. allows use in video games)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
We will end up with 3 image files and one materials file:&lt;br /&gt;
* diffuse map (the base image with colour details, etc)&lt;br /&gt;
* normal map (faked bump/dent data)&lt;br /&gt;
* DarkRadiant editor icon&lt;br /&gt;
&lt;br /&gt;
This doesn&#039;t cover creation of a specular map.  This isn&#039;t needed unless your material needs a shiny surface (e.g. metal or wet surfaces).&lt;br /&gt;
&lt;br /&gt;
=== Obtain your image ===&lt;br /&gt;
# Log into textures.com and find an image you like under the &#039;Regular Photos&#039; section (&#039;&#039;&#039;NOT&#039;&#039;&#039; &#039;Special Content&#039;).  Make sure it&#039;s seamless if it needs to be tiled/repeatable (e.g. for bricks or walls). If it&#039;s something like a door or window, it doesn&#039;t need to be seamless. There is normally a JPG format that that is close to or exactly 1024x1024 pixels. Download it.&lt;br /&gt;
&lt;br /&gt;
=== Open your Image in GIMP ===&lt;br /&gt;
The first thing you may see here is a pop-up asking if you want to convert the image to &#039;the built-in sRGB color profile&#039;. I&#039;m not sure the implications of doing this but just choose &#039;Convert&#039;. &#039;&#039;&#039;(ADVICE NEEDED)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Resize Image (if needed) ===&lt;br /&gt;
TDM standard resolution for textures is 1024 x 1024.  However it&#039;s possible to get away with 2048 x 2048 at the cost of file size and performance.&lt;br /&gt;
If you can&#039;t find a 1024 x 1024 image for whatever reason (say it&#039;s 4K instead), you can scale it down:&lt;br /&gt;
# With the image open in GIMP, click Image -&amp;gt; Scale Image...&lt;br /&gt;
# Set the width in &#039;Image Size&#039; in pixels to 1024.  Make sure the width and height are &#039;chained&#039; (the little link icon should be whole). The height will then scale down proportionately to match the width.&lt;br /&gt;
&lt;br /&gt;
=== Crop your Image ===&lt;br /&gt;
This is only needed if you don&#039;t intend to use the entire image as-is (e.g. if you want to cut a door or window out of an image).  Skip this section if that is not the case.&lt;br /&gt;
# With the image in GIMP, select the Crop Tool (Shift+C).&lt;br /&gt;
# Under the &#039;Tool Options&#039; tab, tick the box for &#039;Delete cropped pixels&#039;&lt;br /&gt;
# Using the crop tool select the area you want to keep on the image with your mouse, and press &#039;Enter&#039; when done.&lt;br /&gt;
&lt;br /&gt;
=== Create the Diffuse Map (DDS File) ===&lt;br /&gt;
# With the original or cropped image open in GIMP Choose File -&amp;gt; Export as...&lt;br /&gt;
# In the next popup, change the filename to &#039;texturename.dds&#039; and click &#039;Export&#039;. &lt;br /&gt;
# On the next pop-up, choose your compression format (see below) and select &#039;Generate mipmaps&#039;. Under &#039;Mipmap Options&#039; choose &#039;Filter&#039;: &#039;Kaiser&#039; for best quality. Click &#039;Export&#039;&lt;br /&gt;
  - Compression:&lt;br /&gt;
    - if your image contains an alpha channel, choose &#039;BC3 / DXT5&#039;&lt;br /&gt;
    - if your image does not contain an alpha channel, choose &#039;BC1 / DXT1&#039;&lt;br /&gt;
&lt;br /&gt;
=== Create the Normal Map (TGA File)===&lt;br /&gt;
Apart from creating the normal map, the point of the first few steps is to reduce the amount of &#039;noise&#039; in the image which can lead to a grainy appearance.&lt;br /&gt;
# With the original or cropped image open in GIMP, select Colors -&amp;gt; Desaturate -&amp;gt; Desaturate. Click &#039;OK&#039;&lt;br /&gt;
# Select Filters -&amp;gt; Blur -&amp;gt; Gaussian Blur.  Leave the defaults and click &#039;OK&#039;.&lt;br /&gt;
# Select Colors -&amp;gt; Curves and adjust the curve to &#039;wash out&#039; (i.e. brighten) the image to remove any noise detail.&lt;br /&gt;
# Select Filters -&amp;gt; Generic -&amp;gt; Normal Map..&lt;br /&gt;
# The image will change to a blueish colour and you will be able to see the &#039;bumps&#039;. The only thing I adjust here is the &#039;Scale&#039; property.  If it looks very grainy, just reduce the scale. For things like bricks, I use a value &amp;lt; 5 or else the finished texture will look very grainy in TDM.  For stuff like doors, a value of about 10 looks OK.&lt;br /&gt;
# After adjusting the scale, click &#039;OK&#039;&lt;br /&gt;
# Choose File -&amp;gt; Export as..., change the file name to &#039;texturename_local.tga&#039; and click &#039;Export&#039;&lt;br /&gt;
# On the next pop-up, untick &#039;RLE compression&#039; and leave &#039;Origin&#039; at &#039;Bottom left&#039;. Click &#039;Export&#039;. &#039;&#039;&#039;(ADVICE NEEDED)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Create the editor icon (JPG File) ===&lt;br /&gt;
# Since you&#039;ve modified the image, either close and re-open the image in GIMP, or go back into your Undo History and select the original image (or cropped image if it&#039;s been cropped).&lt;br /&gt;
# Choose Image -&amp;gt; Scale Image... from the menu.&lt;br /&gt;
# On the dialogue, either scale it to 256x256 px (if it was a 1024x1024 image originally), or just scale it down to 25% if it was something else. Click &#039;Scale&#039;. If the image looks too blurry, you can try 512 x 512.&lt;br /&gt;
# Choose File -&amp;gt; Export as..., change the file name to &#039;texturename_ed.jpg&#039; and click &#039;Export&#039;&lt;br /&gt;
# On the next pop-up, untick all the &#039;save data&#039; boxes except for &#039;Save color profile&#039; &#039;&#039;&#039;(ADVICE NEEDED)&#039;&#039;&#039;.  Click &#039;Export&#039;&lt;br /&gt;
&lt;br /&gt;
=== Create TDM materials file ===&lt;br /&gt;
# Within your FM folder, save all your images in the appropriate TDM folder structure.  Just follow the existing conventions.  For example your DDS files go into &#039;dds/textures/darkmod/stone/brick&#039; and your normal map and editor files go into &#039;textures/darkmod/stone/brick&#039;&lt;br /&gt;
# Create the materials file as follows below. Give it a name like &#039;mybricks.mtr&#039; and put it in the /materials folder in your FM. The material name as it appears in DarkRadiant appears at the top.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: &#039;texturename&#039; in this example is &#039;bricks_dirty&#039;&lt;br /&gt;
 textures/darkmod/stone/brick/bricks_dirty&lt;br /&gt;
 {&lt;br /&gt;
     stone&lt;br /&gt;
     description	&amp;quot;vine_friendly&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
     qer_editorimage textures/darkmod/stone/brick/bricks_dirty_ed&lt;br /&gt;
     diffusemap      textures/darkmod/stone/brick/bricks_dirty&lt;br /&gt;
     bumpmap         textures/darkmod/stone/brick/bricks_dirty_local&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Frost Salamander</name></author>
	</entry>
</feed>