(void)bss.mod_confusion(em_ptr->dam / 2);
return;
default:
- if (any_bits(em_ptr->r_ptr->flags3, RF3_NO_FEAR)) {
+ if (em_ptr->r_ptr->resistance_flags.has(MonsterResistanceType::NO_FEAR)) {
em_ptr->note = _("には効果がなかった。", " is unaffected.");
} else {
(void)bss.mod_fear(static_cast<TIME_EFFECT>(em_ptr->dam));
const auto is_unique = em_ptr->r_ptr->kind_flags.has(MonsterKindType::UNIQUE);
const auto is_questor = any_bits(em_ptr->r_ptr->flags1, RF1_QUESTOR);
- const auto is_no_confusion = any_bits(em_ptr->r_ptr->flags3, RF3_NO_CONF);
+ const auto is_no_confusion = em_ptr->r_ptr->resistance_flags.has(MonsterResistanceType::NO_CONF);
if (is_unique || is_questor || is_no_confusion || (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10)) {
- if (((em_ptr->r_ptr->flags3 & RF3_NO_CONF) != 0) && is_original_ap_and_seen(player_ptr, em_ptr->m_ptr)) {
- em_ptr->r_ptr->r_flags3 |= (RF3_NO_CONF);
+ if ((em_ptr->r_ptr->resistance_flags.has(MonsterResistanceType::NO_CONF)) && is_original_ap_and_seen(player_ptr, em_ptr->m_ptr)) {
+ em_ptr->r_ptr->resistance_flags.set(MonsterResistanceType::NO_CONF);
}
em_ptr->do_conf = 0;
return false;
}
- if (em_ptr->r_ptr->flags3 & RF3_NO_CONF) {
+ if (em_ptr->r_ptr->resistance_flags.has(MonsterResistanceType::NO_CONF)) {
em_ptr->dam -= 50;
}
if (em_ptr->dam < 1) {
return ProcessResult::PROCESS_CONTINUE;
}
- if ((em_ptr->r_ptr->flags3 & RF3_NO_FEAR) == 0) {
+ if (em_ptr->r_ptr->resistance_flags.has_not(MonsterResistanceType::NO_FEAR)) {
em_ptr->do_fear = randint1(90) + 10;
} else if (is_original_ap_and_seen(player_ptr, em_ptr->m_ptr)) {
- em_ptr->r_ptr->r_flags3 |= RF3_NO_FEAR;
+ em_ptr->r_ptr->r_resistance_flags.set(MonsterResistanceType::NO_FEAR);
}
em_ptr->dam = 0;
em_ptr->do_fear = damroll(3, (em_ptr->dam / 2)) + 1;
if (em_ptr->r_ptr->kind_flags.has(MonsterKindType::UNIQUE) ||
- (em_ptr->r_ptr->flags3 & (RF3_NO_FEAR)) ||
+ em_ptr->r_ptr->resistance_flags.has(MonsterResistanceType::NO_FEAR) ||
(em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10)) {
em_ptr->note = _("には効果がなかった。", " is unaffected.");
em_ptr->obvious = false;
}
bool has_resistance = em_ptr->r_ptr->kind_flags.has(MonsterKindType::UNIQUE);
- has_resistance |= any_bits(em_ptr->r_ptr->flags3, RF3_NO_SLEEP);
+ has_resistance |= em_ptr->r_ptr->resistance_flags.has(MonsterResistanceType::NO_SLEEP);
has_resistance |= (em_ptr->r_ptr->level > randint1(std::max(1, em_ptr->dam - 10)) + 10);
if (has_resistance) {
- if (em_ptr->r_ptr->flags3 & RF3_NO_SLEEP) {
+ if (em_ptr->r_ptr->resistance_flags.has(MonsterResistanceType::NO_SLEEP)) {
if (is_original_ap_and_seen(player_ptr, em_ptr->m_ptr)) {
- em_ptr->r_ptr->r_flags3 |= (RF3_NO_SLEEP);
+ em_ptr->r_ptr->resistance_flags.set(MonsterResistanceType::NO_SLEEP);
}
}
em_ptr->do_conf = damroll(3, (em_ptr->dam / 2)) + 1;
bool has_resistance = em_ptr->r_ptr->kind_flags.has(MonsterKindType::UNIQUE);
- has_resistance |= any_bits(em_ptr->r_ptr->flags3, RF3_NO_CONF);
+ has_resistance |= em_ptr->r_ptr->resistance_flags.has(MonsterResistanceType::NO_CONF);
has_resistance |= (em_ptr->r_ptr->level > randint1(std::max(1, em_ptr->dam - 10)) + 10);
if (has_resistance) {
- if (em_ptr->r_ptr->flags3 & (RF3_NO_CONF)) {
+ if (em_ptr->r_ptr->resistance_flags.has(MonsterResistanceType::NO_CONF)) {
if (is_original_ap_and_seen(player_ptr, em_ptr->m_ptr)) {
- em_ptr->r_ptr->r_flags3 |= (RF3_NO_CONF);
+ em_ptr->r_ptr->resistance_flags.set(MonsterResistanceType::NO_CONF);
}
}
(void)bss.mod_stun(randint1(em_ptr->dam));
return;
case 3:
- if (any_bits(em_ptr->r_ptr->flags3, RF3_NO_FEAR)) {
+ if (em_ptr->r_ptr->resistance_flags.has(MonsterResistanceType::NO_FEAR)) {
em_ptr->note = _("には効果がなかった。", " is unaffected.");
} else {
(void)bss.mod_fear(3 + randint1(em_ptr->dam));
em_ptr->obvious = true;
}
- if ((em_ptr->r_ptr->flags3 & RF3_NO_CONF) == 0) {
+ if (em_ptr->r_ptr->resistance_flags.has_not(MonsterResistanceType::NO_CONF)) {
em_ptr->do_conf = (10 + randint1(15) + em_ptr->r) / (em_ptr->r + 1);
return ProcessResult::PROCESS_CONTINUE;
}
em_ptr->dam *= 3;
em_ptr->dam /= randint1(6) + 6;
if (is_original_ap_and_seen(player_ptr, em_ptr->m_ptr)) {
- em_ptr->r_ptr->r_flags3 |= (RF3_NO_CONF);
+ em_ptr->r_ptr->resistance_flags.set(MonsterResistanceType::NO_CONF);
}
return ProcessResult::PROCESS_CONTINUE;
}
bool has_immute = em_ptr->r_ptr->kind_flags.has(MonsterKindType::UNIQUE);
- has_immute |= any_bits(em_ptr->r_ptr->flags3, RF3_NO_CONF);
+ has_immute |= em_ptr->r_ptr->resistance_flags.has(MonsterResistanceType::NO_CONF);
has_immute |= (em_ptr->r_ptr->level > randint1(std::max(1, em_ptr->caster_lev - 10)) + 10);
if (has_immute) {
- if (em_ptr->r_ptr->flags3 & (RF3_NO_CONF)) {
+ if (em_ptr->r_ptr->resistance_flags.has(MonsterResistanceType::NO_CONF)) {
if (is_original_ap_and_seen(player_ptr, em_ptr->m_ptr)) {
- em_ptr->r_ptr->r_flags3 |= (RF3_NO_CONF);
+ em_ptr->r_ptr->resistance_flags.set(MonsterResistanceType::NO_CONF);
}
}
}
bool has_immute = em_ptr->r_ptr->kind_flags.has(MonsterKindType::UNIQUE);
- has_immute |= any_bits(em_ptr->r_ptr->flags3, RF3_NO_CONF);
+ has_immute |= em_ptr->r_ptr->resistance_flags.has(MonsterResistanceType::NO_CONF);
has_immute |= (em_ptr->r_ptr->level > randint1(std::max(1, em_ptr->caster_lev - 10)) + 10);
if (has_immute) {
- if (em_ptr->r_ptr->flags3 & (RF3_NO_CONF)) {
+ if (em_ptr->r_ptr->resistance_flags.has(MonsterResistanceType::NO_CONF)) {
if (is_original_ap_and_seen(player_ptr, em_ptr->m_ptr)) {
- em_ptr->r_ptr->r_flags3 |= (RF3_NO_CONF);
+ em_ptr->r_ptr->resistance_flags.set(MonsterResistanceType::NO_CONF);
}
}
}
break;
case 2:
- if (em_ptr->r_ptr->kind_flags.has(MonsterKindType::UNIQUE) || any_bits(em_ptr->r_ptr->flags3, RF3_NO_CONF)) {
- if (any_bits(em_ptr->r_ptr->flags3, RF3_NO_CONF)) {
+ if (em_ptr->r_ptr->kind_flags.has(MonsterKindType::UNIQUE) || em_ptr->r_ptr->resistance_flags.has(MonsterResistanceType::NO_CONF)) {
+ if (em_ptr->r_ptr->resistance_flags.has(MonsterResistanceType::NO_CONF)) {
if (is_original_ap_and_seen(player_ptr, em_ptr->m_ptr)) {
- set_bits(em_ptr->r_ptr->r_flags3, RF3_NO_CONF);
+ em_ptr->r_ptr->r_resistance_flags.set(MonsterResistanceType::NO_CONF);
}
}
em_ptr->do_conf = 0;
}
break;
default:
- if (em_ptr->r_ptr->kind_flags.has(MonsterKindType::UNIQUE) || any_bits(em_ptr->r_ptr->flags3, RF3_NO_SLEEP)) {
- if (any_bits(em_ptr->r_ptr->flags3, RF3_NO_SLEEP)) {
+ if (em_ptr->r_ptr->kind_flags.has(MonsterKindType::UNIQUE) || em_ptr->r_ptr->resistance_flags.has(MonsterResistanceType::NO_SLEEP)) {
+ if (em_ptr->r_ptr->resistance_flags.has(MonsterResistanceType::NO_SLEEP)) {
if (is_original_ap_and_seen(player_ptr, em_ptr->m_ptr)) {
- set_bits(em_ptr->r_ptr->r_flags3, RF3_NO_SLEEP);
+ em_ptr->r_ptr->r_resistance_flags.set(MonsterResistanceType::NO_SLEEP);
}
}
em_ptr->do_sleep = 0;
const auto *r_ptr = em_ptr->r_ptr;
auto can_avoid_stun = em_ptr->do_stun == 0;
can_avoid_stun |= r_ptr->resistance_flags.has_any_of({ MonsterResistanceType::RESIST_SOUND, MonsterResistanceType::RESIST_FORCE });
- can_avoid_stun |= any_bits(r_ptr->flags3, RF3_NO_STUN);
+ can_avoid_stun |= r_ptr->resistance_flags.has(MonsterResistanceType::NO_STUN);
if (can_avoid_stun) {
return;
}
*/
static void effect_damage_piles_confusion(PlayerType *player_ptr, EffectMonster *em_ptr)
{
- if ((em_ptr->do_conf == 0) || (em_ptr->r_ptr->flags3 & RF3_NO_CONF) || em_ptr->r_ptr->resistance_flags.has_any_of(RFR_EFF_RESIST_CHAOS_MASK)) {
+ if ((em_ptr->do_conf == 0) || (em_ptr->r_ptr->resistance_flags.has(MonsterResistanceType::NO_CONF)) || em_ptr->r_ptr->resistance_flags.has_any_of(RFR_EFF_RESIST_CHAOS_MASK)) {
return;
}
*/
static void effect_damage_piles_fear(PlayerType *player_ptr, EffectMonster *em_ptr)
{
- if (em_ptr->do_fear == 0 || any_bits(em_ptr->r_ptr->flags3, RF3_NO_FEAR)) {
+ if (em_ptr->do_fear == 0 || em_ptr->r_ptr->resistance_flags.has(MonsterResistanceType::NO_FEAR)) {
return;
}
move_RF4_BR_to_RFR(r_ptr, f4, RF4_BR_WALL, MonsterResistanceType::RESIST_FORCE);
if (f4 & RF4_BR_CONF) {
- r_ptr->r_flags3 |= RF3_NO_CONF;
+ r_ptr->r_resistance_flags.set(MonsterResistanceType::NO_CONF);
}
if (r_idx == MonsterRaceId::STORMBRINGER) {
static void make_monster_fear(PlayerType *player_ptr, mam_pp_type *mam_pp_ptr)
{
auto *r_ptr = &mam_pp_ptr->m_ptr->get_monrace();
- if (mam_pp_ptr->m_ptr->is_fearful() || ((r_ptr->flags3 & RF3_NO_FEAR) == 0)) {
+ if (mam_pp_ptr->m_ptr->is_fearful() || (r_ptr->resistance_flags.has_not(MonsterResistanceType::NO_FEAR))) {
return;
}
}
break;
case AttributeType::CONFUSION:
- if (any_bits(r_ptr->flags3, RF3_NO_CONF)) {
+ if (r_ptr->resistance_flags.has(MonsterResistanceType::NO_CONF)) {
return false;
}
break;
anger_monster(player_ptr, pa_ptr->m_ptr);
auto *r_ptr = &pa_ptr->m_ptr->get_monrace();
- if ((r_ptr->flags3 & (RF3_NO_STUN))) {
+ if (r_ptr->resistance_flags.has(MonsterResistanceType::NO_STUN)) {
msg_format(_("%s には効果がなかった。", "%s is not effected."), pa_ptr->m_name);
return;
}
resist_stun += 88;
}
- if (r_ptr->flags3 & RF3_NO_STUN) {
+ if (r_ptr->resistance_flags.has(MonsterResistanceType::NO_STUN)) {
resist_stun += 66;
}
- if (r_ptr->flags3 & RF3_NO_CONF) {
+ if (r_ptr->resistance_flags.has(MonsterResistanceType::NO_CONF)) {
resist_stun += 33;
}
- if (r_ptr->flags3 & RF3_NO_SLEEP) {
+ if (r_ptr->resistance_flags.has(MonsterResistanceType::NO_SLEEP)) {
resist_stun += 33;
}
RF3_XXX25 = 0x02000000, /*!< モンスター特性: 未使用 / XXX */
RF3_XXX26 = 0x04000000, /*!< モンスター特性: 未使用 / XXX */
RF3_XXX27 = 0x08000000, /*!< モンスター特性: 未使用 / XXX */
- RF3_NO_FEAR = 0x10000000, /*!< モンスター特性: 恐怖しない / Cannot be scared */
- RF3_NO_STUN = 0x20000000, /*!< モンスター特性: 朦朧としない / Cannot be stunned */
- RF3_NO_CONF = 0x40000000, /*!< モンスター特性: 混乱しない / Cannot be confused and resist confusion */
- RF3_NO_SLEEP = 0x80000000, /*!< モンスター特性: 眠らない / Cannot be slept */
+ RF3_XXX28 = 0x10000000, /*!< モンスター特性: 未使用 / XXX */
+ RF3_XXX29 = 0x20000000, /*!< モンスター特性: 未使用 / XXX */
+ RF3_XXX30 = 0x40000000, /*!< モンスター特性: 未使用 / XXX */
+ RF3_XXX31 = 0x80000000, /*!< モンスター特性: 未使用 / XXX */
};
}
auto *r_ptr = &m_ptr->get_monrace();
- if (m_ptr->is_fearful() || any_bits(r_ptr->flags3, RF3_NO_FEAR)) {
+ if (m_ptr->is_fearful() || r_ptr->resistance_flags.has(MonsterResistanceType::NO_FEAR)) {
return;
}
return res;
}
- resist = ((tr_ptr->flags3 & RF3_NO_FEAR) != 0);
+ resist = (tr_ptr->resistance_flags.has(MonsterResistanceType::NO_FEAR));
saving_throw = (tr_ptr->level > randint1((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10);
mspell_cast_msg_bad_status_to_monster msg(_("%s^が恐ろしげな幻覚を作り出した。", "%s^ casts a fearful illusion in front of %s."),
msg_default = _("%sは呪文を唱えて%sの目を焼き付かせた。", "%s^ casts a spell, burning %s's eyes.");
}
- resist = ((tr_ptr->flags3 & RF3_NO_CONF) != 0);
+ resist = (tr_ptr->resistance_flags.has(MonsterResistanceType::NO_CONF));
saving_throw = (tr_ptr->level > randint1((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10);
mspell_cast_msg_bad_status_to_monster msg(msg_default, _("%s^には効果がなかった。", "%s^ is unaffected."),
return res;
}
- resist = ((tr_ptr->flags3 & RF3_NO_CONF) != 0);
+ resist = (tr_ptr->resistance_flags.has(MonsterResistanceType::NO_CONF));
saving_throw = (tr_ptr->level > randint1((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10);
mspell_cast_msg_bad_status_to_monster msg(_("%s^が%sの前に幻惑的な幻をつくり出した。", "%s^ casts a mesmerizing illusion in front of %s."),
return res;
}
- resist = (tr_ptr->kind_flags.has(MonsterKindType::UNIQUE) || (tr_ptr->flags3 & RF3_NO_STUN) != 0);
+ resist = (tr_ptr->kind_flags.has(MonsterKindType::UNIQUE) || tr_ptr->resistance_flags.has(MonsterResistanceType::NO_STUN));
saving_throw = (tr_ptr->level > randint1((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10);
mspell_cast_msg_bad_status_to_monster msg(_("%s^は%sをじっと見つめた。", "%s^ stares intently at %s."),
}
auto *r_ptr = pa_ptr->r_ptr;
- if (r_ptr->flags3 & RF3_NO_CONF) {
+ if (r_ptr->resistance_flags.has(MonsterResistanceType::NO_CONF)) {
if (is_original_ap_and_seen(player_ptr, pa_ptr->m_ptr)) {
- r_ptr->r_flags3 |= RF3_NO_CONF;
+ r_ptr->r_resistance_flags.set(MonsterResistanceType::NO_CONF);
}
msg_format(_("%s^には効果がなかった。", "%s^ is unaffected."), pa_ptr->m_name);
static void attack_stun(PlayerType *player_ptr, player_attack_type *pa_ptr, bool can_resist = true)
{
auto *r_ptr = pa_ptr->r_ptr;
- if (any_bits(r_ptr->flags3, RF3_NO_STUN)) {
+ if (r_ptr->resistance_flags.has(MonsterResistanceType::NO_STUN)) {
if (is_original_ap_and_seen(player_ptr, pa_ptr->m_ptr)) {
- set_bits(r_ptr->flags3, RF3_NO_STUN);
+ r_ptr->resistance_flags.set(MonsterResistanceType::NO_STUN);
}
msg_format(_("%s^には効果がなかった。", "%s^ is unaffected."), pa_ptr->m_name);
} else if (can_resist && randint0(100) < r_ptr->level) {
static void attack_scare(PlayerType *player_ptr, player_attack_type *pa_ptr, bool can_resist = true)
{
auto *r_ptr = pa_ptr->r_ptr;
- if (any_bits(r_ptr->flags3, RF3_NO_FEAR)) {
+ if (r_ptr->resistance_flags.has(MonsterResistanceType::NO_FEAR)) {
if (is_original_ap_and_seen(player_ptr, pa_ptr->m_ptr)) {
- set_bits(r_ptr->flags3, RF3_NO_FEAR);
+ r_ptr->resistance_flags.set(MonsterResistanceType::NO_FEAR);
}
msg_format(_("%s^には効果がなかった。", "%s^ is unaffected."), pa_ptr->m_name);
} else if (can_resist && randint0(100) < r_ptr->level) {
return true;
}
- if (r_ptr->flags3 & RF3_NO_CONF) {
+ if (r_ptr->resistance_flags.has(MonsterResistanceType::NO_CONF)) {
if (is_original_ap_and_seen(player_ptr, m_ptr)) {
- r_ptr->r_flags3 |= (RF3_NO_CONF);
+ r_ptr->resistance_flags.set(MonsterResistanceType::NO_CONF);
}
return true;
}
void display_monster_concrete_immunities(lore_type *lore_ptr)
{
- if (lore_ptr->flags3 & RF3_NO_STUN) {
+ if (lore_ptr->resistance_flags.has(MonsterResistanceType::NO_STUN)) {
lore_ptr->vp[lore_ptr->vn] = _("朦朧としない", "stunned");
lore_ptr->color[lore_ptr->vn++] = TERM_ORANGE;
}
- if (lore_ptr->flags3 & RF3_NO_FEAR) {
+ if (lore_ptr->resistance_flags.has(MonsterResistanceType::NO_FEAR)) {
lore_ptr->vp[lore_ptr->vn] = _("恐怖を感じない", "frightened");
lore_ptr->color[lore_ptr->vn++] = TERM_SLATE;
}
- if (lore_ptr->flags3 & RF3_NO_CONF) {
+ if (lore_ptr->resistance_flags.has(MonsterResistanceType::NO_CONF)) {
lore_ptr->vp[lore_ptr->vn] = _("混乱しない", "confused");
lore_ptr->color[lore_ptr->vn++] = TERM_L_UMBER;
}
- if (lore_ptr->flags3 & RF3_NO_SLEEP) {
+ if (lore_ptr->resistance_flags.has(MonsterResistanceType::NO_SLEEP)) {
lore_ptr->vp[lore_ptr->vn] = _("眠らされない", "slept");
lore_ptr->color[lore_ptr->vn++] = TERM_BLUE;
}