diff --git a/stepmania/src/ScreenSelect.cpp b/stepmania/src/ScreenSelect.cpp index 1f4652b6c5..d46be72f94 100644 --- a/stepmania/src/ScreenSelect.cpp +++ b/stepmania/src/ScreenSelect.cpp @@ -176,10 +176,6 @@ void ScreenSelect::HandleScreenMessage( const ScreenMessage SM ) { case SM_AllDoneChoosing: { - for( int p=0; pIsHumanPlayer(p) ) - m_aModeChoices[this->GetSelectionIndex((PlayerNumber)p)].Apply( (PlayerNumber)p ); - GAMESTATE->m_bPlayersCanJoin = false; SCREENMAN->RefreshCreditsMessages(); @@ -200,6 +196,13 @@ void ScreenSelect::HandleScreenMessage( const ScreenMessage SM ) break; case SM_GoToNextScreen: { + /* Apply here, not in SM_AllDoneChoosing, because applying can take a very + * long time (200+ms), and at SM_AllDoneChoosing, we're still tweening stuff + * off-screen. */ + for( int p=0; pIsHumanPlayer(p) ) + m_aModeChoices[this->GetSelectionIndex((PlayerNumber)p)].Apply( (PlayerNumber)p ); + int iSelectionIndex = GetSelectionIndex(GAMESTATE->m_MasterPlayerNumber); SCREENMAN->SetNewScreen( NEXT_SCREEN(iSelectionIndex) ); }