]> granicus.if.org Git - nethack/commitdiff
#tip horn of plenty (trunk only)
authornethack.rankin <nethack.rankin>
Tue, 20 Jun 2006 02:31:37 +0000 (02:31 +0000)
committernethack.rankin <nethack.rankin>
Tue, 20 Jun 2006 02:31:37 +0000 (02:31 +0000)
     Bug in #tip handling for horn of plenty.  Emptying one while levitating
would trigger an "obj not free" panic by flooreffects() due to following
hitfloor() with redundant/inappropriate dropy().

src/mkobj.c

index 0df94c5037d0149a9c70cb561b92aa73ad1b0b80..be3a68b552e3204aacb38ac20f56ecedf6454ac1 100644 (file)
@@ -1815,14 +1815,16 @@ boolean tipping;  /* caller emptying entire contents; affects shop handling */
                                      (const char *)0);
        } else {
            /* assumes this is taking place at hero's location */
-           if (!can_reach_floor(TRUE))
-               hitfloor(obj);
-           else if (IS_ALTAR(levl[u.ux][u.uy].typ))
-               doaltarobj(obj);
-           else
-               pline("%s %s to the %s.", Doname2(obj),
-                     otense(obj, "drop"), surface(u.ux, u.uy));
-           dropy(obj);
+           if (!can_reach_floor(TRUE)) {
+               hitfloor(obj);          /* does altar check, message, drop */
+           } else {
+               if (IS_ALTAR(levl[u.ux][u.uy].typ))
+                   doaltarobj(obj);    /* does its own drop message */
+               else
+                   pline("%s %s to the %s.", Doname2(obj),
+                         otense(obj, "drop"), surface(u.ux, u.uy));
+               dropy(obj);
+           }
        }
        if (horn->dknown) makeknown(HORN_OF_PLENTY);
     }