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_PX 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
29#define CARD_SPRITE_TILES 16
30#define JOKER_SPRITE_TILES 16
31#define BLIND_SPRITE_TILES 16
32#define SKIP_TAG_SPRITE_TILES 4
41{
42 CARD_SPRITE,
43 BLIND_TOKEN_SPRITE,
44 SKIP_TAG_SPRITE,
45 JOKER_SPRITE,
46 DECK_SPRITE,
47 MAX_SPRITE_TYPE
48};
49
53typedef struct
54{
58 OBJ_ATTR* obj;
59
63 OBJ_AFFINE* aff;
64
68 POINT pos;
69
73 s16 idx;
74
79 u16 mode;
80} Sprite;
81
85typedef struct
86{
91
95 FIXED tx, ty;
96
100 FIXED x, y;
101
105 FIXED vx, vy;
106
110 FIXED tscale;
111
115 FIXED scale;
116
120 FIXED vscale;
121
126
130 FIXED rotation;
131
136
142
150int sprite_get_tid(enum SpriteType sprite_type, s16 layer);
151
158int sprite_get_starting_layer(enum SpriteType sprite_type);
159
172Sprite* sprite_new(u16 a0, u16 a1, u32 tid, u32 pb, s16 sprite_index);
173
179void sprite_destroy(Sprite** sprite);
180
188s16 sprite_get_layer(Sprite* sprite);
189
201bool sprite_get_dimensions(Sprite* sprite, int* width, int* height);
202
212bool sprite_get_height(Sprite* sprite, int* height);
213
223bool sprite_get_width(Sprite* sprite, int* width);
224
232int sprite_get_pb(const Sprite* sprite);
233
238void sprite_hide(Sprite* sprite);
239
245void sprite_unhide(Sprite* sprite);
246
250void sprite_init(void);
251
255void sprite_draw(void);
256
263void sprite_object_init(SpriteObject* sprite_object);
264
275void sprite_object_destroy(SpriteObject* sprite_object);
276
286void sprite_object_set_sprite(SpriteObject* sprite_object, Sprite* sprite);
287
292void sprite_object_hide(SpriteObject* sprite_object);
293
299void sprite_object_unhide(SpriteObject* sprite_object);
300
308
314IWRAM_CODE void sprite_object_update(SpriteObject* sprite_object);
315
321void sprite_object_update_all(void);
322
330void sprite_object_shake(SpriteObject* sprite_object, mm_word sound_id);
331
338void sprite_object_bounce(SpriteObject* sprite_object, FIXED strength);
339
345void sprite_object_sway(SpriteObject* sprite_object);
346
354void sprite_object_set_target(SpriteObject* sprite_object, BG_POINT to);
355
366
378void sprite_object_set_focus(SpriteObject* sprite_object, bool focus);
379
391bool sprite_object_get_dimensions(SpriteObject* sprite_object, int* width, int* height);
392
403bool sprite_object_get_height(SpriteObject* sprite_object, int* height);
404
415bool sprite_object_get_width(SpriteObject* sprite_object, int* width);
416
424bool sprite_object_is_focused(SpriteObject* sprite_object);
425
433void sprite_object_print_text_under(SpriteObject* sprite_object, const char text[]);
434
445void sprite_object_print_price_under(SpriteObject* sprite_object, int price);
446
456
466INLINE void sprite_position(Sprite* sprite, int x, int y)
467{
468 sprite->pos.x = x;
469 sprite->pos.y = y;
470
471 obj_set_pos(sprite->obj, x, y);
472}
473
483INLINE void sprite_object_position(SpriteObject* sprite_object, int x, int y)
484{
485 sprite_object->x = int2fx(x);
486 sprite_object->y = int2fx(y);
487 sprite_object->tx = int2fx(x);
488 sprite_object->ty = int2fx(y);
489}
490
491#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:478
bool sprite_object_is_focused(SpriteObject *sprite_object)
Get the focused variable from a SpriteObject.
Definition sprite.c:485
bool sprite_get_width(Sprite *sprite, int *width)
Get a Sprite's width.
Definition sprite.c:164
INLINE void sprite_position(Sprite *sprite, int x, int y)
Set sprite position. Inlined for efficiency.
Definition sprite.h:466
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:271
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:446
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:237
void sprite_object_destroy(SpriteObject *sprite_object)
Destroy SpriteObject.
Definition sprite.c:248
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:523
s16 sprite_get_layer(Sprite *sprite)
Get index of Sprite in the GBA object buffer.
Definition sprite.c:157
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:514
int sprite_get_tid(enum SpriteType sprite_type, s16 layer)
Get the tile index of a certain SpriteType at a certain layer.
Definition sprite.c:66
void sprite_init(void)
Initialize GBAlatro sprite system.
Definition sprite.c:195
void sprite_object_bounce(SpriteObject *sprite_object, FIXED strength)
Make SpriteObject bounce by slightly increasing its size in an elastic way.
Definition sprite.c:416
void sprite_object_reset_transform(SpriteObject *sprite_object)
Reset SpriteObject's transform back to default values.
Definition sprite.c:278
int sprite_get_pb(const Sprite *sprite)
Get the palette bank of a Sprite.
Definition sprite.c:215
bool sprite_object_get_width(SpriteObject *sprite_object, int *width)
Get a SpriteObject's width.
Definition sprite.c:464
void sprite_object_set_sprite(SpriteObject *sprite_object, Sprite *sprite)
Register a Sprite to an associated SpriteObject.
Definition sprite.c:256
void sprite_object_update_all(void)
Update all SpriteObjects, to be called once per frame in the main update loop.
Definition sprite.c:391
void sprite_object_set_target(SpriteObject *sprite_object, BG_POINT to)
Set a SpriteObject's target position so that is slides across the screen between from the current pos...
Definition sprite.c:429
bool sprite_get_dimensions(Sprite *sprite, int *width, int *height)
Get a Sprite's width and height.
Definition sprite.c:182
bool sprite_object_get_height(SpriteObject *sprite_object, int *height)
Get a SpriteObject's height.
Definition sprite.c:471
INLINE void sprite_object_position(SpriteObject *sprite_object, int x, int y)
Set sprite_object position. Inlined for efficiency.
Definition sprite.h:483
void sprite_object_shake(SpriteObject *sprite_object, mm_word sound_id)
Shake SpriteObject on screen and play a sound.
Definition sprite.c:403
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:77
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:533
bool sprite_get_height(Sprite *sprite, int *height)
Get a Sprites's height.
Definition sprite.c:173
void sprite_destroy(Sprite **sprite)
Destroy Sprite.
Definition sprite.c:134
Sprite * sprite_object_get_sprite(SpriteObject *sprite_object)
Get a SpriteObject's registered Sprite.
Definition sprite.c:439
SpriteType
The different types of sprites in the game.
Definition sprite.h:41
void sprite_hide(Sprite *sprite)
Hides the sprite by manipulating ATTR0_HIDE in OAM.
Definition sprite.c:222
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:229
int sprite_get_starting_layer(enum SpriteType sprite_type)
Get the starting layer of a certain type of sprite.
Definition sprite.c:71
void sprite_object_sway(SpriteObject *sprite_object)
Make SpriteObject sway by slightly rotating on screen.
Definition sprite.c:423
void sprite_draw(void)
Draw Sprites to screen, to be called once per frame.
Definition sprite.c:210
IWRAM_CODE void sprite_object_update(SpriteObject *sprite_object)
Update a SpriteObject, to be called once per frame per active SpriteObject.
Definition sprite.c:383
void sprite_object_hide(SpriteObject *sprite_object)
Hides the SpriteObject by manipulating ATTR0_HIDE in OAM.
Definition sprite.c:264
A sprite object is a sprite that is focusable and movable in animation.
Definition sprite.h:86
FIXED x
Current position.
Definition sprite.h:100
bool focused
Focused status (card specific, raise and lower card)
Definition sprite.h:140
FIXED vscale
Scale velocity AKA the rate of change of scaling ops.
Definition sprite.h:120
FIXED rotation
Actual rotation, in units for tonc's obj_aff_rotscale
Definition sprite.h:130
FIXED tx
Target position.
Definition sprite.h:95
FIXED trotation
Target rotation.
Definition sprite.h:125
FIXED vx
Velocity.
Definition sprite.h:105
FIXED scale
Current Scale, in units for tonc's obj_aff_rotscale
Definition sprite.h:115
Sprite * sprite
Sprite configuration info.
Definition sprite.h:90
FIXED tscale
Target Scale.
Definition sprite.h:110
FIXED vrotation
Rotation velocity.
Definition sprite.h:135
Sprite struct for GBA hardware specifics.
Definition sprite.h:54
POINT pos
Sprite position on screen in pixels.
Definition sprite.h:68
OBJ_AFFINE * aff
GBA sprite affine matrices registers info.
Definition sprite.h:63
s16 idx
Sprite index in memory managed by GBAlatro.
Definition sprite.h:73
u16 mode
The mode of the sprite (regular, affine, etc.), set when the sprite is created corresponds to A0 & AT...
Definition sprite.h:79
OBJ_ATTR * obj
GBA sprite attribute registers info (A0-A2)
Definition sprite.h:58