GBDK 2020 Docs  4.1.1
API Documentation for GBDK 2020
metasprites.h
Go to the documentation of this file.
1 
58 #ifndef _METASPRITES_H_INCLUDE
59 #define _METASPRITES_H_INCLUDE
60 
61 #include <nes/hardware.h>
62 #include <types.h>
63 #include <stdint.h>
64 
78 typedef struct metasprite_t {
79  int8_t dy, dx;
80  uint8_t dtile;
81  uint8_t props;
83 
84 #define metasprite_end -128
85 #define METASPR_ITEM(dy,dx,dt,a) {(dy),(dx),(dt),(a)}
86 #define METASPR_TERM {metasprite_end}
87 
88 extern const void * __current_metasprite;
92 
93 
94 static uint8_t __move_metasprite(uint8_t id, int16_t x, int16_t y) OLDCALL;
95 static uint8_t __move_metasprite_flipx(uint8_t id, int16_t x, int16_t y) OLDCALL;
96 static uint8_t __move_metasprite_flipy(uint8_t id, int16_t x, int16_t y) OLDCALL;
97 static uint8_t __move_metasprite_flipxy(uint8_t id, int16_t x, int16_t y) OLDCALL;
98 static uint8_t __move_metasprite_vflip(uint8_t id, int16_t x, int16_t y) OLDCALL;
99 static uint8_t __move_metasprite_hflip(uint8_t id, int16_t x, int16_t y) OLDCALL;
100 static uint8_t __move_metasprite_hvflip(uint8_t id, int16_t x, int16_t y) OLDCALL;
101 static void __hide_metasprite(uint8_t id) OLDCALL;
102 
109 
133 inline uint8_t move_metasprite_ex(const metasprite_t * metasprite, uint8_t base_tile, uint8_t base_prop, uint8_t base_sprite, int16_t x, int16_t y) {
134  base_prop;
135  __current_metasprite = metasprite;
136  __current_base_tile = base_tile;
137  __current_base_prop = base_prop;
138  return __move_metasprite(base_sprite, x, y);
139 }
140 
143 inline uint8_t move_metasprite(const metasprite_t * metasprite, uint8_t base_tile, uint8_t base_sprite, int16_t x, int16_t y) {
144  __current_metasprite = metasprite;
145  __current_base_tile = base_tile;
147  return __move_metasprite(base_sprite, x, y);
148 }
149 
172 inline uint8_t move_metasprite_flipx(const metasprite_t * metasprite, uint8_t base_tile, uint8_t base_prop, uint8_t base_sprite, int16_t x, int16_t y) {
173  base_prop;
174  __current_metasprite = metasprite;
175  __current_base_tile = base_tile;
176  __current_base_prop = base_prop;
177  return __move_metasprite_flipx(base_sprite, x - 8, y);
178 }
179 
182 inline uint8_t move_metasprite_vflip(const metasprite_t * metasprite, uint8_t base_tile, uint8_t base_sprite, int16_t x, int16_t y) {
183  __current_metasprite = metasprite;
184  __current_base_tile = base_tile;
186  return __move_metasprite_vflip(base_sprite, x - 8, y);
187 }
188 
189 
212 inline uint8_t move_metasprite_flipy(const metasprite_t * metasprite, uint8_t base_tile, uint8_t base_prop, uint8_t base_sprite, int16_t x, int16_t y) {
213  base_prop;
214  __current_metasprite = metasprite;
215  __current_base_tile = base_tile;
216  __current_base_prop = base_prop;
217  return __move_metasprite_flipy(base_sprite, x, y - ((shadow_PPUCTRL & PPUCTRL_SPR_8X16) ? 16 : 8) );
218 }
219 
222 inline uint8_t move_metasprite_hflip(const metasprite_t * metasprite, uint8_t base_tile, uint8_t base_sprite, int16_t x, int16_t y) {
223  __current_metasprite = metasprite;
224  __current_base_tile = base_tile;
226  return __move_metasprite_hflip(base_sprite, x, y - ((shadow_PPUCTRL & PPUCTRL_SPR_8X16) ? 16 : 8) );
227 }
228 
251 inline uint8_t move_metasprite_flipxy(const metasprite_t * metasprite, uint8_t base_tile, uint8_t base_prop, uint8_t base_sprite, int16_t x, int16_t y) {
252  base_prop;
253  __current_metasprite = metasprite;
254  __current_base_tile = base_tile;
255  __current_base_prop = base_prop;
256  return __move_metasprite_flipxy(base_sprite, x - 8, y - ((shadow_PPUCTRL & PPUCTRL_SPR_8X16) ? 16 : 8));
257 }
258 
261 inline uint8_t move_metasprite_hvflip(const metasprite_t * metasprite, uint8_t base_tile, uint8_t base_sprite, int16_t x, int16_t y) {
262  __current_metasprite = metasprite;
263  __current_base_tile = base_tile;
265  return __move_metasprite_hvflip(base_sprite, x - 8, y - ((shadow_PPUCTRL & PPUCTRL_SPR_8X16) ? 16 : 8));
266 }
267 
277 inline void hide_metasprite(const metasprite_t * metasprite, uint8_t base_sprite) {
278  __current_metasprite = metasprite;
279  __hide_metasprite(base_sprite);
280 }
281 
282 #endif
unsigned char UINT8
Definition: types.h:49
#define OLDCALL
Definition: types.h:21
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:184
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:265
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:234
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:274
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:225
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:144
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:153
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:193
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:290
#define PPUCTRL_SPR_8X16
Definition: hardware.h:16
__SHADOW_REG shadow_PPUCTRL
Definition: hardware.h:20
short int int16_t
Definition: stdint.h:44
unsigned char uint8_t
Definition: stdint.h:51
signed char int8_t
Definition: stdint.h:43
Definition: metasprites.h:87
int8_t dy
Definition: metasprites.h:88
int8_t dx
Definition: metasprites.h:88
uint8_t props
Definition: metasprites.h:90
uint8_t dtile
Definition: metasprites.h:89