diff --git a/src/GameSoundManager.cpp b/src/GameSoundManager.cpp index e19cd42bd6..60ba11316b 100644 --- a/src/GameSoundManager.cpp +++ b/src/GameSoundManager.cpp @@ -7,6 +7,7 @@ #include "GameState.h" #include "TimingData.h" #include "NotesLoaderSSC.h" +#include "NotesLoaderSM.h" #include "PrefsManager.h" #include "RageDisplay.h" #include "AnnouncerManager.h" @@ -150,6 +151,15 @@ static void StartMusic( MusicToPlay &ToPlay ) if( pStepsCabinetLights ) pStepsCabinetLights->GetNoteData( ToPlay.m_LightsData ); } + else if( SMLoader::LoadFromSMFile(ToPlay.m_sTimingFile, song) ) + { + ToPlay.HasTiming = true; + ToPlay.m_TimingData = song.m_Timing; + // get cabinet lights if any + Steps *pStepsCabinetLights = SongUtil::GetOneSteps( &song, StepsType_lights_cabinet ); + if( pStepsCabinetLights ) + pStepsCabinetLights->GetNoteData( ToPlay.m_LightsData ); + } } if( ToPlay.HasTiming ) @@ -704,6 +714,7 @@ void GameSoundManager::PlayMusic( PlayMusicParams params, PlayMusicParams Fallba else { /* If no timing data was provided, look for it in the same place as the music file. */ + // todo: allow loading .ssc files as well -aj ToPlay.m_sTimingFile = SetExtension( params.sFile, "sm" ); } diff --git a/src/Song.cpp b/src/Song.cpp index 74da16a269..ecc196e7a1 100644 --- a/src/Song.cpp +++ b/src/Song.cpp @@ -223,8 +223,15 @@ bool Song::LoadFromSongDir( RString sDir ) if( bUseCache ) { // LOG->Trace( "Loading '%s' from cache file '%s'.", m_sSongDir.c_str(), GetCacheFilePath().c_str() ); - SSCLoader::LoadFromSSCFile( sCacheFilePath, *this, true ); - SSCLoader::TidyUpData( *this, true ); + bool bLoadedFromSSC = SSCLoader::LoadFromSSCFile( sCacheFilePath, *this, true ); + if( bLoadedFromSSC ) + SSCLoader::TidyUpData( *this, true ); + else + { + // load from .sm + SMLoader::LoadFromSMFile( sCacheFilePath, *this, true ); + SMLoader::TidyUpData( *this, true ); + } } else { diff --git a/src/Steps.cpp b/src/Steps.cpp index fb17405c61..699f794d15 100644 --- a/src/Steps.cpp +++ b/src/Steps.cpp @@ -21,6 +21,7 @@ #include "GameManager.h" #include "NoteDataUtil.h" #include "NotesLoaderSSC.h" +#include "NotesLoaderSM.h" #include @@ -229,12 +230,17 @@ void Steps::Decompress() const if( !m_sFilename.empty() && m_sNoteDataCompressed.empty() ) { - /* We have data on disk and not in memory. Load it. */ + // We have data on disk and not in memory. Load it. Song s; - if( !SSCLoader::LoadFromSSCFile(m_sFilename, s, true) ) + bool bLoadedFromSSC = SSCLoader::LoadFromSSCFile(m_sFilename, s, true); + if( !bLoadedFromSSC ) { - LOG->Warn( "Couldn't load \"%s\"", m_sFilename.c_str() ); - return; + // try reading from .sm instead + if( !SMLoader::LoadFromSMFile(m_sFilename, s, true) ) + { + LOG->Warn( "Couldn't load \"%s\"", m_sFilename.c_str() ); + return; + } } /* Find the steps. */