From: deskull Date: Wed, 17 Jul 2019 15:20:16 +0000 (+0900) Subject: [Fix] #39106 BGM再生周りの処理を大きく修正.同チケットの指摘事項は一応全て対応確認したつもり. X-Git-Url: http://git.osdn.net/view?p=hengband%2Fhengband.git;a=commitdiff_plain;h=fc38befdaf2270a286ec94af2ddec9f5d12fe509 [Fix] #39106 BGM再生周りの処理を大きく修正.同チケットの指摘事項は一応全て対応確認したつもり. --- diff --git a/lib/xtra/music/music.cfg b/lib/xtra/music/music.cfg index e7e3346b1..c241ddbd8 100644 --- a/lib/xtra/music/music.cfg +++ b/lib/xtra/music/music.cfg @@ -1,7 +1,7 @@ # ¡•Ï‹ð”Ø“{BGMÝ’èƒtƒ@ƒCƒ‹ # lib\xtra\music‚É‚±‚̃tƒ@ƒCƒ‹‚ƍж‚µ‚½‚¢BGMƒtƒ@ƒCƒ‹‚ð’u‚«A # ƒRƒƒ“ƒg‚ɏ]‚Á‚Đݒ肵‚ĉº‚³‚¢B -# ƒtƒ@ƒCƒ‹‚̓Xƒy[ƒX‚Å‹æØ‚Á‚Ä8Ží—Þ‚Ü‚ÅŽw’è‚Å‚«‚Ü‚·B +# ƒtƒ@ƒCƒ‹‚̓Xƒy[ƒX‚Å‹æØ‚Á‚Ä16Ží—Þ‚Ü‚ÅŽw’è‚Å‚«‚Ü‚·B # •¡”Žw’肵‚½ê‡ƒ‰ƒ“ƒ_ƒ€‚É‘I‘ð‚³‚ê‚Ü‚·B diff --git a/src/main-win.c b/src/main-win.c index 37c45c18e..8887eba9d 100644 --- a/src/main-win.c +++ b/src/main-win.c @@ -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); } diff --git a/src/util.c b/src/util.c index b6afa8719..7c4420777 100644 --- a/src/util.c +++ b/src/util.c @@ -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); } diff --git a/src/z-term.h b/src/z-term.h index b8d8d82be..4306dbd50 100644 --- a/src/z-term.h +++ b/src/z-term.h @@ -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 ****/