wand/spell/breath killer reason

Extend "killed by the touch of death inflicted by <monster>" to buzz().
"Killed by a bolt of cold" becomes "killed by a bolt of cold zapped by
<monster>" or "killed by a blast of cold" becomes "killed by a blast
of cold exhaled by <monster>" and so forth.

More work than expected; the zap code isn't passed enough context.

BZ_M_WAND() was producing the wrong value for wands zapped by monsters.
This commit is contained in:
PatR
2023-03-07 02:47:42 -08:00
parent 8e6cf385b1
commit 4021a63bcf
12 changed files with 135 additions and 52 deletions

View File

@@ -793,6 +793,9 @@ struct instance_globals_b {
/* pickup.c */
boolean bucx_filter;
/* zap.c */
struct monst *buzzer; /* zapper/caster/breather who initiates buzz() */
boolean havestate;
unsigned long magic; /* validate that structure layout is preserved */
};

View File

@@ -1322,6 +1322,7 @@ extern boolean usmellmon(struct permonst *);
extern int castmu(struct monst *, struct attack *, boolean, boolean);
extern void touch_of_death(struct monst *);
extern char *death_inflicted_by(char *, const char *, struct monst *);
extern int buzzmu(struct monst *, struct attack *);
/* ### mdlib.c ### */

View File

@@ -677,12 +677,12 @@ enum getobj_callback_returns {
#define BZ_U_SPELL(bztyp) (10 + (bztyp))
/* hero breathing as a monster */
#define BZ_U_BREATH(bztyp) (20 + (bztyp))
/* monster shooting a wand */
#define BZ_M_WAND(bztyp) (-0 - (bztyp))
/* monster casting a spell */
#define BZ_M_SPELL(bztyp) (-10 - (bztyp))
/* monster breathing */
#define BZ_M_BREATH(bztyp) (-20 - (bztyp))
/* monster shooting a wand */
#define BZ_M_WAND(bztyp) (-30 - (bztyp))
/*
* option setting restrictions