The source release of the qutils.

This commit is contained in:
Travis Bradshaw
2012-01-31 15:48:05 -06:00
commit 6df9737f9c
111 changed files with 23929 additions and 0 deletions

526
qutils/SPRGEN/SPRGEN.C Normal file
View File

@@ -0,0 +1,526 @@
//
// spritegen.c: generates a .spr file from a series of .lbm frame files.
// Result is stored in /raid/quake/id1/sprites/<scriptname>.spr.
//
#define INCLUDELIBS
#ifdef NeXT
#include <libc.h>
#endif
#include "spritegn.h"
#define MAX_BUFFER_SIZE 0x100000
#define MAX_FRAMES 1000
dsprite_t sprite;
byte *byteimage, *lbmpalette;
int byteimagewidth, byteimageheight;
byte *lumpbuffer, *plump;
char spritedir[1024];
char spriteoutname[1024];
int framesmaxs[2];
int framecount;
typedef struct {
spriteframetype_t type; // single frame or group of frames
void *pdata; // either a dspriteframe_t or group info
float interval; // only used for frames in groups
int numgroupframes; // only used by group headers
} spritepackage_t;
spritepackage_t frames[MAX_FRAMES];
void FinishSprite (void);
void Cmd_Spritename (void);
/*
============
WriteFrame
============
*/
void WriteFrame (FILE *spriteouthandle, int framenum)
{
dspriteframe_t *pframe;
dspriteframe_t frametemp;
pframe = (dspriteframe_t *)frames[framenum].pdata;
frametemp.origin[0] = LittleLong (pframe->origin[0]);
frametemp.origin[1] = LittleLong (pframe->origin[1]);
frametemp.width = LittleLong (pframe->width);
frametemp.height = LittleLong (pframe->height);
SafeWrite (spriteouthandle, &frametemp, sizeof (frametemp));
SafeWrite (spriteouthandle,
(byte *)(pframe + 1),
pframe->height * pframe->width);
}
/*
============
WriteSprite
============
*/
void WriteSprite (FILE *spriteouthandle)
{
int i, groupframe, curframe;
dsprite_t spritetemp;
sprite.boundingradius = sqrt (((framesmaxs[0] >> 1) *
(framesmaxs[0] >> 1)) +
((framesmaxs[1] >> 1) *
(framesmaxs[1] >> 1)));
//
// write out the sprite header
//
spritetemp.type = LittleLong (sprite.type);
spritetemp.boundingradius = LittleFloat (sprite.boundingradius);
spritetemp.width = LittleLong (framesmaxs[0]);
spritetemp.height = LittleLong (framesmaxs[1]);
spritetemp.numframes = LittleLong (sprite.numframes);
spritetemp.beamlength = LittleFloat (sprite.beamlength);
spritetemp.synctype = LittleFloat (sprite.synctype);
spritetemp.version = LittleLong (SPRITE_VERSION);
spritetemp.ident = LittleLong (IDSPRITEHEADER);
SafeWrite (spriteouthandle, &spritetemp, sizeof(spritetemp));
//
// write out the frames
//
curframe = 0;
for (i=0 ; i<sprite.numframes ; i++)
{
SafeWrite (spriteouthandle, &frames[curframe].type,
sizeof(frames[curframe].type));
if (frames[curframe].type == SPR_SINGLE)
{
//
// single (non-grouped) frame
//
WriteFrame (spriteouthandle, curframe);
curframe++;
}
else
{
int j, numframes;
dspritegroup_t dsgroup;
float totinterval;
groupframe = curframe;
curframe++;
numframes = frames[groupframe].numgroupframes;
//
// set and write the group header
//
dsgroup.numframes = LittleLong (numframes);
SafeWrite (spriteouthandle, &dsgroup, sizeof(dsgroup));
//
// write the interval array
//
totinterval = 0.0;
for (j=0 ; j<numframes ; j++)
{
dspriteinterval_t temp;
totinterval += frames[groupframe+1+j].interval;
temp.interval = LittleFloat (totinterval);
SafeWrite (spriteouthandle, &temp, sizeof(temp));
}
for (j=0 ; j<numframes ; j++)
{
WriteFrame (spriteouthandle, curframe);
curframe++;
}
}
}
}
/*
============
ExecCommand
============
*/
int cmdsrun;
void ExecCommand (char *cmd, ...)
{
int ret;
char cmdline[1024];
va_list argptr;
cmdsrun++;
va_start (argptr, cmd);
vsprintf (cmdline,cmd,argptr);
va_end (argptr);
// printf ("=============================================================\n");
// printf ("spritegen: %s\n",cmdline);
fflush (stdout);
ret = system (cmdline);
// printf ("=============================================================\n");
if (ret)
Error ("spritegen: exiting due to error");
}
/*
==============
LoadScreen
==============
*/
void LoadScreen (char *name)
{
printf ("grabbing from %s...\n",name);
LoadLBM (name, &byteimage, &lbmpalette);
byteimagewidth = bmhd.w;
byteimageheight = bmhd.h;
}
/*
===============
Cmd_Type
===============
*/
void Cmd_Type (void)
{
GetToken (false);
if (!strcmp (token, "vp_parallel_upright"))
sprite.type = SPR_VP_PARALLEL_UPRIGHT;
else if (!strcmp (token, "facing_upright"))
sprite.type = SPR_FACING_UPRIGHT;
else if (!strcmp (token, "vp_parallel"))
sprite.type = SPR_VP_PARALLEL;
else if (!strcmp (token, "oriented"))
sprite.type = SPR_ORIENTED;
else if (!strcmp (token, "vp_parallel_oriented"))
sprite.type = SPR_VP_PARALLEL_ORIENTED;
else
Error ("Bad sprite type\n");
}
/*
===============
Cmd_Beamlength
===============
*/
void Cmd_Beamlength ()
{
GetToken (false);
sprite.beamlength = atof (token);
}
/*
===============
Cmd_Load
===============
*/
void Cmd_Load (void)
{
GetToken (false);
LoadScreen (ExpandPathAndArchive(token));
}
/*
===============
Cmd_Frame
===============
*/
void Cmd_Frame ()
{
int x,y,xl,yl,xh,yh,w,h;
byte *screen_p, *source;
int linedelta;
dspriteframe_t *pframe;
int pix;
GetToken (false);
xl = atoi (token);
GetToken (false);
yl = atoi (token);
GetToken (false);
w = atoi (token);
GetToken (false);
h = atoi (token);
if ((xl & 0x07) || (yl & 0x07) || (w & 0x07) || (h & 0x07))
Error ("Sprite dimensions not multiples of 8\n");
if ((w > 255) || (h > 255))
Error ("Sprite has a dimension longer than 255");
xh = xl+w;
yh = yl+h;
pframe = (dspriteframe_t *)plump;
frames[framecount].pdata = pframe;
frames[framecount].type = SPR_SINGLE;
if (TokenAvailable ())
{
GetToken (false);
frames[framecount].interval = atof (token);
if (frames[framecount].interval <= 0.0)
Error ("Non-positive interval");
}
else
{
frames[framecount].interval = 0.1;
}
if (TokenAvailable ())
{
GetToken (false);
pframe->origin[0] = -atoi (token);
GetToken (false);
pframe->origin[1] = atoi (token);
}
else
{
pframe->origin[0] = -(w >> 1);
pframe->origin[1] = h >> 1;
}
pframe->width = w;
pframe->height = h;
if (w > framesmaxs[0])
framesmaxs[0] = w;
if (h > framesmaxs[1])
framesmaxs[1] = h;
plump = (byte *)(pframe + 1);
screen_p = byteimage + yl*byteimagewidth + xl;
linedelta = byteimagewidth - w;
source = plump;
for (y=yl ; y<yh ; y++)
{
for (x=xl ; x<xh ; x++)
{
pix = *screen_p;
*screen_p++ = 0;
// if (pix == 255)
// pix = 0;
*plump++ = pix;
}
screen_p += linedelta;
}
framecount++;
if (framecount >= MAX_FRAMES)
Error ("Too many frames; increase MAX_FRAMES\n");
}
/*
===============
Cmd_GroupStart
===============
*/
void Cmd_GroupStart (void)
{
int groupframe;
groupframe = framecount++;
frames[groupframe].type = SPR_GROUP;
frames[groupframe].numgroupframes = 0;
while (1)
{
GetToken (true);
if (endofscript)
Error ("End of file during group");
if (!strcmp (token, "$frame"))
{
Cmd_Frame ();
frames[groupframe].numgroupframes++;
}
else if (!strcmp (token, "$load"))
{
Cmd_Load ();
}
else if (!strcmp (token, "$groupend"))
{
break;
}
else
{
Error ("$frame, $load, or $groupend expected\n");
}
}
if (frames[groupframe].numgroupframes == 0)
Error ("Empty group\n");
}
/*
===============
ParseScript
===============
*/
void ParseScript (void)
{
while (1)
{
GetToken (true);
if (endofscript)
break;
if (!strcmp (token, "$load"))
{
Cmd_Load ();
}
if (!strcmp (token, "$spritename"))
{
Cmd_Spritename ();
}
else if (!strcmp (token, "$type"))
{
Cmd_Type ();
}
else if (!strcmp (token, "$beamlength"))
{
Cmd_Beamlength ();
}
else if (!strcmp (token, "$sync"))
{
sprite.synctype = ST_SYNC;
}
else if (!strcmp (token, "$frame"))
{
Cmd_Frame ();
sprite.numframes++;
}
else if (!strcmp (token, "$load"))
{
Cmd_Load ();
}
else if (!strcmp (token, "$groupstart"))
{
Cmd_GroupStart ();
sprite.numframes++;
}
}
}
/*
==============
Cmd_Spritename
==============
*/
void Cmd_Spritename (void)
{
if (sprite.numframes)
FinishSprite ();
GetToken (false);
sprintf (spriteoutname, "%s%s.spr", spritedir, token);
memset (&sprite, 0, sizeof(sprite));
framecount = 0;
framesmaxs[0] = -9999999;
framesmaxs[1] = -9999999;
lumpbuffer = malloc (MAX_BUFFER_SIZE * 2); // *2 for padding
if (!lumpbuffer)
Error ("Couldn't get buffer memory");
plump = lumpbuffer;
sprite.synctype = ST_RAND; // default
}
/*
==============
FinishSprite
==============
*/
void FinishSprite (void)
{
FILE *spriteouthandle;
if (sprite.numframes == 0)
Error ("no frames\n");
if (!strlen(spriteoutname))
Error ("Didn't name sprite file");
if ((plump - lumpbuffer) > MAX_BUFFER_SIZE)
Error ("Sprite package too big; increase MAX_BUFFER_SIZE");
spriteouthandle = SafeOpenWrite (spriteoutname);
printf ("saving in %s\n", spriteoutname);
WriteSprite (spriteouthandle);
fclose (spriteouthandle);
printf ("spritegen: successful\n");
printf ("%d frame(s)\n", sprite.numframes);
printf ("%d ungrouped frame(s), including group headers\n", framecount);
spriteoutname[0] = 0; // clear for a new sprite
}
/*
==============
main
==============
*/
int main (int argc, char **argv)
{
int i;
if (argc != 2 && argc != 4)
Error ("usage: spritegen [-archive directory] file.qc");
if (!strcmp(argv[1], "-archive"))
{
archive = true;
strcpy (archivedir, argv[2]);
printf ("Archiving source to: %s\n", archivedir);
i = 3;
}
else
i = 1;
SetQdirFromPath (argv[i]);
ExtractFilePath (argv[i], spritedir); // chop the filename
//
// load the script
//
LoadScriptFile (argv[i]);
ParseScript ();
FinishSprite ();
return 0;
}

