X-Git-Url: https://jxself.org/git/?p=super-star-trek.git;a=blobdiff_plain;f=src%2Fsst.h;h=a9bf781e546a588bcd558fdde1a99ff2441fb253;hp=bccb6c27609f94247ee2611ca361e103ca4ae526;hb=4207ce95e80fe7e2d5114079fa4255e0ad506618;hpb=a0afd227763655ee0ecd7ef5faea92d63d5c5ba6 diff --git a/src/sst.h b/src/sst.h index bccb6c2..a9bf781 100644 --- a/src/sst.h +++ b/src/sst.h @@ -42,23 +42,47 @@ typedef struct {int x; int y;} coord; -#define same(c1, c2) (c1.x == c2.x && c1.y == c2.y) +#define square(i) ((i)*(i)) +#define same(c1, c2) ((c1.x == c2.x) && (c1.y == c2.y)) +#define distance(c1, c2) sqrt(square(c1.x - c2.x) + square(c1.y - c2.y)) +#define invalidate(w) w.x = w.y = 0 +#define is_valid(w) (w.x == 0 || w.y == 0) typedef struct { coord w; enum {M=0, N=1, O=2} pclass; int inhabited; /* if NZ, an index into a name array */ #define UNINHABITED -1 - int crystals; /* has crystals */ -#define MINED -1 /* used to have crystals, but they were mined out */ + enum {mined=-1, present=0, absent=1} crystals; /* has crystals */ enum {unknown, known, shuttle_down} known; } planet; #define DESTROY(pl) memset(pl, '\0', sizeof(planet)) +typedef enum { + IHR = 'R', + IHK = 'K', + IHC = 'C', + IHS = 'S', + IHSTAR = '*', + IHP = 'P', + IHW = '@', + IHB = 'B', + IHBLANK = ' ', + IHDOT = '.', + IHQUEST = '?', + IHE = 'E', + IHF = 'F', + IHT = 'T', + IHWEB = '#', + IHMATER0 = '-', + IHMATER1 = 'o', + IHMATER2 = '0', +} feature; + typedef struct { - int snap, // snapshot taken - crew, // crew complement + bool snap; // snapshot taken + int crew, // crew complement #define FULLCREW 428 /* BSD Trek was 387, that's wrong */ remkl, // remaining klingons remcom, // remaining commanders @@ -89,7 +113,7 @@ typedef struct { } galaxy[GALSIZE+1][GALSIZE+1]; // The Galaxy (subscript 0 not used) struct page { int stars; - int starbase; + bool starbase; int klingons; } chart[GALSIZE+1][GALSIZE+1]; // the starchart (subscript 0 not used) } snapshot; // Data that is snapshot @@ -105,13 +129,6 @@ typedef struct { #define INKLINGTOT (game.inkling + game.incom + game.inscom) #define KLINGKILLED (INKLINGTOT - KLINGREM) -#define SKILL_NONE 0 -#define SKILL_NOVICE 1 -#define SKILL_FAIR 2 -#define SKILL_GOOD 3 -#define SKILL_EXPERT 4 -#define SKILL_EMERITUS 5 - /* game options */ #define OPTION_ALL 0xffffffff #define OPTION_TTY 0x00000001 /* old interface */ @@ -142,13 +159,14 @@ typedef struct { #define DRADIO 8 #define DSHUTTL 9 #define DCOMPTR 10 -#define DTRANSP 11 -#define DSHCTRL 12 -#define DDRAY 13 // Added deathray -#define DDSP 14 // Added deep space probe -#define NDEVICES (15) // Number of devices +#define DNAVSYS 11 +#define DTRANSP 12 +#define DSHCTRL 13 +#define DDRAY 14 +#define DDSP 15 +#define NDEVICES (16) // Number of devices -#define damaged(dev) game.damage[dev] != 0.0 +#define damaged(dev) (game.damage[dev] != 0.0) #define FOREVER 1e30 @@ -186,12 +204,14 @@ extern double scheduled(int); #define SSTMAGIC "SST2.0\n" +#define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0])) + struct game { char magic[sizeof(SSTMAGIC)]; unsigned long options; snapshot state; snapshot snapsht; - char quad[QUADSIZE+1][QUADSIZE+1]; // contents of our quadrant + feature quad[QUADSIZE+1][QUADSIZE+1]; // contents of our quadrant double kpower[(QUADSIZE+1)*(QUADSIZE+1)]; // enemy energy levels double kdist[(QUADSIZE+1)*(QUADSIZE+1)]; // enemy distances double kavgd[(QUADSIZE+1)*(QUADSIZE+1)]; // average distances @@ -210,48 +230,64 @@ struct game { alive, // we are alive (not killed) justin, // just entered quadrant shldup, // shields are up + shldchg, // shield is changing (affects efficiency) + comhere, // commander here + ishere, // super-commander in quadrant + iscate, // super commander is here + ientesc, // attempted escape from supercommander + ithere, // Tholian is here resting, // rest time + icraft, // Kirk in Galileo + landed, // party on planet (true), on ship (false) alldone, // game is now finished neutz, // Romulan Neutral Zone isarmed, // probe is armed inorbit, // orbiting a planet + imine, // mining + icrystl, // dilithium crystals aboard + iseenit, // seen base attack report thawed; // thawed game + enum { + green, + yellow, + red, + docked, + dead, + } condition; // condition (red/yellow/green/docked) + enum { + onship, + offship, + removed, + } iscraft; // 'onship' if craft on ship, 'removed' if out of game + enum { + SKILL_NONE, + SKILL_NOVICE, + SKILL_FAIR, + SKILL_GOOD, + SKILL_EXPERT, + SKILL_EMERITUS, + } skill; // skill level int inkling, // initial number of klingons inbase, // initial number of bases incom, // initial number of commanders inscom, // initial number of commanders inrom, // initial number of commanders instar, // initial stars - intorps, // initial/Max torpedoes - condit, // condition (red/yellow/green/docked) + intorps, // initial/max torpedoes torps, // number of torpedoes ship, // ship type -- 'E' is Enterprise abandoned, // count of crew abandoned in space length, // length of game - skill, // skill level klhere, // klingons here - comhere, // commanders here casual, // causalties nhelp, // calls for help nkinks, // count of energy-barrier crossings - shldchg, // shield is changing (affects efficiency) - landed, // party on planet (1), on ship (-1) iplnet, // planet # in quadrant - imine, // mining inplan, // initial planets nenhere, // number of enemies in quadrant - ishere, // super-commander in quandrant irhere, // Romulans in quadrant - icraft, // Kirk in Galileo - ientesc, // attempted escape from supercommander - iscraft, // =1 if craft on ship, -1 if removed from game isatb, // =1 if super commander is attacking base - iscate, // super commander is here - iattak, // attack recursion elimination (was cracks[4]) - icrystl, // dilithium crystals aboard tourn, // tournament number - ithere, // Tholian is here - iseenit, // seen base attack report proben, // number of moves for probe nprobes; // number of probes available double inresor, // initial resources @@ -282,6 +318,7 @@ extern struct game game; /* the following global state doesn't need to be saved */ extern char *device[NDEVICES]; +extern char *systnames[NINHAB + 1]; extern int iscore, iskill; // Common PLAQ extern double perdate; extern double aaitem; @@ -292,53 +329,38 @@ extern FILE *logfp, *replayfp; /* the Space Thingy's global state should *not* be saved! */ extern coord thing; -extern int iqhere, iqengry; +extern bool iqhere, iqengry; -typedef enum {FWON, FDEPLETE, FLIFESUP, FNRG, FBATTLE, - FNEG3, FNOVA, FSNOVAED, FABANDN, FDILITHIUM, - FMATERIALIZE, FPHASER, FLOST, FMINING, FDPLANET, - FPNOVA, FSSC, FSTRACTOR, FDRAY, FTRIBBLE, - FHOLE, FCREW} FINTYPE ; -enum loctype {neither, quadrant, sector}; +typedef enum { + FWON, FDEPLETE, FLIFESUP, FNRG, FBATTLE, + FNEG3, FNOVA, FSNOVAED, FABANDN, FDILITHIUM, + FMATERIALIZE, FPHASER, FLOST, FMINING, FDPLANET, + FPNOVA, FSSC, FSTRACTOR, FDRAY, FTRIBBLE, + FHOLE, FCREW +} FINTYPE ; -#define IHR 'R' -#define IHK 'K' -#define IHC 'C' -#define IHS 'S' -#define IHSTAR '*' -#define IHP 'P' -#define IHW '@' -#define IHB 'B' -#define IHBLANK ' ' -#define IHDOT '.' -#define IHQUEST '?' -#define IHE 'E' -#define IHF 'F' -#define IHT 'T' -#define IHWEB '#' -#define IHGREEN 'G' -#define IHYELLOW 'Y' -#define IHRED 'R' -#define IHDOCKED 'D' -#define IHDEAD 'Z' -#define IHMATER0 '-' -#define IHMATER1 'o' -#define IHMATER2 '0' +enum loctype {neither, quadrant, sector}; +typedef enum { + SCAN_FULL, + SCAN_REQUEST, + SCAN_STATUS, + SCAN_NO_LEFTSIDE, +} scantype; /* Function prototypes */ void prelim(void); -void attack(int); +void attack(bool); bool choose(bool); void setup(bool); void score(void); void atover(bool); -int srscan(int); +void srscan(scantype); void lrscan(void); void phasers(void); void photon(void); void warp(bool); -void doshield(int); +void doshield(bool); void dock(bool); void dreprt(void); void chart(bool); @@ -352,10 +374,10 @@ void eta(void); void mayday(void); void abandn(void); void finish(FINTYPE); -void dstrct(void); +void selfdestruct(void); void kaboom(void); void freeze(bool); -int thaw(void); +bool thaw(void); void plaque(void); int scan(void); #define IHEOL (0) @@ -369,31 +391,30 @@ void proutn(char *, ...); void stars(void); void newqad(bool); bool ja(void); -void cramen(int); +void cramen(feature); void crmshp(void); char *cramlc(enum loctype, coord w); double expran(double); double Rand(void); -void iran(int, int *, int *); -#define square(i) ((i)*(i)) -void dropin(int, coord*); +coord randplace(int); +coord dropin(feature); void newcnd(void); void sortkl(void); -void imove(void); -void ram(int, int, coord); -void crmena(int, int, int, coord w); -void deadkl(coord, int, int, int); +void imove(bool); +void ram(bool, feature, coord); +void crmena(bool, feature, enum loctype, coord w); +void deadkl(coord, feature, coord); void timwrp(void); void movcom(void); -void torpedo(double, double, int, int, double *, int, int); +void torpedo(double, double, coord, double *, int, int); void huh(void); -void pause_game(int); -void nova(int, int); -void snova(int, int); +void pause_game(bool); +void nova(coord); +void snova(bool, coord *); void scom(bool *); void hittem(double *); void prouts(char *, ...); -int isit(char *); +bool isit(char *); void preport(void); void orbit(void); void sensor(void); @@ -410,22 +431,18 @@ void probe(void); void iostart(void); void setwnd(WINDOW *); void warble(void); -void boom(int, int); -void tracktorpedo(int, int, int, int, int, int); +void boom(coord); +void tracktorpedo(coord, int, int, int, int); void cgetline(char *, int); void waitfor(void); void setpassword(void); void commandhook(char *, bool); void makechart(void); void enqueue(char *); -char *systemname(int); -void newkling(int, coord *); - -/* mode arguments for srscan() */ -#define SCAN_FULL 1 -#define SCAN_REQUEST 2 -#define SCAN_STATUS 3 -#define SCAN_NO_LEFTSIDE 4 +coord newkling(int); +#if BSD_BUG_FOR_BUG +void visual(void); +#endif extern WINDOW *curwnd; extern WINDOW *fullscreen_window; @@ -437,7 +454,7 @@ extern WINDOW *prompt_window; extern void clreol(void); extern void clrscr(void); -extern void textcolor(int color); +extern void textcolor(int); extern void highvideo(void); enum COLORS {