Compiled sprites are stored as actual machine code instructions that draw a specific image onto a bitmap, using mov instructions with immediate data values. This is the fastest way to draw a masked image: on my machine drawing compiled sprites is about five times as fast as using draw_sprite() with a regular bitmap. Compiled sprites are big, so if memory is tight you should use RLE sprites instead, and what you can do with them is even more restricted than with RLE sprites, because they don't support clipping. If you try to draw one off the edge of a bitmap, you will corrupt memory and probably crash the system. You can convert bitmaps into compiled sprites at runtime, or you can create compiled sprite structures in grabber datafiles by making a bitmap object and checking the 'Linear Compiled' or 'Mode-X Compiled' buttons.
COMPILED_SPRITE *get_compiled_sprite(BITMAP *bitmap, int planar);
Creates a compiled sprite based on the specified bitmap (which must be a
memory bitmap). Compiled sprites are device-dependent, so you have to
specify whether to compile it into a linear or planar format. Pass FALSE
as the second parameter if you are going to be drawing it onto memory
bitmaps or mode 13h and SVGA screen bitmaps, and pass TRUE if you are
going to draw it onto mode-X or Xtended mode screen bitmaps.
void destroy_compiled_sprite(COMPILED_SPRITE *sprite);
Destroys a compiled sprite structure previously returned by
get_compiled_sprite().
void draw_compiled_sprite(BITMAP *bmp, COMPILED_SPRITE *sprite, int x, int y);
Draws a compiled sprite onto a bitmap at the specified position. The
sprite must have been compiled for the correct type of bitmap (linear or
planar). This function does not support clipping.
Hint: if not being able to clip compiled sprites is a problem, a neat trick is to set up a work surface (memory bitmap, mode-X virtual screen, or whatever) a bit bigger than you really need, and use the middle of it as your screen. That way you can draw slightly off the edge without any trouble...