From 2a73bdc6a3be5efa46dfdf32bb86edfcf5d0bd4c Mon Sep 17 00:00:00 2001 From: j-p-e-g Date: Thu, 22 May 2008 15:53:37 +0000 Subject: 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 --- crawl-ref/source/spells1.cc | 56 +++++++++++++++++++++++---------------------- 1 file changed, 29 insertions(+), 27 deletions(-) (limited to 'crawl-ref/source/spells1.cc') 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; -- cgit v1.2.3-54-g00ecf