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