+ int crc;
+ void *buf;
+ char tempname[MAX_QPATH];
+
+ mod->used = true;
+
+ if (mod->name[0] == '*') // submodel
+ return mod;
+
+ if (checkdisk)
+ {
+ // load the file
+ buf = COM_LoadFile (mod->name, false);
+ if (!buf)
+ {
+ if (crash)
+ Host_Error ("Mod_LoadModel: %s not found", mod->name); // LordHavoc: Sys_Error was *ANNOYING*
+ return NULL;
+ }
+
+ crc = CRC_Block(buf, com_filesize);
+
+ if (!mod->needload && mod->crc == crc && mod->isworldmodel == isworldmodel)
+ {
+ Mem_Free(buf);
+ return mod; // already loaded
+ }
+
+ Con_DPrintf("loading model %s\n", mod->name);
+ }
+ else
+ {
+ if (!mod->needload && mod->isworldmodel == isworldmodel)
+ return mod; // already loaded
+
+ Con_DPrintf("loading model %s\n", mod->name);
+
+ buf = COM_LoadFile (mod->name, false);
+ if (!buf)
+ {
+ if (crash)
+ Host_Error ("Mod_LoadModel: %s not found", mod->name); // LordHavoc: Sys_Error was *ANNOYING*
+ return NULL;
+ }
+ crc = CRC_Block(buf, com_filesize);
+ }
+
+ // make sure nothing got trashed
+ Mem_CheckSentinelsGlobal();
+
+ // allocate a new model
+ loadmodel = mod;
+
+ // LordHavoc: clear the model struct
+ strcpy(tempname, mod->name);
+ Mod_FreeModel(mod);
+
+ strcpy(mod->name, tempname);
+ mod->isworldmodel = isworldmodel;
+ mod->needload = false;
+ mod->used = true;
+ mod->crc = crc;
+
+ // all models use memory, so allocate a memory pool
+ mod->mempool = Mem_AllocPool(mod->name);
+ // all models load textures, so allocate a texture pool
+ mod->texturepool = R_AllocTexturePool();
+
+ // call the apropriate loader
+ if (!memcmp(buf, "IDPO" , 4)) Mod_LoadAliasModel (mod, buf);
+ else if (!memcmp(buf, "IDP2" , 4)) Mod_LoadQ2AliasModel(mod, buf);
+ else if (!memcmp(buf, "ZYMOTIC" , 7)) Mod_LoadZymoticModel(mod, buf);
+ else if (!memcmp(buf, "IDSP" , 4)) Mod_LoadSpriteModel (mod, buf);
+ else Mod_LoadBrushModel (mod, buf);
+
+ Mem_Free(buf);
+
+ // make sure nothing got trashed
+ Mem_CheckSentinelsGlobal();
+
+ return mod;
+}
+
+void Mod_CheckLoaded (model_t *mod)
+{
+ if (mod)
+ {
+ if (!mod->needload)
+ {
+ if (mod->type == mod_invalid)
+ Host_Error("Mod_CheckLoaded: invalid model\n");
+ mod->used = true;
+ return;
+ }
+
+ Mod_LoadModel(mod, true, true, mod->isworldmodel);
+ }