Merge from vendor branch NTPD:
[dragonfly.git] / games / trek / initquad.c
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 }