OSDN Git Service

[Refactor] #40416 Separated process_drain_mana() and process_stun_attack() from make_...
authorHourier <hourier@users.sourceforge.jp>
Sun, 31 May 2020 06:00:14 +0000 (15:00 +0900)
committerHourier <hourier@users.sourceforge.jp>
Sun, 31 May 2020 06:00:14 +0000 (15:00 +0900)
src/combat/monster-attack-player.c
src/combat/monster-eating.c
src/combat/monster-eating.h

index 02dfab5..10f5765 100644 (file)
@@ -284,6 +284,16 @@ static void process_lose_all_attack(player_type *target_ptr, monap_type *monap_p
         monap_ptr->obvious = TRUE;
 }
 
+static void process_stun_attack(player_type *target_ptr, monap_type *monap_ptr)
+{
+    if (target_ptr->resist_sound || check_multishadow(target_ptr))
+        return;
+
+    monster_race *r_ptr = &r_info[monap_ptr->m_ptr->r_idx];
+    if (set_stun(target_ptr, target_ptr->stun + 10 + randint1(r_ptr->level / 4)))
+        monap_ptr->obvious = TRUE;
+}
+
 /*!
  * @brief モンスターからプレイヤーへの打撃処理 / Attack the player via physical attacks.
  * @param m_idx 打撃を行うモンスターのID
@@ -695,19 +705,7 @@ bool make_attack_normal(player_type *target_ptr, MONSTER_IDX m_idx)
             }
             case RBE_DR_MANA: {
                 monap_ptr->obvious = TRUE;
-                if (check_multishadow(target_ptr)) {
-                    msg_print(_("攻撃は幻影に命中し、あなたには届かなかった。", "The attack hits Shadow, but you are unharmed!"));
-                } else {
-                    monap_ptr->do_cut = 0;
-                    target_ptr->csp -= monap_ptr->damage;
-                    if (target_ptr->csp < 0) {
-                        target_ptr->csp = 0;
-                        target_ptr->csp_frac = 0;
-                    }
-
-                    target_ptr->redraw |= (PR_MANA);
-                }
-
+                process_drain_mana(target_ptr, monap_ptr);
                 update_smart_learn(target_ptr, m_idx, DRS_MANA);
                 break;
             }
@@ -731,14 +729,7 @@ bool make_attack_normal(player_type *target_ptr, MONSTER_IDX m_idx)
                 if (target_ptr->is_dead)
                     break;
 
-                if (target_ptr->resist_sound || check_multishadow(target_ptr)) {
-                    /* Do nothing */
-                } else {
-                    if (set_stun(target_ptr, target_ptr->stun + 10 + randint1(r_ptr->level / 4))) {
-                        monap_ptr->obvious = TRUE;
-                    }
-                }
-
+                process_stun_attack(target_ptr, monap_ptr);
                 break;
             }
             }
index b4fd87d..e5f161a 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * @brief プレーヤーのHP、アイテム、お金・明かりの残りターン、充填魔力を盗んだり減少させたりする処理
+ * @brief プレーヤーのHP/MP、アイテム、お金・明かりの残りターン、充填魔力を盗んだり減少させたりする処理
  * @date 2020/05/31
  * @author Hourier
  */
@@ -250,3 +250,20 @@ void process_drain_life(player_type *target_ptr, monap_type *monap_ptr, const bo
     if (monap_ptr->m_ptr->ml && did_heal)
         msg_format(_("%sは体力を回復したようだ。", "%^s appears healthier."), monap_ptr->m_name);
 }
+
+void process_drain_mana(player_type *target_ptr, monap_type *monap_ptr)
+{
+    if (check_multishadow(target_ptr)) {
+        msg_print(_("攻撃は幻影に命中し、あなたには届かなかった。", "The attack hits Shadow, but you are unharmed!"));
+        return;
+    }
+
+    monap_ptr->do_cut = 0;
+    target_ptr->csp -= monap_ptr->damage;
+    if (target_ptr->csp < 0) {
+        target_ptr->csp = 0;
+        target_ptr->csp_frac = 0;
+    }
+
+    target_ptr->redraw |= (PR_MANA);
+}
index 0c0ae34..e949bde 100644 (file)
@@ -12,3 +12,4 @@ void process_eat_lite(player_type *target_ptr, monap_type *monap_ptr);
 bool process_un_power(player_type *target_ptr, monap_type *monap_ptr);
 bool check_drain_hp(player_type *target_ptr, const s32b d);
 void process_drain_life(player_type *target_ptr, monap_type *monap_ptr, const bool resist_drain);
+void process_drain_mana(player_type *target_ptr, monap_type *monap_ptr);