OSDN Git Service

[Refactor] #37353 PROJECT_* 定義を新規ファイル projection.h へ移動。 / Move PROJECT_* definition...
[hengband/hengband.git] / src / melee1.c
index ca96f81..13b90f1 100644 (file)
@@ -16,6 +16,7 @@
 #include "player-damage.h"
 #include "monsterrace-hook.h"
 #include "melee.h"
+#include "projection.h"
 
 
 
@@ -183,7 +184,7 @@ static int check_hit(int power, DEPTH level, int stun)
 }
 
 /*! モンスターの侮辱行為メッセージテーブル / Hack -- possible "insult" messages */
-static cptr desc_insult[] =
+static concptr desc_insult[] =
 {
 #ifdef JP
        "があなたを侮辱した!",
@@ -212,7 +213,7 @@ static cptr desc_insult[] =
 };
 
 /*! マゴットのぼやきメッセージテーブル / Hack -- possible "insult" messages */
-static cptr desc_moan[] =
+static concptr desc_moan[] =
 {
 #ifdef JP
        "は何かを悲しんでいるようだ。",
@@ -240,7 +241,7 @@ static cptr desc_moan[] =
 * @return なし
 */
 static void touch_zap_player_aux(monster_type *m_ptr, bool immune, int flags_offset, int r_flags_offset, u32b aura_flag,
-       HIT_POINT(*dam_func)(HIT_POINT dam, cptr kb_str, int monspell, bool aura), cptr message)
+       HIT_POINT(*dam_func)(HIT_POINT dam, concptr kb_str, int monspell, bool aura), concptr message)
 {
        monster_race *r_ptr = &r_info[m_ptr->r_idx];
 
@@ -299,7 +300,7 @@ static void natural_attack(s16b m_idx, int attack, bool *fear, bool *mdeath)
 
        int             dice_num, dice_side;
 
-       cptr            atk_desc;
+       concptr            atk_desc;
 
        switch (attack)
        {
@@ -1187,8 +1188,6 @@ static void py_attack_aux(POSITION y, POSITION x, bool *fear, bool *mdeath, s16b
 
                                msg_format(_("ミス! %sにかわされた。", "You miss %s."), m_name);
                                msg_print(_("振り回した大鎌が自分自身に返ってきた!", "Your scythe returns to you!"));
-
-                               /* Extract the flags */
                                object_flags(o_ptr, flgs_aux);
 
                                k = damroll(o_ptr->dd + p_ptr->to_dd[hand], o_ptr->ds + p_ptr->to_ds[hand]);
@@ -1442,8 +1441,8 @@ bool py_attack(POSITION y, POSITION x, BIT_FLAGS mode)
 
                if (cur < max)
                {
-                       int ridinglevel = r_info[m_list[p_ptr->riding].r_idx].level;
-                       int targetlevel = r_ptr->level;
+                       DEPTH ridinglevel = r_info[m_list[p_ptr->riding].r_idx].level;
+                       DEPTH targetlevel = r_ptr->level;
                        int inc = 0;
 
                        if ((cur / 200 - 5) < targetlevel)
@@ -1459,7 +1458,6 @@ bool py_attack(POSITION y, POSITION x, BIT_FLAGS mode)
                        }
 
                        p_ptr->skill_exp[GINOU_RIDING] = MIN(max, cur + inc);
-
                        p_ptr->update |= (PU_BONUS);
                }
        }
@@ -1572,7 +1570,7 @@ bool make_attack_normal(MONSTER_IDX m_idx)
                HIT_POINT power = 0;
                HIT_POINT damage = 0;
 
-               cptr act = NULL;
+               concptr act = NULL;
 
                /* Extract the attack infomation */
                int effect = r_ptr->blow[ap_cnt].effect;
@@ -1997,7 +1995,7 @@ bool make_attack_normal(MONSTER_IDX m_idx)
                                                if (apply_disenchant(0))
                                                {
                                                        /* Hack -- Update AC */
-                                                       handle_stuff();
+                                                       update_creature(p_ptr);
                                                        obvious = TRUE;
                                                }
                                        }
@@ -2056,7 +2054,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;
@@ -2152,7 +2150,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);
@@ -2184,11 +2182,7 @@ bool make_attack_normal(MONSTER_IDX m_idx)
                                                if (o_idx)
                                                {
                                                        object_type *j_ptr;
-
-                                                       /* Get new object */
                                                        j_ptr = &o_list[o_idx];
-
-                                                       /* Copy object */
                                                        object_copy(j_ptr, o_ptr);
 
                                                        /* Modify number */
@@ -2305,7 +2299,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;
                                }
@@ -2690,7 +2684,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;
@@ -3210,6 +3204,33 @@ bool make_attack_normal(MONSTER_IDX m_idx)
 #endif
 
                                }
+
+                               /* Gain shield experience */
+                               if (object_is_armour(&inventory[INVEN_RARM]) || object_is_armour(&inventory[INVEN_LARM]))
+                               {
+                                       int cur = p_ptr->skill_exp[GINOU_SHIELD];
+                                       int max = s_info[p_ptr->pclass].s_max[GINOU_SHIELD];
+
+                                       if (cur < max)
+                                       {
+                                               DEPTH targetlevel = r_ptr->level;
+                                               int inc = 0;
+
+
+                                               /* Extra experience */
+                                               if ((cur / 100) < targetlevel)
+                                               {
+                                                       if ((cur / 100 + 15) < targetlevel)
+                                                               inc += 1 + (targetlevel - (cur / 100 + 15));
+                                                       else
+                                                               inc += 1;
+                                               }
+
+                                               p_ptr->skill_exp[GINOU_SHIELD] = MIN(max, cur + inc);
+                                               p_ptr->update |= (PU_BONUS);
+                                       }
+                               }
+
                                damage = 0;
 
                                break;