/** * @file sprites.c * @brief */ /* Copyright (C) 1997-2001 Id Software, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "qdata.h" #define MAX_SPRFRAMES MAX_MD2SKINS dsprite_t sprite; dsprframe_t frames[MAX_SPRFRAMES]; byte *byteimage, *lbmpalette; int byteimagewidth, byteimageheight; char spritename[1024]; void FinishSprite (void); void Cmd_Spritename (void); /** * @brief */ void FinishSprite (void) { FILE *spriteouthandle; int i, curframe; dsprite_t spritetemp; char savename[1024]; if (sprite.numframes == 0) return; if (!strlen(spritename)) Error ("Didn't name sprite file"); sprintf (savename, "%s%s.sp2", gamedir, spritename); if (g_release) { char name[1024]; sprintf (name, "%s.sp2", spritename); ReleaseFile (name); spritename[0] = 0; /* clear for a new sprite */ sprite.numframes = 0; return; } printf ("saving in %s\n", savename); CreatePath (savename); spriteouthandle = SafeOpenWrite (savename); /* write out the sprite header */ spritetemp.ident = LittleLong (IDSPRITEHEADER); spritetemp.version = LittleLong (SPRITE_VERSION); spritetemp.numframes = LittleLong (sprite.numframes); SafeWrite (spriteouthandle, &spritetemp, 12); /* write out the frames */ curframe = 0; for (i=0 ; i 256) || (h > 256)) Error ("Sprite has a dimension longer than 256"); xh = xl+w; yh = yl+h; if (sprite.numframes >= MAX_SPRFRAMES) Error ("Too many frames; increase MAX_SPRFRAMES\n"); pframe = &frames[sprite.numframes]; pframe->width = w; pframe->height = h; pframe->origin_x = ox; pframe->origin_y = oy; sprintf (pframe->name, "%s_%i.pcx", spritename, sprite.numframes); sprintf (savename, "%s%s_%i.pcx", gamedir, spritename, sprite.numframes); sprite.numframes++; if (g_release) { ReleaseFile (pframe->name); return; } /* crop it to the proper size */ cropped = malloc (w*h); for (y=0 ; y