From edcfb9a99092dce74a169e063101e1e927c80d92 Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Tue, 27 Mar 2007 01:18:45 +0000 Subject: [PATCH] Calculate stage based on the player with the highest current stage index. --- stepmania/src/GameState.cpp | 26 ++++++++++++++------------ stepmania/src/GameState.h | 2 +- stepmania/src/LifeMeterBar.cpp | 2 +- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/stepmania/src/GameState.cpp b/stepmania/src/GameState.cpp index 1fb86c203b..dbb9a0bc27 100644 --- a/stepmania/src/GameState.cpp +++ b/stepmania/src/GameState.cpp @@ -835,12 +835,12 @@ float GameState::GetSongPercent( float beat ) const return (beat - m_pCurSong->m_fFirstBeat) / m_pCurSong->m_fLastBeat; } -int GameState::GetSmallestCurrentStageIndexForAnyHumanPlayer() const +int GameState::GetLargestCurrentStageIndexForAnyHumanPlayer() const { - int iSmallest = INT_MAX; + int iLargest = INT_MIN; FOREACH_HumanPlayer( p ) - iSmallest = min( iSmallest, m_iPlayerCurrentStageIndexForCurrentCredit[p] ); - return iSmallest; + iLargest = max( iLargest, m_iPlayerCurrentStageIndexForCurrentCredit[p] ); + return iLargest; } int GameState::GetNumStagesLeft( PlayerNumber pn ) const @@ -884,22 +884,22 @@ bool GameState::IsFinalStage() const int iPredictedStageForCurSong = GetNumStagesForCurrentSongAndStepsOrCourse(); if( iPredictedStageForCurSong == -1 ) iPredictedStageForCurSong = 1; - return GetSmallestCurrentStageIndexForAnyHumanPlayer() + iPredictedStageForCurSong == PREFSMAN->m_iSongsPerPlay; + return GetLargestCurrentStageIndexForAnyHumanPlayer() + iPredictedStageForCurSong == PREFSMAN->m_iSongsPerPlay; } bool GameState::IsAnExtraStage() const { - return !IsEventMode() && !IsCourseMode() && GetSmallestCurrentStageIndexForAnyHumanPlayer() >= PREFSMAN->m_iSongsPerPlay; + return !IsEventMode() && !IsCourseMode() && GetLargestCurrentStageIndexForAnyHumanPlayer() >= PREFSMAN->m_iSongsPerPlay; } bool GameState::IsExtraStage() const { - return !IsEventMode() && !IsCourseMode() && GetSmallestCurrentStageIndexForAnyHumanPlayer() == PREFSMAN->m_iSongsPerPlay; + return !IsEventMode() && !IsCourseMode() && GetLargestCurrentStageIndexForAnyHumanPlayer() == PREFSMAN->m_iSongsPerPlay; } bool GameState::IsExtraStage2() const { - return !IsEventMode() && !IsCourseMode() && GetSmallestCurrentStageIndexForAnyHumanPlayer() == PREFSMAN->m_iSongsPerPlay+1; + return !IsEventMode() && !IsCourseMode() && GetLargestCurrentStageIndexForAnyHumanPlayer() == PREFSMAN->m_iSongsPerPlay+1; } Stage GameState::GetCurrentStage() const @@ -913,7 +913,7 @@ Stage GameState::GetCurrentStage() const else if( IsFinalStage() ) return STAGE_FINAL; else if( IsExtraStage() ) return STAGE_EXTRA1; else if( IsExtraStage2() ) return STAGE_EXTRA2; - else return (Stage)(STAGE_1+GetSmallestCurrentStageIndexForAnyHumanPlayer()); + else return (Stage)(STAGE_1+GetLargestCurrentStageIndexForAnyHumanPlayer()); } // Return true if it's possible for GetCurrentStage() to return the given stage. @@ -1382,18 +1382,20 @@ SongOptions::FailType GameState::GetPlayerFailType( const PlayerState *pPlayerSt if( m_pCurSteps[pn] ) dc = m_pCurSteps[pn]->GetDifficulty(); - bool bFirstStage = !IsEventMode() && GetSmallestCurrentStageIndexForAnyHumanPlayer() == 0; + bool bFirstStageForAny = !IsEventMode(); + FOREACH_HumanPlayer( p ) + bFirstStageForAny |= m_iPlayerCurrentStageIndexForCurrentCredit[p] == 0; /* Easy and beginner are never harder than FAIL_IMMEDIATE_CONTINUE. */ if( dc <= Difficulty_Easy ) setmax( ft, SongOptions::FAIL_IMMEDIATE_CONTINUE ); - if( dc <= Difficulty_Easy && bFirstStage && PREFSMAN->m_bFailOffForFirstStageEasy ) + if( dc <= Difficulty_Easy && bFirstStageForAny && PREFSMAN->m_bFailOffForFirstStageEasy ) setmax( ft, SongOptions::FAIL_OFF ); /* If beginner's steps were chosen, and this is the first stage, * turn off failure completely. */ - if( dc == Difficulty_Beginner && bFirstStage ) + if( dc == Difficulty_Beginner && bFirstStageForAny ) setmax( ft, SongOptions::FAIL_OFF ); if( dc == Difficulty_Beginner && PREFSMAN->m_bFailOffInBeginner ) diff --git a/stepmania/src/GameState.h b/stepmania/src/GameState.h index 421caceaf7..dd11228050 100644 --- a/stepmania/src/GameState.h +++ b/stepmania/src/GameState.h @@ -130,7 +130,7 @@ public: void CancelStage(); void CommitStageStats(); void FinishStage(); - int GetSmallestCurrentStageIndexForAnyHumanPlayer() const; + int GetLargestCurrentStageIndexForAnyHumanPlayer() const; int GetNumStagesLeft( PlayerNumber pn ) const; int GetSmallestNumStagesLeftForAnyHumanPlayer() const; int GetLargestNumStagesLeftForAnyHumanPlayer() const; diff --git a/stepmania/src/LifeMeterBar.cpp b/stepmania/src/LifeMeterBar.cpp index 46d1d748cd..86f8d0d616 100644 --- a/stepmania/src/LifeMeterBar.cpp +++ b/stepmania/src/LifeMeterBar.cpp @@ -304,7 +304,7 @@ void LifeMeterBar::UpdateNonstopLifebar() if( GAMESTATE->IsEventMode() || GAMESTATE->m_bDemonstrationOrJukebox ) return; - iCleared = GAMESTATE->GetSmallestCurrentStageIndexForAnyHumanPlayer(); + iCleared = GAMESTATE->GetLargestCurrentStageIndexForAnyHumanPlayer(); iTotal = PREFSMAN->m_iSongsPerPlay; iProgressiveLifebarDifficulty = PREFSMAN->m_iProgressiveStageLifebar; break;