Magic-number elimination.
[open-adventure.git] / main.c
diff --git a/main.c b/main.c
index 9d466b41f5176ff042ade81676bcdd90c0462e97..8dcaa52eda8e465e4e2a31817acd6ffc8e46b5d4 100644 (file)
--- a/main.c
+++ b/main.c
 
 #define DIM(a) (sizeof(a)/sizeof(a[0]))
 
-FILE  *logfp = NULL, *rfp = NULL;
-bool oldstyle = false;
-bool prompt = true;
-
 // LCOV_EXCL_START
 // exclude from coverage analysis because it requires interactivity to test
 static void sig_handler(int signo)
 {
     if (signo == SIGINT) {
-        if (logfp != NULL)
-            fflush(logfp);
+        if (settings.logfp != NULL)
+            fflush(settings.logfp);
     }
     exit(EXIT_FAILURE);
 }
@@ -63,6 +59,7 @@ int main(int argc, char *argv[])
 #ifndef ADVENT_NOSAVE
     const char* opts = "l:or:";
     const char* usage = "Usage: %s [-l logfilename] [-o] [-r restorefilename]\n";
+    FILE *rfp = NULL;
 #else
     const char* opts = "l:o";
     const char* usage = "Usage: %s [-l logfilename] [-o]\n";
@@ -70,16 +67,16 @@ int main(int argc, char *argv[])
     while ((ch = getopt(argc, argv, opts)) != EOF) {
         switch (ch) {
         case 'l':
-            logfp = fopen(optarg, "w");
-            if (logfp == NULL)
+            settings.logfp = fopen(optarg, "w");
+            if (settings.logfp == NULL)
                 fprintf(stderr,
                         "advent: can't open logfile %s for write\n",
                         optarg);
             signal(SIGINT, sig_handler);
             break;
         case 'o':
-            oldstyle = true;
-            prompt = false;
+            settings.oldstyle = true;
+            settings.prompt = false;
             break;
 #ifndef ADVENT_NOSAVE
         case 'r':
@@ -120,8 +117,8 @@ int main(int argc, char *argv[])
     }
 #endif
 
-    if (logfp)
-        fprintf(logfp, "seed %ld\n", seedval);
+    if (settings.logfp)
+        fprintf(settings.logfp, "seed %ld\n", seedval);
 
     /* interpret commands until EOF or interrupt */
     for (;;) {
@@ -141,8 +138,6 @@ static bool fallback_handler(char *buf)
         printf("Seed set to %ld\n", sv);
         // autogenerated, so don't charge user time for it.
         --game.turns;
-        // here we reconfigure any global game state that uses random numbers
-        make_zzword(game.zzword);
         return true;
     }
     return false;
@@ -190,7 +185,7 @@ static void checkhints(void)
                     game.hintlc[hint] = 0;
                     return;
                 case 4:        /* dark */
-                    if (game.prop[EMERALD] != -1 && game.prop[PYRAMID] == -1)
+                    if (game.prop[EMERALD] != STATE_NOTFOUND && game.prop[PYRAMID] == STATE_NOTFOUND)
                         break;
                     game.hintlc[hint] = 0;
                     return;
@@ -379,26 +374,26 @@ static bool dwarfmove(void)
                 game.newloc = travel[kk].dest;
                 /* Have we avoided a dwarf encounter? */
                 if (SPECIAL(game.newloc))
-                   continue;
+                    continue;
                 else if (!INDEEP(game.newloc))
-                   continue;
-               else if (game.newloc == game.odloc[i])
-                   continue;
+                    continue;
+                else if (game.newloc == game.odloc[i])
+                    continue;
                 else if (j > 1 && game.newloc == tk[j - 1])
-                   continue;
-               else if (j >= DIM(tk) - 1)
-                   continue;
-               else if (game.newloc == game.dloc[i])
-                   continue;
-               else if (FORCED(game.newloc))
-                   continue;
-               else if (i == PIRATE && CNDBIT(game.newloc, COND_NOARRR))
-                   continue;
-               else if (travel[kk].nodwarves)
-                   continue;
-               tk[j++] = game.newloc;
+                    continue;
+                else if (j >= DIM(tk) - 1)
+                    continue;
+                else if (game.newloc == game.dloc[i])
+                    continue;
+                else if (FORCED(game.newloc))
+                    continue;
+                else if (i == PIRATE && CNDBIT(game.newloc, COND_NOARRR))
+                    continue;
+                else if (travel[kk].nodwarves)
+                    continue;
+                tk[j++] = game.newloc;
             } while
