-#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 オブジェクトがクロークかどうかを判定する /
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:
/* 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;
+}