16.2 Data Structures and Attributes

UP


16.2.1 Bitmap Structure

Following is the actual structure of a single bitmap:

typedef struct bitmap {
        s16 width;          /* Size across to draw in texels */
                            /* Done if width = 0 */
        s16 width_img;      /* Actual size across in texels */
        s16 s;              /* Horizontal offset into bitmap */
                            /* if (s > width_img), then load only! */
        s16 t;              /* Vertical offset into base */
        void *buf           /* Pointer to bitmap data */
                            /* Don't re-load if new buf */
                            /* is the same as the old one */
                            /* Skip if NULL */
        s16 actualHeight;   /* True Height of this bitmap piece */
        s16 LUToffset;      /* LUT base index (for 4-bit CI Texs) */
} Bitmap;

UP


16.2.2 Sprite Structure

typedef struct sprite {
    s16     x, y;                       /* Target position */
    s16     width, height;              /* Target size (before scaling */
    f32     scalex, scaley;             /* Texel to Pixel scale factor */
    s16     expx, expy;                 /* Explosion spacing */
    u16     attr;                       /* Attribute Flags */
    s16     zdepth;                     /* Z Depth */
    u8      red, green, blue, alpha;    /* Primitive Color */
    u16     startTLUT;                  /* Lookup Table Entry Starting index */
    s16     nTLUT;                      /* Total number of LUT Entries */
    s16     *LUT;                       /* Pointer to Lookup Table */
    s16     istart;                     /* Starting bitmap index */
    s16     istep;                      /* Bitmaps index step (see SP_INCY) */
                                        /* if 0, then variable width bitmaps */
    s16     nbitmaps;                   /* Total number of bitmaps */
    s16     ndisplist;                  /* Total number of display-list words */
    s16     bmheight;                   /* Bitmap Texel height (Used) */
    s16     bmHreal;                    /* Bitmap Texel height (Real) */
    u8      bmfmt;                      /* Bitmap Format */
    u8      bmsiz;                      /* Bitmap Texel Size */
    Bitmap  *bitmap;                    /* Pointer to first bitmap */
    Gfx     *rsp_dl;                    /* Pointer to RSP display list */
    Gfx     *rsp_dl_next;               /* Pointer to next RSP DL entry */
} Sprite; 

UP


16.2.3 Attributes

Sprite attributes permit sprites to be used in a variety of different ways. The following detailed description of each attribute indicates how setting or clearing that attribute affects the appearance of the drawn sprite. Note also that these attributes are as independent as possible, thus greatly expanding the available variety and uses for sprites.

SP_TRANSPARENT
This attribute permits the Alpha blending of the sprite texture with the background.
SP_CUTOUT
Use alpha comparison hardware not to draw pixels with an alpha less than the blend color alpha (automatically set to 1).
SP_HIDDEN
This attribute makes spDraw() on the sprite return without generating a display list.
SP_Z
This attribute specifies that Z buffer should be on while drawing the sprite.
SP_SCALE
This attribute specifies that the sprite should be scaled in both X and Y by the amount indicated in scalex and scaley.
SP_FASTCOPY
This attribute indicates that the sprite should be drawn in COPY mode. This produces the fastest possible drawing speed for background clears.
SP_TEXSHIFT
This attribute indicates that textures are to be shifted exactly 1/2 texel in both s and t before drawing it. This creates a better antialiased (less aliased) edge along transparent texture boundaries when in cutout mode.
SP_FRACPOS
This attribute indicates that the frac_s and frac_t fields of the sprite structure are to be used to fine-position the texture into the drawn pixels.
SP_TEXSHUF
This attribute indicates that the tile textures have their odd lines pre-shuffled to work around a LoadTextureBlock() problem. (Please see Section 13, "Texture Mapping" for details on this problem.)
SP_EXTERN
This attribute indicates that existing drawing modes are to be used rather than the drawing modes explicitly set with the sprite routines.

UP