-/* 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. */
|| 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)
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:
-/* 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. */
{
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 */
/* 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;
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);