5 #define MAX_SPRFRAMES MAX_MD2SKINS
8 dsprframe_t frames[MAX_SPRFRAMES];
10 byte *byteimage, *lbmpalette;
11 int byteimagewidth, byteimageheight;
13 char spritename[1024];
16 void FinishSprite (void);
17 void Cmd_Spritename (void);
26 void FinishSprite (void)
28 FILE *spriteouthandle;
33 if (sprite.numframes == 0)
36 if (!strlen(spritename))
37 Error ("Didn't name sprite file");
39 sprintf (savename, "%s%s.sp2", gamedir, spritename);
45 sprintf (name, "%s.sp2", spritename);
47 spritename[0] = 0; // clear for a new sprite
53 printf ("saving in %s\n", savename);
54 CreatePath (savename);
55 spriteouthandle = SafeOpenWrite (savename);
59 // write out the sprite header
61 spritetemp.ident = LittleLong (IDSPRITEHEADER);
62 spritetemp.version = LittleLong (SPRITE_VERSION);
63 spritetemp.numframes = LittleLong (sprite.numframes);
65 SafeWrite (spriteouthandle, &spritetemp, 12);
68 // write out the frames
72 for (i=0 ; i<sprite.numframes ; i++)
74 frames[i].width = LittleLong(frames[i].width);
75 frames[i].height = LittleLong(frames[i].height);
76 frames[i].origin_x = LittleLong(frames[i].origin_x);
77 frames[i].origin_y = LittleLong(frames[i].origin_y);
79 SafeWrite (spriteouthandle, frames, sizeof(frames[0])*sprite.numframes);
81 fclose (spriteouthandle);
83 spritename[0] = 0; // clear for a new sprite
102 name = ExpandPathAndArchive(token);
105 printf ("loading %s\n", name);
106 Load256Image (name, &byteimage, &lbmpalette,
107 &byteimagewidth, &byteimageheight);
108 RemapZero (byteimage, lbmpalette,
109 byteimagewidth, byteimageheight);
118 void Cmd_SpriteFrame (void)
120 int y,xl,yl,xh,yh,w,h;
135 // origin offset is optional
136 if (TokenAvailable ())
149 if ((xl & 0x07) || (yl & 0x07) || (w & 0x07) || (h & 0x07))
150 Error ("Sprite dimensions not multiples of 8\n");
152 if ((w > 256) || (h > 256))
153 Error ("Sprite has a dimension longer than 256");
158 if (sprite.numframes >= MAX_SPRFRAMES)
159 Error ("Too many frames; increase MAX_SPRFRAMES\n");
161 pframe = &frames[sprite.numframes];
164 pframe->origin_x = ox;
165 pframe->origin_y = oy;
166 sprintf (pframe->name, "%s_%i.pcx", spritename, sprite.numframes);
167 sprintf (savename, "%s%s_%i.pcx", gamedir, spritename, sprite.numframes);
172 ReleaseFile (pframe->name);
176 // crop it to the proper size
177 cropped = malloc (w*h);
178 for (y=0 ; y<h ; y++)
180 memcpy (cropped+y*w, byteimage+(y+yl)*byteimagewidth+xl, w);
183 // save off the new image
184 printf ("saving %s\n", savename);
185 CreatePath (savename);
186 WritePCXfile (savename, cropped, w, h, lbmpalette);
198 void Cmd_SpriteName (void)
200 if (sprite.numframes)
204 strcpy (spritename, token);
205 memset (&sprite, 0, sizeof(sprite));
206 memset (&frames, 0, sizeof(frames));