OSDN Git Service

[Fix] #39106 BGM再生周りの処理を大きく修正.同チケットの指摘事項は一応全て対応確認したつもり.
authordeskull <deskull@users.sourceforge.jp>
Wed, 17 Jul 2019 15:20:16 +0000 (00:20 +0900)
committerdeskull <deskull@users.sourceforge.jp>
Wed, 17 Jul 2019 15:20:16 +0000 (00:20 +0900)
lib/xtra/music/music.cfg
src/main-win.c
src/util.c
src/z-term.h

index e7e3346..c241ddb 100644 (file)
@@ -1,7 +1,7 @@
 # \81¡\95Ï\8bð\94Ø\93{BGM\90Ý\92è\83t\83@\83C\83\8b
 # lib\xtra\music\82É\82±\82Ì\83t\83@\83C\83\8b\82Æ\8dÄ\90\82µ\82½\82¢BGM\83t\83@\83C\83\8b\82ð\92u\82«\81A
 # \83R\83\81\83\93\83g\82É\8f]\82Á\82Ä\90Ý\92è\82µ\82Ä\89º\82³\82¢\81
-# \83t\83@\83C\83\8b\82Í\83X\83y\81[\83X\82Å\8bæ\90Ø\82Á\82Ä8\8eí\97Þ\82Ü\82Å\8ew\92è\82Å\82«\82Ü\82·\81B
+# \83t\83@\83C\83\8b\82Í\83X\83y\81[\83X\82Å\8bæ\90Ø\82Á\82Ä16\8eí\97Þ\82Ü\82Å\8ew\92è\82Å\82«\82Ü\82·\81B
 # \95¡\90\94\8ew\92è\82µ\82½\8fê\8d\87\83\89\83\93\83_\83\80\82É\91I\91ð\82³\82ê\82Ü\82·\81B
 
 
index 37c45c1..8887eba 100644 (file)
@@ -654,11 +654,11 @@ static DIBINIT infMask;
  */
 static bool can_use_sound = FALSE;
 
-#define SAMPLE_MAX 8
+#define SAMPLE_SOUND_MAX 16
 /*
  * An array of sound file names
  */
-static concptr sound_file[SOUND_MAX][SAMPLE_MAX];
+static concptr sound_file[SOUND_MAX][SAMPLE_SOUND_MAX];
 
 #endif /* USE_SOUND */
 
@@ -1515,7 +1515,7 @@ static void load_sound_prefs(void)
        char tmp[1024];
        char ini_path[1024];
        char wav_path[1024];
-       char *zz[SAMPLE_MAX];
+       char *zz[SAMPLE_SOUND_MAX];
 
        /* Access the sound.cfg */
 
