diff --git a/sc2/src/sc2code/melee.c b/sc2/src/sc2code/melee.c index b5da6f7ad..82af18813 100644 --- a/sc2/src/sc2code/melee.c +++ b/sc2/src/sc2code/melee.c @@ -1536,6 +1536,12 @@ FreeMeleeInfo (PMELEE_STATE pMS) DestroyDirEntryTable (ReleaseDirEntryTable (pMS->TeamDE)); pMS->TeamDE = 0; + if (pMS->hMusic) + { + DestroyMusic (pMS->hMusic); + pMS->hMusic = 0; + } + UninitSpace (); DestroyDrawable (ReleaseDrawable (MeleeFrame)); @@ -1650,8 +1656,17 @@ DoMelee (PMELEE_STATE pMS) SetMenuSounds (MENU_SOUND_ARROWS, MENU_SOUND_SELECT); if (!pMS->Initialized) { + if (pMS->hMusic) + { + StopMusic (); + DestroyMusic (pMS->hMusic); + pMS->hMusic = 0; + } + pMS->hMusic = LoadMusicFile ("melee/melemenu.ogg"); pMS->Initialized = TRUE; + pMS->MeleeOption = START_MELEE; + PlayMusic (pMS->hMusic, TRUE, 1); LockMutex (GraphicsLock); InitMelee (pMS); UnlockMutex (GraphicsLock); @@ -1739,11 +1754,20 @@ DoMelee (PMELEE_STATE pMS) { BYTE black_buf[] = {FadeAllToBlack}; + FadeMusic (0, ONE_SECOND / 2); SleepThreadUntil (XFormColorMap ( (COLORMAPPTR)black_buf, ONE_SECOND / 2 ) + ONE_SECOND / 60); FlushColorXForms (); + StopMusic (); } + FadeMusic (NORMAL_VOLUME, 0); + if (pMS->hMusic) + { + DestroyMusic (pMS->hMusic); + pMS->hMusic = 0; + } + do { LockMutex (GraphicsLock); @@ -1757,7 +1781,8 @@ DoMelee (PMELEE_STATE pMS) Battle (); free_gravity_well (); - if (GLOBAL (CurrentActivity) & CHECK_ABORT) return (FALSE); + if (GLOBAL (CurrentActivity) & CHECK_ABORT) + return (FALSE); { BYTE black_buf[] = {FadeAllToBlack}; @@ -2121,6 +2146,7 @@ Melee (void) SetMenuSounds (MENU_SOUND_ARROWS, MENU_SOUND_SELECT); DoInput ((PVOID)&MenuState, TRUE); + StopMusic (); WaitForSoundEnd (TFBSOUND_WAIT_ALL); { diff --git a/sc2/src/sc2code/melee.h b/sc2/src/sc2code/melee.h index 14b267041..692275090 100644 --- a/sc2/src/sc2code/melee.h +++ b/sc2/src/sc2code/melee.h @@ -22,6 +22,7 @@ #include "init.h" #include "libs/tasklib.h" #include "libs/gfxlib.h" +#include "libs/sndlib.h" #include "libs/reslib.h" @@ -97,6 +98,8 @@ typedef struct melee_state Task flash_task; TEAM_IMAGE FileList[MAX_VIS_TEAMS]; TEAM_IMAGE PreBuiltList[NUM_PREBUILT]; + + MUSIC_REF hMusic; } MELEE_STATE; typedef MELEE_STATE *PMELEE_STATE; diff --git a/sc2/src/sc2code/restart.c b/sc2/src/sc2code/restart.c index d4a1471dc..1c1e02aa5 100644 --- a/sc2/src/sc2code/restart.c +++ b/sc2/src/sc2code/restart.c @@ -121,11 +121,23 @@ DWORD InTime; static BOOLEAN DoRestart (PMENU_STATE pMS) { + static DWORD InactTimeOut; + /* Cancel any presses of the Pause key. */ GamePaused = FALSE; if (!pMS->Initialized) { + if (pMS->hMusic) + { + StopMusic (); + DestroyMusic (pMS->hMusic); + pMS->hMusic = 0; + } + pMS->hMusic = LoadMusicFile ("lbm/mainmenu.ogg"); + InactTimeOut = (pMS->hMusic ? 120 : 20) * ONE_SECOND; + + PlayMusic (pMS->hMusic, TRUE, 1); DrawRestartMenu ((BYTE)~0, pMS->CurState, pMS->CurFrame); pMS->Initialized = TRUE; @@ -152,9 +164,13 @@ else if (InputState & DEVICE_EXIT) return (FALSE); PulsedInputState.key[KEY_MENU_SELECT])) { - if (GetTimeCounter () - InTime < ONE_SECOND * 15) + if (GetTimeCounter () - InTime < InactTimeOut) return (TRUE); + SleepThreadUntil (FadeMusic (0, ONE_SECOND)); + StopMusic (); + FadeMusic (NORMAL_VOLUME, 0); + GLOBAL (CurrentActivity) = (ACTIVITY)~0; return (FALSE); } @@ -319,6 +335,13 @@ LastActivity = WON_LAST_BATTLE; SetMenuSounds (MENU_SOUND_UP | MENU_SOUND_DOWN, MENU_SOUND_SELECT); DoInput ((PVOID)&MenuState, TRUE); + StopMusic (); + if (MenuState.hMusic) + { + DestroyMusic (MenuState.hMusic); + MenuState.hMusic = 0; + } + LockMutex (GraphicsLock); SetFlashRect ((PRECT)0, (FRAME)0); UnlockMutex (GraphicsLock);