diff --git a/stepmania/src/Steps.cpp b/stepmania/src/Steps.cpp index 9214cdf1a3..d4cfad4dc7 100644 --- a/stepmania/src/Steps.cpp +++ b/stepmania/src/Steps.cpp @@ -159,18 +159,19 @@ void Steps::Decompress() const parent->GetNoteData(&pdata); notes = new NoteData; - // MD 10/29/03 - add track-combining logic + int iNewTracks = GameManager::NotesTypeToNumTracks(m_StepsType); - // ...if we don't set it to SOMETHING, we get no steps. - // This breaks autogen dead. :-> - notes->SetNumTracks( pdata.GetNumTracks() ); - notes->CopyRange( &pdata, 0, pdata.GetLastRow(), 0 ); + if( pdata.GetNumTracks() > iNewTracks) { - int iOriginalTracks = pdata.GetNumTracks(); - int iUnevenTracks = iOriginalTracks % iNewTracks; - int iTracksToOverlap = iOriginalTracks / iNewTracks; - if( iTracksToOverlap ) { + notes->SetNumTracks( pdata.GetNumTracks() ); + notes->CopyRange( &pdata, 0, pdata.GetLastRow(), 0 ); + + const int iOriginalTracks = pdata.GetNumTracks(); + const bool iUnevenTracks = (iOriginalTracks % iNewTracks) != 0; + const int iTracksToOverlap = iOriginalTracks / iNewTracks; + if( iTracksToOverlap ) + { // if we have at least as many tracks in the old mode // as we do in the mode we're going to for (int ix = 0; ix < iNewTracks; ix++) @@ -180,20 +181,19 @@ void Steps::Decompress() const notes->CombineTracks(ix, (ix + iy * iNewTracks)); } } - if( iUnevenTracks ) { - for (int ix = iOriginalTracks - iUnevenTracks; - ix < iOriginalTracks; - ix++) - { - // spread out the remaining tracks evenly - notes->CombineTracks((ix * iOriginalTracks) % iNewTracks, ix); - } + if( iUnevenTracks ) + { + for (int ix = iOriginalTracks - iUnevenTracks; ix < iOriginalTracks; ix++) + { + // spread out the remaining tracks evenly + notes->CombineTracks((ix * iOriginalTracks) % iNewTracks, ix); + } } } + notes->SetNumTracks( iNewTracks ); } else notes->LoadTransformedSlidingWindow( &pdata, iNewTracks ); - notes->SetNumTracks( GameManager::NotesTypeToNumTracks(m_StepsType) ); - // end MD 10/29/03 + NoteDataUtil::FixImpossibleRows( *notes, m_StepsType ); } else if(!notes_comp)