]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - cl_parse.c
fix error message about wrong light grid dimensions
[xonotic/darkplaces.git] / cl_parse.c
index f7d1b4b260a611d609929a323253506dbdf83502..fe0c1c580285a84e198eef2dce5d789a2a5615c4 100644 (file)
@@ -576,7 +576,9 @@ static void QW_CL_RequestNextDownload(void)
                cl.model_bolt2 = Mod_ForName("progs/bolt2.mdl", false, false, NULL);
                cl.model_bolt3 = Mod_ForName("progs/bolt3.mdl", false, false, NULL);
                cl.model_beam = Mod_ForName("progs/beam.mdl", false, false, NULL);
-               Mod_PurgeUnused();
+
+               // we purge the models and sounds later in CL_SignonReply
+               //Mod_PurgeUnused();
 
                // now we try to load everything that is new
 
@@ -630,9 +632,8 @@ static void QW_CL_RequestNextDownload(void)
 
                cls.qw_downloadtype = dl_none;
 
-               // load new sounds and unload old ones
-               // FIXME: S_ServerSounds does not know about cl.sfx_ sounds
-               S_ServerSounds(cl.sound_name, cls.qw_downloadnumber);
+               // clear sound usage flags for purging of unused sounds
+               S_ClearUsed();
 
                // precache any sounds used by the client
                cl.sfx_wizhit = S_PrecacheSound(cl_sound_wizardhit.string, false, true);
@@ -643,12 +644,12 @@ static void QW_CL_RequestNextDownload(void)
                cl.sfx_ric3 = S_PrecacheSound(cl_sound_ric3.string, false, true);
                cl.sfx_r_exp3 = S_PrecacheSound(cl_sound_r_exp3.string, false, true);
 
-               // sounds
+               // sounds used by the game
                for (i = 1;i < MAX_SOUNDS && cl.sound_name[i][0];i++)
-               {
-                       // Don't lock the sfx here, S_ServerSounds already did that
-                       cl.sound_precache[i] = S_PrecacheSound(cl.sound_name[i], true, false);
-               }
+                       cl.sound_precache[i] = S_PrecacheSound(cl.sound_name[i], true, true);
+
+               // we purge the models and sounds later in CL_SignonReply
+               //S_PurgeUnused();
 
                // check memory integrity
                Mem_CheckSentinelsGlobal();
@@ -987,10 +988,10 @@ static void CL_UpdateItemsAndWeapon(void)
        cl.activeweapon = cl.stats[STAT_ACTIVEWEAPON];
 }
 
