chg_virtue(player_ptr, V_INDIVIDUALISM, 1);
}
- if (is_friendly(em_ptr->m_ptr)) {
+ if (em_ptr->m_ptr->is_friendly()) {
chg_virtue(player_ptr, V_HONOUR, 1);
} else if (em_ptr->r_ptr->kind_flags.has_not(MonsterKindType::EVIL)) {
if (em_ptr->r_ptr->kind_flags.has(MonsterKindType::GOOD)) {
if (em_ptr->r_ptr->kind_flags.has(MonsterKindType::UNIQUE)) {
chg_virtue(player_ptr, V_INDIVIDUALISM, 1);
}
- if (is_friendly(em_ptr->m_ptr)) {
+ if (em_ptr->m_ptr->is_friendly()) {
chg_virtue(player_ptr, V_HONOUR, 1);
}
}
*/
static void postprocess_by_effected_pet(PlayerType *player_ptr, effect_monster_type *em_ptr)
{
- if ((em_ptr->dam <= 0) || is_pet(em_ptr->m_ptr) || is_friendly(em_ptr->m_ptr)) {
+ if ((em_ptr->dam <= 0) || is_pet(em_ptr->m_ptr) || em_ptr->m_ptr->is_friendly()) {
return;
}
*dead = false;
cancel_fear_by_pain(player_ptr, mam_pp_ptr);
make_monster_fear(player_ptr, mam_pp_ptr);
- if ((dam > 0) && !is_pet(m_ptr) && !is_friendly(m_ptr) && (mam_pp_ptr->who != m_idx)) {
+ if ((dam > 0) && !is_pet(m_ptr) && !m_ptr->is_friendly() && (mam_pp_ptr->who != m_idx)) {
if (is_pet(&floor_ptr->m_list[mam_pp_ptr->who]) && !player_bold(player_ptr, m_ptr->target_y, m_ptr->target_x)) {
set_target(m_ptr, floor_ptr->m_list[mam_pp_ptr->who].fy, floor_ptr->m_list[mam_pp_ptr->who].fx);
}
return monspeak_txt;
}
- if (is_friendly(m_ptr) && can_speak(ap_r_ref, MonsterSpeakType::SPEAK_FRIEND)) {
+ if (m_ptr->is_friendly() && can_speak(ap_r_ref, MonsterSpeakType::SPEAK_FRIEND)) {
return _("monfrien_j.txt", "monfrien.txt");
}
{
auto *m_ptr = &player_ptr->current_floor_ptr->m_list[m_idx];
auto *r_ptr = &r_info[m_ptr->r_idx];
- bool can_runaway = is_pet(m_ptr) || is_friendly(m_ptr);
+ bool can_runaway = is_pet(m_ptr) || m_ptr->is_friendly();
can_runaway &= (r_ptr->kind_flags.has(MonsterKindType::UNIQUE)) || (r_ptr->population_flags.has(MonsterPopulationType::NAZGUL));
can_runaway &= !player_ptr->phase_out;
if (!can_runaway) {
static bool is_friendly_idx(PlayerType *player_ptr, MONSTER_IDX m_idx)
{
- return m_idx > 0 && is_friendly(&player_ptr->current_floor_ptr->m_list[(m_idx)]);
+ if (m_idx == 0) {
+ return false;
+ }
+
+ const auto &m_ref = player_ptr->current_floor_ptr->m_list[m_idx];
+ return m_ref.is_friendly();
}
/*!
return m_ptr->ap_r_idx == m_ptr->r_idx;
}
-bool is_friendly(const monster_type *m_ptr)
-{
- return m_ptr->mflag2.has(MonsterConstantFlagType::FRIENDLY);
-}
-
bool is_pet(const monster_type *m_ptr)
{
return m_ptr->mflag2.has(MonsterConstantFlagType::PET);
bool is_hostile(const monster_type *m_ptr)
{
- return !is_friendly(m_ptr) && !is_pet(m_ptr);
+ return !m_ptr->is_friendly() && !is_pet(m_ptr);
}
/*!
bool monster_has_hostile_align(PlayerType *player_ptr, monster_type *m_ptr, int pa_good, int pa_evil, monster_race *r_ptr);
bool is_original_ap_and_seen(PlayerType *player_ptr, monster_type *m_ptr);
-bool is_friendly(const monster_type *m_ptr);
bool is_pet(const monster_type *m_ptr);
bool is_hostile(const monster_type *m_ptr);
bool is_original_ap(const monster_type *m_ptr);
auto *m_ptr = &player_ptr->current_floor_ptr->m_list[m_idx];
auto *r_ptr = &r_info[m_ptr->r_idx];
bool gets_angry = false;
- if (is_friendly(m_ptr) && has_aggravate(player_ptr)) {
+ if (m_ptr->is_friendly() && has_aggravate(player_ptr)) {
gets_angry = true;
}
*/
void anger_monster(PlayerType *player_ptr, monster_type *m_ptr)
{
- if (player_ptr->phase_out || !is_friendly(m_ptr)) {
+ if (player_ptr->phase_out || !m_ptr->is_friendly()) {
return;
}
summon_disturb(player_ptr, target_type, known, see_either);
int count = 0;
- if (is_friendly(m_ptr) && mon_to_mon) {
+ if (m_ptr->is_friendly() && mon_to_mon) {
count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_CYBER, (PM_ALLOW_GROUP));
} else {
count += summon_cyber(player_ptr, m_idx, y, x);
auto *floor_ptr = this->player_ptr->current_floor_ptr;
auto *angry_m_ptr = &floor_ptr->m_list[floor_ptr->grid_array[this->y][this->x].m_idx];
- if ((floor_ptr->grid_array[this->y][this->x].m_idx == 0) || !is_friendly(angry_m_ptr) || monster_invulner_remaining(angry_m_ptr)) {
+ if ((floor_ptr->grid_array[this->y][this->x].m_idx == 0) || !angry_m_ptr->is_friendly() || monster_invulner_remaining(angry_m_ptr)) {
this->do_drop = false;
return;
}
}
}
- if (is_friendly(m_ptr) && !is_pet(m_ptr)) {
+ if (m_ptr->is_friendly() && !is_pet(m_ptr)) {
if (see_m) {
msg_format(_("%sは怒った!", "%^s gets angry!"), m_name);
}
bool preserve_hold_objects = !back_m.hold_o_idx_list.empty();
BIT_FLAGS mode = 0L;
- if (is_friendly(m_ptr)) {
+ if (m_ptr->is_friendly()) {
mode |= PM_FORCE_FRIENDLY;
}
if (is_pet(m_ptr)) {
#include "system/monster-type-definition.h"
+
+bool monster_type::is_friendly() const
+{
+ return this->mflag2.has(MonsterConstantFlagType::FRIENDLY);
+}
/* TODO: クローン、ペット、有効化は意義が異なるので別変数に切り離すこと。save/loadのバージョン更新が面倒そうだけど */
EnumClassFlagGroup<MonsterSmartLearnType> smart{}; /*!< モンスターのプレイヤーに対する学習状態 / Field for "smart_learn" - Some bit-flags for the "smart" field */
MONSTER_IDX parent_m_idx{}; /*!< 召喚主のモンスターID */
+
+ bool is_friendly() const;
};
attitude = "";
} else if (is_pet(m_ptr)) {
attitude = _(", ペット", ", pet");
- } else if (is_friendly(m_ptr)) {
+ } else if (m_ptr->is_friendly()) {
attitude = _(", 友好的", ", friendly");
} else {
attitude = _("", "");