summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/traps.cc
diff options
context:
space:
mode:
authorMatthew Cline <zelgadis@sourceforge.net>2009-10-21 13:21:20 -0700
committerMatthew Cline <zelgadis@sourceforge.net>2009-10-21 13:21:20 -0700
commitc7a7fb4439a5f5006109abcd20cd0300f7d36827 (patch)
tree9a92c9a28570abc6488d58a032048e5f8b12c137 /crawl-ref/source/traps.cc
parent1995a2a6436f8a2d3216634f24d5ed76d97327e2 (diff)
downloadcrawl-ref-c7a7fb4439a5f5006109abcd20cd0300f7d36827.tar.gz
crawl-ref-c7a7fb4439a5f5006109abcd20cd0300f7d36827.zip
Don't disturb monsters witth their own sound
A monster making noise was causing an ME_DISTURB behaviour_event() for itself, possibly causing it to get a new foe, which could cause strange results if it switched foes during the middle of spell-casting when it made noise from chanting. Now noisy() can accept a "who" parameter, in which case the monster which caused the noise will ignore the noise. This is done in all cases except for when a monster of animal or lower intelligence sets off an alarm trap or does a spell miscast.
Diffstat (limited to 'crawl-ref/source/traps.cc')
-rw-r--r--crawl-ref/source/traps.cc10
1 files changed, 8 insertions, 2 deletions
diff --git a/crawl-ref/source/traps.cc b/crawl-ref/source/traps.cc
index c0b3f22f5b..990e277e51 100644
--- a/crawl-ref/source/traps.cc
+++ b/crawl-ref/source/traps.cc
@@ -415,8 +415,14 @@ void trap_def::trigger(actor& triggerer, bool flat_footed)
const char* message_here = "An alarm trap emits a blaring wail!";
const char* message_near = "You hear a blaring wail!";
const char* message_far = "You hear a distant blaring wail!";
- noisy(12, this->pos, (you_trigger ? message_here :
- (in_sight ? message_near : message_far)));
+ const char* msg = (you_trigger ? message_here :
+ (in_sight ? message_near : message_far));
+ // Monsters of normal or greater intelligence will realize that
+ // they were the one to set off the trap.
+ int source = !m ? you.mindex() :
+ mons_intel(m) >= I_NORMAL ? m->mindex() : -1;
+
+ noisy(12, this->pos, msg, source);
}
break;