OSDN Git Service

[Fix] #41383 個別にフロアクエスト用BGMを設定せず、Basic BGM (クエスト)のみを設定した場合、通常ダンジョン用のBGMしか流れない不具合を解消した...
authorHourier <hourier@users.sourceforge.jp>
Sat, 30 Jan 2021 14:59:36 +0000 (23:59 +0900)
committerHourier <hourier@users.sourceforge.jp>
Sat, 30 Jan 2021 14:59:36 +0000 (23:59 +0900)
src/main/sound-of-music.c

index 1f555c2..643939c 100644 (file)
@@ -42,6 +42,27 @@ errr play_music(int type, int val)
 }
 
 /*
+ * @brief ダンジョン用の通常BGMまたはクエスト用BGM
+ * @param player_ptr プレーヤーへの参照ポインタ
+ * @return BGMを鳴らすか後続処理で鳴らすBGMを決めるならばTRUE、鳴らさないならばFALSE
+ * @details
+ */
+bool dungeon_quest_music(player_type *player_ptr)
+{
+    QUEST_IDX quest_id = player_ptr->current_floor_ptr->inside_quest;
+    if (quest_id == 0)
+        quest_id = quest_number(player_ptr, player_ptr->current_floor_ptr->dun_level);
+
+    if (quest_id == 0)
+        return TRUE;
+    
+    if (!play_music(TERM_XTRA_MUSIC_QUEST, quest_id))
+        return FALSE;
+    
+    return play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_QUEST) != 0;
+}
+
+/*
  * Hack -- Select floor music.
  */
 void select_floor_music(player_type *player_ptr)
@@ -76,21 +97,8 @@ void select_floor_music(player_type *player_ptr)
             return;
     }
 
-    // ダンジョン内クエスト用BGMに切り替わらない問題の暫定的な修正
-    // (https://osdn.net/projects/hengband/ticket/41134)
-    //
-    // ワーグクエスト、およびランダムクエストが該当。
-    // これらに突入した際は inside_quest が更新されないようなので、
-    // quest_number() で改めてクエストIDを取得する。
-    //
-    // TODO: 根本的には inside_quest の更新処理を見直すべきではある。
-    {
-        QUEST_IDX id = quest_number(player_ptr, player_ptr->current_floor_ptr->dun_level);
-        if (id != 0) {
-            if (!play_music(TERM_XTRA_MUSIC_QUEST, id))
-                return;
-        }
-    }
+    if (!dungeon_quest_music(player_ptr))
+        return;
 
     if (player_ptr->dungeon_idx) {
         if (player_ptr->feeling == 2) {