From 24e44f849415fe62589fce59d03d879f4a98aba3 Mon Sep 17 00:00:00 2001 From: dshaligram Date: Fri, 11 May 2007 16:14:30 +0000 Subject: Merge trunk (1460:1463] to 0.2 branch (flying monsters, pools, and paralysis). git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/branches/stone_soup-0.2@1464 c06c8d41-db1a-0410-9941-cceddc491573 --- crawl-ref/source/mon-data.h | 2 +- crawl-ref/source/monplace.cc | 15 ++++++++++++--- crawl-ref/source/monplace.h | 2 +- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/crawl-ref/source/mon-data.h b/crawl-ref/source/mon-data.h index 8b5c963210..ddd293f451 100644 --- a/crawl-ref/source/mon-data.h +++ b/crawl-ref/source/mon-data.h @@ -687,7 +687,7 @@ { MONS_UNSEEN_HORROR, 'x', MAGENTA, "unseen horror", - M_LEVITATE | M_SEE_INVIS | M_INVIS, + M_SEE_INVIS | M_INVIS, MR_NO_FLAGS, 0, 12, MONS_UNSEEN_HORROR, MONS_UNSEEN_HORROR, MH_NATURAL, -3, { {AT_HIT, AF_PLAIN, 12}, {AT_NONE, AF_PLAIN, 0}, {AT_NONE, AF_PLAIN, 0}, {AT_NONE, AF_PLAIN, 0} }, 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)) diff --git a/crawl-ref/source/monplace.h b/crawl-ref/source/monplace.h index 5f00448a2b..7d351970b3 100644 --- a/crawl-ref/source/monplace.h +++ b/crawl-ref/source/monplace.h @@ -94,7 +94,7 @@ void mark_interesting_monst(struct monsters* monster, bool grid_compatible(int grid_wanted, int actual_grid, bool generation = false); bool monster_habitable_grid(int monster_class, int actual_grid, - bool flies = false); + int flies = -1, bool paralysed = false); bool monster_habitable_grid(const monsters *m, int actual_grid); bool monster_floundering(const monsters *m); bool monster_can_submerge(int monster_class, int grid); -- cgit v1.2.3-54-g00ecf