Supply missing implementation of nodwarf bit in travel rules.
[open-adventure.git] / main.c
diff --git a/main.c b/main.c
index 306ce73508ce03835c3fc57accb65cf76b31756f..9e08f9f646300bf47611e71840fa868a8b7c4e17 100644 (file)
--- a/main.c
+++ b/main.c
@@ -379,7 +379,7 @@ static bool dwarfmove(void)
         kk = tkey[game.dloc[i]];
         if (kk != 0)
             do {
-                game.newloc = T_DESTINATION(travel[kk]);
+                game.newloc = travel[kk].dest;
                 /* Have we avoided a dwarf encounter? */
                 bool avoided = (SPECIAL(game.newloc) ||
                                 !INDEEP(game.newloc) ||
@@ -389,7 +389,7 @@ static bool dwarfmove(void)
                                 game.newloc == game.dloc[i] ||
                                 FORCED(game.newloc) ||
                                 (i == PIRATE && CNDBIT(game.newloc, COND_NOARRR)) ||
-                                T_NODWARVES(travel[kk]));
+                                travel[kk].nodwarves);
                 if (!avoided) {
                     tk[j++] = game.newloc;
                 }
@@ -491,6 +491,13 @@ static void croak(void)
     }
 }
 
+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);
+}
+
 /*  Given the current location in "game.loc", and a motion verb number in
  *  "motion", put the new location in "game.newloc".  The current loc is saved
  *  in "game.oldloc" in case he wants to retreat.  The current
@@ -524,10 +531,10 @@ static bool playermove( int motion)
         if (spk == 0) {
             int te_tmp = 0;
             for (;;) {
-                scratchloc = T_DESTINATION(travel[travel_entry]);
+                scratchloc = travel[travel_entry].dest;
                 if (scratchloc != motion) {
                     if (!SPECIAL(scratchloc)) {
-                        if (FORCED(scratchloc) && T_DESTINATION(travel[tkey[scratchloc]]) == motion)
+                        if (FORCED(scratchloc) && travel[tkey[scratchloc]].dest == motion)
                             te_tmp = travel_entry;
                     }
                     if (!travel[travel_entry].stop) {
@@ -604,7 +611,7 @@ static bool playermove( int motion)
     do {
         for (;;) { /* L12 loop */
             for (;;) {
-                long cond = T_CONDITION(travel[travel_entry]);
+                long cond = travel[travel_entry].cond;
                 long arg = MOD(cond, 100);
                 if (!SPECIAL(cond)) {
                     /* YAML N and [pct N] conditionals */
@@ -628,12 +635,12 @@ static bool playermove( int motion)
                         BUG(CONDITIONAL_TRAVEL_ENTRY_WITH_NO_ALTERATION); // LCOV_EXCL_LINE
                     ++te_tmp;
                 } while
-                (T_HIGH(travel[travel_entry]) == T_HIGH(travel[te_tmp]));
+                   (traveleq(travel_entry, te_tmp));
                 travel_entry = te_tmp;
             }
 
             /* Found an eligible rule, now execute it */
-            game.newloc = T_DESTINATION(travel[travel_entry]);
+            game.newloc = travel[travel_entry].dest;
             if (!SPECIAL(game.newloc))
                 return true;
 
@@ -670,7 +677,7 @@ static bool playermove( int motion)
                             BUG(CONDITIONAL_TRAVEL_ENTRY_WITH_NO_ALTERATION); // LCOV_EXCL_LINE
                         ++te_tmp;
                     } while
-                    (T_HIGH(travel[travel_entry]) == T_HIGH(travel[te_tmp]));
+                       (traveleq(travel_entry, te_tmp));
                     travel_entry = te_tmp;
                     continue; /* goto L12 */
                 case 3:
@@ -1130,7 +1137,7 @@ Lookup:
             command.verb = kmod;
             break;
         case 3:
-            rspeak(specials[kmod].message);
+            speak(specials[kmod].message);
             goto L2012;
         default:
             BUG(VOCABULARY_TYPE_N_OVER_1000_NOT_BETWEEN_0_AND_3); // LCOV_EXCL_LINE