model_t *mod;
for (i = 0, mod = mod_known;i < mod_numknown;i++, mod++)
- if (mod->name[0])
+ if (mod->name[0] && mod->name[0] != '*')
if (mod->used)
Mod_LoadModel(mod, true, false, mod->isworldmodel);
}
model_t *mod;
for (i = 0, mod = mod_known;i < mod_numknown;i++, mod++)
- if (mod->loaded)
+ if (mod->loaded || mod->mempool)
Mod_UnloadModel(mod);
}
char name[MAX_QPATH];
qboolean isworldmodel;
qboolean used;
- strcpy(name, mod->name);
+ strlcpy(name, mod->name, sizeof(name));
isworldmodel = mod->isworldmodel;
used = mod->used;
// free textures/memory attached to the model
// clear the struct to make it available
memset(mod, 0, sizeof(model_t));
// restore the fields we want to preserve
- strcpy(mod->name, name);
+ strlcpy(mod->name, name, sizeof(mod->name));
mod->isworldmodel = isworldmodel;
mod->used = used;
mod->loaded = false;
Con_DPrintf("loading model %s\n", mod->name);
// LordHavoc: unload the existing model in this slot (if there is one)
- if (mod->loaded)
+ if (mod->loaded || mod->mempool)
Mod_UnloadModel(mod);
// load the model
VectorSet(mod->rotatedmins, -mod->radius, -mod->radius, -mod->radius);
VectorSet(mod->rotatedmaxs, mod->radius, mod->radius, mod->radius);
- // all models use memory, so allocate a memory pool
- mod->mempool = Mem_AllocPool(mod->name, 0, NULL);
- // all models load textures, so allocate a texture pool
- if (cls.state != ca_dedicated)
- mod->texturepool = R_AllocTexturePool();
-
if (buf)
{
char *bufend = (char *)buf + filesize;
+
+ // all models use memory, so allocate a memory pool
+ mod->mempool = Mem_AllocPool(mod->name, 0, NULL);
+ // all models load textures, so allocate a texture pool
+ if (cls.state != ca_dedicated)
+ mod->texturepool = R_AllocTexturePool();
+
num = LittleLong(*((int *)buf));
// call the apropriate loader
loadmodel = mod;
else if (num == BSPVERSION || num == 30) Mod_Q1BSP_Load(mod, buf, bufend);
else Con_Printf("Mod_LoadModel: model \"%s\" is of unknown/unsupported type\n", mod->name);
Mem_Free(buf);
+ // no fatal errors occurred, so this model is ready to use.
+ mod->loaded = true;
}
else if (crash)
{
// LordHavoc: Sys_Error was *ANNOYING*
Con_Printf ("Mod_LoadModel: %s not found\n", mod->name);
}
-
- // no errors occurred
- mod->loaded = true;
return mod;
}
if (mod_numknown == i)
mod_numknown++;
mod = mod_known + i;
- strcpy (mod->name, name);
+ strlcpy (mod->name, name, sizeof(mod->name));
mod->loaded = false;
mod->used = true;
return mod;
return model;
}
+/*
+==================
+Mod_Reload
+
+Reloads all models if they have changed
+==================
+*/
+void Mod_Reload()
+{
+ int i;
+ model_t *mod;
+
+ for (i = 0, mod = mod_known;i < mod_numknown;i++, mod++)
+ if (mod->name[0] && mod->name[0] != '*')
+ if (mod->used)
+ Mod_LoadModel(mod, true, true, mod->isworldmodel);
+}
+
unsigned char *mod_base;