@@ -1525,7 +1525,7 @@ static void load_sound_prefs(void)
        {
                GetPrivateProfileString("Sound", angband_sound_name[i], "", tmp, 1024, ini_path);
 
-               num = tokenize_whitespace(tmp, SAMPLE_MAX, zz);
+               num = tokenize_whitespace(tmp, SAMPLE_SOUND_MAX, zz);
 
                for (j = 0; j < num; j++)
                {
@@ -1549,7 +1549,7 @@ static void load_music_prefs(void)
        char tmp[1024];
        char ini_path[1024];
        char wav_path[1024];
-       char *zz[SAMPLE_MAX];
+       char *zz[SAMPLE_MUSIC_MAX];
        char key[80];
 
        /* Access the music.cfg */
@@ -2538,7 +2538,7 @@ static errr Term_xtra_win_sound(int v)
 #ifdef USE_SOUND
 
        /* Count the samples */
-       for (i = 0; i < SAMPLE_MAX; i++)
+       for (i = 0; i < SAMPLE_SOUND_MAX; i++)
        {
                if (!sound_file[v][i])
                        break;
@@ -2580,6 +2580,11 @@ static errr Term_xtra_win_music(int n, int v)
 #endif /* USE_MUSIC */
 
        /* Sound disabled */
+       if (n == TERM_XTRA_MUSIC_MUTE)
+       {
+               mciSendCommand(mop.wDeviceID, MCI_STOP, 0, 0);
+               mciSendCommand(mop.wDeviceID, MCI_CLOSE, 0, 0);
+       }
 
        if(!use_music) return (1);
 
@@ -2592,48 +2597,22 @@ static errr Term_xtra_win_music(int n, int v)
        switch(n)
        {
        case TERM_XTRA_MUSIC_BASIC:
-               for (i = 0; i < SAMPLE_MAX; i++) if(!music_file[v][i]) break;
-               break;
-       case TERM_XTRA_MUSIC_DUNGEON:
-               for (i = 0; i < SAMPLE_MAX; i++) if(!dungeon_music_file[v][i]) break;
-               break;
-       case TERM_XTRA_MUSIC_QUEST:
-               for (i = 0; i < SAMPLE_MAX; i++) if(!quest_music_file[v][i]) break;
-               break;
-       case TERM_XTRA_MUSIC_TOWN:
-               for (i = 0; i < SAMPLE_MAX; i++) if(!town_music_file[v][i]) break;
-               break;
-       }
-
-       /* No sample */
-       if (i == 0)
-       {
-               //mciSendCommand(mop.wDeviceID, MCI_STOP, 0, 0);
-               //mciSendCommand(mop.wDeviceID, MCI_CLOSE, 0, 0);
-               return (1);
-       }
-
-       switch(n)
-       {
-       case TERM_XTRA_MUSIC_BASIC:
-               for (i = 0; i < SAMPLE_MAX; i++) if(!music_file[v][i]) break;
+               for (i = 0; i < SAMPLE_MUSIC_MAX; i++) if(!music_file[v][i]) break;
                break;
        case TERM_XTRA_MUSIC_DUNGEON:
-               for (i = 0; i < SAMPLE_MAX; i++) if(!dungeon_music_file[v][i]) break;
+               for (i = 0; i < SAMPLE_MUSIC_MAX; i++) if(!dungeon_music_file[v][i]) break;
                break;
        case TERM_XTRA_MUSIC_QUEST:
-               for (i = 0; i < SAMPLE_MAX; i++) if(!quest_music_file[v][i]) break;
+               for (i = 0; i < SAMPLE_MUSIC_MAX; i++) if(!quest_music_file[v][i]) break;
                break;
        case TERM_XTRA_MUSIC_TOWN:
-               for (i = 0; i < SAMPLE_MAX; i++) if(!town_music_file[v][i]) break;
+               for (i = 0; i < SAMPLE_MUSIC_MAX; i++) if(!town_music_file[v][i]) break;
                break;
        }
 
        /* No sample */
        if (i == 0)
        {
-               mciSendCommand(mop.wDeviceID, MCI_STOP, 0, 0);
-               mciSendCommand(mop.wDeviceID, MCI_CLOSE, 0, 0);
                return (1);
        }
 
index b6afa87..7c44207 100644 (file)
@@ -1800,90 +1800,87 @@ errr play_music(int type, int val)
  */
 void select_floor_music(void)
 {
-       int i;
-       /* No sound */
        if (!use_music) return;
 
-       if(p_ptr->ambush_flag)
+       if (p_ptr->ambush_flag)
        {
-               play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_AMBUSH);
-               return;
-       }
+               if (!play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_AMBUSH)) return;
+       } 
 
        if(p_ptr->wild_mode)
        {
-               play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_WILD);
-               return;
+               if (!play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_WILD)) return;
        }
 
        if(p_ptr->inside_arena)
        {
-               play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_ARENA);
-               return;
+               if (!play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_ARENA)) return;
        }
 
        if(p_ptr->phase_out)
        {
-               play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_BATTLE);
-               return;
+               if (!play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_BATTLE)) return;
        }
 
        if(p_ptr->inside_quest)
        {
-               if(play_music(TERM_XTRA_MUSIC_QUEST, p_ptr->inside_quest))
-               {
-                       play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_QUEST);
-               }
-               return;
-       }
-
-       for(i = 0; i < max_q_idx; i++)
-       { // TODO マクロで類似条件を統合すること
-               if(quest[i].status == QUEST_STATUS_TAKEN &&
-                       (quest[i].type == QUEST_TYPE_KILL_LEVEL || quest[i].type == QUEST_TYPE_RANDOM) &&
-                        quest[i].level == current_floor_ptr->dun_level && p_ptr->dungeon_idx == quest[i].dungeon)
-               {
-                       if(play_music(TERM_XTRA_MUSIC_QUEST, i)) 
-                       {
-                               play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_QUEST);
-                       }
-                       return;
-               }
+               if (!play_music(TERM_XTRA_MUSIC_QUEST, p_ptr->inside_quest)) return;
+               if (!play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_QUEST)) return;
        }
 
        if(p_ptr->dungeon_idx)
        {
-               if(p_ptr->feeling == 2) play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_DUN_FEEL2);
-               else if(p_ptr->feeling >= 3 && p_ptr->feeling <= 5) play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_DUN_FEEL1);
+               if (p_ptr->feeling == 2)
+               {
+                       if (!play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_DUN_FEEL2)) return;
+               }
+               else if (p_ptr->feeling >= 3 && p_ptr->feeling <= 5)
+               {
+                       if (!play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_DUN_FEEL1)) return;
+               }
                else
                {
-                       if(play_music(TERM_XTRA_MUSIC_DUNGEON, p_ptr->dungeon_idx))
+                       if (!play_music(TERM_XTRA_MUSIC_DUNGEON, p_ptr->dungeon_idx)) return;
+
+                       if (current_floor_ptr->dun_level < 40)
                        {
-                               if(current_floor_ptr->dun_level < 40) play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_DUN_LOW);
-                               else if(current_floor_ptr->dun_level < 80) play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_DUN_MED);
-                               else play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_DUN_HIGH);
+                               if (!play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_DUN_LOW)) return;
+                       }
+                       else if (current_floor_ptr->dun_level < 80)
+                       {
+                               if (!play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_DUN_MED)) return;
+                       }
+                       else
+                       {
+                               if (!play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_DUN_HIGH)) return;
                        }
                }
