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