\r
// #define DEBUG\r
\r
-#define ndevice (15) // Number of devices\r
-#define phasefac (2.0)\r
+#define NDEVICES (15) // Number of devices\r
+#define PHASEFAC (2.0)\r
#define PLNETMAX (10)\r
#define NEVENTS (8)\r
\r
typedef struct {\r
- int x; /* Quadrant location of planet */\r
- int y;\r
- int pclass; /* class M, N, or O (1, 2, or 3) */\r
- int crystals; /* has crystals */\r
- int known; /* =1 contents known, =2 shuttle on this planet */\r
-} PLANETS;\r
+ int x; /* Quadrant location of planet */\r
+ int y;\r
+ enum {M=0, N=1, O=2} pclass;\r
+ int crystals; /* has crystals */\r
+ enum {unknown, known, shuttle_down} known;\r
+} planet;\r
\r
-EXTERN struct foo {\r
- int snap, // snapshot taken\r
- remkl, // remaining klingons\r
- remcom, // remaining commanders\r
- rembase, // remaining bases\r
- starkl, // destroyed stars\r
- basekl, // destroyed bases\r
- killk, // Klingons killed\r
- killc, // commanders killed\r
- galaxy[9][9], // The Galaxy (subscript 0 not used)\r
- cx[11],cy[11], // Commander quadrant coordinates\r
- baseqx[6], // Base quadrant X\r
- baseqy[6], // Base quadrant Y\r
- newstuf[9][9], // Extended galaxy goodies\r
- isx, isy, // Coordinate of Super Commander\r
- nscrem, // remaining super commanders\r
- nromkl, // Romulans killed\r
- nromrem, // Romulans remaining\r
- nsckill, // super commanders killed\r
- nplankl; // destroyed planets\r
- PLANETS plnets[PLNETMAX+1]; // Planet information\r
+#define DESTROY(pl) memset(pl, '\0', sizeof(planet))\r
+\r
+typedef struct {\r
+ int snap, // snapshot taken\r
+ remkl, // remaining klingons\r
+ remcom, // remaining commanders\r
+ rembase, // remaining bases\r
+ starkl, // destroyed stars\r
+ basekl, // destroyed bases\r
+ killk, // Klingons killed\r
+ killc, // commanders killed\r
+ galaxy[9][9], // The Galaxy (subscript 0 not used)\r
+ cx[11],cy[11], // Commander quadrant coordinates\r
+ baseqx[6], // Base quadrant X\r
+ baseqy[6], // Base quadrant Y\r
+ newstuf[9][9], // Extended galaxy goodies\r
+ isx, isy, // Coordinate of Super Commander\r
+ nscrem, // remaining super commanders\r
+ nromkl, // Romulans killed\r
+ nromrem, // Romulans remaining\r
+ nsckill, // super commanders killed\r
+ nplankl; // destroyed planets\r
+ planet plnets[PLNETMAX]; // Planet information\r
double date, // stardate\r
- remres, // remaining resources\r
+ remres, // remaining resources\r
remtime; // remaining time\r
-} state, snapsht; // Data that is snapshot\r
+} snapshot; // Data that is snapshot\r
\r
// Scalar variables that are needed for freezing the game\r
// are placed in a structure. #defines are used to access by their\r
// original names. Gee, I could have done this with the d structure,\r
// but I just didn't think of it back when I started.\r
\r
-EXTERN struct foo2 {\r
+#define SSTMAGIC "SST2.0\n"\r
+\r
+EXTERN struct {\r
+ char magic[sizeof(SSTMAGIC)];\r
+ snapshot state;\r
+ snapshot snapsht;\r
char quad[11][11]; // contents of our quadrant\r
double kpower[21]; // enemy energy levels\r
double kdist[21]; // enemy distances\r
double kavgd[21]; // average distances\r
- double damage[ndevice+1]; // damage encountered\r
+ double damage[NDEVICES+1]; // damage encountered\r
double future[NEVENTS+1]; // future events\r
char passwd[10]; // Self Destruct password\r
int kx[21]; // enemy sector locations\r
proben,\r
isarmed,\r
nprobes;\r
- double inresor,\r
+ double inresor,\r
intime,\r
inenrg,\r
inshld,\r
probey,\r
probeinx,\r
probeiny;\r
-} frozen;\r
+} game;\r
\r
-#define inkling frozen.inkling // Initial number of klingons\r
-#define inbase frozen.inbase // Initial number of bases\r
-#define incom frozen.incom // Initian number of commanders\r
-#define instar frozen.instar // Initial stars\r
-#define intorps frozen.intorps // Initial/Max torpedoes\r
-#define condit frozen.condit // Condition (red, yellow, green docked)\r
-#define torps frozen.torps // number of torpedoes\r
-#define ship frozen.ship // Ship type -- 'E' is Enterprise\r
-#define quadx frozen.quadx // where we are\r
-#define quady frozen.quady //\r
-#define sectx frozen.sectx // where we are\r
-#define secty frozen.secty //\r
-#define length frozen.length // length of game\r
-#define skill frozen.skill // skill level\r
-#define basex frozen.basex // position of base in current quad\r
-#define basey frozen.basey //\r
-#define klhere frozen.klhere // klingons here\r
-#define comhere frozen.comhere // commanders here\r
-#define casual frozen.casual // causalties\r
-#define nhelp frozen.nhelp // calls for help\r
-#define nkinks frozen.nkinks //\r
-#define ididit frozen.ididit // Action taken -- allows enemy to attack\r
-#define gamewon frozen.gamewon // Finished!\r
-#define alive frozen.alive // We are alive (not killed)\r
-#define justin frozen.justin // just entered quadrant\r
-#define alldone frozen.alldone // game is now finished\r
-#define shldchg frozen.shldchg // shield is changing (affects efficiency)\r
-#define thingx frozen.thingx // location of strange object in galaxy\r
-#define thingy frozen.thingy //\r
-#define plnetx frozen.plnetx // location of planet in quadrant\r
-#define plnety frozen.plnety //\r
-#define inorbit frozen.inorbit // orbiting\r
-#define landed frozen.landed // party on planet (1), on ship (-1)\r
-#define iplnet frozen.iplnet // planet # in quadrant\r
-#define imine frozen.imine // mining\r
-#define inplan frozen.inplan // initial planets\r
-#define nenhere frozen.nenhere // Number of enemies in quadrant\r
-#define ishere frozen.ishere // Super-commander in quandrant\r
-#define neutz frozen.neutz // Romulan Neutral Zone\r
-#define irhere frozen.irhere // Romulans in quadrant\r
-#define icraft frozen.icraft // Kirk in Galileo\r
-#define ientesc frozen.ientesc // Attempted escape from supercommander\r
-#define iscraft frozen.iscraft // =1 if craft on ship, -1 if removed from game\r
-#define isatb frozen.isatb // =1 if SuperCommander is attacking base\r
-#define iscate frozen.iscate // Super Commander is here\r
+#define inkling game.inkling // Initial number of klingons\r
+#define inbase game.inbase // Initial number of bases\r
+#define incom game.incom // Initian number of commanders\r
+#define instar game.instar // Initial stars\r
+#define intorps game.intorps // Initial/Max torpedoes\r
+#define condit game.condit // Condition (red, yellow, green docked)\r
+#define torps game.torps // number of torpedoes\r
+#define ship game.ship // Ship type -- 'E' is Enterprise\r
+#define quadx game.quadx // where we are\r
+#define quady game.quady //\r
+#define sectx game.sectx // where we are\r
+#define secty game.secty //\r
+#define length game.length // length of game\r
+#define skill game.skill // skill level\r
+#define basex game.basex // position of base in current quad\r
+#define basey game.basey //\r
+#define klhere game.klhere // klingons here\r
+#define comhere game.comhere // commanders here\r
+#define casual game.casual // causalties\r
+#define nhelp game.nhelp // calls for help\r
+#define nkinks game.nkinks //\r
+#define ididit game.ididit // Action taken -- allows enemy to attack\r
+#define gamewon game.gamewon // Finished!\r
+#define alive game.alive // We are alive (not killed)\r
+#define justin game.justin // just entered quadrant\r
+#define alldone game.alldone // game is now finished\r
+#define shldchg game.shldchg // shield is changing (affects efficiency)\r
+#define thingx game.thingx // location of strange object in galaxy\r
+#define thingy game.thingy //\r
+#define plnetx game.plnetx // location of planet in quadrant\r
+#define plnety game.plnety //\r
+#define inorbit game.inorbit // orbiting\r
+#define landed game.landed // party on planet (1), on ship (-1)\r
+#define iplnet game.iplnet // planet # in quadrant\r
+#define imine game.imine // mining\r
+#define inplan game.inplan // initial planets\r
+#define nenhere game.nenhere // Number of enemies in quadrant\r
+#define ishere game.ishere // Super-commander in quandrant\r
+#define neutz game.neutz // Romulan Neutral Zone\r
+#define irhere game.irhere // Romulans in quadrant\r
+#define icraft game.icraft // Kirk in Galileo\r
+#define ientesc game.ientesc // Attempted escape from supercommander\r
+#define iscraft game.iscraft // =1 if craft on ship, -1 if removed from game\r
+#define isatb game.isatb // =1 if SuperCommander is attacking base\r
+#define iscate game.iscate // Super Commander is here\r
#ifdef DEBUG\r
-#define idebug frozen.idebug // Debug mode\r
+#define idebug game.idebug // Debug mode\r
#endif\r
-#define iattak frozen.iattak // attack recursion elimination (was cracks[4])\r
-#define icrystl frozen.icrystl // dilithium crystals aboard\r
-#define tourn frozen.tourn // Tournament number\r
-#define thawed frozen.thawed // Thawed game\r
-#define batx frozen.batx // Base coordinates being attacked\r
-#define baty frozen.baty //\r
-#define ithere frozen.ithere // Tholean is here \r
-#define ithx frozen.ithx // coordinates of tholean\r
-#define ithy frozen.ithy\r
-#define iseenit frozen.iseenit // Seen base attack report\r
-#define inresor frozen.inresor // initial resources\r
-#define intime frozen.intime // initial time\r
-#define inenrg frozen.inenrg // Initial/Max Energy\r
-#define inshld frozen.inshld // Initial/Max Shield\r
-#define inlsr frozen.inlsr // initial life support resources\r
-#define indate frozen.indate // Initial date\r
-#define energy frozen.energy // Energy level\r
-#define shield frozen.shield // Shield level\r
-#define shldup frozen.shldup // Shields are up\r
-#define warpfac frozen.warpfac // Warp speed\r
-#define wfacsq frozen.wfacsq // squared warp factor\r
-#define lsupres frozen.lsupres // life support reserves\r
-#define dist frozen.dist // movement distance\r
-#define direc frozen.direc // movement direction\r
-#define Time frozen.Time // time taken by current operation\r
-#define docfac frozen.docfac // repair factor when docking (constant?)\r
-#define resting frozen.resting // rest time\r
-#define damfac frozen.damfac // damage factor\r
-#define stdamtim frozen.stdamtim // time that star chart was damaged\r
-#define cryprob frozen.cryprob // probability that crystal will work\r
-#define probex frozen.probex // location of probe\r
-#define probey frozen.probey\r
-#define probecx frozen.probecx // current probe quadrant\r
-#define probecy frozen.probecy \r
-#define probeinx frozen.probeinx // Probe x,y increment\r
-#define probeiny frozen.probeiny \r
-#define proben frozen.proben // number of moves for probe\r
-#define isarmed frozen.isarmed // Probe is armed\r
-#define nprobes frozen.nprobes // number of probes available\r
+#define iattak game.iattak // attack recursion elimination (was cracks[4])\r
+#define icrystl game.icrystl // dilithium crystals aboard\r
+#define tourn game.tourn // Tournament number\r
+#define thawed game.thawed // Thawed game\r
+#define batx game.batx // Base coordinates being attacked\r
+#define baty game.baty //\r
+#define ithere game.ithere // Tholean is here \r
+#define ithx game.ithx // coordinates of tholean\r
+#define ithy game.ithy\r
+#define iseenit game.iseenit // Seen base attack report\r
+#define inresor game.inresor // initial resources\r
+#define intime game.intime // initial time\r
+#define inenrg game.inenrg // Initial/Max Energy\r
+#define inshld game.inshld // Initial/Max Shield\r
+#define inlsr game.inlsr // initial life support resources\r
+#define indate game.indate // Initial date\r
+#define energy game.energy // Energy level\r
+#define shield game.shield // Shield level\r
+#define shldup game.shldup // Shields are up\r
+#define warpfac game.warpfac // Warp speed\r
+#define wfacsq game.wfacsq // squared warp factor\r
+#define lsupres game.lsupres // life support reserves\r
+#define dist game.dist // movement distance\r
+#define direc game.direc // movement direction\r
+#define Time game.Time // time taken by current operation\r
+#define docfac game.docfac // repair factor when docking (constant?)\r
+#define resting game.resting // rest time\r
+#define damfac game.damfac // damage factor\r
+#define stdamtim game.stdamtim // time that star chart was damaged\r
+#define cryprob game.cryprob // probability that crystal will work\r
+#define probex game.probex // location of probe\r
+#define probey game.probey\r
+#define probecx game.probecx // current probe quadrant\r
+#define probecy game.probecy \r
+#define probeinx game.probeinx // Probe x,y increment\r
+#define probeiny game.probeiny \r
+#define proben game.proben // number of moves for probe\r
+#define isarmed game.isarmed // Probe is armed\r
+#define nprobes game.nprobes // number of probes available\r
\r
/* the following global state doesn't need to be saved */\r
EXTERN int fromcommandline; // Game start from command line options\r
-EXTERN char *device[ndevice+1];\r
-EXTERN PLANETS nulplanet; // zeroed planet structure\r
+EXTERN char *device[NDEVICES+1];\r
EXTERN int iscore, iskill; // Common PLAQ\r
EXTERN double perdate;\r
+EXTERN double aaitem;\r
+EXTERN char citem[10];\r
\r
typedef enum {FWON, FDEPLETE, FLIFESUP, FNRG, FBATTLE,\r
FNEG3, FNOVA, FSNOVAED, FABANDN, FDILITHIUM,\r
FMATERIALIZE, FPHASER, FLOST, FMINING, FDPLANET,\r
FPNOVA, FSSC, FSTRACTOR, FDRAY, FTRIBBLE,\r
FHOLE} FINTYPE ;\r
-\r
-\r
-EXTERN double aaitem;\r
-EXTERN char citem[10];\r
-\r
+enum loctype {neither, quadrant, sector};\r
\r
/* Define devices */\r
#define DSRSENS 1\r
#define FDSPROB 8 // Move deep space probe\r
\r
#ifdef INCLUDED\r
-PLANETS nulplanet = {0};\r
-char *device[ndevice+1] = {\r
+char *device[NDEVICES+1] = {\r
"",\r
"S. R. Sensors",\r
"L. R. Sensors",\r
void chew(void);\r
void chew2(void);\r
void skip(int);\r
-void prout(char *s);\r
-void proutn(char *s);\r
+void prout(char *, ...);\r
+void proutn(char *, ...);\r
void stars(void);\r
void newqad(int);\r
int ja(void);\r
void cramen(int);\r
void crmshp(void);\r
-void cramlc(int, int, int);\r
+char *cramlc(enum loctype, int, int);\r
double expran(double);\r
double Rand(void);\r
void iran8(int *, int *);\r
void timwrp(void);\r
void movcom(void);\r
void torpedo(double, double, int, int, double *);\r
-void cramf(double, int, int);\r
-void crami(int, int);\r
void huh(void);\r
void pause(int);\r
void nova(int, int);\r
void snova(int, int);\r
void scom(int *);\r
void hittem(double *);\r
-void prouts(char *);\r
+void prouts(char *, ...);\r
int isit(char *);\r
void preport(void);\r
void orbit(void);\r