OSDN Git Service

[Refactor] オブジェクト判定関数から不要なplayer_type引数を削除
authorHabu <habu1010+github@gmail.com>
Tue, 24 Aug 2021 12:17:40 +0000 (21:17 +0900)
committerHabu <habu1010+github@gmail.com>
Tue, 24 Aug 2021 12:17:40 +0000 (21:17 +0900)
オブジェクトを判定する関数で item_tester_hook に渡すだけのために
受け取っている player_type 引数を削除する。
item_tester_hook に渡すときはインターフェースを適合させるラッパー
関数を返す make_item_tester を呼ぶ。

43 files changed:
src/artifact/artifact-info.cpp
src/artifact/random-art-generator.cpp
src/artifact/random-art-misc.cpp
src/autopick/autopick-destroyer.cpp
src/autopick/autopick-entry.cpp
src/autopick/autopick-matcher.cpp
src/cmd-building/cmd-building.cpp
src/cmd-item/cmd-equipment.cpp
src/cmd-item/cmd-smith.cpp
src/combat/aura-counterattack.cpp
src/flavor/flavor-describer.cpp
src/flavor/named-item-describer.cpp
src/load/load-v1-5-0.cpp
src/market/building-craft-fix.cpp
src/market/building-craft-weapon.cpp
src/mind/mind-archer.cpp
src/mind/mind-priest.cpp
src/mind/mind-weaponsmith.cpp
src/mind/mind-weaponsmith.h
src/monster-attack/monster-attack-player.cpp
src/object-enchant/object-curse.cpp
src/object-enchant/object-ego.cpp
src/object-hook/hook-armor.cpp
src/object-hook/hook-armor.h
src/object-hook/hook-bow.cpp
src/object-hook/hook-bow.h
src/object-hook/hook-enchant.cpp
src/object-hook/hook-enchant.h
src/object-hook/hook-perception.cpp
src/object-hook/hook-weapon.cpp
src/object-hook/hook-weapon.h
src/object-use/throw-execution.cpp
src/object/item-tester-hooker.cpp
src/object/item-tester-hooker.h
src/object/object-flags.cpp
src/player/player-damage.cpp
src/player/player-status.cpp
src/realm/realm-hex.cpp
src/spell-kind/spells-enchant.cpp
src/spell-kind/spells-equipment.cpp
src/spell-kind/spells-perception.cpp
src/spell-realm/spells-nature.cpp
src/spell/spells-object.cpp

