OSDN Git Service

Rumors already includes some excellent rumors. (It was coded temporally.)
authoriks <iks@0568b783-4c39-0410-ac80-bf13821ea2a2>
Sun, 13 Jan 2013 12:47:52 +0000 (12:47 +0000)
committeriks <iks@0568b783-4c39-0410-ac80-bf13821ea2a2>
Sun, 13 Jan 2013 12:47:52 +0000 (12:47 +0000)
lib/file/rumors_j.txt
src/bldg.c
src/cmd6.c
src/externs.h
src/store.c
src/xtra2.c

index a0a2548..78f6d40 100644 (file)
@@ -1,4 +1,10 @@
-N:*:Default
+N:1:Excellent
+R:ARTIFACT:*:{Name}¤È¤¤¤¦¤ªÊõ¤¬Ãϲ¼¤Ë¤Ï¤¢¤ë¤½¤¦¤À¡£
+R:MONSTER:*:{Name}¤È¤¤¤¦¥â¥ó¥¹¥¿¡¼¤¬¤¤¤ë¤é¤·¤¤¡£
+R:DUNGEON:1:{Name}¤Î¾ì½ê¤Ï¥³¥³¤À¡§ -³¤¯-
+R:TOWN:*:{Name}¤È¤¤¤¦³¹¤Ë¹Ô¤Ã¤¿¤³¤È¤Ï¤¢¤ë¤«¤¤¡©
+
+N:0:Default
 ³¤¤ò±Ë¤®»³¤òÅФ俽ê¤Ë¤¢¤ëÄ®¤Ï¾¤ÎÄ®¤È¤Ï°ìÌ£°ã¤¦¤¾¡£
 ¥¢¥¤¥Æ¥à¤òÀˤ·¤à¤Ê¡¢Ì¿¤³¤½Àˤ·¤á¡£
 #700
index fe6ab6c..274a86c 100644 (file)
@@ -2925,15 +2925,7 @@ msg_print("
 
                case BACT_RUMORS: /* Listen for rumors */
                        {
-                               char Rumor[1024];
-
-#ifdef JP
-                               if (!get_rnd_line_jonly("rumors_j.txt", 0, Rumor, 10))
-#else
-                               if (!get_rnd_line("rumors.txt", 0, Rumor))
-#endif
-
-                                       msg_format("%s", Rumor);
+                               display_rumor(TRUE);
                                break;
                        }
        }
index c1aa2f7..ec37b73 100644 (file)
@@ -2076,65 +2076,17 @@ take_hit(DAMAGE_NOESCAPE, 111+randint1(111), "
 
                case SV_SCROLL_RUMOR:
                {
-                       errr err = 0;
-
-                       switch (randint1(20))
-                       {
-                               case 1:
-#ifdef JP
-err = get_rnd_line("chainswd_j.txt", 0, Rumor);
-#else
-                                       err = get_rnd_line("chainswd.txt", 0, Rumor);
-#endif
-
-                                       break;
-                               case 2:
-#ifdef JP
-err = get_rnd_line("error_j.txt", 0, Rumor);
-#else
-                                       err = get_rnd_line("error.txt", 0, Rumor);
-#endif
-
-                                       break;
-                               case 3:
-                               case 4:
-                               case 5:
-#ifdef JP
-err = get_rnd_line("death_j.txt", 0, Rumor);
-#else
-                                       err = get_rnd_line("death.txt", 0, Rumor);
-#endif
-
-                                       break;
-                               default:
-#ifdef JP
-err = get_rnd_line_jonly("rumors_j.txt", 0, Rumor, 10);
-#else
-                                       err = get_rnd_line("rumors.txt", 0, Rumor);
-#endif
-
-                                       break;
-                       }
-
-                       /* An error occured */
-#ifdef JP
-if (err) strcpy(Rumor, "±³¤Î±½¤â¤¢¤ë¡£");
-#else
-                       if (err) strcpy(Rumor, "Some rumors are wrong.");
-#endif
-
-
 #ifdef JP
-msg_print("´¬Êª¤Ë¤Ï¥á¥Ã¥»¡¼¥¸¤¬½ñ¤«¤ì¤Æ¤¤¤ë:");
+                       msg_print("´¬Êª¤Ë¤Ï¥á¥Ã¥»¡¼¥¸¤¬½ñ¤«¤ì¤Æ¤¤¤ë:");
 #else
                        msg_print("There is message on the scroll. It says:");
 #endif
 
                        msg_print(NULL);
-                       msg_format("%s", Rumor);
+                       display_rumor(TRUE);
                        msg_print(NULL);
 #ifdef JP
-msg_print("´¬Êª¤Ï±ì¤òΩ¤Æ¤Æ¾Ã¤¨µî¤Ã¤¿¡ª");
+                       msg_print("´¬Êª¤Ï±ì¤òΩ¤Æ¤Æ¾Ã¤¨µî¤Ã¤¿¡ª");
 #else
                        msg_print("The scroll disappears in a puff of smoke!");
 #endif
index 3f37334..b49fa21 100644 (file)
@@ -1494,6 +1494,7 @@ extern cptr your_alignment(void);
 extern int weapon_exp_level(int weapon_exp);
 extern int riding_exp_level(int riding_exp);
 extern int spell_exp_level(int spell_exp);
+extern void display_rumor(bool ex);
 
 /* mspells1.c */
 extern bool clean_shot(int y1, int x1, int y2, int x2, bool friend);
index eb8ba0d..7c13b49 100644 (file)
@@ -324,19 +324,11 @@ static void say_comment_1(void)
        if (one_in_(RUMOR_CHANCE))
        {
 #ifdef JP
-msg_print("Ź¼ç¤Ï¼ª¤¦¤Á¤·¤¿:");
+               msg_print("Ź¼ç¤Ï¼ª¤¦¤Á¤·¤¿:");
 #else
                msg_print("The shopkeeper whispers something into your ear:");
 #endif
-
-
-#ifdef JP
-if (!get_rnd_line_jonly("rumors_j.txt", 0, rumour, 10))
-#else
-               if (!get_rnd_line("rumors.txt", 0, rumour))
-#endif
-
-                       msg_print(rumour);
+               display_rumor(TRUE);
        }
 }
 
index de91090..e0e8a70 100644 (file)
@@ -6260,3 +6260,185 @@ int spell_exp_level(int spell_exp)
        else if (spell_exp < SPELL_EXP_MASTER) return EXP_LEVEL_EXPERT;
        else return EXP_LEVEL_MASTER;
 }
