OSDN Git Service

[Refactor] mon_type、monap_type の ap_cnt メンバを除去
authortaotao54321 <taotao54321@gmail.com>
Fri, 12 Feb 2021 15:34:22 +0000 (00:34 +0900)
committertaotao54321 <taotao54321@gmail.com>
Fri, 12 Feb 2021 16:37:48 +0000 (01:37 +0900)
Fixes #63.

src/melee/melee-util.h
src/melee/monster-attack-monster.c
src/monster-attack/monster-attack-player.c
src/monster-attack/monster-attack-util.h
src/system/monster-race-definition.h

index a344b4a..5634129 100644 (file)
@@ -31,7 +31,6 @@ typedef struct mam_type {
     DEPTH rlev;
     bool blinked;
     bool do_silly_attack;
-    ARMOUR_CLASS ap_cnt;
     HIT_POINT power;
     bool obvious;
     int d_dice;
index cf2c24b..3159097 100644 (file)
@@ -35,9 +35,6 @@
 #include "system/floor-type-definition.h"
 #include "view/display-messages.h"
 
-/* todo モンスター共通なので、monster-attack-player.cでも使うはず */
-const int MAX_BLOW = 4;
-
 static void heal_monster_by_melee(player_type *subject_ptr, mam_type *mam_ptr)
 {
     if (!monster_living(mam_ptr->m_idx) || (mam_ptr->damage <= 2))
@@ -269,11 +266,11 @@ static void explode_monster_by_melee(player_type *subject_ptr, mam_type *mam_ptr
 void repeat_melee(player_type *subject_ptr, mam_type *mam_ptr)
 {
     monster_race *r_ptr = &r_info[mam_ptr->m_ptr->r_idx];
-    for (mam_ptr->ap_cnt = 0; mam_ptr->ap_cnt < MAX_BLOW; mam_ptr->ap_cnt++) {
-        mam_ptr->effect = r_ptr->blow[mam_ptr->ap_cnt].effect;
-        mam_ptr->method = r_ptr->blow[mam_ptr->ap_cnt].method;
-        mam_ptr->d_dice = r_ptr->blow[mam_ptr->ap_cnt].d_dice;
-        mam_ptr->d_side = r_ptr->blow[mam_ptr->ap_cnt].d_side;
+    for (int ap_cnt = 0; ap_cnt < MAX_NUM_BLOWS; ap_cnt++) {
+        mam_ptr->effect = r_ptr->blow[ap_cnt].effect;
+        mam_ptr->method = r_ptr->blow[ap_cnt].method;
+        mam_ptr->d_dice = r_ptr->blow[ap_cnt].d_dice;
+        mam_ptr->d_side = r_ptr->blow[ap_cnt].d_side;
 
         if (!monster_is_valid(mam_ptr->m_ptr) || (mam_ptr->t_ptr->fx != mam_ptr->x_saver) || (mam_ptr->t_ptr->fy != mam_ptr->y_saver) || !mam_ptr->method)
             break;
@@ -286,11 +283,11 @@ void repeat_melee(player_type *subject_ptr, mam_type *mam_ptr)
         if (!is_original_ap_and_seen(subject_ptr, mam_ptr->m_ptr) || mam_ptr->do_silly_attack)
             continue;
 
-        if (!mam_ptr->obvious && !mam_ptr->damage && (r_ptr->r_blows[mam_ptr->ap_cnt] <= 10))
+        if (!mam_ptr->obvious && !mam_ptr->damage && (r_ptr->r_blows[ap_cnt] <= 10))
             continue;
 
-        if (r_ptr->r_blows[mam_ptr->ap_cnt] < MAX_UCHAR)
-            r_ptr->r_blows[mam_ptr->ap_cnt]++;
+        if (r_ptr->r_blows[ap_cnt] < MAX_UCHAR)
+            r_ptr->r_blows[ap_cnt]++;
     }
 }
 
index 55f7d1b..e0ac8c6 100644 (file)
@@ -73,7 +73,7 @@ static bool check_no_blow(player_type *target_ptr, monap_type *monap_ptr)
  * @param monap_ptr モンスターからプレーヤーへの直接攻撃構造体への参照ポインタ
  * @return 攻撃続行ならばTRUE、打ち切りになったらFALSE
  */
-static bool check_monster_attack_terminated(player_type *target_ptr, monap_type *monap_ptr)
+static bool check_monster_continuous_attack(player_type *target_ptr, monap_type *monap_ptr)
 {
     if (!monster_is_valid(monap_ptr->m_ptr))
         return FALSE;
@@ -359,7 +359,7 @@ static void process_monster_attack_evasion(player_type *target_ptr, monap_type *
 /*!
  * @brief モンスターの打撃に関する知識を増やすことを試みる
  */
-static void increase_blow_type_seen(player_type *target_ptr, monap_type *monap_ptr)
+static void increase_blow_type_seen(player_type *target_ptr, monap_type *monap_ptr, const int ap_cnt)
 {
     // どの敵が何をしてきたか正しく認識できていなければならない。
     if (!is_original_ap_and_seen(target_ptr, monap_ptr->m_ptr) || monap_ptr->do_silly_attack)
@@ -369,11 +369,11 @@ static void increase_blow_type_seen(player_type *target_ptr, monap_type *monap_p
 
     // 非自明な類の打撃については、そのダメージが 0 ならば基本的に知識が増えない。
     // ただし、既に一定以上の知識があれば常に知識が増える(何をされたのか察知できる)。
-    if (!monap_ptr->obvious && (monap_ptr->damage == 0) && (r_ptr->r_blows[monap_ptr->ap_cnt] <= 10))
+    if (!monap_ptr->obvious && (monap_ptr->damage == 0) && (r_ptr->r_blows[ap_cnt] <= 10))
         return;
 
-    if (r_ptr->r_blows[monap_ptr->ap_cnt] < MAX_UCHAR)
-        r_ptr->r_blows[monap_ptr->ap_cnt]++;
+    if (r_ptr->r_blows[ap_cnt] < MAX_UCHAR)
+        r_ptr->r_blows[ap_cnt]++;
 }
 
 /*!
@@ -384,17 +384,17 @@ static bool process_monster_blows(player_type *target_ptr, monap_type *monap_ptr
 {
     monster_race *r_ptr = &r_info[monap_ptr->m_ptr->r_idx];
 
-    for (monap_ptr->ap_cnt = 0; monap_ptr->ap_cnt < 4; monap_ptr->ap_cnt++) {
+    for (int ap_cnt = 0; ap_cnt < MAX_NUM_BLOWS; ap_cnt++) {
         monap_ptr->obvious = FALSE;
         HIT_POINT power = 0;
         monap_ptr->damage = 0;
         monap_ptr->act = NULL;
-        monap_ptr->effect = r_ptr->blow[monap_ptr->ap_cnt].effect;
-        monap_ptr->method = r_ptr->blow[monap_ptr->ap_cnt].method;
-        monap_ptr->d_dice = r_ptr->blow[monap_ptr->ap_cnt].d_dice;
-        monap_ptr->d_side = r_ptr->blow[monap_ptr->ap_cnt].d_side;
+        monap_ptr->effect = r_ptr->blow[ap_cnt].effect;
+        monap_ptr->method = r_ptr->blow[ap_cnt].method;
+        monap_ptr->d_dice = r_ptr->blow[ap_cnt].d_dice;
+        monap_ptr->d_side = r_ptr->blow[ap_cnt].d_side;
 
-        if (!check_monster_attack_terminated(target_ptr, monap_ptr))
+        if (!check_monster_continuous_attack(target_ptr, monap_ptr))
             break;
 
         // effect が RBE_NONE (無効値)になることはあり得ないはずだが、万一そう
@@ -414,7 +414,7 @@ static bool process_monster_blows(player_type *target_ptr, monap_type *monap_ptr
             // 命中した。命中処理と思い出処理を行う。
             // 打撃そのものは対邪悪結界で撃退した可能性がある。
             const bool protect = !process_monster_attack_hit(target_ptr, monap_ptr);
-            increase_blow_type_seen(target_ptr, monap_ptr);
+            increase_blow_type_seen(target_ptr, monap_ptr, ap_cnt);
 
             // 撃退成功時はそのまま次の打撃へ移行。
             if (protect)
@@ -430,7 +430,7 @@ static bool process_monster_blows(player_type *target_ptr, monap_type *monap_ptr
         } else {
             // 命中しなかった。回避時の処理、思い出処理を行う。
             process_monster_attack_evasion(target_ptr, monap_ptr);
-            increase_blow_type_seen(target_ptr, monap_ptr);
+            increase_blow_type_seen(target_ptr, monap_ptr, ap_cnt);
         }
     }
 
index d54749c..0f71fa2 100644 (file)
@@ -34,7 +34,6 @@ typedef struct monap_type {
     ARMOUR_CLASS ac;
     bool alive;
     bool fear;
-    int ap_cnt;
 } monap_type;
 
 monap_type *initialize_monap_type(player_type *target_ptr, monap_type *monap_ptr, MONSTER_IDX m_idx);
index dc33081..f5e40b6 100644 (file)
@@ -4,6 +4,9 @@
 #include "monster-attack/monster-attack-types.h"
 #include "system/angband.h"
 
+/*! モンスターが1ターンに攻撃する最大回数 (射撃を含む) / The maximum number of times a monster can attack in a turn (including SHOOT) */
+#define MAX_NUM_BLOWS 4
+
 /*
  * Monster blow structure
  *
@@ -66,7 +69,7 @@ typedef struct monster_race {
     BIT_FLAGS a_ability_flags2; /* Activate Ability Flags 6 (special spells) */
     BIT_FLAGS a_ability_flags3; /* Activate Ability Flags 7 (implementing) */
     BIT_FLAGS a_ability_flags4; /* Activate Ability Flags 8 (implementing) */
-    monster_blow blow[4]; /* Up to four blows per round */
+    monster_blow blow[MAX_NUM_BLOWS]; /* Up to four blows per round */
     MONRACE_IDX reinforce_id[6];
     DICE_NUMBER reinforce_dd[6];
     DICE_SID reinforce_ds[6];
@@ -98,7 +101,7 @@ typedef struct monster_race {
     ITEM_NUMBER r_drop_gold; /*!< これまでに撃破時に落とした財宝の数 / Max number of gold dropped at once */
     ITEM_NUMBER r_drop_item; /*!< これまでに撃破時に落としたアイテムの数 / Max number of item dropped at once */
     byte r_cast_spell; /* Max number of other spells seen */
-    byte r_blows[4]; /* Number of times each blow type was seen */
+    byte r_blows[MAX_NUM_BLOWS]; /* Number of times each blow type was seen */
     u32b r_flags1; /* Observed racial flags */
     u32b r_flags2; /* Observed racial flags */
     u32b r_flags3; /* Observed racial flags */