OSDN Git Service

[Refactor] #37353 obj_kind.c を object-hook.c に統合。 / Integrate obj_kind.c to object...
authorDeskull <deskull@users.sourceforge.jp>
Wed, 13 Feb 2019 13:25:06 +0000 (22:25 +0900)
committerDeskull <deskull@users.sourceforge.jp>
Wed, 13 Feb 2019 13:26:26 +0000 (22:26 +0900)
24 files changed:
Hengband_vcs2017/Hengband/Hengband.vcxproj
src/artifact.c
src/autopick.c
src/cave.c
src/cmd-pet.c
src/cmd4.c
src/dungeon.c
src/effects.c
src/externs.h
src/flavor.c
src/load.c
src/melee1.c
src/monster-process.c
src/obj_kind.c [deleted file]
src/object-curse.c
src/object-hook.c
src/object-hook.h
src/object1.c
src/player-damage.c
src/player-status.c
src/spells1.c
src/spells2.c
src/store.c
src/wizard2.c

index 77f7294..7a0d813 100644 (file)
     <ClCompile Include="..\..\src\mspells3.c" />\r
     <ClCompile Include="..\..\src\mspells4.c" />\r
     <ClCompile Include="..\..\src\mutation.c" />\r
-    <ClCompile Include="..\..\src\obj_kind.c" />\r
     <ClCompile Include="..\..\src\object1.c" />\r
     <ClCompile Include="..\..\src\object2.c" />\r
     <ClCompile Include="..\..\src\racial.c" />\r
index 1557dc8..5d2fc4f 100644 (file)
@@ -15,6 +15,7 @@
 #include "avatar.h"
 #include "cmd-activate.h"
 #include "object-curse.h"
+#include "object-hook.h"
 #include "artifact.h"
 
 static bool has_extreme_damage_rate(object_type *o_ptr);
index 21f72f9..86ce03c 100644 (file)
@@ -14,6 +14,7 @@
 #include "angband.h"
 #include "store.h"
 #include "player-status.h"
+#include "object-hook.h"
 
 #define MAX_LINELEN 1024
 
index d169599..a9af2ba 100644 (file)
@@ -19,6 +19,7 @@
 #include "angband.h"
 #include "world.h"
 #include "projection.h"
+#include "object-hook.h"
 
 static byte display_autopick; /*!< 自動拾い状態の設定フラグ */
 static int match_autopick;
index 1b3cf7f..fe15caf 100644 (file)
@@ -2,6 +2,7 @@
 #include "melee.h"
 #include "sort.h"
 #include "player-status.h"
+#include "object-hook.h"
 
 /*!
 * @brief プレイヤーの騎乗/下馬処理判定
index 652c961..dbe51fc 100644 (file)
@@ -49,6 +49,7 @@
 #include "store.h"
 #include "artifact.h"
 #include "avatar.h"
+#include "object-hook.h"
 
 
 /*
index 6ac3424..b2d46e4 100644 (file)
@@ -37,6 +37,7 @@
 #include "player-status.h"
 #include "cmd-spell.h"
 #include "realm-hex.h"
+#include "object-hook.h"
 
 static bool load = TRUE; /*!<ロード処理中の分岐フラグ*/
 static int wild_regen = 20; /*!<広域マップ移動時の自然回復処理カウンタ(広域マップ1マス毎に20回処理を基本とする)*/
index 629437c..1107e77 100644 (file)
@@ -19,6 +19,7 @@
 #include "player-status.h"
 #include "spells-status.h"
 #include "realm-hex.h"
+#include "object-hook.h"
 
 /*!
  * @brief プレイヤーの継続行動を設定する。
index 1fa1eda..5862c1f 100644 (file)
@@ -1375,28 +1375,6 @@ extern void py_pickup_floor(bool pickup);
 /* variable.c */
 extern bool easy_floor;
 
-/* obj_kind.c */
-extern bool object_is_potion(object_type *o_ptr);
-extern bool object_is_shoukinkubi(object_type *o_ptr);
-extern bool object_is_favorite(object_type *o_ptr);
-extern bool object_is_rare(object_type *o_ptr);
-extern bool object_is_weapon(object_type *o_ptr);
-extern bool object_is_weapon_ammo(object_type *o_ptr);
-extern bool object_is_ammo(object_type *o_ptr);
-extern bool object_is_armour(object_type *o_ptr);
-extern bool object_is_weapon_armour_ammo(object_type *o_ptr);
-extern bool object_is_melee_weapon(object_type *o_ptr);
-extern bool object_is_wearable(object_type *o_ptr);
-extern bool object_is_equipment(object_type *o_ptr);
-extern bool object_refuse_enchant_weapon(object_type *o_ptr);
-extern bool object_allow_enchant_weapon(object_type *o_ptr);
-extern bool object_allow_enchant_melee_weapon(object_type *o_ptr);
-extern bool object_is_smith(object_type *o_ptr);
-extern bool object_is_artifact(object_type *o_ptr);
-extern bool object_is_random_artifact(object_type *o_ptr);
-extern bool object_is_nameless(object_type *o_ptr);
-extern bool object_allow_two_hands_wielding(object_type *o_ptr);
-
 /* wild.c */
 extern void set_floor_and_wall(DUNGEON_IDX type);
 extern void wilderness_gen(void);
