OSDN Git Service

[Refactor] #40414 Separated display-lore-attacks.c/h from monster-lore.c
authorHourier <hourier@users.sourceforge.jp>
Fri, 12 Jun 2020 14:31:21 +0000 (23:31 +0900)
committerHourier <hourier@users.sourceforge.jp>
Fri, 12 Jun 2020 14:31:21 +0000 (23:31 +0900)
Hengband/Hengband/Hengband.vcxproj
Hengband/Hengband/Hengband.vcxproj.filters
src/Makefile.am
src/lore/lore-util.c
src/lore/lore-util.h
src/lore/monster-lore.c
src/view/display-lore-attacks.c [new file with mode: 0644]
src/view/display-lore-attacks.h [new file with mode: 0644]

index f9a8ccb..569aa19 100644 (file)
     <ClCompile Include="..\..\src\view\display-birth.c" />\r
     <ClCompile Include="..\..\src\view\display-characteristic.c" />\r
     <ClCompile Include="..\..\src\view\display-fruit.c" />\r
+    <ClCompile Include="..\..\src\view\display-lore-attacks.c" />\r
     <ClCompile Include="..\..\src\view\display-lore-drops.c" />\r
     <ClCompile Include="..\..\src\view\display-lore-magics.c" />\r
     <ClCompile Include="..\..\src\view\display-lore-status.c" />\r
     <ClInclude Include="..\..\src\term\term-color-types.h" />\r
     <ClInclude Include="..\..\src\util\object-sort.h" />\r
     <ClInclude Include="..\..\src\view\display-birth.h" />\r
+    <ClInclude Include="..\..\src\view\display-lore-attacks.h" />\r
     <ClInclude Include="..\..\src\view\display-lore-drops.h" />\r
     <ClInclude Include="..\..\src\view\display-lore-magics.h" />\r
     <ClInclude Include="..\..\src\view\display-lore-status.h" />\r
index 4c2a1e7..04da9d2 100644 (file)
     <ClCompile Include="..\..\src\lore\combat-types-setter.c">
       <Filter>lore</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\src\view\display-lore-attacks.c">
+      <Filter>view</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\..\src\cmd\cmd-basic.h">
     <ClInclude Include="..\..\src\lore\combat-types-setter.h">
       <Filter>lore</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\src\view\display-lore-attacks.h">
+      <Filter>view</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <None Include="..\..\src\wall.bmp" />
index b1c1cf1..facfb53 100644 (file)
@@ -525,6 +525,7 @@ hengband_SOURCES = \
        \
        view/display-characteristic.c view/display-characteristic.h \
        view/display-fruit.c view/display-fruit.h \
+       view/display-lore-attacks.c view/display-lore-attacks.h \
        view/display-lore-drops.c view/display-lore-drops.h \
        view/display-lore-magics.c view/display-lore-magics.h \
        view/display-lore-status.c view/display-lore-status.h \
index 80bc7fe..db26801 100644 (file)
@@ -33,6 +33,7 @@ lore_type *initialize_lore_type(lore_type *lore_ptr, MONRACE_IDX r_idx, BIT_FLAG
     lore_ptr->know_everything = FALSE;
     lore_ptr->mode = mode;
     lore_ptr->old = FALSE;
+    lore_ptr->count = 0;
     return lore_ptr;
 }
 
index 07f5f76..4157b77 100644 (file)
@@ -45,6 +45,7 @@ typedef struct lore_type {
     concptr p;
     concptr q;
     rbm_type method;
+    int count;
 } lore_type;
 
 typedef void (*hook_c_roff_pf)(TERM_COLOR attr, concptr str);
index bd5baeb..e9dc2b9 100644 (file)
@@ -25,6 +25,7 @@
 #include "mspell/mspell-type.h"
 #include "term/term-color-types.h"
 #include "util/util.h"
+#include "view/display-lore-attacks.h"
 #include "view/display-lore-drops.h"
 #include "view/display-lore-magics.h"
 #include "view/display-lore-status.h"
