OSDN Git Service

[Refactor] #37353 マジックナンバー修正(A_MAX) / Fix magic number (A_MAX).
[hengband/hengband.git] / src / melee1.c
index 1406cac..163e3de 100644 (file)
@@ -15,6 +15,7 @@
 #include "cmd-pet.h"
 #include "player-damage.h"
 #include "monsterrace-hook.h"
+#include "melee.h"
 
 
 
  * Determine if the player "hits" a monster (normal combat).
  * @param chance 基本命中値
  * @param ac モンスターのAC
- * @param vis 目標を視界に捕らえているならばTRUEを指定
+ * @param visible 目標を視界に捕らえているならばTRUEを指定
  * @return 命中と判定された場合TRUEを返す
  * @note Always miss 5%, always hit 5%, otherwise random.
  */
-bool test_hit_norm(int chance, ARMOUR_CLASS ac, int vis)
+bool test_hit_norm(HIT_RELIABILITY chance, ARMOUR_CLASS ac, bool visible)
 {
-       int k;
-
-       /* Percentile dice */
-       k = randint0(100);
-
-       /* Hack -- Instant miss or hit */
-       if (k < 10) return (k < 5);
-
-       if (p_ptr->pseikaku == SEIKAKU_NAMAKE)
-               if (one_in_(20)) return (FALSE);
-
-       /* Wimpy attack never hits */
-       if (chance <= 0) return (FALSE);
+       if (!visible) chance = (chance + 1) / 2;
+       return hit_chance(chance, ac) >= randint1(100);
+}
 
-       /* Penalize invisible targets */
-       if (!vis) chance = (chance + 1) / 2;
+/*!
+ * @brief モンスターへの命中率の計算
+ * @param to_h 命中値
+ * @param ac 敵AC
+ * @return 命中確率
+ */
+PERCENTAGE hit_chance(HIT_RELIABILITY reli, ARMOUR_CLASS ac)
+{
+       PERCENTAGE chance = 5, chance_left = 90;
 
-       /* Power must defeat armor */
-       if (randint0(chance) < (ac * 3 / 4)) return (FALSE);
+       if (p_ptr->pseikaku == SEIKAKU_NAMAKE) chance_left = (chance_left * 19 + 9) / 20;
+       chance += (100 - ((ac * 75) / reli)) * chance_left / 100;
 
-       /* Assume hit */
-       return (TRUE);
+       return chance;
 }
 
 
+
 /*!
 * @brief プレイヤーからモンスターへの打撃クリティカル判定 /
 * Critical hits (by player) Factor in weapon weight, total plusses, player melee bonus
@@ -184,8 +182,6 @@ static int check_hit(int power, DEPTH level, int stun)
        return (FALSE);
 }
 
-
-
 /*! モンスターの侮辱行為メッセージテーブル / Hack -- possible "insult" messages */
 static cptr desc_insult[] =
 {
@@ -215,7 +211,6 @@ static cptr desc_insult[] =
 
 };
 
-
 /*! マゴットのぼやきメッセージテーブル / Hack -- possible "insult" messages */
 static cptr desc_moan[] =
 {
@@ -233,7 +228,6 @@ static cptr desc_moan[] =
 
 };
 
-
 /*!
 * @brief 敵オーラによるプレイヤーのダメージ処理(補助)
 * @param m_ptr オーラを持つモンスターの構造体参照ポインタ
@@ -252,7 +246,7 @@ static void touch_zap_player_aux(monster_type *m_ptr, bool immune, int flags_off
 
        if ((atoffset(u32b, r_ptr, flags_offset) & aura_flag) && !immune)
        {
-               char mon_name[80];
+               GAME_TEXT mon_name[MAX_NLEN];
                int aura_damage = damroll(1 + (r_ptr->level / 26), 1 + (r_ptr->level / 17));
 
                /* Hack -- Get the "died from" name */
