Rewrite to get ride of FORTRANish galaxy and newstuff arrays. It's
[super-star-trek.git] / sst.h
diff --git a/sst.h b/sst.h
index f6c0960df0bb9b366814a3cb58fed6081d3190a7..9a67c1d063ac1dd44cafcb6a6d15c34ff7edc51c 100644 (file)
--- a/sst.h
+++ b/sst.h
@@ -2,6 +2,7 @@
 #include <math.h>
 #include <stdlib.h>
 #include <string.h>
+#include <curses.h>
 #ifndef INCLUDED
 #define EXTERN extern
 #else
 
 // #define DEBUG
 
-#define NDEVICES (15)  // Number of devices
 #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 */
@@ -37,11 +40,9 @@ typedef struct {
        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
+       cx[QUADSIZE+1],cy[QUADSIZE+1],  // Commander quadrant coordinates
+       baseqx[BASEMAX],                // Base quadrant X
+       baseqy[BASEMAX],                // Base quadrant Y
        isx, isy,               // Coordinate of Super Commander
        nscrem,                 // remaining super commanders
        nromkl,                 // Romulans killed
@@ -52,8 +53,57 @@ 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
 
+#define SKILL_NONE     0
+#define SKILL_NOVICE   1
+#define SKILL_FAIR     2
+#define SKILL_GOOD     3
+#define SKILL_EXPERT   4
+#define SKILL_EMERITUS 5
+
+/* game options */
+#define OPTION_ALL     0xffffffff
+#define OPTION_TTY     0x00000001      /* old interface */
+#define OPTION_CURSES  0x00000002      /* new interface */
+#define OPTION_IOMODES 0x00000003      /* cover both interfaces */
+#define OPTION_PLANETS 0x00000004      /* planets and mining */
+#define OPTION_THOLIAN 0x00000008      /* Tholians and their webs */
+#define OPTION_THINGY  0x00000010      /* Space Thingy can shoot back */
+#define OPTION_PROBE   0x00000020      /* deep-space probes */
+
+/* Define devices */
+#define DSRSENS 0
+#define DLRSENS 1
+#define DPHASER 2
+#define DPHOTON 3
+#define DLIFSUP 4
+#define DWARPEN 5
+#define DIMPULS 6
+#define DSHIELD 7
+#define DRADIO  8
+#define DSHUTTL 9
+#define DCOMPTR 10
+#define DTRANSP 11
+#define DSHCTRL 12
+#define DDRAY   13  // Added deathray
+#define DDSP    14  // Added deep space probe
+#define NDEVICES (15)  // Number of devices
+
 // 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,
@@ -61,22 +111,22 @@ typedef struct {
 
 #define SSTMAGIC       "SST2.0\n"
 
-EXTERN short curwnd;
+EXTERN WINDOW *curwnd;
 
 EXTERN struct {
     char magic[sizeof(SSTMAGIC)];
+    unsigned long options;
     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
-    double damage[NDEVICES+1]; // damage encountered
+    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];   // 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)];
     /* members with macro definitions start here */
     int inkling,
        inbase,
@@ -105,8 +155,6 @@ EXTERN struct {
        justin,
        alldone,
        shldchg,
-       thingx,
-       thingy,
        plnetx,
        plnety,
        inorbit,
@@ -133,8 +181,6 @@ EXTERN struct {
        batx,
        baty,
        ithere,
-        iqhere,
-        iqengry,
        ithx,
        ithy,
        iseenit,
@@ -196,8 +242,6 @@ EXTERN struct {
 #define justin game.justin                     // just entered quadrant
 #define alldone game.alldone           // game is now finished
 #define shldchg game.shldchg           // shield is changing (affects efficiency)
-#define thingx game.thingx                     // location of strange object in galaxy
-#define thingy game.thingy                     //
 #define plnetx game.plnetx                     // location of planet in quadrant
 #define plnety game.plnety                     //
 #define inorbit game.inorbit           // orbiting
@@ -209,8 +253,6 @@ EXTERN struct {
 #define ishere game.ishere                     // Super-commander in quandrant
 #define neutz game.neutz                       // Romulan Neutral Zone
 #define irhere game.irhere                     // Romulans in quadrant
-#define iqhere game.iqhere                     // Thing in quadrant
-#define iqengry game.iqengry                   // Thing attacking
 #define icraft game.icraft                     // Kirk in Galileo
 #define ientesc game.ientesc           // Attempted escape from supercommander
 #define iscraft game.iscraft           // =1 if craft on ship, -1 if removed from game
@@ -260,12 +302,15 @@ EXTERN struct {
 #define nprobes game.nprobes           // number of probes available
 
 /* the following global state doesn't need to be saved */
-EXTERN char    *device[NDEVICES+1];
+EXTERN char    *device[NDEVICES];
 EXTERN int iscore, iskill; // Common PLAQ
 EXTERN double perdate;
 EXTERN double aaitem;
 EXTERN char citem[10];
 
+/* the Space Thingy's global state should *not* be saved! */
+EXTERN int thingx, thingy, iqhere, iqengry;
+
 typedef enum {FWON, FDEPLETE, FLIFESUP, FNRG, FBATTLE,
               FNEG3, FNOVA, FSNOVAED, FABANDN, FDILITHIUM,
                          FMATERIALIZE, FPHASER, FLOST, FMINING, FDPLANET,
@@ -273,23 +318,6 @@ typedef enum {FWON, FDEPLETE, FLIFESUP, FNRG, FBATTLE,
                          FHOLE} FINTYPE ;
 enum loctype {neither, quadrant, sector};
 
-/* Define devices */
-#define DSRSENS 1
-#define DLRSENS 2
-#define DPHASER 3
-#define DPHOTON 4
-#define DLIFSUP 5
-#define DWARPEN 6
-#define DIMPULS 7
-#define DSHIELD 8
-#define DRADIO  9
-#define DSHUTTL 10
-#define DCOMPTR 11
-#define DTRANSP 12
-#define DSHCTRL 13
-#define DDRAY   14  // Added deathray
-#define DDSP    15  // Added deep space probe
-
 /* Define future events */
 #define FSPY   0       // Spy event happens always (no future[] entry)
                                        // can cause SC to tractor beam Enterprise
@@ -303,8 +331,7 @@ enum loctype {neither, quadrant, sector};
 #define FDSPROB 8   // Move deep space probe
 
 #ifdef INCLUDED
-char *device[NDEVICES+1] = {
-       "",
+char *device[NDEVICES] = {
        "S. R. Sensors",
        "L. R. Sensors",
        "Phasers",
@@ -318,8 +345,8 @@ char *device[NDEVICES+1] = {
        "Computer",
        "Transporter",
        "Shield Control",
-    "Death Ray",
-    "D. S. Probe"};                                                                    
+       "Death Ray",
+       "D. S. Probe"};                                                                 
 #endif
 
 #ifndef TRUE
@@ -367,6 +394,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);
@@ -398,8 +426,7 @@ void crmshp(void);
 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);
@@ -410,7 +437,7 @@ void crmena(int, int, int, int, int);
 void deadkl(int, int, int, int, int);
 void timwrp(void);
 void movcom(void);
-void torpedo(double, double, int, int, double *, int);
+void torpedo(double, double, int, int, double *, int, int, int);
 void huh(void);
 void pause_game(int);
 void nova(int, int);
@@ -418,11 +445,10 @@ void snova(int, int);
 void scom(int *);
 void hittem(double *);
 void prouts(char *, ...);
-void proutc(char *);
 int isit(char *);
 void preport(void);
 void orbit(void);
-void sensor(void);
+void sensor(int);
 void drawmaps(short);
 void beam(void);
 void mine(void);
@@ -433,24 +459,40 @@ void debugme(void);
 void attakreport(int);
 void movetho(void);
 void probe(void);
-void iostart(int);
-void ioend(void);
-void setwnd(short);
+void iostart(void);
+void setwnd(WINDOW *);
 void warble(void);
+void boom(int ii, int jj);
+void tracktorpedo(int x, int y, int ix, int iy, int wait, int l, int i, int n, int iquad);
 void cgetline(char *, int);
 void waitfor(void);
 void setpassword(void);
 void commandhook(char *, int);
-void c_printf (char *format, ... );
+void makechart(void);
+void enqueue(char *);
 
-typedef struct {
-        int wndleft,wndtop,wndright,wndbottom;
-} wnd;
-extern wnd wnds[6];
-/* these need to track io.c:wnd */
-#define FULLSCREEN_WINDOW      0
-#define LEFTUPPER_WINDOW       1
-#define SRSCAN_WINDOW          2
-#define LRSCAN_WINDOW          3
-#define LOWER_WINDOW           4
-#define BOTTOM_WINDOW          5
+/* mode arguments for srscan() */
+#define SCAN_FULL              1
+#define SCAN_REQUEST           2
+#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 void clreol(void);
+extern void clrscr(void);
+extern void textcolor(int color);
+extern void highvideo(void);
+
+enum COLORS {
+   DEFAULT,
+   BLACK, BLUE, GREEN, CYAN, RED, MAGENTA, BROWN, LIGHTGRAY,
+   DARKGRAY, LIGHTBLUE, LIGHTGREEN, LIGHTCYAN, LIGHTRED, LIGHTMAGENTA, YELLOW, WHITE
+};
+
+#define DAMAGED        128     /* marker for damaged ship in starmap */