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