1 /***************************************************************************
2   alienBlaster
3   Copyright (C) 2004
4   Paul Grathwohl, Arne Hormann, Daniel Kuehn, Soenke Schwardt
5 
6   This program is free software; you can redistribute it and/or modify
7   it under the terms of the GNU General Public License as published by
8   the Free Software Foundation; either version 2, or (at your option)
9   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, write to the Free Software
18   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19 ***************************************************************************/
20 #ifndef GLOBAL_H
21 #define GLOBAL_H
22 
23 #include <string>
24 
25 class Racers;
26 class Enemys;
27 class Shots;
28 class Explosions;
29 class Items;
30 class Wrecks;
31 class Banners;
32 class SmokePuffs;
33 class Options;
34 
35 extern Racers *racers;
36 extern Enemys *enemys;
37 extern Shots *shots;
38 extern Explosions *explosions;
39 extern Items *items;
40 extern Wrecks *wrecks;
41 extern Banners *banners;
42 extern SmokePuffs *smokePuffs;
43 extern Options *levelConf;
44 
45 extern int GAME_LENGTH;
46 extern bool scrollingOn;
47 extern bool nukeIsInPlace;
48 extern bool playMusicOn;
49 extern bool onePlayerGame;
50 extern bool arcadeGame;
51 extern int difficultyLevel;
52 extern float actBackgroundPos;
53 
54 void parseGlobalConfigValues( int difficultyLevel );
55 int getRandValue( const int *choicesWeights, int nrChoices, int sumWeights=0 );
56 void initAllSurfaces();
57 
58 // screen options
59 const int SCREEN_WIDTH = 640;
60 const int SCREEN_HEIGHT = 480;
61 const int BIT_DEPTH = 24;
62 
63 const int MAX_PLAYER_CNT = 2;
64 
65 // the speed of the background scrolling
66 const float SCROLL_SPEED = 20;
67 
68 // where is the absolute border of no return for the heatseeker?
69 // they have a chance to return within SCREEN_BORDER pixels outside the screen...
70 // outside this area shots are deleted
71 const int SHOT_SCREEN_BORDER = 50;
72 
73 
74 /********************************* ARCADE MODE ***********************************/
75 
76 const int ARCADE_DIFFICULTY_LEVEL = 4;
77 const int ARCADE_POINTS_PER_TEN_SECONDS = 30;
78 
79 // BANNER_RANDOM: no real mode, just the value to choose one randomly
80 enum BannerModes { BANNER_MODE_FLY_FROM_LEFT=0,
81 		   BANNER_MODE_FROM_TOP,
82 		   BANNER_MODE_ITEM_COLLECTED_SINGLE_PLAYER,
83 		   BANNER_MODE_ITEM_COLLECTED_PLAYER_ONE,
84 		   BANNER_MODE_ITEM_COLLECTED_PLAYER_TWO,
85 		   BANNER_MODE_RANDOM=1000 };
86 const int BANNER_MODE_LIFETIME[] = { 5000, 5000, 2000, 2000, 2000 };
87 const int NR_BANNER_MODES = 2;
88 
89 enum BannerTexts { BANNER_EXCELLENT=0, BANNER_YOU_RULE, BANNER_HEIHO,
90 		   BANNER_HEALTH, BANNER_ENEMYS_KILLED,
91 		   BANNER_ITEM_HEALTH_COLLECTED,
92 		   BANNER_ITEM_PRIMARY_UPGRADE_COLLECTED,
93 		   BANNER_ITEM_DUMBFIRE_DOUBLE_COLLECTED,
94 		   BANNER_ITEM_KICK_ASS_ROCKET_COLLECTED,
95 		   BANNER_ITEM_HELLFIRE_COLLECTED,
96 		   BANNER_ITEM_MACHINE_GUN_COLLECTED,
97 		   BANNER_ITEM_HEATSEEKER_COLLECTED,
98 		   BANNER_ITEM_NUKE_COLLECTED,
99 		   BANNER_ITEM_DEFLECTOR_COLLECTED,
100 		   BANNER_ITEM_ENERGY_BEAM_COLLECTED,
101 		   BANNER_ITEM_LASER_COLLECTED };
102 const std::string FN_BANNER_TEXTS[] =
103 { "/usr/local/share/alienblaster/images/bannerExcellent.bmp",
104   "/usr/local/share/alienblaster/images/bannerYouRule.bmp",
105   "/usr/local/share/alienblaster/images/bannerHeiho.bmp",
106   "/usr/local/share/alienblaster/images/bannerHealth.bmp",
107   "/usr/local/share/alienblaster/images/bannerEnemysKilled.bmp",
108   "/usr/local/share/alienblaster/images/bannerItemHealthCollected.bmp",
109   "/usr/local/share/alienblaster/images/bannerItemPrimaryUpgradeCollected.bmp",
110   "/usr/local/share/alienblaster/images/bannerItemDumbfireDoubleCollected.bmp",
111   "/usr/local/share/alienblaster/images/bannerItemKickAssRocketCollected.bmp",
112   "/usr/local/share/alienblaster/images/bannerItemHellfireCollected.bmp",
113   "/usr/local/share/alienblaster/images/bannerItemMachineGunCollected.bmp",
114   "/usr/local/share/alienblaster/images/bannerItemHeatseekerCollected.bmp",
115   "/usr/local/share/alienblaster/images/bannerItemNukeCollected.bmp",
116   "/usr/local/share/alienblaster/images/bannerItemDeflectorCollected.bmp",
117   "/usr/local/share/alienblaster/images/bannerItemEnergyBeamCollected.bmp",
118   "/usr/local/share/alienblaster/images/bannerItemLaserCollected.bmp" };
119 const int NR_BANNER_TEXTS = 3;
120 
121 enum BannerBoni { BANNER_BONUS_100=0,
122 		  BANNER_BONUS_200,
123 		  BANNER_BONUS_NONE=1000 };
124 const std::string FN_BANNER_BONUS[] =
125 { "/usr/local/share/alienblaster/images/bannerBonus100.bmp",
126   "/usr/local/share/alienblaster/images/bannerBonus200.bmp" };
127 const int NR_BANNER_BONI = 2;
128 
129 const float ARCADE_POINTS_FOR_FORMATION_DESTRUCTION = 100;
130 const BannerBoni ARCADE_BONUS_FOR_FORMATION_DESTRUCTION = BANNER_BONUS_100;
131 
132 const float ARCADE_POINTS_FOR_ENEMYS_KILLED = 200;
133 const BannerBoni ARCADE_BONUS_FOR_ENEMYS_KILLED = BANNER_BONUS_200;
134 
135 const int NR_ARCACE_POINTS_FOR_HEALTH_ITEM = 7;
136 const float ARCADE_POINTS_FOR_HEALTH_ITEM[ NR_ARCACE_POINTS_FOR_HEALTH_ITEM ] =
137 { 2000, 5000, 10000, 15000, 25000, 35000, 50000 };
138 
139 
140 /********************************** ITEMS ****************************************/
141 
142 enum ItemTypes { ITEM_PRIMARY_UPGRADE=0,
143 		 ITEM_DUMBFIRE_DOUBLE,
144 		 ITEM_KICK_ASS_ROCKET,
145 		 ITEM_HELLFIRE,
146 		 ITEM_MACHINE_GUN,
147 		 ITEM_HEALTH,
148 		 ITEM_HEATSEEKER,
149 		 ITEM_NUKE,
150 		 ITEM_DEFLECTOR,
151 		 ITEM_LASER,
152 		 ITEM_ENERGY_BEAM };
153 
154 const int NR_ITEM_TYPES = 11;
155 
156 extern int ITEM_LIFETIME; // ms
157 extern int ITEM_APPEAR_DELAY; // ms
158 extern int ITEM_APPEAR_RAND_DELAY; // ms
159 
160 // ITEM_HEALTH_REPAIR_AMOUNT points are restored, if collected
161 extern int ITEM_HEALTH_REPAIR_AMOUNT;
162 // if collected by heavy fighter the amount will be multiplied by this factor
163 const float ITEM_HEALTH_REPAIR_FACTOR_HEAVY_FIGHTER = 2.0;
164 
165 // if collected ITEM_HEATSEEKER_AMMO rockets can be fired
166 extern int ITEM_HEATSEEKER_AMMO;
167 extern int ITEM_NUKE_AMMO;
168 extern int ITEM_DEFLECTOR_AMMO;
169 
170 extern int ITEM_DEFLECTOR_DURATION;
171 extern int ITEM_DEFLECTOR_ACTIVATION_DIST;
172 extern int ITEM_DEFLECTOR_POWER;
173 
174 // the items have different probabilities to appear.
175 // bigger number -> greater chance
176 extern int ITEM_APPEAR_CHANCES[];
177 
178 enum ExplosionTypes { EXPLOSION_NORMAL_AIR=0, EXPLOSION_NORMAL_GROUND };
179 const int NR_EXPLOSION_TYPES = 2;
180 const int LIFETIME_EXPL_NORMAL = 1500;
181 
182 const int NUKE_EFFECT_DURATION = 1000;
183 const int NUKE_QUAKE_EFFECT = 40;
184 
185 enum ShipTypes { LIGHT_FIGHTER=0, HEAVY_FIGHTER };
186 const int NR_SHIPS = 2;
187 
188 
189 /*********************************** SHOTS ********************************/
190 
191 
192 enum ShotTypes { SHOT_NORMAL=0,
193 		 SHOT_NORMAL_HEAVY,
194 		 SHOT_DOUBLE,
195 		 SHOT_DOUBLE_HEAVY,
196 		 SHOT_TRIPLE,
197 		 SHOT_HF_NORMAL,
198 		 SHOT_HF_DOUBLE,
199 		 SHOT_HF_TRIPLE,
200 		 SHOT_HF_QUATTRO,
201 		 SHOT_HF_QUINTO,
202 		 SHOT_DUMBFIRE=100,
203 		 SHOT_DUMBFIRE_DOUBLE,
204 		 SHOT_KICK_ASS_ROCKET,
205 		 SHOT_HELLFIRE,
206 		 SHOT_MACHINE_GUN,
207 		 SHOT_ENERGY_BEAM,
208 		 SHOT_HF_DUMBFIRE,
209 		 SHOT_HF_DUMBFIRE_DOUBLE,
210 		 SHOT_HF_KICK_ASS_ROCKET,
211 		 SHOT_HF_LASER,
212 		 ENEMY_SHOT_NORMAL=1000,
213 		 ENEMY_SHOT_TANK_ROCKET,
214 		 SPECIAL_SHOT_HEATSEEKER=10000,
215 		 SPECIAL_SHOT_NUKE };
216 const int NR_SECONDARY_WEAPONS = 10;
217 
218 enum SpecialTypes { SPECIAL_NONE=0, SPECIAL_NUKE, SPECIAL_HEATSEEKER, SPECIAL_DEFLECTOR };
219 const int NR_SPECIALS = 4;
220 
221 // after that many ms the shot is expired
222 const int LIFETIME_SHOT_NORMAL = 5000;
223 const int LIFETIME_SHOT_NORMAL_HEAVY = 5000;
224 const int LIFETIME_SHOT_DOUBLE = 5000;
225 const int LIFETIME_SHOT_DOUBLE_HEAVY = 5000;
226 const int LIFETIME_SHOT_TRIPLE = 5000;
227 const int LIFETIME_SHOT_HF_NORMAL = 6000;
228 const int LIFETIME_SHOT_HF_DOUBLE = 6000;
229 const int LIFETIME_SHOT_HF_TRIPLE = 6000;
230 const int LIFETIME_SHOT_HF_QUATTRO = 6000;
231 const int LIFETIME_SHOT_HF_QUINTO = 6000;
232 
233 const int LIFETIME_SHOT_DUMBFIRE = 6000;
234 const int LIFETIME_SHOT_DUMBFIRE_DOUBLE = 6000;
235 const int LIFETIME_SHOT_KICK_ASS_ROCKET = 7000;
236 const int LIFETIME_SHOT_HELLFIRE = 6000;
237 const int LIFETIME_SHOT_MACHINE_GUN = 5000;
238 const int LIFETIME_SHOT_ENERY_BEAM = 5000;
239 
240 const int LIFETIME_SHOT_HF_DUMBFIRE = 6000;
241 const int LIFETIME_SHOT_HF_DUMBFIRE_DOUBLE = 6000;
242 const int LIFETIME_SHOT_HF_KICK_ASS_ROCKET = 7000;
243 const int LIFETIME_SHOT_HF_LASER = 2000;
244 
245 const int LIFETIME_SPECIAL_SHOT_HEATSEEKER = 10000;
246 const int LIFETIME_SPECIAL_SHOT_NUKE = 10000;
247 
248 const int VEL_SHOT_NORMAL = 150;
249 const int VEL_SHOT_NORMAL_HEAVY = 150;
250 const int VEL_SHOT_DOUBLE = 150;
251 const int VEL_SHOT_DOUBLE_HEAVY = 150;
252 const int VEL_SHOT_TRIPLE = 150;
253 
254 const int VEL_SHOT_HF_NORMAL = 180;
255 const int VEL_SHOT_HF_DOUBLE = 180;
256 const int VEL_SHOT_HF_TRIPLE = 180;
257 const int VEL_SHOT_HF_QUATTRO = 180;
258 const int VEL_SHOT_HF_QUINTO = 180;
259 
260 const int VEL_SHOT_DUMBFIRE = 100;
261 const int VEL_SHOT_DUMBFIRE_DOUBLE = 100;
262 const int VEL_SHOT_KICK_ASS_ROCKET = 80;
263 const int VEL_SHOT_HELLFIRE = 110;
264 const int VEL_SHOT_MACHINE_GUN = 130;
265 const int VEL_SHOT_ENERGY_BEAM = 105;
266 
267 const int VEL_SHOT_HF_DUMBFIRE = 160;
268 const int VEL_SHOT_HF_DUMBFIRE_DOUBLE = 160;
269 const int VEL_SHOT_HF_KICK_ASS_ROCKET = 80;
270 const int VEL_SHOT_HF_LASER = 600;
271 
272 const int VEL_SPECIAL_SHOT_HEATSEEKER = 130;
273 const int VEL_SPECIAL_SHOT_NUKE = 180;
274 
275 const float DAMAGE_SHOT_NORMAL = 5;
276 const float DAMAGE_SHOT_NORMAL_HEAVY = 8;
277 const float DAMAGE_SHOT_DOUBLE = 5;
278 const float DAMAGE_SHOT_DOUBLE_HEAVY = 8;
279 const float DAMAGE_SHOT_TRIPLE = 7;
280 
281 const int DAMAGE_SHOT_HF_NORMAL = 20;
282 const int DAMAGE_SHOT_HF_DOUBLE = 20;
283 const int DAMAGE_SHOT_HF_TRIPLE = 20;
284 const int DAMAGE_SHOT_HF_QUATTRO = 20;
285 const int DAMAGE_SHOT_HF_QUINTO = 20;
286 
287 const float DAMAGE_SHOT_DUMBFIRE = 40;
288 const float DAMAGE_SHOT_DUMBFIRE_DOUBLE = 30;
289 const float DAMAGE_SHOT_KICK_ASS_ROCKET = 151; // should kill a tank/turret with one shot
290 const float DAMAGE_SHOT_HELLFIRE = 50;
291 const float DAMAGE_SHOT_MACHINE_GUN = 8;
292 const float DAMAGE_SHOT_ENERGY_BEAM = 80;
293 
294 const int DAMAGE_SHOT_HF_DUMBFIRE = 40;
295 const int DAMAGE_SHOT_HF_DUMBFIRE_DOUBLE = 40;
296 const int DAMAGE_SHOT_HF_KICK_ASS_ROCKET = 151;
297 const int DAMAGE_SHOT_HF_LASER = 70;
298 
299 const float DAMAGE_SPECIAL_SHOT_HEATSEEKER = 20;
300 const float DAMAGE_SPECIAL_SHOT_NUKE = 250;
301 
302 const int SPREAD_ANGLE_SHOT_NORMAL = 6;
303 
304 const int LIFETIME_ENEMY_SHOT_NORMAL = 6000;
305 const int LIFETIME_ENEMY_SHOT_TANK_ROCKET = 10000;
306 
307 const int VEL_ENEMY_SHOT_NORMAL = 130;
308 const int VEL_ENEMY_SHOT_TANK_ROCKET = 70;
309 
310 const float DAMAGE_ENEMY_SHOT_NORMAL = 8;
311 const float DAMAGE_ENEMY_SHOT_TANK_ROCKET = 25;
312 
313 /***************************** SMOKE PUFFS ***************************/
314 
315 enum SmokePuffTypes { SMOKE_PUFF_SMALL=0, SMOKE_PUFF_MEDIUM };
316 const int NR_SMOKE_PUFF_TYPES = 2;
317 const std::string FN_SMOKE_PUFF[ NR_SMOKE_PUFF_TYPES ] =
318 { "/usr/local/share/alienblaster/images/smokePuffSmall.bmp",
319   "/usr/local/share/alienblaster/images/smokePuffMedium.bmp" };
320 const int LIFETIME_SMOKE_PUFF[ NR_SMOKE_PUFF_TYPES ] = { 500, 1000 };
321 const int SMOKE_PUFF_DELAY_TO_NEXT_PUFF[ NR_SMOKE_PUFF_TYPES ] = { 100, 100 };
322 const float SMOKE_PUFF_VELOCITY_FACTOR = 0.3;
323 const bool SMOKE_PUFF_ALPHA_BLENDING = true;
324 
325 /********************************** ENEMIES ********************************/
326 
327 
328 enum EnemyTypes {
329       FIGHTER=0,
330       BOMBER,
331       TANK,
332 		  BOSS_1_MAIN_GUN,
333       BOSS_1_ROCKET_LAUNCHER,
334 		  BOSS_1_SHOT_BATTERY_RIGHT,
335       BOSS_1_SHOT_BATTERY_LEFT,
336       BOSS_2};
337 const int NR_ENEMY_TYPES = 8;
338 const int NR_ENEMY_TYPES_NORMAL = 3;
339 const int NR_ENEMY_TYPES_BOSS_1 = 4;
340 
341 const float BOSS_1_END_Y = 110;
342 
343 enum WreckTypes {
344       WRECK_FIGHTER=0,
345       WRECK_BOMBER,
346       WRECK_TANK,
347 		  WRECK_BOSS_1_MAIN_GUN,
348 		  WRECK_BOSS_1_ROCKET_LAUNCHER,
349 		  WRECK_BOSS_1_BATTERY_RIGHT,
350 		  WRECK_BOSS_1_BATTERY_LEFT,
351 		  WRECK_BOSS_1_BACKGROUND,
352       WRECK_BOSS_1_DESTROYED,
353       WRECK_BOSS_2_DESTROYED };
354 const int NR_WRECK_TYPES = 10;
355 const WreckTypes WRECK_FOR_ENEMYTYPE[] = {
356              WRECK_FIGHTER,
357              WRECK_BOMBER,
358 					   WRECK_TANK,
359 					   WRECK_BOSS_1_MAIN_GUN,
360 					   WRECK_BOSS_1_ROCKET_LAUNCHER,
361 					   WRECK_BOSS_1_BATTERY_RIGHT,
362 					   WRECK_BOSS_1_BATTERY_LEFT,
363              WRECK_BOSS_2_DESTROYED };
364 
365 extern int GENERATE_ENEMY_DELAY;
366 extern int GENERATE_ENEMY_RAND_DELAY;
367 
368 extern int ENEMY_HITPOINTS[];
369 //const float ENEMY_HITPOINTS[] = { 80, 120, 150, 10, 10, 10, 10 };
370 const bool ENEMY_FLYING[] = {true, true, false, false, false, false, false, true};
371 // determines the difference between shadow and enemy plane
372 const int ENEMY_FLYING_HEIGHT[] = {10, 15, 0, 0, 0, 0, 0, 10};
373 const int ENEMY_POINTS_FOR_DEST[] = {10,20,20,0,0,0,0,0};
374 
375 extern int ENEMY_COLLISION_DAMAGE[];
376 
377 // the enemys have different probabilities to appear in the different levels.
378 // bigger number -> greater chance
379 extern int ENEMY_APPEAR_CHANCES[];
380 
381 // on average one of that many enemys carries an item
382 extern int ENEMY_DIES_ITEM_APPEAR_CHANCE[];
383 
384 // minimal waittime (ms) between two shots
385 extern int ENEMY_COOLDOWN_PRIMARY[];
386 extern int ENEMY_COOLDOWN_SECONDARY[];
387 // random additional waittime between two shots
388 extern int ENEMY_RAND_WAIT_PRIMARY[];
389 extern int ENEMY_RAND_WAIT_SECONDARY[];
390 
391 
392 
393 /******************************** FORMATION ***************************************/
394 
395 
396 enum FormationTypes { FORMATION_V=0, FORMATION_REVERSE_V,
397 		      FORMATION_BLOCK,
398 		      FORMATION_LINE };
399 
400 const int NR_FORMATION_TYPES = 4;
401 
402 const int FORMATION_MAX_NR_ENEMYS_HARD_LIMIT[] = {7,7,7,6};
403 extern int FORMATION_MAX_NR_ENEMYS[];
404 
405 enum FormationEnemySets { FORMATION_ENEMY_SET_DEFAULT=0,
406 			  FORMATION_ENEMY_SET_FIGHTER,
407 			  FORMATION_ENEMY_SET_BOMBER,
408 			  FORMATION_ENEMY_SET_FIGHTER_BOMBER };
409 const int NR_FORMATION_ENEMY_SETS = 4;
410 
411 const int FORMATION_CHANGE_ON_KILL = 1;
412 const int FORMATION_CHANGE_SPONTANEOUS = 2;
413 const int FORMATION_CHANGE_SELDOM = 4;
414 const int FORMATION_CHANGE_OFTEN = 8;
415 
416 const int FORMATION_CHANGE_OFTEN_DELAY = 3000;
417 const int FORMATION_CHANGE_OFTEN_RAND_DELAY = 8000;
418 const int FORMATION_CHANGE_SELDOM_DELAY = 4000;
419 const int FORMATION_CHANGE_SELDOM_RAND_DELAY = 15000;
420 
421 
422 enum FormationShotPatterns { FORMATION_SP_NONE=0,
423 			     FORMATION_SP_RAND_FAST,
424 			     FORMATION_SP_RAND_MEDIUM,
425 			     FORMATION_SP_RAND_SLOW,
426 
427 			     FORMATION_SP_VOLLEY_FAST,
428 			     FORMATION_SP_VOLLEY_MEDIUM,
429 			     FORMATION_SP_VOLLEY_SLOW,
430 
431 			     FORMATION_SP_LEFT_RIGHT_FAST,
432 			     FORMATION_SP_LEFT_RIGHT_MEDIUM,
433 			     FORMATION_SP_RIGHT_LEFT_FAST,
434 			     FORMATION_SP_RIGHT_LEFT_MEDIUM };
435 
436 const int NR_FORMATION_SP = 11;
437 
438 extern int FORMATION_SP_CHANCES[];
439 extern int FORMATION_SP_PRIMARY_DELAY[];
440 extern int FORMATION_SP_PRIMARY_RAND_DELAY[];
441 
442 extern int GENERATE_FORMATION_DELAY;
443 extern int GENERATE_FORMATION_RAND_DELAY;
444 
445 
446 
447 /************************* RACER *********************************/
448 
449 
450 // max speed of the racer in pixels per second
451 const float LIGHT_FIGHTER_VEL_MAX = 90;
452 const float HEAVY_FIGHTER_VEL_MAX = 60;
453 
454 // shield recharge points per 100 seconds
455 extern int LIGHT_FIGHTER_SHIELD_RECHARGE;
456 extern int HEAVY_FIGHTER_SHIELD_RECHARGE;
457 
458 // Cooldown rates (in ms) of the weapons
459 const int RACER_COOLDOWN_SHOT_NORMAL = 100;
460 const int RACER_COOLDOWN_SHOT_NORMAL_HEAVY = 100;
461 const int RACER_COOLDOWN_SHOT_DOUBLE = 130;
462 const int RACER_COOLDOWN_SHOT_DOUBLE_HEAVY = 130;
463 const int RACER_COOLDOWN_SHOT_TRIPLE = 130;
464 
465 const int RACER_COOLDOWN_SHOT_HF_NORMAL = 300;
466 const int RACER_COOLDOWN_SHOT_HF_DOUBLE = 300;
467 const int RACER_COOLDOWN_SHOT_HF_TRIPLE = 300;
468 const int RACER_COOLDOWN_SHOT_HF_QUATTRO = 350;
469 const int RACER_COOLDOWN_SHOT_HF_QUINTO = 400;
470 
471 const int RACER_COOLDOWN_DUMBFIRE = 600;
472 const int RACER_COOLDOWN_DUMBFIRE_DOUBLE = 300;
473 const int RACER_COOLDOWN_KICK_ASS_ROCKET = 1500;
474 const int RACER_COOLDOWN_HELLFIRE = 600;
475 const int RACER_COOLDOWN_MACHINE_GUN = 150;
476 const int RACER_COOLDOWN_ENERGY_BEAM = 500;
477 
478 const int RACER_COOLDOWN_HF_DUMBFIRE = 600;
479 const int RACER_COOLDOWN_HF_DUMBFIRE_DOUBLE = 300;
480 const int RACER_COOLDOWN_HF_KICK_ASS_ROCKET = 1300;
481 const int RACER_COOLDOWN_HF_LASER = 700;
482 
483 const int RACER_COOLDOWN_SPECIAL_HEATSEEKER = 400;
484 const int RACER_COOLDOWN_SPECIAL_NUKE = 3000;
485 
486 extern int RACER_DEFLECTOR_ACTIVATION_DIST;
487 extern int RACER_DEFLECTOR_POWER;
488 extern int RACER_SONIC_ACTIVATION_DIST;
489 extern int RACER_SONIC_POWER;
490 
491 // how long (in ms) does the shield glow, when the racer is hit
492 const int RACER_SHIELD_DAMAGE_LIFETIME = 200;
493 
494 // shields
495 extern int LIGHT_FIGHTER_MAX_SHIELD;
496 extern int HEAVY_FIGHTER_MAX_SHIELD;
497 // hitpoints
498 extern int LIGHT_FIGHTER_MAX_DAMAGE;
499 extern int HEAVY_FIGHTER_MAX_DAMAGE;
500 
501 const std::string FN_SOUND_SHOT_PRIMARY = "/usr/local/share/alienblaster/sound/shotPrimary.wav";
502 const std::string FN_SOUND_SHOT_SECONDARY = "/usr/local/share/alienblaster/sound/shotSecondary.wav";
503 const std::string FN_SOUND_EXPLOSION_NORMAL = "/usr/local/share/alienblaster/sound/explosion.wav";
504 const std::string FN_SOUND_EXPLOSION_BOSS = "/usr/local/share/alienblaster/sound/explosionBoss.wav";
505 const std::string FN_SOUND_BOSS_ALARM = "/usr/local/share/alienblaster/sound/alarm.wav";
506 const std::string FN_SOUND_ARCADE_CONFIRM = "/usr/local/share/alienblaster/sound/alarm.wav";
507 const std::string FN_SOUND_ARCADE_CHOOSE = "/usr/local/share/alienblaster/sound/choose.wav";
508 const std::string FN_SOUND_INTRO_CONFIRM = "/usr/local/share/alienblaster/sound/confirm.wav";
509 const std::string FN_SOUND_INTRO_CHOOSE = "/usr/local/share/alienblaster/sound/choose.wav";
510 
511 const std::string FN_ENEMY_FIGHTER = "/usr/local/share/alienblaster/images/fighter.bmp";
512 const std::string FN_ENEMY_FIGHTER_SHADOW = "/usr/local/share/alienblaster/images/fighterShadow.bmp";
513 const std::string FN_ENEMY_BOMBER = "/usr/local/share/alienblaster/images/bomber.bmp";
514 const std::string FN_ENEMY_BOMBER_SHADOW = "/usr/local/share/alienblaster/images/bomberShadow.bmp";
515 const std::string FN_ENEMY_TANK = "/usr/local/share/alienblaster/images/tank.bmp";
516 const std::string FN_ENEMY_BOSS_1_MAIN_GUN = "/usr/local/share/alienblaster/images/boss1MainGun.bmp";
517 const std::string FN_ENEMY_BOSS_1_ROCKET_LAUNCHER = "/usr/local/share/alienblaster/images/boss1RocketLauncher.bmp";
518 const std::string FN_ENEMY_BOSS_1_SHOT_BATTERY_LEFT = "/usr/local/share/alienblaster/images/boss1ShotBatteryLeft.bmp";
519 const std::string FN_ENEMY_BOSS_1_SHOT_BATTERY_RIGHT = "/usr/local/share/alienblaster/images/boss1ShotBatteryRight.bmp";
520 const std::string FN_ENEMY_BOSS_2 = "/usr/local/share/alienblaster/images/boss2.bmp";
521 const std::string FN_ENEMY_BOSS_2_SHADOW = "/usr/local/share/alienblaster/images/boss2Shadow.bmp";
522 
523 const std::string FN_WRECK_FIGHTER = "/usr/local/share/alienblaster/images/wreckFighter.bmp";
524 const std::string FN_WRECK_BOMBER = "/usr/local/share/alienblaster/images/wreckBomber.bmp";
525 const std::string FN_WRECK_TANK = "/usr/local/share/alienblaster/images/wreckTank.bmp";
526 const std::string FN_WRECK_BOSS_1 = "/usr/local/share/alienblaster/images/wreckBoss1.bmp";
527 const std::string FN_WRECK_BOSS_1_BACKGROUND = "/usr/local/share/alienblaster/images/wreckBossBackground.bmp";
528 const std::string FN_WRECK_BOSS_1_DESTROYED = "/usr/local/share/alienblaster/images/boss.bmp";
529 const std::string FN_WRECK_BOSS_2_DESTROYED = "/usr/local/share/alienblaster/images/wreckBoss2.bmp";
530 
531 const std::string FN_SHOT_NORMAL = "/usr/local/share/alienblaster/images/normalShot.bmp";
532 const std::string FN_SHOT_NORMAL_HEAVY = "/usr/local/share/alienblaster/images/heavyShot.bmp";
533 const std::string FN_SHOT_DOUBLE = "/usr/local/share/alienblaster/images/normalShot.bmp";
534 const std::string FN_SHOT_DOUBLE_HEAVY = "/usr/local/share/alienblaster/images/heavyShot.bmp";
535 const std::string FN_SHOT_TRIPLE = "/usr/local/share/alienblaster/images/heavyShot.bmp";
536 
537 const std::string FN_SHOT_HF_NORMAL = "/usr/local/share/alienblaster/images/normalShotHF.bmp";
538 const std::string FN_SHOT_HF_DOUBLE = "/usr/local/share/alienblaster/images/normalShotHF.bmp";
539 const std::string FN_SHOT_HF_TRIPLE = "/usr/local/share/alienblaster/images/normalShotHF.bmp";
540 const std::string FN_SHOT_HF_QUATTRO = "/usr/local/share/alienblaster/images/normalShotHF.bmp";
541 const std::string FN_SHOT_HF_QUINTO = "/usr/local/share/alienblaster/images/normalShotHF.bmp";
542 
543 const std::string FN_SHOT_DUMBFIRE = "/usr/local/share/alienblaster/images/dumbfire.bmp";
544 const std::string FN_SHOT_DUMBFIRE_DOUBLE = "/usr/local/share/alienblaster/images/dumbfire.bmp";
545 const std::string FN_SHOT_KICK_ASS_ROCKET = "/usr/local/share/alienblaster/images/kickAssRocket.bmp";
546 const std::string FN_SHOT_KICK_ASS_ROCKET_SHADOW = "/usr/local/share/alienblaster/images/kickAssRocketShadow.bmp";
547 const std::string FN_SHOT_HELLFIRE = "/usr/local/share/alienblaster/images/hellfire.bmp";
548 const std::string FN_SHOT_HELLFIRE_SHADOW = "/usr/local/share/alienblaster/images/hellfireShadow.bmp";
549 const std::string FN_SHOT_MACHINE_GUN = "/usr/local/share/alienblaster/images/machineGun.bmp";
550 const std::string FN_SHOT_ENERGY_BEAM = "/usr/local/share/alienblaster/images/energyBeam.bmp";
551 
552 const std::string FN_SHOT_HF_DUMBFIRE = "/usr/local/share/alienblaster/images/dumbfire.bmp";
553 const std::string FN_SHOT_HF_DUMBFIRE_DOUBLE = "/usr/local/share/alienblaster/images/dumbfire.bmp";
554 const std::string FN_SHOT_HF_KICK_ASS_ROCKET = "/usr/local/share/alienblaster/images/kickAssRocket.bmp";
555 const std::string FN_SHOT_HF_KICK_ASS_ROCKET_SHADOW = "/usr/local/share/alienblaster/images/kickAssRocketShadow.bmp";
556 const std::string FN_SHOT_HF_LASER = "/usr/local/share/alienblaster/images/laser.bmp";
557 
558 const std::string FN_ENEMY_SHOT_NORMAL = "/usr/local/share/alienblaster/images/enemyShotNormal.bmp";
559 const std::string FN_ENEMY_SHOT_TANK_ROCKET = "/usr/local/share/alienblaster/images/tankRocket.bmp";
560 const std::string FN_ENEMY_SHOT_TANK_ROCKET_SHADOW = "/usr/local/share/alienblaster/images/tankRocketShadow.bmp";
561 
562 const std::string FN_SPECIAL_SHOT_HEATSEEKER = "/usr/local/share/alienblaster/images/heatseeker.bmp";
563 const std::string FN_SPECIAL_SHOT_NUKE = "/usr/local/share/alienblaster/images/shotNuke.bmp";
564 const std::string FN_SPECIAL_SHOT_NUKE_SHADOW = "/usr/local/share/alienblaster/images/shotNukeShadow.bmp";
565 const std::string FN_NUKE_EFFECT = "/usr/local/share/alienblaster/images/nukeEffect.bmp";
566 const std::string FN_SONIC_EFFECT = "/usr/local/share/alienblaster/images/sonic.bmp";
567 
568 const std::string FN_ITEM_PRIMARY_UPGRADE = "/usr/local/share/alienblaster/images/itemPrimaryUpgrade.bmp";
569 const std::string FN_ITEM_DUMBFIRE_DOUBLE = "/usr/local/share/alienblaster/images/itemDumbfireDouble.bmp";
570 const std::string FN_ITEM_KICK_ASS_ROCKET = "/usr/local/share/alienblaster/images/itemKickAssRocket.bmp";
571 const std::string FN_ITEM_HELLFIRE = "/usr/local/share/alienblaster/images/itemHellfire.bmp";
572 const std::string FN_ITEM_MACHINE_GUN = "/usr/local/share/alienblaster/images/itemMachineGun.bmp";
573 const std::string FN_ITEM_HEALTH = "/usr/local/share/alienblaster/images/itemHealth.bmp";
574 const std::string FN_ITEM_HEATSEEKER = "/usr/local/share/alienblaster/images/itemHeatseeker.bmp";
575 const std::string FN_ITEM_NUKE = "/usr/local/share/alienblaster/images/itemNuke.bmp";
576 const std::string FN_ITEM_DEFLECTOR = "/usr/local/share/alienblaster/images/itemDeflector.bmp";
577 const std::string FN_ITEM_ENERGY_BEAM = "/usr/local/share/alienblaster/images/itemEnergyBeam.bmp";
578 const std::string FN_ITEM_LASER = "/usr/local/share/alienblaster/images/itemLaser.bmp";
579 
580 const std::string FN_ALIENBLASTER_INTRO = "/usr/local/share/alienblaster/images/alienblasterintro.bmp";
581 const std::string FN_ALIENBLASTER_ICON = "/usr/local/share/alienblaster/images/alienblastericon.bmp";
582 const std::string FN_BACKGROUND = "/usr/local/share/alienblaster/images/background.bmp";
583 const std::string FN_PAUSED = "/usr/local/share/alienblaster/images/paused.bmp";
584 const std::string FN_YOU_LOSE = "/usr/local/share/alienblaster/images/youLose.bmp";
585 const std::string FN_YOU_WIN = "/usr/local/share/alienblaster/images/youWin.bmp";
586 const std::string FN_GAME_OVER = "/usr/local/share/alienblaster/images/gameOver.bmp";
587 const std::string FN_ARCADE_LOGO = "/usr/local/share/alienblaster/images/arcadeLogo.bmp";
588 
589 // numbers of images (animation-frames) per racer
590 const int RACER_IMAGE_CNT = 9;
591 
592 const std::string FN_LIGHT_FIGHTER_1 = "/usr/local/share/alienblaster/images/lightFighter1.bmp";
593 const std::string FN_LIGHT_FIGHTER_2 = "/usr/local/share/alienblaster/images/lightFighter2.bmp";
594 const std::string FN_LIGHT_FIGHTER_SHADOW = "/usr/local/share/alienblaster/images/lightFighterShadow.bmp";
595 const std::string FN_LIGHT_FIGHTER_SHIELD_DAMAGED = "/usr/local/share/alienblaster/images/lightFighterShieldDamaged.bmp";
596 const std::string FN_LIGHT_FIGHTER_1_ICON = "/usr/local/share/alienblaster/images/lightFighter1Icon.bmp";
597 const std::string FN_LIGHT_FIGHTER_2_ICON = "/usr/local/share/alienblaster/images/lightFighter2Icon.bmp";
598 const std::string FN_LIGHT_FIGHTER_1_SMALL = "/usr/local/share/alienblaster/images/lightFighter1Small.bmp";
599 const std::string FN_LIGHT_FIGHTER_2_SMALL = "/usr/local/share/alienblaster/images/lightFighter2Small.bmp";
600 
601 const std::string FN_HEAVY_FIGHTER_1 = "/usr/local/share/alienblaster/images/heavyFighter1.bmp";
602 const std::string FN_HEAVY_FIGHTER_2 = "/usr/local/share/alienblaster/images/heavyFighter2.bmp";
603 const std::string FN_HEAVY_FIGHTER_SHADOW = "/usr/local/share/alienblaster/images/heavyFighterShadow.bmp";
604 const std::string FN_HEAVY_FIGHTER_SHIELD_DAMAGED = "/usr/local/share/alienblaster/images/heavyFighterShieldDamaged.bmp";
605 const std::string FN_HEAVY_FIGHTER_DEFLECTOR = "/usr/local/share/alienblaster/images/heavyFighterDeflector.bmp";
606 const std::string FN_HEAVY_FIGHTER_1_ICON = "/usr/local/share/alienblaster/images/heavyFighter1Icon.bmp";
607 const std::string FN_HEAVY_FIGHTER_2_ICON = "/usr/local/share/alienblaster/images/heavyFighter2Icon.bmp";
608 const std::string FN_HEAVY_FIGHTER_1_SMALL = "/usr/local/share/alienblaster/images/heavyFighter1Small.bmp";
609 const std::string FN_HEAVY_FIGHTER_2_SMALL = "/usr/local/share/alienblaster/images/heavyFighter2Small.bmp";
610 
611 const std::string FN_ICONS_SPECIALS = "/usr/local/share/alienblaster/images/iconsSpecials.bmp";
612 const std::string FN_ICONS_SECONDARY_WEAPONS = "/usr/local/share/alienblaster/images/iconsSecondaryWeapons.bmp";
613 
614 const std::string FN_HITPOINTS_STAT = "/usr/local/share/alienblaster/images/hpStat.bmp";
615 
616 const std::string FN_INTRO_SHOW_CHOICE      = "/usr/local/share/alienblaster/images/menuIcon.bmp";
617 
618 const std::string FN_FONT_PATH = "/usr/local/share/alienblaster/images/";
619 const std::string FN_FONT_SUFFIX_SURFACE = ".bmp";
620 const std::string FN_FONT_INTRO = "/usr/local/share/alienblaster/images/font-20white.bmp";
621 const std::string FN_FONT_INTRO_HIGHLIGHTED = "/usr/local/share/alienblaster/images/font-20lightblue.bmp";
622 const std::string FN_FONT_NUMBERS_TIME = "/usr/local/share/alienblaster/images/font-20red.bmp";
623 const std::string FN_FONT_NUMBERS_LEFT = "/usr/local/share/alienblaster/images/font-20red.bmp";
624 const std::string FN_FONT_NUMBERS_RIGHT = "/usr/local/share/alienblaster/images/font-20blue.bmp";
625 const std::string FN_FONT_SETTINGS = "/usr/local/share/alienblaster/images/font-20white.bmp";
626 const std::string FN_FONT_SETTINGS_HIGHLIGHTED = "/usr/local/share/alienblaster/images/font-20lightblue.bmp";
627 const std::string FN_FONT_SETTINGS_SMALL = "/usr/local/share/alienblaster/images/font-14white.bmp";
628 const std::string FN_FONT_SETTINGS_SMALL_BLUE = "/usr/local/share/alienblaster/images/font-14lightblue.bmp";
629 const std::string FN_FONT_SETTINGS_SMALL_HIGHLIGHTED = "/usr/local/share/alienblaster/images/font-14red.bmp";
630 
631 const std::string FN_SETTINGS_BLUE = "/usr/local/share/alienblaster/images/bluePlain.bmp";
632 const std::string FN_SETTINGS_WHITE = "/usr/local/share/alienblaster/images/whitePlain.bmp";
633 
634 const std::string FN_EXPLOSION_NORMAL = "/usr/local/share/alienblaster/images/explosion.bmp";
635 const std::string FN_EXPLOSION_ENEMY = "/usr/local/share/alienblaster/images/explosionEnemy.bmp";
636 
637 const std::string FN_LOADING = "/usr/local/share/alienblaster/images/loading.bmp";
638 
639 const std::string FN_SETTINGS = "/usr/local/share/alienblaster/cfg/alienBlaster.cfg";
640 
641 const std::string FN_DIFFICULTY_CONFIG = "/usr/local/share/alienblaster/cfg/alienBlasterDifficulty";
642 const std::string FN_DIFFICULTY_CONFIG_SUFFIX = ".cfg";
643 
644 const std::string FN_HIGHSCORE = "/usr/local/share/alienblaster/cfg/highscore.dat";
645 
646 enum MusicTracks { MUSIC_INTRO=0, MUSIC_PLAYON, MUSIC_BOSS1, MUSIC_NONE };
647 const int NR_MUSIC_TRACKS = 3;
648 const std::string FN_MUSIC[] = { "/usr/local/share/alienblaster/sound/intro.wav",
649 				 "/usr/local/share/alienblaster/sound/playon.wav",
650 				 "/usr/local/share/alienblaster/sound/intro.wav" };
651 
652 const std::string FN_LEVEL_ONE_PLAYER = "/usr/local/share/alienblaster/cfg/level1.cfg";
653 const std::string FN_LEVEL_TWO_PLAYER = "/usr/local/share/alienblaster/cfg/level2.cfg";
654 const std::string FN_LEVEL_ARCADEMODE = "/usr/local/share/alienblaster/cfg/levelArcade.cfg";
655 
656 const std::string FN_SCREENSHOT0 =  "/usr/local/share/alienblaster/intro/HellShot0.bmp";
657 const std::string FN_SCREENSHOT1 =  "/usr/local/share/alienblaster/intro/HellShot1.bmp";
658 const std::string FN_SCREENSHOT2 =  "/usr/local/share/alienblaster/intro/HellShot2.bmp";
659 const std::string FN_SCREENSHOT3 =  "/usr/local/share/alienblaster/intro/HellShot3.bmp";
660 const std::string FN_SCREENSHOT4 =  "/usr/local/share/alienblaster/intro/HellShot5.bmp";
661 const std::string FN_SCREENSHOT5 =  "/usr/local/share/alienblaster/intro/HellShot4.bmp";
662 const std::string FN_SCREENSHOT6 =  "/usr/local/share/alienblaster/intro/HellShot6.bmp";
663 const std::string FN_SCREENSHOT7 =  "/usr/local/share/alienblaster/intro/HellShot7.bmp";
664 const std::string FN_SCREENSHOT8 =  "/usr/local/share/alienblaster/intro/HellShot8.bmp";
665 const std::string FN_SCREENSHOT9 =  "/usr/local/share/alienblaster/intro/HellShot9.bmp";
666 
667 const std::string LVL_BACKG_TILE_CNT = "BACKG_TILES";
668 const std::string LVL_BACKG_TILE     = "BACKG_TILE";
669 const std::string LVL_BACKG_LENGTH   = "BACKG_LENGTH";
670 
671 const std::string LVL_ENEMY_FIGHTER  = "ENEMY_FIGHTER";
672 const std::string LVL_ENEMY_BOMBER   = "ENEMY_BOMBER";
673 const std::string LVL_ENEMY_TANK     = "ENEMY_TANK";
674 const std::string LVL_ENEMY_BOSS_BACKGROUND = "ENEMY_BOSS_BACKGROUND";
675 const std::string LVL_ENEMY_BOSS_DESTROYED  = "ENEMY_BOSS_DESTROYED";
676 
677 const std::string LVL_WRECK_FIGHTER  = "WRECK_FIGHTER";
678 const std::string LVL_WRECK_BOMBER   = "WRECK_BOMBER";
679 const std::string LVL_WRECK_TANK     = "WRECK_TANK";
680 const std::string LVL_WRECK_BOSS_BACKGROUND = "WRECK_BOSS_BACKGROUND";
681 const std::string LVL_WRECK_BOSS_DESTROYED  = "WRECK_BOSS_DESTROYED";
682 
683 const std::string LVL_ENEMY_BOSS_1_SHOT_BATTERY_RIGHT = "ENEMY_BOSS_1_SHOT_BATTERY_RIGHT";
684 const std::string LVL_ENEMY_BOSS_1_SHOT_BATTERY_LEFT  = "ENEMY_BOSS_1_SHOT_BATTERY_LEFT";
685 const std::string LVL_ENEMY_BOSS_1_ROCKET_LAUNCHER    = "ENEMY_BOSS_1_ROCKET_LAUNCHER";
686 const std::string LVL_ENEMY_BOSS_1_MAIN_GUN           = "ENEMY_BOSS_1_MAIN_GUN";
687 
688 const std::string LVL_ENEMY_FIGHTER_SHADOW            = "ENEMY_FIGHTER_SHADOW";
689 const std::string LVL_ENEMY_BOMBER_SHADOW             = "ENEMY_BOMBER_SHADOW";
690 
691 #endif
692