Bones piles can be ransacked by adjacent monsters
If a bones file is created, any object-liking monster next to where hero died has a chance of grabbing objects from hero's inventory. This comes from xNetHack by copperwater <aosdict@gmail.com>.
This commit is contained in:
@@ -1161,6 +1161,7 @@ vomiting on an altar provokes the deities wrath
|
|||||||
branch stairs have a different glyph, show up in yellow color in tty
|
branch stairs have a different glyph, show up in yellow color in tty
|
||||||
duration of confusion when drinking booze depends upon hunger state
|
duration of confusion when drinking booze depends upon hunger state
|
||||||
using 'D' allows dropping items picked up previously
|
using 'D' allows dropping items picked up previously
|
||||||
|
bones piles can be ransacked by adjacent monsters
|
||||||
|
|
||||||
|
|
||||||
Platform- and/or Interface-Specific New Features
|
Platform- and/or Interface-Specific New Features
|
||||||
|
|||||||
+38
@@ -8,6 +8,7 @@
|
|||||||
static boolean no_bones_level(d_level *);
|
static boolean no_bones_level(d_level *);
|
||||||
static void goodfruit(int);
|
static void goodfruit(int);
|
||||||
static void resetobjs(struct obj *, boolean);
|
static void resetobjs(struct obj *, boolean);
|
||||||
|
static void give_to_nearby_mon(struct obj *, int, int);
|
||||||
static boolean fixuporacle(struct monst *);
|
static boolean fixuporacle(struct monst *);
|
||||||
|
|
||||||
static boolean
|
static boolean
|
||||||
@@ -213,6 +214,41 @@ sanitize_name(char *namebuf)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Give object to a random object-liking monster on or adjacent to x,y
|
||||||
|
but skipping hero's location.
|
||||||
|
If no such monster, place object on floor at x,y. */
|
||||||
|
static void
|
||||||
|
give_to_nearby_mon(struct obj *otmp, int x, int y)
|
||||||
|
{
|
||||||
|
struct monst *mtmp;
|
||||||
|
struct monst *selected = (struct monst *) 0;
|
||||||
|
int nmon = 0, xx, yy;
|
||||||
|
|
||||||
|
for (xx = x - 1; xx <= x + 1; ++xx) {
|
||||||
|
for (yy = y - 1; yy <= y + 1; ++yy) {
|
||||||
|
if (!isok(xx, yy))
|
||||||
|
continue;
|
||||||
|
if (xx == u.ux && yy == u.uy)
|
||||||
|
continue;
|
||||||
|
if (!(mtmp = m_at(xx, yy)))
|
||||||
|
continue;
|
||||||
|
/* This doesn't do any checks on otmp to see that it matches the
|
||||||
|
* likes_* property, intentionally. Assume that the monster is
|
||||||
|
* rifling through and taking things that look interesting. */
|
||||||
|
if (!(likes_gold(mtmp->data) || likes_gems(mtmp->data)
|
||||||
|
|| likes_objs(mtmp->data) || likes_magic(mtmp->data)))
|
||||||
|
continue;
|
||||||
|
nmon++;
|
||||||
|
if (!rn2(nmon))
|
||||||
|
selected = mtmp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (selected && can_carry(selected, otmp))
|
||||||
|
add_to_minv(selected, otmp);
|
||||||
|
else
|
||||||
|
place_object(otmp, x, y);
|
||||||
|
}
|
||||||
|
|
||||||
/* called by savebones(); also by finish_paybill(shk.c) */
|
/* called by savebones(); also by finish_paybill(shk.c) */
|
||||||
void
|
void
|
||||||
drop_upon_death(struct monst *mtmp, /* monster if hero turned into one (other than ghost) */
|
drop_upon_death(struct monst *mtmp, /* monster if hero turned into one (other than ghost) */
|
||||||
@@ -249,6 +285,8 @@ drop_upon_death(struct monst *mtmp, /* monster if hero turned into one (other th
|
|||||||
(void) add_to_minv(mtmp, otmp);
|
(void) add_to_minv(mtmp, otmp);
|
||||||
else if (cont)
|
else if (cont)
|
||||||
(void) add_to_container(cont, otmp);
|
(void) add_to_container(cont, otmp);
|
||||||
|
else if (!rn2(8))
|
||||||
|
give_to_nearby_mon(otmp, x, y);
|
||||||
else
|
else
|
||||||
place_object(otmp, x, y);
|
place_object(otmp, x, y);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user