ReC98/th05/bullet/pattypes.h

62 lines
2.2 KiB
C

#pragma option -b-
/// Pattern type components
/// -----------------------
// 0° angle definition, relative to the bullet origin.
#define BPC0_STATIC 0 /* 0° = right */
#define BPC0_AIMED 1 /* 0° = current player position */
// Circular distribution of a number of bullets, given in [spread].
#define BPCC_SPREAD 2 /* [spread]-way arc centered around 0°, with
[spread_delta_angle]° between each bullet */
#define BPCC_RING 4 /* Full circle, ignoring [spread_delta_angle] */
// Turns every bullet that would already be fired into a multi-bullet stack
// with varying speeds. Number of bullets in [stack], with each subsequent
// bullet getting faster by [stack_delta_speed].
#define BPCS_STACK 6
/// -----------------------
// Will always fire a single bullet, regardless of rank or playperf.
#define BPCF_SINGLE 14
typedef enum {
// Turned into a stack on Hard, and into a spread on Lunatic.
BP_SINGLE = (BPC0_STATIC),
BP_SINGLE_AIMED = (BPC0_AIMED),
BP_SPREAD = (BPCC_SPREAD + BPC0_STATIC),
BP_SPREAD_AIMED = (BPCC_SPREAD + BPC0_AIMED),
BP_RING = (BPCC_RING),
BP_RING_AIMED = (BPCC_RING + BPC0_AIMED),
BP_STACK = (BPCS_STACK),
BP_STACK_AIMED = (BPCS_STACK + BPC0_AIMED),
BP_SPREAD_STACK = (BPCS_STACK + BPCC_SPREAD + BPC0_STATIC),
BP_SPREAD_STACK_AIMED = (BPCS_STACK + BPCC_SPREAD + BPC0_AIMED),
BP_RING_STACK = (BPCS_STACK + BPCC_RING + BPC0_STATIC),
BP_RING_STACK_AIMED = (BPCS_STACK + BPCC_RING + BPC0_AIMED),
// Number of bullets taken from [spread]. Both angle and speed are added
// to the template's [angle] and [speed] values, respectively.
BP_RANDOM_ANGLE = 12,
BP_RANDOM_ANGLE_AND_SPEED = 13,
BP_FORCESINGLE = (BPCF_SINGLE),
BP_FORCESINGLE_AIMED = (BPCF_SINGLE + BPC0_AIMED),
} bullet_pattern_t;
/// Spawn types
/// -----------
// Spawns special-moving bullets with BST_NORMAL after the gather animation.
// Effectively becomes BST_NORMAL when used outside a gather_t.
#define BST_GATHER_NORMAL_SPECIAL_MOVE 0xFE
#define BST_NORMAL 0x00
#define BST_GATHER_PELLET 0x01
#define BST_CLOUD_FORWARDS 0x02
#define BST_CLOUD_BACKWARDS 0x03
#define BST_SLOWDOWN 0x10 /* can be OR'd into any of the above */
/// -----------
#pragma option -b