diff options
-rw-r--r-- | crawl-ref/source/acr.cc | 8 | ||||
-rw-r--r-- | crawl-ref/source/delay.cc | 2 | ||||
-rw-r--r-- | crawl-ref/source/fight.cc | 10 | ||||
-rw-r--r-- | crawl-ref/source/mon-util.cc | 10 | ||||
-rw-r--r-- | crawl-ref/source/mon-util.h | 2 | ||||
-rw-r--r-- | crawl-ref/source/spells1.cc | 2 |
6 files changed, 21 insertions, 13 deletions
diff --git a/crawl-ref/source/acr.cc b/crawl-ref/source/acr.cc index db64284252..9605fc733f 100644 --- a/crawl-ref/source/acr.cc +++ b/crawl-ref/source/acr.cc @@ -2199,7 +2199,7 @@ void process_command( command_type cmd ) flush_input_buffer( FLUSH_ON_FAILURE ); break; } - + if (Options.tutorial_left) Options.tut_spell_counter++; if (!cast_a_spell()) @@ -4079,10 +4079,10 @@ static void _move_player(int move_x, int move_y) const unsigned short targ_monst = mgrd[ targ_x ][ targ_y ]; const bool targ_pass = you.can_pass_through(targ_x, targ_y); - // you can swap places with a friendly monster if you're not - // confused, or if both of you are inside a sanctuary + // you can swap places with a friendly or good neutral monster if + // you're not confused, or if both of you are inside a sanctuary const bool can_swap_places = targ_monst != NON_MONSTER - && (mons_friendly(&menv[targ_monst]) + && (mons_wont_attack(&menv[targ_monst]) && !you.duration[DUR_CONF] || is_sanctuary(you.x_pos, you.y_pos) && is_sanctuary(targ_x, targ_y)); diff --git a/crawl-ref/source/delay.cc b/crawl-ref/source/delay.cc index 144093598e..c704083560 100644 --- a/crawl-ref/source/delay.cc +++ b/crawl-ref/source/delay.cc @@ -187,8 +187,6 @@ static int recite_to_monsters(int x, int y, int pow, int unused) mons->attitude = ATT_NEUTRAL; mons->flags |= MF_WAS_NEUTRAL; - mons->flags |= MF_GOD_GIFT; - // give half of the monster's xp unsigned int exp_gain = 0, avail_gain = 0; gain_exp( exper_value(mons) / 2 + 1, &exp_gain, &avail_gain ); diff --git a/crawl-ref/source/fight.cc b/crawl-ref/source/fight.cc index 0bba6838c7..998a3147e4 100644 --- a/crawl-ref/source/fight.cc +++ b/crawl-ref/source/fight.cc @@ -310,7 +310,7 @@ melee_attack::melee_attack(actor *attk, actor *defn, void melee_attack::check_hand_half_bonus_eligible() { - hand_half_bonus = + hand_half_bonus = unarmed_ok && !can_do_unarmed && !shield @@ -326,14 +326,14 @@ void melee_attack::init_attack() if (defender && defender->atype() == ACT_MONSTER) def = dynamic_cast<monsters*>(defender); - + weapon = attacker->weapon(attack_number); damage_brand = attacker->damage_brand(attack_number); if (weapon && weapon->base_type == OBJ_WEAPONS && is_random_artefact( *weapon )) { - randart_wpn_properties( *weapon, art_props ); + randart_wpn_properties( *weapon, art_props ); } wpn_skill = weapon? weapon_skill( *weapon ) : SK_UNARMED_COMBAT; @@ -3908,8 +3908,8 @@ bool monster_attack(int monster_attacking) { monsters *attacker = &menv[monster_attacking]; - // Friendly monsters won't attack unless confused. - if (mons_friendly(attacker) && !mons_is_confused(attacker)) + // Friendly and good neutral monsters won't attack unless confused. + if (mons_wont_attack(attacker) && !mons_is_confused(attacker)) return false; // In case the monster hasn't noticed you, bumping into it will diff --git a/crawl-ref/source/mon-util.cc b/crawl-ref/source/mon-util.cc index 402aeac188..ebe98245b6 100644 --- a/crawl-ref/source/mon-util.cc +++ b/crawl-ref/source/mon-util.cc @@ -1811,6 +1811,16 @@ bool mons_neutral(const monsters *m) return (m->attitude == ATT_NEUTRAL || m->has_ench(ENCH_NEUTRAL)); } +bool mons_good_neutral(const monsters *m) +{ + return (mons_neutral(m) && testbits(m->flags, MF_GOD_GIFT)); +} + +bool mons_wont_attack(const monsters *m) +{ + return (mons_friendly(m) || mons_good_neutral(m)); +} + mon_attitude_type mons_attitude(const monsters *m) { return (m->has_ench(ENCH_CHARM)? ATT_FRIENDLY : m->attitude); diff --git a/crawl-ref/source/mon-util.h b/crawl-ref/source/mon-util.h index ae69af7e15..f33713b878 100644 --- a/crawl-ref/source/mon-util.h +++ b/crawl-ref/source/mon-util.h @@ -621,6 +621,8 @@ bool mons_aligned(int m1, int m2); * *********************************************************************** */ bool mons_friendly(const monsters *m); bool mons_neutral(const monsters *m); +bool mons_good_neutral(const monsters *m); +bool mons_wont_attack(const monsters *m); mon_attitude_type mons_attitude(const monsters *m); bool mons_behaviour_perceptible(const monsters *mon); diff --git a/crawl-ref/source/spells1.cc b/crawl-ref/source/spells1.cc index 4a559dcf8f..f01a93f4d1 100644 --- a/crawl-ref/source/spells1.cc +++ b/crawl-ref/source/spells1.cc @@ -705,8 +705,6 @@ static int _healing_spell( int healed, int target_x = -1, int target_y = -1) monster->attitude = ATT_NEUTRAL; monster->flags |= MF_WAS_NEUTRAL; - monster->flags |= MF_GOD_GIFT; - // give half of the monster's xp unsigned int exp_gain = 0, avail_gain = 0; gain_exp( exper_value(monster) / 2 + 1, &exp_gain, &avail_gain ); |