]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - model_alias.c
DP code cleanup, stage one - all headers that can be protected by ifdef
[xonotic/darkplaces.git] / model_alias.c
index 926e64f768e57c7a3af0a2c0bc28acd8e1b70d82..e80ee4dbac4fc956389b3f6a6c3cdfa842a65e24 100644 (file)
@@ -95,7 +95,7 @@ static void Mod_ConvertAliasVerts (int inverts, vec3_t scale, vec3_t translate,
                Con_Printf("Mod_ConvertAliasVerts: \"%s\", %i invalid normal indices found\n", loadmodel->name, invalidnormals);
 }
 
-static void Mod_MDL_LoadFrames (long datapointer, int inverts, int outverts, vec3_t scale, vec3_t translate)
+static void Mod_MDL_LoadFrames (qbyte * datapointer, int inverts, int outverts, vec3_t scale, vec3_t translate)
 {
        daliasframetype_t       *pframetype;
        daliasframe_t           *pinframe;
@@ -265,13 +265,13 @@ void Mod_LoadAliasModel (model_t *mod, void *buffer)
        daliasframetype_t               *pinframetype;
        daliasgroup_t                   *pinframegroup;
        float                                   scales, scalet, scale[3], translate[3], interval;
-       long                                    datapointer, startframes, startskins;
+       qbyte                                   *datapointer, *startframes, *startskins;
        char                                    name[MAX_QPATH];
        qbyte                                   *skintemp = NULL;
        modelyawradius = 0;
        modelradius = 0;
 
-       datapointer = (long) buffer;
+       datapointer = buffer;
        pinmodel = (mdl_t *)datapointer;
        datapointer += sizeof(mdl_t);
 
@@ -548,7 +548,7 @@ void Mod_LoadQ2AliasModel (model_t *mod, void *buffer)
 {
        int *vertremap;
        md2_t *pinmodel;
-       long base;
+       qbyte *base;
        int version, end;
        int i, j, k, hashindex, num, numxyz, numst, xyz, st;
        float *stverts, s, t;
@@ -559,7 +559,7 @@ void Mod_LoadQ2AliasModel (model_t *mod, void *buffer)
                float st[2];
        }
        *hash, **md2verthash, *md2verthashdata;
-       long datapointer;
+       qbyte *datapointer;
        md2frame_t *pinframe;
        char *inskin;
        md2triangle_t *intri;
@@ -567,7 +567,7 @@ void Mod_LoadQ2AliasModel (model_t *mod, void *buffer)
        int skinwidth, skinheight;
 
        pinmodel = buffer;
-       base = (long) buffer;
+       base = buffer;
 
        version = LittleLong (pinmodel->version);
        if (version != MD2ALIAS_VERSION)
@@ -774,7 +774,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 +845,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 +868,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++;
        }