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 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!) |