1 //
2 //
3 
4 #include <globalincs/pstypes.h>
5 #include <iff_defs/iff_defs.h>
6 #include <mission/missionparse.h>
7 #include <ship/ship.h>
8 #include <weapon/weapon.h>
9 
10 #include "util.h"
11 
12 // Goober5000
stuff_special_arrival_anchor_name(char * buf,int iff_index,int restrict_to_players,int retail_format)13 void stuff_special_arrival_anchor_name(char *buf, int iff_index, int restrict_to_players, int retail_format)
14 {
15 	const char *iff_name = Iff_info[iff_index].iff_name;
16 
17 	// stupid retail hack
18 	if (retail_format && !stricmp(iff_name, "hostile") && !restrict_to_players)
19 		iff_name = "enemy";
20 
21 	if (restrict_to_players)
22 		sprintf(buf, "<any %s player>", iff_name);
23 	else
24 		sprintf(buf, "<any %s>", iff_name);
25 
26 	strlwr(buf);
27 }
stuff_special_arrival_anchor_name(char * buf,int anchor_num,int retail_format)28 void stuff_special_arrival_anchor_name(char* buf, int anchor_num, int retail_format) {
29 	// filter out iff
30 	int iff_index = anchor_num;
31 	iff_index &= ~SPECIAL_ARRIVAL_ANCHOR_FLAG;
32 	iff_index &= ~SPECIAL_ARRIVAL_ANCHOR_PLAYER_FLAG;
33 
34 	// filter players
35 	int restrict_to_players = (anchor_num & SPECIAL_ARRIVAL_ANCHOR_PLAYER_FLAG);
36 
37 	// get name
38 	stuff_special_arrival_anchor_name(buf, iff_index, restrict_to_players, retail_format);
39 }
40 
generate_weaponry_usage_list_team(int team,int * arr)41 void generate_weaponry_usage_list_team(int team, int* arr) {
42 	int i;
43 
44 	for (i = 0; i < MAX_WEAPON_TYPES; i++) {
45 		arr[i] = 0;
46 	}
47 
48 	if (The_mission.game_type & MISSION_TYPE_MULTI_TEAMS) {
49 		Assert (team >= 0 && team < MAX_TVT_TEAMS);
50 
51 		for (i = 0; i < MAX_TVT_WINGS_PER_TEAM; i++) {
52 			generate_weaponry_usage_list_wing(TVT_wings[(team * MAX_TVT_WINGS_PER_TEAM) + i], arr);
53 		}
54 	} else {
55 		for (i = 0; i < MAX_STARTING_WINGS; i++) {
56 			generate_weaponry_usage_list_wing(Starting_wings[i], arr);
57 		}
58 	}
59 }
generate_weaponry_usage_list_wing(int wing_num,int * arr)60 void generate_weaponry_usage_list_wing(int wing_num, int* arr) {
61 	int i, j;
62 	ship_weapon* swp;
63 
64 	if (wing_num < 0) {
65 		return;
66 	}
67 
68 	i = Wings[wing_num].wave_count;
69 	while (i--) {
70 		swp = &Ships[Wings[wing_num].ship_index[i]].weapons;
71 		j = swp->num_primary_banks;
72 		while (j--) {
73 			if (swp->primary_bank_weapons[j] >= 0 && swp->primary_bank_weapons[j] < static_cast<int>(Weapon_info.size())) {
74 				arr[swp->primary_bank_weapons[j]]++;
75 			}
76 		}
77 
78 		j = swp->num_secondary_banks;
79 		while (j--) {
80 			if (swp->secondary_bank_weapons[j] >= 0 && swp->secondary_bank_weapons[j] < static_cast<int>(Weapon_info.size())) {
81 				arr[swp->secondary_bank_weapons[j]] += (int) floor(
82 					(swp->secondary_bank_ammo[j] * swp->secondary_bank_capacity[j] / 100.0f
83 						/ Weapon_info[swp->secondary_bank_weapons[j]].cargo_size) + 0.5f);
84 			}
85 		}
86 	}
87 }
88