Reindent and cleanup.
[open-adventure.git] / main.c
diff --git a/main.c b/main.c
index 405d9d37fe18280d0efdd996affd6ede7c672442..0dca0d845e23df7c07a2982b183b0db864eadc20 100644 (file)
--- a/main.c
+++ b/main.c
@@ -66,7 +66,7 @@ static void sig_handler(int signo)
  *           15-treasure version (adventure) by Don Woods, April-June 1977
  *           20-treasure version (rev 2) by Don Woods, August 1978
  *             Errata fixed: 78/12/25
- *          Revived 2017 as Open Advebture.
+ *          Revived 2017 as Open Adventure.
  */
 
 static bool do_command(FILE *);
@@ -102,6 +102,19 @@ int main(int argc, char *argv[])
         case 's':
             editline = false;
             break;
+        default:
+            fprintf(stderr,
+                    "Usage: %s [-l logfilename] [-o] [-r restorefilename] [-s] \n", argv[0]);
+            fprintf(stderr,
+                    "  where -l creates a log file of your game named as specified'\n");
+            fprintf(stderr,
+                    "        -o 'oldstyle' (no prompt, no command editing, displays 'Initialising...')\n");
+            fprintf(stderr,
+                    "        -r indicates restoring from specified saved game file\n");
+            fprintf(stderr,
+                    "        -s indicates playing with command editing suppressed\n");
+            exit(-1);
+            break;
         }
     }
 
@@ -135,7 +148,7 @@ int main(int argc, char *argv[])
     game.loc = LOC_START;
     game.limit = 330;
     if (!rfp) {
-        game.novice = YES(stdin, WELCOME_YOU, CAVE_NEARBY, NO_MESSAGE);
+        game.novice = YES(WELCOME_YOU, CAVE_NEARBY, NO_MESSAGE);
         if (game.novice)game.limit = 1000;
     } else {
         restore(rfp);
@@ -150,7 +163,7 @@ int main(int argc, char *argv[])
             break;
     }
     /* show score and exit */
-    score(quitgame);
+    terminate(quitgame);
 }
 
 static bool fallback_handler(char *buf)
@@ -174,7 +187,7 @@ static bool fallback_handler(char *buf)
  *  all come back here eventually to finish the loop.  Ignore
  *  "HINTS" < 4 (special stuff, see database notes).
  */
-static void checkhints(FILE *cmdin)
+static void checkhints(void)
 {
     if (COND[game.loc] >= game.conds) {
         for (int hint = 1; hint <= HNTMAX; hint++) {
@@ -245,17 +258,17 @@ static void checkhints(FILE *cmdin)
                     game.hintlc[hint] = 0;
                     return;
                 default:
-                    BUG(27);
+                    BUG(HINT_NUMBER_EXCEEDS_GOTO_LIST);
                     break;
                 }
 
                 /* Fall through to hint display */
                 game.hintlc[hint] = 0;
-                if (!YES(cmdin, HINTS[hint][3], NO_MESSAGE, OK_MAN))
+                if (!YES(HINTS[hint][3], NO_MESSAGE, OK_MAN))
                     return;
                 SETPRM(1, HINTS[hint][2], HINTS[hint][2]);
                 RSPEAK(HINT_COST);
-                game.hinted[hint] = YES(cmdin, WANT_HINT, HINTS[hint][4], OK_MAN);
+                game.hinted[hint] = YES(WANT_HINT, HINTS[hint][4], OK_MAN);
                 if (game.hinted[hint] && game.limit > WARNTIME)
                     game.limit += WARNTIME * HINTS[hint][2];
             }
@@ -474,7 +487,7 @@ static bool dwarfmove(void)
  *  without the lamp!).  game.oldloc is zapped so he can't just
  *  "retreat". */
 
