summaryrefslogtreecommitdiffstats
path: root/crawl-ref
diff options
context:
space:
mode:
authordolorous <dolorous@c06c8d41-db1a-0410-9941-cceddc491573>2008-06-20 21:07:35 +0000
committerdolorous <dolorous@c06c8d41-db1a-0410-9941-cceddc491573>2008-06-20 21:07:35 +0000
commit9b5ee487ebe26e03f3b1d70520492f5d0bf54de0 (patch)
tree410bda44a760a55d1477adc3dfa1449b647af160 /crawl-ref
parente867a0f0bf9cc17df941665d43a87094c7e35657 (diff)
downloadcrawl-ref-9b5ee487ebe26e03f3b1d70520492f5d0bf54de0.tar.gz
crawl-ref-9b5ee487ebe26e03f3b1d70520492f5d0bf54de0.zip
Improve level exit handling again.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@6008 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref')
-rw-r--r--crawl-ref/source/mon-util.cc1
-rw-r--r--crawl-ref/source/monstuff.cc25
2 files changed, 25 insertions, 1 deletions
diff --git a/crawl-ref/source/mon-util.cc b/crawl-ref/source/mon-util.cc
index 79d5709bdf..496bc3919d 100644
--- a/crawl-ref/source/mon-util.cc
+++ b/crawl-ref/source/mon-util.cc
@@ -6185,7 +6185,6 @@ bool monsters::move_to_pos(const coord_def &newpos)
return (true);
}
-
// Returns true if the trap should be revealed to the player.
bool monsters::do_shaft()
{
diff --git a/crawl-ref/source/monstuff.cc b/crawl-ref/source/monstuff.cc
index 407cda3829..d355440273 100644
--- a/crawl-ref/source/monstuff.cc
+++ b/crawl-ref/source/monstuff.cc
@@ -2418,6 +2418,23 @@ static bool _mons_find_nearest_level_exit(const monsters *mon, level_exit &e)
return (old_dist != -1);
}
+// If _mons_find_level_exits() is ever expanded to handle more trap
+// types, this should be expanded along with it.
+static void _mons_handle_trap_level_exit(const monsters *mon, trap_type trap)
+{
+ switch (trap)
+ {
+ case TRAP_TELEPORT:
+ simple_monster_message(mon, " disappears!");
+ break;
+ case TRAP_SHAFT:
+ simple_monster_message(mon, " falls through a shaft!");
+ break;
+ default:
+ break;
+ }
+}
+
static void _make_mons_leave_level(monsters *mon)
{
if (mons_is_leaving(mon))
@@ -3268,6 +3285,14 @@ static void _handle_behaviour(monsters *mon)
|| distance(mon->x, mon->y, mon->target_x, mon->target_y) == 1
&& mon->travel_target == MTRAV_TRAP)
{
+ if (mon->travel_target == MTRAV_TRAP)
+ {
+ _mons_handle_trap_level_exit(
+ mon, trap_type_at_xy(mon->target_x, mon->target_y));
+ }
+ else if (mon->travel_target == MTRAV_SUBMERSIBLE)
+ mon->add_ench(ENCH_SUBMERGED);
+
_make_mons_leave_level(mon);
return;
}