Separate item hook functions to object-hook.c/h.
<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
<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
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 \
*/
#include "angband.h"
-
+#include "object-hook.h"
/*!
* ループ中で / hack as in leave_store in store.c
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
/* 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? ");
/* 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;
}
-/*!
- * @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 修復材料のオブジェクトから修復対象に特性を移植する。
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)
#include "angband.h"
#include "cmd-activate.h"
+#include "object-hook.h"
/*!
* @brief ペット入りモンスターボールをソートするための比較関数
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 装備を発動するコマンドのサブルーチン /
\r
\r
#include "angband.h"\r
+#include "object-hook.h"\r
\r
/*!\r
* @brief 食料を食べるコマンドのサブルーチン\r
\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
#include "cmd-zaprod.h"
#include "cmd-zapwand.h"
+#include "object-hook.h"
/*!
}
-/*!
- * @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;
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
* cmd6.cより分離。\r
*/\r
\r
-\r
#include "angband.h"\r
#include "selfinfo.h"\r
+#include "object-hook.h"\r
\r
/*!\r
* @brief 薬を飲むコマンドのサブルーチン /\r
}\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
* cmd6.cより分離。\r
*/\r
\r
-\r
#include "angband.h"\r
+#include "object-hook.h"\r
\r
/*!\r
* @brief 巻物を読むコマンドのサブルーチン\r
}\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
#include "angband.h"
#include "chest.h"
-
+#include "object-hook.h"
/*!
* @brief フロア脱出時に出戻りが不可能だった場合に警告を加える処理
}
}
-/*!
- * @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 投射処理メインルーチン /
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);
--- /dev/null
+\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
--- /dev/null
+\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
*/
#include "angband.h"
+#include "object-hook.h"
static void one_sustain(object_type *o_ptr);
}
/*!
- * @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 {
#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'.
#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 なし
*/
#include "angband.h"
+#include "object-hook.h"
/*! テレポート先探索の試行数 / Maximum number of tries for teleporting */
#define MAX_TRIES 100
/*!
- * @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を返す
*/
}
/*!
- * @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を返す
}
/*!
- * @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を返す
}
-/*!
- * @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 魔力充填処理 /