Home | History | Annotate | Line # | Download | only in trek
initquad.c revision 1.5
      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 }
    159