"fix" github issue #475 - Trollsbane
Player's pet killed a troll with Trollsbane and the corpse later revived. He assumed that killing a troll with Trollsbane is what prevents troll corpse revival but that is inhibited by the hero be wielding Trollsbane at the time revival is attempted. Having killed-by-Trollsbane be the reason for blocking revival would be much better but looks like a lot of work for something which was supposed to be a one-line enhancement to an under-used artifact. This extends revival inhibition to having anyone on the level be wielding Trollsbane rather than just the hero. Not a proper fix but I think it's better than nothing. Closes #475
This commit is contained in:
@@ -426,6 +426,8 @@ also show extended command name when showing what a key does in help
|
|||||||
poly'd hero who exploded when attacking a monster didn't wake up other
|
poly'd hero who exploded when attacking a monster didn't wake up other
|
||||||
monsters in the vicinity; when attacking thin air, hero's explosion
|
monsters in the vicinity; when attacking thin air, hero's explosion
|
||||||
woke other monsters within different radius than same monster's would
|
woke other monsters within different radius than same monster's would
|
||||||
|
troll corpse revival was inhibited by hero wielding Trollsbane; do that if
|
||||||
|
anyone on level is wielding it
|
||||||
|
|
||||||
|
|
||||||
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
|
||||||
|
|||||||
@@ -98,6 +98,7 @@ extern void retouch_equipment(int);
|
|||||||
extern void mkot_trap_warn(void);
|
extern void mkot_trap_warn(void);
|
||||||
extern boolean is_magic_key(struct monst *, struct obj *);
|
extern boolean is_magic_key(struct monst *, struct obj *);
|
||||||
extern struct obj *has_magic_key(struct monst *);
|
extern struct obj *has_magic_key(struct monst *);
|
||||||
|
extern boolean Trollsbane_wielded(void);
|
||||||
|
|
||||||
/* ### attrib.c ### */
|
/* ### attrib.c ### */
|
||||||
|
|
||||||
|
|||||||
@@ -2176,4 +2176,25 @@ has_magic_key(struct monst *mon) /* if null, hero assumed */
|
|||||||
return (struct obj *) 0;
|
return (struct obj *) 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* True if anyone on the level is wielding Trollsbane, False otherwise;
|
||||||
|
used to prevent troll resurrection (FIXME: really ought to be inhibited
|
||||||
|
when killed by Trollsbane rather than whether anyone wields that) */
|
||||||
|
boolean
|
||||||
|
Trollsbane_wielded(void)
|
||||||
|
{
|
||||||
|
struct monst *mtmp;
|
||||||
|
struct obj *mw_tmp;
|
||||||
|
|
||||||
|
if (uwep && uwep->oartifact == ART_TROLLSBANE)
|
||||||
|
return TRUE;
|
||||||
|
for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
|
||||||
|
if (DEADMONSTER(mtmp))
|
||||||
|
continue;
|
||||||
|
if ((mw_tmp = MON_WEP(mtmp)) != 0
|
||||||
|
&& mw_tmp->oartifact == ART_TROLLSBANE)
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
/*artifact.c*/
|
/*artifact.c*/
|
||||||
|
|||||||
@@ -784,8 +784,7 @@ revive(struct obj *corpse, boolean by_hero)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ((mons[montype].mlet == S_EEL && !IS_POOL(levl[x][y].typ))
|
if ((mons[montype].mlet == S_EEL && !IS_POOL(levl[x][y].typ))
|
||||||
|| (mons[montype].mlet == S_TROLL
|
|| (mons[montype].mlet == S_TROLL && Trollsbane_wielded())) {
|
||||||
&& uwep && uwep->oartifact == ART_TROLLSBANE)) {
|
|
||||||
if (by_hero && cansee(x, y))
|
if (by_hero && cansee(x, y))
|
||||||
pline("%s twitches feebly.",
|
pline("%s twitches feebly.",
|
||||||
upstart(corpse_xname(corpse, (const char *) 0, CXN_PFX_THE)));
|
upstart(corpse_xname(corpse, (const char *) 0, CXN_PFX_THE)));
|
||||||
|
|||||||
Reference in New Issue
Block a user