Fixed feed command and white space in tests
[open-adventure.git] / actions.c
index 2ac545c726e699bcd60065f11948ac95c613b73a..5ead1f22d234ed0e259a3d5981c09af74829ff8d 100644 (file)
--- a/actions.c
+++ b/actions.c
@@ -6,13 +6,6 @@
 
 static int fill(token_t, token_t);
 
-static void state_change(long obj, long state)
-/* Object must have a change-message list for this to be useful; only some do */
-{
-    game.prop[obj] = state;
-    pspeak(obj, change, state, true);
-}
-
 static int attack(struct command_t *command)
 /*  Attack.  Assume target if unambiguous.  "Throw" also links here.
  *  Attackable objects fall into two categories: enemies (snake,
@@ -476,7 +469,7 @@ static int discard(token_t verb, token_t obj, bool just_do_it)
                 rspeak(spk);
                 if (spk != RUG_WIGGLES) {
                     /* FIXME: Arithmetic on state numbers */
-                    int k = 2 - game.prop[RUG];
+                    int k = (game.prop[RUG] == RUG_HOVER) ? RUG_FLOOR : RUG_HOVER;
                     game.prop[RUG] = k;
                     if (k == RUG_HOVER)
                         k = objects[SAPPH].plac;
@@ -631,46 +624,58 @@ static int feed(token_t verb, token_t obj)
 /*  Feed.  If bird, no seed.  Snake, dragon, troll: quip.  If dwarf, make him
  *  mad.  Bear, special. */
 {
-    int spk = actions[verb].message;
-    if (obj == BIRD) {
+    switch (obj) {
+    case BIRD:
         rspeak(BIRD_PINING);
-        return GO_CLEAROBJ;
-    } else if (obj == SNAKE ||
-               obj == DRAGON ||
-               obj == TROLL) {
-        spk = NOTHING_EDIBLE;
-        if (obj == DRAGON && game.prop[DRAGON] != DRAGON_BARS)
-            spk = RIDICULOUS_ATTEMPT;
-        if (obj == TROLL)
-            spk = TROLL_VICES;
-        if (obj == SNAKE && !game.closed && HERE(BIRD)) {
+        break;
+
+    case DRAGON:
+        if (game.prop[DRAGON] != DRAGON_BARS)
+            rspeak(RIDICULOUS_ATTEMPT);
+        else
+            rspeak(NOTHING_EDIBLE);
+        break;
+    case SNAKE:
+        if (!game.closed && HERE(BIRD)) {
             DESTROY(BIRD);
-            spk = BIRD_DEVOURED;
-        }
-    } else if (obj == DWARF) {
+            rspeak(BIRD_DEVOURED);
+        } else
+            rspeak(NOTHING_EDIBLE);
+        break;
+    case TROLL:
+        rspeak(TROLL_VICES);
+        break;
+    case DWARF:
         if (HERE(FOOD)) {
             game.dflag += 2;
-            spk = REALLY_MAD;
+            rspeak(REALLY_MAD);
+        } else
+            rspeak(actions[verb].message);
+        break;
+    case BEAR:
+        if (game.prop[BEAR] == BEAR_DEAD) {
+            rspeak(RIDICULOUS_ATTEMPT);
+            break;
         }
-    } else if (obj == BEAR) {
-        if (game.prop[BEAR] == UNTAMED_BEAR)
-            spk = NOTHING_EDIBLE;
-        if (game.prop[BEAR] == BEAR_DEAD)
-            spk = RIDICULOUS_ATTEMPT;
-        if (HERE(FOOD)) {
-            DESTROY(FOOD);
-            game.prop[BEAR] = SITTING_BEAR;
-            game.fixed[AXE] = IS_FREE;
-            game.prop[AXE] = AXE_HERE;
-            spk = BEAR_TAMED;
+        if (game.prop[BEAR] == UNTAMED_BEAR) {
+            if (HERE(FOOD)) {
+                DESTROY(FOOD);
+                game.fixed[AXE] = IS_FREE;
+                game.prop[AXE] = AXE_HERE;
+                state_change(BEAR, SITTING_BEAR);
+            } else
+                rspeak(NOTHING_EDIBLE);
         }
-    } else if (obj == OGRE) {
+        break;
+    case OGRE:
         if (HERE(FOOD))
-            spk = OGRE_FULL;
-    } else {
-        spk = AM_GAME;
+            rspeak(OGRE_FULL);
+        else
+            rspeak(actions[verb].message);
+        break;
+    default:
+        rspeak(AM_GAME);
     }
-    rspeak(spk);
     return GO_CLEAROBJ;
 }