Magic-number elimination.
[open-adventure.git] / actions.c
index d817c6d23c6d328e87bb5702e546560b19fdfb21..73f8f2e7ac89fb3ae72690ef0a3ddeb0da5026ca 100644 (file)
--- a/actions.c
+++ b/actions.c
@@ -7,6 +7,7 @@
 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);
@@ -361,7 +362,7 @@ static int vcarry(token_t verb, token_t obj)
 
     }
 
-    if (obj == BIRD && game.prop[BIRD] != BIRD_CAGED && -1 - game.prop[BIRD] != BIRD_CAGED) {
+    if (obj == BIRD && game.prop[BIRD] != BIRD_CAGED && STASHED(BIRD) != BIRD_CAGED) {
         if (game.prop[BIRD] == BIRD_FOREST_UNCAGED) {
             DESTROY(BIRD);
             rspeak(BIRD_CRAP);
@@ -377,18 +378,16 @@ static int vcarry(token_t verb, token_t obj)
         }
         game.prop[BIRD] = BIRD_CAGED;
     }
-    /* FIXME: Arithmetic on state numbers */
     if ((obj == BIRD ||
          obj == CAGE) &&
-        (game.prop[BIRD] == BIRD_CAGED ||
-         -1 - game.prop[BIRD] == 1))
+        (game.prop[BIRD] == BIRD_CAGED || STASHED(BIRD) == BIRD_CAGED))
+       /* expression maps BIRD to CAGE and CAGE to BIRD */
         carry(BIRD + CAGE - obj, game.loc);
     carry(obj, game.loc);
     if (obj == BOTTLE && LIQUID() != NO_OBJECT)
         game.place[LIQUID()] = CARRIED;
-    if (GSTONE(obj) && game.prop[obj] != 0) {
-        game.prop[obj]
-            = STATE_GROUND;
+    if (GSTONE(obj) && game.prop[obj] != STATE_GROUND) {
+        game.prop[obj] = STATE_GROUND;
         game.prop[CAVITY] = CAVITY_EMPTY;
     }
     rspeak(OK_MAN);
@@ -464,7 +463,7 @@ static int discard(token_t verb, token_t obj, bool just_do_it)
 
         } else if ((GSTONE(obj) && AT(CAVITY) && game.prop[CAVITY] != CAVITY_FULL)) {
             rspeak(GEM_FITS);
-            game.prop[obj] = 1;
+            game.prop[obj] = STATE_IN_CAVITY;
             game.prop[CAVITY] = CAVITY_FULL;
             if (HERE(RUG) && ((obj == EMERALD && game.prop[RUG] != RUG_HOVER) ||
                               (obj == RUBY && game.prop[RUG] == RUG_HOVER))) {