GBAlatro
A Demake of Balatro for the GBA
Loading...
Searching...
No Matches
sprite.h
Go to the documentation of this file.
1
6#ifndef SPRITE_H
7#define SPRITE_H
8
9#include <maxmod.h>
10#include <tonc.h>
11
16#define CARD_SPRITE_SIZE 32
17#define MAX_AFFINES 32
18#define MAX_SPRITES 128
19#define MAX_SPRITE_OBJECTS 16
20#define SPRITE_FOCUS_RAISE_PX 10
21#define CARD_FOCUS_SFX_PITCH_OFFSET_RANGE 512
22
28typedef struct
29{
33 OBJ_ATTR* obj;
34
38 OBJ_AFFINE* aff;
39
43 POINT pos;
44
48 s16 idx;
49
54 u16 mode;
55} Sprite;
56
60typedef struct
61{
66
70 FIXED tx, ty;
71
75 FIXED x, y;
76
80 FIXED vx, vy;
81
85 FIXED tscale;
86
90 FIXED scale;
91
95 FIXED vscale;
96
101
105 FIXED rotation;
106
111
117
130Sprite* sprite_new(u16 a0, u16 a1, u32 tid, u32 pb, s16 sprite_index);
131
137void sprite_destroy(Sprite** sprite);
138
146s16 sprite_get_layer(Sprite* sprite);
147
159bool sprite_get_dimensions(Sprite* sprite, int* width, int* height);
160
170bool sprite_get_height(Sprite* sprite, int* height);
171
181bool sprite_get_width(Sprite* sprite, int* width);
182
190int sprite_get_pb(const Sprite* sprite);
191
196void sprite_hide(Sprite* sprite);
197
203void sprite_unhide(Sprite* sprite);
204
208void sprite_init(void);
209
213void sprite_draw(void);
214
221void sprite_object_init(SpriteObject* sprite_object);
222
233void sprite_object_destroy(SpriteObject* sprite_object);
234
244void sprite_object_set_sprite(SpriteObject* sprite_object, Sprite* sprite);
245
250void sprite_object_hide(SpriteObject* sprite_object);
251
257void sprite_object_unhide(SpriteObject* sprite_object);
258
266
272IWRAM_CODE void sprite_object_update(SpriteObject* sprite_object);
273
279void sprite_object_update_all(void);
280
288void sprite_object_shake(SpriteObject* sprite_object, mm_word sound_id);
289
300
312void sprite_object_set_focus(SpriteObject* sprite_object, bool focus);
313
325bool sprite_object_get_dimensions(SpriteObject* sprite_object, int* width, int* height);
326
337bool sprite_object_get_height(SpriteObject* sprite_object, int* height);
338
349bool sprite_object_get_width(SpriteObject* sprite_object, int* width);
350
358bool sprite_object_is_focused(SpriteObject* sprite_object);
359
367void sprite_object_print_text_under(SpriteObject* sprite_object, const char text[]);
368
379void sprite_object_print_price_under(SpriteObject* sprite_object, int price);
380
390
400INLINE void sprite_position(Sprite* sprite, int x, int y)
401{
402 sprite->pos.x = x;
403 sprite->pos.y = y;
404
405 obj_set_pos(sprite->obj, x, y);
406}
407
417INLINE void sprite_object_position(SpriteObject* sprite_object, int x, int y)
418{
419 sprite_object->x = int2fx(x);
420 sprite_object->y = int2fx(y);
421 sprite_object->tx = int2fx(x);
422 sprite_object->ty = int2fx(y);
423}
424
425#endif // SPRITE_H
bool sprite_object_get_dimensions(SpriteObject *sprite_object, int *width, int *height)
Get the width and height of SpriteObject's registered Sprite.
Definition sprite.c:402
bool sprite_object_is_focused(SpriteObject *sprite_object)
Get the focused variable from a SpriteObject.
Definition sprite.c:409
bool sprite_get_width(Sprite *sprite, int *width)
Get a Sprite's width.
Definition sprite.c:123
INLINE void sprite_position(Sprite *sprite, int x, int y)
Set sprite position. Inlined for efficiency.
Definition sprite.h:400
void sprite_object_unhide(SpriteObject *sprite_object)
Unhides the SpriteObject by manipulating ATTR0_HIDE in OAM. The sprite's ATTR0_MODE is maintained fro...
Definition sprite.c:220
void sprite_object_set_focus(SpriteObject *sprite_object, bool focus)
Set the focus for SpriteObject Raises the object by SPRITE_FOCUS_RAISE_PX.
Definition sprite.c:370
void sprite_object_init(SpriteObject *sprite_object)
Initialize a SpriteObject to a default state. Must be called only once per SpriteObject when it is cr...
Definition sprite.c:186
void sprite_object_destroy(SpriteObject *sprite_object)
Destroy SpriteObject.
Definition sprite.c:197
void sprite_object_print_price_under(SpriteObject *sprite_object, int price)
Print the price string directly beneath a SpriteObject. More specialized version of sprite_object_pri...
Definition sprite.c:447
s16 sprite_get_layer(Sprite *sprite)
Get index of Sprite in the GBA object buffer.
Definition sprite.c:116
void sprite_object_print_text_under(SpriteObject *sprite_object, const char text[])
Print the given string directly beneath a SpriteObject. This is used only for Cards for now.
Definition sprite.c:438
void sprite_init(void)
Initialize GBAlatro sprite system.
Definition sprite.c:154
void sprite_object_reset_transform(SpriteObject *sprite_object)
Reset SpriteObject's transform back to default values.
Definition sprite.c:227
int sprite_get_pb(const Sprite *sprite)
Get the palette bank of a Sprite.
Definition sprite.c:164
bool sprite_object_get_width(SpriteObject *sprite_object, int *width)
Get a SpriteObject's width.
Definition sprite.c:388
void sprite_object_set_sprite(SpriteObject *sprite_object, Sprite *sprite)
Register a Sprite to an associated SpriteObject.
Definition sprite.c:205
void sprite_object_update_all(void)
Update all SpriteObjects, to be called once per frame in the main update loop.
Definition sprite.c:340
bool sprite_get_dimensions(Sprite *sprite, int *width, int *height)
Get a Sprite's width and height.
Definition sprite.c:141
bool sprite_object_get_height(SpriteObject *sprite_object, int *height)
Get a SpriteObject's height.
Definition sprite.c:395
INLINE void sprite_object_position(SpriteObject *sprite_object, int x, int y)
Set sprite_object position. Inlined for efficiency.
Definition sprite.h:417
void sprite_object_shake(SpriteObject *sprite_object, mm_word sound_id)
Shake SpriteObject on screen and play a sound.
Definition sprite.c:350
Sprite * sprite_new(u16 a0, u16 a1, u32 tid, u32 pb, s16 sprite_index)
Allocate and retrieve a pointer to a valid Sprite.
Definition sprite.c:36
void sprite_object_erase_text_under(SpriteObject *sprite_object)
Erase the text within the Rect directly beneath a SpriteObject. This is used only for Cards for now.
Definition sprite.c:457
bool sprite_get_height(Sprite *sprite, int *height)
Get a Sprites's height.
Definition sprite.c:132
void sprite_destroy(Sprite **sprite)
Destroy Sprite.
Definition sprite.c:93
Sprite * sprite_object_get_sprite(SpriteObject *sprite_object)
Get a SpriteObject's registered Sprite.
Definition sprite.c:363
void sprite_hide(Sprite *sprite)
Hides the sprite by manipulating ATTR0_HIDE in OAM.
Definition sprite.c:171
void sprite_unhide(Sprite *sprite)
Unhides the sprite by manipulating ATTR0_HIDE in OAM. The sprite's ATTR0_MODE is maintained from the ...
Definition sprite.c:178
void sprite_draw(void)
Draw Sprites to screen, to be called once per frame.
Definition sprite.c:159
IWRAM_CODE void sprite_object_update(SpriteObject *sprite_object)
Update a SpriteObject, to be called once per frame per active SpriteObject.
Definition sprite.c:332
void sprite_object_hide(SpriteObject *sprite_object)
Hides the SpriteObject by manipulating ATTR0_HIDE in OAM.
Definition sprite.c:213
A sprite object is a sprite that is focusable and movable in animation.
Definition sprite.h:61
FIXED x
Current position.
Definition sprite.h:75
bool focused
Focused status (card specific, raise and lower card)
Definition sprite.h:115
FIXED vscale
Scale velocity AKA the rate of change of scaling ops.
Definition sprite.h:95
FIXED rotation
Actual rotation, in units for tonc's obj_aff_rotscale
Definition sprite.h:105
FIXED tx
Target position.
Definition sprite.h:70
FIXED trotation
Target rotation.
Definition sprite.h:100
FIXED vx
Velocity.
Definition sprite.h:80
FIXED scale
Current Scale, in units for tonc's obj_aff_rotscale
Definition sprite.h:90
Sprite * sprite
Sprite configuration info.
Definition sprite.h:65
FIXED tscale
Target Scale.
Definition sprite.h:85
FIXED vrotation
Rotation velocity.
Definition sprite.h:110
Sprite struct for GBA hardware specifics.
Definition sprite.h:29
POINT pos
Sprite position on screen in pixels.
Definition sprite.h:43
OBJ_AFFINE * aff
GBA sprite affine matrices registers info.
Definition sprite.h:38
s16 idx
Sprite index in memory managed by GBAlatro.
Definition sprite.h:48
u16 mode
The mode of the sprite (regular, affine, etc.), set when the sprite is created corresponds to A0 & AT...
Definition sprite.h:54
OBJ_ATTR * obj
GBA sprite attribute registers info (A0-A2)
Definition sprite.h:33