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