summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/beam.cc
diff options
context:
space:
mode:
authorharanp <haranp@c06c8d41-db1a-0410-9941-cceddc491573>2009-02-06 14:32:02 +0000
committerharanp <haranp@c06c8d41-db1a-0410-9941-cceddc491573>2009-02-06 14:32:02 +0000
commit8dbcc4dbe18b959b2eab5a2c20aac3f97c6179f9 (patch)
tree43dcc1b16a420b31b645bbafc938c0c0a3d1b03d /crawl-ref/source/beam.cc
parent31fb4f573fea4f4ebcceb1f4fcfc478daa0897dc (diff)
downloadcrawl-ref-8dbcc4dbe18b959b2eab5a2c20aac3f97c6179f9.tar.gz
crawl-ref-8dbcc4dbe18b959b2eab5a2c20aac3f97c6179f9.zip
Restore a monster's attitude from the beginning of the attack if it
changes during the attack and the monster is about to die, so that you don't get Okawaru piety for killing an ally just before you receive the penance. Fixes [2436051]. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@8925 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/beam.cc')
-rw-r--r--crawl-ref/source/beam.cc50
1 files changed, 19 insertions, 31 deletions
diff --git a/crawl-ref/source/beam.cc b/crawl-ref/source/beam.cc
index 71973ed73d..e0dcfc4656 100644
--- a/crawl-ref/source/beam.cc
+++ b/crawl-ref/source/beam.cc
@@ -2413,9 +2413,7 @@ static bool _monster_resists_mass_enchantment(monsters *monster,
bool mass_enchantment( enchant_type wh_enchant, int pow, int origin,
int *m_succumbed, int *m_attempted )
{
- int i; // loop variable {dlb}
bool msg_generated = false;
- monsters *monster;
if (m_succumbed)
*m_succumbed = 0;
@@ -2424,16 +2422,18 @@ bool mass_enchantment( enchant_type wh_enchant, int pow, int origin,
viewwindow(false, false);
- if (pow > 200)
- pow = 200;
+ pow = std::min(pow, 200);
const kill_category kc = (origin == MHITYOU ? KC_YOU : KC_OTHER);
- for (i = 0; i < MAX_MONSTERS; i++)
+ for (int i = 0; i < MAX_MONSTERS; i++)
{
- monster = &menv[i];
+ monsters* const monster = &menv[i];
- if (monster->type == -1 || !mons_near(monster))
+ if (!monster->alive())
+ continue;
+
+ if (!mons_near(monster))
continue;
if (monster->has_ench(wh_enchant))
@@ -2450,35 +2450,23 @@ bool mass_enchantment( enchant_type wh_enchant, int pow, int origin,
if (m_succumbed)
++*m_succumbed;
- if (player_monster_visible( monster ))
- {
- // turn message on
- msg_generated = true;
- switch (wh_enchant)
- {
- case ENCH_FEAR:
- simple_monster_message(monster,
- " looks frightened!");
- break;
- case ENCH_CONFUSION:
- simple_monster_message(monster,
- " looks rather confused.");
- break;
- case ENCH_CHARM:
- simple_monster_message(monster,
- " submits to your will.");
- break;
- default:
- // oops, I guess not!
- msg_generated = false;
- }
+ // Do messaging.
+ const char* msg;
+ switch (wh_enchant)
+ {
+ case ENCH_FEAR: msg = " looks frightened!"; break;
+ case ENCH_CONFUSION: msg = " looks rather confused."; break;
+ case ENCH_CHARM: msg = " submits to your will."; break;
+ default: msg = NULL; break;
}
+ if (msg)
+ msg_generated = simple_monster_message(monster, msg);
// Extra check for fear (monster needs to reevaluate behaviour).
if (wh_enchant == ENCH_FEAR)
- behaviour_event( monster, ME_SCARE, origin );
+ behaviour_event(monster, ME_SCARE, origin);
}
- } // end "for i"
+ }
if (!msg_generated)
canned_msg(MSG_NOTHING_HAPPENS);