OSDN Git Service

[Refactor] #37353 アイテム条件処理を object-hook.c/h へ分離。
authorDeskull <deskull@users.sourceforge.jp>
Mon, 24 Sep 2018 02:05:30 +0000 (11:05 +0900)
committerDeskull <deskull@users.sourceforge.jp>
Mon, 24 Sep 2018 02:05:30 +0000 (11:05 +0900)
Separate item hook functions to object-hook.c/h.

17 files changed:
Hengband_vcs2015/Hengband/Hengband.vcxproj
Hengband_vcs2015/Hengband/Hengband.vcxproj.filters
src/Makefile.am
src/bldg.c
src/cmd-activate.c
src/cmd-eat.c
src/cmd-item.c
src/cmd-quaff.c
src/cmd-read.c
src/cmd2.c
src/externs.h
src/object-hook.c [new file with mode: 0644]
src/object-hook.h [new file with mode: 0644]
src/object2.c
src/racial.c
src/realm-hex.c
src/spells3.c

index f878c89..f3ecab5 100644 (file)
     <ClCompile Include="..\..\src\floor-save.c" />\r
     <ClCompile Include="..\..\src\history.c" />\r
     <ClCompile Include="..\..\src\monster-hook.c" />\r
+    <ClCompile Include="..\..\src\object-hook.c" />\r
     <ClCompile Include="..\..\src\realm-craft.c" />\r
     <ClCompile Include="..\..\src\realm-crusade.c" />\r
     <ClCompile Include="..\..\src\realm-daemon.c" />\r
     <ClInclude Include="..\..\src\kajitips.h" />\r
     <ClInclude Include="..\..\src\mindtips.h" />\r
     <ClInclude Include="..\..\src\monster-hook.h" />\r
+    <ClInclude Include="..\..\src\object-hook.h" />\r
     <ClInclude Include="..\..\src\readdib.h" />\r
     <ClInclude Include="..\..\src\realm-arcane.h" />\r
     <ClInclude Include="..\..\src\realm-chaos.h" />\r
index 3302885..efa5da6 100644 (file)
     <ClCompile Include="..\..\src\monster-hook.c">\r
       <Filter>Source</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\src\object-hook.c">\r
+      <Filter>Source</Filter>\r
+    </ClCompile>\r
   </ItemGroup>\r
   <ItemGroup>\r
     <ClInclude Include="..\..\src\angband.h">\r
     <ClInclude Include="..\..\src\monster-hook.h">\r
       <Filter>Header</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\src\object-hook.h">\r
+      <Filter>Header</Filter>\r
+    </ClInclude>\r
   </ItemGroup>\r
   <ItemGroup>\r
     <ResourceCompile Include="..\..\src\angband.rc" />\r
index e634d78..4068cfc 100644 (file)
@@ -17,8 +17,9 @@ hengband_SOURCES = \
        h-system.h h-type.h inet.c init1.c init2.c init.h japanese.c load.c \
        main.c main-x11.c main-gcu.c mane.c melee1.c melee2.c mind.c \
        monster-hook.c monster-hook.h monster1.c \
-       monster2.c mspells1.c mspells2.c mspells3.c mspells4.c mutation.c object1.c \
-       object2.c obj_kind.c racial.c realm-arcane.c \
+       monster2.c mspells1.c mspells2.c mspells3.c mspells4.c mutation.c \
+       object-hook.c object-hook.h object1.c object2.c obj_kind.c racial.c \
+       realm-arcane.c \
        realm-arcane.h realm-chaos.c realm-chaos.h realm-craft.c realm-craft.h \
        realm-crusade.c realm-crusade.h realm-daemon.c realm-daemon.h realm-death.c \
        realm-death.h realm-hex.c realm-hex.h realm-hissatsu.c realm-hissatsu.h \
index 85e70fd..4a31fe4 100644 (file)
@@ -13,7 +13,7 @@
 */
 
 #include "angband.h"
-
+#include "object-hook.h"
 
 /*!
  * ループ中で / hack as in leave_store in store.c
@@ -2812,53 +2812,6 @@ static void list_weapon(object_type *o_ptr, int row, int col)
        put_str(tmp_str, row+7, col+1);
 }
 
-
-/*!
- * @brief 武器匠の「武器」鑑定対象になるかを判定する。/ Hook to specify "weapon"
- * @param o_ptr オブジェクトの構造体の参照ポインタ。
- * @return 対象になるならTRUEを返す。
- */
-static bool item_tester_hook_melee_weapon(object_type *o_ptr)
-{
-       switch (o_ptr->tval)
-       {
-               case TV_HAFTED:
-               case TV_POLEARM:
-               case TV_DIGGING:
-               {
-                       return (TRUE);
-               }
-               case TV_SWORD:
-               {
-                       if (o_ptr->sval != SV_DOKUBARI) return (TRUE);
-               }
-       }
-
-       return (FALSE);
-}
-
-
-/*!
- * @brief 武器匠の「矢弾」鑑定対象になるかを判定する。/ Hook to specify "weapon"
- * @param o_ptr オブジェクトの構造体の参照ポインタ。
- * @return 対象になるならTRUEを返す。
- */
-static bool item_tester_hook_ammo(object_type *o_ptr)
-{
-       switch (o_ptr->tval)
-       {
-               case TV_SHOT:
-               case TV_ARROW:
-               case TV_BOLT:
-               {
-                       return (TRUE);
-               }
-       }
-
-       return (FALSE);
-}
-
-
 /*!
  * @brief 武器匠鑑定1回分(オブジェクト2種)の処理。/ Compare weapons
  * @details 
@@ -2895,7 +2848,7 @@ static int compare_weapons(int bcost)
 
        /* Only compare melee weapons */
        item_tester_no_ryoute = TRUE;
-       item_tester_hook = item_tester_hook_melee_weapon;
+       item_tester_hook = item_tester_hook_orthodox_melee_weapons;
 
        /* Get the first weapon */
        q = _("第一の武器は?", "What is your first weapon? ");
@@ -2919,7 +2872,7 @@ static int compare_weapons(int bcost)
 
                /* Only compare melee weapons */
                item_tester_no_ryoute = TRUE;
-               item_tester_hook = item_tester_hook_melee_weapon;
+               item_tester_hook = item_tester_hook_orthodox_melee_weapons;
 
                /* Hack -- prevent "icky" message */
                character_xtra = TRUE;
@@ -3101,24 +3054,6 @@ static bool eval_ac(int iAC)
 }
 
 
