xref: /dragonfly/games/trek/initquad.c (revision 2cd2d2b5)
1 /*
2  * Copyright (c) 1980, 1993
3  *	The Regents of the University of California.  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  * @(#)initquad.c	8.1 (Berkeley) 5/31/93
34  * $FreeBSD: src/games/trek/initquad.c,v 1.4 1999/11/30 03:49:49 billf Exp $
35  * $DragonFly: src/games/trek/initquad.c,v 1.2 2003/06/17 04:25:25 dillon Exp $
36  */
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 	int		i, j;
61 	int			rx, ry;
62 	int			nbases, nstars;
63 	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 	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