2 * @brief アイテムが特定種別のものであるかどうかの判定関数群
7 #include "object/object-kind-hook.h"
8 #include "object/object-kind.h"
9 #include "sv-definition/sv-amulet-types.h"
10 #include "sv-definition/sv-other-types.h"
11 #include "sv-definition/sv-ring-types.h"
14 * Special "sval" limit -- first "good" magic/prayer book
16 static const int SV_BOOK_MIN_GOOD = 2;
19 * @brief オブジェクトがクロークかどうかを判定する /
20 * Hack -- determine if a template is Cloak
21 * @param k_idx 判定したいオブジェクトのベースアイテムID
22 * @return オブジェクトがクロークならばTRUEを返す
24 bool kind_is_cloak(KIND_OBJECT_IDX k_idx)
26 object_kind *k_ptr = &k_info[k_idx];
28 /* Analyze the item type */
29 if (k_ptr->tval == TV_CLOAK)
40 * @brief オブジェクトが竿状武器かどうかを判定する /
41 * Hack -- determine if a template is Polearm
42 * @param k_idx 判定したいオブジェクトのベースアイテムID
43 * @return オブジェクトが竿状武器ならばTRUEを返す
45 bool kind_is_polearm(KIND_OBJECT_IDX k_idx)
47 object_kind *k_ptr = &k_info[k_idx];
49 /* Analyze the item type */
50 if (k_ptr->tval == TV_POLEARM)
61 * @brief オブジェクトが剣かどうかを判定する /
62 * Hack -- determine if a template is Sword
63 * @param k_idx 判定したいオブジェクトのベースアイテムID
64 * @return オブジェクトが剣ならばTRUEを返す
66 bool kind_is_sword(KIND_OBJECT_IDX k_idx)
68 object_kind *k_ptr = &k_info[k_idx];
70 /* Analyze the item type */
71 if ((k_ptr->tval == TV_SWORD) && (k_ptr->sval > 2))
82 * @brief オブジェクトが魔法書かどうかを判定する /
83 * Hack -- determine if a template is Book
84 * @param k_idx 判定したいオブジェクトのベースアイテムID
85 * @return オブジェクトが魔法書ならばTRUEを返す
87 bool kind_is_book(KIND_OBJECT_IDX k_idx)
89 object_kind *k_ptr = &k_info[k_idx];
91 /* Analyze the item type */
92 if ((k_ptr->tval >= TV_LIFE_BOOK) && (k_ptr->tval <= TV_CRUSADE_BOOK))
103 * @brief オブジェクトがベースアイテム時点でGOODかどうかを判定する /
104 * Hack -- determine if a template is Good book
105 * @param k_idx 判定したいオブジェクトのベースアイテムID
106 * @return オブジェクトがベースアイテム時点でGOODなアイテムならばTRUEを返す
108 bool kind_is_good_book(KIND_OBJECT_IDX k_idx)
110 object_kind *k_ptr = &k_info[k_idx];
112 /* Analyze the item type */
113 if ((k_ptr->tval >= TV_LIFE_BOOK) && (k_ptr->tval <= TV_CRUSADE_BOOK) && (k_ptr->tval != TV_ARCANE_BOOK) && (k_ptr->sval > 1))
118 /* Assume not good */
124 * @brief オブジェクトが鎧かどうかを判定する /
125 * Hack -- determine if a template is Armor
126 * @param k_idx 判定したいオブジェクトのベースアイテムID
127 * @return オブジェクトが鎧ならばTRUEを返す
129 bool kind_is_armor(KIND_OBJECT_IDX k_idx)
131 object_kind *k_ptr = &k_info[k_idx];
133 /* Analyze the item type */
134 if (k_ptr->tval == TV_HARD_ARMOR)
139 /* Assume not good */
145 * @brief オブジェクトが打撃武器かどうかを判定する /
146 * Hack -- determine if a template is hafted weapon
147 * @param k_idx 判定したいオブジェクトのベースアイテムID
148 * @return オブジェクトが打撃武器ならばTRUEを返す
150 bool kind_is_hafted(KIND_OBJECT_IDX k_idx)
152 object_kind *k_ptr = &k_info[k_idx];
154 /* Analyze the item type */
155 if (k_ptr->tval == TV_HAFTED)
160 /* Assume not good */
165 * Hack -- determine if a template is potion
167 bool kind_is_potion(KIND_OBJECT_IDX k_idx)
169 return k_info[k_idx].tval == TV_POTION;
173 * @brief ベースアイテムが上質として扱われるかどうかを返す。
174 * Hack -- determine if a template is "good"
175 * @param k_idx 判定したいベースアイテムのID
176 * @return ベースアイテムが上質ならばTRUEを返す。
178 bool kind_is_good(KIND_OBJECT_IDX k_idx)
180 object_kind *k_ptr = &k_info[k_idx];
182 /* Analyze the item type */
185 /* Armor -- Good unless damaged */
196 if (k_ptr->to_a < 0) return FALSE;
200 /* Weapons -- Good unless damaged */
207 if (k_ptr->to_h < 0) return FALSE;
208 if (k_ptr->to_d < 0) return FALSE;
212 /* Ammo -- Arrows/Bolts are good */
219 /* Books -- High level books are good (except Arcane books) */
221 case TV_SORCERY_BOOK:
228 case TV_CRUSADE_BOOK:
230 case TV_HISSATSU_BOOK:
233 if (k_ptr->sval >= SV_BOOK_MIN_GOOD) return TRUE;
237 /* Rings -- Rings of Speed are good */
240 if (k_ptr->sval == SV_RING_SPEED) return TRUE;
241 if (k_ptr->sval == SV_RING_LORDLY) return TRUE;
245 /* Amulets -- Amulets of the Magi and Resistance are good */
248 if (k_ptr->sval == SV_AMULET_THE_MAGI) return TRUE;
249 if (k_ptr->sval == SV_AMULET_RESISTANCE) return TRUE;
254 /* Assume not good */
259 * @brief tvalとsvalに対応するベースアイテムのIDを返す。
260 * Find the index of the object_kind with the given tval and sval
261 * @param tval 検索したいベースアイテムのtval
262 * @param sval 検索したいベースアイテムのsval
265 KIND_OBJECT_IDX lookup_kind(tval_type tval, OBJECT_SUBTYPE_VALUE sval)
268 KIND_OBJECT_IDX bk = 0;
270 for (KIND_OBJECT_IDX k = 1; k < max_k_idx; k++) {
271 object_kind *k_ptr = &k_info[k];
272 if (k_ptr->tval != tval)
274 if (k_ptr->sval == sval)
284 if (sval == SV_ANY) {