avoid giving away wand type for near misses while blind
avoid excessive repetition of "monsters are aware of your presence"
monster's aggravation spell now affects meditating monsters
+handle pets sooner at end-of-game to avoid message delivery anomalies
busy pet won't miss out upon ascension
fix various places that "finally finished" could be displayed after the hero
stopped doing something other than eating
-/* SCCS Id: @(#)dog.c 3.5 2006/10/20 */
+/* SCCS Id: @(#)dog.c 3.5 2007/03/02 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
mtmp->mcanmove = 1;
}
if (((monnear(mtmp, u.ux, u.uy) && levl_follower(mtmp)) ||
-#ifdef STEED
- (mtmp == u.usteed) ||
-#endif
/* the wiz will level t-port from anywhere to chase
the amulet; if you don't have it, will chase you
only if in range. -3. */
/* monster won't follow if it hasn't noticed you yet */
&& !(mtmp->mstrategy & STRAT_WAITFORU)) {
stay_behind = FALSE;
+ if (mtmp->mtrapped) (void)mintrap(mtmp); /* try to escape */
#ifdef STEED
if (mtmp == u.usteed) {
- /* make sure steed is eligible to accompany hero;
- start by having mintrap() give a chance to escape
- trap normally but if that fails, force the untrap
- (note: handle traps first because normal escape
- has the potential to set monster->meating) */
- if (mtmp->mtrapped && mintrap(mtmp))
- mtmp->mtrapped = 0; /* escape trap */
+ /* make sure steed is eligible to accompany hero */
+ mtmp->mtrapped = 0; /* escape trap */
mtmp->meating = 0; /* terminate eating */
mdrop_special_objs(mtmp); /* drop Amulet */
} else
#endif
- if (mtmp->mtame && mtmp->meating) {
+ if (mtmp->meating || mtmp->mtrapped) {
if (canseemon(mtmp))
- pline("%s is still eating.", Monnam(mtmp));
+ pline("%s is still %s.", Monnam(mtmp),
+ mtmp->meating ? "eating" : "trapped");
stay_behind = TRUE;
} else if (mon_has_amulet(mtmp)) {
if (canseemon(mtmp))
pline("%s seems very disoriented for a moment.",
Monnam(mtmp));
stay_behind = TRUE;
- } else if (mtmp->mtame && mtmp->mtrapped) {
- if (canseemon(mtmp))
- pline("%s is still trapped.", Monnam(mtmp));
- stay_behind = TRUE;
}
if (stay_behind) {
if (mtmp->mleashed) {
make_grave(u.ux, u.uy, pbuf);
}
}
+ /* if pets will contribute to score, populate mydogs list now
+ (bones creation isn't a factor, but pline() messaging is) */
+ if (how == ESCAPED || how == ASCENDED) keepdogs(TRUE);
if (how == QUIT) {
killer.format = NO_KILLER_PREFIX;
/* count the points for artifacts */
artifact_score(invent, TRUE, endwin);
- keepdogs(TRUE);
viz_array[0][0] |= IN_SIGHT; /* need visibility for naming */
mtmp = mydogs;
if (!done_stopprint) Strcpy(pbuf, "You");
-/* SCCS Id: @(#)mondata.c 3.5 2007/02/05 */
+/* SCCS Id: @(#)mondata.c 3.5 2007/03/02 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
levl_follower(mtmp)
struct monst *mtmp;
{
- /* monsters with the Amulet--even pets--won't follow across levels */
- if (mon_has_amulet(mtmp)) return FALSE;
+#ifdef STEED
+ if (mtmp == u.usteed) return TRUE;
+#endif
+
+ /* Wizard with Amulet won't bother trying to follow across levels */
+ if (mtmp->iswiz && mon_has_amulet(mtmp)) return FALSE;
/* some monsters will follow even while intending to flee from you */
if (mtmp->mtame || mtmp->iswiz || is_fshk(mtmp)) return TRUE;