index f0c3fec..0851860 100644 (file)
@@ -13,6 +13,7 @@
 #include "angband.h"
 #include "player-status.h"
 #include "shoot.h"
+#include "object-hook.h"
 
 /*!
  * @brief 最初から簡易な名称が明らかになるベースアイテムの判定。 /  Certain items, if aware, are known instantly 
index fe19e7a..7a6291e 100644 (file)
@@ -49,6 +49,7 @@
 #include "artifact.h"
 #include "avatar.h"
 #include "spells-status.h"
+#include "object-hook.h"
 
 
 /*
index ea282c0..f414abe 100644 (file)
@@ -22,6 +22,7 @@
 #include "avatar.h"
 #include "player-status.h"
 #include "realm-hex.h"
+#include "object-hook.h"
 
 
 
index ef776e6..2d999df 100644 (file)
@@ -22,6 +22,7 @@
 #include "quest.h"
 #include "avatar.h"
 #include "realm-hex.h"
+#include "object-hook.h"
 
 
 /*!
diff --git a/src/obj_kind.c b/src/obj_kind.c
deleted file mode 100644 (file)
index 1db11bf..0000000
+++ /dev/null
@@ -1,393 +0,0 @@
-/*!
- * @file obj_kind.c
- * @brief ベースアイテムの実装
- * @date 2014/01/10
- * @author
- * 2014 Deskull rearranged comment for Doxygen.
- */
-
-#include "angband.h"
-
-/*!
- * @brief オブジェクトが薬であるかを返す
- * @param o_ptr 対象のオブジェクト構造体ポインタ
- * @return オブジェクトが薬ならばTRUEを返す
- */
-bool object_is_potion(object_type *o_ptr)
-{
-       return (k_info[o_ptr->k_idx].tval == TV_POTION);
-}
-
-
-/*!
- * @brief オブジェクトが賞金首の報酬対象になるかを返す
- * @param o_ptr 対象のオブジェクト構造体ポインタ
- * @return オブジェクトが報酬対象になるならTRUEを返す
- */
-bool object_is_shoukinkubi(object_type *o_ptr)
-{
-       int i;
-
-       /* Require corpse or skeleton */
-       if (o_ptr->tval != TV_CORPSE) return FALSE;
-
-       /* No wanted monsters in vanilla town */
-       if (vanilla_town) return FALSE;
-
-       /* Today's wanted */
-       if (p_ptr->today_mon > 0 && (streq(r_name + r_info[o_ptr->pval].name, r_name + r_info[today_mon].name))) return TRUE;
-
-       /* Tsuchinoko */
-       if (o_ptr->pval == MON_TSUCHINOKO) return TRUE;
-
-       /* Unique monster */
-       for (i = 0; i < MAX_KUBI; i++)
-               if (o_ptr->pval == kubi_r_idx[i]) break;
-       if (i < MAX_KUBI) return TRUE;
-
-       /* Not wanted */
-       return FALSE;
-}
-
-/*!
- * @brief オブジェクトがプレイヤーの職業に応じた適正武器か否かを返す / Favorite weapons
- * @param o_ptr 対象のオブジェクト構造体ポインタ
- * @return オブジェクトが適正武器ならばTRUEを返す
- */
-bool object_is_favorite(object_type *o_ptr)
-{
-       /* Only melee weapons match */
-       if (!(o_ptr->tval == TV_POLEARM ||
-             o_ptr->tval == TV_SWORD ||
-             o_ptr->tval == TV_DIGGING ||
-             o_ptr->tval == TV_HAFTED))
-       {
-               return FALSE;
-       }
-
-       /* Favorite weapons are varied depend on the class */
-       switch (p_ptr->pclass)
-       {
-       case CLASS_PRIEST:
-       {
-               BIT_FLAGS flgs[TR_FLAG_SIZE];
-               object_flags_known(o_ptr, flgs);
-
-               if (!have_flag(flgs, TR_BLESSED) && 
-                   !(o_ptr->tval == TV_HAFTED))
-                       return FALSE;
-               break;
-       }
-
-       case CLASS_MONK:
-       case CLASS_FORCETRAINER:
-               /* Icky to wield? */
-               if (!(s_info[p_ptr->pclass].w_max[o_ptr->tval-TV_WEAPON_BEGIN][o_ptr->sval]))
-                       return FALSE;
-               break;
-
-       case CLASS_BEASTMASTER:
-       case CLASS_CAVALRY:
-       {
-               BIT_FLAGS flgs[TR_FLAG_SIZE];
-               object_flags_known(o_ptr, flgs);
-
-               /* Is it known to be suitable to using while riding? */
-               if (!(have_flag(flgs, TR_RIDING)))
-                       return FALSE;
-
-               break;
-       }
-
-       case CLASS_NINJA:
-               /* Icky to wield? */
-               if (s_info[p_ptr->pclass].w_max[o_ptr->tval-TV_WEAPON_BEGIN][o_ptr->sval] <= WEAPON_EXP_BEGINNER)
-                       return FALSE;
-               break;
-
-       default:
-               /* All weapons are okay for non-special classes */
-               return TRUE;
-       }
-
-       return TRUE;
-}
-
-
-/*!
- * @brief オブジェクトがレアアイテムかどうかを返す /
- * Rare weapons/aromors including Blade of Chaos, Dragon armors, etc.
- * @param o_ptr 対象のオブジェクト構造体ポインタ
- * @return レアアイテムならばTRUEを返す
- */
-bool object_is_rare(object_type *o_ptr)
-{
-       switch(o_ptr->tval)
-       {
-       case TV_HAFTED:
-               if (o_ptr->sval == SV_MACE_OF_DISRUPTION ||
-                   o_ptr->sval == SV_WIZSTAFF) return TRUE;
-               break;
-
-       case TV_POLEARM:
-               if (o_ptr->sval == SV_SCYTHE_OF_SLICING ||
-                   o_ptr->sval == SV_DEATH_SCYTHE) return TRUE;
-               break;
-
-       case TV_SWORD:
-               if (o_ptr->sval == SV_BLADE_OF_CHAOS ||
-                   o_ptr->sval == SV_DIAMOND_EDGE ||
-                   o_ptr->sval == SV_DOKUBARI ||
-                   o_ptr->sval == SV_HAYABUSA) return TRUE;
-               break;
-
-       case TV_SHIELD:
-               if (o_ptr->sval == SV_DRAGON_SHIELD ||
-                   o_ptr->sval == SV_MIRROR_SHIELD) return TRUE;
-               break;
-
-       case TV_HELM:
-               if (o_ptr->sval == SV_DRAGON_HELM) return TRUE;
-               break;
-
-       case TV_BOOTS:
-               if (o_ptr->sval == SV_PAIR_OF_DRAGON_GREAVE) return TRUE;
-               break;
-
-       case TV_CLOAK:
-               if (o_ptr->sval == SV_ELVEN_CLOAK ||
-                   o_ptr->sval == SV_ETHEREAL_CLOAK ||
-                   o_ptr->sval == SV_SHADOW_CLOAK) return TRUE;
-               break;
-
-       case TV_GLOVES:
-               if (o_ptr->sval == SV_SET_OF_DRAGON_GLOVES) return TRUE;
-               break;
-
-       case TV_SOFT_ARMOR:
-               if (o_ptr->sval == SV_KUROSHOUZOKU ||
-                   o_ptr->sval == SV_ABUNAI_MIZUGI) return TRUE;
-               break;
-
-       case TV_DRAG_ARMOR:
-               return TRUE;
-
-       default:
-               break;
-       }
-
-       /* Any others are not "rare" objects. */
-       return FALSE;
-}
-
-
-/*!
- * @brief オブジェクトが武器として装備できるかどうかを返す / Check if an object is weapon (including bows and ammo)
- * @param o_ptr 対象のオブジェクト構造体ポインタ
- * @return 武器として使えるならばTRUEを返す
- */
-bool object_is_weapon(object_type *o_ptr)
-{
-       if (TV_WEAPON_BEGIN <= o_ptr->tval && o_ptr->tval <= TV_WEAPON_END) return TRUE;
-
-       return FALSE;
-}
-
-
-/*!
- * @brief オブジェクトが武器や矢弾として使用できるかを返す / Check if an object is weapon (including bows and ammo)
- * Rare weapons/aromors including Blade of Chaos, Dragon armors, etc.
- * @param o_ptr 対象のオブジェクト構造体ポインタ
- * @return 武器や矢弾として使えるならばTRUEを返す
- */
-bool object_is_weapon_ammo(object_type *o_ptr)
-{
-       if (TV_MISSILE_BEGIN <= o_ptr->tval && o_ptr->tval <= TV_WEAPON_END) return TRUE;
-
-       return FALSE;
-}
-
-/*!
- * @brief オブジェクトが矢弾として使用できるかどうかを返す / Check if an object is ammo
- * @param o_ptr 対象のオブジェクト構造体ポインタ
- * @return 矢弾として使えるならばTRUEを返す
- */
-bool object_is_ammo(object_type *o_ptr)
-{
-       if (TV_MISSILE_BEGIN <= o_ptr->tval && o_ptr->tval <= TV_MISSILE_END) return TRUE;
-
-       return FALSE;
-}
-
-/*!
- * @brief オブジェクトが防具として装備できるかどうかを返す / Check if an object is armour
- * @param o_ptr 対象のオブジェクト構造体ポインタ
- * @return 矢弾として使えるならばTRUEを返す
- */
-bool object_is_armour(object_type *o_ptr)
-{
-       if (TV_ARMOR_BEGIN <= o_ptr->tval && o_ptr->tval <= TV_ARMOR_END) return TRUE;
-
-       return FALSE;
-}
-
-/*!
- * @brief オブジェクトが武器、防具、矢弾として使用できるかを返す / Check if an object is weapon, armour or ammo
- * @param o_ptr 対象のオブジェクト構造体ポインタ
- * @return 武器、防具、矢弾として使えるならばTRUEを返す
- */
-bool object_is_weapon_armour_ammo(object_type *o_ptr)
-{
-       if (object_is_weapon_ammo(o_ptr) || object_is_armour(o_ptr)) return TRUE;
-
-       return FALSE;
-}
-
-
-/*!
- * @brief オブジェクトが近接武器として装備できるかを返す / Melee weapons
- * @param o_ptr 対象のオブジェクト構造体ポインタ
- * @return 近接武器として使えるならばTRUEを返す
- */
-bool object_is_melee_weapon(object_type *o_ptr)
-{
-       if (TV_DIGGING <= o_ptr->tval && o_ptr->tval <= TV_SWORD) return TRUE;
-
-       return FALSE;
-}
-
-
-/*!
- * @brief オブジェクトが装備可能であるかを返す / Wearable including all weapon, all armour, bow, light source, amulet, and ring
- * @param o_ptr 対象のオブジェクト構造体ポインタ
- * @return 装備可能ならばTRUEを返す
- */
-bool object_is_wearable(object_type *o_ptr)
-{
-       if (TV_WEARABLE_BEGIN <= o_ptr->tval && o_ptr->tval <= TV_WEARABLE_END) return TRUE;
-
-       return FALSE;
-}
-
-
-/*!
- * @brief オブジェクトが装備品であるかを返す(object_is_wearableに矢弾を含む) / Equipment including all wearable objects and ammo
- * @param o_ptr 対象のオブジェクト構造体ポインタ
- * @return 装備品ならばTRUEを返す
- */
-bool object_is_equipment(object_type *o_ptr)
-{
-       if (TV_EQUIP_BEGIN <= o_ptr->tval && o_ptr->tval <= TV_EQUIP_END) return TRUE;
-
-       return FALSE;
-}
-
-
-/*!
- * @brief オブジェクトが強化不能武器であるかを返す / Poison needle can not be enchanted
- * @param o_ptr 対象のオブジェクト構造体ポインタ
- * @return 強化不能ならばTRUEを返す
- */
-bool object_refuse_enchant_weapon(object_type *o_ptr)
-{
-       if (o_ptr->tval == TV_SWORD && o_ptr->sval == SV_DOKUBARI) return TRUE;
-
-       return FALSE;
-}
-
-
-/*!
- * @brief オブジェクトが強化可能武器であるかを返す /
- * Check if an object is weapon (including bows and ammo) and allows enchantment
- * @param o_ptr 対象のオブジェクト構造体ポインタ
- * @return 強化可能ならばTRUEを返す
- */
-bool object_allow_enchant_weapon(object_type *o_ptr)
-{
-       if (object_is_weapon_ammo(o_ptr) && !object_refuse_enchant_weapon(o_ptr)) return TRUE;
-
-       return FALSE;
-}
-
-
-/*!
- * @brief オブジェクトが強化可能な近接武器であるかを返す /
- * Check if an object is melee weapon and allows enchantment
- * @param o_ptr 対象のオブジェクト構造体ポインタ
- * @return 強化可能な近接武器ならばTRUEを返す
- */
-bool object_allow_enchant_melee_weapon(object_type *o_ptr)
-{
-       if (object_is_melee_weapon(o_ptr) && !object_refuse_enchant_weapon(o_ptr)) return TRUE;
-
-       return FALSE;
-}
-
-
-/*!
- * @brief オブジェクトが鍛冶師のエッセンス付加済みかを返す /
- * Check if an object is made by a smith's special ability
- * @param o_ptr 対象のオブジェクト構造体ポインタ
- * @return エッセンス付加済みならばTRUEを返す
- */
-bool object_is_smith(object_type *o_ptr)
-{
-       if (object_is_weapon_armour_ammo(o_ptr) && o_ptr->xtra3) return TRUE;
-
-       return FALSE;
-}
-
-/*!
- * @brief オブジェクトがアーティファクトかを返す /
- * Check if an object is artifact
- * @param o_ptr 対象のオブジェクト構造体ポインタ
- * @return アーティファクトならばTRUEを返す
- */
-bool object_is_artifact(object_type *o_ptr)
-{
-       if (object_is_fixed_artifact(o_ptr) || o_ptr->art_name) return TRUE;
-
-       return FALSE;
-}
-
-
-/*!
- * @brief オブジェクトがランダムアーティファクトかを返す /
- * Check if an object is random artifact
- * @param o_ptr 対象のオブジェクト構造体ポインタ
- * @return ランダムアーティファクトならばTRUEを返す
- */
-bool object_is_random_artifact(object_type *o_ptr)
-{
-       if (object_is_artifact(o_ptr) && !object_is_fixed_artifact(o_ptr)) return TRUE;
-
-       return FALSE;
-}
-
-/*!
- * @brief オブジェクトが通常のアイテム(アーティファクト、エゴ、鍛冶師エッセンス付加いずれでもない)かを返す /
- * Check if an object is neither artifact, ego, nor 'smith' object
- * @param o_ptr 対象のオブジェクト構造体ポインタ
- * @return 通常のアイテムならばTRUEを返す
- */
-bool object_is_nameless(object_type *o_ptr)
-{
-       if (!object_is_artifact(o_ptr) && !object_is_ego(o_ptr) && !object_is_smith(o_ptr))
-               return TRUE;
-
-       return FALSE;
-}
-
-
-/*!
- * @brief オブジェクトが両手持ち可能な武器かを返す /
- * Check if an object is melee weapon and allows wielding with two-hands
- * @param o_ptr 対象のオブジェクト構造体ポインタ
- * @return 両手持ち可能ならばTRUEを返す
- */
-bool object_allow_two_hands_wielding(object_type *o_ptr)
-{
-       if (object_is_melee_weapon(o_ptr) && ((o_ptr->weight > 99) || (o_ptr->tval == TV_POLEARM))) return TRUE;
-
-       return FALSE;
-}
index 9e28459..09a5bb4 100644 (file)
@@ -1,4 +1,5 @@
 #include "angband.h"
