model_t *loadmodel;
char loadname[32]; // for hunk tags
-extern void Mod_LoadSpriteModel (model_t *mod, void *buffer);
-extern void Mod_LoadBrushModel (model_t *mod, void *buffer);
-extern void Mod_LoadAliasModel (model_t *mod, void *buffer);
-extern void Mod_LoadQ2AliasModel (model_t *mod, void *buffer);
-extern void Mod_LoadZymoticModel (model_t *mod, void *buffer);
-model_t *Mod_LoadModel (model_t *mod, qboolean crash);
-
-#define MAX_MOD_KNOWN 512
+// LordHavoc: increased from 512 to 2048
+#define MAX_MOD_KNOWN 2048
model_t mod_known[MAX_MOD_KNOWN];
int mod_numknown;
-extern void Mod_BrushInit();
-extern void Mod_AliasInit();
-extern void Mod_SpriteInit();
-
/*
===============
Mod_Init
void *Mod_Extradata (model_t *mod)
{
void *r;
-
+
r = Cache_Check (&mod->cache);
if (r)
return r;
Mod_LoadModel (mod, true);
-
+
if (!mod->cache.data)
Host_Error ("Mod_Extradata: caching failed");
return mod->cache.data;
{
int i;
model_t *mod;
-
+
for (i=0 , mod=mod_known ; i<mod_numknown ; i++, mod++)
- if (mod->type != mod_alias)
+ if (!mod->cachesize)
mod->needload = true;
}
{
int i;
model_t *mod;
-
+
if (!name[0])
Host_Error ("Mod_ForName: NULL name");
-
+
//
// search the currently loaded models
//
for (i=0 , mod=mod_known ; i<mod_numknown ; i++, mod++)
if (!strcmp (mod->name, name) )
break;
-
+
if (i == mod_numknown)
{
if (mod_numknown == MAX_MOD_KNOWN)
void Mod_TouchModel (char *name)
{
model_t *mod;
-
+
mod = Mod_FindName (name);
-
+
if (!mod->needload)
- {
- if (mod->type == mod_alias)
+ if (mod->cachesize)
Cache_Check (&mod->cache);
- }
}
/*
if (!mod->needload)
{
- if (mod->type == mod_alias)
+ if (mod->cachesize)
{
d = Cache_Check (&mod->cache);
if (d)
Host_Error ("Mod_NumForName: %s not found", mod->name); // LordHavoc: Sys_Error was *ANNOYING*
return NULL;
}
-
+
// allocate a new model
- COM_FileBase (mod->name, loadname);
-
+// COM_FileBase (mod->name, loadname);
+ strcpy(loadname, mod->name);
+
loadmodel = mod;
// call the apropriate loader
mod->needload = false;
-
+
+ // LordHavoc: clear some important stuff in the model_t structure
+ mod->flags = 0;
+ mod->flags2 = 0;
+
switch (LittleLong(*(unsigned *)buf))
{
case IDPOLYHEADER:
case (('O'<<24)+('M'<<16)+('Y'<<8)+'Z'):
Mod_LoadZymoticModel(mod, buf);
break;
-
+
case IDSPRITEHEADER:
Mod_LoadSpriteModel (mod, buf);
break;
Con_Printf ("Cached models:\n");
for (i=0, mod=mod_known ; i < mod_numknown ; i++, mod++)
{
- Con_Printf ("%8p : %s\n",mod->cache.data, mod->name);
+ Con_Printf ("%4iK : %8p : %s\n", (mod->cachesize + 1023) / 1024, mod->cache.data, mod->name);
}
}