Support loud locations.
[open-adventure.git] / actions.c
index caf20eee0e084a138907f260538581bb47f992f0..b6cfc33d0210328c7a2f7ed81c9fc180dfa229d6 100644 (file)
--- a/actions.c
+++ b/actions.c
@@ -112,7 +112,7 @@ static int bigwords(token_t foo)
     int k = VOCAB(foo, 3);
     int spk = NOTHING_HAPPENS;
     if (game.foobar != 1 - k) {
-        if (game.foobar != 0)spk = START_OVER;
+        if (game.foobar != 0 && game.loc == LOC_GIANTROOM)spk = START_OVER;
         rspeak(spk);
         return GO_CLEAROBJ;
     } else {
@@ -552,7 +552,7 @@ int fill(token_t verb, token_t obj)
     if (LIQUID() != 0)
         spk = BOTTLE_FULL;
     if (spk == BOTTLED_WATER) {
-        game.prop[BOTTLE] = MOD(COND[game.loc], 4) / 2 * 2;
+        game.prop[BOTTLE] = MOD(conditions[game.loc], 4) / 2 * 2;
         k = LIQUID();
         if (TOTING(BOTTLE))
             game.place[k] = CARRIED;
@@ -671,13 +671,15 @@ static int light(token_t verb, token_t obj)
 static int listen(void)
 /*  Listen.  Intransitive only.  Print stuff based on objsnd/locsnd. */
 {
-    int k;
+    long k;
     int spk = ALL_SILENT;
-    k = LOCSND[game.loc];
-    if (k != 0) {
-        rspeak(labs(k));
-        if (k < 0) return GO_CLEAROBJ;
-        spk = NO_MESSAGE;
+    k = locations[game.loc].sound;
+    if (k != SILENT) {
+        rspeak(k);
+        if (locations[game.loc].loud)
+           return GO_CLEAROBJ;
+       else
+           spk = NO_MESSAGE;
     }
     for (int i = 1; i <= NOBJECTS; i++) {
         if (!HERE(i) || OBJSND[i] == 0 || game.prop[i] < 0)
@@ -1011,8 +1013,6 @@ int action(FILE *input, struct command_t *command)
             if (game.loc == LOC_COBBLE || game.loc == LOC_DEBRIS || game.loc == LOC_AWKWARD ||
                 game.loc == LOC_BIRD || game.loc == LOC_PITTOP)
                 command->obj = ENTRNC;
-            if (command->obj != GRATE)
-                return GO_MOVE;
         } else if (command->obj == DWARF && ATDWRF(game.loc) > 0)
             /* FALL THROUGH */;
         else if ((LIQUID() == command->obj && HERE(BOTTLE)) || command->obj == LIQLOC(game.loc))