/usr/games often isn't in root's path
[unix-history] / usr / src / games / trek / trek.h
CommitLineData
9758240b
KM
1/*
2 * Copyright (c) 1980 Regents of the University of California.
e9fb6bea 3 * All rights reserved.
9758240b 4 *
b2e7427f 5 * %sccs.include.redist.c%
e9fb6bea 6 *
b2e7427f 7 * @(#)trek.h 5.5 (Berkeley) %G%
9758240b 8 */
80079f16 9
80079f16
KM
10/*
11** Global Declarations
12**
13** Virtually all non-local variable declarations are made in this
14** file. Exceptions are those things which are initialized, which
15** are defined in "externs.c", and things which are local to one
16** program file.
17**
18** So far as I know, nothing in here must be preinitialized to
19** zero.
20**
21** You may have problems from the loader if you move this to a
22** different machine. These things actually get allocated in each
23** source file, which UNIX allows; however, you may (on other
24** systems) have to change everything in here to be "extern" and
25** actually allocate stuff in "externs.c"
26*/
27
28/* external function definitions */
29extern double franf(); /* floating random number function */
30extern double sqrt(); /* square root */
31extern double sin(), cos(); /* trig functions */
32extern double atan2(); /* fancy arc tangent function */
33extern double log(); /* log base e */
34extern double pow(); /* power function */
35extern double fabs(); /* absolute value function */
36extern double exp(); /* exponential function */
37
38/********************* GALAXY **************************/
39
40/* galactic parameters */
41# define NSECTS 10 /* dimensions of quadrant in sectors */
42# define NQUADS 8 /* dimension of galazy in quadrants */
43# define NINHAB 32 /* number of quadrants which are inhabited */
44
45struct quad /* definition for each quadrant */
46{
47 char bases; /* number of bases in this quadrant */
48 char klings; /* number of Klingons in this quadrant */
49 char holes; /* number of black holes in this quadrant */
50 int scanned; /* star chart entry (see below) */
51 char stars; /* number of stars in this quadrant */
06d69904 52 char qsystemname; /* starsystem name (see below) */
80079f16
KM
53};
54
55# define Q_DISTRESSED 0200
56# define Q_SYSTEM 077
57
58/* systemname conventions:
59 * 1 -> NINHAB index into Systemname table for live system.
60 * + Q_DISTRESSED distressed starsystem -- systemname & Q_SYSTEM
61 * is the index into the Event table which will
62 * have the system name
63 * 0 dead or nonexistent starsystem
64 *
65 * starchart ("scanned") conventions:
66 * 0 -> 999 taken as is
67 * -1 not yet scanned ("...")
68 * 1000 supernova ("///")
69 * 1001 starbase + ??? (".1.")
70*/
71
72/* ascii names of systems */
73extern char *Systemname[NINHAB];
74
75/* quadrant definition */
76struct quad Quad[NQUADS][NQUADS];
77
78/* defines for sector map (below) */
79# define EMPTY '.'
80# define STAR '*'
81# define BASE '#'
82# define ENTERPRISE 'E'
83# define QUEENE 'Q'
84# define KLINGON 'K'
85# define INHABIT '@'
86# define HOLE ' '
87
88/* current sector map */
89char Sect[NSECTS][NSECTS];
90
91
92/************************ DEVICES ******************************/
93
94# define NDEV 16 /* max number of devices */
95
96/* device tokens */
97# define WARP 0 /* warp engines */
98# define SRSCAN 1 /* short range scanners */
99# define LRSCAN 2 /* long range scanners */
100# define PHASER 3 /* phaser control */
101# define TORPED 4 /* photon torpedo control */
102# define IMPULSE 5 /* impulse engines */
103# define SHIELD 6 /* shield control */
104# define COMPUTER 7 /* on board computer */
105# define SSRADIO 8 /* subspace radio */
106# define LIFESUP 9 /* life support systems */
107# define SINS 10 /* Space Inertial Navigation System */
108# define CLOAK 11 /* cloaking device */
109# define XPORTER 12 /* transporter */
110# define SHUTTLE 13 /* shuttlecraft */
111
112/* device names */
113struct device
114{
115 char *name; /* device name */
116 char *person; /* the person who fixes it */
117};
118
119struct device Device[NDEV];
120
121/*************************** EVENTS ****************************/
122
123# define NEVENTS 12 /* number of different event types */
124
125# define E_LRTB 1 /* long range tractor beam */
126# define E_KATSB 2 /* Klingon attacks starbase */
127# define E_KDESB 3 /* Klingon destroys starbase */
128# define E_ISSUE 4 /* distress call is issued */
129# define E_ENSLV 5 /* Klingons enslave a quadrant */
130# define E_REPRO 6 /* a Klingon is reproduced */
131# define E_FIXDV 7 /* fix a device */
132# define E_ATTACK 8 /* Klingon attack during rest period */
133# define E_SNAP 9 /* take a snapshot for time warp */
134# define E_SNOVA 10 /* supernova occurs */
135
136# define E_GHOST 0100 /* ghost of a distress call if ssradio out */
137# define E_HIDDEN 0200 /* event that is unreportable because ssradio out */
138# define E_EVENT 077 /* mask to get event code */
139
140struct event
141{
142 char x, y; /* coordinates */
06d69904 143 double date; /* trap stardate */
80079f16
KM
144 char evcode; /* event type */
145 char systemname; /* starsystem name */
146};
147/* systemname conventions:
148 * 1 -> NINHAB index into Systemname table for reported distress calls
149 *
150 * evcode conventions:
151 * 1 -> NEVENTS-1 event type
152 * + E_HIDDEN unreported (SSradio out)
153 * + E_GHOST actually already expired
154 * 0 unallocated
155 */
156
157# define MAXEVENTS 25 /* max number of concurrently pending events */
158
159struct event Event[MAXEVENTS]; /* dynamic event list; one entry per pending event */
160
161/***************************** KLINGONS *******************************/
162
163struct kling
164{
165 char x, y; /* coordinates */
166 int power; /* power left */
06d69904
KL
167 double dist; /* distance to Enterprise */
168 double avgdist; /* average over this move */
80079f16
KM
169 char srndreq; /* set if surrender has been requested */
170};
171
172# define MAXKLQUAD 9 /* maximum klingons per quadrant */
173
174/********************** MISCELLANEOUS ***************************/
175
176/* condition codes */
177# define GREEN 0
178# define DOCKED 1
179# define YELLOW 2
180# define RED 3
181
182/* starbase coordinates */
183# define MAXBASES 9 /* maximum number of starbases in galaxy */
184
185/* distress calls */
186# define MAXDISTR 5 /* maximum concurrent distress calls */
187
188/* phaser banks */
189# define NBANKS 6 /* number of phaser banks */
190
191struct xy
192{
193 char x, y; /* coordinates */
194};
195
196
197/*
198 * note that much of the stuff in the following structs CAN NOT
199 * be moved around!!!!
200 */
201
202
203/* information regarding the state of the starship */
204struct
205{
06d69904
KL
206 double warp; /* warp factor */
207 double warp2; /* warp factor squared */
208 double warp3; /* warp factor cubed */
80079f16
KM
209 char shldup; /* shield up flag */
210 char cloaked; /* set if cloaking device on */
211 int energy; /* starship's energy */
212 int shield; /* energy in shields */
06d69904 213 double reserves; /* life support reserves */
80079f16
KM
214 int crew; /* ship's complement */
215 int brigfree; /* space left in brig */
216 char torped; /* torpedoes */
217 char cloakgood; /* set if we have moved */
218 int quadx; /* quadrant x coord */
219 int quady; /* quadrant y coord */
220 int sectx; /* sector x coord */
221 int secty; /* sector y coord */
222 char cond; /* condition code */
223 char sinsbad; /* Space Inertial Navigation System condition */
224 char *shipname; /* name of current starship */
225 char ship; /* current starship */
d66cb992 226 int distressed; /* number of distress calls */
80079f16
KM
227} Ship;
228
229/* sinsbad is set if SINS is working but not calibrated */
230
231/* game related information, mostly scoring */
232struct
233{
234 int killk; /* number of klingons killed */
235 int deaths; /* number of deaths onboard Enterprise */
236 char negenbar; /* number of hits on negative energy barrier */
237 char killb; /* number of starbases killed */
238 int kills; /* number of stars killed */
239 char skill; /* skill rating of player */
240 char length; /* length of game */
241 char killed; /* set if you were killed */
242 char killinhab; /* number of inhabited starsystems killed */
243 char tourn; /* set if a tournament game */
244 char passwd[15]; /* game password */
245 char snap; /* set if snapshot taken */
246 char helps; /* number of help calls */
247 int captives; /* total number of captives taken */
248} Game;
249
250/* per move information */
251struct
252{
253 char free; /* set if a move is free */
254 char endgame; /* end of game flag */
255 char shldchg; /* set if shields changed this move */
256 char newquad; /* set if just entered this quadrant */
257 char resting; /* set if this move is a rest */
06d69904 258 double time; /* time used this move */
80079f16
KM
259} Move;
260
261/* parametric information */
262struct
263{
264 char bases; /* number of starbases */
265 char klings; /* number of klingons */
06d69904
KL
266 double date; /* stardate */
267 double time; /* time left */
268 double resource; /* Federation resources */
80079f16
KM
269 int energy; /* starship's energy */
270 int shield; /* energy in shields */
06d69904 271 double reserves; /* life support reserves */
80079f16
KM
272 int crew; /* size of ship's complement */
273 int brigfree; /* max possible number of captives */
274 char torped; /* photon torpedos */
06d69904
KL
275 double damfac[NDEV]; /* damage factor */
276 double dockfac; /* docked repair time factor */
277 double regenfac; /* regeneration factor */
80079f16
KM
278 int stopengy; /* energy to do emergency stop */
279 int shupengy; /* energy to put up shields */
280 int klingpwr; /* Klingon initial power */
281 int warptime; /* time chewer multiplier */
06d69904 282 double phasfac; /* Klingon phaser power eater factor */
80079f16 283 char moveprob[6]; /* probability that a Klingon moves */
06d69904
KL
284 double movefac[6]; /* Klingon move distance multiplier */
285 double eventdly[NEVENTS]; /* event time multipliers */
286 double navigcrud[2]; /* navigation crudup factor */
80079f16 287 int cloakenergy; /* cloaking device energy per stardate */
06d69904
KL
288 double damprob[NDEV]; /* damage probability */
289 double hitfac; /* Klingon attack factor */
80079f16 290 int klingcrew; /* number of Klingons in a crew */
06d69904 291 double srndrprob; /* surrender probability */
80079f16
KM
292 int energylow; /* low energy mark (cond YELLOW) */
293} Param;
294
295/* Sum of damage probabilities must add to 1000 */
296
297/* other information kept in a snapshot */
298struct
299{
300 char bases; /* number of starbases */
301 char klings; /* number of klingons */
06d69904
KL
302 double date; /* stardate */
303 double time; /* time left */
304 double resource; /* Federation resources */
80079f16
KM
305 char distressed; /* number of currently distressed quadrants */
306 struct event *eventptr[NEVENTS]; /* pointer to event structs */
307 struct xy base[MAXBASES]; /* locations of starbases */
308} Now;
309
310/* Other stuff, not dumped in a snapshot */
311struct
312{
313 struct kling klingon[MAXKLQUAD]; /* sorted Klingon list */
314 char nkling; /* number of Klingons in this sector */
315 /* < 0 means automatic override mode */
316 char fast; /* set if speed > 300 baud */
317 struct xy starbase; /* starbase in current quadrant */
318 char snapshot[sizeof Quad + sizeof Event + sizeof Now]; /* snapshot for time warp */
319 char statreport; /* set to get a status report on a srscan */
320} Etc;
321
322/*
323 * eventptr is a pointer to the event[] entry of the last
324 * scheduled event of each type. Zero if no such event scheduled.
325 */
326
327/* Klingon move indicies */
328# define KM_OB 0 /* Old quadrant, Before attack */
329# define KM_OA 1 /* Old quadrant, After attack */
330# define KM_EB 2 /* Enter quadrant, Before attack */
331# define KM_EA 3 /* Enter quadrant, After attack */
332# define KM_LB 4 /* Leave quadrant, Before attack */
333# define KM_LA 5 /* Leave quadrant, After attack */
334
335/* you lose codes */
336# define L_NOTIME 1 /* ran out of time */
337# define L_NOENGY 2 /* ran out of energy */
338# define L_DSTRYD 3 /* destroyed by a Klingon */
339# define L_NEGENB 4 /* ran into the negative energy barrier */
340# define L_SUICID 5 /* destroyed in a nova */
341# define L_SNOVA 6 /* destroyed in a supernova */
342# define L_NOLIFE 7 /* life support died (so did you) */
343# define L_NOHELP 8 /* you could not be rematerialized */
344# define L_TOOFAST 9 /* pretty stupid going at warp 10 */
345# define L_STAR 10 /* ran into a star */
346# define L_DSTRCT 11 /* self destructed */
347# define L_CAPTURED 12 /* captured by Klingons */
348# define L_NOCREW 13 /* you ran out of crew */
349
350/****************** COMPILE OPTIONS ***********************/
351
352/* Trace info */
353# define xTRACE 1
354int Trace;