diff options
author | j-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573> | 2009-03-28 21:14:58 +0000 |
---|---|---|
committer | j-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573> | 2009-03-28 21:14:58 +0000 |
commit | 1164be44d09a7f8ece0fbfb49c37565ca812da00 (patch) | |
tree | 8ff9c7369277d0954d837d3ec02e8169b04dedb0 /crawl-ref/source/monstuff.cc | |
parent | 2c8f3a56d75a8f309862a9ab264eff69514ec80e (diff) | |
download | crawl-ref-1164be44d09a7f8ece0fbfb49c37565ca812da00.tar.gz crawl-ref-1164be44d09a7f8ece0fbfb49c37565ca812da00.zip |
Scrolls of fear no longer make allies hostile. Fleeing allies will still run
away from you, but they'll eventually return to your side.
Note that charmed allies *will* abandon you.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@9563 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/monstuff.cc')
-rw-r--r-- | crawl-ref/source/monstuff.cc | 43 |
1 files changed, 34 insertions, 9 deletions
diff --git a/crawl-ref/source/monstuff.cc b/crawl-ref/source/monstuff.cc index 061a2f33f7..c0048a05d6 100644 --- a/crawl-ref/source/monstuff.cc +++ b/crawl-ref/source/monstuff.cc @@ -2549,8 +2549,8 @@ void behaviour_event(monsters *mon, mon_event_type event, int src, if (is_sanctuary(mon->pos()) && mons_is_fleeing_sanctuary(mon)) { mon->behaviour = BEH_FLEE; - mon->foe = MHITYOU; - mon->target = env.sanctuary_pos; + mon->foe = MHITYOU; + mon->target = env.sanctuary_pos; return; } @@ -2677,11 +2677,29 @@ void behaviour_event(monsters *mon, mon_event_type event, int src, break; } - mon->foe = src; - mon->behaviour = BEH_FLEE; // Assume monsters know where to run from, even if player is // invisible. - setTarget = true; + mon->behaviour = BEH_FLEE; + mon->foe = src; + mon->target = src_pos; + if (src == MHITYOU) + { + // Friendly monsters don't become hostile if you read a + // scroll of fear, but enslaved ones will. + // Send friendlies off to a random target so they don't cling + // to you in fear. + if (mons_friendly(mon)) + { + breakCharm = true; + mon->foe = MHITNOT; + _set_random_target(mon); + } + else + setTarget = true; + } + else if (mons_friendly(mon)) + mon->foe = MHITYOU; + if (see_grid(mon->pos())) learned_something_new(TUT_FLEEING_MONSTER); break; @@ -2697,7 +2715,15 @@ void behaviour_event(monsters *mon, mon_event_type event, int src, // Just set behaviour... foe doesn't change. if (!mons_is_cornered(mon)) - simple_monster_message(mon, " turns to fight!"); + { + if (mons_friendly(mon)) + { + mon->foe = MHITYOU; + simple_monster_message(mon, " returns to your side!"); + } + else + simple_monster_message(mon, " turns to fight!"); + } mon->behaviour = BEH_CORNERED; break; @@ -2714,9 +2740,7 @@ void behaviour_event(monsters *mon, mon_event_type event, int src, mon->attitude = ATT_HOSTILE; } else if (src != MHITNOT) - { mon->target = menv[src].pos(); - } } // Now, break charms if appropriate. @@ -4252,7 +4276,8 @@ static void _handle_behaviour(monsters *mon) if (isFriendly) { // Special-cased below so that it will flee *towards* you. - mon->target = you.pos(); + if (mon->foe == MHITYOU) + mon->target = you.pos(); } else if (mons_wall_shielded(mon) && _find_wall_target(mon)) ; // Wall target found. |