-#define DOWNLOADPROGRESSWEIGHT_SOUND            1.0
-#define DOWNLOADPROGRESSWEIGHT_MODEL            4.0
-#define DOWNLOADPROGRESSWEIGHT_WORLDMODEL      30.0
-#define DOWNLOADPROGRESSWEIGHT_WORLDMODEL_INIT 32.0
+#define LOADPROGRESSWEIGHT_SOUND            1.0
+#define LOADPROGRESSWEIGHT_MODEL            4.0
+#define LOADPROGRESSWEIGHT_WORLDMODEL      30.0
+#define LOADPROGRESSWEIGHT_WORLDMODEL_INIT  2.0
 
 void CL_BeginDownloads(qboolean aborteddownload)
 {
@@ -1045,27 +1046,27 @@ void CL_BeginDownloads(qboolean aborteddownload)
                        // worldmodel counts as 16 models (15 + world model setup), for better progress bar
                        SCR_PushLoadingScreen(false, "Loading precached models",
                                (
-                                       (cl.loadmodel_total - 1) * DOWNLOADPROGRESSWEIGHT_MODEL
-                               +       DOWNLOADPROGRESSWEIGHT_WORLDMODEL
-                               +       DOWNLOADPROGRESSWEIGHT_WORLDMODEL_INIT
+                                       (cl.loadmodel_total - 1) * LOADPROGRESSWEIGHT_MODEL
+                               +       LOADPROGRESSWEIGHT_WORLDMODEL
+                               +       LOADPROGRESSWEIGHT_WORLDMODEL_INIT
                                ) / (
-                                       (cl.loadmodel_total - 1) * DOWNLOADPROGRESSWEIGHT_MODEL
-                               +       DOWNLOADPROGRESSWEIGHT_WORLDMODEL
-                               +       DOWNLOADPROGRESSWEIGHT_WORLDMODEL_INIT
-                               +       cl.loadsound_total * DOWNLOADPROGRESSWEIGHT_SOUND
+                                       (cl.loadmodel_total - 1) * LOADPROGRESSWEIGHT_MODEL
+                               +       LOADPROGRESSWEIGHT_WORLDMODEL
+                               +       LOADPROGRESSWEIGHT_WORLDMODEL_INIT
+                               +       cl.loadsound_total * LOADPROGRESSWEIGHT_SOUND
                                )
                        );
                        SCR_BeginLoadingPlaque();
                }
                for (;cl.loadmodel_current < cl.loadmodel_total;cl.loadmodel_current++)
                {
-                       SCR_PushLoadingScreen(true, cl.model_name[cl.loadmodel_current],
+                       SCR_PushLoadingScreen(false, cl.model_name[cl.loadmodel_current],
                                (
-                                       (cl.loadmodel_current == 1) ? DOWNLOADPROGRESSWEIGHT_WORLDMODEL : DOWNLOADPROGRESSWEIGHT_MODEL
+                                       (cl.loadmodel_current == 1) ? LOADPROGRESSWEIGHT_WORLDMODEL : LOADPROGRESSWEIGHT_MODEL
                                ) / (
-                                       (cl.loadmodel_total - 1) * DOWNLOADPROGRESSWEIGHT_MODEL
-                               +       DOWNLOADPROGRESSWEIGHT_WORLDMODEL
-                               +       DOWNLOADPROGRESSWEIGHT_WORLDMODEL_INIT
+                                       (cl.loadmodel_total - 1) * LOADPROGRESSWEIGHT_MODEL
+                               +       LOADPROGRESSWEIGHT_WORLDMODEL
+                               +       LOADPROGRESSWEIGHT_WORLDMODEL_INIT
                                )
                        );
                        if (cl.model_precache[cl.loadmodel_current] && cl.model_precache[cl.loadmodel_current]->Draw)
@@ -1093,11 +1094,11 @@ void CL_BeginDownloads(qboolean aborteddownload)
                                // we now have the worldmodel so we can set up the game world
                                SCR_PushLoadingScreen(true, "world model setup",
                                        (
-                                               DOWNLOADPROGRESSWEIGHT_WORLDMODEL_INIT
+                                               LOADPROGRESSWEIGHT_WORLDMODEL_INIT
                                        ) / (
-                                               (cl.loadmodel_total - 1) * DOWNLOADPROGRESSWEIGHT_MODEL
-                                       +       DOWNLOADPROGRESSWEIGHT_WORLDMODEL
-                                       +       DOWNLOADPROGRESSWEIGHT_WORLDMODEL_INIT
+                                               (cl.loadmodel_total - 1) * LOADPROGRESSWEIGHT_MODEL
+                                       +       LOADPROGRESSWEIGHT_WORLDMODEL
+                                       +       LOADPROGRESSWEIGHT_WORLDMODEL_INIT
                                        )
                                );
                                CL_SetupWorldModel();
@@ -1121,25 +1122,24 @@ void CL_BeginDownloads(qboolean aborteddownload)
                if(cl.loadsound_current == 1)
                        SCR_PushLoadingScreen(false, "Loading precached sounds",
                                (
-                                       cl.loadsound_total * DOWNLOADPROGRESSWEIGHT_SOUND
+                                       cl.loadsound_total * LOADPROGRESSWEIGHT_SOUND
                                ) / (
-                                       (cl.loadmodel_total - 1) * DOWNLOADPROGRESSWEIGHT_MODEL
-                               +       DOWNLOADPROGRESSWEIGHT_WORLDMODEL
-                               +       DOWNLOADPROGRESSWEIGHT_WORLDMODEL_INIT
-                               +       cl.loadsound_total * DOWNLOADPROGRESSWEIGHT_SOUND
+                                       (cl.loadmodel_total - 1) * LOADPROGRESSWEIGHT_MODEL
+                               +       LOADPROGRESSWEIGHT_WORLDMODEL
+                               +       LOADPROGRESSWEIGHT_WORLDMODEL_INIT
+                               +       cl.loadsound_total * LOADPROGRESSWEIGHT_SOUND
                                )
                        );
                for (;cl.loadsound_current < cl.loadsound_total;cl.loadsound_current++)
                {
-                       SCR_PushLoadingScreen(true, cl.sound_name[cl.loadsound_current], 1.0 / cl.loadsound_total);
+                       SCR_PushLoadingScreen(false, cl.sound_name[cl.loadsound_current], 1.0 / cl.loadsound_total);
                        if (cl.sound_precache[cl.loadsound_current] && S_IsSoundPrecached(cl.sound_precache[cl.loadsound_current]))
                        {
                                SCR_PopLoadingScreen(false);
                                continue;
                        }
                        CL_KeepaliveMessage(true);
-                       // Don't lock the sfx here, S_ServerSounds already did that
-                       cl.sound_precache[cl.loadsound_current] = S_PrecacheSound(cl.sound_name[cl.loadsound_current], false, false);
+                       cl.sound_precache[cl.loadsound_current] = S_PrecacheSound(cl.sound_name[cl.loadsound_current], false, true);
                        SCR_PopLoadingScreen(false);
                }
                SCR_PopLoadingScreen(false);
@@ -1254,8 +1254,7 @@ void CL_BeginDownloads(qboolean aborteddownload)
                                        return;
                                }
                        }
