2 Copyright (C) 2003 Parallel Realities
3 Copyright (C) 2011, 2013 Guus Sliepen
5 This program is free software; you can redistribute it and/or
6 modify it under the terms of the GNU General Public License
7 as published by the Free Software Foundation; either version 3
8 of the License, or (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
19 #include "Starfighter.h"
21 object weapon[MAX_WEAPONS];
23 void setWeaponShapes()
25 for (int i = 0 ; i < MAX_WEAPONS ; i++)
27 weapon[i].image[0] = shape[weapon[i].imageIndex[0]];
28 weapon[i].image[1] = shape[weapon[i].imageIndex[1]];
33 A list of predefined weaponary.
37 // Player's weapon (this NEVER allocated to anything else)
38 weapon[W_PLAYER_WEAPON].id = WT_PLASMA;
39 weapon[W_PLAYER_WEAPON].ammo[0] = 1;
40 weapon[W_PLAYER_WEAPON].damage = 1;
41 weapon[W_PLAYER_WEAPON].reload[0] = 15;
42 weapon[W_PLAYER_WEAPON].speed = 10;
43 weapon[W_PLAYER_WEAPON].imageIndex[0] = 0;
44 weapon[W_PLAYER_WEAPON].imageIndex[1] = 0;
45 weapon[W_PLAYER_WEAPON].flags = WF_SPREAD;
48 weapon[W_SINGLE_SHOT].id = WT_PLASMA;
49 weapon[W_SINGLE_SHOT].ammo[0] = 1;
50 weapon[W_SINGLE_SHOT].damage = 1;
51 weapon[W_SINGLE_SHOT].reload[0] = 15;
52 weapon[W_SINGLE_SHOT].speed = 10;
53 weapon[W_SINGLE_SHOT].imageIndex[0] = 0;
54 weapon[W_SINGLE_SHOT].imageIndex[1] = 1;
55 weapon[W_SINGLE_SHOT].flags = 0;
58 weapon[W_DOUBLE_SHOT] = weapon[W_SINGLE_SHOT];
59 weapon[W_DOUBLE_SHOT].ammo[0] = 2;
62 weapon[W_TRIPLE_SHOT] = weapon[W_SINGLE_SHOT];
63 weapon[W_TRIPLE_SHOT].ammo[0] = 3;
66 weapon[W_ROCKETS].id = WT_ROCKET;
67 weapon[W_ROCKETS].ammo[0] = 1;
68 weapon[W_ROCKETS].damage = 15;
69 weapon[W_ROCKETS].reload[0] = 45;
70 weapon[W_ROCKETS].speed = 20;
71 weapon[W_ROCKETS].flags = 0;
72 weapon[W_ROCKETS].imageIndex[0] = 2;
73 weapon[W_ROCKETS].imageIndex[1] = 3;
75 // Double Rockets (uses ROCKETS as base)
76 weapon[W_DOUBLE_ROCKETS] = weapon[W_ROCKETS];
77 weapon[W_DOUBLE_ROCKETS].ammo[0] = 2;
78 weapon[W_DOUBLE_ROCKETS].reload[0] = 80;
81 weapon[W_MICRO_ROCKETS].id = WT_ROCKET;
82 weapon[W_MICRO_ROCKETS].ammo[0] = 5;
83 weapon[W_MICRO_ROCKETS].damage = 6;
84 weapon[W_MICRO_ROCKETS].reload[0] = 30;
85 weapon[W_MICRO_ROCKETS].speed = 15;
86 weapon[W_MICRO_ROCKETS].flags = WF_VARIABLE_SPEED;
87 weapon[W_MICRO_ROCKETS].imageIndex[0] = 2;
88 weapon[W_MICRO_ROCKETS].imageIndex[1] = 3;
91 weapon[W_ENERGYRAY].id = WT_ENERGYRAY;
92 weapon[W_ENERGYRAY].ammo[0] = 255;
93 weapon[W_ENERGYRAY].damage = 1;
94 weapon[W_ENERGYRAY].reload[0] = 25; // reload for energy ray is never used
95 weapon[W_ENERGYRAY].speed = 15;
96 weapon[W_ENERGYRAY].flags = 0;
99 weapon[W_LASER].id = WT_LASER;
100 weapon[W_LASER].ammo[0] = 1;
101 weapon[W_LASER].damage = 3;
102 weapon[W_LASER].reload[0] = 1;
103 weapon[W_LASER].speed = 10;
104 weapon[W_LASER].imageIndex[0] = 1;
105 weapon[W_LASER].imageIndex[1] = 1;
106 weapon[W_LASER].flags = 0;
109 weapon[W_CHARGER].id = WT_CHARGER;
110 weapon[W_CHARGER].ammo[0] = 1;
111 weapon[W_CHARGER].damage = 1;
112 weapon[W_CHARGER].reload[0] = 0;
113 weapon[W_CHARGER].speed = 12;
114 weapon[W_CHARGER].flags = 0;
115 weapon[W_CHARGER].imageIndex[0] = 33;
116 weapon[W_CHARGER].imageIndex[1] = 34;
119 weapon[W_HOMING_MISSILE].id = WT_ROCKET;
120 weapon[W_HOMING_MISSILE].ammo[0] = 1;
121 weapon[W_HOMING_MISSILE].damage = 15;
122 weapon[W_HOMING_MISSILE].reload[0] = 35;
123 weapon[W_HOMING_MISSILE].speed = 10;
124 weapon[W_HOMING_MISSILE].flags = WF_HOMING;
125 weapon[W_HOMING_MISSILE].imageIndex[0] = 4;
126 weapon[W_HOMING_MISSILE].imageIndex[1] = 4;
128 // Double homing missile
129 weapon[W_DOUBLE_HOMING_MISSILES] = weapon[W_HOMING_MISSILE];
130 weapon[W_DOUBLE_HOMING_MISSILES].ammo[0] = 2;
131 weapon[W_DOUBLE_HOMING_MISSILES].reload[0] = 65;
132 weapon[W_DOUBLE_HOMING_MISSILES].imageIndex[0] = 4;
133 weapon[W_DOUBLE_HOMING_MISSILES].imageIndex[1] = 4;
135 // Micro homing missiles
136 weapon[W_MICRO_HOMING_MISSILES].id = WT_ROCKET;
137 weapon[W_MICRO_HOMING_MISSILES].ammo[0] = 5;
138 weapon[W_MICRO_HOMING_MISSILES].damage = 12;
139 weapon[W_MICRO_HOMING_MISSILES].reload[0] = 65;
140 weapon[W_MICRO_HOMING_MISSILES].speed = 3;
141 weapon[W_MICRO_HOMING_MISSILES].flags = WF_HOMING;
142 weapon[W_MICRO_HOMING_MISSILES].imageIndex[0] = 4;
143 weapon[W_MICRO_HOMING_MISSILES].imageIndex[1] = 4;
146 weapon[W_AIMED_SHOT].id = WT_DIRECTIONAL;
147 weapon[W_AIMED_SHOT].ammo[0] = 1;
148 weapon[W_AIMED_SHOT].damage = 2;
149 weapon[W_AIMED_SHOT].reload[0] = 15;
150 weapon[W_AIMED_SHOT].speed = 0;
151 weapon[W_AIMED_SHOT].flags = WF_AIMED;
152 weapon[W_AIMED_SHOT].imageIndex[0] = 33;
153 weapon[W_AIMED_SHOT].imageIndex[1] = 34;
155 // 3 way spread weapon
156 weapon[W_SPREADSHOT].id = WT_SPREAD;
157 weapon[W_SPREADSHOT].ammo[0] = 3;
158 weapon[W_SPREADSHOT].damage = 2;
159 weapon[W_SPREADSHOT].reload[0] = 10;
160 weapon[W_SPREADSHOT].speed = 10;
161 weapon[W_SPREADSHOT].flags = WF_SPREAD;
162 weapon[W_SPREADSHOT].imageIndex[0] = 0;
163 weapon[W_SPREADSHOT].imageIndex[1] = 1;
165 // Sid's ion cannon like weapon
166 weapon[W_IONCANNON].id = WT_PLASMA;
167 weapon[W_IONCANNON].ammo[0] = 1;
168 weapon[W_IONCANNON].damage = 1;
169 weapon[W_IONCANNON].reload[0] = 2;
170 weapon[W_IONCANNON].speed = 10;
171 weapon[W_IONCANNON].flags = WF_DISABLE | WF_AIMED;
172 weapon[W_IONCANNON].imageIndex[0] = 35;
173 weapon[W_IONCANNON].imageIndex[1] = 35;
175 // Directional Shock Missile - Used by Kline in final battle
176 weapon[W_DIRSHOCKMISSILE].id = WT_ROCKET;
177 weapon[W_DIRSHOCKMISSILE].ammo[0] = 5;
178 weapon[W_DIRSHOCKMISSILE].damage = 20;
179 weapon[W_DIRSHOCKMISSILE].reload[0] = 60;
180 weapon[W_DIRSHOCKMISSILE].speed = 0;
181 weapon[W_DIRSHOCKMISSILE].flags = WF_AIMED | WF_TIMEDEXPLOSION;
182 weapon[W_DIRSHOCKMISSILE].imageIndex[0] = 4;
183 weapon[W_DIRSHOCKMISSILE].imageIndex[1] = 4;