49 #define BEAM_AREA_PERCENT 0.4f
52 #define BEAM_RANDOM_FACTOR 0.4f
54 #define BEAM_DAMAGE_TIME 170 // apply damage
55 #define MAX_SHOT_POINTS 30
56 #define SHOT_POINT_TIME 200 // 5 arcs a second
58 #define TOOLTIME 1500.0f
66 #define BEAM_NUM_GOOD_OCTANTS 8
92 #define BEAM_TEST_STAMP_TIME 4000 // every 4 seconds
100 #define BEAM_WARMUP_PCT(b) ( ((float)Weapon_info[b->weapon_info_index].b_info.beam_warmup - (float)timestamp_until(b->warmup_stamp)) / (float)Weapon_info[b->weapon_info_index].b_info.beam_warmup )
103 #define BEAM_WARMDOWN_PCT(b) ( ((float)Weapon_info[b->weapon_info_index].b_info.beam_warmdown - (float)timestamp_until(b->warmdown_stamp)) / (float)Weapon_info[b->weapon_info_index].b_info.beam_warmdown )
109 #define MAX_BEAM_LIGHT_INFO 100
124 DCF(
b_whack_small,
"Sets the whack factor for small whacks (Default is 2000f)")
128 DCF(
b_whack_big,
"Sets the whack factor for big whacks (Default is 10000f)")
135 dc_printf(
"Sets the threshold to determine whether a big whack or a small whack should be applied. Values equal or greater than this threshold will trigger a big whack, while smaller values will trigger a small whack\n");
285 ship *firing_ship = NULL;
289 if(fire_info == NULL){
318 Assertion(
false,
"Fixed beam fired without a valid ship!\n");
321 if (fire_info->
shooter != NULL) {
327 Assert( new_item != &Beam_free_list );
328 if(new_item == &Beam_free_list){
369 new_item->
team = (firing_ship == NULL) ? fire_info->
team : static_cast<char>(firing_ship->
team);
434 nprintf((
"General",
"obj_create() failed for beam weapon! bah!\n"));
438 new_item->
objnum = objnum;
446 mprintf((
"Killing beam at initial fire because of illegal targeting!!!\n"));
459 bank_point = (fire_info->
point * 10) + fire_info->
bank;
484 if(fire_info == NULL){
511 Assert( new_item != &Beam_free_list );
549 new_item->
team = (char)firing_ship->
team;
561 nprintf((
"General",
"obj_create() failed for beam weapon! bah!\n"));
565 new_item->
objnum = objnum;
570 if(Beams[
Objects[objnum].instance].objnum != objnum){
640 if(Beams[
Objects[objnum].instance].objnum != objnum){
645 if(Beams[
Objects[objnum].instance].objnum < 0){
666 if((Beams[
Objects[objnum].instance].objnum != objnum) || (Beams[
Objects[objnum].instance].objnum < 0)){
670 if(num >= Beams[
Objects[objnum].instance].r_collision_count){
722 if(fighter_beam)*gvec = objp->
orient.
vec.fvec;
753 #define BEAM_T(b) ( ((b->binfo.delta_ang / b->life_total) * (b->life_total - b->life_left)) / b->binfo.delta_ang )
772 if((
double)dot_save >= 0.999999999){
795 int num_fire_points = 1;
825 int shot_index, fire_wait;
868 *shot_index = (
int)(beam_time / shot_time);
871 nprintf((
"Beam",
"Shot of type D beam had bad shot_index value\n"));
877 if(beam_time > ((shot_time * (*shot_index)) + (shot_time * 0.5
f))){
1009 if (moveup->
objp != NULL) {
1035 if (moveup->
objp != NULL) {
1052 if (moveup->
objp != NULL) {
1070 if(moveup->
shrink < 0.1f){
1084 if(bf_status == -1){
1132 #define STUFF_VERTICES() do {\
1133 verts[0]->texture_position.u = 0.0f;\
1134 verts[0]->texture_position.v = 0.0f;\
1135 verts[1]->texture_position.u = 1.0f;\
1136 verts[1]->texture_position.v = 0.0f;\
1137 verts[2]->texture_position.u = 1.0f;\
1138 verts[2]->texture_position.v = 1.0f;\
1139 verts[3]->texture_position.u = 0.0f;\
1140 verts[3]->texture_position.v = 1.0f;\
1143 #define P_VERTICES() do {\
1144 for(idx=0; idx<4; idx++){\
1145 g3_project_vertex(verts[idx]);\
1153 vertex *verts[4] = { &h1[0], &h1[1], &h1[2], &h1[3] };
1154 vec3d fvec, top1, bottom1, top2, bottom2;
1161 memset( h1, 0,
sizeof(
vertex) * 4 );
1221 per -= length / bwi->
range;
1279 DCF(h_time,
"Sets the hack time for beam muzzle glow (Default is 100)")
1289 vec3d turret_norm, turret_pos, particle_pos, particle_dir;
1327 for(idx=0; idx<particle_count; idx++){
1334 float p_life =
frand_range(p_time_ref * 0.5
f, p_time_ref * 0.7f);
1337 if (b->
objp != NULL) {
1342 pinfo.
pos = particle_pos;
1343 pinfo.
vel = particle_dir;
1356 static float get_current_alpha(
vec3d *
pos)
1361 const float inner_radius = 15.0f;
1362 const float magic_num = 2.75f;
1370 if (dist <= inner_radius) {
1372 alpha = 0.8f / (inner_radius - magic_num);
1375 alpha *= (dist - magic_num);
1376 return (alpha < 0.005
f) ? 0.0f :
alpha;
1388 float rad, pct, rand_val;
1420 float alpha = get_current_alpha(&b->
last_start);
1427 vertex *verts[4] = { &h1[0], &h1[1], &h1[2], &h1[3] };
1428 vec3d fvec, top1, top2, bottom1, bottom2, sub1, sub2,
start,
end;
1563 static float u_offset = 0.0f;
1568 while ( moveup !=
END_OF_LIST(&Beam_used_list) ) {
1623 DCF(blight,
"Sets the beam light scale factor (Default is 25.5f)")
1664 if(pt_override == NULL){
1667 if(dist > light_rad){
1671 near_pt = *pt_override;
1738 float dist,max_dist;
1742 max_dist = light_rad + objp->
radius;
1743 max_dist *= max_dist;
1744 if ( dist > max_dist)
1767 if(c_point != NULL){
1788 l = &Beam_lights[
idx];
1913 mprintf((
"Beam couldn't find a good object model/type!! (%d)\n", objp->
type));
1969 b->
beam_sound_loop =
snd_play_3d(&
Snds[
Weapon_info[b->
weapon_info_index].
b_info.
beam_loop_sound], &b->
last_start, &
View_position, 0.0f, NULL, 1, 1.0,
SND_PRIORITY_SINGLE_INSTANCE, NULL, 1.0f, 1);
2050 vec3d turret_point, turret_norm;
2156 float r = ((
float) pow(1.3
f, idx)) * miss_factor * accuracy;
2325 Assertion(
false,
"Impossible beam type (%d); get a coder!\n", b->
type);
2344 Assert((oct_index >= 0) && (oct_index < BEAM_NUM_GOOD_OCTANTS));
2347 t1 = oct_array[oct_index][2] ? m->
octants[oct_array[oct_index][0]].
max : m->
octants[oct_array[oct_index][0]].
min;
2348 t2 = oct_array[oct_index][3] ? m->
octants[oct_array[oct_index][1]].
max : m->
octants[oct_array[oct_index][1]].
min;
2362 vec3d forward, circle;
2364 float subsys_strength;
2372 aim += aim * (1.0f - subsys_strength);
2400 object *weapon_objp;
2405 mc_info mc, mc_shield, mc_hull_enter, mc_hull_exit;
2418 weapon_objp = pair->
a;
2438 if (pair->
b == b->
objp) {
2444 if (model_num < 0) {
2459 ship_objp = pair->
b;
2462 int quadrant_num = -1;
2463 int valid_hit_occurred = 0;
2481 mc.
pos = &ship_objp->
pos;
2487 mc.
radius = widest * 0.5f;
2494 memcpy(&mc_shield, &mc,
sizeof(
mc_info));
2495 memcpy(&mc_hull_enter, &mc,
sizeof(
mc_info));
2496 memcpy(&mc_hull_exit, &mc,
sizeof(
mc_info));
2514 && (shield_collision || hull_enter_collision || hull_exit_collision))
2522 shield_collision = 0;
2527 hull_enter_collision = 0;
2532 hull_exit_collision = 0;
2542 if (shield_collision)
2552 if (quadrant_num >= 0)
2555 if (shield_collision) {
2568 valid_hit_occurred = 1;
2573 if (shield_collision && valid_hit_occurred)
2575 memcpy(&mc, &mc_shield,
sizeof(
mc_info));
2576 Assert(quadrant_num >= 0);
2578 else if (hull_enter_collision)
2580 memcpy(&mc, &mc_hull_enter,
sizeof(
mc_info));
2581 valid_hit_occurred = 1;
2585 if (valid_hit_occurred) {
2594 if(!ship_override && !weapon_override) {
2599 if(!(weapon_override && !ship_override))
2603 if((weapon_override && !ship_override) || (!weapon_override && !ship_override))
2609 if (hull_exit_collision)
2653 if(pair->
b == b->
objp){
2675 test_collide.
pos = &pair->
b->
pos;
2691 if(!weapon_override && !asteroid_override)
2697 if(!(asteroid_override && !weapon_override))
2701 if((asteroid_override && !weapon_override) || (!asteroid_override && !weapon_override))
2749 if(pair->
b == b->
objp){
2769 test_collide.
pos = &pair->
b->
pos;
2786 if(!a_override && !b_override){
2791 if(!(b_override && !a_override))
2796 if((b_override && !a_override) || (!b_override && !a_override))
2842 if(pair->
b == b->
objp){
2862 test_collide.
pos = &pair->
b->
pos;
2877 if(!weapon_override && !debris_override)
2884 if(!(debris_override && !weapon_override))
2888 if((debris_override && !weapon_override) || (!debris_override && !weapon_override))
2910 float cull_dist, cull_dot;
2911 vec3d dot_test, dot_test2, dist_test;
2985 dot_test = dist_test;
3031 if (quadrant_num >= 0)
3046 int r_coll_count = 0;
3072 int draw_effects = 1;
3107 r_coll[r_coll_count].
c_stamp = -1;
3109 r_coll[r_coll_count].
quadrant = -1;
3125 if((r_coll[r_coll_count].c_stamp == -1) ||
timestamp_elapsed(r_coll[r_coll_count].c_stamp))
3145 float flash_rad = (1.2f + 0.007f * (
float)(rand()%100));
3146 float rnd =
frand();
3152 vec3d temp_pos, temp_local_pos;
3197 float draw_limit, hull_pct;
3198 int dmg_type_idx, piercing_type;
3215 if ((draw_limit != -1.0
f) && (hull_pct <= draw_limit))
3226 vec3d expl_vel, expl_splash_vel;
3229 float base_v, back_v;
3242 back_v = base_v * (-0.2f);
3286 float attenuation = 1.0f;
3291 if ((range > dist) && (atten_dist < dist)) {
3292 attenuation = (dist - atten_dist) / (range - atten_dist);
3296 float damage = wi->
damage * attenuation;
3358 for(idx=0; idx<r_coll_count; idx++){
3373 *cull_dist = 50.0f * 50.0f;
3379 *cull_dist = 300.0f * 300.0f;
3387 *cull_dist = (objp->
radius * 1.3f) * (objp->
radius * 1.3f);
3393 *cull_dist = 300.0f * 300.0f;
3430 if (b->
objp == NULL) {
3435 mprintf((
"BEAM : killing beam because of invalid parent object SIGNATURE!\n"));
3441 mprintf((
"BEAM : killing beam because of invalid parent object TYPE!\n"));
3469 mprintf((
"BEAM : killing beam because turret has been destroyed!\n"));
3484 vec3d turret_normal;
3494 nprintf((
"BEAM",
"BEAM : powering beam down because of FOV condition!\n"));
3501 nprintf((
"BEAM",
"BEAM : powering beam down because of FOV condition!\n"));
3515 float widest = -1.0f;
3535 return widest * b->
shrink;
3545 Assert((b != NULL) && (objp != NULL) && (hit_point != NULL));
3546 if((b == NULL) || (objp == NULL) || (hit_point == NULL)){
3563 if(wip->
mass == 0.0f) {
3571 if(wip->
mass == 100.0f){
3595 if ( (objp == NULL) || (b == NULL) ) {
3610 float attenuation = 1.0f;
3616 if ((range > dist) && (atten_dist < dist)) {
3617 attenuation = (dist - atten_dist) / (range - atten_dist);
3621 float damage = 0.0f;
3628 damage = wip->
damage * attenuation;
3638 float total_strength, damage_in_a_few_seconds, hp_limit, hp_pct;
3661 if (hp_limit > 0.0
f) {
3663 if (hp_limit >= hp_pct)
3674 return (damage_in_a_few_seconds > total_strength);
3678 DCF(b_aim,
"Adjusts the beam accuracy factor (Default is 1.0f)")
3682 DCF(beam_list,
"Lists all beams")
void beam_move_all_post()
void mc_info_init(mc_info *mc)
int beam_ok_to_fire(beam *b)
int beam_collide_asteroid(obj_pair *pair)
int model_collide(mc_info *mc_info_obj)
void beam_add_light_large(beam *bm, object *objp, vec3d *pt0, vec3d *pt1)
int timestamp(int delta_ms)
#define SIF2_SURFACE_SHIELDS
void beam_apply_lighting()
model_subsystem * system_info
void send_beam_fired_packet(object *shooter, ship_subsys *turret, object *target, int beam_info_index, beam_info *override, int bfi_flags, int bank_point)
weapon Weapons[MAX_WEAPONS]
SCP_vector< ArmorType > Armor_types
EModelAnimationPosition turret_animation_position
float beam_friendly_damage_cap[NUM_SKILL_LEVELS]
int Cmdline_old_collision_sys
#define PCM_WARPOUT_STAGE1
void vm_vec_scale_add(vec3d *dest, const vec3d *src1, const vec3d *src2, float k)
float frand_range(float min, float max)
Return a floating point number in the range min..max.
polymodel * model_get(int model_num)
weapon_info Weapon_info[MAX_WEAPON_TYPES]
float shield_get_strength(object *objp)
SCP_vector< game_snd > Snds
void weapon_load_bitmaps(int weapon_index)
#define AIPF2_BEAMS_DAMAGE_WEAPONS
asteroid Asteroids[MAX_ASTEROIDS]
int get_quadrant(vec3d *hit_pnt, object *shipobjp)
void ship_get_global_turret_gun_info(object *objp, ship_subsys *ssp, vec3d *gpos, vec3d *gvec, int use_angles, vec3d *targetp)
void beam_type_d_move(beam *b)
void beam_start_warmup(beam *b)
ubyte g3_transfer_vertex(vertex *dest, const vec3d *src)
int beam_get_collision(int objnum, int num, int *collision_objnum, mc_info **cinfo)
ship_type_info * ship_get_type_info(object *objp)
float vm_vec_normalize_quick(vec3d *src)
int beam_collide_missile(obj_pair *pair)
void beam_calc_facing_pts(vec3d *top, vec3d *bot, vec3d *fvec, vec3d *pos, float w, float z_add)
int beam_get_parent(object *bm)
float beam_get_cone_dot(beam *b)
#define list_append(head, elem)
void beam_get_global_turret_gun_info(object *objp, ship_subsys *ssp, vec3d *gpos, vec3d *gvec, int use_angles, vec3d *targetp, bool fighter_beam)
#define BEAM_AREA_PERCENT
float piercing_impact_particle_variance
#define TMAP_HTL_3D_UNLIT
ship_subsys * target_subsys
int GetAnim(int weapon_expl_index, vec3d *pos, float size)
#define BFIF_TARGETING_COORDS
int beam_will_tool_target(beam *b, object *objp)
int beam_collide_debris(obj_pair *pair)
#define STI_WEAP_BEAMS_EASILY_HIT
vec3d * vm_vec_rotate(vec3d *dest, const vec3d *src, const matrix *m)
#define Assertion(expr, msg,...)
#define END_OF_LIST(head)
void vm_vec_random_cone(vec3d *out, const vec3d *in, float max_angle, const matrix *orient)
float shot_aim[MAX_BEAM_SHOTS]
void beam_generate_muzzle_particles(beam *b)
DCF(beam_list,"Lists all beams")
void vm_vec_scale_add2(vec3d *dest, const vec3d *src, float k)
void beam_add_light(beam *b, int objnum, int source, vec3d *c_point)
float piercing_impact_particle_back_velocity
void beam_get_cull_vals(object *objp, beam *b, float *cull_dot, float *cull_dist)
GLenum GLenum GLenum GLenum GLenum scale
void gr_set_bitmap(int bitmap_num, int alphablend_mode, int bitblt_mode, float alpha)
GLfloat GLfloat GLfloat v2
void vm_vec_dist_squared_to_line(const vec3d *p, const vec3d *l0, const vec3d *l1, vec3d *nearest, float *dist_squared)
#define BF_TARGETING_COORDS
float beam_get_ship_damage(beam *b, object *objp)
void snd_update_3d_pos(int soundnum, game_snd *gs, vec3d *new_pos, float radius, float range_factor)
#define BF_IS_FIGHTER_BEAM
void beam_type_a_move(beam *b)
int beam_collide_early_out(object *a, object *b)
void ship_apply_whack(vec3d *force, vec3d *hit_pos, object *objp)
float vm_vec_mag_squared(const vec3d *v)
script_state Script_system("FS2_Open Scripting")
void beam_type_b_move(beam *b)
int piercing_impact_weapon_expl_index
#define MAX_BEAM_LIGHT_INFO
float beam_iff_miss_factor[MAX_IFFS][NUM_SKILL_LEVELS]
#define CLAMP(x, min, max)
void debris_hit(object *debris_obj, object *other_obj, vec3d *hitpos, float damage)
int beam_fire_targeting(fighter_beam_fire_info *fire_info)
vec3d targeting_laser_offset
void beam_get_octant_points(int modelnum, object *objp, int oct_index, int oct_array[BEAM_NUM_GOOD_OCTANTS][4], vec3d *v1, vec3d *v2)
float beam_particle_radius
int flash_impact_weapon_expl_index
typedef int(SCP_EXT_CALLCONV *SCPDLL_PFVERSION)(SCPDLL_Version *)
int Beam_good_slash_octants[BEAM_NUM_GOOD_OCTANTS][4]
matrix * vm_vector_2_matrix(matrix *m, const vec3d *fvec, const vec3d *uvec, const vec3d *rvec)
float ship_get_subsystem_strength(ship *shipp, int type)
void vm_vec_add2(vec3d *dest, const vec3d *src)
#define GR_ALPHABLEND_FILTER
GLdouble GLdouble GLdouble r
#define STI_WEAP_NO_HUGE_IMPACT_EFF
struct matrix::@228::@230 vec
void beam_delete(beam *b)
float ship_max_hull_strength
void vm_vec_scale(vec3d *dest, float s)
float beam_particle_angle
void beam_recalc_sounds(beam *b)
#define TMAP_FLAG_GOURAUD
void beam_get_binfo(beam *b, float accuracy, int num_shots)
#define CHA_COLLIDEDEBRIS
GLboolean GLboolean GLboolean GLboolean a
int obj_create(ubyte type, int parent_obj, int instance, matrix *orient, vec3d *pos, float radius, uint flags)
float flash_impact_explosion_radius
beam_collision r_collisions[MAX_FRAME_COLLISIONS]
int ship_subsys_disrupted(ship_subsys *ss)
#define SADTF_PIERCING_DEFAULT
ai_profile_t * ai_profile
generic_anim beam_particle_ani
int snd_play_3d(game_snd *gs, vec3d *source_pos, vec3d *listen_pos, float radius, vec3d *source_vel, int looping, float vol_scale, int priority, vec3d *sound_fvec, float range_factor, int force, bool is_ambient)
void beam_render_muzzle_glow(beam *b)
void weapon_hit(object *weapon_obj, object *other_obj, vec3d *hitpos, int quadrant=-1)
int vm_vec_dist_to_line(const vec3d *p, const vec3d *l0, const vec3d *l1, vec3d *nearest, float *dist)
#define BFIF_FLOATING_BEAM
void hud_shield_quadrant_hit(object *objp, int quadrant)
beam_weapon_section_info sections[MAX_BEAM_SECTIONS]
#define MAX_BEAM_SECTIONS
ubyte g3_rotate_vertex(vertex *dest, const vec3d *src)
model_subsystem beam_sys_info
bool turret_fov_test(ship_subsys *ss, vec3d *gvec, vec3d *v2e, float size_mod)
void beam_jitter_aim(beam *b, float aim)
float vm_vec_normalized_dir(vec3d *dest, const vec3d *end, const vec3d *start)
float vm_vec_dist(const vec3d *v0, const vec3d *v1)
int beam_get_num_collisions(int objnum)
bool beam_sort_collisions_func(const beam_collision &b1, const beam_collision &b2)
bool dc_optional_string_either(const char *str1, const char *str2)
Searches for an optional string and it's alias.
#define SADTF_PIERCING_RETAIL
#define MSS_FLAG_TURRET_ALT_MATH
int beam_fire(beam_fire_info *fire_info)
float piercing_impact_explosion_radius
int turret_num_firing_points
float vm_vec_normalize_safe(vec3d *v)
int g3_project_vertex(vertex *point)
debris Debris[MAX_DEBRIS_PIECES]
beam_info * beam_info_override
#define MC_CHECK_SPHERELINE
#define CHA_COLLIDEASTEROID
#define SUBSYSTEM_WEAPONS
vec3d * vm_vec_unrotate(vec3d *dest, const vec3d *src, const matrix *m)
float piercing_impact_particle_velocity
float vm_vec_dist_squared(const vec3d *v0, const vec3d *v1)
object Objects[MAX_OBJECTS]
bool weapon_is_used(int weapon_index)
void submodel_get_two_random_points(int model_num, int submodel_num, vec3d *v1, vec3d *v2, vec3d *n1=NULL, vec3d *n2=NULL)
#define MSS_FLAG2_SHARE_FIRE_DIRECTION
vec3d targeting_laser_offset
void vm_vec_interp_constant(vec3d *out, const vec3d *v0, const vec3d *v1, float t)
#define CHA_COLLIDEWEAPON
void beam_add_light_small(beam *bm, object *objp, vec3d *pt_override=NULL)
void beam_apply_whack(beam *b, object *objp, vec3d *hit_point)
vec3d targeting_laser_offset
#define BEAM_WARMDOWN_PCT(b)
void vm_vec_copy_scale(vec3d *dest, const vec3d *src, float s)
#define SADTF_PIERCING_NONE
void add_shield_point(int objnum, int tri_num, vec3d *hit_pos)
#define GM_STANDALONE_SERVER
#define TMAP_FLAG_CORRECT
void dc_stuff_float(float *f)
Stuffs a float to the given variable.
void vm_vec_random_in_circle(vec3d *out, const vec3d *in, const matrix *orient, float radius, int on_edge)
void vm_vec_rand_vec_quick(vec3d *rvec)
int is_valid_vec(const vec3d *vec)
#define WIF2_PIERCE_SHIELDS
int turret_animation_done_time
int beam_get_weapon_info_index(object *bm)
void dc_stuff_int(int *i)
Stuffs an int to the given variable. Supports binary (0b), hexadecimal (0x), and octal (0o) formats...
GLuint const GLchar * name
int RunCondition(int condition, char format='\0', void *data=NULL, class object *objp=NULL, int more_data=0)
int beam_collide_ship(obj_pair *pair)
void SetHookObjects(int num,...)
void vm_vec_sub(vec3d *dest, const vec3d *src0, const vec3d *src1)
GLboolean GLboolean GLboolean b
void light_add_tube(const vec3d *p0, const vec3d *p1, float r1, float r2, float intensity, float r, float g, float b, int affected_objnum, float spec_r, float spec_g, float spec_b, bool specular)
typedef float(SCP_EXT_CALLCONV *SCPTRACKIR_PFFLOATVOID)()
float beam_section_frame[MAX_BEAM_SECTIONS]
void obj_delete(int objnum)
int vm_vec_same(const vec3d *v1, const vec3d *v2)
#define BFIF_IS_FIGHTER_BEAM
float vm_vec_dist_quick(const vec3d *v0, const vec3d *v1)
int beam_start_firing(beam *b)
float frand()
Return random value in range 0.0..1.0- (1.0- means the closest number less than 1.0)
#define BFIF_FORCE_FIRING
GLubyte GLubyte GLubyte GLubyte w
ship_subsys * target_subsys
void submodel_get_two_random_points_better(int model_num, int submodel_num, vec3d *v1, vec3d *v2)
#define BEAM_WARMUP_PCT(b)
#define PARTICLE_BITMAP_PERSISTENT
void beam_start_warmdown(beam *b)
void beam_type_d_get_status(beam *b, int *shot_index, int *fire_wait)
void beam_render(beam *b, float u_offset)
#define MAX_FRAME_COLLISIONS
int beam_get_model(object *objp)
void RemHookVars(unsigned int num,...)
long Game_time_compression
#define MULTIPLAYER_MASTER
An overhauled/updated debug console to allow monitoring, testing, and general debugging of new featur...
void snd_set_volume(int sig, float volume)
SCP_vector< ship_info > Ship_info
int Beam_good_shot_octants[BEAM_NUM_GOOD_OCTANTS][4]
#define TMAP_FLAG_TEXTURED
void ship_apply_local_damage(object *ship_objp, object *other_obj, vec3d *hitpos, float damage, int quadrant, bool create_spark, int submodel_num, vec3d *hit_normal)
#define SND_PRIORITY_SINGLE_INSTANCE
#define timestamp_elapsed(stamp)
void beam_add_collision(beam *b, object *hit_object, mc_info *cinfo, int quad=-1, int exit_flag=0)
int g3_draw_bitmap(vertex *pos, int orient, float radius, uint tmap_flags, float depth=0.0f)
#define list_remove(head, elem)
#define BEAM_NUM_GOOD_OCTANTS
float vm_vec_dot(const vec3d *v0, const vec3d *v1)
GLenum GLuint GLenum GLsizei length
beam_collision f_collisions[MAX_FRAME_COLLISIONS]
void asteroid_hit(object *pasteroid_obj, object *other_obj, vec3d *hitpos, float damage)
GLsizei GLsizei GLchar * source
#define GR_BITBLT_MODE_NORMAL
float impact_explosion_radius
weapon_explosions Weapon_explosions
void beam_type_e_move(beam *b)
void dc_printf(const char *format,...)
Prints the given char string to the debug console.
bool is_minimum_GLSL_version()
void light_add_point_unique(const vec3d *pos, float r1, float r2, float intensity, float r, float g, float b, int affected_objnum, float spec_r, float spec_g, float spec_b, bool specular)
vec3d * vm_vec_cross(vec3d *dest, const vec3d *src0, const vec3d *src1)
particle * particle_create(particle_info *pinfo)
int g3_draw_poly(int nv, vertex **pointlist, uint tmap_flags)
GLclampf GLclampf GLclampf alpha
struct beam_light_info beam_light_info
GLdouble GLdouble GLdouble GLdouble top
void beam_type_c_move(beam *b)
void beam_handle_collisions(beam *b)
bool IsConditionOverride(int action, object *objp=NULL)
SCP_vector< asteroid_info > Asteroid_info
void vm_vec_add(vec3d *dest, const vec3d *src0, const vec3d *src1)
int impact_weapon_expl_index
matrix vmd_identity_matrix
int ship_is_shield_up(object *obj, int quadrant)
void beam_unpause_sounds()
SCP_vector< ship_type_info > Ship_types
beam_light_info Beam_lights[MAX_BEAM_LIGHT_INFO]
#define AIPF_FORCE_BEAM_TURRET_FOV
float beam_get_widest(beam *b)
#define OBJ_RECALC_PAIRS(obj_to_reset)
float vm_vec_delta_ang_norm(const vec3d *v0, const vec3d *v1, const vec3d *fvec)
float vm_vec_normalize(vec3d *v)
void ship_maybe_play_primary_fail_sound()