X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;ds=sidebyside;f=src%2Fsst.h;h=182634d6c2da8b741ebaf6a22fc87bd529aecd7b;hb=c81e0f1dc6cd1fe5c56e9d521ee1d262932e3a2b;hp=838bc8ae829f4a527aa25f4f983ce23318b38b4d;hpb=e3730bb826efe601fe51626aab064d395733d4c3;p=super-star-trek.git diff --git a/src/sst.h b/src/sst.h index 838bc8a..182634d 100644 --- a/src/sst.h +++ b/src/sst.h @@ -4,6 +4,8 @@ #include #include #include +#include +#include #include #ifdef DATA_DIR @@ -12,14 +14,18 @@ #define SSTDOC DOC_NAME #endif +#define _(str) gettext(str) + #define min(x, y) ((x)<(y)?(x):(y)) #define max(x, y) ((x)>(y)?(x):(y)) // #define DEBUG #define PHASEFAC (2.0) -#define PLNETMAX (10) #define GALSIZE (8) +#define NINHAB (GALSIZE * GALSIZE / 2) +#define MAXUNINHAB (10) +#define PLNETMAX (NINHAB + MAXUNINHAB) #define QUADSIZE (10) #define BASEMAX (5) @@ -35,11 +41,17 @@ #define for_local_enemies(i) for (i = 1; i <= game.nenhere; i++) #define for_starbases(i) for (i = 1; i <= game.state.rembase; i++) +typedef struct {int x; int y;} coord; + +#define same(c1, c2) (c1.x == c2.x && c1.y == c2.y) + typedef struct { - int x; /* Quadrant location of planet */ - int y; + 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 {unknown, known, shuttle_down} known; } planet; @@ -53,24 +65,26 @@ typedef struct { rembase, // remaining bases starkl, // destroyed stars basekl, // destroyed bases - cx[QUADSIZE+1],cy[QUADSIZE+1], // Commander quadrant coordinates - baseqx[BASEMAX+1], // Base quadrant X - baseqy[BASEMAX+1], // Base quadrant Y - isx, isy, // Coordinate of Super Commander nromrem, // Romulans remaining nplankl; // destroyed planets planet plnets[PLNETMAX]; // Planet information double date, // stardate remres, // remaining resources remtime; // remaining time - struct { + coord baseq[BASEMAX+1]; // Base quadrant coordinates + coord kcmdr[QUADSIZE+1]; // Commander quadrant coordinates + coord kscmdr; // Supercommander quadrant coordinates + struct quadrant { int stars; - int planets; + planet *planet; int starbase; int klingons; int romulans; int supernova; int charted; +#ifdef EXPERIMENTAL + enum {secure, distressed, enslaved} status; +#endif /* EXPERIMENTAL */ } galaxy[GALSIZE+1][GALSIZE+1]; // The Galaxy (subscript 0 not used) struct { int stars; @@ -108,6 +122,7 @@ typedef struct { #define OPTION_MVBADDY 0x00000100 /* more enemies can move */ #define OPTION_BLKHOLE 0x00000200 /* black hole may timewarp you */ #define OPTION_BASE 0x00000400 /* bases have good shields */ +#define OPTION_WORLDS 0x00000800 /* logic for inhabited worlds */ #define OPTION_PLAIN 0x01000000 /* user chose plain game */ #define OPTION_ALMY 0x02000000 /* user chose Almy variant */ @@ -142,16 +157,30 @@ typedef struct { #define FSCMOVE 6 // Supercommander moves (might attack base) #define FSCDBAS 7 // Supercommander destroys base #define FDSPROB 8 // Move deep space probe +#ifndef EXPERIMENTAL #define NEVENTS (9) +#else /* EXPERIMENTAL */ +#define FDISTR 9 // Emit distress call from an inhabited world +#define FENSLV 10 // Inhabited word is enslaved */ +#define FREPRO 11 // Klingons build a ship in an enslaved system +#define NEVENTS (12) +#endif /* EXPERIMENTAL */ -// 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, -// but I just didn't think of it back when I started. +/* + * abstract out the event handling -- underlying data structures will change + * when we implement stateful events + */ +extern void unschedule(int); +extern int is_scheduled(int); +extern void schedule(int, double); +extern void postpone(int, double); +extern double scheduled(int); -#define SSTMAGIC "SST2.0\n" +#ifdef EXPERIMENTAL +#define MAXDISTR 5 /* maximum concurrent distress calls */ +#endif /* EXPERIMENTAL */ -extern WINDOW *curwnd; +#define SSTMAGIC "SST2.0\n" struct game { char magic[sizeof(SSTMAGIC)]; @@ -165,8 +194,13 @@ struct game { double damage[NDEVICES]; // damage encountered 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)]; + coord ks[(QUADSIZE+1)*(QUADSIZE+1)]; // enemy sector locations + coord quadrant, sector; // where we are + coord tholian; // coordinates of Tholian + coord base; // position of base in current quadrant + coord battle; // base coordinates being attacked + coord plnet; // location of planet in quadrant + coord probec; // current probe quadrant int inkling, // Initial number of klingons inbase, // Initial number of bases incom, // Initial number of commanders @@ -177,14 +211,8 @@ struct game { condit, // Condition (red/yellow/green/docked) torps, // number of torpedoes ship, // Ship type -- 'E' is Enterprise - quadx, // where we are - quady, // - sectx, // where we are - secty, // length, // length of game skill, // skill level - basex, // position of base in current quadrant - basey, // klhere, // klingons here comhere, // commanders here casual, // causalties @@ -196,8 +224,6 @@ struct game { justin, // just entered quadrant alldone, // game is now finished shldchg, // shield is changing (affects efficiency) - plnetx, // location of planet in quadrant - plnety, // inorbit, // orbiting landed, // party on planet (1), on ship (-1) iplnet, // planet # in quadrant @@ -219,14 +245,11 @@ struct game { icrystl, // dilithium crystals aboard tourn, // tournament number thawed, // thawed game - batx, // base coordinates being attacked - baty, // ithere, // Tholian is here - ithx, // coordinates of Tholian - ithy, // iseenit, // seen base attack report - probecx, // current probe quadrant - probecy, // +#ifdef EXPERIMENTAL + ndistr, //* count of distress calls */ +#endif /* EXPERIMENTAL */ proben, // number of moves for probe isarmed, // probe is armed nprobes; // number of probes available @@ -266,7 +289,8 @@ extern double aaitem; extern char citem[10]; /* the Space Thingy's global state should *not* be saved! */ -extern int thingx, thingy, iqhere, iqengry; +extern coord thing; +extern int iqhere, iqengry; typedef enum {FWON, FDEPLETE, FLIFESUP, FNRG, FBATTLE, FNEG3, FNOVA, FSNOVAED, FABANDN, FDILITHIUM, @@ -286,6 +310,7 @@ enum loctype {neither, quadrant, sector}; #define IHS 'S' #define IHSTAR '*' #define IHP 'P' +#define IHW '@' #define IHB 'B' #define IHBLANK ' ' #define IHDOT '.' @@ -327,7 +352,7 @@ void setwrp(void); void events(void); void report(void); void eta(void); -void help(void); +void mayday(void); void abandn(void); void finish(FINTYPE); void dstrct(void); @@ -349,17 +374,17 @@ void newqad(int); int ja(void); void cramen(int); void crmshp(void); -char *cramlc(enum loctype, int, int); +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, int*, int*); +void dropin(int, coord*); void newcnd(void); void sortkl(void); void imove(void); -void ram(int, int, int, int); -void crmena(int, int, int, int, int); +void ram(int, int, coord); +void crmena(int, int, int, coord w); void deadkl(int, int, int, int, int); void timwrp(void); void movcom(void); @@ -396,6 +421,8 @@ void setpassword(void); void commandhook(char *, int); void makechart(void); void enqueue(char *); +char *systemname(planet *); +void newkling(int, coord *); /* mode arguments for srscan() */ #define SCAN_FULL 1 @@ -403,12 +430,13 @@ void enqueue(char *); #define SCAN_STATUS 3 #define SCAN_NO_LEFTSIDE 4 -WINDOW *fullscreen_window; -WINDOW *srscan_window; -WINDOW *report_window; -WINDOW *lrscan_window; -WINDOW *message_window; -WINDOW *prompt_window; +extern WINDOW *curwnd; +extern WINDOW *fullscreen_window; +extern WINDOW *srscan_window; +extern WINDOW *report_window; +extern WINDOW *lrscan_window; +extern WINDOW *message_window; +extern WINDOW *prompt_window; extern void clreol(void); extern void clrscr(void); @@ -421,6 +449,4 @@ enum COLORS { DARKGRAY, LIGHTBLUE, LIGHTGREEN, LIGHTCYAN, LIGHTRED, LIGHTMAGENTA, YELLOW, WHITE }; -#define DAMAGED 128 /* marker for damaged ship in starmap */ - #endif