diff options
Diffstat (limited to 'crawl-ref/source/monplace.cc')
-rw-r--r-- | crawl-ref/source/monplace.cc | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/crawl-ref/source/monplace.cc b/crawl-ref/source/monplace.cc index f24325525b..c921d098ee 100644 --- a/crawl-ref/source/monplace.cc +++ b/crawl-ref/source/monplace.cc @@ -65,7 +65,15 @@ bool grid_compatible(int grid_wanted, int actual_grid, bool generation) // that uses only the monster class to make decisions. bool monster_habitable_grid(const monsters *m, int actual_grid) { - return (monster_habitable_grid(m->type, actual_grid, mons_flies(m))); + return (monster_habitable_grid(m->type, actual_grid, mons_flies(m), + m->paralysed())); +} + +inline static bool mons_airborne(int mcls, int flies, bool paralysed) +{ + if (flies == -1) + flies = mons_class_flies(mcls); + return (paralysed? flies == 2 : flies != 0); } // Can monsters of class monster_class live happily on actual_grid? Use flies @@ -75,14 +83,15 @@ bool monster_habitable_grid(const monsters *m, int actual_grid) // one check, so we no longer care if a water elemental springs into existence // on dry land, because they're supposed to be able to move onto dry land // anyway. -bool monster_habitable_grid(int monster_class, int actual_grid, bool flies) +bool monster_habitable_grid(int monster_class, int actual_grid, int flies, + bool paralysed) { const int preferred_habitat = monster_habitat(monster_class); return (grid_compatible(preferred_habitat, actual_grid) // [dshaligram] Flying creatures are all DNGN_FLOOR, so we // only have to check for the additional valid grids of deep // water and lava. - || ((flies || mons_class_flies(monster_class)) + || (mons_airborne(monster_class, flies, paralysed) && (actual_grid == DNGN_LAVA || actual_grid == DNGN_DEEP_WATER)) |