5 #include "object-hook.h"
8 #include "player-skill.h"
12 * @brief 対象のアイテムが矢やクロスボウの矢の材料になるかを返す。/
13 * Hook to determine if an object is contertible in an arrow/bolt
14 * @param o_ptr オブジェクトの構造体の参照ポインタ。
15 * @return 材料にできるならTRUEを返す
17 bool item_tester_hook_convertible(object_type *o_ptr)
19 if ((o_ptr->tval == TV_JUNK) || (o_ptr->tval == TV_SKELETON)) return TRUE;
20 if ((o_ptr->tval == TV_CORPSE) && (o_ptr->sval == SV_SKELETON)) return TRUE;
25 * @brief 武器匠の「武器」鑑定対象になるかを判定する。/ Hook to specify "weapon"
26 * @param o_ptr オブジェクトの構造体の参照ポインタ。
27 * @return 対象になるならTRUEを返す。
29 bool item_tester_hook_orthodox_melee_weapons(object_type *o_ptr)
41 if (o_ptr->sval != SV_DOKUBARI) return (TRUE);
49 * @brief オブジェクトが右手か左手に装備できる武器かどうかの判定
50 * @param o_ptr 判定するオブジェクトの構造体参照ポインタ
51 * @return 右手か左手の武器として装備できるならばTRUEを返す。
53 bool item_tester_hook_melee_weapon(object_type *o_ptr)
55 /* Check for a usable slot */
56 if ((o_ptr->tval >= TV_DIGGING) && (o_ptr->tval <= TV_SWORD)) return (TRUE);
62 * @brief 武器匠の「矢弾」鑑定対象になるかを判定する。/ Hook to specify "weapon"
63 * @param o_ptr オブジェクトの構造体の参照ポインタ。
64 * @return 対象になるならTRUEを返す。
66 bool item_tester_hook_ammo(object_type *o_ptr)
82 * @brief 修復対象となる壊れた武器かを判定する。 / Hook to specify "broken weapon"
83 * @param o_ptr オブジェクトの構造体の参照ポインタ。
84 * @return 修復対象になるならTRUEを返す。
86 bool item_tester_hook_broken_weapon(object_type *o_ptr)
88 if (o_ptr->tval != TV_SWORD) return FALSE;
92 case SV_BROKEN_DAGGER:
101 * @brief オブジェクトが投射可能な武器かどうかを返す。
102 * @param o_ptr 判定するオブジェクトの構造体参照ポインタ
103 * @return 投射可能な武器ならばTRUE
105 bool item_tester_hook_boomerang(object_type *o_ptr)
107 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))
151 * @brief オブジェクトがどちらの手にも装備できる武器かどうかの判定
152 * @param o_ptr 判定するオブジェクトの構造体参照ポインタ
153 * @return 左右両方の手で装備できるならばTRUEを返す。
155 bool item_tester_hook_mochikae(object_type *o_ptr)
157 /* Check for a usable slot */
158 if (((o_ptr->tval >= TV_DIGGING) && (o_ptr->tval <= TV_SWORD)) ||
159 (o_ptr->tval == TV_SHIELD) || (o_ptr->tval == TV_CAPTURE) ||
160 (o_ptr->tval == TV_CARD)) return (TRUE);
165 * @brief オブジェクトをプレイヤーが魔道具として発動できるかを判定する /
166 * Hook to determine if an object is activatable
167 * @param o_ptr 判定したいオブジェクトの構造体参照ポインタ
168 * @return 魔道具として発動可能ならばTRUEを返す
170 bool item_tester_hook_activate(object_type *o_ptr)
172 BIT_FLAGS flgs[TR_FLAG_SIZE];
175 if (!object_is_known(o_ptr)) return (FALSE);
176 object_flags(o_ptr, flgs);
178 /* Check activation flag */
179 if (have_flag(flgs, TR_ACTIVATE)) return (TRUE);
185 * @brief オブジェクトを防具として装備できるかの判定 / The "wearable" tester
186 * @param o_ptr 判定するオブジェクトの構造体参照ポインタ
187 * @return オブジェクトが防具として装備できるならTRUEを返す。
189 bool item_tester_hook_wear(object_type *o_ptr)
191 if ((o_ptr->tval == TV_SOFT_ARMOR) && (o_ptr->sval == SV_ABUNAI_MIZUGI))
192 if (p_ptr->psex == SEX_MALE) return FALSE;
194 /* Check for a usable slot */
195 if (wield_slot(o_ptr) >= INVEN_RARM) return (TRUE);
202 * @brief オブジェクトをプレイヤーが簡易使用コマンドで利用できるかを判定する /
203 * Hook to determine if an object is useable
204 * @param o_ptr 判定したいオブジェクトの構造体参照ポインタ
205 * @return 利用可能ならばTRUEを返す
207 bool item_tester_hook_use(object_type *o_ptr)
209 BIT_FLAGS flgs[TR_FLAG_SIZE];
212 if (o_ptr->tval == p_ptr->tval_ammo)
234 if (!object_is_known(o_ptr)) return (FALSE);
236 /* HACK - only items from the equipment can be activated */
237 for (i = INVEN_RARM; i < INVEN_TOTAL; i++)
239 if (&inventory[i] == o_ptr)
241 object_flags(o_ptr, flgs);
243 /* Check activation flag */
244 if (have_flag(flgs, TR_ACTIVATE)) return (TRUE);
255 * @brief オブジェクトをプレイヤーが飲むことができるかを判定する /
256 * Hook to determine if an object can be quaffed
257 * @param o_ptr 判定したいオブジェクトの構造体参照ポインタ
258 * @return 飲むことが可能ならばTRUEを返す
260 bool item_tester_hook_quaff(object_type *o_ptr)
262 if (o_ptr->tval == TV_POTION) return TRUE;
264 if (prace_is_(RACE_ANDROID))
266 if (o_ptr->tval == TV_FLASK && o_ptr->sval == SV_FLASK_OIL)
274 * @brief オブジェクトをプレイヤーが読むことができるかを判定する /
275 * Hook to determine if an object is readable
276 * @param o_ptr 判定したいオブジェクトの構造体参照ポインタ
277 * @return 読むことが可能ならばTRUEを返す
279 bool item_tester_hook_readable(object_type *o_ptr)
281 if ((o_ptr->tval == TV_SCROLL) || (o_ptr->tval == TV_PARCHMENT) || (o_ptr->name1 == ART_GHB) || (o_ptr->name1 == ART_POWER)) return (TRUE);
287 * @brief エッセンスの付加可能な武器や矢弾かを返す
288 * @param o_ptr チェックしたいオブジェクトの構造体参照ポインタ
289 * @return エッセンスの付加可能な武器か矢弾ならばTRUEを返す。
291 bool item_tester_hook_melee_ammo(object_type *o_ptr)
306 if (o_ptr->sval != SV_DOKUBARI) return (TRUE);
314 * @brief 呪術領域の武器呪縛の対象にできる武器かどうかを返す。 / An "item_tester_hook" for offer
315 * @param o_ptr オブジェクト構造体の参照ポインタ
316 * @return 呪縛可能な武器ならばTRUEを返す
318 bool item_tester_hook_weapon_except_bow(object_type *o_ptr)
335 * @brief 呪術領域の各処理に使える呪われた装備かどうかを返す。 / An "item_tester_hook" for offer
336 * @param o_ptr オブジェクト構造体の参照ポインタ
337 * @return 使える装備ならばTRUEを返す
339 bool item_tester_hook_cursed(object_type *o_ptr)
341 return (bool)(object_is_cursed(o_ptr));
346 * @brief アイテムが並の価値のアイテムかどうか判定する /
347 * Check if an object is nameless weapon or armour
348 * @param o_ptr 判定するアイテムの情報参照ポインタ
349 * @return 並ならばTRUEを返す
351 bool item_tester_hook_nameless_weapon_armour(object_type *o_ptr)
353 /* Require weapon or armour */
354 if (!object_is_weapon_armour_ammo(o_ptr)) return FALSE;
356 /* Require nameless object if the object is well known */
357 if (object_is_known(o_ptr) && !object_is_nameless(o_ptr))
365 * @brief アイテムが鑑定済みかを判定する /
366 * @param o_ptr 判定するアイテムの情報参照ポインタ
367 * @return 実際に鑑定済みならばTRUEを返す
369 bool item_tester_hook_identify(object_type *o_ptr)
371 return (bool)!object_is_known(o_ptr);
375 * @brief アイテムが鑑定済みの武器防具かを判定する /
376 * @param o_ptr 判定するアイテムの情報参照ポインタ
377 * @return 実際に鑑定済みならばTRUEを返す
379 bool item_tester_hook_identify_weapon_armour(object_type *o_ptr)
381 if (object_is_known(o_ptr))
383 return object_is_weapon_armour_ammo(o_ptr);
387 * @brief アイテムが*鑑定*済みかを判定する /
388 * @param o_ptr 判定するアイテムの情報参照ポインタ
389 * @return 実際に鑑定済みならばTRUEを返す
391 bool item_tester_hook_identify_fully(object_type *o_ptr)
393 return (bool)(!object_is_known(o_ptr) || !(o_ptr->ident & IDENT_MENTAL));
397 * @brief アイテムが*鑑定*済みの武器防具かを判定する /
398 * @param o_ptr 判定するアイテムの情報参照ポインタ
399 * @return 実際に鑑定済みならばTRUEを返す
401 bool item_tester_hook_identify_fully_weapon_armour(object_type *o_ptr)
403 if (!item_tester_hook_identify_fully(o_ptr))
405 return object_is_weapon_armour_ammo(o_ptr);
410 * @brief 魔力充填が可能なアイテムかどうか判定する /
411 * Hook for "get_item()". Determine if something is rechargable.
412 * @param o_ptr 判定するアイテムの情報参照ポインタ
413 * @return 魔力充填が可能ならばTRUEを返す
415 bool item_tester_hook_recharge(object_type *o_ptr)
417 /* Recharge staffs */
418 if (o_ptr->tval == TV_STAFF) return (TRUE);
421 if (o_ptr->tval == TV_WAND) return (TRUE);
423 /* Hack -- Recharge rods */
424 if (o_ptr->tval == TV_ROD) return (TRUE);
430 * @brief オブジェクトがプレイヤーが使用可能な魔道書かどうかを判定する
431 * @param o_ptr 判定したいオブ会ジェクトの構造体参照ポインタ
432 * @return 学習できる魔道書ならばTRUEを返す
434 bool item_tester_learn_spell(object_type *o_ptr)
436 s32b choices = realm_choices2[p_ptr->pclass];
438 if (p_ptr->pclass == CLASS_PRIEST)
440 if (is_good_realm(p_ptr->realm1))
442 choices &= ~(CH_DEATH | CH_DAEMON);
446 choices &= ~(CH_LIFE | CH_CRUSADE);
450 if ((o_ptr->tval < TV_LIFE_BOOK) || (o_ptr->tval > (TV_LIFE_BOOK + MAX_REALM - 1))) return (FALSE);
451 if ((o_ptr->tval == TV_MUSIC_BOOK) && (p_ptr->pclass == CLASS_BARD)) return (TRUE);
452 else if (!is_magic(tval2realm(o_ptr->tval))) return FALSE;
453 if ((REALM1_BOOK == o_ptr->tval) || (REALM2_BOOK == o_ptr->tval)) return (TRUE);
454 if (choices & (0x0001 << (tval2realm(o_ptr->tval) - 1))) return (TRUE);
459 * @brief オブジェクトが高位の魔法書かどうかを判定する
460 * @param o_ptr 判定したいオブジェクトの構造体参照ポインタ
461 * @return オブジェクトが高位の魔法書ならばTRUEを返す
463 bool item_tester_high_level_book(object_type *o_ptr)
465 if ((o_ptr->tval == TV_LIFE_BOOK) ||
466 (o_ptr->tval == TV_SORCERY_BOOK) ||
467 (o_ptr->tval == TV_NATURE_BOOK) ||
468 (o_ptr->tval == TV_CHAOS_BOOK) ||
469 (o_ptr->tval == TV_DEATH_BOOK) ||
470 (o_ptr->tval == TV_TRUMP_BOOK) ||
471 (o_ptr->tval == TV_CRAFT_BOOK) ||
472 (o_ptr->tval == TV_DAEMON_BOOK) ||
473 (o_ptr->tval == TV_CRUSADE_BOOK) ||
474 (o_ptr->tval == TV_MUSIC_BOOK) ||
475 (o_ptr->tval == TV_HEX_BOOK))
487 * @brief オブジェクトがランタンの燃料になるかどうかを判定する
488 * An "item_tester_hook" for refilling lanterns
489 * @param o_ptr 判定したいオブジェクトの構造体参照ポインタ
490 * @return オブジェクトがランタンの燃料になるならばTRUEを返す
492 bool item_tester_refill_lantern(object_type *o_ptr)
494 /* Flasks of oil are okay */
495 if (o_ptr->tval == TV_FLASK) return (TRUE);
497 /* Laterns are okay */
498 if ((o_ptr->tval == TV_LITE) &&
499 (o_ptr->sval == SV_LITE_LANTERN)) return (TRUE);
501 /* Assume not okay */
507 * @brief オブジェクトが薬であるかを返す
508 * @param o_ptr 対象のオブジェクト構造体ポインタ
509 * @return オブジェクトが薬ならばTRUEを返す
511 bool object_is_potion(object_type *o_ptr)
513 return (k_info[o_ptr->k_idx].tval == TV_POTION);
518 * @brief オブジェクトが賞金首の報酬対象になるかを返す
519 * @param o_ptr 対象のオブジェクト構造体ポインタ
520 * @return オブジェクトが報酬対象になるならTRUEを返す
522 bool object_is_shoukinkubi(object_type *o_ptr)
526 /* Require corpse or skeleton */
527 if (o_ptr->tval != TV_CORPSE) return FALSE;
529 /* No wanted monsters in vanilla town */
530 if (vanilla_town) return FALSE;
533 if (p_ptr->today_mon > 0 && (streq(r_name + r_info[o_ptr->pval].name, r_name + r_info[today_mon].name))) return TRUE;
536 if (o_ptr->pval == MON_TSUCHINOKO) return TRUE;
539 for (i = 0; i < MAX_KUBI; i++)
540 if (o_ptr->pval == current_world_ptr->bounty_r_idx[i]) break;
541 if (i < MAX_KUBI) return TRUE;
548 * @brief オブジェクトがプレイヤーの職業に応じた適正武器か否かを返す / Favorite weapons
549 * @param o_ptr 対象のオブジェクト構造体ポインタ
550 * @return オブジェクトが適正武器ならばTRUEを返す
552 bool object_is_favorite(object_type *o_ptr)
554 /* Only melee weapons match */
555 if (!(o_ptr->tval == TV_POLEARM ||
556 o_ptr->tval == TV_SWORD ||
557 o_ptr->tval == TV_DIGGING ||
558 o_ptr->tval == TV_HAFTED))
563 /* Favorite weapons are varied depend on the class */
564 switch (p_ptr->pclass)
568 BIT_FLAGS flgs[TR_FLAG_SIZE];
569 object_flags_known(o_ptr, flgs);
571 if (!have_flag(flgs, TR_BLESSED) &&
572 !(o_ptr->tval == TV_HAFTED))
578 case CLASS_FORCETRAINER:
580 if (!(s_info[p_ptr->pclass].w_max[o_ptr->tval - TV_WEAPON_BEGIN][o_ptr->sval]))
584 case CLASS_BEASTMASTER:
587 BIT_FLAGS flgs[TR_FLAG_SIZE];
588 object_flags_known(o_ptr, flgs);
590 /* Is it known to be suitable to using while riding? */
591 if (!(have_flag(flgs, TR_RIDING)))
599 if (s_info[p_ptr->pclass].w_max[o_ptr->tval - TV_WEAPON_BEGIN][o_ptr->sval] <= WEAPON_EXP_BEGINNER)
604 /* All weapons are okay for non-special classes */
613 * @brief オブジェクトがレアアイテムかどうかを返す /
614 * Rare weapons/aromors including Blade of Chaos, Dragon armors, etc.
615 * @param o_ptr 対象のオブジェクト構造体ポインタ
616 * @return レアアイテムならばTRUEを返す
618 bool object_is_rare(object_type *o_ptr)
623 if (o_ptr->sval == SV_MACE_OF_DISRUPTION ||
624 o_ptr->sval == SV_WIZSTAFF) return TRUE;
628 if (o_ptr->sval == SV_SCYTHE_OF_SLICING ||
629 o_ptr->sval == SV_DEATH_SCYTHE) return TRUE;
633 if (o_ptr->sval == SV_BLADE_OF_CHAOS ||
634 o_ptr->sval == SV_DIAMOND_EDGE ||
635 o_ptr->sval == SV_DOKUBARI ||
636 o_ptr->sval == SV_HAYABUSA) return TRUE;
640 if (o_ptr->sval == SV_DRAGON_SHIELD ||
641 o_ptr->sval == SV_MIRROR_SHIELD) return TRUE;
645 if (o_ptr->sval == SV_DRAGON_HELM) return TRUE;
649 if (o_ptr->sval == SV_PAIR_OF_DRAGON_GREAVE) return TRUE;
653 if (o_ptr->sval == SV_ELVEN_CLOAK ||
654 o_ptr->sval == SV_ETHEREAL_CLOAK ||
655 o_ptr->sval == SV_SHADOW_CLOAK) return TRUE;
659 if (o_ptr->sval == SV_SET_OF_DRAGON_GLOVES) return TRUE;
663 if (o_ptr->sval == SV_KUROSHOUZOKU ||
664 o_ptr->sval == SV_ABUNAI_MIZUGI) return TRUE;
674 /* Any others are not "rare" objects. */
680 * @brief オブジェクトが武器として装備できるかどうかを返す / Check if an object is weapon (including bows and ammo)
681 * @param o_ptr 対象のオブジェクト構造体ポインタ
682 * @return 武器として使えるならばTRUEを返す
684 bool object_is_weapon(object_type *o_ptr)
686 if (TV_WEAPON_BEGIN <= o_ptr->tval && o_ptr->tval <= TV_WEAPON_END) return TRUE;
693 * @brief オブジェクトが武器や矢弾として使用できるかを返す / Check if an object is weapon (including bows and ammo)
694 * Rare weapons/aromors including Blade of Chaos, Dragon armors, etc.
695 * @param o_ptr 対象のオブジェクト構造体ポインタ
696 * @return 武器や矢弾として使えるならばTRUEを返す
698 bool object_is_weapon_ammo(object_type *o_ptr)
700 if (TV_MISSILE_BEGIN <= o_ptr->tval && o_ptr->tval <= TV_WEAPON_END) return TRUE;
706 * @brief オブジェクトが矢弾として使用できるかどうかを返す / Check if an object is ammo
707 * @param o_ptr 対象のオブジェクト構造体ポインタ
708 * @return 矢弾として使えるならばTRUEを返す
710 bool object_is_ammo(object_type *o_ptr)
712 if (TV_MISSILE_BEGIN <= o_ptr->tval && o_ptr->tval <= TV_MISSILE_END) return TRUE;
718 * @brief オブジェクトが防具として装備できるかどうかを返す / Check if an object is armour
719 * @param o_ptr 対象のオブジェクト構造体ポインタ
720 * @return 矢弾として使えるならばTRUEを返す
722 bool object_is_armour(object_type *o_ptr)
724 if (TV_ARMOR_BEGIN <= o_ptr->tval && o_ptr->tval <= TV_ARMOR_END) return TRUE;
730 * @brief オブジェクトが武器、防具、矢弾として使用できるかを返す / Check if an object is weapon, armour or ammo
731 * @param o_ptr 対象のオブジェクト構造体ポインタ
732 * @return 武器、防具、矢弾として使えるならばTRUEを返す
734 bool object_is_weapon_armour_ammo(object_type *o_ptr)
736 if (object_is_weapon_ammo(o_ptr) || object_is_armour(o_ptr)) return TRUE;
743 * @brief オブジェクトが近接武器として装備できるかを返す / Melee weapons
744 * @param o_ptr 対象のオブジェクト構造体ポインタ
745 * @return 近接武器として使えるならばTRUEを返す
747 bool object_is_melee_weapon(object_type *o_ptr)
749 if (TV_DIGGING <= o_ptr->tval && o_ptr->tval <= TV_SWORD) return TRUE;
756 * @brief オブジェクトが装備可能であるかを返す / Wearable including all weapon, all armour, bow, light source, amulet, and ring
757 * @param o_ptr 対象のオブジェクト構造体ポインタ
758 * @return 装備可能ならばTRUEを返す
760 bool object_is_wearable(object_type *o_ptr)
762 if (TV_WEARABLE_BEGIN <= o_ptr->tval && o_ptr->tval <= TV_WEARABLE_END) return TRUE;
769 * @brief オブジェクトが装備品であるかを返す(object_is_wearableに矢弾を含む) / Equipment including all wearable objects and ammo
770 * @param o_ptr 対象のオブジェクト構造体ポインタ
771 * @return 装備品ならばTRUEを返す
773 bool object_is_equipment(object_type *o_ptr)
775 if (TV_EQUIP_BEGIN <= o_ptr->tval && o_ptr->tval <= TV_EQUIP_END) return TRUE;
782 * @brief オブジェクトが強化不能武器であるかを返す / Poison needle can not be enchanted
783 * @param o_ptr 対象のオブジェクト構造体ポインタ
784 * @return 強化不能ならばTRUEを返す
786 bool object_refuse_enchant_weapon(object_type *o_ptr)
788 if (o_ptr->tval == TV_SWORD && o_ptr->sval == SV_DOKUBARI) return TRUE;
795 * @brief オブジェクトが強化可能武器であるかを返す /
796 * Check if an object is weapon (including bows and ammo) and allows enchantment
797 * @param o_ptr 対象のオブジェクト構造体ポインタ
798 * @return 強化可能ならばTRUEを返す
800 bool object_allow_enchant_weapon(object_type *o_ptr)
802 if (object_is_weapon_ammo(o_ptr) && !object_refuse_enchant_weapon(o_ptr)) return TRUE;
809 * @brief オブジェクトが強化可能な近接武器であるかを返す /
810 * Check if an object is melee weapon and allows enchantment
811 * @param o_ptr 対象のオブジェクト構造体ポインタ
812 * @return 強化可能な近接武器ならばTRUEを返す
814 bool object_allow_enchant_melee_weapon(object_type *o_ptr)
816 if (object_is_melee_weapon(o_ptr) && !object_refuse_enchant_weapon(o_ptr)) return TRUE;
823 * @brief オブジェクトが鍛冶師のエッセンス付加済みかを返す /
824 * Check if an object is made by a smith's special ability
825 * @param o_ptr 対象のオブジェクト構造体ポインタ
826 * @return エッセンス付加済みならばTRUEを返す
828 bool object_is_smith(object_type *o_ptr)
830 if (object_is_weapon_armour_ammo(o_ptr) && o_ptr->xtra3) return TRUE;
836 * @brief オブジェクトがアーティファクトかを返す /
837 * Check if an object is artifact
838 * @param o_ptr 対象のオブジェクト構造体ポインタ
839 * @return アーティファクトならばTRUEを返す
841 bool object_is_artifact(object_type *o_ptr)
843 if (object_is_fixed_artifact(o_ptr) || o_ptr->art_name) return TRUE;
850 * @brief オブジェクトがランダムアーティファクトかを返す /
851 * Check if an object is random artifact
852 * @param o_ptr 対象のオブジェクト構造体ポインタ
853 * @return ランダムアーティファクトならばTRUEを返す
855 bool object_is_random_artifact(object_type *o_ptr)
857 if (object_is_artifact(o_ptr) && !object_is_fixed_artifact(o_ptr)) return TRUE;
863 * @brief オブジェクトが通常のアイテム(アーティファクト、エゴ、鍛冶師エッセンス付加いずれでもない)かを返す /
864 * Check if an object is neither artifact, ego, nor 'smith' object
865 * @param o_ptr 対象のオブジェクト構造体ポインタ
866 * @return 通常のアイテムならばTRUEを返す
868 bool object_is_nameless(object_type *o_ptr)
870 if (!object_is_artifact(o_ptr) && !object_is_ego(o_ptr) && !object_is_smith(o_ptr))
877 * @brief オブジェクトが両手持ち可能な武器かを返す /
878 * Check if an object is melee weapon and allows wielding with two-hands
879 * @param o_ptr 対象のオブジェクト構造体ポインタ
880 * @return 両手持ち可能ならばTRUEを返す
882 bool object_allow_two_hands_wielding(object_type *o_ptr)
884 if (object_is_melee_weapon(o_ptr) && ((o_ptr->weight > 99) || (o_ptr->tval == TV_POLEARM))) return TRUE;
890 * @brief オブジェクトが松明に束ねられるかどうかを判定する
891 * An "item_tester_hook" for refilling torches
892 * @param o_ptr 判定したいオブジェクトの構造体参照ポインタ
893 * @return オブジェクトが松明に束ねられるならばTRUEを返す
895 bool object_can_refill_torch(object_type *o_ptr)
897 /* Torches are okay */
898 if ((o_ptr->tval == TV_LITE) &&
899 (o_ptr->sval == SV_LITE_TORCH)) return (TRUE);
901 /* Assume not okay */
907 * @brief 破壊可能なアイテムかを返す /
908 * Determines whether an object can be destroyed, and makes fake inscription.
909 * @param o_ptr 破壊可能かを確認したいオブジェクトの構造体参照ポインタ
910 * @return オブジェクトが破壊可能ならばTRUEを返す
912 bool can_player_destroy_object(object_type *o_ptr)
914 /* Artifacts cannot be destroyed */
915 if (!object_is_artifact(o_ptr)) return TRUE;
917 /* If object is unidentified, makes fake inscription */
918 if (!object_is_known(o_ptr))
920 byte feel = FEEL_SPECIAL;
922 /* Hack -- Handle icky artifacts */
923 if (object_is_cursed(o_ptr) || object_is_broken(o_ptr)) feel = FEEL_TERRIBLE;
925 /* Hack -- inscribe the artifact */
926 o_ptr->feeling = feel;
928 /* We have "felt" it (again) */
929 o_ptr->ident |= (IDENT_SENSE);
930 p_ptr->update |= (PU_COMBINE);
931 p_ptr->window |= (PW_INVEN | PW_EQUIP);
936 /* Identified artifact -- Nothing to do */
941 * @brief オブジェクトがクエストの達成目的か否かを返す。
942 * @param o_ptr 特性短縮表記を得たいオブジェクト構造体の参照ポインタ
943 * @return 現在クエスト達成目的のアイテムならばTRUEを返す。
945 bool object_is_quest_target(object_type *o_ptr)
947 if (p_ptr->inside_quest)
949 ARTIFACT_IDX a_idx = quest[p_ptr->inside_quest].k_idx;
952 artifact_type *a_ptr = &a_info[a_idx];
953 if (!(a_ptr->gen_flags & TRG_INSTA_ART))
955 if ((o_ptr->tval == a_ptr->tval) && (o_ptr->sval == a_ptr->sval))