/** * @file affine_background.h * * @brief Utilities for affine background on GBA */ #ifndef AFFINE_BACKGROUND_H #define AFFINE_BACKGROUND_H #include "graphic_utils.h" #include /** * @def AFFINE_BG_IDX * @brief The index of the affine background BGCNT register etc. */ #define AFFINE_BG_IDX 2 /** * @def AFFINE_BG_PAL_LEN * @brief Number of u16 colors available in the palette. */ #define AFFINE_BG_PAL_LEN 16 /** * @def AFFINE_BG_PB * @brief The starting index of the background palette. */ #define AFFINE_BG_PB (PAL_ROW_LEN * 10) /** * @brief An ID to specify background rendering types. */ enum AffineBackgroundID { /** * @brief Display background for the initial splash screen. * * Signifies that no background is currently in use. */ AFFINE_BG_NONE, /** * @brief Display background for main menu. * * Signifies which background to use and provides a higher quality affine * mode to display when there is no game logic. */ AFFINE_BG_MAIN_MENU, /** * @brief Display background for game play. * * Signifies which background to use and provides a lower quality affine * mode to keep resources down during play. */ AFFINE_BG_GAME, }; /** * @brief Initialize resources for affine background rendering */ void affine_background_init(); /** * @brief Interrupt routine to update display on HBLANK */ IWRAM_CODE void affine_background_hblank(); /** * @brief Per-frame update of the affine background */ IWRAM_CODE void affine_background_update(); /** * @brief Update the affine background color * * @param color @ref COLOR to set */ void affine_background_set_color(COLOR color); /** * @brief Set the background palette * * Must be called with an array of size at least @ref AFFINE_BG_PAL_LEN * * @param src pointer to palette to set */ void affine_background_load_palette(const u16* src); /** * @brief Update the background id * * Update the background id by configuring display registers and loading * the image and palette used for the specified id. * * @param new_bg @ref AffineBackgrounID to set */ void affine_background_change_background(enum AffineBackgroundID new_bg); #endif // AFFINE_BACKGROUND_H