diff options
Diffstat (limited to 'crawl-ref')
-rw-r--r-- | crawl-ref/source/fight.cc | 5 | ||||
-rw-r--r-- | crawl-ref/source/spells2.cc | 16 | ||||
-rw-r--r-- | crawl-ref/source/spells3.cc | 53 |
3 files changed, 42 insertions, 32 deletions
diff --git a/crawl-ref/source/fight.cc b/crawl-ref/source/fight.cc index 793b803e52..90670630cb 100644 --- a/crawl-ref/source/fight.cc +++ b/crawl-ref/source/fight.cc @@ -2882,9 +2882,10 @@ void melee_attack::player_stab_check() { cancel_attack = true; } - else - did_god_conduct(DID_UNCHIVALRIC_ATTACK, 5, true, def); } + + if (!cancel_attack) + did_god_conduct(DID_UNCHIVALRIC_ATTACK, 5, true, def); } } diff --git a/crawl-ref/source/spells2.cc b/crawl-ref/source/spells2.cc index 6e90afa632..a86da4b960 100644 --- a/crawl-ref/source/spells2.cc +++ b/crawl-ref/source/spells2.cc @@ -1150,7 +1150,6 @@ int vampiric_drain(int pow, const dist &vmove) char burn_freeze(int pow, beam_type flavour) { int mgr = NON_MONSTER; - struct monsters *monster = 0; // NULL {dlb} struct dist bmove; if (pow > 25) @@ -1189,7 +1188,7 @@ char burn_freeze(int pow, beam_type flavour) } } - monster = &menv[mgr]; + monsters *monster = &menv[mgr]; mprf("You %s %s.", (flavour == BEAM_FIRE) ? "burn" : @@ -1210,19 +1209,24 @@ char burn_freeze(int pow, beam_type flavour) if (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); + conduct.set(DID_ATTACK_HOLY, monster->hit_dice); behaviour_event(monster, ME_ANNOY, MHITYOU); + conduct.enabled = true; + hurt_monster(monster, hurted); if (monster->hit_points < 1) 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 |