diff options
author | dolorous <dolorous@c06c8d41-db1a-0410-9941-cceddc491573> | 2008-05-19 17:15:42 +0000 |
---|---|---|
committer | dolorous <dolorous@c06c8d41-db1a-0410-9941-cceddc491573> | 2008-05-19 17:15:42 +0000 |
commit | a06c2f795ee9726b7b3b9890a6a9b46d932745fe (patch) | |
tree | 38b0388485590eeb8350511d0a2253c12c924d04 /crawl-ref/source/spells3.cc | |
parent | d51dd4717c3e7842d0647c58de13863e0c9491d6 (diff) | |
download | crawl-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.cc | 53 |
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 |