Rewrite to get ride of FORTRANish galaxy and newstuff arrays. It's
[super-star-trek.git] / sst.c
diff --git a/sst.c b/sst.c
index c97204b0c1ccdec6a25cdec2ef8918a74c62fbab..2dca29e412550cde4c44e2c0804f12f7a0b8110d 100644 (file)
--- a/sst.c
+++ b/sst.c
 
 Dave Matuszek says:
 
-  SRSCAN, MOVE, PHASERS, CALL, STATUS, IMPULSE, PHOTONS, ABANDON,
-  LRSCAN, WARP, SHIELDS, DESTRUCT, CHART, REST, DOCK, QUIT, and DAMAGE
-  were in the original non-"super" version.
+   SRSCAN, MOVE, PHASERS, CALL, STATUS, IMPULSE, PHOTONS, ABANDON,
+   LRSCAN, WARP, SHIELDS, DESTRUCT, CHART, REST, DOCK, QUIT, and DAMAGE
+   were in the original non-"super" version.
 
-  Tholians weren't in the original. Dave is dubious about their merits.
-  There weren't even planets.  He says the bit about the Galileo getting
-  turned into a McDonald's is "consistant with our original vision".
+   Tholians weren't in the original. Dave is dubious about their merits.
 
-  Dilithium crystals weren't in the original.  Dave is OK with this idea.
+   Planets and dilithium crystals weren't in the original.  Dave is OK
+   with this idea. He says the bit about the Galileo getting
+   turned into a McDonald's is "consistant with our original vision".
 
-  Dave also says the Space Thingy should not be preserved across saved games,
-  so you can't prove to others that you've seen it.  He says it shouldn't
-  fire back, either.  It should so nothing except scream and disappear
-  when hit by photon torpedos.  It's OK that it moves when rammed, but it
-  didn't in the original.
+   Dave also says the Space Thingy should not be preserved across saved
+   games, so you can't prove to others that you've seen it.  He says it
+   shouldn't fire back, either.  It should do nothing except scream and
+   disappear when hit by photon torpedos.  It's OK that it may move
+   when attacked, but it didn't in the original.
 
-  The Faerie Queen was in the original.
+   The Faerie Queen, black holes, and time warping were in the original.
 
 Here are Tom Almy's changes:
 
- Compared to original version, I've changed the "help" command to
  Compared to original version, I've changed the "help" command to
    "call" and the "terminate" command to "quit" to better match
    user expectations. The DECUS version apparently made those changes
    as well as changing "freeze" to "save". However I like "freeze".
@@ -114,8 +114,7 @@ Eric Raymond's changes:
 
    2. Status report now indicates when dilithium crystals are on board.
 
-   3. Can now report starbases left in scrscan.
-
+   3. Per Dave Matuszek's remarks, Thingy state is not saved across games.
    */
 
 /* the input queue */
@@ -303,7 +302,7 @@ void enqueue(char *s)
 
 static void makemoves(void) 
 {
-    int i, v, hitme;
+    int i, v = 0, hitme;
     clrscr();
     setwnd(message_window);
     while (TRUE) { /* command loop */
@@ -330,7 +329,8 @@ static void makemoves(void)
                    v = commands[i].value;
                    break;
                }
-           if (i < ABANDON) break;
+           if (i < ABANDON && (!commands[i].option || (commands[i].option & game.options))) 
+               break;
            for (; i < NUMCOMMANDS; i++)
                if (strcasecmp(commands[i].name, citem) == 0) {
                    v = commands[i].value;
@@ -483,14 +483,14 @@ static void makemoves(void)
                events();
                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;
@@ -747,7 +747,7 @@ void debugme(void)
     proutn("Reset damage? ");
     if (ja() != 0) {
        int i;
-       for (i=0; i <= NDEVICES; i++) 
+       for (i=0; i < NDEVICES; i++) 
            if (game.damage[i] > 0.0) 
                game.damage[i] = 0.0;
        stdamtim = 1e30;
@@ -761,7 +761,7 @@ void debugme(void)
     proutn("Cause selective damage? ");
     if (ja() != 0) {
        int i, key;
-       for (i=1; i <= NDEVICES; i++) {
+       for (i=0; i < NDEVICES; i++) {
            proutn("Kill ");
            proutn(device[i]);
            proutn("? ");