xref: /original-bsd/games/trek/trek.h (revision bcd9e7a3)
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  *	@(#)trek.h	8.1 (Berkeley) 05/31/93
8  */
9 
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 */
29 extern double	franf();	/* floating random number function */
30 extern double	sqrt();		/* square root */
31 extern double	sin(), cos();	/* trig functions */
32 extern double	atan2();	/* fancy arc tangent function */
33 extern double	log();		/* log base e */
34 extern double	pow();		/* power function */
35 extern double	fabs();		/* absolute value function */
36 extern 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 
45 struct 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 */
52 	char	qsystemname;	/* starsystem name (see below) */
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 */
73 extern char	*Systemname[NINHAB];
74 
75 /* quadrant definition */
76 struct 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 */
89 char	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 */
113 struct device
114 {
115 	char	*name;		/* device name */
116 	char	*person;	/* the person who fixes it */
117 };
118 
119 struct 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 
140 struct event
141 {
142 	char	x, y;			/* coordinates */
143 	double	date;			/* trap stardate */
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 
159 struct event	Event[MAXEVENTS];	/* dynamic event list; one entry per pending event */
160 
161 /*****************************  KLINGONS  *******************************/
162 
163 struct kling
164 {
165 	char	x, y;		/* coordinates */
166 	int	power;		/* power left */
167 	double	dist;		/* distance to Enterprise */
168 	double	avgdist;	/* average over this move */
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 
191 struct 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 */
204 struct
205 {
206 	double	warp;		/* warp factor */
207 	double	warp2;		/* warp factor squared */
208 	double	warp3;		/* warp factor cubed */
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 */
213 	double	reserves;	/* life support reserves */
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 */
226 	int	distressed;	/* number of distress calls */
227 }	Ship;
228 
229 /* sinsbad is set if SINS is working but not calibrated */
230 
231 /* game related information, mostly scoring */
232 struct
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 */
251 struct
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 */
258 	double	time;		/* time used this move */
259 }	Move;
260 
261 /* parametric information */
262 struct
263 {
264 	char	bases;		/* number of starbases */
265 	char	klings;		/* number of klingons */
266 	double	date;		/* stardate */
267 	double	time;		/* time left */
268 	double	resource;	/* Federation resources */
269 	int	energy;		/* starship's energy */
270 	int	shield;		/* energy in shields */
271 	double	reserves;	/* life support reserves */
272 	int	crew;		/* size of ship's complement */
273 	int	brigfree;	/* max possible number of captives */
274 	char	torped;		/* photon torpedos */
275 	double	damfac[NDEV];	/* damage factor */
276 	double	dockfac;	/* docked repair time factor */
277 	double	regenfac;	/* regeneration factor */
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 */
282 	double	phasfac;	/* Klingon phaser power eater factor */
283 	char	moveprob[6];	/* probability that a Klingon moves */
284 	double	movefac[6];	/* Klingon move distance multiplier */
285 	double	eventdly[NEVENTS];	/* event time multipliers */
286 	double	navigcrud[2];	/* navigation crudup factor */
287 	int	cloakenergy;	/* cloaking device energy per stardate */
288 	double	damprob[NDEV];	/* damage probability */
289 	double	hitfac;		/* Klingon attack factor */
290 	int	klingcrew;	/* number of Klingons in a crew */
291 	double	srndrprob;	/* surrender probability */
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 */
298 struct
299 {
300 	char	bases;		/* number of starbases */
301 	char	klings;		/* number of klingons */
302 	double	date;		/* stardate */
303 	double	time;		/* time left */
304 	double	resource;	/* Federation resources */
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 */
311 struct
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
354 int	Trace;
355