-static void croak(FILE *cmdin)
+static void croak(void)
 /*  Okay, he's dead.  Let's get on with it. */
 {
     ++game.numdie;
@@ -482,12 +495,11 @@ static void croak(FILE *cmdin)
         /*  He died during closing time.  No resurrection.  Tally up a
          *  death and exit. */
         RSPEAK(DEATH_CLOSING);
-        score(endgame);
-
+        terminate(endgame);
     }
     /* FIXME: Arithmetic on message numbers */
-    else if (game.numdie == MAXDIE || !YES(cmdin, WATCH_IT + game.numdie * 2, WHICH_WAY + game.numdie * 2, OK_MAN))
-        score(endgame);
+    else if (game.numdie == MAXDIE || !YES(WATCH_IT + game.numdie * 2, WHICH_WAY + game.numdie * 2, OK_MAN))
+        terminate(endgame);
     else {
         game.place[WATER] = game.place[OIL] = NOWHERE;
         if (TOTING(LAMP))
@@ -512,12 +524,12 @@ static void croak(FILE *cmdin)
  *  him, so we need game.oldlc2, which is the last place he was
  *  safe.) */
 
-static bool playermove(FILE *cmdin, token_t verb, int motion)
+static bool playermove(token_t verb, int motion)
 {
     int scratchloc, k2, kk = KEY[game.loc];
     game.newloc = game.loc;
     if (kk == 0)
-        BUG(26);
+        BUG(LOCATION_HAS_NO_TRAVEL_ENTRIES);
     if (motion == NUL)
         return true;
     else if (motion == BACK) {
@@ -624,8 +636,10 @@ static bool playermove(FILE *cmdin, token_t verb, int motion)
                 /* else fall through */
             } else if (game.prop[motion] != game.newloc / 100 - 3)
                 break;
+L12:
             do {
-                if (TRAVEL[kk] < 0)BUG(25);
+                if (TRAVEL[kk] < 0)
+                    BUG(CONDITIONAL_TRAVEL_ENTRY_WITH_NO_ALTERATION);
                 ++kk;
                 game.newloc = labs(TRAVEL[kk]) / 1000;
             } while
@@ -646,10 +660,10 @@ static bool playermove(FILE *cmdin, token_t verb, int motion)
                  *  actual motion, but can be spotted by "go back". */
                 /* FIXME: Arithmetic on location numbers */
                 game.newloc = 99 + 100 - game.loc;
-                if (game.holdng == 0 || (game.holdng == 1 && TOTING(EMRALD)))
-                    return true;
-                game.newloc = game.loc;
-                RSPEAK(MUST_DROP);
+                if (game.holdng > 1 || (game.holdng == 1 && !TOTING(EMRALD))) {
+                    game.newloc = game.loc;
+                    RSPEAK(MUST_DROP);
+                }
                 return true;
             case 2:
                 /*  Travel 302.  Plover transport.  Drop the emerald (only use
@@ -657,13 +671,7 @@ static bool playermove(FILE *cmdin, token_t verb, int motion)
                  *  plover-passage to get it out.  Having dropped it, go back and
                  *  pretend he wasn't carrying it after all. */
                 DROP(EMRALD, game.loc);
-                do {
-                    if (TRAVEL[kk] < 0)BUG(25);
-                    ++kk;
-                    game.newloc = labs(TRAVEL[kk]) / 1000;
-                } while
-                (game.newloc == scratchloc);
-                continue;      /* back to top of do/while loop */
+                goto L12;
             case 3:
                 /*  Travel 303.  Troll bridge.  Must be done only as special
                  *  motion so that dwarves won't wander across and encounter
@@ -693,11 +701,10 @@ static bool playermove(FILE *cmdin, token_t verb, int motion)
                     game.fixed[BEAR] = -1;
                     game.prop[BEAR] = 3;
                     game.oldlc2 = game.newloc;
-                    croak(cmdin);
-                    return false;
+                    croak();
                 }
             }
-            BUG(20);
+            BUG(SPECIAL_TRAVEL_500_GT_L_GT_300_EXCEEDS_GOTO_LIST);
         }
     } while
     (false);
@@ -915,7 +922,7 @@ static bool do_command(FILE *cmdin)
     if (OUTSID(game.newloc) && game.newloc != 0 && game.closng) {
         RSPEAK(EXIT_CLOSED);
         game.newloc = game.loc;
-        if (!game.panic)game.clock2 = 15;
+        if (!game.panic)game.clock2 = PANICTIME;
         game.panic = true;
     }
 
@@ -935,13 +942,13 @@ static bool do_command(FILE *cmdin)
     game.loc = game.newloc;
 
     if (!dwarfmove())
-        croak(cmdin);
+        croak();
 
     /*  Describe the current location and (maybe) get next command. */
 
     for (;;) {
         if (game.loc == 0)
-            croak(cmdin);
+            croak();
         const char* msg = locations[game.loc].description.small;
         if (MOD(game.abbrev[game.loc], game.abbnum) == 0 || msg == 0)
             msg = locations[game.loc].description.big;
@@ -951,15 +958,15 @@ static bool do_command(FILE *cmdin)
             if (game.wzdark && PCT(35)) {
                 RSPEAK(PIT_FALL);
                 game.oldlc2 = game.loc;
-                croak(cmdin);
+                croak();
                 continue;      /* back to top of main interpreter loop */
             }
             msg = arbitrary_messages[PITCH_DARK];
         }
         if (TOTING(BEAR))RSPEAK(TAME_BEAR);
-        newspeak(msg);
+        speak(msg);
         if (FORCED(game.loc)) {
-            if (playermove(cmdin, verb, 1))
+            if (playermove(verb, 1))
                 return true;
             else
                 continue;      /* back to top of main interpreter loop */
@@ -974,7 +981,7 @@ L2012:
         obj = 0;
 
 L2600:
-        checkhints(cmdin);
+        checkhints();
 
         /*  If closing time, check for any objects being toted with
          *  game.prop < 0 and set the prop to -1-game.prop.  This way
@@ -1004,7 +1011,7 @@ L2607:
         game.foobar = (game.foobar > 0 ? -game.foobar : 0);
         ++game.turns;
         if (game.turns == game.thresh) {
-            newspeak(turn_threshold_messages[game.trndex]);
+            speak(turn_threshold_messages[game.trndex]);
             game.trnluz = game.trnluz + TRNVAL[game.trndex] / 100000;
             ++game.trndex;
             game.thresh = -1;
@@ -1069,7 +1076,7 @@ Lookup:
         kmod = MOD(defn, 1000);
         switch (defn / 1000) {
         case 0:
-            if (playermove(cmdin, verb, kmod))
+            if (playermove(verb, kmod))
                 return true;
             else
                 continue;      /* back to top of main interpreter loop */
@@ -1085,7 +1092,7 @@ Lookup:
             RSPEAK(kmod);
             goto L2012;
         default:
-            BUG(22);
+            BUG(VOCABULARY_TYPE_N_OVER_1000_NOT_BETWEEN_0_AND_3);
         }
 
 Laction:
@@ -1093,7 +1100,7 @@ Laction:
         case GO_TERMINATE:
             return true;
         case GO_MOVE:
-            playermove(cmdin, verb, NUL);
+            playermove(verb, NUL);
             return true;
         case GO_TOP:
             continue;  /* back to top of main interpreter loop */
@@ -1121,10 +1128,9 @@ Laction:
         case GO_DWARFWAKE:
             /*  Oh dear, he's disturbed the dwarves. */
             RSPEAK(DWARVES_AWAKEN);
-            score(endgame);
-            return true;
+            terminate(endgame);
         default:
-            BUG(99);
+            BUG(ACTION_RETURNED_PHASE_CODE_BEYOND_END_OF_SWITCH);
         }
     }
 }