2 Copyright (C) 2004 Parallel Realities
4 This program is free software; you can redistribute it and/or
5 modify it under the terms of the GNU General Public License
6 as published by the Free Software Foundation; either version 2
7 of the License, or (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13 See the 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, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
24 * Loads all the predefined weapons for the game
28 if (!engine.loadData("data/weapons"))
30 graphics.showErrorAndExit("Couldn't load weapon definitions file (%s)", "data/weapons");
33 char *token = strtok((char*)engine.dataBuffer, "\n");
43 if (strcmp(token, "@EOF@") == 0)
46 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);
48 weapon[id].setName(name);
49 weapon[id].id = param[0];
50 weapon[id].damage = param[1];
51 weapon[id].health = param[2];
52 weapon[id].dx = param[3];
53 weapon[id].dy = param[4];
54 weapon[id].reload = param[5];
55 weapon[id].sprite[0] = graphics.getSprite(sprite[0], true);
56 weapon[id].sprite[1] = graphics.getSprite(sprite[1], true);
57 weapon[id].fireSound = param[6];
58 weapon[id].flags = engine.getValueOfFlagTokens(flags);
60 token = strtok(NULL, "\n");
65 * Chooses a random non aimed weapon. Selected either WP_MACHINEGUN, WP_ALIENLASER
66 * WP_PLASMARIFLE or WP_ALIENGRENADE
67 * @return The randomly selected Weapon
69 Weapon *getRandomStraightWeapon()
71 switch (Math::prand() % 4)
74 return &weapon[WP_MACHINEGUN];
77 return &weapon[WP_ALIENLASER];
80 return &weapon[WP_PLASMARIFLE];
83 return &weapon[WP_ALIENGRENADE];
87 return &weapon[WP_PISTOL];
91 * Chooses a random aimed weapon. Selected either WP_AIMEDPISTOL, WP_ALIENSPREAD
93 * @return The randomly selected Weapon
95 Weapon *getRandomAimedWeapon()
97 switch (Math::prand() % 3)
100 return &weapon[WP_AIMEDPISTOL];
103 return &weapon[WP_ALIENSPREAD];
106 return &weapon[WP_ALIENGRENADE];
110 return &weapon[WP_AIMEDPISTOL];
114 * Chooses a random weapon for use by Galdov. Selects either WP_AIMEDPISTOL, WP_ALIENSPREAD
115 * WP_ALIENGRENADE or WP_PLASMARIFLE
116 * @return The randomly selected Weapon
118 Weapon *getRandomGaldovWeapon()
120 switch (Math::prand() % 4)
123 return &weapon[WP_AIMEDPISTOL];
126 return &weapon[WP_ALIENSPREAD];
129 return &weapon[WP_ALIENGRENADE];
132 return &weapon[WP_PLASMARIFLE];
136 return &weapon[WP_AIMEDPISTOL];
140 * Searches the Weapon array for the named Weapon. Once it is found
141 * it is returned. If it is not found WP_PISTOL is returned
143 * @return The randomly selected Weapon
145 Weapon *getWeaponByName(const char *name)
147 if (strcmp("randomStraight", name) == 0)
149 return getRandomStraightWeapon();
152 if (strcmp("randomAimed", name) == 0)
154 return getRandomAimedWeapon();
157 for (int i = 0 ; i < MAX_WEAPONS ; i++)
159 if (strcmp(weapon[i].name, name) == 0)
165 debug(("WARNING - COULD NOT FIND WEAPON '%s'\n", name));
167 return &weapon[WP_PISTOL];