Code simplification.
[open-adventure.git] / main.c
diff --git a/main.c b/main.c
index 1dc395eccab8fb6205c356d14e76cb7a88422320..2d9a20701a2513bbcd1196edb344e6e12963036e 100644 (file)
--- a/main.c
+++ b/main.c
@@ -49,7 +49,6 @@ bool editline = true;
 bool prompt = true;
 
 extern void initialise();
-extern void score(long);
 extern int action(FILE *, long, long, long);
 
 void sig_handler(int signo)
@@ -126,7 +125,7 @@ int main(int argc, char *argv[])
 
     /*  Start-up, dwarf stuff */
     game.zzword=RNDVOC(3,0);
-    game.novice=YES(stdin, WELCOME_YOU,CAVE_NEARBY,ARB_0);
+    game.novice=YES(stdin, WELCOME_YOU,CAVE_NEARBY,NO_MESSAGE);
     game.newloc = LOC_START;
     game.loc = LOC_START;
     game.limit=330;
@@ -141,7 +140,7 @@ int main(int argc, char *argv[])
            break;
     }
     /* show score and exit */
-    score(1);
+    score(quitgame);
 }
 
 static bool fallback_handler(char *buf)
@@ -244,13 +243,13 @@ static void checkhints(FILE *cmdin)
     
                /* Fall through to hint display */
                game.hintlc[hint]=0;
-               if (!YES(cmdin,HINTS[hint][3],ARB_0,OK_MAN))
+               if (!YES(cmdin,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);
-               if (game.hinted[hint] && game.limit > 30)
-                   game.limit=game.limit+30*HINTS[hint][2];
+               if (game.hinted[hint] && game.limit > WARNTIME)
+                   game.limit += WARNTIME*HINTS[hint][2];
            }
        }
     }
@@ -263,8 +262,8 @@ bool spotted_by_pirate(int i)
 
     /*  The pirate's spotted him.  He leaves him alone once we've
      *  found chest.  K counts if a treasure is here.  If not, and
-     *  tally=1 for an unseen chest, let the pirate be spotted.
-     *  Note that game.place[CHEST]=0 might mean that he's thrown
+     *  tally=1 for an unseen chest, let the pirate be spotted.  Note
+     *  that game.place[CHEST] = NOWHERE might mean that he's thrown
      *  it to the troll, but in that case he's seen the chest
      *  (game.prop=0). */
     if (game.loc == game.chloc || game.prop[CHEST] >= 0)
@@ -285,7 +284,7 @@ bool spotted_by_pirate(int i)
        }
     }
     /* Force chest placement before player finds last treasure */
-    if (game.tally == 1 && snarfed == 0 && game.place[CHEST] == 0 && HERE(LAMP) && game.prop[LAMP] == 1) {
+    if (game.tally == 1 && snarfed == 0 && game.place[CHEST] == NOWHERE && HERE(LAMP) && game.prop[LAMP] == 1) {
        RSPEAK(PIRATE_SPOTTED);
        movechest = true;
     }
@@ -324,7 +323,7 @@ static bool dwarfmove(void)
     int kk, stick, attack;
     long tk[21];
 
-       /*  Dwarf stuff.  See earlier comments for description of
+    /*  Dwarf stuff.  See earlier comments for description of
      *  variables.  Remember sixth dwarf is pirate and is thus
      *  very different except for motion rules. */
 
@@ -475,22 +474,22 @@ static void croak(FILE *cmdin)
        /*  He died during closing time.  No resurrection.  Tally up a
         *  death and exit. */
        RSPEAK(DEATH_CLOSING);
-       score(0);
+       score(endgame);
     } else {
        /* FIXME: Arithmetic on message numbers */
        if (!YES(cmdin,WATCH_IT+game.numdie*2,WHICH_WAY+game.numdie*2,OK_MAN))
-           score(0);
+           score(endgame);
        if (game.numdie == MAXDIE)
-           score(0);
-       game.place[WATER]=0;
-       game.place[OIL]=0;
+           score(endgame);
+       game.place[WATER] = NOWHERE;
+       game.place[OIL] = NOWHERE;
        if (TOTING(LAMP))
            game.prop[LAMP]=0;
        for (int j=1; j<=NOBJECTS; j++) {
            int i=NOBJECTS + 1 - j;
            if (TOTING(i)) {
                /* Always leave lamp where it's accessible aboveground */
-               DROP(i, (i == LAMP) ? 1 : game.oldlc2);
+               DROP(i, (i == LAMP) ? LOC_START : game.oldlc2);
            }
        }
        game.loc = LOC_BUILDING;
@@ -499,7 +498,7 @@ static void croak(FILE *cmdin)
 }
 
 /*  Given the current location in "game.loc", and a motion verb number in
- *  "K", put the new location in "game.newloc".  The current loc is saved
+ *  "motion", put the new location in "game.newloc".  The current loc is saved
  *  in "game.oldloc" in case he wants to retreat.  The current
  *  game.oldloc is saved in game.oldlc2, in case he dies.  (if he
  *  does, game.newloc will be limbo, and game.oldloc will be what killed
@@ -556,9 +555,10 @@ static bool playermove(FILE *cmdin, token_t verb, int motion)
     }
     else if (motion == LOOK) {
        /*  Look.  Can't give more detail.  Pretend it wasn't dark
-        *  (though it may "now" be dark) so he won't fall into a
+        *  (though it may now be dark) so he won't fall into a
         *  pit while staring into the gloom. */
-       if (game.detail < 3)RSPEAK(NO_MORE_DETAIL);
+       if (game.detail < 3)
+           RSPEAK(NO_MORE_DETAIL);
        ++game.detail;
        game.wzdark=false;
        game.abbrev[game.loc]=0;
