Fix some C that gcc tags as unclean or unsafe. Rename 'a' structure to 'game'.
[super-star-trek.git] / sst.h
1 #include <stdio.h>\r
2 #include <math.h>\r
3 #include <stdlib.h>\r
4 #include <string.h>\r
5 #ifndef INCLUDED\r
6 #define EXTERN extern\r
7 #else\r
8 #define EXTERN\r
9 #endif\r
10 \r
11 // #define DEBUG\r
12 \r
13 #define ndevice (15)    // Number of devices\r
14 #define phasefac (2.0)\r
15 #define PLNETMAX (10)\r
16 #define NEVENTS (8)\r
17 \r
18 typedef struct {\r
19         int x;  /* Quadrant location of planet */\r
20         int y;\r
21         int pclass; /* class M, N, or O (1, 2, or 3) */\r
22         int crystals; /* has crystals */\r
23         int known;   /* =1 contents known, =2 shuttle on this planet */\r
24 } PLANETS;\r
25 \r
26 EXTERN struct foo {\r
27                 int snap,               // snapshot taken\r
28                 remkl,                  // remaining klingons\r
29             remcom,                     // remaining commanders\r
30                 rembase,                // remaining bases\r
31                 starkl,                 // destroyed stars\r
32                 basekl,                 // destroyed bases\r
33                 killk,                  // Klingons killed\r
34                 killc,                  // commanders killed\r
35                 galaxy[9][9],   // The Galaxy (subscript 0 not used)\r
36                 cx[11],cy[11],  // Commander quadrant coordinates\r
37                 baseqx[6],              // Base quadrant X\r
38                 baseqy[6],              // Base quadrant Y\r
39                 newstuf[9][9],  // Extended galaxy goodies\r
40                 isx, isy,               // Coordinate of Super Commander\r
41                 nscrem,                 // remaining super commanders\r
42                 nromkl,                 // Romulans killed\r
43                 nromrem,                // Romulans remaining\r
44                 nsckill,                // super commanders killed\r
45                 nplankl;                // destroyed planets\r
46         PLANETS plnets[PLNETMAX+1];  // Planet information\r
47         double date,            // stardate\r
48                 remres,                 // remaining resources\r
49             remtime;            // remaining time\r
50 } d, snapsht;                   // Data that is snapshot\r
51 \r
52 EXTERN char\r
53                 quad[11][11];   // contents of our quadrant\r
54 \r
55 // Scalar variables that are needed for freezing the game\r
56 // are placed in a structure. #defines are used to access by their\r
57 // original names. Gee, I could have done this with the d structure,\r
58 // but I just didn't think of it back when I started.\r
59 \r
60 EXTERN struct foo2 {\r
61         int inkling,\r
62         inbase,\r
63         incom,\r
64         instar,\r
65         intorps,\r
66         condit,\r
67         torps,\r
68         ship,\r
69         quadx,\r
70         quady,\r
71         sectx,\r
72         secty,\r
73         length,\r
74         skill,\r
75         basex,\r
76         basey,\r
77         klhere,\r
78         comhere,\r
79         casual,\r
80         nhelp,\r
81         nkinks,\r
82         ididit,\r
83         gamewon,\r
84         alive,\r
85         justin,\r
86         alldone,\r
87         shldchg,\r
88         thingx,\r
89         thingy,\r
90         plnetx,\r
91         plnety,\r
92         inorbit,\r
93         landed,\r
94         iplnet,\r
95         imine,\r
96         inplan,\r
97         nenhere,\r
98         ishere,\r
99         neutz,\r
100         irhere,\r
101         icraft,\r
102         ientesc,\r
103         iscraft,\r
104         isatb,\r
105         iscate,\r
106 #ifdef DEBUG\r
107         idebug,\r
108 #endif\r
109         iattak,\r
110         icrystl,\r
111         tourn,\r
112         thawed,\r
113         batx,\r
114         baty,\r
115         ithere,\r
116         ithx,\r
117         ithy,\r
118         iseenit,\r
119         probecx,\r
120         probecy,\r
121         proben,\r
122         isarmed,\r
123         nprobes;\r
124         double inresor,\r
125         intime,\r
126         inenrg,\r
127         inshld,\r
128         inlsr,\r
129         indate,\r
130         energy,\r
131         shield,\r
132         shldup,\r
133         warpfac,\r
134         wfacsq,\r
135         lsupres,\r
136         dist,\r
137         direc,\r
138         Time,\r
139         docfac,\r
140         resting,\r
141         damfac,\r
142         stdamtim,\r
143         cryprob,\r
144         probex,\r
145         probey,\r
146         probeinx,\r
147         probeiny;\r
148 } game;\r
149 \r
150 #define inkling game.inkling            // Initial number of klingons\r
151 #define inbase game.inbase                      // Initial number of bases\r
152 #define incom game.incom                        // Initian number of commanders\r
153 #define instar game.instar                      // Initial stars\r
154 #define intorps game.intorps            // Initial/Max torpedoes\r
155 #define condit game.condit                      // Condition (red, yellow, green docked)\r
156 #define torps game.torps                        // number of torpedoes\r
157 #define ship game.ship                          // Ship type -- 'E' is Enterprise\r
158 #define quadx game.quadx                        // where we are\r
159 #define quady game.quady                        //\r
160 #define sectx game.sectx                        // where we are\r
161 #define secty game.secty                        //\r
162 #define length game.length                      // length of game\r
163 #define skill game.skill                        // skill level\r
164 #define basex game.basex                        // position of base in current quad\r
165 #define basey game.basey                        //\r
166 #define klhere game.klhere                      // klingons here\r
167 #define comhere game.comhere            // commanders here\r
168 #define casual game.casual                      // causalties\r
169 #define nhelp game.nhelp                        // calls for help\r
170 #define nkinks game.nkinks                      //\r
171 #define ididit game.ididit                      // Action taken -- allows enemy to attack\r
172 #define gamewon game.gamewon            // Finished!\r
173 #define alive game.alive                        // We are alive (not killed)\r
174 #define justin game.justin                      // just entered quadrant\r
175 #define alldone game.alldone            // game is now finished\r
176 #define shldchg game.shldchg            // shield is changing (affects efficiency)\r
177 #define thingx game.thingx                      // location of strange object in galaxy\r
178 #define thingy game.thingy                      //\r
179 #define plnetx game.plnetx                      // location of planet in quadrant\r
180 #define plnety game.plnety                      //\r
181 #define inorbit game.inorbit            // orbiting\r
182 #define landed game.landed                      // party on planet (1), on ship (-1)\r
183 #define iplnet game.iplnet                      // planet # in quadrant\r
184 #define imine game.imine                        // mining\r
185 #define inplan game.inplan                      // initial planets\r
186 #define nenhere game.nenhere            // Number of enemies in quadrant\r
187 #define ishere game.ishere                      // Super-commander in quandrant\r
188 #define neutz game.neutz                        // Romulan Neutral Zone\r
189 #define irhere game.irhere                      // Romulans in quadrant\r
190 #define icraft game.icraft                      // Kirk in Galileo\r
191 #define ientesc game.ientesc            // Attempted escape from supercommander\r
192 #define iscraft game.iscraft            // =1 if craft on ship, -1 if removed from game\r
193 #define isatb game.isatb                        // =1 if SuperCommander is attacking base\r
194 #define iscate game.iscate                      // Super Commander is here\r
195 #ifdef DEBUG\r
196 #define idebug game.idebug                      // Debug mode\r
197 #endif\r
198 #define iattak game.iattak                      // attack recursion elimination (was cracks[4])\r
199 #define icrystl game.icrystl            // dilithium crystals aboard\r
200 #define tourn game.tourn                        // Tournament number\r
201 #define thawed game.thawed                      // Thawed game\r
202 #define batx game.batx                          // Base coordinates being attacked\r
203 #define baty game.baty                          //\r
204 #define ithere game.ithere                      // Tholean is here \r
205 #define ithx game.ithx                          // coordinates of tholean\r
206 #define ithy game.ithy\r
207 #define iseenit game.iseenit            // Seen base attack report\r
208 #define inresor game.inresor            // initial resources\r
209 #define intime game.intime                      // initial time\r
210 #define inenrg game.inenrg                      // Initial/Max Energy\r
211 #define inshld game.inshld                      // Initial/Max Shield\r
212 #define inlsr game.inlsr                        // initial life support resources\r
213 #define indate game.indate                      // Initial date\r
214 #define energy game.energy                      // Energy level\r
215 #define shield game.shield                      // Shield level\r
216 #define shldup game.shldup                      // Shields are up\r
217 #define warpfac game.warpfac            // Warp speed\r
218 #define wfacsq game.wfacsq                      // squared warp factor\r
219 #define lsupres game.lsupres            // life support reserves\r
220 #define dist game.dist                          // movement distance\r
221 #define direc game.direc                        // movement direction\r
222 #define Time game.Time                          // time taken by current operation\r
223 #define docfac game.docfac                      // repair factor when docking (constant?)\r
224 #define resting game.resting            // rest time\r
225 #define damfac game.damfac                      // damage factor\r
226 #define stdamtim game.stdamtim          // time that star chart was damaged\r
227 #define cryprob game.cryprob            // probability that crystal will work\r
228 #define probex game.probex                      // location of probe\r
229 #define probey game.probey\r
230 #define probecx game.probecx            // current probe quadrant\r
231 #define probecy game.probecy    \r
232 #define probeinx game.probeinx          // Probe x,y increment\r
233 #define probeiny game.probeiny          \r
234 #define proben game.proben                      // number of moves for probe\r
235 #define isarmed game.isarmed            // Probe is armed\r
236 #define nprobes game.nprobes            // number of probes available\r
237 \r
238 EXTERN int\r
239                 kx[21],                 // enemy sector locations\r
240                 ky[21],\r
241                 starch[9][9];   // star chart\r
242 \r
243 EXTERN int fromcommandline; // Game start from command line options\r
244 \r
245 \r
246 EXTERN char     passwd[10],             // Self Destruct password\r
247                 *device[ndevice+1];\r
248 \r
249 EXTERN PLANETS nulplanet;       // zeroed planet structure\r
250 \r
251 EXTERN double\r
252                 kpower[21],             // enemy energy levels\r
253                 kdist[21],              // enemy distances\r
254                 kavgd[21],              // average distances\r
255                 damage[ndevice+1],              // damage encountered\r
256                 future[NEVENTS+1];              // future events\r
257 \r
258 EXTERN int iscore, iskill; // Common PLAQ\r
259 EXTERN double perdate;\r
260 \r
261 typedef enum {FWON, FDEPLETE, FLIFESUP, FNRG, FBATTLE,\r
262               FNEG3, FNOVA, FSNOVAED, FABANDN, FDILITHIUM,\r
263                           FMATERIALIZE, FPHASER, FLOST, FMINING, FDPLANET,\r
264                           FPNOVA, FSSC, FSTRACTOR, FDRAY, FTRIBBLE,\r
265                           FHOLE} FINTYPE ;\r
266 \r
267 \r
268 EXTERN double aaitem;\r
269 EXTERN char citem[10];\r
270 \r
271 \r
272 /* Define devices */\r
273 #define DSRSENS 1\r
274 #define DLRSENS 2\r
275 #define DPHASER 3\r
276 #define DPHOTON 4\r
277 #define DLIFSUP 5\r
278 #define DWARPEN 6\r
279 #define DIMPULS 7\r
280 #define DSHIELD 8\r
281 #define DRADIO  9\r
282 #define DSHUTTL 10\r
283 #define DCOMPTR 11\r
284 #define DTRANSP 12\r
285 #define DSHCTRL 13\r
286 #define DDRAY   14  // Added deathray\r
287 #define DDSP    15  // Added deep space probe\r
288 \r
289 /* Define future events */\r
290 #define FSPY    0       // Spy event happens always (no future[] entry)\r
291                                         // can cause SC to tractor beam Enterprise\r
292 #define FSNOVA  1   // Supernova\r
293 #define FTBEAM  2   // Commander tractor beams Enterprise\r
294 #define FSNAP   3   // Snapshot for time warp\r
295 #define FBATTAK 4   // Commander attacks base\r
296 #define FCDBAS  5   // Commander destroys base\r
297 #define FSCMOVE 6   // Supercommander moves (might attack base)\r
298 #define FSCDBAS 7   // Supercommander destroys base\r
299 #define FDSPROB 8   // Move deep space probe\r
300 \r
301 #ifdef INCLUDED\r
302 PLANETS nulplanet = {0};\r
303 char *device[ndevice+1] = {\r
304         "",\r
305         "S. R. Sensors",\r
306         "L. R. Sensors",\r
307         "Phasers",\r
308         "Photon Tubes",\r
309         "Life Support",\r
310         "Warp Engines",\r
311         "Impulse Engines",\r
312         "Shields",\r
313         "Subspace Radio",\r
314         "Shuttle Craft",\r
315         "Computer",\r
316         "Transporter",\r
317         "Shield Control",\r
318     "Death Ray",\r
319     "D. S. Probe"};                                                                     \r
320 #endif\r
321 \r
322 #define TRUE (1)\r
323 #define FALSE (0)\r
324 \r
325 #define IHR 'R'\r
326 #define IHK 'K'\r
327 #define IHC 'C'\r
328 #define IHS 'S'\r
329 #define IHSTAR '*'\r
330 #define IHP 'P'\r
331 #define IHB 'B'\r
332 #define IHBLANK ' '\r
333 #define IHDOT '.'\r
334 #define IHQUEST '?'\r
335 #define IHE 'E'\r
336 #define IHF 'F'\r
337 #define IHT 'T'\r
338 #define IHWEB '#'\r
339 #define IHGREEN 'G'\r
340 #define IHYELLOW 'Y'\r
341 #define IHRED 'R'\r
342 #define IHDOCKED 'D'\r
343 \r
344 \r
345 /* Function prototypes */\r
346 void prelim(void);\r
347 void attack(int);\r
348 int choose(void);\r
349 void setup(void);\r
350 void score(void);\r
351 void atover(int);\r
352 void srscan(int);\r
353 void lrscan(void);\r
354 void phasers(void);\r
355 void photon(void);\r
356 void warp(int);\r
357 void doshield(int);\r
358 void dock(void);\r
359 void dreprt(void);\r
360 void chart(int);\r
361 void impuls(void);\r
362 void wait(void);\r
363 void setwrp(void);\r
364 void events(void);\r
365 void report(int);\r
366 void eta(void);\r
367 void help(void);\r
368 void abandn(void);\r
369 void finish(FINTYPE);\r
370 void dstrct(void);\r
371 void kaboom(void);\r
372 void freeze(int);\r
373 void thaw(void);\r
374 void plaque(void);\r
375 int scan(void);\r
376 #define IHEOL (0)\r
377 #define IHALPHA (1)\r
378 #define IHREAL (2)\r
379 void chew(void);\r
380 void chew2(void);\r
381 void skip(int);\r
382 void prout(char *s);\r
383 void proutn(char *s);\r
384 void stars(void);\r
385 void newqad(int);\r
386 int ja(void);\r
387 void cramen(int);\r
388 void crmshp(void);\r
389 void cramlc(int, int, int);\r
390 double expran(double);\r
391 double Rand(void);\r
392 void iran8(int *, int *);\r
393 void iran10(int *, int *);\r
394 double square(double);\r
395 void dropin(int, int*, int*);\r
396 void newcnd(void);\r
397 void sortkl(void);\r
398 void move(void);\r
399 void ram(int, int, int, int);\r
400 void crmena(int, int, int, int, int);\r
401 void deadkl(int, int, int, int, int);\r
402 void timwrp(void);\r
403 void movcom(void);\r
404 void torpedo(double, double, int, int, double *);\r
405 void cramf(double, int, int);\r
406 void crami(int, int);\r
407 void huh(void);\r
408 void pause(int);\r
409 void nova(int, int);\r
410 void snova(int, int);\r
411 void scom(int *);\r
412 void hittem(double *);\r
413 void prouts(char *);\r
414 int isit(char *);\r
415 void preport(void);\r
416 void orbit(void);\r
417 void sensor(void);\r
418 void beam(void);\r
419 void mine(void);\r
420 void usecrystals(void);\r
421 void shuttle(void);\r
422 void deathray(void);\r
423 void debugme(void);\r
424 void attakreport(void);\r
425 void movetho(void);\r
426 void probe(void);\r