Don't lie about the number of models.

The renderer being told there were 2048 models when there were only ~160
was a bit of an unpleasant surprise :P
This commit is contained in:
Bill Currie 2012-01-09 16:22:39 +09:00
parent 12fd6bd390
commit ffa79eed01
5 changed files with 43 additions and 39 deletions

View file

@ -219,6 +219,8 @@ typedef struct
struct model_s *model_precache[MAX_MODELS];
struct sfx_s *sound_precache[MAX_SOUNDS];
int nummodels;
int numsounds;
struct plitem_s *edicts;
struct plitem_s *worldspawn;

View file

@ -315,7 +315,7 @@ map_ent (const char *mapname)
static void
CL_NewMap (const char *mapname)
{
R_NewMap (cl.worldmodel, cl.model_precache, MAX_MODELS);
R_NewMap (cl.worldmodel, cl.model_precache, cl.nummodels);
Con_NewMap ();
Hunk_Check (); // make sure nothing is hurt
Sbar_CenterPrint (0);
@ -338,7 +338,7 @@ CL_ParseServerInfo (void)
char model_precache[MAX_MODELS][MAX_QPATH];
char sound_precache[MAX_SOUNDS][MAX_QPATH];
const char *str;
int nummodels, numsounds, i;
int i;
Sys_MaskPrintf (SYS_DEV, "Serverinfo packet received.\n");
@ -387,36 +387,36 @@ CL_ParseServerInfo (void)
// precache models
memset (cl.model_precache, 0, sizeof (cl.model_precache));
for (nummodels = 1;; nummodels++) {
for (cl.nummodels = 1;; cl.nummodels++) {
str = MSG_ReadString (net_message);
if (!str[0])
break;
if (nummodels == MAX_MODELS) {
if (cl.nummodels >= MAX_MODELS) {
Sys_Printf ("Server sent too many model precaches\n");
goto done;
}
strcpy (model_precache[nummodels], str);
strcpy (model_precache[cl.nummodels], str);
Mod_TouchModel (str);
}
// precache sounds
memset (cl.sound_precache, 0, sizeof (cl.sound_precache));
for (numsounds = 1;; numsounds++) {
for (cl.numsounds = 1;; cl.numsounds++) {
str = MSG_ReadString (net_message);
if (!str[0])
break;
if (numsounds == MAX_SOUNDS) {
if (cl.numsounds >= MAX_SOUNDS) {
Sys_Printf ("Server sent too many sound precaches\n");
goto done;
}
strcpy (sound_precache[numsounds], str);
strcpy (sound_precache[cl.numsounds], str);
}
// now we try to load everything else until a cache allocation fails
if (model_precache[1])
map_cfg (model_precache[1], 0);
for (i = 1; i < nummodels; i++) {
for (i = 1; i < cl.nummodels; i++) {
cl.model_precache[i] = Mod_ForName (model_precache[i], false);
if (cl.model_precache[i] == NULL) {
Sys_Printf ("Model %s not found\n", model_precache[i]);
@ -425,7 +425,7 @@ CL_ParseServerInfo (void)
CL_KeepaliveMessage ();
}
for (i = 1; i < numsounds; i++) {
for (i = 1; i < cl.numsounds; i++) {
cl.sound_precache[i] = S_PrecacheSound (sound_precache[i]);
CL_KeepaliveMessage ();
}

View file

@ -276,6 +276,8 @@ typedef struct
struct model_s *model_precache[MAX_MODELS];
struct sfx_s *sound_precache[MAX_SOUNDS];
int nummodels;
int numsounds;
struct plitem_s *edicts;
struct plitem_s *worldspawn;

View file

@ -755,10 +755,10 @@ CL_Record (const char *argv1, int track)
for (ent = cl_static_entities; ent; ent = ent->unext) {
MSG_WriteByte (&buf, svc_spawnstatic);
for (j = 1; j < MAX_MODELS; j++)
for (j = 1; j < cl.nummodels; j++)
if (ent->model == cl.model_precache[j])
break;
if (j == MAX_MODELS)
if (j == cl.nummodels)
MSG_WriteByte (&buf, 0);
else
MSG_WriteByte (&buf, j);

View file

@ -302,7 +302,7 @@ CL_NewMap (const char *mapname)
{
cl_static_entities = 0;
cl_static_tail = &cl_static_entities;
R_NewMap (cl.worldmodel, cl.model_precache, MAX_MODELS);
R_NewMap (cl.worldmodel, cl.model_precache, cl.nummodels);
Team_NewMap ();
Con_NewMap ();
Hunk_Check (); // make sure nothing is hurt
@ -344,7 +344,7 @@ Model_NextDownload (void)
if (cl.model_name[1])
map_cfg (cl.model_name[1], 0);
for (i = 1; i < MAX_MODELS; i++) {
for (i = 1; i < cl.nummodels; i++) {
char *info_key = 0;
if (!cl.model_name[i][0])
@ -426,7 +426,7 @@ Sound_NextDownload (void)
return; // started a download
}
for (i = 1; i < MAX_SOUNDS; i++) {
for (i = 1; i < cl.numsounds; i++) {
if (!cl.sound_name[i][0])
break;
cl.sound_precache[i] = S_PrecacheSound (cl.sound_name[i]);
@ -855,21 +855,21 @@ static void
CL_ParseSoundlist (void)
{
const char *str;
int numsounds, n;
int n;
// precache sounds
// memset (cl.sound_precache, 0, sizeof (cl.sound_precache));
numsounds = MSG_ReadByte (net_message);
cl.numsounds = MSG_ReadByte (net_message);
for (;;) {
str = MSG_ReadString (net_message);
if (!str[0])
break;
numsounds++;
if (numsounds == MAX_SOUNDS)
cl.numsounds++;
if (cl.numsounds >= MAX_SOUNDS)
Host_Error ("Server sent too many sound_precache");
strcpy (cl.sound_name[numsounds], str);
strcpy (cl.sound_name[cl.numsounds], str);
}
n = MSG_ReadByte (net_message);
@ -889,36 +889,36 @@ CL_ParseSoundlist (void)
static void
CL_ParseModellist (void)
{
int nummodels, n;
int n;
const char *str;
// precache models and note certain default indexes
nummodels = MSG_ReadByte (net_message);
cl.nummodels = MSG_ReadByte (net_message);
for (;;) {
str = MSG_ReadString (net_message);
if (!str[0])
break;
nummodels++;
if (nummodels == MAX_MODELS)
cl.nummodels++;
if (cl.nummodels >= MAX_MODELS)
Host_Error ("Server sent too many model_precache");
strcpy (cl.model_name[nummodels], str);
strcpy (cl.model_name[cl.nummodels], str);
if (!strcmp (cl.model_name[nummodels], "progs/spike.mdl"))
cl_spikeindex = nummodels;
else if (!strcmp (cl.model_name[nummodels], "progs/player.mdl"))
cl_playerindex = nummodels;
else if (!strcmp (cl.model_name[nummodels], "progs/flag.mdl"))
cl_flagindex = nummodels;
if (!strcmp (cl.model_name[cl.nummodels], "progs/spike.mdl"))
cl_spikeindex = cl.nummodels;
else if (!strcmp (cl.model_name[cl.nummodels], "progs/player.mdl"))
cl_playerindex = cl.nummodels;
else if (!strcmp (cl.model_name[cl.nummodels], "progs/flag.mdl"))
cl_flagindex = cl.nummodels;
// for deadbodyfilter & gib filter
else if (!strcmp (cl.model_name[nummodels], "progs/h_player.mdl"))
cl_h_playerindex = nummodels;
else if (!strcmp (cl.model_name[nummodels], "progs/gib1.mdl"))
cl_gib1index = nummodels;
else if (!strcmp (cl.model_name[nummodels], "progs/gib2.mdl"))
cl_gib2index = nummodels;
else if (!strcmp (cl.model_name[nummodels], "progs/gib3.mdl"))
cl_gib3index = nummodels;
else if (!strcmp (cl.model_name[cl.nummodels], "progs/h_player.mdl"))
cl_h_playerindex = cl.nummodels;
else if (!strcmp (cl.model_name[cl.nummodels], "progs/gib1.mdl"))
cl_gib1index = cl.nummodels;
else if (!strcmp (cl.model_name[cl.nummodels], "progs/gib2.mdl"))
cl_gib2index = cl.nummodels;
else if (!strcmp (cl.model_name[cl.nummodels], "progs/gib3.mdl"))
cl_gib3index = cl.nummodels;
}
n = MSG_ReadByte (net_message);