/***
*
*	Copyright (c) 1996-2002, Valve LLC. All rights reserved.
*	
*	This product contains software technology licensed from Id 
*	Software, Inc. ("Id Technology").  Id Technology (c) 1996 Id Software, Inc. 
*	All Rights Reserved.
*
*   Use, distribution, and modification of this source code and/or resulting
*   object code is restricted to non-commercial enhancements to products from
*   Valve LLC.  All other use, distribution, or modification is prohibited
*   without written permission from Valve LLC.
*
****/

#ifndef ALIAS_H
#define ALIAS_H

/*
==============================================================================

ALIAS MODELS

Alias models are position independent, so the cache manager can move them.
==============================================================================
*/

#define IDALIASHEADER	(('O'<<24)+('P'<<16)+('D'<<8)+'I')	// little-endian "IDPO"

#define ALIAS_VERSION	6

// client-side model flags
#define ALIAS_ROCKET		0x0001	// leave a trail
#define ALIAS_GRENADE		0x0002	// leave a trail
#define ALIAS_GIB			0x0004	// leave a trail
#define ALIAS_ROTATE		0x0008	// rotate (bonus items)
#define ALIAS_TRACER		0x0010	// green split trail
#define ALIAS_ZOMGIB		0x0020	// small blood trail
#define ALIAS_TRACER2		0x0040	// orange split trail + rotate
#define ALIAS_TRACER3		0x0080	// purple trail

// must match definition in sprite.h
#ifndef SYNCTYPE_T
#define SYNCTYPE_T
typedef enum
{
	ST_SYNC = 0,
	ST_RAND
} synctype_t;
#endif

typedef enum
{
	ALIAS_SINGLE = 0,
	ALIAS_GROUP
} aliasframetype_t;

typedef enum
{
	ALIAS_SKIN_SINGLE = 0,
	ALIAS_SKIN_GROUP
} aliasskintype_t;

typedef struct
{
	int		ident;
	int		version;
	vec3_t		scale;
	vec3_t		scale_origin;
	float		boundingradius;
	vec3_t		eyeposition;
	int		numskins;
	int		skinwidth;
	int		skinheight;
	int		numverts;
	int		numtris;
	int		numframes;
	synctype_t	synctype;
	int		flags;
	float		size;
} daliashdr_t;

typedef struct
{
	int		onseam;
	int		s;
	int		t;
} stvert_t;

typedef struct dtriangle_s
{
	int		facesfront;
	int		vertindex[3];
} dtriangle_t;

#define DT_FACES_FRONT	0x0010
#define ALIAS_ONSEAM	0x0020

typedef struct
{
	trivertex_t	bboxmin;	// lightnormal isn't used
	trivertex_t	bboxmax;	// lightnormal isn't used
	char		name[16];	// frame name from grabbing
} daliasframe_t;

typedef struct
{
	int		numframes;
	trivertex_t	bboxmin;	// lightnormal isn't used
	trivertex_t	bboxmax;	// lightnormal isn't used
} daliasgroup_t;

typedef struct
{
	int		numskins;
} daliasskingroup_t;

typedef struct
{
	float		interval;
} daliasinterval_t;

typedef struct
{
	float		interval;
} daliasskininterval_t;

typedef struct
{
	aliasframetype_t	type;
} daliasframetype_t;

typedef struct
{
	aliasskintype_t	type;
} daliasskintype_t;

#endif//ALIAS_H