diff options
author | Steve Melenchuk <smelenchuk@gmail.com> | 2014-05-10 20:20:54 -0600 |
---|---|---|
committer | Steve Melenchuk <smelenchuk@gmail.com> | 2014-05-10 21:38:22 -0600 |
commit | 2a5c544ae8650b4a2e5aed57a487cbdf1731d487 (patch) | |
tree | 4a27ac2195a982f4fa01d3dc950d2ef22b4668bd /crawl-ref/source/attack.cc | |
parent | 551055afaa86b1b141c89ecd9948a865fa779e6f (diff) | |
download | crawl-ref-2a5c544ae8650b4a2e5aed57a487cbdf1731d487.tar.gz crawl-ref-2a5c544ae8650b4a2e5aed57a487cbdf1731d487.zip |
New monster spell: Drain Magic.
It's an antimagic enchantment, borrowing the code from melee antimagic
(which now internally refers to the new beam type).
I have a vague notion that this might remove antimagic effects from the
caster at some point, but that's for later.
Diffstat (limited to 'crawl-ref/source/attack.cc')
-rw-r--r-- | crawl-ref/source/attack.cc | 27 |
1 files changed, 3 insertions, 24 deletions
diff --git a/crawl-ref/source/attack.cc b/crawl-ref/source/attack.cc index 0727a3e8a7..a9f71f9404 100644 --- a/crawl-ref/source/attack.cc +++ b/crawl-ref/source/attack.cc @@ -579,29 +579,8 @@ bool attack::distortion_affects_defender() void attack::antimagic_affects_defender(int pow) { - int amount = 0; - if (defender->is_player()) - { - amount = min(you.magic_points, random2avg(pow, 3)); - if (!amount) - return; - mprf(MSGCH_WARN, "You feel your power leaking away."); - drain_mp(amount); - obvious_effect = true; - } - else if (mons_antimagic_affected(defender->as_monster())) - { - int dur = div_rand_round(pow * 8, defender->as_monster()->hit_dice); - amount = random2(dur + 1); - dur = amount * BASELINE_DELAY; - defender->as_monster()->add_ench(mon_enchant(ENCH_ANTIMAGIC, 0, - attacker, // doesn't matter - dur)); - special_damage_message = - apostrophise(defender->name(DESC_THE)) - + " magic leaks into the air."; - obvious_effect = true; - } + obvious_effect = + enchant_actor_with_flavour(defender, NULL, BEAM_DRAIN_MAGIC, pow); } void attack::pain_affects_defender() @@ -1913,7 +1892,7 @@ bool attack::apply_damage_brand(const char *what) break; case SPWPN_ANTIMAGIC: - antimagic_affects_defender(damage_done); + antimagic_affects_defender(damage_done * 8); break; default: |