]> granicus.if.org Git - nethack/commitdiff
throwing through iron bars
authornethack.rankin <nethack.rankin>
Wed, 24 Jul 2002 05:42:49 +0000 (05:42 +0000)
committernethack.rankin <nethack.rankin>
Wed, 24 Jul 2002 05:42:49 +0000 (05:42 +0000)
     Make throwing things through iron bars by the player and
by monsters behave consistently with each other.  Also prevent
stone-to-flesh'd boulders and wands from passing through.

src/mthrowu.c
src/zap.c

index dec7c2035479c72e1f7d0859a39777497b391bde..d0836c12d97c5c45f10379564a9fb82f7ddd02d3 100644 (file)
@@ -1,4 +1,4 @@
-/*     SCCS Id: @(#)mthrowu.c  3.4     2002/04/06      */
+/*     SCCS Id: @(#)mthrowu.c  3.4     2002/07/23      */
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
@@ -451,7 +451,7 @@ m_throw(mon, x, y, dx, dy, range, obj)
                        || closed_door(bhitpos.x+dx, bhitpos.y+dy)
                        /* missile might hit iron bars */
                        || (levl[bhitpos.x+dx][bhitpos.y+dy].typ == IRONBARS &&
-                       hits_bars(&singleobj, bhitpos.x, bhitpos.y, !rn2(2), 0))
+                       hits_bars(&singleobj, bhitpos.x, bhitpos.y, !rn2(5), 0))
 #ifdef SINKS
                        /* Thrown objects "sink" */
                        || IS_SINK(levl[bhitpos.x][bhitpos.y].typ)
@@ -809,6 +809,9 @@ int whodidit;       /* 1==hero, 0=other, -1==just check whether it'll pass thru */
        case FOOD_CLASS:
                if (obj_type == CORPSE &&
                        mons[otmp->corpsenm].msize > MZ_TINY) hits = TRUE;
+               else
+                   hits = (obj_type == MEAT_STICK ||
+                           obj_type == HUGE_CHUNK_OF_MEAT);
                break;
        case SPBOOK_CLASS:
        case WAND_CLASS:
index ee72775506c16185a7c1bc1e38a124069a684f20..f789d1d4c5d7c24f55e58d3c8a3e53ea122607d5 100644 (file)
--- a/src/zap.c
+++ b/src/zap.c
@@ -1,4 +1,4 @@
-/*     SCCS Id: @(#)zap.c      3.4     2002/04/06      */
+/*     SCCS Id: @(#)zap.c      3.4     2002/07/23      */
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
@@ -2587,7 +2587,7 @@ struct obj *obj;                  /* object tossed/used */
 {
        struct monst *mtmp;
        uchar typ;
-       boolean shopdoor = FALSE;
+       boolean shopdoor = FALSE, point_blank = TRUE;
 
        if (weapon == KICKED_WEAPON) {
            /* object starts one square in front of player */
@@ -2628,7 +2628,8 @@ struct obj *obj;                  /* object tossed/used */
            /* iron bars will block anything big enough */
            if ((weapon == THROWN_WEAPON || weapon == KICKED_WEAPON) &&
                    typ == IRONBARS &&
-                   hits_bars(&obj, x - ddx, y - ddy, !rn2(20), 1)) {
+                   hits_bars(&obj, x - ddx, y - ddy,
+                             point_blank ? 0 : !rn2(5), 1)) {
                /* caveat: obj might now be null... */
                bhitpos.x -= ddx;
                bhitpos.y -= ddy;
@@ -2761,6 +2762,8 @@ struct obj *obj;                  /* object tossed/used */
                    break;      /* physical objects fall onto sink */
 #endif
            }
+           /* thrown/kicked missile has moved away from its starting spot */
+           point_blank = FALSE;        /* affects passing through iron bars */
        }
 
        if (weapon != ZAPPED_WAND && weapon != INVIS_BEAM) tmp_at(DISP_END, 0);