Cleanups and clarifications in do_command()
[open-adventure.git] / actions.c
index 5f6f670c8861f29d5f81d8edf6183d778d0389fd..2d02595cf305c3e83e39066f4688c332e7e8f6eb 100644 (file)
--- a/actions.c
+++ b/actions.c
@@ -121,10 +121,10 @@ static int attack(struct command_t *command)
         move(DRAGON, LOC_SECRET5);
         move(RUG, LOC_SECRET5);
         drop(BLOOD, LOC_SECRET5);
-        for (obj = 1; obj <= NOBJECTS; obj++) {
-            if (game.place[obj] == objects[DRAGON].plac ||
-                game.place[obj] == objects[DRAGON].fixd)
-                move(obj, LOC_SECRET5);
+        for (obj_t i = 1; i <= NOBJECTS; i++) {
+            if (game.place[i] == objects[DRAGON].plac ||
+                game.place[i] == objects[DRAGON].fixd)
+                move(i, LOC_SECRET5);
         }
         game.loc = LOC_SECRET5;
         return GO_MOVE;
@@ -205,11 +205,13 @@ static int bigwords(long id)
              *  crossing. */
             if (game.place[EGGS] == LOC_NOWHERE && game.place[TROLL] == LOC_NOWHERE && game.prop[TROLL] == TROLL_UNPAID)
                 game.prop[TROLL] = TROLL_PAIDONCE;
-            int k = EGGS_DONE;
+            int k;
             if (HERE(EGGS))
                 k = EGGS_VANISHED;
-            if (game.loc == objects[EGGS].plac)
+            else if (game.loc == objects[EGGS].plac)
                 k = EGGS_HERE;
+            else
+                k = EGGS_DONE;
             move(EGGS, objects[EGGS].plac);
             pspeak(EGGS, look, k, true);
             return GO_CLEAROBJ;
@@ -417,8 +419,13 @@ static int chain(verb_t verb)
 
         switch (game.prop[BEAR]) {
         case BEAR_DEAD:
+            // LCOV_EXCL_START
+           /* Can't be reached as long as the only way for the bear to die
+            * is from a bridge collapse. Leave in in case this changes, but 
+            * exclude from coverage testing. */
             game.fixed[BEAR] = IS_FIXED;
             break;
+            // LCOV_EXCL_END
         default:
             game.fixed[BEAR] = IS_FREE;
         }
@@ -470,11 +477,13 @@ static int discard(verb_t verb, obj_t obj)
         game.prop[CAVITY] = CAVITY_FULL;
         if (HERE(RUG) && ((obj == EMERALD && game.prop[RUG] != RUG_HOVER) ||
                           (obj == RUBY && game.prop[RUG] == RUG_HOVER))) {
-            int spk = RUG_RISES;
-            if (TOTING(RUG))
-                spk = RUG_WIGGLES;
+            int spk;
             if (obj == RUBY)
                 spk = RUG_SETTLES;
+            else if (TOTING(RUG))
+                spk = RUG_WIGGLES;
+            else
+                spk = RUG_RISES;
             rspeak(spk);
             if (spk != RUG_WIGGLES) {
                 int k = (game.prop[RUG] == RUG_HOVER) ? RUG_FLOOR : RUG_HOVER;
@@ -1110,7 +1119,7 @@ static int say(struct command_t *command)
 {
     if (command->wd2 > 0) {
         command->wd1 = command->wd2;
-        strcpy(command->raw1, command->raw2);
+        strncpy(command->raw1, command->raw2, LINESIZE - 1);
     }
     char word1[TOKLEN + 1];
     packed_to_token(command->wd1, word1);