1 /*
2     (C) Copyright 2007,2008, Stephen M. Cameron.
3 
4     This file is part of wordwarvi.
5 
6     wordwarvi 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 of the License, or
9     (at your option) any later version.
10 
11     wordwarvi 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 wordwarvi; if not, write to the Free Software
18     Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
19 
20  */
21 #ifndef __LEVELS_H__
22 #define __LEVELS_H__
23 
24 /*
25  *
26  * This file controls how the levels look, to some degree.  If you want
27  * to make your own custom levels, this is the file to modify.
28  *
29  * How to make a new level.
30  *
31  * 1.  Copy an existing level.
32  *     a. Look for the comment below that says "level 1 starts here:"
33  *        and another comment that says "level 1 ends here. ^^^".
34  *        Copy the text between those comments to just above the
35  *        line which says:
36  *
37  *        INSERT NEW LEVELS ABOVE THIS LINE ^^^^
38  *
39  * 2.  Modify the new level:
40  *     a.  Change the name of the level.
41  *         There are two structures which make up a level, the
42  *         level_obj_descriptor_entry array, and the
43  *         level_descriptor_entry.  You must change the name of
44  *         both of them to something not yet used:
45  *
46  *         Change "level_1_obj" to something else, "my_level_objects"
47  *         or maybe some descriptive term, like maybe your level has a
48  *         lot of rockets and nothing else, so maybe you call it
49  *         "rocket_level".  Likewise, change "level1" to a new name
50  *         which you make up.
51  *
52  *     b.  Customize the objects:
53  *         The level_obj_descriptor_entry array contains a list of objects
54  *         which get added to the game.  Each row in the table contains
55  *         4 items, as follows:
56  *
57  * 	   1. Object type,
58  * 	   2. How many objects of this type this row adds.
59  * 	   3. X position in the game.
60  * 	   4. how much space to put between each object.
61  *
62  * 	   The value for Object type must be one of these:
63  *
64 		OBJ_TYPE_AIRSHIP
65 		OBJ_TYPE_BALLOON
66 		OBJ_TYPE_CRON
67 		OBJ_TYPE_FUEL
68 		OBJ_TYPE_SHIP
69 		OBJ_TYPE_GUN
70 		OBJ_TYPE_ROCKET
71 		OBJ_TYPE_SAM_STATION
72 		OBJ_TYPE_GDB
73 		OBJ_TYPE_OCTOPUS
74 		OBJ_TYPE_TENTACLE
75 		OBJ_TYPE_JAMMER
76 		OBJ_TYPE_WORM
77 		OBJ_TYPE_KGU
78 		OBJ_TYPE_JET
79 
80 		See below for a description of what each one is.
81 
82 	   How many objects is pretty self explanatory.
83 
84 
85 	   X position is expressed as a percentage of the width
86            of the game world.  A value of 50 would put the first
87            item smack in the center of the game world.  The special
88 	   value "DO_IT_RANDOMLY" makes the game choose a random
89            location.
90 
91 	   The offset controls how far apart multiple objects are
92            spaced.  If the X value is DO_IT_RANDOMLY, then this
93            spacing value is not used (but you must specify a value
94            anyway, 0, in that case is good.
95 
96 	   Some examples:
97 
98            { OBJ_TYPE_JET, 	15, DO_IT_RANDOMLY, 0 },
99            This says add 15 jets, randomly sprinkled around on the terrain.
100 
101            { OBJ_TYPE_JET, 	1, 30, 0 },
102            { OBJ_TYPE_JET, 	1, 50, 0 },
103            { OBJ_TYPE_JET, 	1, 80, 0 },
104 
105 	   The above adds 3 jets, one at 30% across the game's terrain,
106 	   one at 50%, and one at 80%.
107 
108            { OBJ_TYPE_JET, 	5, 20, 10 },
109 
110 	   The above adds 5 jets, beginning at 20% across the terrain,
111 	   and evenly spaced at 10 unit intervals.
112 
113  *     c.  Customize the level_descriptor_entry values.
114 
115 	   Each level can be further customized by specifying:
116 
117 	   small scale roughness,
118            large scale roughness,
119 	   laser_fire_chance,
120 	   number of bridges
121            number of bombs
122            number of gravity bombs.
123 
124 	   Find the lines below near the bottom of this file
125            which begin "NEW_LEVEL(....)" and have a comment that
126            says, "--- level descriptors begin here ---"
127 
128 	   The NEW_LEVEL macro constructs a level_descriptor_entry.
129 
130 	   The format is:
131 
132 	   NEW_LEVEL(levelvar, levelobjectlist, ssr, lsr, lfc, nbr, nbo, ngb, lspd, mkgh, levelname);
133 
134 	   levelvar is the name of the variable holding your level description. e.g., my_level.
135 
136            levelobjectlist is the name of the structure you made in step 2b,
137            above, e.g. "my_level_objects".
138 
139 	   ssr is "small scale roughness."  It controls how smooth or rough
140            the terrain is at a small scale.  It should be between 0 and 1.
141            Values closer to zero are smoother, values closer to 1 are rougher.
142            A value of 0.15 is pretty good.  Experiment to see what it does.
143 
144 	   lsr is "large scale roughness."  It controls how smooth or rough
145            the terrain is at a large scale.  It should be between 0 and 1.
146            Values closer to zero are smoother, values closer to 1 are rougher.
147            A value of 0.09 or so is pretty good.  Experiment to see what it does.
148 
149 	   lfc is "laser fire chance", and it controls how aggressive or tame
150 	   the laser guns in the game are.  A value of 20 is very aggressive.
151            smaller values are less aggressive, larger values more aggressive.
152 	   Experiment with it.
153 
154 	   nbr is the number of bridges to add to the terrain.  Actually it is
155 	   a maximum number, you may get less bridges.  If your terrain is too
156 	   smooth, there might not be enough places to add bridges.  This is mostly
157 	   a cosmetic thing.  A value of 5 or so is fine.
158 
159 	   nbo is the number of bombs the player starts the level with.  Normally
160 	   this is NBOMBS, which is 100.  If you want to make a very hard level,
161 	   you might set nbr to something small, or zero to take bombs out of
162 	   the game. (Some ground based things are hard to kill without bombs though,
163 	   so keep that in mind.
164 
165 	   ngb is the number of gravity bombs the player starts out with.  Normally,
166 	   this is 3, as they are kind of like the "smart bomb" in this game.  You
167 	   can set it to what you like for your level.
168 
169 	   lspd is the laser speed, either SLOW_LASER, or FAST_LASER.  This is an
170 	   integer factor which is multiplied into the velocity of the laserbolts
171 	   coming from the laser guns.
172 
173 	   mkgh is the maximum kernel gun (laser) health, or in other words the number
174 	   of laser hits it takes to kill.  Easy is 1, which means 1 shot will kill it.
175 	   3 or 4 makes tham significantly harder.  (Also they heal over time.)
176 
177 	   levelname is the name of your level, e.g: "My Level".  This string will
178 	   appear in the game at the beginning of the level.
179 
180 	   Example:
181 
182 	NEW_LEVEL(my_level, my_level_obj, 0.09, 0.04, 20, 5, 100, 3, "My Level");
183 
184 	This creates a new level named my_level ("My Level") using the objects specified in
185 	my_level_obj list (not shown), with small scale roughness of 0.09,
186 	large scale roughness of 0.04, laser fire chance of 20, up to 5
187 	bridges, the player has 100 bombs, and 3 gravity bombs.
188 
189 
190  * 3.   Add your level into the level list.
191  *
192  *      Go to the bottom of this file, and find the code that looks like:
193  *
194  *           struct level_descriptor_entry *leveld[] = {
195  *
196  *      near the comment that says:
197  *
198  *      "Add your new level name above this line, with an ampersand."
199  *
200  *      This is an array of levels.  Add your level which you defined
201  *      with the NEW_LEVEL() macro in step 2c, above, into the list,
202  *      preceded by an ampersand, and followed by a comma.
203  *
204  *      You would add a line into the array like:
205  *
206  *      &my_level,
207  *
208  *      The position in the array controls which level it is.  E.g.
209  *      if yours is first in the array, it will be level 1.  if it's
210  *      2nd, it will be level 2, etc.
211  *
212  * 4.   Testing your level:
213  *
214  *      To test your level, the easiest way is to make it level 1, put
215  *      it first in the array of levels, then of course, build the
216  *      game (type "make") and run it.  Once you have the level working
217  *      to your liking, you can then move it into the correct position
218  *      in the array.
219  *
220  *      That's basically it.
221  *
222  *
223  *
224  *  If you make any particularly cool levels, feel free to send them to
225  *  me at stephenmcameron@gmail.com.  Maybe I'll put them in
226  *  the game.
227  *
228  */
229 
230 
231 /* Object types, just arbitrary constants used to uniquely id object types */
232 
233 /***********************************************************/
234 /*
235  * VALID OBJECT TYPES DESCRIBED BELOW
236  *
237  */
238 /* The ones below are the ones which can be custom placed. */
239 #define OBJ_TYPE_AIRSHIP 'a'		/* Blimp */
240 #define OBJ_TYPE_BALLOON 'B'		/* Balloons... don't really do anything yet. */
241 #define OBJ_TYPE_CRON 'C'		/* The green things that pick up humans */
242 #define OBJ_TYPE_FUEL 'f'		/* Fuel tanks. */
243 #define OBJ_TYPE_SHIP 'w'		/* Bill Gates's state of the art warship. */
244 #define OBJ_TYPE_GUN 'g'		/* ground based laser gun */
245 #define OBJ_TYPE_ROCKET 'r'		/* ground based rockets */
246 #define OBJ_TYPE_BIG_ROCKET 'I'		/* ground based rockets */
247 #define OBJ_TYPE_SAM_STATION 'S'	/* ground based missile launching station */
248 #define OBJ_TYPE_GDB 'd'		/* GDB enemy */
249 #define OBJ_TYPE_OCTOPUS 'o'		/* a big ol' octopus */
250 #define OBJ_TYPE_TENTACLE 'j'		/* a big ol' tentacle */
251 #define OBJ_TYPE_JAMMER 'J'		/* A radar jamming station */
252 #define OBJ_TYPE_WORM 'W'		/* A worm */
253 #define OBJ_TYPE_KGUN 'k'		/* a "kernel gun", inverted laser gun suspended on a tower */
254 #define OBJ_TYPE_JET '-'		/* a jet plane that swoops by and shoots missiles */
255 #define OBJ_TYPE_GUNWHEEL 'O'		/* a big gun wheel */
256 /* The ones above are the ones which can be custom placed. */
257 /***********************************************************/
258 
259 
260 /* These cannot be custom placed, they are generally for more transient */
261 /* objects like laser beams, and bullets and what not. */
262 #define OBJ_TYPE_BOMB 'p'
263 #define OBJ_TYPE_BUILDING 'b'
264 #define OBJ_TYPE_CHAFF 'c'
265 #define OBJ_TYPE_HUMAN 'h'
266 #define OBJ_TYPE_LASER 'L'
267 #define OBJ_TYPE_MISSILE 'm'
268 #define OBJ_TYPE_HARPOON 'H'
269 #define OBJ_TYPE_SOCKET 'x'
270 #define OBJ_TYPE_SPARK 's'
271 #define OBJ_TYPE_PIXIE_DUST '.'
272 #define OBJ_TYPE_BRIDGE 'T'
273 #define OBJ_TYPE_SYMBOL 'z'
274 #define OBJ_TYPE_FLOATING_MESSAGE 'M'
275 #define OBJ_TYPE_BULLET '>'
276 #define OBJ_TYPE_PLAYER '1'
277 #define OBJ_TYPE_DEBRIS 'D'
278 #define OBJ_TYPE_VOLCANO 'v'
279 #define OBJ_TYPE_TRUSS 't'
280 #define OBJ_TYPE_JETPILOT 'e'
281 #define OBJ_TYPE_REINDEER 'R'
282 #define OBJ_TYPE_HOUSE '^'
283 #define OBJ_TYPE_PRESENT 'G'
284 #define OBJ_TYPE_SCENERY '9'
285 #define OBJ_TYPE_TESLA 'V'
286 
287 #define NHOUSES 10
288 
289 #define DO_IT_RANDOMLY (-1)
290 
291 /* Type definitions for level describing structures. */
292 struct level_obj_descriptor_entry {
293 	int obj_type;
294 	int nobjs;
295 	int x;
296 	int xoffset;
297 };
298 
299 struct level_descriptor_entry {
300 	struct level_obj_descriptor_entry *objdesc;
301 	int nobj_desc_entries;
302 	double small_scale_roughness;
303 	double large_scale_roughness;
304 	int laser_fire_chance;
305 	int nbridges;
306 	int nbombs;
307 	int ngbombs;
308 	int jetpilot_firechance;
309 	int laser_velocity_factor;
310 	int max_kgun_health;
311 	char *level_name;
312 };
313 
314 
315 #define NEW_LEVEL(levelvar, theobjlist, ssr, lsr, lfc, nbr, nbo, ngb, jfc, lspd, mkgh, levelname) \
316 struct level_descriptor_entry levelvar = { \
317 	theobjlist, \
318 	sizeof(theobjlist) / sizeof(theobjlist[0]), \
319 	ssr, lsr, lfc, nbr, nbo, ngb, jfc, lspd, mkgh, levelname }
320 
321 /* Below, the game's levels are defined. */
322 
323 /***************************************************************************/
324 /* level 1 starts here: */
325 struct level_obj_descriptor_entry level_1_obj[] = {
326 	{ OBJ_TYPE_ROCKET, 	140, DO_IT_RANDOMLY, 0 },
327 	{ OBJ_TYPE_JET, 	0, DO_IT_RANDOMLY, 0 },
328 	{ OBJ_TYPE_FUEL, 	20, DO_IT_RANDOMLY, 0 },
329 	{ OBJ_TYPE_JAMMER, 	1, DO_IT_RANDOMLY, 0 },
330 	{ OBJ_TYPE_CRON, 	15, DO_IT_RANDOMLY, 0 },
331 	/* { OBJ_TYPE_SHIP, 	0, DO_IT_RANDOMLY, 0 },  */
332 	{ OBJ_TYPE_SAM_STATION, 3, DO_IT_RANDOMLY, 0 },
333 	{ OBJ_TYPE_GUN, 	10, DO_IT_RANDOMLY, 0 },
334 	{ OBJ_TYPE_KGUN, 	30, DO_IT_RANDOMLY, 0 },
335 	{ OBJ_TYPE_AIRSHIP, 	1, DO_IT_RANDOMLY, 0 },
336 	{ OBJ_TYPE_WORM, 	2, DO_IT_RANDOMLY, 0 },
337 	{ OBJ_TYPE_BALLOON, 	1, DO_IT_RANDOMLY, 0 },
338 	{ OBJ_TYPE_GDB, 	3, DO_IT_RANDOMLY, 0 },
339 	{ OBJ_TYPE_OCTOPUS,	1, DO_IT_RANDOMLY, 0 },
340 };
341 /* level 1 ends here. ^^^ */
342 /***************************************************************************/
343 
344 
345 
346 /* level 2 */
347 struct level_obj_descriptor_entry level_2_obj[] = {
348 	{ OBJ_TYPE_ROCKET,	25, DO_IT_RANDOMLY, 0 },
349 	{ OBJ_TYPE_JET,		15, DO_IT_RANDOMLY, 0 },
350 	{ OBJ_TYPE_FUEL, 	19, DO_IT_RANDOMLY, 0 },
351 	{ OBJ_TYPE_JAMMER,	1, DO_IT_RANDOMLY, 0 },
352 	{ OBJ_TYPE_CRON,	15, DO_IT_RANDOMLY, 0 },
353 	{ OBJ_TYPE_SHIP,	0, DO_IT_RANDOMLY, 0 },
354 	{ OBJ_TYPE_SAM_STATION, 5, DO_IT_RANDOMLY, 0 },
355 	{ OBJ_TYPE_GUN,		11, DO_IT_RANDOMLY, 0 },
356 	{ OBJ_TYPE_KGUN,	30, DO_IT_RANDOMLY, 0 },
357 	{ OBJ_TYPE_AIRSHIP,	2, DO_IT_RANDOMLY, 0 },
358 	{ OBJ_TYPE_WORM,	2, DO_IT_RANDOMLY, 0 },
359 	{ OBJ_TYPE_BALLOON,	1, DO_IT_RANDOMLY, 0 },
360 	{ OBJ_TYPE_GDB,		4, DO_IT_RANDOMLY, 0 },
361 	{ OBJ_TYPE_OCTOPUS,	1, 85, 1 },
362 	{ OBJ_TYPE_TESLA,	1, 30, 1 },
363 	{ OBJ_TYPE_BIG_ROCKET, 	3, DO_IT_RANDOMLY, 0 },
364 	/* { OBJ_TYPE_TENTACLE, 0, DO_IT_RANDOMLY, 0 },  */
365 };
366 /* end of level 2 */
367 
368 /* level 3 */
369 struct level_obj_descriptor_entry level_3_obj[] = {
370 	{ OBJ_TYPE_ROCKET,	25, DO_IT_RANDOMLY, 0 },
371 	{ OBJ_TYPE_JET,		2, DO_IT_RANDOMLY, 0 },
372 	{ OBJ_TYPE_FUEL, 	18, DO_IT_RANDOMLY, 0 },
373 	{ OBJ_TYPE_JAMMER,	2, DO_IT_RANDOMLY, 0 },
374 	{ OBJ_TYPE_CRON,	15, DO_IT_RANDOMLY, 0 },
375 	{ OBJ_TYPE_SHIP,	0, DO_IT_RANDOMLY, 0 },
376 	{ OBJ_TYPE_SAM_STATION, 8, DO_IT_RANDOMLY, 0 },
377 	{ OBJ_TYPE_GUN,		30, DO_IT_RANDOMLY, 0 },
378 	{ OBJ_TYPE_KGUN,	30, DO_IT_RANDOMLY, 0 },
379 	{ OBJ_TYPE_AIRSHIP,	3, DO_IT_RANDOMLY, 0 },
380 	{ OBJ_TYPE_WORM,	1, DO_IT_RANDOMLY, 0 },
381 	{ OBJ_TYPE_BALLOON,	1, DO_IT_RANDOMLY, 0 },
382 	{ OBJ_TYPE_GDB,		7, DO_IT_RANDOMLY, 0 },
383 	{ OBJ_TYPE_OCTOPUS,	1, 85, 1 },
384 	{ OBJ_TYPE_OCTOPUS,	1, 45, 1 },
385 	{ OBJ_TYPE_BIG_ROCKET, 	1, DO_IT_RANDOMLY, 0 },
386 	{ OBJ_TYPE_TESLA,       1, 60, 0 },
387 	{ OBJ_TYPE_TESLA,       1, 40, 0 },
388 	{ OBJ_TYPE_GUNWHEEL, 	1, 95, 0 },
389 	/* { OBJ_TYPE_TENTACLE, 0, DO_IT_RANDOMLY, 0 }, */
390 };
391 /* end of level 3 */
392 
393 /* level 4 */
394 struct level_obj_descriptor_entry level_4_obj[] = {
395 	{ OBJ_TYPE_ROCKET,	5, DO_IT_RANDOMLY, 0 },
396 	{ OBJ_TYPE_JET,		2, DO_IT_RANDOMLY, 0 },
397 	{ OBJ_TYPE_FUEL, 	25, DO_IT_RANDOMLY, 0 },
398 	{ OBJ_TYPE_JAMMER,	1, DO_IT_RANDOMLY, 0 },
399 	{ OBJ_TYPE_CRON,	10, DO_IT_RANDOMLY, 0 },
400 	{ OBJ_TYPE_SHIP,	0, DO_IT_RANDOMLY, 0 },
401 	{ OBJ_TYPE_SAM_STATION, 5, DO_IT_RANDOMLY, 0 },
402 	{ OBJ_TYPE_GUN,		15, DO_IT_RANDOMLY, 0 },
403 	{ OBJ_TYPE_KGUN,	20, DO_IT_RANDOMLY, 0 },
404 	{ OBJ_TYPE_AIRSHIP,	4, DO_IT_RANDOMLY, 0 },
405 	{ OBJ_TYPE_WORM,	1, DO_IT_RANDOMLY, 0 },
406 	{ OBJ_TYPE_BALLOON,	1, DO_IT_RANDOMLY, 0 },
407 	{ OBJ_TYPE_GDB,		30, DO_IT_RANDOMLY, 0 },
408 	{ OBJ_TYPE_OCTOPUS,	1, 85, 1 },
409 	{ OBJ_TYPE_OCTOPUS,	1, 25, 1 },
410 	{ OBJ_TYPE_BIG_ROCKET, 	15, DO_IT_RANDOMLY, 0 },
411 	{ OBJ_TYPE_GUNWHEEL, 	1, 75, 0 },
412 	/* { OBJ_TYPE_TENTACLE, 0, DO_IT_RANDOMLY, 0 },  */
413 };
414 /* end of level 4 */
415 
416 /* level 5 */
417 struct level_obj_descriptor_entry level_5_obj[] = {
418 	{ OBJ_TYPE_ROCKET,	5, DO_IT_RANDOMLY, 0 },
419 	{ OBJ_TYPE_JET,		4, DO_IT_RANDOMLY, 0 },
420 	{ OBJ_TYPE_FUEL, 	23, DO_IT_RANDOMLY, 0 },
421 	{ OBJ_TYPE_JAMMER,	1, DO_IT_RANDOMLY, 0 },
422 	{ OBJ_TYPE_CRON,	10, DO_IT_RANDOMLY, 0 },
423 	{ OBJ_TYPE_SHIP,	0, DO_IT_RANDOMLY, 0 },
424 	{ OBJ_TYPE_SAM_STATION, 8, DO_IT_RANDOMLY, 0 },
425 	{ OBJ_TYPE_GUN,		18, DO_IT_RANDOMLY, 0 },
426 	{ OBJ_TYPE_KGUN,	25, DO_IT_RANDOMLY, 0 },
427 	{ OBJ_TYPE_AIRSHIP,	4, DO_IT_RANDOMLY, 0 },
428 	{ OBJ_TYPE_WORM,	1, DO_IT_RANDOMLY, 0 },
429 	{ OBJ_TYPE_BALLOON,	1, DO_IT_RANDOMLY, 0 },
430 	{ OBJ_TYPE_GDB,		9, DO_IT_RANDOMLY, 0 },
431 	{ OBJ_TYPE_OCTOPUS,	1, 75, 1 },
432 	{ OBJ_TYPE_OCTOPUS,	1, 35, 1 },
433 	{ OBJ_TYPE_OCTOPUS,	1, 85, 1 },
434 	{ OBJ_TYPE_BIG_ROCKET, 	15, DO_IT_RANDOMLY, 0 },
435 	{ OBJ_TYPE_TESLA, 	1, 40, 0 },
436 	{ OBJ_TYPE_TESLA, 	1, 60, 0 },
437 	{ OBJ_TYPE_GUNWHEEL, 	1, 25, 0 },
438 	{ OBJ_TYPE_GUNWHEEL, 	1, 75, 0 },
439 	/* { OBJ_TYPE_TENTACLE, 0, DO_IT_RANDOMLY, 0 }, */
440 };
441 /* end of level 5 */
442 
443 /* level 6 */
444 struct level_obj_descriptor_entry level_6_obj[] = {
445 	{ OBJ_TYPE_ROCKET,	25, DO_IT_RANDOMLY, 0 },
446 	{ OBJ_TYPE_JET,		7, DO_IT_RANDOMLY, 0 },
447 	{ OBJ_TYPE_FUEL, 	18, DO_IT_RANDOMLY, 0 },
448 	{ OBJ_TYPE_JAMMER,	1, DO_IT_RANDOMLY, 0 },
449 	{ OBJ_TYPE_CRON,	10, DO_IT_RANDOMLY, 0 },
450 	{ OBJ_TYPE_SHIP,	0, DO_IT_RANDOMLY, 0 },
451 	{ OBJ_TYPE_SAM_STATION, 9, DO_IT_RANDOMLY, 0 },
452 	{ OBJ_TYPE_GUN,		28, DO_IT_RANDOMLY, 0 },
453 	{ OBJ_TYPE_KGUN,	28, DO_IT_RANDOMLY, 0 },
454 	{ OBJ_TYPE_AIRSHIP,	4, 90, 0 },
455 	{ OBJ_TYPE_WORM,	3, DO_IT_RANDOMLY, 0 },
456 	{ OBJ_TYPE_BALLOON,	1, DO_IT_RANDOMLY, 0 },
457 	{ OBJ_TYPE_GDB,		12, DO_IT_RANDOMLY, 0 },
458 	{ OBJ_TYPE_OCTOPUS,	1, 75, 1 },
459 	{ OBJ_TYPE_OCTOPUS,	1, 15, 1 },
460 	{ OBJ_TYPE_OCTOPUS,	1, 65, 1 },
461 	{ OBJ_TYPE_BIG_ROCKET, 	15, DO_IT_RANDOMLY, 0 },
462 	{ OBJ_TYPE_TESLA, 	1, 40, 0 },
463 	{ OBJ_TYPE_TESLA, 	1, 60, 0 },
464 	{ OBJ_TYPE_TESLA, 	1, 80, 0 },
465 	{ OBJ_TYPE_TESLA, 	1, 90, 0 },
466 	{ OBJ_TYPE_TESLA, 	1, 10, 0 },
467 	{ OBJ_TYPE_GUNWHEEL, 	1, 25, 0 },
468 	{ OBJ_TYPE_GUNWHEEL, 	1, 50, 0 },
469 	{ OBJ_TYPE_GUNWHEEL, 	1, 75, 0 },
470 	{ OBJ_TYPE_GUNWHEEL, 	1, 15, 0 },
471 	/* { OBJ_TYPE_TENTACLE, 0, DO_IT_RANDOMLY, 0 },  */
472 };
473 /* end of level 6 */
474 
475 /* "jet" level begins */
476 struct level_obj_descriptor_entry jet_level_obj[] = {
477 	/* { OBJ_TYPE_ROCKET,	25, DO_IT_RANDOMLY, 0 }, */
478 	{ OBJ_TYPE_JET,		55, DO_IT_RANDOMLY, 0 },
479 	{ OBJ_TYPE_FUEL, 	15, DO_IT_RANDOMLY, 0 },
480 	{ OBJ_TYPE_JAMMER,	1, DO_IT_RANDOMLY, 0 },
481 	{ OBJ_TYPE_CRON,	10, DO_IT_RANDOMLY, 0 },
482 	/* { OBJ_TYPE_SHIP,	0, DO_IT_RANDOMLY, 0 },  */
483 	/* { OBJ_TYPE_SAM_STATION, 5, DO_IT_RANDOMLY, 0 },  */
484 	/* { OBJ_TYPE_GUN,	11, DO_IT_RANDOMLY, 0 },  */
485 	/* { OBJ_TYPE_KGUN,	0, DO_IT_RANDOMLY, 0 },  */
486 	{ OBJ_TYPE_AIRSHIP,	1, DO_IT_RANDOMLY, 0 },
487 	{ OBJ_TYPE_WORM,	2, DO_IT_RANDOMLY, 0 },
488 	{ OBJ_TYPE_BALLOON,	1, DO_IT_RANDOMLY, 0 },
489 	{ OBJ_TYPE_GDB,		1, DO_IT_RANDOMLY, 0 },
490 	{ OBJ_TYPE_OCTOPUS,	1, 85, 1 },
491 	/* { OBJ_TYPE_TENTACLE, 0, DO_IT_RANDOMLY, 0 },  */
492 };
493 /* "jet" level ends */
494 
495 
496 /* -------------------- INSERT NEW LEVELS ABOVE THIS LINE ^^^^ ----------- */
497 
498 #define NBOMBS 100		/* Number of bombs allocated to player at beginning of levels */
499 #define NGBOMBS 3		/* Number of gravity bombs allocated at beginning of levels */
500 
501 /* Some sample laser aggressiveness levels. */
502 #define DOCILE_LASER     2	/* chance/1000 that flak guns (laser turrets) will fire if in range */
503 #define LAZY_LASER       8
504 #define AVERAGE_LASER    13
505 #define AGGRESSIVE_LASER 20
506 #define KILLER_LASER     25
507 #define SLOW_LASER 1
508 #define FAST_LASER 2
509 #define EASY_KGUNS 1
510 #define MEDIUM_KGUNS 2
511 #define HARD_KGUNS 5
512 
513 #define NBRIDGES 2		/* max initial number of bridges in terrain (less, if no valleys) */
514 
515 /* ---------------------level descriptors begin here.---------------------- */
516 NEW_LEVEL(jet_level, jet_level_obj, 0.11, 0.09, AVERAGE_LASER, NBRIDGES + 1,
517 	NBOMBS, NGBOMBS, AGGRESSIVE_LASER, SLOW_LASER, EASY_KGUNS, "Welcome, Noob!");
518 NEW_LEVEL(level1, level_1_obj, 0.14, 0.04, LAZY_LASER, NBRIDGES,
519 	NBOMBS, NGBOMBS, KILLER_LASER, SLOW_LASER, EASY_KGUNS, "Rocket Alley");
520 NEW_LEVEL(level2, level_2_obj, 0.17, 0.09, LAZY_LASER, NBRIDGES + 1,
521 	NBOMBS, NGBOMBS, AGGRESSIVE_LASER, SLOW_LASER, EASY_KGUNS, "Vi! Vi! Vi!");
522 NEW_LEVEL(level3, level_3_obj, 0.23, 0.15, AVERAGE_LASER, NBRIDGES + 1,
523 	NBOMBS, NGBOMBS, AGGRESSIVE_LASER, SLOW_LASER, EASY_KGUNS, "Joy of VIctory");
524 NEW_LEVEL(level4, level_4_obj, 0.29, 0.17, AVERAGE_LASER, NBRIDGES + 1,
525 	NBOMBS, NGBOMBS, AGGRESSIVE_LASER, FAST_LASER, MEDIUM_KGUNS, "Debugging Hell");
526 NEW_LEVEL(level5, level_5_obj, 0.24, 0.22, AVERAGE_LASER, NBRIDGES + 1,
527 	NBOMBS, NGBOMBS, AGGRESSIVE_LASER, FAST_LASER, MEDIUM_KGUNS, "EMACSed Out");
528 NEW_LEVEL(level6, level_6_obj, 0.14, 0.22, AGGRESSIVE_LASER, NBRIDGES + 3,
529 	NBOMBS, NGBOMBS, AGGRESSIVE_LASER, FAST_LASER, HARD_KGUNS, "Revenge of RMS");
530 /* ---------------------level descriptors end here.---------------------- */
531 
532 
533 /* This is an array of all the levels.  Add your new level
534  * which you defined above, into the list below, where indicated: */
535 struct level_descriptor_entry *leveld[] = {
536 	&jet_level, /* 1st level */
537 	&level1,    /* 2nd level */
538 	&level2,    /* 3rd level, etc. */
539 	&level3,
540 	&level4,
541 	&level5,
542 	&level6,
543 
544 	/* Add your new level name above this line, with an ampersand. */
545 	NULL,
546 };
547 
548 
549 #endif
550