OSDN Git Service

[Refactor] #37353 xtra2.c から rumor.c を分離。 / rumor.c from xtra2.c.
authorDeskull <deskull@users.sourceforge.jp>
Mon, 28 Jan 2019 15:00:46 +0000 (00:00 +0900)
committerDeskull <deskull@users.sourceforge.jp>
Mon, 28 Jan 2019 15:00:46 +0000 (00:00 +0900)
Hengband_vcs2017/Hengband/Hengband.vcxproj
src/Makefile.am
src/bldg.c
src/cmd-read.c
src/externs.h
src/rumor.c [new file with mode: 0644]
src/rumor.h [new file with mode: 0644]
src/store.c
src/xtra2.c

index 289decd..bf093a4 100644 (file)
     <ClCompile Include="..\..\src\rooms-trap.c" />\r
     <ClCompile Include="..\..\src\rooms-vault.c" />\r
     <ClCompile Include="..\..\src\rooms.c" />\r
+    <ClCompile Include="..\..\src\rumor.c" />\r
     <ClCompile Include="..\..\src\save.c" />\r
     <ClCompile Include="..\..\src\scores.c" />\r
     <ClCompile Include="..\..\src\selfinfo.c" />\r
     <ClInclude Include="..\..\src\rooms-trap.h" />\r
     <ClInclude Include="..\..\src\rooms-vault.h" />\r
     <ClInclude Include="..\..\src\rooms.h" />\r
+    <ClInclude Include="..\..\src\rumor.h" />\r
     <ClInclude Include="..\..\src\selfinfo.h" />\r
     <ClInclude Include="..\..\src\sort.h" />\r
     <ClInclude Include="..\..\src\spells-object.h" />\r
index f589b90..adcda3b 100644 (file)
@@ -59,6 +59,8 @@ hengband_SOURCES = \
        rooms-special.c rooms-special.h rooms-trap.c rooms-trap.h rooms-vault.c \
        rooms-vault.h save.c scores.c selfinfo.c selfinfo.h shoot.c snipe.c \
        \
+       rumor.h rumor.c \
+       \
        spells1.c spells2.c spells3.c \
        spells-object.c spells-object.h \
        spells-status.c spells-status.h \
index bf06a48..8b44268 100644 (file)
@@ -25,6 +25,7 @@
 #include "quest.h"
 #include "artifact.h"
 #include "cmd-spell.h"
+#include "rumor.h"
 
 /*!
  * ループ中で / hack as in leave_store in store.c
index c1d0fff..2df2af6 100644 (file)
@@ -13,6 +13,7 @@
 #include "avatar.h"\r
 #include "player-status.h"\r
 #include "spells-status.h"\r
+#include "rumor.h"\r
 \r
 /*!\r
  * @brief 巻物を読むコマンドのサブルーチン\r
index 80cb685..7663123 100644 (file)
@@ -1264,7 +1264,6 @@ extern void do_poly_wounds(void);
 extern void change_race(CHARACTER_IDX new_race, concptr effect_msg);
 extern ENERGY bow_energy(OBJECT_SUBTYPE_VALUE sval);
 extern int bow_tmul(OBJECT_SUBTYPE_VALUE sval);
-extern void display_rumor(bool ex);
 
 /* scores.c */
 extern void display_scores_aux(int from, int to, int note, high_score *score);