+
+
+/*
+ * Display a rumor and apply its effects
+ */
+
+int rumor_num(char *zz, int max_idx)
+{
+       if (strcmp(zz, "*") == 0) return randint1(max_idx - 1);
+       return atoi(zz);
+}
+
+cptr rumor_bind_name(char *base, cptr fullname)
+{
+       char buf[1024];
+       char *s;
+
+       if (strlen(base) + strlen(fullname) > sizeof(buf) - 1)
+       {
+               return "Too long.";
+       }
+
+       if (s = strstr(base, "{Name}"))
+       {
+               s[0] = '\0';
+               strcpy(buf, base);
+               strcat(buf, fullname);
+               strcat(buf, s + 6);
+       }
+       else
+       {
+               strcpy(buf, base);
+       }
+
+       return buf;
+}
+
+void display_rumor(bool ex)
+{
+       bool err;
+       int section = 0;
+       char Rumor[1024];
+
+       if (ex)
+       {
+               if (randint0(3) == 0) section = 1;
+       }
+
+#ifdef JP
+       err = get_rnd_line_jonly("rumors_j.txt", section, Rumor, 10);
+       if (err) strcpy(Rumor, "±³¤Î±½¤â¤¢¤ë¡£");
+#else
+       err = get_rnd_line("rumors.txt", section, Rumor);
+       if (err) strcpy(Rumor, "Some rumors are wrong.");
+#endif
+
+       err = TRUE;
+
+       if (strncmp(Rumor, "R:", 2) == 0)
+       {
+               char *zz[4];
+               cptr rumor_msg = NULL;
+               cptr rumor_eff = NULL;
+               char fullname[1024] = "";
+
+               if (tokenize(Rumor + 2, 3, zz, TOKENIZE_CHECKQUOTE) == 3)
+               {
+                       if (strcmp(zz[0], "ARTIFACT") == 0)
+                       {
+                               int 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)
+                       {
+                               int 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;
+                               }
+
+#ifdef JP
+                               strcpy(fullname, r_name + r_ptr->name);
+#else
+                               strcpy(fullname, r_name + r_ptr->E_name);
+#endif
+
+                               /* Remember this monster */
+                               if (!r_ptr->r_sights)
+                               {
+                                       r_ptr->r_sights++;
+                               }
+                       }
+                       else if  (strcmp(zz[0], "DUNGEON") == 0)
+                       {
+                               int 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;
+#ifdef JP
+                                       rumor_eff = format("%s¤Ëµ¢´Ô¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤Ã¤¿¡£", fullname);
+#else
+                                       rumor_eff = format("You can recall to %s.", fullname);
+#endif
+                               }
+                       }
+                       else if  (strcmp(zz[0], "TOWN") == 0)
+                       {
+                               int 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;
+#ifdef JP
+                                       rumor_eff = format("%s¤Ë¹Ô¤Ã¤¿¤³¤È¤¬¤¢¤ëµ¤¤¬¤¹¤ë¡£", fullname);
+#else
+                                       rumor_eff = format("You feel you have been to %s.", fullname);
+#endif
+                               }
+                       }
+
+                       rumor_msg = rumor_bind_name(zz[2], fullname);
+                       msg_print(rumor_msg);
+                       if (rumor_eff) 
+                       {
+                               msg_print(NULL);
+                               msg_print(rumor_eff);
+                       }
+                       err = FALSE;
+               }
+       /* error */
+#ifdef JP
+               if (err) msg_print("¤³¤Î¾ðÊó¤Ï´Ö°ã¤Ã¤Æ¤¤¤ë¡£");
+#else
+               if (err) msg_print("This information is wrong.");
+#endif
+       }
+                       else
+       {
+               msg_format("%s", Rumor);
+       }
+}