Yet more history.
[super-star-trek.git] / sst.c
diff --git a/sst.c b/sst.c
index 65c79ac6c35e48618e8ae03acf5af0b9779bcf58..e27f7fb125a0d2348235f5893cd16e33e88ae708 100644 (file)
--- a/sst.c
+++ b/sst.c
@@ -82,7 +82,7 @@ Here are Stas Sergeev's changes:
       chasing SCom can take an eternity).
 
    5. Probe target you enter is now the destination quadrant. Before I don't 
-      remember what it was, but it was something I had difficulty using)
+      remember what it was, but it was something I had difficulty using.
 
    6. Secret password is now autogenerated.
 
@@ -107,17 +107,15 @@ Here are Stas Sergeev's changes:
 
 Eric Raymond's changes:
 
- Mainly, I translated this C code out of FORTRAN into C -- created #defines
-   for a lot of magic numbers and refactored the heck out of it.
+Mainly, I translated this C code out of FORTRAN into C -- created #defines
+for a lot of magic numbers and refactored the heck out of it.
 
    1. "sos" and "call" becomes "mayday", "freeze" and "save" are both good.
 
    2. Status report now indicates when dilithium crystals are on board.
 
-   3. Can now report starbases left in scrscan.
-
-   4. Per Dave Matuszek's remarks, Thingy state is not saved across games.
-   */
+   3. Per Dave Matuszek's remarks, Thingy state is not saved across games.
+*/
 
 /* the input queue */
 static char line[128], *linep = line;
