OSDN Git Service

[Refactor] #37353 コメント整理。 / Refactor comments.
[hengband/hengband.git] / src / object-hook.c
index 6e026f0..8122eff 100644 (file)
@@ -1,6 +1,7 @@
 
 #include "angband.h"
 #include "object-hook.h"
+#include "artifact.h"
 
 /*!
 * @brief 対象のアイテムが矢やクロスボウの矢の材料になるかを返す。/
@@ -128,22 +129,21 @@ bool item_tester_hook_eatable(object_type *o_ptr)
        else
 #endif
 
-               if (prace_is_(RACE_SKELETON) ||
-                       prace_is_(RACE_GOLEM) ||
-                       prace_is_(RACE_ZOMBIE) ||
-                       prace_is_(RACE_SPECTRE))
-               {
-                       if (o_ptr->tval == TV_STAFF || o_ptr->tval == TV_WAND)
-                               return TRUE;
-               }
-               else if (prace_is_(RACE_DEMON) ||
-                       (mimic_info[p_ptr->mimic_form].MIMIC_FLAGS & MIMIC_IS_DEMON))
-               {
-                       if (o_ptr->tval == TV_CORPSE &&
-                               o_ptr->sval == SV_CORPSE &&
-                               my_strchr("pht", r_info[o_ptr->pval].d_char))
-                               return TRUE;
-               }
+       if (prace_is_(RACE_SKELETON) ||
+               prace_is_(RACE_GOLEM) ||
+               prace_is_(RACE_ZOMBIE) ||
+               prace_is_(RACE_SPECTRE))
+       {
+               if (o_ptr->tval == TV_STAFF || o_ptr->tval == TV_WAND)
+                       return TRUE;
+       }
+       else if (prace_is_(RACE_DEMON) || (mimic_info[p_ptr->mimic_form].MIMIC_FLAGS & MIMIC_IS_DEMON))
+       {
+               if (o_ptr->tval == TV_CORPSE &&
+                       o_ptr->sval == SV_CORPSE &&
+                       my_strchr("pht", r_info[o_ptr->pval].d_char))
+                       return TRUE;
+       }
 
        /* Assume not */
        return (FALSE);
@@ -173,12 +173,10 @@ bool item_tester_hook_mochikae(object_type *o_ptr)
 */
 bool item_tester_hook_activate(object_type *o_ptr)
 {
-       u32b flgs[TR_FLAG_SIZE];
+       BIT_FLAGS flgs[TR_FLAG_SIZE];
 
        /* Not known */
        if (!object_is_known(o_ptr)) return (FALSE);
-
-       /* Extract the flags */
        object_flags(o_ptr, flgs);
 
        /* Check activation flag */
@@ -214,7 +212,7 @@ bool item_tester_hook_wear(object_type *o_ptr)
 */
 bool item_tester_hook_use(object_type *o_ptr)
 {
-       u32b flgs[TR_FLAG_SIZE];
+       BIT_FLAGS flgs[TR_FLAG_SIZE];
 
        /* Ammo */
        if (o_ptr->tval == p_ptr->tval_ammo)
@@ -246,7 +244,6 @@ bool item_tester_hook_use(object_type *o_ptr)
                {
                        if (&inventory[i] == o_ptr)
                        {
-                               /* Extract the flags */
                                object_flags(o_ptr, flgs);
 
                                /* Check activation flag */
@@ -435,6 +432,34 @@ bool item_tester_hook_recharge(object_type *o_ptr)
        /* Hack -- Recharge rods */
        if (o_ptr->tval == TV_ROD) return (TRUE);
 
-       /* Nope */
+       return (FALSE);
+}
+
+/*!
+ * @brief オブジェクトがプレイヤーが使用可能な魔道書かどうかを判定する
+ * @param o_ptr 判定したいオブ会ジェクトの構造体参照ポインタ
+ * @return 学習できる魔道書ならばTRUEを返す
+ */
+bool item_tester_learn_spell(object_type *o_ptr)
+{
+       s32b choices = realm_choices2[p_ptr->pclass];
+
+       if (p_ptr->pclass == CLASS_PRIEST)
+       {
+               if (is_good_realm(p_ptr->realm1))
+               {
+                       choices &= ~(CH_DEATH | CH_DAEMON);
+               }
+               else
+               {
+                       choices &= ~(CH_LIFE | CH_CRUSADE);
+               }
+       }
+
+       if ((o_ptr->tval < TV_LIFE_BOOK) || (o_ptr->tval > (TV_LIFE_BOOK + MAX_REALM - 1))) return (FALSE);
+       if ((o_ptr->tval == TV_MUSIC_BOOK) && (p_ptr->pclass == CLASS_BARD)) return (TRUE);
+       else if (!is_magic(tval2realm(o_ptr->tval))) return FALSE;
+       if ((REALM1_BOOK == o_ptr->tval) || (REALM2_BOOK == o_ptr->tval)) return (TRUE);
+       if (choices & (0x0001 << (tval2realm(o_ptr->tval) - 1))) return (TRUE);
        return (FALSE);
 }