From a308489f4e1faf64b8dbcb2fddde5ea53c9c0f85 Mon Sep 17 00:00:00 2001 From: Hourier Date: Fri, 12 Jun 2020 21:40:30 +0900 Subject: [PATCH] [Refactor] #40414 Separated display_monster_resistances() from process_monster_lore() to display-lore-status.c/h --- src/lore/monster-lore.c | 147 +-------------------------------- src/view/display-lore-status.c | 181 +++++++++++++++++++++++++++++++++++++++++ src/view/display-lore-status.h | 4 + 3 files changed, 189 insertions(+), 143 deletions(-) diff --git a/src/lore/monster-lore.c b/src/lore/monster-lore.c index a304fdfe9..e9a053497 100644 --- a/src/lore/monster-lore.c +++ b/src/lore/monster-lore.c @@ -206,151 +206,12 @@ void process_monster_lore(player_type *player_ptr, MONRACE_IDX r_idx, BIT_FLAGS display_monster_constitutions(lore_ptr); lore_ptr->vn = 0; - if (lore_ptr->flags3 & RF3_HURT_ROCK) { - lore_ptr->vp[lore_ptr->vn] = _("岩を除去するもの", "rock remover"); - lore_ptr->color[lore_ptr->vn++] = TERM_UMBER; - } - if (lore_ptr->flags3 & RF3_HURT_LITE) { - lore_ptr->vp[lore_ptr->vn] = _("明るい光", "bright light"); - lore_ptr->color[lore_ptr->vn++] = TERM_YELLOW; - } - if (lore_ptr->flags3 & RF3_HURT_FIRE) { - lore_ptr->vp[lore_ptr->vn] = _("炎", "fire"); - lore_ptr->color[lore_ptr->vn++] = TERM_RED; - } - if (lore_ptr->flags3 & RF3_HURT_COLD) { - lore_ptr->vp[lore_ptr->vn] = _("冷気", "cold"); - lore_ptr->color[lore_ptr->vn++] = TERM_L_WHITE; - } - - if (lore_ptr->vn > 0) { - hooked_roff(format(_("%^sには", "%^s"), wd_he[lore_ptr->msex])); - - for (int n = 0; n < lore_ptr->vn; n++) { -#ifdef JP - if (n != 0) - hooked_roff("や"); -#else - if (n == 0) - hooked_roff(" is hurt by "); - else if (n < lore_ptr->vn - 1) - hooked_roff(", "); - else - hooked_roff(" and "); -#endif - hook_c_roff(lore_ptr->color[n], lore_ptr->vp[n]); - } - - hooked_roff(_("でダメージを与えられる。", ". ")); - } + display_monster_concrete_weakness(lore_ptr); + display_monster_weakness(lore_ptr); lore_ptr->vn = 0; - if (lore_ptr->flagsr & RFR_IM_ACID) { - lore_ptr->vp[lore_ptr->vn] = _("酸", "acid"); - lore_ptr->color[lore_ptr->vn++] = TERM_GREEN; - } - if (lore_ptr->flagsr & RFR_IM_ELEC) { - lore_ptr->vp[lore_ptr->vn] = _("稲妻", "lightning"); - lore_ptr->color[lore_ptr->vn++] = TERM_BLUE; - } - if (lore_ptr->flagsr & RFR_IM_FIRE) { - lore_ptr->vp[lore_ptr->vn] = _("炎", "fire"); - lore_ptr->color[lore_ptr->vn++] = TERM_RED; - } - if (lore_ptr->flagsr & RFR_IM_COLD) { - lore_ptr->vp[lore_ptr->vn] = _("冷気", "cold"); - lore_ptr->color[lore_ptr->vn++] = TERM_L_WHITE; - } - if (lore_ptr->flagsr & RFR_IM_POIS) { - lore_ptr->vp[lore_ptr->vn] = _("毒", "poison"); - lore_ptr->color[lore_ptr->vn++] = TERM_L_GREEN; - } - - if (lore_ptr->flagsr & RFR_RES_LITE) { - lore_ptr->vp[lore_ptr->vn] = _("閃光", "light"); - lore_ptr->color[lore_ptr->vn++] = TERM_YELLOW; - } - if (lore_ptr->flagsr & RFR_RES_DARK) { - lore_ptr->vp[lore_ptr->vn] = _("暗黒", "dark"); - lore_ptr->color[lore_ptr->vn++] = TERM_L_DARK; - } - if (lore_ptr->flagsr & RFR_RES_NETH) { - lore_ptr->vp[lore_ptr->vn] = _("地獄", "nether"); - lore_ptr->color[lore_ptr->vn++] = TERM_L_DARK; - } - if (lore_ptr->flagsr & RFR_RES_WATE) { - lore_ptr->vp[lore_ptr->vn] = _("水", "water"); - lore_ptr->color[lore_ptr->vn++] = TERM_BLUE; - } - if (lore_ptr->flagsr & RFR_RES_PLAS) { - lore_ptr->vp[lore_ptr->vn] = _("プラズマ", "plasma"); - lore_ptr->color[lore_ptr->vn++] = TERM_L_RED; - } - if (lore_ptr->flagsr & RFR_RES_SHAR) { - lore_ptr->vp[lore_ptr->vn] = _("破片", "shards"); - lore_ptr->color[lore_ptr->vn++] = TERM_L_UMBER; - } - if (lore_ptr->flagsr & RFR_RES_SOUN) { - lore_ptr->vp[lore_ptr->vn] = _("轟音", "sound"); - lore_ptr->color[lore_ptr->vn++] = TERM_ORANGE; - } - if (lore_ptr->flagsr & RFR_RES_CHAO) { - lore_ptr->vp[lore_ptr->vn] = _("カオス", "chaos"); - lore_ptr->color[lore_ptr->vn++] = TERM_VIOLET; - } - if (lore_ptr->flagsr & RFR_RES_NEXU) { - lore_ptr->vp[lore_ptr->vn] = _("因果混乱", "nexus"); - lore_ptr->color[lore_ptr->vn++] = TERM_VIOLET; - } - if (lore_ptr->flagsr & RFR_RES_DISE) { - lore_ptr->vp[lore_ptr->vn] = _("劣化", "disenchantment"); - lore_ptr->color[lore_ptr->vn++] = TERM_VIOLET; - } - if (lore_ptr->flagsr & RFR_RES_WALL) { - lore_ptr->vp[lore_ptr->vn] = _("フォース", "force"); - lore_ptr->color[lore_ptr->vn++] = TERM_UMBER; - } - if (lore_ptr->flagsr & RFR_RES_INER) { - lore_ptr->vp[lore_ptr->vn] = _("遅鈍", "inertia"); - lore_ptr->color[lore_ptr->vn++] = TERM_SLATE; - } - if (lore_ptr->flagsr & RFR_RES_TIME) { - lore_ptr->vp[lore_ptr->vn] = _("時間逆転", "time"); - lore_ptr->color[lore_ptr->vn++] = TERM_L_BLUE; - } - if (lore_ptr->flagsr & RFR_RES_GRAV) { - lore_ptr->vp[lore_ptr->vn] = _("重力", "gravity"); - lore_ptr->color[lore_ptr->vn++] = TERM_SLATE; - } - if (lore_ptr->flagsr & RFR_RES_ALL) { - lore_ptr->vp[lore_ptr->vn] = _("あらゆる攻撃", "all"); - lore_ptr->color[lore_ptr->vn++] = TERM_YELLOW; - } - if ((lore_ptr->flagsr & RFR_RES_TELE) && !(lore_ptr->r_ptr->flags1 & RF1_UNIQUE)) { - lore_ptr->vp[lore_ptr->vn] = _("テレポート", "teleportation"); - lore_ptr->color[lore_ptr->vn++] = TERM_ORANGE; - } - - if (lore_ptr->vn > 0) { - hooked_roff(format(_("%^sは", "%^s"), wd_he[lore_ptr->msex])); - for (int n = 0; n < lore_ptr->vn; n++) { -#ifdef JP - if (n != 0) - hooked_roff("と"); -#else - if (n == 0) - hooked_roff(" resists "); - else if (n < lore_ptr->vn - 1) - hooked_roff(", "); - else - hooked_roff(" and "); -#endif - hook_c_roff(lore_ptr->color[n], lore_ptr->vp[n]); - } - - hooked_roff(_("の耐性を持っている。", ". ")); - } - + display_monster_concrete_resistances(lore_ptr); + display_monster_resistances(lore_ptr); if ((lore_ptr->r_ptr->r_xtra1 & MR1_SINKA) || lore_ptr->know_everything) { if (lore_ptr->r_ptr->next_r_idx) { hooked_roff(format(_("%^sは経験を積むと、", "%^s will evolve into "), wd_he[lore_ptr->msex])); diff --git a/src/view/display-lore-status.c b/src/view/display-lore-status.c index ba14d7184..b4d4dabca 100644 --- a/src/view/display-lore-status.c +++ b/src/view/display-lore-status.c @@ -1,8 +1,10 @@ #include "view/display-lore-status.h" #include "locale/japanese.h" #include "lore/lore-calculator.h" +#include "monster-race/race-flags-resistance.h" #include "monster-race/race-flags1.h" #include "monster-race/race-flags2.h" +#include "monster-race/race-flags3.h" #include "monster-race/race-flags7.h" #include "term/term-color-types.h" @@ -145,3 +147,182 @@ void display_monster_constitutions(lore_type *lore_ptr) if (lore_ptr->flags7 & RF7_RIDING) hook_c_roff(TERM_SLATE, format(_("%^sに乗ることができる。", "%^s is suitable for riding. "), wd_he[lore_ptr->msex])); } + +void display_monster_concrete_weakness(lore_type *lore_ptr) +{ + if (lore_ptr->flags3 & RF3_HURT_ROCK) { + lore_ptr->vp[lore_ptr->vn] = _("岩を除去するもの", "rock remover"); + lore_ptr->color[lore_ptr->vn++] = TERM_UMBER; + } + + if (lore_ptr->flags3 & RF3_HURT_LITE) { + lore_ptr->vp[lore_ptr->vn] = _("明るい光", "bright light"); + lore_ptr->color[lore_ptr->vn++] = TERM_YELLOW; + } + + if (lore_ptr->flags3 & RF3_HURT_FIRE) { + lore_ptr->vp[lore_ptr->vn] = _("炎", "fire"); + lore_ptr->color[lore_ptr->vn++] = TERM_RED; + } + + if (lore_ptr->flags3 & RF3_HURT_COLD) { + lore_ptr->vp[lore_ptr->vn] = _("冷気", "cold"); + lore_ptr->color[lore_ptr->vn++] = TERM_L_WHITE; + } +} + +void display_monster_weakness(lore_type *lore_ptr) +{ + if (lore_ptr->vn <= 0) + return; + + hooked_roff(format(_("%^sには", "%^s"), wd_he[lore_ptr->msex])); + for (int n = 0; n < lore_ptr->vn; n++) { +#ifdef JP + if (n != 0) + hooked_roff("や"); +#else + if (n == 0) + hooked_roff(" is hurt by "); + else if (n < lore_ptr->vn - 1) + hooked_roff(", "); + else + hooked_roff(" and "); +#endif + hook_c_roff(lore_ptr->color[n], lore_ptr->vp[n]); + } + + hooked_roff(_("でダメージを与えられる。", ". ")); +} + +void display_monster_concrete_resistances(lore_type *lore_ptr) +{ + if (lore_ptr->flagsr & RFR_IM_ACID) { + lore_ptr->vp[lore_ptr->vn] = _("酸", "acid"); + lore_ptr->color[lore_ptr->vn++] = TERM_GREEN; + } + + if (lore_ptr->flagsr & RFR_IM_ELEC) { + lore_ptr->vp[lore_ptr->vn] = _("稲妻", "lightning"); + lore_ptr->color[lore_ptr->vn++] = TERM_BLUE; + } + + if (lore_ptr->flagsr & RFR_IM_FIRE) { + lore_ptr->vp[lore_ptr->vn] = _("炎", "fire"); + lore_ptr->color[lore_ptr->vn++] = TERM_RED; + } + + if (lore_ptr->flagsr & RFR_IM_COLD) { + lore_ptr->vp[lore_ptr->vn] = _("冷気", "cold"); + lore_ptr->color[lore_ptr->vn++] = TERM_L_WHITE; + } + + if (lore_ptr->flagsr & RFR_IM_POIS) { + lore_ptr->vp[lore_ptr->vn] = _("毒", "poison"); + lore_ptr->color[lore_ptr->vn++] = TERM_L_GREEN; + } + + if (lore_ptr->flagsr & RFR_RES_LITE) { + lore_ptr->vp[lore_ptr->vn] = _("閃光", "light"); + lore_ptr->color[lore_ptr->vn++] = TERM_YELLOW; + } + + if (lore_ptr->flagsr & RFR_RES_DARK) { + lore_ptr->vp[lore_ptr->vn] = _("暗黒", "dark"); + lore_ptr->color[lore_ptr->vn++] = TERM_L_DARK; + } + + if (lore_ptr->flagsr & RFR_RES_NETH) { + lore_ptr->vp[lore_ptr->vn] = _("地獄", "nether"); + lore_ptr->color[lore_ptr->vn++] = TERM_L_DARK; + } + + if (lore_ptr->flagsr & RFR_RES_WATE) { + lore_ptr->vp[lore_ptr->vn] = _("水", "water"); + lore_ptr->color[lore_ptr->vn++] = TERM_BLUE; + } + + if (lore_ptr->flagsr & RFR_RES_PLAS) { + lore_ptr->vp[lore_ptr->vn] = _("プラズマ", "plasma"); + lore_ptr->color[lore_ptr->vn++] = TERM_L_RED; + } + + if (lore_ptr->flagsr & RFR_RES_SHAR) { + lore_ptr->vp[lore_ptr->vn] = _("破片", "shards"); + lore_ptr->color[lore_ptr->vn++] = TERM_L_UMBER; + } + + if (lore_ptr->flagsr & RFR_RES_SOUN) { + lore_ptr->vp[lore_ptr->vn] = _("轟音", "sound"); + lore_ptr->color[lore_ptr->vn++] = TERM_ORANGE; + } + + if (lore_ptr->flagsr & RFR_RES_CHAO) { + lore_ptr->vp[lore_ptr->vn] = _("カオス", "chaos"); + lore_ptr->color[lore_ptr->vn++] = TERM_VIOLET; + } + + if (lore_ptr->flagsr & RFR_RES_NEXU) { + lore_ptr->vp[lore_ptr->vn] = _("因果混乱", "nexus"); + lore_ptr->color[lore_ptr->vn++] = TERM_VIOLET; + } + + if (lore_ptr->flagsr & RFR_RES_DISE) { + lore_ptr->vp[lore_ptr->vn] = _("劣化", "disenchantment"); + lore_ptr->color[lore_ptr->vn++] = TERM_VIOLET; + } + + if (lore_ptr->flagsr & RFR_RES_WALL) { + lore_ptr->vp[lore_ptr->vn] = _("フォース", "force"); + lore_ptr->color[lore_ptr->vn++] = TERM_UMBER; + } + + if (lore_ptr->flagsr & RFR_RES_INER) { + lore_ptr->vp[lore_ptr->vn] = _("遅鈍", "inertia"); + lore_ptr->color[lore_ptr->vn++] = TERM_SLATE; + } + + if (lore_ptr->flagsr & RFR_RES_TIME) { + lore_ptr->vp[lore_ptr->vn] = _("時間逆転", "time"); + lore_ptr->color[lore_ptr->vn++] = TERM_L_BLUE; + } + + if (lore_ptr->flagsr & RFR_RES_GRAV) { + lore_ptr->vp[lore_ptr->vn] = _("重力", "gravity"); + lore_ptr->color[lore_ptr->vn++] = TERM_SLATE; + } + + if (lore_ptr->flagsr & RFR_RES_ALL) { + lore_ptr->vp[lore_ptr->vn] = _("あらゆる攻撃", "all"); + lore_ptr->color[lore_ptr->vn++] = TERM_YELLOW; + } + + if ((lore_ptr->flagsr & RFR_RES_TELE) && !(lore_ptr->r_ptr->flags1 & RF1_UNIQUE)) { + lore_ptr->vp[lore_ptr->vn] = _("テレポート", "teleportation"); + lore_ptr->color[lore_ptr->vn++] = TERM_ORANGE; + } +} + +void display_monster_resistances(lore_type *lore_ptr) +{ + if (lore_ptr->vn <= 0) + return; + + hooked_roff(format(_("%^sは", "%^s"), wd_he[lore_ptr->msex])); + for (int n = 0; n < lore_ptr->vn; n++) { +#ifdef JP + if (n != 0) + hooked_roff("と"); +#else + if (n == 0) + hooked_roff(" resists "); + else if (n < lore_ptr->vn - 1) + hooked_roff(", "); + else + hooked_roff(" and "); +#endif + hook_c_roff(lore_ptr->color[n], lore_ptr->vp[n]); + } + + hooked_roff(_("の耐性を持っている。", ". ")); +} diff --git a/src/view/display-lore-status.h b/src/view/display-lore-status.h index d31b94ef4..24a9d6ca2 100644 --- a/src/view/display-lore-status.h +++ b/src/view/display-lore-status.h @@ -7,3 +7,7 @@ void display_monster_hp_ac(lore_type *lore_ptr); void display_monster_concrete_abilities(lore_type *lore_ptr); void display_monster_abilities(lore_type *lore_ptr); void display_monster_constitutions(lore_type *lore_ptr); +void display_monster_concrete_weakness(lore_type *lore_ptr); +void display_monster_weakness(lore_type *lore_ptr); +void display_monster_concrete_resistances(lore_type *lore_ptr); +void display_monster_resistances(lore_type *lore_ptr); -- 2.11.0