gbdk-2020 | GameBoy Development Kit |
| download: https://git.y1.nz/archives/gbdk.tar.gz | |
| README | Files | Log | Refs | LICENSE |
gbdk-lib/include/msx/metasprites.h
1 /** @file sms/metasprites.h
2
3 # Metasprite support
4
5 A metasprite is a larger sprite made up from a
6 collection of smaller individual hardware sprites.
7 Different frames of the same metasprites can share
8 tile data.
9
10 See the main @ref metasprite_main_docs "metasprite docs"
11 under the game Boy platform for additional details.
12 */
13
14 #ifndef _METASPRITES_H_INCLUDE
15 #define _METASPRITES_H_INCLUDE
16
17 #include <msx/hardware.h>
18 #include <types.h>
19 #include <stdint.h>
20
21 /** Metasprite sub-item structure
22 @param dy (int8_t) Y coordinate of the sprite relative to the metasprite origin (pivot)
23 @param dx (int8_t) X coordinate of the sprite relative to the metasprite origin (pivot)
24 @param dtile (uint8_t) Start tile relative to the metasprites own set of tiles
25 @param props (uint8_t) Property Flags
26
27 Metasprites are built from multiple metasprite_t items (one for each sub-sprite)
28 and a pool of tiles they reference. If a metasprite has multiple frames then each
29 frame will be built from some number of metasprite_t items (which may vary based
30 on how many sprites are required for that particular frame).
31
32 A metasprite frame is terminated with a {metasprite_end} entry.
33 */
34 typedef struct metasprite_t {
35 int8_t dy, dx;
36 uint8_t dtile;
37 uint8_t props;
38 } metasprite_t;
39
40 #define metasprite_end -128
41 #define METASPR_ITEM(dy,dx,dt,a) {(dy),(dx),(dt),(a)}
42 #define METASPR_TERM {metasprite_end}
43
44 extern const void * __current_metasprite;
45 extern uint8_t __current_base_tile;
46 extern uint8_t __render_shadow_OAM;
47
48
49 static uint8_t __move_metasprite(uint8_t id, uint8_t x, uint8_t y) Z88DK_CALLEE PRESERVES_REGS(iyh, iyl);
50 static void __hide_metasprite(uint8_t id) Z88DK_FASTCALL PRESERVES_REGS(iyh, iyl);
51
52 /**
53 * Hides all hardware sprites in range from <= X < to
54 * @param from start OAM index
55 * @param to finish OAM index
56 */
57 void hide_sprites_range(uint8_t from, uint8_t to) Z88DK_CALLEE PRESERVES_REGS(iyh, iyl);
58
59 /** Moves metasprite to the absolute position x and y
60
61 @param metasprite Pointer to the first struct of the metasprite (for the desired frame)
62 @param base_tile Number of the first tile where the metasprite's tiles start
63 @param base_prop Base sprite property flags (unused on this platform)
64 @param base_sprite Number of the first hardware sprite to be used by the metasprite
65 @param x Absolute x coordinate of the sprite
66 @param y Absolute y coordinate of the sprite
67
68 Moves __metasprite__ to the absolute position __x__ and __y__
69 (with __no flip__ on the X or Y axis). Hardware sprites are
70 allocated starting from __base_sprite__, using tiles
71 starting from __base_tile__.
72
73 Sets:
74 \li __current_metasprite = metasprite;
75 \li __current_base_tile = base_tile;
76
77 @return Number of hardware sprites used to draw this metasprite
78 */
79 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) {
80 base_prop;
81 __current_metasprite = metasprite;
82 __current_base_tile = base_tile;
83 return __move_metasprite(base_sprite, x, y);
84 }
85
86 /** Obsolete
87 */
88 inline uint8_t move_metasprite(const metasprite_t * metasprite, uint8_t base_tile, uint8_t base_sprite, uint8_t x, uint8_t y) {
89 __current_metasprite = metasprite;
90 __current_base_tile = base_tile;
91 return __move_metasprite(base_sprite, x, y);
92 }
93
94
95 /** Hides a metasprite from the screen
96
97 @param metasprite Pointer to first struct of the desired metasprite frame
98 @param base_sprite Number of hardware sprite to start with
99
100 Sets:
101 \li __current_metasprite = metasprite;
102
103 **/
104 inline void hide_metasprite(const metasprite_t * metasprite, uint8_t base_sprite) {
105 __current_metasprite = metasprite;
106 __hide_metasprite(base_sprite);
107 }
108
109 #endif
This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.