1 #include "system/monster-type-definition.h"
2 #include "game-option/birth-options.h"
3 #include "monster-race/monster-race.h"
4 #include "monster-race/race-indice-types.h"
5 #include "monster-race/race-kind-flags.h"
6 #include "monster/monster-status.h"
7 #include "system/monster-race-definition.h"
8 #include "util/string-processor.h"
10 bool MonsterEntity::is_friendly() const
12 return this->mflag2.has(MonsterConstantFlagType::FRIENDLY);
15 bool MonsterEntity::is_pet() const
17 return this->mflag2.has(MonsterConstantFlagType::PET);
20 bool MonsterEntity::is_hostile() const
22 return !this->is_friendly() && !this->is_pet();
25 bool MonsterEntity::is_original_ap() const
27 return this->ap_r_idx == this->r_idx;
31 * @brief モンスターがアイテム類に擬態しているかどうかを返す
32 * @param m_ptr モンスターの参照ポインタ
33 * @return モンスターがアイテム類に擬態しているならTRUE、そうでなければFALSE
36 * 一般モンスターもビハインダーだけ特別扱い
37 * その他増やしたい時はis_special_mimic に「|=」で追加すること
40 bool MonsterEntity::is_mimicry() const
42 auto is_special_mimic = this->ap_r_idx == MonsterRaceId::BEHINDER;
43 if (is_special_mimic) {
47 const auto &r_ref = monraces_info[this->ap_r_idx];
48 const auto mimic_symbols = "/|\\()[]=$,.!?&`#%<>+~";
49 if (angband_strchr(mimic_symbols, r_ref.d_char) == nullptr) {
53 if (r_ref.kind_flags.has(MonsterKindType::UNIQUE)) {
57 return r_ref.behavior_flags.has(MonsterBehaviorType::NEVER_MOVE) || this->is_asleep();
60 bool MonsterEntity::is_valid() const
62 return MonsterRace(this->r_idx).is_valid();
65 MonsterRaceId MonsterEntity::get_real_r_idx() const
67 const auto &r_ref = monraces_info[this->r_idx];
68 if (this->mflag2.has_not(MonsterConstantFlagType::CHAMELEON)) {
72 return r_ref.kind_flags.has(MonsterKindType::UNIQUE) ? MonsterRaceId::CHAMELEON_K : MonsterRaceId::CHAMELEON;
76 * @brief モンスターの真の種族を返す / Extract monster race pointer of a monster's true form
77 * @return 本当のモンスター種族参照ポインタ
79 MonsterRaceInfo &MonsterEntity::get_real_r_ref() const
81 return monraces_info[this->get_real_r_idx()];
84 short MonsterEntity::get_remaining_sleep() const
86 return this->mtimed[MTIMED_CSLEEP];
89 bool MonsterEntity::is_asleep() const
91 return this->get_remaining_sleep() > 0;
94 short MonsterEntity::get_remaining_acceleration() const
96 return this->mtimed[MTIMED_FAST];
99 bool MonsterEntity::is_accelerated() const
101 return this->get_remaining_acceleration() > 0;
104 short MonsterEntity::get_remaining_deceleration() const
106 return this->mtimed[MTIMED_SLOW];
109 bool MonsterEntity::is_decelerated() const
111 return this->get_remaining_deceleration() > 0;
114 short MonsterEntity::get_remaining_stun() const
116 return this->mtimed[MTIMED_STUNNED];
119 bool MonsterEntity::is_stunned() const
121 return this->get_remaining_stun() > 0;
124 short MonsterEntity::get_remaining_confusion() const
126 return this->mtimed[MTIMED_CONFUSED];
129 bool MonsterEntity::is_confused() const
131 return this->get_remaining_confusion() > 0;
134 short MonsterEntity::get_remaining_fear() const
136 return this->mtimed[MTIMED_MONFEAR];
139 bool MonsterEntity::is_fearful() const
141 return this->get_remaining_fear() > 0;
144 short MonsterEntity::get_remaining_invulnerability() const
146 return this->mtimed[MTIMED_INVULNER];
149 bool MonsterEntity::is_invulnerable() const
151 return this->get_remaining_invulnerability() > 0;
155 * @brief 悪夢モード、一時加速、一時減速に基づくモンスターの現在速度を返す
157 byte MonsterEntity::get_temporary_speed() const
159 auto speed = this->mspeed;
160 if (ironman_nightmare) {
164 if (this->is_accelerated()) {
168 if (this->is_decelerated()) {