summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/beam.cc
diff options
context:
space:
mode:
authordolorous <dolorous@c06c8d41-db1a-0410-9941-cceddc491573>2008-10-16 21:42:51 +0000
committerdolorous <dolorous@c06c8d41-db1a-0410-9941-cceddc491573>2008-10-16 21:42:51 +0000
commitfcd2f73d85997682a9c89c897348ae8e32432589 (patch)
tree96faec16d93756f84ac6b64aaa67e6f7befd5cec /crawl-ref/source/beam.cc
parent66e21b71a9d7d1e2569caa2c63d25e3b935fd2c0 (diff)
downloadcrawl-ref-fcd2f73d85997682a9c89c897348ae8e32432589.tar.gz
crawl-ref-fcd2f73d85997682a9c89c897348ae8e32432589.zip
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
Diffstat (limited to 'crawl-ref/source/beam.cc')
-rw-r--r--crawl-ref/source/beam.cc48
1 files changed, 46 insertions, 2 deletions
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
@@ -1049,6 +1049,21 @@ const zap_info zap_data[] = {
},
{
+ ZAP_ENSLAVE_SOUL,
+ "0",
+ 100,
+ NULL,
+ NULL,
+ BLACK,
+ true,
+ BEAM_ENSLAVE_SOUL,
+ DCHAR_SPACE,
+ false,
+ false,
+ false
+ },
+
+ {
ZAP_AGONY,
"0agony",
100,
@@ -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