5 #include "object-flavor.h"
9 * Display a rumor and apply its effects
12 IDX rumor_num(char *zz, IDX max_idx)
14 if (strcmp(zz, "*") == 0) return randint1(max_idx - 1);
18 concptr rumor_bind_name(char *base, concptr fullname)
22 s = strstr(base, "{Name}");
26 v = format("%s%s%s", base, fullname, (s + 6));
36 void display_rumor(bool ex)
44 if (randint0(3) == 0) section = 1;
47 err = _(get_rnd_line_jonly("rumors_j.txt", section, Rumor, 10),
48 get_rnd_line("rumors.txt", section, Rumor));
49 if (err) strcpy(Rumor, _("嘘の噂もある。", "Some rumors are wrong."));
53 if (strncmp(Rumor, "R:", 2) == 0)
56 concptr rumor_msg = NULL;
57 concptr rumor_eff_format = NULL;
58 char fullname[1024] = "";
60 if (tokenize(Rumor + 2, 3, zz, TOKENIZE_CHECKQUOTE) == 3)
62 if (strcmp(zz[0], "ARTIFACT") == 0)
66 object_type *q_ptr = &forge;
71 a_idx = rumor_num(zz[1], max_a_idx);
73 a_ptr = &a_info[a_idx];
74 if (a_ptr->name) break;
77 k_idx = lookup_kind(a_ptr->tval, a_ptr->sval);
78 object_prep(q_ptr, k_idx);
80 q_ptr->ident = IDENT_STORE;
81 object_desc(fullname, q_ptr, OD_NAME_ONLY);
83 else if (strcmp(zz[0], "MONSTER") == 0)
90 r_idx = rumor_num(zz[1], max_r_idx);
91 r_ptr = &r_info[r_idx];
92 if (r_ptr->name) break;
95 strcpy(fullname, r_name + r_ptr->name);
97 /* Remember this monster */
103 else if (strcmp(zz[0], "DUNGEON") == 0)
110 d_idx = rumor_num(zz[1], max_d_idx);
111 d_ptr = &d_info[d_idx];
112 if (d_ptr->name) break;
115 strcpy(fullname, d_name + d_ptr->name);
119 max_dlv[d_idx] = d_ptr->mindepth;
120 rumor_eff_format = _("%sに帰還できるようになった。", "You can recall to %s.");
123 else if (strcmp(zz[0], "TOWN") == 0)
130 t_idx = rumor_num(zz[1], NO_TOWN);
131 if (town_info[t_idx].name) break;
134 strcpy(fullname, town_info[t_idx].name);
136 visit = (1L << (t_idx - 1));
137 if ((t_idx != SECRET_TOWN) && !(p_ptr->visit & visit))
139 p_ptr->visit |= visit;
140 rumor_eff_format = _("%sに行ったことがある気がする。", "You feel you have been to %s.");
144 rumor_msg = rumor_bind_name(zz[2], fullname);
145 msg_print(rumor_msg);
146 if (rumor_eff_format)
149 msg_format(rumor_eff_format, fullname);
154 if (err) msg_print(_("この情報は間違っている。", "This information is wrong."));
158 msg_format("%s", Rumor);