summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/beam.cc
diff options
context:
space:
mode:
authordolorous <dolorous@c06c8d41-db1a-0410-9941-cceddc491573>2008-11-07 21:39:26 +0000
committerdolorous <dolorous@c06c8d41-db1a-0410-9941-cceddc491573>2008-11-07 21:39:26 +0000
commit356d2e3e4b9ce53e0b205ff6fd5b35a4163a0cc5 (patch)
tree80732c91254feeecfd856e40e92c739519ab061d /crawl-ref/source/beam.cc
parent100d0a3c9501882904c8d467bdd91bd43bec2d4f (diff)
downloadcrawl-ref-356d2e3e4b9ce53e0b205ff6fd5b35a4163a0cc5.tar.gz
crawl-ref-356d2e3e4b9ce53e0b205ff6fd5b35a4163a0cc5.zip
Clean up sticky flame handling.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@7409 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/beam.cc')
-rw-r--r--crawl-ref/source/beam.cc33
1 files changed, 17 insertions, 16 deletions
diff --git a/crawl-ref/source/beam.cc b/crawl-ref/source/beam.cc
index 34e0e4073d..e593c5a32c 100644
--- a/crawl-ref/source/beam.cc
+++ b/crawl-ref/source/beam.cc
@@ -2434,28 +2434,29 @@ bool poison_monster(monsters *monster, kill_category who, int levels,
return (new_pois.degree > old_pois.degree);
}
-// Actually napalms the player.
-void sticky_flame_player()
-{
- you.duration[DUR_LIQUID_FLAMES] += random2avg(7, 3) + 1;
-}
-
// Actually napalms a monster (with message).
-void sticky_flame_monster(int mn, kill_category who, int levels)
+bool napalm_monster(monsters *monster, kill_category who, int levels,
+ bool verbose)
{
- monsters *monster = &menv[mn];
-
if (!monster->alive())
- return;
+ return (false);
- if (mons_res_sticky_flame(monster))
- return;
+ if (mons_res_sticky_flame(monster) > 0 || levels <= 0)
+ return (false);
+
+ const mon_enchant old_flame = monster->get_ench(ENCH_STICKY_FLAME);
+ monster->add_ench(mon_enchant(ENCH_STICKY_FLAME, levels, who));
+ const mon_enchant new_flame = monster->get_ench(ENCH_STICKY_FLAME);
- if (monster->add_ench(mon_enchant(ENCH_STICKY_FLAME, levels, who)))
+ // Actually do the napalming. The order is important here.
+ if (new_flame.degree > old_flame.degree)
{
- simple_monster_message(monster, " is covered in liquid flames!");
+ if (verbose)
+ simple_monster_message(monster, " is covered in liquid flames!");
behaviour_event(monster, ME_WHACK, who == KC_YOU ? MHITYOU : MHITNOT);
}
+
+ return (new_flame.degree > old_flame.degree);
}
// Used by monsters in "planning" which spell to cast. Fires off a "tracer"
@@ -3904,7 +3905,7 @@ static int _affect_player( bolt &beam, item_def *item, bool affect_items )
{
if (!player_res_sticky_flame())
{
- sticky_flame_player();
+ napalm_player(random2avg(7, 3) + 1);
was_affected = true;
}
}
@@ -4443,7 +4444,7 @@ static int _affect_monster(bolt &beam, monsters *mon, item_def *item)
if (beam.name == "sticky flame")
{
int levels = std::min(4, 1 + random2(hurt_final) / 2);
- sticky_flame_monster(tid, _whose_kill(beam), levels);
+ napalm_monster(mon, _whose_kill(beam), levels);
}
// Handle missile effects.