This commit is contained in:
Glenn Maynard
2006-08-17 02:49:54 +00:00
parent 162cdc13fa
commit fb655a8b32
+52 -62
View File
@@ -707,76 +707,66 @@ void ScreenSelectMusic::MenuStart( PlayerNumber pn )
return;
// a song was selected
switch( m_MusicWheel.GetSelectedType() )
if( m_MusicWheel.GetSelectedSong() != NULL )
{
case TYPE_SONG:
case TYPE_PORTAL:
const bool bIsNew = PROFILEMAN->IsSongNew( m_MusicWheel.GetSelectedSong() );
bool bIsHard = false;
FOREACH_HumanPlayer( p )
{
const bool bIsNew = PROFILEMAN->IsSongNew( m_MusicWheel.GetSelectedSong() );
bool bIsHard = false;
FOREACH_HumanPlayer( p )
{
if( GAMESTATE->m_pCurSteps[p] && GAMESTATE->m_pCurSteps[p]->GetMeter() >= 10 )
bIsHard = true;
}
/* See if this song is a repeat. If we're in event mode, only check the last five songs. */
bool bIsRepeat = false;
int i = 0;
if( GAMESTATE->IsEventMode() )
i = max( 0, int(STATSMAN->m_vPlayedStageStats.size())-5 );
for( ; i < (int)STATSMAN->m_vPlayedStageStats.size(); ++i )
if( STATSMAN->m_vPlayedStageStats[i].vpPlayedSongs.back() == m_MusicWheel.GetSelectedSong() )
bIsRepeat = true;
/* Don't complain about repeats if the user didn't get to pick. */
if( GAMESTATE->IsExtraStage() && !PREFSMAN->m_bPickExtraStage )
bIsRepeat = false;
if( bIsRepeat )
SOUND->PlayOnceFromAnnouncer( "select music comment repeat" );
else if( bIsNew )
SOUND->PlayOnceFromAnnouncer( "select music comment new" );
else if( bIsHard )
SOUND->PlayOnceFromAnnouncer( "select music comment hard" );
else
SOUND->PlayOnceFromAnnouncer( "select music comment general" );
m_bMadeChoice = true;
/* If we're in event mode, we may have just played a course (putting us
* in course mode). Make sure we're in a single song mode. */
if( GAMESTATE->IsCourseMode() )
GAMESTATE->m_PlayMode.Set( PLAY_MODE_REGULAR );
if( GAMESTATE->m_pCurSteps[p] && GAMESTATE->m_pCurSteps[p]->GetMeter() >= 10 )
bIsHard = true;
}
break;
case TYPE_COURSE:
/* See if this song is a repeat. If we're in event mode, only check the last five songs. */
bool bIsRepeat = false;
int i = 0;
if( GAMESTATE->IsEventMode() )
i = max( 0, int(STATSMAN->m_vPlayedStageStats.size())-5 );
for( ; i < (int)STATSMAN->m_vPlayedStageStats.size(); ++i )
if( STATSMAN->m_vPlayedStageStats[i].vpPlayedSongs.back() == m_MusicWheel.GetSelectedSong() )
bIsRepeat = true;
/* Don't complain about repeats if the user didn't get to pick. */
if( GAMESTATE->IsExtraStage() && !PREFSMAN->m_bPickExtraStage )
bIsRepeat = false;
if( bIsRepeat )
SOUND->PlayOnceFromAnnouncer( "select music comment repeat" );
else if( bIsNew )
SOUND->PlayOnceFromAnnouncer( "select music comment new" );
else if( bIsHard )
SOUND->PlayOnceFromAnnouncer( "select music comment hard" );
else
SOUND->PlayOnceFromAnnouncer( "select music comment general" );
m_bMadeChoice = true;
/* If we're in event mode, we may have just played a course (putting us
* in course mode). Make sure we're in a single song mode. */
if( GAMESTATE->IsCourseMode() )
GAMESTATE->m_PlayMode.Set( PLAY_MODE_REGULAR );
}
else if( m_MusicWheel.GetSelectedCourse() != NULL )
{
SOUND->PlayOnceFromAnnouncer( "select course comment general" );
Course *pCourse = m_MusicWheel.GetSelectedCourse();
ASSERT( pCourse );
GAMESTATE->m_PlayMode.Set( pCourse->GetPlayMode() );
// apply #LIVES
if( pCourse->m_iLives != -1 )
{
SOUND->PlayOnceFromAnnouncer( "select course comment general" );
Course *pCourse = m_MusicWheel.GetSelectedCourse();
ASSERT( pCourse );
GAMESTATE->m_PlayMode.Set( pCourse->GetPlayMode() );
// apply #LIVES
if( pCourse->m_iLives != -1 )
{
SO_GROUP_ASSIGN( GAMESTATE->m_SongOptions, ModsLevel_Stage, m_LifeType, SongOptions::LIFE_BATTERY );
SO_GROUP_ASSIGN( GAMESTATE->m_SongOptions, ModsLevel_Stage, m_iBatteryLives, pCourse->m_iLives );
}
m_bMadeChoice = true;
SO_GROUP_ASSIGN( GAMESTATE->m_SongOptions, ModsLevel_Stage, m_LifeType, SongOptions::LIFE_BATTERY );
SO_GROUP_ASSIGN( GAMESTATE->m_SongOptions, ModsLevel_Stage, m_iBatteryLives, pCourse->m_iLives );
}
break;
case TYPE_SECTION:
case TYPE_ROULETTE:
case TYPE_RANDOM:
case TYPE_SORT:
m_bMadeChoice = true;
}
else
{
/* We havn't made a selection yet. */
return;
default:
ASSERT(0);
}
SCREENMAN->PlayStartSound();