OSDN Git Service

[Refactor] #38997 rumor.c の整形 / Reshaped rumor.c
[hengband/hengband.git] / src / rumor.c
index 559f56a..ac69af4 100644 (file)
@@ -23,144 +23,121 @@ IDX rumor_num(char *zz, IDX max_idx)
 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;
        }
 
+       v = base;
        return v;
 }
 
 void display_rumor(player_type *player_ptr, bool ex)
 {
-       errr err;
-       int section = 0;
-       char Rumor[1024];
+       char rumor[1024];
+       int section = (ex && (randint0(3) == 0)) ? 1 : 0;
+       errr 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."));
+
+       if (strncmp(rumor, "R:", 2) != 0)
+       {
+               msg_format("%s", rumor);
+               return;
+       }
 
-       if (ex)
+       char *zz[4];
+       if (tokenize(rumor + 2, 3, zz, TOKENIZE_CHECKQUOTE) != 3)
        {
-               if (randint0(3) == 0) section = 1;
+               msg_print(_("この情報は間違っている。", "This information is wrong."));
+               return;
        }
 
-       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."));
+       concptr rumor_eff_format = NULL;
+       char fullname[1024] = "";
+       if (strcmp(zz[0], "ARTIFACT") == 0)
+       {
+               ARTIFACT_IDX a_idx;
+               artifact_type *a_ptr;
+               while (TRUE)
+               {
+                       a_idx = rumor_num(zz[1], max_a_idx);
+
+                       a_ptr = &a_info[a_idx];
+                       if (a_ptr->name) break;
+               }
+
+               KIND_OBJECT_IDX k_idx = lookup_kind(a_ptr->tval, a_ptr->sval);
+               object_type forge;
+               object_type *q_ptr = &forge;
+               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)
+       {
+               monster_race *r_ptr;
+               while (TRUE)
+               {
+                       MONRACE_IDX 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);
+
+               if (!r_ptr->r_sights)
+               {
+                       r_ptr->r_sights++;
+               }
+       }
+       else if (strcmp(zz[0], "DUNGEON") == 0)
+       {
+               DUNGEON_IDX d_idx;
+               dungeon_type *d_ptr;
+               while (TRUE)
+               {
+                       d_idx = rumor_num(zz[1], current_world_ptr->max_d_idx);
+                       d_ptr = &d_info[d_idx];
+                       if (d_ptr->name) break;
+               }
 
-       err = TRUE;
+               strcpy(fullname, d_name + d_ptr->name);
 
-       if (strncmp(Rumor, "R:", 2) == 0)
+               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)
        {
-               char *zz[4];
-               concptr rumor_msg = NULL;
-               concptr rumor_eff_format = NULL;
-               char fullname[1024] = "";
+               IDX t_idx;
+               while (TRUE)
+               {
+                       t_idx = rumor_num(zz[1], NO_TOWN);
+                       if (town_info[t_idx].name) break;
+               }
+
+               strcpy(fullname, town_info[t_idx].name);
 
-               if (tokenize(Rumor + 2, 3, zz, TOKENIZE_CHECKQUOTE) == 3)
+               s32b visit = (1L << (t_idx - 1));
+               if ((t_idx != SECRET_TOWN) && !(player_ptr->visit & visit))
                {
-                       if (strcmp(zz[0], "ARTIFACT") == 0)
-                       {
-                               ARTIFACT_IDX a_idx;
-                               KIND_OBJECT_IDX k_idx;
-                               object_type forge;
-                               object_type *q_ptr = &forge;
-                               artifact_type *a_ptr;
-
-                               while (TRUE)
-                               {
-                                       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 (TRUE)
-                               {
-                                       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_type *d_ptr;
-
-                               while (TRUE)
-                               {
-                                       d_idx = rumor_num(zz[1], current_world_ptr->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 (TRUE)
-                               {
-                                       t_idx = rumor_num(zz[1], NO_TOWN);
-                                       if (town_info[t_idx].name) break;
-                               }
-
-                               strcpy(fullname, town_info[t_idx].name);
-
-                               visit = (1L << (t_idx - 1));
-                               if ((t_idx != SECRET_TOWN) && !(player_ptr->visit & visit))
-                               {
-                                       player_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;
+                       player_ptr->visit |= visit;
+                       rumor_eff_format = _("%sに行ったことがある気がする。", "You feel you have been to %s.");
                }
-               /* error */
-               if (err) msg_print(_("この情報は間違っている。", "This information is wrong."));
        }
-       else
+
+       concptr rumor_msg = rumor_bind_name(zz[2], fullname);
+       msg_print(rumor_msg);
+       if (rumor_eff_format)
        {
-               msg_format("%s", Rumor);
+               msg_print(NULL);
+               msg_format(rumor_eff_format, fullname);
        }
 }