Unspk'd bivalve action, exposing more untested surface
[open-adventure.git] / actions.c
index 5e650f6bec9c344afcb80c3fa652849e257bd889..062c3721aaaf9b90936794b8b02bc35dc9162b39 100644 (file)
--- a/actions.c
+++ b/actions.c
@@ -205,21 +205,26 @@ static int bigwords(token_t foo)
 static int bivalve(token_t verb, token_t obj)
 /* Clam/oyster actions */
 {
-    int spk;
     bool is_oyster = (obj == OYSTER);
-    spk = is_oyster ? OYSTER_OPENS : PEARL_FALLS;
-    if (TOTING(obj))
-        spk = is_oyster ? DROP_OYSTER : DROP_CLAM;
-    if (!TOTING(TRIDENT))
-        spk = is_oyster ? OYSTER_OPENER : CLAM_OPENER;
-    if (verb == LOCK)
-        spk = HUH_MAN;
-    if (spk == PEARL_FALLS) {
+    if (verb == LOCK) {
+        rspeak(HUH_MAN);
+        return GO_CLEAROBJ;
+    }
+    if (!TOTING(TRIDENT)) {
+        rspeak(is_oyster ? OYSTER_OPENER : CLAM_OPENER);
+        return GO_CLEAROBJ;
+    }
+    if (TOTING(obj)) {
+        rspeak( is_oyster ? DROP_OYSTER : DROP_CLAM);
+        return GO_CLEAROBJ;
+    }
+
+    if (!is_oyster) {
         DESTROY(CLAM);
         drop(OYSTER, game.loc);
         drop(PEARL, LOC_CULDESAC);
     }
-    rspeak(spk);
+    rspeak(is_oyster ? OYSTER_OPENS : PEARL_FALLS);
     return GO_CLEAROBJ;
 }
 
@@ -700,36 +705,36 @@ static int find(token_t verb, token_t obj)
 static int fly(token_t verb, token_t obj)
 /* Fly.  Snide remarks unless hovering rug is here. */
 {
-    int spk = actions[verb].message;
     if (obj == INTRANSITIVE) {
-        if (game.prop[RUG] != RUG_HOVER)
-            spk = RUG_NOTHING2;
-        if (!HERE(RUG))
-            spk = FLAP_ARMS;
-        if (spk == RUG_NOTHING2 || spk == FLAP_ARMS) {
-            rspeak(spk);
+        if (!HERE(RUG)) {
+            rspeak(FLAP_ARMS);
+            return GO_CLEAROBJ;
+        }
+        if (game.prop[RUG] != RUG_HOVER) {
+            rspeak(RUG_NOTHING2);
             return GO_CLEAROBJ;
         }
         obj = RUG;
     }
 
     if (obj != RUG) {
-        rspeak(spk);
+        rspeak(actions[verb].message);
         return GO_CLEAROBJ;
     }
-    spk = RUG_NOTHING1;
     if (game.prop[RUG] != RUG_HOVER) {
-        rspeak(spk);
+        rspeak(RUG_NOTHING1);
         return GO_CLEAROBJ;
     }
     game.oldlc2 = game.oldloc;
     game.oldloc = game.loc;
     /* FIXME: Arithmetic on location values */
     game.newloc = game.place[RUG] + game.fixed[RUG] - game.loc;
-    spk = RUG_GOES;
-    if (game.prop[SAPPH] >= 0)
-        spk = RUG_RETURNS;
-    rspeak(spk);
+
+    if (game.prop[SAPPH] >= 0) {
+        rspeak(RUG_RETURNS);
+    } else {
+        rspeak(RUG_GOES);
+    }
     return GO_TERMINATE;
 }