Make hostile monsters with launcher and ammo keep away
If a hostile monster is wielding a ranged weapon, and is carrying appropriate ammo for it, make the monster try to stay away, outside the melee range.
This commit is contained in:
@@ -133,6 +133,7 @@ male hero poly'd into nymph chooses charm vs seduce message based on being
|
|||||||
male rather than on all nymphs being female but charm message was
|
male rather than on all nymphs being female but charm message was
|
||||||
using hardcoded pronouns She,her for target monster--wrong for male
|
using hardcoded pronouns She,her for target monster--wrong for male
|
||||||
target and noticable if "<mon> finishes taking off his suit" is given
|
target and noticable if "<mon> finishes taking off his suit" is given
|
||||||
|
hostile monsters with launcher and ammo try to stay away from melee range
|
||||||
|
|
||||||
|
|
||||||
Fixes to 3.7.0-x Problems that Were Exposed Via git Repository
|
Fixes to 3.7.0-x Problems that Were Exposed Via git Repository
|
||||||
|
|||||||
@@ -1660,6 +1660,7 @@ E void FDECL(Delay, (int));
|
|||||||
|
|
||||||
/* ### mthrowu.c ### */
|
/* ### mthrowu.c ### */
|
||||||
|
|
||||||
|
E boolean FDECL(m_has_launcher_and_ammo, (struct monst *));
|
||||||
E int FDECL(thitu, (int, int, struct obj **, const char *));
|
E int FDECL(thitu, (int, int, struct obj **, const char *));
|
||||||
E int FDECL(ohitmon, (struct monst *, struct obj *, int, BOOLEAN_P));
|
E int FDECL(ohitmon, (struct monst *, struct obj *, int, BOOLEAN_P));
|
||||||
E void FDECL(thrwmu, (struct monst *));
|
E void FDECL(thrwmu, (struct monst *));
|
||||||
|
|||||||
@@ -999,6 +999,12 @@ register int after;
|
|||||||
> ((ygold = findgold(g.invent)) ? ygold->quan : 0L))))
|
> ((ygold = findgold(g.invent)) ? ygold->quan : 0L))))
|
||||||
appr = -1;
|
appr = -1;
|
||||||
|
|
||||||
|
/* hostile monsters with ranged thrown weapons try to stay away */
|
||||||
|
if (!mtmp->mpeaceful
|
||||||
|
&& (dist2(mtmp->mx, mtmp->my, mtmp->mux, mtmp->muy) < 5*5)
|
||||||
|
&& m_canseeu(mtmp) && m_has_launcher_and_ammo(mtmp))
|
||||||
|
appr = -1;
|
||||||
|
|
||||||
if (!should_see && can_track(ptr)) {
|
if (!should_see && can_track(ptr)) {
|
||||||
register coord *cp;
|
register coord *cp;
|
||||||
|
|
||||||
|
|||||||
@@ -26,6 +26,22 @@ static NEARDATA const char *breathwep[] = {
|
|||||||
"strange breath #9"
|
"strange breath #9"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
boolean
|
||||||
|
m_has_launcher_and_ammo(mtmp)
|
||||||
|
struct monst *mtmp;
|
||||||
|
{
|
||||||
|
struct obj *mwep = MON_WEP(mtmp);
|
||||||
|
|
||||||
|
if (mwep && is_launcher(mwep)) {
|
||||||
|
struct obj *otmp;
|
||||||
|
|
||||||
|
for (otmp = mtmp->minvent; otmp; otmp = otmp->nobj)
|
||||||
|
if (ammo_and_launcher(otmp, mwep))
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
/* hero is hit by something other than a monster */
|
/* hero is hit by something other than a monster */
|
||||||
int
|
int
|
||||||
thitu(tlev, dam, objp, name)
|
thitu(tlev, dam, objp, name)
|
||||||
|
|||||||
Reference in New Issue
Block a user