summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/monplace.cc
diff options
context:
space:
mode:
Diffstat (limited to 'crawl-ref/source/monplace.cc')
-rw-r--r--crawl-ref/source/monplace.cc15
1 files changed, 12 insertions, 3 deletions
diff --git a/crawl-ref/source/monplace.cc b/crawl-ref/source/monplace.cc
index 212a8147f4..da3f64f1e5 100644
--- a/crawl-ref/source/monplace.cc
+++ b/crawl-ref/source/monplace.cc
@@ -140,11 +140,20 @@ bool monster_habitable_grid(int monster_class,
dungeon_feature_type actual_grid,
int flies, bool paralysed)
{
+ // No monster may be placed on open sea.
+ if (actual_grid == DNGN_OPEN_SEA)
+ return (false);
+
const dungeon_feature_type grid_preferred =
habitat2grid(mons_class_primary_habitat(monster_class));
const dungeon_feature_type grid_nonpreferred =
habitat2grid(mons_class_secondary_habitat(monster_class));
+ // Special check for fire elementals since their habitat is floor which
+ // is generally considered compatible with shallow water.
+ if (monster_class == MONS_FIRE_ELEMENTAL && grid_is_watery(actual_grid))
+ return (false);
+
if (grid_compatible(grid_preferred, actual_grid)
|| (grid_nonpreferred != grid_preferred
&& grid_compatible(grid_nonpreferred, actual_grid)))
@@ -1014,10 +1023,10 @@ static int _place_monster_aux(const mgen_data &mg,
ASSERT(mgrd(fpos) == NON_MONSTER);
- if (crawl_state.arena)
+ if (crawl_state.arena
+ && arena_veto_place_monster(mg, first_band_member, fpos))
{
- if (arena_veto_place_monster(mg, first_band_member, fpos))
- return (-1);
+ return (-1);
}
// Now, actually create the monster. (Wheeee!)