-/*!
- * @brief 修復対象となる壊れた武器かを判定する。 / Hook to specify "broken weapon"
- * @param o_ptr オブジェクトの構造体の参照ポインタ。
- * @return 修復対象になるならTRUEを返す。
- */
-static bool item_tester_hook_broken_weapon(object_type *o_ptr)
-{
-       if (o_ptr->tval != TV_SWORD) return FALSE;
-
-       switch (o_ptr->sval)
-       {
-       case SV_BROKEN_DAGGER:
-       case SV_BROKEN_SWORD:
-               return TRUE;
-       }
-
-       return FALSE;
-}
 
 /*!
  * @brief 修復材料のオブジェクトから修復対象に特性を移植する。
@@ -3235,7 +3170,7 @@ static int repair_broken_weapon_aux(int bcost)
        s = _("材料となる武器がありません。", "You have no material to repair.");
 
        /* Only forge broken weapons */
-       item_tester_hook = item_tester_hook_melee_weapon;
+       item_tester_hook = item_tester_hook_orthodox_melee_weapons;
 
        if (!get_item(&mater, q, s, (USE_INVEN | USE_EQUIP))) return (0);
        if (mater == item)
index fd3da35..a20c008 100644 (file)
@@ -8,6 +8,7 @@
 
 #include "angband.h"
 #include "cmd-activate.h"
+#include "object-hook.h"
 
 /*!
 * @brief ペット入りモンスターボールをソートするための比較関数
@@ -47,28 +48,6 @@ static bool ang_sort_comp_pet(vptr u, vptr v, int a, int b)
        return w1 <= w2;
 }
 
-/*!
-* @brief オブジェクトをプレイヤーが魔道具として発動できるかを判定する /
-* Hook to determine if an object is activatable
-* @param o_ptr 判定したいオブジェクトの構造体参照ポインタ
-* @return 魔道具として発動可能ならばTRUEを返す
-*/
-static bool item_tester_hook_activate(object_type *o_ptr)
-{
-       u32b flgs[TR_FLAG_SIZE];
-
-       /* Not known */
-       if (!object_is_known(o_ptr)) return (FALSE);
-
-       /* Extract the flags */
-       object_flags(o_ptr, flgs);
-
-       /* Check activation flag */
-       if (have_flag(flgs, TR_ACTIVATE)) return (TRUE);
-
-       /* Assume not */
-       return (FALSE);
-}
 
 /*!
  * @brief 装備を発動するコマンドのサブルーチン /
index e9073fe..ff61959 100644 (file)
@@ -8,6 +8,7 @@
 \r
 \r
 #include "angband.h"\r
+#include "object-hook.h"\r
 \r
 /*!\r
  * @brief 食料を食べるコマンドのサブルーチン\r
@@ -504,48 +505,6 @@ void do_cmd_eat_food_aux(int item)
 \r
 \r
 /*!\r
- * @brief オブジェクトをプレイヤーが食べることができるかを判定する /\r
- * Hook to determine if an object is eatable\r
- * @param o_ptr 判定したいオブジェクトの構造体参照ポインタ\r
- * @return 食べることが可能ならばTRUEを返す\r
- */\r
-static bool item_tester_hook_eatable(object_type *o_ptr)\r
-{\r
-       if (o_ptr->tval == TV_FOOD) return TRUE;\r
-\r
-#if 0\r
-       if (prace_is_(RACE_SKELETON))\r
-       {\r
-               if (o_ptr->tval == TV_SKELETON ||\r
-                       (o_ptr->tval == TV_CORPSE && o_ptr->sval == SV_SKELETON))\r
-                       return TRUE;\r
-       }\r
-       else\r
-#endif\r
-\r
-               if (prace_is_(RACE_SKELETON) ||\r
-                       prace_is_(RACE_GOLEM) ||\r
-                       prace_is_(RACE_ZOMBIE) ||\r
-                       prace_is_(RACE_SPECTRE))\r
-               {\r
-                       if (o_ptr->tval == TV_STAFF || o_ptr->tval == TV_WAND)\r
-                               return TRUE;\r
-               }\r
-               else if (prace_is_(RACE_DEMON) ||\r
-                       (mimic_info[p_ptr->mimic_form].MIMIC_FLAGS & MIMIC_IS_DEMON))\r
-               {\r
-                       if (o_ptr->tval == TV_CORPSE &&\r
-                               o_ptr->sval == SV_CORPSE &&\r
-                               my_strchr("pht", r_info[o_ptr->pval].d_char))\r
-                               return TRUE;\r
-               }\r
-\r
-       /* Assume not */\r
-       return (FALSE);\r
-}\r
-\r
-\r
-/*!\r
  * @brief 食料を食べるコマンドのメインルーチン /\r
  * Eat some food (from the pack or floor)\r
  * @return なし\r
index cd1a67e..a875082 100644 (file)
@@ -21,6 +21,7 @@
 #include "cmd-zaprod.h"
 #include "cmd-zapwand.h"
 
+#include "object-hook.h"
 
 
 /*!
@@ -172,53 +173,6 @@ void do_cmd_equip(void)
 }
 
 
-/*!
- * @brief オブジェクトを防具として装備できるかの判定 / The "wearable" tester
- * @param o_ptr 判定するオブジェクトの構造体参照ポインタ
- * @return オブジェクトが防具として装備できるならTRUEを返す。
- */
-static bool item_tester_hook_wear(object_type *o_ptr)
-{
-       if ((o_ptr->tval == TV_SOFT_ARMOR) && (o_ptr->sval == SV_ABUNAI_MIZUGI))
-               if (p_ptr->psex == SEX_MALE) return FALSE;
-
-       /* Check for a usable slot */
-       if (wield_slot(o_ptr) >= INVEN_RARM) return (TRUE);
-
-       /* Assume not wearable */
-       return (FALSE);
-}
-
-
-/*!
- * @brief オブジェクトがどちらの手にも装備できる武器かどうかの判定
- * @param o_ptr 判定するオブジェクトの構造体参照ポインタ
- * @return 左右両方の手で装備できるならばTRUEを返す。
- */
-static bool item_tester_hook_mochikae(object_type *o_ptr)
-{
-       /* Check for a usable slot */
-       if (((o_ptr->tval >= TV_DIGGING) && (o_ptr->tval <= TV_SWORD)) ||
-           (o_ptr->tval == TV_SHIELD) || (o_ptr->tval == TV_CAPTURE) ||
-           (o_ptr->tval == TV_CARD)) return (TRUE);
-
-       /* Assume not wearable */
-       return (FALSE);
-}
-
-/*!
- * @brief オブジェクトが右手か左手に装備できる武器かどうかの判定
- * @param o_ptr 判定するオブジェクトの構造体参照ポインタ
- * @return 右手か左手の武器として装備できるならばTRUEを返す。
- */
-static bool item_tester_hook_melee_weapon(object_type *o_ptr)
-{
-       /* Check for a usable slot */
-       if ((o_ptr->tval >= TV_DIGGING) && (o_ptr->tval <= TV_SWORD))return (TRUE);
-
-       /* Assume not wearable */
-       return (FALSE);
-}
 
 
 bool select_ring_slot = FALSE;
