OSDN Git Service

空腹充足の巻物の記述を削除.
[hengband/hengband.git] / src / obj_kind.c
1 /* File: obj_kind.c */
2
3 #include "angband.h"
4
5
6 bool object_is_potion(object_type *o_ptr)
7 {
8         return (k_info[o_ptr->k_idx].tval == TV_POTION);
9 }
10
11
12 bool object_is_shoukinkubi(object_type *o_ptr)
13 {
14         int i;
15
16         /* Require corpse or skeleton */
17         if (o_ptr->tval != TV_CORPSE) return FALSE;
18
19         /* No wanted monsters in vanilla town */
20         if (vanilla_town) return FALSE;
21
22         /* Today's wanted */
23         if (p_ptr->today_mon > 0 && (streq(r_name + r_info[o_ptr->pval].name, r_name + r_info[today_mon].name))) return TRUE;
24
25         /* Tsuchinoko */
26         if (o_ptr->pval == MON_TSUCHINOKO) return TRUE;
27
28         /* Unique monster */
29         for (i = 0; i < MAX_KUBI; i++)
30                 if (o_ptr->pval == kubi_r_idx[i]) break;
31         if (i < MAX_KUBI) return TRUE;
32
33         /* Not wanted */
34         return FALSE;
35 }
36
37
38 /*
39  * Favorite weapons
40  */
41 bool object_is_favorite(object_type *o_ptr)
42 {
43         /* Only melee weapons match */
44         if (!(o_ptr->tval == TV_POLEARM ||
45               o_ptr->tval == TV_SWORD ||
46               o_ptr->tval == TV_DIGGING ||
47               o_ptr->tval == TV_HAFTED))
48         {
49                 return FALSE;
50         }
51
52         /* Favorite weapons are varied depend on the class */
53         switch (p_ptr->pclass)
54         {
55         case CLASS_PRIEST:
56         {
57                 u32b flgs[TR_FLAG_SIZE];
58                 object_flags_known(o_ptr, flgs);
59
60                 if (!have_flag(flgs, TR_BLESSED) && 
61                     !(o_ptr->tval == TV_HAFTED))
62                         return FALSE;
63                 break;
64         }
65
66         case CLASS_MONK:
67         case CLASS_FORCETRAINER:
68                 /* Icky to wield? */
69                 if (!(s_info[p_ptr->pclass].w_max[o_ptr->tval-TV_WEAPON_BEGIN][o_ptr->sval]))
70                         return FALSE;
71                 break;
72
73         case CLASS_BEASTMASTER:
74         case CLASS_CAVALRY:
75         {
76                 u32b flgs[TR_FLAG_SIZE];
77                 object_flags_known(o_ptr, flgs);
78
79                 /* Is it known to be suitable to using while riding? */
80                 if (!(have_flag(flgs, TR_RIDING)))
81                         return FALSE;
82
83                 break;
84         }
85
86         case CLASS_NINJA:
87                 /* Icky to wield? */
88                 if (s_info[p_ptr->pclass].w_max[o_ptr->tval-TV_WEAPON_BEGIN][o_ptr->sval] <= WEAPON_EXP_BEGINNER)
89                         return FALSE;
90                 break;
91
92         default:
93                 /* All weapons are okay for non-special classes */
94                 return TRUE;
95         }
96
97         return TRUE;
98 }
99
100
101 /*
102  * Rare weapons/aromors
103  * including Blade of Chaos, Dragon armors, etc.
104  */
105 bool object_is_rare(object_type *o_ptr)
106 {
107         switch(o_ptr->tval)
108         {
109         case TV_HAFTED:
110                 if (o_ptr->sval == SV_MACE_OF_DISRUPTION ||
111                     o_ptr->sval == SV_WIZSTAFF) return TRUE;
112                 break;
113
114         case TV_POLEARM:
115                 if (o_ptr->sval == SV_SCYTHE_OF_SLICING ||
116                     o_ptr->sval == SV_DEATH_SCYTHE) return TRUE;
117                 break;
118
119         case TV_SWORD:
120                 if (o_ptr->sval == SV_BLADE_OF_CHAOS ||
121                     o_ptr->sval == SV_DIAMOND_EDGE ||
122                     o_ptr->sval == SV_DOKUBARI ||
123                     o_ptr->sval == SV_HAYABUSA) return TRUE;
124                 break;
125
126         case TV_SHIELD:
127                 if (o_ptr->sval == SV_DRAGON_SHIELD ||
128                     o_ptr->sval == SV_MIRROR_SHIELD) return TRUE;
129                 break;
130
131         case TV_HELM:
132                 if (o_ptr->sval == SV_DRAGON_HELM) return TRUE;
133                 break;
134
135         case TV_BOOTS:
136                 if (o_ptr->sval == SV_PAIR_OF_DRAGON_GREAVE) return TRUE;
137                 break;
138
139         case TV_CLOAK:
140                 if (o_ptr->sval == SV_ELVEN_CLOAK ||
141                     o_ptr->sval == SV_ETHEREAL_CLOAK ||
142                     o_ptr->sval == SV_SHADOW_CLOAK) return TRUE;
143                 break;
144
145         case TV_GLOVES:
146                 if (o_ptr->sval == SV_SET_OF_DRAGON_GLOVES) return TRUE;
147                 break;
148
149         case TV_SOFT_ARMOR:
150                 if (o_ptr->sval == SV_KUROSHOUZOKU ||
151                     o_ptr->sval == SV_ABUNAI_MIZUGI) return TRUE;
152                 break;
153
154         case TV_DRAG_ARMOR:
155                 return TRUE;
156
157         default:
158                 break;
159         }
160
161         /* Any others are not "rare" objects. */
162         return FALSE;
163 }
164
165
166 /*
167  * Check if an object is weapon (including bows and ammo)
168  */
169 bool object_is_weapon(object_type *o_ptr)
170 {
171         if (TV_WEAPON_BEGIN <= o_ptr->tval && o_ptr->tval <= TV_WEAPON_END) return TRUE;
172
173         return FALSE;
174 }
175
176
177 /*
178  * Check if an object is weapon (including bows and ammo)
179  */
180 bool object_is_weapon_ammo(object_type *o_ptr)
181 {
182         if (TV_MISSILE_BEGIN <= o_ptr->tval && o_ptr->tval <= TV_WEAPON_END) return TRUE;
183
184         return FALSE;
185 }
186
187
188 /*
189  * Check if an object is ammo
190  */
191 bool object_is_ammo(object_type *o_ptr)
192 {
193         if (TV_MISSILE_BEGIN <= o_ptr->tval && o_ptr->tval <= TV_MISSILE_END) return TRUE;
194
195         return FALSE;
196 }
197
198
199 /*
200  * Check if an object is armour
201  */
202 bool object_is_armour(object_type *o_ptr)
203 {
204         if (TV_ARMOR_BEGIN <= o_ptr->tval && o_ptr->tval <= TV_ARMOR_END) return TRUE;
205
206         return FALSE;
207 }
208
209
210 /*
211  * Check if an object is weapon, armour or ammo
212  */
213 bool object_is_weapon_armour_ammo(object_type *o_ptr)
214 {
215         if (object_is_weapon_ammo(o_ptr) || object_is_armour(o_ptr)) return TRUE;
216
217         return FALSE;
218 }
219
220
221 /*
222  * Melee weapons
223  */
224 bool object_is_melee_weapon(object_type *o_ptr)
225 {
226         if (TV_DIGGING <= o_ptr->tval && o_ptr->tval <= TV_SWORD) return TRUE;
227
228         return FALSE;
229 }
230
231
232 /*
233  * Wearable including all weapon, all armour, bow, light source, amulet, and ring
234  */
235 bool object_is_wearable(object_type *o_ptr)
236 {
237         if (TV_WEARABLE_BEGIN <= o_ptr->tval && o_ptr->tval <= TV_WEARABLE_END) return TRUE;
238
239         return FALSE;
240 }
241
242
243 /*
244  * Equipment including all wearable objects and ammo
245  */
246 bool object_is_equipment(object_type *o_ptr)
247 {
248         if (TV_EQUIP_BEGIN <= o_ptr->tval && o_ptr->tval <= TV_EQUIP_END) return TRUE;
249
250         return FALSE;
251 }
252
253
254 /*
255  * Poison needle can not be enchanted
256  */
257 bool object_refuse_enchant_weapon(object_type *o_ptr)
258 {
259         if (o_ptr->tval == TV_SWORD && o_ptr->sval == SV_DOKUBARI) return TRUE;
260
261         return FALSE;
262 }
263
264
265 /*
266  * Check if an object is weapon (including bows and ammo) and allows enchantment
267  */
268 bool object_allow_enchant_weapon(object_type *o_ptr)
269 {
270         if (object_is_weapon_ammo(o_ptr) && !object_refuse_enchant_weapon(o_ptr)) return TRUE;
271
272         return FALSE;
273 }
274
275
276 /*
277  * Check if an object is melee weapon and allows enchantment
278  */
279 bool object_allow_enchant_melee_weapon(object_type *o_ptr)
280 {
281         if (object_is_melee_weapon(o_ptr) && !object_refuse_enchant_weapon(o_ptr)) return TRUE;
282
283         return FALSE;
284 }
285
286
287 /*
288  * Check if an object is made by a smith's special ability
289  */
290 bool object_is_smith(object_type *o_ptr)
291 {
292         if (object_is_weapon_armour_ammo(o_ptr) && o_ptr->xtra3) return TRUE;
293
294         return FALSE;
295 }
296
297
298 /*
299  * Check if an object is artifact
300  */
301 bool object_is_artifact(object_type *o_ptr)
302 {
303         if (object_is_fixed_artifact(o_ptr) || o_ptr->art_name) return TRUE;
304
305         return FALSE;
306 }
307
308
309 /*
310  * Check if an object is neither artifact, ego, nor 'smith' object
311  */
312 bool object_is_nameless(object_type *o_ptr)
313 {
314         if (!object_is_artifact(o_ptr) && !object_is_ego(o_ptr) && !object_is_smith(o_ptr))
315                 return TRUE;
316
317         return FALSE;
318 }
319
320
321 /*
322  * Check if an object is melee weapon and allows wielding with two-hands
323  */
324 bool object_allow_two_hands_wielding(object_type *o_ptr)
325 {
326         if (object_is_melee_weapon(o_ptr) && ((o_ptr->weight > 99) || (o_ptr->tval == TV_POLEARM))) return TRUE;
327
328         return FALSE;
329 }