@@ -197,8 +195,8 @@ commands[] = {
        {"DEBUG",       DEBUGCMD,       0},
 #define MAYDAY 32
        {"MAYDAY",      MAYDAY,         0},
-       {"SOS",         MAYDAY,         0},
-       {"CALL",        MAYDAY,         0},
+       //{"SOS",               MAYDAY,         0},
+       //{"CALL",      MAYDAY,         0},
 #define QUIT   33
        {"QUIT",        QUIT,           0},
 #define HELP   34
@@ -206,12 +204,13 @@ commands[] = {
 };
 
 #define NUMCOMMANDS    sizeof(commands)/sizeof(commands[0])
+#define ACCEPT(i)      (!commands[i].option || (commands[i].option & game.options))
 
 static void listCommands(void) {
     int i, k = 0;
     proutn("LEGAL COMMANDS ARE:");
     for (i = 0; i < NUMCOMMANDS; i++) {
-       if (commands[i].option && !(commands[i].option & game.options))
+       if (!ACCEPT(i))
            continue;
        if (k % 5 == 0)
            skip(1);
@@ -239,7 +238,7 @@ static void helpme(void)
        setwnd(message_window);
        if (key == IHEOL) return;
        for (i = 0; i < NUMCOMMANDS; i++) {
-           if (strcasecmp(commands[i].name, citem)==0) {
+           if (ACCEPT(i) && strcasecmp(commands[i].name, citem)==0) {
                i = commands[i].value;
                break;
            }
@@ -327,14 +326,14 @@ static void makemoves(void)
            setwnd(message_window);
            clrscr();
            for (i=0; i < ABANDON; i++)
-               if (isit(commands[i].name)) {
+               if (ACCEPT(i) && isit(commands[i].name)) {
                    v = commands[i].value;
                    break;
                }
            if (i < ABANDON && (!commands[i].option || (commands[i].option & game.options))) 
                break;
            for (; i < NUMCOMMANDS; i++)
-               if (strcasecmp(commands[i].name, citem) == 0) {
+               if (ACCEPT(i) && strcasecmp(commands[i].name, citem) == 0) {
                    v = commands[i].value;
                    break;
                }
@@ -387,18 +386,18 @@ static void makemoves(void)
        case IMPULSE:                   // impulse
            impuls();
            break;
-       case REST:              // rest
+       case REST:                      // rest
            wait();
            if (ididit) hitme = TRUE;
            break;
-       case WARP:              // warp
+       case WARP:                      // warp
            setwrp();
            break;
-       case SCORE:                // score
+       case SCORE:                     // score
            score();
            break;
        case SENSORS:                   // sensors
-           sensor(TRUE);
+           sensor();
            break;
        case ORBIT:                     // orbit
            orbit();
@@ -431,13 +430,13 @@ static void makemoves(void)
        case COMMANDS:
            listCommands();
            break;
-       case EMEXIT:            // Emergency exit
-           clrscr();   // Hide screen
-           freeze(TRUE);       // forced save
-           exit(1);            // And quick exit
+       case EMEXIT:                    // Emergency exit
+           clrscr();                   // Hide screen
+           freeze(TRUE);               // forced save
+           exit(1);                    // And quick exit
            break;
        case PROBE:
-           probe();            // Launch probe
+           probe();                    // Launch probe
            if (ididit) hitme = TRUE;
            break;
        case ABANDON:                   // Abandon Ship
@@ -452,21 +451,21 @@ static void makemoves(void)
            if (skill > SKILL_GOOD)
                prout("WARNING--Saved games produce no plaques!");
            break;
-       case DEATHRAY:          // Try a desparation measure
+       case DEATHRAY:                  // Try a desparation measure
            deathray();
            if (ididit) hitme = TRUE;
            break;
-       case DEBUGCMD:          // What do we want for debug???
+       case DEBUGCMD:                  // What do we want for debug???
 #ifdef DEBUG
            debugme();
 #endif
            break;
-       case MAYDAY:            // Call for help
+       case MAYDAY:                    // Call for help
            help();
            if (ididit) hitme = TRUE;
            break;
        case QUIT:
-           alldone = 1;        // quit the game
+           alldone = 1;                // quit the game
 #ifdef DEBUG
            if (idebug) score();
 #endif
@@ -483,16 +482,16 @@ static void makemoves(void)
 #endif
            if (Time != 0.0) {
                events();
-               if (alldone) break;             // Events did us in
+               if (alldone) break;     // Events did us in
            }
-           if (game.state.galaxy[quadx][quady] == SUPERNOVA_PLACE) { // Galaxy went Nova!
+           if (game.state.galaxy[quadx][quady].supernova) { // Galaxy went Nova!
                atover(0);
                continue;
            }
            if (hitme && justin==0) {
                attack(2);
                if (alldone) break;
-               if (game.state.galaxy[quadx][quady] == SUPERNOVA_PLACE) {       // went NOVA! 
+               if (game.state.galaxy[quadx][quady].supernova) {        // went NOVA! 
                    atover(0);
                    hitme = TRUE;
                    continue;
@@ -509,9 +508,9 @@ int main(int argc, char **argv)
 {
     int i, option;
 
-    game.options = OPTION_ALL &~ OPTION_IOMODES;
+    game.options = OPTION_ALL &~ (OPTION_IOMODES | OPTION_SHOWME);
     if (getenv("TERM"))
-       game.options |= OPTION_CURSES;
+       game.options |= OPTION_CURSES | OPTION_SHOWME;
     else
        game.options |= OPTION_TTY;
 
@@ -538,7 +537,7 @@ int main(int argc, char **argv)
     while (TRUE) { /* Play a game */
        setwnd(fullscreen_window);
 #ifdef DEBUG
-       prout("INITIAL OPTIONS: %0lx\n", game.options);
+       prout("INITIAL OPTIONS: %0lx", game.options);
 #endif /* DEBUG */
        clrscr();
        prelim();
@@ -752,7 +751,6 @@ void debugme(void)
        for (i=0; i < NDEVICES; i++) 
            if (game.damage[i] > 0.0) 
                game.damage[i] = 0.0;
-       stdamtim = 1e30;
     }
     proutn("Toggle idebug? ");
     if (ja() != 0) {
@@ -771,7 +769,6 @@ void debugme(void)
            key = scan();
            if (key == IHALPHA &&  isit("y")) {
                game.damage[i] = 10.0;
-               if (i == DRADIO) stdamtim = game.state.date;
            }
        }
     }
@@ -780,7 +777,7 @@ void debugme(void)
        int i;
        for (i = 1; i < NEVENTS; i++) {
            int key;
-           if (game.future[i] == 1e30) continue;
+           if (game.future[i] == FOREVER) continue;
            switch (i) {
            case FSNOVA:  proutn("Supernova       "); break;
            case FTBEAM:  proutn("T Beam          "); break;
@@ -800,5 +797,10 @@ void debugme(void)
        }
        chew();
     }
+    proutn("Induce supernova here? ");
+    if (ja() != 0) {
+       game.state.galaxy[quadx][quady].supernova = TRUE;
+       atover(1);
+    }
 }
 #endif