78 static int ballistic_hud_index = 0;
121 #define MIN_DISTANCE_TO_CONSIDER_THREAT 1500 // min distance to show hostile warning triangle
126 #define RL_USED (1<<0)
127 #define RL_USE_DOT (1<<1) // use dot product result, not distance
136 #define RESET_TARGET_IN_RETICLE 750
140 #define MAX_RETICLE_TARGETS 50
146 #define TL_RESET 1500
147 #define TURRET_RESET 1000
148 static int Tl_hostile_reset_timestamp;
149 static int Tl_friendly_reset_timestamp;
150 static int Target_next_uninspected_object_timestamp;
151 static int Target_newest_ship_timestamp;
152 static int Target_next_turret_timestamp;
184 {
"lead1_fs1",
"2_lead1_fs1" },
185 {
"lead1",
"2_lead1" }
221 #define TOGGLE_TEXT_AUTOT 0
222 #define TOGGLE_TEXT_TARGET 1
223 #define TOGGLE_TEXT_AUTOS 2
224 #define TOGGLE_TEXT_SPEED 3
230 #define NUM_WEAPON_GAUGES 5
430 #define MAX_WEAPON_FLASH_LINES 7 // 3 primary and 4 secondary
527 Reticle_list[
i].
flags = 0;
575 if ( i == MAX_RETICLE_TARGETS ) {
587 #define RETICLE_DEFAULT_DIST 100000.0f
588 #define RETICLE_DEFAULT_DOT 1.0f
620 if( jnp->GetSCPObject() !=
objp )
623 if( jnp->IsHidden() )
629 if ( rl->
objp == objp )
637 new_rl = &Reticle_list[
i];
641 int was_inserted = 0;
643 if (
EMPTY(&Reticle_cur_list) ) {
651 if ( measure < rl->dist ) {
659 if ( measure > rl->
dot ) {
668 if ( !was_inserted ) {
688 int debris_in_list = 0;
689 int ship_in_list = 0;
709 if ( ship_in_list && debris_in_list ) {
714 while ( rl != &Reticle_cur_list ) {
727 if ( cur_rl->
objp == save_rl->
objp ) {
733 if ( !in_save_list ) {
734 return_objp = cur_rl->
objp;
739 new_rl = &Reticle_list[
i];
753 if ( return_objp == NULL && !
EMPTY(&Reticle_cur_list) ) {
757 new_rl = &Reticle_list[
i];
760 return_objp = cur_rl->
objp;
780 nprintf((
"Warning",
"Bogus hotkey %d sent to hud_target_hotkey_add_remove\n", k));
809 if ( hitem->
objp == ctarget )
815 if (
EMPTY(&htarget_free_list) ) {
824 hitem->
objp = ctarget;
857 int visible_count = 0;
863 if (
EMPTY( plist ) )
874 if (visible_count == 0) {
892 if (first_target == NULL) {
893 first_target = hitem;
897 if (target != NULL) {
911 if (target == NULL) {
912 Assert(first_target != NULL);
913 if (first_target != NULL) {
914 target = first_target;
915 next_target = first_target;
927 if (visible_count > 1) {
929 if (next_target != NULL) {
930 target = next_target;
995 list_append( &htarget_free_list, &htarget_items[i] );
1024 ballistic_hud_index = 0;
1029 ballistic_hud_index = 1;
1062 Tl_hostile_reset_timestamp =
timestamp(0);
1063 Tl_friendly_reset_timestamp =
timestamp(0);
1064 Target_next_uninspected_object_timestamp =
timestamp(0);
1065 Target_newest_ship_timestamp =
timestamp(0);
1066 Target_next_turret_timestamp =
timestamp(0);
1118 subsys_to_target =
A;
1123 if ( subsys_to_target == NULL ) {
1160 object *
A, *
start, *start2;
1162 int is_ship, target_found =
FALSE;
1175 if (A == &obj_used_list)
1202 if( jnp->GetSCPObject() ==
A )
1206 if( jnp->IsHidden() )
1226 target_found =
TRUE;
1234 target_found =
TRUE;
1242 if ( target_found ==
FALSE ) {
1296 static object* select_next_target_by_distance(
const bool targeting_from_closest_to_farthest,
const int valid_team_mask,
const int attacked_object_number = -1,
const int target_filters = (
SIF_CARGO |
SIF_NAVBUOY)) {
1297 object *minimum_object_ptr, *maximum_object_ptr, *nearest_object_ptr;
1298 minimum_object_ptr = maximum_object_ptr = nearest_object_ptr = NULL;
1300 float minimum_distance = 1e20f;
1301 float maximum_distance = 0.0f;
1304 float nearest_distance;
1305 if ( targeting_from_closest_to_farthest ) {
1306 nearest_distance = 1e20f;
1308 nearest_distance = 0.0f;
1312 object *prospective_victim_ptr;
1313 ship *prospective_victim_ship_ptr;
1315 prospective_victim_ptr = &
Objects[ ship_object_ptr->
objnum];
1317 prospective_victim_ship_ptr = &
Ships[prospective_victim_ptr->
instance];
1335 if( attacked_object_number == -1 ) {
1348 if ( (attacked_object_number == player_object_index) && (
Ai_info[prospective_victim_ship_ptr->
ai_index].
target_objnum != player_object_index) ) {
1351 esct eval_ship_as_closest_target_args;
1352 eval_ship_as_closest_target_args.
attacked_objnum = attacked_object_number;
1353 eval_ship_as_closest_target_args.
check_all_turrets = (attacked_object_number == player_object_index);
1357 eval_ship_as_closest_target_args.
filter = 0;
1358 eval_ship_as_closest_target_args.
team_mask = valid_team_mask;
1362 eval_ship_as_closest_target_args.
shipp = prospective_victim_ship_ptr;
1365 new_distance = eval_ship_as_closest_target_args.
min_distance;
1369 if (new_distance <= minimum_distance) {
1370 minimum_distance = new_distance;
1371 minimum_object_ptr = prospective_victim_ptr;
1374 if (new_distance >= maximum_distance) {
1375 maximum_distance = new_distance;
1376 maximum_object_ptr = prospective_victim_ptr;
1380 if ( targeting_from_closest_to_farthest ) {
1381 diff = new_distance - current_distance;
1382 if ( diff > 0.0
f ) {
1383 if ( diff < ( nearest_distance - current_distance ) ) {
1384 nearest_distance = new_distance;
1385 nearest_object_ptr = prospective_victim_ptr;
1389 diff = current_distance - new_distance;
1390 if ( diff > 0.0
f ) {
1391 if ( diff < ( current_distance - nearest_distance ) ) {
1392 nearest_distance = new_distance;
1393 nearest_object_ptr = prospective_victim_ptr;
1399 if ( nearest_object_ptr == NULL ) {
1401 if ( targeting_from_closest_to_farthest ) {
1402 if ( minimum_object_ptr != NULL ) {
1403 nearest_object_ptr = minimum_object_ptr;
1406 if ( maximum_object_ptr != NULL ) {
1407 nearest_object_ptr = maximum_object_ptr;
1412 return nearest_object_ptr;
1428 object *
A, *target_objp;
1432 int target_found = 0;
1484 target_found =
TRUE;
1490 if ( !target_found ) {
1532 target_found =
TRUE;
1539 if ( !target_found ) {
1569 object *
A, *
start, *start2;
1571 int target_found = 0;
1582 if ( A == &obj_used_list ) {
1607 target_found =
TRUE;
1613 if ( target_found ==
FALSE ) {
1621 object *
A, *player_target_objp;
1622 object *newest_obj=NULL;
1625 uint current_target_arrived_time = 0xffffffff, newest_time = 0;
1633 player_target_objp = NULL;
1638 current_target_arrived_time = 0xffffffff;
1655 if ( A == player_target_objp ) {
1682 #define TYPE_FACING_BEAM 1
1683 #define TYPE_FACING_FLAK 2
1684 #define TYPE_FACING_MISSILE 3
1685 #define TYPE_FACING_LASER 4
1686 #define TYPE_NONFACING_BEAM 5
1687 #define TYPE_NONFACING_FLAK 6
1688 #define TYPE_NONFACING_MISSILE 7
1689 #define TYPE_NONFACING_LASER 8
1690 #define TYPE_NONFACING_INC 4
1709 float delta_dist = p1->
dist - p2->
dist;
1710 if (delta_dist < 0) {
1712 }
else if (delta_dist > 0) {
1731 int num_live_turrets = 0;
1750 int timestamp_val = 0;
1751 if (!auto_advance) {
1752 timestamp_val = Target_next_turret_timestamp;
1757 int last_subsys_turret =
FALSE;
1761 last_subsys_turret =
TRUE;
1767 int get_closest_turret = (auto_advance || !last_subsys_turret ||
timestamp_elapsed(timestamp_val));
1770 memset(ent,0,
sizeof(ent));
1771 int use_straight_ahead_turret =
FALSE;
1784 vec3d gsubpos, vec_to_subsys;
1785 float distance, dot;
1793 if (!auto_advance && get_closest_turret && !only_player_target) {
1796 if ((dot > 0.9986) && facing) {
1797 use_straight_ahead_turret =
TRUE;
1819 ent[num_live_turrets].
ss =
A;
1820 ent[num_live_turrets].
dist = distance;
1831 if (!use_straight_ahead_turret) {
1835 if (use_straight_ahead_turret) {
1840 int i, start_index, next_index;
1841 if (get_closest_turret) {
1845 for (i=0; i<num_live_turrets; i++) {
1852 if (start_index == -1) {
1858 if (num_live_turrets == 0) {
1861 }
else if (num_live_turrets == 1 || get_closest_turret) {
1863 live_turret = ent[0].
ss;
1867 next_index = start_index + 1;
1868 if (next_index == num_live_turrets) {
1873 next_index = start_index - 1;
1874 if (next_index == -1) {
1875 next_index = num_live_turrets - 1;
1880 live_turret = ent[next_index].
ss;
1889 if ( live_turret != NULL ) {
1893 if (!auto_advance) {
1910 object *
A, *nearest_obj=NULL;
1913 float nearest_dist, dist;
1914 int target_found =
FALSE;
1917 nearest_dist = 10000.0f;
1951 if (dist < nearest_dist) {
1953 nearest_dist = dist;
1958 if (nearest_dist < 10000.0
f) {
1962 target_found =
TRUE;
1965 if ( !target_found ){
2016 switch( targetee->
type ) {
2040 if ( model_num > -1 ) {
2045 if ( dist < 0.0
f ) {
2071 int targeting_player, turret_is_attacking;
2078 turret_is_attacking =
FALSE;
2127 turret_is_attacking = 1;
2147 if (new_distance <= esct_p->min_distance) {
2158 if ( !targeting_player && !turret_is_attacking ) {
2171 if ( !turret_is_attacking ) {
2175 if (new_distance <= esct_p->min_distance) {
2218 int check_nearest_turret =
FALSE;
2221 esct eval_ship_as_closest_target_args;
2223 float min_distance = FLT_MAX;
2224 int target_found =
FALSE;
2229 int initial_attacked_objnum = attacked_objnum;
2231 if ( (attacked_objnum >= 0) && (attacked_objnum != player_obj_index) ) {
2234 goto Target_closest_done;
2238 goto Target_closest_done;
2243 goto Target_closest_done;
2247 if (attacked_objnum == -1) {
2248 attacked_objnum = player_obj_index;
2252 eval_ship_as_closest_target_args.
check_all_turrets = (attacked_objnum == player_obj_index);
2254 eval_ship_as_closest_target_args.
team_mask = team_mask;
2264 eval_ship_as_closest_target_args.
shipp =
shipp;
2272 if (eval_ship_as_closest_target_args.
min_distance < min_distance) {
2273 target_found =
TRUE;
2274 min_distance = eval_ship_as_closest_target_args.
min_distance;
2280 Target_closest_done:
2298 if ( check_nearest_turret ) {
2302 if (ss == NULL || get_closest_turret_attacking_player) {
2312 if (play_fail_snd ==
TRUE) {
2317 return target_found;
2390 object *
objp = NULL;
2391 object *tt_objp = NULL;
2404 if ( tt_objnum < 0 || tt_objnum >=
MAX_OBJECTS ) {
2412 tt_objp = &
Objects[tt_objnum];
2449 obj_type = target_objp->
type;
2457 if(jnp->GetSCPObject() == target_objp)
2461 if (!jnp->IsHidden())
2481 #define TARGET_IN_RETICLE_DISTANCE 10000.0f
2546 if(jnp->GetSCPObject() ==
A)
2563 if (angle > 0.99
f) {
2600 #define MIN_DOT_FOR_TARGET 0.9726// fov for targeting in reticle
2604 object *
A, *target_obj;
2606 vec3d vec_to_target;
2648 if ( target_obj != NULL ) {
2680 float dot, best_dot;
2681 vec3d vec_to_target;
2718 if ( dot > best_dot ) {
2721 nearest_subsys = subsys;
2725 if ( nearest_subsys != NULL ) {
2730 for (i = 0; r_name[
i] > 0; i++) {
2731 if (r_name[i] ==
'|')
2743 #define T_OFFSET_FROM_CIRCLE -13
2744 #define T_BASE_LENGTH 4
2751 vec3d target_to_obj;
2752 float x1,y1,x2,y2,x3,y3,x4,y4;
2763 dot_product =
vm_vec_dot(&from_orientp->
vec.fvec, &target_to_obj);
2765 if (
vm_vec_dot(&from_orientp->
vec.rvec, &target_to_obj) >= 0) {
2766 if (dot_product >= 0){
2767 dot_product = -
PI_2*dot_product +
PI;
2769 dot_product = -
PI_2*dot_product -
PI;
2772 dot_product *=
PI_2;
2803 void hud_tri(
float x1,
float y1,
float x2,
float y2,
float x3,
float y3)
2809 float det = (y2-y1)*(x3-x1) - (x2-x1)*(y3-y1);
2810 if ( det >= 0.0
f ) {
2829 memset(verts, 0,
sizeof(verts));
2831 for (i=0; i<3; i++ )
2832 vertlist[i] = &verts[i];
2934 float sin_ang, cos_ang, tail_len;
2936 float max_tail_len=20.0f;
2944 tail_len = max_tail_len;
2949 if ( draw_inside ) {
2958 if ( tail_len > 0 ) {
2959 xtail = xpos - tail_len * cos_ang;
2960 ytail = ypos + tail_len * sin_ang;
2972 if ( tail_len > 0 ) {
2973 xtail = xpos + tail_len * cos_ang;
2974 ytail = ypos - tail_len * sin_ang;
2980 hud_tri(xpos,ypos,x1,y1,x2,y2);
2986 if ( tail_len > 0 ) {
3000 float xpos,ypos,cur_dist,sin_ang,cos_ang;
3011 if (hostile_vertex.
codes == 0) {
3012 int projected_x, projected_y;
3020 unsize(&projected_x, &projected_y);
3026 if ( show_interior ) {
3046 if ( draw_inside ) {
3066 if ( draw_inside ) {
3088 hud_tri(xpos,ypos,x1,y1,x2,y2);
3103 float dist, nearest_dist;
3104 int closest_is_aspect=0;
3117 if (dist < nearest_dist) {
3118 nearest_dist = dist;
3120 closest_is_aspect=1;
3122 closest_is_aspect=0;
3139 if ( (delta_time*1000) > cycle_time ) {
3145 if ( closest_is_aspect ) {
3230 memset(&target_point, 0,
sizeof(target_point));
3246 switch ( mobjp->
type ) {
3275 Assert ( targetp != NULL );
3307 memset(&target_point, 0,
sizeof(target_point));
3315 }
else if (target_point.
codes != 0) {
3339 if (
EMPTY( plist ) )
3394 HUD_drew_selection_bracket_on_target = 0;
3412 memset(&target_point, 0,
sizeof(target_point));
3415 targetp = hitem->
objp;
3416 Assert ( targetp != NULL );
3418 ship *target_shipp = NULL;
3442 switch ( targetp->
type ) {
3452 HUD_drew_selection_bracket_on_target = 1;
3460 if (target_point.
codes != 0) {
3492 if ( targetp == &obj_used_list ) {
3500 target_pos = targetp->
pos;
3512 if (target_point.
codes == 0) {
3513 int target_display_flags;
3540 if (target_point.
codes != 0) {
3559 float min_distance=1e20f;
3560 float new_distance=0.0f;
3568 int turret_is_attacking = 0;
3599 turret_is_attacking = 0;
3610 turret_is_attacking = 1;
3618 if (new_distance <= min_distance) {
3619 min_distance=new_distance;
3627 if ( !turret_is_attacking ) {
3640 if (new_distance <= min_distance) {
3641 min_distance=new_distance;
3647 if ( nearest_obj == &obj_used_list ) {
3655 hostile_obj = nearest_obj;
3684 vec3d target_moving_direction;
3685 vec3d last_delta_vector;
3686 float time_to_target, target_moved_dist;
3689 time_to_target = dist_to_target / wip->
max_speed;
3703 *lead_target_pos = *target_pos;
3706 vm_vec_scale(&target_moving_direction, target_moved_dist);
3707 vm_vec_add(lead_target_pos, target_pos, &target_moving_direction );
3721 int i, best_bank, bank_to_fire, num_to_test;
3722 float weapon_range, farthest_weapon_range;
3728 farthest_weapon_range = 0.0f;
3737 for ( i = 0; i < num_to_test; i++ )
3743 Assert(bank_to_fire >= 0 && bank_to_fire < swp->num_primary_banks);
3761 if ( weapon_range > farthest_weapon_range )
3763 best_bank = bank_to_fire;
3764 farthest_weapon_range = weapon_range;
3768 *range = farthest_weapon_range;
3781 float time_to_enemy;
3782 vec3d last_predicted_enemy_pos = *predicted_enemy_pos;
3795 for (iteration=0; iteration < num_polish_steps; iteration++) {
3797 time_to_enemy = dist_to_enemy/weapon_speed;
3798 vm_vec_scale_add(predicted_enemy_pos, enemy_pos, &enemy_vel, time_to_enemy);
3799 vm_vec_sub(last_delta_vec, predicted_enemy_pos, &last_predicted_enemy_pos);
3800 last_predicted_enemy_pos= *predicted_enemy_pos;
3842 int frame_offset=-1;
3843 int in_prange=0, in_srange=0;
3845 if ( dist_to_target < prange ) {
3849 if ( dist_to_target < srange ) {
3853 if ( in_prange && in_srange ) {
3855 }
else if ( in_prange && !in_srange ) {
3857 }
else if ( !in_prange && in_srange ) {
3863 return frame_offset;
3880 for(
size_t i = 0;
i < target_display_list.size();
i++) {
3884 if( target_display_list[
i].bracket_clr.red && target_display_list[
i].bracket_clr.green &&
3885 target_display_list[
i].bracket_clr.blue ) {
3902 vertex lead_target_vertex;
3907 if (lead_target_vertex.
codes == 0) {
3917 if ( Lead_indicator_gauge.
first_frame + frame_offset >= 0 ) {
3934 vec3d lead_target_pos;
3940 float dist_to_target, prange, srange;
3941 int bank_to_fire, frame_offset;
3970 target_pos = targetp->
pos;
3983 if ( bank_to_fire < 0 )
3988 if (pm->
n_guns && bank_to_fire != -1 ) {
3998 if (rel_pos != NULL) {
4027 frame_offset =
pickFrame(prange, srange, dist_to_target);
4028 if ( frame_offset < 0 ) {
4047 if (dist_to_target > max_dist)
4066 vec3d lead_target_pos;
4070 float dist_to_target, prange;
4071 int bank_to_fire, frame_offset;
4101 if ( bank_to_fire < 0 )
4105 if (pm->
n_guns && bank_to_fire != -1 ) {
4118 if (rel_pos != NULL) {
4128 frame_offset =
pickFrame(prange, -1.0
f, dist_to_target);
4129 if ( frame_offset < 0 ) {
4163 vertex lead_target_vertex;
4164 float target_lead_sx;
4165 float target_lead_sy;
4170 if (lead_target_vertex.
codes != 0)
4178 target_lead_sx = lead_target_vertex.
screen.
xyw.x;
4179 target_lead_sy = lead_target_vertex.
screen.
xyw.y;
4184 if (target_vertex.
codes != 0)
4198 unsize(&target_lead_sx, &target_lead_sy);
4199 unsize(&target_sx, &target_sy);
4201 float reticle_target_sx = target_sx -
Lead_sight_half[0] - target_lead_sx;
4202 float reticle_target_sy = target_sy -
Lead_sight_half[1] - target_lead_sy;
4204 reticle_target_sx +=
position[0] + 0.5f;
4205 reticle_target_sy +=
position[1] + 0.5f;
4222 vec3d lead_target_pos;
4227 float dist_to_target, prange;
4255 target_pos = targetp->
pos;
4267 if ( bank_to_fire < 0 )
4271 if (pm->
n_guns && bank_to_fire != -1 ) {
4281 if (rel_pos != NULL) {
4292 if ( dist_to_target < prange ) {
4321 if (dist_to_target > max_dist) {
4351 if ( ship_index < 0 )
4357 if ( print_message ) {
4409 float current_speed=0.0f;
4484 if (current_speed < Player_ai->last_speed-0.01){
4565 if ( Weapon_flash_info.
is_bright & (1<<index) ) {
4637 void hud_target_next_list(
int hostile,
int next_flag,
int team_mask,
int attacked_objnum,
int play_fail_snd,
int filter,
int get_closest_turret_attacking_player)
4639 int timestamp_val, valid_team_mask;
4642 timestamp_val = Tl_hostile_reset_timestamp;
4644 if ( team_mask == -1 ) {
4647 valid_team_mask = team_mask;
4656 timestamp_val = Tl_friendly_reset_timestamp;
4663 hud_target_closest(valid_team_mask, attacked_objnum, play_fail_snd, filter, get_closest_turret_attacking_player);
4667 object *nearest_object = select_next_target_by_distance((next_flag != 0), valid_team_mask, attacked_objnum);
4669 if (nearest_object != NULL) {
4710 if ( r == -1 || g == -1 || b == -1 || a == -1 ) {
4722 if ( r == -1 || g == -1 || b == -1 || a == -1 ) {
4750 if (frame_offset == 1) {
4796 if ( r == -1 || g == -1 || b == -1 || a == -1 ) {
4808 if ( r == -1 || g == -1 || b == -1 || a == -1 ) {
4836 if (frame_offset == 3) {
4864 float min_distance=1e20f;
4865 float new_distance=0.0f;
4889 if ( goal_objnum >= 0 ) {
4897 if (new_distance <= min_distance) {
4898 min_distance=new_distance;
4903 if (nearest_obj != &obj_used_list) {
4911 if ( goal_objnum == -1 ) {
4934 object *
A, *nearest_obj = NULL;
4937 float min_distance = 1e20f;
4938 float new_distance = 0.0f;
4960 if (new_distance <= min_distance) {
4961 min_distance=new_distance;
4966 if (nearest_obj != NULL) {
4979 object *
A, *min_obj, *max_obj, *nearest_obj;
4982 float cur_dist, min_dist, max_dist, new_dist, nearest_dist, diff;
4995 min_obj = max_obj = nearest_obj = NULL;
4999 nearest_dist = 1e20f;
5001 nearest_dist = 0.0f;
5027 if (new_dist <= min_dist) {
5028 min_dist = new_dist;
5032 if (new_dist >= max_dist) {
5033 max_dist = new_dist;
5038 diff = new_dist - cur_dist;
5040 if ( diff < ( nearest_dist - cur_dist ) ) {
5041 nearest_dist = new_dist;
5046 diff = cur_dist - new_dist;
5048 if ( diff < ( cur_dist - nearest_dist ) ) {
5049 nearest_dist = new_dist;
5056 if ( nearest_obj == NULL ) {
5059 if ( min_obj != NULL ) {
5060 nearest_obj = min_obj;
5063 if ( max_obj != NULL ) {
5064 nearest_obj = max_obj;
5069 if (nearest_obj != NULL) {
5091 static int Transmit_target_next_slot = 0;
5092 static int Transmit_target_current_slot = -1;
5093 static int Transmit_target_reset_timer =
timestamp(0);
5095 #define MAX_TRANSMIT_TARGETS 10
5104 Transmit_target_list[
i].
objnum = -1;
5105 Transmit_target_list[
i].
objsig = -1;
5108 Transmit_target_next_slot = 0;
5109 Transmit_target_current_slot = 0;
5110 Transmit_target_reset_timer =
timestamp(0);
5118 latest_slot = Transmit_target_next_slot - 1;
5119 if ( latest_slot < 0 ) {
5131 if ( Transmit_target_current_slot < 0 ) {
5142 int play_fail_sound = 1;
5143 int transmit_index = Transmit_target_current_slot;
5144 Assert(transmit_index >= 0);
5146 if ( Transmit_target_list[transmit_index].objnum >= 0 ) {
5147 int transmit_objnum = Transmit_target_list[transmit_index].
objnum;
5150 play_fail_sound = 0;
5152 if ( Transmit_target_list[transmit_index].objsig ==
Objects[Transmit_target_list[transmit_index].objnum].signature ) {
5154 Transmit_target_current_slot = transmit_index-1;
5155 if ( Transmit_target_current_slot < 0 ) {
5156 Transmit_target_current_slot = MAX_TRANSMIT_TARGETS - 1;
5165 if ( transmit_index < 0 ) {
5166 transmit_index = MAX_TRANSMIT_TARGETS - 1;
5170 if ( i == MAX_TRANSMIT_TARGETS ) {
5171 if ( play_fail_sound ) {
5174 Transmit_target_current_slot = -1;
5185 int targeted_objnum;
5186 targeted_objnum = Transmit_target_list[transmit_index].
objnum;
5189 if ((targeted_objnum >= 0) && (targeted_objnum <
MAX_OBJECTS)) {
5204 ship_objp = &
Objects[ship_objnum];
5212 Transmit_target_list[Transmit_target_next_slot].
objnum = ship_objnum;
5213 Transmit_target_list[Transmit_target_next_slot].
objsig = ship_objp->
signature;
5214 Transmit_target_next_slot++;
5216 Transmit_target_next_slot = 0;
5227 if((shipnum < 0) || (
Ships[shipnum].objnum < 0)){
5254 bm_page_in_aabitmap( Weapon_gauges[ballistic_hud_index][i].first_frame, Weapon_gauges[ballistic_hud_index][i].num_frames);
5273 *ship_name_text = 0;
5275 strcpy(ship_name_text, shipp->
ship_name);
5298 strcpy(ship_callsign_text,
Net_players[pn].m_player->short_callsign);
5305 strcpy(ship_callsign_text, Fred_callsigns[shipp-
Ships]);
5307 *ship_callsign_text = 0;
5329 strcpy(ship_class_text, Fred_alt_names[shipp-
Ships]);
5331 *ship_class_text = 0;
5338 if (!*ship_class_text) {
5447 if ( percent_left > 1 ) {
5448 percent_left = 1.0f;
5532 bool use_new_gauge =
false;
5541 use_new_gauge =
true;
5549 int currentx, currenty, line_height;
5566 currenty += line_height;
5578 for(y = 0; y < 10; y++) {
5606 currenty += line_height;
5627 int ballistic_ammo = 0;
5628 int max_ballistic_ammo = 0;
5629 int clip_h,
w,
h,
i;
5664 percent_left =
i2fl(ballistic_ammo) /
i2fl(max_ballistic_ammo);
5671 if ( percent_left > 1 )
5673 percent_left = 1.0f;
5680 int delta_y = 0, delta_x = 0;
5682 if ( percent_left < 0.1 ) {
5689 sprintf(buf,
"%d", ballistic_ammo);
5746 if ( Weapon_flash_info.
is_bright & (1<<i) )
6005 for(i = 0; i < np; i++) {
6016 if(
primary_last[ballistic_hud_index].first_frame != -1)
6077 for(i = 0; i < ns; i++)
6117 if ( (ms_till_fire >= 500) && ((wip->
fire_wait >= 1 ) || (ms_till_fire > wip->
fire_wait*1000)) ) {
6129 sprintf(ammo_str,
"%d", ammo);
6165 for(
int i = 0;
i < num_weapons;
i++) {
6185 if ( Weapon_flash_info.
is_bright & (1<<index) ) {
6218 target_display_list.push_back(element);
6223 target_display_list.clear();
6262 for(
size_t i = 0;
i < target_display_list.size();
i++) {
6263 if(target_display_list[
i].target_point.codes != 0) {
6266 float half_triangle_sep;
6269 if(target_display_list[
i].
objp) {
6276 if( target_display_list[
i].bracket_clr.red && target_display_list[
i].bracket_clr.green &&
6277 target_display_list[
i].bracket_clr.blue ) {
6281 if(target_display_list[i].objp) {
6289 calculatePosition(&target_display_list[i].target_point, &target_display_list[i].target_pos, &coords, &dir, &half_triangle_sep);
6298 vec3d targ_to_player;
6301 float half_gauge_length;
6315 if (dist_behind < 0) {
6316 dist_behind = dist_behind + 1.0f;
6317 if (dist_behind > 0.2 ){
6320 triangle_sep = 0.0f;
6331 *half_triangle_sep = 0.5f * triangle_sep;
6343 vertex *eye_vertex = NULL;
6345 eye_vertex = &real_eye_vertex;
6352 clip_line(&target_point,&eye_vertex,codes_or,0);
6378 xpos = (xpos<1) ? 0 : xpos;
6379 ypos = (ypos<1) ? 0 : ypos;
6386 ypos = half_gauge_length;
6396 ypos = half_gauge_length;
6406 xpos = half_gauge_length;
6416 xpos = half_gauge_length;
6444 xpos = (
float)floor(xpos);
6445 ypos = (
float)floor(ypos);
6447 if (outcoords != NULL) {
6448 outcoords->
x = xpos;
6449 outcoords->
y = ypos;
6461 float displayed_distance;
6488 if (displayed_distance > 0.0
f) {
6503 y1 = y2 = ypos - half_triangle_sep;
6506 y4 = y5 = ypos + half_triangle_sep;
6512 }
else if (dir == 1) {
6516 y1 = y2 = ypos - half_triangle_sep;
6519 y4 = y5 = ypos + half_triangle_sep;
6525 }
else if (dir == 2) {
6529 x1 = x2 = xpos - half_triangle_sep;
6532 x4 = x5 = xpos + half_triangle_sep;
6538 }
else if (dir == 3) {
6542 x1 = x2 = xpos - half_triangle_sep;
6545 x4 = x5 = xpos + half_triangle_sep;
6561 if (dir == 0 || dir == 3){
6563 }
else if (dir == 1) {
6591 Warhead_name_offsets[0] =
x;
6592 Warhead_name_offsets[1] =
y;
6597 Warhead_count_offsets[0] =
x;
6598 Warhead_count_offsets[1] =
y;
6603 Warhead_count_size[0] =
w;
6604 Warhead_count_size[1] =
h;
6609 Max_symbols =
count;
6614 Max_columns =
count;
6671 if ( ammo > Max_symbols ) {
6674 sprintf(ammo_str,
"%d", ammo);
6689 int delta_x = 0, delta_y = 0;
6691 delta_x = -Warhead_count_size[0];
6693 delta_x = Warhead_count_size[0];
6697 for ( i = 0; i < ammo; i++ ) {
6698 if ( Max_columns > 0 ) {
6699 delta_y = Warhead_count_size[1] * (i / Max_columns);
6700 column = i % Max_columns;
6820 if ( Weapon_flash_info.
is_bright & (1<<index) ) {
6885 for ( i = 0; i < num_primaries; ++
i ) {
6932 if ( num_primaries == 0 ) {
6977 int num_primaries, num_secondaries;
7001 for ( i = 0; i < num_secondaries; ++
i ) {
7031 if ( (ms_till_fire >= 500) && ((wip->
fire_wait >= 1 ) || (ms_till_fire > wip->
fire_wait*1000)) ) {
7042 sprintf(ammo_str,
"%d", ammo);
7052 if ( num_secondaries == 0 ) {
7082 _view_direction = dir;
7087 draw_primary_models = primary_models;
7088 draw_secondary_models = secondary_models;
7109 switch ( _view_direction ) {
7125 setClip(sx, sy, _size[0], _size[1]);
7139 int detail_level_lock = 1;
7186 int num_secondaries_rendered = 0;
7187 vec3d secondary_weapon_pos;
7190 if ( draw_secondary_models ) {
7202 weapon_render_info.
set_flags(render_flags);
7207 num_secondaries_rendered = 0;
7211 secondary_weapon_pos = bank->
pnt[k];
7227 num_secondaries_rendered++;
7232 weapon_render_info.
set_flags(render_flags);
7245 if ( draw_primary_models ) {
7249 for ( k = 0; k < bank->
num_slots; k++ ) {
7271 weapon_render_info.
set_flags(render_flags);
void mc_info_init(mc_info *mc)
void initPrimaryNameOffsetX(int x)
void initMaxTriSeperation(float length)
ship_subsys * advance_subsys(ship_subsys *cur, int next_flag)
int model_collide(mc_info *mc_info_obj)
char Lead_fname[NUM_HUD_RETICLE_STYLES][GR_NUM_RESOLUTIONS][MAX_FILENAME_LEN]
#define MIN_COMM_STR_TO_MESSAGE
#define list_insert_before(elem, new_elem)
#define MIN_DISTANCE_TO_CONSIDER_THREAT
void ship_maybe_warn_player(ship *enemy_sp, float dist)
bool gr_resize_screen_posf(float *x, float *y, float *w, float *h, int resize_mode)
int timestamp(int delta_ms)
int Weapon_secondary_name_x[GR_NUM_RESOLUTIONS]
#define PLAYER_FLAGS_MATCH_TARGET
struct screen3d::@234::@236 xyw
reticle_list Reticle_list[MAX_RETICLE_TARGETS]
void initSecondaryHeights(int top_h, int text_h)
#define STI_HUD_SHOW_ATTACK_DIRECTION
#define HUD_OFFSCREEN_INDICATOR
void renderBitmapEx(int frame, int x, int y, int w, int h, int sx, int sy)
model_subsystem * system_info
weapon Weapons[MAX_WEAPONS]
int primary_bank_weapons[MAX_SHIP_PRIMARY_BANKS]
#define MR_SHOW_OUTLINE_HTL
void hud_gauge_popup_start(int gauge_index, int time)
Start a gauge to pop-up.
void initCountTextOffsets(int x, int y)
void initBgFirstOffsetX(int x)
#define HUD_HOSTILE_TRIANGLE
int Weapon_secondary_reload_x[GR_NUM_RESOLUTIONS]
int Weapon_sunlinked_offset_x
void hud_target_prev(int team_mask)
char * ship_subsys_get_name(ship_subsys *ss)
int Weapon_slinked_x[GR_NUM_RESOLUTIONS]
hud_frames _background_last
float vm_vec_mag_quick(const vec3d *v)
#define TARGET_DISPLAY_DIST
bool draw_primary_models[MAX_SHIP_PRIMARY_BANKS]
reticle_list Reticle_save_list
GLfloat GLfloat GLfloat GLfloat h
#define HUD_TARGET_TRIANGLE
void vm_vec_scale_add(vec3d *dest, const vec3d *src1, const vec3d *src2, float k)
int Lead_indicator_gauge_loaded
void initAlwaysShowText(bool show_text)
#define MISSION_FLAG_FULLNEB
polymodel * model_get(int model_num)
int obj_team(object *objp)
weapon_info Weapon_info[MAX_WEAPON_TYPES]
int Cm_text_val_coords[GR_NUM_RESOLUTIONS][2]
void initBitmaps(char *fname)
void hud_target_subsystem_in_reticle()
void hud_reticle_clear_list(reticle_list *rlist)
void hud_artillery_render()
SCP_vector< game_snd > Snds
int Weapon_secondary_ammo_x[GR_NUM_RESOLUTIONS]
#define gr_end_view_matrix
void initOnColor(int r, int g, int b, int a)
#define WIF_LOCKED_HOMING
ship_obj * get_ship_obj_ptr_from_index(int index)
int Weapon_pname_coords[GR_NUM_RESOLUTIONS][2][2]
void initPrimaryWeaponOffsets(int link_x, int name_x, int ammo_x)
void mission_parse_lookup_callsign_index(int index, char *out)
void hud_num_make_mono(char *num_str, int font_num)
Convert a number string to use mono-spaced 1 character.
#define HUD_OBJECT_LEAD_SIGHT
int hud_get_best_primary_bank(float *range)
asteroid Asteroids[MAX_ASTEROIDS]
void render(float frametime)
matrix * vm_angles_2_matrix(matrix *m, const angles *a)
hud_frames Weapon_gauges[NUM_HUD_SETTINGS][NUM_WEAPON_GAUGES]
void initPrimaryAmmoOffsetX(int x)
void hud_stop_looped_locking_sounds()
void initStartNameOffsetsY(int p_y, int s_y)
int Weapon_title_coords[NUM_HUD_SETTINGS][GR_NUM_RESOLUTIONS][2]
void setGaugeColor(int bright_index=-4)
void initSecondaryWeaponOffsets(int ammo_x, int name_x, int reload_x, int linked_x, int unlinked_x)
HudGaugeSecondaryWeapons()
void initRadius(int length)
proximity warning (aspect)
#define TOGGLE_TEXT_NORMAL_ALPHA
float Max_front_seperation[GR_NUM_RESOLUTIONS]
struct _reticle_list reticle_list
#define T_OFFSET_FROM_CIRCLE
int next_secondary_fire_stamp[MAX_SHIP_SECONDARY_BANKS]
void mission_parse_lookup_alt_index(int index, char *out)
void _cdecl void void _cdecl void _cdecl Warning(char *filename, int line, SCP_FORMAT_STRING const char *format,...) SCP_FORMAT_STRING_ARGS(3
void render(float frametime)
int Speed_text_offsets[2]
void hud_stuff_ship_name(char *ship_name_text, ship *shipp)
#define HUD_OBJECT_AUTO_SPEED
#define GR_NUM_RESOLUTIONS
int HUD_drew_selection_bracket_on_target
void initEntryStartY(int y)
#define NETINFO_FLAG_OBSERVER
void gr_init_alphacolor(color *clr, int r, int g, int b, int alpha, int type)
__inline void gr_string(int x, int y, const char *string, int resize_mode=GR_RESIZE_FULL)
void initBitmap(char *fname)
#define HUD_OBJECT_HARDPOINTS
void initSecondaryAmmoOffsetX(int x)
#define list_append(head, elem)
void player_stop_cargo_scan_sound()
void maybeFlashWeapon(int index)
void initSecondaryReloadOffsetX(int x)
int bm_get_info(int handle, int *w, int *h, ubyte *flags, int *nframes, int *fps)
Gets info on the bitmap indexed by handle.
void set_flags(uint flags)
struct vec3d::@225::@227 xyz
void model_render_immediate(model_render_params *render_info, int model_num, matrix *orient, vec3d *pos, int render, bool sort)
hud_frames Cmeasure_gauge
#define MAX_KEYED_TARGETS
void polish_predicted_target_pos(weapon_info *wip, object *targetp, vec3d *enemy_pos, vec3d *predicted_enemy_pos, float dist_to_enemy, vec3d *last_delta_vec, int num_polish_steps)
int ship_subsystem_in_sight(object *objp, ship_subsys *subsys, vec3d *eye_pos, vec3d *subsys_pos, int do_facing_check, float *dot_out, vec3d *vec_out)
int Reticle_save_timestamp
#define WIF2_EXTERNAL_WEAPON_LNCH
void hud_cease_targeting()
int snd_is_playing(int sig)
void calculatePosition(vertex *target_point, vec3d *tpos, vec2d *outcoords, int *dir, float *half_triangle_sep)
#define SF2_FRIENDLY_STEALTH_INVIS
int Weapon_header_offsets[NUM_HUD_SETTINGS][2]
void free_temp_point(vertex *p)
void hud_target_closest_locked_missile(object *locked_obj)
ai_info Ai_info[MAX_AI_INFO]
float Target_triangle_base[GR_NUM_RESOLUTIONS]
int Weapon_sreload_offset_x
#define END_OF_LIST(head)
#define gr_set_line_width
float Max_offscreen_tri_seperation[GR_NUM_RESOLUTIONS]
void set_detail_level_lock(int detail_level_lock)
ship_subsys * targeted_subsys
#define MAX_HOTKEY_TARGET_ITEMS
float ship_get_secondary_weapon_range(ship *shipp)
#define HUD_LEAD_INDICATOR
color HUD_color_homing_indicator
int hud_sensors_ok(ship *sp, int show_msg)
Check if targeting is possible based on sensors strength.
void gr_set_screen_scale(int w, int h, int zoom_w, int zoom_h, int max_w, int max_h, int center_w, int center_h, bool force_stretch)
void renderLine(int x1, int y1, int x2, int y2)
void vm_vec_scale_add2(vec3d *dest, const vec3d *src, float k)
#define MAX_TRANSMIT_TARGETS
hud_frames secondary_top[NUM_HUD_SETTINGS]
#define PLAYER_FLAGS_AUTO_TARGETING
void hud_check_reticle_list()
void initCountSizes(int w, int h)
SCP_vector< target_display_info > target_display_list
void gr_set_color_fast(color *dst)
#define HUD_OBJECT_TARGET_TRI
float Offscreen_tri_base[GR_NUM_RESOLUTIONS]
#define STI_HUD_TARGET_AS_THREAT
void initOffColor(int r, int g, int b, int a)
#define AIPF_USE_ADDITIVE_WEAPON_VELOCITY
void initTextOffsets(int x, int y)
shader Training_msg_glass
int current_secondary_bank
void initTriBase(float length)
void hud_target_hotkey_select(int k)
void initDrawOptions(bool primary_models, bool secondary_models)
void HUD_sourced_printf(int source, const char *format,...)
int Cm_coords[GR_NUM_RESOLUTIONS][2]
float current_target_distance
void renderGradientLine(int x1, int y1, int x2, int y2)
hud_frames secondary_middle[NUM_HUD_SETTINGS]
void hud_target_clear_display_list()
GLenum GLuint GLenum GLsizei const GLchar * buf
float Offscreen_tri_height
void initAutoTextOffsets(int x, int y)
void hud_target_add_display_list(object *objp, vertex *target_point, vec3d *target_pos, int correction, color *bracket_clr, char *name, int flags)
int TARGET_SHIP_IGNORE_FLAGS
float gun_submodel_rotation
float vm_vec_mag_squared(const vec3d *v)
void asteroid_target_closest_danger()
#define TOGGLE_TEXT_NEBULA_ALPHA
#define gr_end_proj_matrix
void setClip(int x, int y, int w, int h)
void render(float frametime)
#define TYPE_FACING_MISSILE
#define PLAYER_FLAGS_AUTO_MATCH_SPEED
SCP_list< CJumpNode > Jump_nodes
void hud_target_hotkey_clear(int k)
void initBitmapsPrimaryTop(char *fname, char *fname_ballistic)
int object_targetable_in_reticle(object *target_objp)
int Wenergy_text_offsets[2]
int bm_load_animation(const char *real_filename, int *nframes, int *fps, int *keyframe, int can_drop_frames, int dir_type)
Loads a bitmap sequance so we can draw with it.
void mission_hotkey_maybe_save_sets()
void initTriHeight(float length)
void hud_target_subobject_common(int next_flag)
iff_info Iff_info[MAX_IFFS]
int iff_get_attackee_mask(int attacker_team)
void hud_calculate_lead_pos(vec3d *lead_target_pos, vec3d *target_pos, object *targetp, weapon_info *wip, float dist_to_target, vec3d *rel_pos)
void hud_target_hotkey_add_remove(int k, object *ctarget, int how_to_add)
#define SF2_SCRAMBLE_MESSAGES
#define SUBSYSTEM_COMMUNICATION
void g3_done_instance(bool set_api=false)
int Weapon_pammo_offset_x
float atan2_safe(float y, float x)
#define OF_TARGETABLE_AS_BOMB
float Target_triangle_height
player Players[MAX_PLAYERS]
hud_frames primary_middle[NUM_HUD_SETTINGS]
#define gr_set_view_matrix
void set_alpha(float alpha)
int Weapon_gauge_secondary_coords[NUM_HUD_SETTINGS][GR_NUM_RESOLUTIONS][5][2]
int current_target_speed_trend
void initEnergyHeight(int h)
void initBgLastOffsetX(int x)
#define TBOX_FLASH_DURATION
void render(float frametime)
void initEnergyHeight(int h)
float ship_get_subsystem_strength(ship *shipp, int type)
void vm_vec_add2(vec3d *dest, const vec3d *src)
#define gr_set_proj_matrix
float Offscreen_tri_height[GR_NUM_RESOLUTIONS]
GLdouble GLdouble GLdouble r
struct matrix::@228::@230 vec
#define HUD_TARGET_MINI_ICON
An abbreviation for "Evaluate Ship as Closest Target", defines a data structure used to hold the requ...
void initOnColor(int r, int g, int b, int a)
#define HUD_OBJECT_MISSILE_TRI
void initBitmaps(char *fname)
#define HOTKEY_USER_ADDED
void vm_vec_scale(vec3d *dest, float s)
int timestamp_until(int stamp)
#define TMAP_FLAG_GOURAUD
#define list_insert(head, elem)
#define HUD_AFTERBURNER_ENERGY
char hud_filename[MAX_FILENAME_LEN]
missile_obj * missile_obj_return_address(int index)
int primary_bank_ammo[MAX_SHIP_PRIMARY_BANKS]
int turret_compare_func(const void *e1, const void *e2)
GLboolean GLboolean GLboolean GLboolean a
int Weapon_primary_ammo_x[GR_NUM_RESOLUTIONS]
int ship_subsys_disrupted(ship_subsys *ss)
void g3_set_view_matrix(const vec3d *view_pos, const matrix *view_matrix, float zoom)
ai_profile_t * ai_profile
void render(float frametime)
hud_frames Lead_indicator_gauge
void model_clear_instance(int model_num)
int Weapon_slinked_offset_x
int Weapon_plink_offset_x
int Target_text_offsets[2]
int ship_get_sound(object *objp, GameSoundsIndex id)
Returns a ship-specific sound index.
#define TYPE_NONFACING_INC
void hud_show_selection_set()
weapon_flash Weapon_flash_info
void initBitmapsPrimaryLast(char *fname, char *fname_ballistic)
void initBitmaps(char *fname)
#define SF2_HIDE_SHIP_NAME
void initAutoTextOffsets(int x, int y)
ship_subsys * last_subsys_target
void hud_target_targets_target()
void hud_lock_reset(float lock_time_scale)
#define MAX_MODEL_SUBSYSTEMS
sprintf(buf,"(%f,%f,%f)", v3->xyz.x, v3->xyz.y, v3->xyz.z)
#define IFF_COLOR_MESSAGE
void hud_target_auto_target_next()
int hud_target_closest(int team_mask, int attacked_objnum, int play_fail_snd, int filter, int get_closest_turret_attacking_player)
Sets the Players[Player_num].current_target to the closest ship to the player that matches the team p...
#define SF_HIDDEN_FROM_SENSORS
void lcl_translate_targetbox_name_gr(char *name)
#define HUD_MISSILE_WARNING_ARROW
ubyte g3_rotate_vertex(vertex *dest, const vec3d *src)
void initHalfSize(float w, float h)
#define TARGET_DISPLAY_SUBSYS
#define HUD_SOURCE_HIDDEN
void initBitmaps(char *fname)
float primary_rotate_ang[MAX_SHIP_PRIMARY_BANKS]
#define HUD_OBJECT_ORIENTATION_TEE
char Cm_fname[GR_NUM_RESOLUTIONS][MAX_FILENAME_LEN]
void hud_target_last_transmit()
int snd_play(game_snd *gs, float pan, float vol_scale, int priority, bool is_voice_msg)
#define HUD_WEAPONS_ENERGY
void hud_reticle_list_update(object *objp, float measure, int dot_flag)
#define SF_PRIMARY_LINKED
void initMoveText(bool move_text)
int secondary_bank_weapons[MAX_SHIP_SECONDARY_BANKS]
void hud_start_flash_weapon(int index)
void initBitmaps(char *fname)
void hud_set_gauge_color(int gauge_index, int bright_index)
Set the HUD color for the gauge, based on whether it is flashing or not.
float vm_vec_normalized_dir(vec3d *dest, const vec3d *end, const vec3d *start)
bool turret_weapon_has_subtype(ship_weapon *swp, int subtype)
float vm_vec_dist(const vec3d *v0, const vec3d *v1)
#define WIF2_CAN_BE_TARGETED
void initTopOffsetX(int x, int x_b)
void initSecondaryNameOffsetX(int x)
virtual void render(float frametime)
void hud_tri_empty(float x1, float y1, float x2, float y2, float x3, float y3)
int Weapon_plink_coords[GR_NUM_RESOLUTIONS][2][2]
void maybeFlashWeapon(int index)
int hud_reticle_list_find_free()
int ship_has_energy_weapons(ship *shipp)
#define HUD_OBJECT_CMEASURES
void insertion_sort(void *array_base, size_t array_size, size_t element_size, int(*fncompare)(const void *, const void *))
proximity warning (heat seeker)
int Cmeasure_gauge_loaded
#define SIF_BALLISTIC_PRIMARIES
void initPrimaryLinkOffsetX(int x)
#define TARGET_DISPLAY_DOTS
#define STI_SHIP_SCANNABLE
#define TARGET_DISPLAY_CLASS
char Fred_alt_names[MAX_SHIPS][NAME_LENGTH+1]
void hud_target_uninspected_object(int next_flag)
void render(float frametime)
void set_color(color &clr)
#define HUD_OBJECT_AFTERBURNER
void hud_target_live_turret(int next_flag, int auto_advance, int only_player_target)
int g3_project_vertex(vertex *point)
int secondary_bank_ammo[MAX_SHIP_SECONDARY_BANKS]
void hud_show_targeting_gauges(float frametime)
float Target_triangle_base
debris Debris[MAX_DEBRIS_PIECES]
int targeted_subsys_parent
void initBgEntryOffsetX(int x)
void render(float frametime)
void renderLeadQuick(vec3d *target_pos, object *targetp)
void hud_target_next_list(int hostile, int next_flag, int team_mask, int attacked_objnum, int play_fail_snd, int filter, int get_closest_turret_attacking_player)
vec3d * vm_vec_unrotate(vec3d *dest, const vec3d *src, const matrix *m)
void renderString(int x, int y, const char *str)
float vm_vec_dist_squared(const vec3d *v0, const vec3d *v1)
void initMaxSymbols(int count)
reticle_list Reticle_cur_list
void hud_update_closest_turret()
int iff_x_attacks_y(int team_x, int team_y)
int get_subsystem_pos(vec3d *pos, object *objp, ship_subsys *subsysp)
int Cm_text_val_offsets[2]
#define MIN_DOT_FOR_TARGET
GLint GLint GLint GLint GLint x
object Objects[MAX_OBJECTS]
int top_offset_x[NUM_HUD_SETTINGS]
void hud_show_hostile_triangle()
#define RESET_TARGET_IN_RETICLE
void initPrimaryHeights(int top_h, int text_h)
#define SF_ARRIVING_STAGE_1
const char * XSTR(const char *str, int index)
void initHeaderText(char *text)
HudGaugeWeaponList(int gauge_object)
void hud_target_in_reticle_old()
hud_frames primary_top[NUM_HUD_SETTINGS]
target fail sound (i.e. press targeting key, but nothing happens)
void hud_target_newest_ship()
void renderTriangle(vec3d *hostile_pos, int aspect_flag, int show_interior, int split_tri)
char * Weapon_gauge_fnames[NUM_HUD_SETTINGS][GR_NUM_RESOLUTIONS][NUM_WEAPON_GAUGES]
#define MAX_RETICLE_TARGETS
float Max_warning_missile_dist
void render(float frametime)
bool end_string_at_first_hash_symbol(char *src)
int iff_get_mask(int team)
#define MULTIPLAYER_STANDALONE
int hud_communications_state(ship *sp)
void renderTriangleMissileTail(float ang, float xpos, float ypos, float cur_dist, int draw_solid, int draw_inside)
void initBitmapsSecondaryBottom(char *fname, char *fname_ballistic)
ubyte lcl_get_font_index(int font_num)
void hud_target_in_reticle_new()
void initShowBallistics(bool show_ballistics)
homing_beep_info Homing_beep
void hud_stuff_reticle_list(reticle_list *rl, object *objp, float measure, int dot_flag)
#define HUD_OBJECT_AUTO_TARGET
#define HOTKEY_MISSION_FILE_ADDED
char Fred_callsigns[MAX_SHIPS][NAME_LENGTH+1]
void renderRect(int x, int y, int w, int h)
#define gr_set_color_buffer
GLuint const GLchar * name
void hud_target_last_transmit_add(int ship_num)
void renderSight(int indicator_frame, vec3d *target_pos, vec3d *lead_target_pos)
int hud_target_closest_repair_ship(int goal_objnum)
__inline void gr_line(int x1, int y1, int x2, int y2, int resize_mode=GR_RESIZE_FULL)
#define HUD_OBJECT_HOSTILE_TRI
float Min_warning_missile_dist
void hud_init_homing_beep()
float awacs_get_level(object *target, ship *viewer, int use_awacs)
int Weapon_pname_offset_x
void vm_vec_sub(vec3d *dest, const vec3d *src0, const vec3d *src1)
bool turret_weapon_has_flags(ship_weapon *swp, int flags)
#define HUD_ORIENTATION_TEE
color * iff_get_color(int color_index, int is_bright)
int bm_load(const char *real_filename)
Loads a bitmap so we can draw with it later.
GLboolean GLboolean GLboolean b
#define HUD_OBJECT_OFFSCREEN
bool gr_resize_screen_pos(int *x, int *y, int *w, int *h, int resize_mode)
void player_match_target_speed(char *no_target_text=NULL, char *match_off_text=NULL, char *match_on_text=NULL)
void hud_do_lock_indicator(float frametime)
void hud_target_prev_subobject()
#define HUD_OBJECT_WEAPONS
typedef float(SCP_EXT_CALLCONV *SCPTRACKIR_PFFLOATVOID)()
void hud_reticle_list_init()
struct weapon_flash weapon_flash
void initRadius(int length)
int flash_duration[MAX_WEAPON_FLASH_LINES]
int vm_vec_same(const vec3d *v1, const vec3d *v2)
void initSpeedTextOffsets(int x, int y)
int secondary_next_slot[MAX_SHIP_SECONDARY_BANKS]
hud_frames secondary_bottom[NUM_HUD_SETTINGS]
void initBgFirstHeight(int h)
void hud_target_change_check()
void renderLeadCurrentTarget()
float vm_vec_dist_quick(const vec3d *v0, const vec3d *v1)
ship_obj * advance_ship(ship_obj *so, int next_flag)
hud_frames _background_entry
#define SF_SECONDARY_DUAL_FIRE
int hud_target_last_transmit_newest()
float Target_triangle_height[GR_NUM_RESOLUTIONS]
GLubyte GLubyte GLubyte GLubyte w
void initTextAlign(int align)
void unsize(int *x, int *y)
char header_text[NAME_LENGTH]
int set_target_objnum(ai_info *aip, int objnum)
object * hud_reticle_pick_target()
void renderOrientation(object *from_objp, object *to_objp, matrix *from_orientp)
void bm_page_in_aabitmap(int bitmapnum, int nframes)
Marks a texture as being used for this level, and is anti-aliased.
int Weapon_primary_y[GR_NUM_RESOLUTIONS][2]
void initBitmapsSecondaryMiddle(char *fname, char *fname_ballistic)
void initAlignments(int text_align, int armed_align)
#define SUBSYSTEM_SENSORS
void initBitmaps(char *fname)
void initCountValueOffsets(int x, int y)
HudGaugeReticleTriangle()
void initArmedOffsets(int x, int y, int h, bool show)
int hud_target_ship_can_be_scanned(ship *shipp)
htarget_list htarget_items[MAX_HOTKEY_TARGET_ITEMS]
#define NUM_WEAPON_GAUGES
int gr_force_fit_string(char *str, int max_str, int max_width)
void hud_target_random_ship()
void hud_target_next(int team_mask)
void hud_targetbox_start_flash(int index, int duration)
void initBgEntryHeight(int h)
#define RETICLE_DEFAULT_DOT
int Weapon_gauge_primary_coords[NUM_HUD_SETTINGS][GR_NUM_RESOLUTIONS][3][2]
#define TARGET_DISPLAY_NAME
void initSizes(int w, int h)
void initSecondaryLinkedOffsetX(int x)
#define HUD_WEAPONS_GAUGE
void hud_target_uninspected_cargo(int next_flag)
void gr_get_string_size(int *w, int *h, const char *text, int len=9999)
void initFrameOffsetX(int x, int x_b)
void render(float frametime)
int Cm_text_coords[GR_NUM_RESOLUTIONS][2]
struct eval_next_turret eval_next_turret
void initBgLastOffsetY(int x)
int ship_get_random_targetable_ship()
ship_subsys * locking_subsys
void initViewDir(int dir)
void hud_keyed_targets_clear()
void initBitmapsSecondaryTop(char *fname, char *fname_ballistic)
void hud_make_shader(shader *sh, ubyte r, ubyte g, ubyte b, float dimmer=1000.0f)
SCP_vector< ship_info > Ship_info
void render(float frametime)
void gr_reset_screen_scale()
ship_subsys * last_targeted_subobject[MAX_PLAYERS]
void g3_start_instance_matrix(const vec3d *pos, const matrix *orient, bool set_api=true)
void initTriBase(float length)
void renderIndicator(int frame_offset, object *targetp, vec3d *lead_target_pos)
#define timestamp_elapsed(stamp)
float Hud_unit_multiplier
virtual void render(float frametime)
#define OF_SHOULD_BE_DEAD
void hud_target_toggle_hidden_from_sensors()
void initTargetTextOffsets(int x, int y)
vec3d * get_subsystem_world_pos(object *parent_obj, ship_subsys *subsys, vec3d *world_pos)
#define RETICLE_DEFAULT_DIST
void render(float frametime)
void render(float frametime)
HudGaugeHostileTriangle()
GLenum GLenum GLvoid GLvoid * column
#define list_remove(head, elem)
int ship_is_visible_by_team(object *target, ship *viewer)
void hud_maybe_set_sorted_turret_subsys(ship *shipp)
void initEntryHeight(int h)
#define TBOX_FLASH_INTERVAL
void renderPrintf(int x, int y, const char *format,...)
float vm_vec_dot(const vec3d *v0, const vec3d *v1)
GLenum GLuint GLenum GLsizei length
void hud_stuff_ship_class(char *ship_class_text, ship *shipp)
void hud_target_next_subobject()
void render(float frametime)
void hud_init_artillery()
void vm_vec_scale_sub2(vec3d *dest, const vec3d *src, float k)
bool draw_secondary_models[MAX_SHIP_SECONDARY_BANKS]
int turret_attacking_target
void hud_update_weapon_flash()
void hud_shield_hit_reset(object *objp, int player)
#define MAX_WEAPON_FLASH_LINES
#define TYPE_FACING_LASER
int frame_offset_x[NUM_HUD_SETTINGS]
struct homing_beep_info homing_beep_info
void hud_init_missile_lock()
#define SF_CARGO_REVEALED
void hud_restore_subsystem_target(ship *shipp)
void hud_target_missile(object *source_obj, int next_flag)
void hud_target_last_transmit_level_init()
void initBitmapsPrimaryMiddle(char *fname, char *fname_ballistic)
#define IFFF_WING_NAME_HIDDEN
int Weapon_sammo_offset_x
void hud_target_closest_uninspected_object()
void gr_create_shader(shader *shade, ubyte r, ubyte g, ubyte b, ubyte c)
int flash_next[MAX_WEAPON_FLASH_LINES]
bool gr_unsize_screen_posf(float *x, float *y, float *w, float *h, int resize_mode)
htarget_list keyed_targets[MAX_KEYED_TARGETS]
int current_target_dist_trend
int iff_matches_mask(int team, int mask)
#define SF2_PRIMITIVE_SENSORS
float hud_find_target_distance(object *targetee, object *targeter)
void initBitmaps(char *fname_first, char *fname_entry, char *fname_last)
int primary_bank_start_ammo[MAX_SHIP_PRIMARY_BANKS]
#define HUD_OBJECT_WEAPON_ENERGY
missile_obj * advance_missile_obj(missile_obj *mo, int next_flag)
void render(float frametime)
#define HUD_OBJECT_WARHEAD_COUNT
#define TARGET_DISPLAY_LEAD
void hud_tri(float x1, float y1, float x2, float y2, float x3, float y3)
int Weapon_sname_offset_x
char alt_name[NAME_LENGTH]
void hud_stuff_ship_callsign(char *ship_callsign_text, ship *shipp)
int hud_target_invalid_awacs(object *objp)
missile_obj Missile_obj_list
void initMaxFrontSeperation(float length)
void hud_targetbox_init_flash()
void hud_init_targeting()
void initCountOffsets(int x, int y)
void initBitmaps(char *fname)
void hud_cease_subsystem_targeting(int print_message)
GLclampf GLclampf GLclampf alpha
void set_object_number(int num)
#define HUD_CMEASURE_GAUGE
void hud_init_targeting_colors()
float Max_front_seperation
void initTriHeight(float h)
struct transmit_target transmit_target
void initHeaderOffsets(int x, int y, int x_b, int y_b)
void renderOffscreenIndicator(vec2d *coords, int dir, float distance, float half_triangle_sep, bool draw_solid=true)
int pickFrame(float prange, float srange, float dist_to_target)
void clip_line(vertex **p0, vertex **p1, ubyte codes_or, uint flags)
Clips a line to the viewing pyramid.
void render(float frametime)
int multi_find_player_by_object(object *objp)
#define MIN_SENSOR_STR_TO_TARGET
hud_frames primary_last[NUM_HUD_SETTINGS]
net_player Net_players[MAX_PLAYERS]
SCP_vector< asteroid_info > Asteroid_info
void hud_cargo_scan_update(object *targetp, float frametime)
void lcl_translate_wep_name_gr(char *name)
htarget_list htarget_free_list
void render(float frametime)
void hud_set_iff_color(object *objp, int is_bright)
Will set the color to the IFF color based on the team.
int Weapon_secondary_y[GR_NUM_RESOLUTIONS][3]
void vm_vec_add(vec3d *dest, const vec3d *src0, const vec3d *src1)
void initSecondaryUnlinkedOffsetX(int x)
void gr_init_color(color *c, int r, int g, int b)
matrix vmd_identity_matrix
int locking_subsys_parent
int Cmdline_ballistic_gauge
void initLineWidth(float w)
int Weapon_sunlinked_x[GR_NUM_RESOLUTIONS]
void render(float frametime)
char ship_name[NAME_LENGTH]
void hud_init_ballistic_index()
ship_subsys * set_targeted_subsys(ai_info *aip, ship_subsys *new_subsys, int parent_objnum)
void lcl_translate_targetbox_name_pl(char *name)
float model_find_closest_point(vec3d *outpnt, int model_num, int submodel_num, matrix *orient, vec3d *pos, vec3d *eye_pos)
int g3_draw_poly_constant_sw(int nv, vertex **pointlist, uint tmap_flags, float constant_sw)
#define HUD_OBJECT_SECONDARY_WEAPONS
#define IFF_COLOR_SELECTION
void initNameOffsets(int x, int y)
void hud_artillery_update()
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
void hud_process_remote_detonate_missile()
float Lead_indicator_half[NUM_HUD_RETICLE_STYLES][GR_NUM_RESOLUTIONS][2]
SCP_vector< ship_type_info > Ship_types
hud_frames _background_first
#define TARGET_IN_RETICLE_DISTANCE
void hud_save_restore_camera_data(int save)
Called to save and restore the 3D camera settings.
HudGaugeMissileTriangles()
void hud_process_homing_missiles()
void hud_target_common(int team_mask, int next_flag)
#define HUD_OBJECT_PRIMARY_WEAPONS
float secondary_point_reload_pct[MAX_SHIP_SECONDARY_BANKS][MAX_SLOTS]
void initMaxColumns(int count)
void initHeaderOffsets(int x, int y)
void hud_show_message_sender()
int Armed_name_offsets[2]
void renderCircle(int x, int y, int diameter)
#define g3_start_frame(zbuffer_flag)
bool evaluate_ship_as_closest_target(esct *esct_p)
evaluate a ship (and maybe turrets) as a potential target
float vm_vec_normalize(vec3d *v)
float Lead_indicator_half[2]
object * advance_fb(object *objp, int next_flag)
void renderBitmap(int x, int y)
int lead_indicator_active
float Max_offscreen_tri_seperation
void hud_maybe_flash_weapon(int index)
#define NUM_HUD_RETICLE_STYLES
void initOffColor(int r, int g, int b, int a)