summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/spl-cast.cc
diff options
context:
space:
mode:
authorj-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573>2008-05-22 15:53:37 +0000
committerj-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573>2008-05-22 15:53:37 +0000
commit2a73bdc6a3be5efa46dfdf32bb86edfcf5d0bd4c (patch)
tree8f0fc9dad7bcda05c27e23aca77ec987ed21c8c5 /crawl-ref/source/spl-cast.cc
parent9a1e7565ec8802a38a9649744920923fc262dff7 (diff)
downloadcrawl-ref-2a73bdc6a3be5efa46dfdf32bb86edfcf5d0bd4c.tar.gz
crawl-ref-2a73bdc6a3be5efa46dfdf32bb86edfcf5d0bd4c.zip
Improve player beam tracer for firing through friendlies:
* name the monster you're firing through ("your goblin zombie") * use maximum possible range * make it work for spells and abilities, as well Still todo: * apply the same logic to firing missiles * don't prompt for monsters that wouldn't be harmed (e.g. living allies for Dispel Undead, etc.) git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@5177 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/spl-cast.cc')
-rw-r--r--crawl-ref/source/spl-cast.cc112
1 files changed, 58 insertions, 54 deletions
diff --git a/crawl-ref/source/spl-cast.cc b/crawl-ref/source/spl-cast.cc
index fffba572d9..9fb62bbdf5 100644
--- a/crawl-ref/source/spl-cast.cc
+++ b/crawl-ref/source/spl-cast.cc
@@ -470,9 +470,8 @@ int calc_spell_power(spell_type spell, bool apply_intel, bool fail_rate_check)
// When checking failure rates, wizardry is handled after the various
// stepping calulations.
- int power =
- (you.skills[SK_SPELLCASTING] / 2)
- + (fail_rate_check? 0 : player_mag_abil(false));
+ int power = (you.skills[SK_SPELLCASTING] / 2)
+ + (fail_rate_check? 0 : player_mag_abil(false));
int enhanced = 0;
unsigned int disciplines = get_spell_disciplines( spell );
@@ -979,7 +978,7 @@ spret_type your_spells( spell_type spell, int powc, bool allow_fail )
const bool needs_path = (!testbits(flags, SPFLAG_GRID)
&& !testbits(flags, SPFLAG_TARGET));
- if (!spell_direction( spd, beam, dir, targ, needs_path, prompt ))
+ if (!spell_direction(spd, beam, dir, targ, needs_path, prompt))
return (SPRET_ABORT);
if (testbits( flags, SPFLAG_NOT_SELF ) && spd.isMe)
@@ -1108,12 +1107,13 @@ spret_type your_spells( spell_type spell, int powc, bool allow_fail )
break;
case SPELL_MAGIC_DART:
- if (!zapping(ZAP_MAGIC_DARTS, powc, beam))
+ if (!zapping(ZAP_MAGIC_DARTS, powc, beam, true))
return (SPRET_ABORT);
break;
case SPELL_FIREBALL:
- fireball(powc, beam);
+ if (!fireball(powc, beam))
+ return (SPRET_ABORT);
break;
case SPELL_DELAYED_FIREBALL:
@@ -1155,7 +1155,7 @@ spret_type your_spells( spell_type spell, int powc, bool allow_fail )
break;
case SPELL_STRIKING:
- if (!zapping( ZAP_STRIKING, powc, beam ))
+ if (!zapping(ZAP_STRIKING, powc, beam, true))
return (SPRET_ABORT);
break;
@@ -1165,27 +1165,27 @@ spret_type your_spells( spell_type spell, int powc, bool allow_fail )
break;
case SPELL_DIG:
- if (!zapping(ZAP_DIGGING, powc, beam))
+ if (!zapping(ZAP_DIGGING, powc, beam, true))
return (SPRET_ABORT);
break;
case SPELL_BOLT_OF_FIRE:
- if (!zapping(ZAP_FIRE, powc, beam))
+ if (!zapping(ZAP_FIRE, powc, beam, true))
return (SPRET_ABORT);
break;
case SPELL_BOLT_OF_COLD:
- if (!zapping(ZAP_COLD, powc, beam))
+ if (!zapping(ZAP_COLD, powc, beam, true))
return (SPRET_ABORT);
break;
case SPELL_LIGHTNING_BOLT:
- if (!zapping(ZAP_LIGHTNING, powc, beam))
+ if (!zapping(ZAP_LIGHTNING, powc, beam, true))
return (SPRET_ABORT);
break;
case SPELL_BOLT_OF_MAGMA:
- if (!zapping(ZAP_MAGMA, powc, beam))
+ if (!zapping(ZAP_MAGMA, powc, beam, true))
return (SPRET_ABORT);
break;
@@ -1193,26 +1193,27 @@ spret_type your_spells( spell_type spell, int powc, bool allow_fail )
// Trying is already enough, even if it fails.
did_god_conduct(DID_DELIBERATE_MUTATING, 10);
- if (!zapping(ZAP_POLYMORPH_OTHER, powc, beam))
+ if (!zapping(ZAP_POLYMORPH_OTHER, powc, beam, true))
return (SPRET_ABORT);
break;
case SPELL_SLOW:
- if (!zapping(ZAP_SLOWING, powc, beam))
+ if (!zapping(ZAP_SLOWING, powc, beam, true))
return (SPRET_ABORT);
break;
case SPELL_HASTE:
- zapping(ZAP_HASTING, powc, beam);
+ if (!zapping(ZAP_HASTING, powc, beam, true))
+ return (SPRET_ABORT);
break;
case SPELL_PARALYSE:
- if (!zapping(ZAP_PARALYSIS, powc, beam))
+ if (!zapping(ZAP_PARALYSIS, powc, beam, true))
return (SPRET_ABORT);
break;
case SPELL_CONFUSE:
- if (!zapping(ZAP_CONFUSION, powc, beam))
+ if (!zapping(ZAP_CONFUSION, powc, beam, true))
return (SPRET_ABORT);
break;
@@ -1225,16 +1226,17 @@ spret_type your_spells( spell_type spell, int powc, bool allow_fail )
break;
case SPELL_INVISIBILITY:
- zapping(ZAP_INVISIBILITY, powc, beam);
+ if (!zapping(ZAP_INVISIBILITY, powc, beam, true))
+ return (SPRET_ABORT);
break;
case SPELL_THROW_FLAME:
- if (!zapping(ZAP_FLAME, powc, beam))
+ if (!zapping(ZAP_FLAME, powc, beam, true))
return (SPRET_ABORT);
break;
case SPELL_THROW_FROST:
- if (!zapping(ZAP_FROST, powc, beam))
+ if (!zapping(ZAP_FROST, powc, beam, true))
return (SPRET_ABORT);
break;
@@ -1268,7 +1270,7 @@ spret_type your_spells( spell_type spell, int powc, bool allow_fail )
break;
case SPELL_VENOM_BOLT:
- if (!zapping(ZAP_VENOM_BOLT, powc, beam))
+ if (!zapping(ZAP_VENOM_BOLT, powc, beam, true))
return (SPRET_ABORT);
break;
@@ -1278,7 +1280,7 @@ spret_type your_spells( spell_type spell, int powc, bool allow_fail )
case SPELL_TELEPORT_OTHER:
// teleport creature (I think)
- if (!zapping(ZAP_TELEPORTATION, powc, beam))
+ if (!zapping(ZAP_TELEPORTATION, powc, beam, true))
return (SPRET_ABORT);
break;
@@ -1349,17 +1351,17 @@ spret_type your_spells( spell_type spell, int powc, bool allow_fail )
break;
case SPELL_BOLT_OF_DRAINING:
- if (!zapping(ZAP_NEGATIVE_ENERGY, powc, beam))
+ if (!zapping(ZAP_NEGATIVE_ENERGY, powc, beam, true))
return (SPRET_ABORT);
break;
case SPELL_LEHUDIBS_CRYSTAL_SPEAR:
- if (!zapping(ZAP_CRYSTAL_SPEAR, powc, beam))
+ if (!zapping(ZAP_CRYSTAL_SPEAR, powc, beam, true))
return (SPRET_ABORT);
break;
case SPELL_BOLT_OF_INACCURACY:
- if (!zapping(ZAP_BEAM_OF_ENERGY, powc, beam))
+ if (!zapping(ZAP_BEAM_OF_ENERGY, powc, beam, true))
return (SPRET_ABORT);
break;
@@ -1368,7 +1370,7 @@ spret_type your_spells( spell_type spell, int powc, bool allow_fail )
break;
case SPELL_POISON_ARROW:
- if (!zapping( ZAP_POISON_ARROW, powc, beam ))
+ if (!zapping(ZAP_POISON_ARROW, powc, beam, true))
return (SPRET_ABORT);
break;
@@ -1386,7 +1388,7 @@ spret_type your_spells( spell_type spell, int powc, bool allow_fail )
break;
case SPELL_ISKENDERUNS_MYSTIC_BLAST:
- if (!zapping( ZAP_MYSTIC_BLAST, powc, beam ))
+ if (!zapping(ZAP_MYSTIC_BLAST, powc, beam, true))
return (SPRET_ABORT);
break;
@@ -1399,7 +1401,7 @@ spret_type your_spells( spell_type spell, int powc, bool allow_fail )
break;
case SPELL_ENSLAVEMENT:
- if (!zapping(ZAP_ENSLAVEMENT, powc, beam))
+ if (!zapping(ZAP_ENSLAVEMENT, powc, beam, true))
return (SPRET_ABORT);
break;
@@ -1425,7 +1427,7 @@ spret_type your_spells( spell_type spell, int powc, bool allow_fail )
break;
case SPELL_PAIN:
- if (!zapping(ZAP_PAIN, powc, beam))
+ if (!zapping(ZAP_PAIN, powc, beam, true))
return (SPRET_ABORT);
dec_hp(1, false);
break;
@@ -1481,7 +1483,7 @@ spret_type your_spells( spell_type spell, int powc, bool allow_fail )
break;
case SPELL_STICKY_FLAME:
- if (!zapping(ZAP_STICKY_FLAME, powc, beam))
+ if (!zapping(ZAP_STICKY_FLAME, powc, beam, true))
return (SPRET_ABORT);
break;
@@ -1511,7 +1513,7 @@ spret_type your_spells( spell_type spell, int powc, bool allow_fail )
break;
case SPELL_DISPEL_UNDEAD:
- if (!zapping(ZAP_DISPEL_UNDEAD, powc, beam))
+ if (!zapping(ZAP_DISPEL_UNDEAD, powc, beam, true))
return (SPRET_ABORT);
break;
@@ -1520,12 +1522,12 @@ spret_type your_spells( spell_type spell, int powc, bool allow_fail )
break;
case SPELL_THUNDERBOLT:
- if (!zapping(ZAP_LIGHTNING, powc, beam))
+ if (!zapping(ZAP_LIGHTNING, powc, beam, true))
return (SPRET_ABORT);
break;
case SPELL_FLAME_OF_CLEANSING:
- if (!zapping(ZAP_CLEANSING_FLAME, powc, beam))
+ if (!zapping(ZAP_CLEANSING_FLAME, powc, beam, true))
return (SPRET_ABORT);
break;
@@ -1544,7 +1546,8 @@ spret_type your_spells( spell_type spell, int powc, bool allow_fail )
break;
case SPELL_BONE_SHARDS:
- cast_bone_shards(powc, beam);
+ if (!cast_bone_shards(powc, beam))
+ return (SPRET_ABORT);
break;
case SPELL_BANISHMENT:
@@ -1553,17 +1556,17 @@ spret_type your_spells( spell_type spell, int powc, bool allow_fail )
mpr("You cannot banish yourself!");
break;
}
- if (!zapping(ZAP_BANISHMENT, powc, beam))
+ if (!zapping(ZAP_BANISHMENT, powc, beam, true))
return (SPRET_ABORT);
break;
case SPELL_CIGOTUVIS_DEGENERATION:
- if (!zapping(ZAP_DEGENERATION, powc, beam))
+ if (!zapping(ZAP_DEGENERATION, powc, beam, true))
return (SPRET_ABORT);
break;
case SPELL_STING:
- if (!zapping(ZAP_STING, powc, beam))
+ if (!zapping(ZAP_STING, powc, beam, true))
return (SPRET_ABORT);
break;
@@ -1577,9 +1580,9 @@ spret_type your_spells( spell_type spell, int powc, bool allow_fail )
break;
case SPELL_HELLFIRE:
- // should only be available from:
+ // Should only be available from:
// staff of Dispater & Sceptre of Asmodeus
- if (!zapping(ZAP_HELLFIRE, powc, beam))
+ if (!zapping(ZAP_HELLFIRE, powc, beam, true))
return (SPRET_ABORT);
break;
@@ -1652,12 +1655,12 @@ spret_type your_spells( spell_type spell, int powc, bool allow_fail )
break;
case SPELL_BOLT_OF_IRON:
- if (!zapping(ZAP_IRON_BOLT, powc, beam))
+ if (!zapping(ZAP_IRON_BOLT, powc, beam, true))
return (SPRET_ABORT);
break;
case SPELL_STONE_ARROW:
- if (!zapping(ZAP_STONE_ARROW, powc, beam))
+ if (!zapping(ZAP_STONE_ARROW, powc, beam, true))
return (SPRET_ABORT);
break;
@@ -1670,7 +1673,7 @@ spret_type your_spells( spell_type spell, int powc, bool allow_fail )
break;
case SPELL_SHOCK:
- if (!zapping(ZAP_ELECTRICITY, powc, beam))
+ if (!zapping(ZAP_ELECTRICITY, powc, beam, true))
return (SPRET_ABORT);
break;
@@ -1687,7 +1690,7 @@ spret_type your_spells( spell_type spell, int powc, bool allow_fail )
break;
case SPELL_ORB_OF_ELECTROCUTION:
- if (!zapping(ZAP_ORB_OF_ELECTRICITY, powc, beam))
+ if (!zapping(ZAP_ORB_OF_ELECTRICITY, powc, beam, true))
return (SPRET_ABORT);
break;
@@ -1738,7 +1741,7 @@ spret_type your_spells( spell_type spell, int powc, bool allow_fail )
break;
case SPELL_DEBUGGING_RAY:
- if (!zapping(ZAP_DEBUGGING_RAY, powc, beam))
+ if (!zapping(ZAP_DEBUGGING_RAY, powc, beam, true))
return (SPRET_ABORT);
break;
@@ -1753,7 +1756,7 @@ spret_type your_spells( spell_type spell, int powc, bool allow_fail )
break;
case SPELL_AGONY:
- if (!zapping(ZAP_AGONY, powc, beam))
+ if (!zapping(ZAP_AGONY, powc, beam, true))
return (SPRET_ABORT);
break;
@@ -1762,12 +1765,12 @@ spret_type your_spells( spell_type spell, int powc, bool allow_fail )
break;
case SPELL_DISRUPT:
- if (!zapping(ZAP_DISRUPTION, powc, beam))
+ if (!zapping(ZAP_DISRUPTION, powc, beam, true))
return (SPRET_ABORT);
break;
case SPELL_DISINTEGRATE:
- if (!zapping(ZAP_DISINTEGRATION, powc, beam))
+ if (!zapping(ZAP_DISINTEGRATION, powc, beam, true))
return (SPRET_ABORT);
break;
@@ -1804,12 +1807,12 @@ spret_type your_spells( spell_type spell, int powc, bool allow_fail )
break;
case SPELL_ORB_OF_FRAGMENTATION:
- if (!zapping(ZAP_ORB_OF_FRAGMENTATION, powc, beam))
+ if (!zapping(ZAP_ORB_OF_FRAGMENTATION, powc, beam, true))
return (SPRET_ABORT);
break;
case SPELL_ICE_BOLT:
- if (!zapping(ZAP_ICE_BOLT, powc, beam))
+ if (!zapping(ZAP_ICE_BOLT, powc, beam, true))
return (SPRET_ABORT);
break;
@@ -1823,7 +1826,7 @@ spret_type your_spells( spell_type spell, int powc, bool allow_fail )
break;
case SPELL_ICE_STORM:
- if (!zapping(ZAP_ICE_STORM, powc, beam))
+ if (!zapping(ZAP_ICE_STORM, powc, beam, true))
return (SPRET_ABORT);
break;
@@ -1842,7 +1845,7 @@ spret_type your_spells( spell_type spell, int powc, bool allow_fail )
//jmf: new spells 19mar2000
case SPELL_FLAME_TONGUE:
- if (!zapping(ZAP_FLAME_TONGUE, powc, beam))
+ if (!zapping(ZAP_FLAME_TONGUE, powc, beam, true))
return (SPRET_ABORT);
break;
@@ -1878,7 +1881,7 @@ spret_type your_spells( spell_type spell, int powc, bool allow_fail )
mprf(MSGCH_DIAGNOSTICS, "Sleep power stepdown: %d -> %d",
powc, sleep_power);
#endif
- if (!zapping(ZAP_SLEEP, sleep_power, beam))
+ if (!zapping(ZAP_SLEEP, sleep_power, beam, true))
return (SPRET_ABORT);
break;
}
@@ -1938,7 +1941,7 @@ spret_type your_spells( spell_type spell, int powc, bool allow_fail )
break;
case SPELL_BACKLIGHT:
- if (!zapping(ZAP_BACKLIGHT, powc + 10, beam))
+ if (!zapping(ZAP_BACKLIGHT, powc + 10, beam, true))
return (SPRET_ABORT);
break;
@@ -1964,7 +1967,8 @@ spret_type your_spells( spell_type spell, int powc, bool allow_fail )
break;
case SPELL_SANDBLAST:
- cast_sandblast(powc, beam);
+ if (!cast_sandblast(powc, beam))
+ return (SPRET_ABORT);
break;
case SPELL_ROTTING: