fix up DQ; CurStageStats changes didn't interact well with it
This commit is contained in:
@@ -613,10 +613,12 @@ void GameState::BeginStage()
|
|||||||
STATSMAN->m_CurStageStats.m_fMusicRate = m_SongOptions.GetSong().m_fMusicRate;
|
STATSMAN->m_CurStageStats.m_fMusicRate = m_SongOptions.GetSong().m_fMusicRate;
|
||||||
m_iNumStagesOfThisSong = GetNumStagesForCurrentSongAndStepsOrCourse();
|
m_iNumStagesOfThisSong = GetNumStagesForCurrentSongAndStepsOrCourse();
|
||||||
ASSERT( m_iNumStagesOfThisSong != -1 );
|
ASSERT( m_iNumStagesOfThisSong != -1 );
|
||||||
LOG->Trace( "BeginStage: sub %i (%i) (ex %i)",
|
|
||||||
m_iNumStagesOfThisSong, m_iPlayerStageTokens[0], m_iAwardedExtraStages[0] );
|
|
||||||
FOREACH_EnabledPlayer( p )
|
FOREACH_EnabledPlayer( p )
|
||||||
m_iPlayerStageTokens[p] -= m_iNumStagesOfThisSong;
|
m_iPlayerStageTokens[p] -= m_iNumStagesOfThisSong;
|
||||||
|
|
||||||
|
FOREACH_HumanPlayer( pn )
|
||||||
|
if( CurrentOptionsDisqualifyPlayer(pn) )
|
||||||
|
STATSMAN->m_CurStageStats.m_player[pn].m_bDisqualified = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameState::CancelStage()
|
void GameState::CancelStage()
|
||||||
@@ -1231,7 +1233,7 @@ void GameState::ResetOptions()
|
|||||||
m_bDidModeChangeNoteSkin = false;
|
m_bDidModeChangeNoteSkin = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GameState::IsDisqualified( PlayerNumber pn )
|
bool GameState::CurrentOptionsDisqualifyPlayer( PlayerNumber pn )
|
||||||
{
|
{
|
||||||
if( !PREFSMAN->m_bDisqualification )
|
if( !PREFSMAN->m_bDisqualification )
|
||||||
return false;
|
return false;
|
||||||
@@ -1239,14 +1241,6 @@ bool GameState::IsDisqualified( PlayerNumber pn )
|
|||||||
if( !IsHumanPlayer(pn) )
|
if( !IsHumanPlayer(pn) )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if( STATSMAN->m_CurStageStats.m_bGaveUp )
|
|
||||||
return true;
|
|
||||||
|
|
||||||
#ifndef DEBUG
|
|
||||||
if( STATSMAN->m_CurStageStats.m_bUsedAutoplay )
|
|
||||||
return true;
|
|
||||||
#endif //DEBUG
|
|
||||||
|
|
||||||
const PlayerOptions &po = m_pPlayerState[pn]->m_PlayerOptions.GetPreferred();
|
const PlayerOptions &po = m_pPlayerState[pn]->m_PlayerOptions.GetPreferred();
|
||||||
|
|
||||||
// Check the stored player options for disqualify. Don't disqualify because
|
// Check the stored player options for disqualify. Don't disqualify because
|
||||||
@@ -2118,11 +2112,6 @@ public:
|
|||||||
{
|
{
|
||||||
lua_pushboolean(L, p->GetStageResult(PLAYER_1)==RESULT_DRAW); return 1;
|
lua_pushboolean(L, p->GetStageResult(PLAYER_1)==RESULT_DRAW); return 1;
|
||||||
}
|
}
|
||||||
static int IsDisqualified( T* p, lua_State *L )
|
|
||||||
{
|
|
||||||
PlayerNumber pn = Enum::Check<PlayerNumber>(L, 1);
|
|
||||||
lua_pushboolean(L, p->IsDisqualified(pn)); return 1;
|
|
||||||
}
|
|
||||||
static int GetCurrentGame( T* p, lua_State *L ) { const_cast<Game*>(p->GetCurrentGame())->PushSelf( L ); return 1; }
|
static int GetCurrentGame( T* p, lua_State *L ) { const_cast<Game*>(p->GetCurrentGame())->PushSelf( L ); return 1; }
|
||||||
DEFINE_METHOD( GetEditCourseEntryIndex, m_iEditCourseEntryIndex )
|
DEFINE_METHOD( GetEditCourseEntryIndex, m_iEditCourseEntryIndex )
|
||||||
DEFINE_METHOD( GetEditLocalProfileID, m_sEditLocalProfileID.Get() )
|
DEFINE_METHOD( GetEditLocalProfileID, m_sEditLocalProfileID.Get() )
|
||||||
@@ -2272,7 +2261,6 @@ public:
|
|||||||
ADD_METHOD( GetSongOptionsString );
|
ADD_METHOD( GetSongOptionsString );
|
||||||
ADD_METHOD( IsWinner );
|
ADD_METHOD( IsWinner );
|
||||||
ADD_METHOD( IsDraw );
|
ADD_METHOD( IsDraw );
|
||||||
ADD_METHOD( IsDisqualified );
|
|
||||||
ADD_METHOD( GetCurrentGame );
|
ADD_METHOD( GetCurrentGame );
|
||||||
ADD_METHOD( GetEditCourseEntryIndex );
|
ADD_METHOD( GetEditCourseEntryIndex );
|
||||||
ADD_METHOD( GetEditLocalProfileID );
|
ADD_METHOD( GetEditLocalProfileID );
|
||||||
|
|||||||
@@ -225,7 +225,7 @@ public:
|
|||||||
void ApplyStageModifiers( PlayerNumber pn, RString sModifiers );
|
void ApplyStageModifiers( PlayerNumber pn, RString sModifiers );
|
||||||
void ResetOptions();
|
void ResetOptions();
|
||||||
|
|
||||||
bool IsDisqualified( PlayerNumber pn );
|
bool CurrentOptionsDisqualifyPlayer( PlayerNumber pn );
|
||||||
bool PlayerIsUsingModifier( PlayerNumber pn, const RString &sModifier );
|
bool PlayerIsUsingModifier( PlayerNumber pn, const RString &sModifier );
|
||||||
|
|
||||||
SongOptions::FailType GetPlayerFailType( const PlayerState *pPlayerState ) const;
|
SongOptions::FailType GetPlayerFailType( const PlayerState *pPlayerState ) const;
|
||||||
|
|||||||
@@ -58,6 +58,7 @@ void PlayerStageStats::Init()
|
|||||||
m_pcaToShow = PeakComboAward_Invalid;
|
m_pcaToShow = PeakComboAward_Invalid;
|
||||||
m_iPersonalHighScoreIndex = -1;
|
m_iPersonalHighScoreIndex = -1;
|
||||||
m_iMachineHighScoreIndex = -1;
|
m_iMachineHighScoreIndex = -1;
|
||||||
|
m_bDisqualified = false;
|
||||||
m_rc = RankingCategory_Invalid;
|
m_rc = RankingCategory_Invalid;
|
||||||
m_HighScore = HighScore();
|
m_HighScore = HighScore();
|
||||||
}
|
}
|
||||||
@@ -92,6 +93,7 @@ void PlayerStageStats::AddStats( const PlayerStageStats& other )
|
|||||||
m_iSongsPlayed += other.m_iSongsPlayed;
|
m_iSongsPlayed += other.m_iSongsPlayed;
|
||||||
m_fCaloriesBurned += other.m_fCaloriesBurned;
|
m_fCaloriesBurned += other.m_fCaloriesBurned;
|
||||||
m_fLifeRemainingSeconds = other.m_fLifeRemainingSeconds; // don't accumulate
|
m_fLifeRemainingSeconds = other.m_fLifeRemainingSeconds; // don't accumulate
|
||||||
|
m_bDisqualified |= other.m_bDisqualified;
|
||||||
|
|
||||||
const float fOtherFirstSecond = other.m_fFirstSecond + m_fLastSecond;
|
const float fOtherFirstSecond = other.m_fFirstSecond + m_fLastSecond;
|
||||||
const float fOtherLastSecond = other.m_fLastSecond + m_fLastSecond;
|
const float fOtherLastSecond = other.m_fLastSecond + m_fLastSecond;
|
||||||
@@ -563,7 +565,7 @@ void PlayerStageStats::CalcAwards( PlayerNumber p, bool bGaveUp, bool bUsedAutop
|
|||||||
|
|
||||||
// per-difficulty awards
|
// per-difficulty awards
|
||||||
// don't give per-difficutly awards if using easy mods
|
// don't give per-difficutly awards if using easy mods
|
||||||
if( !GAMESTATE->IsDisqualified(p) )
|
if( !IsDisqualified() )
|
||||||
{
|
{
|
||||||
if( FullComboOfScore( TNS_W3 ) )
|
if( FullComboOfScore( TNS_W3 ) )
|
||||||
vPdas.push_back( AWARD_FULL_COMBO_W3 );
|
vPdas.push_back( AWARD_FULL_COMBO_W3 );
|
||||||
@@ -623,6 +625,12 @@ void PlayerStageStats::CalcAwards( PlayerNumber p, bool bGaveUp, bool bUsedAutop
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool PlayerStageStats::IsDisqualified() const
|
||||||
|
{
|
||||||
|
if( !PREFSMAN->m_bDisqualification )
|
||||||
|
return false;
|
||||||
|
return m_bDisqualified;
|
||||||
|
}
|
||||||
|
|
||||||
LuaFunction( GetGradeFromPercent, GetGradeFromPercent( FArg(1), false ) )
|
LuaFunction( GetGradeFromPercent, GetGradeFromPercent( FArg(1), false ) )
|
||||||
|
|
||||||
@@ -654,6 +662,7 @@ public:
|
|||||||
DEFINE_METHOD( GetMachineHighScoreIndex, m_iMachineHighScoreIndex )
|
DEFINE_METHOD( GetMachineHighScoreIndex, m_iMachineHighScoreIndex )
|
||||||
DEFINE_METHOD( GetPerDifficultyAward, m_pdaToShow )
|
DEFINE_METHOD( GetPerDifficultyAward, m_pdaToShow )
|
||||||
DEFINE_METHOD( GetPeakComboAward, m_pcaToShow )
|
DEFINE_METHOD( GetPeakComboAward, m_pcaToShow )
|
||||||
|
DEFINE_METHOD( IsDisqualified, IsDisqualified() )
|
||||||
|
|
||||||
static int GetPlayedSteps( T* p, lua_State *L )
|
static int GetPlayedSteps( T* p, lua_State *L )
|
||||||
{
|
{
|
||||||
@@ -699,6 +708,7 @@ public:
|
|||||||
ADD_METHOD( GetMachineHighScoreIndex );
|
ADD_METHOD( GetMachineHighScoreIndex );
|
||||||
ADD_METHOD( GetPerDifficultyAward );
|
ADD_METHOD( GetPerDifficultyAward );
|
||||||
ADD_METHOD( GetPeakComboAward );
|
ADD_METHOD( GetPeakComboAward );
|
||||||
|
ADD_METHOD( IsDisqualified );
|
||||||
ADD_METHOD( GetPlayedSteps );
|
ADD_METHOD( GetPlayedSteps );
|
||||||
ADD_METHOD( GetPossibleSteps );
|
ADD_METHOD( GetPossibleSteps );
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -109,6 +109,9 @@ public:
|
|||||||
|
|
||||||
int m_iPersonalHighScoreIndex;
|
int m_iPersonalHighScoreIndex;
|
||||||
int m_iMachineHighScoreIndex;
|
int m_iMachineHighScoreIndex;
|
||||||
|
bool m_bDisqualified;
|
||||||
|
bool IsDisqualified() const;
|
||||||
|
|
||||||
RankingCategory m_rc;
|
RankingCategory m_rc;
|
||||||
HighScore m_HighScore;
|
HighScore m_HighScore;
|
||||||
|
|
||||||
|
|||||||
@@ -122,13 +122,13 @@ void ScreenPlayerOptions::UpdateDisqualified( int row, PlayerNumber pn )
|
|||||||
// save original player options
|
// save original player options
|
||||||
PlayerOptions poOrig = GAMESTATE->m_pPlayerState[pn]->m_PlayerOptions.GetPreferred();
|
PlayerOptions poOrig = GAMESTATE->m_pPlayerState[pn]->m_PlayerOptions.GetPreferred();
|
||||||
|
|
||||||
// Find out if the current row when exprorted causes disqualification.
|
// Find out if the current row when exported causes disqualification.
|
||||||
// Exporting the row will fill GAMESTATE->m_PlayerOptions.
|
// Exporting the row will fill GAMESTATE->m_PlayerOptions.
|
||||||
PO_GROUP_CALL( GAMESTATE->m_pPlayerState[pn]->m_PlayerOptions, ModsLevel_Preferred, Init );
|
PO_GROUP_CALL( GAMESTATE->m_pPlayerState[pn]->m_PlayerOptions, ModsLevel_Preferred, Init );
|
||||||
vector<PlayerNumber> v;
|
vector<PlayerNumber> v;
|
||||||
v.push_back( pn );
|
v.push_back( pn );
|
||||||
ExportOptions( row, v );
|
ExportOptions( row, v );
|
||||||
bool bRowCausesDisqualified = GAMESTATE->IsDisqualified( pn );
|
bool bRowCausesDisqualified = GAMESTATE->CurrentOptionsDisqualifyPlayer( pn );
|
||||||
m_bRowCausesDisqualified[pn][row] = bRowCausesDisqualified;
|
m_bRowCausesDisqualified[pn][row] = bRowCausesDisqualified;
|
||||||
|
|
||||||
// Update disqualified graphic
|
// Update disqualified graphic
|
||||||
|
|||||||
@@ -155,7 +155,7 @@ void StageStats::CommitScores( bool bSummary )
|
|||||||
FOREACH_HumanPlayer( p )
|
FOREACH_HumanPlayer( p )
|
||||||
{
|
{
|
||||||
// don't save scores if the player is disqualified
|
// don't save scores if the player is disqualified
|
||||||
if( GAMESTATE->IsDisqualified(p) )
|
if( this->m_player[p].IsDisqualified() )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// whether or not to save scores when the stage was failed
|
// whether or not to save scores when the stage was failed
|
||||||
|
|||||||
Reference in New Issue
Block a user