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