]> granicus.if.org Git - nethack/commitdiff
autopickup during failed #untrap attempt (trunk only)
authornethack.rankin <nethack.rankin>
Thu, 6 Apr 2006 04:55:07 +0000 (04:55 +0000)
committernethack.rankin <nethack.rankin>
Thu, 6 Apr 2006 04:55:07 +0000 (04:55 +0000)
     From a bug report, moving into a trap
during a failed untrap attempt didn't autopickup any objects there or
report about objects which aren't picked up.  Although that appears to have
been intentional, change move_into_trap() to behave more like a regular
move.  (I wrote this bit of code and don't remember whether the no pickup
aspect was deliberate; I suspect it might have been to avoid the redundant
"there is a trap here" message which you get when pickup checking is done
but not everything on the spot gets picked up.  This patch suppresses that
message.)

doc/fixes35.0
src/trap.c

index faaaba32d5f08088ae1140e39bdd3ddb85c429f4..2845eb56a410850c739c66e86adb93bcd5cd8e4e 100644 (file)
@@ -132,6 +132,8 @@ better handling for Fort Ludios and endgame in wizard mode's `^V ?' menu
 no free lunch for gelatinous cubes eating scrolls of mail
 eating gold in front of the vault guard will make the guard angry
 calculate engulf time differently for non-digestion attacks than for digestion
+preform autopickup and/or report on objects at the spot when a failed #untrap
+       attempt causes the hero to move onto a trap's location
 
 
 Platform- and/or Interface-Specific Fixes
index 29fddcd9d31000624199b2145e97682c575b5058..ea7e5f6594649121468df2623d292b9c650d82a8 100644 (file)
@@ -1,4 +1,4 @@
-/*     SCCS Id: @(#)trap.c     3.5     2005/12/05      */
+/*     SCCS Id: @(#)trap.c     3.5     2006/04/05      */
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
@@ -3235,8 +3235,8 @@ struct trap *ttmp;
        boolean unused;
 
        /* we know there's no monster in the way, and we're not trapped */
-       if (!Punished || drag_ball(x, y, &bc, &bx, &by, &cx, &cy, &unused,
-               TRUE)) {
+       if (!Punished ||
+               drag_ball(x, y, &bc, &bx, &by, &cx, &cy, &unused, TRUE)) {
            u.ux0 = u.ux,  u.uy0 = u.uy;
            u.ux = x,  u.uy = y;
            u.umoved = TRUE;
@@ -3244,7 +3244,13 @@ struct trap *ttmp;
            vision_recalc(1);
            check_leash(u.ux0, u.uy0);
            if (Punished) move_bc(0, bc, bx, by, cx, cy);
-           spoteffects(FALSE); /* dotrap() */
+           /* marking the trap unseen forces dotrap() to treat it like a new
+              discovery and prevents pickup() -> look_here() -> check_here()
+              from giving a redudant "there is a <trap> here" message when
+              there are objects covering this trap */
+           ttmp->tseen = 0;    /* hack for check_here() */
+           /* trigger the trap */
+           spoteffects(TRUE);  /* pickup() + dotrap() */
            exercise(A_WIS, FALSE);
        }
 }