Some Window$ specific edits.
[dbw.git] / src / weapons.cpp
blobaacdf3e6d80f9fc8fc77bcfc6e3acc529a9b4aad
1 /*
2 Copyright (C) 2004 Parallel Realities
3 Copyright (C) 2007 Kővágó Zoltán
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.
22 #include "weapons.h"
23 #include "gettext.hpp"
24 #include "console/console.hpp"
26 /**
27 * Loads all the predefined weapons for the game
29 void loadDefWeapons()
31 if (!engine.loadData("data/weapons"))
33 graphics.showErrorAndExit(_("Couldn't load weapon definitions file (%s)"), "data/weapons");
36 char *token = strtok((char*)engine.dataBuffer, "\n");
38 char name[50];
39 char sprite[2][100];
40 char flags[100];
41 int param[8];
42 int id;
44 while (true)
46 if (strcmp(token, "@EOF@") == 0)
47 break;
49 sscanf(token, "%d %*c %[^\"] %*c %d %d %d %d %d %d %s %s %d %s", &id, name, &param[0], &param[1], &param[2], &param[3], &param[4], &param[5], sprite[0], sprite[1], &param[6], flags);
51 weapon[id].setName(name);
52 weapon[id].id = param[0];
53 weapon[id].damage = param[1];
54 weapon[id].health = param[2];
55 weapon[id].dx = param[3];
56 weapon[id].dy = param[4];
57 weapon[id].reload = param[5];
58 weapon[id].sprite[0] = graphics.getSprite(sprite[0], true);
59 weapon[id].sprite[1] = graphics.getSprite(sprite[1], true);
60 weapon[id].fireSound = param[6];
61 weapon[id].flags = engine.getValueOfFlagTokens(flags);
63 token = strtok(NULL, "\n");
67 /**
68 * Chooses a random non aimed weapon. Selected either WP_MACHINEGUN, WP_ALIENLASER
69 * WP_PLASMARIFLE or WP_ALIENGRENADE
70 * @return The randomly selected Weapon
72 Weapon *getRandomStraightWeapon()
74 switch (rand() % 4)
76 case 0:
77 return &weapon[WP_MACHINEGUN];
78 break;
79 case 1:
80 return &weapon[WP_ALIENLASER];
81 break;
82 case 2:
83 return &weapon[WP_PLASMARIFLE];
84 break;
85 case 3:
86 return &weapon[WP_ALIENGRENADE];
87 break;
90 return &weapon[WP_PISTOL];
93 /**
94 * Chooses a random aimed weapon. Selected either WP_AIMEDPISTOL, WP_ALIENSPREAD
95 * or WP_ALIENGRENADE
96 * @return The randomly selected Weapon
98 Weapon *getRandomAimedWeapon()
100 switch (rand() % 3)
102 case 0:
103 return &weapon[WP_AIMEDPISTOL];
104 break;
105 case 1:
106 return &weapon[WP_ALIENSPREAD];
107 break;
108 case 2:
109 return &weapon[WP_ALIENGRENADE];
110 break;
113 return &weapon[WP_AIMEDPISTOL];
117 * Chooses a random weapon for use by Galdov. Selects either WP_AIMEDPISTOL, WP_ALIENSPREAD
118 * WP_ALIENGRENADE or WP_PLASMARIFLE
119 * @return The randomly selected Weapon
121 Weapon *getRandomGaldovWeapon()
123 switch (rand() % 4)
125 case 0:
126 return &weapon[WP_AIMEDPISTOL];
127 break;
128 case 1:
129 return &weapon[WP_ALIENSPREAD];
130 break;
131 case 2:
132 return &weapon[WP_ALIENGRENADE];
133 break;
134 case 3:
135 return &weapon[WP_PLASMARIFLE];
136 break;
139 return &weapon[WP_AIMEDPISTOL];
143 * Searches the Weapon array for the named Weapon. Once it is found
144 * it is returned. If it is not found WP_PISTOL is returned
145 * @param name
146 * @return The randomly selected Weapon
148 Weapon *getWeaponByName(char *name)
150 if (strcmp("randomStraight", name) == 0)
152 return getRandomStraightWeapon();
155 if (strcmp("randomAimed", name) == 0)
157 return getRandomAimedWeapon();
160 for (int i = 0 ; i < MAX_WEAPONS ; i++)
162 if (strcmp(weapon[i].name, name) == 0)
164 return &weapon[i];
168 debug << "WARNING - COULD NOT FIND WEAPON '" << name << "'" << std::endl;
170 return &weapon[WP_PISTOL];