bool monster::can_move_to(map &m, int x, int y) { if (m.move_cost(x, y) == 0 && (!has_flag(MF_DESTROYS) || !m.is_destructable(x, y)) && ((!has_flag(MF_AQUATIC) && !has_flag(MF_SWIMS)) || !m.has_flag(swimmable, x, y))) return false; if (has_flag(MF_DIGS) && !m.has_flag(diggable, x, y)) return false; if (has_flag(MF_AQUATIC) && !m.has_flag(swimmable, x, y)) return false; return true; }