Merge branch 'master' of https://github.com/Flameshadowxeroshin/stepmania
This commit is contained in:
+6
-6
@@ -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
@@ -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
@@ -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
@@ -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;
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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;
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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 );
|
||||||
|
|||||||
Reference in New Issue
Block a user