From b284f0b29a44c7e15d3c38a6a626b1da8a7255f3 Mon Sep 17 00:00:00 2001 From: Hourier Date: Thu, 5 Aug 2021 17:57:30 +0900 Subject: [PATCH] [Refactor] #929 Separated change_virtue_good_animal() from mon_take_hit() --- src/monster/monster-damage.cpp | 32 ++++++++++++++++++++++---------- src/monster/monster-damage.h | 1 + 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/src/monster/monster-damage.cpp b/src/monster/monster-damage.cpp index 2dd7217e5..12cc30e7b 100644 --- a/src/monster/monster-damage.cpp +++ b/src/monster/monster-damage.cpp @@ -121,14 +121,7 @@ bool MonsterDamageProcessor::mon_take_hit(concptr note) } this->change_virtue_wild_thief(); - auto magic_ability_flags = r_ptr->ability_flags; - magic_ability_flags.reset(RF_ABILITY_NOMAGIC_MASK); - if (any_bits(r_ptr->flags3, RF3_ANIMAL) && none_bits(r_ptr->flags3, RF3_EVIL) && magic_ability_flags.none()) { - if (one_in_(4)) { - chg_virtue(this->target_ptr, V_NATURE, -1); - } - } - + this->change_virtue_good_animal(); if (any_bits(r_ptr->flags1, RF1_UNIQUE) && record_destroy_uniq) { char note_buf[160]; sprintf(note_buf, "%s%s", r_ptr->name.c_str(), m_ptr->mflag2.has(MFLAG2::CLONED) ? _("(クローン)", "(Clone)") : ""); @@ -536,19 +529,38 @@ void MonsterDamageProcessor::change_virtue_wild_thief() chg_virtue(this->target_ptr, V_JUSTICE, 3); return; } - + if (1 + ((r_ptr->level) / 10 + (2 * floor_ptr->dun_level)) >= randint1(100)) { chg_virtue(this->target_ptr, V_JUSTICE, 1); } return; } - + if (innocent) { chg_virtue(this->target_ptr, V_JUSTICE, -1); } } +/* + * @brief 邪悪でなく、魔法も持たない動物を攻撃した時に徳を下げる + */ +void MonsterDamageProcessor::change_virtue_good_animal() +{ + auto *floor_ptr = this->target_ptr->current_floor_ptr; + auto *m_ptr = &floor_ptr->m_list[this->m_idx]; + auto *r_ptr = &r_info[m_ptr->r_idx]; + auto magic_ability_flags = r_ptr->ability_flags; + magic_ability_flags.reset(RF_ABILITY_NOMAGIC_MASK); + if (none_bits(r_ptr->flags3, RF3_ANIMAL) || any_bits(r_ptr->flags3, RF3_EVIL) || magic_ability_flags.any()) { + return; + } + + if (one_in_(4)) { + chg_virtue(this->target_ptr, V_NATURE, -1); + } +} + /*! * @brief モンスターに与えたダメージを元に経験値を加算する / * Calculate experience point to be get diff --git a/src/monster/monster-damage.h b/src/monster/monster-damage.h index b12bfe897..56b125bcb 100644 --- a/src/monster/monster-damage.h +++ b/src/monster/monster-damage.h @@ -33,6 +33,7 @@ private: void change_virtue_unique(); void change_virtue_good_evil(); void change_virtue_revenge(); + void change_virtue_good_animal(); void change_virtue_wild_thief(); void set_redraw(); void summon_special_unique(); -- 2.11.0