energy.reset_player_turn();
can_move = false;
disturb(player_ptr, false, true);
- } else if (monster_fear_remaining(riding_m_ptr)) {
+ } else if (riding_m_ptr->is_fearful()) {
GAME_TEXT steed_name[MAX_NLEN];
monster_desc(player_ptr, steed_name, riding_m_ptr, 0);
msg_format(_("%sが恐怖していて制御できない。", "%^s is too scared to control."), steed_name);
}
}
- if (monster_fear_remaining(m_ptr)) {
+ if (m_ptr->is_fearful()) {
if (set_monster_monfear(player_ptr, player_ptr->riding,
- (randint0(r_ptr->level) < player_ptr->skill_exp[PlayerSkillKindType::RIDING]) ? 0 : (monster_fear_remaining(m_ptr) - 1))) {
+ (randint0(r_ptr->level) < player_ptr->skill_exp[PlayerSkillKindType::RIDING]) ? 0 : (m_ptr->get_remaining_fear() - 1))) {
GAME_TEXT m_name[MAX_NLEN];
monster_desc(player_ptr, m_name, m_ptr, 0);
msg_format(_("%^sを恐怖から立ち直らせた。", "%^s is no longer fearful."), m_name);
(void)set_monster_confused(player_ptr, em_ptr->g_ptr->m_idx, 0);
}
- if (monster_fear_remaining(em_ptr->m_ptr)) {
+ if (em_ptr->m_ptr->is_fearful()) {
if (em_ptr->seen_msg) {
msg_format(_("%^sは勇気を取り戻した。", "%^s recovers %s courage."), em_ptr->m_name, em_ptr->m_poss);
}
return;
}
- (void)set_monster_monfear(player_ptr, em_ptr->g_ptr->m_idx, monster_fear_remaining(em_ptr->m_ptr) + em_ptr->do_fear);
+ (void)set_monster_monfear(player_ptr, em_ptr->g_ptr->m_idx, em_ptr->m_ptr->get_remaining_fear() + em_ptr->do_fear);
em_ptr->get_angry = true;
}
*/
static void cancel_fear_by_pain(PlayerType *player_ptr, mam_pp_type *mam_pp_ptr)
{
- if (!monster_fear_remaining(mam_pp_ptr->m_ptr) || (mam_pp_ptr->dam <= 0) || !set_monster_monfear(player_ptr, mam_pp_ptr->m_idx, monster_fear_remaining(mam_pp_ptr->m_ptr) - randint1(mam_pp_ptr->dam / 4))) {
+ const auto &m_ref = *mam_pp_ptr->m_ptr;
+ const auto dam = mam_pp_ptr->dam;
+ if (!m_ref.is_fearful() || (dam <= 0) || !set_monster_monfear(player_ptr, mam_pp_ptr->m_idx, m_ref.get_remaining_fear() - randint1(dam / 4))) {
return;
}
static void make_monster_fear(PlayerType *player_ptr, mam_pp_type *mam_pp_ptr)
{
auto *r_ptr = &r_info[mam_pp_ptr->m_ptr->r_idx];
- if (monster_fear_remaining(mam_pp_ptr->m_ptr) || ((r_ptr->flags3 & RF3_NO_FEAR) == 0)) {
+ if (mam_pp_ptr->m_ptr->is_fearful() || ((r_ptr->flags3 & RF3_NO_FEAR) == 0)) {
return;
}
} else if ((ninja_data && ninja_data->s_stealth) && (randint0(tmp) > (r_ptr->level + 20)) &&
pa_ptr->m_ptr->ml && !r_ptr->resistance_flags.has(MonsterResistanceType::RESIST_ALL)) {
pa_ptr->surprise_attack = true;
- } else if (monster_fear_remaining(pa_ptr->m_ptr) && pa_ptr->m_ptr->ml) {
+ } else if (pa_ptr->m_ptr->is_fearful() && pa_ptr->m_ptr->ml) {
pa_ptr->stab_fleeing = true;
}
}
}
if (turn_flags_ptr->is_riding_mon) {
- if (!player_ptr->riding_ryoute && !monster_fear_remaining(&player_ptr->current_floor_ptr->m_list[player_ptr->riding])) {
+ const auto &m_ref = player_ptr->current_floor_ptr->m_list[player_ptr->riding];
+ if (!player_ptr->riding_ryoute && !m_ref.is_fearful()) {
turn_flags_ptr->do_move = false;
}
}
static std::string_view get_speak_filename(monster_type *m_ptr)
{
const auto &ap_r_ref = r_info[m_ptr->ap_r_idx];
- if (monster_fear_remaining(m_ptr) && can_speak(ap_r_ref, MonsterSpeakType::SPEAK_FEAR)) {
+ if (m_ptr->is_fearful() && can_speak(ap_r_ref, MonsterSpeakType::SPEAK_FEAR)) {
return _("monfear_j.txt", "monfear.txt");
}
if (m_ptr->is_confused()) {
(void)set_monster_confused(player_ptr, i, 0);
}
- if (monster_fear_remaining(m_ptr)) {
+ if (m_ptr->is_fearful()) {
(void)set_monster_monfear(player_ptr, i, 0);
}
if (monster_invulner_remaining(m_ptr)) {
return false;
}
- if (monster_fear_remaining(m_ptr)) {
+ if (m_ptr->is_fearful()) {
return true;
}
void MonsterDamageProcessor::add_monster_fear()
{
auto *m_ptr = &this->player_ptr->current_floor_ptr->m_list[this->m_idx];
- if (monster_fear_remaining(m_ptr) && (this->dam > 0)) {
- auto fear_remining = monster_fear_remaining(m_ptr) - randint1(this->dam);
+ if (m_ptr->is_fearful() && (this->dam > 0)) {
+ auto fear_remining = m_ptr->get_remaining_fear() - randint1(this->dam);
if (set_monster_monfear(this->player_ptr, this->m_idx, fear_remining)) {
*this->fear = false;
}
}
auto *r_ptr = &r_info[m_ptr->r_idx];
- if (monster_fear_remaining(m_ptr) || any_bits(r_ptr->flags3, RF3_NO_FEAR)) {
+ if (m_ptr->is_fearful() || any_bits(r_ptr->flags3, RF3_NO_FEAR)) {
return;
}
m_ptr->mflag2.reset(MonsterConstantFlagType::NOFLOW);
}
- if (!turn_flags_ptr->do_turn && !turn_flags_ptr->do_move && !monster_fear_remaining(m_ptr) && !turn_flags_ptr->is_riding_mon && turn_flags_ptr->aware) {
+ if (!turn_flags_ptr->do_turn && !turn_flags_ptr->do_move && !m_ptr->is_fearful() && !turn_flags_ptr->is_riding_mon && turn_flags_ptr->aware) {
if (r_ptr->freq_spell && randint1(100) <= r_ptr->freq_spell) {
if (make_attack_spell(player_ptr, m_idx)) {
return;
bool process_monster_fear(PlayerType *player_ptr, turn_flags *turn_flags_ptr, MONSTER_IDX m_idx)
{
auto *m_ptr = &player_ptr->current_floor_ptr->m_list[m_idx];
- bool is_battle_determined = !turn_flags_ptr->do_turn && !turn_flags_ptr->do_move && monster_fear_remaining(m_ptr) && turn_flags_ptr->aware;
+ bool is_battle_determined = !turn_flags_ptr->do_turn && !turn_flags_ptr->do_move && m_ptr->is_fearful() && turn_flags_ptr->aware;
if (!is_battle_determined) {
return false;
}
v = (v > 200) ? 200 : (v < 0) ? 0
: v;
if (v) {
- if (!monster_fear_remaining(m_ptr)) {
+ if (!m_ptr->is_fearful()) {
mproc_add(floor_ptr, m_idx, MTIMED_MONFEAR);
notice = true;
}
} else {
- if (monster_fear_remaining(m_ptr)) {
+ if (m_ptr->is_fearful()) {
mproc_remove(floor_ptr, m_idx, MTIMED_MONFEAR);
notice = true;
}
case MTIMED_MONFEAR: {
/* Reduce the fear */
- if (!set_monster_monfear(player_ptr, m_idx, monster_fear_remaining(m_ptr) - randint1(r_info[m_ptr->r_idx].level / 20 + 1))) {
+ if (!set_monster_monfear(player_ptr, m_idx, m_ptr->get_remaining_fear() - randint1(r_info[m_ptr->r_idx].level / 20 + 1))) {
break;
}
}
}
-TIME_EFFECT monster_fear_remaining(monster_type *m_ptr)
-{
- return m_ptr->mtimed[MTIMED_MONFEAR];
-}
-
TIME_EFFECT monster_invulner_remaining(monster_type *m_ptr)
{
return m_ptr->mtimed[MTIMED_INVULNER];
void process_monsters_mtimed(PlayerType *player_ptr, int mtimed_idx);
-TIME_EFFECT monster_fear_remaining(monster_type *m_ptr);
TIME_EFFECT monster_invulner_remaining(monster_type *m_ptr);
int get_mproc_idx(floor_type *floor_ptr, MONSTER_IDX m_idx, int mproc_type);
}
}
- if (((m_ptr->hp < m_ptr->maxhp / 3) || monster_fear_remaining(m_ptr)) && one_in_(2)) {
+ if (((m_ptr->hp < m_ptr->maxhp / 3) || m_ptr->is_fearful()) && one_in_(2)) {
if (!escape.empty()) {
return escape[randint0(escape.size())];
}
spell_badstatus_message_to_mons(player_ptr, m_idx, t_idx, msg, resist, saving_throw);
if (!resist && !saving_throw) {
- set_monster_monfear(player_ptr, t_idx, monster_fear_remaining(t_ptr) + randint0(4) + 4);
+ set_monster_monfear(player_ptr, t_idx, t_ptr->get_remaining_fear() + randint0(4) + 4);
}
return res;
player_ptr->redraw |= (PR_UHEALTH);
}
- if (!monster_fear_remaining(m_ptr)) {
+ if (!m_ptr->is_fearful()) {
return res;
}
msg_format(_("%^sには効果がなかった。", "%^s is unaffected."), pa_ptr->m_name);
} else {
msg_format(_("%^sは恐怖して逃げ出した!", "%^s flees in terror!"), pa_ptr->m_name);
- (void)set_monster_monfear(player_ptr, pa_ptr->m_idx, monster_fear_remaining(pa_ptr->m_ptr) + 10 + randint0(player_ptr->lev) / 5);
+ (void)set_monster_monfear(player_ptr, pa_ptr->m_idx, pa_ptr->m_ptr->get_remaining_fear() + 10 + randint0(player_ptr->lev) / 5);
}
}
set_bits(*flags, SaveDataMonsterFlagType::CONFUSED);
}
- if (monster_fear_remaining(m_ptr)) {
+ if (m_ptr->is_fearful()) {
set_bits(*flags, SaveDataMonsterFlagType::MONFEAR);
}
if (m_ptr->is_stunned()) {
strcat(buf, _("朦朧 ", "stunned "));
}
- if (monster_fear_remaining(m_ptr)) {
+ if (m_ptr->is_fearful()) {
strcat(buf, _("恐怖 ", "scared "));
}
if (m_ptr->is_confused()) {
{
return this->get_remaining_confusion() > 0;
}
+
+short monster_type::get_remaining_fear() const
+{
+ return this->mtimed[MTIMED_MONFEAR];
+}
+
+bool monster_type::is_fearful() const
+{
+ return this->get_remaining_fear() > 0;
+}
short get_remaining_deceleration() const;
short get_remaining_stun() const;
short get_remaining_confusion() const;
+ short get_remaining_fear() const;
bool is_asleep() const;
bool is_accelerated() const;
bool is_decelerated() const;
bool is_stunned() const;
bool is_confused() const;
+ bool is_fearful() const;
};
attr = TERM_WHITE;
} else if (m_ptr->is_asleep()) {
attr = TERM_BLUE;
- } else if (monster_fear_remaining(m_ptr)) {
+ } else if (m_ptr->is_fearful()) {
attr = TERM_VIOLET;
} else if (pct >= 100) {
attr = TERM_L_GREEN;