From 5c355726c38b52961de7ad53b837f461a801b6a5 Mon Sep 17 00:00:00 2001 From: dolorous Date: Sun, 25 May 2008 18:33:50 +0000 Subject: Consolidate the setting of the "standard" attack conducts. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@5238 c06c8d41-db1a-0410-9941-cceddc491573 --- crawl-ref/source/beam.cc | 13 ++----------- crawl-ref/source/fight.cc | 7 ++++++- crawl-ref/source/misc.cc | 33 ++++++++++++++------------------- crawl-ref/source/misc.h | 5 ++++- crawl-ref/source/spells2.cc | 4 +++- crawl-ref/source/spells3.cc | 8 ++++++-- 6 files changed, 35 insertions(+), 35 deletions(-) diff --git a/crawl-ref/source/beam.cc b/crawl-ref/source/beam.cc index e61a9ba80b..443e3ca5eb 100644 --- a/crawl-ref/source/beam.cc +++ b/crawl-ref/source/beam.cc @@ -4486,16 +4486,7 @@ static int _affect_monster(bolt &beam, monsters *mon, item_def *item) remove_sanctuary(true); } - if (mons_friendly(mon)) - conduct.set(DID_ATTACK_FRIEND, 5, !okay, mon); - else if (mons_neutral(mon)) - conduct.set(DID_ATTACK_NEUTRAL, 5, !okay, mon); - - if (is_unchivalric_attack(&you, mon, mon)) - conduct.set(DID_UNCHIVALRIC_ATTACK, 4, !okay, mon); - - if (mons_is_holy(mon)) - conduct.set(DID_ATTACK_HOLY, mon->hit_dice, !okay, mon); + set_attack_conduct(mon, conduct, !okay); } if (you.religion == GOD_BEOGH && mons_species(mon->type) == MONS_ORC @@ -5474,7 +5465,7 @@ static bool _nasty_beam(monsters *mon, bolt &beam) // pain/agony if (beam.flavour == BEAM_PAIN) - return (!mons_res_negative_energy( mon )); + return (!mons_res_negative_energy(mon)); // control demon if (beam.flavour == BEAM_ENSLAVE_DEMON) diff --git a/crawl-ref/source/fight.cc b/crawl-ref/source/fight.cc index f890bac0ef..dd6fc25d32 100644 --- a/crawl-ref/source/fight.cc +++ b/crawl-ref/source/fight.cc @@ -606,7 +606,12 @@ bool melee_attack::attack() conduct.enabled = false; if (attacker->atype() == ACT_PLAYER) - cancel_attack = stop_attack_prompt(def, false, false, &conduct); + { + if (!stop_attack_prompt(def, false, false)) + set_attack_conduct(def, conduct); + else + cancel_attack = true; + } // Trying to stay general beyond this point is a recipe for insanity. // Maybe when Stone Soup hits 1.0... :-) diff --git a/crawl-ref/source/misc.cc b/crawl-ref/source/misc.cc index 1a3e99d9ed..b3d6cc4bbf 100644 --- a/crawl-ref/source/misc.cc +++ b/crawl-ref/source/misc.cc @@ -3000,9 +3000,8 @@ std::string your_hand(bool plural) } bool stop_attack_prompt(const monsters *mon, bool beam_attack, - bool beam_target, god_conduct_trigger *conduct) + bool beam_target) { - bool retval = false; bool prompt = false; const bool inSanctuary = (is_sanctuary(you.x_pos, you.y_pos) @@ -3049,24 +3048,20 @@ bool stop_attack_prompt(const monsters *mon, bool beam_attack, prompt = true; } - if (you.confused() || (prompt && yesno(info, false, 'n'))) - { - if (conduct) - { - if (isFriendly) - conduct->set(DID_ATTACK_FRIEND, 5, true, mon); - else if (isNeutral) - conduct->set(DID_ATTACK_NEUTRAL, 5, true, mon); + return (!you.confused() && (!prompt || yesno(info, false, 'n'))); +} - if (isUnchivalric) - conduct->set(DID_UNCHIVALRIC_ATTACK, 4, true, mon); +void set_attack_conduct(const monsters *mon, god_conduct_trigger& conduct, + bool known) +{ + if (mons_friendly(mon)) + conduct.set(DID_ATTACK_FRIEND, 5, known, mon); + else if (mons_neutral(mon)) + conduct.set(DID_ATTACK_NEUTRAL, 5, known, mon); - if (isHoly) - conduct->set(DID_ATTACK_HOLY, mon->hit_dice, true, mon); - } - } - else - retval = true; + if (is_unchivalric_attack(&you, mon, mon)) + conduct.set(DID_UNCHIVALRIC_ATTACK, 4, known, mon); - return retval; + if (mons_is_holy(mon)) + conduct.set(DID_ATTACK_HOLY, mon->hit_dice, known, mon); } diff --git a/crawl-ref/source/misc.h b/crawl-ref/source/misc.h index 13d8fd6864..6de8ff290a 100644 --- a/crawl-ref/source/misc.h +++ b/crawl-ref/source/misc.h @@ -147,6 +147,9 @@ void reveal_secret_door(int x, int y); std::string your_hand(bool plural); bool stop_attack_prompt(const monsters *mon, bool beam_attack, - bool beam_target, god_conduct_trigger *conduct = NULL); + bool beam_target); + +void set_attack_conduct(const monsters *mon, god_conduct_trigger& conduct, + bool known = true); #endif diff --git a/crawl-ref/source/spells2.cc b/crawl-ref/source/spells2.cc index 2f322535d9..f2bbe505f2 100644 --- a/crawl-ref/source/spells2.cc +++ b/crawl-ref/source/spells2.cc @@ -1192,10 +1192,12 @@ char burn_freeze(int pow, beam_type flavour) god_conduct_trigger conduct; conduct.enabled = false; - bool success = !stop_attack_prompt(monster, false, false, &conduct); + bool success = !stop_attack_prompt(monster, false, false); if (success) { + set_attack_conduct(monster, conduct); + mprf("You %s %s.", (flavour == BEAM_FIRE) ? "burn" : (flavour == BEAM_COLD) ? "freeze" : diff --git a/crawl-ref/source/spells3.cc b/crawl-ref/source/spells3.cc index dd11b43503..110d24ee74 100644 --- a/crawl-ref/source/spells3.cc +++ b/crawl-ref/source/spells3.cc @@ -208,10 +208,12 @@ int cast_smiting(int power, dist &beam) god_conduct_trigger conduct; conduct.enabled = false; - success = !stop_attack_prompt(monster, false, false, &conduct); + success = !stop_attack_prompt(monster, false, false); if (success) { + set_attack_conduct(monster, conduct); + mprf("You smite %s!", monster->name(DESC_NOCAP_THE).c_str()); behaviour_event(monster, ME_ANNOY, MHITYOU); @@ -249,10 +251,12 @@ int airstrike(int power, dist &beam) god_conduct_trigger conduct; conduct.enabled = false; - success = !stop_attack_prompt(monster, false, false, &conduct); + success = !stop_attack_prompt(monster, false, false); if (success) { + set_attack_conduct(monster, conduct); + mprf("The air twists around and strikes %s!", monster->name(DESC_NOCAP_THE).c_str()); -- cgit v1.2.3-54-g00ecf