From ac8abfb4850b0061611141880dbff840a2e705bc Mon Sep 17 00:00:00 2001 From: havoc Date: Wed, 8 Mar 2006 15:53:47 +0000 Subject: [PATCH] made zym and dpm model loaders warn and ignore the model if it is missing geometry or frames git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@6082 d7cf8633-e32d-0410-b094-e92efae38249 --- model_alias.c | 48 ++++++++++++++++++++++++++++++++++++------------ 1 file changed, 36 insertions(+), 12 deletions(-) diff --git a/model_alias.c b/model_alias.c index 4159cd20..def79235 100644 --- a/model_alias.c +++ b/model_alias.c @@ -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++) { -- 2.39.2