summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/mon-util.cc
diff options
context:
space:
mode:
authorj-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573>2008-06-11 22:55:29 +0000
committerj-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573>2008-06-11 22:55:29 +0000
commit9fd7f5bc149e7fa7ae2597bc39ca7fd348997424 (patch)
treefa2bd181febcf019dad6e9d9987f3c01fa07436b /crawl-ref/source/mon-util.cc
parentf200b503f68b2eb90fd9a5677c79e093df07544c (diff)
downloadcrawl-ref-9fd7f5bc149e7fa7ae2597bc39ca7fd348997424.tar.gz
crawl-ref-9fd7f5bc149e7fa7ae2597bc39ca7fd348997424.zip
Extend monster pathfinding to monsters circumventing pools of deep water
or lava. I've added some more checks to avoid hampering performance too much, but of course there's still space for improvement. Once per turn check whether the player can see water and/or lava, and only if this is the case run the additional checks (monster habitat, grid_see_grid) when a monster tries to move. Smart monsters that have a ranged attack won't use pathfinding either since they can directly fire at the player. (This is identical to their pre-pathfinding behaviour.) Also fix butterflies really not interrupting resting. (Setting it to 0 doesn't work for some reason.) git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@5737 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/mon-util.cc')
-rw-r--r--crawl-ref/source/mon-util.cc15
1 files changed, 12 insertions, 3 deletions
diff --git a/crawl-ref/source/mon-util.cc b/crawl-ref/source/mon-util.cc
index 1a8d813618..d89a16e0fd 100644
--- a/crawl-ref/source/mon-util.cc
+++ b/crawl-ref/source/mon-util.cc
@@ -1261,12 +1261,20 @@ flight_type mons_flies(const monsters *mon)
: FL_NONE);
}
-bool mons_amphibious(int mc)
+bool mons_class_amphibious(int mc)
{
return mons_class_flag(mc, M_AMPHIBIOUS);
}
-// This nice routine we keep in exactly the way it was-
+bool mons_amphibious(const monsters *mon)
+{
+ const int type = mons_is_zombified(mon) ? mons_zombie_base(mon)
+ : mon->type;
+
+ return (mons_class_amphibious(type));
+}
+
+// This nice routine we keep in exactly the way it was.
int hit_points(int hit_dice, int min_hp, int rand_hp)
{
int hrolled = 0;
@@ -2816,7 +2824,7 @@ bool monsters::floundering() const
// Can't use monster_habitable_grid because that'll return true
// for non-water monsters in shallow water.
&& mons_habitat(this) != HT_WATER
- && !mons_amphibious(type)
+ && !mons_amphibious(this)
&& !mons_flies(this));
}
@@ -2841,6 +2849,7 @@ bool monsters::can_drown() const
{
// Mummies can fall apart in water; ghouls, vampires, and demons can
// drown in water/lava.
+ // Other undead just "sink like a rock", to be never seen again.
return (!mons_res_asphyx(this)
|| mons_genus(type) == MONS_MUMMY
|| mons_genus(type) == MONS_GHOUL