@@ -218,13 +219,12 @@ void process_monster_lore(player_type *player_ptr, MONRACE_IDX r_idx, BIT_FLAGS
     display_monster_drops(lore_ptr);
 
     const int max_attack_numbers = 4;
-    int count = 0;
     for (int m = 0; m < max_attack_numbers; m++) {
         if (!lore_ptr->r_ptr->blow[m].method || (lore_ptr->r_ptr->blow[m].method == RBM_SHOOT))
             continue;
 
         if (lore_ptr->r_ptr->r_blows[m] || lore_ptr->know_everything)
-            count++;
+            lore_ptr->count++;
     }
 
     int attack_numbers = 0;
@@ -235,64 +235,7 @@ void process_monster_lore(player_type *player_ptr, MONRACE_IDX r_idx, BIT_FLAGS
 
         set_monster_blow_method(lore_ptr, m);
         set_monster_blow_effect(lore_ptr, m);
-        int d1 = lore_ptr->r_ptr->blow[m].d_dice;
-        int d2 = lore_ptr->r_ptr->blow[m].d_side;
-
-#ifdef JP
-        if (attack_numbers == 0) {
-            hooked_roff(format("%^sは", wd_he[lore_ptr->msex]));
-        }
-
-        if (d1 && d2 && (lore_ptr->know_everything || know_damage(r_idx, m))) {
-            hooked_roff(format(" %dd%d ", d1, d2));
-            hooked_roff("のダメージで");
-        }
-
-        if (!lore_ptr->p)
-            lore_ptr->p = "何か奇妙なことをする";
-
-        /* XXしてYYし/XXしてYYする/XXし/XXする */
-        if (lore_ptr->q != NULL)
-            jverb(lore_ptr->p, lore_ptr->jverb_buf, JVERB_TO);
-        else if (attack_numbers != count - 1)
-            jverb(lore_ptr->p, lore_ptr->jverb_buf, JVERB_AND);
-        else
-            strcpy(lore_ptr->jverb_buf, lore_ptr->p);
-
-        hooked_roff(lore_ptr->jverb_buf);
-        if (lore_ptr->q) {
-            if (attack_numbers != count - 1)
-                jverb(lore_ptr->q, lore_ptr->jverb_buf, JVERB_AND);
-            else
-                strcpy(lore_ptr->jverb_buf, lore_ptr->q);
-            hooked_roff(lore_ptr->jverb_buf);
-        }
-
-        if (attack_numbers != count - 1)
-            hooked_roff("、");
-#else
-        if (attack_numbers == 0) {
-            hooked_roff(format("%^s can ", wd_he[lore_ptr->msex]));
-        } else if (attack_numbers < count - 1) {
-            hooked_roff(", ");
-        } else {
-            hooked_roff(", and ");
-        }
-
-        if (lore_ptr->p == NULL)
-            lore_ptr->p = "do something weird";
-
-        hooked_roff(lore_ptr->p);
-        if (lore_ptr->q != NULL) {
-            hooked_roff(" to ");
-            hooked_roff(lore_ptr->q);
-            if (d1 && d2 && (lore_ptr->know_everything || know_damage(r_idx, m))) {
-                hooked_roff(" with damage");
-                hooked_roff(format(" %dd%d", d1, d2));
-            }
-        }
-#endif
-
+        display_monster_blows(lore_ptr, m, attack_numbers);
         attack_numbers++;
     }
 
diff --git a/src/view/display-lore-attacks.c b/src/view/display-lore-attacks.c
new file mode 100644 (file)
index 0000000..d4fcb21
--- /dev/null
@@ -0,0 +1,73 @@
+#include "view/display-lore-attacks.h"
+#include "locale/japanese.h"
+#include "lore/lore-calculator.h"
+
+#ifdef JP
+static void display_monster_blows_jp(lore_type *lore_ptr, int attack_numbers, int d1, int d2, int m)
+{
+    if (attack_numbers == 0) {
+        hooked_roff(format("%^sは", wd_he[lore_ptr->msex]));
+    }
+
+    if (d1 && d2 && (lore_ptr->know_everything || know_damage(lore_ptr->r_idx, m))) {
+        hooked_roff(format(" %dd%d ", d1, d2));
+        hooked_roff("のダメージで");
+    }
+
+    if (!lore_ptr->p)
+        lore_ptr->p = "何か奇妙なことをする";
+
+    /* XXしてYYし/XXしてYYする/XXし/XXする */
+    if (lore_ptr->q != NULL)
+        jverb(lore_ptr->p, lore_ptr->jverb_buf, JVERB_TO);
+    else if (attack_numbers != lore_ptr->count - 1)
+        jverb(lore_ptr->p, lore_ptr->jverb_buf, JVERB_AND);
+    else
+        strcpy(lore_ptr->jverb_buf, lore_ptr->p);
+
+    hooked_roff(lore_ptr->jverb_buf);
+    if (lore_ptr->q) {
+        if (attack_numbers != lore_ptr->count - 1)
+            jverb(lore_ptr->q, lore_ptr->jverb_buf, JVERB_AND);
+        else
+            strcpy(lore_ptr->jverb_buf, lore_ptr->q);
+        hooked_roff(lore_ptr->jverb_buf);
+    }
+
+    if (attack_numbers != lore_ptr->count - 1)
+        hooked_roff("、");
+}
+#else
+
+static void display_monster_blows_en(lore_type *lore_ptr, int attack_numbers, int d1, int d2, int m)
+{
+    if (attack_numbers == 0) {
+        hooked_roff(format("%^s can ", wd_he[lore_ptr->msex]));
+    } else if (attack_numbers < lore_ptr->count - 1) {
+        hooked_roff(", ");
+    } else {
+        hooked_roff(", and ");
+    }
+
+    if (lore_ptr->p == NULL)
+        lore_ptr->p = "do something weird";
+
+    hooked_roff(lore_ptr->p);
+    if (lore_ptr->q != NULL) {
+        hooked_roff(" to ");
+        hooked_roff(lore_ptr->q);
+        if (d1 && d2 && (lore_ptr->know_everything || know_damage(lore_ptr->r_idx, m))) {
+            hooked_roff(" with damage");
+            hooked_roff(format(" %dd%d", d1, d2));
+        }
+    }
+}
+#endif
+
+void display_monster_blows(lore_type *lore_ptr, int m, int attack_numbers)
+{
+    int d1 = lore_ptr->r_ptr->blow[m].d_dice;
+    int d2 = lore_ptr->r_ptr->blow[m].d_side;
+    void (*display_monster_blows_pf)(lore_type *, int, int, int, int) = _(display_monster_blows_jp, display_monster_blows_en);
+    (*display_monster_blows_pf)(lore_ptr, attack_numbers, d1, d2, m);
+}
diff --git a/src/view/display-lore-attacks.h b/src/view/display-lore-attacks.h
new file mode 100644 (file)
index 0000000..79f02b2
--- /dev/null
@@ -0,0 +1,6 @@
+#pragma once
+
+#include "system/angband.h"
+#include "lore/lore-util.h"
+
+void display_monster_blows(lore_type *lore_ptr, int m, int attack_numbers);