github issue #475 revisited - Trollsbane

Change Trollsbane versus troll corpse revival:  instead of revival
failing if Trollsbane is wielded at time of revival attempt, mark
the corpse no-revive if killed by Trollsbane (whether by the hero
or a monster).

If a no-revive corpse is within view when time to revive occurs,
give "the troll corpse twitches feebly" even when the hero isn't
responsible.  That used to only apply if the hero zapped the
corpse with undead turning, which would have become inoperative
because now being zapped by undead turning clears the no-revive
flag and revives as normal.  In other words, undead turning magic
overrides killed-by-Trollsbane or non-ice troll having been in an
ice box.
This commit is contained in:
PatR
2021-04-02 10:38:57 -07:00
parent 770afba463
commit 328dc5bdfa
11 changed files with 79 additions and 58 deletions

View File

@@ -961,6 +961,9 @@ struct instance_globals {
int xmin, ymin, xmax, ymax; /* level boundaries */
boolean ransacked;
/* mkobj.c */
boolean mkcorpstat_norevive; /* for trolls */
/* mon.c */
boolean vamp_rise_msg;
boolean disintegested;

View File

@@ -98,7 +98,6 @@ extern void retouch_equipment(int);
extern void mkot_trap_warn(void);
extern boolean is_magic_key(struct monst *, struct obj *);
extern struct obj *has_magic_key(struct monst *);
extern boolean Trollsbane_wielded(void);
/* ### attrib.c ### */

View File

@@ -210,6 +210,10 @@ struct monst {
#define is_obj_mappear(mon,otyp) (M_AP_TYPE(mon) == M_AP_OBJECT \
&& (mon)->mappearance == (otyp))
/* is mon m (presumably just killed) a troll and obj o Trollsbane? */
#define troll_baned(m,o) \
((m)->data->mlet == S_TROLL && (o) && (o)->oartifact == ART_TROLLSBANE)
/* Get the maximum difficulty monsters that can currently be generated,
given the current level difficulty and the hero's level. */
#define monmax_difficulty(levdif) (((levdif) + u.ulevel) / 2)