#define PHASEFAC (2.0)
#define PLNETMAX (10)
#define NEVENTS (8)
+#define GALSIZE (8)
+#define QUADSIZE (10)
+#define BASEMAX (6)
typedef struct {
int x; /* Quadrant location of planet */
basekl, // destroyed bases
killk, // Klingons killed
killc, // commanders killed
- galaxy[9][9], // The Galaxy (subscript 0 not used)
- cx[11],cy[11], // Commander quadrant coordinates
- baseqx[6], // Base quadrant X
- baseqy[6], // Base quadrant Y
- newstuf[9][9], // Extended galaxy goodies
+ 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
isx, isy, // Coordinate of Super Commander
nscrem, // remaining super commanders
nromkl, // Romulans killed
remtime; // remaining time
} 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
+#define SKILL_GOOD 3
+#define SKILL_EXPERT 4
+#define SKILL_EMERITUS 5
+
// 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,
char magic[sizeof(SSTMAGIC)];
snapshot state;
snapshot snapsht;
- char quad[11][11]; // contents of our quadrant
- double kpower[21]; // enemy energy levels
- double kdist[21]; // enemy distances
- double kavgd[21]; // average distances
+ char 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
double damage[NDEVICES+1]; // damage encountered
double future[NEVENTS+1]; // future events
char passwd[10]; // Self Destruct password
- int kx[21]; // enemy sector locations
- int ky[21];
- int starch[9][9]; // star chart
+ 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,
char *cramlc(enum loctype, int, int);
double expran(double);
double Rand(void);
-void iran8(int *, int *);
-void iran10(int *, int *);
+void iran(int, int *, int *);
#define square(i) ((i)*(i))
void dropin(int, int*, int*);
void newcnd(void);
int isit(char *);
void preport(void);
void orbit(void);
-void sensor(void);
+void sensor(int);
void drawmaps(short);
void beam(void);
void mine(void);
void setpassword(void);
void commandhook(char *, int);
void makechart(void);
-void enqueue(char *s);
+void enqueue(char *);
/* mode arguments for srscan() */
#define SCAN_FULL 1
#define SCAN_STATUS 3
#define SCAN_NO_LEFTSIDE 4
-WINDOW *FULLSCREEN_WINDOW;
-WINDOW *SRSCAN_WINDOW;
-WINDOW *REPORT_WINDOW;
-WINDOW *LRSCAN_WINDOW;
-WINDOW *LOWER_WINDOW;
-WINDOW *BOTTOM_WINDOW;
+WINDOW *fullscreen_window;
+WINDOW *srscan_window;
+WINDOW *report_window;
+WINDOW *lrscan_window;
+WINDOW *message_window;
+WINDOW *prompt_window;
extern void clreol(void);
extern void clrscr(void);
extern void highvideo(void);
enum COLORS {
+ DEFAULT,
BLACK, BLUE, GREEN, CYAN, RED, MAGENTA, BROWN, LIGHTGRAY,
DARKGRAY, LIGHTBLUE, LIGHTGREEN, LIGHTCYAN, LIGHTRED, LIGHTMAGENTA, YELLOW, WHITE
};