diff options
author | haranp <haranp@c06c8d41-db1a-0410-9941-cceddc491573> | 2008-09-25 17:13:23 +0000 |
---|---|---|
committer | haranp <haranp@c06c8d41-db1a-0410-9941-cceddc491573> | 2008-09-25 17:13:23 +0000 |
commit | 1f9e38751c81744f2e8d4ffb1aea7f3870ba9d5b (patch) | |
tree | 8dfafad2a170ec6b870f90c9cf3aee89638a33cd /crawl-ref/source/spl-cast.cc | |
parent | 67f77bb507d0f27b169f53258bcc94a24d7f8894 (diff) | |
download | crawl-ref-1f9e38751c81744f2e8d4ffb1aea7f3870ba9d5b.tar.gz crawl-ref-1f9e38751c81744f2e8d4ffb1aea7f3870ba9d5b.zip |
Ranges redone. bolt no longer has a rangeMax, just a range.
Almost all ranges are now capped by LOS. There are still some things
missing, most noticeably randomizing ranges for the range-1-to-2
spells (e.g. Flame Tongue.)
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@6984 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/spl-cast.cc')
-rw-r--r-- | crawl-ref/source/spl-cast.cc | 43 |
1 files changed, 29 insertions, 14 deletions
diff --git a/crawl-ref/source/spl-cast.cc b/crawl-ref/source/spl-cast.cc index 8dde8f6add..c72b4cffe2 100644 --- a/crawl-ref/source/spl-cast.cc +++ b/crawl-ref/source/spl-cast.cc @@ -944,6 +944,27 @@ beam_type _spell_to_beam_type(spell_type spell) return BEAM_NONE; } +int _setup_evaporate_cast() +{ + int rc = prompt_invent_item("Throw which potion?", MT_INVLIST, OBJ_POTIONS); + + if (prompt_failed(rc)) + { + rc = -1; + } + else if (you.inv[rc].base_type != OBJ_POTIONS) + { + mpr("This spell works only on potions!"); + rc = -1; + } + else + { + mprf(MSGCH_PROMPT, "Where do you want to aim %s?", + you.inv[rc].name(DESC_NOCAP_YOUR).c_str()); + } + return rc; +} + // Returns SPRET_SUCCESS if spell is successfully cast for purposes of // exercising, SPRET_FAIL otherwise, or SPRET_ABORT if the player canceled // the casting. @@ -986,19 +1007,9 @@ spret_type your_spells(spell_type spell, int powc, bool allow_fail) const char *prompt = get_spell_target_prompt(spell); if (spell == SPELL_EVAPORATE) { - potion = prompt_invent_item("Throw which potion?", - MT_INVLIST, OBJ_POTIONS); - - if (prompt_failed(potion)) - return (SPRET_ABORT); - - if (you.inv[potion].base_type != OBJ_POTIONS) - { - mpr("This spell works only on potions!"); + potion = _setup_evaporate_cast(); + if (potion == -1) return (SPRET_ABORT); - } - mprf(MSGCH_PROMPT, "Where do you want to aim %s?", - you.inv[potion].name(DESC_NOCAP_YOUR).c_str()); } else if (dir == DIR_DIR) mpr(prompt ? prompt : "Which direction?", MSGCH_PROMPT); @@ -1008,13 +1019,17 @@ spret_type your_spells(spell_type spell, int powc, bool allow_fail) const bool dont_cancel_me = testbits(flags, SPFLAG_AREA); - if (!spell_direction(spd, beam, dir, targ, needs_path, true, - dont_cancel_me, prompt, + const int range = spell_range(spell, powc, false); + + if (!spell_direction(spd, beam, dir, targ, range, + needs_path, true, dont_cancel_me, prompt, testbits(flags, SPFLAG_NOT_SELF))) { return (SPRET_ABORT); } + beam.range = spell_range(spell, powc, true); + if (testbits(flags, SPFLAG_NOT_SELF) && spd.isMe) { if (spell == SPELL_TELEPORT_OTHER || spell == SPELL_HEAL_OTHER |