summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/spells3.cc
diff options
context:
space:
mode:
authordolorous <dolorous@c06c8d41-db1a-0410-9941-cceddc491573>2008-05-19 17:15:42 +0000
committerdolorous <dolorous@c06c8d41-db1a-0410-9941-cceddc491573>2008-05-19 17:15:42 +0000
commita06c2f795ee9726b7b3b9890a6a9b46d932745fe (patch)
tree38b0388485590eeb8350511d0a2253c12c924d04 /crawl-ref/source/spells3.cc
parentd51dd4717c3e7842d0647c58de13863e0c9491d6 (diff)
downloadcrawl-ref-a06c2f795ee9726b7b3b9890a6a9b46d932745fe.tar.gz
crawl-ref-a06c2f795ee9726b7b3b9890a6a9b46d932745fe.zip
Handle burning/freezing, smiting, and airstriking the same way as beams:
the attacked god gift stays, while the others disappear. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@5131 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/spells3.cc')
-rw-r--r--crawl-ref/source/spells3.cc53
1 files changed, 29 insertions, 24 deletions
diff --git a/crawl-ref/source/spells3.cc b/crawl-ref/source/spells3.cc
index 3214b7164f..f7095ac5c7 100644
--- a/crawl-ref/source/spells3.cc
+++ b/crawl-ref/source/spells3.cc
@@ -199,7 +199,6 @@ bool detect_curse(bool suppress_msg)
int cast_smiting(int power, dist &beam)
{
bool success = false;
- monsters *monster = 0; // NULL {dlb}
if (mgrd[beam.tx][beam.ty] == NON_MONSTER
|| beam.isMe)
@@ -208,34 +207,36 @@ int cast_smiting(int power, dist &beam)
}
else
{
- monster = &menv[mgrd[beam.tx][beam.ty]];
+ monsters *monster = &menv[mgrd[beam.tx][beam.ty]];
mprf("You smite %s!", monster->name(DESC_NOCAP_THE).c_str());
- // Maxes out at around 40 damage at 27 Invocations, which is plenty
- // in my book (the old max damage was around 70, which seems excessive)
- hurt_monster(monster, 7 + (random2(power) * 33 / 191));
+ god_conduct_trigger conduct;
+ conduct.enabled = false;
if (mons_friendly(monster))
- did_god_conduct(DID_ATTACK_FRIEND, 5, true, monster);
+ conduct.set(DID_ATTACK_FRIEND, 5, true, monster);
else if (mons_neutral(monster))
- did_god_conduct(DID_ATTACK_NEUTRAL, 5, true, monster);
+ conduct.set(DID_ATTACK_NEUTRAL, 5, true, monster);
if (is_unchivalric_attack(&you, monster, monster))
- did_god_conduct(DID_UNCHIVALRIC_ATTACK, 5, true, monster);
+ conduct.set(DID_UNCHIVALRIC_ATTACK, 5, true, monster);
if (mons_is_holy(monster))
- did_god_conduct(DID_ATTACK_HOLY, monster->hit_dice, true, monster);
+ conduct.set(DID_ATTACK_HOLY, monster->hit_dice, true, monster);
behaviour_event(monster, ME_ANNOY, MHITYOU);
+ conduct.enabled = true;
+
+ // Maxes out at around 40 damage at 27 Invocations, which is plenty
+ // in my book (the old max damage was around 70, which seems excessive)
+ hurt_monster(monster, 7 + (random2(power) * 33 / 191));
+
if (monster->hit_points < 1)
monster_die(monster, KILL_YOU, 0);
else
- {
- const monsters *mons = static_cast<const monsters*>(monster);
- print_wounds(mons);
- }
+ print_wounds(monster);
success = true;
}
@@ -246,8 +247,6 @@ int cast_smiting(int power, dist &beam)
int airstrike(int power, dist &beam)
{
bool success = false;
- struct monsters *monster = 0; // NULL {dlb}
- int hurted = 0;
if (mgrd[beam.tx][beam.ty] == NON_MONSTER
|| beam.isMe)
@@ -256,13 +255,13 @@ int airstrike(int power, dist &beam)
}
else
{
- monster = &menv[mgrd[beam.tx][beam.ty]];
+ monsters *monster = &menv[mgrd[beam.tx][beam.ty]];
mprf("The air twists around and strikes %s!",
monster->name(DESC_NOCAP_THE).c_str());
- hurted = 8 + random2( random2(4) + (random2(power) / 6)
- + (random2(power) / 7) );
+ int hurted = 8 + random2( random2(4) + (random2(power) / 6)
+ + (random2(power) / 7) );
if ( mons_flies(monster) )
{
@@ -274,23 +273,29 @@ int airstrike(int power, dist &beam)
if (hurted < 0)
hurted = 0;
- else
+
+ if (hurted)
{
- hurt_monster(monster, hurted);
+ god_conduct_trigger conduct;
+ conduct.enabled = false;
if (mons_friendly(monster))
- did_god_conduct(DID_ATTACK_FRIEND, 5, true, monster);
+ conduct.set(DID_ATTACK_FRIEND, 5, true, monster);
else if (mons_neutral(monster))
- did_god_conduct(DID_ATTACK_NEUTRAL, 5, true, monster);
+ conduct.set(DID_ATTACK_NEUTRAL, 5, true, monster);
if (is_unchivalric_attack(&you, monster, monster))
- did_god_conduct(DID_UNCHIVALRIC_ATTACK, 5, true, monster);
+ conduct.set(DID_UNCHIVALRIC_ATTACK, 5, true, monster);
if (mons_is_holy(monster))
- did_god_conduct(DID_ATTACK_HOLY, monster->hit_dice, true, monster);
+ conduct.set(DID_ATTACK_HOLY, monster->hit_dice, true, monster);
behaviour_event(monster, ME_ANNOY, MHITYOU);
+ conduct.enabled = true;
+
+ hurt_monster(monster, hurted);
+
if (monster->hit_points < 1)
monster_die(monster, KILL_YOU, 0);
else