OSDN Git Service

Merge branch 'master' of git.osdn.net:/gitroot/hengband/hengband
[hengband/hengband.git] / src / object-hook / hook-enchant.c
1 #include "object-hook/hook-enchant.h"
2 #include "mind/mind-weaponsmith.h"
3 #include "sv-definition/sv-armor-types.h"
4 #include "sv-definition/sv-protector-types.h"
5 #include "sv-definition/sv-weapon-types.h"
6 #include "system/object-type-definition.h"
7
8 /*!
9  * @brief オブジェクトがレアアイテムかどうかを返す /
10  * Rare weapons/aromors including Blade of Chaos, Dragon armors, etc.
11  * @param o_ptr 対象のオブジェクト構造体ポインタ
12  * @return レアアイテムならばTRUEを返す
13  */
14 bool object_is_rare(object_type *o_ptr)
15 {
16     switch (o_ptr->tval) {
17     case TV_HAFTED:
18         if (o_ptr->sval == SV_MACE_OF_DISRUPTION || o_ptr->sval == SV_WIZSTAFF)
19             return TRUE;
20         break;
21
22     case TV_POLEARM:
23         if (o_ptr->sval == SV_SCYTHE_OF_SLICING || o_ptr->sval == SV_DEATH_SCYTHE)
24             return TRUE;
25         break;
26
27     case TV_SWORD:
28         if (o_ptr->sval == SV_BLADE_OF_CHAOS || o_ptr->sval == SV_DIAMOND_EDGE || o_ptr->sval == SV_POISON_NEEDLE || o_ptr->sval == SV_HAYABUSA)
29             return TRUE;
30         break;
31
32     case TV_SHIELD:
33         if (o_ptr->sval == SV_DRAGON_SHIELD || o_ptr->sval == SV_MIRROR_SHIELD)
34             return TRUE;
35         break;
36
37     case TV_HELM:
38         if (o_ptr->sval == SV_DRAGON_HELM)
39             return TRUE;
40         break;
41
42     case TV_BOOTS:
43         if (o_ptr->sval == SV_PAIR_OF_DRAGON_GREAVE)
44             return TRUE;
45         break;
46
47     case TV_CLOAK:
48         if (o_ptr->sval == SV_ELVEN_CLOAK || o_ptr->sval == SV_ETHEREAL_CLOAK || o_ptr->sval == SV_SHADOW_CLOAK)
49             return TRUE;
50         break;
51
52     case TV_GLOVES:
53         if (o_ptr->sval == SV_SET_OF_DRAGON_GLOVES)
54             return TRUE;
55         break;
56
57     case TV_SOFT_ARMOR:
58         if (o_ptr->sval == SV_KUROSHOUZOKU || o_ptr->sval == SV_ABUNAI_MIZUGI)
59             return TRUE;
60         break;
61
62     case TV_DRAG_ARMOR:
63         return TRUE;
64
65     default:
66         break;
67     }
68
69     /* Any others are not "rare" objects. */
70     return FALSE;
71 }
72
73 /*!
74  * @brief オブジェクトがアーティファクトかを返す /
75  * Check if an object is artifact
76  * @param o_ptr 対象のオブジェクト構造体ポインタ
77  * @return アーティファクトならばTRUEを返す
78  */
79 bool object_is_artifact(object_type *o_ptr) { return object_is_fixed_artifact(o_ptr) || (o_ptr->art_name != 0); }
80
81 /*!
82  * @brief オブジェクトがランダムアーティファクトかを返す /
83  * Check if an object is random artifact
84  * @param o_ptr 対象のオブジェクト構造体ポインタ
85  * @return ランダムアーティファクトならばTRUEを返す
86  */
87 bool object_is_random_artifact(object_type *o_ptr) { return object_is_artifact(o_ptr) && !object_is_fixed_artifact(o_ptr); }
88
89 /*!
90  * @brief オブジェクトが通常のアイテム(アーティファクト、エゴ、鍛冶師エッセンス付加いずれでもない)かを返す /
91  * Check if an object is neither artifact, ego, nor 'smith' object
92  * @param o_ptr 対象のオブジェクト構造体ポインタ
93  * @return 通常のアイテムならばTRUEを返す
94  */
95 bool object_is_nameless(player_type *player_ptr, object_type *o_ptr)
96 {
97     /* Unused */
98     (void)player_ptr;
99
100     return !object_is_artifact(o_ptr) && !object_is_ego(o_ptr) && !object_is_smith(player_ptr, o_ptr);
101 }
102
103 /*
104  * Artifacts use the "name1" field
105  */
106 bool object_is_fixed_artifact(object_type *o_ptr) { return o_ptr->name1 != 0; }
107
108 /*
109  * Ego-Items use the "name2" field
110  */
111 bool object_is_ego(object_type *o_ptr) { return o_ptr->name2 != 0; }