3 #include "object-hook.h"
\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
11 bool item_tester_hook_convertible(object_type *o_ptr)
\r
13 if ((o_ptr->tval == TV_JUNK) || (o_ptr->tval == TV_SKELETON)) return TRUE;
\r
15 if ((o_ptr->tval == TV_CORPSE) && (o_ptr->sval == SV_SKELETON)) return TRUE;
\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
25 bool item_tester_hook_orthodox_melee_weapons(object_type *o_ptr)
\r
27 switch (o_ptr->tval)
\r
37 if (o_ptr->sval != SV_DOKUBARI) return (TRUE);
\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
49 bool item_tester_hook_melee_weapon(object_type *o_ptr)
\r
51 /* Check for a usable slot */
\r
52 if ((o_ptr->tval >= TV_DIGGING) && (o_ptr->tval <= TV_SWORD)) return (TRUE);
\r
54 /* Assume not wearable */
\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
64 bool item_tester_hook_ammo(object_type *o_ptr)
\r
66 switch (o_ptr->tval)
\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
84 bool item_tester_hook_broken_weapon(object_type *o_ptr)
\r
86 if (o_ptr->tval != TV_SWORD) return FALSE;
\r
88 switch (o_ptr->sval)
\r
90 case SV_BROKEN_DAGGER:
\r
91 case SV_BROKEN_SWORD:
\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
103 bool item_tester_hook_boomerang(object_type *o_ptr)
\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
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
117 bool item_tester_hook_eatable(object_type *o_ptr)
\r
119 if (o_ptr->tval == TV_FOOD) return TRUE;
\r
122 if (prace_is_(RACE_SKELETON))
\r
124 if (o_ptr->tval == TV_SKELETON ||
\r
125 (o_ptr->tval == TV_CORPSE && o_ptr->sval == SV_SKELETON))
\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
136 if (o_ptr->tval == TV_STAFF || o_ptr->tval == TV_WAND)
\r
139 else if (prace_is_(RACE_DEMON) ||
\r
140 (mimic_info[p_ptr->mimic_form].MIMIC_FLAGS & MIMIC_IS_DEMON))
\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
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
157 bool item_tester_hook_mochikae(object_type *o_ptr)
\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
164 /* Assume not wearable */
\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
174 bool item_tester_hook_activate(object_type *o_ptr)
\r
176 u32b flgs[TR_FLAG_SIZE];
\r
179 if (!object_is_known(o_ptr)) return (FALSE);
\r
181 /* Extract the flags */
\r
182 object_flags(o_ptr, flgs);
\r
184 /* Check activation flag */
\r
185 if (have_flag(flgs, TR_ACTIVATE)) return (TRUE);
\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
196 bool item_tester_hook_wear(object_type *o_ptr)
\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
201 /* Check for a usable slot */
\r
202 if (wield_slot(o_ptr) >= INVEN_RARM) return (TRUE);
\r
204 /* Assume not wearable */
\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
215 bool item_tester_hook_use(object_type *o_ptr)
\r
217 u32b flgs[TR_FLAG_SIZE];
\r
220 if (o_ptr->tval == p_ptr->tval_ammo)
\r
223 /* Useable object */
\r
224 switch (o_ptr->tval)
\r
242 if (!object_is_known(o_ptr)) return (FALSE);
\r
244 /* HACK - only items from the equipment can be activated */
\r
245 for (i = INVEN_RARM; i < INVEN_TOTAL; i++)
\r
247 if (&inventory[i] == o_ptr)
\r
249 /* Extract the flags */
\r
250 object_flags(o_ptr, flgs);
\r
252 /* Check activation flag */
\r
253 if (have_flag(flgs, TR_ACTIVATE)) return (TRUE);
\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
270 bool item_tester_hook_quaff(object_type *o_ptr)
\r
272 if (o_ptr->tval == TV_POTION) return TRUE;
\r
274 if (prace_is_(RACE_ANDROID))
\r
276 if (o_ptr->tval == TV_FLASK && o_ptr->sval == SV_FLASK_OIL)
\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
289 bool item_tester_hook_readable(object_type *o_ptr)
\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
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
303 bool item_tester_hook_melee_ammo(object_type *o_ptr)
\r
305 switch (o_ptr->tval)
\r
318 if (o_ptr->sval != SV_DOKUBARI) return (TRUE);
\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
330 bool item_tester_hook_weapon_except_bow(object_type *o_ptr)
\r
332 switch (o_ptr->tval)
\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
351 bool item_tester_hook_cursed(object_type *o_ptr)
\r
353 return (bool)(object_is_cursed(o_ptr));
\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
363 bool item_tester_hook_nameless_weapon_armour(object_type *o_ptr)
\r
365 /* Require weapon or armour */
\r
366 if (!object_is_weapon_armour_ammo(o_ptr)) return FALSE;
\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
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
381 bool item_tester_hook_identify(object_type *o_ptr)
\r
383 return (bool)!object_is_known(o_ptr);
\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
391 bool item_tester_hook_identify_weapon_armour(object_type *o_ptr)
\r
393 if (object_is_known(o_ptr))
\r
395 return object_is_weapon_armour_ammo(o_ptr);
\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
403 bool item_tester_hook_identify_fully(object_type *o_ptr)
\r
405 return (bool)(!object_is_known(o_ptr) || !(o_ptr->ident & IDENT_MENTAL));
\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
413 bool item_tester_hook_identify_fully_weapon_armour(object_type *o_ptr)
\r
415 if (!item_tester_hook_identify_fully(o_ptr))
\r
417 return object_is_weapon_armour_ammo(o_ptr);
\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
427 bool item_tester_hook_recharge(object_type *o_ptr)
\r
429 /* Recharge staffs */
\r
430 if (o_ptr->tval == TV_STAFF) return (TRUE);
\r
432 /* Recharge wands */
\r
433 if (o_ptr->tval == TV_WAND) return (TRUE);
\r
435 /* Hack -- Recharge rods */
\r
436 if (o_ptr->tval == TV_ROD) return (TRUE);
\r