stop dying on corrupt ksfs
This commit is contained in:
@@ -102,7 +102,12 @@ bool KSFLoader::LoadFromKSFFile( const CString &sPath, Notes &out )
|
|||||||
if( sRowString == "2222222222222" )
|
if( sRowString == "2222222222222" )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
ASSERT( sRowString.GetLength() == 13 ); // why 13 notes per row. Beats me!
|
if(sRowString.size() != 13)
|
||||||
|
{
|
||||||
|
LOG->Warn("File %s had a RowString with an improper length (\"%s\"); corrupt notes ignored",
|
||||||
|
sPath.GetString(), sRowString.GetString());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// the length of a note in a row depends on TICKCOUNT
|
// the length of a note in a row depends on TICKCOUNT
|
||||||
float fBeatThisRow = r/(float)iTickCount;
|
float fBeatThisRow = r/(float)iTickCount;
|
||||||
@@ -158,6 +163,7 @@ bool KSFLoader::LoadFromDir( CString sDir, Song &out )
|
|||||||
CStringArray arrayKSFFileNames;
|
CStringArray arrayKSFFileNames;
|
||||||
GetDirListing( sDir + CString("*.ksf"), arrayKSFFileNames );
|
GetDirListing( sDir + CString("*.ksf"), arrayKSFFileNames );
|
||||||
|
|
||||||
|
/* We shouldn't have been called to begin with if there were no KSFs. */
|
||||||
if( arrayKSFFileNames.empty() )
|
if( arrayKSFFileNames.empty() )
|
||||||
RageException::Throw( "Couldn't find any KSF files in '%s'", sDir.GetString() );
|
RageException::Throw( "Couldn't find any KSF files in '%s'", sDir.GetString() );
|
||||||
|
|
||||||
@@ -166,12 +172,19 @@ bool KSFLoader::LoadFromDir( CString sDir, Song &out )
|
|||||||
for( i=0; i<arrayKSFFileNames.size(); i++ )
|
for( i=0; i<arrayKSFFileNames.size(); i++ )
|
||||||
{
|
{
|
||||||
Notes* pNewNotes = new Notes;
|
Notes* pNewNotes = new Notes;
|
||||||
LoadFromKSFFile( out.GetSongDir() + arrayKSFFileNames[i], *pNewNotes );
|
if(LoadFromKSFFile( out.GetSongDir() + arrayKSFFileNames[i], *pNewNotes ))
|
||||||
|
{
|
||||||
|
delete pNewNotes;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
out.m_apNotes.push_back( pNewNotes );
|
out.m_apNotes.push_back( pNewNotes );
|
||||||
}
|
}
|
||||||
|
|
||||||
CString sPath = out.GetSongDir() + arrayKSFFileNames[0];
|
CString sPath = out.GetSongDir() + arrayKSFFileNames[0];
|
||||||
|
|
||||||
|
/* XXX: We might have some corrupt KSF's; it'd be better to read global
|
||||||
|
* stuff from the first successful one above. */
|
||||||
MsdFile msd;
|
MsdFile msd;
|
||||||
bool bResult = msd.ReadFile( sPath );
|
bool bResult = msd.ReadFile( sPath );
|
||||||
if( !bResult )
|
if( !bResult )
|
||||||
|
|||||||
Reference in New Issue
Block a user