OSDN Git Service

Merge branch 'master' of https://github.com/hengband/hengband
[hengbandforosx/hengbandosx.git] / src / view / display-monster-status.cpp
1 #include "view/display-monster-status.h"
2 #include "monster-race/monster-race-hook.h"
3 #include "monster-race/monster-race.h"
4 #include "monster/monster-flag-types.h"
5 #include "monster/monster-info.h"
6 #include "monster/smart-learn-types.h"
7 #include "system/monster-entity.h"
8 #include "system/monster-race-info.h"
9
10 /*
11  * Monster health description
12  */
13 std::string look_mon_desc(MonsterEntity *m_ptr, BIT_FLAGS mode)
14 {
15     auto living = m_ptr->has_living_flag(true);
16     auto perc = m_ptr->maxhp > 0 ? 100L * m_ptr->hp / m_ptr->maxhp : 0;
17
18     concptr desc;
19     if (!m_ptr->ml) {
20         desc = _("損傷具合不明", "damage unknown");
21     } else if (m_ptr->hp >= m_ptr->maxhp) {
22         desc = living ? _("無傷", "unhurt") : _("無ダメージ", "undamaged");
23     } else if (perc >= 60) {
24         desc = living ? _("軽傷", "somewhat wounded") : _("小ダメージ", "somewhat damaged");
25     } else if (perc >= 25) {
26         desc = living ? _("負傷", "wounded") : _("中ダメージ", "damaged");
27     } else if (perc >= 10) {
28         desc = living ? _("重傷", "badly wounded") : _("大ダメージ", "badly damaged");
29     } else {
30         desc = living ? _("半死半生", "almost dead") : _("倒れかけ", "almost destroyed");
31     }
32
33     concptr attitude;
34     if (!(mode & 0x01)) {
35         attitude = "";
36     } else if (m_ptr->is_pet()) {
37         attitude = _(", ペット", ", pet");
38     } else if (m_ptr->is_friendly()) {
39         attitude = _(", 友好的", ", friendly");
40     } else {
41         attitude = _("", "");
42     }
43
44     concptr clone = m_ptr->mflag2.has(MonsterConstantFlagType::CLONED) ? ", clone" : "";
45     MonsterRaceInfo *ap_r_ptr = &monraces_info[m_ptr->ap_r_idx];
46     if (ap_r_ptr->r_tkills && m_ptr->mflag2.has_not(MonsterConstantFlagType::KAGE)) {
47         return format(_("レベル%d, %s%s%s", "Level %d, %s%s%s"), ap_r_ptr->level, desc, attitude, clone);
48     }
49
50     return format(_("レベル???, %s%s%s", "Level ???, %s%s%s"), desc, attitude, clone);
51 }