From 3289933094518805c0a253911d2308620ac68eb8 Mon Sep 17 00:00:00 2001 From: Chris Campbell Date: Sat, 31 Dec 2016 00:43:36 +0000 Subject: [PATCH] Let digging destroy statues (|amethyst) Since disintegration no longer does, and some vaults required it for access. --- crawl-ref/source/beam.cc | 27 +++++++++++---------------- crawl-ref/source/terrain.cc | 9 +++++++++ crawl-ref/source/terrain.h | 1 + 3 files changed, 21 insertions(+), 16 deletions(-) diff --git a/crawl-ref/source/beam.cc b/crawl-ref/source/beam.cc index 73c61caa214..f00da47a239 100644 --- a/crawl-ref/source/beam.cc +++ b/crawl-ref/source/beam.cc @@ -809,13 +809,15 @@ void bolt::fake_flavour() void bolt::digging_wall_effect() { + if (env.markers.property_at(pos(), MAT_ANY, "veto_disintegrate") == "veto") + { + finish_beam(); + return; + } + const dungeon_feature_type feat = grd(pos()); - switch (feat) + if (feat_is_diggable(feat)) { - case DNGN_ROCK_WALL: - case DNGN_CLEAR_ROCK_WALL: - case DNGN_SLIMY_WALL: - case DNGN_GRATE: destroy_wall(pos()); if (!msg_generated) { @@ -827,7 +829,7 @@ void bolt::digging_wall_effect() obvious_effect = true; // You may still see the caster. msg_generated = true; } - break; + return; } obvious_effect = true; @@ -851,12 +853,9 @@ void bolt::digging_wall_effect() agent() && agent()->is_player() ? "The" : "Some", wall.c_str()); } - break; - - default: - if (feat_is_wall(feat)) - finish_beam(); } + else if (feat_is_wall(feat)) + finish_beam(); } void bolt::burn_wall_effect() @@ -2772,12 +2771,8 @@ bool bolt::can_affect_wall(const coord_def& p) const return false; // digging - if (flavour == BEAM_DIGGING - && (wall == DNGN_ROCK_WALL || wall == DNGN_CLEAR_ROCK_WALL - || wall == DNGN_SLIMY_WALL || wall == DNGN_GRATE)) - { + if (flavour == BEAM_DIGGING && feat_is_diggable(wall)) return true; - } if (can_burn_trees()) return feat_is_tree(wall); diff --git a/crawl-ref/source/terrain.cc b/crawl-ref/source/terrain.cc index 883f43530a6..ece234783a5 100644 --- a/crawl-ref/source/terrain.cc +++ b/crawl-ref/source/terrain.cc @@ -425,6 +425,15 @@ bool feat_is_permarock(dungeon_feature_type feat) return feat == DNGN_PERMAROCK_WALL || feat == DNGN_CLEAR_PERMAROCK_WALL; } +/** Can this feature be dug? + */ +bool feat_is_diggable(dungeon_feature_type feat) +{ + return feat == DNGN_ROCK_WALL || feat == DNGN_CLEAR_ROCK_WALL + || feat == DNGN_SLIMY_WALL || feat == DNGN_GRATE + || feat == DNGN_ORCISH_IDOL || DNGN_GRANITE_STATUE; +} + /** Is this feature a type of trap? * * @param feat the feature. diff --git a/crawl-ref/source/terrain.h b/crawl-ref/source/terrain.h index ab5919a6318..ab1ed42dade 100644 --- a/crawl-ref/source/terrain.h +++ b/crawl-ref/source/terrain.h @@ -41,6 +41,7 @@ bool feat_is_closed_door(dungeon_feature_type feat); bool feat_is_sealed(dungeon_feature_type feat); bool feat_is_statuelike(dungeon_feature_type feat); bool feat_is_permarock(dungeon_feature_type feat); +bool feat_is_diggable(dungeon_feature_type feat); bool feat_is_stone_stair_down(dungeon_feature_type feat); bool feat_is_stone_stair_up(dungeon_feature_type feat);