*/
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;
*/
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;
}
*/
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) {
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;
}
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);
}
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);
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)
}
} 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.
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)
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) {
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))
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))
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:
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:
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))
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))
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))
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.");
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)))
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.");
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;
}
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.");
/* 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);
}
}
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)
#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);
#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);
} 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;
}
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;
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);
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.");
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;
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;
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;
*/
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.");
* @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;
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);
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];
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;
}
*/
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;
}
}
/*!
- * @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;
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);
* @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))
}
/*!
- * @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を返す
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);
* @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);
}
/*
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);
(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;
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);
}
/*!
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);
}
* @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:
}
/*!
- * @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;
* @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;
* @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;
* @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;
* @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;
* @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;
* @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;
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);
}
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);
/*
* 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グローバル関数ポインタの条件を満たしているかを返す汎用関数
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); };
}
#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);
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);
}
}
- if (!object_is_smith(player_ptr, o_ptr))
+ if (!object_is_smith(o_ptr))
return;
int add = o_ptr->xtra3 - 1;
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];
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;
}
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;
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.");
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.");
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;
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)) {
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;
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;
*/
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;
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.");
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.");