+#include "object-hook.h"
 
 /*!
  * @brief アイテムに付加される可能性のある呪いを指定する。
index 9ed8faf..5f451a4 100644 (file)
@@ -511,3 +511,387 @@ bool item_tester_refill_lantern(object_type *o_ptr)
        return (FALSE);
 }
 
+
+/*!
+ * @brief オブジェクトが薬であるかを返す
+ * @param o_ptr 対象のオブジェクト構造体ポインタ
+ * @return オブジェクトが薬ならばTRUEを返す
+ */
+bool object_is_potion(object_type *o_ptr)
+{
+       return (k_info[o_ptr->k_idx].tval == TV_POTION);
+}
+
+
+/*!
+ * @brief オブジェクトが賞金首の報酬対象になるかを返す
+ * @param o_ptr 対象のオブジェクト構造体ポインタ
+ * @return オブジェクトが報酬対象になるならTRUEを返す
+ */
+bool object_is_shoukinkubi(object_type *o_ptr)
+{
+       int i;
+
+       /* Require corpse or skeleton */
+       if (o_ptr->tval != TV_CORPSE) return FALSE;
+
+       /* No wanted monsters in vanilla town */
+       if (vanilla_town) return FALSE;
+
+       /* Today's wanted */
+       if (p_ptr->today_mon > 0 && (streq(r_name + r_info[o_ptr->pval].name, r_name + r_info[today_mon].name))) return TRUE;
+
+       /* Tsuchinoko */
+       if (o_ptr->pval == MON_TSUCHINOKO) return TRUE;
+
+       /* Unique monster */
+       for (i = 0; i < MAX_KUBI; i++)
+               if (o_ptr->pval == kubi_r_idx[i]) break;
+       if (i < MAX_KUBI) return TRUE;
+
+       /* Not wanted */
+       return FALSE;
+}
+
+/*!
+ * @brief オブジェクトがプレイヤーの職業に応じた適正武器か否かを返す / Favorite weapons
+ * @param o_ptr 対象のオブジェクト構造体ポインタ
+ * @return オブジェクトが適正武器ならばTRUEを返す
+ */
+bool object_is_favorite(object_type *o_ptr)
+{
+       /* Only melee weapons match */
+       if (!(o_ptr->tval == TV_POLEARM ||
+               o_ptr->tval == TV_SWORD ||
+               o_ptr->tval == TV_DIGGING ||
+               o_ptr->tval == TV_HAFTED))
+       {
+               return FALSE;
+       }
+
+       /* Favorite weapons are varied depend on the class */
+       switch (p_ptr->pclass)
+       {
+       case CLASS_PRIEST:
+       {
+               BIT_FLAGS flgs[TR_FLAG_SIZE];
+               object_flags_known(o_ptr, flgs);
+
+               if (!have_flag(flgs, TR_BLESSED) &&
+                       !(o_ptr->tval == TV_HAFTED))
+                       return FALSE;
+               break;
+       }
+
+       case CLASS_MONK:
+       case CLASS_FORCETRAINER:
+               /* Icky to wield? */
+               if (!(s_info[p_ptr->pclass].w_max[o_ptr->tval - TV_WEAPON_BEGIN][o_ptr->sval]))
+                       return FALSE;
+               break;
+
+       case CLASS_BEASTMASTER:
+       case CLASS_CAVALRY:
+       {
+               BIT_FLAGS flgs[TR_FLAG_SIZE];
+               object_flags_known(o_ptr, flgs);
+
+               /* Is it known to be suitable to using while riding? */
+               if (!(have_flag(flgs, TR_RIDING)))
+                       return FALSE;
+
+               break;
+       }
+
+       case CLASS_NINJA:
+               /* Icky to wield? */
+               if (s_info[p_ptr->pclass].w_max[o_ptr->tval - TV_WEAPON_BEGIN][o_ptr->sval] <= WEAPON_EXP_BEGINNER)
+                       return FALSE;
+               break;
+
+       default:
+               /* All weapons are okay for non-special classes */
+               return TRUE;
+       }
+
+       return TRUE;
+}
+
+
+/*!
+ * @brief オブジェクトがレアアイテムかどうかを返す /
+ * Rare weapons/aromors including Blade of Chaos, Dragon armors, etc.
+ * @param o_ptr 対象のオブジェクト構造体ポインタ
+ * @return レアアイテムならばTRUEを返す
+ */
+bool object_is_rare(object_type *o_ptr)
+{
+       switch (o_ptr->tval)
+       {
+       case TV_HAFTED:
+               if (o_ptr->sval == SV_MACE_OF_DISRUPTION ||
+                       o_ptr->sval == SV_WIZSTAFF) return TRUE;
+               break;
+
+       case TV_POLEARM:
+               if (o_ptr->sval == SV_SCYTHE_OF_SLICING ||
+                       o_ptr->sval == SV_DEATH_SCYTHE) return TRUE;
+               break;
+
+       case TV_SWORD:
+               if (o_ptr->sval == SV_BLADE_OF_CHAOS ||
+                       o_ptr->sval == SV_DIAMOND_EDGE ||
+                       o_ptr->sval == SV_DOKUBARI ||
+                       o_ptr->sval == SV_HAYABUSA) return TRUE;
+               break;
+
+       case TV_SHIELD:
+               if (o_ptr->sval == SV_DRAGON_SHIELD ||
+                       o_ptr->sval == SV_MIRROR_SHIELD) return TRUE;
+               break;
+
+       case TV_HELM:
+               if (o_ptr->sval == SV_DRAGON_HELM) return TRUE;
+               break;
+
+       case TV_BOOTS:
+               if (o_ptr->sval == SV_PAIR_OF_DRAGON_GREAVE) return TRUE;
+               break;
+
+       case TV_CLOAK:
+               if (o_ptr->sval == SV_ELVEN_CLOAK ||
+                       o_ptr->sval == SV_ETHEREAL_CLOAK ||
+                       o_ptr->sval == SV_SHADOW_CLOAK) return TRUE;
+               break;
+
+       case TV_GLOVES:
+               if (o_ptr->sval == SV_SET_OF_DRAGON_GLOVES) return TRUE;
+               break;
+
+       case TV_SOFT_ARMOR:
+               if (o_ptr->sval == SV_KUROSHOUZOKU ||
+                       o_ptr->sval == SV_ABUNAI_MIZUGI) return TRUE;
+               break;
+
+       case TV_DRAG_ARMOR:
+               return TRUE;
+
+       default:
+               break;
+       }
+
+       /* Any others are not "rare" objects. */
+       return FALSE;
+}
+
+
+/*!
+ * @brief オブジェクトが武器として装備できるかどうかを返す / Check if an object is weapon (including bows and ammo)
+ * @param o_ptr 対象のオブジェクト構造体ポインタ
+ * @return 武器として使えるならばTRUEを返す
+ */
+bool object_is_weapon(object_type *o_ptr)
+{
+       if (TV_WEAPON_BEGIN <= o_ptr->tval && o_ptr->tval <= TV_WEAPON_END) return TRUE;
+
+       return FALSE;
+}
+
+
+/*!
+ * @brief オブジェクトが武器や矢弾として使用できるかを返す / Check if an object is weapon (including bows and ammo)
+ * Rare weapons/aromors including Blade of Chaos, Dragon armors, etc.
+ * @param o_ptr 対象のオブジェクト構造体ポインタ
+ * @return 武器や矢弾として使えるならばTRUEを返す
+ */
+bool object_is_weapon_ammo(object_type *o_ptr)
+{
+       if (TV_MISSILE_BEGIN <= o_ptr->tval && o_ptr->tval <= TV_WEAPON_END) return TRUE;
+
+       return FALSE;
+}
+
+/*!
+ * @brief オブジェクトが矢弾として使用できるかどうかを返す / Check if an object is ammo
+ * @param o_ptr 対象のオブジェクト構造体ポインタ
+ * @return 矢弾として使えるならばTRUEを返す
+ */
+bool object_is_ammo(object_type *o_ptr)
+{
+       if (TV_MISSILE_BEGIN <= o_ptr->tval && o_ptr->tval <= TV_MISSILE_END) return TRUE;
+
+       return FALSE;
+}
+
+/*!
+ * @brief オブジェクトが防具として装備できるかどうかを返す / Check if an object is armour
+ * @param o_ptr 対象のオブジェクト構造体ポインタ
+ * @return 矢弾として使えるならばTRUEを返す
+ */
+bool object_is_armour(object_type *o_ptr)
+{
+       if (TV_ARMOR_BEGIN <= o_ptr->tval && o_ptr->tval <= TV_ARMOR_END) return TRUE;
+
+       return FALSE;
+}
+
+/*!
+ * @brief オブジェクトが武器、防具、矢弾として使用できるかを返す / Check if an object is weapon, armour or ammo
+ * @param o_ptr 対象のオブジェクト構造体ポインタ
+ * @return 武器、防具、矢弾として使えるならばTRUEを返す
+ */
+bool object_is_weapon_armour_ammo(object_type *o_ptr)
+{
+       if (object_is_weapon_ammo(o_ptr) || object_is_armour(o_ptr)) return TRUE;
+
+       return FALSE;
+}
+
+
+/*!
+ * @brief オブジェクトが近接武器として装備できるかを返す / Melee weapons
+ * @param o_ptr 対象のオブジェクト構造体ポインタ
+ * @return 近接武器として使えるならばTRUEを返す
+ */
+bool object_is_melee_weapon(object_type *o_ptr)
+{
+       if (TV_DIGGING <= o_ptr->tval && o_ptr->tval <= TV_SWORD) return TRUE;
+
+       return FALSE;
+}
+
+
+/*!
+ * @brief オブジェクトが装備可能であるかを返す / Wearable including all weapon, all armour, bow, light source, amulet, and ring
+ * @param o_ptr 対象のオブジェクト構造体ポインタ
+ * @return 装備可能ならばTRUEを返す
+ */
+bool object_is_wearable(object_type *o_ptr)
+{
+       if (TV_WEARABLE_BEGIN <= o_ptr->tval && o_ptr->tval <= TV_WEARABLE_END) return TRUE;
+
+       return FALSE;
+}
+
+
+/*!
+ * @brief オブジェクトが装備品であるかを返す(object_is_wearableに矢弾を含む) / Equipment including all wearable objects and ammo
+ * @param o_ptr 対象のオブジェクト構造体ポインタ
+ * @return 装備品ならばTRUEを返す
+ */
+bool object_is_equipment(object_type *o_ptr)
+{
+       if (TV_EQUIP_BEGIN <= o_ptr->tval && o_ptr->tval <= TV_EQUIP_END) return TRUE;
+
+       return FALSE;
+}
+
+
+/*!
+ * @brief オブジェクトが強化不能武器であるかを返す / Poison needle can not be enchanted
+ * @param o_ptr 対象のオブジェクト構造体ポインタ
+ * @return 強化不能ならばTRUEを返す
+ */
+bool object_refuse_enchant_weapon(object_type *o_ptr)
+{
+       if (o_ptr->tval == TV_SWORD && o_ptr->sval == SV_DOKUBARI) return TRUE;
+
+       return FALSE;
+}
+
+
+/*!
+ * @brief オブジェクトが強化可能武器であるかを返す /
+ * Check if an object is weapon (including bows and ammo) and allows enchantment
+ * @param o_ptr 対象のオブジェクト構造体ポインタ
+ * @return 強化可能ならばTRUEを返す
+ */
+bool object_allow_enchant_weapon(object_type *o_ptr)
+{
+       if (object_is_weapon_ammo(o_ptr) && !object_refuse_enchant_weapon(o_ptr)) return TRUE;
+
+       return FALSE;
+}
+
+
+/*!
+ * @brief オブジェクトが強化可能な近接武器であるかを返す /
+ * Check if an object is melee weapon and allows enchantment
+ * @param o_ptr 対象のオブジェクト構造体ポインタ
+ * @return 強化可能な近接武器ならばTRUEを返す
+ */
+bool object_allow_enchant_melee_weapon(object_type *o_ptr)
+{
+       if (object_is_melee_weapon(o_ptr) && !object_refuse_enchant_weapon(o_ptr)) return TRUE;
+
+       return FALSE;
+}
+
+
+/*!
+ * @brief オブジェクトが鍛冶師のエッセンス付加済みかを返す /
+ * Check if an object is made by a smith's special ability
+ * @param o_ptr 対象のオブジェクト構造体ポインタ
+ * @return エッセンス付加済みならばTRUEを返す
+ */
+bool object_is_smith(object_type *o_ptr)
+{
+       if (object_is_weapon_armour_ammo(o_ptr) && o_ptr->xtra3) return TRUE;
+
+       return FALSE;
+}
+
+/*!
+ * @brief オブジェクトがアーティファクトかを返す /
+ * Check if an object is artifact
+ * @param o_ptr 対象のオブジェクト構造体ポインタ
+ * @return アーティファクトならばTRUEを返す
+ */
+bool object_is_artifact(object_type *o_ptr)
+{
+       if (object_is_fixed_artifact(o_ptr) || o_ptr->art_name) return TRUE;
+
+       return FALSE;
+}
+
+
+/*!
+ * @brief オブジェクトがランダムアーティファクトかを返す /
+ * Check if an object is random artifact
+ * @param o_ptr 対象のオブジェクト構造体ポインタ
+ * @return ランダムアーティファクトならばTRUEを返す
+ */
+bool object_is_random_artifact(object_type *o_ptr)
+{
+       if (object_is_artifact(o_ptr) && !object_is_fixed_artifact(o_ptr)) return TRUE;
+
+       return FALSE;
+}
+
+/*!
+ * @brief オブジェクトが通常のアイテム(アーティファクト、エゴ、鍛冶師エッセンス付加いずれでもない)かを返す /
+ * Check if an object is neither artifact, ego, nor 'smith' object
+ * @param o_ptr 対象のオブジェクト構造体ポインタ
+ * @return 通常のアイテムならばTRUEを返す
+ */
+bool object_is_nameless(object_type *o_ptr)
+{
+       if (!object_is_artifact(o_ptr) && !object_is_ego(o_ptr) && !object_is_smith(o_ptr))
+               return TRUE;
+
+       return FALSE;
+}
+
+
+/*!
+ * @brief オブジェクトが両手持ち可能な武器かを返す /
+ * Check if an object is melee weapon and allows wielding with two-hands
+ * @param o_ptr 対象のオブジェクト構造体ポインタ
+ * @return 両手持ち可能ならばTRUEを返す
+ */
+bool object_allow_two_hands_wielding(object_type *o_ptr)
+{
+       if (object_is_melee_weapon(o_ptr) && ((o_ptr->weight > 99) || (o_ptr->tval == TV_POLEARM))) return TRUE;
+
+       return FALSE;
+}
index b67ef39..9e7ca50 100644 (file)
@@ -26,3 +26,24 @@ extern bool item_tester_hook_recharge(object_type *o_ptr);
 extern bool item_tester_learn_spell(object_type *o_ptr);
 extern bool item_tester_high_level_book(object_type *o_ptr);
 extern bool item_tester_refill_lantern(object_type *o_ptr);
