2023-03-18 17:05:05 +00:00
|
|
|
|
/// Spark sprites
|
|
|
|
|
/// -------------
|
|
|
|
|
|
2024-05-25 18:31:09 +00:00
|
|
|
|
#include "th02/main/entity.hpp"
|
|
|
|
|
#include "th01/math/subpixel.hpp"
|
|
|
|
|
|
2023-03-18 17:05:05 +00:00
|
|
|
|
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;
|