quest leader|guardians seeing hero attack peaceful

If the quest leader observes the hero attacking a peaceful monster,
only become angry if that peaceful monster is a quest guardian.  And
when becoming angry, stop waiting for the hero to approach.

If a quest guardian observes the hero attacking any peaceful monster,
don't run away.
This commit is contained in:
PatR
2024-07-09 02:48:05 -07:00
parent e6ccd734e5
commit ee08c05e03
2 changed files with 13 additions and 3 deletions

View File

@@ -1983,6 +1983,9 @@ fix regression of a post-3.6 fix: if 2 Wizards of Yendor were in play and 1
sometimes a repeat count from the preceding command carried over to most
recent one when using do-again (^A); if the most recent one was an
extended command, the spurious repeat was for '#'
if peaceful monsters react when seeing hero attack a peaceful monster, don't
have quest guardians run away; also, quest leader only becomes angry
if the monster being attacked is a quest guardian
Fixes to 3.7.0-x Platform and/or Interface Problems Exposed Via git Repository

View File

@@ -4050,14 +4050,20 @@ peacefuls_respond(struct monst *mtmp)
}
}
/* shopkeepers and temple priests might gasp in
surprise, but they won't become angry here */
if (mon->isshk || mon->ispriest) {
surprise, but they won't become angry here;
quest leader will only get angry if hero attacks
own quest guardians */
if (mon->isshk || mon->ispriest
|| (mon->data == &mons[quest_info(MS_LEADER)]
&& mtmp->data != &mons[gu.urole.guardnum])) {
if (exclaimed)
pline_mon(mon, "%s%s", buf, " then shrugs.");
continue;
}
if (mon->data->mlevel < rn2(10)) {
if (mon->data->mlevel < rn2(10)
/* don't have quest guardians turn to flee */
&& (mon->data != &mons[gu.urole.guardnum])) {
alreadyfleeing = (mon->mflee || mon->mfleetim);
monflee(mon, rn2(50) + 25, TRUE, !exclaimed);
if (exclaimed) {
@@ -4075,6 +4081,7 @@ peacefuls_respond(struct monst *mtmp)
* perhaps reduce tameness? */
} else {
mon->mpeaceful = 0;
mon->mstrategy &= ~STRAT_WAITMASK;
adjalign(-1);
if (!exclaimed)
pline_mon(mon, "%s gets angry!", Monnam(mon));