fix github issue #170 - stacks of non-missiles
Fixes #170 Monsters never throw athames or scalpels but some fake player monsters on the Astral Plane are given those. Since they're stackable the quantity usually gets boosted but there's no point in having more than one if they won't be thrown. This could have been fixed by letting monsters throw those two items, but I prevented the quantity from being boosted instead.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 mplayer.c $NHDT-Date: 1458949461 2016/03/25 23:44:21 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.21 $ */
|
||||
/* NetHack 3.6 mplayer.c $NHDT-Date: 1545964576 2018/12/28 02:36:16 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.25 $ */
|
||||
/* Copyright (c) Izchak Miller, 1992. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -270,7 +270,8 @@ register boolean special;
|
||||
if (special && rn2(2))
|
||||
otmp = mk_artifact(otmp, A_NONE);
|
||||
/* usually increase stack size if stackable weapon */
|
||||
if (objects[otmp->otyp].oc_merge && !otmp->oartifact)
|
||||
if (objects[otmp->otyp].oc_merge && !otmp->oartifact
|
||||
&& monmightthrowwep(otmp))
|
||||
otmp->quan += (long) rn2(is_spear(otmp) ? 4 : 8);
|
||||
/* mplayers knew better than to overenchant Magicbane */
|
||||
if (otmp->oartifact == ART_MAGICBANE)
|
||||
|
||||
16
src/weapon.c
16
src/weapon.c
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 weapon.c $NHDT-Date: 1541145518 2018/11/02 07:58:38 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.60 $ */
|
||||
/* NetHack 3.6 weapon.c $NHDT-Date: 1545964580 2018/12/28 02:36:20 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.67 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/*-Copyright (c) Robert Patrick Rankin, 2011. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
@@ -373,6 +373,7 @@ int x;
|
||||
return (struct obj *) 0;
|
||||
}
|
||||
|
||||
/* TODO: have monsters use aklys' throw-and-return */
|
||||
static NEARDATA const int rwep[] = {
|
||||
DWARVISH_SPEAR, SILVER_SPEAR, ELVEN_SPEAR, SPEAR, ORCISH_SPEAR, JAVELIN,
|
||||
SHURIKEN, YA, SILVER_ARROW, ELVEN_ARROW, ARROW, ORCISH_ARROW,
|
||||
@@ -510,6 +511,19 @@ register struct monst *mtmp;
|
||||
return (struct obj *) 0;
|
||||
}
|
||||
|
||||
/* is 'obj' a type of weapon that any monster knows how to throw? */
|
||||
boolean
|
||||
monmightthrowwep(obj)
|
||||
struct obj *obj;
|
||||
{
|
||||
short idx;
|
||||
|
||||
for (idx = 0; idx < SIZE(rwep); ++idx)
|
||||
if (obj->otyp == rwep[idx])
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Weapons in order of preference */
|
||||
static const NEARDATA short hwep[] = {
|
||||
CORPSE, /* cockatrice corpse */
|
||||
|
||||
Reference in New Issue
Block a user