From 5773c461efa646c5098c54a0fb18454fa96a6aa0 Mon Sep 17 00:00:00 2001 From: "nethack.rankin" Date: Wed, 24 Jul 2002 05:42:49 +0000 Subject: [PATCH] throwing through iron bars 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 | 7 +++++-- src/zap.c | 9 ++++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/mthrowu.c b/src/mthrowu.c index dec7c2035..d0836c12d 100644 --- a/src/mthrowu.c +++ b/src/mthrowu.c @@ -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: diff --git a/src/zap.c b/src/zap.c index ee7277550..f789d1d4c 100644 --- 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); -- 2.40.0