#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 */
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
#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,
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)];
probex,
probey,
probeinx,
- probeiny;
+ probeiny,
+ height;
} game;
#define inkling game.inkling // Initial number of klingons
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",