Fix uninitialized-variable warning.
[open-adventure.git] / main.c
diff --git a/main.c b/main.c
index 8bf0c1aeb6f45bbbcd44bd36990415f46bde4479..a1115a6cc2b342d4bca8a20aab619fd865ef06af 100644 (file)
--- a/main.c
+++ b/main.c
@@ -21,6 +21,7 @@
 #include "advent.h"
 #include "database.h"
 #include "linenoise/linenoise.h"
+#include "newdb.h"
 
 struct game_t game;
 
@@ -38,7 +39,9 @@ long AMBER, AXE, BACK, BATTER, BEAR, BIRD, BLOOD,
                RUBY, RUG, SAPPH, SAY, SIGN, SNAKE,
                STEPS, STREAM, THROW, TRIDNT, TROLL, TROLL2,
                URN, VASE, VEND, VOLCAN, WATER;
-long K, SPK, WD1, WD1X, WD2, WD2X;
+long WD1, WD1X, WD2, WD2X;
+
+static int K;  /* information leak, should go away */
 
 FILE  *logfp;
 bool oldstyle = false;
@@ -417,11 +420,11 @@ static bool dwarfmove(void)
        return true;
     if (game.dflag == 2)game.dflag=3;
     SETPRM(1,attack,0);
-    K=6;
-    if (attack > 1)K=250;
-    RSPEAK(K);
+    int k=6;
+    if (attack > 1)k=250;
+    RSPEAK(k);
     SETPRM(1,stick,0);
-    RSPEAK(K+1+2/(1+stick));
+    RSPEAK(k+1+2/(1+stick));
     if (stick == 0)
        return true;
     game.oldlc2=game.loc;
@@ -566,49 +569,48 @@ static bool playermove(FILE *cmdin, token_t verb)
        if (TRAVEL[KK] < 0) {
            /*  Non-applicable motion.  Various messages depending on
             *  word given. */
-           SPK=12;
-           if (K >= 43 && K <= 50)SPK=52;
-           if (K == 29 || K == 30)SPK=52;
-           if (K == 7 || K == 36 || K == 37)SPK=10;
-           if (K == 11 || K == 19)SPK=11;
-           if (verb == FIND || verb == INVENT)SPK=59;
-           if (K == 62 || K == 65)SPK=42;
-           if (K == 17)SPK=80;
-           RSPEAK(SPK);
+           int spk=12;
+           if (K >= 43 && K <= 50)spk=52;
+           if (K == 29 || K == 30)spk=52;
+           if (K == 7 || K == 36 || K == 37)spk=10;
+           if (K == 11 || K == 19)spk=11;
+           if (verb == FIND || verb == INVENT)spk=59;
+           if (K == 62 || K == 65)spk=42;
+           if (K == 17)spk=80;
+           RSPEAK(spk);
            return true;
        }
        ++KK;
     }
     LL=LL/1000;
 