+
+extern bool object_is_potion(object_type *o_ptr);
+extern bool object_is_shoukinkubi(object_type *o_ptr);
+extern bool object_is_favorite(object_type *o_ptr);
+extern bool object_is_rare(object_type *o_ptr);
+extern bool object_is_weapon(object_type *o_ptr);
+extern bool object_is_weapon_ammo(object_type *o_ptr);
+extern bool object_is_ammo(object_type *o_ptr);
+extern bool object_is_armour(object_type *o_ptr);
+extern bool object_is_weapon_armour_ammo(object_type *o_ptr);
+extern bool object_is_melee_weapon(object_type *o_ptr);
+extern bool object_is_wearable(object_type *o_ptr);
+extern bool object_is_equipment(object_type *o_ptr);
+extern bool object_refuse_enchant_weapon(object_type *o_ptr);
+extern bool object_allow_enchant_weapon(object_type *o_ptr);
+extern bool object_allow_enchant_melee_weapon(object_type *o_ptr);
+extern bool object_is_smith(object_type *o_ptr);
+extern bool object_is_artifact(object_type *o_ptr);
+extern bool object_is_random_artifact(object_type *o_ptr);
+extern bool object_is_nameless(object_type *o_ptr);
+extern bool object_allow_two_hands_wielding(object_type *o_ptr);
\ No newline at end of file
index 6c29b9f..d824d4c 100644 (file)
@@ -14,6 +14,7 @@
 #include "angband.h"
 #include "artifact.h"
 #include "cmd-activate.h"
