diff --git a/stepmania/src/GameState.cpp b/stepmania/src/GameState.cpp index 75868e230d..4e8219e93f 100644 --- a/stepmania/src/GameState.cpp +++ b/stepmania/src/GameState.cpp @@ -442,6 +442,11 @@ void GameState::BeginStage() } } +void GameState::CancelStage() +{ + m_iNumStagesOfThisSong = 0; +} + /* Called by ScreenSelectMusic (etc). Increment the stage counter if we just played a * song. Might be called more than once. */ void GameState::FinishStage() diff --git a/stepmania/src/GameState.h b/stepmania/src/GameState.h index e2e5cdc205..0d748e1688 100644 --- a/stepmania/src/GameState.h +++ b/stepmania/src/GameState.h @@ -111,6 +111,7 @@ public: int GetStageIndex() const; void BeginStage(); + void CancelStage(); void FinishStage(); int GetNumStagesLeft() const; bool IsFinalStage() const; diff --git a/stepmania/src/ScreenGameplay.cpp b/stepmania/src/ScreenGameplay.cpp index 9815efd730..ce7ef38b2a 100644 --- a/stepmania/src/ScreenGameplay.cpp +++ b/stepmania/src/ScreenGameplay.cpp @@ -1794,6 +1794,9 @@ void ScreenGameplay::StageFinished() // save current stage stats g_vPlayedStageStats.push_back( g_CurStageStats ); + + /* Reset options. */ + GAMESTATE->RestoreSelectedOptions(); } void ScreenGameplay::HandleScreenMessage( const ScreenMessage SM ) @@ -2114,8 +2117,8 @@ void ScreenGameplay::HandleScreenMessage( const ScreenMessage SM ) SongFinished(); StageFinished(); - /* Reset options. (Should this be done in ScreenSelect*?) */ - GAMESTATE->RestoreSelectedOptions(); + GAMESTATE->CancelStage(); + SCREENMAN->SetNewScreen( PREV_SCREEN(GAMESTATE->m_PlayMode) ); break; @@ -2123,9 +2126,6 @@ void ScreenGameplay::HandleScreenMessage( const ScreenMessage SM ) SongFinished(); StageFinished(); - /* Reset options. (Should this be done in ScreenSelect*?) */ - GAMESTATE->RestoreSelectedOptions(); - if( m_bChangedOffsetOrBPM ) { m_bChangedOffsetOrBPM = false; @@ -2178,9 +2178,6 @@ void ScreenGameplay::HandleScreenMessage( const ScreenMessage SM ) SongFinished(); StageFinished(); - /* Reset options. (Should this be done in ScreenSelect*?) */ - GAMESTATE->RestoreSelectedOptions(); - if( m_bChangedOffsetOrBPM ) { m_bChangedOffsetOrBPM = false; @@ -2201,7 +2198,10 @@ void ScreenGameplay::HandleScreenMessage( const ScreenMessage SM ) } else // the theme says just fail and go back to the song select for event mode { - HandleScreenMessage( SM_GoToScreenAfterBack ); + SCREENMAN->SetNewScreen( PREV_SCREEN(GAMESTATE->m_PlayMode) ); + + /* Don't do this; it'll call SongFinished, etc. again. -glenn */ +// HandleScreenMessage( SM_GoToScreenAfterBack ); } } else if( GAMESTATE->IsExtraStage() || GAMESTATE->IsExtraStage2() )