diff --git a/src/rumor.c b/src/rumor.c
new file mode 100644 (file)
index 0000000..6622e24
--- /dev/null
@@ -0,0 +1,155 @@
+#include "angband.h"
+
+/*
+ * Display a rumor and apply its effects
+ */
+
+IDX rumor_num(char *zz, IDX max_idx)
+{
+       if (strcmp(zz, "*") == 0) return randint1(max_idx - 1);
+       return (IDX)atoi(zz);
+}
+
+concptr rumor_bind_name(char *base, concptr fullname)
+{
+       char *s, *v;
+
+       s = strstr(base, "{Name}");
+       if (s)
+       {
+               s[0] = '\0';
+               v = format("%s%s%s", base, fullname, (s + 6));
+       }
+       else
+       {
+               v = base;
+       }
+
+       return v;
+}
+
+void display_rumor(bool ex)
+{
+       errr err;
+       int section = 0;
+       char Rumor[1024];
+
+       if (ex)
+       {
+               if (randint0(3) == 0) section = 1;
+       }
+
+       err = _(get_rnd_line_jonly("rumors_j.txt", section, Rumor, 10),
+               get_rnd_line("rumors.txt", section, Rumor));
+       if (err) strcpy(Rumor, _("嘘の噂もある。", "Some rumors are wrong."));
+
+       err = TRUE;
+
+       if (strncmp(Rumor, "R:", 2) == 0)
+       {
+               char *zz[4];
+               concptr rumor_msg = NULL;
+               concptr rumor_eff_format = NULL;
+               char fullname[1024] = "";
+
+               if (tokenize(Rumor + 2, 3, zz, TOKENIZE_CHECKQUOTE) == 3)
+               {
+                       if (strcmp(zz[0], "ARTIFACT") == 0)
+                       {
+                               IDX a_idx, k_idx;
+                               object_type forge;
+                               object_type *q_ptr = &forge;
+                               artifact_type *a_ptr;
+
+                               while (1)
+                               {
+                                       a_idx = rumor_num(zz[1], max_a_idx);
+
+                                       a_ptr = &a_info[a_idx];
+                                       if (a_ptr->name) break;
+                               }
+
+                               k_idx = lookup_kind(a_ptr->tval, a_ptr->sval);
+                               object_prep(q_ptr, k_idx);
+                               q_ptr->name1 = a_idx;
+                               q_ptr->ident = IDENT_STORE;
+                               object_desc(fullname, q_ptr, OD_NAME_ONLY);
+                       }
+                       else if (strcmp(zz[0], "MONSTER") == 0)
+                       {
+                               MONRACE_IDX r_idx;
+                               monster_race *r_ptr;
+
+                               while (1)
+                               {
+                                       r_idx = rumor_num(zz[1], max_r_idx);
+                                       r_ptr = &r_info[r_idx];
+                                       if (r_ptr->name) break;
+                               }
+
+                               strcpy(fullname, r_name + r_ptr->name);
+
+                               /* Remember this monster */
+                               if (!r_ptr->r_sights)
+                               {
+                                       r_ptr->r_sights++;
+                               }
+                       }
+                       else if (strcmp(zz[0], "DUNGEON") == 0)
+                       {
+                               DUNGEON_IDX d_idx;
+                               dungeon_info_type *d_ptr;
+
+                               while (1)
+                               {
+                                       d_idx = rumor_num(zz[1], max_d_idx);
+                                       d_ptr = &d_info[d_idx];
+                                       if (d_ptr->name) break;
+                               }
+
+                               strcpy(fullname, d_name + d_ptr->name);
+
+                               if (!max_dlv[d_idx])
+                               {
+                                       max_dlv[d_idx] = d_ptr->mindepth;
+                                       rumor_eff_format = _("%sに帰還できるようになった。", "You can recall to %s.");
+                               }
+                       }
+                       else if (strcmp(zz[0], "TOWN") == 0)
+                       {
+                               IDX t_idx;
+                               s32b visit;
+
+                               while (1)
+                               {
+                                       t_idx = rumor_num(zz[1], NO_TOWN);
+                                       if (town[t_idx].name) break;
+                               }
+
+                               strcpy(fullname, town[t_idx].name);
+
+                               visit = (1L << (t_idx - 1));
+                               if ((t_idx != SECRET_TOWN) && !(p_ptr->visit & visit))
+                               {
+                                       p_ptr->visit |= visit;
+                                       rumor_eff_format = _("%sに行ったことがある気がする。", "You feel you have been to %s.");
+                               }
+                       }
+
+                       rumor_msg = rumor_bind_name(zz[2], fullname);
+                       msg_print(rumor_msg);
+                       if (rumor_eff_format)
+                       {
+                               msg_print(NULL);
+                               msg_format(rumor_eff_format, fullname);
+                       }
+                       err = FALSE;
+               }
+               /* error */
+               if (err) msg_print(_("この情報は間違っている。", "This information is wrong."));
+       }
+       else
+       {
+               msg_format("%s", Rumor);
+       }
+}
diff --git a/src/rumor.h b/src/rumor.h
new file mode 100644 (file)
index 0000000..df56158
--- /dev/null
@@ -0,0 +1,3 @@
+#pragma once
+
+extern void display_rumor(bool ex);
index 406edc1..8c73e6f 100644 (file)
@@ -17,6 +17,7 @@
 #include "store.h"
 #include "avatar.h"
 #include "cmd-spell.h"
+#include "rumor.h"
 
 #define MIN_STOCK 12
 
index 95fe5da..b1a92f1 100644 (file)
@@ -2827,156 +2827,3 @@ int bow_tmul(OBJECT_SUBTYPE_VALUE sval)
 }
 
 
