78b8ca46d3b6b371fd83bf96a234e3240323b2c3
[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 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 } frozen;\r
149 \r
150 #define inkling frozen.inkling          // Initial number of klingons\r
151 #define inbase frozen.inbase                    // Initial number of bases\r
152 #define incom frozen.incom                      // Initian number of commanders\r
153 #define instar frozen.instar                    // Initial stars\r
154 #define intorps frozen.intorps          // Initial/Max torpedoes\r
155 #define condit frozen.condit                    // Condition (red, yellow, green docked)\r
156 #define torps frozen.torps                      // number of torpedoes\r
157 #define ship frozen.ship                                // Ship type -- 'E' is Enterprise\r
158 #define quadx frozen.quadx                      // where we are\r
159 #define quady frozen.quady                      //\r
160 #define sectx frozen.sectx                      // where we are\r
161 #define secty frozen.secty                      //\r
162 #define length frozen.length                    // length of game\r
163 #define skill frozen.skill                      // skill level\r
164 #define basex frozen.basex                      // position of base in current quad\r
165 #define basey frozen.basey                      //\r
166 #define klhere frozen.klhere                    // klingons here\r
167 #define comhere frozen.comhere          // commanders here\r
168 #define casual frozen.casual                    // causalties\r
169 #define nhelp frozen.nhelp                      // calls for help\r
170 #define nkinks frozen.nkinks                    //\r
171 #define ididit frozen.ididit                    // Action taken -- allows enemy to attack\r
172 #define gamewon frozen.gamewon          // Finished!\r
173 #define alive frozen.alive                      // We are alive (not killed)\r
174 #define justin frozen.justin                    // just entered quadrant\r
175 #define alldone frozen.alldone          // game is now finished\r
176 #define shldchg frozen.shldchg          // shield is changing (affects efficiency)\r
177 #define thingx frozen.thingx                    // location of strange object in galaxy\r
178 #define thingy frozen.thingy                    //\r
179 #define plnetx frozen.plnetx                    // location of planet in quadrant\r
180 #define plnety frozen.plnety                    //\r
181 #define inorbit frozen.inorbit          // orbiting\r
182 #define landed frozen.landed                    // party on planet (1), on ship (-1)\r
183 #define iplnet frozen.iplnet                    // planet # in quadrant\r
184 #define imine frozen.imine                      // mining\r
185 #define inplan frozen.inplan                    // initial planets\r
186 #define nenhere frozen.nenhere          // Number of enemies in quadrant\r
187 #define ishere frozen.ishere                    // Super-commander in quandrant\r
188 #define neutz frozen.neutz                      // Romulan Neutral Zone\r
189 #define irhere frozen.irhere                    // Romulans in quadrant\r
190 #define icraft frozen.icraft                    // Kirk in Galileo\r
191 #define ientesc frozen.ientesc          // Attempted escape from supercommander\r
192 #define iscraft frozen.iscraft          // =1 if craft on ship, -1 if removed from game\r
193 #define isatb frozen.isatb                      // =1 if SuperCommander is attacking base\r
194 #define iscate frozen.iscate                    // Super Commander is here\r
195 #ifdef DEBUG\r
196 #define idebug frozen.idebug                    // Debug mode\r
197 #endif\r
198 #define iattak frozen.iattak                    // attack recursion elimination (was cracks[4])\r
199 #define icrystl frozen.icrystl          // dilithium crystals aboard\r
200 #define tourn frozen.tourn                      // Tournament number\r
201 #define thawed frozen.thawed                    // Thawed game\r
202 #define batx frozen.batx                                // Base coordinates being attacked\r
203 #define baty frozen.baty                                //\r
204 #define ithere frozen.ithere                    // Tholean is here \r
205 #define ithx frozen.ithx                                // coordinates of tholean\r
206 #define ithy frozen.ithy\r
207 #define iseenit frozen.iseenit          // Seen base attack report\r
208 #define inresor frozen.inresor          // initial resources\r
209 #define intime frozen.intime                    // initial time\r
210 #define inenrg frozen.inenrg                    // Initial/Max Energy\r
211 #define inshld frozen.inshld                    // Initial/Max Shield\r
212 #define inlsr frozen.inlsr                      // initial life support resources\r
213 #define indate frozen.indate                    // Initial date\r
214 #define energy frozen.energy                    // Energy level\r
215 #define shield frozen.shield                    // Shield level\r
216 #define shldup frozen.shldup                    // Shields are up\r
217 #define warpfac frozen.warpfac          // Warp speed\r
218 #define wfacsq frozen.wfacsq                    // squared warp factor\r
219 #define lsupres frozen.lsupres          // life support reserves\r
220 #define dist frozen.dist                                // movement distance\r
221 #define direc frozen.direc                      // movement direction\r
222 #define Time frozen.Time                                // time taken by current operation\r
223 #define docfac frozen.docfac                    // repair factor when docking (constant?)\r
224 #define resting frozen.resting          // rest time\r
225 #define damfac frozen.damfac                    // damage factor\r
226 #define stdamtim frozen.stdamtim                // time that star chart was damaged\r
227 #define cryprob frozen.cryprob          // probability that crystal will work\r
228 #define probex frozen.probex                    // location of probe\r
229 #define probey frozen.probey\r
230 #define probecx frozen.probecx          // current probe quadrant\r
231 #define probecy frozen.probecy  \r
232 #define probeinx frozen.probeinx                // Probe x,y increment\r
233 #define probeiny frozen.probeiny                \r
234 #define proben frozen.proben                    // number of moves for probe\r
235 #define isarmed frozen.isarmed          // Probe is armed\r
236 #define nprobes frozen.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