sgdk
Loading...
Searching...
No Matches
sprite_eng_legacy.h
Go to the documentation of this file.
1
12#if LEGACY_SPRITE_ENGINE
13
14#ifndef _SPRITE_ENG_LEGACY_H_
15#define _SPRITE_ENG_LEGACY_H_
16
17#include "vdp_tile.h"
18#include "vdp_spr.h"
19#include "pal.h"
20#include "pool.h"
21
22
27#define COLLISION_TYPE_NONE 0
32#define COLLISION_TYPE_BOX 1
37#define COLLISION_TYPE_CIRCLE 2
38
44#define SPR_FLAG_INSERT_HEAD 0x4000
51#define SPR_FLAG_DISABLE_DELAYED_FRAME_UPDATE 0x2000
56#define SPR_FLAG_AUTO_VRAM_ALLOC 0x1000
61#define SPR_FLAG_AUTO_SPRITE_ALLOC 0x0800
66#define SPR_FLAG_AUTO_TILE_UPLOAD 0x0400
71#define SPR_FLAG_AUTO_VISIBILITY 0x0200
78#define SPR_FLAG_FAST_AUTO_VISIBILITY 0x0100
79
84#define SPR_FLAG_MASK (SPR_FLAG_INSERT_HEAD | SPR_FLAG_DISABLE_DELAYED_FRAME_UPDATE | SPR_FLAG_AUTO_VRAM_ALLOC | SPR_FLAG_AUTO_SPRITE_ALLOC | SPR_FLAG_AUTO_TILE_UPLOAD | SPR_FLAG_AUTO_VISIBILITY | SPR_FLAG_FAST_AUTO_VISIBILITY)
85
90#define SPR_MIN_DEPTH (-0x8000)
95#define SPR_MAX_DEPTH 0x7FFF
96
101typedef enum
102{
103 VISIBLE,
104 HIDDEN,
105 AUTO_FAST,
106 AUTO_SLOW,
108
122typedef struct
123{
124 s8 x;
125 s8 y;
126 u8 w;
127 u8 h;
129
141typedef struct
142{
143 s8 x;
144 s8 y;
145 u16 ray;
147
168typedef struct _collision
169{
170 u8 typeHit;
171 u8 typeAttack;
172 union
173 {
174 BoxCollision box;
175 CircleCollision circle;
176 } hit;
177 union
178 {
179 BoxCollision box;
180 CircleCollision circle;
181 } attack;
182} Collision;
183
201typedef struct
202{
203 u8 offsetY; // respect VDP sprite field order, may help
204 u8 offsetYFlip;
205 u8 size;
206 u8 offsetX;
207 u8 offsetXFlip;
208 u8 numTile;
210
226typedef struct
227{
228 u8 numSprite;
229 u8 timer;
230 TileSet* tileset; // TODO: have a tileset per VDP sprite --> probably not a good idea performance wise
231 Collision* collision; // Require many DMA queue operations and fast DMA flush as well, also bring extra computing in calculating delayed update
232 FrameVDPSprite frameVDPSprites[];
234
246typedef struct
247{
248 u8 numFrame;
249 u8 loop;
250 AnimationFrame** frames;
251} Animation;
252
274typedef struct
275{
276 u16 w;
277 u16 h;
278 Palette* palette;
279 u16 numAnimation;
280 Animation** animations;
281 u16 maxNumTile;
282 u16 maxNumSprite;
284
334typedef struct Sprite
335{
336 u16 status;
337 u16 visibility;
338 const SpriteDefinition* definition;
339 void (*onFrameChange)(struct Sprite* sprite);
340 Animation* animation;
341 AnimationFrame* frame;
342 s16 animInd;
343 s16 frameInd;
344 u16 timer;
345 s16 x;
346 s16 y;
347 s16 depth;
348 u16 attribut;
349 u16 VDPSpriteIndex;
350 VDPSprite* lastVDPSprite;
351 u16 lastNumSprite;
352 s16 spriteToHide;
353 u32 data;
354 struct Sprite* prev;
355 struct Sprite* next;
356} Sprite;
357
369typedef void FrameChangeCallback(Sprite* sprite);
370
374extern Pool* spritesPool;
378extern Sprite* firstSprite;
382extern Sprite* lastSprite;
386extern u16 spriteVramSize;
387
388
399void SPR_init(void);
414void SPR_initEx(u16 vramSize);
422void SPR_end(void);
427bool SPR_isInitialized(void);
428
435void SPR_reset(void);
436
486Sprite* SPR_addSpriteEx(const SpriteDefinition* spriteDef, s16 x, s16 y, u16 attribut, u16 spriteIndex, u16 flag);
511Sprite* SPR_addSprite(const SpriteDefinition* spriteDef, s16 x, s16 y, u16 attribut);
559Sprite* SPR_addSpriteExSafe(const SpriteDefinition* spriteDef, s16 x, s16 y, u16 attribut, u16 spriteIndex, u16 flag);
582Sprite* SPR_addSpriteSafe(const SpriteDefinition* spriteDef, s16 x, s16 y, u16 attribut);
583
595void SPR_releaseSprite(Sprite* sprite);
605void SPR_defragVRAM(void);
634u16** SPR_loadAllFrames(const SpriteDefinition* sprDef, u16 index, u16* totalNumTile);
635
650bool SPR_setDefinition(Sprite* sprite, const SpriteDefinition* spriteDef);
672void SPR_setPosition(Sprite* sprite, s16 x, s16 y);
682void SPR_setHFlip(Sprite* sprite, bool value);
692void SPR_setVFlip(Sprite* sprite, bool value);
702void SPR_setPalette(Sprite* sprite, u16 value);
712void SPR_setPriority(Sprite* sprite, bool value);
717#define SPR_setPriorityAttribut(sprite, value) _Pragma("GCC error \"This method is deprecated, use SPR_setPriority(..) instead.\"")
730void SPR_setDepth(Sprite* sprite, s16 value);
735void SPR_setZ(Sprite* sprite, s16 value);
746void SPR_setAlwaysOnTop(Sprite* sprite);
758void SPR_setAnimAndFrame(Sprite* sprite, s16 anim, s16 frame);
768void SPR_setAnim(Sprite* sprite, s16 anim);
778void SPR_setFrame(Sprite* sprite, s16 frame);
786void SPR_nextFrame(Sprite* sprite);
787
802bool SPR_setVRAMTileIndex(Sprite* sprite, s16 value);
820bool SPR_setSpriteTableIndex(Sprite* sprite, s16 value);
831void SPR_setAutoTileUpload(Sprite* sprite, bool value);
844void SPR_setDelayedFrameUpdate(Sprite* sprite, bool value);
861
898bool SPR_isVisible(Sprite* sprite, bool recompute);
899
923void SPR_setVisibility(Sprite* sprite, SpriteVisibility value);
927#define SPR_setAlwaysVisible(sprite, value) _Pragma("GCC error \"This method is deprecated, use SPR_setVisibility(..) instead.\"")
931#define SPR_setNeverVisible(sprite, value) _Pragma("GCC error \"This method is deprecated, use SPR_setVisibility(..) instead.\"")
935#define SPR_computeVisibility(sprite) _Pragma("GCC error \"This method is deprecated, use SPR_isVisible(sprite, TRUE) instead.\"")
936
944void SPR_clear(void);
954void SPR_update(void);
955
960void SPR_logProfil(void);
965void SPR_logSprites(void);
966
967
968#endif // _SPRITE_ENG_LEGACY_H_
969
970#endif
Palette support (herited from vdp_pal.h unit)
Pool object management unit.
void SPR_setPriority(Sprite *sprite, bool value)
Set sprite Priority attribut.
Definition sprite_eng.c:872
void SPR_setHFlip(Sprite *sprite, bool value)
Set sprite Horizontal Flip attribut.
Definition sprite_eng.c:778
void SPR_setVFlip(Sprite *sprite, bool value)
Set sprite Vertical Flip attribut.
Definition sprite_eng.c:825
void SPR_releaseSprite(Sprite *sprite)
Release the specified sprite (no more visible and release its resources).
Definition sprite_eng.c:475
bool SPR_setVRAMTileIndex(Sprite *sprite, s16 value)
Set the VRAM tile position reserved for this sprite.
Definition sprite_eng.c:1102
void SPR_init(void)
Initialize the Sprite engine with default parameters.
Definition sprite_eng.c:153
void SPR_defragVRAM(void)
Defragment allocated VRAM for sprites, that can help when sprite allocation fail (SPR_addSprite(....
Definition sprite_eng.c:537
void SPR_setAutoTileUpload(Sprite *sprite, bool value)
Enable/disable the automatic upload of sprite tiles data into VRAM.
Definition sprite_eng.c:1185
Sprite * SPR_addSpriteEx(const SpriteDefinition *spriteDef, s16 x, s16 y, u16 attribut, u16 flag)
Adds a new sprite with specified parameters and returns it.
Definition sprite_eng.c:327
void SPR_setAnim(Sprite *sprite, s16 anim)
Set current sprite animation.
Definition sprite_eng.c:1007
s16 SPR_getPositionX(Sprite *sprite)
Get sprite position X.
Definition sprite_eng.c:741
void SPR_logSprites(void)
Log the sprites informations (when enabled) in the KMod message window.
Definition sprite_eng.c:1588
void SPR_initEx(u16 vramSize)
Init the Sprite engine with specified advanced parameters (VRAM allocation size and decompression buf...
Definition sprite_eng.c:118
void SPR_setVisibility(Sprite *sprite, SpriteVisibility value)
Set the visibility state for this sprite.
Definition sprite_eng.c:1248
Pool * spritesPool
Definition sprite_eng.c:79
void SPR_setFrame(Sprite *sprite, s16 frame)
Set current sprite frame.
Definition sprite_eng.c:1042
s16 SPR_getPositionY(Sprite *sprite)
Get sprite position Y.
Definition sprite_eng.c:746
void SPR_setFrameChangeCallback(Sprite *sprite, FrameChangeCallback *callback)
Set the frame change event callback for this sprite.
Definition sprite_eng.c:1203
void SPR_update(void)
Update and display the active list of sprite.
Definition sprite_eng.c:1333
u16 spriteVramSize
Definition sprite_eng.c:89
void SPR_setAnimAndFrame(Sprite *sprite, s16 anim, s16 frame)
Set current sprite animation and frame.
Definition sprite_eng.c:963
void FrameChangeCallback(Sprite *sprite)
Sprite frame change event callback.
Definition sprite_eng.h:351
Sprite * SPR_addSpriteSafe(const SpriteDefinition *spriteDef, s16 x, s16 y, u16 attribut)
Adds a new sprite with auto resource allocation enabled and returns it.
Definition sprite_eng.c:459
void SPR_logProfil(void)
Log the profil informations (when enabled) in the KMod message window.
Definition sprite_eng.c:1568
void SPR_setAlwaysOnTop(Sprite *sprite)
Set sprite depth so it remains above others sprite - same as SPR_setDepth(SPR_MIN_DEPTH)
Definition sprite_eng.c:958
Sprite * firstSprite
Definition sprite_eng.c:82
SpriteVisibility
Sprite visibility enumeration.
Definition sprite_eng.h:97
@ HIDDEN
Definition sprite_eng.h:99
@ AUTO_FAST
Definition sprite_eng.h:100
@ AUTO_SLOW
Definition sprite_eng.h:101
@ VISIBLE
Definition sprite_eng.h:98
u16 SPR_getNumActiveSprite(void)
Returns the number of active sprite (number of sprite added with SPR_addSprite(..) or SPR_addSpriteEx...
Definition sprite_eng.c:506
void SPR_clear(void)
Clear all displayed sprites.
Definition sprite_eng.c:1316
bool SPR_isInitialized(void)
FALSE if sprite cache engine is not initialized, TRUE otherwise.
Definition sprite_eng.c:188
Sprite * SPR_addSprite(const SpriteDefinition *spriteDef, s16 x, s16 y, u16 attribut)
Adds a new sprite with auto resource allocation enabled and returns it.
Definition sprite_eng.c:438
void SPR_nextFrame(Sprite *sprite)
Pass to the next sprite frame.
Definition sprite_eng.c:1074
Sprite * lastSprite
Definition sprite_eng.c:83
u16 ** SPR_loadAllFrames(const SpriteDefinition *sprDef, u16 index, u16 *totalNumTile)
Load all frames of SpriteDefinition (using DMA) at specified VRAM tile index and return the indexes t...
Definition sprite_eng.c:584
void SPR_setZ(Sprite *sprite, s16 value)
Same as SPR_setDepth(..)
Definition sprite_eng.c:953
void SPR_setPalette(Sprite *sprite, u16 value)
Set sprite Palette index to use.
Definition sprite_eng.c:909
void SPR_setDelayedFrameUpdate(Sprite *sprite, bool value)
Enable/disable the delayed frame update.
Definition sprite_eng.c:1194
bool SPR_setDefinition(Sprite *sprite, const SpriteDefinition *spriteDef)
Set the Sprite Definition.
Definition sprite_eng.c:650
Sprite * SPR_addSpriteExSafe(const SpriteDefinition *spriteDef, s16 x, s16 y, u16 attribut, u16 flag)
Adds a new sprite with specified parameters and returns it.
Definition sprite_eng.c:443
void SPR_setDepth(Sprite *sprite, s16 value)
Set sprite depth (for sprite display ordering)
Definition sprite_eng.c:931
void SPR_setPosition(Sprite *sprite, s16 x, s16 y)
Set sprite position.
Definition sprite_eng.c:751
SpriteVisibility SPR_getVisibility(Sprite *sprite)
Return the visibility state for this sprite. WARNING: this is different from SPR_isVisible(....
Definition sprite_eng.c:1211
void SPR_reset(void)
Reset the Sprite engine.
Definition sprite_eng.c:193
bool SPR_isVisible(Sprite *sprite, bool recompute)
Return the visible state for this sprite (meaningful only if AUTO visibility is enabled,...
Definition sprite_eng.c:1225
void SPR_end(void)
End the Sprite engine.
Definition sprite_eng.c:158
Definition sprite_eng.h:164
Sprite animation frame structure.
Definition sprite_eng.h:222
Sprite animation structure.
Definition sprite_eng.h:242
Simple Box structure for collision.
Definition sprite_eng.h:118
Simple Circle structure (can be used for collision detection)
Definition sprite_eng.h:137
Collision definition union.
Single VDP sprite info structure for sprite animation frame.
Definition sprite_eng.h:197
Palette structure contains color data.
Definition pal.h:73
Object pool allocator structure.
Definition pool.h:57
Sprite definition structure.
Definition sprite_eng.h:270
Sprite structure used by the Sprite Engine to store state for a sprite. WARNING: always use the SPR_...
Definition sprite_eng.h:321
Tile set structure which contains tiles definition. Use the unpackTileSet() method to unpack if comp...
Definition vdp_tile.h:114
VDP sprite definition structure replicating VDP hardware sprite.
Definition vdp_spr.h:66
unsigned long u32
Definition types.h:105
char s8
Definition types.h:79
unsigned short u16
Definition types.h:100
unsigned char u8
Definition types.h:95
short s16
Definition types.h:84
VDP Sprite support.
VDP General Tile / Tilemap operations.