2020-01-28 20:50:58 +00:00
|
|
|
#define HALFHEARTS_MAX 10
|
|
|
|
|
|
|
|
#define ROUND_START_INVINCIBILITY_FRAMES 50
|
|
|
|
|
|
|
|
#define MISS_INVINCIBILITY_FRAMES 110
|
|
|
|
#define MISS_DAMAGE_MAX 6
|
|
|
|
#define KNOCKBACK_FRAMES 64
|
|
|
|
|
|
|
|
#define SPELL_AUTOFIRE_FRAMES 128
|
|
|
|
#define CHARGE_AT_AVAIL_RING_SIZE 64
|
|
|
|
|
|
|
|
// Gauge
|
|
|
|
// -----
|
|
|
|
#define GAUGE_MAX (0xFF << 4)
|
|
|
|
|
|
|
|
typedef uint16_t gauge_t;
|
|
|
|
typedef uint8_t gauge_perbyte_t;
|
|
|
|
|
|
|
|
void pascal near gauge_avail_add(unsigned char pid, unsigned char charge);
|
|
|
|
// -----
|
|
|
|
|
|
|
|
// Charge Shots
|
|
|
|
// ------------
|
|
|
|
typedef void (far pascal *near chargeshot_add_func_t)(
|
|
|
|
Subpixel center_x, Subpixel center_y
|
|
|
|
);
|
|
|
|
|
|
|
|
extern farfunc_t_near chargeshot_update[PLAYER_COUNT];
|
|
|
|
extern farfunc_t_near chargeshot_render[PLAYER_COUNT];
|
|
|
|
// ------------
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
SPPoint center;
|
|
|
|
bool is_hit;
|
|
|
|
uint8_t unused_1;
|
|
|
|
unsigned char invincibility_time;
|
|
|
|
char halfhearts;
|
2020-02-19 14:53:51 +00:00
|
|
|
playchar_paletted_t playchar_paletted;
|
2020-01-28 20:50:58 +00:00
|
|
|
speed_t speed;
|
|
|
|
shot_mode_t shot_mode;
|
|
|
|
unsigned char patnum_movement;
|
|
|
|
unsigned char patnum_glow;
|
|
|
|
unsigned char knockback_time;
|
|
|
|
unsigned char move_lock_time;
|
|
|
|
unsigned char knockback_angle;
|
|
|
|
unsigned char knockback_length;
|
|
|
|
bool knockback_active;
|
|
|
|
bool is_cpu;
|
|
|
|
unsigned char cpu_dodge_strategy; // unused
|
|
|
|
unsigned char gauge_charge_speed;
|
|
|
|
gauge_t gauge_charged;
|
|
|
|
gauge_t gauge_avail;
|
|
|
|
unsigned char cpu_charge_at_avail_ring_p;
|
|
|
|
unsigned char bombs;
|
|
|
|
|
|
|
|
// Set to [playchar_paletted] when active, for some reason...
|
|
|
|
unsigned char hyper_active;
|
|
|
|
|
|
|
|
unsigned char lose_anim_time;
|
|
|
|
|
|
|
|
input_t human_movement_last;
|
|
|
|
shot_active_t shot_active;
|
|
|
|
unsigned char spell_ready_frames;
|
|
|
|
|
|
|
|
// A CPU player will charge up a gauge attack once ([gauge_avail] >> 4)
|
|
|
|
// has reached the (random) value at [cpu_charge_at_avail_ring_p].
|
|
|
|
gauge_perbyte_t cpu_charge_at_avail_ring[CHARGE_AT_AVAIL_RING_SIZE];
|
|
|
|
|
|
|
|
nearfunc_t_near hyper; // Either hyper_standby() or [hyper_func].
|
|
|
|
nearfunc_t_near hyper_func;
|
|
|
|
chargeshot_add_func_t chargeshot_add;
|
|
|
|
unsigned char rounds_won;
|
|
|
|
uint8_t unused_2;
|
|
|
|
|
|
|
|
// A CPU player will focus on dodging bullets while [cpu_frame] remains
|
|
|
|
// smaller than this value.
|
|
|
|
unsigned int cpu_safety_frames;
|
|
|
|
|
|
|
|
unsigned int combo_bonus_max;
|
|
|
|
unsigned char combo_hits_max;
|
|
|
|
unsigned char miss_damage_next;
|
|
|
|
unsigned int cpu_frame;
|
|
|
|
|
|
|
|
unsigned char gauge_attacks_fired;
|
|
|
|
unsigned char boss_attacks_fired;
|
|
|
|
unsigned char boss_attacks_reversed;
|
|
|
|
unsigned char boss_panics_fired;
|
|
|
|
|
|
|
|
uint8_t padding[6];
|
|
|
|
} player_t;
|
|
|
|
|
|
|
|
extern unsigned char pid_current;
|
|
|
|
extern unsigned char pid_other;
|