• R/O
  • HTTP
  • SSH
  • HTTPS

hengband: Commit

変愚蛮怒のメインリポジトリです


Commit MetaInfo

Revision66507d4854d1abf966f9aa0f5e2dd419d67be366 (tree)
Time2019-02-13 22:26:26
AuthorDeskull <deskull@user...>
CommiterDeskull

Log Message

[Refactor] #37353 obj_kind.c を object-hook.c に統合。 / Integrate obj_kind.c to object-hook.c.

Change Summary

Incremental Difference

--- a/Hengband_vcs2017/Hengband/Hengband.vcxproj
+++ b/Hengband_vcs2017/Hengband/Hengband.vcxproj
@@ -213,7 +213,6 @@
213213 <ClCompile Include="..\..\src\mspells3.c" />
214214 <ClCompile Include="..\..\src\mspells4.c" />
215215 <ClCompile Include="..\..\src\mutation.c" />
216- <ClCompile Include="..\..\src\obj_kind.c" />
217216 <ClCompile Include="..\..\src\object1.c" />
218217 <ClCompile Include="..\..\src\object2.c" />
219218 <ClCompile Include="..\..\src\racial.c" />
--- a/src/artifact.c
+++ b/src/artifact.c
@@ -15,6 +15,7 @@
1515 #include "avatar.h"
1616 #include "cmd-activate.h"
1717 #include "object-curse.h"
18+#include "object-hook.h"
1819 #include "artifact.h"
1920
2021 static bool has_extreme_damage_rate(object_type *o_ptr);
--- a/src/autopick.c
+++ b/src/autopick.c
@@ -14,6 +14,7 @@
1414 #include "angband.h"
1515 #include "store.h"
1616 #include "player-status.h"
17+#include "object-hook.h"
1718
1819 #define MAX_LINELEN 1024
1920
--- a/src/cave.c
+++ b/src/cave.c
@@ -19,6 +19,7 @@
1919 #include "angband.h"
2020 #include "world.h"
2121 #include "projection.h"
22+#include "object-hook.h"
2223
2324 static byte display_autopick; /*!< 自動拾い状態の設定フラグ */
2425 static int match_autopick;
--- a/src/cmd-pet.c
+++ b/src/cmd-pet.c
@@ -2,6 +2,7 @@
22 #include "melee.h"
33 #include "sort.h"
44 #include "player-status.h"
5+#include "object-hook.h"
56
67 /*!
78 * @brief プレイヤーの騎乗/下馬処理判定
--- a/src/cmd4.c
+++ b/src/cmd4.c
@@ -49,6 +49,7 @@
4949 #include "store.h"
5050 #include "artifact.h"
5151 #include "avatar.h"
52+#include "object-hook.h"
5253
5354
5455 /*
--- a/src/dungeon.c
+++ b/src/dungeon.c
@@ -37,6 +37,7 @@
3737 #include "player-status.h"
3838 #include "cmd-spell.h"
3939 #include "realm-hex.h"
40+#include "object-hook.h"
4041
4142 static bool load = TRUE; /*!<ロード処理中の分岐フラグ*/
4243 static int wild_regen = 20; /*!<広域マップ移動時の自然回復処理カウンタ(広域マップ1マス毎に20回処理を基本とする)*/
--- a/src/effects.c
+++ b/src/effects.c
@@ -19,6 +19,7 @@
1919 #include "player-status.h"
2020 #include "spells-status.h"
2121 #include "realm-hex.h"
22+#include "object-hook.h"
2223
2324 /*!
2425 * @brief プレイヤーの継続行動を設定する。
--- a/src/externs.h
+++ b/src/externs.h
@@ -1375,28 +1375,6 @@ extern void py_pickup_floor(bool pickup);
13751375 /* variable.c */
13761376 extern bool easy_floor;
13771377
1378-/* obj_kind.c */
1379-extern bool object_is_potion(object_type *o_ptr);
1380-extern bool object_is_shoukinkubi(object_type *o_ptr);
1381-extern bool object_is_favorite(object_type *o_ptr);
1382-extern bool object_is_rare(object_type *o_ptr);
1383-extern bool object_is_weapon(object_type *o_ptr);
1384-extern bool object_is_weapon_ammo(object_type *o_ptr);
1385-extern bool object_is_ammo(object_type *o_ptr);
1386-extern bool object_is_armour(object_type *o_ptr);
1387-extern bool object_is_weapon_armour_ammo(object_type *o_ptr);
1388-extern bool object_is_melee_weapon(object_type *o_ptr);
1389-extern bool object_is_wearable(object_type *o_ptr);
1390-extern bool object_is_equipment(object_type *o_ptr);
1391-extern bool object_refuse_enchant_weapon(object_type *o_ptr);
1392-extern bool object_allow_enchant_weapon(object_type *o_ptr);
1393-extern bool object_allow_enchant_melee_weapon(object_type *o_ptr);
1394-extern bool object_is_smith(object_type *o_ptr);
1395-extern bool object_is_artifact(object_type *o_ptr);
1396-extern bool object_is_random_artifact(object_type *o_ptr);
1397-extern bool object_is_nameless(object_type *o_ptr);
1398-extern bool object_allow_two_hands_wielding(object_type *o_ptr);
1399-
14001378 /* wild.c */
14011379 extern void set_floor_and_wall(DUNGEON_IDX type);
14021380 extern void wilderness_gen(void);
--- a/src/flavor.c
+++ b/src/flavor.c
@@ -13,6 +13,7 @@
1313 #include "angband.h"
1414 #include "player-status.h"
1515 #include "shoot.h"
16+#include "object-hook.h"
1617
1718 /*!
1819 * @brief 最初から簡易な名称が明らかになるベースアイテムの判定。 / Certain items, if aware, are known instantly
--- a/src/load.c
+++ b/src/load.c
@@ -49,6 +49,7 @@
4949 #include "artifact.h"
5050 #include "avatar.h"
5151 #include "spells-status.h"
52+#include "object-hook.h"
5253
5354
5455 /*
--- a/src/melee1.c
+++ b/src/melee1.c
@@ -22,6 +22,7 @@
2222 #include "avatar.h"
2323 #include "player-status.h"
2424 #include "realm-hex.h"
25+#include "object-hook.h"
2526
2627
2728
--- a/src/monster-process.c
+++ b/src/monster-process.c
@@ -22,6 +22,7 @@
2222 #include "quest.h"
2323 #include "avatar.h"
2424 #include "realm-hex.h"
25+#include "object-hook.h"
2526
2627
2728 /*!
--- a/src/obj_kind.c
+++ /dev/null
@@ -1,393 +0,0 @@
1-/*!
2- * @file obj_kind.c
3- * @brief ベースアイテムの実装
4- * @date 2014/01/10
5- * @author
6- * 2014 Deskull rearranged comment for Doxygen.
7- */
8-
9-#include "angband.h"
10-
11-/*!
12- * @brief オブジェクトが薬であるかを返す
13- * @param o_ptr 対象のオブジェクト構造体ポインタ
14- * @return オブジェクトが薬ならばTRUEを返す
15- */
16-bool object_is_potion(object_type *o_ptr)
17-{
18- return (k_info[o_ptr->k_idx].tval == TV_POTION);
19-}
20-
21-
22-/*!
23- * @brief オブジェクトが賞金首の報酬対象になるかを返す
24- * @param o_ptr 対象のオブジェクト構造体ポインタ
25- * @return オブジェクトが報酬対象になるならTRUEを返す
26- */
27-bool object_is_shoukinkubi(object_type *o_ptr)
28-{
29- int i;
30-
31- /* Require corpse or skeleton */
32- if (o_ptr->tval != TV_CORPSE) return FALSE;
33-
34- /* No wanted monsters in vanilla town */
35- if (vanilla_town) return FALSE;
36-
37- /* Today's wanted */
38- if (p_ptr->today_mon > 0 && (streq(r_name + r_info[o_ptr->pval].name, r_name + r_info[today_mon].name))) return TRUE;
39-
40- /* Tsuchinoko */
41- if (o_ptr->pval == MON_TSUCHINOKO) return TRUE;
42-
43- /* Unique monster */
44- for (i = 0; i < MAX_KUBI; i++)
45- if (o_ptr->pval == kubi_r_idx[i]) break;
46- if (i < MAX_KUBI) return TRUE;
47-
48- /* Not wanted */
49- return FALSE;
50-}
51-
52-/*!
53- * @brief オブジェクトがプレイヤーの職業に応じた適正武器か否かを返す / Favorite weapons
54- * @param o_ptr 対象のオブジェクト構造体ポインタ
55- * @return オブジェクトが適正武器ならばTRUEを返す
56- */
57-bool object_is_favorite(object_type *o_ptr)
58-{
59- /* Only melee weapons match */
60- if (!(o_ptr->tval == TV_POLEARM ||
61- o_ptr->tval == TV_SWORD ||
62- o_ptr->tval == TV_DIGGING ||
63- o_ptr->tval == TV_HAFTED))
64- {
65- return FALSE;
66- }
67-
68- /* Favorite weapons are varied depend on the class */
69- switch (p_ptr->pclass)
70- {
71- case CLASS_PRIEST:
72- {
73- BIT_FLAGS flgs[TR_FLAG_SIZE];
74- object_flags_known(o_ptr, flgs);
75-
76- if (!have_flag(flgs, TR_BLESSED) &&
77- !(o_ptr->tval == TV_HAFTED))
78- return FALSE;
79- break;
80- }
81-
82- case CLASS_MONK:
83- case CLASS_FORCETRAINER:
84- /* Icky to wield? */
85- if (!(s_info[p_ptr->pclass].w_max[o_ptr->tval-TV_WEAPON_BEGIN][o_ptr->sval]))
86- return FALSE;
87- break;
88-
89- case CLASS_BEASTMASTER:
90- case CLASS_CAVALRY:
91- {
92- BIT_FLAGS flgs[TR_FLAG_SIZE];
93- object_flags_known(o_ptr, flgs);
94-
95- /* Is it known to be suitable to using while riding? */
96- if (!(have_flag(flgs, TR_RIDING)))
97- return FALSE;
98-
99- break;
100- }
101-
102- case CLASS_NINJA:
103- /* Icky to wield? */
104- if (s_info[p_ptr->pclass].w_max[o_ptr->tval-TV_WEAPON_BEGIN][o_ptr->sval] <= WEAPON_EXP_BEGINNER)
105- return FALSE;
106- break;
107-
108- default:
109- /* All weapons are okay for non-special classes */
110- return TRUE;
111- }
112-
113- return TRUE;
114-}
115-
116-
117-/*!
118- * @brief オブジェクトがレアアイテムかどうかを返す /
119- * Rare weapons/aromors including Blade of Chaos, Dragon armors, etc.
120- * @param o_ptr 対象のオブジェクト構造体ポインタ
121- * @return レアアイテムならばTRUEを返す
122- */
123-bool object_is_rare(object_type *o_ptr)
124-{
125- switch(o_ptr->tval)
126- {
127- case TV_HAFTED:
128- if (o_ptr->sval == SV_MACE_OF_DISRUPTION ||
129- o_ptr->sval == SV_WIZSTAFF) return TRUE;
130- break;
131-
132- case TV_POLEARM:
133- if (o_ptr->sval == SV_SCYTHE_OF_SLICING ||
134- o_ptr->sval == SV_DEATH_SCYTHE) return TRUE;
135- break;
136-
137- case TV_SWORD:
138- if (o_ptr->sval == SV_BLADE_OF_CHAOS ||
139- o_ptr->sval == SV_DIAMOND_EDGE ||
140- o_ptr->sval == SV_DOKUBARI ||
141- o_ptr->sval == SV_HAYABUSA) return TRUE;
142- break;
143-
144- case TV_SHIELD:
145- if (o_ptr->sval == SV_DRAGON_SHIELD ||
146- o_ptr->sval == SV_MIRROR_SHIELD) return TRUE;
147- break;
148-
149- case TV_HELM:
150- if (o_ptr->sval == SV_DRAGON_HELM) return TRUE;
151- break;
152-
153- case TV_BOOTS:
154- if (o_ptr->sval == SV_PAIR_OF_DRAGON_GREAVE) return TRUE;
155- break;
156-
157- case TV_CLOAK:
158- if (o_ptr->sval == SV_ELVEN_CLOAK ||
159- o_ptr->sval == SV_ETHEREAL_CLOAK ||
160- o_ptr->sval == SV_SHADOW_CLOAK) return TRUE;
161- break;
162-
163- case TV_GLOVES:
164- if (o_ptr->sval == SV_SET_OF_DRAGON_GLOVES) return TRUE;
165- break;
166-
167- case TV_SOFT_ARMOR:
168- if (o_ptr->sval == SV_KUROSHOUZOKU ||
169- o_ptr->sval == SV_ABUNAI_MIZUGI) return TRUE;
170- break;
171-
172- case TV_DRAG_ARMOR:
173- return TRUE;
174-
175- default:
176- break;
177- }
178-
179- /* Any others are not "rare" objects. */
180- return FALSE;
181-}
182-
183-
184-/*!
185- * @brief オブジェクトが武器として装備できるかどうかを返す / Check if an object is weapon (including bows and ammo)
186- * @param o_ptr 対象のオブジェクト構造体ポインタ
187- * @return 武器として使えるならばTRUEを返す
188- */
189-bool object_is_weapon(object_type *o_ptr)
190-{
191- if (TV_WEAPON_BEGIN <= o_ptr->tval && o_ptr->tval <= TV_WEAPON_END) return TRUE;
192-
193- return FALSE;
194-}
195-
196-
197-/*!
198- * @brief オブジェクトが武器や矢弾として使用できるかを返す / Check if an object is weapon (including bows and ammo)
199- * Rare weapons/aromors including Blade of Chaos, Dragon armors, etc.
200- * @param o_ptr 対象のオブジェクト構造体ポインタ
201- * @return 武器や矢弾として使えるならばTRUEを返す
202- */
203-bool object_is_weapon_ammo(object_type *o_ptr)
204-{
205- if (TV_MISSILE_BEGIN <= o_ptr->tval && o_ptr->tval <= TV_WEAPON_END) return TRUE;
206-
207- return FALSE;
208-}
209-
210-/*!
211- * @brief オブジェクトが矢弾として使用できるかどうかを返す / Check if an object is ammo
212- * @param o_ptr 対象のオブジェクト構造体ポインタ
213- * @return 矢弾として使えるならばTRUEを返す
214- */
215-bool object_is_ammo(object_type *o_ptr)
216-{
217- if (TV_MISSILE_BEGIN <= o_ptr->tval && o_ptr->tval <= TV_MISSILE_END) return TRUE;
218-
219- return FALSE;
220-}
221-
222-/*!
223- * @brief オブジェクトが防具として装備できるかどうかを返す / Check if an object is armour
224- * @param o_ptr 対象のオブジェクト構造体ポインタ
225- * @return 矢弾として使えるならばTRUEを返す
226- */
227-bool object_is_armour(object_type *o_ptr)
228-{
229- if (TV_ARMOR_BEGIN <= o_ptr->tval && o_ptr->tval <= TV_ARMOR_END) return TRUE;
230-
231- return FALSE;
232-}
233-
234-/*!
235- * @brief オブジェクトが武器、防具、矢弾として使用できるかを返す / Check if an object is weapon, armour or ammo
236- * @param o_ptr 対象のオブジェクト構造体ポインタ
237- * @return 武器、防具、矢弾として使えるならばTRUEを返す
238- */
239-bool object_is_weapon_armour_ammo(object_type *o_ptr)
240-{
241- if (object_is_weapon_ammo(o_ptr) || object_is_armour(o_ptr)) return TRUE;
242-
243- return FALSE;
244-}
245-
246-
247-/*!
248- * @brief オブジェクトが近接武器として装備できるかを返す / Melee weapons
249- * @param o_ptr 対象のオブジェクト構造体ポインタ
250- * @return 近接武器として使えるならばTRUEを返す
251- */
252-bool object_is_melee_weapon(object_type *o_ptr)
253-{
254- if (TV_DIGGING <= o_ptr->tval && o_ptr->tval <= TV_SWORD) return TRUE;
255-
256- return FALSE;
257-}
258-
259-
260-/*!
261- * @brief オブジェクトが装備可能であるかを返す / Wearable including all weapon, all armour, bow, light source, amulet, and ring
262- * @param o_ptr 対象のオブジェクト構造体ポインタ
263- * @return 装備可能ならばTRUEを返す
264- */
265-bool object_is_wearable(object_type *o_ptr)
266-{
267- if (TV_WEARABLE_BEGIN <= o_ptr->tval && o_ptr->tval <= TV_WEARABLE_END) return TRUE;
268-
269- return FALSE;
270-}
271-
272-
273-/*!
274- * @brief オブジェクトが装備品であるかを返す(object_is_wearableに矢弾を含む) / Equipment including all wearable objects and ammo
275- * @param o_ptr 対象のオブジェクト構造体ポインタ
276- * @return 装備品ならばTRUEを返す
277- */
278-bool object_is_equipment(object_type *o_ptr)
279-{
280- if (TV_EQUIP_BEGIN <= o_ptr->tval && o_ptr->tval <= TV_EQUIP_END) return TRUE;
281-
282- return FALSE;
283-}
284-
285-
286-/*!
287- * @brief オブジェクトが強化不能武器であるかを返す / Poison needle can not be enchanted
288- * @param o_ptr 対象のオブジェクト構造体ポインタ
289- * @return 強化不能ならばTRUEを返す
290- */
291-bool object_refuse_enchant_weapon(object_type *o_ptr)
292-{
293- if (o_ptr->tval == TV_SWORD && o_ptr->sval == SV_DOKUBARI) return TRUE;
294-
295- return FALSE;
296-}
297-
298-
299-/*!
300- * @brief オブジェクトが強化可能武器であるかを返す /
301- * Check if an object is weapon (including bows and ammo) and allows enchantment
302- * @param o_ptr 対象のオブジェクト構造体ポインタ
303- * @return 強化可能ならばTRUEを返す
304- */
305-bool object_allow_enchant_weapon(object_type *o_ptr)
306-{
307- if (object_is_weapon_ammo(o_ptr) && !object_refuse_enchant_weapon(o_ptr)) return TRUE;
308-
309- return FALSE;
310-}
311-
312-
313-/*!
314- * @brief オブジェクトが強化可能な近接武器であるかを返す /
315- * Check if an object is melee weapon and allows enchantment
316- * @param o_ptr 対象のオブジェクト構造体ポインタ
317- * @return 強化可能な近接武器ならばTRUEを返す
318- */
319-bool object_allow_enchant_melee_weapon(object_type *o_ptr)
320-{
321- if (object_is_melee_weapon(o_ptr) && !object_refuse_enchant_weapon(o_ptr)) return TRUE;
322-
323- return FALSE;
324-}
325-
326-
327-/*!
328- * @brief オブジェクトが鍛冶師のエッセンス付加済みかを返す /
329- * Check if an object is made by a smith's special ability
330- * @param o_ptr 対象のオブジェクト構造体ポインタ
331- * @return エッセンス付加済みならばTRUEを返す
332- */
333-bool object_is_smith(object_type *o_ptr)
334-{
335- if (object_is_weapon_armour_ammo(o_ptr) && o_ptr->xtra3) return TRUE;
336-
337- return FALSE;
338-}
339-
340-/*!
341- * @brief オブジェクトがアーティファクトかを返す /
342- * Check if an object is artifact
343- * @param o_ptr 対象のオブジェクト構造体ポインタ
344- * @return アーティファクトならばTRUEを返す
345- */
346-bool object_is_artifact(object_type *o_ptr)
347-{
348- if (object_is_fixed_artifact(o_ptr) || o_ptr->art_name) return TRUE;
349-
350- return FALSE;
351-}
352-
353-
354-/*!
355- * @brief オブジェクトがランダムアーティファクトかを返す /
356- * Check if an object is random artifact
357- * @param o_ptr 対象のオブジェクト構造体ポインタ
358- * @return ランダムアーティファクトならばTRUEを返す
359- */
360-bool object_is_random_artifact(object_type *o_ptr)
361-{
362- if (object_is_artifact(o_ptr) && !object_is_fixed_artifact(o_ptr)) return TRUE;
363-
364- return FALSE;
365-}
366-
367-/*!
368- * @brief オブジェクトが通常のアイテム(アーティファクト、エゴ、鍛冶師エッセンス付加いずれでもない)かを返す /
369- * Check if an object is neither artifact, ego, nor 'smith' object
370- * @param o_ptr 対象のオブジェクト構造体ポインタ
371- * @return 通常のアイテムならばTRUEを返す
372- */
373-bool object_is_nameless(object_type *o_ptr)
374-{
375- if (!object_is_artifact(o_ptr) && !object_is_ego(o_ptr) && !object_is_smith(o_ptr))
376- return TRUE;
377-
378- return FALSE;
379-}
380-
381-
382-/*!
383- * @brief オブジェクトが両手持ち可能な武器かを返す /
384- * Check if an object is melee weapon and allows wielding with two-hands
385- * @param o_ptr 対象のオブジェクト構造体ポインタ
386- * @return 両手持ち可能ならばTRUEを返す
387- */
388-bool object_allow_two_hands_wielding(object_type *o_ptr)
389-{
390- if (object_is_melee_weapon(o_ptr) && ((o_ptr->weight > 99) || (o_ptr->tval == TV_POLEARM))) return TRUE;
391-
392- return FALSE;
393-}
--- a/src/object-curse.c
+++ b/src/object-curse.c
@@ -1,4 +1,5 @@
11 #include "angband.h"
2+#include "object-hook.h"
23
34 /*!
45 * @brief アイテムに付加される可能性のある呪いを指定する。
--- a/src/object-hook.c
+++ b/src/object-hook.c
@@ -511,3 +511,387 @@ bool item_tester_refill_lantern(object_type *o_ptr)
511511 return (FALSE);
512512 }
513513
514+
515+/*!
516+ * @brief オブジェクトが薬であるかを返す
517+ * @param o_ptr 対象のオブジェクト構造体ポインタ
518+ * @return オブジェクトが薬ならばTRUEを返す
519+ */
520+bool object_is_potion(object_type *o_ptr)
521+{
522+ return (k_info[o_ptr->k_idx].tval == TV_POTION);
523+}
524+
525+
526+/*!
527+ * @brief オブジェクトが賞金首の報酬対象になるかを返す
528+ * @param o_ptr 対象のオブジェクト構造体ポインタ
529+ * @return オブジェクトが報酬対象になるならTRUEを返す
530+ */
531+bool object_is_shoukinkubi(object_type *o_ptr)
532+{
533+ int i;
534+
535+ /* Require corpse or skeleton */
536+ if (o_ptr->tval != TV_CORPSE) return FALSE;
537+
538+ /* No wanted monsters in vanilla town */
539+ if (vanilla_town) return FALSE;
540+
541+ /* Today's wanted */
542+ if (p_ptr->today_mon > 0 && (streq(r_name + r_info[o_ptr->pval].name, r_name + r_info[today_mon].name))) return TRUE;
543+
544+ /* Tsuchinoko */
545+ if (o_ptr->pval == MON_TSUCHINOKO) return TRUE;
546+
547+ /* Unique monster */
548+ for (i = 0; i < MAX_KUBI; i++)
549+ if (o_ptr->pval == kubi_r_idx[i]) break;
550+ if (i < MAX_KUBI) return TRUE;
551+
552+ /* Not wanted */
553+ return FALSE;
554+}
555+
556+/*!
557+ * @brief オブジェクトがプレイヤーの職業に応じた適正武器か否かを返す / Favorite weapons
558+ * @param o_ptr 対象のオブジェクト構造体ポインタ
559+ * @return オブジェクトが適正武器ならばTRUEを返す
560+ */
561+bool object_is_favorite(object_type *o_ptr)
562+{
563+ /* Only melee weapons match */
564+ if (!(o_ptr->tval == TV_POLEARM ||
565+ o_ptr->tval == TV_SWORD ||
566+ o_ptr->tval == TV_DIGGING ||
567+ o_ptr->tval == TV_HAFTED))
568+ {
569+ return FALSE;
570+ }
571+
572+ /* Favorite weapons are varied depend on the class */
573+ switch (p_ptr->pclass)
574+ {
575+ case CLASS_PRIEST:
576+ {
577+ BIT_FLAGS flgs[TR_FLAG_SIZE];
578+ object_flags_known(o_ptr, flgs);
579+
580+ if (!have_flag(flgs, TR_BLESSED) &&
581+ !(o_ptr->tval == TV_HAFTED))
582+ return FALSE;
583+ break;
584+ }
585+
586+ case CLASS_MONK:
587+ case CLASS_FORCETRAINER:
588+ /* Icky to wield? */
589+ if (!(s_info[p_ptr->pclass].w_max[o_ptr->tval - TV_WEAPON_BEGIN][o_ptr->sval]))
590+ return FALSE;
591+ break;
592+
593+ case CLASS_BEASTMASTER:
594+ case CLASS_CAVALRY:
595+ {
596+ BIT_FLAGS flgs[TR_FLAG_SIZE];
597+ object_flags_known(o_ptr, flgs);
598+
599+ /* Is it known to be suitable to using while riding? */
600+ if (!(have_flag(flgs, TR_RIDING)))
601+ return FALSE;
602+
603+ break;
604+ }
605+
606+ case CLASS_NINJA:
607+ /* Icky to wield? */
608+ if (s_info[p_ptr->pclass].w_max[o_ptr->tval - TV_WEAPON_BEGIN][o_ptr->sval] <= WEAPON_EXP_BEGINNER)
609+ return FALSE;
610+ break;
611+
612+ default:
613+ /* All weapons are okay for non-special classes */
614+ return TRUE;
615+ }
616+
617+ return TRUE;
618+}
619+
620+
621+/*!
622+ * @brief オブジェクトがレアアイテムかどうかを返す /
623+ * Rare weapons/aromors including Blade of Chaos, Dragon armors, etc.
624+ * @param o_ptr 対象のオブジェクト構造体ポインタ
625+ * @return レアアイテムならばTRUEを返す
626+ */
627+bool object_is_rare(object_type *o_ptr)
628+{
629+ switch (o_ptr->tval)
630+ {
631+ case TV_HAFTED:
632+ if (o_ptr->sval == SV_MACE_OF_DISRUPTION ||
633+ o_ptr->sval == SV_WIZSTAFF) return TRUE;
634+ break;
635+
636+ case TV_POLEARM:
637+ if (o_ptr->sval == SV_SCYTHE_OF_SLICING ||
638+ o_ptr->sval == SV_DEATH_SCYTHE) return TRUE;
639+ break;
640+
641+ case TV_SWORD:
642+ if (o_ptr->sval == SV_BLADE_OF_CHAOS ||
643+ o_ptr->sval == SV_DIAMOND_EDGE ||
644+ o_ptr->sval == SV_DOKUBARI ||
645+ o_ptr->sval == SV_HAYABUSA) return TRUE;
646+ break;
647+
648+ case TV_SHIELD:
649+ if (o_ptr->sval == SV_DRAGON_SHIELD ||
650+ o_ptr->sval == SV_MIRROR_SHIELD) return TRUE;
651+ break;
652+
653+ case TV_HELM:
654+ if (o_ptr->sval == SV_DRAGON_HELM) return TRUE;
655+ break;
656+
657+ case TV_BOOTS:
658+ if (o_ptr->sval == SV_PAIR_OF_DRAGON_GREAVE) return TRUE;
659+ break;
660+
661+ case TV_CLOAK:
662+ if (o_ptr->sval == SV_ELVEN_CLOAK ||
663+ o_ptr->sval == SV_ETHEREAL_CLOAK ||
664+ o_ptr->sval == SV_SHADOW_CLOAK) return TRUE;
665+ break;
666+
667+ case TV_GLOVES:
668+ if (o_ptr->sval == SV_SET_OF_DRAGON_GLOVES) return TRUE;
669+ break;
670+
671+ case TV_SOFT_ARMOR:
672+ if (o_ptr->sval == SV_KUROSHOUZOKU ||
673+ o_ptr->sval == SV_ABUNAI_MIZUGI) return TRUE;
674+ break;
675+
676+ case TV_DRAG_ARMOR:
677+ return TRUE;
678+
679+ default:
680+ break;
681+ }
682+
683+ /* Any others are not "rare" objects. */
684+ return FALSE;
685+}
686+
687+
688+/*!
689+ * @brief オブジェクトが武器として装備できるかどうかを返す / Check if an object is weapon (including bows and ammo)
690+ * @param o_ptr 対象のオブジェクト構造体ポインタ
691+ * @return 武器として使えるならばTRUEを返す
692+ */
693+bool object_is_weapon(object_type *o_ptr)
694+{
695+ if (TV_WEAPON_BEGIN <= o_ptr->tval && o_ptr->tval <= TV_WEAPON_END) return TRUE;
696+
697+ return FALSE;
698+}
699+
700+
701+/*!
702+ * @brief オブジェクトが武器や矢弾として使用できるかを返す / Check if an object is weapon (including bows and ammo)
703+ * Rare weapons/aromors including Blade of Chaos, Dragon armors, etc.
704+ * @param o_ptr 対象のオブジェクト構造体ポインタ
705+ * @return 武器や矢弾として使えるならばTRUEを返す
706+ */
707+bool object_is_weapon_ammo(object_type *o_ptr)
708+{
709+ if (TV_MISSILE_BEGIN <= o_ptr->tval && o_ptr->tval <= TV_WEAPON_END) return TRUE;
710+
711+ return FALSE;
712+}
713+
714+/*!
715+ * @brief オブジェクトが矢弾として使用できるかどうかを返す / Check if an object is ammo
716+ * @param o_ptr 対象のオブジェクト構造体ポインタ
717+ * @return 矢弾として使えるならばTRUEを返す
718+ */
719+bool object_is_ammo(object_type *o_ptr)
720+{
721+ if (TV_MISSILE_BEGIN <= o_ptr->tval && o_ptr->tval <= TV_MISSILE_END) return TRUE;
722+
723+ return FALSE;
724+}
725+
726+/*!
727+ * @brief オブジェクトが防具として装備できるかどうかを返す / Check if an object is armour
728+ * @param o_ptr 対象のオブジェクト構造体ポインタ
729+ * @return 矢弾として使えるならばTRUEを返す
730+ */
731+bool object_is_armour(object_type *o_ptr)
732+{
733+ if (TV_ARMOR_BEGIN <= o_ptr->tval && o_ptr->tval <= TV_ARMOR_END) return TRUE;
734+
735+ return FALSE;
736+}
737+
738+/*!
739+ * @brief オブジェクトが武器、防具、矢弾として使用できるかを返す / Check if an object is weapon, armour or ammo
740+ * @param o_ptr 対象のオブジェクト構造体ポインタ
741+ * @return 武器、防具、矢弾として使えるならばTRUEを返す
742+ */
743+bool object_is_weapon_armour_ammo(object_type *o_ptr)
744+{
745+ if (object_is_weapon_ammo(o_ptr) || object_is_armour(o_ptr)) return TRUE;
746+
747+ return FALSE;
748+}
749+
750+
751+/*!
752+ * @brief オブジェクトが近接武器として装備できるかを返す / Melee weapons
753+ * @param o_ptr 対象のオブジェクト構造体ポインタ
754+ * @return 近接武器として使えるならばTRUEを返す
755+ */
756+bool object_is_melee_weapon(object_type *o_ptr)
757+{
758+ if (TV_DIGGING <= o_ptr->tval && o_ptr->tval <= TV_SWORD) return TRUE;
759+
760+ return FALSE;
761+}
762+
763+
764+/*!
765+ * @brief オブジェクトが装備可能であるかを返す / Wearable including all weapon, all armour, bow, light source, amulet, and ring
766+ * @param o_ptr 対象のオブジェクト構造体ポインタ
767+ * @return 装備可能ならばTRUEを返す
768+ */
769+bool object_is_wearable(object_type *o_ptr)
770+{
771+ if (TV_WEARABLE_BEGIN <= o_ptr->tval && o_ptr->tval <= TV_WEARABLE_END) return TRUE;
772+
773+ return FALSE;
774+}
775+
776+
777+/*!
778+ * @brief オブジェクトが装備品であるかを返す(object_is_wearableに矢弾を含む) / Equipment including all wearable objects and ammo
779+ * @param o_ptr 対象のオブジェクト構造体ポインタ
780+ * @return 装備品ならばTRUEを返す
781+ */
782+bool object_is_equipment(object_type *o_ptr)
783+{
784+ if (TV_EQUIP_BEGIN <= o_ptr->tval && o_ptr->tval <= TV_EQUIP_END) return TRUE;
785+
786+ return FALSE;
787+}
788+
789+
790+/*!
791+ * @brief オブジェクトが強化不能武器であるかを返す / Poison needle can not be enchanted
792+ * @param o_ptr 対象のオブジェクト構造体ポインタ
793+ * @return 強化不能ならばTRUEを返す
794+ */
795+bool object_refuse_enchant_weapon(object_type *o_ptr)
796+{
797+ if (o_ptr->tval == TV_SWORD && o_ptr->sval == SV_DOKUBARI) return TRUE;
798+
799+ return FALSE;
800+}
801+
802+
803+/*!
804+ * @brief オブジェクトが強化可能武器であるかを返す /
805+ * Check if an object is weapon (including bows and ammo) and allows enchantment
806+ * @param o_ptr 対象のオブジェクト構造体ポインタ
807+ * @return 強化可能ならばTRUEを返す
808+ */
809+bool object_allow_enchant_weapon(object_type *o_ptr)
810+{
811+ if (object_is_weapon_ammo(o_ptr) && !object_refuse_enchant_weapon(o_ptr)) return TRUE;
812+
813+ return FALSE;
814+}
815+
816+
817+/*!
818+ * @brief オブジェクトが強化可能な近接武器であるかを返す /
819+ * Check if an object is melee weapon and allows enchantment
820+ * @param o_ptr 対象のオブジェクト構造体ポインタ
821+ * @return 強化可能な近接武器ならばTRUEを返す
822+ */
823+bool object_allow_enchant_melee_weapon(object_type *o_ptr)
824+{
825+ if (object_is_melee_weapon(o_ptr) && !object_refuse_enchant_weapon(o_ptr)) return TRUE;
826+
827+ return FALSE;
828+}
829+
830+
831+/*!
832+ * @brief オブジェクトが鍛冶師のエッセンス付加済みかを返す /
833+ * Check if an object is made by a smith's special ability
834+ * @param o_ptr 対象のオブジェクト構造体ポインタ
835+ * @return エッセンス付加済みならばTRUEを返す
836+ */
837+bool object_is_smith(object_type *o_ptr)
838+{
839+ if (object_is_weapon_armour_ammo(o_ptr) && o_ptr->xtra3) return TRUE;
840+
841+ return FALSE;
842+}
843+
844+/*!
845+ * @brief オブジェクトがアーティファクトかを返す /
846+ * Check if an object is artifact
847+ * @param o_ptr 対象のオブジェクト構造体ポインタ
848+ * @return アーティファクトならばTRUEを返す
849+ */
850+bool object_is_artifact(object_type *o_ptr)
851+{
852+ if (object_is_fixed_artifact(o_ptr) || o_ptr->art_name) return TRUE;
853+
854+ return FALSE;
855+}
856+
857+
858+/*!
859+ * @brief オブジェクトがランダムアーティファクトかを返す /
860+ * Check if an object is random artifact
861+ * @param o_ptr 対象のオブジェクト構造体ポインタ
862+ * @return ランダムアーティファクトならばTRUEを返す
863+ */
864+bool object_is_random_artifact(object_type *o_ptr)
865+{
866+ if (object_is_artifact(o_ptr) && !object_is_fixed_artifact(o_ptr)) return TRUE;
867+
868+ return FALSE;
869+}
870+
871+/*!
872+ * @brief オブジェクトが通常のアイテム(アーティファクト、エゴ、鍛冶師エッセンス付加いずれでもない)かを返す /
873+ * Check if an object is neither artifact, ego, nor 'smith' object
874+ * @param o_ptr 対象のオブジェクト構造体ポインタ
875+ * @return 通常のアイテムならばTRUEを返す
876+ */
877+bool object_is_nameless(object_type *o_ptr)
878+{
879+ if (!object_is_artifact(o_ptr) && !object_is_ego(o_ptr) && !object_is_smith(o_ptr))
880+ return TRUE;
881+
882+ return FALSE;
883+}
884+
885+
886+/*!
887+ * @brief オブジェクトが両手持ち可能な武器かを返す /
888+ * Check if an object is melee weapon and allows wielding with two-hands
889+ * @param o_ptr 対象のオブジェクト構造体ポインタ
890+ * @return 両手持ち可能ならばTRUEを返す
891+ */
892+bool object_allow_two_hands_wielding(object_type *o_ptr)
893+{
894+ if (object_is_melee_weapon(o_ptr) && ((o_ptr->weight > 99) || (o_ptr->tval == TV_POLEARM))) return TRUE;
895+
896+ return FALSE;
897+}
--- a/src/object-hook.h
+++ b/src/object-hook.h
@@ -26,3 +26,24 @@ extern bool item_tester_hook_recharge(object_type *o_ptr);
2626 extern bool item_tester_learn_spell(object_type *o_ptr);
2727 extern bool item_tester_high_level_book(object_type *o_ptr);
2828 extern bool item_tester_refill_lantern(object_type *o_ptr);
29+
30+extern bool object_is_potion(object_type *o_ptr);
31+extern bool object_is_shoukinkubi(object_type *o_ptr);
32+extern bool object_is_favorite(object_type *o_ptr);
33+extern bool object_is_rare(object_type *o_ptr);
34+extern bool object_is_weapon(object_type *o_ptr);
35+extern bool object_is_weapon_ammo(object_type *o_ptr);
36+extern bool object_is_ammo(object_type *o_ptr);
37+extern bool object_is_armour(object_type *o_ptr);
38+extern bool object_is_weapon_armour_ammo(object_type *o_ptr);
39+extern bool object_is_melee_weapon(object_type *o_ptr);
40+extern bool object_is_wearable(object_type *o_ptr);
41+extern bool object_is_equipment(object_type *o_ptr);
42+extern bool object_refuse_enchant_weapon(object_type *o_ptr);
43+extern bool object_allow_enchant_weapon(object_type *o_ptr);
44+extern bool object_allow_enchant_melee_weapon(object_type *o_ptr);
45+extern bool object_is_smith(object_type *o_ptr);
46+extern bool object_is_artifact(object_type *o_ptr);
47+extern bool object_is_random_artifact(object_type *o_ptr);
48+extern bool object_is_nameless(object_type *o_ptr);
49+extern bool object_allow_two_hands_wielding(object_type *o_ptr);
\ No newline at end of file
--- a/src/object1.c
+++ b/src/object1.c
@@ -14,6 +14,7 @@
1414 #include "angband.h"
1515 #include "artifact.h"
1616 #include "cmd-activate.h"
17+#include "object-hook.h"
1718
1819 #if defined(MACINTOSH) || defined(MACH_O_CARBON)
1920 #ifdef verify
--- a/src/player-damage.c
+++ b/src/player-damage.c
@@ -1,6 +1,7 @@
11 #include "angband.h"
22 #include "player-damage.h"
33 #include "artifact.h"
4+#include "object-hook.h"
45
56
67 /*!
--- a/src/player-status.c
+++ b/src/player-status.c
@@ -4,6 +4,7 @@
44 #include "artifact.h"
55 #include "avatar.h"
66 #include "spells-status.h"
7+#include "object-hook.h"
78
89 /* Hack, monk armour */
910 static bool monk_armour_aux;
--- a/src/spells1.c
+++ b/src/spells1.c
@@ -32,6 +32,7 @@
3232 #include "avatar.h"
3333 #include "player-status.h"
3434 #include "realm-hex.h"
35+#include "object-hook.h"
3536
3637
3738 static int rakubadam_m; /*!< 振り落とされた際のダメージ量 */
--- a/src/spells2.c
+++ b/src/spells2.c
@@ -26,6 +26,7 @@
2626
2727 #include "spells-status.h"
2828 #include "realm-hex.h"
29+#include "object-hook.h"
2930
3031 /*!
3132 * @brief プレイヤー周辺の地形を感知する
--- a/src/store.c
+++ b/src/store.c
@@ -19,6 +19,7 @@
1919 #include "cmd-spell.h"
2020 #include "rumor.h"
2121 #include "player-status.h"
22+#include "object-hook.h"
2223
2324 #define MIN_STOCK 12
2425
--- a/src/wizard2.c
+++ b/src/wizard2.c
@@ -23,6 +23,7 @@
2323 #include "spells-object.h"
2424 #include "spells-summon.h"
2525 #include "spells-status.h"
26+#include "object-hook.h"
2627
2728 #ifdef ALLOW_WIZARD
2829
Show on old repository browser