1 #include "system/monster-entity.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-info.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_named() const
27 return this->nickname != 0;
30 bool MonsterEntity::is_named_pet() const
32 return this->is_pet() && this->is_named();
35 bool MonsterEntity::is_original_ap() const
37 return this->ap_r_idx == this->r_idx;
41 * @brief モンスターがアイテム類に擬態しているかどうかを返す
42 * @param m_ptr モンスターの参照ポインタ
43 * @return モンスターがアイテム類に擬態しているならTRUE、そうでなければFALSE
46 * 一般モンスターもビハインダーだけ特別扱い
47 * その他増やしたい時はis_special_mimic に「|=」で追加すること
50 bool MonsterEntity::is_mimicry() const
52 auto is_special_mimic = this->ap_r_idx == MonsterRaceId::BEHINDER;
53 if (is_special_mimic) {
57 const auto &r_ref = monraces_info[this->ap_r_idx];
58 const auto mimic_symbols = "/|\\()[]=$,.!?&`#%<>+~";
59 if (angband_strchr(mimic_symbols, r_ref.d_char) == nullptr) {
63 if (r_ref.kind_flags.has(MonsterKindType::UNIQUE)) {
67 return r_ref.behavior_flags.has(MonsterBehaviorType::NEVER_MOVE) || this->is_asleep();
70 bool MonsterEntity::is_valid() const
72 return MonsterRace(this->r_idx).is_valid();
75 MonsterRaceId MonsterEntity::get_real_r_idx() const
77 const auto &r_ref = monraces_info[this->r_idx];
78 if (this->mflag2.has_not(MonsterConstantFlagType::CHAMELEON)) {
82 return r_ref.kind_flags.has(MonsterKindType::UNIQUE) ? MonsterRaceId::CHAMELEON_K : MonsterRaceId::CHAMELEON;
86 * @brief モンスターの真の種族を返す / Extract monster race pointer of a monster's true form
87 * @return 本当のモンスター種族参照ポインタ
89 MonsterRaceInfo &MonsterEntity::get_real_r_ref() const
91 return monraces_info[this->get_real_r_idx()];
94 short MonsterEntity::get_remaining_sleep() const
96 return this->mtimed[MTIMED_CSLEEP];
99 bool MonsterEntity::is_dead() const
104 bool MonsterEntity::is_asleep() const
106 return this->get_remaining_sleep() > 0;
109 short MonsterEntity::get_remaining_acceleration() const
111 return this->mtimed[MTIMED_FAST];
114 bool MonsterEntity::is_accelerated() const
116 return this->get_remaining_acceleration() > 0;
119 short MonsterEntity::get_remaining_deceleration() const
121 return this->mtimed[MTIMED_SLOW];
124 bool MonsterEntity::is_decelerated() const
126 return this->get_remaining_deceleration() > 0;
129 short MonsterEntity::get_remaining_stun() const
131 return this->mtimed[MTIMED_STUNNED];
134 bool MonsterEntity::is_stunned() const
136 return this->get_remaining_stun() > 0;
139 short MonsterEntity::get_remaining_confusion() const
141 return this->mtimed[MTIMED_CONFUSED];
144 bool MonsterEntity::is_confused() const
146 return this->get_remaining_confusion() > 0;
149 short MonsterEntity::get_remaining_fear() const
151 return this->mtimed[MTIMED_MONFEAR];
154 bool MonsterEntity::is_fearful() const
156 return this->get_remaining_fear() > 0;
159 short MonsterEntity::get_remaining_invulnerability() const
161 return this->mtimed[MTIMED_INVULNER];
164 bool MonsterEntity::is_invulnerable() const
166 return this->get_remaining_invulnerability() > 0;
170 * @brief 悪夢モード、一時加速、一時減速に基づくモンスターの現在速度を返す
172 byte MonsterEntity::get_temporary_speed() const
174 auto speed = this->mspeed;
175 if (ironman_nightmare) {
179 if (this->is_accelerated()) {
183 if (this->is_decelerated()) {