summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/spl-tornado.cc
diff options
context:
space:
mode:
authorRaphael Langella <raphael.langella@gmail.com>2011-07-21 12:44:28 +0000
committerRaphael Langella <raphael.langella@gmail.com>2011-07-21 22:25:43 +0200
commit17dfbce6f42ff75dfefd63ace016e51d9f493aa5 (patch)
tree3a2819a7823c305f8410711a984a46410cf4c8a7 /crawl-ref/source/spl-tornado.cc
parent6056fee300d2862993780b1bbbc1e9476ac70070 (diff)
downloadcrawl-ref-17dfbce6f42ff75dfefd63ace016e51d9f493aa5.tar.gz
crawl-ref-17dfbce6f42ff75dfefd63ace016e51d9f493aa5.zip
Don't miscast when the spell can still be aborted (#4281).
This is a significant refactoring. All the spells now return a spret_type and take a boolean which tells if the spell has actually failed. Also some code clean up in _do_cast(). All spells have their own function now. Also fix the following bugs: * Properly abort fire storm if forced casting on a wall with '!'. Also put a message for forced out of range casting (like cloud spells). * Casting summon elemental on an invisible monster aborted with no cost. * if a summoning spell aborts because create_monster fails, you don't lose a turn. You still get a chance of miscast in this rare case. * s2s, tukima and branding spells abort properly instead of consuming turn and MP when player is not wielding appropriate object. * s2s abort message when wielding a non-snakable.
Diffstat (limited to 'crawl-ref/source/spl-tornado.cc')
-rw-r--r--crawl-ref/source/spl-tornado.cc8
1 files changed, 5 insertions, 3 deletions
diff --git a/crawl-ref/source/spl-tornado.cc b/crawl-ref/source/spl-tornado.cc
index f53d3142cb..f51b3a5e0e 100644
--- a/crawl-ref/source/spl-tornado.cc
+++ b/crawl-ref/source/spl-tornado.cc
@@ -107,7 +107,7 @@ static void _set_tornado_durations(int powc)
you.attribute[ATTR_LEV_UNCANCELLABLE] = 1;
}
-bool cast_tornado(int powc)
+spret_type cast_tornado(int powc, bool fail)
{
bool friendlies = false;
for (radius_iterator ri(you.pos(), TORNADO_RADIUS, C_ROUND); ri; ++ri)
@@ -127,9 +127,11 @@ bool cast_tornado(int powc)
&& !yesno("There are friendlies around, are you sure you want to hurt them?",
true, 'n'))
{
- return false;
+ return SPRET_ABORT;
}
+ fail_check();
+
mprf("A great vortex of raging winds %s.",
you.airborne() ? "appears around you"
: "appears and lifts you up");
@@ -141,7 +143,7 @@ bool cast_tornado(int powc)
_set_tornado_durations(powc);
burden_change();
- return true;
+ return SPRET_SUCCESS;
}
static bool _mons_is_unmovable(const monster *mons)