X-Git-Url: https://jxself.org/git/?p=super-star-trek.git;a=blobdiff_plain;f=sst.h;h=e186dc0ab97fe2abaf5f4179f2a86d028c6e4e33;hp=78596102d81c987fcc8c7018ac48fe7f5c2336e3;hb=5266b3b1bdcdd49f04fe5dae3f01b609e8b7f01e;hpb=65b9a64fa507a2ec318ffaea1d8fdb070245c581 diff --git a/sst.h b/sst.h index 7859610..e186dc0 100644 --- a/sst.h +++ b/sst.h @@ -16,10 +16,21 @@ #define PHASEFAC (2.0) #define PLNETMAX (10) -#define NEVENTS (8) #define GALSIZE (8) #define QUADSIZE (10) -#define BASEMAX (6) +#define BASEMAX (5) + +/* + * These macros hide the difference between 0-origin and 1-origin addressing. + * They're a step towards de-FORTRANizing the code. + */ +#define VALID_QUADRANT(x, y) ((x)>=1 && (x)<=GALSIZE && (y)>=1 && (y)<=GALSIZE) +#define VALID_SECTOR(x, y) ((x)>=1 && (x)<=QUADSIZE && (y)>=1 && (y)<=QUADSIZE) +#define for_quadrants(i) for (i = 1; i <= GALSIZE; i++) +#define for_sectors(i) for (i = 1; i <= QUADSIZE; i++) +#define for_commanders(i) for (i = 1; i <= game.state.remcom; i++) +#define for_local_enemies(i) for (i = 1; i <= nenhere; i++) +#define for_starbases(i) for (i = 1; i <= game.state.rembase; i++) typedef struct { int x; /* Quadrant location of planet */ @@ -41,8 +52,8 @@ typedef struct { killk, // Klingons killed killc, // commanders killed cx[QUADSIZE+1],cy[QUADSIZE+1], // Commander quadrant coordinates - baseqx[BASEMAX], // Base quadrant X - baseqy[BASEMAX], // Base quadrant Y + baseqx[BASEMAX+1], // Base quadrant X + baseqy[BASEMAX+1], // Base quadrant Y isx, isy, // Coordinate of Super Commander nscrem, // remaining super commanders nromkl, // Romulans killed @@ -85,6 +96,7 @@ typedef struct { #define OPTION_THOLIAN 0x00000008 /* Tholians and their webs */ #define OPTION_THINGY 0x00000010 /* Space Thingy can shoot back */ #define OPTION_PROBE 0x00000020 /* deep-space probes */ +#define OPTION_SHOWME 0x00000040 /* bracket Enterprise in chart */ /* Define devices */ #define DSRSENS 0 @@ -104,6 +116,21 @@ typedef struct { #define DDSP 14 // Added deep space probe #define NDEVICES (15) // Number of devices +#define FOREVER 1e30 + +/* Define future events */ +#define FSPY 0 // Spy event happens always (no future[] entry) + // can cause SC to tractor beam Enterprise +#define FSNOVA 1 // Supernova +#define FTBEAM 2 // Commander tractor beams Enterprise +#define FSNAP 3 // Snapshot for time warp +#define FBATTAK 4 // Commander attacks base +#define FCDBAS 5 // Commander destroys base +#define FSCMOVE 6 // Supercommander moves (might attack base) +#define FSCDBAS 7 // Supercommander destroys base +#define FDSPROB 8 // Move deep space probe +#define NEVENTS (9) + // Scalar variables that are needed for freezing the game // are placed in a structure. #defines are used to access by their // original names. Gee, I could have done this with the d structure, @@ -123,7 +150,7 @@ EXTERN struct { double kdist[(QUADSIZE+1)*(QUADSIZE+1)]; // enemy distances double kavgd[(QUADSIZE+1)*(QUADSIZE+1)]; // average distances double damage[NDEVICES]; // damage encountered - double future[NEVENTS+1]; // future events + double future[NEVENTS]; // future events char passwd[10]; // Self Destruct password int kx[(QUADSIZE+1)*(QUADSIZE+1)]; // enemy sector locations int ky[(QUADSIZE+1)*(QUADSIZE+1)]; @@ -207,7 +234,7 @@ EXTERN struct { docfac, resting, damfac, - stdamtim, + lastchart, cryprob, probex, probey, @@ -217,88 +244,88 @@ EXTERN struct { } game; #define inkling game.inkling // Initial number of klingons -#define inbase game.inbase // Initial number of bases -#define incom game.incom // Initian number of commanders -#define instar game.instar // Initial stars +#define inbase game.inbase // Initial number of bases +#define incom game.incom // Initian number of commanders +#define instar game.instar // Initial stars #define intorps game.intorps // Initial/Max torpedoes -#define condit game.condit // Condition (red, yellow, green docked) -#define torps game.torps // number of torpedoes -#define ship game.ship // Ship type -- 'E' is Enterprise -#define quadx game.quadx // where we are -#define quady game.quady // -#define sectx game.sectx // where we are -#define secty game.secty // -#define length game.length // length of game -#define skill game.skill // skill level -#define basex game.basex // position of base in current quad -#define basey game.basey // -#define klhere game.klhere // klingons here +#define condit game.condit // Condition (red/yellow/green/docked) +#define torps game.torps // number of torpedoes +#define ship game.ship // Ship type -- 'E' is Enterprise +#define quadx game.quadx // where we are +#define quady game.quady // +#define sectx game.sectx // where we are +#define secty game.secty // +#define length game.length // length of game +#define skill game.skill // skill level +#define basex game.basex // position of base in current quad +#define basey game.basey // +#define klhere game.klhere // klingons here #define comhere game.comhere // commanders here -#define casual game.casual // causalties -#define nhelp game.nhelp // calls for help -#define nkinks game.nkinks // -#define ididit game.ididit // Action taken -- allows enemy to attack +#define casual game.casual // causalties +#define nhelp game.nhelp // calls for help +#define nkinks game.nkinks // +#define ididit game.ididit // Action taken -- allows enemy to attack #define gamewon game.gamewon // Finished! -#define alive game.alive // We are alive (not killed) -#define justin game.justin // just entered quadrant +#define alive game.alive // We are alive (not killed) +#define justin game.justin // just entered quadrant #define alldone game.alldone // game is now finished #define shldchg game.shldchg // shield is changing (affects efficiency) -#define plnetx game.plnetx // location of planet in quadrant -#define plnety game.plnety // +#define plnetx game.plnetx // location of planet in quadrant +#define plnety game.plnety // #define inorbit game.inorbit // orbiting -#define landed game.landed // party on planet (1), on ship (-1) -#define iplnet game.iplnet // planet # in quadrant -#define imine game.imine // mining -#define inplan game.inplan // initial planets +#define landed game.landed // party on planet (1), on ship (-1) +#define iplnet game.iplnet // planet # in quadrant +#define imine game.imine // mining +#define inplan game.inplan // initial planets #define nenhere game.nenhere // Number of enemies in quadrant -#define ishere game.ishere // Super-commander in quandrant -#define neutz game.neutz // Romulan Neutral Zone -#define irhere game.irhere // Romulans in quadrant -#define icraft game.icraft // Kirk in Galileo +#define ishere game.ishere // Super-commander in quandrant +#define neutz game.neutz // Romulan Neutral Zone +#define irhere game.irhere // Romulans in quadrant +#define icraft game.icraft // Kirk in Galileo #define ientesc game.ientesc // Attempted escape from supercommander #define iscraft game.iscraft // =1 if craft on ship, -1 if removed from game -#define isatb game.isatb // =1 if SuperCommander is attacking base -#define iscate game.iscate // Super Commander is here +#define isatb game.isatb // =1 if SuperCommander is attacking base +#define iscate game.iscate // Super Commander is here #ifdef DEBUG -#define idebug game.idebug // Debug mode +#define idebug game.idebug // Debug mode #endif -#define iattak game.iattak // attack recursion elimination (was cracks[4]) +#define iattak game.iattak // attack recursion elimination (was cracks[4]) #define icrystl game.icrystl // dilithium crystals aboard -#define tourn game.tourn // Tournament number -#define thawed game.thawed // Thawed game -#define batx game.batx // Base coordinates being attacked -#define baty game.baty // -#define ithere game.ithere // Tholean is here -#define ithx game.ithx // coordinates of tholean +#define tourn game.tourn // Tournament number +#define thawed game.thawed // Thawed game +#define batx game.batx // Base coordinates being attacked +#define baty game.baty // +#define ithere game.ithere // Tholean is here +#define ithx game.ithx // coordinates of tholean #define ithy game.ithy #define iseenit game.iseenit // Seen base attack report #define inresor game.inresor // initial resources -#define intime game.intime // initial time -#define inenrg game.inenrg // Initial/Max Energy -#define inshld game.inshld // Initial/Max Shield -#define inlsr game.inlsr // initial life support resources -#define indate game.indate // Initial date -#define energy game.energy // Energy level -#define shield game.shield // Shield level -#define shldup game.shldup // Shields are up +#define intime game.intime // initial time +#define inenrg game.inenrg // Initial/Max Energy +#define inshld game.inshld // Initial/Max Shield +#define inlsr game.inlsr // initial life support resources +#define indate game.indate // Initial date +#define energy game.energy // Energy level +#define shield game.shield // Shield level +#define shldup game.shldup // Shields are up #define warpfac game.warpfac // Warp speed -#define wfacsq game.wfacsq // squared warp factor +#define wfacsq game.wfacsq // squared warp factor #define lsupres game.lsupres // life support reserves -#define dist game.dist // movement distance -#define direc game.direc // movement direction -#define Time game.Time // time taken by current operation -#define docfac game.docfac // repair factor when docking (constant?) +#define dist game.dist // movement distance +#define direc game.direc // movement direction +#define Time game.Time // time taken by current operation +#define docfac game.docfac // repair factor when docking (constant?) #define resting game.resting // rest time -#define damfac game.damfac // damage factor -#define stdamtim game.stdamtim // time that star chart was damaged +#define damfac game.damfac // damage factor +#define lastchart game.lastchart // time star chart was last updated #define cryprob game.cryprob // probability that crystal will work -#define probex game.probex // location of probe +#define probex game.probex // location of probe #define probey game.probey #define probecx game.probecx // current probe quadrant #define probecy game.probecy #define probeinx game.probeinx // Probe x,y increment #define probeiny game.probeiny -#define proben game.proben // number of moves for probe +#define proben game.proben // number of moves for probe #define isarmed game.isarmed // Probe is armed #define nprobes game.nprobes // number of probes available @@ -319,18 +346,6 @@ typedef enum {FWON, FDEPLETE, FLIFESUP, FNRG, FBATTLE, FHOLE} FINTYPE ; enum loctype {neither, quadrant, sector}; -/* Define future events */ -#define FSPY 0 // Spy event happens always (no future[] entry) - // can cause SC to tractor beam Enterprise -#define FSNOVA 1 // Supernova -#define FTBEAM 2 // Commander tractor beams Enterprise -#define FSNAP 3 // Snapshot for time warp -#define FBATTAK 4 // Commander attacks base -#define FCDBAS 5 // Commander destroys base -#define FSCMOVE 6 // Supercommander moves (might attack base) -#define FSCDBAS 7 // Supercommander destroys base -#define FDSPROB 8 // Move deep space probe - #ifdef INCLUDED char *device[NDEVICES] = { "S. R. Sensors", @@ -438,7 +453,7 @@ void crmena(int, int, int, int, int); void deadkl(int, int, int, int, int); void timwrp(void); void movcom(void); -void torpedo(double, double, int, int, double *, int, int, int); +void torpedo(double, double, int, int, double *, int, int); void huh(void); void pause_game(int); void nova(int, int); @@ -449,7 +464,7 @@ void prouts(char *, ...); int isit(char *); void preport(void); void orbit(void); -void sensor(int); +void sensor(void); void drawmaps(short); void beam(void); void mine(void); @@ -464,7 +479,7 @@ void iostart(void); void setwnd(WINDOW *); void warble(void); void boom(int ii, int jj); -void tracktorpedo(int x, int y, int ix, int iy, int wait, int l, int i, int n, int iquad); +void tracktorpedo(int ix, int iy, int l, int i, int n, int iquad); void cgetline(char *, int); void waitfor(void); void setpassword(void);