diff -Naur SDL_mixer_untouched/music.c SDL_mixer/music.c --- SDL_mixer_untouched/music.c 2012-07-26 14:30:14.000000000 -0700 +++ SDL_mixer/music.c 2012-07-26 14:28:13.000000000 -0700 @@ -910,7 +910,7 @@ #endif #ifdef MOD_MUSIC case MUS_MOD: - MOD_play(music->data.module); + MOD_play(music->data.module,music_volume); /* Player_SetVolume() does nothing before Player_Start() */ music_internal_initialize_volume(); break; diff -Naur SDL_mixer_untouched/music_mod.c SDL_mixer/music_mod.c --- SDL_mixer_untouched/music_mod.c 2012-07-26 14:30:14.000000000 -0700 +++ SDL_mixer/music_mod.c 2012-07-26 14:28:13.000000000 -0700 @@ -224,13 +225,9 @@ /* Stop implicit looping, fade out and other flags. */ module->extspd = 1; module->panflag = 1; - module->wrap = 0; - module->loop = 0; -#if 0 /* Don't set fade out by default - unfortunately there's no real way -to query the status of the song or set trigger actions. Hum. */ - module->fadeout = 1; -#endif - + module->wrap = 1; + module->loop = 1; + module->fadeout = 0; if ( freerw ) { SDL_RWclose(rw); } @@ -238,8 +235,9 @@ } /* Start playback of a given MOD stream */ -void MOD_play(MODULE *music) +void MOD_play(MODULE *music, int volume) { + music->initvolume = volume; mikmod.Player_Start(music); } diff -Naur SDL_mixer_untouched/music_mod.h SDL_mixer/music_mod.h --- SDL_mixer_untouched/music_mod.h 2012-07-26 14:30:14.000000000 -0700 +++ SDL_mixer/music_mod.h 2012-07-26 14:28:14.000000000 -0700 @@ -42,7 +42,7 @@ extern struct MODULE *MOD_new_RW(SDL_RWops *rw, int freerw); /* Start playback of a given MOD stream */ -extern void MOD_play(struct MODULE *music); +extern void MOD_play(struct MODULE *music, int volume); /* Return non-zero if a stream is currently playing */ extern int MOD_playing(struct MODULE *music);