/* 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(m_ptr->get_real_r_idx()))) {
+ if (mdp.mon_take_hit(m_ptr->get_died_message().data())) {
/* Dead monster */
}
em_ptr->heal_leper = false;
em_ptr->photo = 0;
em_ptr->note = nullptr;
- em_ptr->note_dies = extract_note_dies(em_ptr->m_ptr->get_real_r_idx());
+ const auto died_mes = em_ptr->m_ptr->get_died_message();
+ em_ptr->note_dies = died_mes.data();
em_ptr->caster_lev = (em_ptr->who > 0) ? monraces_info[em_ptr->m_caster_ptr->r_idx].level : (player_ptr->lev * 2);
return em_ptr;
}
on_defeat_last_boss(player_ptr);
}
-
-/*!
- * @brief モンスターを撃破した際の述語メッセージを返す /
- * Return monster death string
- * @param r_ptr 撃破されたモンスターの種族情報を持つ構造体の参照ポインタ
- * @return 撃破されたモンスターの述語
- */
-concptr extract_note_dies(MonsterRaceId r_idx)
-{
- const auto &r_ref = monraces_info[r_idx];
- const auto explode = std::any_of(std::begin(r_ref.blow), std::end(r_ref.blow),
- [](const auto &blow) { return blow.method == RaceBlowMethodType::EXPLODE; });
-
- if (r_ref.has_living_flag()) {
- if (explode) {
- return _("は爆発して死んだ。", " explodes and dies.");
- }
-
- return _("は死んだ。", " dies.");
- }
-
- if (explode) {
- return _("は爆発して粉々になった。", " explodes into tiny shreds.");
- }
-
- return _("を倒した。", " is destroyed.");
-}
#include "system/angband.h"
enum class FixedArtifactId : short;
-enum class MonsterRaceId : int16_t;
class PlayerType;
void monster_death(PlayerType *player_ptr, MONSTER_IDX m_idx, bool drop_item, AttributeFlags attribute_flags);
void monster_death(PlayerType *player_ptr, MONSTER_IDX m_idx, bool drop_item, AttributeType type);
bool drop_single_artifact(PlayerType *player_ptr, monster_death_type *md_ptr, FixedArtifactId a_idx);
-concptr extract_note_dies(MonsterRaceId r_idx);
if (monster_to_player && player_ptr->riding) {
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);
+ mon_take_hit_mon(player_ptr, player_ptr->riding, dam, &dead, &fear, m_ref.get_died_message().data(), m_idx);
}
if (monster_to_monster) {
- mon_take_hit_mon(player_ptr, t_idx, dam, &dead, &fear, extract_note_dies(t_ptr->get_real_r_idx()), m_idx);
+ mon_take_hit_mon(player_ptr, t_idx, dam, &dead, &fear, t_ptr->get_died_message().data(), 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(this->m_ptr->get_real_r_idx()))) {
+ if (mdp.mon_take_hit(this->m_ptr->get_died_message().data())) {
return;
}
const auto &monrace = monraces_info[is_apperance ? this->ap_r_idx : this->r_idx];
return monrace.has_living_flag();
}
+
+std::string MonsterEntity::get_died_message() const
+{
+ const auto &monrace = monraces_info[this->r_idx];
+ return monrace.get_died_message();
+}
#include "monster/smart-learn-types.h"
#include "object/object-index-list.h"
#include "util/flag-group.h"
+#include <string>
/*!
* @brief Monster information, for a specific monster.
bool is_invulnerable() const;
byte get_temporary_speed() const;
bool has_living_flag(bool is_apperance = false) const;
+ std::string get_died_message() const;
};
{
return this->kind_flags.has_none_of({ MonsterKindType::DEMON, MonsterKindType::UNDEAD, MonsterKindType::NONLIVING });
}
+
+/*!
+ * @brief モンスターを撃破した際の述語メッセージを返す
+ * @return 撃破されたモンスターの述語
+ */
+std::string MonsterRaceInfo::get_died_message() const
+{
+ const auto is_explodable = std::any_of(std::begin(this->blow), std::end(this->blow),
+ [](const auto &blow) { return blow.method == RaceBlowMethodType::EXPLODE; });
+ if (this->has_living_flag()) {
+ return is_explodable ? _("は爆発して死んだ。", " explodes and dies.") : _("は死んだ。", " dies.");
+ }
+
+ return is_explodable ? _("は爆発して粉々になった。", " explodes into tiny shreds.") : _("を倒した。", " is destroyed.");
+}
const std::string &decide_horror_message() const;
bool has_living_flag() const;
+ std::string get_died_message() const;
};