Jumps count as only 1 in TapNoteScore totals
This commit is contained in:
@@ -11,29 +11,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "GameConstantsAndTypes.h"
|
#include "GameConstantsAndTypes.h"
|
||||||
#include "PrefsManager.h"
|
|
||||||
#include "GameState.h"
|
#include "GameState.h"
|
||||||
|
|
||||||
/* XXX: Should this be in GAMESTATE? It's not really a constant anymore. */
|
|
||||||
int TapNoteScoreToDancePoints( TapNoteScore tns )
|
|
||||||
{
|
|
||||||
const bool bOni = GAMESTATE->IsCourseMode();
|
|
||||||
|
|
||||||
if(!PREFSMAN->m_bMarvelousTiming && tns == TNS_MARVELOUS)
|
|
||||||
tns = TNS_PERFECT;
|
|
||||||
|
|
||||||
switch( tns )
|
|
||||||
{
|
|
||||||
case TNS_MARVELOUS: return bOni ? +3 : +2;
|
|
||||||
case TNS_PERFECT: return +2;
|
|
||||||
case TNS_GREAT: return +1;
|
|
||||||
case TNS_GOOD: return +0;
|
|
||||||
case TNS_BOO: return bOni ? 0 : -4;
|
|
||||||
case TNS_MISS: return bOni ? 0 : -8;
|
|
||||||
case TNS_NONE: return 0;
|
|
||||||
default: ASSERT(0); return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
CString DifficultyToString( Difficulty dc )
|
CString DifficultyToString( Difficulty dc )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -124,7 +124,6 @@ enum TapNoteScore {
|
|||||||
NUM_TAP_NOTE_SCORES
|
NUM_TAP_NOTE_SCORES
|
||||||
};
|
};
|
||||||
|
|
||||||
int TapNoteScoreToDancePoints( TapNoteScore tns );
|
|
||||||
|
|
||||||
//enum TapNoteTiming {
|
//enum TapNoteTiming {
|
||||||
// TNT_NONE,
|
// TNT_NONE,
|
||||||
@@ -142,17 +141,6 @@ enum HoldNoteScore
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
inline int HoldNoteScoreToDancePoints( HoldNoteScore hns )
|
|
||||||
{
|
|
||||||
switch( hns )
|
|
||||||
{
|
|
||||||
case HNS_OK: return +6;
|
|
||||||
case HNS_NG: return +0;
|
|
||||||
default: ASSERT(0); return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// MemCard stuff
|
// MemCard stuff
|
||||||
//
|
//
|
||||||
|
|||||||
+16
-29
@@ -176,22 +176,15 @@ void NoteData::RemoveHoldNote( int iHoldIndex )
|
|||||||
m_HoldNotes.erase(m_HoldNotes.begin()+iHoldIndex, m_HoldNotes.begin()+iHoldIndex+1);
|
m_HoldNotes.erase(m_HoldNotes.begin()+iHoldIndex, m_HoldNotes.begin()+iHoldIndex+1);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool NoteData::IsThereANoteAtRow( int iRow ) const
|
bool NoteData::IsThereATapAtRow( int iRow ) const
|
||||||
{
|
{
|
||||||
for( int t=0; t<m_iNumTracks; t++ )
|
for( int t=0; t<m_iNumTracks; t++ )
|
||||||
if( GetTapNote(t, iRow) != TAP_EMPTY )
|
if( GetTapNote(t, iRow) != TAP_EMPTY )
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
// There is a tap note at the beginning of every HoldNote start
|
|
||||||
//
|
|
||||||
// for( int i=0; i<GetNumHoldNotes(); i++ ) // for each HoldNote
|
|
||||||
// if( GetHoldNote(i).m_iStartIndex == NoteRowToBeatRow(iRow) )
|
|
||||||
// return true;
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int NoteData::GetFirstRow() const
|
int NoteData::GetFirstRow() const
|
||||||
{
|
{
|
||||||
return BeatToNoteRow( GetFirstBeat() );
|
return BeatToNoteRow( GetFirstBeat() );
|
||||||
@@ -274,6 +267,21 @@ int NoteData::GetNumTapNotes( float fStartBeat, float fEndBeat ) const
|
|||||||
return iNumNotes;
|
return iNumNotes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int NoteData::GetNumRowsWithTaps( float fStartBeat, float fEndBeat ) const
|
||||||
|
{
|
||||||
|
int iNumNotes = 0;
|
||||||
|
|
||||||
|
if(fEndBeat == -1) fEndBeat = GetMaxBeat();
|
||||||
|
int iStartIndex = BeatToNoteRow( fStartBeat );
|
||||||
|
int iEndIndex = BeatToNoteRow( fEndBeat );
|
||||||
|
|
||||||
|
for( int i=iStartIndex; i<=iEndIndex; i++ )
|
||||||
|
if( IsThereATapAtRow(i) )
|
||||||
|
iNumNotes++;
|
||||||
|
|
||||||
|
return iNumNotes;
|
||||||
|
}
|
||||||
|
|
||||||
int NoteData::GetNumDoubles( float fStartBeat, float fEndBeat ) const
|
int NoteData::GetNumDoubles( float fStartBeat, float fEndBeat ) const
|
||||||
{
|
{
|
||||||
int iNumDoubles = 0;
|
int iNumDoubles = 0;
|
||||||
@@ -311,27 +319,6 @@ int NoteData::GetNumHoldNotes( float fStartBeat, float fEndBeat ) const
|
|||||||
return iNumHolds;
|
return iNumHolds;
|
||||||
}
|
}
|
||||||
|
|
||||||
int NoteData::GetPossibleDancePoints()
|
|
||||||
{
|
|
||||||
//Each song has a certain number of "Dance Points" assigned to it. For regular arrows, this is 2 per arrow. For freeze arrows, it is 6 per arrow. When you add this all up, you get the maximum number of possible "Dance Points".
|
|
||||||
//
|
|
||||||
//Your "Dance Points" are calculated as follows:
|
|
||||||
//
|
|
||||||
//A "Marvelous" is worth 3 points, but oniy when in oni mode
|
|
||||||
//A "Perfect" is worth 2 points
|
|
||||||
//A "Great" is worth 1 points
|
|
||||||
//A "Good" is worth 0 points
|
|
||||||
//A "Boo" will subtract 4 points
|
|
||||||
//A "Miss" will subtract 8 points
|
|
||||||
//An "OK" (Successful Freeze step) will add 6 points
|
|
||||||
//A "NG" (Unsuccessful Freeze step) is worth 0 points
|
|
||||||
|
|
||||||
/* Note that, if Marvelous timing is disabled or not active (not course mode),
|
|
||||||
* PERFECT will be used instead. */
|
|
||||||
return GetNumTapNotes()*TapNoteScoreToDancePoints(TNS_MARVELOUS)+
|
|
||||||
GetNumHoldNotes()*HoldNoteScoreToDancePoints(HNS_OK);
|
|
||||||
}
|
|
||||||
|
|
||||||
void NoteData::Convert2sAnd3sToHoldNotes()
|
void NoteData::Convert2sAnd3sToHoldNotes()
|
||||||
{
|
{
|
||||||
// Any note will end a hold (not just a TAP_HOLD_TAIL). This makes parsing DWIs much easier.
|
// Any note will end a hold (not just a TAP_HOLD_TAIL). This makes parsing DWIs much easier.
|
||||||
|
|||||||
@@ -105,7 +105,7 @@ public:
|
|||||||
const HoldNote &GetHoldNote( int index ) const { return m_HoldNotes[index]; }
|
const HoldNote &GetHoldNote( int index ) const { return m_HoldNotes[index]; }
|
||||||
|
|
||||||
// statistics
|
// statistics
|
||||||
bool IsThereANoteAtRow( int iRow ) const;
|
bool IsThereATapAtRow( int iRow ) const;
|
||||||
|
|
||||||
/* Return the highest beat/row that might contain notes. (Use GetLastBeat if you need
|
/* Return the highest beat/row that might contain notes. (Use GetLastBeat if you need
|
||||||
* accuracy.) */
|
* accuracy.) */
|
||||||
@@ -117,13 +117,12 @@ public:
|
|||||||
float GetLastBeat() const; // return the beat number of the last note
|
float GetLastBeat() const; // return the beat number of the last note
|
||||||
int GetLastRow() const;
|
int GetLastRow() const;
|
||||||
int GetNumTapNotes( const float fStartBeat = 0, const float fEndBeat = -1 ) const;
|
int GetNumTapNotes( const float fStartBeat = 0, const float fEndBeat = -1 ) const;
|
||||||
|
int GetNumRowsWithTaps( const float fStartBeat = 0, const float fEndBeat = -1 ) const;
|
||||||
int GetNumDoubles( const float fStartBeat = 0, const float fEndBeat = -1 ) const;
|
int GetNumDoubles( const float fStartBeat = 0, const float fEndBeat = -1 ) const;
|
||||||
/* optimization: for the default of start to end, use the second (faster) */
|
/* optimization: for the default of start to end, use the second (faster) */
|
||||||
int GetNumHoldNotes( const float fStartBeat, const float fEndBeat = -1 ) const;
|
int GetNumHoldNotes( const float fStartBeat, const float fEndBeat = -1 ) const;
|
||||||
int GetNumHoldNotes() const { return m_HoldNotes.size(); }
|
int GetNumHoldNotes() const { return m_HoldNotes.size(); }
|
||||||
|
|
||||||
int GetPossibleDancePoints();
|
|
||||||
|
|
||||||
// Transformations
|
// Transformations
|
||||||
void LoadTransformed( NoteData* pOriginal, int iNewNumTracks, const int iOriginalTrackToTakeFrom[] ); // -1 for iOriginalTracksToTakeFrom means no track
|
void LoadTransformed( NoteData* pOriginal, int iNewNumTracks, const int iOriginalTrackToTakeFrom[] ); // -1 for iOriginalTracksToTakeFrom means no track
|
||||||
void LoadTransformedSlidingWindow( NoteData* pOriginal, int iNewNumTracks ); // used by autogen
|
void LoadTransformedSlidingWindow( NoteData* pOriginal, int iNewNumTracks ); // used by autogen
|
||||||
|
|||||||
@@ -68,10 +68,9 @@ int Player::GetPlayersMaxCombo()
|
|||||||
|
|
||||||
Player::~Player()
|
Player::~Player()
|
||||||
{
|
{
|
||||||
delete m_pScoreKeeper;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Player::Load( PlayerNumber pn, NoteData* pNoteData, LifeMeter* pLM, ScoreDisplay* pScore, Inventory* pInventory )
|
void Player::Load( PlayerNumber pn, NoteData* pNoteData, LifeMeter* pLM, ScoreDisplay* pScore, Inventory* pInventory, ScoreKeeper* pScoreKeeper )
|
||||||
{
|
{
|
||||||
//LOG->Trace( "Player::Load()", );
|
//LOG->Trace( "Player::Load()", );
|
||||||
|
|
||||||
@@ -79,6 +78,7 @@ void Player::Load( PlayerNumber pn, NoteData* pNoteData, LifeMeter* pLM, ScoreDi
|
|||||||
m_pLifeMeter = pLM;
|
m_pLifeMeter = pLM;
|
||||||
m_pScore = pScore;
|
m_pScore = pScore;
|
||||||
m_pInventory = pInventory;
|
m_pInventory = pInventory;
|
||||||
|
m_pScoreKeeper = pScoreKeeper;
|
||||||
|
|
||||||
const StyleDef* pStyleDef = GAMESTATE->GetCurrentStyleDef();
|
const StyleDef* pStyleDef = GAMESTATE->GetCurrentStyleDef();
|
||||||
|
|
||||||
@@ -98,9 +98,6 @@ void Player::Load( PlayerNumber pn, NoteData* pNoteData, LifeMeter* pLM, ScoreDi
|
|||||||
m_Combo.Init( pn );
|
m_Combo.Init( pn );
|
||||||
m_Judgment.Reset();
|
m_Judgment.Reset();
|
||||||
|
|
||||||
if(m_pScoreKeeper) delete m_pScoreKeeper;
|
|
||||||
m_pScoreKeeper = new ScoreKeeperMAX2(GAMESTATE->m_pCurNotes[m_PlayerNumber], *this, pn);
|
|
||||||
|
|
||||||
if( m_pScore )
|
if( m_pScore )
|
||||||
m_pScore->Init( pn );
|
m_pScore->Init( pn );
|
||||||
|
|
||||||
@@ -603,9 +600,8 @@ void Player::HandleHoldScore( HoldNoteScore holdScore, TapNoteScore tapScore )
|
|||||||
return;
|
return;
|
||||||
#endif //DEBUG
|
#endif //DEBUG
|
||||||
|
|
||||||
if(m_pScoreKeeper) {
|
if(m_pScoreKeeper)
|
||||||
m_pScoreKeeper->HandleHoldScore(holdScore, tapScore);
|
m_pScoreKeeper->HandleHoldScore(holdScore, tapScore);
|
||||||
}
|
|
||||||
|
|
||||||
if (m_pScore)
|
if (m_pScore)
|
||||||
m_pScore->SetScore(GAMESTATE->m_CurStageStats.fScore[m_PlayerNumber]);
|
m_pScore->SetScore(GAMESTATE->m_CurStageStats.fScore[m_PlayerNumber]);
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ public:
|
|||||||
virtual void DrawPrimitives();
|
virtual void DrawPrimitives();
|
||||||
~Player();
|
~Player();
|
||||||
|
|
||||||
void Load( PlayerNumber player_no, NoteData* pNoteData, LifeMeter* pLM, ScoreDisplay* pScore, Inventory* pInventory );
|
void Load( PlayerNumber player_no, NoteData* pNoteData, LifeMeter* pLM, ScoreDisplay* pScore, Inventory* pInventory, ScoreKeeper* pScoreKeeper );
|
||||||
void CrossedRow( int iNoteRow );
|
void CrossedRow( int iNoteRow );
|
||||||
void Step( int col );
|
void Step( int col );
|
||||||
int GetPlayersMaxCombo();
|
int GetPlayersMaxCombo();
|
||||||
|
|||||||
@@ -20,7 +20,8 @@
|
|||||||
|
|
||||||
#include "Actor.h"
|
#include "Actor.h"
|
||||||
#include "PlayerNumber.h"
|
#include "PlayerNumber.h"
|
||||||
#include "GameConstantsAndTypes.h"
|
#include "GameConstantsAndTypes.h" // for TapNoteScore and HoldNoteScore
|
||||||
|
class NoteData;
|
||||||
|
|
||||||
class ScoreKeeper: public Actor
|
class ScoreKeeper: public Actor
|
||||||
{
|
{
|
||||||
@@ -39,6 +40,10 @@ public:
|
|||||||
|
|
||||||
virtual void HandleTapRowScore( TapNoteScore scoreOfLastTap, int iNumTapsInRow ) = 0;
|
virtual void HandleTapRowScore( TapNoteScore scoreOfLastTap, int iNumTapsInRow ) = 0;
|
||||||
virtual void HandleHoldScore( HoldNoteScore holdScore, TapNoteScore tapScore ) = 0;
|
virtual void HandleHoldScore( HoldNoteScore holdScore, TapNoteScore tapScore ) = 0;
|
||||||
|
|
||||||
|
virtual int TapNoteScoreToDancePoints( TapNoteScore tns ) = 0;
|
||||||
|
virtual int HoldNoteScoreToDancePoints( HoldNoteScore hns ) = 0;
|
||||||
|
virtual int GetPossibleDancePoints( const NoteData* pNoteData ) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -1,20 +1,33 @@
|
|||||||
#include "global.h"
|
#include "global.h"
|
||||||
|
/*
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
Class: ScoreKeeperMAX2
|
||||||
|
|
||||||
|
Desc:
|
||||||
|
|
||||||
|
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
|
||||||
|
Chris Danford
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
#include "ScoreKeeperMAX2.h"
|
#include "ScoreKeeperMAX2.h"
|
||||||
#include "GameState.h"
|
#include "GameState.h"
|
||||||
|
#include "PrefsManager.h"
|
||||||
|
#include "Notes.h"
|
||||||
|
|
||||||
ScoreKeeperMAX2::ScoreKeeperMAX2(Notes *notes, NoteDataWithScoring &data, PlayerNumber pn_):
|
ScoreKeeperMAX2::ScoreKeeperMAX2(Notes *notes, PlayerNumber pn_):
|
||||||
ScoreKeeper(pn_)
|
ScoreKeeper(pn_)
|
||||||
{
|
{
|
||||||
// Stats_DoublesCount = true;
|
// Stats_DoublesCount = true;
|
||||||
|
|
||||||
|
NoteData noteData;
|
||||||
|
notes->GetNoteData( ¬eData );
|
||||||
|
|
||||||
int Meter = notes? notes->GetMeter() : 5;
|
int Meter = notes? notes->GetMeter() : 5;
|
||||||
Meter = min(Meter, 10);
|
Meter = min(Meter, 10);
|
||||||
|
|
||||||
/* Hold notes count as two tap notes. However, hold notes already count
|
int N = noteData.GetNumRowsWithTaps() + noteData.GetNumHoldNotes();
|
||||||
* as 1 in GetNumTapNotes(), so only add 1*GetNumHoldNotes, not 2. */
|
|
||||||
int iNumTapNotes = data.GetNumTapNotes() + data.GetNumHoldNotes();
|
|
||||||
|
|
||||||
int sum = (iNumTapNotes * (iNumTapNotes + 1)) / 2;
|
int sum = (N * (N + 1)) / 2;
|
||||||
|
|
||||||
if(sum)
|
if(sum)
|
||||||
m_fScoreMultiplier = float(Meter * 1000000) / sum;
|
m_fScoreMultiplier = float(Meter * 1000000) / sum;
|
||||||
@@ -50,9 +63,9 @@ void ScoreKeeperMAX2::HandleTapRowScore( TapNoteScore scoreOfLastTap, int iNumTa
|
|||||||
{
|
{
|
||||||
ASSERT( iNumTapsInRow >= 1 );
|
ASSERT( iNumTapsInRow >= 1 );
|
||||||
|
|
||||||
// update dance points for Oni lifemeter
|
// update dance points
|
||||||
GAMESTATE->m_CurStageStats.iActualDancePoints[m_PlayerNumber] += iNumTapsInRow * TapNoteScoreToDancePoints( scoreOfLastTap );
|
GAMESTATE->m_CurStageStats.iActualDancePoints[m_PlayerNumber] += TapNoteScoreToDancePoints( scoreOfLastTap );
|
||||||
GAMESTATE->m_CurStageStats.iTapNoteScores[m_PlayerNumber][scoreOfLastTap] += iNumTapsInRow;
|
GAMESTATE->m_CurStageStats.iTapNoteScores[m_PlayerNumber][scoreOfLastTap] += 1;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
A single step's points are calculated as follows:
|
A single step's points are calculated as follows:
|
||||||
@@ -91,8 +104,8 @@ void ScoreKeeperMAX2::HandleTapRowScore( TapNoteScore scoreOfLastTap, int iNumTa
|
|||||||
keeping these seperate for as long as possible improves accuracy.
|
keeping these seperate for as long as possible improves accuracy.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
for( int i=0; i<iNumTapsInRow; i++ )
|
// for( int i=0; i<iNumTapsInRow; i++ )
|
||||||
AddScore( scoreOfLastTap );
|
AddScore( scoreOfLastTap ); // only score once per row
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -105,3 +118,60 @@ void ScoreKeeperMAX2::HandleHoldScore( HoldNoteScore holdScore, TapNoteScore tap
|
|||||||
if( holdScore == HNS_OK )
|
if( holdScore == HNS_OK )
|
||||||
AddScore( TNS_PERFECT );
|
AddScore( TNS_PERFECT );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int ScoreKeeperMAX2::GetPossibleDancePoints( const NoteData* pNoteData )
|
||||||
|
{
|
||||||
|
//Each song has a certain number of "Dance Points" assigned to it. For regular arrows, this is 2 per arrow. For freeze arrows, it is 6 per arrow. When you add this all up, you get the maximum number of possible "Dance Points".
|
||||||
|
//
|
||||||
|
//Your "Dance Points" are calculated as follows:
|
||||||
|
//
|
||||||
|
//A "Marvelous" is worth 3 points, but oniy when in oni mode
|
||||||
|
//A "Perfect" is worth 2 points
|
||||||
|
//A "Great" is worth 1 points
|
||||||
|
//A "Good" is worth 0 points
|
||||||
|
//A "Boo" will subtract 4 points
|
||||||
|
//A "Miss" will subtract 8 points
|
||||||
|
//An "OK" (Successful Freeze step) will add 6 points
|
||||||
|
//A "NG" (Unsuccessful Freeze step) is worth 0 points
|
||||||
|
|
||||||
|
/* Note that, if Marvelous timing is disabled or not active (not course mode),
|
||||||
|
* PERFECT will be used instead. */
|
||||||
|
|
||||||
|
TapNoteScore maxPossibleTapScore = PREFSMAN->m_bMarvelousTiming ? TNS_MARVELOUS : TNS_PERFECT;
|
||||||
|
|
||||||
|
return pNoteData->GetNumRowsWithTaps()*TapNoteScoreToDancePoints(maxPossibleTapScore)+
|
||||||
|
pNoteData->GetNumHoldNotes()*HoldNoteScoreToDancePoints(HNS_OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int ScoreKeeperMAX2::TapNoteScoreToDancePoints( TapNoteScore tns )
|
||||||
|
{
|
||||||
|
const bool bOni = GAMESTATE->IsCourseMode();
|
||||||
|
|
||||||
|
if(!PREFSMAN->m_bMarvelousTiming && tns == TNS_MARVELOUS)
|
||||||
|
tns = TNS_PERFECT;
|
||||||
|
|
||||||
|
switch( tns )
|
||||||
|
{
|
||||||
|
case TNS_MARVELOUS: return bOni ? +3 : +2;
|
||||||
|
case TNS_PERFECT: return +2;
|
||||||
|
case TNS_GREAT: return +1;
|
||||||
|
case TNS_GOOD: return +0;
|
||||||
|
case TNS_BOO: return bOni ? 0 : -4;
|
||||||
|
case TNS_MISS: return bOni ? 0 : -8;
|
||||||
|
case TNS_NONE: return 0;
|
||||||
|
default: ASSERT(0); return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int ScoreKeeperMAX2::HoldNoteScoreToDancePoints( HoldNoteScore hns )
|
||||||
|
{
|
||||||
|
switch( hns )
|
||||||
|
{
|
||||||
|
case HNS_OK: return +6;
|
||||||
|
case HNS_NG: return +0;
|
||||||
|
default: ASSERT(0); return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,8 +13,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "ScoreKeeper.h"
|
#include "ScoreKeeper.h"
|
||||||
#include "Notes.h"
|
|
||||||
#include "NoteDataWithScoring.h"
|
#include "NoteDataWithScoring.h"
|
||||||
|
struct Notes;
|
||||||
|
|
||||||
class ScoreKeeperMAX2: public ScoreKeeper
|
class ScoreKeeperMAX2: public ScoreKeeper
|
||||||
{
|
{
|
||||||
@@ -25,10 +25,14 @@ class ScoreKeeperMAX2: public ScoreKeeper
|
|||||||
void AddScore( TapNoteScore score );
|
void AddScore( TapNoteScore score );
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ScoreKeeperMAX2(Notes *notes, NoteDataWithScoring &data, PlayerNumber pn);
|
ScoreKeeperMAX2(Notes *notes, PlayerNumber pn);
|
||||||
|
|
||||||
void HandleTapRowScore( TapNoteScore scoreOfLastTap, int iNumTapsInRow );
|
void HandleTapRowScore( TapNoteScore scoreOfLastTap, int iNumTapsInRow );
|
||||||
void HandleHoldScore( HoldNoteScore holdScore, TapNoteScore tapScore );
|
void HandleHoldScore( HoldNoteScore holdScore, TapNoteScore tapScore );
|
||||||
|
|
||||||
|
int TapNoteScoreToDancePoints( TapNoteScore tns );
|
||||||
|
int HoldNoteScoreToDancePoints( HoldNoteScore hns );
|
||||||
|
int GetPossibleDancePoints( const NoteData* pNoteData );
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -267,7 +267,7 @@ ScreenEdit::ScreenEdit()
|
|||||||
|
|
||||||
NOTESKIN->SwitchNoteSkin( PLAYER_1, "default" ); // change noteskin back to default before loading player
|
NOTESKIN->SwitchNoteSkin( PLAYER_1, "default" ); // change noteskin back to default before loading player
|
||||||
|
|
||||||
m_Player.Load( PLAYER_1, ¬eData, NULL, NULL, NULL );
|
m_Player.Load( PLAYER_1, ¬eData, NULL, NULL, NULL, NULL );
|
||||||
m_Player.SetXY( PLAYER_X, PLAYER_Y );
|
m_Player.SetXY( PLAYER_X, PLAYER_Y );
|
||||||
|
|
||||||
m_Fade.SetClosed();
|
m_Fade.SetClosed();
|
||||||
@@ -336,7 +336,7 @@ bool ScreenEdit::PlayTicks() const
|
|||||||
bool bAnyoneHasANote = false; // set this to true if any player has a note at one of the indicies we crossed
|
bool bAnyoneHasANote = false; // set this to true if any player has a note at one of the indicies we crossed
|
||||||
|
|
||||||
for( int r=iRowLastCrossed+1; r<=iRowNow; r++ ) // for each index we crossed since the last update
|
for( int r=iRowLastCrossed+1; r<=iRowNow; r++ ) // for each index we crossed since the last update
|
||||||
bAnyoneHasANote |= m_Player.IsThereANoteAtRow( r );
|
bAnyoneHasANote |= m_Player.IsThereATapAtRow( r );
|
||||||
|
|
||||||
iRowLastCrossed = iRowNow;
|
iRowLastCrossed = iRowNow;
|
||||||
|
|
||||||
@@ -1400,7 +1400,7 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, int* iAnswers )
|
|||||||
|
|
||||||
m_EditMode = MODE_PLAYING;
|
m_EditMode = MODE_PLAYING;
|
||||||
|
|
||||||
m_Player.Load( PLAYER_1, (NoteData*)&m_NoteFieldEdit, NULL, NULL, NULL );
|
m_Player.Load( PLAYER_1, (NoteData*)&m_NoteFieldEdit, NULL, NULL, NULL, NULL );
|
||||||
|
|
||||||
m_rectRecordBack.StopTweening();
|
m_rectRecordBack.StopTweening();
|
||||||
m_rectRecordBack.BeginTweening( 0.5f );
|
m_rectRecordBack.BeginTweening( 0.5f );
|
||||||
|
|||||||
@@ -29,8 +29,8 @@
|
|||||||
#include "GrooveRadar.h"
|
#include "GrooveRadar.h"
|
||||||
#include "NotesLoaderSM.h"
|
#include "NotesLoaderSM.h"
|
||||||
#include "ThemeManager.h"
|
#include "ThemeManager.h"
|
||||||
|
|
||||||
#include "RageTimer.h"
|
#include "RageTimer.h"
|
||||||
|
#include "ScoreKeeperMAX2.h"
|
||||||
|
|
||||||
//
|
//
|
||||||
// Defines
|
// Defines
|
||||||
@@ -127,12 +127,23 @@ ScreenGameplay::ScreenGameplay( bool bDemonstration )
|
|||||||
{
|
{
|
||||||
m_pLifeMeter[p] = NULL;
|
m_pLifeMeter[p] = NULL;
|
||||||
m_pScoreDisplay[p] = NULL;
|
m_pScoreDisplay[p] = NULL;
|
||||||
|
m_pScoreKeeper[p] = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
GAMESTATE->m_CurStageStats = StageStats(); // clear values
|
GAMESTATE->m_CurStageStats = StageStats(); // clear values
|
||||||
|
|
||||||
|
|
||||||
|
int p;
|
||||||
|
for( p=0; p<NUM_PLAYERS; p++ )
|
||||||
|
{
|
||||||
|
if( !GAMESTATE->IsPlayerEnabled(p) )
|
||||||
|
continue; // skip
|
||||||
|
m_pScoreKeeper[p] = new ScoreKeeperMAX2(GAMESTATE->m_pCurNotes[p], (PlayerNumber)p);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Fill in m_CurStageStats
|
// Fill in m_CurStageStats
|
||||||
NoteData notedata;
|
NoteData notedata;
|
||||||
switch( GAMESTATE->m_PlayMode )
|
switch( GAMESTATE->m_PlayMode )
|
||||||
@@ -147,7 +158,8 @@ ScreenGameplay::ScreenGameplay( bool bDemonstration )
|
|||||||
continue; // skip
|
continue; // skip
|
||||||
GAMESTATE->m_CurStageStats.iMeter[p] = GAMESTATE->m_pCurNotes[p]->GetMeter();
|
GAMESTATE->m_CurStageStats.iMeter[p] = GAMESTATE->m_pCurNotes[p]->GetMeter();
|
||||||
GAMESTATE->m_pCurNotes[p]->GetNoteData( ¬edata );
|
GAMESTATE->m_pCurNotes[p]->GetNoteData( ¬edata );
|
||||||
GAMESTATE->m_CurStageStats.iPossibleDancePoints[p] = notedata.GetPossibleDancePoints();
|
// TODO: Make this more elegant
|
||||||
|
GAMESTATE->m_CurStageStats.iPossibleDancePoints[p] = m_pScoreKeeper[p]->GetPossibleDancePoints( ¬edata );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -164,7 +176,7 @@ ScreenGameplay::ScreenGameplay( bool bDemonstration )
|
|||||||
{
|
{
|
||||||
iTotalMeter += m_apCourseNotes[i]->GetMeter();
|
iTotalMeter += m_apCourseNotes[i]->GetMeter();
|
||||||
m_apCourseNotes[i]->GetNoteData( ¬edata );
|
m_apCourseNotes[i]->GetNoteData( ¬edata );
|
||||||
iTotalPossibleDancePoints += notedata.GetPossibleDancePoints();
|
iTotalPossibleDancePoints += m_pScoreKeeper[p]->GetPossibleDancePoints( ¬edata );
|
||||||
}
|
}
|
||||||
|
|
||||||
GAMESTATE->m_CurStageStats.pSong = NULL;
|
GAMESTATE->m_CurStageStats.pSong = NULL;
|
||||||
@@ -214,7 +226,6 @@ ScreenGameplay::ScreenGameplay( bool bDemonstration )
|
|||||||
m_Background.SetDiffuse( RageColor(0.4f,0.4f,0.4f,1) );
|
m_Background.SetDiffuse( RageColor(0.4f,0.4f,0.4f,1) );
|
||||||
this->AddChild( &m_Background );
|
this->AddChild( &m_Background );
|
||||||
|
|
||||||
int p;
|
|
||||||
for( p=0; p<NUM_PLAYERS; p++ )
|
for( p=0; p<NUM_PLAYERS; p++ )
|
||||||
{
|
{
|
||||||
if( !GAMESTATE->IsPlayerEnabled(PlayerNumber(p)) )
|
if( !GAMESTATE->IsPlayerEnabled(PlayerNumber(p)) )
|
||||||
@@ -510,6 +521,7 @@ ScreenGameplay::~ScreenGameplay()
|
|||||||
{
|
{
|
||||||
SAFE_DELETE( m_pLifeMeter[p] );
|
SAFE_DELETE( m_pLifeMeter[p] );
|
||||||
SAFE_DELETE( m_pScoreDisplay[p] );
|
SAFE_DELETE( m_pScoreDisplay[p] );
|
||||||
|
SAFE_DELETE( m_pScoreKeeper[p] );
|
||||||
}
|
}
|
||||||
|
|
||||||
m_soundMusic.StopPlaying();
|
m_soundMusic.StopPlaying();
|
||||||
@@ -608,7 +620,7 @@ void ScreenGameplay::LoadNextSong()
|
|||||||
NoteData pNewNoteData;
|
NoteData pNewNoteData;
|
||||||
pStyleDef->GetTransformedNoteDataForStyle( (PlayerNumber)p, &pOriginalNoteData, &pNewNoteData );
|
pStyleDef->GetTransformedNoteDataForStyle( (PlayerNumber)p, &pOriginalNoteData, &pNewNoteData );
|
||||||
|
|
||||||
m_Player[p].Load( (PlayerNumber)p, &pNewNoteData, m_pLifeMeter[p], m_pScoreDisplay[p], &m_Inventory );
|
m_Player[p].Load( (PlayerNumber)p, &pNewNoteData, m_pLifeMeter[p], m_pScoreDisplay[p], &m_Inventory, m_pScoreKeeper[p] );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set up song-specific graphics. */
|
/* Set up song-specific graphics. */
|
||||||
@@ -724,7 +736,7 @@ bool ScreenGameplay::IsTimeToPlayTicks() const
|
|||||||
if( !GAMESTATE->IsPlayerEnabled( (PlayerNumber)p ) )
|
if( !GAMESTATE->IsPlayerEnabled( (PlayerNumber)p ) )
|
||||||
continue; // skip
|
continue; // skip
|
||||||
|
|
||||||
bAnyoneHasANote |= m_Player[p].IsThereANoteAtRow( r );
|
bAnyoneHasANote |= m_Player[p].IsThereATapAtRow( r );
|
||||||
break; // this will only play the tick for the first player that is joined
|
break; // this will only play the tick for the first player that is joined
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -105,6 +105,7 @@ protected:
|
|||||||
|
|
||||||
Sprite m_sprScoreFrame;
|
Sprite m_sprScoreFrame;
|
||||||
ScoreDisplay* m_pScoreDisplay[NUM_PLAYERS];
|
ScoreDisplay* m_pScoreDisplay[NUM_PLAYERS];
|
||||||
|
ScoreKeeper* m_pScoreKeeper[NUM_PLAYERS];
|
||||||
BitmapText m_textPlayerOptions[NUM_PLAYERS];
|
BitmapText m_textPlayerOptions[NUM_PLAYERS];
|
||||||
BitmapText m_textSongOptions;
|
BitmapText m_textSongOptions;
|
||||||
|
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ LINK32=link.exe
|
|||||||
# SUBTRACT LINK32 /verbose /pdb:none
|
# SUBTRACT LINK32 /verbose /pdb:none
|
||||||
# Begin Special Build Tool
|
# Begin Special Build Tool
|
||||||
IntDir=.\../Release6
|
IntDir=.\../Release6
|
||||||
TargetDir=\temp\stepmania
|
TargetDir=\stepmania\stepmania
|
||||||
TargetName=StepMania
|
TargetName=StepMania
|
||||||
SOURCE="$(InputPath)"
|
SOURCE="$(InputPath)"
|
||||||
PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
|
PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
|
||||||
@@ -92,7 +92,7 @@ LINK32=link.exe
|
|||||||
# SUBTRACT LINK32 /verbose /profile /pdb:none /incremental:no /nodefaultlib
|
# SUBTRACT LINK32 /verbose /profile /pdb:none /incremental:no /nodefaultlib
|
||||||
# Begin Special Build Tool
|
# Begin Special Build Tool
|
||||||
IntDir=.\../Debug6
|
IntDir=.\../Debug6
|
||||||
TargetDir=\temp\stepmania
|
TargetDir=\stepmania\stepmania
|
||||||
TargetName=StepMania-debug
|
TargetName=StepMania-debug
|
||||||
SOURCE="$(InputPath)"
|
SOURCE="$(InputPath)"
|
||||||
PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
|
PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
|
||||||
|
|||||||
Reference in New Issue
Block a user