-L11:
-    game.newloc=LL/1000;
-    K=MOD(game.newloc,100);
-    if (game.newloc <= 300) {
-       if (game.newloc <= 100)
-           goto L14;
-       if (TOTING(K) || (game.newloc > 200 && AT(K)))
-           goto L16;
-       goto L12;
+    for (;;) {
+       game.newloc=LL/1000;
+       K=MOD(game.newloc,100);
+       if (game.newloc <= 300) {
+           if (game.newloc <= 100) {
+               if (game.newloc == 0 || PCT(game.newloc))
+                   break;
+               /* else fall through */
+           } if (TOTING(K) || (game.newloc > 200 && AT(K)))
+                 break;
+           /* else fall through */
+       }
+       else if (game.prop[K] != game.newloc/100-3)
+           break;
+    L12:
+       do {
+           if (TRAVEL[KK] < 0)BUG(25);
+           ++KK;
+           game.newloc=labs(TRAVEL[KK])/1000;
+       } while
+           (game.newloc == LL);
+       LL=game.newloc;
     }
-    if (game.prop[K] != game.newloc/100-3)
-       goto L16;
-L12:
-    do {
-       if (TRAVEL[KK] < 0)BUG(25);
-       ++KK;
-       game.newloc=labs(TRAVEL[KK])/1000;
-    } while
-        (game.newloc == LL);
-    LL=game.newloc;
-    goto L11;
 
-L14:
-    if (game.newloc != 0 && !PCT(game.newloc))
-       goto L12;
-L16:
     game.newloc=MOD(LL,1000);
-    if (game.newloc <= 300) return true;
+    if (game.newloc <= 300)
+       return true;
     if (game.newloc <= 500) {
        game.newloc=game.newloc-300;
        switch (game.newloc)
@@ -710,9 +712,9 @@ static bool do_command(FILE *cmdin)
 
 L2000: if (game.loc == 0)
            croak(cmdin);
-       KK=STEXT[game.loc];
-       if (MOD(game.abbrev[game.loc],game.abbnum) == 0 || KK == 0)
-           KK=LTEXT[game.loc];
+       char* msg = short_location_descriptions[game.loc];
+       if (MOD(game.abbrev[game.loc],game.abbnum) == 0 || msg == 0)
+           msg=long_location_descriptions[game.loc];
        if (!FORCED(game.loc) && DARK(game.loc)) {
            /*  The easiest way to get killed is to fall into a pit in
             *  pitch darkness. */
@@ -722,10 +724,10 @@ L2000:    if (game.loc == 0)
                croak(cmdin);
                goto L2000;
            }
-           KK=RTEXT[16];
+           msg=arbitrary_messages[16];
        }
        if (TOTING(BEAR))RSPEAK(141);
-       SPEAK(KK);
+       newspeak(msg);
        K=1;
        if (FORCED(game.loc)) {
            goto L8;
@@ -769,10 +771,6 @@ L2006:     KK=game.prop[obj];
 L2008: i=game.link[i];
         goto L2004;
 
-L2009: K=54;
-L2010: SPK=K;
-L2011: RSPEAK(SPK);
-
 L2012: VERB=0;
        game.oldobj=obj;
        obj=0;
@@ -798,7 +796,7 @@ L2600:      if (COND[game.loc] >= game.conds) {
         *  objects won't be described until they've been picked up
         *  and put down separate from their respective piles.  Don't
         *  tick game.clock1 unless well into cave (and not at Y2). */
-L2603: if (game.closed) {
+       if (game.closed) {
            if (game.prop[OYSTER] < 0 && TOTING(OYSTER))
                PSPEAK(OYSTER,1);
            for (i=1; i<=NOBJECTS; i++) {
@@ -820,7 +818,7 @@ L2603:      if (game.closed) {
 L2607: game.foobar=(game.foobar>0 ? -game.foobar : 0);
        ++game.turns;
        if (game.turns == game.thresh) {
-       SPEAK(TTEXT[game.trndex]);
+       newspeak(turn_threshold_messages[game.trndex]);
        game.trnluz=game.trnluz+TRNVAL[game.trndex]/100000;
        ++game.trndex;
        game.thresh = -1;
@@ -965,30 +963,37 @@ L2607:    game.foobar=(game.foobar>0 ? -game.foobar : 0);
        } else if (game.limit <= 30) {
            if (!game.lmwarn && HERE(LAMP)) {
                game.lmwarn=true;
-               SPK=187;
-               if (game.place[BATTER] == 0)SPK=183;
-               if (game.prop[BATTER] == 1)SPK=189;
-               RSPEAK(SPK);
+               int spk=187;
+               if (game.place[BATTER] == 0)spk=183;
+               if (game.prop[BATTER] == 1)spk=189;
+               RSPEAK(spk);
            }
        }
 L19999: K=43;
        if (LIQLOC(game.loc) == WATER)K=70;
        V1=VOCAB(WD1,-1);
        V2=VOCAB(WD2,-1);
-       if (V1 == ENTER && (V2 == STREAM || V2 == 1000+WATER))
-           goto L2010;
-       if (V1 == ENTER && WD2 > 0)
-           goto L2800;
-       if (!((V1 != 1000+WATER && V1 != 1000+OIL) ||
-             (V2 != 1000+PLANT && V2 != 1000+DOOR))) {
-           if (AT(V2-1000))
-               WD2=MAKEWD(16152118);
+       if (V1 == ENTER && (V2 == STREAM || V2 == 1000+WATER)) {
+           RSPEAK(K);
+           goto L2012;
        }
-       if (V1 == 1000+CAGE && V2 == 1000+BIRD && HERE(CAGE) && HERE(BIRD))
+       if (V1 == ENTER && WD2 > 0) {
+           WD1=WD2;
+           WD1X=WD2X;
+           WD2=0;
+       } else {
+           if (!((V1 != 1000+WATER && V1 != 1000+OIL) ||
+                 (V2 != 1000+PLANT && V2 != 1000+DOOR))) {
+               if (AT(V2-1000))
+                   WD2=MAKEWD(16152118);
+           }
+           if (V1 == 1000+CAGE && V2 == 1000+BIRD && HERE(CAGE) && HERE(BIRD))
                WD1=MAKEWD(301200308);
+       }
 L2620: if (WD1 == MAKEWD(23051920)) {
            ++game.iwest;
-           if (game.iwest == 10)RSPEAK(17);
+           if (game.iwest == 10)
+               RSPEAK(17);
        }
        if (WD1 == MAKEWD( 715) && WD2 != 0) {
            if (++IGO == 10)
@@ -996,8 +1001,14 @@ L2620:    if (WD1 == MAKEWD(23051920)) {
        }
 L2630:
        i=VOCAB(WD1,-1);
-       if (i == -1)
-          goto L3000;
+       if (i == -1) {
+           /* Gee, I don't understand. */
+           if (fallback_handler(rawbuf))
+               return true;
+           SETPRM(1,WD1,WD1X);
+           RSPEAK(254);
+           goto L2600;
+       }
        K=MOD(i,1000);
        KQ=i/1000+1;
        switch (KQ-1)
@@ -1005,23 +1016,10 @@ L2630:
        case 0: goto L8;
        case 1: goto L5000;
        case 2: goto L4000;
-       case 3: goto L2010;
+       case 3: RSPEAK(K); goto L2012;
        }
        BUG(22);
 
-       /* Get second word for analysis. */
-L2800: WD1=WD2;
-       WD1X=WD2X;
-       WD2=0;
-       goto L2620;
-
-        /* Gee, I don't understand. */
-L3000: SETPRM(1,WD1,WD1X);
-        if (fallback_handler(rawbuf))
-            return true;
-       RSPEAK(254);
-        goto L2600;
-
 /* Verb and object analysis moved to separate module. */
 
 L4000: part=intransitive; VERB=K; goto Laction;
@@ -1029,33 +1027,32 @@ L4090:  part=transitive; goto Laction;
 L5000: part=unknown; obj = K;
 Laction:
         switch (action(cmdin, part, VERB, obj)) {
-          case 2: return true;
-          case 8: goto L8;
-          case 2000: goto L2000;
-          case 2009: goto L2009;
-          case 2010: goto L2010;
-          case 2011: goto L2011;
-          case 2012: goto L2012;
-          case 2600: goto L2600;
-          case 2607: goto L2607;
-          case 2630: goto L2630;
-          case 2800: goto L2800;
-          case 8000:
-              /*  Random intransitive verbs come here.  Clear obj just in case
-               *  (see attack()). */
-              SETPRM(1,WD1,WD1X);
-              RSPEAK(257);
-              obj=0;
-              goto L2600;
-          case 18999:
-              /*  Oh dear, he's disturbed the dwarves. */
-               RSPEAK(SPK);
-              /* fall through */
-          case 19000:
-                RSPEAK(136);
-                score(0);
-                return true;
-          }
+        case 2: return true;
+        case 8: K=NUL; goto L8;
+        case 2000: goto L2000;
+        case 2012: goto L2012;
+        case 2600: goto L2600;
+        case 2607: goto L2607;
+        case 2630: goto L2630;
+        case 2800:
+            /* Get second word for analysis. */
+            WD1=WD2;
+            WD1X=WD2X;
+            WD2=0;
+            goto L2620;
+        case 8000:
+            /*  Random intransitive verbs come here.  Clear obj just in case
+             *  (see attack()). */
+            SETPRM(1,WD1,WD1X);
+            RSPEAK(257);
+            obj=0;
+            goto L2600;
+        case 19000:
+            /*  Oh dear, he's disturbed the dwarves. */
+            RSPEAK(136);
+            score(0);
+            return true;
+            }
        BUG(99);
 
        /*  Figure out the new location */