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 #include "global.h"
21 #include "options.h"
22 #include "asstring.h"
23 #include <iostream>
24 #include "SDL.h"
25 #include "surfaceDB.h"
26 
27 using namespace std;
28 
29 int GAME_LENGTH = 300000; // ms
30 int ITEM_LIFETIME = 20000; // ms
31 int ITEM_APPEAR_DELAY = 10000; // ms
32 int ITEM_APPEAR_RAND_DELAY = 20000; // ms
33 int ITEM_HEALTH_REPAIR_AMOUNT = 100;
34 
35 int ITEM_HEATSEEKER_AMMO = 70;
36 int ITEM_NUKE_AMMO = 2;
37 int ITEM_DEFLECTOR_AMMO = 1;
38 int ITEM_DEFLECTOR_ACTIVATION_DIST = 200;
39 int ITEM_DEFLECTOR_POWER = 100;
40 int ITEM_DEFLECTOR_DURATION = 15000;
41 
42 int ITEM_APPEAR_CHANCES[] = { 50, 20, 30, 30, 30, 50, 20, 20, 30, 20, 20 };
43 
44 int GENERATE_ENEMY_DELAY = 100;
45 int GENERATE_ENEMY_RAND_DELAY = 2000;
46 
47 int LIGHT_FIGHTER_MAX_SHIELD = 200;
48 int HEAVY_FIGHTER_MAX_SHIELD = 500;
49 int LIGHT_FIGHTER_MAX_DAMAGE = 200;
50 int HEAVY_FIGHTER_MAX_DAMAGE = 500;
51 
52 int LIGHT_FIGHTER_SHIELD_RECHARGE = 80;
53 int HEAVY_FIGHTER_SHIELD_RECHARGE = 110;
54 
55 int RACER_DEFLECTOR_ACTIVATION_DIST = 150;
56 int RACER_DEFLECTOR_POWER = 50;
57 int RACER_SONIC_ACTIVATION_DIST = 200;
58 int RACER_SONIC_POWER = 50;
59 
60 int ENEMY_HITPOINTS[] = { 80, 120, 150, 2000, 1500, 1000, 1000, 3000 };
61 int ENEMY_COLLISION_DAMAGE[] = {20, 40, 0, 0, 0, 0, 0, 2000};
62 int ENEMY_DIES_ITEM_APPEAR_CHANCE[] = {15, 12, 8, 0, 0, 0, 0, 1};
63 int ENEMY_APPEAR_CHANCES[] = {40, 40, 10, 0, 0, 0, 0, 0};
64 int ENEMY_COOLDOWN_PRIMARY[] = {400, 400, 400, 50, 500, 100, 100, 300};
65 int ENEMY_COOLDOWN_SECONDARY[] = {0, 0, 2000, 0, 0, 0, 0, 600};
66 int ENEMY_RAND_WAIT_PRIMARY[] = {1500, 1000, 300, 80, 1000, 200, 200, 2000};
67 int ENEMY_RAND_WAIT_SECONDARY[] = {0, 0, 10000, 0, 0, 0, 0, 400};
68 
69 int GENERATE_FORMATION_DELAY = 5000;
70 int GENERATE_FORMATION_RAND_DELAY = 20000;
71 
72 int FORMATION_MAX_NR_ENEMYS[] = {7,7,7,6};
73 int FORMATION_SP_CHANCES[] = { 10, 10, 5, 5, 20, 10, 5, 20, 10, 20, 10 };
74 int FORMATION_SP_PRIMARY_DELAY[] = {0, 80, 120, 160,
75 				    500, 800, 1100,
76 				    150, 250, 150, 250};
77 int FORMATION_SP_PRIMARY_RAND_DELAY[] = { 0, 80, 120, 160,
78 					  1000, 1500, 2000,
79 					  0, 0, 0, 0 };
80 
81 
82 
83 
parseGlobalConfigValues(int difficultyLevel)84 void parseGlobalConfigValues( int difficultyLevel ) {
85 
86   Options *op = 0;
87   op = new Options( FN_DIFFICULTY_CONFIG +
88 		    asString(difficultyLevel) +
89 		    FN_DIFFICULTY_CONFIG_SUFFIX );
90 
91   op->getInt( "GAME_LENGTH", GAME_LENGTH );
92 
93   op->getInt( "ITEM_LIFETIME", ITEM_LIFETIME );
94   op->getInt( "ITEM_APPEAR_DELAY", ITEM_APPEAR_DELAY );
95   op->getInt( "ITEM_APPEAR_RAND_DELAY", ITEM_APPEAR_RAND_DELAY );
96 
97   op->getInt( "ITEM_HEALTH_REPAIR_AMOUNT", ITEM_HEALTH_REPAIR_AMOUNT );
98 
99   op->getInt( "ITEM_HEATSEEKER_AMMO", ITEM_HEATSEEKER_AMMO );
100   op->getInt( "ITEM_NUKE_AMMO", ITEM_NUKE_AMMO );
101   op->getInt( "ITEM_DEFLECTOR_AMMO", ITEM_DEFLECTOR_AMMO );
102   op->getInt( "ITEM_DEFLECTOR_DURATION", ITEM_DEFLECTOR_DURATION );
103   op->getInt( "ITEM_DEFLECTOR_ACTIVATION_DIST", ITEM_DEFLECTOR_ACTIVATION_DIST );
104   op->getInt( "ITEM_DEFLECTOR_POWER", ITEM_DEFLECTOR_POWER );
105 
106   op->getInt( "GENERATE_ENEMY_DELAY", GENERATE_ENEMY_DELAY );
107   op->getInt( "GENERATE_ENEMY_RAND_DELAY", GENERATE_ENEMY_RAND_DELAY );
108 
109   op->getInt( "LIGHT_FIGHTER_MAX_SHIELD", LIGHT_FIGHTER_MAX_SHIELD );
110   op->getInt( "HEAVY_FIGHTER_MAX_SHIELD", HEAVY_FIGHTER_MAX_SHIELD );
111   op->getInt( "LIGHT_FIGHTER_MAX_DAMAGE", LIGHT_FIGHTER_MAX_DAMAGE );
112   op->getInt( "HEAVY_FIGHTER_MAX_DAMAGE", HEAVY_FIGHTER_MAX_DAMAGE );
113   op->getInt( "LIGHT_FIGHTER_SHIELD_RECHARGE", LIGHT_FIGHTER_SHIELD_RECHARGE );
114   op->getInt( "HEAVY_FIGHTER_SHIELD_RECHARGE", HEAVY_FIGHTER_SHIELD_RECHARGE );
115 
116   op->getInt( "HEAVY_FIGHTER_DEFLECTOR_ACTIVATION_DIST",
117 	      RACER_DEFLECTOR_ACTIVATION_DIST );
118   op->getInt( "HEAVY_FIGHTER_DEFLECTOR_POWER",
119 	      RACER_DEFLECTOR_POWER );
120 
121   op->getInt( "FIGHTER_HITPOINTS", ENEMY_HITPOINTS[ FIGHTER ] );
122   op->getInt( "BOMBER_HITPOINTS", ENEMY_HITPOINTS[ BOMBER ] );
123   op->getInt( "TURRET_HITPOINTS", ENEMY_HITPOINTS[ TANK ] );
124   op->getInt( "BOSS1_MAIN_GUN_HITPOINTS", ENEMY_HITPOINTS[ BOSS_1_MAIN_GUN ] );
125   op->getInt( "BOSS1_ROCKET_LAUNCHER_HITPOINTS", ENEMY_HITPOINTS[ BOSS_1_ROCKET_LAUNCHER ] );
126   op->getInt( "BOSS1_SHOT_BATTERY_LEFT_HITPOINTS",
127 	      ENEMY_HITPOINTS[ BOSS_1_SHOT_BATTERY_LEFT ] );
128   op->getInt( "BOSS1_SHOT_BATTERY_RIGHT_HITPOINTS",
129 	      ENEMY_HITPOINTS[ BOSS_1_SHOT_BATTERY_RIGHT ] );
130 
131   op->getInt( "COLLISION_DAMAGE_FIGHTER", ENEMY_COLLISION_DAMAGE[ FIGHTER ] );
132   op->getInt( "COLLISION_DAMAGE_BOMBER", ENEMY_COLLISION_DAMAGE[ BOMBER ] );
133   op->getInt( "ENEMY_DIES_ITEM_APPEAR_CHANCE_FIGHTER",
134 	      ENEMY_DIES_ITEM_APPEAR_CHANCE[ FIGHTER ] );
135   op->getInt( "ENEMY_DIES_ITEM_APPEAR_CHANCE_BOMBER",
136 	      ENEMY_DIES_ITEM_APPEAR_CHANCE[ BOMBER ] );
137   op->getInt( "ENEMY_DIES_ITEM_APPEAR_CHANCE_TURRET",
138 	      ENEMY_DIES_ITEM_APPEAR_CHANCE[ TANK ] );
139 
140   op->getInt( "ENEMY_APPEAR_CHANCE_FIGHTER",
141 	      ENEMY_APPEAR_CHANCES[ FIGHTER ] );
142   op->getInt( "ENEMY_APPEAR_CHANCE_BOMBER",
143 	      ENEMY_APPEAR_CHANCES[ BOMBER ] );
144   op->getInt( "ENEMY_APPEAR_CHANCE_TURRET",
145 	      ENEMY_APPEAR_CHANCES[ TANK ] );
146 
147   op->getInt( "ENEMY_COOLDOWN_FIGHTER",
148 	      ENEMY_COOLDOWN_PRIMARY[ FIGHTER ] );
149   op->getInt( "ENEMY_COOLDOWN_BOMBER",
150 	      ENEMY_COOLDOWN_PRIMARY[ BOMBER ] );
151   op->getInt( "ENEMY_COOLDOWN_TURRET",
152 	      ENEMY_COOLDOWN_PRIMARY[ TANK ] );
153   op->getInt( "ENEMY_COOLDOWN_BOSS1_MAIN_GUN",
154 	      ENEMY_COOLDOWN_PRIMARY[ BOSS_1_MAIN_GUN ] );
155   op->getInt( "ENEMY_COOLDOWN_BOSS1_ROCKET_LAUNCHER",
156 	      ENEMY_COOLDOWN_PRIMARY[ BOSS_1_ROCKET_LAUNCHER] );
157   op->getInt( "ENEMY_COOLDOWN_BOSS1_SHOT_BATTERY_LEFT",
158 	      ENEMY_COOLDOWN_PRIMARY[ BOSS_1_SHOT_BATTERY_LEFT] );
159   op->getInt( "ENEMY_COOLDOWN_BOSS1_SHOT_BATTERY_RIGHT",
160 	      ENEMY_COOLDOWN_PRIMARY[ BOSS_1_SHOT_BATTERY_RIGHT ] );
161 
162   op->getInt( "ENEMY_COOLDOWN_SECONDARY_TURRET", ENEMY_COOLDOWN_SECONDARY[ TANK ] );
163 
164   op->getInt( "ENEMY_RAND_WAIT_FIGHTER",
165 	      ENEMY_RAND_WAIT_PRIMARY[ FIGHTER ] );
166   op->getInt( "ENEMY_RAND_WAIT_BOMBER",
167 	      ENEMY_RAND_WAIT_PRIMARY[ BOMBER ] );
168   op->getInt( "ENEMY_RAND_WAIT_TURRET",
169 	      ENEMY_RAND_WAIT_PRIMARY[ TANK ] );
170   op->getInt( "ENEMY_RAND_WAIT_BOSS1_MAIN_GUN",
171 	      ENEMY_RAND_WAIT_PRIMARY[ BOSS_1_MAIN_GUN ] );
172   op->getInt( "ENEMY_RAND_WAIT_BOSS1_ROCKET_LAUNCHER",
173 	      ENEMY_RAND_WAIT_PRIMARY[ BOSS_1_ROCKET_LAUNCHER ] );
174   op->getInt( "ENEMY_RAND_WAIT_BOSS1_SHOT_BATTERY_LEFT",
175 	      ENEMY_RAND_WAIT_PRIMARY[ BOSS_1_SHOT_BATTERY_LEFT ] );
176   op->getInt( "ENEMY_RAND_WAIT_BOSS1_SHOT_BATTERY_RIGHT",
177 	      ENEMY_RAND_WAIT_PRIMARY[ BOSS_1_SHOT_BATTERY_RIGHT ] );
178 
179   op->getInt( "ENEMY_RAND_WAIT_SECONDARY_TURRET",
180 	      ENEMY_RAND_WAIT_SECONDARY[ TANK ] );
181 
182   op->getInt( "ITEM_APPEAR_CHANCE_PRIMARY_UPGRADE",
183 	      ITEM_APPEAR_CHANCES[ ITEM_PRIMARY_UPGRADE ] );
184   op->getInt( "ITEM_APPEAR_CHANCE_DUMBRIFE_DOUBLE",
185 	      ITEM_APPEAR_CHANCES[ ITEM_DUMBFIRE_DOUBLE ] );
186   op->getInt( "ITEM_APPEAR_CHANCE_KICK_ASS_ROCKET",
187 	      ITEM_APPEAR_CHANCES[ ITEM_KICK_ASS_ROCKET ] );
188   op->getInt( "ITEM_APPEAR_CHANCE_HELLFIRE",
189 	      ITEM_APPEAR_CHANCES[ ITEM_HELLFIRE ] );
190   op->getInt( "ITEM_APPEAR_CHANCE_MACHINE_GUN",
191 	      ITEM_APPEAR_CHANCES[ ITEM_MACHINE_GUN ] );
192   op->getInt( "ITEM_APPEAR_CHANCE_HEALTH",
193 	      ITEM_APPEAR_CHANCES[ ITEM_HEALTH ] );
194   op->getInt( "ITEM_APPEAR_CHANCE_HEATSEEKER",
195 	      ITEM_APPEAR_CHANCES[ ITEM_HEATSEEKER ] );
196   op->getInt( "ITEM_APPEAR_CHANCE_NUKE",
197 	      ITEM_APPEAR_CHANCES[ ITEM_NUKE ] );
198   op->getInt( "ITEM_APPEAR_CHANCE_DEFLECTOR",
199 	      ITEM_APPEAR_CHANCES[ ITEM_DEFLECTOR ] );
200   op->getInt( "ITEM_APPEAR_CHANCE_ENERGY_BEAM",
201 	      ITEM_APPEAR_CHANCES[ ITEM_ENERGY_BEAM ] );
202   op->getInt( "ITEM_APPEAR_CHANCE_LASER",
203 	      ITEM_APPEAR_CHANCES[ ITEM_LASER ] );
204 
205   op->getInt( "GENERATE_FORMATION_DELAY", GENERATE_FORMATION_DELAY );
206   op->getInt( "GENERATE_FORMATION_RAND_DELAY", GENERATE_FORMATION_RAND_DELAY );
207 
208   op->getInt( "FORMATION_MAX_NR_ENEMYS_V",
209 	      FORMATION_MAX_NR_ENEMYS[ FORMATION_V ] );
210   op->getInt( "FORMATION_MAX_NR_ENEMYS_REVERSE_V",
211 	      FORMATION_MAX_NR_ENEMYS[ FORMATION_REVERSE_V ] );
212   op->getInt( "FORMATION_MAX_NR_ENEMYS_BLOCK",
213 	      FORMATION_MAX_NR_ENEMYS[ FORMATION_BLOCK ] );
214   op->getInt( "FORMATION_MAX_NR_ENEMYS_LINE",
215 	      FORMATION_MAX_NR_ENEMYS[ FORMATION_LINE ] );
216   for ( int i = 0; i < NR_FORMATION_TYPES; i++ ) {
217     if ( FORMATION_MAX_NR_ENEMYS[ i ] > FORMATION_MAX_NR_ENEMYS_HARD_LIMIT[ i ] )
218       FORMATION_MAX_NR_ENEMYS[ i ] = FORMATION_MAX_NR_ENEMYS_HARD_LIMIT[ i ];
219   }
220 
221   op->getInt( "FORMATION_SP_CHANCE_NONE",
222 	      FORMATION_SP_CHANCES[ FORMATION_SP_NONE ] );
223   op->getInt( "FORMATION_SP_CHANCE_RAND_FAST",
224 	      FORMATION_SP_CHANCES[ FORMATION_SP_RAND_FAST ] );
225   op->getInt( "FORMATION_SP_CHANCE_RAND_MEDIUM",
226 	      FORMATION_SP_CHANCES[ FORMATION_SP_RAND_MEDIUM ] );
227   op->getInt( "FORMATION_SP_CHANCE_RAND_SLOW",
228 	      FORMATION_SP_CHANCES[ FORMATION_SP_RAND_SLOW ] );
229   op->getInt( "FORMATION_SP_CHANCE_VOLLEY_FAST",
230 	      FORMATION_SP_CHANCES[ FORMATION_SP_VOLLEY_FAST ] );
231   op->getInt( "FORMATION_SP_CHANCE_VOLLEY_MEDIUM",
232 	      FORMATION_SP_CHANCES[ FORMATION_SP_VOLLEY_MEDIUM ] );
233   op->getInt( "FORMATION_SP_CHANCE_VOLLEY_SLOW",
234 	      FORMATION_SP_CHANCES[ FORMATION_SP_VOLLEY_SLOW ] );
235   op->getInt( "FORMATION_SP_CHANCE_LEFT_RIGHT_FAST",
236 	      FORMATION_SP_CHANCES[ FORMATION_SP_LEFT_RIGHT_FAST ] );
237   op->getInt( "FORMATION_SP_CHANCE_LEFT_RIGHT_MEDIUM",
238 	      FORMATION_SP_CHANCES[ FORMATION_SP_LEFT_RIGHT_MEDIUM ] );
239   op->getInt( "FORMATION_SP_CHANCE_RIGHT_LEFT_FAST",
240 	      FORMATION_SP_CHANCES[ FORMATION_SP_RIGHT_LEFT_FAST ] );
241   op->getInt( "FORMATION_SP_CHANCE_RIGHT_LEFT_MEDIUM",
242 	      FORMATION_SP_CHANCES[ FORMATION_SP_RIGHT_LEFT_MEDIUM ] );
243 
244   op->getInt( "FORMATION_SP_PRIM_DELAY_RAND_FAST",
245 	      FORMATION_SP_PRIMARY_DELAY[ FORMATION_SP_RAND_FAST ] );
246   op->getInt( "FORMATION_SP_PRIM_DELAY_RAND_MEDIUM",
247 	      FORMATION_SP_PRIMARY_DELAY[ FORMATION_SP_RAND_MEDIUM ] );
248   op->getInt( "FORMATION_SP_PRIM_DELAY_RAND_SLOW",
249 	      FORMATION_SP_PRIMARY_DELAY[ FORMATION_SP_RAND_SLOW ] );
250   op->getInt( "FORMATION_SP_PRIM_DELAY_VOLLEY_FAST",
251 	      FORMATION_SP_PRIMARY_DELAY[ FORMATION_SP_VOLLEY_FAST ] );
252   op->getInt( "FORMATION_SP_PRIM_DELAY_VOLLEY_MEDIUM",
253 	      FORMATION_SP_PRIMARY_DELAY[ FORMATION_SP_VOLLEY_MEDIUM ] );
254   op->getInt( "FORMATION_SP_PRIM_DELAY_VOLLEY_SLOW",
255 	      FORMATION_SP_PRIMARY_DELAY[ FORMATION_SP_VOLLEY_SLOW ] );
256   op->getInt( "FORMATION_SP_PRIM_DELAY_LEFT_RIGHT_FAST",
257 	      FORMATION_SP_PRIMARY_DELAY[ FORMATION_SP_LEFT_RIGHT_FAST ] );
258   op->getInt( "FORMATION_SP_PRIM_DELAY_LEFT_RIGHT_MEDIUM",
259 	      FORMATION_SP_PRIMARY_DELAY[ FORMATION_SP_LEFT_RIGHT_MEDIUM ] );
260   op->getInt( "FORMATION_SP_PRIM_DELAY_RIGHT_LEFT_FAST",
261 	      FORMATION_SP_PRIMARY_DELAY[ FORMATION_SP_RIGHT_LEFT_FAST ] );
262   op->getInt( "FORMATION_SP_PRIM_DELAY_RIGHT_LEFT_MEDIUM",
263 	      FORMATION_SP_PRIMARY_DELAY[ FORMATION_SP_RIGHT_LEFT_MEDIUM ] );
264 
265   op->getInt( "FORMATION_SP_PRIM_RAND_DELAY_RAND_FAST",
266 	      FORMATION_SP_PRIMARY_RAND_DELAY[ FORMATION_SP_RAND_FAST ] );
267   op->getInt( "FORMATION_SP_PRIM_RAND_DELAY_RAND_MEDIUM",
268 	      FORMATION_SP_PRIMARY_RAND_DELAY[ FORMATION_SP_RAND_MEDIUM ] );
269   op->getInt( "FORMATION_SP_PRIM_RAND_DELAY_RAND_SLOW",
270 	      FORMATION_SP_PRIMARY_RAND_DELAY[ FORMATION_SP_RAND_SLOW ] );
271   op->getInt( "FORMATION_SP_PRIM_RAND_DELAY_VOLLEY_FAST",
272 	      FORMATION_SP_PRIMARY_RAND_DELAY[ FORMATION_SP_VOLLEY_FAST ] );
273   op->getInt( "FORMATION_SP_PRIM_RAND_DELAY_VOLLEY_MEDIUM",
274 	      FORMATION_SP_PRIMARY_RAND_DELAY[ FORMATION_SP_VOLLEY_MEDIUM ] );
275   op->getInt( "FORMATION_SP_PRIM_RAND_DELAY_VOLLEY_SLOW",
276 	      FORMATION_SP_PRIMARY_RAND_DELAY[ FORMATION_SP_VOLLEY_SLOW ] );
277   op->getInt( "FORMATION_SP_PRIM_RAND_DELAY_LEFT_RIGHT_FAST",
278 	      FORMATION_SP_PRIMARY_RAND_DELAY[ FORMATION_SP_LEFT_RIGHT_FAST ] );
279   op->getInt( "FORMATION_SP_PRIM_RAND_DELAY_LEFT_RIGHT_MEDIUM",
280 	      FORMATION_SP_PRIMARY_RAND_DELAY[ FORMATION_SP_LEFT_RIGHT_MEDIUM ] );
281   op->getInt( "FORMATION_SP_PRIM_RAND_DELAY_RIGHT_LEFT_FAST",
282 	      FORMATION_SP_PRIMARY_RAND_DELAY[ FORMATION_SP_RIGHT_LEFT_FAST ] );
283   op->getInt( "FORMATION_SP_PRIM_RAND_DELAY_RIGHT_LEFT_MEDIUM",
284 	      FORMATION_SP_PRIMARY_RAND_DELAY[ FORMATION_SP_RIGHT_LEFT_MEDIUM ] );
285 
286   delete op;
287 }
288 
289 /////////////////////
290 
getRandValue(const int * choicesWeights,int nrChoices,int sumWeights)291 int getRandValue( const int *choicesWeights, int nrChoices, int sumWeights ) {
292   int sum = 0;
293   if ( sumWeights != 0 ) sum = sumWeights;
294   else for ( int i = 0; i < nrChoices; i++ ) sum += choicesWeights[ i ];
295 
296   if ( sum == 0 ) {
297     cout << "Error in getRandValue: sum==0!" << endl;
298     exit(1);
299   }
300 
301   int val = rand() % sum;
302 
303   int idx = 0;
304   int tmpSum = 0;
305   while ( idx < nrChoices ) {
306     tmpSum += choicesWeights[ idx ];
307     if ( val < tmpSum ) {
308       return idx;
309     }
310     idx++;
311   }
312   cout << "Error in getRandValue: val: " << val << endl;
313   exit(1);
314 }
315 
316 
317 /////////////////////////////
318 
initAllSurfaces()319 void initAllSurfaces() {
320   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/fighter.bmp" );
321   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/fighterShadow.bmp", true);
322   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/bomber.bmp");
323   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/bomberShadow.bmp", true);
324   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/tank.bmp");
325   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/boss1MainGun.bmp");
326   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/boss1RocketLauncher.bmp");
327   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/boss1ShotBatteryLeft.bmp");
328   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/boss1ShotBatteryRight.bmp");
329   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/wreckFighter.bmp");
330   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/wreckBomber.bmp");
331   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/wreckTank.bmp");
332   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/wreckBoss1.bmp");
333   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/wreckBossBackground.bmp");
334   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/boss.bmp");
335   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/normalShot.bmp");
336   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/heavyShot.bmp");
337   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/normalShotHF.bmp");
338   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/dumbfire.bmp");
339   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/kickAssRocket.bmp");
340   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/kickAssRocketShadow.bmp", true);
341   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/hellfire.bmp");
342   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/hellfireShadow.bmp", true);
343   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/machineGun.bmp");
344   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/energyBeam.bmp", true);
345   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/laser.bmp");
346   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/enemyShotNormal.bmp");
347   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/tankRocket.bmp");
348   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/tankRocketShadow.bmp", true);
349   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/heatseeker.bmp");
350   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/shotNuke.bmp");
351   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/shotNukeShadow.bmp", true);
352   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/nukeEffect.bmp");
353   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/sonic.bmp");
354   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/itemPrimaryUpgrade.bmp");
355   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/itemDumbfireDouble.bmp");
356   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/itemKickAssRocket.bmp");
357   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/itemHellfire.bmp");
358   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/itemMachineGun.bmp");
359   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/itemHealth.bmp");
360   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/itemHeatseeker.bmp");
361   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/itemNuke.bmp");
362   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/itemDeflector.bmp");
363   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/itemEnergyBeam.bmp");
364   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/itemLaser.bmp");
365   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/background.bmp");
366   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/lightFighterShieldDamaged.bmp");
367   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/heavyFighterShieldDamaged.bmp");
368   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/heavyFighterDeflector.bmp", true);
369   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/font-20red.bmp");
370   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/font-20blue.bmp");
371   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/explosion.bmp");
372   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/explosionEnemy.bmp");
373   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/bannerExcellent.bmp", true);
374   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/bannerYouRule.bmp", true);
375   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/bannerHeiho.bmp", true);
376   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/bannerHealth.bmp", true);
377   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/bannerEnemysKilled.bmp", true);
378   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/bannerBonus100.bmp", true);
379   surfaceDB.loadSurface("/usr/local/share/alienblaster/images/bannerBonus200.bmp", true);
380 }
381