-/*
- * Display a rumor and apply its effects
- */
-
-IDX rumor_num(char *zz, IDX max_idx)
-{
-       if (strcmp(zz, "*") == 0) return randint1(max_idx - 1);
-       return (IDX)atoi(zz);
-}
-
-concptr rumor_bind_name(char *base, concptr fullname)
-{
-       char *s, *v;
-
-       s = strstr(base, "{Name}");
-       if (s)
-       {
-               s[0] = '\0';
-               v = format("%s%s%s", base, fullname, (s + 6));
-       }
-       else
-       {
-               v = base;
-       }
-
-       return v;
-}
-
-void display_rumor(bool ex)
-{
-       errr err;
-       int section = 0;
-       char Rumor[1024];
-
-       if (ex)
-       {
-               if (randint0(3) == 0) section = 1;
-       }
-
-       err = _(get_rnd_line_jonly("rumors_j.txt", section, Rumor, 10),
-                       get_rnd_line("rumors.txt", section, Rumor));
-       if (err) strcpy(Rumor, _("嘘の噂もある。", "Some rumors are wrong."));
-
-       err = TRUE;
-
-       if (strncmp(Rumor, "R:", 2) == 0)
-       {
-               char *zz[4];
-               concptr rumor_msg = NULL;
-               concptr rumor_eff_format = NULL;
-               char fullname[1024] = "";
-
-               if (tokenize(Rumor + 2, 3, zz, TOKENIZE_CHECKQUOTE) == 3)
-               {
-                       if (strcmp(zz[0], "ARTIFACT") == 0)
-                       {
-                               IDX a_idx, k_idx;
-                               object_type forge;
-                               object_type *q_ptr = &forge;
-                               artifact_type *a_ptr;
-
-                               while (1)
-                               {
-                                       a_idx = rumor_num(zz[1], max_a_idx);
-
-                                       a_ptr = &a_info[a_idx];
-                                       if (a_ptr->name) break;
-                               }
-
-                               k_idx = lookup_kind(a_ptr->tval, a_ptr->sval);
-                               object_prep(q_ptr, k_idx);
-                               q_ptr->name1 = a_idx;
-                               q_ptr->ident = IDENT_STORE;
-                               object_desc(fullname, q_ptr, OD_NAME_ONLY);
-                       }
-                       else if  (strcmp(zz[0], "MONSTER") == 0)
-                       {
-                               MONRACE_IDX r_idx;
-                               monster_race *r_ptr;
-
-                               while(1)
-                               {
-                                       r_idx = rumor_num(zz[1], max_r_idx);
-                                       r_ptr = &r_info[r_idx];
-                                       if (r_ptr->name) break;
-                               }
-
-                               strcpy(fullname, r_name + r_ptr->name);
-
-                               /* Remember this monster */
-                               if (!r_ptr->r_sights)
-                               {
-                                       r_ptr->r_sights++;
-                               }
-                       }
-                       else if (strcmp(zz[0], "DUNGEON") == 0)
-                       {
-                               DUNGEON_IDX d_idx;
-                               dungeon_info_type *d_ptr;
-
-                               while (1)
-                               {
-                                       d_idx = rumor_num(zz[1], max_d_idx);
-                                       d_ptr = &d_info[d_idx];
-                                       if (d_ptr->name) break;
-                               }
-
-                               strcpy(fullname, d_name + d_ptr->name);
-
-                               if (!max_dlv[d_idx])
-                               {
-                                       max_dlv[d_idx] = d_ptr->mindepth;
-                                       rumor_eff_format = _("%sに帰還できるようになった。", "You can recall to %s.");
-                               }
-                       }
-                       else if  (strcmp(zz[0], "TOWN") == 0)
-                       {
-                               IDX t_idx;
-                               s32b visit;
-
-                               while(1)
-                               {
-                                       t_idx = rumor_num(zz[1], NO_TOWN);
-                                       if (town[t_idx].name) break;
-                               }
-
-                               strcpy(fullname, town[t_idx].name);
-
-                               visit = (1L << (t_idx - 1));
-                               if ((t_idx != SECRET_TOWN) && !(p_ptr->visit & visit))
-                               {
-                                       p_ptr->visit |= visit;
-                                       rumor_eff_format = _("%sに行ったことがある気がする。", "You feel you have been to %s.");
-                               }
-                       }
-
-                       rumor_msg = rumor_bind_name(zz[2], fullname);
-                       msg_print(rumor_msg);
-                       if (rumor_eff_format)
-                       {
-                               msg_print(NULL);
-                               msg_format(rumor_eff_format, fullname);
-                       }
-                       err = FALSE;
-               }
-       /* error */
-       if (err) msg_print(_("この情報は間違っている。", "This information is wrong."));
-       }
-                       else
-       {
-               msg_format("%s", Rumor);
-       }
-}