OSDN Git Service

[Refactor] #37287 #37353 型の置換。 / Type replacement.
[hengband/hengband.git] / src / object-hook.c
1 \r
2 #include "angband.h"\r
3 #include "object-hook.h"\r
4 \r
5 /*!\r
6 * @brief \91Î\8fÛ\82Ì\83A\83C\83e\83\80\82ª\96î\82â\83N\83\8d\83X\83{\83E\82Ì\96î\82Ì\8dÞ\97¿\82É\82È\82é\82©\82ð\95Ô\82·\81B/\r
7 * Hook to determine if an object is contertible in an arrow/bolt\r
8 * @param o_ptr \83I\83u\83W\83F\83N\83g\82Ì\8d\\91¢\91Ì\82Ì\8eQ\8fÆ\83|\83C\83\93\83^\81B\r
9 * @return \8dÞ\97¿\82É\82Å\82«\82é\82È\82çTRUE\82ð\95Ô\82·\r
10 */\r
11 bool item_tester_hook_convertible(object_type *o_ptr)\r
12 {\r
13         if ((o_ptr->tval == TV_JUNK) || (o_ptr->tval == TV_SKELETON)) return TRUE;\r
14 \r
15         if ((o_ptr->tval == TV_CORPSE) && (o_ptr->sval == SV_SKELETON)) return TRUE;\r
16         /* Assume not */\r
17         return (FALSE);\r
18 }\r
19 \r
20 /*!\r
21 * @brief \95\90\8aí\8f \82Ì\81u\95\90\8aí\81v\8aÓ\92è\91Î\8fÛ\82É\82È\82é\82©\82ð\94»\92è\82·\82é\81B/ Hook to specify "weapon"\r
22 * @param o_ptr \83I\83u\83W\83F\83N\83g\82Ì\8d\\91¢\91Ì\82Ì\8eQ\8fÆ\83|\83C\83\93\83^\81B\r
23 * @return \91Î\8fÛ\82É\82È\82é\82È\82çTRUE\82ð\95Ô\82·\81B\r
24 */\r
25 bool item_tester_hook_orthodox_melee_weapons(object_type *o_ptr)\r
26 {\r
27         switch (o_ptr->tval)\r
28         {\r
29         case TV_HAFTED:\r
30         case TV_POLEARM:\r
31         case TV_DIGGING:\r
32         {\r
33                 return (TRUE);\r
34         }\r
35         case TV_SWORD:\r
36         {\r
37                 if (o_ptr->sval != SV_DOKUBARI) return (TRUE);\r
38         }\r
39         }\r
40 \r
41         return (FALSE);\r
42 }\r
43 \r
44 /*!\r
45 * @brief \83I\83u\83W\83F\83N\83g\82ª\89E\8eè\82©\8d\8eè\82É\91\95\94õ\82Å\82«\82é\95\90\8aí\82©\82Ç\82¤\82©\82Ì\94»\92è\r
46 * @param o_ptr \94»\92è\82·\82é\83I\83u\83W\83F\83N\83g\82Ì\8d\\91¢\91Ì\8eQ\8fÆ\83|\83C\83\93\83^\r
47 * @return \89E\8eè\82©\8d\8eè\82Ì\95\90\8aí\82Æ\82µ\82Ä\91\95\94õ\82Å\82«\82é\82È\82ç\82ÎTRUE\82ð\95Ô\82·\81B\r
48 */\r
49 bool item_tester_hook_melee_weapon(object_type *o_ptr)\r
50 {\r
51         /* Check for a usable slot */\r
52         if ((o_ptr->tval >= TV_DIGGING) && (o_ptr->tval <= TV_SWORD)) return (TRUE);\r
53 \r
54         /* Assume not wearable */\r
55         return (FALSE);\r
56 }\r
57 \r
58 \r
59 /*!\r
60 * @brief \95\90\8aí\8f \82Ì\81u\96î\92e\81v\8aÓ\92è\91Î\8fÛ\82É\82È\82é\82©\82ð\94»\92è\82·\82é\81B/ Hook to specify "weapon"\r
61 * @param o_ptr \83I\83u\83W\83F\83N\83g\82Ì\8d\\91¢\91Ì\82Ì\8eQ\8fÆ\83|\83C\83\93\83^\81B\r
62 * @return \91Î\8fÛ\82É\82È\82é\82È\82çTRUE\82ð\95Ô\82·\81B\r
63 */\r
64 bool item_tester_hook_ammo(object_type *o_ptr)\r
65 {\r
66         switch (o_ptr->tval)\r
67         {\r
68         case TV_SHOT:\r
69         case TV_ARROW:\r
70         case TV_BOLT:\r
71         {\r
72                 return (TRUE);\r
73         }\r
74         }\r
75 \r
76         return (FALSE);\r
77 }\r
78 \r
79 /*!\r
80 * @brief \8fC\95\9c\91Î\8fÛ\82Æ\82È\82é\89ó\82ê\82½\95\90\8aí\82©\82ð\94»\92è\82·\82é\81B / Hook to specify "broken weapon"\r
81 * @param o_ptr \83I\83u\83W\83F\83N\83g\82Ì\8d\\91¢\91Ì\82Ì\8eQ\8fÆ\83|\83C\83\93\83^\81B\r
82 * @return \8fC\95\9c\91Î\8fÛ\82É\82È\82é\82È\82çTRUE\82ð\95Ô\82·\81B\r
83 */\r
84 bool item_tester_hook_broken_weapon(object_type *o_ptr)\r
85 {\r
86         if (o_ptr->tval != TV_SWORD) return FALSE;\r
87 \r
88         switch (o_ptr->sval)\r
89         {\r
90         case SV_BROKEN_DAGGER:\r
91         case SV_BROKEN_SWORD:\r
92                 return TRUE;\r
93         }\r
94 \r
95         return FALSE;\r
96 }\r
97 \r
98 /*!\r
99 * @brief \83I\83u\83W\83F\83N\83g\82ª\93\8a\8eË\89Â\94\\82È\95\90\8aí\82©\82Ç\82¤\82©\82ð\95Ô\82·\81B\r
100 * @param o_ptr \94»\92è\82·\82é\83I\83u\83W\83F\83N\83g\82Ì\8d\\91¢\91Ì\8eQ\8fÆ\83|\83C\83\93\83^\r
101 * @return \93\8a\8eË\89Â\94\\82È\95\90\8aí\82È\82ç\82ÎTRUE\r
102 */\r
103 bool item_tester_hook_boomerang(object_type *o_ptr)\r
104 {\r
105         if ((o_ptr->tval == TV_DIGGING) || (o_ptr->tval == TV_SWORD) || (o_ptr->tval == TV_POLEARM) || (o_ptr->tval == TV_HAFTED)) return (TRUE);\r
106 \r
107         /* Assume not */\r
108         return (FALSE);\r
109 }\r
110 \r
111 /*!\r
112 * @brief \83I\83u\83W\83F\83N\83g\82ð\83v\83\8c\83C\83\84\81[\82ª\90H\82×\82é\82±\82Æ\82ª\82Å\82«\82é\82©\82ð\94»\92è\82·\82é /\r
113 * Hook to determine if an object is eatable\r
114 * @param o_ptr \94»\92è\82µ\82½\82¢\83I\83u\83W\83F\83N\83g\82Ì\8d\\91¢\91Ì\8eQ\8fÆ\83|\83C\83\93\83^\r
115 * @return \90H\82×\82é\82±\82Æ\82ª\89Â\94\\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
116 */\r
117 bool item_tester_hook_eatable(object_type *o_ptr)\r
118 {\r
119         if (o_ptr->tval == TV_FOOD) return TRUE;\r
120 \r
121 #if 0\r
122         if (prace_is_(RACE_SKELETON))\r
123         {\r
124                 if (o_ptr->tval == TV_SKELETON ||\r
125                         (o_ptr->tval == TV_CORPSE && o_ptr->sval == SV_SKELETON))\r
126                         return TRUE;\r
127         }\r
128         else\r
129 #endif\r
130 \r
131                 if (prace_is_(RACE_SKELETON) ||\r
132                         prace_is_(RACE_GOLEM) ||\r
133                         prace_is_(RACE_ZOMBIE) ||\r
134                         prace_is_(RACE_SPECTRE))\r
135                 {\r
136                         if (o_ptr->tval == TV_STAFF || o_ptr->tval == TV_WAND)\r
137                                 return TRUE;\r
138                 }\r
139                 else if (prace_is_(RACE_DEMON) ||\r
140                         (mimic_info[p_ptr->mimic_form].MIMIC_FLAGS & MIMIC_IS_DEMON))\r
141                 {\r
142                         if (o_ptr->tval == TV_CORPSE &&\r
143                                 o_ptr->sval == SV_CORPSE &&\r
144                                 my_strchr("pht", r_info[o_ptr->pval].d_char))\r
145                                 return TRUE;\r
146                 }\r
147 \r
148         /* Assume not */\r
149         return (FALSE);\r
150 }\r
151 \r
152 /*!\r
153 * @brief \83I\83u\83W\83F\83N\83g\82ª\82Ç\82¿\82ç\82Ì\8eè\82É\82à\91\95\94õ\82Å\82«\82é\95\90\8aí\82©\82Ç\82¤\82©\82Ì\94»\92è\r
154 * @param o_ptr \94»\92è\82·\82é\83I\83u\83W\83F\83N\83g\82Ì\8d\\91¢\91Ì\8eQ\8fÆ\83|\83C\83\93\83^\r
155 * @return \8d\89E\97¼\95û\82Ì\8eè\82Å\91\95\94õ\82Å\82«\82é\82È\82ç\82ÎTRUE\82ð\95Ô\82·\81B\r
156 */\r
157 bool item_tester_hook_mochikae(object_type *o_ptr)\r
158 {\r
159         /* Check for a usable slot */\r
160         if (((o_ptr->tval >= TV_DIGGING) && (o_ptr->tval <= TV_SWORD)) ||\r
161                 (o_ptr->tval == TV_SHIELD) || (o_ptr->tval == TV_CAPTURE) ||\r
162                 (o_ptr->tval == TV_CARD)) return (TRUE);\r
163 \r
164         /* Assume not wearable */\r
165         return (FALSE);\r
166 }\r
167 \r
168 /*!\r
169 * @brief \83I\83u\83W\83F\83N\83g\82ð\83v\83\8c\83C\83\84\81[\82ª\96\82\93¹\8bï\82Æ\82µ\82Ä\94­\93®\82Å\82«\82é\82©\82ð\94»\92è\82·\82é /\r
170 * Hook to determine if an object is activatable\r
171 * @param o_ptr \94»\92è\82µ\82½\82¢\83I\83u\83W\83F\83N\83g\82Ì\8d\\91¢\91Ì\8eQ\8fÆ\83|\83C\83\93\83^\r
172 * @return \96\82\93¹\8bï\82Æ\82µ\82Ä\94­\93®\89Â\94\\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
173 */\r
174 bool item_tester_hook_activate(object_type *o_ptr)\r
175 {\r
176         u32b flgs[TR_FLAG_SIZE];\r
177 \r
178         /* Not known */\r
179         if (!object_is_known(o_ptr)) return (FALSE);\r
180 \r
181         /* Extract the flags */\r
182         object_flags(o_ptr, flgs);\r
183 \r
184         /* Check activation flag */\r
185         if (have_flag(flgs, TR_ACTIVATE)) return (TRUE);\r
186 \r
187         /* Assume not */\r
188         return (FALSE);\r
189 }\r
190 \r
191 /*!\r
192 * @brief \83I\83u\83W\83F\83N\83g\82ð\96h\8bï\82Æ\82µ\82Ä\91\95\94õ\82Å\82«\82é\82©\82Ì\94»\92è / The "wearable" tester\r
193 * @param o_ptr \94»\92è\82·\82é\83I\83u\83W\83F\83N\83g\82Ì\8d\\91¢\91Ì\8eQ\8fÆ\83|\83C\83\93\83^\r
194 * @return \83I\83u\83W\83F\83N\83g\82ª\96h\8bï\82Æ\82µ\82Ä\91\95\94õ\82Å\82«\82é\82È\82çTRUE\82ð\95Ô\82·\81B\r
195 */\r
196 bool item_tester_hook_wear(object_type *o_ptr)\r
197 {\r
198         if ((o_ptr->tval == TV_SOFT_ARMOR) && (o_ptr->sval == SV_ABUNAI_MIZUGI))\r
199                 if (p_ptr->psex == SEX_MALE) return FALSE;\r
200 \r
201         /* Check for a usable slot */\r
202         if (wield_slot(o_ptr) >= INVEN_RARM) return (TRUE);\r
203 \r
204         /* Assume not wearable */\r
205         return (FALSE);\r
206 }\r
207 \r
208 \r
209 /*!\r
210 * @brief \83I\83u\83W\83F\83N\83g\82ð\83v\83\8c\83C\83\84\81[\82ª\8aÈ\88Õ\8eg\97p\83R\83}\83\93\83h\82Å\97\98\97p\82Å\82«\82é\82©\82ð\94»\92è\82·\82é /\r
211 * Hook to determine if an object is useable\r
212 * @param o_ptr \94»\92è\82µ\82½\82¢\83I\83u\83W\83F\83N\83g\82Ì\8d\\91¢\91Ì\8eQ\8fÆ\83|\83C\83\93\83^\r
213 * @return \97\98\97p\89Â\94\\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
214 */\r
215 bool item_tester_hook_use(object_type *o_ptr)\r
216 {\r
217         u32b flgs[TR_FLAG_SIZE];\r
218 \r
219         /* Ammo */\r
220         if (o_ptr->tval == p_ptr->tval_ammo)\r
221                 return (TRUE);\r
222 \r
223         /* Useable object */\r
224         switch (o_ptr->tval)\r
225         {\r
226         case TV_SPIKE:\r
227         case TV_STAFF:\r
228         case TV_WAND:\r
229         case TV_ROD:\r
230         case TV_SCROLL:\r
231         case TV_POTION:\r
232         case TV_FOOD:\r
233         {\r
234                 return (TRUE);\r
235         }\r
236 \r
237         default:\r
238         {\r
239                 int i;\r
240 \r
241                 /* Not known */\r
242                 if (!object_is_known(o_ptr)) return (FALSE);\r
243 \r
244                 /* HACK - only items from the equipment can be activated */\r
245                 for (i = INVEN_RARM; i < INVEN_TOTAL; i++)\r
246                 {\r
247                         if (&inventory[i] == o_ptr)\r
248                         {\r
249                                 /* Extract the flags */\r
250                                 object_flags(o_ptr, flgs);\r
251 \r
252                                 /* Check activation flag */\r
253                                 if (have_flag(flgs, TR_ACTIVATE)) return (TRUE);\r
254                         }\r
255                 }\r
256         }\r
257         }\r
258 \r
259         /* Assume not */\r
260         return (FALSE);\r
261 }\r
262 \r
263 \r
264 /*!\r
265 * @brief \83I\83u\83W\83F\83N\83g\82ð\83v\83\8c\83C\83\84\81[\82ª\88ù\82Þ\82±\82Æ\82ª\82Å\82«\82é\82©\82ð\94»\92è\82·\82é /\r
266 * Hook to determine if an object can be quaffed\r
267 * @param o_ptr \94»\92è\82µ\82½\82¢\83I\83u\83W\83F\83N\83g\82Ì\8d\\91¢\91Ì\8eQ\8fÆ\83|\83C\83\93\83^\r
268 * @return \88ù\82Þ\82±\82Æ\82ª\89Â\94\\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
269 */\r
270 bool item_tester_hook_quaff(object_type *o_ptr)\r
271 {\r
272         if (o_ptr->tval == TV_POTION) return TRUE;\r
273 \r
274         if (prace_is_(RACE_ANDROID))\r
275         {\r
276                 if (o_ptr->tval == TV_FLASK && o_ptr->sval == SV_FLASK_OIL)\r
277                         return TRUE;\r
278         }\r
279         return FALSE;\r
280 }\r
281 \r
282 \r
283 /*!\r
284 * @brief \83I\83u\83W\83F\83N\83g\82ð\83v\83\8c\83C\83\84\81[\82ª\93Ç\82Þ\82±\82Æ\82ª\82Å\82«\82é\82©\82ð\94»\92è\82·\82é /\r
285 * Hook to determine if an object is readable\r
286 * @param o_ptr \94»\92è\82µ\82½\82¢\83I\83u\83W\83F\83N\83g\82Ì\8d\\91¢\91Ì\8eQ\8fÆ\83|\83C\83\93\83^\r
287 * @return \93Ç\82Þ\82±\82Æ\82ª\89Â\94\\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
288 */\r
289 bool item_tester_hook_readable(object_type *o_ptr)\r
290 {\r
291         if ((o_ptr->tval == TV_SCROLL) || (o_ptr->tval == TV_PARCHMENT) || (o_ptr->name1 == ART_GHB) || (o_ptr->name1 == ART_POWER)) return (TRUE);\r
292 \r
293         /* Assume not */\r
294         return (FALSE);\r
295 }\r
296 \r
297 \r
298 /*!\r
299 * @brief \83G\83b\83Z\83\93\83X\82Ì\95t\89Á\89Â\94\\82È\95\90\8aí\82â\96î\92e\82©\82ð\95Ô\82·\r
300 * @param o_ptr \83`\83F\83b\83N\82µ\82½\82¢\83I\83u\83W\83F\83N\83g\82Ì\8d\\91¢\91Ì\8eQ\8fÆ\83|\83C\83\93\83^\r
301 * @return \83G\83b\83Z\83\93\83X\82Ì\95t\89Á\89Â\94\\82È\95\90\8aí\82©\96î\92e\82È\82ç\82ÎTRUE\82ð\95Ô\82·\81B\r
302 */\r
303 bool item_tester_hook_melee_ammo(object_type *o_ptr)\r
304 {\r
305         switch (o_ptr->tval)\r
306         {\r
307         case TV_HAFTED:\r
308         case TV_POLEARM:\r
309         case TV_DIGGING:\r
310         case TV_BOLT:\r
311         case TV_ARROW:\r
312         case TV_SHOT:\r
313         {\r
314                 return (TRUE);\r
315         }\r
316         case TV_SWORD:\r
317         {\r
318                 if (o_ptr->sval != SV_DOKUBARI) return (TRUE);\r
319         }\r
320         }\r
321 \r
322         return (FALSE);\r
323 }\r
324 \r
325 /*!\r
326 * @brief \8eô\8fp\97Ì\88æ\82Ì\95\90\8aí\8eô\94\9b\82Ì\91Î\8fÛ\82É\82Å\82«\82é\95\90\8aí\82©\82Ç\82¤\82©\82ð\95Ô\82·\81B / An "item_tester_hook" for offer\r
327 * @param o_ptr \83I\83u\83W\83F\83N\83g\8d\\91¢\91Ì\82Ì\8eQ\8fÆ\83|\83C\83\93\83^\r
328 * @return \8eô\94\9b\89Â\94\\82È\95\90\8aí\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
329 */\r
330 bool item_tester_hook_weapon_except_bow(object_type *o_ptr)\r
331 {\r
332         switch (o_ptr->tval)\r
333         {\r
334         case TV_SWORD:\r
335         case TV_HAFTED:\r
336         case TV_POLEARM:\r
337         case TV_DIGGING:\r
338         {\r
339                 return (TRUE);\r
340         }\r
341         }\r
342 \r
343         return (FALSE);\r
344 }\r
345 \r
346 /*!\r
347 * @brief \8eô\8fp\97Ì\88æ\82Ì\8ae\8f\88\97\9d\82É\8eg\82¦\82é\8eô\82í\82ê\82½\91\95\94õ\82©\82Ç\82¤\82©\82ð\95Ô\82·\81B / An "item_tester_hook" for offer\r
348 * @param o_ptr \83I\83u\83W\83F\83N\83g\8d\\91¢\91Ì\82Ì\8eQ\8fÆ\83|\83C\83\93\83^\r
349 * @return \8eg\82¦\82é\91\95\94õ\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
350 */\r
351 bool item_tester_hook_cursed(object_type *o_ptr)\r
352 {\r
353         return (bool)(object_is_cursed(o_ptr));\r
354 }\r
355 \r
356 \r
357 /*!\r
358 * @brief \83A\83C\83e\83\80\82ª\95À\82Ì\89¿\92l\82Ì\83A\83C\83e\83\80\82©\82Ç\82¤\82©\94»\92è\82·\82é /\r
359 * Check if an object is nameless weapon or armour\r
360 * @param o_ptr \94»\92è\82·\82é\83A\83C\83e\83\80\82Ì\8fî\95ñ\8eQ\8fÆ\83|\83C\83\93\83^\r
361 * @return \95À\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
362 */\r
363 bool item_tester_hook_nameless_weapon_armour(object_type *o_ptr)\r
364 {\r
365         /* Require weapon or armour */\r
366         if (!object_is_weapon_armour_ammo(o_ptr)) return FALSE;\r
367 \r
368         /* Require nameless object if the object is well known */\r
369         if (object_is_known(o_ptr) && !object_is_nameless(o_ptr))\r
370                 return FALSE;\r
371 \r
372         return TRUE;\r
373 }\r
374 \r
375 \r
376 /*!\r
377 * @brief \83A\83C\83e\83\80\82ª\8aÓ\92è\8dÏ\82Ý\82©\82ð\94»\92è\82·\82é /\r
378 * @param o_ptr \94»\92è\82·\82é\83A\83C\83e\83\80\82Ì\8fî\95ñ\8eQ\8fÆ\83|\83C\83\93\83^\r
379 * @return \8eÀ\8dÛ\82É\8aÓ\92è\8dÏ\82Ý\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
380 */\r
381 bool item_tester_hook_identify(object_type *o_ptr)\r
382 {\r
383         return (bool)!object_is_known(o_ptr);\r
384 }\r
385 \r
386 /*!\r
387 * @brief \83A\83C\83e\83\80\82ª\8aÓ\92è\8dÏ\82Ý\82Ì\95\90\8aí\96h\8bï\82©\82ð\94»\92è\82·\82é /\r
388 * @param o_ptr \94»\92è\82·\82é\83A\83C\83e\83\80\82Ì\8fî\95ñ\8eQ\8fÆ\83|\83C\83\93\83^\r
389 * @return \8eÀ\8dÛ\82É\8aÓ\92è\8dÏ\82Ý\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
390 */\r
391 bool item_tester_hook_identify_weapon_armour(object_type *o_ptr)\r
392 {\r
393         if (object_is_known(o_ptr))\r
394                 return FALSE;\r
395         return object_is_weapon_armour_ammo(o_ptr);\r
396 }\r
397 \r
398 /*!\r
399 * @brief \83A\83C\83e\83\80\82ª*\8aÓ\92è*\8dÏ\82Ý\82©\82ð\94»\92è\82·\82é /\r
400 * @param o_ptr \94»\92è\82·\82é\83A\83C\83e\83\80\82Ì\8fî\95ñ\8eQ\8fÆ\83|\83C\83\93\83^\r
401 * @return \8eÀ\8dÛ\82É\8aÓ\92è\8dÏ\82Ý\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
402 */\r
403 bool item_tester_hook_identify_fully(object_type *o_ptr)\r
404 {\r
405         return (bool)(!object_is_known(o_ptr) || !(o_ptr->ident & IDENT_MENTAL));\r
406 }\r
407 \r
408 /*!\r
409 * @brief \83A\83C\83e\83\80\82ª*\8aÓ\92è*\8dÏ\82Ý\82Ì\95\90\8aí\96h\8bï\82©\82ð\94»\92è\82·\82é /\r
410 * @param o_ptr \94»\92è\82·\82é\83A\83C\83e\83\80\82Ì\8fî\95ñ\8eQ\8fÆ\83|\83C\83\93\83^\r
411 * @return \8eÀ\8dÛ\82É\8aÓ\92è\8dÏ\82Ý\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
412 */\r
413 bool item_tester_hook_identify_fully_weapon_armour(object_type *o_ptr)\r
414 {\r
415         if (!item_tester_hook_identify_fully(o_ptr))\r
416                 return FALSE;\r
417         return object_is_weapon_armour_ammo(o_ptr);\r
418 }\r
419 \r
420 \r
421 /*!\r
422 * @brief \96\82\97Í\8f[\93U\82ª\89Â\94\\82È\83A\83C\83e\83\80\82©\82Ç\82¤\82©\94»\92è\82·\82é /\r
423 * Hook for "get_item()".  Determine if something is rechargable.\r
424 * @param o_ptr \94»\92è\82·\82é\83A\83C\83e\83\80\82Ì\8fî\95ñ\8eQ\8fÆ\83|\83C\83\93\83^\r
425 * @return \96\82\97Í\8f[\93U\82ª\89Â\94\\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
426 */\r
427 bool item_tester_hook_recharge(object_type *o_ptr)\r
428 {\r
429         /* Recharge staffs */\r
430         if (o_ptr->tval == TV_STAFF) return (TRUE);\r
431 \r
432         /* Recharge wands */\r
433         if (o_ptr->tval == TV_WAND) return (TRUE);\r
434 \r
435         /* Hack -- Recharge rods */\r
436         if (o_ptr->tval == TV_ROD) return (TRUE);\r
437 \r
438         /* Nope */\r
439         return (FALSE);\r
440 }\r