GBDK 2020 Docs  4.2.0
API Documentation for GBDK 2020
metasprites.h
Go to the documentation of this file.
1 
73 #ifndef _METASPRITES_H_INCLUDE
74 #define _METASPRITES_H_INCLUDE
75 
76 #include <gb/hardware.h>
77 #include <types.h>
78 #include <stdint.h>
79 
93 typedef struct metasprite_t {
98 
99 #define metasprite_end -128
100 #define METASPR_ITEM(dy,dx,dt,a) {(dy),(dx),(dt),(a)}
101 #define METASPR_TERM {metasprite_end}
102 
103 extern const void * __current_metasprite;
107 
108 
109 static uint8_t __move_metasprite(uint8_t id, uint16_t yx);
110 static uint8_t __move_metasprite_flipx(uint8_t id, uint16_t yx);
111 static uint8_t __move_metasprite_flipy(uint8_t id, uint16_t yx);
112 static uint8_t __move_metasprite_flipxy(uint8_t id, uint16_t yx);
113 static uint8_t __move_metasprite_vflip(uint8_t id, uint16_t yx);
114 static uint8_t __move_metasprite_hflip(uint8_t id, uint16_t yx);
115 static uint8_t __move_metasprite_hvflip(uint8_t id, uint16_t yx);
116 static void __hide_metasprite(uint8_t id);
117 
126 
150 inline uint8_t move_metasprite_ex(const metasprite_t * metasprite, uint8_t base_tile, uint8_t base_prop, uint8_t base_sprite, uint8_t x, uint8_t y) {
151  __current_metasprite = metasprite;
152  __current_base_tile = base_tile;
153  __current_base_prop = base_prop;
154  return __move_metasprite(base_sprite, (y << 8) | (uint8_t)x);
155 }
156 
159 inline uint8_t move_metasprite(const metasprite_t * metasprite, uint8_t base_tile, uint8_t base_sprite, uint8_t x, uint8_t y) {
160  __current_metasprite = metasprite;
161  __current_base_tile = base_tile;
163  return __move_metasprite(base_sprite, (y << 8) | (uint8_t)x);
164 }
165 
190 inline uint8_t move_metasprite_flipx(const metasprite_t * metasprite, uint8_t base_tile, uint8_t base_prop, uint8_t base_sprite, uint8_t x, uint8_t y) {
191  __current_metasprite = metasprite;
192  __current_base_tile = base_tile;
193  __current_base_prop = base_prop;
194  return __move_metasprite_flipx(base_sprite, (y << 8) | (uint8_t)(x - 8u));
195 }
196 
199 inline uint8_t move_metasprite_vflip(const metasprite_t * metasprite, uint8_t base_tile, uint8_t base_sprite, uint8_t x, uint8_t y) {
200  __current_metasprite = metasprite;
201  __current_base_tile = base_tile;
203  return __move_metasprite_vflip(base_sprite, (y << 8) | (uint8_t)(x - 8u));
204 }
205 
206 
231 inline uint8_t move_metasprite_flipy(const metasprite_t * metasprite, uint8_t base_tile, uint8_t base_prop, uint8_t base_sprite, uint8_t x, uint8_t y) {
232  __current_metasprite = metasprite;
233  __current_base_tile = base_tile;
234  __current_base_prop = base_prop;
235  return __move_metasprite_flipy(base_sprite, ((y - ((LCDC_REG & LCDCF_OBJ16) ? 16u : 8u)) << 8) | x);
236 }
237 
240 inline uint8_t move_metasprite_hflip(const metasprite_t * metasprite, uint8_t base_tile, uint8_t base_sprite, uint8_t x, uint8_t y) {
241  __current_metasprite = metasprite;
242  __current_base_tile = base_tile;
244  return __move_metasprite_hflip(base_sprite, ((y - ((LCDC_REG & LCDCF_OBJ16) ? 16u : 8u)) << 8) | x);
245 }
246 
271 inline uint8_t move_metasprite_flipxy(const metasprite_t * metasprite, uint8_t base_tile, uint8_t base_prop, uint8_t base_sprite, uint8_t x, uint8_t y) {
272  __current_metasprite = metasprite;
273  __current_base_tile = base_tile;
274  __current_base_prop = base_prop;
275  return __move_metasprite_flipxy(base_sprite, ((y - ((LCDC_REG & LCDCF_OBJ16) ? 16u : 8u)) << 8) | (uint8_t)(x - 8));
276 }
277 
280 inline uint8_t move_metasprite_hvflip(const metasprite_t * metasprite, uint8_t base_tile, uint8_t base_sprite, uint8_t x, uint8_t y) {
281  __current_metasprite = metasprite;
282  __current_base_tile = base_tile;
284  return __move_metasprite_hvflip(base_sprite, ((y - ((LCDC_REG & LCDCF_OBJ16) ? 16u : 8u)) << 8) | (uint8_t)(x - 8));
285 }
286 
296 inline void hide_metasprite(const metasprite_t * metasprite, uint8_t base_sprite) {
297  __current_metasprite = metasprite;
298  __hide_metasprite(base_sprite);
299 }
300 
301 #endif
unsigned char UINT8
Definition: types.h:49
#define LCDCF_OBJ16
Definition: hardware.h:227
__REG LCDC_REG
Definition: hardware.h:162
uint8_t move_metasprite_flipx(const metasprite_t *metasprite, uint8_t base_tile, uint8_t base_prop, uint8_t base_sprite, uint8_t x, uint8_t y)
Definition: metasprites.h:190
uint8_t move_metasprite_flipxy(const metasprite_t *metasprite, uint8_t base_tile, uint8_t base_prop, uint8_t base_sprite, uint8_t x, uint8_t y)
Definition: metasprites.h:271
uint8_t move_metasprite_hflip(const metasprite_t *metasprite, uint8_t base_tile, uint8_t base_sprite, uint8_t x, uint8_t y)
Definition: metasprites.h:240
uint8_t move_metasprite_hvflip(const metasprite_t *metasprite, uint8_t base_tile, uint8_t base_sprite, uint8_t x, uint8_t y)
Definition: metasprites.h:280
uint8_t __current_base_tile
uint8_t __render_shadow_OAM
uint8_t move_metasprite_flipy(const metasprite_t *metasprite, uint8_t base_tile, uint8_t base_prop, uint8_t base_sprite, uint8_t x, uint8_t y)
Definition: metasprites.h:231
uint8_t move_metasprite_ex(const metasprite_t *metasprite, uint8_t base_tile, uint8_t base_prop, uint8_t base_sprite, uint8_t x, uint8_t y)
Definition: metasprites.h:150
uint8_t move_metasprite(const metasprite_t *metasprite, uint8_t base_tile, uint8_t base_sprite, uint8_t x, uint8_t y)
Definition: metasprites.h:159
uint8_t move_metasprite_vflip(const metasprite_t *metasprite, uint8_t base_tile, uint8_t base_sprite, uint8_t x, uint8_t y)
Definition: metasprites.h:199
const void * __current_metasprite
struct metasprite_t metasprite_t
void hide_sprites_range(UINT8 from, UINT8 to)
uint8_t __current_base_prop
void hide_metasprite(const metasprite_t *metasprite, uint8_t base_sprite)
Definition: metasprites.h:296
unsigned char uint8_t
Definition: stdint.h:51
unsigned short int uint16_t
Definition: stdint.h:52
signed char int8_t
Definition: stdint.h:43
Definition: metasprites.h:93
int8_t dy
Definition: metasprites.h:94
int8_t dx
Definition: metasprites.h:94
uint8_t props
Definition: metasprites.h:96
uint8_t dtile
Definition: metasprites.h:95