@@ -566,7 +566,7 @@ static bool playermove(FILE *cmdin, token_t verb, int motion)
     }
     else if (motion == CAVE) {
        /*  Cave.  Different messages depending on whether above ground. */
-       RSPEAK((OUTSID(game.loc) && game.loc != 8) ? FOLLOW_STREAM : NEED_DETAIL);
+       RSPEAK((OUTSID(game.loc) && game.loc != LOC_GRATE) ? FOLLOW_STREAM : NEED_DETAIL);
        return true;
     }
     else {
@@ -581,6 +581,7 @@ static bool playermove(FILE *cmdin, token_t verb, int motion)
        if (MOD(scratchloc,1000) == 1 || MOD(scratchloc,1000) == motion)
            break;
        if (TRAVEL[kk] < 0) {
+           /* FIXME: Magic numbers! */
            /*  Non-applicable motion.  Various messages depending on
             *  word given. */
            int spk=CANT_APPLY;
@@ -640,6 +641,7 @@ static bool playermove(FILE *cmdin, token_t verb, int motion)
                 *  emerald.  Note: travel table must include "useless"
                 *  entries going through passage, which can never be used for
                 *  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;
@@ -695,7 +697,8 @@ static bool playermove(FILE *cmdin, token_t verb, int motion)
            BUG(20);
        }
     } while
-           (false);
+       (false);
+    /* FIXME: Arithmetic on location number, becoming a message number */
     RSPEAK(game.newloc-500);
     game.newloc=game.loc;
     return true;
@@ -751,7 +754,7 @@ static bool closecheck(void)
        MOVE(TROLL2,PLAC[TROLL]);
        MOVE(TROLL2+NOBJECTS,FIXD[TROLL]);
        JUGGLE(CHASM);
-       if (game.prop[BEAR] != 3)DSTROY(BEAR);
+       if (game.prop[BEAR] != 3)DESTROY(BEAR);
        game.prop[CHAIN]=0;
        game.fixed[CHAIN]=0;
        game.prop[AXE]=0;
@@ -804,7 +807,7 @@ static bool closecheck(void)
 
        for (int i=1; i<=NOBJECTS; i++) {
            if (TOTING(i))
-               DSTROY(i);
+               DESTROY(i);
        }
 
        RSPEAK(CAVE_CLOSED);
@@ -828,7 +831,7 @@ static void lampcheck(void)
      *  Second is for other cases of lamp dying.  12400 is when it
      *  goes out.  Even then, he can explore outside for a while
      *  if desired. */
-    if (game.limit<=30 && HERE(BATTER) && game.prop[BATTER]==0 && HERE(LAMP))
+    if (game.limit <= WARNTIME && HERE(BATTER) && game.prop[BATTER]==0 && HERE(LAMP))
     {
        RSPEAK(REPLACE_BATTERIES);
        game.prop[BATTER]=1;
@@ -841,11 +844,11 @@ static void lampcheck(void)
        game.prop[LAMP]=0;
        if (HERE(LAMP))
            RSPEAK(LAMP_OUT);
-    } else if (game.limit <= 30) {
+    } else if (game.limit <= WARNTIME) {
        if (!game.lmwarn && HERE(LAMP)) {
            game.lmwarn=true;
            int spk=GET_BATTERIES;
-           if (game.place[BATTER] == 0)spk=LAMP_DIM;
+           if (game.place[BATTER] == NOWHERE)spk=LAMP_DIM;
            if (game.prop[BATTER] == 1)spk=MISSING_BATTERIES;
            RSPEAK(spk);
        }
@@ -901,8 +904,8 @@ static void listobjects(void)
 static bool do_command(FILE *cmdin)
 /* Get and execute a command */ 
 {
-    long KQ, verb, V1, V2;
-    long i, k, KMOD;
+    long kq, verb, V1, V2;
+    long i, k, kmod;
     static long igo = 0;
     static long obj = 0;
     enum speechpart part;
@@ -950,7 +953,7 @@ static bool do_command(FILE *cmdin)
                croak(cmdin);
                continue;       /* back to top of main interpreter loop */
            }
-           msg=arbitrary_messages[16];
+           msg=arbitrary_messages[PITCH_DARK];
        }
        if (TOTING(BEAR))RSPEAK(TAME_BEAR);
        newspeak(msg);
@@ -1055,23 +1058,23 @@ static bool do_command(FILE *cmdin)
        if (i == -1) {
            /* Gee, I don't understand. */
            if (fallback_handler(rawbuf))
-               return true;
+               continue;
            SETPRM(1,WD1,WD1X);
            RSPEAK(DONT_KNOW);
            goto L2600;
        }
-       KMOD=MOD(i,1000);
-       KQ=i/1000+1;
-       switch (KQ-1)
+       kmod=MOD(i,1000);
+       kq=i/1000+1;
+       switch (kq-1)
        {
        case 0:
-           if (playermove(cmdin, verb, KMOD))
+           if (playermove(cmdin, verb, kmod))
                return true;
            else
                continue;       /* back to top of main interpreter loop */
-       case 1: part=unknown; obj = KMOD; break;
-       case 2: part=intransitive; verb = KMOD; break;
-       case 3: RSPEAK(KMOD); goto L2012;
+       case 1: part=unknown; obj = kmod; break;
+       case 2: part=intransitive; verb = kmod; break;
+       case 3: RSPEAK(kmod); goto L2012;
        default: BUG(22);
        }
 
@@ -1103,7 +1106,7 @@ static bool do_command(FILE *cmdin)
        case GO_DWARFWAKE:
            /*  Oh dear, he's disturbed the dwarves. */
            RSPEAK(DWARVES_AWAKEN);
-           score(0);
+           score(endgame);
            return true;
        default:
            BUG(99);