OSDN Git Service

[Refactor] #929 Separated death_amberites() from mon_take_hit()
authorHourier <grapefox.whitelucifer.0408@gmail.com>
Wed, 4 Aug 2021 14:46:00 +0000 (23:46 +0900)
committerHourier <grapefox.whitelucifer.0408@gmail.com>
Sun, 8 Aug 2021 12:16:45 +0000 (21:16 +0900)
src/monster/monster-damage.cpp
src/monster/monster-damage.h

index 37689f8..4ad91e4 100644 (file)
@@ -105,21 +105,7 @@ bool MonsterDamageProcessor::mon_take_hit(concptr note)
         this->increase_kill_numbers(m_ptr);
         GAME_TEXT m_name[MAX_NLEN];
         monster_desc(this->target_ptr, m_name, m_ptr, MD_TRUE_NAME);
-
-        /* Don't kill Amberites */
-        if ((r_ptr->flags3 & RF3_AMBERITE) && one_in_(2)) {
-            int curses = 1 + randint1(3);
-            bool stop_ty = false;
-            int count = 0;
-
-            msg_format(_("%^sは恐ろしい血の呪いをあなたにかけた!", "%^s puts a terrible blood curse on you!"), m_name);
-            curse_equipment(this->target_ptr, 100, 50);
-
-            do {
-                stop_ty = activate_ty_curse(this->target_ptr, stop_ty, &count);
-            } while (--curses);
-        }
-
+        this->death_amberites(r_ptr, m_name);
         if (r_ptr->flags2 & RF2_CAN_SPEAK) {
             char line_got[1024];
             if (!get_rnd_line(_("mondeath_j.txt", "mondeath.txt"), m_ptr->r_idx, line_got)) {
@@ -487,6 +473,22 @@ void MonsterDamageProcessor::increase_kill_numbers(monster_type *m_ptr)
     monster_race_track(this->target_ptr, m_ptr->ap_r_idx);
 }
 
+void MonsterDamageProcessor::death_amberites(monster_race *r_ptr, GAME_TEXT *m_name)
+{
+    if (none_bits(r_ptr->flags3, RF3_AMBERITE) || one_in_(2)) {
+        return;
+    }
+
+    auto curses = 1 + randint1(3);
+    auto stop_ty = false;
+    auto count = 0;
+    msg_format(_("%^sは恐ろしい血の呪いをあなたにかけた!", "%^s puts a terrible blood curse on you!"), m_name);
+    curse_equipment(this->target_ptr, 100, 50);
+    do {
+        stop_ty = activate_ty_curse(this->target_ptr, stop_ty, &count);
+    } while (--curses);
+}
+
 /*!
  * @brief モンスターに与えたダメージを元に経験値を加算する /
  * Calculate experience point to be get
index 6f0122f..ed7cdc1 100644 (file)
@@ -5,6 +5,7 @@
 #include <tuple>
 #include <vector>
 
+struct monster_race;
 struct monster_type;
 struct player_type;
 class MonsterDamageProcessor {
@@ -26,6 +27,7 @@ private:
     bool check_combined_unique(const monster_race_type r_idx, std::vector<monster_race_type> *combined_uniques);
     void death_combined_uniques(const monster_race_type r_idx, std::vector<std::tuple<monster_race_type, monster_race_type, monster_race_type>> *combined_uniques);
     void increase_kill_numbers(monster_type *m_ptr);
+    void death_amberites(monster_race *r_ptr, GAME_TEXT *m_name);
     void set_redraw();
     void summon_special_unique(monster_type *m_ptr);
 };