diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 4ff298b77..2781b0991 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,5 +1,9 @@ D1X-Rebirth Changelog +20110120 +-------- +arch/sdl/jukebox.c, main/digi.h, main/menu.c, main/songs.c: Added a simple random function for the Jukebox; Removed one small printf I once added for debugging + 20110119 -------- include/3d.h, main/game.h, main/gamerend.c, main/gauges.c, main/multi.c, main/multi.h, main/net_udp.c: Introducing new BOUNTY Multiplayer game mode by Matt "1360" Vandermeulen ; Fit show_HUD_names code to be more similar to D2X - names display still client-decided tho diff --git a/arch/sdl/jukebox.c b/arch/sdl/jukebox.c index b45aeecd0..32c14abba 100644 --- a/arch/sdl/jukebox.c +++ b/arch/sdl/jukebox.c @@ -187,7 +187,7 @@ void jukebox_load() return; } - for (i = 0; JukeboxSongs.list[i]; i++) {printf("%s\n",JukeboxSongs.list[i]);} + for (i = 0; JukeboxSongs.list[i]; i++) {} JukeboxSongs.num_songs = i; if (new_path) @@ -216,7 +216,10 @@ void jukebox_hook_next() { if (!JukeboxSongs.list || GameCfg.CMLevelMusicTrack[0] == -1) return; - GameCfg.CMLevelMusicTrack[0]++; + if (GameCfg.CMLevelMusicPlayOrder == MUSIC_CM_PLAYORDER_RAND) + GameCfg.CMLevelMusicTrack[0] = d_rand() % GameCfg.CMLevelMusicTrack[1]; // simply a random selection - no check if this song has already been played. But that's how I roll! + else + GameCfg.CMLevelMusicTrack[0]++; if (GameCfg.CMLevelMusicTrack[0] + 1 > GameCfg.CMLevelMusicTrack[1]) GameCfg.CMLevelMusicTrack[0] = 0; @@ -242,7 +245,7 @@ int jukebox_play() memset(full_filename, '\0', strlen(GameCfg.CMLevelMusicPath)+strlen(music_filename)+1); snprintf(full_filename, strlen(GameCfg.CMLevelMusicPath)+strlen(music_filename)+1, "%s%s", GameCfg.CMLevelMusicPath, music_filename); - if (!mix_play_file(full_filename, ((GameCfg.CMLevelMusicPlayOrder == MUSIC_CM_PLAYORDER_CONT)?0:1), ((GameCfg.CMLevelMusicPlayOrder == MUSIC_CM_PLAYORDER_CONT)?jukebox_hook_next:NULL))) + if (!mix_play_file(full_filename, ((GameCfg.CMLevelMusicPlayOrder == MUSIC_CM_PLAYORDER_LEVEL)?1:0), ((GameCfg.CMLevelMusicPlayOrder == MUSIC_CM_PLAYORDER_LEVEL)?NULL:jukebox_hook_next))) { d_free(full_filename); return 0; // whoops, got an error diff --git a/main/digi.h b/main/digi.h index fdf17a8f1..9bdd77a07 100644 --- a/main/digi.h +++ b/main/digi.h @@ -111,6 +111,7 @@ extern void digi_start_sound_queued( short soundnum, fix volume ); // play-order definitions for custom music #define MUSIC_CM_PLAYORDER_CONT 0 #define MUSIC_CM_PLAYORDER_LEVEL 1 +#define MUSIC_CM_PLAYORDER_RAND 2 #define SOUND_MAX_VOLUME F1_0 / 2 diff --git a/main/menu.c b/main/menu.c index bd7c7ce14..d87a9c892 100644 --- a/main/menu.c +++ b/main/menu.c @@ -1580,7 +1580,7 @@ int select_file_recursive(char *title, const char *orig_path, char **ext_list, i #endif -int opt_sm_digivol = -1, opt_sm_musicvol = -1, opt_sm_revstereo = -1, opt_sm_mtype0 = -1, opt_sm_mtype1 = -1, opt_sm_mtype2 = -1, opt_sm_mtype3 = -1, opt_sm_redbook_playorder = -1, opt_sm_mtype3_lmpath = -1, opt_sm_mtype3_lmplayorder1 = -1, opt_sm_mtype3_lmplayorder2 = -1, opt_sm_cm_mtype3_file1_b = -1, opt_sm_cm_mtype3_file1 = -1, opt_sm_cm_mtype3_file2_b = -1, opt_sm_cm_mtype3_file2 = -1, opt_sm_cm_mtype3_file3_b = -1, opt_sm_cm_mtype3_file3 = -1, opt_sm_cm_mtype3_file4_b = -1, opt_sm_cm_mtype3_file4 = -1, opt_sm_cm_mtype3_file5_b = -1, opt_sm_cm_mtype3_file5 = -1; +int opt_sm_digivol = -1, opt_sm_musicvol = -1, opt_sm_revstereo = -1, opt_sm_mtype0 = -1, opt_sm_mtype1 = -1, opt_sm_mtype2 = -1, opt_sm_mtype3 = -1, opt_sm_redbook_playorder = -1, opt_sm_mtype3_lmpath = -1, opt_sm_mtype3_lmplayorder1 = -1, opt_sm_mtype3_lmplayorder2 = -1, opt_sm_mtype3_lmplayorder3 = -1, opt_sm_cm_mtype3_file1_b = -1, opt_sm_cm_mtype3_file1 = -1, opt_sm_cm_mtype3_file2_b = -1, opt_sm_cm_mtype3_file2 = -1, opt_sm_cm_mtype3_file3_b = -1, opt_sm_cm_mtype3_file3 = -1, opt_sm_cm_mtype3_file4_b = -1, opt_sm_cm_mtype3_file4 = -1, opt_sm_cm_mtype3_file5_b = -1, opt_sm_cm_mtype3_file5 = -1; void set_extmusic_volume(int volume); @@ -1658,6 +1658,11 @@ int sound_menuset(newmenu *menu, d_event *event, void *userdata) GameCfg.CMLevelMusicPlayOrder = MUSIC_CM_PLAYORDER_LEVEL; replay = (Game_wind != NULL); } + else if (citem == opt_sm_mtype3_lmplayorder3) + { + GameCfg.CMLevelMusicPlayOrder = MUSIC_CM_PLAYORDER_RAND; + replay = (Game_wind != NULL); + } #endif break; @@ -1733,7 +1738,7 @@ int sound_menuset(newmenu *menu, d_event *event, void *userdata) } #ifdef USE_SDLMIXER -#define SOUND_MENU_NITEMS 32 +#define SOUND_MENU_NITEMS 33 #else #ifdef _WIN32 #define SOUND_MENU_NITEMS 11 @@ -1814,6 +1819,9 @@ void do_sound_menu() opt_sm_mtype3_lmplayorder2 = nitems; m[nitems].type = NM_TYPE_RADIO; m[nitems].text = "one track per level"; m[nitems].value = (GameCfg.CMLevelMusicPlayOrder == MUSIC_CM_PLAYORDER_LEVEL); m[nitems].group = 1; nitems++; + opt_sm_mtype3_lmplayorder3 = nitems; + m[nitems].type = NM_TYPE_RADIO; m[nitems].text = "random"; m[nitems].value = (GameCfg.CMLevelMusicPlayOrder == MUSIC_CM_PLAYORDER_RAND); m[nitems].group = 1; nitems++; + m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = ""; m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = "non-level music:"; diff --git a/main/songs.c b/main/songs.c index 10d557ac2..5360561a8 100644 --- a/main/songs.c +++ b/main/songs.c @@ -446,7 +446,9 @@ int songs_play_level_song( int levelnum, int offset ) #ifdef USE_SDLMIXER case MUSIC_TYPE_CUSTOM: { - if (!offset) + if (GameCfg.CMLevelMusicPlayOrder == MUSIC_CM_PLAYORDER_RAND) + GameCfg.CMLevelMusicTrack[0] = d_rand() % GameCfg.CMLevelMusicTrack[1]; // simply a random selection - no check if this song has already been played. But that's how I roll! + else if (!offset) { if (GameCfg.CMLevelMusicPlayOrder == MUSIC_CM_PLAYORDER_CONT) {