home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / games / volume13 / jetpack / part03 / normal.c < prev    next >
C/C++ Source or Header  |  1992-04-10  |  5KB  |  177 lines

  1. /*    normal.c : routine that sets up the levels that aren't predefined
  2. */
  3.  
  4. #include "copyright.h"
  5. #include "defs.h"
  6.  
  7. /* normal_level is a very ugly switch statement that sets up the various
  8.     types of "normal" levels
  9. */
  10. normal_level()
  11. {
  12.     register int    mx, my, f, p, s, n, md, mt, msc, fmin, fmax, smin, smax,
  13.                     g, gmin, gmax, kind, obj;
  14.  
  15.     /*    there are 5 kinds of "normal" levels: Open levels, Big levels,
  16.         Twisty levels, and Death levels
  17.     */
  18.     kind = level % 8;
  19.     switch(kind) {
  20.         /*    Twisty level: medium large maze, all walls, normal fuel and
  21.             enemies, many intersections.
  22.         */
  23.         case 0:
  24.             message("Twisty Level", CGREEN, 75);
  25.             msc = random() % 50 + 100;
  26.             mx = random() % 15 + 5;
  27.             my = random() % 15 + 5;
  28.             md = 0;
  29.             mt = 0;
  30.             obj = (mx * my * msc) / 500;
  31.             if(obj > 30) obj = 30;
  32.             do {
  33.                 f = random() % 30;
  34.                 s = random() % 30;
  35.                 g = random() % 30;
  36.             } while((f + s + g > obj) || (f + s + g < obj / 2));
  37.             p = random() % (obj / 4) + obj / 4;
  38.             smin = level / 3 + 1;
  39.             smax = level / 3 + 3;
  40.             if(smin > 5) smin = 5;
  41.             fmin = level / 3 - 1;
  42.             fmax = level / 3 + 3;
  43.             if(fmin > 5) fmin = 5;
  44.             gmin = level / 3 + 1;
  45.             gmax = level / 3 + 3;
  46.             if(gmin > 5) gmin = 5;
  47.             make_random_level(mx, my, msc, md, mt, f, fmin, fmax, s, smin, smax,
  48.                                 g, gmin, gmax, p);
  49.             break;
  50.  
  51.         /*    Open level: medium size maze, very few walls, normal level of
  52.             fuel and enemies
  53.         */
  54.         case 2:
  55.             message("Open Level", CORANGE, 75);
  56.             msc = random() % 75 + 75;
  57.             mx = random() % 20 + 5;
  58.             my = random() % 20 + 5;
  59.             md = random() % 30 + 71;
  60.             mt = 100;
  61.             obj = (mx * my * msc) / 500;
  62.             if(obj > 30) obj = 30;
  63.             do {
  64.                 f = random() % 30;
  65.                 s = random() % 30;
  66.                 g = random() % 30;
  67.             } while((f + s + g > obj) || (f + s + g < obj / 2));
  68.             p = random() % (obj / 4) + obj / 4;
  69.             smin = level / 3 + 1;
  70.             smax = level / 3 + 3;
  71.             if(smin > 5) smin = 5;
  72.             fmin = level / 3 - 1;
  73.             fmax = level / 3 + 3;
  74.             if(fmin > 5) fmin = 5;
  75.             gmin = level / 3 + 1;
  76.             gmax = level / 3 + 3;
  77.             if(gmin > 5) gmin = 5;
  78.             make_random_level(mx, my, msc, md, mt, f, fmin, fmax, s, smin, smax,
  79.                                 g, gmin, gmax, p);
  80.             break;
  81.         /*    Big level: large maze, very few walls missing if any, normal
  82.             level of fuel and enemies
  83.         */
  84.         case 6:
  85.             message("Big Level", CYELLOW, 75);
  86.             msc = random() % 25 + 125;
  87.             mx = random() % 10 + 15;
  88.             my = random() % 10 + 15;
  89.             if(random() % 3 == 0) md = random() % 5;
  90.             else md = 0;
  91.             mt = random() % 101;
  92.             obj = (mx * my * msc) / 500;
  93.             p = obj / 2;
  94.             if(obj > 30) obj = 30;
  95.             do {
  96.                 f = random() % 30;
  97.                 s = random() % 30;
  98.                 g = random() % 30;
  99.             } while((f + s + g > obj) || (f + s + g < obj / 2));
  100.             smin = level / 3 + 1;
  101.             smax = level / 3 + 3;
  102.             if(smin > 5) smin = 5;
  103.             fmin = level / 3 - 1;
  104.             fmax = level / 3 + 3;
  105.             if(fmin > 5) fmin = 5;
  106.             gmin = level / 3 + 1;
  107.             gmax = level / 3 + 3;
  108.             if(gmin > 5) gmin = 5;
  109.             make_random_level(mx, my, msc, md, mt, f, fmin, fmax, s, smin, smax,
  110.                                 g, gmin, gmax, p);
  111.             break;
  112.         /*    Death level: small maze, few walls missing, little fuel, two
  113.             to three times normal level of enemies
  114.         */
  115.         case 4:
  116.             message("Death Level", CRED, 75);
  117.             msc = random() % 20 + 100;
  118.             mx = random() % 5 + 5;
  119.             my = random() % 5 + 5;
  120.             md = random() % 10;
  121.             mt = random() % 101;
  122.             obj = (mx * my * msc) / 500;
  123.             do {
  124.                 f = random() % 30;
  125.                 s = random() % 30;
  126.                 g = random() % 30;
  127.             } while((f + s + g > obj * 3) || (f + s + g < obj * 2));
  128.             p = random() % (obj / 4) + obj / 3;
  129.             smin = level / 3 + 1;
  130.             smax = level / 3 + 3;
  131.             if(smin > 5) smin = 5;
  132.             fmin = level / 3 - 1;
  133.             fmax = level / 3 + 3;
  134.             if(fmin > 5) fmin = 5;
  135.             gmin = level / 3 + 1;
  136.             gmax = level / 3 + 3;
  137.             if(gmin > 5) gmin = 5;
  138.             make_random_level(mx, my, msc, md, mt, f, fmin, fmax, s, smin, smax,
  139.                                 g, gmin, gmax, p);
  140.             break;
  141.         /*    Ordinary level: normal level of fuel and enemies, maze
  142.             varies.
  143.         */
  144.         default:
  145.             msc = random() % 75 + 75;
  146.             mx = random() % 15 + 5;
  147.             my = random() % 15 + 5;
  148.             n = random() % 10;
  149.             if(n == 0) {
  150.                 md = random() % 90 + 11;
  151.             } else if(n < 4) {
  152.                 md = random() % 10 + 1;
  153.             } else md = 0;
  154.             mt = random() % 101;
  155.             obj = (mx * my * msc) / 500;
  156.             if(obj > 30) obj = 30;
  157.             do {
  158.                 f = random() % 30;
  159.                 s = random() % 30;
  160.                 g = random() % 30;
  161.             } while((f + s + g > obj) || (f + s + g < obj / 2));
  162.             p = random() % (obj / 4) + obj / 3;
  163.             smin = level / 3 + 1;
  164.             smax = level / 3 + 3;
  165.             if(smin > 5) smin = 5;
  166.             fmin = level / 3 - 1;
  167.             fmax = level / 3 + 3;
  168.             if(fmin > 5) fmin = 5;
  169.             gmin = level / 3 + 1;
  170.             gmax = level / 3 + 3;
  171.             if(gmin > 5) gmin = 5;
  172.             make_random_level(mx, my, msc, md, mt, f, fmin, fmax, s, smin, smax,
  173.                                 g, gmin, gmax, p);
  174.             break;
  175.     }
  176. }
  177.