300
qutils/SPRGEN/SPRGEN.MAK Normal file
View File

@@ -0,0 +1,300 @@
# Microsoft Developer Studio Generated NMAKE File, Format Version 4.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
!IF "$(CFG)" == ""
CFG=sprgen - Win32 Debug
!MESSAGE No configuration specified. Defaulting to sprgen - Win32 Debug.
!ENDIF
!IF "$(CFG)" != "sprgen - Win32 Release" && "$(CFG)" != "sprgen - Win32 Debug"
!MESSAGE Invalid configuration "$(CFG)" specified.
!MESSAGE You can specify a configuration when running NMAKE on this makefile
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "sprgen.mak" CFG="sprgen - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "sprgen - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "sprgen - Win32 Debug" (based on "Win32 (x86) Console Application")
!MESSAGE
!ERROR An invalid configuration is specified.
!ENDIF
!IF "$(OS)" == "Windows_NT"
NULL=
!ELSE
NULL=nul
!ENDIF
################################################################################
# Begin Project
# PROP Target_Last_Scanned "sprgen - Win32 Debug"
RSC=rc.exe
CPP=cl.exe
!IF "$(CFG)" == "sprgen - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Target_Dir ""
OUTDIR=.\Release
INTDIR=.\Release
ALL : "$(OUTDIR)\sprgen.exe"
CLEAN :
-@erase ".\Release\sprgen.exe"
-@erase ".\Release\scriplib.obj"
-@erase ".\Release\sprgen.obj"
-@erase ".\Release\cmdlib.obj"
-@erase ".\Release\lbmlib.obj"
"$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c
# ADD CPP /nologo /GX /O2 /I "..\common" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c
CPP_PROJ=/nologo /ML /GX /O2 /I "..\common" /D "WIN32" /D "NDEBUG" /D\
"_CONSOLE" /Fp"$(INTDIR)/sprgen.pch" /YX /Fo"$(INTDIR)/" /c
CPP_OBJS=.\Release/
CPP_SBRS=
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
BSC32_FLAGS=/nologo /o"$(OUTDIR)/sprgen.bsc"
BSC32_SBRS=
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\
odbccp32.lib /nologo /subsystem:console /incremental:no\
/pdb:"$(OUTDIR)/sprgen.pdb" /machine:I386 /out:"$(OUTDIR)/sprgen.exe"
LINK32_OBJS= \
".\Release\scriplib.obj" \
".\Release\sprgen.obj" \
".\Release\cmdlib.obj" \
".\Release\lbmlib.obj"
"$(OUTDIR)\sprgen.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
$(LINK32) @<<
$(LINK32_FLAGS) $(LINK32_OBJS)
<<
!ELSEIF "$(CFG)" == "sprgen - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Target_Dir ""
OUTDIR=.\Debug
INTDIR=.\Debug
ALL : "$(OUTDIR)\sprgen.exe"
CLEAN :
-@erase ".\Debug\vc40.pdb"
-@erase ".\Debug\vc40.idb"
-@erase ".\Debug\sprgen.exe"
-@erase ".\Debug\cmdlib.obj"
-@erase ".\Debug\scriplib.obj"
-@erase ".\Debug\lbmlib.obj"
-@erase ".\Debug\sprgen.obj"
-@erase ".\Debug\sprgen.ilk"
-@erase ".\Debug\sprgen.pdb"
"$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c
# ADD CPP /nologo /Gm /GX /Zi /Od /I "..\common" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c
CPP_PROJ=/nologo /MLd /Gm /GX /Zi /Od /I "..\common" /D "WIN32" /D "_DEBUG" /D\
"_CONSOLE" /Fp"$(INTDIR)/sprgen.pch" /YX /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c
CPP_OBJS=.\Debug/
CPP_SBRS=
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
BSC32_FLAGS=/nologo /o"$(OUTDIR)/sprgen.bsc"
BSC32_SBRS=
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386
LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\
odbccp32.lib /nologo /subsystem:console /incremental:yes\
/pdb:"$(OUTDIR)/sprgen.pdb" /debug /machine:I386 /out:"$(OUTDIR)/sprgen.exe"
LINK32_OBJS= \
".\Debug\cmdlib.obj" \
".\Debug\scriplib.obj" \
".\Debug\lbmlib.obj" \
".\Debug\sprgen.obj"
"$(OUTDIR)\sprgen.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
$(LINK32) @<<
$(LINK32_FLAGS) $(LINK32_OBJS)
<<
!ENDIF
.c{$(CPP_OBJS)}.obj:
$(CPP) $(CPP_PROJ) $<
.cpp{$(CPP_OBJS)}.obj:
$(CPP) $(CPP_PROJ) $<
.cxx{$(CPP_OBJS)}.obj:
$(CPP) $(CPP_PROJ) $<
.c{$(CPP_SBRS)}.sbr:
$(CPP) $(CPP_PROJ) $<
.cpp{$(CPP_SBRS)}.sbr:
$(CPP) $(CPP_PROJ) $<
.cxx{$(CPP_SBRS)}.sbr:
$(CPP) $(CPP_PROJ) $<
################################################################################
# Begin Target
# Name "sprgen - Win32 Release"
# Name "sprgen - Win32 Debug"
!IF "$(CFG)" == "sprgen - Win32 Release"
!ELSEIF "$(CFG)" == "sprgen - Win32 Debug"
!ENDIF
################################################################################
# Begin Source File
SOURCE=.\sprgen.c
!IF "$(CFG)" == "sprgen - Win32 Release"
DEP_CPP_SPRGE=\
".\spritegn.h"\
".\..\common\cmdlib.h"\
".\..\common\scriplib.h"\
".\..\common\lbmlib.h"\
"$(INTDIR)\sprgen.obj" : $(SOURCE) $(DEP_CPP_SPRGE) "$(INTDIR)"
!ELSEIF "$(CFG)" == "sprgen - Win32 Debug"
DEP_CPP_SPRGE=\
".\spritegn.h"\
".\..\common\cmdlib.h"\
"$(INTDIR)\sprgen.obj" : $(SOURCE) $(DEP_CPP_SPRGE) "$(INTDIR)"
!ENDIF
# End Source File
################################################################################
# Begin Source File
SOURCE=\quake\utils2\common\cmdlib.c
DEP_CPP_CMDLI=\
".\..\common\cmdlib.h"\
{$(INCLUDE)}"\sys\TYPES.H"\
{$(INCLUDE)}"\sys\STAT.H"\
"$(INTDIR)\cmdlib.obj" : $(SOURCE) $(DEP_CPP_CMDLI) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
# End Source File
################################################################################
# Begin Source File
SOURCE=\quake\utils2\common\scriplib.c
DEP_CPP_SCRIP=\
".\..\common\cmdlib.h"\
".\..\common\scriplib.h"\
"$(INTDIR)\scriplib.obj" : $(SOURCE) $(DEP_CPP_SCRIP) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
# End Source File
################################################################################
# Begin Source File
SOURCE=\quake\utils2\common\lbmlib.c
DEP_CPP_LBMLI=\
".\..\common\cmdlib.h"\
".\..\common\lbmlib.h"\
"$(INTDIR)\lbmlib.obj" : $(SOURCE) $(DEP_CPP_LBMLI) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
# End Source File
################################################################################
# Begin Source File
SOURCE=\quake\utils2\common\scriplib.h
!IF "$(CFG)" == "sprgen - Win32 Release"
!ELSEIF "$(CFG)" == "sprgen - Win32 Debug"
!ENDIF
# End Source File
################################################################################
# Begin Source File
SOURCE=\quake\utils2\common\lbmlib.h
!IF "$(CFG)" == "sprgen - Win32 Release"
!ELSEIF "$(CFG)" == "sprgen - Win32 Debug"
!ENDIF
# End Source File
################################################################################
# Begin Source File
SOURCE=\quake\utils2\common\cmdlib.h
!IF "$(CFG)" == "sprgen - Win32 Release"
!ELSEIF "$(CFG)" == "sprgen - Win32 Debug"
!ENDIF
# End Source File
# End Target
# End Project
################################################################################

