OSDN Git Service

[Refactor] #40414 Separated display_where_to_appear() from process_monster_lore()
authorHourier <hourier@users.sourceforge.jp>
Thu, 11 Jun 2020 13:38:57 +0000 (22:38 +0900)
committerHourier <hourier@users.sourceforge.jp>
Thu, 11 Jun 2020 13:38:57 +0000 (22:38 +0900)
src/lore/lore-util.c
src/lore/lore-util.h
src/lore/monster-lore.c
src/view/display-monster-lore.c
src/view/display-monster-lore.h

index e1f5592..ee25da3 100644 (file)
@@ -11,6 +11,7 @@ hook_c_roff_pf hook_c_roff = c_roff;
 
 lore_type *initialize_lore_type(lore_type *lore_ptr, MONRACE_IDX r_idx, BIT_FLAGS mode)
 {
+    lore_ptr->r_idx = r_idx;
     lore_ptr->nightmare = ironman_nightmare && !(mode & 0x02);
     lore_ptr->r_ptr = &r_info[r_idx];
     lore_ptr->speed = lore_ptr->nightmare ? lore_ptr->r_ptr->speed + 5 : lore_ptr->r_ptr->speed;
@@ -27,6 +28,7 @@ lore_type *initialize_lore_type(lore_type *lore_ptr, MONRACE_IDX r_idx, BIT_FLAG
     lore_ptr->reinforce = FALSE;
     lore_ptr->know_everything = FALSE;
     lore_ptr->mode = mode;
+    lore_ptr->old = FALSE;
     return lore_ptr;
 }
 
index 381634b..19834f6 100644 (file)
@@ -32,6 +32,8 @@ typedef struct lore_type {
     bool know_everything;
     BIT_FLAGS mode;
     monster_sex msex;
+    bool old;
+    MONRACE_IDX r_idx;
 } lore_type;
 
 typedef void (*hook_c_roff_pf)(TERM_COLOR attr, concptr str);
index 2c17230..e732681 100644 (file)
@@ -282,32 +282,8 @@ void process_monster_lore(player_type *player_ptr, MONRACE_IDX r_idx, BIT_FLAGS
         return;
     }
 
-    bool old = FALSE;
-    if (lore_ptr->r_ptr->level == 0) {
-        hooked_roff(format(_("%^sは町に住み", "%^s lives in the town"), wd_he[lore_ptr->msex]));
-        old = TRUE;
-    } else if (lore_ptr->r_ptr->r_tkills || lore_ptr->know_everything) {
-        if (depth_in_feet) {
-            hooked_roff(format(
-                _("%^sは通常地下 %d フィートで出現し", "%^s is normally found at depths of %d feet"), wd_he[lore_ptr->msex], lore_ptr->r_ptr->level * 50));
-        } else {
-            hooked_roff(format(_("%^sは通常地下 %d 階で出現し", "%^s is normally found on dungeon level %d"), wd_he[lore_ptr->msex], lore_ptr->r_ptr->level));
-        }
-
-        old = TRUE;
-    }
-
-    if (r_idx == MON_CHAMELEON) {
-        hooked_roff(_("、他のモンスターに化ける。", "and can take the shape of other monster."));
+    if (!display_where_to_appear(lore_ptr))
         return;
-    }
-
-    if (old) {
-        hooked_roff(_("、", ", and "));
-    } else {
-        hooked_roff(format(_("%^sは", "%^s "), wd_he[lore_ptr->msex]));
-        old = TRUE;
-    }
 
 #ifdef JP
 #else
@@ -359,19 +335,19 @@ void process_monster_lore(player_type *player_ptr, MONRACE_IDX r_idx, BIT_FLAGS
 #endif
 
     if (lore_ptr->flags1 & RF1_NEVER_MOVE) {
-        if (old) {
+        if (lore_ptr->old) {
             hooked_roff(_("、しかし", ", but "));
         } else {
             hooked_roff(format(_("%^sは", "%^s "), wd_he[lore_ptr->msex]));
-            old = TRUE;
+            lore_ptr->old = TRUE;
         }
 
         hooked_roff(_("侵入者を追跡しない", "does not deign to chase intruders"));
     }
 
-    if (old) {
+    if (lore_ptr->old) {
         hooked_roff(_("。", ".  "));
-        old = FALSE;
+        lore_ptr->old = FALSE;
     }
 
     if (lore_ptr->r_ptr->r_tkills || lore_ptr->know_everything) {
index 8cb9305..4fdf02d 100644 (file)
@@ -1,6 +1,7 @@
 #include "view/display-monster-lore.h"
 #include "lore/monster-lore.h"
 #include "monster-race/race-flags1.h"
+#include "monster-race/race-indice-types.h"
 #include "term/term-color-types.h"
 #include "world/world.h"
 
@@ -169,3 +170,40 @@ void display_kill_numbers(lore_type *lore_ptr)
 
     hooked_roff("\n");
 }
+
+/*!
+ * @brief どこに出没するかを表示する
+ * @param lore_ptr モンスターの思い出構造体への参照ポインタ
+ * @return たぬきならFALSE、それ以外はTRUE
+ */
+bool display_where_to_appear(lore_type *lore_ptr)
+{
+    lore_ptr->old = FALSE;
+    if (lore_ptr->r_ptr->level == 0) {
+        hooked_roff(format(_("%^sは町に住み", "%^s lives in the town"), wd_he[lore_ptr->msex]));
+        lore_ptr->old = TRUE;
+    } else if (lore_ptr->r_ptr->r_tkills || lore_ptr->know_everything) {
+        if (depth_in_feet) {
+            hooked_roff(format(
+                _("%^sは通常地下 %d フィートで出現し", "%^s is normally found at depths of %d feet"), wd_he[lore_ptr->msex], lore_ptr->r_ptr->level * 50));
+        } else {
+            hooked_roff(format(_("%^sは通常地下 %d 階で出現し", "%^s is normally found on dungeon level %d"), wd_he[lore_ptr->msex], lore_ptr->r_ptr->level));
+        }
+
+        lore_ptr->old = TRUE;
+    }
+
+    if (lore_ptr->r_idx == MON_CHAMELEON) {
+        hooked_roff(_("、他のモンスターに化ける。", "and can take the shape of other monster."));
+        return FALSE;
+    }
+
+    if (lore_ptr->old) {
+        hooked_roff(_("、", ", and "));
+    } else {
+        hooked_roff(format(_("%^sは", "%^s "), wd_he[lore_ptr->msex]));
+        lore_ptr->old = TRUE;
+    }
+
+    return TRUE;
+}
index 51b9fcf..23528a1 100644 (file)
@@ -8,3 +8,4 @@ void screen_roff(player_type *player_ptr, MONRACE_IDX r_idx, BIT_FLAGS mode);
 void display_roff(player_type *player_ptr);
 void output_monster_spoiler(player_type *player_ptr, MONRACE_IDX r_idx, void (*roff_func)(TERM_COLOR attr, concptr str));
 void display_kill_numbers(lore_type *lore_ptr);
+bool display_where_to_appear(lore_type *lore_ptr);