Speed up slow printing somewhat.
[super-star-trek.git] / sst.h
diff --git a/sst.h b/sst.h
index 5b6fb04de36b60801697bf9a2e27031ba8d72708..74f8d6ab3d863bf73f45a49570fac71360a37067 100644 (file)
--- a/sst.h
+++ b/sst.h
 
 #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 */
@@ -40,11 +51,9 @@ typedef struct {
        basekl,                 // destroyed bases
        killk,                  // Klingons killed
        killc,                  // commanders killed
-       galaxy[GALSIZE+1][GALSIZE+1],   // The Galaxy (subscript 0 not used)
        cx[QUADSIZE+1],cy[QUADSIZE+1],  // Commander quadrant coordinates
-       baseqx[BASEMAX],                // Base quadrant X
-       baseqy[BASEMAX],                // Base quadrant Y
-       newstuf[GALSIZE+1][GALSIZE+1],  // Extended galaxy goodies
+       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
@@ -55,28 +64,22 @@ typedef struct {
        double date,            // stardate
            remres,             // remaining resources
            remtime;            // remaining time
+    struct {
+       int stars;
+       int planets;
+       int starbase;
+       int klingons;
+       int romulans;
+       int supernova;
+       int charted;
+    } galaxy[GALSIZE+1][GALSIZE+1];    // The Galaxy (subscript 0 not used)
+    struct {
+       int stars;
+       int starbase;
+       int klingons;
+    } chart[GALSIZE+1][GALSIZE+1];     // the starchart (subscript 0 not used)
 } snapshot;                            // Data that is snapshot
 
-/*
- * This is how the integers in the galaxy array are encoded.
- * Someday these should turn into structure fields.
- */
-#define SUPERNOVA_PLACE        1000
-#define KLINGON_PLACE  100
-#define BASE_PLACE     10
-#define STAR_PLACE     1
-#define KLINGONS(n)    ((n)/KLINGON_PLACE)
-#define BASES(n)       (((n)%KLINGON_PLACE)/BASE_PLACE)
-#define STARS(n)       ((n)%BASE_PLACE)
-#define NOEXIT(s)      ((s) > 899)     /* supernova or >8 Klingons */
-
-/* for newstuff */
-#define ROMULAN_PLACE  10
-#define ROMULANS(n)    ((n)/ROMULAN_PLACE)
-
-/* for starch */
-#define CHART_UNKNOWN  -1
-
 #define SKILL_NONE     0
 #define SKILL_NOVICE   1
 #define SKILL_FAIR     2
@@ -112,6 +115,19 @@ typedef struct {
 #define DDSP    14  // Added deep space probe
 #define NDEVICES (15)  // Number of devices
 
+/* 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,
@@ -131,11 +147,10 @@ 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)];
-    int starch[GALSIZE+1][GALSIZE+1];          // star chart
     /* members with macro definitions start here */
     int inkling,
        inbase,
@@ -221,7 +236,8 @@ EXTERN struct {
        probex,
        probey,
        probeinx,
-       probeiny;
+       probeiny,
+       height;
 } game;
 
 #define inkling game.inkling           // Initial number of klingons
@@ -327,18 +343,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",
@@ -403,6 +407,7 @@ void doshield(int);
 void dock(int);
 void dreprt(void);
 void chart(int);
+void rechart(void);
 void impuls(void);
 void wait(void);
 void setwrp(void);