2 Copyright (C) 2004-2011 Parallel Realities
3 Copyright (C) 2011-2015 Perpendicular Dimensions
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 2
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.
14 See the GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
25 * Loads all the predefined weapons for the game
29 if (!engine.loadData("data/weapons"))
31 graphics.showErrorAndExit("Couldn't load weapon definitions file (%s)", "data/weapons");
34 char *token = strtok((char*)engine.dataBuffer, "\n");
44 if (strcmp(token, "@EOF@") == 0)
47 sscanf(token, "%d %*c %[^\"] %*c %d %d %d %d %d %d %s %s %d %s", &id, name, ¶m[0], ¶m[1], ¶m[2], ¶m[3], ¶m[4], ¶m[5], sprite[0], sprite[1], ¶m[6], flags);
49 weapon[id].setName(name);
50 weapon[id].id = param[0];
51 weapon[id].damage = param[1];
52 weapon[id].health = param[2];
53 weapon[id].dx = param[3];
54 weapon[id].dy = param[4];
55 weapon[id].reload = param[5];
56 weapon[id].sprite[0] = graphics.getSprite(sprite[0], true);
57 weapon[id].sprite[1] = graphics.getSprite(sprite[1], true);
58 weapon[id].fireSound = param[6];
59 weapon[id].flags = engine.getValueOfFlagTokens(flags);
61 token = strtok(NULL, "\n");
66 * Chooses a random non aimed weapon. Selected either WP_MACHINEGUN, WP_ALIENLASER
67 * WP_PLASMARIFLE or WP_ALIENGRENADE
68 * @return The randomly selected Weapon
70 Weapon *getRandomStraightWeapon()
72 switch (Math::prand() % 4)
75 return &weapon[WP_MACHINEGUN];
78 return &weapon[WP_ALIENLASER];
81 return &weapon[WP_PLASMARIFLE];
84 return &weapon[WP_ALIENGRENADE];
88 return &weapon[WP_PISTOL];
92 * Chooses a random aimed weapon. Selected either WP_AIMEDPISTOL, WP_ALIENSPREAD
94 * @return The randomly selected Weapon
96 Weapon *getRandomAimedWeapon()
98 switch (Math::prand() % 3)
101 return &weapon[WP_AIMEDPISTOL];
104 return &weapon[WP_ALIENSPREAD];
107 return &weapon[WP_ALIENGRENADE];
111 return &weapon[WP_AIMEDPISTOL];
115 * Chooses a random weapon for use by Galdov. Selects either WP_AIMEDPISTOL, WP_ALIENSPREAD
116 * WP_ALIENGRENADE or WP_PLASMARIFLE
117 * @return The randomly selected Weapon
119 Weapon *getRandomGaldovWeapon()
121 switch (Math::prand() % 4)
124 return &weapon[WP_AIMEDPISTOL];
127 return &weapon[WP_ALIENSPREAD];
130 return &weapon[WP_ALIENGRENADE];
133 return &weapon[WP_PLASMARIFLE];
137 return &weapon[WP_AIMEDPISTOL];
141 * Searches the Weapon array for the named Weapon. Once it is found
142 * it is returned. If it is not found WP_PISTOL is returned
144 * @return The randomly selected Weapon
146 Weapon *getWeaponByName(const char *name)
148 if (strcmp("randomStraight", name) == 0)
150 return getRandomStraightWeapon();
153 if (strcmp("randomAimed", name) == 0)
155 return getRandomAimedWeapon();
158 for (int i = 0 ; i < MAX_WEAPONS ; i++)
160 if (strcmp(weapon[i].name, name) == 0)
166 debug(("WARNING - COULD NOT FIND WEAPON '%s'\n", name));
168 return &weapon[WP_PISTOL];