From 987d10baec9b277157b50f36594da3699b566f58 Mon Sep 17 00:00:00 2001 From: Andrew Livy Date: Thu, 21 Aug 2003 19:39:41 +0000 Subject: [PATCH] Added support for Two BUNKI's and BPM changes in the KSF file format (e.g. Beat Of The War on PIU has 2 bpm changes). --- stepmania/src/NotesLoaderKSF.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/stepmania/src/NotesLoaderKSF.cpp b/stepmania/src/NotesLoaderKSF.cpp index 76fe1e086f..26207e681c 100644 --- a/stepmania/src/NotesLoaderKSF.cpp +++ b/stepmania/src/NotesLoaderKSF.cpp @@ -265,7 +265,7 @@ bool KSFLoader::LoadGlobalData( const CString &sPath, Song &out ) if( !bResult ) RageException::Throw( "Error opening file '%s'.", sPath.c_str() ); - float BPMPos2 = -1, BPM2 = -1; + float BPMPos2 = -1, BPM2 = -1, BPMPos3 = -1, BPM3 = -1;; for( unsigned i=0; i < msd.GetNumValues(); i++ ) { @@ -279,8 +279,12 @@ bool KSFLoader::LoadGlobalData( const CString &sPath, Song &out ) out.AddBPMSegment( BPMSegment(0, (float)atof(sParams[1])) ); else if( 0==stricmp(sValueName,"BPM2") ) BPM2 = float(atof(sParams[1])); + else if( 0==stricmp(sValueName,"BPM3") ) + BPM3 = float(atof(sParams[1])); else if( 0==stricmp(sValueName,"BUNKI") ) BPMPos2 = float(atof(sParams[1])) / 100.0f; + else if( 0==stricmp(sValueName,"BUNKI2") ) + BPMPos3 = float(atof(sParams[1])) / 100.0f; else if( 0==stricmp(sValueName,"STARTTIME") ) out.m_fBeat0OffsetInSeconds = -(float)atof(sParams[1])/100; else if( 0==stricmp(sValueName,"TICKCOUNT") || @@ -302,6 +306,15 @@ bool KSFLoader::LoadGlobalData( const CString &sPath, Song &out ) out.AddBPMSegment( BPMSegment(beat, BPM2) ); } + if( BPM3 > 0 && BPMPos3 > 0 ) + { + const float BeatsPerSecond = out.GetBPMAtBeat(0) / 60.0f; + const float beat = BPMPos3 * BeatsPerSecond; + LOG->Trace("BPM %f, BPS %f, BPMPos3 %f, beat %f", + out.GetBPMAtBeat(0), BeatsPerSecond, BPMPos3, beat); + out.AddBPMSegment( BPMSegment(beat, BPM3) ); + } + /* Try to fill in missing bits of information from the pathname. */ { CStringArray asBits;