@@ -2060,62 +2014,6 @@ void do_cmd_query_symbol(void)
        prt(buf, 0, 0);
 }
 
-
-/*!
-* @brief オブジェクトをプレイヤーが簡易使用コマンドで利用できるかを判定する /
-* Hook to determine if an object is useable
-* @param o_ptr 判定したいオブジェクトの構造体参照ポインタ
-* @return 利用可能ならばTRUEを返す
-*/
-static bool item_tester_hook_use(object_type *o_ptr)
-{
-       u32b flgs[TR_FLAG_SIZE];
-
-       /* Ammo */
-       if (o_ptr->tval == p_ptr->tval_ammo)
-               return (TRUE);
-
-       /* Useable object */
-       switch (o_ptr->tval)
-       {
-       case TV_SPIKE:
-       case TV_STAFF:
-       case TV_WAND:
-       case TV_ROD:
-       case TV_SCROLL:
-       case TV_POTION:
-       case TV_FOOD:
-       {
-               return (TRUE);
-       }
-
-       default:
-       {
-               int i;
-
-               /* Not known */
-               if (!object_is_known(o_ptr)) return (FALSE);
-
-               /* HACK - only items from the equipment can be activated */
-               for (i = INVEN_RARM; i < INVEN_TOTAL; i++)
-               {
-                       if (&inventory[i] == o_ptr)
-                       {
-                               /* Extract the flags */
-                               object_flags(o_ptr, flgs);
-
-                               /* Check activation flag */
-                               if (have_flag(flgs, TR_ACTIVATE)) return (TRUE);
-                       }
-               }
-       }
-       }
-
-       /* Assume not */
-       return (FALSE);
-}
-
-
 /*!
  * @brief アイテムを汎用的に「使う」コマンドのメインルーチン /
  * Use an item
index cbeafb9..ed60311 100644 (file)
@@ -6,9 +6,9 @@
  * cmd6.cより分離。\r
  */\r
 \r
-\r
 #include "angband.h"\r
 #include "selfinfo.h"\r
+#include "object-hook.h"\r
 \r
 /*!\r
  * @brief 薬を飲むコマンドのサブルーチン /\r
@@ -696,24 +696,6 @@ void do_cmd_quaff_potion_aux(int item)
 }\r
 \r
 \r
-/*!\r
- * @brief オブジェクトをプレイヤーが飲むことができるかを判定する /\r
- * Hook to determine if an object can be quaffed\r
- * @param o_ptr 判定したいオブジェクトの構造体参照ポインタ\r
- * @return 飲むことが可能ならばTRUEを返す\r
- */\r
-static bool item_tester_hook_quaff(object_type *o_ptr)\r
-{\r
-       if (o_ptr->tval == TV_POTION) return TRUE;\r
-\r
-       if (prace_is_(RACE_ANDROID))\r
-       {\r
-               if (o_ptr->tval == TV_FLASK && o_ptr->sval == SV_FLASK_OIL)\r
-                       return TRUE;\r
-       }\r
-       return FALSE;\r
-}\r
-\r
 \r
 /*!\r
  * @brief 薬を飲むコマンドのメインルーチン /\r
index 45d5c2d..a0fddf4 100644 (file)
@@ -6,8 +6,8 @@
  * cmd6.cより分離。\r
  */\r
 \r
-\r
 #include "angband.h"\r