index 5bd8b36..c7e6da8 100644 (file)
@@ -25,7 +25,7 @@
  */
 int activation_index(player_type *player_ptr, object_type *o_ptr)
 {
-    if (object_is_smith(player_ptr, o_ptr)) {
+    if (object_is_smith(o_ptr)) {
         switch (o_ptr->xtra3 - 1) {
         case ESSENCE_TMP_RES_ACID:
             return ACT_RESIST_ACID;
index 632a832..5767898 100644 (file)
@@ -255,7 +255,7 @@ static void strengthen_pval(object_type *o_ptr)
  */
 static void invest_positive_modified_value(player_type *player_ptr, object_type *o_ptr)
 {
-    if (object_is_armour(player_ptr, o_ptr)) {
+    if (object_is_armour(o_ptr)) {
         o_ptr->to_a += randint1(o_ptr->to_a > 19 ? 1 : 20 - o_ptr->to_a);
         return;
     }
@@ -276,7 +276,7 @@ static void invest_positive_modified_value(player_type *player_ptr, object_type
  */
 static void invest_negative_modified_value(player_type *player_ptr, object_type *o_ptr)
 {
-    if (!object_is_armour(player_ptr, o_ptr))
+    if (!object_is_armour(o_ptr))
         return;
 
     while ((o_ptr->to_d + o_ptr->to_h) > 20) {
@@ -353,7 +353,7 @@ static int decide_random_art_power_level(object_type *o_ptr, const bool a_cursed
 static void name_unnatural_random_artifact(player_type *player_ptr, object_type *o_ptr, const bool a_scroll, const int power_level, GAME_TEXT *new_name)
 {
     if (!a_scroll) {
-        get_random_name(o_ptr, new_name, object_is_armour(player_ptr, o_ptr), power_level);
+        get_random_name(o_ptr, new_name, object_is_armour(o_ptr), power_level);
         return;
     }
 
@@ -426,7 +426,7 @@ bool become_random_artifact(player_type *player_ptr, object_type *o_ptr, bool a_
     if (a_cursed)
         curse_artifact(player_ptr, o_ptr);
 
-    if (!a_cursed && one_in_(object_is_armour(player_ptr, o_ptr) ? ACTIVATION_CHANCE * 2 : ACTIVATION_CHANCE)) {
+    if (!a_cursed && one_in_(object_is_armour(o_ptr) ? ACTIVATION_CHANCE * 2 : ACTIVATION_CHANCE)) {
         o_ptr->xtra2 = 0;
         give_activation_power(o_ptr);
     }
index febca28..b57bf51 100644 (file)
@@ -328,7 +328,7 @@ void random_misc(player_type *player_ptr, object_type *o_ptr)
     case 24:
     case 25:
     case 26:
-        if (object_is_armour(player_ptr, o_ptr))
+        if (object_is_armour(o_ptr))
             random_misc(player_ptr, o_ptr);
         else
             o_ptr->to_a = 4 + randint1(11);
index c135bfb..ad8fe64 100644 (file)
@@ -71,7 +71,7 @@ static bool is_opt_confirm_destroy(player_type *player_ptr, object_type *o_ptr)
             return false;
 
     if (leave_equip)
-        if (object_is_weapon_armour_ammo(player_ptr, o_ptr))
+        if (object_is_weapon_armour_ammo(o_ptr))
             return false;
 
     if (leave_chest)
index 453e3b1..cb7bf17 100644 (file)
@@ -341,7 +341,7 @@ void autopick_entry_from_object(player_type *player_ptr, autopick_type *entry, o
         }
     } else {
         if (object_is_ego(o_ptr)) {
-            if (object_is_weapon_armour_ammo(player_ptr, o_ptr)) {
+            if (object_is_weapon_armour_ammo(o_ptr)) {
                 /*
                  * Base name of ego weapons and armors
                  * are almost meaningless.
index 72135d4..0409da8 100644 (file)
@@ -100,7 +100,7 @@ bool is_autopick_match(player_type *player_ptr, object_type *o_ptr, autopick_typ
         if (!object_is_equipment(o_ptr))
             return false;
         if (object_is_known(o_ptr)) {
-            if (!object_is_nameless(player_ptr, o_ptr))
+            if (!object_is_nameless(o_ptr))
                 return false;
 
             if (o_ptr->to_a <= 0 && (o_ptr->to_h + o_ptr->to_d) <= 0)
@@ -122,7 +122,7 @@ bool is_autopick_match(player_type *player_ptr, object_type *o_ptr, autopick_typ
         if (!object_is_equipment(o_ptr))
             return false;
         if (object_is_known(o_ptr)) {
-            if (!object_is_nameless(player_ptr, o_ptr))
+            if (!object_is_nameless(o_ptr))
                 return false;
         } else if (o_ptr->ident & IDENT_SENSE) {
             switch (o_ptr->feeling) {
@@ -144,7 +144,7 @@ bool is_autopick_match(player_type *player_ptr, object_type *o_ptr, autopick_typ
         if (!object_is_equipment(o_ptr))
             return false;
         if (object_is_known(o_ptr)) {
-            if (!object_is_nameless(player_ptr, o_ptr))
+            if (!object_is_nameless(o_ptr))
                 return false;
 
             if (object_is_cursed(o_ptr) || object_is_broken(o_ptr))
@@ -204,13 +204,13 @@ bool is_autopick_match(player_type *player_ptr, object_type *o_ptr, autopick_typ
         return false;
 
     if (IS_FLG(FLG_WEAPONS)) {
-        if (!object_is_weapon(player_ptr, o_ptr))
+        if (!object_is_weapon(o_ptr))
             return false;
     } else if (IS_FLG(FLG_FAVORITE_WEAPONS)) {
         if (!object_is_favorite(player_ptr, o_ptr))
             return false;
     } else if (IS_FLG(FLG_ARMORS)) {
-        if (!object_is_armour(player_ptr, o_ptr))
+        if (!object_is_armour(o_ptr))
             return false;
     } else if (IS_FLG(FLG_MISSILES)) {
         if (!object_is_ammo(o_ptr))
index 860b2aa..4df6437 100644 (file)
@@ -166,11 +166,11 @@ static void bldg_process_command(player_type *player_ptr, building_type *bldg, i
         bcost = compare_weapons(player_ptr, bcost);
         break;
     case BACT_ENCHANT_WEAPON:
-        item_tester_hook = object_allow_enchant_melee_weapon;
+        item_tester_hook = make_item_tester(object_allow_enchant_melee_weapon);
         enchant_item(player_ptr, bcost, 1, 1, 0, TV_NONE);
         break;
     case BACT_ENCHANT_ARMOR:
-        item_tester_hook = object_is_armour;
+        item_tester_hook = make_item_tester(object_is_armour);
         enchant_item(player_ptr, bcost, 0, 0, 1, TV_NONE);
         break;
     case BACT_RECHARGE:
@@ -199,7 +199,7 @@ static void bldg_process_command(player_type *player_ptr, building_type *bldg, i
         paid = restore_all_status(player_ptr);
         break;
     case BACT_ENCHANT_ARROWS:
-        item_tester_hook = item_tester_hook_ammo;
+        item_tester_hook = make_item_tester(object_is_ammo);
         enchant_item(player_ptr, bcost, 1, 1, 0, TV_NONE);
         break;
     case BACT_ENCHANT_BOW:
index 6ea13a9..787c7f3 100644 (file)
@@ -114,7 +114,7 @@ void do_cmd_wield(player_type *creature_ptr)
     case TV_SHIELD:
     case TV_CARD:
         if (has_melee_weapon(creature_ptr, INVEN_MAIN_HAND) && has_melee_weapon(creature_ptr, INVEN_SUB_HAND)) {
-            item_tester_hook = item_tester_hook_melee_weapon;
+            item_tester_hook = make_item_tester(object_is_melee_weapon);
             q = _("どちらの武器と取り替えますか?", "Replace which weapon? ");
             s = _("おっと。", "Oops.");
             if (!choose_object(creature_ptr, &slot, q, s, (USE_EQUIP | IGNORE_BOTHHAND_SLOT), TV_NONE))
@@ -126,7 +126,7 @@ void do_cmd_wield(player_type *creature_ptr)
             slot = INVEN_MAIN_HAND;
         else if (creature_ptr->inventory_list[INVEN_MAIN_HAND].k_idx && !object_is_melee_weapon(&creature_ptr->inventory_list[INVEN_MAIN_HAND])
             && creature_ptr->inventory_list[INVEN_SUB_HAND].k_idx && !object_is_melee_weapon(&creature_ptr->inventory_list[INVEN_SUB_HAND])) {
-            item_tester_hook = item_tester_hook_mochikae;
+            item_tester_hook = make_item_tester(object_is_mochikae);
             q = _("どちらの手に装備しますか?", "Equip which hand? ");
             s = _("おっと。", "Oops.");
             if (!choose_object(creature_ptr, &slot, q, s, (USE_EQUIP), TV_NONE))
@@ -145,7 +145,7 @@ void do_cmd_wield(player_type *creature_ptr)
             if (!get_check(_("二刀流で戦いますか?", "Dual wielding? ")))
                 slot = INVEN_SUB_HAND;
         } else if (creature_ptr->inventory_list[INVEN_SUB_HAND].k_idx && creature_ptr->inventory_list[INVEN_MAIN_HAND].k_idx) {
-            item_tester_hook = item_tester_hook_mochikae;
+            item_tester_hook = make_item_tester(object_is_mochikae);
             q = _("どちらの手に装備しますか?", "Equip which hand? ");
             s = _("おっと。", "Oops.");
             if (!choose_object(creature_ptr, &slot, q, s, (USE_EQUIP), TV_NONE))
index 24c7a55..351a209 100644 (file)
@@ -241,7 +241,7 @@ static void drain_essence(player_type *creature_ptr)
     for (i = 0; i < sizeof(drain_value) / sizeof(int); i++)
         drain_value[i] = 0;
 
-    item_tester_hook = object_is_weapon_armour_ammo;
+    item_tester_hook = make_item_tester(object_is_weapon_armour_ammo);
 
     q = _("どのアイテムから抽出しますか?", "Extract from which item? ");
     s = _("抽出できるアイテムがありません。", "You have nothing you can extract from.");
@@ -250,7 +250,7 @@ static void drain_essence(player_type *creature_ptr)
     if (!o_ptr)
         return;
 
-    if (object_is_known(o_ptr) && !object_is_nameless(creature_ptr, o_ptr)) {
+    if (object_is_known(o_ptr) && !object_is_nameless(o_ptr)) {
         GAME_TEXT o_name[MAX_NLEN];
         describe_flavor(creature_ptr, o_name, o_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY));
         if (!get_check(format(_("本当に%sから抽出してよろしいですか?", "Really extract from %s? "), o_name)))
@@ -797,11 +797,11 @@ static void add_essence(player_type *creature_ptr, int32_t mode)
     else if (mode == 1 || mode == 5)
         item_tester_hook = item_tester_hook_melee_ammo;
     else if (es_ptr->add == ESSENCE_ATTACK)
-        item_tester_hook = object_allow_enchant_weapon;
+        item_tester_hook = make_item_tester(object_allow_enchant_weapon);
     else if (es_ptr->add == ESSENCE_AC)
-        item_tester_hook = object_is_armour;
+        item_tester_hook = make_item_tester(object_is_armour);
     else
-        item_tester_hook = object_is_weapon_armour_ammo;
+        item_tester_hook = make_item_tester(object_is_weapon_armour_ammo);
 
     q = _("どのアイテムを改良しますか?", "Improve which item? ");
     s = _("改良できるアイテムがありません。", "You have nothing to improve.");
@@ -810,7 +810,7 @@ static void add_essence(player_type *creature_ptr, int32_t mode)
     if (!o_ptr)
         return;
 
-    if ((mode != 10) && (object_is_artifact(o_ptr) || object_is_smith(creature_ptr, o_ptr))) {
+    if ((mode != 10) && (object_is_artifact(o_ptr) || object_is_smith(o_ptr))) {
         msg_print(_("そのアイテムはこれ以上改良できない。", "This item can not be improved any further."));
         return;
     }
@@ -993,7 +993,7 @@ static void erase_essence(player_type *creature_ptr)
     GAME_TEXT o_name[MAX_NLEN];
     TrFlags flgs;
 
-    item_tester_hook = object_is_smith;
+    item_tester_hook = make_item_tester(object_is_smith);
 
     q = _("どのアイテムのエッセンスを消去しますか?", "Remove from which item? ");
     s = _("エッセンスを付加したアイテムがありません。", "You have nothing with added essence to remove.");
index fcf4626..a06629b 100644 (file)
@@ -215,7 +215,7 @@ static void aura_shadow_by_monster_attack(player_type *target_ptr, monap_type *m
     /* Some cursed armours gives an extra effect */
     for (int j = 0; j < 4; j++) {
         o_armed_ptr = &target_ptr->inventory_list[typ[j][0]];
-        if ((o_armed_ptr->k_idx) && object_is_cursed(o_armed_ptr) && object_is_armour(target_ptr, o_armed_ptr))
+        if ((o_armed_ptr->k_idx) && object_is_cursed(o_armed_ptr) && object_is_armour(o_armed_ptr))
             project(target_ptr, 0, 0, monap_ptr->m_ptr->fy, monap_ptr->m_ptr->fx, (target_ptr->lev * 2), typ[j][1], flg);
     }
 }
index 56a30ce..be8ff0d 100644 (file)
@@ -107,7 +107,7 @@ static void decide_tval_show(player_type *player_ptr, flavor_type *flavor_ptr)
     if (has_flag(flavor_ptr->tr_flags, TR_SHOW_MODS))
         flavor_ptr->show_weapon = true;
 
-    if (object_is_smith(player_ptr, flavor_ptr->o_ptr) && (flavor_ptr->o_ptr->xtra3 == 1 + ESSENCE_SLAY_GLOVE))
+    if (object_is_smith(flavor_ptr->o_ptr) && (flavor_ptr->o_ptr->xtra3 == 1 + ESSENCE_SLAY_GLOVE))
         flavor_ptr->show_weapon = true;
 
     if (flavor_ptr->o_ptr->to_h && flavor_ptr->o_ptr->to_d)
index e15f93f..5e0dc6d 100644 (file)
@@ -370,7 +370,7 @@ void describe_named_item(player_type *player_ptr, flavor_type *flavor_ptr)
 #endif
 
 #ifdef JP
-    if (object_is_smith(player_ptr, flavor_ptr->o_ptr))
+    if (object_is_smith(flavor_ptr->o_ptr))
         flavor_ptr->t = object_desc_str(flavor_ptr->t, format("鍛冶師%sの", player_ptr->name));
 
     describe_artifact_ja(flavor_ptr);
@@ -382,7 +382,7 @@ void describe_named_item(player_type *player_ptr, flavor_type *flavor_ptr)
 #ifdef JP
     describe_artifact_body_ja(flavor_ptr);
 #else
-    if (object_is_smith(player_ptr, flavor_ptr->o_ptr))
+    if (object_is_smith(flavor_ptr->o_ptr))
         flavor_ptr->t = object_desc_str(flavor_ptr->t, format(" of %s the Smith", player_ptr->name));
 
     describe_artifact_body_en(flavor_ptr);
index bf8de3a..af6e00d 100644 (file)
@@ -280,7 +280,7 @@ void rd_item_old(player_type *player_ptr, object_type *o_ptr)
     } else {
         rd_byte(&o_ptr->xtra3);
         if (h_older_than(1, 3, 0, 1)) {
-            if (object_is_smith(player_ptr, o_ptr) && o_ptr->xtra3 >= 1 + 96)
+            if (object_is_smith(o_ptr) && o_ptr->xtra3 >= 1 + 96)
                 o_ptr->xtra3 += -96 + MIN_SPECIAL_ESSENCE;
         }
 
index c3bd901..9a0f0ec 100644 (file)
@@ -98,7 +98,7 @@ static PRICE repair_broken_weapon_aux(player_type *player_ptr, PRICE bcost)
 
     concptr q = _("どの折れた武器を修復しますか?", "Repair which broken weapon? ");
     concptr s = _("修復できる折れた武器がありません。", "You have no broken weapon to repair.");
-    item_tester_hook = item_tester_hook_broken_weapon;
+    item_tester_hook = make_item_tester(object_is_broken_weapon);
 
     OBJECT_IDX item;
     object_type *o_ptr;
@@ -123,7 +123,7 @@ static PRICE repair_broken_weapon_aux(player_type *player_ptr, PRICE bcost)
     q = _("材料となる武器は?", "Which weapon for material? ");
     s = _("材料となる武器がありません。", "You have no material for the repair.");
 
-    item_tester_hook = item_tester_hook_orthodox_melee_weapons;
+    item_tester_hook = make_item_tester(object_is_orthodox_melee_weapons);
     OBJECT_IDX mater;
     object_type *mo_ptr;
     mo_ptr = choose_object(player_ptr, &mater, q, s, (USE_INVEN | USE_EQUIP), TV_NONE);
index 6bce25a..4e25a5b 100644 (file)
@@ -363,7 +363,7 @@ PRICE compare_weapons(player_type *customer_ptr, PRICE bcost)
     i_ptr = &customer_ptr->inventory_list[INVEN_MAIN_HAND];
     (&orig_weapon)->copy_from(i_ptr);
 
-    item_tester_hook = item_tester_hook_orthodox_melee_weapons;
+    item_tester_hook = make_item_tester(object_is_orthodox_melee_weapons);
     concptr q = _("第一の武器は?", "What is your first weapon? ");
     concptr s = _("比べるものがありません。", "You have nothing to compare.");
 
@@ -418,7 +418,7 @@ PRICE compare_weapons(player_type *customer_ptr, PRICE bcost)
             continue;
         }
 
-        item_tester_hook = item_tester_hook_orthodox_melee_weapons;
+        item_tester_hook = make_item_tester(object_is_orthodox_melee_weapons);
         q = _("第二の武器は?", "What is your second weapon? ");
         s = _("比べるものがありません。", "You have nothing to compare.");
         OBJECT_IDX item2;
index 1b09e4e..2a54717 100644 (file)
@@ -139,7 +139,7 @@ bool create_ammo(player_type *creature_ptr)
         return true;
     }
     case AMMO_ARROW: {
-        item_tester_hook = item_tester_hook_convertible;
+        item_tester_hook = make_item_tester(object_is_convertible);
         concptr q = _("どのアイテムから作りますか? ", "Convert which item? ");
         concptr s = _("材料を持っていない。", "You have no item to convert.");
         OBJECT_IDX item;
@@ -166,7 +166,7 @@ bool create_ammo(player_type *creature_ptr)
         return true;
     }
     case AMMO_BOLT: {
-        item_tester_hook = item_tester_hook_convertible;
+        item_tester_hook = make_item_tester(object_is_convertible);
         concptr q = _("どのアイテムから作りますか? ", "Convert which item? ");
         concptr s = _("材料を持っていない。", "You have no item to convert.");
         OBJECT_IDX item;
index 5ce581c..5cde5fa 100644 (file)
@@ -27,7 +27,7 @@
  */
 bool bless_weapon(player_type *caster_ptr)
 {
-    item_tester_hook = object_is_weapon;
+    item_tester_hook = make_item_tester(object_is_weapon);
 
     concptr q = _("どのアイテムを祝福しますか?", "Bless which weapon? ");
     concptr s = _("祝福できる武器がありません。", "You have weapon to bless.");
index cbd247b..d73a32b 100644 (file)
@@ -40,12 +40,9 @@ bool item_tester_hook_melee_ammo(player_type *player_ptr, object_type *o_ptr)
  * @param o_ptr 対象のオブジェクト構造体ポインタ
  * @return エッセンス付加済みならばTRUEを返す
  */
-bool object_is_smith(player_type *player_ptr, object_type *o_ptr)
+bool object_is_smith(object_type *o_ptr)
 {
-    /* Unused */
-    (void)player_ptr;
-
-    if (object_is_weapon_armour_ammo(player_ptr, o_ptr) && o_ptr->xtra3)
+    if (object_is_weapon_armour_ammo(o_ptr) && o_ptr->xtra3)
         return true;
 
     return false;
index e7da288..248fd10 100644 (file)
@@ -3,4 +3,4 @@
 typedef struct object_type object_type;
 typedef struct player_type player_type;
 bool item_tester_hook_melee_ammo(player_type *player_ptr, object_type *o_ptr);
-bool object_is_smith(player_type *player_ptr, object_type *o_ptr);
+bool object_is_smith(object_type *o_ptr);
index 3d99066..de7ab02 100644 (file)
@@ -279,7 +279,7 @@ static void describe_attack_evasion(player_type *target_ptr, monap_type *monap_p
 
 static void gain_armor_exp(player_type *target_ptr, monap_type *monap_ptr)
 {
-    if (!object_is_armour(target_ptr, &target_ptr->inventory_list[INVEN_MAIN_HAND]) && !object_is_armour(target_ptr, &target_ptr->inventory_list[INVEN_SUB_HAND]))
+    if (!object_is_armour(&target_ptr->inventory_list[INVEN_MAIN_HAND]) && !object_is_armour(&target_ptr->inventory_list[INVEN_SUB_HAND]))
         return;
 
     int cur = target_ptr->skill_exp[SKILL_SHIELD];
index 389c9d3..d781b66 100644 (file)
@@ -45,9 +45,9 @@ TRC get_curse(player_type *owner_ptr, int power, object_type *o_ptr)
                 continue;
         }
 
-        if (new_curse == TRC::LOW_MELEE && !object_is_weapon(owner_ptr, o_ptr))
+        if (new_curse == TRC::LOW_MELEE && !object_is_weapon(o_ptr))
             continue;
-        if (new_curse == TRC::LOW_AC && !object_is_armour(owner_ptr, o_ptr))
+        if (new_curse == TRC::LOW_AC && !object_is_armour(o_ptr))
             continue;
         break;
     }
index 8eeaff7..3c187ab 100644 (file)
@@ -204,7 +204,7 @@ static bool ego_has_flag(object_type *o_ptr, ego_item_type *e_ptr, tr_type flag)
  */
 void ego_invest_extra_attack(player_type *player_ptr, object_type *o_ptr, ego_item_type *e_ptr, DEPTH lev)
 {
-    if (!object_is_weapon(player_ptr, o_ptr)) {
+    if (!object_is_weapon(o_ptr)) {
         o_ptr->pval = e_ptr->max_pval >= 0 ? 1 : randint1_signed(e_ptr->max_pval);
         return;
     }
index 4938899..9d3d559 100644 (file)
@@ -26,28 +26,12 @@ bool item_tester_hook_wear(player_type *player_ptr, object_type *o_ptr)
 }
 
 /*!
- * @brief 呪術領域の各処理に使える呪われた装備かどうかを返す。 / An "item_tester_hook" for offer
- * @param o_ptr オブジェクト構造体の参照ポインタ
- * @return 使える装備ならばTRUEを返す
- */
-bool item_tester_hook_cursed(player_type *player_ptr, object_type *o_ptr)
-{
-    /* Unused */
-    (void)player_ptr;
-
-    return (bool)(object_is_cursed(o_ptr));
-}
-
-/*!
  * @brief オブジェクトが防具として装備できるかどうかを返す / Check if an object is armour
  * @param o_ptr 対象のオブジェクト構造体ポインタ
  * @return 矢弾として使えるならばTRUEを返す
  */
-bool object_is_armour(player_type *player_ptr, object_type *o_ptr)
+bool object_is_armour(object_type *o_ptr)
 {
-    /* Unused */
-    (void)player_ptr;
-
     if (TV_ARMOR_BEGIN <= o_ptr->tval && o_ptr->tval <= TV_ARMOR_END)
         return true;
 
index 1eceb47..0114a4f 100644 (file)
@@ -4,4 +4,4 @@ typedef struct object_type object_type;
 typedef struct player_type player_type;
 bool item_tester_hook_wear(player_type *player_ptr, object_type *o_ptr);
 bool item_tester_hook_cursed(player_type *player_ptr, object_type *o_ptr);
-bool object_is_armour(player_type *player_ptr, object_type *o_ptr);
+bool object_is_armour(object_type *o_ptr);
index aba8a4a..b2df0b7 100644 (file)
@@ -9,11 +9,8 @@
  * @param o_ptr オブジェクトの構造体の参照ポインタ。
  * @return 材料にできるならTRUEを返す
  */
-bool item_tester_hook_convertible(player_type *player_ptr, object_type *o_ptr)
+bool object_is_convertible(object_type *o_ptr)
 {
-    /* Unused */
-    (void)player_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))
@@ -22,30 +19,6 @@ bool item_tester_hook_convertible(player_type *player_ptr, object_type *o_ptr)
 }
 
 /*!
- * @brief 武器匠の「矢弾」鑑定対象になるかを判定する。/ Hook to specify "weapon"
- * @param o_ptr オブジェクトの構造体の参照ポインタ。
- * @return 対象になるならTRUEを返す。
- */
-bool item_tester_hook_ammo(player_type *player_ptr, object_type *o_ptr)
-{
-    /* Unused */
-    (void)player_ptr;
-
-    switch (o_ptr->tval) {
-    case TV_SHOT:
-    case TV_ARROW:
-    case TV_BOLT: {
-        return true;
-    }
-
-    default:
-        break;
-    }
-
-    return false;
-}
-
-/*!
  * @brief オブジェクトが矢弾として使用できるかどうかを返す / Check if an object is ammo
  * @param o_ptr 対象のオブジェクト構造体ポインタ
  * @return 矢弾として使えるならばTRUEを返す
index 6f5feb7..1a5724e 100644 (file)
@@ -2,6 +2,5 @@
 
 typedef struct object_type object_type;
 typedef struct player_type player_type;
-bool item_tester_hook_convertible(player_type *player_ptr, object_type *o_ptr);
-bool item_tester_hook_ammo(player_type *player_ptr, object_type *o_ptr);
+bool object_is_convertible(object_type *o_ptr);
 bool object_is_ammo(object_type *o_ptr);
index f638bc4..2527cbf 100644 (file)
@@ -98,12 +98,9 @@ bool object_is_random_artifact(object_type *o_ptr) { return object_is_artifact(o
  * @param o_ptr 対象のオブジェクト構造体ポインタ
  * @return 通常のアイテムならばTRUEを返す
  */
-bool object_is_nameless(player_type *player_ptr, object_type *o_ptr)
+bool object_is_nameless(object_type *o_ptr)
 {
-    /* Unused */
-    (void)player_ptr;
-
-    return !object_is_artifact(o_ptr) && !object_is_ego(o_ptr) && !object_is_smith(player_ptr, o_ptr);
+    return !object_is_artifact(o_ptr) && !object_is_ego(o_ptr) && !object_is_smith(o_ptr);
 }
 
 /*
index f93499d..274742b 100644 (file)
@@ -7,4 +7,4 @@ bool object_is_ego(object_type *o_ptr);
 bool object_is_rare(object_type *o_ptr);
 bool object_is_artifact(object_type *o_ptr);
 bool object_is_random_artifact(object_type *o_ptr);
-bool object_is_nameless(player_type *player_ptr, object_type *o_ptr);
+bool object_is_nameless(object_type *o_ptr);
index e1d7d35..aa949ed 100644 (file)
@@ -17,11 +17,11 @@ bool item_tester_hook_nameless_weapon_armour(player_type *player_ptr, object_typ
     (void)player_ptr;
 
     /* Require weapon or armour */
-    if (!object_is_weapon_armour_ammo(player_ptr, o_ptr))
+    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(player_ptr, o_ptr))
+    if (object_is_known(o_ptr) && !object_is_nameless(o_ptr))
         return false;
 
     return true;
@@ -53,7 +53,7 @@ bool item_tester_hook_identify_weapon_armour(player_type *player_ptr, object_typ
     if (object_is_known(o_ptr))
 
         return false;
-    return object_is_weapon_armour_ammo(player_ptr, o_ptr);
+    return object_is_weapon_armour_ammo(o_ptr);
 }
 
 /*!
@@ -82,5 +82,5 @@ bool item_tester_hook_identify_fully_weapon_armour(player_type *player_ptr, obje
     if (!item_tester_hook_identify_fully(player_ptr, o_ptr))
         return false;
 
-    return object_is_weapon_armour_ammo(player_ptr, o_ptr);
+    return object_is_weapon_armour_ammo(o_ptr);
 }
index 37ed1fc..cd8a7a8 100644 (file)
  * @param o_ptr オブジェクトの構造体の参照ポインタ。
  * @return 対象になるならTRUEを返す。
  */
-bool item_tester_hook_orthodox_melee_weapons(player_type *player_ptr, object_type *o_ptr)
+bool object_is_orthodox_melee_weapons(object_type *o_ptr)
 {
-    /* Unused */
-    (void)player_ptr;
-
     switch (o_ptr->tval) {
     case TV_HAFTED:
     case TV_POLEARM:
@@ -37,32 +34,12 @@ bool item_tester_hook_orthodox_melee_weapons(player_type *player_ptr, object_typ
 }
 
 /*!
- * @brief オブジェクトが右手か左手に装備できる武器かどうかの判定
- * @param o_ptr 判定するオブジェクトの構造体参照ポインタ
- * @return 右手か左手の武器として装備できるならばTRUEを返す。
- */
-bool item_tester_hook_melee_weapon(player_type *player_ptr, object_type *o_ptr)
-{
-    /* Unused */
-    (void)player_ptr;
-
-    /* Check for a usable slot */
-    if ((o_ptr->tval >= TV_DIGGING) && (o_ptr->tval <= TV_SWORD))
-        return true;
-
-    return false;
-}
-
-/*!
  * @brief 修復対象となる壊れた武器かを判定する。 / Hook to specify "broken weapon"
  * @param o_ptr オブジェクトの構造体の参照ポインタ。
  * @return 修復対象になるならTRUEを返す。
  */
-bool item_tester_hook_broken_weapon(player_type *player_ptr, object_type *o_ptr)
+bool object_is_broken_weapon(object_type *o_ptr)
 {
-    /* Unused */
-    (void)player_ptr;
-
     if (o_ptr->tval != TV_SWORD)
         return false;
 
@@ -80,11 +57,8 @@ bool item_tester_hook_broken_weapon(player_type *player_ptr, object_type *o_ptr)
  * @param o_ptr 判定するオブジェクトの構造体参照ポインタ
  * @return 投射可能な武器ならばTRUE
  */
-bool item_tester_hook_boomerang(player_type *player_ptr, object_type *o_ptr)
+bool object_is_boomerang(object_type *o_ptr)
 {
-    /* Unused */
-    (void)player_ptr;
-
     if ((o_ptr->tval == TV_DIGGING) || (o_ptr->tval == TV_SWORD) || (o_ptr->tval == TV_POLEARM) || (o_ptr->tval == TV_HAFTED))
         return true;
 
@@ -96,11 +70,8 @@ bool item_tester_hook_boomerang(player_type *player_ptr, object_type *o_ptr)
  * @param o_ptr 判定するオブジェクトの構造体参照ポインタ
  * @return 左右両方の手で装備できるならばTRUEを返す。
  */
-bool item_tester_hook_mochikae(player_type *player_ptr, object_type *o_ptr)
+bool object_is_mochikae(object_type *o_ptr)
 {
-    /* Unused */
-    (void)player_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;
@@ -174,11 +145,8 @@ bool object_is_favorite(player_type *player_ptr, object_type *o_ptr)
  * @param o_ptr 対象のオブジェクト構造体ポインタ
  * @return 武器として使えるならばTRUEを返す
  */
-bool object_is_weapon(player_type *player_ptr, object_type *o_ptr)
+bool object_is_weapon(object_type *o_ptr)
 {
-    /* Unused */
-    (void)player_ptr;
-
     if (TV_WEAPON_BEGIN <= o_ptr->tval && o_ptr->tval <= TV_WEAPON_END)
         return true;
 
@@ -204,12 +172,9 @@ bool object_is_weapon_ammo(object_type *o_ptr)
  * @param o_ptr 対象のオブジェクト構造体ポインタ
  * @return 武器、防具、矢弾として使えるならばTRUEを返す
  */
-bool object_is_weapon_armour_ammo(player_type *player_ptr, object_type *o_ptr)
+bool object_is_weapon_armour_ammo(object_type *o_ptr)
 {
-    /* Unused */
-    (void)player_ptr;
-
-    if (object_is_weapon_ammo(o_ptr) || object_is_armour(player_ptr, o_ptr))
+    if (object_is_weapon_ammo(o_ptr) || object_is_armour(o_ptr))
         return true;
 
     return false;
@@ -273,11 +238,8 @@ bool object_refuse_enchant_weapon(object_type *o_ptr)
  * @param o_ptr 対象のオブジェクト構造体ポインタ
  * @return 強化可能ならばTRUEを返す
  */
-bool object_allow_enchant_weapon(player_type *player_ptr, object_type *o_ptr)
+bool object_allow_enchant_weapon(object_type *o_ptr)
 {
-    /* Unused */
-    (void)player_ptr;
-
     if (object_is_weapon_ammo(o_ptr) && !object_refuse_enchant_weapon(o_ptr))
         return true;
 
@@ -290,11 +252,8 @@ bool object_allow_enchant_weapon(player_type *player_ptr, object_type *o_ptr)
  * @param o_ptr 対象のオブジェクト構造体ポインタ
  * @return 強化可能な近接武器ならばTRUEを返す
  */
-bool object_allow_enchant_melee_weapon(player_type *player_ptr, object_type *o_ptr)
+bool object_allow_enchant_melee_weapon(object_type *o_ptr)
 {
-    /* Unused */
-    (void)player_ptr;
-
     if (object_is_melee_weapon(o_ptr) && !object_refuse_enchant_weapon(o_ptr))
         return true;
 
index ea2e4b5..9818d71 100644 (file)
@@ -2,19 +2,18 @@
 
 typedef struct object_type object_type;
 typedef struct player_type player_type;
-bool item_tester_hook_orthodox_melee_weapons(player_type *player_ptr, object_type *o_ptr);
-bool item_tester_hook_melee_weapon(player_type *player_ptr, object_type *o_ptr);
-bool item_tester_hook_broken_weapon(player_type *player_ptr, object_type *o_ptr);
-bool item_tester_hook_boomerang(player_type *player_ptr, object_type *o_ptr);
-bool item_tester_hook_mochikae(player_type *player_ptr, object_type *o_ptr);
+bool object_is_orthodox_melee_weapons(object_type *o_ptr);
+bool object_is_broken_weapon(object_type *o_ptr);
+bool object_is_boomerang(object_type *o_ptr);
+bool object_is_mochikae(object_type *o_ptr);
 bool object_is_favorite(player_type *player_ptr, object_type *o_ptr);
-bool object_is_weapon(player_type *player_ptr, object_type *o_ptr);
+bool object_is_weapon(object_type *o_ptr);
 bool object_is_weapon_ammo(object_type *o_ptr);
-bool object_is_weapon_armour_ammo(player_type *player_ptr, object_type *o_ptr);
+bool object_is_weapon_armour_ammo(object_type *o_ptr);
 bool object_is_melee_weapon(object_type *o_ptr);
 bool object_is_wearable(object_type *o_ptr);
 bool object_is_equipment(object_type *o_ptr);
 bool object_refuse_enchant_weapon(object_type *o_ptr);
-bool object_allow_enchant_weapon(player_type *player_ptr, object_type *o_ptr);
-bool object_allow_enchant_melee_weapon(player_type *player_ptr, object_type *o_ptr);
+bool object_allow_enchant_weapon(object_type *o_ptr);
+bool object_allow_enchant_melee_weapon(object_type *o_ptr);
 bool object_allow_two_hands_wielding(object_type *o_ptr);
index 37532ea..c7ccc66 100644 (file)
@@ -354,7 +354,7 @@ bool ObjectThrowEntity::check_throw_boomerang(concptr *q, concptr *s)
     }
 
     if (has_melee_weapon(this->creature_ptr, INVEN_MAIN_HAND) && has_melee_weapon(this->creature_ptr, INVEN_SUB_HAND)) {
-        item_tester_hook = item_tester_hook_boomerang;
+        item_tester_hook = make_item_tester(object_is_boomerang);
         *q = _("どの武器を投げますか? ", "Throw which item? ");
         *s = _("投げる武器がない。", "You have nothing to throw.");
         this->o_ptr = choose_object(this->creature_ptr, &this->item, *q, *s, USE_EQUIP, TV_NONE);
index fe93ee3..9a15499 100644 (file)
@@ -13,7 +13,7 @@
 /*
  * Used during calls to "get_item()" and "show_inven()" and "show_equip()", and the choice window routines.
  */
-bool (*item_tester_hook)(player_type *, object_type *);
+std::function<bool(player_type *, object_type *)> item_tester_hook;
 
 /*!
  * @brief アイテムがitem_tester_hookグローバル関数ポインタの条件を満たしているかを返す汎用関数
@@ -41,5 +41,16 @@ bool item_tester_okay(player_type *player_ptr, object_type *o_ptr, tval_type tva
     if (item_tester_hook == NULL)
         return true;
 
-    return (*item_tester_hook)(player_ptr, o_ptr);
+    return item_tester_hook(player_ptr, o_ptr);
+}
+
+/*!
+ * @brief オブジェクト判定関数を item_tester_hook に渡すためのラッパー関数を生成する
+ *
+ * @param pred オブジェクトへのポインタを受け取り、オブジェクトが条件に適合するかどうかを返す関数
+ * @return item_tester_hook に渡すラッパー関数を返す
+ */
+ItemTester make_item_tester(std::function<bool(object_type *)> pred)
+{
+    return [pred = std::move(pred)](player_type *, object_type *o_ptr) { return pred(o_ptr); };
 }
index a58bb97..8b29035 100644 (file)
@@ -2,8 +2,14 @@
 
 #include "object/tval-types.h"
 
+#include <functional>
+
 typedef struct object_type object_type;
 typedef struct player_type player_type;
-extern bool (*item_tester_hook)(player_type *, object_type *o_ptr);
+
+using ItemTester = std::function<bool(player_type *, object_type *)>;
+extern ItemTester item_tester_hook;
 
 bool item_tester_okay(player_type *player_ptr, object_type *o_ptr, tval_type tval);
+
+ItemTester make_item_tester(std::function<bool(object_type *)> pred);
index cbd68d1..d64dd55 100644 (file)
@@ -55,7 +55,7 @@ void object_flags(player_type *player_ptr, object_type *o_ptr, TrFlags &flgs)
         flgs[i] |= o_ptr->art_flags[i];
     }
 
-    if (object_is_smith(player_ptr, o_ptr)) {
+    if (object_is_smith(o_ptr)) {
         int add = o_ptr->xtra3 - 1;
         if (add < TR_FLAG_MAX) {
             add_flag(flgs, add);
@@ -147,7 +147,7 @@ void object_flags_known(player_type *player_ptr, object_type *o_ptr, TrFlags &fl
         }
     }
 
-    if (!object_is_smith(player_ptr, o_ptr))
+    if (!object_is_smith(o_ptr))
         return;
 
     int add = o_ptr->xtra3 - 1;
index 570be40..03da44e 100644 (file)
@@ -105,7 +105,7 @@ static bool acid_minus_ac(player_type *creature_ptr)
         break;
     }
 
-    if ((o_ptr == NULL) || (o_ptr->k_idx == 0) || !object_is_armour(creature_ptr, o_ptr))
+    if ((o_ptr == NULL) || (o_ptr->k_idx == 0) || !object_is_armour(o_ptr))
         return false;
 
     GAME_TEXT o_name[MAX_NLEN];
index 6ef2237..a8133e5 100644 (file)
@@ -1608,8 +1608,7 @@ static ARMOUR_CLASS calc_base_ac(player_type *creature_ptr)
         ac += o_ptr->ac;
     }
 
-    if (object_is_armour(creature_ptr, &creature_ptr->inventory_list[INVEN_MAIN_HAND])
-        || object_is_armour(creature_ptr, &creature_ptr->inventory_list[INVEN_SUB_HAND])) {
+    if (object_is_armour(&creature_ptr->inventory_list[INVEN_MAIN_HAND]) || object_is_armour(&creature_ptr->inventory_list[INVEN_SUB_HAND])) {
         ac += creature_ptr->skill_exp[SKILL_SHIELD] * (1 + creature_ptr->lev / 22) / 2000;
     }
 
@@ -1728,7 +1727,7 @@ static ARMOUR_CLASS calc_to_ac(player_type *creature_ptr, bool is_real_value)
             object_type *o_ptr = &creature_ptr->inventory_list[i];
             if (!o_ptr->k_idx)
                 continue;
-            if (!object_is_armour(creature_ptr, o_ptr))
+            if (!object_is_armour(o_ptr))
                 continue;
             if (!object_is_cursed(o_ptr))
                 continue;
index a3544c2..63866f2 100644 (file)
@@ -504,7 +504,7 @@ concptr do_hex_spell(player_type *caster_ptr, SPELL_IDX spell, spell_type mode)
             object_type *o_ptr;
             TrFlags f;
 
-            item_tester_hook = object_is_armour;
+            item_tester_hook = make_item_tester(object_is_armour);
             q = _("どれを呪いますか?", "Which piece of armour do you curse?");
             s = _("防具を装備していない。", "You're not wearing any armor.");
 
@@ -705,7 +705,7 @@ concptr do_hex_spell(player_type *caster_ptr, SPELL_IDX spell, spell_type mode)
             TrFlags f;
             object_type *o_ptr;
 
-            item_tester_hook = item_tester_hook_cursed;
+            item_tester_hook = make_item_tester(object_is_cursed);
             q = _("どの装備品から吸収しますか?", "Which cursed equipment do you drain mana from?");
             s = _("呪われたアイテムを装備していない。", "You have no cursed equipment.");
 
index 447528f..322c353 100644 (file)
@@ -122,7 +122,7 @@ bool artifact_scroll(player_type *caster_ptr)
 bool mundane_spell(player_type *owner_ptr, bool only_equip)
 {
     if (only_equip)
-        item_tester_hook = object_is_weapon_armour_ammo;
+        item_tester_hook = make_item_tester(object_is_weapon_armour_ammo);
 
     OBJECT_IDX item;
     object_type *o_ptr;
index 587f385..ddd602d 100644 (file)
@@ -56,7 +56,7 @@ bool apply_disenchant(player_type *target_ptr, BIT_FLAGS mode)
     if (!o_ptr->k_idx)
         return false;
 
-    if (!object_is_weapon_armour_ammo(target_ptr, o_ptr))
+    if (!object_is_weapon_armour_ammo(o_ptr))
         return false;
 
     if ((o_ptr->to_h <= 0) && (o_ptr->to_d <= 0) && (o_ptr->to_a <= 0) && (o_ptr->pval <= 1)) {
index 0bb1bf4..e683586 100644 (file)
@@ -110,7 +110,7 @@ bool ident_spell(player_type *caster_ptr, bool only_equip, tval_type item_tester
         q = _("どのアイテムを鑑定しますか? ", "Identify which item? ");
     } else {
         if (only_equip)
-            item_tester_hook = object_is_weapon_armour_ammo;
+            item_tester_hook = make_item_tester(object_is_weapon_armour_ammo);
         else
             item_tester_hook = NULL;
 
@@ -162,7 +162,7 @@ bool identify_fully(player_type *caster_ptr, bool only_equip, tval_type item_tes
         q = _("どのアイテムを*鑑定*しますか? ", "*Identify* which item? ");
     } else {
         if (only_equip)
-            item_tester_hook = object_is_weapon_armour_ammo;
+            item_tester_hook = make_item_tester(object_is_weapon_armour_ammo);
         else
             item_tester_hook = NULL;
 
index d7bf0ac..a4b99f8 100644 (file)
@@ -20,7 +20,7 @@
  */
 bool rustproof(player_type *caster_ptr)
 {
-    item_tester_hook = object_is_armour;
+    item_tester_hook = make_item_tester(object_is_armour);
     concptr q = _("どの防具に錆止めをしますか?", "Rustproof which piece of armour? ");
     concptr s = _("錆止めできるものがありません。", "You have nothing to rustproof.");
     OBJECT_IDX item;
index edaac70..33811c3 100644 (file)
@@ -549,11 +549,11 @@ bool enchant_equipment(player_type *caster_ptr, object_type *o_ptr, int n, int e
 bool enchant_spell(player_type *caster_ptr, HIT_PROB num_hit, HIT_POINT num_dam, ARMOUR_CLASS num_ac)
 {
     /* Assume enchant weapon */
-    item_tester_hook = object_allow_enchant_weapon;
+    item_tester_hook = make_item_tester(object_allow_enchant_weapon);
 
     /* Enchant armor if requested */
     if (num_ac)
-        item_tester_hook = object_is_armour;
+        item_tester_hook = make_item_tester(object_is_armour);
 
     concptr q = _("どのアイテムを強化しますか? ", "Enchant which item? ");
     concptr s = _("強化できるアイテムがない。", "You have nothing to enchant.");
@@ -605,7 +605,7 @@ bool enchant_spell(player_type *caster_ptr, HIT_PROB num_hit, HIT_POINT num_dam,
 void brand_weapon(player_type *caster_ptr, int brand_type)
 {
     /* Assume enchant weapon */
-    item_tester_hook = object_allow_enchant_melee_weapon;
+    item_tester_hook = make_item_tester(object_allow_enchant_melee_weapon);
 
     concptr q = _("どの武器を強化しますか? ", "Enchant which weapon? ");
     concptr s = _("強化できる武器がない。", "You have nothing to enchant.");