OSDN Git Service

[Refactor] #40414 Separated display_monster_magic_types() from process_monster_lore...
authorHourier <hourier@users.sourceforge.jp>
Fri, 12 Jun 2020 11:20:19 +0000 (20:20 +0900)
committerHourier <hourier@users.sourceforge.jp>
Fri, 12 Jun 2020 11:20:19 +0000 (20:20 +0900)
src/lore/lore-util.h
src/lore/magic-types-setter.c
src/lore/magic-types-setter.h
src/lore/monster-lore.c
src/view/display-lore-magics.c
src/view/display-lore-magics.h

index fb375b0..a55af63 100644 (file)
@@ -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);
index 2352576..9e46fc2 100644 (file)
@@ -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
index b5f1f48..322e148 100644 (file)
@@ -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);
index cb66238..9e6bb5f 100644 (file)
@@ -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) {
index 570dde3..d9b7a9b 100644 (file)
@@ -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
index 0736142..0b3a4b5 100644 (file)
@@ -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);