#help_index "Sprites/Binary"

class CMeshTri
{
	I32 color;		//Give one of 0-7 colors.
						//Colors 8-15 are 0-7 with intensity bit set.
	I32 nums[3];	//Vertex number
};

class CQueueMeshTri
{
	CQueueMeshTri	*next,*last;
	U0				 start;
	I32				 color;
	I32				 nums[3];
};

public class CSpriteBase
{
	U8 type;
};

public class CSpriteColor : CSpriteBase
{
	U8 color;
};

public class CSpriteDitherColor : CSpriteBase
{
	U16 dither_color;
};

public class CSpriteT : CSpriteBase
{
	I32 thick;
};

public class CSpritePt : CSpriteBase
{
	I32 x1;
	I32 y1;
};

public class CSpritePtRad : CSpritePt
{
	I32 radius;
};

public class CSpritePtPt : CSpritePt
{
	I32 x2;
	I32 y2;
};

public class CSpritePtPtAng : CSpritePtPt
{
	F64 angle;
};

public class CSpritePtWH : CSpritePt
{
	I32 width;
	I32 height;
};

public class CSpritePtWHU8s : CSpritePtWH
{
	U8 u[0];
};

public class CSpritePtWHAng : CSpritePtWH
{
	F64 angle;
};

public class CSpritePtWHAngSides : CSpritePtWHAng
{
	I32 sides;
};

public class CSpriteNumU8s : CSpriteBase
{
	I32 num;
	U8	u[0];
};

public class CSpriteNumPtU8s : CSpriteBase
{
	I32 num;
	I32 x;
	I32 y;
	U8	u[0];
};

public class CSpritePtStr : CSpritePt
{
	U8	st[0];
};

public class CSpriteMeshU8s : CSpriteBase
{
	I32 vertex_count;
	I32 tri_count;
	U8	u[0];
};

public class CSpritePtMeshU8s : CSpriteBase
{
	I32 x;
	I32 y;
	I32 z;
	I32 vertex_count;
	I32 tri_count;
	U8	u[0];
};

#define SPF_SEL 	128
#define SPf_SEL 	7

#define SPT_END 			0 			// $LK,"CSpriteBase",A="MN:CSpriteBase"$
#define SPT_COLOR 			1 			// $LK,"CSpriteColor",A="MN:CSpriteColor"$
#define SPT_DITHER_COLOR	2 			// $LK,"CSpriteDitherColor",A="MN:CSpriteDitherColor"$
#define SPT_THICK 			3 			// $LK,"CSpriteT",A="MN:CSpriteT"$
#define SPT_PLANAR_SYMMETRY 4 			// $LK,"CSpritePtPt",A="MN:CSpritePtPt"$
#define SPT_TRANSFORM_ON	5 			// $LK,"CSpriteBase",A="MN:CSpriteBase"$
#define SPT_TRANSFORM_OFF	6 			// $LK,"CSpriteBase",A="MN:CSpriteBase"$
#define SPT_SHIFT 			7 			// $LK,"CSpritePt",A="MN:CSpritePt"$
#define SPT_PT				8 			// $LK,"CSpritePt",A="MN:CSpritePt"$
#define SPT_POLYPT			9 			// $LK,"CSpriteNumPtU8s",A="MN:CSpriteNumPtU8s"$
#define SPT_LINE			10			// $LK,"CSpritePtPt",A="MN:CSpritePtPt"$
#define SPT_POLYLINE		11			// $LK,"CSpriteNumU8s",A="MN:CSpriteNumU8s"$
#define SPT_RECT			12			// $LK,"CSpritePtPt",A="MN:CSpritePtPt"$
#define SPT_ROTATED_RECT	13			// $LK,"CSpritePtPtAng",A="MN:CSpritePtPtAng"$
#define SPT_CIRCLE			14			// $LK,"CSpritePtRad",A="MN:CSpritePtRad"$
#define SPT_ELLIPSE 		15			// $LK,"CSpritePtWHAng",A="MN:CSpritePtWHAng"$
#define SPT_POLYGON 		16			// $LK,"CSpritePtWHAngSides",A="MN:CSpritePtWHAngSides"$
#define SPT_BSPLINE2		17			// $LK,"CSpriteNumU8s",A="MN:CSpriteNumU8s"$
#define SPT_BSPLINE2_CLOSED 18			// $LK,"CSpriteNumU8s",A="MN:CSpriteNumU8s"$
#define SPT_BSPLINE3		19			// $LK,"CSpriteNumU8s",A="MN:CSpriteNumU8s"$
#define SPT_BSPLINE3_CLOSED 20			// $LK,"CSpriteNumU8s",A="MN:CSpriteNumU8s"$
#define SPT_FLOOD_FILL		21			// $LK,"CSpritePt",A="MN:CSpritePt"$
#define SPT_FLOOD_FILL_NOT	22			// $LK,"CSpritePt",A="MN:CSpritePt"$
#define SPT_BITMAP			23			// $LK,"CSpritePtWHU8s",A="MN:CSpritePtWHU8s"$
#define SPT_MESH			24			// $LK,"CSpriteMeshU8s",A="MN:CSpriteMeshU8s"$   See $MA-X+PU,"::/Apps/GrModels",LM="Cd(\"::/Apps/GrModels\");Dir;View;\n"$.
#define SPT_SHIFTABLE_MESH	25			// $LK,"CSpritePtMeshU8s",A="MN:CSpritePtMeshU8s"$ See $MA-X+PU,"::/Apps/GrModels",LM="Cd(\"::/Apps/GrModels\");Dir;View;\n"$.
#define SPT_ARROW 			26			// $LK,"CSpritePtPt",A="MN:CSpritePtPt"$
#define SPT_TEXT			27			// $LK,"CSpritePtStr",A="MN:CSpritePtStr"$
#define SPT_TEXT_BOX		28			// $LK,"CSpritePtStr",A="MN:CSpritePtStr"$
#define SPT_TEXT_DIAMOND	29			// $LK,"CSpritePtStr",A="MN:CSpritePtStr"$
#define SPT_TYPES_NUM 		30
#define SPG_TYPE_MASK 		0x7F

#help_index "Graphics/Sprite;Sprites;Sprites/Binary"

// See $LK,"Sprites",A="HI:Sprites"$.	See $LK,"::/Zenith/Gr/GrSpritePlot.CC",A="FL:::/Zenith/Gr/GrSpritePlot.CC,1"$ and
// $LK,"::/Demo/Graphics/SpriteRaw.CC"$ for how CSprite are stored.
public class CSprite
{
	CSprite	*next,*last;
	U0		 start;
	union
	{
		U8 type;
		CSpriteBase 		b;
		CSpriteColor		c;
		CSpriteDitherColor	d;
		CSpriteT			t;
		CSpritePt 			p;
		CSpritePtPt 		pp;
		CSpritePtPtAng		ppa;
		CSpritePtRad		pr;
		CSpritePtWHU8s		pwhu;
		CSpritePtWHAng		pwha;
		CSpritePtWHAngSides pwhas;
		CSpriteNumU8s 		nu;
		CSpriteNumPtU8s 	npu;
		CSpriteMeshU8s		mu;
		CSpritePtMeshU8s	pmu;
		CSpritePtStr		ps;
	}
};