-               return;
        }
 
        if(p_ptr->town_num)
        {
-               if(play_music(TERM_XTRA_MUSIC_TOWN, p_ptr->town_num))
-               {
-                       play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_TOWN);
-               }
+               if (!play_music(TERM_XTRA_MUSIC_TOWN, p_ptr->town_num)) return;
+               if (!play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_TOWN)) return;
                return;
        }
 
        if(!current_floor_ptr->dun_level)
        {
-               if(p_ptr->lev >= 45) play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_FIELD3);
-               else if(p_ptr->lev >= 25) play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_FIELD2);
-               else play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_FIELD1);
-               return;
+               if (p_ptr->lev >= 45)
+               {
+                       if (!play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_FIELD3)) return;
+               }
+               else if (p_ptr->lev >= 25)
+               {
+                       if (!play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_FIELD2)) return;
+               }
+               else
+               {
+                       if (!play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_FIELD1)) return;
+               }
        }
        
+       play_music(TERM_XTRA_MUSIC_MUTE, 0);
 }
 
 
index b8d8d82..4306dbd 100644 (file)
@@ -142,7 +142,7 @@ struct term
 #define TERM_XTRA_MUSIC_DUNGEON 15 /* Play a music(dungeon) (optional) */
 #define TERM_XTRA_MUSIC_QUEST 16   /* Play a music(quest)   (optional) */
 #define TERM_XTRA_MUSIC_TOWN 17    /* Play a music(floor)   (optional) */
-
+#define TERM_XTRA_MUSIC_MUTE 18
 
 /**** Available Variables ****/