summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/spl-cast.cc
diff options
context:
space:
mode:
Diffstat (limited to 'crawl-ref/source/spl-cast.cc')
-rw-r--r--crawl-ref/source/spl-cast.cc19
1 files changed, 18 insertions, 1 deletions
diff --git a/crawl-ref/source/spl-cast.cc b/crawl-ref/source/spl-cast.cc
index 0d6b7ed2b1..f549179ac8 100644
--- a/crawl-ref/source/spl-cast.cc
+++ b/crawl-ref/source/spl-cast.cc
@@ -279,7 +279,16 @@ int list_spells(bool toggle_with_I, bool viewing, int minRange)
{
const char letter = index_to_letter(i);
const spell_type spell = get_spell_by_letter(letter);
- if (!viewing)
+
+ // If an equipped artefact prevents teleportation, the following spells
+ // cannot be cast.
+ if ((spell == SPELL_BLINK || spell == SPELL_CONTROLLED_BLINK
+ || spell == SPELL_TELEPORT_SELF)
+ && scan_artefacts(ARTP_PREVENT_TELEPORTATION, false))
+ {
+ grey = true;
+ }
+ else if (!viewing)
{
if (spell_mana(spell) > you.magic_points
|| _spell_no_hostile_in_range(spell, minRange))
@@ -1128,6 +1137,14 @@ spret_type your_spells(spell_type spell, int powc, bool allow_fail)
if (!wiz_cast && _spell_is_uncastable(spell))
return (SPRET_ABORT);
+ if ((spell == SPELL_BLINK || spell == SPELL_CONTROLLED_BLINK
+ || spell == SPELL_TELEPORT_SELF)
+ && scan_artefacts(ARTP_PREVENT_TELEPORTATION, false)
+ && !yesno("You cannot teleport right now. Cast anyway?", true, 'n'))
+ {
+ return (SPRET_ABORT);
+ }
+
const unsigned int flags = get_spell_flags(spell);
ASSERT(wiz_cast || !(flags & SPFLAG_TESTING));