+#include "object-hook.h"\r
 \r
 /*!\r
  * @brief 巻物を読むコマンドのサブルーチン\r
@@ -609,20 +609,6 @@ void do_cmd_read_scroll_aux(int item, bool known)
 }\r
 \r
 /*!\r
- * @brief オブジェクトをプレイヤーが読むことができるかを判定する /\r
- * Hook to determine if an object is readable\r
- * @param o_ptr 判定したいオブジェクトの構造体参照ポインタ\r
- * @return 読むことが可能ならばTRUEを返す\r
- */\r
-static bool item_tester_hook_readable(object_type *o_ptr)\r
-{\r
-       if ((o_ptr->tval==TV_SCROLL) || (o_ptr->tval==TV_PARCHMENT) || (o_ptr->name1 == ART_GHB) || (o_ptr->name1 == ART_POWER)) return (TRUE);\r
-\r
-       /* Assume not */\r
-       return (FALSE);\r
-}\r
-\r
-/*!\r
  * @brief 読むコマンドのメインルーチン /\r
  * Eat some food (from the pack or floor)\r
  * @return なし\r
index ed99c21..80cdead 100644 (file)
@@ -12,7 +12,7 @@
 
 #include "angband.h"
 #include "chest.h"
-
+#include "object-hook.h"
 
 /*!
  * @brief フロア脱出時に出戻りが不可能だった場合に警告を加える処理
@@ -3478,19 +3478,6 @@ void do_cmd_fire(void)
        }
 }
 
-/*!
- * @brief オブジェクトが投射可能な武器かどうかを返す。
- * @param o_ptr 判定するオブジェクトの構造体参照ポインタ
- * @return 投射可能な武器ならばTRUE
- */
-static bool item_tester_hook_boomerang(object_type *o_ptr)
-{
-       if ((o_ptr->tval==TV_DIGGING) || (o_ptr->tval == TV_SWORD) || (o_ptr->tval == TV_POLEARM) || (o_ptr->tval == TV_HAFTED)) return (TRUE);
-
-       /* Assume not */
-       return (FALSE);
-}
-
 
 /*!
  * @brief 投射処理メインルーチン /
index 88305fb..6b5782a 100644 (file)
@@ -1161,7 +1161,6 @@ extern bool charm_animal(int dir, int plev);
 extern bool mindblast_monsters(HIT_POINT dam);
 extern s32b flag_cost(object_type *o_ptr, int plusses);
 extern bool teleport_swap(int dir);
-extern bool item_tester_hook_recharge(object_type *o_ptr);
 extern bool project_hook(int typ, int dir, HIT_POINT dam, BIT_FLAGS flg);
 extern bool project_hack(int typ, HIT_POINT dam);
 extern bool eat_magic(int power);
diff --git a/src/object-hook.c b/src/object-hook.c
new file mode 100644 (file)
index 0000000..5298710
--- /dev/null
@@ -0,0 +1,440 @@
+\r
+#include "angband.h"\r
+#include "object-hook.h"\r
+\r
+/*!\r
+* @brief \91Î\8fÛ\82Ì\83A\83C\83e\83\80\82ª\96î\82â\83N\83\8d\83X\83{\83E\82Ì\96î\82Ì\8dÞ\97¿\82É\82È\82é\82©\82ð\95Ô\82·\81B/\r
+* Hook to determine if an object is contertible in an arrow/bolt\r
+* @param o_ptr \83I\83u\83W\83F\83N\83g\82Ì\8d\\91¢\91Ì\82Ì\8eQ\8fÆ\83|\83C\83\93\83^\81B\r
+* @return \8dÞ\97¿\82É\82Å\82«\82é\82È\82çTRUE\82ð\95Ô\82·\r
+*/\r
+bool item_tester_hook_convertible(object_type *o_ptr)\r
+{\r
+       if ((o_ptr->tval == TV_JUNK) || (o_ptr->tval == TV_SKELETON)) return TRUE;\r
+\r
+       if ((o_ptr->tval == TV_CORPSE) && (o_ptr->sval == SV_SKELETON)) return TRUE;\r
+       /* Assume not */\r
+       return (FALSE);\r
+}\r
+\r
+/*!\r
+* @brief \95\90\8aí\8f \82Ì\81u\95\90\8aí\81v\8aÓ\92è\91Î\8fÛ\82É\82È\82é\82©\82ð\94»\92è\82·\82é\81B/ Hook to specify "weapon"\r
+* @param o_ptr \83I\83u\83W\83F\83N\83g\82Ì\8d\\91¢\91Ì\82Ì\8eQ\8fÆ\83|\83C\83\93\83^\81B\r
+* @return \91Î\8fÛ\82É\82È\82é\82È\82çTRUE\82ð\95Ô\82·\81B\r
+*/\r
+bool item_tester_hook_orthodox_melee_weapons(object_type *o_ptr)\r
+{\r
+       switch (o_ptr->tval)\r
+       {\r
+       case TV_HAFTED:\r
+       case TV_POLEARM:\r
+       case TV_DIGGING:\r
+       {\r
+               return (TRUE);\r
+       }\r
+       case TV_SWORD:\r
+       {\r
+               if (o_ptr->sval != SV_DOKUBARI) return (TRUE);\r
+       }\r
+       }\r
+\r
+       return (FALSE);\r
+}\r
+\r
+/*!\r
+* @brief \83I\83u\83W\83F\83N\83g\82ª\89E\8eè\82©\8d\8eè\82É\91\95\94õ\82Å\82«\82é\95\90\8aí\82©\82Ç\82¤\82©\82Ì\94»\92è\r
+* @param o_ptr \94»\92è\82·\82é\83I\83u\83W\83F\83N\83g\82Ì\8d\\91¢\91Ì\8eQ\8fÆ\83|\83C\83\93\83^\r
+* @return \89E\8eè\82©\8d\8eè\82Ì\95\90\8aí\82Æ\82µ\82Ä\91\95\94õ\82Å\82«\82é\82È\82ç\82ÎTRUE\82ð\95Ô\82·\81B\r
+*/\r
+bool item_tester_hook_melee_weapon(object_type *o_ptr)\r
+{\r
+       /* Check for a usable slot */\r
+       if ((o_ptr->tval >= TV_DIGGING) && (o_ptr->tval <= TV_SWORD)) return (TRUE);\r
+\r
+       /* Assume not wearable */\r
+       return (FALSE);\r
+}\r
+\r
+\r
+/*!\r
+* @brief \95\90\8aí\8f \82Ì\81u\96î\92e\81v\8aÓ\92è\91Î\8fÛ\82É\82È\82é\82©\82ð\94»\92è\82·\82é\81B/ Hook to specify "weapon"\r
+* @param o_ptr \83I\83u\83W\83F\83N\83g\82Ì\8d\\91¢\91Ì\82Ì\8eQ\8fÆ\83|\83C\83\93\83^\81B\r
+* @return \91Î\8fÛ\82É\82È\82é\82È\82çTRUE\82ð\95Ô\82·\81B\r
+*/\r
+bool item_tester_hook_ammo(object_type *o_ptr)\r
+{\r
+       switch (o_ptr->tval)\r
+       {\r
+       case TV_SHOT:\r
+       case TV_ARROW:\r
+       case TV_BOLT:\r
+       {\r
+               return (TRUE);\r
+       }\r
+       }\r
+\r
+       return (FALSE);\r
+}\r
+\r
+/*!\r
+* @brief \8fC\95\9c\91Î\8fÛ\82Æ\82È\82é\89ó\82ê\82½\95\90\8aí\82©\82ð\94»\92è\82·\82é\81B / Hook to specify "broken weapon"\r
+* @param o_ptr \83I\83u\83W\83F\83N\83g\82Ì\8d\\91¢\91Ì\82Ì\8eQ\8fÆ\83|\83C\83\93\83^\81B\r
+* @return \8fC\95\9c\91Î\8fÛ\82É\82È\82é\82È\82çTRUE\82ð\95Ô\82·\81B\r
+*/\r
+bool item_tester_hook_broken_weapon(object_type *o_ptr)\r
+{\r
+       if (o_ptr->tval != TV_SWORD) return FALSE;\r
+\r
+       switch (o_ptr->sval)\r
+       {\r
+       case SV_BROKEN_DAGGER:\r
+       case SV_BROKEN_SWORD:\r
+               return TRUE;\r
+       }\r
+\r
+       return FALSE;\r
+}\r
+\r
+/*!\r
+* @brief \83I\83u\83W\83F\83N\83g\82ª\93\8a\8eË\89Â\94\\82È\95\90\8aí\82©\82Ç\82¤\82©\82ð\95Ô\82·\81B\r
+* @param o_ptr \94»\92è\82·\82é\83I\83u\83W\83F\83N\83g\82Ì\8d\\91¢\91Ì\8eQ\8fÆ\83|\83C\83\93\83^\r
+* @return \93\8a\8eË\89Â\94\\82È\95\90\8aí\82È\82ç\82ÎTRUE\r
+*/\r
+bool item_tester_hook_boomerang(object_type *o_ptr)\r
+{\r
+       if ((o_ptr->tval == TV_DIGGING) || (o_ptr->tval == TV_SWORD) || (o_ptr->tval == TV_POLEARM) || (o_ptr->tval == TV_HAFTED)) return (TRUE);\r
+\r
+       /* Assume not */\r
+       return (FALSE);\r
+}\r
+\r
+/*!\r
+* @brief \83I\83u\83W\83F\83N\83g\82ð\83v\83\8c\83C\83\84\81[\82ª\90H\82×\82é\82±\82Æ\82ª\82Å\82«\82é\82©\82ð\94»\92è\82·\82é /\r
+* Hook to determine if an object is eatable\r
+* @param o_ptr \94»\92è\82µ\82½\82¢\83I\83u\83W\83F\83N\83g\82Ì\8d\\91¢\91Ì\8eQ\8fÆ\83|\83C\83\93\83^\r
+* @return \90H\82×\82é\82±\82Æ\82ª\89Â\94\\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
+*/\r
+bool item_tester_hook_eatable(object_type *o_ptr)\r
+{\r
+       if (o_ptr->tval == TV_FOOD) return TRUE;\r
+\r
+#if 0\r
+       if (prace_is_(RACE_SKELETON))\r
+       {\r
+               if (o_ptr->tval == TV_SKELETON ||\r
+                       (o_ptr->tval == TV_CORPSE && o_ptr->sval == SV_SKELETON))\r
+                       return TRUE;\r
+       }\r
+       else\r
+#endif\r
+\r
+               if (prace_is_(RACE_SKELETON) ||\r
+                       prace_is_(RACE_GOLEM) ||\r
+                       prace_is_(RACE_ZOMBIE) ||\r
+                       prace_is_(RACE_SPECTRE))\r
+               {\r
+                       if (o_ptr->tval == TV_STAFF || o_ptr->tval == TV_WAND)\r
+                               return TRUE;\r
+               }\r
+               else if (prace_is_(RACE_DEMON) ||\r
+                       (mimic_info[p_ptr->mimic_form].MIMIC_FLAGS & MIMIC_IS_DEMON))\r
+               {\r
+                       if (o_ptr->tval == TV_CORPSE &&\r
+                               o_ptr->sval == SV_CORPSE &&\r
+                               my_strchr("pht", r_info[o_ptr->pval].d_char))\r
+                               return TRUE;\r
+               }\r
+\r
+       /* Assume not */\r
+       return (FALSE);\r
+}\r
+\r
+/*!\r
+* @brief \83I\83u\83W\83F\83N\83g\82ª\82Ç\82¿\82ç\82Ì\8eè\82É\82à\91\95\94õ\82Å\82«\82é\95\90\8aí\82©\82Ç\82¤\82©\82Ì\94»\92è\r
+* @param o_ptr \94»\92è\82·\82é\83I\83u\83W\83F\83N\83g\82Ì\8d\\91¢\91Ì\8eQ\8fÆ\83|\83C\83\93\83^\r
+* @return \8d\89E\97¼\95û\82Ì\8eè\82Å\91\95\94õ\82Å\82«\82é\82È\82ç\82ÎTRUE\82ð\95Ô\82·\81B\r
+*/\r
+bool item_tester_hook_mochikae(object_type *o_ptr)\r
+{\r
+       /* Check for a usable slot */\r
+       if (((o_ptr->tval >= TV_DIGGING) && (o_ptr->tval <= TV_SWORD)) ||\r
+               (o_ptr->tval == TV_SHIELD) || (o_ptr->tval == TV_CAPTURE) ||\r
+               (o_ptr->tval == TV_CARD)) return (TRUE);\r
+\r
+       /* Assume not wearable */\r
+       return (FALSE);\r
+}\r
+\r
+/*!\r
+* @brief \83I\83u\83W\83F\83N\83g\82ð\83v\83\8c\83C\83\84\81[\82ª\96\82\93¹\8bï\82Æ\82µ\82Ä\94­\93®\82Å\82«\82é\82©\82ð\94»\92è\82·\82é /\r
+* Hook to determine if an object is activatable\r
+* @param o_ptr \94»\92è\82µ\82½\82¢\83I\83u\83W\83F\83N\83g\82Ì\8d\\91¢\91Ì\8eQ\8fÆ\83|\83C\83\93\83^\r
+* @return \96\82\93¹\8bï\82Æ\82µ\82Ä\94­\93®\89Â\94\\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
+*/\r
+bool item_tester_hook_activate(object_type *o_ptr)\r
+{\r
+       u32b flgs[TR_FLAG_SIZE];\r
+\r
+       /* Not known */\r
+       if (!object_is_known(o_ptr)) return (FALSE);\r
+\r
+       /* Extract the flags */\r
+       object_flags(o_ptr, flgs);\r
+\r
+       /* Check activation flag */\r
+       if (have_flag(flgs, TR_ACTIVATE)) return (TRUE);\r
+\r
+       /* Assume not */\r
+       return (FALSE);\r
+}\r
+\r
+/*!\r
+* @brief \83I\83u\83W\83F\83N\83g\82ð\96h\8bï\82Æ\82µ\82Ä\91\95\94õ\82Å\82«\82é\82©\82Ì\94»\92è / The "wearable" tester\r
+* @param o_ptr \94»\92è\82·\82é\83I\83u\83W\83F\83N\83g\82Ì\8d\\91¢\91Ì\8eQ\8fÆ\83|\83C\83\93\83^\r
+* @return \83I\83u\83W\83F\83N\83g\82ª\96h\8bï\82Æ\82µ\82Ä\91\95\94õ\82Å\82«\82é\82È\82çTRUE\82ð\95Ô\82·\81B\r
+*/\r
+bool item_tester_hook_wear(object_type *o_ptr)\r
+{\r
+       if ((o_ptr->tval == TV_SOFT_ARMOR) && (o_ptr->sval == SV_ABUNAI_MIZUGI))\r
+               if (p_ptr->psex == SEX_MALE) return FALSE;\r
+\r
+       /* Check for a usable slot */\r
+       if (wield_slot(o_ptr) >= INVEN_RARM) return (TRUE);\r
+\r
+       /* Assume not wearable */\r
+       return (FALSE);\r
+}\r
+\r
+\r
+/*!\r
+* @brief \83I\83u\83W\83F\83N\83g\82ð\83v\83\8c\83C\83\84\81[\82ª\8aÈ\88Õ\8eg\97p\83R\83}\83\93\83h\82Å\97\98\97p\82Å\82«\82é\82©\82ð\94»\92è\82·\82é /\r
+* Hook to determine if an object is useable\r
+* @param o_ptr \94»\92è\82µ\82½\82¢\83I\83u\83W\83F\83N\83g\82Ì\8d\\91¢\91Ì\8eQ\8fÆ\83|\83C\83\93\83^\r
+* @return \97\98\97p\89Â\94\\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
+*/\r
+bool item_tester_hook_use(object_type *o_ptr)\r
+{\r
+       u32b flgs[TR_FLAG_SIZE];\r
+\r
+       /* Ammo */\r
+       if (o_ptr->tval == p_ptr->tval_ammo)\r
+               return (TRUE);\r
+\r
+       /* Useable object */\r
+       switch (o_ptr->tval)\r
+       {\r
+       case TV_SPIKE:\r
+       case TV_STAFF:\r
+       case TV_WAND:\r
+       case TV_ROD:\r
+       case TV_SCROLL:\r
+       case TV_POTION:\r
+       case TV_FOOD:\r
+       {\r
+               return (TRUE);\r
+       }\r
+\r
+       default:\r
+       {\r
+               int i;\r
+\r
+               /* Not known */\r
+               if (!object_is_known(o_ptr)) return (FALSE);\r
+\r
+               /* HACK - only items from the equipment can be activated */\r
+               for (i = INVEN_RARM; i < INVEN_TOTAL; i++)\r
+               {\r
+                       if (&inventory[i] == o_ptr)\r
+                       {\r
+                               /* Extract the flags */\r
+                               object_flags(o_ptr, flgs);\r
+\r
+                               /* Check activation flag */\r
+                               if (have_flag(flgs, TR_ACTIVATE)) return (TRUE);\r
+                       }\r
+               }\r
+       }\r
+       }\r
+\r
+       /* Assume not */\r
+       return (FALSE);\r
+}\r
+\r
+\r
+/*!\r
+* @brief \83I\83u\83W\83F\83N\83g\82ð\83v\83\8c\83C\83\84\81[\82ª\88ù\82Þ\82±\82Æ\82ª\82Å\82«\82é\82©\82ð\94»\92è\82·\82é /\r
+* Hook to determine if an object can be quaffed\r
+* @param o_ptr \94»\92è\82µ\82½\82¢\83I\83u\83W\83F\83N\83g\82Ì\8d\\91¢\91Ì\8eQ\8fÆ\83|\83C\83\93\83^\r
+* @return \88ù\82Þ\82±\82Æ\82ª\89Â\94\\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
+*/\r
+bool item_tester_hook_quaff(object_type *o_ptr)\r
+{\r
+       if (o_ptr->tval == TV_POTION) return TRUE;\r
+\r
+       if (prace_is_(RACE_ANDROID))\r
+       {\r
+               if (o_ptr->tval == TV_FLASK && o_ptr->sval == SV_FLASK_OIL)\r
+                       return TRUE;\r
+       }\r
+       return FALSE;\r
+}\r
+\r
+\r
+/*!\r
+* @brief \83I\83u\83W\83F\83N\83g\82ð\83v\83\8c\83C\83\84\81[\82ª\93Ç\82Þ\82±\82Æ\82ª\82Å\82«\82é\82©\82ð\94»\92è\82·\82é /\r
+* Hook to determine if an object is readable\r
+* @param o_ptr \94»\92è\82µ\82½\82¢\83I\83u\83W\83F\83N\83g\82Ì\8d\\91¢\91Ì\8eQ\8fÆ\83|\83C\83\93\83^\r
+* @return \93Ç\82Þ\82±\82Æ\82ª\89Â\94\\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
+*/\r
+bool item_tester_hook_readable(object_type *o_ptr)\r
+{\r
+       if ((o_ptr->tval == TV_SCROLL) || (o_ptr->tval == TV_PARCHMENT) || (o_ptr->name1 == ART_GHB) || (o_ptr->name1 == ART_POWER)) return (TRUE);\r
+\r
+       /* Assume not */\r
+       return (FALSE);\r
+}\r
+\r
+\r
+/*!\r
+* @brief \83G\83b\83Z\83\93\83X\82Ì\95t\89Á\89Â\94\\82È\95\90\8aí\82â\96î\92e\82©\82ð\95Ô\82·\r
+* @param o_ptr \83`\83F\83b\83N\82µ\82½\82¢\83I\83u\83W\83F\83N\83g\82Ì\8d\\91¢\91Ì\8eQ\8fÆ\83|\83C\83\93\83^\r
+* @return \83G\83b\83Z\83\93\83X\82Ì\95t\89Á\89Â\94\\82È\95\90\8aí\82©\96î\92e\82È\82ç\82ÎTRUE\82ð\95Ô\82·\81B\r
+*/\r
+bool item_tester_hook_melee_ammo(object_type *o_ptr)\r
+{\r
+       switch (o_ptr->tval)\r
+       {\r
+       case TV_HAFTED:\r
+       case TV_POLEARM:\r
+       case TV_DIGGING:\r
+       case TV_BOLT:\r
+       case TV_ARROW:\r
+       case TV_SHOT:\r
+       {\r
+               return (TRUE);\r
+       }\r
+       case TV_SWORD:\r
+       {\r
+               if (o_ptr->sval != SV_DOKUBARI) return (TRUE);\r
+       }\r
+       }\r
+\r
+       return (FALSE);\r
+}\r
+\r
+/*!\r
+* @brief \8eô\8fp\97Ì\88æ\82Ì\95\90\8aí\8eô\94\9b\82Ì\91Î\8fÛ\82É\82Å\82«\82é\95\90\8aí\82©\82Ç\82¤\82©\82ð\95Ô\82·\81B / An "item_tester_hook" for offer\r
+* @param o_ptr \83I\83u\83W\83F\83N\83g\8d\\91¢\91Ì\82Ì\8eQ\8fÆ\83|\83C\83\93\83^\r
+* @return \8eô\94\9b\89Â\94\\82È\95\90\8aí\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
+*/\r
+bool item_tester_hook_weapon_except_bow(object_type *o_ptr)\r
+{\r
+       switch (o_ptr->tval)\r
+       {\r
+       case TV_SWORD:\r
+       case TV_HAFTED:\r
+       case TV_POLEARM:\r
+       case TV_DIGGING:\r
+       {\r
+               return (TRUE);\r
+       }\r
+       }\r
+\r
+       return (FALSE);\r
+}\r
+\r
+/*!\r
+* @brief \8eô\8fp\97Ì\88æ\82Ì\8ae\8f\88\97\9d\82É\8eg\82¦\82é\8eô\82í\82ê\82½\91\95\94õ\82©\82Ç\82¤\82©\82ð\95Ô\82·\81B / An "item_tester_hook" for offer\r
+* @param o_ptr \83I\83u\83W\83F\83N\83g\8d\\91¢\91Ì\82Ì\8eQ\8fÆ\83|\83C\83\93\83^\r
+* @return \8eg\82¦\82é\91\95\94õ\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
+*/\r
+bool item_tester_hook_cursed(object_type *o_ptr)\r
+{\r
+       return (bool)(object_is_cursed(o_ptr));\r
+}\r
+\r
+\r
+/*!\r
+* @brief \83A\83C\83e\83\80\82ª\95À\82Ì\89¿\92l\82Ì\83A\83C\83e\83\80\82©\82Ç\82¤\82©\94»\92è\82·\82é /\r
+* Check if an object is nameless weapon or armour\r
+* @param o_ptr \94»\92è\82·\82é\83A\83C\83e\83\80\82Ì\8fî\95ñ\8eQ\8fÆ\83|\83C\83\93\83^\r
+* @return \95À\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
+*/\r
+bool item_tester_hook_nameless_weapon_armour(object_type *o_ptr)\r
+{\r
+       /* Require weapon or armour */\r
+       if (!object_is_weapon_armour_ammo(o_ptr)) return FALSE;\r
+\r
+       /* Require nameless object if the object is well known */\r
+       if (object_is_known(o_ptr) && !object_is_nameless(o_ptr))\r
+               return FALSE;\r
+\r
+       return TRUE;\r
+}\r
+\r
+\r
+/*!\r
+* @brief \83A\83C\83e\83\80\82ª\8aÓ\92è\8dÏ\82Ý\82©\82ð\94»\92è\82·\82é /\r
+* @param o_ptr \94»\92è\82·\82é\83A\83C\83e\83\80\82Ì\8fî\95ñ\8eQ\8fÆ\83|\83C\83\93\83^\r
+* @return \8eÀ\8dÛ\82É\8aÓ\92è\8dÏ\82Ý\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
+*/\r
+bool item_tester_hook_identify(object_type *o_ptr)\r
+{\r
+       return (bool)!object_is_known(o_ptr);\r
+}\r
+\r
+/*!\r
+* @brief \83A\83C\83e\83\80\82ª\8aÓ\92è\8dÏ\82Ý\82Ì\95\90\8aí\96h\8bï\82©\82ð\94»\92è\82·\82é /\r
+* @param o_ptr \94»\92è\82·\82é\83A\83C\83e\83\80\82Ì\8fî\95ñ\8eQ\8fÆ\83|\83C\83\93\83^\r
+* @return \8eÀ\8dÛ\82É\8aÓ\92è\8dÏ\82Ý\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
+*/\r
+bool item_tester_hook_identify_weapon_armour(object_type *o_ptr)\r
+{\r
+       if (object_is_known(o_ptr))\r
+               return FALSE;\r
+       return object_is_weapon_armour_ammo(o_ptr);\r
+}\r
+\r
+/*!\r
+* @brief \83A\83C\83e\83\80\82ª*\8aÓ\92è*\8dÏ\82Ý\82©\82ð\94»\92è\82·\82é /\r
+* @param o_ptr \94»\92è\82·\82é\83A\83C\83e\83\80\82Ì\8fî\95ñ\8eQ\8fÆ\83|\83C\83\93\83^\r
+* @return \8eÀ\8dÛ\82É\8aÓ\92è\8dÏ\82Ý\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
+*/\r
+bool item_tester_hook_identify_fully(object_type *o_ptr)\r
+{\r
+       return (bool)(!object_is_known(o_ptr) || !(o_ptr->ident & IDENT_MENTAL));\r
+}\r
+\r
+/*!\r
+* @brief \83A\83C\83e\83\80\82ª*\8aÓ\92è*\8dÏ\82Ý\82Ì\95\90\8aí\96h\8bï\82©\82ð\94»\92è\82·\82é /\r
+* @param o_ptr \94»\92è\82·\82é\83A\83C\83e\83\80\82Ì\8fî\95ñ\8eQ\8fÆ\83|\83C\83\93\83^\r
+* @return \8eÀ\8dÛ\82É\8aÓ\92è\8dÏ\82Ý\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
+*/\r
+bool item_tester_hook_identify_fully_weapon_armour(object_type *o_ptr)\r
+{\r
+       if (!item_tester_hook_identify_fully(o_ptr))\r
+               return FALSE;\r
+       return object_is_weapon_armour_ammo(o_ptr);\r
+}\r
+\r
+\r
+/*!\r
+* @brief \96\82\97Í\8f[\93U\82ª\89Â\94\\82È\83A\83C\83e\83\80\82©\82Ç\82¤\82©\94»\92è\82·\82é /\r
+* Hook for "get_item()".  Determine if something is rechargable.\r
+* @param o_ptr \94»\92è\82·\82é\83A\83C\83e\83\80\82Ì\8fî\95ñ\8eQ\8fÆ\83|\83C\83\93\83^\r
+* @return \96\82\97Í\8f[\93U\82ª\89Â\94\\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
+*/\r
+bool item_tester_hook_recharge(object_type *o_ptr)\r
+{\r
+       /* Recharge staffs */\r
+       if (o_ptr->tval == TV_STAFF) return (TRUE);\r
+\r
+       /* Recharge wands */\r
+       if (o_ptr->tval == TV_WAND) return (TRUE);\r
+\r
+       /* Hack -- Recharge rods */\r
+       if (o_ptr->tval == TV_ROD) return (TRUE);\r
+\r
+       /* Nope */\r
+       return (FALSE);\r
+}\r
diff --git a/src/object-hook.h b/src/object-hook.h
new file mode 100644 (file)
index 0000000..aab3b49
--- /dev/null
@@ -0,0 +1,24 @@
+\r
+extern bool item_tester_hook_convertible(object_type *o_ptr);\r
+extern bool item_tester_hook_recharge(object_type *o_ptr);\r
+extern bool item_tester_hook_orthodox_melee_weapons(object_type *o_ptr);\r
+extern bool item_tester_hook_melee_weapon(object_type *o_ptr);\r
+extern bool item_tester_hook_ammo(object_type *o_ptr);\r
+extern bool item_tester_hook_broken_weapon(object_type *o_ptr);\r
+extern bool item_tester_hook_boomerang(object_type *o_ptr);\r
+extern bool item_tester_hook_eatable(object_type *o_ptr);\r
+extern bool item_tester_hook_mochikae(object_type *o_ptr);\r
+extern bool item_tester_hook_activate(object_type *o_ptr);\r
+extern bool item_tester_hook_wear(object_type *o_ptr);\r
+extern bool item_tester_hook_use(object_type *o_ptr);\r
+extern bool item_tester_hook_quaff(object_type *o_ptr);\r
+extern bool item_tester_hook_readable(object_type *o_ptr);\r
+extern bool item_tester_hook_melee_ammo(object_type *o_ptr);\r
+extern bool item_tester_hook_weapon_except_bow(object_type *o_ptr);\r
+extern bool item_tester_hook_cursed(object_type *o_ptr);\r
+extern bool item_tester_hook_nameless_weapon_armour(object_type *o_ptr);\r
+extern bool item_tester_hook_identify(object_type *o_ptr);\r
+extern bool item_tester_hook_identify_weapon_armour(object_type *o_ptr);\r
+extern bool item_tester_hook_identify_fully(object_type *o_ptr);\r
+extern bool item_tester_hook_identify_fully_weapon_armour(object_type *o_ptr);\r
+extern bool item_tester_hook_recharge(object_type *o_ptr);\r
index 755af89..106504f 100644 (file)
@@ -12,6 +12,7 @@
  */
 
 #include "angband.h"
