3 #include "object-hook.h"
6 * @brief 対象のアイテムが矢やクロスボウの矢の材料になるかを返す。/
7 * Hook to determine if an object is contertible in an arrow/bolt
8 * @param o_ptr オブジェクトの構造体の参照ポインタ。
9 * @return 材料にできるならTRUEを返す
11 bool item_tester_hook_convertible(object_type *o_ptr)
13 if ((o_ptr->tval == TV_JUNK) || (o_ptr->tval == TV_SKELETON)) return TRUE;
15 if ((o_ptr->tval == TV_CORPSE) && (o_ptr->sval == SV_SKELETON)) return TRUE;
21 * @brief 武器匠の「武器」鑑定対象になるかを判定する。/ Hook to specify "weapon"
22 * @param o_ptr オブジェクトの構造体の参照ポインタ。
23 * @return 対象になるならTRUEを返す。
25 bool item_tester_hook_orthodox_melee_weapons(object_type *o_ptr)
37 if (o_ptr->sval != SV_DOKUBARI) return (TRUE);
45 * @brief オブジェクトが右手か左手に装備できる武器かどうかの判定
46 * @param o_ptr 判定するオブジェクトの構造体参照ポインタ
47 * @return 右手か左手の武器として装備できるならばTRUEを返す。
49 bool item_tester_hook_melee_weapon(object_type *o_ptr)
51 /* Check for a usable slot */
52 if ((o_ptr->tval >= TV_DIGGING) && (o_ptr->tval <= TV_SWORD)) return (TRUE);
54 /* Assume not wearable */
60 * @brief 武器匠の「矢弾」鑑定対象になるかを判定する。/ Hook to specify "weapon"
61 * @param o_ptr オブジェクトの構造体の参照ポインタ。
62 * @return 対象になるならTRUEを返す。
64 bool item_tester_hook_ammo(object_type *o_ptr)
80 * @brief 修復対象となる壊れた武器かを判定する。 / Hook to specify "broken weapon"
81 * @param o_ptr オブジェクトの構造体の参照ポインタ。
82 * @return 修復対象になるならTRUEを返す。
84 bool item_tester_hook_broken_weapon(object_type *o_ptr)
86 if (o_ptr->tval != TV_SWORD) return FALSE;
90 case SV_BROKEN_DAGGER:
99 * @brief オブジェクトが投射可能な武器かどうかを返す。
100 * @param o_ptr 判定するオブジェクトの構造体参照ポインタ
101 * @return 投射可能な武器ならばTRUE
103 bool item_tester_hook_boomerang(object_type *o_ptr)
105 if ((o_ptr->tval == TV_DIGGING) || (o_ptr->tval == TV_SWORD) || (o_ptr->tval == TV_POLEARM) || (o_ptr->tval == TV_HAFTED)) return (TRUE);
112 * @brief オブジェクトをプレイヤーが食べることができるかを判定する /
113 * Hook to determine if an object is eatable
114 * @param o_ptr 判定したいオブジェクトの構造体参照ポインタ
115 * @return 食べることが可能ならばTRUEを返す
117 bool item_tester_hook_eatable(object_type *o_ptr)
119 if (o_ptr->tval == TV_FOOD) return TRUE;
122 if (prace_is_(RACE_SKELETON))
124 if (o_ptr->tval == TV_SKELETON ||
125 (o_ptr->tval == TV_CORPSE && o_ptr->sval == SV_SKELETON))
131 if (prace_is_(RACE_SKELETON) ||
132 prace_is_(RACE_GOLEM) ||
133 prace_is_(RACE_ZOMBIE) ||
134 prace_is_(RACE_SPECTRE))
136 if (o_ptr->tval == TV_STAFF || o_ptr->tval == TV_WAND)
139 else if (prace_is_(RACE_DEMON) || (mimic_info[p_ptr->mimic_form].MIMIC_FLAGS & MIMIC_IS_DEMON))
141 if (o_ptr->tval == TV_CORPSE &&
142 o_ptr->sval == SV_CORPSE &&
143 my_strchr("pht", r_info[o_ptr->pval].d_char))
152 * @brief オブジェクトがどちらの手にも装備できる武器かどうかの判定
153 * @param o_ptr 判定するオブジェクトの構造体参照ポインタ
154 * @return 左右両方の手で装備できるならばTRUEを返す。
156 bool item_tester_hook_mochikae(object_type *o_ptr)
158 /* Check for a usable slot */
159 if (((o_ptr->tval >= TV_DIGGING) && (o_ptr->tval <= TV_SWORD)) ||
160 (o_ptr->tval == TV_SHIELD) || (o_ptr->tval == TV_CAPTURE) ||
161 (o_ptr->tval == TV_CARD)) return (TRUE);
163 /* Assume not wearable */
168 * @brief オブジェクトをプレイヤーが魔道具として発動できるかを判定する /
169 * Hook to determine if an object is activatable
170 * @param o_ptr 判定したいオブジェクトの構造体参照ポインタ
171 * @return 魔道具として発動可能ならばTRUEを返す
173 bool item_tester_hook_activate(object_type *o_ptr)
175 BIT_FLAGS flgs[TR_FLAG_SIZE];
178 if (!object_is_known(o_ptr)) return (FALSE);
180 /* Extract the flags */
181 object_flags(o_ptr, flgs);
183 /* Check activation flag */
184 if (have_flag(flgs, TR_ACTIVATE)) return (TRUE);
191 * @brief オブジェクトを防具として装備できるかの判定 / The "wearable" tester
192 * @param o_ptr 判定するオブジェクトの構造体参照ポインタ
193 * @return オブジェクトが防具として装備できるならTRUEを返す。
195 bool item_tester_hook_wear(object_type *o_ptr)
197 if ((o_ptr->tval == TV_SOFT_ARMOR) && (o_ptr->sval == SV_ABUNAI_MIZUGI))
198 if (p_ptr->psex == SEX_MALE) return FALSE;
200 /* Check for a usable slot */
201 if (wield_slot(o_ptr) >= INVEN_RARM) return (TRUE);
203 /* Assume not wearable */
209 * @brief オブジェクトをプレイヤーが簡易使用コマンドで利用できるかを判定する /
210 * Hook to determine if an object is useable
211 * @param o_ptr 判定したいオブジェクトの構造体参照ポインタ
212 * @return 利用可能ならばTRUEを返す
214 bool item_tester_hook_use(object_type *o_ptr)
216 BIT_FLAGS flgs[TR_FLAG_SIZE];
219 if (o_ptr->tval == p_ptr->tval_ammo)
241 if (!object_is_known(o_ptr)) return (FALSE);
243 /* HACK - only items from the equipment can be activated */
244 for (i = INVEN_RARM; i < INVEN_TOTAL; i++)
246 if (&inventory[i] == o_ptr)
248 /* Extract the flags */
249 object_flags(o_ptr, flgs);
251 /* Check activation flag */
252 if (have_flag(flgs, TR_ACTIVATE)) return (TRUE);
264 * @brief オブジェクトをプレイヤーが飲むことができるかを判定する /
265 * Hook to determine if an object can be quaffed
266 * @param o_ptr 判定したいオブジェクトの構造体参照ポインタ
267 * @return 飲むことが可能ならばTRUEを返す
269 bool item_tester_hook_quaff(object_type *o_ptr)
271 if (o_ptr->tval == TV_POTION) return TRUE;
273 if (prace_is_(RACE_ANDROID))
275 if (o_ptr->tval == TV_FLASK && o_ptr->sval == SV_FLASK_OIL)
283 * @brief オブジェクトをプレイヤーが読むことができるかを判定する /
284 * Hook to determine if an object is readable
285 * @param o_ptr 判定したいオブジェクトの構造体参照ポインタ
286 * @return 読むことが可能ならばTRUEを返す
288 bool item_tester_hook_readable(object_type *o_ptr)
290 if ((o_ptr->tval == TV_SCROLL) || (o_ptr->tval == TV_PARCHMENT) || (o_ptr->name1 == ART_GHB) || (o_ptr->name1 == ART_POWER)) return (TRUE);
298 * @brief エッセンスの付加可能な武器や矢弾かを返す
299 * @param o_ptr チェックしたいオブジェクトの構造体参照ポインタ
300 * @return エッセンスの付加可能な武器か矢弾ならばTRUEを返す。
302 bool item_tester_hook_melee_ammo(object_type *o_ptr)
317 if (o_ptr->sval != SV_DOKUBARI) return (TRUE);
325 * @brief 呪術領域の武器呪縛の対象にできる武器かどうかを返す。 / An "item_tester_hook" for offer
326 * @param o_ptr オブジェクト構造体の参照ポインタ
327 * @return 呪縛可能な武器ならばTRUEを返す
329 bool item_tester_hook_weapon_except_bow(object_type *o_ptr)
346 * @brief 呪術領域の各処理に使える呪われた装備かどうかを返す。 / An "item_tester_hook" for offer
347 * @param o_ptr オブジェクト構造体の参照ポインタ
348 * @return 使える装備ならばTRUEを返す
350 bool item_tester_hook_cursed(object_type *o_ptr)
352 return (bool)(object_is_cursed(o_ptr));
357 * @brief アイテムが並の価値のアイテムかどうか判定する /
358 * Check if an object is nameless weapon or armour
359 * @param o_ptr 判定するアイテムの情報参照ポインタ
360 * @return 並ならばTRUEを返す
362 bool item_tester_hook_nameless_weapon_armour(object_type *o_ptr)
364 /* Require weapon or armour */
365 if (!object_is_weapon_armour_ammo(o_ptr)) return FALSE;
367 /* Require nameless object if the object is well known */
368 if (object_is_known(o_ptr) && !object_is_nameless(o_ptr))
376 * @brief アイテムが鑑定済みかを判定する /
377 * @param o_ptr 判定するアイテムの情報参照ポインタ
378 * @return 実際に鑑定済みならばTRUEを返す
380 bool item_tester_hook_identify(object_type *o_ptr)
382 return (bool)!object_is_known(o_ptr);
386 * @brief アイテムが鑑定済みの武器防具かを判定する /
387 * @param o_ptr 判定するアイテムの情報参照ポインタ
388 * @return 実際に鑑定済みならばTRUEを返す
390 bool item_tester_hook_identify_weapon_armour(object_type *o_ptr)
392 if (object_is_known(o_ptr))
394 return object_is_weapon_armour_ammo(o_ptr);
398 * @brief アイテムが*鑑定*済みかを判定する /
399 * @param o_ptr 判定するアイテムの情報参照ポインタ
400 * @return 実際に鑑定済みならばTRUEを返す
402 bool item_tester_hook_identify_fully(object_type *o_ptr)
404 return (bool)(!object_is_known(o_ptr) || !(o_ptr->ident & IDENT_MENTAL));
408 * @brief アイテムが*鑑定*済みの武器防具かを判定する /
409 * @param o_ptr 判定するアイテムの情報参照ポインタ
410 * @return 実際に鑑定済みならばTRUEを返す
412 bool item_tester_hook_identify_fully_weapon_armour(object_type *o_ptr)
414 if (!item_tester_hook_identify_fully(o_ptr))
416 return object_is_weapon_armour_ammo(o_ptr);
421 * @brief 魔力充填が可能なアイテムかどうか判定する /
422 * Hook for "get_item()". Determine if something is rechargable.
423 * @param o_ptr 判定するアイテムの情報参照ポインタ
424 * @return 魔力充填が可能ならばTRUEを返す
426 bool item_tester_hook_recharge(object_type *o_ptr)
428 /* Recharge staffs */
429 if (o_ptr->tval == TV_STAFF) return (TRUE);
432 if (o_ptr->tval == TV_WAND) return (TRUE);
434 /* Hack -- Recharge rods */
435 if (o_ptr->tval == TV_ROD) return (TRUE);