diff --git a/include/extern.h b/include/extern.h index c9ae83c0e..f4d5f1a8c 100644 --- a/include/extern.h +++ b/include/extern.h @@ -1657,6 +1657,7 @@ extern boolean resist_conflict(struct monst *); extern boolean mon_knows_traps(struct monst *, int); extern void mon_learns_traps(struct monst *, int); extern void mons_see_trap(struct trap *); +extern int get_atkdam_type(int); /* ### monmove.c ### */ diff --git a/src/mondata.c b/src/mondata.c index 64d8fed7c..0278195f8 100644 --- a/src/mondata.c +++ b/src/mondata.c @@ -1416,4 +1416,16 @@ mons_see_trap(struct trap *ttmp) } } +int +get_atkdam_type(int adtyp) +{ + if (adtyp == AD_RBRE) { + static const int rnd_breath_typ[] = { + AD_MAGM, AD_FIRE, AD_COLD, AD_SLEE, + AD_DISN, AD_ELEC, AD_DRST, AD_ACID }; + return rnd_breath_typ[rn2(SIZE(rnd_breath_typ))]; + } + return adtyp; +} + /*mondata.c*/ diff --git a/src/mthrowu.c b/src/mthrowu.c index 3ddeee45c..24434eced 100644 --- a/src/mthrowu.c +++ b/src/mthrowu.c @@ -893,8 +893,7 @@ breathwep_name(int typ) int breamm(struct monst* mtmp, struct attack* mattk, struct monst* mtarg) { - /* if new breath types are added, change AD_ACID to max type */ - int typ = (mattk->adtyp == AD_RBRE) ? rnd(AD_ACID) : mattk->adtyp ; + int typ = get_atkdam_type(mattk->adtyp); if (m_lined_up(mtarg, mtmp)) { if (mtmp->mcan) {