K successfully localized.
[open-adventure.git] / main.c
diff --git a/main.c b/main.c
index b171ebaa9c40424051768a2d4fef8ed6a915cac2..e3c7085d55dcb4a4f6303fef06e28d008a1c1f5a 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,7 @@ 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;
 
 FILE  *logfp;
 bool oldstyle = false;
@@ -417,11 +418,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;
@@ -489,32 +490,32 @@ 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)
+static bool playermove(FILE *cmdin, token_t verb, int motion)
 {
     int LL, K2, KK=KEY[game.loc];
     game.newloc=game.loc;
     if (KK == 0)
        BUG(26);
-    if (K == NUL)
+    if (motion == NUL)
        return true;
-    else if (K == BACK) {
+    else if (motion == BACK) {
        /*  Handle "go back".  Look for verb which goes from game.loc to
         *  game.oldloc, or to game.oldlc2 If game.oldloc has forced-motion.
         *  K2 saves entry -> forced loc -> previous loc. */
-       K=game.oldloc;
-       if (FORCED(K))
-           K=game.oldlc2;
+       motion=game.oldloc;
+       if (FORCED(motion))
+           motion=game.oldlc2;
        game.oldlc2=game.oldloc;
        game.oldloc=game.loc;
        K2=0;
-       if (K == game.loc)K2=91;
+       if (motion == game.loc)K2=91;
        if (CNDBIT(game.loc,4))K2=274;
        if (K2 == 0) {
            for (;;) {
                LL=MOD((labs(TRAVEL[KK])/1000),1000);
-               if (LL != K) {
+               if (LL != motion) {
                    if (LL <= 300) {
-                       if (FORCED(LL) && MOD((labs(TRAVEL[KEY[LL]])/1000),1000) == K)
+                       if (FORCED(LL) && MOD((labs(TRAVEL[KEY[LL]])/1000),1000) == motion)
                            K2=KK;
                    }
                    if (TRAVEL[KK] >= 0) {
@@ -528,7 +529,7 @@ static bool playermove(FILE *cmdin, token_t verb)
                    }
                }
 
-               K=MOD(labs(TRAVEL[KK]),1000);
+               motion=MOD(labs(TRAVEL[KK]),1000);
                KK=KEY[game.loc];
                break; /* fall through to ordinary travel */
            }
@@ -537,7 +538,7 @@ static bool playermove(FILE *cmdin, token_t verb)
            return true;
        }
     }
-    else if (K == LOOK) {
+    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
         *  pit while staring into the gloom. */
@@ -547,7 +548,7 @@ static bool playermove(FILE *cmdin, token_t verb)
        game.abbrev[game.loc]=0;
        return true;
     }
-    else if (K == CAVE) {
+    else if (motion == CAVE) {
        /*  Cave.  Different messages depending on whether above ground. */
        RSPEAK((OUTSID(game.loc) && game.loc != 8) ? 57 : 58);
        return true;
@@ -561,20 +562,20 @@ static bool playermove(FILE *cmdin, token_t verb)
     /* ordinary travel */
     for (;;) {
        LL=labs(TRAVEL[KK]);
-       if (MOD(LL,1000) == 1 || MOD(LL,1000) == K)
+       if (MOD(LL,1000) == 1 || MOD(LL,1000) == motion)
            break;
        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 (motion >= 43 && motion <= 50)spk=52;
+           if (motion == 29 || motion == 30)spk=52;
+           if (motion == 7 || motion == 36 || motion == 37)spk=10;
+           if (motion == 11 || motion == 19)spk=11;
+           if (verb == FIND || verb == INVENT)spk=59;
+           if (motion == 62 || motion == 65)spk=42;
+           if (motion == 17)spk=80;
+           RSPEAK(spk);
            return true;
        }
        ++KK;
@@ -583,17 +584,17 @@ static bool playermove(FILE *cmdin, token_t verb)
 
     for (;;) {
        game.newloc=LL/1000;
-       K=MOD(game.newloc,100);
+       motion=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)))
+           } if (TOTING(motion) || (game.newloc > 200 && AT(motion)))
                  break;
            /* else fall through */
        }
-       else if (game.prop[K] != game.newloc/100-3)
+       else if (game.prop[motion] != game.newloc/100-3)
            break;
     L12:
        do {
@@ -673,8 +674,9 @@ static bool playermove(FILE *cmdin, token_t verb)
 static bool do_command(FILE *cmdin)
 {
        long KQ, VERB, KK, V1, V2;
-       long obj, i;
-       static long IGO = 0;
+       long i, k, KMOD;
+       static long igo = 0;
+       static long obj = 0;
        enum speechpart part;
 
        /*  Can't leave cave once it's closing (except by main office). */
@@ -709,9 +711,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. */
@@ -721,11 +723,11 @@ L2000:    if (game.loc == 0)
                croak(cmdin);
                goto L2000;
            }
-           KK=RTEXT[16];
+           msg=arbitrary_messages[16];
        }
        if (TOTING(BEAR))RSPEAK(141);
-       SPEAK(KK);
-       K=1;
+       newspeak(msg);
+       KMOD=1;
        if (FORCED(game.loc)) {
            goto L8;
        }
@@ -768,7 +770,6 @@ L2006:      KK=game.prop[obj];
 L2008: i=game.link[i];
         goto L2004;
 
-L2009: RSPEAK(54);
 L2012: VERB=0;
        game.oldobj=obj;
        obj=0;
@@ -794,7 +795,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++) {
@@ -816,7 +817,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;
@@ -961,101 +962,100 @@ 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;
+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)) {
-           RSPEAK(K);
+           RSPEAK(k);
            goto L2012;
        }
-       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 == 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)
+           if (++igo == 10)
                RSPEAK(276);
        }
 L2630:
        i=VOCAB(WD1,-1);
-       if (i == -1)
-          goto L3000;
-       K=MOD(i,1000);
+       if (i == -1) {
+           /* Gee, I don't understand. */
+           if (fallback_handler(rawbuf))
+               return true;
+           SETPRM(1,WD1,WD1X);
+           RSPEAK(254);
+           goto L2600;
+       }
+       KMOD=MOD(i,1000);
        KQ=i/1000+1;
        switch (KQ-1)
        {
        case 0: goto L8;
        case 1: goto L5000;
        case 2: goto L4000;
-       case 3: RSPEAK(K); goto L2012;
+       case 3: RSPEAK(KMOD); 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;
+L4000: part=intransitive; VERB = KMOD; goto Laction;
 L4090: part=transitive; goto Laction;
-L5000: part=unknown; obj = K;
+L5000: part=unknown; obj = KMOD;
 Laction:
         switch (action(cmdin, part, VERB, obj)) {
-          case 2: return true;
-          case 8: goto L8;
-          case 2000: goto L2000;
-          case 2009: goto L2009;
-          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: KMOD=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 */
-L8:    if (playermove(cmdin, VERB))
+L8:    if (playermove(cmdin, VERB, KMOD))
            return true;
        else
            goto L2000;