+#include "object-hook.h"
 
 static void one_sustain(object_type *o_ptr);
 
@@ -7225,34 +7226,6 @@ bool process_warning(int xx, int yy)
 }
 
 /*!
- * @brief エッセンスの付加可能な武器や矢弾かを返す
- * @param o_ptr チェックしたいオブジェクトの構造体参照ポインタ
- * @return エッセンスの付加可能な武器か矢弾ならばTRUEを返す。
- */
-static bool item_tester_hook_melee_ammo(object_type *o_ptr)
-{
-       switch (o_ptr->tval)
-       {
-               case TV_HAFTED:
-               case TV_POLEARM:
-               case TV_DIGGING:
-               case TV_BOLT:
-               case TV_ARROW:
-               case TV_SHOT:
-               {
-                       return (TRUE);
-               }
-               case TV_SWORD:
-               {
-                       if (o_ptr->sval != SV_DOKUBARI) return (TRUE);
-               }
-       }
-
-       return (FALSE);
-}
-
-
-/*!
  * エッセンス情報の構造体 / A structure for smithing
  */
 typedef struct {
index 5c5d28a..79b311e 100644 (file)
 #include "cmd-zapwand.h"
 #include "cmd-pet.h"
 
-/*!
- * @brief 対象のアイテムが矢やクロスボウの矢の材料になるかを返す。/
- * Hook to determine if an object is contertible in an arrow/bolt
- * @param o_ptr オブジェクトの構造体の参照ポインタ。
- * @return 材料にできるならTRUEを返す
- */
-static bool item_tester_hook_convertible(object_type *o_ptr)
-{
-       if((o_ptr->tval==TV_JUNK) || (o_ptr->tval==TV_SKELETON)) return TRUE;
-
-       if ((o_ptr->tval == TV_CORPSE) && (o_ptr->sval == SV_SKELETON)) return TRUE;
-       /* Assume not */
-       return (FALSE);
-}
+#include "object-hook.h"
 
 /*!
  * @brief レイシャル「弾/矢の製造」処理 / do_cmd_cast calls this function if the player's class is 'archer'.
index 1c7f9c0..9dc947e 100644 (file)
 #include "angband.h"
 #include "cmd-spell.h"
 #include "cmd-quaff.h"
+#include "object-hook.h"
 
 #define MAX_KEEP 4 /*!<呪術の最大詠唱数 */
 
- /*!
- * @brief 呪術領域の武器呪縛の対象にできる武器かどうかを返す。 / An "item_tester_hook" for offer
- * @param o_ptr オブジェクト構造体の参照ポインタ
- * @return 呪縛可能な武器ならばTRUEを返す
- */
-static bool item_tester_hook_weapon_except_bow(object_type *o_ptr)
-{
-       switch (o_ptr->tval)
-       {
-       case TV_SWORD:
-       case TV_HAFTED:
-       case TV_POLEARM:
-       case TV_DIGGING:
-       {
-               return (TRUE);
-       }
-       }
-
-       return (FALSE);
-}
-
-/*!
-* @brief 呪術領域の各処理に使える呪われた装備かどうかを返す。 / An "item_tester_hook" for offer
-* @param o_ptr オブジェクト構造体の参照ポインタ
-* @return 使える装備ならばTRUEを返す
-*/
-static bool item_tester_hook_cursed(object_type *o_ptr)
-{
-       return (bool)(object_is_cursed(o_ptr));
-}
-
 /*!
  * @brief プレイヤーが詠唱中の全呪術を停止する
  * @return なし
index 586a853..c61d0dd 100644 (file)
@@ -12,6 +12,7 @@
  */
 
 #include "angband.h"
+#include "object-hook.h"
 
 /*! テレポート先探索の試行数 / Maximum number of tries for teleporting */
 #define MAX_TRIES 100
@@ -2369,24 +2370,6 @@ msg_format("%s は明るく輝いた!",
 
 
 /*!
- * @brief アイテムが並の価値のアイテムかどうか判定する /
- * Check if an object is nameless weapon or armour
- * @param o_ptr 判定するアイテムの情報参照ポインタ
- * @return 並ならばTRUEを返す
- */
-static bool item_tester_hook_nameless_weapon_armour(object_type *o_ptr)
-{
-       /* Require weapon or armour */
-       if (!object_is_weapon_armour_ammo(o_ptr)) return FALSE;
-       
-       /* Require nameless object if the object is well known */
-       if (object_is_known(o_ptr) && !object_is_nameless(o_ptr))
-               return FALSE;
-
-       return TRUE;
-}
-
-/*!
  * @brief アーティファクト生成の巻物処理 /
  * @return 生成が実際に試みられたらTRUEを返す
  */
@@ -2579,28 +2562,6 @@ bool identify_item(object_type *o_ptr)
 }
 
 /*!
- * @brief アイテムが鑑定済みかを判定する /
- * @param o_ptr 判定するアイテムの情報参照ポインタ
- * @return 実際に鑑定済みならばTRUEを返す
- */
-static bool item_tester_hook_identify(object_type *o_ptr)
-{
-       return (bool)!object_is_known(o_ptr);
-}
-
-/*!
- * @brief アイテムが鑑定済みの武器防具かを判定する /
- * @param o_ptr 判定するアイテムの情報参照ポインタ
- * @return 実際に鑑定済みならばTRUEを返す
- */
-static bool item_tester_hook_identify_weapon_armour(object_type *o_ptr)
-{
-       if (object_is_known(o_ptr))
-               return FALSE;
-       return object_is_weapon_armour_ammo(o_ptr);
-}
-
-/*!
  * @brief アイテム鑑定のメインルーチン処理 /
  * Identify an object in the inventory (or on the floor)
  * @param only_equip 装備品のみを対象とするならばTRUEを返す
@@ -2749,28 +2710,6 @@ bool mundane_spell(bool only_equip)
 }
 
 /*!
- * @brief アイテムが*鑑定*済みかを判定する /
- * @param o_ptr 判定するアイテムの情報参照ポインタ
- * @return 実際に鑑定済みならばTRUEを返す
- */
-static bool item_tester_hook_identify_fully(object_type *o_ptr)
-{
-       return (bool)(!object_is_known(o_ptr) || !(o_ptr->ident & IDENT_MENTAL));
-}
-
-/*!
- * @brief アイテムが*鑑定*済みの武器防具かを判定する /
- * @param o_ptr 判定するアイテムの情報参照ポインタ
- * @return 実際に鑑定済みならばTRUEを返す
- */
-static bool item_tester_hook_identify_fully_weapon_armour(object_type *o_ptr)
-{
-       if (!item_tester_hook_identify_fully(o_ptr))
-               return FALSE;
-       return object_is_weapon_armour_ammo(o_ptr);
-}
-
-/*!
  * @brief アイテム*鑑定*のメインルーチン処理 /
  * Identify an object in the inventory (or on the floor)
  * @param only_equip 装備品のみを対象とするならばTRUEを返す
@@ -2861,27 +2800,6 @@ bool identify_fully(bool only_equip)
 }
 
 
-/*!
- * @brief 魔力充填が可能なアイテムかどうか判定する /
- * Hook for "get_item()".  Determine if something is rechargable.
- * @param o_ptr 判定するアイテムの情報参照ポインタ
- * @return 魔力充填が可能ならばTRUEを返す
- */
-bool item_tester_hook_recharge(object_type *o_ptr)
-{
-       /* Recharge staffs */
-       if (o_ptr->tval == TV_STAFF) return (TRUE);
-
-       /* Recharge wands */
-       if (o_ptr->tval == TV_WAND) return (TRUE);
-
-       /* Hack -- Recharge rods */
-       if (o_ptr->tval == TV_ROD) return (TRUE);
-
-       /* Nope */
-       return (FALSE);
-}
-
 
 /*!
  * @brief 魔力充填処理 /