From 9de0ebd7a6b0c4a645356dc4a21b814eed3b1538 Mon Sep 17 00:00:00 2001 From: cohrs Date: Fri, 11 Oct 2002 15:59:14 +0000 Subject: [PATCH] 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. --- doc/fixes34.1 | 4 +++- src/wizard.c | 7 ++++--- 2 files changed, 7 insertions(+), 4 deletions(-) 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;