From 46d404accdf6c15ae21cb81dbe2e5985aa1ac9f5 Mon Sep 17 00:00:00 2001 From: taotao54321 Date: Sat, 13 Feb 2021 00:34:22 +0900 Subject: [PATCH] =?utf8?q?[Refactor]=20mon=5Ftype=E3=80=81monap=5Ftype=20?= =?utf8?q?=E3=81=AE=20ap=5Fcnt=20=E3=83=A1=E3=83=B3=E3=83=90=E3=82=92?= =?utf8?q?=E9=99=A4=E5=8E=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Fixes #63. --- src/melee/melee-util.h | 1 - src/melee/monster-attack-monster.c | 19 ++++++++----------- src/monster-attack/monster-attack-player.c | 26 +++++++++++++------------- src/monster-attack/monster-attack-util.h | 1 - src/system/monster-race-definition.h | 7 +++++-- 5 files changed, 26 insertions(+), 28 deletions(-) diff --git a/src/melee/melee-util.h b/src/melee/melee-util.h index a344b4a37..563412902 100644 --- a/src/melee/melee-util.h +++ b/src/melee/melee-util.h @@ -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; diff --git a/src/melee/monster-attack-monster.c b/src/melee/monster-attack-monster.c index cf2c24bb7..315909761 100644 --- a/src/melee/monster-attack-monster.c +++ b/src/melee/monster-attack-monster.c @@ -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]++; } } diff --git a/src/monster-attack/monster-attack-player.c b/src/monster-attack/monster-attack-player.c index 55f7d1bf9..e0ac8c61a 100644 --- a/src/monster-attack/monster-attack-player.c +++ b/src/monster-attack/monster-attack-player.c @@ -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); } } diff --git a/src/monster-attack/monster-attack-util.h b/src/monster-attack/monster-attack-util.h index d54749c95..0f71fa2d3 100644 --- a/src/monster-attack/monster-attack-util.h +++ b/src/monster-attack/monster-attack-util.h @@ -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); diff --git a/src/system/monster-race-definition.h b/src/system/monster-race-definition.h index dc33081fc..f5e40b68a 100644 --- a/src/system/monster-race-definition.h +++ b/src/system/monster-race-definition.h @@ -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 */ -- 2.11.0