#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                       // CSpriteBase
#define SPT_COLOR                       1                       // CSpriteColor
#define SPT_DITHER_COLOR        2                       // CSpriteDitherColor
#define SPT_THICK                       3                       // CSpriteT
#define SPT_PLANAR_SYMMETRY 4                   // CSpritePtPt
#define SPT_TRANSFORM_ON        5                       // CSpriteBase
#define SPT_TRANSFORM_OFF       6                       // CSpriteBase
#define SPT_SHIFT                       7                       // CSpritePt
#define SPT_PT                          8                       // CSpritePt
#define SPT_POLYPT                      9                       // CSpriteNumPtU8s
#define SPT_LINE                        10                      // CSpritePtPt
#define SPT_POLYLINE            11                      // CSpriteNumU8s
#define SPT_RECT                        12                      // CSpritePtPt
#define SPT_ROTATED_RECT        13                      // CSpritePtPtAng
#define SPT_CIRCLE                      14                      // CSpritePtRad
#define SPT_ELLIPSE             15                      // CSpritePtWHAng
#define SPT_POLYGON             16                      // CSpritePtWHAngSides
#define SPT_BSPLINE2            17                      // CSpriteNumU8s
#define SPT_BSPLINE2_CLOSED 18                  // CSpriteNumU8s
#define SPT_BSPLINE3            19                      // CSpriteNumU8s
#define SPT_BSPLINE3_CLOSED 20                  // CSpriteNumU8s
#define SPT_FLOOD_FILL          21                      // CSpritePt
#define SPT_FLOOD_FILL_NOT      22                      // CSpritePt
#define SPT_BITMAP                      23                      // CSpritePtWHU8s
#define SPT_MESH                        24                      // CSpriteMeshU8s   See ::/Apps/GrModels.
#define SPT_SHIFTABLE_MESH      25                      // CSpritePtMeshU8s See ::/Apps/GrModels.
#define SPT_ARROW                       26                      // CSpritePtPt
#define SPT_TEXT                        27                      // CSpritePtStr
#define SPT_TEXT_BOX            28                      // CSpritePtStr
#define SPT_TEXT_DIAMOND        29                      // CSpritePtStr
#define SPT_TYPES_NUM           30
#define SPG_TYPE_MASK           0x7F

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

// See Sprites. See ::/System/Gr/GrSpritePlot.CC and
// ::/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;
        }
};