Calculate stage based on the player with the highest current stage index.
This commit is contained in:
+14
-12
@@ -835,12 +835,12 @@ float GameState::GetSongPercent( float beat ) const
|
|||||||
return (beat - m_pCurSong->m_fFirstBeat) / m_pCurSong->m_fLastBeat;
|
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 )
|
FOREACH_HumanPlayer( p )
|
||||||
iSmallest = min( iSmallest, m_iPlayerCurrentStageIndexForCurrentCredit[p] );
|
iLargest = max( iLargest, m_iPlayerCurrentStageIndexForCurrentCredit[p] );
|
||||||
return iSmallest;
|
return iLargest;
|
||||||
}
|
}
|
||||||
|
|
||||||
int GameState::GetNumStagesLeft( PlayerNumber pn ) const
|
int GameState::GetNumStagesLeft( PlayerNumber pn ) const
|
||||||
@@ -884,22 +884,22 @@ bool GameState::IsFinalStage() const
|
|||||||
int iPredictedStageForCurSong = GetNumStagesForCurrentSongAndStepsOrCourse();
|
int iPredictedStageForCurSong = GetNumStagesForCurrentSongAndStepsOrCourse();
|
||||||
if( iPredictedStageForCurSong == -1 )
|
if( iPredictedStageForCurSong == -1 )
|
||||||
iPredictedStageForCurSong = 1;
|
iPredictedStageForCurSong = 1;
|
||||||
return GetSmallestCurrentStageIndexForAnyHumanPlayer() + iPredictedStageForCurSong == PREFSMAN->m_iSongsPerPlay;
|
return GetLargestCurrentStageIndexForAnyHumanPlayer() + iPredictedStageForCurSong == PREFSMAN->m_iSongsPerPlay;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GameState::IsAnExtraStage() const
|
bool GameState::IsAnExtraStage() const
|
||||||
{
|
{
|
||||||
return !IsEventMode() && !IsCourseMode() && GetSmallestCurrentStageIndexForAnyHumanPlayer() >= PREFSMAN->m_iSongsPerPlay;
|
return !IsEventMode() && !IsCourseMode() && GetLargestCurrentStageIndexForAnyHumanPlayer() >= PREFSMAN->m_iSongsPerPlay;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GameState::IsExtraStage() const
|
bool GameState::IsExtraStage() const
|
||||||
{
|
{
|
||||||
return !IsEventMode() && !IsCourseMode() && GetSmallestCurrentStageIndexForAnyHumanPlayer() == PREFSMAN->m_iSongsPerPlay;
|
return !IsEventMode() && !IsCourseMode() && GetLargestCurrentStageIndexForAnyHumanPlayer() == PREFSMAN->m_iSongsPerPlay;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GameState::IsExtraStage2() const
|
bool GameState::IsExtraStage2() const
|
||||||
{
|
{
|
||||||
return !IsEventMode() && !IsCourseMode() && GetSmallestCurrentStageIndexForAnyHumanPlayer() == PREFSMAN->m_iSongsPerPlay+1;
|
return !IsEventMode() && !IsCourseMode() && GetLargestCurrentStageIndexForAnyHumanPlayer() == PREFSMAN->m_iSongsPerPlay+1;
|
||||||
}
|
}
|
||||||
|
|
||||||
Stage GameState::GetCurrentStage() const
|
Stage GameState::GetCurrentStage() const
|
||||||
@@ -913,7 +913,7 @@ Stage GameState::GetCurrentStage() const
|
|||||||
else if( IsFinalStage() ) return STAGE_FINAL;
|
else if( IsFinalStage() ) return STAGE_FINAL;
|
||||||
else if( IsExtraStage() ) return STAGE_EXTRA1;
|
else if( IsExtraStage() ) return STAGE_EXTRA1;
|
||||||
else if( IsExtraStage2() ) return STAGE_EXTRA2;
|
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.
|
// 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] )
|
if( m_pCurSteps[pn] )
|
||||||
dc = m_pCurSteps[pn]->GetDifficulty();
|
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. */
|
/* Easy and beginner are never harder than FAIL_IMMEDIATE_CONTINUE. */
|
||||||
if( dc <= Difficulty_Easy )
|
if( dc <= Difficulty_Easy )
|
||||||
setmax( ft, SongOptions::FAIL_IMMEDIATE_CONTINUE );
|
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 );
|
setmax( ft, SongOptions::FAIL_OFF );
|
||||||
|
|
||||||
/* If beginner's steps were chosen, and this is the first stage,
|
/* If beginner's steps were chosen, and this is the first stage,
|
||||||
* turn off failure completely. */
|
* turn off failure completely. */
|
||||||
if( dc == Difficulty_Beginner && bFirstStage )
|
if( dc == Difficulty_Beginner && bFirstStageForAny )
|
||||||
setmax( ft, SongOptions::FAIL_OFF );
|
setmax( ft, SongOptions::FAIL_OFF );
|
||||||
|
|
||||||
if( dc == Difficulty_Beginner && PREFSMAN->m_bFailOffInBeginner )
|
if( dc == Difficulty_Beginner && PREFSMAN->m_bFailOffInBeginner )
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ public:
|
|||||||
void CancelStage();
|
void CancelStage();
|
||||||
void CommitStageStats();
|
void CommitStageStats();
|
||||||
void FinishStage();
|
void FinishStage();
|
||||||
int GetSmallestCurrentStageIndexForAnyHumanPlayer() const;
|
int GetLargestCurrentStageIndexForAnyHumanPlayer() const;
|
||||||
int GetNumStagesLeft( PlayerNumber pn ) const;
|
int GetNumStagesLeft( PlayerNumber pn ) const;
|
||||||
int GetSmallestNumStagesLeftForAnyHumanPlayer() const;
|
int GetSmallestNumStagesLeftForAnyHumanPlayer() const;
|
||||||
int GetLargestNumStagesLeftForAnyHumanPlayer() const;
|
int GetLargestNumStagesLeftForAnyHumanPlayer() const;
|
||||||
|
|||||||
@@ -304,7 +304,7 @@ void LifeMeterBar::UpdateNonstopLifebar()
|
|||||||
if( GAMESTATE->IsEventMode() || GAMESTATE->m_bDemonstrationOrJukebox )
|
if( GAMESTATE->IsEventMode() || GAMESTATE->m_bDemonstrationOrJukebox )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
iCleared = GAMESTATE->GetSmallestCurrentStageIndexForAnyHumanPlayer();
|
iCleared = GAMESTATE->GetLargestCurrentStageIndexForAnyHumanPlayer();
|
||||||
iTotal = PREFSMAN->m_iSongsPerPlay;
|
iTotal = PREFSMAN->m_iSongsPerPlay;
|
||||||
iProgressiveLifebarDifficulty = PREFSMAN->m_iProgressiveStageLifebar;
|
iProgressiveLifebarDifficulty = PREFSMAN->m_iProgressiveStageLifebar;
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user