-               (!travel[kk++].stop);
+            (!travel[kk++].stop);
         tk[j] = game.odloc[i];
         if (j >= 2)
             --j;
@@ -498,7 +493,7 @@ static bool traveleq(long a, long b)
 /* Are two travel entries equal for purposes of skip after failed condition? */
 {
     return (travel[a].cond == travel[b].cond)
-       && (travel[a].dest == travel[b].dest);
+           && (travel[a].dest == travel[b].dest);
 }
 
 /*  Given the current location in "game.loc", and a motion verb number in
@@ -638,7 +633,7 @@ static bool playermove( int motion)
                         BUG(CONDITIONAL_TRAVEL_ENTRY_WITH_NO_ALTERATION); // LCOV_EXCL_LINE
                     ++te_tmp;
                 } while
-                   (traveleq(travel_entry, te_tmp));
+                (traveleq(travel_entry, te_tmp));
                 travel_entry = te_tmp;
             }
 
@@ -680,7 +675,7 @@ static bool playermove( int motion)
                             BUG(CONDITIONAL_TRAVEL_ENTRY_WITH_NO_ALTERATION); // LCOV_EXCL_LINE
                         ++te_tmp;
                     } while
-                       (traveleq(travel_entry, te_tmp));
+                    (traveleq(travel_entry, te_tmp));
                     travel_entry = te_tmp;
                     continue; /* goto L12 */
                 case 3:
@@ -694,7 +689,7 @@ static bool playermove( int motion)
                      * entries check for game.prop(TROLL)=0.)  Special
                      * stuff for bear. */
                     if (game.prop[TROLL] == TROLL_PAIDONCE) {
-                        pspeak(TROLL, look, TROLL_PAIDONCE);
+                     pspeak(TROLL, look, TROLL_PAIDONCE, true);
                         game.prop[TROLL] = TROLL_UNPAID;
                         move(TROLL2, 0);
                         move(TROLL2 + NOBJECTS, 0);
@@ -922,7 +917,7 @@ static void listobjects(void)
             int kk = game.prop[obj];
             if (obj == STEPS && game.loc == game.fixed[STEPS])
                 kk = 1;
-            pspeak(obj, look, kk);
+            pspeak(obj, look, kk, true);
         }
     }
 }
@@ -1011,7 +1006,7 @@ L2600:
          *  tick game.clock1 unless well into cave (and not at Y2). */
         if (game.closed) {
             if (game.prop[OYSTER] < 0 && TOTING(OYSTER))
-                pspeak(OYSTER, look, 1);
+             pspeak(OYSTER, look, 1, true);
             for (size_t i = 1; i <= NOBJECTS; i++) {
                 if (TOTING(i) && game.prop[i] < 0)
                     game.prop[i] = -1 - game.prop[i];
@@ -1081,7 +1076,7 @@ L2607:
         packed_to_token(command.wd2, word2);
         V1 = get_vocab_id(word1);
         V2 = get_vocab_id(word2);
-        if (V1 == ENTER && (V2 == STREAM || V2 == 1000 + WATER)) {
+        if (V1 == ENTER && (V2 == STREAM || V2 == PROMOTE_WORD(WATER))) {
             if (LIQLOC(game.loc) == WATER) {
                 rspeak(FEET_WET);
             } else {