]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - model_alias.c
an optimization to CL_RelinkNetworkEntities (and related code) which increases perfor...
[xonotic/darkplaces.git] / model_alias.c
index eb5696a4dcc1ea6f3efe8f831f8ebae48279d4c1..5bdf6f962222d4a93cb7bd5056f1d708b9174bd9 100644 (file)
@@ -484,12 +484,8 @@ void Mod_LoadAliasModel (model_t *mod, void *buffer)
 
        Mod_MDL_LoadFrames (startframes, numverts, totalverts, scale, translate);
 
-       // LordHavoc: fixed model bbox - was //FIXME: do this right
-       //loadmodel->mins[0] = loadmodel->mins[1] = loadmodel->mins[2] = -16;
-       //loadmodel->maxs[0] = loadmodel->maxs[1] = loadmodel->maxs[2] = 16;
        modelyawradius = sqrt(modelyawradius);
        modelradius = sqrt(modelradius);
-//     loadmodel->modelradius = modelradius;
        for (j = 0;j < 3;j++)
        {
                loadmodel->normalmins[j] = aliasbboxmin[j];
@@ -749,7 +745,6 @@ void Mod_LoadQ2AliasModel (model_t *mod, void *buffer)
        // LordHavoc: model bbox
        modelyawradius = sqrt(modelyawradius);
        modelradius = sqrt(modelradius);
-//     loadmodel->modelradius = modelradius;
        for (j = 0;j < 3;j++)
        {
                loadmodel->normalmins[j] = aliasbboxmin[j];
@@ -774,7 +769,7 @@ static void zymswapintblock(int *m, int size)
 
 void Mod_LoadZymoticModel(model_t *mod, void *buffer)
 {
-       int i, pbase, *bonecount;
+       int i, pbase, *bonecount, numposes;
        unsigned int count, a, b, c, *renderlist, *renderlistend;
        rtexture_t **texture;
        char *shadername;
@@ -845,6 +840,7 @@ void Mod_LoadZymoticModel(model_t *mod, void *buffer)
        loadmodel->skinframes->glow = NULL;
        loadmodel->skinframes->merged = NULL;
        loadmodel->numskins = 1;
+       numposes = pheader->lump_poses.length / sizeof(float[3][4]) / pheader->numbones;
 
        // go through the lumps, swapping things
 
@@ -867,6 +863,12 @@ void Mod_LoadZymoticModel(model_t *mod, void *buffer)
                loadmodel->animscenes[i].framerate = scene->framerate;
                loadmodel->animscenes[i].loop = (scene->flags & ZYMSCENEFLAG_NOLOOP) == 0;
 
+               if ((unsigned int) loadmodel->animscenes[i].firstframe >= numposes)
+                       Host_Error("Mod_LoadZymoticModel: scene firstframe (%i) >= numposes (%i)\n", loadmodel->animscenes[i].firstframe, numposes);
+               if ((unsigned int) loadmodel->animscenes[i].firstframe + (unsigned int) loadmodel->animscenes[i].framecount > numposes)
+                       Host_Error("Mod_LoadZymoticModel: scene firstframe (%i) + framecount (%i) >= numposes (%i)\n", loadmodel->animscenes[i].firstframe, loadmodel->animscenes[i].framecount, numposes);
+               if (loadmodel->animscenes[i].framerate < 0)
+                       Host_Error("Mod_LoadZymoticModel: scene framerate (%f) < 0\n", loadmodel->animscenes[i].framerate);
                scene++;
        }
 
@@ -941,7 +943,6 @@ void Mod_LoadZymoticModel(model_t *mod, void *buffer)
 
        // model bbox
        modelradius = pheader->radius;
-//     loadmodel->modelradius = pheader->radius;
        for (i = 0;i < 3;i++)
        {
                loadmodel->normalmins[i] = pheader->mins[i];
@@ -963,3 +964,4 @@ void Mod_LoadZymoticModel(model_t *mod, void *buffer)
        loadmodel->DrawSky = NULL;
        loadmodel->DrawShadow = NULL;
 }
+