@@ -271,9 +265,6 @@ static void touch_zap_player_aux(monster_type *m_ptr, bool immune, int flags_off
        }
 }
 
-
-
-
 /*!
 * @brief 敵オーラによるプレイヤーのダメージ処理(メイン)
 * @param m_ptr オーラを持つモンスターの構造体参照ポインタ
@@ -304,7 +295,7 @@ static void natural_attack(s16b m_idx, int attack, bool *fear, bool *mdeath)
        int             n_weight = 0;
        monster_type    *m_ptr = &m_list[m_idx];
        monster_race    *r_ptr = &r_info[m_ptr->r_idx];
-       char            m_name[80];
+       GAME_TEXT m_name[MAX_NLEN];
 
        int             dice_num, dice_side;
 
@@ -356,10 +347,8 @@ static void natural_attack(s16b m_idx, int attack, bool *fear, bool *mdeath)
        /* Extract monster name (or "it") */
        monster_desc(m_name, m_ptr, 0);
 
-
        /* Calculate the "attack quality" */
-       bonus = p_ptr->to_h_m;
-       bonus += (p_ptr->lev * 6 / 5);
+       bonus = p_ptr->to_h_m + (p_ptr->lev * 6 / 5);
        chance = (p_ptr->skill_thn + (bonus * BTH_PLUS_ADJ));
 
        /* Test for hit */
