OSDN Git Service

[Refactor] #40514 immune_fire は has_immune_fire() を直接参照. /
[hengband/hengband.git] / src / object / object-kind-hook.c
index 9ce2067..639c86d 100644 (file)
@@ -1,6 +1,19 @@
-#include "system/angband.h"
+/*!
+ * @brief アイテムが特定種別のものであるかどうかの判定関数群
+ * @date 2018/12/15
+ * @author deskull
+ */
+
 #include "object/object-kind-hook.h"
 #include "object/object-kind.h"
+#include "sv-definition/sv-amulet-types.h"
+#include "sv-definition/sv-other-types.h"
+#include "sv-definition/sv-ring-types.h"
+
+/*
+ * Special "sval" limit -- first "good" magic/prayer book
+ */
+static const int SV_BOOK_MIN_GOOD = 2;
 
 /*!
  * @brief オブジェクトがクロークかどうかを判定する /
@@ -211,7 +224,7 @@ bool kind_is_good(KIND_OBJECT_IDX k_idx)
        case TV_DEATH_BOOK:
        case TV_TRUMP_BOOK:
        case TV_CRAFT_BOOK:
-       case TV_DAEMON_BOOK:
+       case TV_DEMON_BOOK:
        case TV_CRUSADE_BOOK:
        case TV_MUSIC_BOOK:
        case TV_HISSATSU_BOOK:
@@ -241,3 +254,36 @@ bool kind_is_good(KIND_OBJECT_IDX k_idx)
        /* Assume not good */
        return FALSE;
 }
+
+/*!
+ * @brief tvalとsvalに対応するベースアイテムのIDを返す。
+ * Find the index of the object_kind with the given tval and sval
+ * @param tval 検索したいベースアイテムのtval
+ * @param sval 検索したいベースアイテムのsval
+ * @return なし
+ */
+KIND_OBJECT_IDX lookup_kind(tval_type tval, OBJECT_SUBTYPE_VALUE sval)
+{
+    int num = 0;
+    KIND_OBJECT_IDX bk = 0;
+
+    for (KIND_OBJECT_IDX k = 1; k < max_k_idx; k++) {
+        object_kind *k_ptr = &k_info[k];
+        if (k_ptr->tval != tval)
+            continue;
+        if (k_ptr->sval == sval)
+            return (k);
+        if (sval != SV_ANY)
+            continue;
+        if (!one_in_(++num))
+            continue;
+
+        bk = k;
+    }
+
+    if (sval == SV_ANY) {
+        return bk;
+    }
+
+    return 0;
+}