From: cohrs Date: Fri, 11 Oct 2002 15:59:14 +0000 (+0000) Subject: creating nasty monsters on boulders X-Git-Tag: MOVE2GIT~2377 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9de0ebd7a6b0c4a645356dc4a21b814eed3b1538;p=nethack creating nasty monsters on boulders reported that a Titan summoning nasty monsters via a spell resulted in various monsters being placed on locations containing boulders. nasty() was using the summoning monster's type to decide where to place the summoned monsters. Note that this could theoretically also cause inappropriate monsters to be placed in water, lava, walls, et al. Rearranged the code to pick the monster type first. --- diff --git a/doc/fixes34.1 b/doc/fixes34.1 index 47d1fbf81..cb6541603 100644 --- a/doc/fixes34.1 +++ b/doc/fixes34.1 @@ -271,7 +271,9 @@ class genocide that killed polymorphed self while `Unchanging' reported class genocide of @ by human or elf character polymorphed into non-@ gave "you feel dead inside" message twice unskilled rider who can't reach items on floor also can't dip into moat or - pool from flying steed + pool from flying steed +when summoning nasty monsters, use new monster's type to decide if they can + be placed on boulders, et al, not the summoning monster's type Platform- and/or Interface-Specific Fixes diff --git a/src/wizard.c b/src/wizard.c index a49d7a247..698eaa76e 100644 --- a/src/wizard.c +++ b/src/wizard.c @@ -439,9 +439,6 @@ nasty(mcast) for(j=0; j<20; j++) { int makeindex; - if (mcast && - !enexto(&bypos, mcast->mux, mcast->muy, mcast->data)) - continue; /* Don't create more spellcasters of the monsters' level or * higher--avoids chain summoners filling up the level. */ @@ -449,6 +446,10 @@ nasty(mcast) makeindex = pick_nasty(); } while(mcast && attacktype(&mons[makeindex], AT_MAGC) && monstr[makeindex] >= monstr[mcast->mnum]); + /* do this after picking the monster to place */ + if (mcast && + !enexto(&bypos, mcast->mux, mcast->muy, &mons[makeindex])) + continue; if ((mtmp = makemon(&mons[makeindex], bypos.x, bypos.y, NO_MM_FLAGS)) != 0) { mtmp->msleeping = mtmp->mpeaceful = mtmp->mtame = 0;