OSDN Git Service

79be417e5c7db5c7f1eb14ef3468c12bc8d41f3b
[starfighter-jp/starfighter-jp.git] / src / weapons.cpp
1 /*
2 Copyright (C) 2003 Parallel Realities
3 Copyright (C) 2011, 2013 Guus Sliepen
4
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.
9
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.
14
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/>.
17 */
18
19 #include "Starfighter.h"
20
21 object weapon[MAX_WEAPONS];
22
23 void setWeaponShapes()
24 {
25         for (int i = 0 ; i < MAX_WEAPONS ; i++)
26         {
27                 weapon[i].image[0] = shape[weapon[i].imageIndex[0]];
28                 weapon[i].image[1] = shape[weapon[i].imageIndex[1]];
29         }
30 }
31
32 /*
33 A list of predefined weaponary.
34 */
35 void initWeapons()
36 {
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;
46
47         // Single Shot
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;
56
57         // Double Shot
58         weapon[W_DOUBLE_SHOT] = weapon[W_SINGLE_SHOT];
59         weapon[W_DOUBLE_SHOT].ammo[0] = 2;
60
61         // Triple Shot
62         weapon[W_TRIPLE_SHOT] = weapon[W_SINGLE_SHOT];
63         weapon[W_TRIPLE_SHOT].ammo[0] = 3;
64
65         // Rockets
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;
74
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;
79
80         // Micro Rockets
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;
89
90         // Energy Ray
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;
97
98         // Laser
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;
107
108         // Beam up weapon
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;
117
118         // Homing missile
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;
127
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;
134
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;
144
145         // Aimed plasma bolt
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;
154
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;
164
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;
174
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;
184 }