+#include "object-hook.h"
 
 #if defined(MACINTOSH) || defined(MACH_O_CARBON)
 #ifdef verify
index 5e398bf..426b262 100644 (file)
@@ -1,6 +1,7 @@
 #include "angband.h"
 #include "player-damage.h"
 #include "artifact.h"
+#include "object-hook.h"
 
 
 /*!
index 59c5e76..e7cfd7a 100644 (file)
@@ -4,6 +4,7 @@
 #include "artifact.h"
 #include "avatar.h"
 #include "spells-status.h"
+#include "object-hook.h"
 
 /* Hack, monk armour */
 static bool monk_armour_aux;
index 826fc11..f87bdb0 100644 (file)
@@ -32,6 +32,7 @@
 #include "avatar.h"
 #include "player-status.h"
 #include "realm-hex.h"
+#include "object-hook.h"
 
 
 static int rakubadam_m; /*!< 振り落とされた際のダメージ量 */
index 299b5b7..69f948c 100644 (file)
@@ -26,6 +26,7 @@
 
 #include "spells-status.h"
 #include "realm-hex.h"
+#include "object-hook.h"
 
 /*!
  * @brief プレイヤー周辺の地形を感知する
index 4d5755b..7333c68 100644 (file)
@@ -19,6 +19,7 @@
 #include "cmd-spell.h"
 #include "rumor.h"
 #include "player-status.h"
+#include "object-hook.h"
 
 #define MIN_STOCK 12
 
index 5fbcbc9..64786f2 100644 (file)
@@ -23,6 +23,7 @@
 #include "spells-object.h"
 #include "spells-summon.h"
 #include "spells-status.h"
+#include "object-hook.h"
 
 #ifdef ALLOW_WIZARD