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)