*/
static void invest_positive_modified_value(object_type *o_ptr)
{
- if (object_is_armour(o_ptr)) {
+ if (o_ptr->is_armour()) {
o_ptr->to_a += randint1(o_ptr->to_a > 19 ? 1 : 20 - o_ptr->to_a);
return;
}
*/
static void invest_negative_modified_value(object_type *o_ptr)
{
- if (!object_is_armour(o_ptr))
+ if (!o_ptr->is_armour())
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(o_ptr), power_level);
+ get_random_name(o_ptr, new_name, o_ptr->is_armour(), power_level);
return;
}
if (a_cursed)
curse_artifact(player_ptr, o_ptr);
- if (!a_cursed && one_in_(object_is_armour(o_ptr) ? ACTIVATION_CHANCE * 2 : ACTIVATION_CHANCE)) {
+ if (!a_cursed && one_in_(o_ptr->is_armour() ? ACTIVATION_CHANCE * 2 : ACTIVATION_CHANCE)) {
o_ptr->xtra2 = 0;
give_activation_power(o_ptr);
}
case 24:
case 25:
case 26:
- if (object_is_armour(o_ptr))
+ if (o_ptr->is_armour())
random_misc(player_ptr, o_ptr);
else
o_ptr->to_a = 4 + randint1(11);
if (!object_is_favorite(player_ptr, o_ptr))
return false;
} else if (IS_FLG(FLG_ARMORS)) {
- if (!object_is_armour(o_ptr))
+ if (!o_ptr->is_armour())
return false;
} else if (IS_FLG(FLG_MISSILES)) {
if (!object_is_ammo(o_ptr))
#include "system/building-type-definition.h"
#include "system/floor-type-definition.h"
#include "system/grid-type-definition.h"
+#include "system/object-type-definition.h"
#include "system/player-type-definition.h"
#include "term/screen-processor.h"
#include "util/bit-flags-calculator.h"
enchant_item(player_ptr, bcost, 1, 1, 0, FuncItemTester(object_allow_enchant_melee_weapon));
break;
case BACT_ENCHANT_ARMOR:
- enchant_item(player_ptr, bcost, 0, 0, 1, FuncItemTester(object_is_armour));
+ enchant_item(player_ptr, bcost, 0, 0, 1, FuncItemTester(&object_type::is_armour));
break;
case BACT_RECHARGE:
building_recharge(player_ptr);
else if (es_ptr->add == ESSENCE_ATTACK)
return std::make_unique<FuncItemTester>(object_allow_enchant_weapon);
else if (es_ptr->add == ESSENCE_AC)
- return std::make_unique<FuncItemTester>(object_is_armour);
+ return std::make_unique<FuncItemTester>(&object_type::is_armour);
else
return std::make_unique<FuncItemTester>(object_is_weapon_armour_ammo);
};
/* 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(o_armed_ptr))
+ if ((o_armed_ptr->k_idx) && object_is_cursed(o_armed_ptr) && o_armed_ptr->is_armour())
project(target_ptr, 0, 0, monap_ptr->m_ptr->fy, monap_ptr->m_ptr->fx, (target_ptr->lev * 2), typ[j][1], flg);
}
}
static void gain_armor_exp(player_type *target_ptr, monap_type *monap_ptr)
{
- if (!object_is_armour(&target_ptr->inventory_list[INVEN_MAIN_HAND]) && !object_is_armour(&target_ptr->inventory_list[INVEN_SUB_HAND]))
+ const auto o_ptr_mh = &target_ptr->inventory_list[INVEN_MAIN_HAND];
+ const auto o_ptr_sh = &target_ptr->inventory_list[INVEN_SUB_HAND];
+ if (!o_ptr_mh->is_armour() && !o_ptr_sh->is_armour())
return;
int cur = target_ptr->skill_exp[SKILL_SHIELD];
if (new_curse == TRC::LOW_MELEE && !object_is_weapon(o_ptr))
continue;
- if (new_curse == TRC::LOW_AC && !object_is_armour(o_ptr))
+ if (new_curse == TRC::LOW_AC && !o_ptr->is_armour())
continue;
break;
}
return false;
}
-
-/*!
- * @brief オブジェクトが防具として装備できるかどうかを返す / Check if an object is armour
- * @param o_ptr 対象のオブジェクト構造体ポインタ
- * @return 矢弾として使えるならばTRUEを返す
- */
-bool object_is_armour(const object_type *o_ptr)
-{
- if (TV_ARMOR_BEGIN <= o_ptr->tval && o_ptr->tval <= TV_ARMOR_END)
- return true;
-
- return false;
-}
typedef struct object_type object_type;
typedef struct player_type player_type;
bool item_tester_hook_wear(player_type *player_ptr, const object_type *o_ptr);
-bool object_is_armour(const object_type *o_ptr);
*/
bool object_is_weapon_armour_ammo(const object_type *o_ptr)
{
- if (object_is_weapon_ammo(o_ptr) || object_is_armour(o_ptr))
+ if (object_is_weapon_ammo(o_ptr) || o_ptr->is_armour())
return true;
return false;
break;
}
- if ((o_ptr == NULL) || (o_ptr->k_idx == 0) || !object_is_armour(o_ptr))
+ if ((o_ptr == NULL) || (o_ptr->k_idx == 0) || !o_ptr->is_armour())
return false;
GAME_TEXT o_name[MAX_NLEN];
ac += o_ptr->ac;
}
- if (object_is_armour(&creature_ptr->inventory_list[INVEN_MAIN_HAND]) || object_is_armour(&creature_ptr->inventory_list[INVEN_SUB_HAND])) {
+ const auto o_ptr_mh = &creature_ptr->inventory_list[INVEN_MAIN_HAND];
+ const auto o_ptr_sh = &creature_ptr->inventory_list[INVEN_SUB_HAND];
+ if (o_ptr_mh->is_armour() || o_ptr_sh->is_armour()) {
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(o_ptr))
+ if (!o_ptr->is_armour())
continue;
if (!object_is_cursed(o_ptr))
continue;
q = _("どれを呪いますか?", "Which piece of armour do you curse?");
s = _("防具を装備していない。", "You're not wearing any armor.");
- o_ptr = choose_object(caster_ptr, &item, q, s, (USE_EQUIP), FuncItemTester(object_is_armour));
+ o_ptr = choose_object(caster_ptr, &item, q, s, (USE_EQUIP), FuncItemTester(&object_type::is_armour));
if (!o_ptr)
return "";
concptr q = _("どの防具に錆止めをしますか?", "Rustproof which piece of armour? ");
concptr s = _("錆止めできるものがありません。", "You have nothing to rustproof.");
OBJECT_IDX item;
- object_type *o_ptr = choose_object(caster_ptr, &item, q, s, USE_EQUIP | USE_INVEN | USE_FLOOR | IGNORE_BOTHHAND_SLOT, FuncItemTester(object_is_armour));
+ object_type *o_ptr = choose_object(caster_ptr, &item, q, s, USE_EQUIP | USE_INVEN | USE_FLOOR | IGNORE_BOTHHAND_SLOT, FuncItemTester(&object_type::is_armour));
if (o_ptr == NULL)
return false;
/* Enchant armor if requested */
if (num_ac)
- item_tester = FuncItemTester(object_is_armour);
+ item_tester = FuncItemTester(&object_type::is_armour);
concptr q = _("どのアイテムを強化しますか? ", "Enchant which item? ");
concptr s = _("強化できるアイテムがない。", "You have nothing to enchant.");
is_lance &= (this->sval == SV_LANCE) || (this->sval == SV_HEAVY_LANCE);
return is_lance;
}
+
+/*!
+ * @brief オブジェクトが防具として装備できるかどうかを返す / Check if an object is armour
+ * @return 防具として装備できるならばtrueを返す
+ */
+bool object_type::is_armour() const
+{
+ return (TV_ARMOR_BEGIN <= this->tval) && (this->tval <= TV_ARMOR_END);
+}
void copy_from(object_type *j_ptr);
void prep(KIND_OBJECT_IDX ko_idx);
bool is_lance() const;
+ bool is_armour() const;
} object_type;