diff --git a/doc/fixes34.1 b/doc/fixes34.1 index fbdb029d3..c1629c293 100644 --- a/doc/fixes34.1 +++ b/doc/fixes34.1 @@ -54,7 +54,7 @@ avoid dmonsfree impossible message due to migrating a dead monster via avoid temporary disappearing Burdened message due to updating status line midway thru in_container don't credit player's wisdom when makelevel creates random Elbereth engravings -reduce insect/monster creation from monster spells +reduce insect/monster creation from monster spells and limit chain summons avoid "couldn't place lregion type 5" warning when arriving at Plane of Fire avoid crash due to delayed poly or were change no longer being valid ensure that Priest's ability to recognize B/U/C is considered in B/U/C menus diff --git a/src/wizard.c b/src/wizard.c index 01d5941ac..e35723415 100644 --- a/src/wizard.c +++ b/src/wizard.c @@ -10,6 +10,8 @@ #include "hack.h" #include "qtext.h" +extern const int monstr[]; + #ifdef OVLB STATIC_DCL short FDECL(which_arti, (int)); @@ -435,10 +437,19 @@ nasty(mcast) bypos.y = u.uy; for(i = rnd(tmp); i > 0; --i) for(j=0; j<20; j++) { + int makeindex; + if (mcast && !enexto(&bypos, mcast->mux, mcast->muy, mcast->data)) continue; - if ((mtmp = makemon(&mons[pick_nasty()], + /* Don't create more spellcasters of the monsters' level or + * higher--avoids chain summoners filling up the level. + */ + do { + makeindex = pick_nasty(); + } while(mcast && attacktype(&mons[makeindex], AT_MAGC) && + monstr[makeindex] >= monstr[mcast->mnum]); + if ((mtmp = makemon(&mons[makeindex], bypos.x, bypos.y, NO_MM_FLAGS)) != 0) { mtmp->msleeping = mtmp->mpeaceful = mtmp->mtame = 0; set_malign(mtmp);