Clean up dummy macro arguments.
[open-adventure.git] / actions.c
index 3ef9289474b0671ddb4331dbf34cc7d686c8f6ce..ebb5f4fc46782854f479656616a32967ada5e1f8 100644 (file)
--- a/actions.c
+++ b/actions.c
@@ -214,7 +214,7 @@ static int carry(long obj)
     if (game.fixed[obj] != 0)
        return(2011);
     if (obj == WATER || obj == OIL) {
-       if (!HERE(BOTTLE) || LIQ(0) != obj) {
+       if (!HERE(BOTTLE) || LIQUID() != obj) {
            if (TOTING(BOTTLE) && game.prop[BOTTLE] == 1)
                return(fill(BOTTLE));
            if (game.prop[BOTTLE] != 1)SPK=105;
@@ -241,8 +241,8 @@ static int carry(long obj)
     if ((obj==BIRD || obj==CAGE) && (game.prop[BIRD]==1 || -1-game.prop[BIRD]==1))
        CARRY(BIRD+CAGE-obj,game.loc);
     CARRY(obj,game.loc);
-    if (obj == BOTTLE && LIQ(0) != 0)
-       game.place[LIQ(0)] = -1;
+    if (obj == BOTTLE && LIQUID() != 0)
+       game.place[LIQUID()] = -1;
     if (!GSTONE(obj) || game.prop[obj] == 0)
        return(2009);
     game.prop[obj]=0;
@@ -334,7 +334,7 @@ static int discard(long obj, bool just_do_it)
             if (game.prop[VASE] != 0)game.fixed[VASE]= -1;
         }
     }
-    K=LIQ(0);
+    K=LIQUID();
     if (K == obj)obj=BOTTLE;
     if (obj == BOTTLE && K != 0)game.place[K]=0;
     if (obj == CAGE && game.prop[BIRD] == 1)DROP(BIRD,game.loc);
@@ -349,11 +349,11 @@ static int drink(token_t obj)
 /*  Drink.  If no object, assume water and look for it here.  If water is in
  *  the bottle, drink that, else must be at a water loc, so drink stream. */
 {
-    if (obj == 0 && LIQLOC(game.loc) != WATER && (LIQ(0) != WATER || !HERE(BOTTLE)))
+    if (obj == 0 && LIQLOC(game.loc) != WATER && (LIQUID() != WATER || !HERE(BOTTLE)))
        return(8000);
     if (obj != BLOOD) {
        if (obj != 0 && obj != WATER)SPK=110;
-       if (SPK == 110 || LIQ(0) != WATER || !HERE(BOTTLE)) return(2011);
+       if (SPK == 110 || LIQUID() != WATER || !HERE(BOTTLE)) return(2011);
        game.prop[BOTTLE]=1;
        game.place[WATER]=0;
        SPK=74;
@@ -407,7 +407,7 @@ static int extinguish(int obj)
     if (obj == LAMP) {
        game.prop[LAMP]=0;
        RSPEAK(40);
-       if (DARK(0))
+       if (DARK(game.loc))
            RSPEAK(16);
        return(2012);
     }
@@ -488,7 +488,7 @@ int fill(long obj)
        SPK=213;
        if (game.prop[URN] != 0) return(2011);
        SPK=144;
-       k=LIQ(0);
+       k=LIQUID();
        if (k == 0 || !HERE(BOTTLE)) return(2011);
        game.place[k]=0;
        game.prop[BOTTLE]=1;
@@ -506,12 +506,12 @@ int fill(long obj)
        SPK=106;
     if (HERE(URN) && game.prop[URN] != 0)
        SPK=214;
-    if (LIQ(0) != 0)
+    if (LIQUID() != 0)
        SPK=105;
     if (SPK != 107)
        return(2011);
     game.prop[BOTTLE]=MOD(COND[game.loc],4)/2*2;
-    k=LIQ(0);
+    k=LIQUID();
     if (TOTING(BOTTLE))
        game.place[k]= -1;
     if (k == OIL)
@@ -523,7 +523,7 @@ static int find(token_t obj)
 /* Find.  Might be carrying it, or it might be here.  Else give caveat. */
 {
     if (AT(obj) ||
-       (LIQ(0) == obj && AT(BOTTLE)) ||
+       (LIQUID() == obj && AT(BOTTLE)) ||
        obj == LIQLOC(game.loc) ||
        (obj == DWARF && ATDWRF(game.loc) > 0))
        SPK=94;
@@ -667,7 +667,7 @@ static int pour(token_t obj)
 /*  Pour.  If no object, or object is bottle, assume contents of bottle.
  *  special tests for pouring water or oil on plant or rusty door. */
 {
-    if (obj == BOTTLE || obj == 0)obj=LIQ(0);
+    if (obj == BOTTLE || obj == 0)obj=LIQUID();
     if (obj == 0) return(8000);
     if (!TOTING(obj)) return(2011);
     SPK=78;
@@ -713,10 +713,10 @@ static int read(FILE *input, token_t obj)
            if (HERE(i) && OBJTXT[i] != 0 && game.prop[i] >= 0)
                obj = obj * NOBJECTS + i;
        }
-       if (obj > NOBJECTS || obj == 0 || DARK(0)) return(8000);
+       if (obj > NOBJECTS || obj == 0 || DARK(game.loc)) return(8000);
     }
        
-    if (DARK(0)) {
+    if (DARK(game.loc)) {
        SETPRM(1,WD1,WD1X);
        RSPEAK(256);
        return(2012);
@@ -888,17 +888,67 @@ static int wave(token_t obj)
     }
 }
 
-/* We're called with a number that says what label the caller wanted
- * to "goto", and we return a similar label number for the caller to
- * "goto".
- */
-
 int action(FILE *input, enum speechpart part, long verb, long obj)
 /*  Analyse a verb.  Remember what it was, go back for object if second word
  *  unless verb is "say", which snarfs arbitrary second word.
  */
 {
     int kk;
+
+    if (part == unknown)
+    {
+       /*  Analyse an object word.  See if the thing is here, whether
+        *  we've got a verb yet, and so on.  Object must be here
+        *  unless verb is "find" or "invent(ory)" (and no new verb
+        *  yet to be analysed).  Water and oil are also funny, since
+        *  they are never actually dropped at any location, but might
+        *  be here inside the bottle or urn or as a feature of the
+        *  location. */
+       if (HERE(obj))
+           /* FALL THROUGH */;
+       else if (obj == GRATE) {
+           if (game.loc == 1 || game.loc == 4 || game.loc == 7)
+               obj=DPRSSN;
+           if (game.loc > 9 && game.loc < 15)
+               obj=ENTRNC;
+           if (obj != GRATE)
+               return(8);
+       }
+       else if (obj == DWARF && ATDWRF(game.loc) > 0)
+           /* FALL THROUGH */;
+       else if ((LIQUID() == obj && HERE(BOTTLE)) || obj == LIQLOC(game.loc))
+           /* FALL THROUGH */;
+       else if (obj == OIL && HERE(URN) && game.prop[URN] != 0) {
+           obj=URN;
+           /* FALL THROUGH */;
+       }
+       else if (obj == PLANT && AT(PLANT2) && game.prop[PLANT2] != 0) {
+           obj=PLANT2;
+           /* FALL THROUGH */;
+       }
+       else if (obj == KNIFE && game.knfloc == game.loc) {
+           game.knfloc= -1;
+           SPK=116;
+           return(2011);
+       }
+       else if (obj == ROD && HERE(ROD2)) {
+           obj=ROD2;
+           /* FALL THROUGH */;
+       }
+       else if ((verb == FIND || verb == INVENT) && WD2 <= 0)
+           /* FALL THROUGH */;
+       else {
+           SETPRM(1,WD1,WD1X);
+           RSPEAK(256);
+           return(2012);
+       }
+
+       if (WD2 > 0)
+           return(2800);
+       if (verb != 0)
+           part = transitive;
+    }
+
     switch(part)
     {
        case intransitive:
@@ -947,7 +997,6 @@ int action(FILE *input, enum speechpart part, long verb, long obj)
            }
            /* FALLTHRU */
        case transitive:
-       L4090:
            /*  Analyse a transitive verb. */
            switch (verb-1) {
                case  0: /* CARRY */ return carry(obj);    
@@ -987,62 +1036,11 @@ int action(FILE *input, enum speechpart part, long verb, long obj)
            }
            BUG(24);
        case unknown:
-           /*  Analyse an object word.  See if the thing is here, whether
-            *  we've got a verb yet, and so on.  Object must be here
-            *  unless verb is "find" or "invent(ory)" (and no new verb
-            *  yet to be analysed).  Water and oil are also funny, since
-            *  they are never actually dropped at any location, but might
-            *  be here inside the bottle or urn or as a feature of the
-            *  location. */
-           if (!HERE(obj))
-               goto L5100;
-       L5010:
-           if (WD2 > 0)
-               return(2800);
-           if (verb != 0)
-               goto L4090;
+           /* Unknown verb, couldn't deduce object - might need hint */
            SETPRM(1,WD1,WD1X);
            RSPEAK(255);
            return(2600);
-
-       L5100:
-           if (obj == GRATE) {
-               if (game.loc == 1 || game.loc == 4 || game.loc == 7)
-                   obj=DPRSSN;
-               if (game.loc > 9 && game.loc < 15)
-                   obj=ENTRNC;
-               if (obj != GRATE)
-                   return(8);
-           }
-
-           if (obj == DWARF && ATDWRF(game.loc) > 0)
-               goto L5010;
-           if ((LIQ(0) == obj && HERE(BOTTLE)) || obj == LIQLOC(game.loc))
-               goto L5010;
-           if (obj == OIL && HERE(URN) && game.prop[URN] != 0) {
-               obj=URN;
-               goto L5010;
-           }
-           if (obj == PLANT && AT(PLANT2) && game.prop[PLANT2] != 0) {
-               obj=PLANT2;
-               goto L5010;
-           }
-           if (obj == KNIFE && game.knfloc == game.loc) {
-               game.knfloc= -1;
-               SPK=116;
-               return(2011);
-           }
-           if (obj == ROD && HERE(ROD2)) {
-               obj=ROD2;
-               goto L5010;
-           }
-           if ((verb == FIND || verb == INVENT) && WD2 <= 0)
-               goto L5010;
-
-           SETPRM(1,WD1,WD1X);
-           RSPEAK(256);
-           return(2012);
-       default:
+    default:
            BUG(99);
     }
 }