diff --git a/src/makemon.c b/src/makemon.c index 61f6ca255..dd6e3b439 100644 --- a/src/makemon.c +++ b/src/makemon.c @@ -1458,7 +1458,7 @@ makemon( } /* if discernable and a threat, stop fiddling while Rome burns */ if (g.occupation) - (void) dochugw(mtmp, TRUE); + (void) dochugw(mtmp, FALSE); /* TODO: unify with teleport appears msg */ } diff --git a/src/mon.c b/src/mon.c index 603cc4370..2686c3e98 100644 --- a/src/mon.c +++ b/src/mon.c @@ -1064,7 +1064,7 @@ movemon(void) && fightm(mtmp)) continue; /* mon might have died */ } - if (dochugw(mtmp, FALSE)) /* otherwise just move the monster */ + if (dochugw(mtmp, TRUE)) /* otherwise just move the monster */ continue; } diff --git a/src/monmove.c b/src/monmove.c index 722dfb7b5..aed2ab265 100644 --- a/src/monmove.c +++ b/src/monmove.c @@ -113,14 +113,15 @@ watch_on_duty(register struct monst* mtmp) int dochugw( register struct monst *mtmp, - boolean dontchug) /* True: monster was just created, or maybe it has - * teleported; perform stop-what-you're-doing-if-close- - * enough-to-be-a-threat check but don't move mtmp */ + boolean chug) /* True: monster is moving; + * False: monster was just created or has teleported + * so perform stop-what-you're-doing-if-close-enough- + * to-be-a-threat check but don't move mtmp */ { - int x = mtmp->mx, y = mtmp->my; - boolean already_saw_mon = ((dontchug || !g.occupation) ? 0 - : canspotmon(mtmp)); - int rd = dontchug ? 0 : dochug(mtmp); + int x = mtmp->mx, y = mtmp->my; /* 'mtmp's location before dochug() */ + /* skip canspotmon() if occupation is Null */ + boolean already_saw_mon = (chug && g.occupation) ? canspotmon(mtmp) : 0; + int rd = chug ? dochug(mtmp) : 0; /* * A similar check is in monster_nearby() in hack.c. diff --git a/src/teleport.c b/src/teleport.c index 82d49e425..71fd37777 100644 --- a/src/teleport.c +++ b/src/teleport.c @@ -1324,15 +1324,16 @@ rloc_to_core( Monnam(mtmp), next2u(x, y) ? " next to you" : (distu(x, y) <= (BOLT_LIM * BOLT_LIM)) ? " close by" - : (distu(x, y) < distu(oldx, oldy)) ? " closer to you" - : " further away"); + : (distu(x, y) < distu(oldx, oldy)) ? " closer to you" + : " further away"); } else { pline("%s %s%s%s!", appearmsg ? Amonnam(mtmp) : Monnam(mtmp), appearmsg ? "suddenly " : "", !Blind ? "appears" : "arrives", next2u(x, y) ? " next to you" - : (distu(x, y) <= (BOLT_LIM * BOLT_LIM)) ? " close by" : ""); + : (distu(x, y) <= (BOLT_LIM * BOLT_LIM)) ? " close by" + : ""); } } @@ -1342,6 +1343,10 @@ rloc_to_core( if (resident_shk && !inhishop(mtmp)) make_angry_shk(mtmp, oldx, oldy); + /* if hero is busy, maybe stop occupation */ + if (g.occupation) + (void) dochugw(mtmp, FALSE); + /* trapped monster teleported away */ if (mtmp->mtrapped && !mtmp->wormno) (void) mintrap(mtmp, NO_TRAP_FLAGS);