]> git.xonotic.org Git - xonotic/darkplaces.git/commitdiff
made zym and dpm model loaders warn and ignore the model if it is missing geometry...
authorhavoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Wed, 8 Mar 2006 15:53:47 +0000 (15:53 +0000)
committerhavoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Wed, 8 Mar 2006 15:53:47 +0000 (15:53 +0000)
git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@6082 d7cf8633-e32d-0410-b094-e92efae38249

model_alias.c

index 4159cd20f182879866b653018e6f7830c6299a77..def79235d555ae8701dca6e99b37816ce24c31ee 100644 (file)
@@ -1164,12 +1164,6 @@ void Mod_ZYMOTICMODEL_Load(model_t *mod, void *buffer, void *bufferend)
                Host_Error ("Mod_ZYMOTICMODEL_Load: only type 1 (skeletal pose) models are currently supported (name = %s)", loadmodel->name);
 
        loadmodel->type = mod_alias;
-       loadmodel->DrawSky = NULL;
-       loadmodel->Draw = R_Q1BSP_Draw;
-       loadmodel->CompileShadowVolume = R_Q1BSP_CompileShadowVolume;
-       loadmodel->DrawShadowVolume = R_Q1BSP_DrawShadowVolume;
-       loadmodel->DrawLight = R_Q1BSP_DrawLight;
-       loadmodel->TraceBox = Mod_MDLMD2MD3_TraceBox;
        loadmodel->flags = 0; // there are no flags on zym models
        loadmodel->synctype = ST_RAND;
 
@@ -1208,6 +1202,24 @@ void Mod_ZYMOTICMODEL_Load(model_t *mod, void *buffer, void *bufferend)
        pheader->lump_trizone.start = BigLong(pinmodel->lump_trizone.start);
        pheader->lump_trizone.length = BigLong(pinmodel->lump_trizone.length);
 
+       if (pheader->numtris < 1 || pheader->numverts < 3 || pheader->numshaders < 1)
+       {
+               Con_Printf("%s has no geometry\n");
+               return;
+       }
+       if (pheader->numscenes < 1 || pheader->lump_poses.length < (int)sizeof(float[3][4]))
+       {
+               Con_Printf("%s has no animations\n");
+               return;
+       }
+
+       loadmodel->DrawSky = NULL;
+       loadmodel->Draw = R_Q1BSP_Draw;
+       loadmodel->CompileShadowVolume = R_Q1BSP_CompileShadowVolume;
+       loadmodel->DrawShadowVolume = R_Q1BSP_DrawShadowVolume;
+       loadmodel->DrawLight = R_Q1BSP_DrawLight;
+       loadmodel->TraceBox = Mod_MDLMD2MD3_TraceBox;
+
        loadmodel->numframes = pheader->numscenes;
        loadmodel->num_surfaces = pheader->numshaders;
 
@@ -1457,12 +1469,6 @@ void Mod_DARKPLACESMODEL_Load(model_t *mod, void *buffer, void *bufferend)
                Host_Error ("Mod_DARKPLACESMODEL_Load: only type 2 (hierarchical skeletal pose) models are currently supported (name = %s)", loadmodel->name);
 
        loadmodel->type = mod_alias;
-       loadmodel->DrawSky = NULL;
-       loadmodel->Draw = R_Q1BSP_Draw;
-       loadmodel->CompileShadowVolume = R_Q1BSP_CompileShadowVolume;
-       loadmodel->DrawShadowVolume = R_Q1BSP_DrawShadowVolume;
-       loadmodel->DrawLight = R_Q1BSP_DrawLight;
-       loadmodel->TraceBox = Mod_MDLMD2MD3_TraceBox;
        loadmodel->flags = 0; // there are no flags on zym models
        loadmodel->synctype = ST_RAND;
 
@@ -1484,6 +1490,24 @@ void Mod_DARKPLACESMODEL_Load(model_t *mod, void *buffer, void *bufferend)
        pheader->ofs_meshs = BigLong(pheader->ofs_meshs);
        pheader->ofs_frames = BigLong(pheader->ofs_frames);
 
+       if (pheader->num_bones < 1 || pheader->num_meshs < 1)
+       {
+               Con_Printf("%s has no geometry\n");
+               return;
+       }
+       if (pheader->num_frames < 1)
+       {
+               Con_Printf("%s has no frames\n");
+               return;
+       }
+
+       loadmodel->DrawSky = NULL;
+       loadmodel->Draw = R_Q1BSP_Draw;
+       loadmodel->CompileShadowVolume = R_Q1BSP_CompileShadowVolume;
+       loadmodel->DrawShadowVolume = R_Q1BSP_DrawShadowVolume;
+       loadmodel->DrawLight = R_Q1BSP_DrawLight;
+       loadmodel->TraceBox = Mod_MDLMD2MD3_TraceBox;
+
        // model bbox
        for (i = 0;i < 3;i++)
        {