@@ -447,7 +436,7 @@ static void py_attack_aux(POSITION y, POSITION x, bool *fear, bool *mdeath, s16b
        /* Access the weapon */
        object_type     *o_ptr = &inventory[INVEN_RARM + hand];
 
-       char            m_name[80];
+       GAME_TEXT m_name[MAX_NLEN];
 
        bool            success_hit = FALSE;
        bool            backstab = FALSE;
@@ -550,7 +539,6 @@ static void py_attack_aux(POSITION y, POSITION x, bool *fear, bool *mdeath, s16b
        chance = (p_ptr->skill_thn + (bonus * BTH_PLUS_ADJ));
        if (mode == HISSATSU_IAI) chance += 60;
        if (p_ptr->special_defense & KATA_KOUKIJIN) chance += 150;
-
        if (p_ptr->sutemi) chance = MAX(chance * 3 / 2, chance + 60);
 
        vir = virtue_number(V_VALOUR);
@@ -1172,7 +1160,7 @@ static void py_attack_aux(POSITION y, POSITION x, bool *fear, bool *mdeath, s16b
                                if (target_ptr->hold_o_idx)
                                {
                                        object_type *q_ptr = &o_list[target_ptr->hold_o_idx];
-                                       char o_name[MAX_NLEN];
+                                       GAME_TEXT o_name[MAX_NLEN];
 
                                        object_desc(o_name, q_ptr, OD_NAME_ONLY);
                                        q_ptr->held_m_idx = 0;
@@ -1317,7 +1305,6 @@ static void py_attack_aux(POSITION y, POSITION x, bool *fear, bool *mdeath, s16b
        }
 }
 
-
 /*!
 * @brief プレイヤーの打撃処理メインルーチン
 * @param y 攻撃目標のY座標
@@ -1336,7 +1323,7 @@ bool py_attack(POSITION y, POSITION x, BIT_FLAGS mode)
        cave_type       *c_ptr = &cave[y][x];
        monster_type    *m_ptr = &m_list[c_ptr->m_idx];
        monster_race    *r_ptr = &r_info[m_ptr->r_idx];
-       char            m_name[80];
+       GAME_TEXT m_name[MAX_NLEN];
 
        disturb(FALSE, TRUE);
 
@@ -1512,7 +1499,6 @@ bool py_attack(POSITION y, POSITION x, BIT_FLAGS mode)
        return mdeath;
 }
 
-
 /*!
  * @brief モンスターからプレイヤーへの打撃処理 / Attack the player via physical attacks.
  * @param m_idx 打撃を行うモンスターのID
@@ -1533,9 +1519,9 @@ bool make_attack_normal(MONSTER_IDX m_idx)
 
        object_type *o_ptr;
 
-       char o_name[MAX_NLEN];
+       GAME_TEXT o_name[MAX_NLEN];
 
-       char m_name[80];
+       GAME_TEXT m_name[MAX_NLEN];
 
        char ddesc[80];
 
@@ -2011,7 +1997,7 @@ bool make_attack_normal(MONSTER_IDX m_idx)
                                                if (apply_disenchant(0))
                                                {
                                                        /* Hack -- Update AC */
-                                                       handle_stuff();
+                                                       update_creature(p_ptr);
                                                        obvious = TRUE;
                                                }
                                        }
@@ -2070,7 +2056,7 @@ bool make_attack_normal(MONSTER_IDX m_idx)
                                                        o_ptr->pval = 0;
 
                                                        /* Combine / Reorder the pack */
-                                                       p_ptr->notice |= (PN_COMBINE | PN_REORDER);
+                                                       p_ptr->update |= (PU_COMBINE | PU_REORDER);
                                                        p_ptr->window |= (PW_INVEN);
 
                                                        break;
@@ -2166,7 +2152,7 @@ bool make_attack_normal(MONSTER_IDX m_idx)
                                        /* Find an item */
                                        for (k = 0; k < 10; k++)
                                        {
-                                               s16b o_idx;
+                                               OBJECT_IDX o_idx;
 
                                                /* Pick an item */
                                                i = (INVENTORY_IDX)randint0(INVEN_PACK);
@@ -2319,7 +2305,7 @@ bool make_attack_normal(MONSTER_IDX m_idx)
                                        obvious = TRUE;
                                        msg_print(_("酸を浴びせられた!", "You are covered in acid!"));
                                        get_damage += acid_dam(damage, ddesc, -1, FALSE);
-                                       handle_stuff();
+                                       update_creature(p_ptr);
                                        update_smart_learn(m_idx, DRS_ACID);
                                        break;
                                }
@@ -2704,7 +2690,7 @@ bool make_attack_normal(MONSTER_IDX m_idx)
                                                        {
                                                                msg_print(_("あなたは以前ほど力強くなくなってしまった...。", "You're not as powerful as you used to be..."));
 
-                                                               for (k = 0; k < 6; k++)
+                                                               for (k = 0; k < A_MAX; k++)
                                                                {
                                                                        p_ptr->stat_cur[k] = (p_ptr->stat_cur[k] * 7) / 8;
                                                                        if (p_ptr->stat_cur[k] < 3) p_ptr->stat_cur[k] = 3;
@@ -3247,7 +3233,7 @@ bool make_attack_normal(MONSTER_IDX m_idx)
 
                if (p_ptr->riding && damage)
                {
-                       char m_steed_name[80];
+                       char m_steed_name[MAX_NLEN];
                        monster_desc(m_steed_name, &m_list[p_ptr->riding], 0);
                        if (rakuba((damage > 200) ? 200 : damage, FALSE))
                        {
@@ -3270,7 +3256,7 @@ bool make_attack_normal(MONSTER_IDX m_idx)
 #ifdef JP
                msg_format("攻撃が%s自身を傷つけた!", m_name);
 #else
-               char m_name_self[80];
+               GAME_TEXT m_name_self[80];
 
                /* hisself */
                monster_desc(m_name_self, m_ptr, MD_PRON_VISIBLE | MD_POSSESSIVE | MD_OBJECTIVE);
@@ -3283,7 +3269,7 @@ bool make_attack_normal(MONSTER_IDX m_idx)
 
        if ((p_ptr->counter || (p_ptr->special_defense & KATA_MUSOU)) && alive && !p_ptr->is_dead && m_ptr->ml && (p_ptr->csp > 7))
        {
-               char m_target_name[80];
+               char m_target_name[MAX_NLEN];
                monster_desc(m_target_name, m_ptr, 0);
 
                p_ptr->csp -= 7;