]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - model_sprite.c
Remove alsa 0.6 (for some random date of cvs alsa) support, never officially released...
[xonotic/darkplaces.git] / model_sprite.c
index b228149acb884aa6eb4b18bfef5f4c185b5ec9f2..4db67bca50b0eb800e967a02f7bfb6b74f5e6ad9 100644 (file)
@@ -33,6 +33,21 @@ void Mod_SpriteInit (void)
 {
 }
 
+void Mod_Sprite_StripExtension(char *in, char *out)
+{
+       char *end;
+       end = in + strlen(in);
+       if ((end - in) >= 6)
+               if (strcmp(end - 6, ".spr32") == 0)
+                       end -= 6;
+       if ((end - in) >= 4)
+               if (strcmp(end - 4, ".spr") == 0)
+                       end -= 4;
+       while (in < end)
+               *out++ = *in++;
+       *out++ = 0;
+}
+
 /*
 =================
 Mod_LoadSpriteFrame
@@ -43,7 +58,7 @@ void * Mod_LoadSpriteFrame (void * pin, mspriteframe_t **ppframe, int framenum,
        dspriteframe_t          *pinframe;
        mspriteframe_t          *pspriteframe;
        int                                     i, width, height, size, origin[2];
-       char                            name[64];
+       char                            name[256], tempname[256];
        byte                            *pixbuf, *pixel, *inpixel;
 
        pinframe = (dspriteframe_t *)pin;
@@ -52,7 +67,7 @@ void * Mod_LoadSpriteFrame (void * pin, mspriteframe_t **ppframe, int framenum,
        height = LittleLong (pinframe->height);
        size = width * height * bytesperpixel;
 
-       pspriteframe = Hunk_AllocName (sizeof (mspriteframe_t),loadname);
+       pspriteframe = Hunk_AllocName (sizeof (mspriteframe_t), va("%s frames", loadname));
 
        memset (pspriteframe, 0, sizeof (mspriteframe_t));
 
@@ -68,14 +83,15 @@ void * Mod_LoadSpriteFrame (void * pin, mspriteframe_t **ppframe, int framenum,
        pspriteframe->left = origin[0];
        pspriteframe->right = width + origin[0];
 
-       sprintf (name, "%s_%i", loadmodel->name, framenum);
+       Mod_Sprite_StripExtension(loadmodel->name, tempname);
+       sprintf (name, "%s_%i", tempname, framenum);
        pspriteframe->gl_texturenum = loadtextureimagewithmask(name, 0, 0, false, true);
        pspriteframe->gl_fogtexturenum = image_masktexnum;
        if (pspriteframe->gl_texturenum == 0)
        {
                pspriteframe->gl_texturenum = GL_LoadTexture (name, width, height, (byte *)(pinframe + 1), true, true, bytesperpixel);
                // make fog version (just alpha)
-               pixbuf = pixel = malloc(width*height*4);
+               pixbuf = pixel = qmalloc(width*height*4);
                inpixel = (byte *)(pinframe + 1);
                if (bytesperpixel == 1)
                {
@@ -104,7 +120,7 @@ void * Mod_LoadSpriteFrame (void * pin, mspriteframe_t **ppframe, int framenum,
                }
                sprintf (name, "%s_%ifog", loadmodel->name, framenum);
                pspriteframe->gl_fogtexturenum = GL_LoadTexture (name, width, height, pixbuf, true, true, 4);
-               free(pixbuf);
+               qfree(pixbuf);
        }
 
        return (void *)((byte *)pinframe + sizeof (dspriteframe_t) + size);
@@ -129,8 +145,7 @@ void * Mod_LoadSpriteGroup (void * pin, mspriteframe_t **ppframe, int framenum,
 
        numframes = LittleLong (pingroup->numframes);
 
-       pspritegroup = Hunk_AllocName (sizeof (mspritegroup_t) +
-                               (numframes - 1) * sizeof (pspritegroup->frames[0]), loadname);
+       pspritegroup = Hunk_AllocName (sizeof (mspritegroup_t) + (numframes - 1) * sizeof (pspritegroup->frames[0]), va("%s frames", loadname));
 
        pspritegroup->numframes = numframes;
 
@@ -138,7 +153,7 @@ void * Mod_LoadSpriteGroup (void * pin, mspriteframe_t **ppframe, int framenum,
 
        pin_intervals = (dspriteinterval_t *)(pingroup + 1);
 
-       poutintervals = Hunk_AllocName (numframes * sizeof (float), loadname);
+       poutintervals = Hunk_AllocName (numframes * sizeof (float), va("%s frames", loadname));
 
        pspritegroup->intervals = poutintervals;
 
@@ -155,9 +170,7 @@ void * Mod_LoadSpriteGroup (void * pin, mspriteframe_t **ppframe, int framenum,
        ptemp = (void *)pin_intervals;
 
        for (i=0 ; i<numframes ; i++)
-       {
                ptemp = Mod_LoadSpriteFrame (ptemp, &pspritegroup->frames[i], framenum * 100 + i, bytesperpixel);
-       }
 
        return ptemp;
 }
@@ -211,7 +224,7 @@ void Mod_LoadSpriteModel (model_t *mod, void *buffer)
 
        size = sizeof (msprite_t) +     (numframes - 1) * sizeof (psprite->frames);
 
-       psprite = Hunk_AllocName (size, loadname);
+       psprite = Hunk_AllocName (size, va("%s info", loadname));
 
        mod->cache.data = psprite;
 
@@ -245,17 +258,9 @@ void Mod_LoadSpriteModel (model_t *mod, void *buffer)
                psprite->frames[i].type = frametype;
 
                if (frametype == SPR_SINGLE)
-               {
-                       pframetype = (dspriteframetype_t *)
-                                       Mod_LoadSpriteFrame (pframetype + 1,
-                                                                                &psprite->frames[i].frameptr, i, bytesperpixel);
-               }
+                       pframetype = (dspriteframetype_t *) Mod_LoadSpriteFrame (pframetype + 1, &psprite->frames[i].frameptr, i, bytesperpixel);
                else
-               {
-                       pframetype = (dspriteframetype_t *)
-                                       Mod_LoadSpriteGroup (pframetype + 1,
-                                                                                &psprite->frames[i].frameptr, i, bytesperpixel);
-               }
+                       pframetype = (dspriteframetype_t *) Mod_LoadSpriteGroup (pframetype + 1, &psprite->frames[i].frameptr, i, bytesperpixel);
        }
 
        mod->type = mod_sprite;