/*
Copyright (C) 1996-1997 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.

*/
//
// 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 "dictlib.h"
#include "trilib.h"
#include "lbmlib.h"
#include "mathlib.h"

#endif

#define SPRITE_VERSION	1
#define SPRITEHL_VERSION	2
#define SPRITE32_VERSION	32

// 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;
	//int		rendermode;	//present only in halflife sprites.
	float		boundingradius;
	int			width;
	int			height;
	int			numframes;
	float		beamlength;
	synctype_t	synctype;
} dsprite_t;

#define SPR_VP_PARALLEL_UPRIGHT		0	//xy faces view. z is always up.
#define SPR_FACING_UPRIGHT			1	//xy faces view. z is always up.
#define SPR_VP_PARALLEL				2	//faces camera (traditional sprite)
#define SPR_ORIENTED				3	//uses axis
#define SPR_VP_PARALLEL_ORIENTED	4	//faces camera *then* rotated
#define SPRDP_LABEL					5
#define SPRDP_LABEL_SCALE			6
#define SPRDP_OVERHEAD				7

#define SPR_ORIENTED_BACKFACE		8	//SPR_ORIENTED except facing along its normal...

#define SPRHL_OPAQUE	0
#define SPRHL_ADDITIVE	1
#define SPRHL_INDEXALPHA	2
#define SPRHL_ALPHATEST	3

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, SPR_ANGLED } spriteframetype_t;

typedef struct {
	spriteframetype_t	type;
} dspriteframetype_t;

#define IDSPRITEHEADER	"IDSP",4
														// little-endian "IDSP"








#define MAX_SKINNAME 64
#define IDSPRITE2HEADER	"IDS2",4
		// little-endian "IDS2"
#define SPRITE2_VERSION	2

typedef struct
{
	int		width, height;
	int		origin_x, origin_y;		// raster coordinates inside pic
	char	name[MAX_SKINNAME];		// name of pcx file
} dmd2sprframe_t;

typedef struct {
	int			ident;
	int			version;
	int			numframes;
	dmd2sprframe_t	frames[1];			// variable sized
} dmd2sprite_t;


