summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/spells1.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/spells1.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/spells1.cc')
-rw-r--r--crawl-ref/source/spells1.cc56
1 files changed, 29 insertions, 27 deletions
diff --git a/crawl-ref/source/spells1.cc b/crawl-ref/source/spells1.cc
index 309023e596..5ba787ae61 100644
--- a/crawl-ref/source/spells1.cc
+++ b/crawl-ref/source/spells1.cc
@@ -238,29 +238,31 @@ void random_blink(bool allow_partial_control, bool override_abyss)
return;
} // end random_blink()
-int fireball(int power, bolt &beam)
+bool fireball(int power, bolt &beam)
{
- zapping(ZAP_FIREBALL, power, beam);
- return (1);
+ if (!zapping(ZAP_FIREBALL, power, beam, true))
+ return (false);
+
+ return (true);
} // end fireball()
int cast_fire_storm(int powc, bolt &beam)
{
- beam.ex_size = 2 + (random2(powc) > 75);
- beam.flavour = BEAM_LAVA;
- beam.type = dchar_glyph(DCHAR_FIRED_ZAP);
- beam.colour = RED;
- beam.beam_source = MHITYOU;
- beam.thrower = KILL_YOU_MISSILE;
+ beam.name = "great blast of fire";
+ beam.ex_size = 2 + (random2(powc) > 75);
+ beam.flavour = BEAM_LAVA;
+ beam.type = dchar_glyph(DCHAR_FIRED_ZAP);
+ beam.colour = RED;
+ beam.beam_source = MHITYOU;
+ beam.thrower = KILL_YOU_MISSILE;
beam.aux_source.clear();
beam.obvious_effect = false;
- beam.is_beam = false;
- beam.is_tracer = false;
+ beam.is_beam = false;
+ beam.is_tracer = false;
beam.is_explosion = true;
- beam.ench_power = powc; // used for radius
- beam.name = "great blast of fire";
- beam.hit = 20 + powc / 10;
- beam.damage = calc_dice( 9, 20 + powc );
+ beam.ench_power = powc; // used for radius
+ beam.hit = 20 + powc / 10;
+ beam.damage = calc_dice( 9, 20 + powc );
explosion( beam, false, false, true, true, false );
mpr("A raging storm of fire appears!");
@@ -276,19 +278,19 @@ void cast_chain_lightning( int powc )
struct bolt beam;
// initialize beam structure
- beam.name = "lightning arc";
- beam.aux_source = "chain lightning";
- beam.beam_source = MHITYOU;
- beam.thrower = KILL_YOU_MISSILE;
- beam.range = 8;
- beam.rangeMax = 8;
- beam.hit = AUTOMATIC_HIT;
- beam.type = dchar_glyph(DCHAR_FIRED_ZAP);
- beam.flavour = BEAM_ELECTRICITY;
+ beam.name = "lightning arc";
+ beam.aux_source = "chain lightning";
+ beam.beam_source = MHITYOU;
+ beam.thrower = KILL_YOU_MISSILE;
+ beam.range = 8;
+ beam.rangeMax = 8;
+ beam.hit = AUTOMATIC_HIT;
+ beam.type = dchar_glyph(DCHAR_FIRED_ZAP);
+ beam.flavour = BEAM_ELECTRICITY;
beam.obvious_effect = true;
- beam.is_beam = false; // since we want to stop at our target
- beam.is_explosion = false;
- beam.is_tracer = false;
+ beam.is_beam = false; // since we want to stop at our target
+ beam.is_explosion = false;
+ beam.is_tracer = false;
int sx, sy;
int tx, ty;