Str_New -> strdup
[unix-history] / usr / src / games / trek / initquad.c
CommitLineData
b6f0a7e4
DF
1/*
2 * Copyright (c) 1980 Regents of the University of California.
e9fb6bea
KB
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms are permitted
d99e6414
KB
6 * provided that the above copyright notice and this paragraph are
7 * duplicated in all such forms and that any documentation,
8 * advertising materials, and other materials related to such
9 * distribution and use acknowledge that the software was developed
10 * by the University of California, Berkeley. The name of the
11 * University may not be used to endorse or promote products derived
12 * from this software without specific prior written permission.
13 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
b6f0a7e4
DF
16 */
17
e28303e4 18#ifndef lint
d99e6414 19static char sccsid[] = "@(#)initquad.c 5.3 (Berkeley) %G%";
e9fb6bea 20#endif /* not lint */
e28303e4
KM
21
22# include "trek.h"
23
24/*
25** Paramize Quadrant Upon Entering
26**
27** A quadrant is initialized from the information held in the
28** Quad matrix. Basically, everything is just initialized
29** randomly, except for the starship, which goes into a fixed
30** sector.
31**
32** If there are Klingons in the quadrant, the captain is informed
33** that the condition is RED, and he is given a chance to put
34** his shields up if the computer is working.
35**
36** The flag `f' is set to disable the check for condition red.
37** This mode is used in situations where you know you are going
38** to be docked, i.e., abandon() and help().
39*/
40
41initquad(f)
42int f;
43{
44 register int i, j;
45 int rx, ry;
46 int nbases, nstars;
47 register struct quad *q;
48 int nholes;
49
50 q = &Quad[Ship.quadx][Ship.quady];
51
52 /* ignored supernova'ed quadrants (this is checked again later anyway */
53 if (q->stars < 0)
54 return;
55 Etc.nkling = q->klings;
56 nbases = q->bases;
57 nstars = q->stars;
58 nholes = q->holes;
59
60 /* have we blundered into a battle zone w/ shields down? */
61 if (Etc.nkling > 0 && !f)
62 {
63 printf("Condition RED\n");
64 Ship.cond = RED;
65 if (!damaged(COMPUTER))
66 shield(1);
67 }
68
69 /* clear out the quadrant */
70 for (i = 0; i < NSECTS; i++)
71 for (j = 0; j < NSECTS; j++)
72 Sect[i][j] = EMPTY;
73
74 /* initialize Enterprise */
75 Sect[Ship.sectx][Ship.secty] = Ship.ship;
76
77 /* initialize Klingons */
78 for (i = 0; i < Etc.nkling; i++)
79 {
80 sector(&rx, &ry);
81 Sect[rx][ry] = KLINGON;
82 Etc.klingon[i].x = rx;
83 Etc.klingon[i].y = ry;
84 Etc.klingon[i].power = Param.klingpwr;
85 Etc.klingon[i].srndreq = 0;
86 }
87 compkldist(1);
88
89 /* initialize star base */
90 if (nbases > 0)
91 {
92 sector(&rx, &ry);
93 Sect[rx][ry] = BASE;
94 Etc.starbase.x = rx;
95 Etc.starbase.y = ry;
96 }
97
98 /* initialize inhabited starsystem */
06d69904 99 if (q->qsystemname != 0)
e28303e4
KM
100 {
101 sector(&rx, &ry);
102 Sect[rx][ry] = INHABIT;
35b95499 103 nstars -= 1;
e28303e4
KM
104 }
105
106 /* initialize black holes */
107 for (i = 0; i < nholes; i++)
108 {
109 sector(&rx, &ry);
110 Sect[rx][ry] = HOLE;
111 }
112
113 /* initialize stars */
114 for (i = 0; i < nstars; i++)
115 {
116 sector(&rx, &ry);
117 Sect[rx][ry] = STAR;
118 }
119 Move.newquad = 1;
120}
121
122
123sector(x, y)
124int *x, *y;
125{
126 register int i, j;
127
128 do
129 {
130 i = ranf(NSECTS);
131 j = ranf(NSECTS);
132 } while (Sect[i][j] != EMPTY);
133 *x = i;
134 *y = j;
135 return;
136}