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
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);
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();
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)
{
// 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)
// 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();
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);
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
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"))
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);
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;
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;