<?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=89.83.186.82</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=89.83.186.82"/>
	<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=Special:Contributions/89.83.186.82"/>
	<updated>2026-04-30T14:10:10Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=Precaching_(def_files)&amp;diff=2173</id>
		<title>Precaching (def files)</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=Precaching_(def_files)&amp;diff=2173"/>
		<updated>2007-01-26T22:46:16Z</updated>

		<summary type="html">&lt;p&gt;89.83.186.82: /* What does pre-caching actually do? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Original_Reference|Ishtvan|3798}}&lt;br /&gt;
&lt;br /&gt;
Some people probably knew about this already (at least Gildoran seems to have), but I didn&#039;t know about it and other FM authors might end up making their own def files, so I think we should document it:&lt;br /&gt;
&lt;br /&gt;
== What does pre-caching actually do? ==&lt;br /&gt;
It loads the data to be cached, at loading time of the map. Thus it prevents excessive disk hits at playtime, which can cause sutterting in the map while playing.&lt;br /&gt;
&lt;br /&gt;
In order to precache things in your def file, you must use specific prefixes. For example, if your def file contains another entity to spawn, use &amp;quot;def_&amp;lt;description of entity&amp;gt;&amp;quot; for the key name, and that other entity will also be precached. Models must have &amp;quot;model_&amp;lt;description&amp;gt;&amp;quot;, sounds must have &amp;quot;snd_&amp;lt;description&amp;gt;&amp;quot;, guis must have &amp;quot;gui_*&amp;quot; materials &amp;quot;mtr_*&amp;quot;, etc.&lt;br /&gt;
&lt;br /&gt;
I copied the code that precaches things so you can see all the prefixes. Every time you see MatchPrefix( &amp;quot;&amp;lt;something&amp;gt;&amp;quot; ), it means the key for tha thing must begin with &amp;lt;something&amp;gt; in order for it to cache.&lt;br /&gt;
&lt;br /&gt;
== The Code ==&lt;br /&gt;
 /*&lt;br /&gt;
 =================== &lt;br /&gt;
 idGameLocal::CacheDictionaryMedia&lt;br /&gt;
 &lt;br /&gt;
 This is called after parsing an EntityDef and for each entity spawnArgs before&lt;br /&gt;
 merging the entitydef.  It could be done post-merge, but that would&lt;br /&gt;
 avoid the fast pre-cache check associated with each entityDef&lt;br /&gt;
 ===================&lt;br /&gt;
 */&lt;br /&gt;
 void idGameLocal::CacheDictionaryMedia( const idDict *dict ) {&lt;br /&gt;
    const idKeyValue *kv;&lt;br /&gt;
 &lt;br /&gt;
    if ( dict == NULL ) {&lt;br /&gt;
        if ( cvarSystem-&amp;gt;GetCVarBool( &amp;quot;com_makingBuild&amp;quot;) ) {&lt;br /&gt;
            DumpOggSounds();&lt;br /&gt;
        }&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    if ( cvarSystem-&amp;gt;GetCVarBool( &amp;quot;com_makingBuild&amp;quot; ) ) {&lt;br /&gt;
        GetShakeSounds( dict );&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    kv = dict-&amp;gt;MatchPrefix( &amp;quot;model&amp;quot; );&lt;br /&gt;
    while( kv ) {&lt;br /&gt;
        if ( kv-&amp;gt;GetValue().Length() ) {&lt;br /&gt;
            declManager-&amp;gt;MediaPrint( &amp;quot;Precaching model %s\n&amp;quot;, kv-&amp;gt;GetValue().c_str() );&lt;br /&gt;
            // precache model/animations&lt;br /&gt;
            if ( declManager-&amp;gt;FindType( DECL_MODELDEF, kv-&amp;gt;GetValue(), false ) == NULL ) {&lt;br /&gt;
                // precache the render model&lt;br /&gt;
                renderModelManager-&amp;gt;FindModel( kv-&amp;gt;GetValue() );&lt;br /&gt;
                // precache .cm files only&lt;br /&gt;
                collisionModelManager-&amp;gt;LoadModel( kv-&amp;gt;GetValue(), true );&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        kv = dict-&amp;gt;MatchPrefix( &amp;quot;model&amp;quot;, kv );&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    kv = dict-&amp;gt;FindKey( &amp;quot;s_shader&amp;quot; );&lt;br /&gt;
    if ( kv &amp;amp;&amp;amp; kv-&amp;gt;GetValue().Length() ) {&lt;br /&gt;
        declManager-&amp;gt;FindType( DECL_SOUND, kv-&amp;gt;GetValue() );&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    kv = dict-&amp;gt;MatchPrefix( &amp;quot;snd&amp;quot;, NULL );&lt;br /&gt;
    while( kv ) {&lt;br /&gt;
        if ( kv-&amp;gt;GetValue().Length() ) {&lt;br /&gt;
            declManager-&amp;gt;FindType( DECL_SOUND, kv-&amp;gt;GetValue() );&lt;br /&gt;
        }&lt;br /&gt;
        kv = dict-&amp;gt;MatchPrefix( &amp;quot;snd&amp;quot;, kv );&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
    kv = dict-&amp;gt;MatchPrefix( &amp;quot;gui&amp;quot;, NULL );&lt;br /&gt;
    while( kv ) {&lt;br /&gt;
        if ( kv-&amp;gt;GetValue().Length() ) {&lt;br /&gt;
            if ( !idStr::Icmp( kv-&amp;gt;GetKey(), &amp;quot;gui_noninteractive&amp;quot; )&lt;br /&gt;
                || !idStr::Icmpn( kv-&amp;gt;GetKey(), &amp;quot;gui_parm&amp;quot;, 8 )    &lt;br /&gt;
                || !idStr::Icmp( kv-&amp;gt;GetKey(), &amp;quot;gui_inventory&amp;quot; ) ) {&lt;br /&gt;
                // unfortunate flag names, they aren&#039;t actually a gui&lt;br /&gt;
            } else {&lt;br /&gt;
                declManager-&amp;gt;MediaPrint( &amp;quot;Precaching gui %s\n&amp;quot;, kv-&amp;gt;GetValue().c_str() );&lt;br /&gt;
                idUserInterface *gui = uiManager-&amp;gt;Alloc();&lt;br /&gt;
                if ( gui ) {&lt;br /&gt;
                    gui-&amp;gt;InitFromFile( kv-&amp;gt;GetValue() );&lt;br /&gt;
                    uiManager-&amp;gt;DeAlloc( gui );&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        kv = dict-&amp;gt;MatchPrefix( &amp;quot;gui&amp;quot;, kv );&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    kv = dict-&amp;gt;FindKey( &amp;quot;texture&amp;quot; );&lt;br /&gt;
    if ( kv &amp;amp;&amp;amp; kv-&amp;gt;GetValue().Length() ) {&lt;br /&gt;
        declManager-&amp;gt;FindType( DECL_MATERIAL, kv-&amp;gt;GetValue() );&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    kv = dict-&amp;gt;MatchPrefix( &amp;quot;mtr&amp;quot;, NULL );&lt;br /&gt;
    while( kv ) {&lt;br /&gt;
        if ( kv-&amp;gt;GetValue().Length() ) {&lt;br /&gt;
            declManager-&amp;gt;FindType( DECL_MATERIAL, kv-&amp;gt;GetValue() );&lt;br /&gt;
        }&lt;br /&gt;
        kv = dict-&amp;gt;MatchPrefix( &amp;quot;mtr&amp;quot;, kv );&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    // handles hud icons&lt;br /&gt;
    kv = dict-&amp;gt;MatchPrefix( &amp;quot;inv_icon&amp;quot;, NULL );&lt;br /&gt;
    while ( kv ) {&lt;br /&gt;
        if ( kv-&amp;gt;GetValue().Length() ) {&lt;br /&gt;
            declManager-&amp;gt;FindType( DECL_MATERIAL, kv-&amp;gt;GetValue() );&lt;br /&gt;
        }&lt;br /&gt;
        kv = dict-&amp;gt;MatchPrefix( &amp;quot;inv_icon&amp;quot;, kv );&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    // handles teleport fx.. this is not ideal but the actual decision on which fx to use&lt;br /&gt;
    // is handled by script code based on the teleport number&lt;br /&gt;
    kv = dict-&amp;gt;MatchPrefix( &amp;quot;teleport&amp;quot;, NULL );&lt;br /&gt;
    if ( kv &amp;amp;&amp;amp; kv-&amp;gt;GetValue().Length() ) {&lt;br /&gt;
        int teleportType = atoi( kv-&amp;gt;GetValue() );&lt;br /&gt;
        const char *p = ( teleportType ) ? va( &amp;quot;fx/teleporter%i.fx&amp;quot;, teleportType ) : &amp;quot;fx/teleporter.fx&amp;quot;;&lt;br /&gt;
        declManager-&amp;gt;FindType( DECL_FX, p );&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    kv = dict-&amp;gt;MatchPrefix( &amp;quot;fx&amp;quot;, NULL );&lt;br /&gt;
    while( kv ) {&lt;br /&gt;
        if ( kv-&amp;gt;GetValue().Length() ) {&lt;br /&gt;
            declManager-&amp;gt;MediaPrint( &amp;quot;Precaching fx %s\n&amp;quot;, kv-&amp;gt;GetValue().c_str() );&lt;br /&gt;
            declManager-&amp;gt;FindType( DECL_FX, kv-&amp;gt;GetValue() );&lt;br /&gt;
        }&lt;br /&gt;
        kv = dict-&amp;gt;MatchPrefix( &amp;quot;fx&amp;quot;, kv );&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    kv = dict-&amp;gt;MatchPrefix( &amp;quot;smoke&amp;quot;, NULL );&lt;br /&gt;
    while( kv ) {&lt;br /&gt;
        if ( kv-&amp;gt;GetValue().Length() ) {&lt;br /&gt;
            idStr prtName = kv-&amp;gt;GetValue();&lt;br /&gt;
            int dash = prtName.Find(&#039;-&#039;);&lt;br /&gt;
            if ( dash &amp;gt; 0 ) {&lt;br /&gt;
                prtName = prtName.Left( dash );&lt;br /&gt;
            }&lt;br /&gt;
            declManager-&amp;gt;FindType( DECL_PARTICLE, prtName );&lt;br /&gt;
        }&lt;br /&gt;
        kv = dict-&amp;gt;MatchPrefix( &amp;quot;smoke&amp;quot;, kv );&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    kv = dict-&amp;gt;MatchPrefix( &amp;quot;skin&amp;quot;, NULL );&lt;br /&gt;
    while( kv ) {&lt;br /&gt;
        if ( kv-&amp;gt;GetValue().Length() ) {&lt;br /&gt;
            declManager-&amp;gt;MediaPrint( &amp;quot;Precaching skin %s\n&amp;quot;, kv-&amp;gt;GetValue().c_str() );&lt;br /&gt;
            declManager-&amp;gt;FindType( DECL_SKIN, kv-&amp;gt;GetValue() );&lt;br /&gt;
        }&lt;br /&gt;
        kv = dict-&amp;gt;MatchPrefix( &amp;quot;skin&amp;quot;, kv );&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    kv = dict-&amp;gt;MatchPrefix( &amp;quot;def&amp;quot;, NULL );&lt;br /&gt;
    while( kv ) {&lt;br /&gt;
        if ( kv-&amp;gt;GetValue().Length() ) {&lt;br /&gt;
            FindEntityDef( kv-&amp;gt;GetValue().c_str(), false );&lt;br /&gt;
        }&lt;br /&gt;
        kv = dict-&amp;gt;MatchPrefix( &amp;quot;def&amp;quot;, kv );&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    kv = dict-&amp;gt;MatchPrefix( &amp;quot;pda_name&amp;quot;, NULL );&lt;br /&gt;
    while( kv ) {&lt;br /&gt;
        if ( kv-&amp;gt;GetValue().Length() ) {&lt;br /&gt;
            declManager-&amp;gt;FindType( DECL_PDA, kv-&amp;gt;GetValue().c_str(), false );&lt;br /&gt;
        }&lt;br /&gt;
        kv = dict-&amp;gt;MatchPrefix( &amp;quot;pda_name&amp;quot;, kv );&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    kv = dict-&amp;gt;MatchPrefix( &amp;quot;video&amp;quot;, NULL );&lt;br /&gt;
    while( kv ) {&lt;br /&gt;
        if ( kv-&amp;gt;GetValue().Length() ) {&lt;br /&gt;
            declManager-&amp;gt;FindType( DECL_VIDEO, kv-&amp;gt;GetValue().c_str(), false );&lt;br /&gt;
        }&lt;br /&gt;
        kv = dict-&amp;gt;MatchPrefix( &amp;quot;video&amp;quot;, kv );&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    kv = dict-&amp;gt;MatchPrefix( &amp;quot;audio&amp;quot;, NULL );&lt;br /&gt;
    while( kv ) {&lt;br /&gt;
        if ( kv-&amp;gt;GetValue().Length() ) {&lt;br /&gt;
            declManager-&amp;gt;FindType( DECL_AUDIO, kv-&amp;gt;GetValue().c_str(), false );&lt;br /&gt;
        }&lt;br /&gt;
        kv = dict-&amp;gt;MatchPrefix( &amp;quot;audio&amp;quot;, kv );&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    kv = dict-&amp;gt;MatchPrefix( &amp;quot;xdata&amp;quot;, NULL );&lt;br /&gt;
    while( kv ) {&lt;br /&gt;
        if ( kv-&amp;gt;GetValue().Length() ) {&lt;br /&gt;
            declManager-&amp;gt;FindType( DECL_XDATA, kv-&amp;gt;GetValue().c_str(), false );&lt;br /&gt;
        }&lt;br /&gt;
        kv = dict-&amp;gt;MatchPrefix( &amp;quot;xdata&amp;quot;, kv );&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting]]&lt;/div&gt;</summary>
		<author><name>89.83.186.82</name></author>
	</entry>
</feed>