From b89cdeba6cf2cc4dd061e82342d6be3a77588151 Mon Sep 17 00:00:00 2001 From: Hourier Date: Fri, 12 Jun 2020 20:20:19 +0900 Subject: [PATCH] [Refactor] #40414 Separated display_monster_magic_types() from process_monster_lore() to display-lore-magics.c/h --- src/lore/lore-util.h | 1 + src/lore/magic-types-setter.c | 83 +++++++++++++++++++++++++++ src/lore/magic-types-setter.h | 1 + src/lore/monster-lore.c | 123 +---------------------------------------- src/view/display-lore-magics.c | 46 +++++++++++++++ src/view/display-lore-magics.h | 1 + 6 files changed, 135 insertions(+), 120 deletions(-) diff --git a/src/lore/lore-util.h b/src/lore/lore-util.h index fb375b0e0..a55af637b 100644 --- a/src/lore/lore-util.h +++ b/src/lore/lore-util.h @@ -39,6 +39,7 @@ typedef struct lore_type { concptr vp[96]; char tmp_msg[96][96]; bool breath; + bool magic; } lore_type; typedef void (*hook_c_roff_pf)(TERM_COLOR attr, concptr str); diff --git a/src/lore/magic-types-setter.c b/src/lore/magic-types-setter.c index 235257674..9e46fc29b 100644 --- a/src/lore/magic-types-setter.c +++ b/src/lore/magic-types-setter.c @@ -449,3 +449,86 @@ void set_floor_types(player_type *player_ptr, lore_type *lore_ptr) lore_ptr->color[lore_ptr->vn++] = TERM_RED; } } + +void set_summon_types(lore_type *lore_ptr) +{ + if (lore_ptr->a_ability_flags2 & (RF6_S_MONSTER)) { + lore_ptr->vp[lore_ptr->vn] = _("モンスター一体召喚", "summon a monster"); + lore_ptr->color[lore_ptr->vn++] = TERM_SLATE; + } + + if (lore_ptr->a_ability_flags2 & (RF6_S_MONSTERS)) { + lore_ptr->vp[lore_ptr->vn] = _("モンスター複数召喚", "summon monsters"); + lore_ptr->color[lore_ptr->vn++] = TERM_L_WHITE; + } + + if (lore_ptr->a_ability_flags2 & (RF6_S_KIN)) { + lore_ptr->vp[lore_ptr->vn] = _("救援召喚", "summon aid"); + lore_ptr->color[lore_ptr->vn++] = TERM_ORANGE; + } + + if (lore_ptr->a_ability_flags2 & (RF6_S_ANT)) { + lore_ptr->vp[lore_ptr->vn] = _("アリ召喚", "summon ants"); + lore_ptr->color[lore_ptr->vn++] = TERM_RED; + } + + if (lore_ptr->a_ability_flags2 & (RF6_S_SPIDER)) { + lore_ptr->vp[lore_ptr->vn] = _("クモ召喚", "summon spiders"); + lore_ptr->color[lore_ptr->vn++] = TERM_L_DARK; + } + + if (lore_ptr->a_ability_flags2 & (RF6_S_HOUND)) { + lore_ptr->vp[lore_ptr->vn] = _("ハウンド召喚", "summon hounds"); + lore_ptr->color[lore_ptr->vn++] = TERM_L_UMBER; + } + + if (lore_ptr->a_ability_flags2 & (RF6_S_HYDRA)) { + lore_ptr->vp[lore_ptr->vn] = _("ヒドラ召喚", "summon hydras"); + lore_ptr->color[lore_ptr->vn++] = TERM_L_GREEN; + } + + if (lore_ptr->a_ability_flags2 & (RF6_S_ANGEL)) { + lore_ptr->vp[lore_ptr->vn] = _("天使一体召喚", "summon an angel"); + lore_ptr->color[lore_ptr->vn++] = TERM_YELLOW; + } + + if (lore_ptr->a_ability_flags2 & (RF6_S_DEMON)) { + lore_ptr->vp[lore_ptr->vn] = _("デーモン一体召喚", "summon a demon"); + lore_ptr->color[lore_ptr->vn++] = TERM_L_RED; + } + + if (lore_ptr->a_ability_flags2 & (RF6_S_UNDEAD)) { + lore_ptr->vp[lore_ptr->vn] = _("アンデッド一体召喚", "summon an undead"); + lore_ptr->color[lore_ptr->vn++] = TERM_L_DARK; + } + + if (lore_ptr->a_ability_flags2 & (RF6_S_DRAGON)) { + lore_ptr->vp[lore_ptr->vn] = _("ドラゴン一体召喚", "summon a dragon"); + lore_ptr->color[lore_ptr->vn++] = TERM_ORANGE; + } + + if (lore_ptr->a_ability_flags2 & (RF6_S_HI_UNDEAD)) { + lore_ptr->vp[lore_ptr->vn] = _("強力なアンデッド召喚", "summon Greater Undead"); + lore_ptr->color[lore_ptr->vn++] = TERM_L_DARK; + } + + if (lore_ptr->a_ability_flags2 & (RF6_S_HI_DRAGON)) { + lore_ptr->vp[lore_ptr->vn] = _("古代ドラゴン召喚", "summon Ancient Dragons"); + lore_ptr->color[lore_ptr->vn++] = TERM_ORANGE; + } + + if (lore_ptr->a_ability_flags2 & (RF6_S_CYBER)) { + lore_ptr->vp[lore_ptr->vn] = _("サイバーデーモン召喚", "summon Cyberdemons"); + lore_ptr->color[lore_ptr->vn++] = TERM_UMBER; + } + + if (lore_ptr->a_ability_flags2 & (RF6_S_AMBERITES)) { + lore_ptr->vp[lore_ptr->vn] = _("アンバーの王族召喚", "summon Lords of Amber"); + lore_ptr->color[lore_ptr->vn++] = TERM_VIOLET; + } + + if (lore_ptr->a_ability_flags2 & (RF6_S_UNIQUE)) { + lore_ptr->vp[lore_ptr->vn] = _("ユニーク・モンスター召喚", "summon Unique Monsters"); + lore_ptr->color[lore_ptr->vn++] = TERM_VIOLET; + } +} \ No newline at end of file diff --git a/src/lore/magic-types-setter.h b/src/lore/magic-types-setter.h index b5f1f48b7..322e148bb 100644 --- a/src/lore/magic-types-setter.h +++ b/src/lore/magic-types-setter.h @@ -10,3 +10,4 @@ void set_bolt_types(player_type *player_ptr, lore_type *lore_ptr); void set_status_types(lore_type *lore_ptr); void set_teleport_types(lore_type *lore_ptr); void set_floor_types(player_type *player_ptr, lore_type *lore_ptr); +void set_summon_types(lore_type *lore_ptr); diff --git a/src/lore/monster-lore.c b/src/lore/monster-lore.c index cb662386c..9e6bb5f53 100644 --- a/src/lore/monster-lore.c +++ b/src/lore/monster-lore.c @@ -194,126 +194,9 @@ void process_monster_lore(player_type *player_ptr, MONRACE_IDX r_idx, BIT_FLAGS set_status_types(lore_ptr); set_teleport_types(lore_ptr); set_floor_types(player_ptr, lore_ptr); - if (lore_ptr->a_ability_flags2 & (RF6_S_MONSTER)) { - lore_ptr->vp[lore_ptr->vn] = _("モンスター一体召喚", "summon a monster"); - lore_ptr->color[lore_ptr->vn++] = TERM_SLATE; - } - - if (lore_ptr->a_ability_flags2 & (RF6_S_MONSTERS)) { - lore_ptr->vp[lore_ptr->vn] = _("モンスター複数召喚", "summon monsters"); - lore_ptr->color[lore_ptr->vn++] = TERM_L_WHITE; - } - - if (lore_ptr->a_ability_flags2 & (RF6_S_KIN)) { - lore_ptr->vp[lore_ptr->vn] = _("救援召喚", "summon aid"); - lore_ptr->color[lore_ptr->vn++] = TERM_ORANGE; - } - - if (lore_ptr->a_ability_flags2 & (RF6_S_ANT)) { - lore_ptr->vp[lore_ptr->vn] = _("アリ召喚", "summon ants"); - lore_ptr->color[lore_ptr->vn++] = TERM_RED; - } - - if (lore_ptr->a_ability_flags2 & (RF6_S_SPIDER)) { - lore_ptr->vp[lore_ptr->vn] = _("クモ召喚", "summon spiders"); - lore_ptr->color[lore_ptr->vn++] = TERM_L_DARK; - } - - if (lore_ptr->a_ability_flags2 & (RF6_S_HOUND)) { - lore_ptr->vp[lore_ptr->vn] = _("ハウンド召喚", "summon hounds"); - lore_ptr->color[lore_ptr->vn++] = TERM_L_UMBER; - } - - if (lore_ptr->a_ability_flags2 & (RF6_S_HYDRA)) { - lore_ptr->vp[lore_ptr->vn] = _("ヒドラ召喚", "summon hydras"); - lore_ptr->color[lore_ptr->vn++] = TERM_L_GREEN; - } - - if (lore_ptr->a_ability_flags2 & (RF6_S_ANGEL)) { - lore_ptr->vp[lore_ptr->vn] = _("天使一体召喚", "summon an angel"); - lore_ptr->color[lore_ptr->vn++] = TERM_YELLOW; - } - - if (lore_ptr->a_ability_flags2 & (RF6_S_DEMON)) { - lore_ptr->vp[lore_ptr->vn] = _("デーモン一体召喚", "summon a demon"); - lore_ptr->color[lore_ptr->vn++] = TERM_L_RED; - } - - if (lore_ptr->a_ability_flags2 & (RF6_S_UNDEAD)) { - lore_ptr->vp[lore_ptr->vn] = _("アンデッド一体召喚", "summon an undead"); - lore_ptr->color[lore_ptr->vn++] = TERM_L_DARK; - } - - if (lore_ptr->a_ability_flags2 & (RF6_S_DRAGON)) { - lore_ptr->vp[lore_ptr->vn] = _("ドラゴン一体召喚", "summon a dragon"); - lore_ptr->color[lore_ptr->vn++] = TERM_ORANGE; - } - - if (lore_ptr->a_ability_flags2 & (RF6_S_HI_UNDEAD)) { - lore_ptr->vp[lore_ptr->vn] = _("強力なアンデッド召喚", "summon Greater Undead"); - lore_ptr->color[lore_ptr->vn++] = TERM_L_DARK; - } - - if (lore_ptr->a_ability_flags2 & (RF6_S_HI_DRAGON)) { - lore_ptr->vp[lore_ptr->vn] = _("古代ドラゴン召喚", "summon Ancient Dragons"); - lore_ptr->color[lore_ptr->vn++] = TERM_ORANGE; - } - - if (lore_ptr->a_ability_flags2 & (RF6_S_CYBER)) { - lore_ptr->vp[lore_ptr->vn] = _("サイバーデーモン召喚", "summon Cyberdemons"); - lore_ptr->color[lore_ptr->vn++] = TERM_UMBER; - } - - if (lore_ptr->a_ability_flags2 & (RF6_S_AMBERITES)) { - lore_ptr->vp[lore_ptr->vn] = _("アンバーの王族召喚", "summon Lords of Amber"); - lore_ptr->color[lore_ptr->vn++] = TERM_VIOLET; - } - - if (lore_ptr->a_ability_flags2 & (RF6_S_UNIQUE)) { - lore_ptr->vp[lore_ptr->vn] = _("ユニーク・モンスター召喚", "summon Unique Monsters"); - lore_ptr->color[lore_ptr->vn++] = TERM_VIOLET; - } - - bool magic = FALSE; - if (lore_ptr->vn) { - magic = TRUE; - if (lore_ptr->breath) { - hooked_roff(_("、なおかつ", ", and is also")); - } else { - hooked_roff(format(_("%^sは", "%^s is"), wd_he[lore_ptr->msex])); - } - -#ifdef JP - if (lore_ptr->flags2 & (RF2_SMART)) - hook_c_roff(TERM_YELLOW, "的確に"); - hooked_roff("魔法を使うことができ、"); -#else - hooked_roff(" magical, casting spells"); - if (lore_ptr->flags2 & RF2_SMART) - hook_c_roff(TERM_YELLOW, " intelligently"); -#endif - - for (int n = 0; n < lore_ptr->vn; n++) { -#ifdef JP - if (n != 0) - hooked_roff("、"); -#else - if (n == 0) - hooked_roff(" which "); - else if (n < lore_ptr->vn - 1) - hooked_roff(", "); - else - hooked_roff(" or "); -#endif - hook_c_roff(lore_ptr->color[n], lore_ptr->vp[n]); - } - -#ifdef JP - hooked_roff("の呪文を唱えることがある"); -#endif - } - - if (lore_ptr->breath || magic) { + set_summon_types(lore_ptr); + display_monster_magic_types(lore_ptr); + if (lore_ptr->breath || lore_ptr->magic) { int m = lore_ptr->r_ptr->r_cast_spell; int n = lore_ptr->r_ptr->freq_spell; if (m > 100 || lore_ptr->know_everything) { diff --git a/src/view/display-lore-magics.c b/src/view/display-lore-magics.c index 570dde355..d9b7a9bad 100644 --- a/src/view/display-lore-magics.c +++ b/src/view/display-lore-magics.c @@ -1,4 +1,6 @@ #include "view/display-lore-magics.h" +#include "monster-race/race-flags2.h" +#include "term/term-color-types.h" void display_monster_breath(lore_type *lore_ptr) { @@ -27,3 +29,47 @@ void display_monster_breath(lore_type *lore_ptr) hooked_roff("のブレスを吐くことがある"); #endif } + +void display_monster_magic_types(lore_type *lore_ptr) +{ + lore_ptr->magic = FALSE; + if (lore_ptr->vn == 0) + return; + + lore_ptr->magic = TRUE; + if (lore_ptr->breath) { + hooked_roff(_("、なおかつ", ", and is also")); + } else { + hooked_roff(format(_("%^sは", "%^s is"), wd_he[lore_ptr->msex])); + } + +#ifdef JP + if (lore_ptr->flags2 & (RF2_SMART)) + hook_c_roff(TERM_YELLOW, "的確に"); + + hooked_roff("魔法を使うことができ、"); +#else + hooked_roff(" magical, casting spells"); + if (lore_ptr->flags2 & RF2_SMART) + hook_c_roff(TERM_YELLOW, " intelligently"); +#endif + + for (int n = 0; n < lore_ptr->vn; n++) { +#ifdef JP + if (n != 0) + hooked_roff("、"); +#else + if (n == 0) + hooked_roff(" which "); + else if (n < lore_ptr->vn - 1) + hooked_roff(", "); + else + hooked_roff(" or "); +#endif + hook_c_roff(lore_ptr->color[n], lore_ptr->vp[n]); + } + +#ifdef JP + hooked_roff("の呪文を唱えることがある"); +#endif +} \ No newline at end of file diff --git a/src/view/display-lore-magics.h b/src/view/display-lore-magics.h index 0736142e0..0b3a4b5d4 100644 --- a/src/view/display-lore-magics.h +++ b/src/view/display-lore-magics.h @@ -3,3 +3,4 @@ #include "lore/lore-util.h" void display_monster_breath(lore_type *lore_ptr); +void display_monster_magic_types(lore_type *lore_ptr); -- 2.11.0