mirror of https://github.com/nmlgc/ReC98.git
45 lines
1.2 KiB
C++
45 lines
1.2 KiB
C++
/// Spark sprites
|
||
/// -------------
|
||
|
||
enum spark_render_as_t {
|
||
SRA_DOT = 0, // 1×1-pixel dot
|
||
SRA_SPRITE = 14, // Hardcoded 8×8-pixel spark sprite
|
||
};
|
||
|
||
struct spark_t {
|
||
entity_flag_t flag;
|
||
uint8_t age;
|
||
|
||
// Stores the current and previous position, indexed with the currently
|
||
// rendered VRAM page.
|
||
SPPoint screen_topleft[2];
|
||
|
||
SPPoint velocity;
|
||
spark_render_as_t render_as;
|
||
int8_t unused_1;
|
||
|
||
// Defaults, initialized at the beginning of each stage
|
||
// ----------------------------------------------------
|
||
|
||
unsigned char angle;
|
||
SubpixelLength8 speed_base;
|
||
int8_t unused_2;
|
||
spark_render_as_t default_render_as;
|
||
// ----------------------------------------------------
|
||
};
|
||
|
||
static const int SPARK_COUNT = 64;
|
||
|
||
extern spark_t sparks[SPARK_COUNT];
|
||
|
||
// Index of the next spark_t instance within [sparks] to be set when adding a
|
||
// new spark, regardless of its [flag].
|
||
extern unsigned int spark_ring_i;
|
||
|
||
// Number of spark_t instances within [sparks] between two successive
|
||
// SRA_SPRITE instances. All others get initialized to SRA_DOT.
|
||
extern uint8_t spark_sprite_interval;
|
||
|
||
// Sparks are transitioned to F_REMOVE after their [age] reaches this value.
|
||
extern uint8_t spark_age_max;
|