diff options
Diffstat (limited to 'crawl-ref/source/spl-util.cc')
-rw-r--r-- | crawl-ref/source/spl-util.cc | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/crawl-ref/source/spl-util.cc b/crawl-ref/source/spl-util.cc index 67ec2c373d..3cfed59490 100644 --- a/crawl-ref/source/spl-util.cc +++ b/crawl-ref/source/spl-util.cc @@ -672,6 +672,7 @@ void apply_area_cloud( cloud_func func, const coord_def& where, // Return false if the user canceled, true otherwise. bool spell_direction( dist &spelld, bolt &pbolt, targeting_type restrict, targ_mode_type mode, + int range, bool needs_path, bool may_target_monster, bool may_target_self, const char *prompt, bool cancel_at_self ) @@ -679,7 +680,7 @@ bool spell_direction( dist &spelld, bolt &pbolt, if (restrict != DIR_DIR) message_current_target(); - direction( spelld, restrict, mode, -1, false, needs_path, + direction( spelld, restrict, mode, range, false, needs_path, may_target_monster, may_target_self, prompt, NULL, cancel_at_self ); @@ -871,3 +872,21 @@ int spell_power_cap(spell_type spell) { return (_seekspell(spell)->power_cap); } + +int spell_range(spell_type spell, int pow, bool real_cast) +{ + const int minrange = _seekspell(spell)->min_range; + const int maxrange = _seekspell(spell)->max_range; + ASSERT(maxrange >= minrange); + + if (minrange == maxrange) + return minrange; + + const int powercap = spell_power_cap(spell); + + if (powercap <= pow) + return maxrange; + + // Round appropriately. + return ((pow*(maxrange - minrange) + powercap/2) / powercap + minrange); +} |