From 4d9db9c09da68eaeed79e949406d28562f2782ae Mon Sep 17 00:00:00 2001 From: PatR Date: Sun, 6 Mar 2016 01:02:18 -0800 Subject: [PATCH] more bz130 - muse of horns The bug report was actually about letting monsters use fire horns without checking whether they could actually use wind instruments. The previous fix probably handled most cases by excluding animals and mindless creatures, but this is a more specific fix for MUSE of fire and frost horns--they must pass the same test as the hero and it's not limited to stopping being turned into slime. --- src/muse.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/muse.c b/src/muse.c index 258dee5f0..b0a843d7d 100644 --- a/src/muse.c +++ b/src/muse.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 muse.c $NHDT-Date: 1457236628 2016/03/06 03:57:08 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.71 $ */ +/* NetHack 3.6 muse.c $NHDT-Date: 1457254910 2016/03/06 09:01:50 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.72 $ */ /* Copyright (C) 1990 by Ken Arromdee */ /* NetHack may be freely redistributed. See license for details. */ @@ -1116,7 +1116,7 @@ struct monst *mtmp; m.has_offense = MUSE_WAN_FIRE; } nomore(MUSE_FIRE_HORN); - if (obj->otyp == FIRE_HORN && obj->spe > 0) { + if (obj->otyp == FIRE_HORN && obj->spe > 0 && can_blow(mtmp)) { m.offensive = obj; m.has_offense = MUSE_FIRE_HORN; } @@ -1126,7 +1126,7 @@ struct monst *mtmp; m.has_offense = MUSE_WAN_COLD; } nomore(MUSE_FROST_HORN); - if (obj->otyp == FROST_HORN && obj->spe > 0) { + if (obj->otyp == FROST_HORN && obj->spe > 0 && can_blow(mtmp)) { m.offensive = obj; m.has_offense = MUSE_FROST_HORN; } @@ -2074,7 +2074,7 @@ struct obj *obj; if (typ == UNICORN_HORN) return (boolean) (!obj->cursed && !is_unicorn(mon->data)); if (typ == FROST_HORN || typ == FIRE_HORN) - return (obj->spe > 0); + return (obj->spe > 0 && can_blow(mon)); break; case FOOD_CLASS: if (typ == CORPSE) @@ -2492,7 +2492,8 @@ struct obj *obj; if (obj->otyp == SCR_FIRE) return (haseyes(mon->data) && mon->mcansee); /* hero doesn't need hands or even limbs to zap, so mon doesn't either */ - return ((obj->otyp == WAN_FIRE || obj->otyp == FIRE_HORN) + return ((obj->otyp == WAN_FIRE + || (obj->otyp == FIRE_HORN && can_blow(mon))) && obj->spe > 0); } -- 2.40.0