BIN
qutils/SPRGEN/SPRGEN.MDP Normal file

Binary file not shown.

BIN
qutils/SPRGEN/SPRGEN.NCB Normal file

Binary file not shown.

88
qutils/SPRGEN/SPRITEGN.H Normal file
View File

@@ -0,0 +1,88 @@
//
// spritegn.h: header file for sprite generation program
//
// **********************************************************
// * This file must be identical in the spritegen directory *
// * and in the Quake directory, because it's used to *
// * pass data from one to the other via .spr files. *
// **********************************************************
//-------------------------------------------------------
// This program generates .spr sprite package files.
// The format of the files is as follows:
//
// dsprite_t file header structure
// <repeat dsprite_t.numframes times>
// <if spritegroup, repeat dspritegroup_t.numframes times>
// dspriteframe_t frame header structure
// sprite bitmap
// <else (single sprite frame)>
// dspriteframe_t frame header structure
// sprite bitmap
// <endrepeat>
//-------------------------------------------------------
#ifdef INCLUDELIBS
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <string.h>
#include "cmdlib.h"
#include "scriplib.h"
#include "lbmlib.h"
#endif
#define SPRITE_VERSION 1
// must match definition in modelgen.h
#ifndef SYNCTYPE_T
#define SYNCTYPE_T
typedef enum {ST_SYNC=0, ST_RAND } synctype_t;
#endif
// TODO: shorten these?
typedef struct {
int ident;
int version;
int type;
float boundingradius;
int width;
int height;
int numframes;
float beamlength;
synctype_t synctype;
} dsprite_t;
#define SPR_VP_PARALLEL_UPRIGHT 0
#define SPR_FACING_UPRIGHT 1
#define SPR_VP_PARALLEL 2
#define SPR_ORIENTED 3
#define SPR_VP_PARALLEL_ORIENTED 4
typedef struct {
int origin[2];
int width;
int height;
} dspriteframe_t;
typedef struct {
int numframes;
} dspritegroup_t;
typedef struct {
float interval;
} dspriteinterval_t;
typedef enum { SPR_SINGLE=0, SPR_GROUP } spriteframetype_t;
typedef struct {
spriteframetype_t type;
} dspriteframetype_t;
#define IDSPRITEHEADER (('P'<<24)+('S'<<16)+('D'<<8)+'I')
// little-endian "IDSP"

BIN
qutils/SPRGEN/S_BUBBLE.SPR Normal file

Binary file not shown.

BIN
qutils/SPRGEN/S_EXPLOD.SPR Normal file

Binary file not shown.

BIN
qutils/SPRGEN/S_LIGHT.SPR Normal file

Binary file not shown.