OSDN Git Service

ゴルフィンブール等を固定クエストで先に倒したときランダムクエストが正常に
authormogami <mogami@0568b783-4c39-0410-ac80-bf13821ea2a2>
Mon, 15 Jul 2002 14:52:50 +0000 (14:52 +0000)
committermogami <mogami@0568b783-4c39-0410-ac80-bf13821ea2a2>
Mon, 15 Jul 2002 14:52:50 +0000 (14:52 +0000)
キャンセルして下り階段が生成するようにした。メッセージは
「この階は以前は誰かによって守られていたようだ…。」
《達成したクエスト》
「ゴルフィンブール (6階) - 不戦勝」
等。

src/bldg.c
src/cmd4.c
src/generate.c

index c512e8d..308d064 100644 (file)
@@ -4629,12 +4629,27 @@ void quest_discovery(int q_idx)
        if (q_num == 1)
        {
                /* Unique */
+
+                /* Hack -- "unique" monsters must be "unique" */
+                if ((r_ptr->flags1 & RF1_UNIQUE) &&
+                    (r_ptr->cur_num >= r_ptr->max_num))
+                {
 #ifdef JP
-msg_format("Ãí°Õ¤»¤è¡ª¤³¤Î³¬¤Ï%s¤Ë¤è¤Ã¤Æ¼é¤é¤ì¤Æ¤¤¤ë¡ª", name);
+                        msg_print("¤³¤Î³¬¤Ï°ÊÁ°¤Ï狼¤Ë¤è¤Ã¤Æ¼é¤é¤ì¤Æ¤¤¤¿¤è¤¦¤À¡Ä¡£");
 #else
-               msg_format("Beware, this level is protected by %s!", name);
+                        msg_print("It seems that this level was protected by someone before...");
 #endif
-
+                        /* The unique is already dead */
+                        quest[q_idx].status = QUEST_STATUS_FINISHED;
+                }
+                else
+                {
+#ifdef JP
+                        msg_format("Ãí°Õ¤»¤è¡ª¤³¤Î³¬¤Ï%s¤Ë¤è¤Ã¤Æ¼é¤é¤ì¤Æ¤¤¤ë¡ª", name);
+#else
+                        msg_format("Beware, this level is protected by %s!", name);
+#endif
+                }
        }
        else
        {
index 2157ecf..999f773 100644 (file)
@@ -7179,13 +7179,30 @@ sprintf(rand_tmp_str,"%s (%d 
                        if ((i >= MIN_RANDOM_QUEST) && quest[i].r_idx)
                        {
                                /* Print the quest info */
+
+                                if (quest[i].complev == 0)
+                                {
+                                        sprintf(tmp_str, 
 #ifdef JP
-                               sprintf(tmp_str, "%s (%d³¬) - ¥ì¥Ù¥ë%d\n",
+                                                "%s (%d³¬) - ÉÔÀᄀ\n",
 #else
-                               sprintf(tmp_str, "%s (Dungeon level: %d) - level %d\n",
+                                                "%s (Dungeon level: %d) - (Cancelled)\n",
 #endif
-
-                                       r_name+r_info[quest[i].r_idx].name, quest[i].level, quest[i].complev);
+                                                r_name+r_info[quest[i].r_idx].name,
+                                                quest[i].level);
+                                }
+                                else
+                                {
+                                        sprintf(tmp_str, 
+#ifdef JP
+                                                "%s (%d³¬) - ¥ì¥Ù¥ë%d\n",
+#else
+                                                "%s (Dungeon level: %d) - level %d\n",
+#endif
+                                                r_name+r_info[quest[i].r_idx].name,
+                                                quest[i].level,
+                                                quest[i].complev);
+                                }
                        }
                        else
                        {
index f023e43..379e2ab 100644 (file)
@@ -137,8 +137,18 @@ static bool alloc_stairs(int feat, int num, int walls)
        }
        else if (feat == FEAT_MORE)
        {
+                int q_idx = quest_number(dun_level);
+
                /* No downstairs on quest levels */
-               if ((dun_level > 1) && quest_number(dun_level)) return TRUE;
+               if (dun_level > 1 && q_idx)
+                {
+                       monster_race *r_ptr = &r_info[quest[q_idx].r_idx];
+
+                       /* The unique monster is still alive? */
+                       if ((r_ptr->flags1 & RF1_UNIQUE) &&
+                            (0 < r_ptr->max_num))
+                                return TRUE;
+                }
 
                /* No downstairs at the bottom */
                if (dun_level >= d_info[dungeon_type].maxdepth) return TRUE;
@@ -958,7 +968,6 @@ if (cheat_room) msg_print("
                            (r_ptr->cur_num >= r_ptr->max_num))
                        {
                                /* The unique is already dead */
-                               quest[i].status = QUEST_STATUS_FINISHED;
                        }
                        else
                        {