1 /*
2 * Copyright (c) 1980, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * %sccs.include.redist.c%
6 */
7
8 #ifndef lint
9 static char sccsid[] = "@(#)initquad.c 8.1 (Berkeley) 05/31/93";
10 #endif /* not lint */
11
12 # include "trek.h"
13
14 /*
15 ** Paramize Quadrant Upon Entering
16 **
17 ** A quadrant is initialized from the information held in the
18 ** Quad matrix. Basically, everything is just initialized
19 ** randomly, except for the starship, which goes into a fixed
20 ** sector.
21 **
22 ** If there are Klingons in the quadrant, the captain is informed
23 ** that the condition is RED, and he is given a chance to put
24 ** his shields up if the computer is working.
25 **
26 ** The flag `f' is set to disable the check for condition red.
27 ** This mode is used in situations where you know you are going
28 ** to be docked, i.e., abandon() and help().
29 */
30
initquad(f)31 initquad(f)
32 int f;
33 {
34 register int i, j;
35 int rx, ry;
36 int nbases, nstars;
37 register struct quad *q;
38 int nholes;
39
40 q = &Quad[Ship.quadx][Ship.quady];
41
42 /* ignored supernova'ed quadrants (this is checked again later anyway */
43 if (q->stars < 0)
44 return;
45 Etc.nkling = q->klings;
46 nbases = q->bases;
47 nstars = q->stars;
48 nholes = q->holes;
49
50 /* have we blundered into a battle zone w/ shields down? */
51 if (Etc.nkling > 0 && !f)
52 {
53 printf("Condition RED\n");
54 Ship.cond = RED;
55 if (!damaged(COMPUTER))
56 shield(1);
57 }
58
59 /* clear out the quadrant */
60 for (i = 0; i < NSECTS; i++)
61 for (j = 0; j < NSECTS; j++)
62 Sect[i][j] = EMPTY;
63
64 /* initialize Enterprise */
65 Sect[Ship.sectx][Ship.secty] = Ship.ship;
66
67 /* initialize Klingons */
68 for (i = 0; i < Etc.nkling; i++)
69 {
70 sector(&rx, &ry);
71 Sect[rx][ry] = KLINGON;
72 Etc.klingon[i].x = rx;
73 Etc.klingon[i].y = ry;
74 Etc.klingon[i].power = Param.klingpwr;
75 Etc.klingon[i].srndreq = 0;
76 }
77 compkldist(1);
78
79 /* initialize star base */
80 if (nbases > 0)
81 {
82 sector(&rx, &ry);
83 Sect[rx][ry] = BASE;
84 Etc.starbase.x = rx;
85 Etc.starbase.y = ry;
86 }
87
88 /* initialize inhabited starsystem */
89 if (q->qsystemname != 0)
90 {
91 sector(&rx, &ry);
92 Sect[rx][ry] = INHABIT;
93 nstars -= 1;
94 }
95
96 /* initialize black holes */
97 for (i = 0; i < nholes; i++)
98 {
99 sector(&rx, &ry);
100 Sect[rx][ry] = HOLE;
101 }
102
103 /* initialize stars */
104 for (i = 0; i < nstars; i++)
105 {
106 sector(&rx, &ry);
107 Sect[rx][ry] = STAR;
108 }
109 Move.newquad = 1;
110 }
111
112
sector(x,y)113 sector(x, y)
114 int *x, *y;
115 {
116 register int i, j;
117
118 do
119 {
120 i = ranf(NSECTS);
121 j = ranf(NSECTS);
122 } while (Sect[i][j] != EMPTY);
123 *x = i;
124 *y = j;
125 return;
126 }
127