git pull request #133 - reassess worn equipment
Fixes #133 Monsters who lost an amulet of life saving while having their life saved wouldn't attempt to put on another amulet unless/until they picked up some object. Likewise if they had a worn item stolen. (There are probably other events which should re-check worn gear.) The suggested commit had a life-saved monster re-check equipment during life-saving which might have led to reports about them effectively getting extra moves, especially if two-weapon fighting or zap rebound with sequence of kill/life-save/kill-again allowed the target to put on a replacement amulet of life-saving prior to the second kill. It also wasn't amenable to dealing with stolen equipment. This alternate fix sets a flag to have monster check its equipment on its next move.
This commit is contained in:
26
src/mon.c
26
src/mon.c
@@ -731,6 +731,17 @@ movemon()
|
||||
if (minliquid(mtmp))
|
||||
continue;
|
||||
|
||||
/* after losing equipment, try to put on replacement */
|
||||
if (mtmp->misc_worn_check & I_SPECIAL) {
|
||||
long oldworn;
|
||||
|
||||
mtmp->misc_worn_check &= ~I_SPECIAL;
|
||||
oldworn = mtmp->misc_worn_check;
|
||||
m_dowear(mtmp, FALSE);
|
||||
if (mtmp->misc_worn_check != oldworn || !mtmp->mcanmove)
|
||||
continue;
|
||||
}
|
||||
|
||||
if (is_hider(mtmp->data)) {
|
||||
/* unwatched mimics and piercers may hide again [MRS] */
|
||||
if (restrap(mtmp))
|
||||
@@ -1796,6 +1807,8 @@ struct monst *mtmp;
|
||||
pline_The("medallion crumbles to dust!");
|
||||
}
|
||||
m_useup(mtmp, lifesave);
|
||||
/* equip replacement amulet, if any, on next move */
|
||||
mtmp->misc_worn_check |= I_SPECIAL;
|
||||
|
||||
surviver = !(mvitals[monsndx(mtmp->data)].mvflags & G_GENOD);
|
||||
mtmp->mcanmove = 1;
|
||||
@@ -1806,13 +1819,14 @@ struct monst *mtmp;
|
||||
if (mtmp->mhpmax <= 0)
|
||||
mtmp->mhpmax = 10;
|
||||
mtmp->mhp = mtmp->mhpmax;
|
||||
if (surviver)
|
||||
return;
|
||||
|
||||
/* genocided monster can't be life-saved */
|
||||
if (cansee(mtmp->mx, mtmp->my))
|
||||
pline("Unfortunately, %s is still genocided...", mon_nam(mtmp));
|
||||
mtmp->mhp = 0;
|
||||
if (!surviver) {
|
||||
/* genocided monster can't be life-saved */
|
||||
if (cansee(mtmp->mx, mtmp->my))
|
||||
pline("Unfortunately, %s is still genocided...",
|
||||
mon_nam(mtmp));
|
||||
mtmp->mhp = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user