summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/effects.cc
diff options
context:
space:
mode:
authorChris Campbell <chriscampbell89@gmail.com>2014-05-28 03:46:31 +0100
committerChris Campbell <chriscampbell89@gmail.com>2014-05-28 04:43:17 +0100
commitcd548fe2d1827730c6ba5b5d28242e1d7aca1591 (patch)
treed047d1952a2a58d17509a5c38932f5b4c5e93540 /crawl-ref/source/effects.cc
parenta5e4a985aef88b7de2b6e483643db4e78c2168f2 (diff)
downloadcrawl-ref-cd548fe2d1827730c6ba5b5d28242e1d7aca1591.tar.gz
crawl-ref-cd548fe2d1827730c6ba5b5d28242e1d7aca1591.zip
Reduce the base chance of applying corrosion, ignore item enchantment for resistance
With temporary corrosion being more abstracted than permanent corrosion, having items resist individually was a little strange since an artefact or +9 weapon could still be "corroded" by swapping from something else to it, or by having your armour be the target of the acid. Corrosion now just looks at equipped/empty slots to determine the chance of applying the debuff and how much damage to do with the acid splash, and is less likely to apply the debuff (compared to low-enchantment items). Item enchantment (or artefact status, or crystal plate armour-ness) no longer has an effect. The debuff also now can't be applied multiple times from one acid splash.
Diffstat (limited to 'crawl-ref/source/effects.cc')
-rw-r--r--crawl-ref/source/effects.cc48
1 files changed, 48 insertions, 0 deletions
diff --git a/crawl-ref/source/effects.cc b/crawl-ref/source/effects.cc
index c3b78d22c7..1c07db2562 100644
--- a/crawl-ref/source/effects.cc
+++ b/crawl-ref/source/effects.cc
@@ -3120,6 +3120,54 @@ void recharge_rods(int aut, bool level_only)
_recharge_rod(mitm[item], aut, false);
}
+/**
+ * Applies a temporary corrosion debuff to an actor.
+ */
+void corrode_actor(actor *act)
+{
+ // Don't corrode spectral weapons.
+ if (act->is_monster()
+ && mons_is_avatar(act->as_monster()->type))
+ {
+ return;
+ }
+
+ // Anti-corrosion items protect against 90% of corrosion.
+ if (act->res_corr() && !one_chance_in(10))
+ {
+ dprf("Amulet protects.");
+ return;
+ }
+
+ if (act->is_player())
+ {
+ you.increase_duration(DUR_CORROSION, 10 + roll_dice(2, 4), 50,
+ "The acid corrodes your equipment!");
+ xom_is_stimulated(50);
+ you.props["corrosion_amount"].get_int()++;
+ you.redraw_armour_class = true;
+ you.wield_change = true;
+ }
+ else if (act->type == MONS_PLAYER_SHADOW)
+ return; // it's just a temp copy of the item
+ else if (you.see_cell(act->pos()))
+ {
+ if (act->type == MONS_DANCING_WEAPON)
+ {
+ mprf("The acid corrodes %s!",
+ act->name(DESC_THE).c_str());
+ }
+ else
+ {
+ mprf("The acid corrodes %s equipment!",
+ apostrophise(act->name(DESC_THE)).c_str());
+ }
+ }
+
+ if (act->is_monster())
+ act->as_monster()->add_ench(mon_enchant(ENCH_CORROSION, 0));
+}
+
void slime_wall_damage(actor* act, int delay)
{
ASSERT(act);