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()28void 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