home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / games / trek / initquad.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-04-08  |  4.1 KB  |  153 lines

  1. /*
  2.  * Copyright (c) 1980 Regents of the University of California.
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  * 1. Redistributions of source code must retain the above copyright
  9.  *    notice, this list of conditions and the following disclaimer.
  10.  * 2. Redistributions in binary form must reproduce the above copyright
  11.  *    notice, this list of conditions and the following disclaimer in the
  12.  *    documentation and/or other materials provided with the distribution.
  13.  * 3. All advertising materials mentioning features or use of this software
  14.  *    must display the following acknowledgement:
  15.  *    This product includes software developed by the University of
  16.  *    California, Berkeley and its contributors.
  17.  * 4. Neither the name of the University nor the names of its contributors
  18.  *    may be used to endorse or promote products derived from this software
  19.  *    without specific prior written permission.
  20.  *
  21.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  22.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  25.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31.  * SUCH DAMAGE.
  32.  */
  33.  
  34. #ifndef lint
  35. static char sccsid[] = "@(#)initquad.c    5.4 (Berkeley) 6/1/90";
  36. #endif /* not lint */
  37.  
  38. # include    "trek.h"
  39.  
  40. /*
  41. **  Paramize Quadrant Upon Entering
  42. **
  43. **    A quadrant is initialized from the information held in the
  44. **    Quad matrix.  Basically, everything is just initialized
  45. **    randomly, except for the starship, which goes into a fixed
  46. **    sector.
  47. **
  48. **    If there are Klingons in the quadrant, the captain is informed
  49. **    that the condition is RED, and he is given a chance to put
  50. **    his shields up if the computer is working.
  51. **
  52. **    The flag `f' is set to disable the check for condition red.
  53. **    This mode is used in situations where you know you are going
  54. **    to be docked, i.e., abandon() and help().
  55. */
  56.  
  57. initquad(f)
  58. int    f;
  59. {
  60.     register int        i, j;
  61.     int            rx, ry;
  62.     int            nbases, nstars;
  63.     register struct quad    *q;
  64.     int            nholes;
  65.  
  66.     q = &Quad[Ship.quadx][Ship.quady];
  67.  
  68.     /* ignored supernova'ed quadrants (this is checked again later anyway */
  69.     if (q->stars < 0)
  70.         return;
  71.     Etc.nkling = q->klings;
  72.     nbases = q->bases;
  73.     nstars = q->stars;
  74.     nholes = q->holes;
  75.  
  76.     /* have we blundered into a battle zone w/ shields down? */
  77.     if (Etc.nkling > 0 && !f)
  78.     {
  79.         printf("Condition RED\n");
  80.         Ship.cond = RED;
  81.         if (!damaged(COMPUTER))
  82.             shield(1);
  83.     }
  84.  
  85.     /* clear out the quadrant */
  86.     for (i = 0; i < NSECTS; i++)
  87.         for (j = 0; j < NSECTS; j++)
  88.             Sect[i][j] = EMPTY;
  89.  
  90.     /* initialize Enterprise */
  91.     Sect[Ship.sectx][Ship.secty] = Ship.ship;
  92.  
  93.     /* initialize Klingons */
  94.     for (i = 0; i < Etc.nkling; i++)
  95.     {
  96.         sector(&rx, &ry);
  97.         Sect[rx][ry] = KLINGON;
  98.         Etc.klingon[i].x = rx;
  99.         Etc.klingon[i].y = ry;
  100.         Etc.klingon[i].power = Param.klingpwr;
  101.         Etc.klingon[i].srndreq = 0;
  102.     }
  103.     compkldist(1);
  104.  
  105.     /* initialize star base */
  106.     if (nbases > 0)
  107.     {
  108.         sector(&rx, &ry);
  109.         Sect[rx][ry] = BASE;
  110.         Etc.starbase.x = rx;
  111.         Etc.starbase.y = ry;
  112.     }
  113.  
  114.     /* initialize inhabited starsystem */
  115.     if (q->qsystemname != 0)
  116.     {
  117.         sector(&rx, &ry);
  118.         Sect[rx][ry] = INHABIT;
  119.         nstars -= 1;
  120.     }
  121.  
  122.     /* initialize black holes */
  123.     for (i = 0; i < nholes; i++)
  124.     {
  125.         sector(&rx, &ry);
  126.         Sect[rx][ry] = HOLE;
  127.     }
  128.  
  129.     /* initialize stars */
  130.     for (i = 0; i < nstars; i++)
  131.     {
  132.         sector(&rx, &ry);
  133.         Sect[rx][ry] = STAR;
  134.     }
  135.     Move.newquad = 1;
  136. }
  137.  
  138.  
  139. sector(x, y)
  140. int    *x, *y;
  141. {
  142.     register int        i, j;
  143.  
  144.     do
  145.     {
  146.         i = ranf(NSECTS);
  147.         j = ranf(NSECTS);
  148.     } while (Sect[i][j] != EMPTY);
  149.     *x = i;
  150.     *y = j;
  151.     return;
  152. }
  153.