Abstract all references to the future array (outside of events.c) away.
[super-star-trek.git] / src / sst.h
index 838bc8ae829f4a527aa25f4f983ce23318b38b4d..8e6e7c458cce3670ebda4916b1d2f27a1e88711f 100644 (file)
--- a/src/sst.h
+++ b/src/sst.h
@@ -4,6 +4,8 @@
 #include <math.h>
 #include <stdlib.h>
 #include <string.h>
+#include <locale.h>
+#include <libintl.h>
 #include <curses.h>
 
 #ifdef DATA_DIR
 #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)
 
@@ -39,7 +45,10 @@ typedef struct {
     int x;     /* Quadrant location of planet */
     int y;
     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;
 
@@ -63,14 +72,17 @@ typedef struct {
        double date,            // stardate
            remres,             // remaining resources
            remtime;            // remaining time
-    struct {
+    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 +120,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 +155,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)];
@@ -225,6 +252,9 @@ struct game {
        ithx,           // coordinates of Tholian
        ithy,           //
        iseenit,        // seen base attack report
+#ifdef EXPERIMENTAL
+       ndistr,         //* count of distress calls */ 
+#endif /* EXPERIMENTAL */
        probecx,        // current probe quadrant
        probecy,        //
        proben,         // number of moves for probe
@@ -286,6 +316,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 +358,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);
@@ -396,6 +427,8 @@ void setpassword(void);
 void commandhook(char *, int);
 void makechart(void);
 void enqueue(char *);
+char *systemname(planet *);
+void newkling(int, int *, int *);
 
 /* mode arguments for srscan() */
 #define SCAN_FULL              1
@@ -403,12 +436,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 +455,4 @@ enum COLORS {
    DARKGRAY, LIGHTBLUE, LIGHTGREEN, LIGHTCYAN, LIGHTRED, LIGHTMAGENTA, YELLOW, WHITE
 };
 
-#define DAMAGED        128     /* marker for damaged ship in starmap */
-
 #endif