This commit is contained in:
Kyzentun
2015-01-28 09:52:53 -07:00
12 changed files with 102 additions and 96 deletions
+6 -6
View File
@@ -17,10 +17,10 @@ struct HighScoreImpl
{ {
RString sName; // name that shows in the machine's ranking screen RString sName; // name that shows in the machine's ranking screen
Grade grade; Grade grade;
int iScore; unsigned int iScore;
float fPercentDP; float fPercentDP;
float fSurviveSeconds; float fSurviveSeconds;
int iMaxCombo; // maximum combo obtained [SM5 alpha 1a+] unsigned int iMaxCombo; // maximum combo obtained [SM5 alpha 1a+]
StageAward stageAward; // stage award [SM5 alpha 1a+] StageAward stageAward; // stage award [SM5 alpha 1a+]
PeakComboAward peakComboAward; // peak combo award [SM5 alpha 1a+] PeakComboAward peakComboAward; // peak combo award [SM5 alpha 1a+]
RString sModifiers; RString sModifiers;
@@ -191,8 +191,8 @@ bool HighScore::IsEmpty() const
RString HighScore::GetName() const { return m_Impl->sName; } RString HighScore::GetName() const { return m_Impl->sName; }
Grade HighScore::GetGrade() const { return m_Impl->grade; } Grade HighScore::GetGrade() const { return m_Impl->grade; }
int HighScore::GetScore() const { return m_Impl->iScore; } unsigned int HighScore::GetScore() const { return m_Impl->iScore; }
int HighScore::GetMaxCombo() const { return m_Impl->iMaxCombo; } unsigned int HighScore::GetMaxCombo() const { return m_Impl->iMaxCombo; }
StageAward HighScore::GetStageAward() const { return m_Impl->stageAward; } StageAward HighScore::GetStageAward() const { return m_Impl->stageAward; }
PeakComboAward HighScore::GetPeakComboAward() const { return m_Impl->peakComboAward; } PeakComboAward HighScore::GetPeakComboAward() const { return m_Impl->peakComboAward; }
float HighScore::GetPercentDP() const { return m_Impl->fPercentDP; } float HighScore::GetPercentDP() const { return m_Impl->fPercentDP; }
@@ -211,8 +211,8 @@ bool HighScore::GetDisqualified() const { return m_Impl->bDisqualified; }
void HighScore::SetName( const RString &sName ) { m_Impl->sName = sName; } void HighScore::SetName( const RString &sName ) { m_Impl->sName = sName; }
void HighScore::SetGrade( Grade g ) { m_Impl->grade = g; } void HighScore::SetGrade( Grade g ) { m_Impl->grade = g; }
void HighScore::SetScore( int iScore ) { m_Impl->iScore = iScore; } void HighScore::SetScore( unsigned int iScore ) { m_Impl->iScore = iScore; }
void HighScore::SetMaxCombo( int i ) { m_Impl->iMaxCombo = i; } void HighScore::SetMaxCombo( unsigned int i ) { m_Impl->iMaxCombo = i; }
void HighScore::SetStageAward( StageAward a ) { m_Impl->stageAward = a; } void HighScore::SetStageAward( StageAward a ) { m_Impl->stageAward = a; }
void HighScore::SetPeakComboAward( PeakComboAward a ) { m_Impl->peakComboAward = a; } void HighScore::SetPeakComboAward( PeakComboAward a ) { m_Impl->peakComboAward = a; }
void HighScore::SetPercentDP( float f ) { m_Impl->fPercentDP = f; } void HighScore::SetPercentDP( float f ) { m_Impl->fPercentDP = f; }
+4 -4
View File
@@ -30,7 +30,7 @@ struct HighScore
/** /**
* @brief Retrieve the score earned. * @brief Retrieve the score earned.
* @return the score. */ * @return the score. */
int GetScore() const; unsigned int GetScore() const;
/** /**
* @brief Determine if any judgments were tallied during this run. * @brief Determine if any judgments were tallied during this run.
* @return true if no judgments were recorded, false otherwise. */ * @return true if no judgments were recorded, false otherwise. */
@@ -41,7 +41,7 @@ struct HighScore
* @return the number of seconds left. */ * @return the number of seconds left. */
float GetSurviveSeconds() const; float GetSurviveSeconds() const;
float GetSurvivalSeconds() const; float GetSurvivalSeconds() const;
int GetMaxCombo() const; unsigned int GetMaxCombo() const;
StageAward GetStageAward() const; StageAward GetStageAward() const;
PeakComboAward GetPeakComboAward() const; PeakComboAward GetPeakComboAward() const;
/** /**
@@ -66,10 +66,10 @@ struct HighScore
* @param sName the name of the Player. */ * @param sName the name of the Player. */
void SetName( const RString &sName ); void SetName( const RString &sName );
void SetGrade( Grade g ); void SetGrade( Grade g );
void SetScore( int iScore ); void SetScore( unsigned int iScore );
void SetPercentDP( float f ); void SetPercentDP( float f );
void SetAliveSeconds( float f ); void SetAliveSeconds( float f );
void SetMaxCombo( int i ); void SetMaxCombo( unsigned int i );
void SetStageAward( StageAward a ); void SetStageAward( StageAward a );
void SetPeakComboAward( PeakComboAward a ); void SetPeakComboAward( PeakComboAward a );
void SetModifiers( RString s ); void SetModifiers( RString s );
+3 -3
View File
@@ -25,7 +25,7 @@ ThemeMetric<float> ITEM_USE_RATE_SECONDS("Inventory","ItemUseRateSeconds");
struct Item struct Item
{ {
AttackLevel level; AttackLevel level;
int iCombo; unsigned int iCombo;
RString sModifier; RString sModifier;
}; };
static vector<Item> g_Items; static vector<Item> g_Items;
@@ -100,9 +100,9 @@ void Inventory::Update( float fDelta )
// check to see if they deserve a new item // check to see if they deserve a new item
if( STATSMAN->m_CurStageStats.m_player[pn].m_iCurCombo != m_iLastSeenCombo ) if( STATSMAN->m_CurStageStats.m_player[pn].m_iCurCombo != m_iLastSeenCombo )
{ {
int iOldCombo = m_iLastSeenCombo; unsigned int iOldCombo = m_iLastSeenCombo;
m_iLastSeenCombo = STATSMAN->m_CurStageStats.m_player[pn].m_iCurCombo; m_iLastSeenCombo = STATSMAN->m_CurStageStats.m_player[pn].m_iCurCombo;
int iNewCombo = m_iLastSeenCombo; unsigned int iNewCombo = m_iLastSeenCombo;
#define CROSSED(i) (iOldCombo<i)&&(iNewCombo>=i) #define CROSSED(i) (iOldCombo<i)&&(iNewCombo>=i)
#define BROKE_ABOVE(i) (iNewCombo<iOldCombo)&&(iOldCombo>=i) #define BROKE_ABOVE(i) (iNewCombo<iOldCombo)&&(iOldCombo>=i)
+1 -1
View File
@@ -28,7 +28,7 @@ protected:
void AwardItem( int iItemIndex ); void AwardItem( int iItemIndex );
PlayerState* m_pPlayerState; PlayerState* m_pPlayerState;
int m_iLastSeenCombo; unsigned int m_iLastSeenCombo;
/** @brief a sound played when an item has been acquired. */ /** @brief a sound played when an item has been acquired. */
RageSound m_soundAcquireItem; RageSound m_soundAcquireItem;
+1
View File
@@ -81,6 +81,7 @@ namespace LuaHelpers
template<> void Push<bool>( lua_State *L, const bool &Object ) { lua_pushboolean( L, Object ); } template<> void Push<bool>( lua_State *L, const bool &Object ) { lua_pushboolean( L, Object ); }
template<> void Push<float>( lua_State *L, const float &Object ) { lua_pushnumber( L, Object ); } template<> void Push<float>( lua_State *L, const float &Object ) { lua_pushnumber( L, Object ); }
template<> void Push<int>( lua_State *L, const int &Object ) { lua_pushinteger( L, Object ); } template<> void Push<int>( lua_State *L, const int &Object ) { lua_pushinteger( L, Object ); }
template<> void Push<unsigned int>( lua_State *L, const unsigned int &Object ) { lua_pushnumber( L, double(Object) ); }
template<> void Push<RString>( lua_State *L, const RString &Object ) { lua_pushlstring( L, Object.data(), Object.size() ); } template<> void Push<RString>( lua_State *L, const RString &Object ) { lua_pushlstring( L, Object.data(), Object.size() ); }
template<> bool FromStack<bool>( Lua *L, bool &Object, int iOffset ) { Object = !!lua_toboolean( L, iOffset ); return true; } template<> bool FromStack<bool>( Lua *L, bool &Object, int iOffset ) { Object = !!lua_toboolean( L, iOffset ); return true; }
+59 -54
View File
@@ -370,7 +370,8 @@ void Player::Init(
m_pPrimaryScoreKeeper = pPrimaryScoreKeeper; m_pPrimaryScoreKeeper = pPrimaryScoreKeeper;
m_pSecondaryScoreKeeper = pSecondaryScoreKeeper; m_pSecondaryScoreKeeper = pSecondaryScoreKeeper;
m_iLastSeenCombo = -1; m_iLastSeenCombo = 0;
m_bSeenComboYet = false;
// set initial life // set initial life
if( m_pLifeMeter && m_pPlayerStageStats ) if( m_pLifeMeter && m_pPlayerStageStats )
@@ -763,10 +764,10 @@ void Player::Load()
m_pIterUnjudgedMineRows = new NoteData::all_tracks_iterator( m_NoteData.GetTapNoteRangeAllTracks(iNoteRow, MAX_NOTE_ROW ) ); m_pIterUnjudgedMineRows = new NoteData::all_tracks_iterator( m_NoteData.GetTapNoteRangeAllTracks(iNoteRow, MAX_NOTE_ROW ) );
} }
void Player::SendComboMessages( int iOldCombo, int iOldMissCombo ) void Player::SendComboMessages( unsigned int iOldCombo, unsigned int iOldMissCombo )
{ {
const int iCurCombo = m_pPlayerStageStats ? m_pPlayerStageStats->m_iCurCombo : 0; const unsigned int iCurCombo = m_pPlayerStageStats ? m_pPlayerStageStats->m_iCurCombo : 0;
if( iOldCombo > COMBO_STOPPED_AT && iCurCombo < COMBO_STOPPED_AT ) if( iOldCombo > (unsigned int)COMBO_STOPPED_AT && iCurCombo < (unsigned int)COMBO_STOPPED_AT )
{ {
SCREENMAN->PostMessageToTopScreen( SM_ComboStopped, 0 ); SCREENMAN->PostMessageToTopScreen( SM_ComboStopped, 0 );
} }
@@ -1411,7 +1412,7 @@ void Player::UpdateHoldNotes( int iSongRow, float fDeltaTime, vector<TrackRowTap
//LOG->Trace("initiated note and didn't let go"); //LOG->Trace("initiated note and didn't let go");
fLife = 1; // xxx: should be MAX_HOLD_LIFE instead? -aj fLife = 1; // xxx: should be MAX_HOLD_LIFE instead? -aj
hns = HNS_Held; hns = HNS_Held;
bool bBright = m_pPlayerStageStats && m_pPlayerStageStats->m_iCurCombo>(int)BRIGHT_GHOST_COMBO_THRESHOLD; bool bBright = m_pPlayerStageStats && m_pPlayerStageStats->m_iCurCombo>(unsigned int)BRIGHT_GHOST_COMBO_THRESHOLD;
if( m_pNoteField ) if( m_pNoteField )
{ {
FOREACH( TrackRowTapNote, vTN, trtn ) FOREACH( TrackRowTapNote, vTN, trtn )
@@ -1463,19 +1464,7 @@ void Player::UpdateHoldNotes( int iSongRow, float fDeltaTime, vector<TrackRowTap
} }
if ( (hns == HNS_LetGo) && COMBO_BREAK_ON_IMMEDIATE_HOLD_LET_GO ) if ( (hns == HNS_LetGo) && COMBO_BREAK_ON_IMMEDIATE_HOLD_LET_GO )
{ IncrementMissCombo();
const int iOldCombo = m_pPlayerStageStats ? m_pPlayerStageStats->m_iCurCombo : 0;
const int iOldMissCombo = m_pPlayerStageStats ? m_pPlayerStageStats->m_iCurMissCombo : 0;
if( m_pPlayerStageStats )
{
m_pPlayerStageStats->m_iCurCombo = 0;
m_pPlayerStageStats->m_iCurMissCombo++;
SetCombo( m_pPlayerStageStats->m_iCurCombo, m_pPlayerStageStats->m_iCurMissCombo );
}
SendComboMessages( iOldCombo, iOldMissCombo );
}
if( hns != HNS_None ) if( hns != HNS_None )
{ {
@@ -1919,8 +1908,8 @@ void Player::DoTapScoreNone()
Message msg( "ScoreNone" ); Message msg( "ScoreNone" );
MESSAGEMAN->Broadcast( msg ); MESSAGEMAN->Broadcast( msg );
const int iOldCombo = m_pPlayerStageStats ? m_pPlayerStageStats->m_iCurCombo : 0; const unsigned int iOldCombo = m_pPlayerStageStats ? m_pPlayerStageStats->m_iCurCombo : 0;
const int iOldMissCombo = m_pPlayerStageStats ? m_pPlayerStageStats->m_iCurMissCombo : 0; const unsigned int iOldMissCombo = m_pPlayerStageStats ? m_pPlayerStageStats->m_iCurMissCombo : 0;
/* The only real way to tell if a mine has been scored is if it has disappeared /* The only real way to tell if a mine has been scored is if it has disappeared
* but this only works for hit mines so update the scores for avoided mines here. */ * but this only works for hit mines so update the scores for avoided mines here. */
@@ -2106,21 +2095,9 @@ void Player::StepStrumHopo( int col, int row, const RageTimer &tm, bool bHeld, b
if( ROLL_BODY_INCREMENTS_COMBO && m_pPlayerState->m_PlayerController != PC_AUTOPLAY ) if( ROLL_BODY_INCREMENTS_COMBO && m_pPlayerState->m_PlayerController != PC_AUTOPLAY )
{ {
// increment combo IncrementCombo();
const int iOldCombo = m_pPlayerStageStats ? m_pPlayerStageStats->m_iCurCombo : 0;
const int iOldMissCombo = m_pPlayerStageStats ? m_pPlayerStageStats->m_iCurMissCombo : 0;
if( m_pPlayerStageStats ) bool bBright = m_pPlayerStageStats && m_pPlayerStageStats->m_iCurCombo>(unsigned int)BRIGHT_GHOST_COMBO_THRESHOLD;
{
m_pPlayerStageStats->m_iCurCombo++;
m_pPlayerStageStats->m_iCurMissCombo = 0;
}
SendComboMessages( iOldCombo, iOldMissCombo );
if( m_pPlayerStageStats )
SetCombo( m_pPlayerStageStats->m_iCurCombo, m_pPlayerStageStats->m_iCurMissCombo );
bool bBright = m_pPlayerStageStats && m_pPlayerStageStats->m_iCurCombo>(int)BRIGHT_GHOST_COMBO_THRESHOLD;
if( m_pNoteField ) if( m_pNoteField )
m_pNoteField->DidHoldNote( col, HNS_Held, bBright ); m_pNoteField->DidHoldNote( col, HNS_Held, bBright );
} }
@@ -2582,7 +2559,7 @@ void Player::StepStrumHopo( int col, int row, const RageTimer &tm, bool bHeld, b
const bool bBlind = (m_pPlayerState->m_PlayerOptions.GetCurrent().m_fBlind != 0); const bool bBlind = (m_pPlayerState->m_PlayerOptions.GetCurrent().m_fBlind != 0);
// XXX: This is the wrong combo for shared players. // XXX: This is the wrong combo for shared players.
// STATSMAN->m_CurStageStats.m_Player[pn] might work, but could be wrong. // STATSMAN->m_CurStageStats.m_Player[pn] might work, but could be wrong.
const bool bBright = ( m_pPlayerStageStats && m_pPlayerStageStats->m_iCurCombo > int(BRIGHT_GHOST_COMBO_THRESHOLD) ) || bBlind; const bool bBright = ( m_pPlayerStageStats && m_pPlayerStageStats->m_iCurCombo > (unsigned int)BRIGHT_GHOST_COMBO_THRESHOLD ) || bBlind;
if( m_pNoteField ) if( m_pNoteField )
m_pNoteField->DidTapNote( col, bBlind? TNS_W1:score, bBright ); m_pNoteField->DidTapNote( col, bBlind? TNS_W1:score, bBright );
if( score >= m_pPlayerState->m_PlayerOptions.GetCurrent().m_MinTNSToHideNotes || bBlind ) if( score >= m_pPlayerState->m_PlayerOptions.GetCurrent().m_MinTNSToHideNotes || bBlind )
@@ -2921,7 +2898,7 @@ void Player::FlashGhostRow( int iRow )
{ {
TapNoteScore lastTNS = NoteDataWithScoring::LastTapNoteWithResult( m_NoteData, iRow ).result.tns; TapNoteScore lastTNS = NoteDataWithScoring::LastTapNoteWithResult( m_NoteData, iRow ).result.tns;
const bool bBlind = (m_pPlayerState->m_PlayerOptions.GetCurrent().m_fBlind != 0); const bool bBlind = (m_pPlayerState->m_PlayerOptions.GetCurrent().m_fBlind != 0);
const bool bBright = ( m_pPlayerStageStats && m_pPlayerStageStats->m_iCurCombo > int(BRIGHT_GHOST_COMBO_THRESHOLD) ) || bBlind; const bool bBright = ( m_pPlayerStageStats && m_pPlayerStageStats->m_iCurCombo > (unsigned int)BRIGHT_GHOST_COMBO_THRESHOLD ) || bBlind;
for( int iTrack = 0; iTrack < m_NoteData.GetNumTracks(); ++iTrack ) for( int iTrack = 0; iTrack < m_NoteData.GetNumTracks(); ++iTrack )
{ {
@@ -3124,8 +3101,8 @@ void Player::HandleTapRowScore( unsigned row )
return; return;
TapNoteScore scoreOfLastTap = NoteDataWithScoring::LastTapNoteWithResult(m_NoteData, row).result.tns; TapNoteScore scoreOfLastTap = NoteDataWithScoring::LastTapNoteWithResult(m_NoteData, row).result.tns;
const int iOldCombo = m_pPlayerStageStats ? m_pPlayerStageStats->m_iCurCombo : 0; const unsigned int iOldCombo = m_pPlayerStageStats ? m_pPlayerStageStats->m_iCurCombo : 0;
const int iOldMissCombo = m_pPlayerStageStats ? m_pPlayerStageStats->m_iCurMissCombo : 0; const unsigned int iOldMissCombo = m_pPlayerStageStats ? m_pPlayerStageStats->m_iCurMissCombo : 0;
if( scoreOfLastTap == TNS_Miss ) if( scoreOfLastTap == TNS_Miss )
m_LastTapNoteScore = TNS_Miss; m_LastTapNoteScore = TNS_Miss;
@@ -3150,8 +3127,8 @@ void Player::HandleTapRowScore( unsigned row )
if( m_pSecondaryScoreKeeper != NULL ) if( m_pSecondaryScoreKeeper != NULL )
m_pSecondaryScoreKeeper->HandleTapRowScore( m_NoteData, row ); m_pSecondaryScoreKeeper->HandleTapRowScore( m_NoteData, row );
const int iCurCombo = m_pPlayerStageStats ? m_pPlayerStageStats->m_iCurCombo : 0; const unsigned int iCurCombo = m_pPlayerStageStats ? m_pPlayerStageStats->m_iCurCombo : 0;
const int iCurMissCombo = m_pPlayerStageStats ? m_pPlayerStageStats->m_iCurMissCombo : 0; const unsigned int iCurMissCombo = m_pPlayerStageStats ? m_pPlayerStageStats->m_iCurMissCombo : 0;
SendComboMessages( iOldCombo, iOldMissCombo ); SendComboMessages( iOldCombo, iOldMissCombo );
@@ -3231,8 +3208,8 @@ void Player::HandleHoldCheckpoint(int iRow,
if( bNoCheating && m_pPlayerState->m_PlayerController == PC_AUTOPLAY ) if( bNoCheating && m_pPlayerState->m_PlayerController == PC_AUTOPLAY )
return; return;
const int iOldCombo = m_pPlayerStageStats ? m_pPlayerStageStats->m_iCurCombo : 0; const unsigned int iOldCombo = m_pPlayerStageStats ? m_pPlayerStageStats->m_iCurCombo : 0;
const int iOldMissCombo = m_pPlayerStageStats ? m_pPlayerStageStats->m_iCurMissCombo : 0; const unsigned int iOldMissCombo = m_pPlayerStageStats ? m_pPlayerStageStats->m_iCurMissCombo : 0;
if( m_pPrimaryScoreKeeper ) if( m_pPrimaryScoreKeeper )
m_pPrimaryScoreKeeper->HandleHoldCheckpointScore(m_NoteData, m_pPrimaryScoreKeeper->HandleHoldCheckpointScore(m_NoteData,
@@ -3253,7 +3230,7 @@ void Player::HandleHoldCheckpoint(int iRow,
FOREACH_CONST( int, viColsWithHold, i ) FOREACH_CONST( int, viColsWithHold, i )
{ {
bool bBright = m_pPlayerStageStats bool bBright = m_pPlayerStageStats
&& m_pPlayerStageStats->m_iCurCombo>(int)BRIGHT_GHOST_COMBO_THRESHOLD; && m_pPlayerStageStats->m_iCurCombo>(unsigned int)BRIGHT_GHOST_COMBO_THRESHOLD;
if( m_pNoteField ) if( m_pNoteField )
m_pNoteField->DidHoldNote( *i, HNS_Held, bBright ); m_pNoteField->DidHoldNote( *i, HNS_Held, bBright );
} }
@@ -3422,30 +3399,35 @@ void Player::SetHoldJudgment( TapNote &tn, int iTrack )
} }
} }
void Player::SetCombo( int iCombo, int iMisses ) void Player::SetCombo( unsigned int iCombo, unsigned int iMisses )
{ {
if( m_iLastSeenCombo == -1 ) // first update, don't set bIsMilestone=true if( !m_bSeenComboYet ) // first update, don't set bIsMilestone=true
{
m_bSeenComboYet = true;
m_iLastSeenCombo = iCombo; m_iLastSeenCombo = iCombo;
}
bool b25Milestone = false; bool b25Milestone = false;
bool b50Milestone = false; bool b50Milestone = false;
bool b100Milestone = false; bool b100Milestone = false;
bool b250Milestone = false; bool b250Milestone = false;
bool b1000Milestone = false; bool b1000Milestone = false;
for( int i=m_iLastSeenCombo+1; i<=iCombo; i++ )
#define MILESTONE_CHECK(amount) ((iCombo / amount) > (m_iLastSeenCombo / amount))
if(m_iLastSeenCombo < 600)
{ {
if( i < 600 ) b25Milestone= MILESTONE_CHECK(25);
{ b50Milestone= MILESTONE_CHECK(50);
b25Milestone |= ((i % 25) == 0); b100Milestone= MILESTONE_CHECK(100);
b50Milestone |= ((i % 50) == 0); b250Milestone= MILESTONE_CHECK(250);
b100Milestone |= ((i % 100) == 0); b1000Milestone= MILESTONE_CHECK(1000);
b250Milestone |= ((i % 250) == 0);
} }
else else
{ {
b1000Milestone |= ((i % 200) == 0); b1000Milestone= MILESTONE_CHECK(1000);
}
} }
#undef MILESTONE_CHECK
m_iLastSeenCombo = iCombo; m_iLastSeenCombo = iCombo;
if( b25Milestone ) if( b25Milestone )
@@ -3504,6 +3486,29 @@ void Player::SetCombo( int iCombo, int iMisses )
} }
} }
void Player::IncrementComboOrMissCombo(bool bComboOrMissCombo)
{
const unsigned int iOldCombo = m_pPlayerStageStats ? m_pPlayerStageStats->m_iCurCombo : 0;
const unsigned int iOldMissCombo = m_pPlayerStageStats ? m_pPlayerStageStats->m_iCurMissCombo : 0;
if( m_pPlayerStageStats )
{
if( bComboOrMissCombo )
{
m_pPlayerStageStats->m_iCurCombo++;
m_pPlayerStageStats->m_iCurMissCombo = 0;
}
else
{
m_pPlayerStageStats->m_iCurCombo = 0;
m_pPlayerStageStats->m_iCurMissCombo++;
}
SetCombo( m_pPlayerStageStats->m_iCurCombo, m_pPlayerStageStats->m_iCurMissCombo );
}
SendComboMessages( iOldCombo, iOldMissCombo );
}
RString Player::ApplyRandomAttack() RString Player::ApplyRandomAttack()
{ {
if( GAMESTATE->m_RandomAttacks.size() < 1 ) if( GAMESTATE->m_RandomAttacks.size() < 1 )
+7 -3
View File
@@ -128,14 +128,17 @@ protected:
void HandleHoldCheckpoint( int iRow, int iNumHoldsHeldThisRow, int iNumHoldsMissedThisRow, const vector<int> &viColsWithHold ); void HandleHoldCheckpoint( int iRow, int iNumHoldsHeldThisRow, int iNumHoldsMissedThisRow, const vector<int> &viColsWithHold );
void DrawTapJudgments(); void DrawTapJudgments();
void DrawHoldJudgments(); void DrawHoldJudgments();
void SendComboMessages( int iOldCombo, int iOldMissCombo ); void SendComboMessages( unsigned int iOldCombo, unsigned int iOldMissCombo );
void PlayKeysound( const TapNote &tn, TapNoteScore score ); void PlayKeysound( const TapNote &tn, TapNoteScore score );
void SetMineJudgment( TapNoteScore tns , int iTrack ); void SetMineJudgment( TapNoteScore tns , int iTrack );
void SetJudgment( int iRow, int iFirstTrack, const TapNote &tn ) { SetJudgment( iRow, iFirstTrack, tn, tn.result.tns, tn.result.fTapNoteOffset ); } void SetJudgment( int iRow, int iFirstTrack, const TapNote &tn ) { SetJudgment( iRow, iFirstTrack, tn, tn.result.tns, tn.result.fTapNoteOffset ); }
void SetJudgment( int iRow, int iFirstTrack, const TapNote &tn, TapNoteScore tns, float fTapNoteOffset ); // -1 if no track as in TNS_Miss void SetJudgment( int iRow, int iFirstTrack, const TapNote &tn, TapNoteScore tns, float fTapNoteOffset ); // -1 if no track as in TNS_Miss
void SetHoldJudgment( TapNote &tn, int iTrack ); void SetHoldJudgment( TapNote &tn, int iTrack );
void SetCombo( int iCombo, int iMisses ); void SetCombo( unsigned int iCombo, unsigned int iMisses );
void IncrementComboOrMissCombo( bool bComboOrMissCombo );
void IncrementCombo() { IncrementComboOrMissCombo(true); };
void IncrementMissCombo() { IncrementComboOrMissCombo(false); };
void ChangeLife( TapNoteScore tns ); void ChangeLife( TapNoteScore tns );
void ChangeLife( HoldNoteScore hns, TapNoteScore tns ); void ChangeLife( HoldNoteScore hns, TapNoteScore tns );
@@ -194,7 +197,8 @@ protected:
NoteData::all_tracks_iterator *m_pIterUncrossedRows; NoteData::all_tracks_iterator *m_pIterUncrossedRows;
NoteData::all_tracks_iterator *m_pIterUnjudgedRows; NoteData::all_tracks_iterator *m_pIterUnjudgedRows;
NoteData::all_tracks_iterator *m_pIterUnjudgedMineRows; NoteData::all_tracks_iterator *m_pIterUnjudgedMineRows;
int m_iLastSeenCombo; unsigned int m_iLastSeenCombo;
bool m_bSeenComboYet;
JudgedRows *m_pJudgedRows; JudgedRows *m_pJudgedRows;
RageSound m_soundMine; RageSound m_soundMine;
+6 -6
View File
@@ -65,18 +65,18 @@ public:
int m_iTapNoteScores[NUM_TapNoteScore]; int m_iTapNoteScores[NUM_TapNoteScore];
int m_iHoldNoteScores[NUM_HoldNoteScore]; int m_iHoldNoteScores[NUM_HoldNoteScore];
/** @brief The Player's current combo. */ /** @brief The Player's current combo. */
int m_iCurCombo; unsigned int m_iCurCombo;
/** @brief The Player's max combo. */ /** @brief The Player's max combo. */
int m_iMaxCombo; unsigned int m_iMaxCombo;
/** @brief The Player's current miss combo. */ /** @brief The Player's current miss combo. */
int m_iCurMissCombo; unsigned int m_iCurMissCombo;
int m_iCurScoreMultiplier; int m_iCurScoreMultiplier;
/** @brief The player's current score. */ /** @brief The player's current score. */
int m_iScore; unsigned int m_iScore;
/** @brief The theoretically highest score the Player could have at this point. */ /** @brief The theoretically highest score the Player could have at this point. */
int m_iCurMaxScore; unsigned int m_iCurMaxScore;
/** @brief The maximum score the Player can get this goaround. */ /** @brief The maximum score the Player can get this goaround. */
int m_iMaxScore; unsigned int m_iMaxScore;
/** /**
* @brief The possible RadarValues for a song. * @brief The possible RadarValues for a song.
+5 -9
View File
@@ -198,7 +198,7 @@ void ScoreKeeperNormal::OnNextSong( int iSongInCourseIndex, const Steps* pSteps,
GAMESTATE->SetProcessedTimingData(NULL); GAMESTATE->SetProcessedTimingData(NULL);
} }
static int GetScore(int p, int Z, int S, int n) static int GetScore(int p, int Z, int64_t S, int n)
{ {
/* There's a problem with the scoring system described below. Z/S is truncated /* There's a problem with the scoring system described below. Z/S is truncated
* to an int. However, in some cases we can end up with very small base scores. * to an int. However, in some cases we can end up with very small base scores.
@@ -260,8 +260,8 @@ void ScoreKeeperNormal::AddScoreInternal( TapNoteScore score )
if( m_UseInternalScoring ) if( m_UseInternalScoring )
{ {
int &iScore = m_pPlayerStageStats->m_iScore; unsigned int &iScore = m_pPlayerStageStats->m_iScore;
int &iCurMaxScore = m_pPlayerStageStats->m_iCurMaxScore; unsigned int &iCurMaxScore = m_pPlayerStageStats->m_iCurMaxScore;
// See Aaron In Japan for more details about the scoring formulas. // See Aaron In Japan for more details about the scoring formulas.
// Note: this assumes no custom scoring systems are in use. // Note: this assumes no custom scoring systems are in use.
@@ -277,8 +277,8 @@ void ScoreKeeperNormal::AddScoreInternal( TapNoteScore score )
m_iTapNotesHit++; m_iTapNotesHit++;
const int N = m_iNumTapsAndHolds; const int64_t N = uint64_t(m_iNumTapsAndHolds);
const int sum = (N * (N + 1)) / 2; const int64_t sum = (N * (N + 1)) / 2;
const int Z = m_iMaxPossiblePoints/10; const int Z = m_iMaxPossiblePoints/10;
// Don't use a multiplier if the player has failed // Don't use a multiplier if the player has failed
@@ -320,15 +320,11 @@ void ScoreKeeperNormal::AddScoreInternal( TapNoteScore score )
iCurMaxScore += m_iPointBonus; iCurMaxScore += m_iPointBonus;
} }
ASSERT_M( iScore >= 0, "iScore < 0 before re-rounding" );
// Undo rounding from the last tap, and re-round. // Undo rounding from the last tap, and re-round.
iScore += m_iScoreRemainder; iScore += m_iScoreRemainder;
m_iScoreRemainder = (iScore % m_iRoundTo); m_iScoreRemainder = (iScore % m_iRoundTo);
iScore = iScore - m_iScoreRemainder; iScore = iScore - m_iScoreRemainder;
ASSERT_M( iScore >= 0, "iScore < 0 after re-rounding" );
// LOG->Trace( "score: %i", iScore ); // LOG->Trace( "score: %i", iScore );
} }
} }
+1 -1
View File
@@ -1932,7 +1932,7 @@ void ScreenGameplay::Update( float fDeltaTime )
} }
if (bAllHumanHaveBigMissCombo) // possible to get in here. if (bAllHumanHaveBigMissCombo) // possible to get in here.
{ {
bAllHumanHaveBigMissCombo = FAIL_ON_MISS_COMBO.GetValue() != -1 && STATSMAN->m_CurStageStats.GetMinimumMissCombo() >= FAIL_ON_MISS_COMBO; bAllHumanHaveBigMissCombo = FAIL_ON_MISS_COMBO.GetValue() != -1 && STATSMAN->m_CurStageStats.GetMinimumMissCombo() >= (unsigned int)FAIL_ON_MISS_COMBO;
} }
if( bGiveUpTimerFired || bAllHumanHaveBigMissCombo ) if( bGiveUpTimerFired || bAllHumanHaveBigMissCombo )
{ {
+2 -2
View File
@@ -331,9 +331,9 @@ bool StageStats::PlayerHasHighScore( PlayerNumber pn ) const
return false; return false;
} }
int StageStats::GetMinimumMissCombo() const unsigned int StageStats::GetMinimumMissCombo() const
{ {
int iMin = INT_MAX; unsigned int iMin = INT_MAX;
FOREACH_HumanPlayer( p ) FOREACH_HumanPlayer( p )
iMin = min( iMin, m_player[p].m_iCurMissCombo ); iMin = min( iMin, m_player[p].m_iCurMissCombo );
return iMin; return iMin;
+1 -1
View File
@@ -74,7 +74,7 @@ public:
* @param pn the PlayerNumber in question. * @param pn the PlayerNumber in question.
* @return true if the PlayerNumber has a high score, false otherwise. */ * @return true if the PlayerNumber has a high score, false otherwise. */
bool PlayerHasHighScore( PlayerNumber pn ) const; bool PlayerHasHighScore( PlayerNumber pn ) const;
int GetMinimumMissCombo() const; unsigned int GetMinimumMissCombo() const;
// Lua // Lua
void PushSelf( lua_State *L ); void PushSelf( lua_State *L );