-                       // Don't lock the sfx here, S_ServerSounds already did that
-                       cl.sound_precache[cl.downloadsound_current] = S_PrecacheSound(cl.sound_name[cl.downloadsound_current], false, false);
+                       cl.sound_precache[cl.downloadsound_current] = S_PrecacheSound(cl.sound_name[cl.downloadsound_current], false, true);
                }
 
                // finished loading sounds
@@ -1541,7 +1540,10 @@ static void CL_SignonReply (void)
        case 4:
                // after the level has been loaded, we shouldn't need the shaders, and
                // if they are needed again they will be automatically loaded...
+               // we also don't need the unused models or sounds from the last level
                Mod_FreeQ3Shaders();
+               Mod_PurgeUnused();
+               S_PurgeUnused();
 
                Con_ClearNotify();
                if (COM_CheckParm("-profilegameonly"))
@@ -1737,11 +1739,13 @@ void CL_ParseServerInfo (void)
                cl.model_bolt2 = Mod_ForName("progs/bolt2.mdl", false, false, NULL);
                cl.model_bolt3 = Mod_ForName("progs/bolt3.mdl", false, false, NULL);
                cl.model_beam = Mod_ForName("progs/beam.mdl", false, false, NULL);
-               Mod_PurgeUnused();
 
-               // do the same for sounds
-               // FIXME: S_ServerSounds does not know about cl.sfx_ sounds
-               S_ServerSounds (cl.sound_name, numsounds);
+               // we purge the models and sounds later in CL_SignonReply
+               //Mod_PurgeUnused();
+               //S_PurgeUnused();
+
+               // clear sound usage flags for purging of unused sounds
+               S_ClearUsed();
 
                // precache any sounds used by the client
                cl.sfx_wizhit = S_PrecacheSound(cl_sound_wizardhit.string, false, true);
@@ -1752,6 +1756,10 @@ void CL_ParseServerInfo (void)
                cl.sfx_ric3 = S_PrecacheSound(cl_sound_ric3.string, false, true);
                cl.sfx_r_exp3 = S_PrecacheSound(cl_sound_r_exp3.string, false, true);
 
+               // sounds used by the game
+               for (i = 1;i < MAX_SOUNDS && cl.sound_name[i][0];i++)
+                       cl.sound_precache[i] = S_PrecacheSound(cl.sound_name[i], true, true);
+
                // now we try to load everything that is new
                cl.loadmodel_current = 1;
                cl.downloadmodel_current = 1;
@@ -3772,7 +3780,7 @@ void CL_ParseServerMessage(void)
                                                i -= 32768;
                                                if (i >= 1 && i < MAX_SOUNDS)
                                                {
-                                                       sfx_t *sfx = S_PrecacheSound (s, true, false);
+                                                       sfx_t *sfx = S_PrecacheSound (s, true, true);
                                                        if (!sfx && snd_initialized.integer)
                                                                Con_DPrintf("svc_precache: S_PrecacheSound(\"%s\") failed\n", s);
                                                        cl.sound_precache[i] = sfx;