From fcd2f73d85997682a9c89c897348ae8e32432589 Mon Sep 17 00:00:00 2001 From: dolorous Date: Thu, 16 Oct 2008 21:42:51 +0000 Subject: Replace Yred's "Control Undead" power with "Enslave Soul", as proposed on crawl-ref-discuss. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@7263 c06c8d41-db1a-0410-9941-cceddc491573 --- crawl-ref/source/beam.cc | 48 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 2 deletions(-) (limited to 'crawl-ref/source/beam.cc') diff --git a/crawl-ref/source/beam.cc b/crawl-ref/source/beam.cc index e1a24f427e..9a4b7d2add 100644 --- a/crawl-ref/source/beam.cc +++ b/crawl-ref/source/beam.cc @@ -1048,6 +1048,21 @@ const zap_info zap_data[] = { false }, + { + ZAP_ENSLAVE_SOUL, + "0", + 100, + NULL, + NULL, + BLACK, + true, + BEAM_ENSLAVE_SOUL, + DCHAR_SPACE, + false, + false, + false + }, + { ZAP_AGONY, "0agony", @@ -4506,6 +4521,7 @@ bool _beam_has_saving_throw(const bolt& beam) case BEAM_HEALING: case BEAM_INVISIBILITY: case BEAM_DISPEL_UNDEAD: + case BEAM_ENSLAVE_SOUL: // it has a different saving throw case BEAM_ENSLAVE_DEMON: // it has a different saving throw rc = false; break; @@ -4533,6 +4549,11 @@ bool _ench_flavour_affects_monster(beam_type flavour, const monsters* mon) rc = (mons_holiness(mon) == MH_UNDEAD && mon->attitude != ATT_FRIENDLY); break; + case BEAM_ENSLAVE_SOUL: + rc = (mons_holiness(mon) == MH_NATURAL + && mon->attitude != ATT_FRIENDLY); + break; + case BEAM_DISPEL_UNDEAD: rc = (mons_holiness(mon) == MH_UNDEAD); break; @@ -4645,6 +4666,26 @@ static mon_resist_type _affect_monster_enchantment(bolt &beam, monsters *mon) return (MON_AFFECTED); } + case BEAM_ENSLAVE_SOUL: +#if DEBUG_DIAGNOSTICS + mprf(MSGCH_DIAGNOSTICS, + "HD: %d; pow: %d", mon->hit_dice, beam.ench_power); +#endif + + if (!mons_can_be_zombified(mon) || mons_intel(mon) < I_NORMAL) + { + simple_monster_message(mon, " is unaffected."); + return (MON_OTHER); + } + + if (mon->hit_dice >= random2(beam.ench_power / 2)) + return (MON_RESIST); + + beam.obvious_effect = true; + mon->flags |= MF_ENSLAVED_SOUL; + simple_monster_message(mon, "'s soul is now ripe for the taking."); + return (MON_AFFECTED); + case BEAM_ENSLAVE_DEMON: #if DEBUG_DIAGNOSTICS mprf(MSGCH_DIAGNOSTICS, @@ -5220,9 +5261,12 @@ static bool _nasty_beam(monsters *mon, const bolt &beam) if (beam.flavour == BEAM_CHARM) return (mons_is_holy(mon)); - // degeneration / sleep - if (beam.flavour == BEAM_DEGENERATE || beam.flavour == BEAM_SLEEP) + // degeneration / sleep / enslave soul + if (beam.flavour == BEAM_DEGENERATE || beam.flavour == BEAM_SLEEP + || beam.flavour == BEAM_ENSLAVE_SOUL) + { return (mons_holiness(mon) == MH_NATURAL); + } // dispel undead / control undead if (beam.flavour == BEAM_DISPEL_UNDEAD -- cgit v1.2.3-54-g00ecf