summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--crawl-ref/source/beam.cc16
-rw-r--r--crawl-ref/source/fight.cc8
-rw-r--r--crawl-ref/source/religion.cc22
-rw-r--r--crawl-ref/source/religion.h4
-rw-r--r--crawl-ref/source/spells2.cc8
-rw-r--r--crawl-ref/source/spells3.cc16
6 files changed, 44 insertions, 30 deletions
diff --git a/crawl-ref/source/beam.cc b/crawl-ref/source/beam.cc
index cc29d7f736..703ab87661 100644
--- a/crawl-ref/source/beam.cc
+++ b/crawl-ref/source/beam.cc
@@ -4374,8 +4374,8 @@ static int _affect_monster(bolt &beam, monsters *mon, item_def *item)
if (submerged)
return (0);
- god_conduct_trigger conduct;
- conduct.enabled = false;
+ god_conduct_trigger conducts[4];
+ disable_attack_conducts(conducts);
// Nasty enchantments will annoy the monster, and are considered
// naughty (even if a monster might resist).
@@ -4389,7 +4389,7 @@ static int _affect_monster(bolt &beam, monsters *mon, item_def *item)
remove_sanctuary(true);
}
- set_attack_conducts(mon, conduct);
+ set_attack_conducts(conducts, mon);
if (you.religion == GOD_BEOGH
&& mons_species(mon->type) == MONS_ORC
@@ -4405,7 +4405,7 @@ static int _affect_monster(bolt &beam, monsters *mon, item_def *item)
else
behaviour_event(mon, ME_ALERT, _beam_source(beam));
- conduct.enabled = true;
+ enable_attack_conducts(conducts);
// !@#*( affect_monster_enchantment() has side-effects on
// the beam structure which screw up range_used_on_hit(),
@@ -4557,8 +4557,8 @@ static int _affect_monster(bolt &beam, monsters *mon, item_def *item)
// fire elementals on their side - the elementals won't give a sh*t,
// after all).
- god_conduct_trigger conduct;
- conduct.enabled = false;
+ god_conduct_trigger conducts[4];
+ disable_attack_conducts(conducts);
if (_nasty_beam(mon, beam))
{
@@ -4574,7 +4574,7 @@ static int _affect_monster(bolt &beam, monsters *mon, item_def *item)
remove_sanctuary(true);
}
- set_attack_conducts(mon, conduct, !okay);
+ set_attack_conducts(conducts, mon, !okay);
}
if (you.religion == GOD_BEOGH && mons_species(mon->type) == MONS_ORC
@@ -4630,7 +4630,7 @@ static int _affect_monster(bolt &beam, monsters *mon, item_def *item)
_update_hurt_or_helped(beam, mon);
- conduct.enabled = true;
+ enable_attack_conducts(conducts);
// The beam hit.
if (mons_near(mon))
diff --git a/crawl-ref/source/fight.cc b/crawl-ref/source/fight.cc
index a35f3a9c2e..8ca5e7f113 100644
--- a/crawl-ref/source/fight.cc
+++ b/crawl-ref/source/fight.cc
@@ -608,8 +608,8 @@ bool melee_attack::attack()
check_autoberserk();
check_special_wield_effects();
- god_conduct_trigger conduct;
- conduct.enabled = false;
+ god_conduct_trigger conducts[4];
+ disable_attack_conducts(conducts);
if (attacker->atype() == ACT_PLAYER)
{
@@ -619,7 +619,7 @@ bool melee_attack::attack()
return (false);
}
else
- set_attack_conducts(def, conduct);
+ set_attack_conducts(conducts, def);
}
// Trying to stay general beyond this point is a recipe for insanity.
@@ -628,7 +628,7 @@ bool melee_attack::attack()
(defender->atype() == ACT_PLAYER) ? mons_attack_you()
: mons_attack_mons());
- conduct.enabled = true;
+ enable_attack_conducts(conducts);
return retval;
}
diff --git a/crawl-ref/source/religion.cc b/crawl-ref/source/religion.cc
index 4f217b9ff5..c9bb6ed80d 100644
--- a/crawl-ref/source/religion.cc
+++ b/crawl-ref/source/religion.cc
@@ -2743,19 +2743,31 @@ bool did_god_conduct(conduct_type thing_done, int level, bool known,
return (ret);
}
-void set_attack_conducts(const monsters *mon, god_conduct_trigger& conduct,
+void set_attack_conducts(god_conduct_trigger conduct[4], const monsters *mon,
bool known)
{
if (mons_friendly(mon))
- conduct.set(DID_ATTACK_FRIEND, 5, known, mon);
+ conduct[0].set(DID_ATTACK_FRIEND, 5, known, mon);
else if (mons_neutral(mon))
- conduct.set(DID_ATTACK_NEUTRAL, 5, known, mon);
+ conduct[1].set(DID_ATTACK_NEUTRAL, 5, known, mon);
if (is_unchivalric_attack(&you, mon, mon))
- conduct.set(DID_UNCHIVALRIC_ATTACK, 4, known, mon);
+ conduct[2].set(DID_UNCHIVALRIC_ATTACK, 4, known, mon);
if (mons_is_holy(mon))
- conduct.set(DID_ATTACK_HOLY, mon->hit_dice, known, mon);
+ conduct[3].set(DID_ATTACK_HOLY, mon->hit_dice, known, mon);
+}
+
+void enable_attack_conducts(god_conduct_trigger conduct[4])
+{
+ for (int i = 0; i < 4; ++i)
+ conduct[i].enabled = true;
+}
+
+void disable_attack_conducts(god_conduct_trigger conduct[4])
+{
+ for (int i = 0; i < 4; ++i)
+ conduct[i].enabled = false;
}
static void _dock_piety(int piety_loss, int penance)
diff --git a/crawl-ref/source/religion.h b/crawl-ref/source/religion.h
index 60b3fbd094..6c2a0e9a0c 100644
--- a/crawl-ref/source/religion.h
+++ b/crawl-ref/source/religion.h
@@ -70,8 +70,10 @@ void dec_penance(god_type god, int val);
bool did_god_conduct(conduct_type thing_done, int pgain, bool known = true,
const monsters *victim = NULL);
-void set_attack_conducts(const monsters *mon, god_conduct_trigger& conduct,
+void set_attack_conducts(god_conduct_trigger conduct[4], const monsters *mon,
bool known = true);
+void enable_attack_conducts(god_conduct_trigger conduct[4]);
+void disable_attack_conducts(god_conduct_trigger conduct[4]);
void excommunication(god_type new_god = GOD_NO_GOD);
void gain_piety(int pgn);
diff --git a/crawl-ref/source/spells2.cc b/crawl-ref/source/spells2.cc
index 19a89f2919..c7e7d49a07 100644
--- a/crawl-ref/source/spells2.cc
+++ b/crawl-ref/source/spells2.cc
@@ -910,14 +910,14 @@ char burn_freeze(int pow, beam_type flavour)
monsters *monster = &menv[mgr];
- god_conduct_trigger conduct;
- conduct.enabled = false;
+ god_conduct_trigger conducts[4];
+ disable_attack_conducts(conducts);
bool success = !stop_attack_prompt(monster, false, false);
if (success)
{
- set_attack_conducts(monster, conduct);
+ set_attack_conducts(conducts, monster);
mprf("You %s %s.",
(flavour == BEAM_FIRE) ? "burn" :
@@ -930,7 +930,7 @@ char burn_freeze(int pow, beam_type flavour)
behaviour_event(monster, ME_ANNOY, MHITYOU);
}
- conduct.enabled = true;
+ enable_attack_conducts(conducts);
if (success)
{
diff --git a/crawl-ref/source/spells3.cc b/crawl-ref/source/spells3.cc
index a95ed565dc..af3b06794b 100644
--- a/crawl-ref/source/spells3.cc
+++ b/crawl-ref/source/spells3.cc
@@ -205,14 +205,14 @@ int cast_smiting(int power, dist &beam)
{
monsters *monster = &menv[mgrd[beam.tx][beam.ty]];
- god_conduct_trigger conduct;
- conduct.enabled = false;
+ god_conduct_trigger conducts[4];
+ disable_attack_conducts(conducts);
success = !stop_attack_prompt(monster, false, false);
if (success)
{
- set_attack_conducts(monster, conduct);
+ set_attack_conducts(conducts, monster);
mprf("You smite %s!", monster->name(DESC_NOCAP_THE).c_str());
@@ -221,7 +221,7 @@ int cast_smiting(int power, dist &beam)
mimic_alert(monster);
}
- conduct.enabled = true;
+ enable_attack_conducts(conducts);
if (success)
{
@@ -250,14 +250,14 @@ int airstrike(int power, dist &beam)
{
monsters *monster = &menv[mgrd[beam.tx][beam.ty]];
- god_conduct_trigger conduct;
- conduct.enabled = false;
+ god_conduct_trigger conducts[4];
+ disable_attack_conducts(conducts);
success = !stop_attack_prompt(monster, false, false);
if (success)
{
- set_attack_conducts(monster, conduct);
+ set_attack_conducts(conducts, monster);
mprf("The air twists around and strikes %s!",
monster->name(DESC_NOCAP_THE).c_str());
@@ -267,7 +267,7 @@ int airstrike(int power, dist &beam)
mimic_alert(monster);
}
- conduct.enabled = true;
+ enable_attack_conducts(conducts);
if (success)
{