ReC98/th04/bullet/pattypes.h

62 lines
1.9 KiB
C
Raw Normal View History

#pragma option -b-
typedef union {
unsigned char spread_angle;
// In subpixels, obviously, but pre-C++11 doesn't let us use any of the
// Subpixel classes with their custom assignment operators in a union...
unsigned char stack_speed;
} bullet_template_delta_t;
// All _AIMED patterns define the 0° [angle] as the current player position,
// relative to the bullet origin.
typedef enum {
// Ignoring [count]. Turned into a stack on Hard, and into a spread on
// Lunatic.
BP_SINGLE = 0x00,
BP_SINGLE_AIMED = 0x01,
// Multiple random bullets, number in [count]. Both angle and speed are
// added to the template's [angle] and [speed] values, respectively.
BP_RANDOM_ANGLE = 0x1B,
BP_RANDOM_ANGLE_AND_SPEED = 0x1C,
// Ring out of [count] bullets, ignoring [delta].
BP_RING = 0x26,
BP_RING_AIMED = 0x2C,
// [count]-way arc centered around 0°, with [delta.spread_angle]° between
// each bullet.
BP_SPREAD = 0x2D,
BP_SPREAD_RANDOM_ANGLE_AIMED = 0x1D,
BP_SPREAD_AIMED = 0x2E,
// Multi-bullet stack with varying speeds. Number of bullets in [count],
// with each subsequent bullet getting faster by [delta.stack_speed].
BP_STACK = 0x2F,
BP_STACK_AIMED = 0x30,
// Will always fire a single bullet, regardless of rank or playperf.
BP_FORCESINGLE = 0x40,
BP_FORCESINGLE_RANDOM_ANGLE = 0x1A,
BP_FORCESINGLE_AIMED = 0x41,
} bullet_pattern_t;
/// Spawn types
/// -----------
/// Not an enum for consistency with TH05, which uses two components OR'd
/// together.
// Won't spawn bullets at the end of a gather animation. Effectively becomes
// BST_BULLET16 when used outside a gather_t. (Mugetsu's 4th phase actually
// relies on this!)
#define BST_GATHER_ONLY 0
#define BST_PELLET 1 /* ignoring [patnum] */
#define BST_BULLET16 2
#define BST_GATHER_PELLET 3
#define BST_BULLET16_CLOUD_FORWARDS 4
#define BST_BULLET16_CLOUD_BACKWARDS 5
/// -----------
#pragma option -b