/* Hit the monster, check for death */
MonsterDamageProcessor mdp(player_ptr, c_mon_ptr->m_idx, tdam, &fear, attribute_flags);
- if (mdp.mon_take_hit(extract_note_dies(real_r_idx(m_ptr)))) {
+ if (mdp.mon_take_hit(extract_note_dies(m_ptr->get_real_r_idx()))) {
/* Dead monster */
}
em_ptr->heal_leper = false;
em_ptr->photo = 0;
em_ptr->note = nullptr;
- em_ptr->note_dies = extract_note_dies(real_r_idx(em_ptr->m_ptr));
+ em_ptr->note_dies = extract_note_dies(em_ptr->m_ptr->get_real_r_idx());
em_ptr->caster_lev = (em_ptr->who > 0) ? r_info[em_ptr->m_caster_ptr->r_idx].level : (player_ptr->lev * 2);
return em_ptr;
}
if (m_ptr->mflag2.has(MonsterConstantFlagType::CHAMELEON)) {
r_ptr = real_r_ptr(m_ptr);
- r_idx = real_r_idx(m_ptr);
+ r_idx = m_ptr->get_real_r_idx();
if (r_ptr->r_sights < MAX_SHORT) {
r_ptr->r_sights++;
}
*/
monster_race *real_r_ptr(monster_type *m_ptr)
{
- return &r_info[real_r_idx(m_ptr)];
-}
-
-MonsterRaceId real_r_idx(monster_type *m_ptr)
-{
- auto *r_ptr = &r_info[m_ptr->r_idx];
- if (m_ptr->mflag2.has(MonsterConstantFlagType::CHAMELEON)) {
- if (r_ptr->kind_flags.has(MonsterKindType::UNIQUE)) {
- return MonsterRaceId::CHAMELEON_K;
- } else {
- return MonsterRaceId::CHAMELEON;
- }
- }
-
- return m_ptr->r_idx;
+ return &r_info[m_ptr->get_real_r_idx()];
}
/*!
bool is_original_ap_and_seen(PlayerType *player_ptr, const monster_type *m_ptr);
monster_race *real_r_ptr(monster_type *m_ptr);
-MonsterRaceId real_r_idx(monster_type *m_ptr);
void monster_name(PlayerType *player_ptr, MONSTER_IDX m_idx, char *m_name);
}
if (monster_to_player && player_ptr->riding) {
- mon_take_hit_mon(player_ptr, player_ptr->riding, dam, &dead, &fear, extract_note_dies(real_r_idx(&floor_ptr->m_list[player_ptr->riding])), m_idx);
+ const auto &m_ref = floor_ptr->m_list[player_ptr->riding];
+ mon_take_hit_mon(player_ptr, player_ptr->riding, dam, &dead, &fear, extract_note_dies(m_ref.get_real_r_idx()), m_idx);
}
if (monster_to_monster) {
- mon_take_hit_mon(player_ptr, t_idx, dam, &dead, &fear, extract_note_dies(real_r_idx(t_ptr)), m_idx);
+ mon_take_hit_mon(player_ptr, t_idx, dam, &dead, &fear, extract_note_dies(t_ptr->get_real_r_idx()), m_idx);
}
return MonsterSpellResult::make_valid();
}
MonsterDamageProcessor mdp(this->player_ptr, this->g_ptr->m_idx, this->tdam, &fear, attribute_flags);
- if (mdp.mon_take_hit(extract_note_dies(real_r_idx(this->m_ptr)))) {
+ if (mdp.mon_take_hit(extract_note_dies(this->m_ptr->get_real_r_idx()))) {
return;
}
{
return MonsterRace(this->r_idx).is_valid();
}
+
+MonsterRaceId monster_type::get_real_r_idx() const
+{
+ auto *r_ptr = &r_info[this->r_idx];
+ if (this->mflag2.has(MonsterConstantFlagType::CHAMELEON)) {
+ if (r_ptr->kind_flags.has(MonsterKindType::UNIQUE)) {
+ return MonsterRaceId::CHAMELEON_K;
+ } else {
+ return MonsterRaceId::CHAMELEON;
+ }
+ }
+
+ return this->r_idx;
+}
bool is_original_ap() const;
bool is_mimicry() const;
bool is_valid() const;
+ MonsterRaceId get_real_r_idx() const;
};