GBDK 2020 Docs  4.2.0
API Documentation for GBDK 2020
metasprites.h
Go to the documentation of this file.
1 
14 #ifndef _METASPRITES_H_INCLUDE
15 #define _METASPRITES_H_INCLUDE
16 
17 #include <sms/hardware.h>
18 #include <types.h>
19 #include <stdint.h>
20 
33 typedef struct metasprite_t {
34  int8_t dy, dx;
35  uint8_t dtile;
37 
38 #define metasprite_end -128
39 #define METASPR_ITEM(dy,dx,dt,a) {(dy),(dx),(dt)}
40 #define METASPR_TERM {metasprite_end}
41 
42 extern const void * __current_metasprite;
45 
46 
47 static uint8_t __move_metasprite(uint8_t id, uint16_t x, uint16_t y);
48 static uint8_t __move_metasprite_flipx(uint8_t id, uint16_t x, uint16_t y);
49 static uint8_t __move_metasprite_flipy(uint8_t id, uint16_t x, uint16_t y);
50 static uint8_t __move_metasprite_flipxy(uint8_t id, uint16_t x, uint16_t y);
51 static void __hide_metasprite(uint8_t id) Z88DK_FASTCALL PRESERVES_REGS(iyh, iyl);
52 
59 
80 inline uint8_t move_metasprite_ex(const metasprite_t * metasprite, uint8_t base_tile, uint8_t base_prop, uint8_t base_sprite, uint16_t x, uint16_t y) {
81  base_prop;
82  __current_metasprite = metasprite;
83  __current_base_tile = base_tile;
84  return __move_metasprite(base_sprite, x, y);
85 }
86 
89 inline uint8_t move_metasprite(const metasprite_t * metasprite, uint8_t base_tile, uint8_t base_sprite, uint16_t x, uint16_t y) {
90  __current_metasprite = metasprite;
91  __current_base_tile = base_tile;
92  return __move_metasprite(base_sprite, x, y);
93 }
94 
117 inline uint8_t move_metasprite_flipx(const metasprite_t * metasprite, uint8_t base_tile, uint8_t base_prop, uint8_t base_sprite, uint16_t x, uint16_t y) {
118  base_prop;
119  __current_metasprite = metasprite;
120  __current_base_tile = base_tile;
121  return __move_metasprite_flipx(base_sprite, x - 8, y);
122 }
123 
146 inline uint8_t move_metasprite_flipy(const metasprite_t * metasprite, uint8_t base_tile, uint8_t base_prop, uint8_t base_sprite, uint16_t x, uint16_t y) {
147  base_prop;
148  __current_metasprite = metasprite;
149  __current_base_tile = base_tile;
150  return __move_metasprite_flipy(base_sprite, x, y - ((__READ_VDP_REG(VDP_R1) & R1_SPR_8X16) ? 16 : 8) );
151 }
152 
175 inline uint8_t move_metasprite_flipxy(const metasprite_t * metasprite, uint8_t base_tile, uint8_t base_prop, uint8_t base_sprite, uint16_t x, uint16_t y) {
176  base_prop;
177  __current_metasprite = metasprite;
178  __current_base_tile = base_tile;
179  return __move_metasprite_flipxy(base_sprite, x - 8, y - ((__READ_VDP_REG(VDP_R1) & R1_SPR_8X16) ? 16 : 8));
180 }
181 
191 inline void hide_metasprite(const metasprite_t * metasprite, uint8_t base_sprite) {
192  __current_metasprite = metasprite;
193  __hide_metasprite(base_sprite);
194 }
195 
196 #endif
unsigned char UINT8
Definition: types.h:49
#define PRESERVES_REGS(...)
Definition: types.h:32
#define Z88DK_FASTCALL
Definition: types.h:46
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 __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
const void * __current_metasprite
struct metasprite_t metasprite_t
void hide_sprites_range(UINT8 from, UINT8 to)
void hide_metasprite(const metasprite_t *metasprite, uint8_t base_sprite)
Definition: metasprites.h:296
#define VDP_R1
Definition: hardware.h:73
static uint8_t iyl
Definition: metasprites.h:49
#define __READ_VDP_REG(REG)
Definition: msx.h:92
void iyh
Definition: msx.h:94
#define R1_SPR_8X16
Definition: hardware.h:83
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 dtile
Definition: metasprites.h:95