OSDN Git Service

29a1c428eedaa460226511d96fa6ff3ea9f292a0
[hengband/hengband.git] / src / objectkind-hook.c
1 #include "angband.h"
2 #include "objectkind-hook.h"
3 #include "objectkind.h"
4
5 /*!
6  * @brief オブジェクトがクロークかどうかを判定する /
7  * Hack -- determine if a template is Cloak
8  * @param k_idx 判定したいオブジェクトのベースアイテムID
9  * @return オブジェクトがクロークならばTRUEを返す
10  */
11 bool kind_is_cloak(KIND_OBJECT_IDX k_idx)
12 {
13         object_kind *k_ptr = &k_info[k_idx];
14
15         /* Analyze the item type */
16         if (k_ptr->tval == TV_CLOAK)
17         {
18                 return (TRUE);
19         }
20
21         /* Assume not good */
22         return (FALSE);
23 }
24
25
26 /*!
27  * @brief オブジェクトが竿状武器かどうかを判定する /
28  * Hack -- determine if a template is Polearm
29  * @param k_idx 判定したいオブジェクトのベースアイテムID
30  * @return オブジェクトが竿状武器ならばTRUEを返す
31  */
32 bool kind_is_polearm(KIND_OBJECT_IDX k_idx)
33 {
34         object_kind *k_ptr = &k_info[k_idx];
35
36         /* Analyze the item type */
37         if (k_ptr->tval == TV_POLEARM)
38         {
39                 return (TRUE);
40         }
41
42         /* Assume not good */
43         return (FALSE);
44 }
45
46
47 /*!
48  * @brief オブジェクトが剣かどうかを判定する /
49  * Hack -- determine if a template is Sword
50  * @param k_idx 判定したいオブジェクトのベースアイテムID
51  * @return オブジェクトが剣ならばTRUEを返す
52  */
53 bool kind_is_sword(KIND_OBJECT_IDX k_idx)
54 {
55         object_kind *k_ptr = &k_info[k_idx];
56
57         /* Analyze the item type */
58         if ((k_ptr->tval == TV_SWORD) && (k_ptr->sval > 2))
59         {
60                 return (TRUE);
61         }
62
63         /* Assume not good */
64         return (FALSE);
65 }
66
67
68 /*!
69  * @brief オブジェクトが魔法書かどうかを判定する /
70  * Hack -- determine if a template is Book
71  * @param k_idx 判定したいオブジェクトのベースアイテムID
72  * @return オブジェクトが魔法書ならばTRUEを返す
73  */
74 bool kind_is_book(KIND_OBJECT_IDX k_idx)
75 {
76         object_kind *k_ptr = &k_info[k_idx];
77
78         /* Analyze the item type */
79         if ((k_ptr->tval >= TV_LIFE_BOOK) && (k_ptr->tval <= TV_CRUSADE_BOOK))
80         {
81                 return (TRUE);
82         }
83
84         /* Assume not good */
85         return (FALSE);
86 }
87
88
89 /*!
90  * @brief オブジェクトがベースアイテム時点でGOODかどうかを判定する /
91  * Hack -- determine if a template is Good book
92  * @param k_idx 判定したいオブジェクトのベースアイテムID
93  * @return オブジェクトがベースアイテム時点でGOODなアイテムならばTRUEを返す
94  */
95 bool kind_is_good_book(KIND_OBJECT_IDX k_idx)
96 {
97         object_kind *k_ptr = &k_info[k_idx];
98
99         /* Analyze the item type */
100         if ((k_ptr->tval >= TV_LIFE_BOOK) && (k_ptr->tval <= TV_CRUSADE_BOOK) && (k_ptr->tval != TV_ARCANE_BOOK) && (k_ptr->sval > 1))
101         {
102                 return (TRUE);
103         }
104
105         /* Assume not good */
106         return (FALSE);
107 }
108
109
110 /*!
111  * @brief オブジェクトが鎧かどうかを判定する /
112  * Hack -- determine if a template is Armor
113  * @param k_idx 判定したいオブジェクトのベースアイテムID
114  * @return オブジェクトが鎧ならばTRUEを返す
115  */
116 bool kind_is_armor(KIND_OBJECT_IDX k_idx)
117 {
118         object_kind *k_ptr = &k_info[k_idx];
119
120         /* Analyze the item type */
121         if (k_ptr->tval == TV_HARD_ARMOR)
122         {
123                 return (TRUE);
124         }
125
126         /* Assume not good */
127         return (FALSE);
128 }
129
130
131 /*!
132  * @brief オブジェクトが打撃武器かどうかを判定する /
133  * Hack -- determine if a template is hafted weapon
134  * @param k_idx 判定したいオブジェクトのベースアイテムID
135  * @return オブジェクトが打撃武器ならばTRUEを返す
136  */
137 bool kind_is_hafted(KIND_OBJECT_IDX k_idx)
138 {
139         object_kind *k_ptr = &k_info[k_idx];
140
141         /* Analyze the item type */
142         if (k_ptr->tval == TV_HAFTED)
143         {
144                 return (TRUE);
145         }
146
147         /* Assume not good */
148         return (FALSE);
149 }
150
151 /*
152  * Hack -- determine if a template is potion
153  */
154 bool kind_is_potion(KIND_OBJECT_IDX k_idx)
155 {
156         return k_info[k_idx].tval == TV_POTION;
157 }
158
159 /*!
160  * @brief ベースアイテムが上質として扱われるかどうかを返す。
161  * Hack -- determine if a template is "good"
162  * @param k_idx 判定したいベースアイテムのID
163  * @return ベースアイテムが上質ならばTRUEを返す。
164  */
165 bool kind_is_good(KIND_OBJECT_IDX k_idx)
166 {
167         object_kind *k_ptr = &k_info[k_idx];
168
169         /* Analyze the item type */
170         switch (k_ptr->tval)
171         {
172                 /* Armor -- Good unless damaged */
173         case TV_HARD_ARMOR:
174         case TV_SOFT_ARMOR:
175         case TV_DRAG_ARMOR:
176         case TV_SHIELD:
177         case TV_CLOAK:
178         case TV_BOOTS:
179         case TV_GLOVES:
180         case TV_HELM:
181         case TV_CROWN:
182         {
183                 if (k_ptr->to_a < 0) return (FALSE);
184                 return (TRUE);
185         }
186
187         /* Weapons -- Good unless damaged */
188         case TV_BOW:
189         case TV_SWORD:
190         case TV_HAFTED:
191         case TV_POLEARM:
192         case TV_DIGGING:
193         {
194                 if (k_ptr->to_h < 0) return (FALSE);
195                 if (k_ptr->to_d < 0) return (FALSE);
196                 return (TRUE);
197         }
198
199         /* Ammo -- Arrows/Bolts are good */
200         case TV_BOLT:
201         case TV_ARROW:
202         {
203                 return (TRUE);
204         }
205
206         /* Books -- High level books are good (except Arcane books) */
207         case TV_LIFE_BOOK:
208         case TV_SORCERY_BOOK:
209         case TV_NATURE_BOOK:
210         case TV_CHAOS_BOOK:
211         case TV_DEATH_BOOK:
212         case TV_TRUMP_BOOK:
213         case TV_CRAFT_BOOK:
214         case TV_DAEMON_BOOK:
215         case TV_CRUSADE_BOOK:
216         case TV_MUSIC_BOOK:
217         case TV_HISSATSU_BOOK:
218         case TV_HEX_BOOK:
219         {
220                 if (k_ptr->sval >= SV_BOOK_MIN_GOOD) return (TRUE);
221                 return (FALSE);
222         }
223
224         /* Rings -- Rings of Speed are good */
225         case TV_RING:
226         {
227                 if (k_ptr->sval == SV_RING_SPEED) return (TRUE);
228                 if (k_ptr->sval == SV_RING_LORDLY) return (TRUE);
229                 return (FALSE);
230         }
231
232         /* Amulets -- Amulets of the Magi and Resistance are good */
233         case TV_AMULET:
234         {
235                 if (k_ptr->sval == SV_AMULET_THE_MAGI) return (TRUE);
236                 if (k_ptr->sval == SV_AMULET_RESISTANCE) return (TRUE);
237                 return (FALSE);
238         }
239         }
240
241         /* Assume not good */
242         return (FALSE);
243 }