====== drawing_funcs.h ====== drawing_funcs.h provides functions and macros related to putting stuff on the screen! ===== Defines ===== ==== Sprite flips ==== * SPRITE_FLIP_NONE - Apply no sprite flip * SPRITE_FLIP_X - Apply horizontal sprite flipping * SPRITE_FLIP_Y - Apply vertical sprite flipping * SPRITE_FLIP_BOTH - Apply sprite flipping on both axes ==== Sprite RAM Sections ==== * QUADRANT_0 - Upper left quadrant of Sprite RAM page * QUADRANT_1 - Upper right quadrant of Sprite RAM page * QUADRANT_2 - Bottom left quadrant of Sprite RAM page * QUADRANT_3 - Bottom right quadrant of Sprite RAM page ===== Functions ===== ==== load_spritesheet ==== void load_spritesheet(char* spriteData, char srcBank, char ramBank); Decompresses sprite data and places it into Sprite RAM. * spriteData - pointer to start of compressed sprite data * srcBank - bank number on flash cartridge * ramBank - section number of Sprite RAM to load into Can also be use with only two apparent arguments, using the asset macros generated by "make import". load_spritesheet(&ASSET__gfx__mysprite_bmp, 0); ==== load_big_spritesheet ==== #define load_big_spritesheet(NAME,BANK) Macro that calls load_spritesheet four times to load an images that spans a full Sprite RAM page. * NAME - Use a generated asset macro from "make import", assumed to be larger than 128 pixels in both width and height. * BANK - section number of Sprite RAM to load into ==== clear_spritebank ==== void clear_spritebank(char bank); * bank - section number of Sprite RAM to zero out Fill a 128x128 Sprite RAM bank with zero-value pixels. ==== draw_sprite_frame ==== void draw_sprite_frame(const Frame *sprite_table, char sprite_table_bank, char x, char y, char frame, char flip, char bank); * sprite_table - pointer to frame bounding boxes array * sprite_table_bank - bank number where sprite_table is stored * x - location on screen to place sprite center * y - location on screen to place sprite center * frame - frame number in bounding boxes list * flip - bitmask for sprite flipping * bank - (bitmask) which framebuffer page to draw on and which Sprite RAM page to use Draws a packed sprite as exported from Aseprite with a given X,Y position and frame number. Drawing operation is added to the drawing queue if a drawing is already in progress. ==== draw_sprite ==== #define draw_sprite(X,Y,W,H,GX,GY,RAMBANK) * X, Y - position on screen to draw (upper left corner) * W, H - width and height to draw * GX,GY - position (upper left corner) of source in Sprite RAM * RAMBANK - Which Sprite RAM bank to use Macro that sets a temporary rect variable and then calls draw_sprite_rect(); ==== draw_tile ==== #define draw_tile(X,Y,W,H,GX,GY,RAMBANK) * X, Y - position on screen to draw (upper left corner) * W, H - width and height to draw * GX,GY - position (upper left corner) of source in Sprite RAM * RAMBANK - Which Sprite RAM bank to use Macro that sets a temporary rect variable and then calls draw_sprite_rect(), with tiling mode enabled. Source data will repeat over a 16x16 square. ==== draw_box ==== void draw_box(unsigned char x, unsigned char y, unsigned char w, unsigned char h, unsigned char c); * x, y - position on screen to draw (upper left corner) * w, h - width and height to draw * c - color byte to use Draws a solid color box, submitting the operation to the drawing queue and starting it if the queue isn't already processing. ==== next_draw_queue ==== void next_draw_queue(); If there are draw operations in the queue but the queue is not running, this function starts the queue processing. ==== await_draw_queue ==== void await_draw_queue(); If the drawing queue is running then this function loops and returns when the drawing queue finishes. ==== clear_border ==== void clear_border(char c); * c - the color to use Draws a border color around the screen. Uses the draw queue. ==== clear_screen ==== void clear_screen(char c); * c - color to use Clear the screen to a background color. Uses the draw queue. ==== draw_box_now ==== void draw_box_now(char x, char y, char w, char h, char c); Draws a colored box the same way as draw_box but skips/ignores/interrupts the draw queue. ==== draw_sprite_now ==== void draw_sprite_now(char x, char y, char w, char h, char gx, char gy, char ramBank); Draw a sprite immediately, skipping/ignoring/interrupting the draw queue. ==== draw_tiles_now ==== void draw_tiles_now(char x, char y, char w, char h, char gx, char gy, char ramBank); ==== draw_fade ==== void draw_fade(unsigned char opacity); Draws a repeated dither fade pattern across the whole screen. (Makes some very particular assumptions about what sprite data you've loaded and where? Need to check this) ==== printnum ==== void printnum(int num); ==== print_hex_num ==== void print_hex_num(char num); ==== print ==== void print(char* str);