[NotesLoaderBMS] Fix calculating stops, Support for #LNOBJ, Don't use #BACKBMP as song background if main StepsType is beat-*. [hanubeki]
These changes constitute revisions f26caccf103e, 2d114b38c6c9, and b60f021d2b67 of hanubeki-modified-sm-ssc. (http://code.google.com/r/hanubeki-modified-sm-ssc/)
This commit is contained in:
@@ -9,6 +9,13 @@ ________________________________________________________________________________
|
|||||||
StepMania 5.0 alpha 2 | 20120???
|
StepMania 5.0 alpha 2 | 20120???
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
2012/03/02
|
||||||
|
----------
|
||||||
|
* [NotesLoaderBMS] Fix calculating stops, Support for #LNOBJ, Don't use #BACKBMP
|
||||||
|
as song background if main StepsType is beat-*. [hanubeki]
|
||||||
|
These changes constitute revisions f26caccf103e, 2d114b38c6c9, and b60f021d2b67
|
||||||
|
of hanubeki-modified-sm-ssc. (http://code.google.com/r/hanubeki-modified-sm-ssc/)
|
||||||
|
|
||||||
2012/03/01
|
2012/03/01
|
||||||
----------
|
----------
|
||||||
* [MemoryCardManager] Disable Memory Cards by default. If you want to use them,
|
* [MemoryCardManager] Disable Memory Cards by default. If you want to use them,
|
||||||
|
|||||||
+59
-10
@@ -359,6 +359,7 @@ struct BMSChartInfo {
|
|||||||
RString genre;
|
RString genre;
|
||||||
|
|
||||||
RString backgroundFile;
|
RString backgroundFile;
|
||||||
|
RString stageFile;
|
||||||
RString musicFile;
|
RString musicFile;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -434,8 +435,15 @@ void BMSChartReader::ReadHeaders()
|
|||||||
}
|
}
|
||||||
else if( it->first == "#backbmp" )
|
else if( it->first == "#backbmp" )
|
||||||
{
|
{
|
||||||
|
/* XXX: don't use #backbmp if StepsType is beat-*.
|
||||||
|
* incorrectly used in other simulators; see
|
||||||
|
* http://www.geocities.jp/red_without_right_stick/backbmp/ */
|
||||||
info.backgroundFile = it->second;
|
info.backgroundFile = it->second;
|
||||||
}
|
}
|
||||||
|
else if( it->first == "#stagefile" )
|
||||||
|
{
|
||||||
|
info.stageFile = it->second;
|
||||||
|
}
|
||||||
else if( it->first == "#wav" )
|
else if( it->first == "#wav" )
|
||||||
{
|
{
|
||||||
info.musicFile = it->second;
|
info.musicFile = it->second;
|
||||||
@@ -456,7 +464,7 @@ void BMSChartReader::ReadHeaders()
|
|||||||
else if( it->first == "#lnobj" )
|
else if( it->first == "#lnobj" )
|
||||||
{
|
{
|
||||||
lnobj = it->second;
|
lnobj = it->second;
|
||||||
// TODO: support lnobj
|
lnobj.MakeLower();
|
||||||
}
|
}
|
||||||
else if( it->first == "#playlevel" )
|
else if( it->first == "#playlevel" )
|
||||||
{
|
{
|
||||||
@@ -513,26 +521,33 @@ StepsType BMSChartReader::DetermineStepsType()
|
|||||||
if( nonEmptyTracks.find(BMS_RAW_P2_KEY2) != nonEmptyTracks.end() ) return StepsType_popn_five;
|
if( nonEmptyTracks.find(BMS_RAW_P2_KEY2) != nonEmptyTracks.end() ) return StepsType_popn_five;
|
||||||
case 6:
|
case 6:
|
||||||
// FIXME: There's no way to distinguish between these types.
|
// FIXME: There's no way to distinguish between these types.
|
||||||
// They use the same tracks. Assume it's a Beat type since they
|
// They use the same number of tracks. Assume it's a Beat
|
||||||
// are more common.
|
// type, since they are more common.
|
||||||
//return StepsType_dance_solo;
|
//return StepsType_dance_solo;
|
||||||
return StepsType_beat_single5;
|
return StepsType_beat_single5;
|
||||||
case 7:
|
case 7:
|
||||||
case 8: return StepsType_beat_single7;
|
case 8: return StepsType_beat_single7;
|
||||||
case 9: return StepsType_popn_nine;
|
case 9: return StepsType_popn_nine;
|
||||||
default: return StepsType_beat_single7;
|
// XXX: Some double files doesn't have #player.
|
||||||
|
case 12: return StepsType_beat_double5;
|
||||||
|
case 16: return StepsType_beat_double7;
|
||||||
|
default:
|
||||||
|
if( nonEmptyTracksCount > 8 )
|
||||||
|
return StepsType_beat_double7;
|
||||||
|
else
|
||||||
|
return StepsType_beat_single7;
|
||||||
}
|
}
|
||||||
case 2: // couple/battle
|
case 2: // couple/battle
|
||||||
return StepsType_dance_couple;
|
return StepsType_dance_couple;
|
||||||
case 3: // double
|
case 3: // double
|
||||||
switch( nonEmptyTracksCount )
|
switch( nonEmptyTracksCount )
|
||||||
{
|
{
|
||||||
case 8: return StepsType_beat_single7;
|
case 8: return StepsType_dance_double;
|
||||||
case 12: return StepsType_beat_double5;
|
case 12: return StepsType_beat_double5;
|
||||||
case 16: return StepsType_beat_double7;
|
case 16: return StepsType_beat_double7;
|
||||||
case 5: return StepsType_popn_five;
|
case 5: return StepsType_popn_five;
|
||||||
case 9: return StepsType_popn_nine;
|
case 9: return StepsType_popn_nine;
|
||||||
default: return StepsType_beat_double7;
|
default: return StepsType_beat_double7;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
LOG->UserLog( "Song file", in->path, "has an invalid #PLAYER value %d.", player );
|
LOG->UserLog( "Song file", in->path, "has an invalid #PLAYER value %d.", player );
|
||||||
@@ -585,8 +600,10 @@ bool BMSChartReader::ReadNoteData()
|
|||||||
// set up note transformation vector.
|
// set up note transformation vector.
|
||||||
int *transform = new int[tracks];
|
int *transform = new int[tracks];
|
||||||
int *holdStart = new int[tracks];
|
int *holdStart = new int[tracks];
|
||||||
|
int *lastNote = new int[tracks];
|
||||||
|
|
||||||
for( int i = 0; i < tracks; i ++ ) holdStart[i] = -1;
|
for( int i = 0; i < tracks; i ++ ) holdStart[i] = -1;
|
||||||
|
for( int i = 0; i < tracks; i ++ ) lastNote[i] = -1;
|
||||||
|
|
||||||
switch( out->m_StepsType )
|
switch( out->m_StepsType )
|
||||||
{
|
{
|
||||||
@@ -787,7 +804,7 @@ bool BMSChartReader::ReadNoteData()
|
|||||||
BMSHeaders::iterator it = in->headers.find( search );
|
BMSHeaders::iterator it = in->headers.find( search );
|
||||||
if( it != in->headers.end() )
|
if( it != in->headers.end() )
|
||||||
{
|
{
|
||||||
td.SetStopAtRow( row, (StringToFloat(it->second) / 48.0f) * (currentBPM / 60.0f) );
|
td.SetStopAtRow( row, (StringToFloat(it->second) / 48.0f) * (60.0f / currentBPM) );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -805,6 +822,18 @@ bool BMSChartReader::ReadNoteData()
|
|||||||
tn.subType = TapNote::hold_head_hold;
|
tn.subType = TapNote::hold_head_hold;
|
||||||
nd.AddHoldNote( track, holdStart[track], row, tn );
|
nd.AddHoldNote( track, holdStart[track], row, tn );
|
||||||
holdStart[track] = -1;
|
holdStart[track] = -1;
|
||||||
|
lastNote[track] = -1;
|
||||||
|
}
|
||||||
|
else if( obj.value == lnobj && lastNote[track] != -1 )
|
||||||
|
{
|
||||||
|
// this object is the end of the hold note.
|
||||||
|
// lnobj: set last note to hold head.
|
||||||
|
TapNote tn = nd.GetTapNote(track, lastNote[track]);
|
||||||
|
tn.type = TapNote::hold_head;
|
||||||
|
tn.subType = TapNote::hold_head_hold;
|
||||||
|
nd.AddHoldNote( track, lastNote[track], row, tn );
|
||||||
|
holdStart[track] = -1;
|
||||||
|
lastNote[track] = -1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -812,6 +841,7 @@ bool BMSChartReader::ReadNoteData()
|
|||||||
tn.iKeysoundIndex = GetKeysound(obj);
|
tn.iKeysoundIndex = GetKeysound(obj);
|
||||||
nd.SetTapNote( track, row, tn );
|
nd.SetTapNote( track, row, tn );
|
||||||
if( hold ) holdStart[track] = row;
|
if( hold ) holdStart[track] = row;
|
||||||
|
lastNote[track] = row;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if( channel == 1 || (11 <= channel && channel <= 19) || (21 <= channel && channel <= 29) ) // auto-keysound and other notes
|
else if( channel == 1 || (11 <= channel && channel <= 19) || (21 <= channel && channel <= 29) ) // auto-keysound and other notes
|
||||||
@@ -847,6 +877,7 @@ bool BMSChartReader::ReadNoteData()
|
|||||||
|
|
||||||
delete transform;
|
delete transform;
|
||||||
delete holdStart;
|
delete holdStart;
|
||||||
|
delete lastNote;
|
||||||
|
|
||||||
td.TidyUpData();
|
td.TidyUpData();
|
||||||
out->SetNoteData(nd);
|
out->SetNoteData(nd);
|
||||||
@@ -1023,7 +1054,25 @@ void BMSSongLoader::AddToSong()
|
|||||||
NotesLoader::GetMainAndSubTitlesFromFullTitle( main.info.title, out->m_sMainTitle, out->m_sSubTitle );
|
NotesLoader::GetMainAndSubTitlesFromFullTitle( main.info.title, out->m_sMainTitle, out->m_sSubTitle );
|
||||||
out->m_sArtist = main.info.artist;
|
out->m_sArtist = main.info.artist;
|
||||||
out->m_sGenre = main.info.genre;
|
out->m_sGenre = main.info.genre;
|
||||||
out->m_sBackgroundFile = main.info.backgroundFile;
|
|
||||||
|
switch( main.steps->m_StepsType )
|
||||||
|
{
|
||||||
|
case StepsType_beat_single5:
|
||||||
|
case StepsType_beat_single7:
|
||||||
|
case StepsType_beat_double5:
|
||||||
|
case StepsType_beat_double7:
|
||||||
|
case StepsType_beat_versus5:
|
||||||
|
case StepsType_beat_versus7:
|
||||||
|
out->m_sBackgroundFile = main.info.stageFile;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
if ( main.info.backgroundFile != "" )
|
||||||
|
out->m_sBackgroundFile = main.info.backgroundFile;
|
||||||
|
else
|
||||||
|
out->m_sBackgroundFile = main.info.stageFile;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
out->m_sMusicFile = main.info.musicFile;
|
out->m_sMusicFile = main.info.musicFile;
|
||||||
out->m_SongTiming = main.steps->m_Timing;
|
out->m_SongTiming = main.steps->m_Timing;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user