(linenum→info "unix/slp.c:2238")

bsd-games/2.17/trek/initquad.c

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