linearized extinguish
[open-adventure.git] / actions.c
index c02f2c1e966bbe5d51b5518f4f13234ceab49f05..5fa2fedbb9e715fa4aa5f8246a1acddd57857f93 100644 (file)
--- a/actions.c
+++ b/actions.c
@@ -582,9 +582,7 @@ static int extinguish(token_t verb, int obj)
             obj = LAMP;
         if (HERE(URN) && game.prop[URN] == URN_LIT)
             obj = URN;
-        if (obj == INTRANSITIVE ||
-            (HERE(LAMP) && game.prop[LAMP] == LAMP_BRIGHT &&
-             HERE(URN) && game.prop[URN] == URN_LIT))
+        if (obj == INTRANSITIVE)
             return GO_UNKNOWN;
     }
 
@@ -594,20 +592,24 @@ static int extinguish(token_t verb, int obj)
         } else {
             pspeak(URN, change, URN_DARK, true);
         }
+        return GO_CLEAROBJ;
+    }
 
-    } else if (obj == LAMP) {
+    if (obj == LAMP) {
         state_change(LAMP, LAMP_DARK);
         rspeak(DARK(game.loc) ?
                PITCH_DARK :
                NO_MESSAGE);
+        return GO_CLEAROBJ;
+    }
 
-    } else if (obj == DRAGON ||
-               obj == VOLCANO) {
+    if (obj == DRAGON ||
+        obj == VOLCANO) {
         rspeak(BEYOND_POWER);
-
-    } else {
-        rspeak(actions[verb].message);
+        return GO_CLEAROBJ;
     }
+
+    rspeak(actions[verb].message);
     return GO_CLEAROBJ;
 }
 
@@ -704,27 +706,34 @@ int fill(token_t verb, token_t obj)
         }
         game.place[k] = LOC_NOWHERE;
         return GO_CLEAROBJ;
-    } else if (obj != NO_OBJECT && obj != BOTTLE) {
+    }
+    if (obj != NO_OBJECT && obj != BOTTLE) {
         rspeak(actions[verb].message);
         return GO_CLEAROBJ;
-    } else if (obj == NO_OBJECT && !HERE(BOTTLE))
+    }
+    if (obj == NO_OBJECT && !HERE(BOTTLE))
         return GO_UNKNOWN;
-    int spk = BOTTLED_WATER;
-    if (LIQLOC(game.loc) == 0)
-        spk = NO_LIQUID;
-    if (HERE(URN) && game.prop[URN] != URN_EMPTY)
-        spk = URN_NOPOUR;
-    if (LIQUID() != 0)
-        spk = BOTTLE_FULL;
-    if (spk == BOTTLED_WATER) {
-        /* FIXME: Arithmetic on property values */
-        game.prop[BOTTLE] = MOD(conditions[game.loc], 4) / 2 * 2;
-        if (TOTING(BOTTLE))
-            game.place[LIQUID()] = CARRIED;
-        if (LIQUID() == OIL)
-            spk = BOTTLED_OIL;
+
+    if (HERE(URN) && game.prop[URN] != URN_EMPTY) {
+        rspeak(URN_NOPOUR);
+        return GO_CLEAROBJ;
     }
-    rspeak(spk);
+    if (LIQUID() != NO_OBJECT) {
+        rspeak(BOTTLE_FULL);
+        return GO_CLEAROBJ;
+    }
+    if (LIQLOC(game.loc) == NO_OBJECT) {
+        rspeak(NO_LIQUID);
+        return GO_CLEAROBJ;
+    }
+
+    game.prop[BOTTLE] = (LIQLOC(game.loc) == OIL) ? OIL_BOTTLE : WATER_BOTTLE;
+    if (TOTING(BOTTLE))
+        game.place[LIQUID()] = CARRIED;
+    if (LIQUID() == OIL)
+        rspeak(BOTTLED_OIL);
+    else
+        rspeak(BOTTLED_WATER);
     return GO_CLEAROBJ;
 }