OSDN Git Service

[Refactor] #40416 Separated process_monster_blows() from make_attack_normal()
authorHourier <hourier@users.sourceforge.jp>
Sun, 31 May 2020 09:40:40 +0000 (18:40 +0900)
committerHourier <hourier@users.sourceforge.jp>
Sun, 31 May 2020 09:40:40 +0000 (18:40 +0900)
src/combat/monster-attack-player.c

index 7bb7f69..c2cbf5c 100644 (file)
@@ -365,32 +365,9 @@ static void check_fall_off_horse(player_type *target_ptr, monap_type *monap_ptr)
         msg_format(_("%^sから落ちてしまった!", "You have fallen from %s."), m_steed_name);
 }
 
-/*!
- * @brief モンスターからプレイヤーへの打撃処理 / Attack the player via physical attacks.
- * @param m_idx 打撃を行うモンスターのID
- * @return 実際に攻撃処理を行った場合TRUEを返す
- */
-bool make_attack_normal(player_type *target_ptr, MONSTER_IDX m_idx)
+static bool process_monster_blows(player_type *target_ptr, monap_type *monap_ptr)
 {
-    monap_type tmp_monap;
-    monap_type *monap_ptr = initialize_monap_type(target_ptr, &tmp_monap, m_idx);
-    check_no_blow(target_ptr, monap_ptr);
     monster_race *r_ptr = &r_info[monap_ptr->m_ptr->r_idx];
-    monap_ptr->rlev = ((r_ptr->level >= 1) ? r_ptr->level : 1);
-    monster_desc(target_ptr, monap_ptr->m_name, monap_ptr->m_ptr, 0);
-    monster_desc(target_ptr, monap_ptr->ddesc, monap_ptr->m_ptr, MD_WRONGDOER_NAME);
-    if (target_ptr->special_defense & KATA_IAI) {
-        msg_format(_("相手が襲いかかる前に素早く武器を振るった。", "You took sen, drew and cut in one motion before %s moved."), monap_ptr->m_name);
-        if (do_cmd_attack(target_ptr, monap_ptr->m_ptr->fy, monap_ptr->m_ptr->fx, HISSATSU_IAI))
-            return TRUE;
-    }
-
-    if ((target_ptr->special_defense & NINJA_KAWARIMI) && (randint0(55) < (target_ptr->lev * 3 / 5 + 20))) {
-        if (kawarimi(target_ptr, TRUE))
-            return TRUE;
-    }
-
-    monap_ptr->blinked = FALSE;
     for (monap_ptr->ap_cnt = 0; monap_ptr->ap_cnt < 4; monap_ptr->ap_cnt++) {
         monap_ptr->obvious = FALSE;
         HIT_POINT power = 0;
@@ -412,8 +389,8 @@ bool make_attack_normal(player_type *target_ptr, MONSTER_IDX m_idx)
         if ((monap_ptr->effect == RBE_NONE) || check_hit_from_monster_to_player(target_ptr, power, monap_ptr->rlev, MON_STUNNED(monap_ptr->m_ptr)))
             if (!process_monster_attack_hit(target_ptr, monap_ptr))
                 continue;
-        else
-            process_monster_attack_evasion(target_ptr, monap_ptr);
+            else
+                process_monster_attack_evasion(target_ptr, monap_ptr);
 
         increase_blow_type_seen(target_ptr, monap_ptr);
         check_fall_off_horse(target_ptr, monap_ptr);
@@ -423,6 +400,38 @@ bool make_attack_normal(player_type *target_ptr, MONSTER_IDX m_idx)
         }
     }
 
+    return FALSE;
+}
+
+/*!
+ * @brief モンスターからプレイヤーへの打撃処理 / Attack the player via physical attacks.
+ * @param m_idx 打撃を行うモンスターのID
+ * @return 実際に攻撃処理を行った場合TRUEを返す
+ */
+bool make_attack_normal(player_type *target_ptr, MONSTER_IDX m_idx)
+{
+    monap_type tmp_monap;
+    monap_type *monap_ptr = initialize_monap_type(target_ptr, &tmp_monap, m_idx);
+    check_no_blow(target_ptr, monap_ptr);
+    monster_race *r_ptr = &r_info[monap_ptr->m_ptr->r_idx];
+    monap_ptr->rlev = ((r_ptr->level >= 1) ? r_ptr->level : 1);
+    monster_desc(target_ptr, monap_ptr->m_name, monap_ptr->m_ptr, 0);
+    monster_desc(target_ptr, monap_ptr->ddesc, monap_ptr->m_ptr, MD_WRONGDOER_NAME);
+    if (target_ptr->special_defense & KATA_IAI) {
+        msg_format(_("相手が襲いかかる前に素早く武器を振るった。", "You took sen, drew and cut in one motion before %s moved."), monap_ptr->m_name);
+        if (do_cmd_attack(target_ptr, monap_ptr->m_ptr->fy, monap_ptr->m_ptr->fx, HISSATSU_IAI))
+            return TRUE;
+    }
+
+    if ((target_ptr->special_defense & NINJA_KAWARIMI) && (randint0(55) < (target_ptr->lev * 3 / 5 + 20))) {
+        if (kawarimi(target_ptr, TRUE))
+            return TRUE;
+    }
+
+    monap_ptr->blinked = FALSE;
+    if (process_monster_blows(target_ptr, monap_ptr))
+        return TRUE;
+
     revenge_store(target_ptr, monap_ptr->get_damage);
     if ((target_ptr->tim_eyeeye || hex_spelling(target_ptr, HEX_EYE_FOR_EYE)) && monap_ptr->get_damage > 0 && !target_ptr->is_dead) {
 #ifdef JP