1 /*
2 Copyright (C) 2003 Parallel Realities
3 Copyright (C) 2011, 2013 Guus Sliepen
4 Copyright (C) 2015-2020 The Diligent Circle <diligentcircle@riseup.net>
5 
6 This program is free software; you can redistribute it and/or
7 modify it under the terms of the GNU General Public License
8 as published by the Free Software Foundation; either version 3
9 of the License, or (at your option) any later version.
10 
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 GNU General Public License for more details.
15 
16 You should have received a copy of the GNU General Public License
17 along with this program.  If not, see <http://www.gnu.org/licenses/>.
18 */
19 
20 #include "defs.h"
21 #include "structs.h"
22 
23 Object weapons[W_MAX];
24 
25 /*
26 A list of predefined weaponry.
27 */
weapons_init()28 void weapons_init()
29 {
30 	// Player's weapon (this NEVER allocated to anything else)
31 	weapons[W_PLAYER_WEAPON].id = WT_PLASMA;
32 	weapons[W_PLAYER_WEAPON].ammo[0] = 1;
33 	weapons[W_PLAYER_WEAPON].damage = 1;
34 	weapons[W_PLAYER_WEAPON].reload[0] = 15;
35 	weapons[W_PLAYER_WEAPON].speed = 10;
36 	weapons[W_PLAYER_WEAPON].imageIndex[0] = SP_PLASMA_GREEN;
37 	weapons[W_PLAYER_WEAPON].imageIndex[1] = SP_PLASMA_GREEN;
38 	weapons[W_PLAYER_WEAPON].flags = WF_SPREAD;
39 
40 	// Single Shot
41 	weapons[W_SINGLE_SHOT].id = WT_PLASMA;
42 	weapons[W_SINGLE_SHOT].ammo[0] = 1;
43 	weapons[W_SINGLE_SHOT].damage = 1;
44 	weapons[W_SINGLE_SHOT].reload[0] = 15;
45 	weapons[W_SINGLE_SHOT].speed = 10;
46 	weapons[W_SINGLE_SHOT].imageIndex[0] = SP_PLASMA_GREEN;
47 	weapons[W_SINGLE_SHOT].imageIndex[1] = SP_PLASMA_RED;
48 	weapons[W_SINGLE_SHOT].flags = 0;
49 
50 	// Double Shot
51 	weapons[W_DOUBLE_SHOT] = weapons[W_SINGLE_SHOT];
52 	weapons[W_DOUBLE_SHOT].ammo[0] = 2;
53 
54 	// Triple Shot
55 	weapons[W_TRIPLE_SHOT] = weapons[W_SINGLE_SHOT];
56 	weapons[W_TRIPLE_SHOT].ammo[0] = 3;
57 
58 	// Rockets
59 	weapons[W_ROCKETS].id = WT_ROCKET;
60 	weapons[W_ROCKETS].ammo[0] = 1;
61 	weapons[W_ROCKETS].damage = 15;
62 	weapons[W_ROCKETS].reload[0] = 45;
63 	weapons[W_ROCKETS].speed = 20;
64 	weapons[W_ROCKETS].flags = 0;
65 	weapons[W_ROCKETS].imageIndex[0] = SP_ROCKET;
66 	weapons[W_ROCKETS].imageIndex[1] = SP_ROCKET_L;
67 
68 	// Double Rockets (uses ROCKETS as base)
69 	weapons[W_DOUBLE_ROCKETS] = weapons[W_ROCKETS];
70 	weapons[W_DOUBLE_ROCKETS].ammo[0] = 2;
71 	weapons[W_DOUBLE_ROCKETS].reload[0] = 80;
72 
73 	// Micro Rockets
74 	weapons[W_MICRO_ROCKETS].id = WT_ROCKET;
75 	weapons[W_MICRO_ROCKETS].ammo[0] = 5;
76 	weapons[W_MICRO_ROCKETS].damage = 6;
77 	weapons[W_MICRO_ROCKETS].reload[0] = 30;
78 	weapons[W_MICRO_ROCKETS].speed = 15;
79 	weapons[W_MICRO_ROCKETS].flags = WF_VARIABLE_SPEED;
80 	weapons[W_MICRO_ROCKETS].imageIndex[0] = SP_ROCKET;
81 	weapons[W_MICRO_ROCKETS].imageIndex[1] = SP_ROCKET_L;
82 
83 	// Energy Ray
84 	weapons[W_ENERGYRAY].id = WT_ENERGYRAY;
85 	weapons[W_ENERGYRAY].ammo[0] = 255;
86 	weapons[W_ENERGYRAY].damage = 1;
87 	weapons[W_ENERGYRAY].reload[0] = 25; // reload for energy ray is never used
88 	weapons[W_ENERGYRAY].speed = 15;
89 	weapons[W_ENERGYRAY].imageIndex[0] = SP_PLASMA_RED;
90 	weapons[W_ENERGYRAY].imageIndex[1] = SP_PLASMA_RED;
91 	weapons[W_ENERGYRAY].flags = 0;
92 
93 	// Laser
94 	weapons[W_LASER].id = WT_LASER;
95 	weapons[W_LASER].ammo[0] = 1;
96 	weapons[W_LASER].damage = 3;
97 	weapons[W_LASER].reload[0] = 1;
98 	weapons[W_LASER].speed = 10;
99 	weapons[W_LASER].imageIndex[0] = SP_PLASMA_RED;
100 	weapons[W_LASER].imageIndex[1] = SP_PLASMA_RED;
101 	weapons[W_LASER].flags = 0;
102 
103 	// Beam up weapon
104 	weapons[W_CHARGER].id = WT_CHARGER;
105 	weapons[W_CHARGER].ammo[0] = 1;
106 	weapons[W_CHARGER].damage = 1;
107 	weapons[W_CHARGER].reload[0] = 0;
108 	weapons[W_CHARGER].speed = 12;
109 	weapons[W_CHARGER].flags = 0;
110 	weapons[W_CHARGER].imageIndex[0] = SP_DIR_PLASMA_GREEN;
111 	weapons[W_CHARGER].imageIndex[1] = SP_DIR_PLASMA_RED;
112 
113 	// Homing missile
114 	weapons[W_HOMING_MISSILE].id = WT_ROCKET;
115 	weapons[W_HOMING_MISSILE].ammo[0] = 1;
116 	weapons[W_HOMING_MISSILE].damage = 15;
117 	weapons[W_HOMING_MISSILE].reload[0] = 35;
118 	weapons[W_HOMING_MISSILE].speed = 10;
119 	weapons[W_HOMING_MISSILE].flags = WF_HOMING;
120 	weapons[W_HOMING_MISSILE].imageIndex[0] = SP_SMALL_EXPLOSION;
121 	weapons[W_HOMING_MISSILE].imageIndex[1] = SP_SMALL_EXPLOSION;
122 
123 	// Double homing missile
124 	weapons[W_DOUBLE_HOMING_MISSILES] = weapons[W_HOMING_MISSILE];
125 	weapons[W_DOUBLE_HOMING_MISSILES].ammo[0] = 2;
126 	weapons[W_DOUBLE_HOMING_MISSILES].reload[0] = 65;
127 	weapons[W_DOUBLE_HOMING_MISSILES].imageIndex[0] = SP_SMALL_EXPLOSION;
128 	weapons[W_DOUBLE_HOMING_MISSILES].imageIndex[1] = SP_SMALL_EXPLOSION;
129 
130 	// Micro homing missiles
131 	weapons[W_MICRO_HOMING_MISSILES].id = WT_ROCKET;
132 	weapons[W_MICRO_HOMING_MISSILES].ammo[0] = 5;
133 	weapons[W_MICRO_HOMING_MISSILES].damage = 12;
134 	weapons[W_MICRO_HOMING_MISSILES].reload[0] = 65;
135 	weapons[W_MICRO_HOMING_MISSILES].speed = 3;
136 	weapons[W_MICRO_HOMING_MISSILES].flags = WF_HOMING;
137 	weapons[W_MICRO_HOMING_MISSILES].imageIndex[0] = SP_SMALL_EXPLOSION;
138 	weapons[W_MICRO_HOMING_MISSILES].imageIndex[1] = SP_SMALL_EXPLOSION;
139 
140 	// Aimed plasma bolt
141 	weapons[W_AIMED_SHOT].id = WT_DIRECTIONAL;
142 	weapons[W_AIMED_SHOT].ammo[0] = 1;
143 	weapons[W_AIMED_SHOT].damage = 2;
144 	weapons[W_AIMED_SHOT].reload[0] = 15;
145 	weapons[W_AIMED_SHOT].speed = 0;
146 	weapons[W_AIMED_SHOT].flags = WF_AIMED;
147 	weapons[W_AIMED_SHOT].imageIndex[0] = SP_DIR_PLASMA_GREEN;
148 	weapons[W_AIMED_SHOT].imageIndex[1] = SP_DIR_PLASMA_RED;
149 
150 	// 3 way spread weapon
151 	weapons[W_SPREADSHOT].id = WT_SPREAD;
152 	weapons[W_SPREADSHOT].ammo[0] = 3;
153 	weapons[W_SPREADSHOT].damage = 2;
154 	weapons[W_SPREADSHOT].reload[0] = 10;
155 	weapons[W_SPREADSHOT].speed = 10;
156 	weapons[W_SPREADSHOT].flags = WF_SPREAD;
157 	weapons[W_SPREADSHOT].imageIndex[0] = SP_PLASMA_GREEN;
158 	weapons[W_SPREADSHOT].imageIndex[1] = SP_PLASMA_RED;
159 
160 	// Sid's ion cannon like weapon
161 	weapons[W_IONCANNON].id = WT_PLASMA;
162 	weapons[W_IONCANNON].ammo[0] = 1;
163 	weapons[W_IONCANNON].damage = 1;
164 	weapons[W_IONCANNON].reload[0] = 2;
165 	weapons[W_IONCANNON].speed = 10;
166 	weapons[W_IONCANNON].flags = WF_DISABLE | WF_AIMED;
167 	weapons[W_IONCANNON].imageIndex[0] = SP_ION;
168 	weapons[W_IONCANNON].imageIndex[1] = SP_ION;
169 
170 	// Directional Shock Missile - Used by Kline in final battle
171 	weapons[W_DIRSHOCKMISSILE].id = WT_ROCKET;
172 	weapons[W_DIRSHOCKMISSILE].ammo[0] = 5;
173 	weapons[W_DIRSHOCKMISSILE].damage = 20;
174 	weapons[W_DIRSHOCKMISSILE].reload[0] = 60;
175 	weapons[W_DIRSHOCKMISSILE].speed = 0;
176 	weapons[W_DIRSHOCKMISSILE].flags = WF_AIMED | WF_TIMEDEXPLOSION;
177 	weapons[W_DIRSHOCKMISSILE].imageIndex[0] = SP_SMALL_EXPLOSION;
178 	weapons[W_DIRSHOCKMISSILE].imageIndex[1] = SP_SMALL_EXPLOSION;
179 }
180