ScoreKeeperMAX2:
- Jumps count as 2 toward combo, but 1 toward judgement totals - Only Perfect or better increments combo in courses
This commit is contained in:
Binary file not shown.
|
After Width: | Height: | Size: 4.9 KiB |
+20
-111
@@ -11,10 +11,6 @@
|
||||
*/
|
||||
|
||||
#include "Combo.h"
|
||||
#include "PrefsManager.h"
|
||||
#include "ScreenManager.h"
|
||||
#include "ScreenGameplay.h"
|
||||
#include "GameState.h"
|
||||
#include "ThemeManager.h"
|
||||
|
||||
|
||||
@@ -51,14 +47,13 @@ Combo::Combo()
|
||||
PULSE_ZOOM.Refresh();
|
||||
C_TWEEN_SECONDS.Refresh();
|
||||
|
||||
Reset();
|
||||
|
||||
m_sprCombo.Load( THEME->GetPathTo("Graphics", "Combo label") );
|
||||
m_sprCombo.EnableShadow( true );
|
||||
m_sprCombo.StopAnimating();
|
||||
m_sprCombo.SetXY( LABEL_X, LABEL_Y );
|
||||
m_sprCombo.SetHorizAlign( (Actor::HorizAlign)(int)LABEL_HORIZ_ALIGN );
|
||||
m_sprCombo.SetVertAlign( (Actor::VertAlign)(int)LABEL_VERT_ALIGN );
|
||||
m_sprCombo.SetDiffuse( RageColor(1,1,1,0) ); // invisible
|
||||
this->AddChild( &m_sprCombo );
|
||||
|
||||
m_textComboNumber.LoadFromNumbers( THEME->GetPathTo("Numbers","Combo numbers") );
|
||||
@@ -66,117 +61,31 @@ Combo::Combo()
|
||||
m_textComboNumber.SetXY( NUMBER_X, NUMBER_Y );
|
||||
m_textComboNumber.SetHorizAlign( (Actor::HorizAlign)(int)NUMBER_HORIZ_ALIGN );
|
||||
m_textComboNumber.SetVertAlign( (Actor::VertAlign)(int)NUMBER_VERT_ALIGN );
|
||||
m_textComboNumber.SetDiffuse( RageColor(1,1,1,0) ); // invisible
|
||||
this->AddChild( &m_textComboNumber );
|
||||
}
|
||||
|
||||
void Combo::Reset()
|
||||
void Combo::SetCombo( int iCombo )
|
||||
{
|
||||
m_iCurCombo = m_iMaxCombo = m_iCurComboOfPerfects = 0;
|
||||
|
||||
m_textComboNumber.SetDiffuse( RageColor(1,1,1,0) ); // invisible
|
||||
m_sprCombo.SetDiffuse( RageColor(1,1,1,0) ); // invisible
|
||||
}
|
||||
|
||||
void Combo::SetScore( TapNoteScore score, int iNumNotesInThisRow, Inventory* pInventory )
|
||||
{
|
||||
#ifndef DEBUG
|
||||
if( PREFSMAN->m_bAutoPlay && !GAMESTATE->m_bDemonstrationOrJukebox ) // cheaters never prosper
|
||||
if( iCombo >= (int)SHOW_COMBO_AT )
|
||||
{
|
||||
m_iCurCombo = 0;
|
||||
m_iCurComboOfPerfects = 0;
|
||||
return;
|
||||
m_textComboNumber.SetDiffuse( RageColor(1,1,1,1) ); // visible
|
||||
m_sprCombo.SetDiffuse( RageColor(1,1,1,1) ); // visible
|
||||
|
||||
m_textComboNumber.SetText( ssprintf("%d", iCombo) );
|
||||
float fNumberZoom = SCALE(iCombo,0.f,(float)NUMBER_MAX_ZOOM_AT,(float)NUMBER_MIN_ZOOM,(float)NUMBER_MAX_ZOOM);
|
||||
CLAMP( fNumberZoom, (float)NUMBER_MIN_ZOOM, (float)NUMBER_MAX_ZOOM );
|
||||
m_textComboNumber.SetZoom( fNumberZoom * (float)PULSE_ZOOM );
|
||||
m_textComboNumber.BeginTweening( C_TWEEN_SECONDS );
|
||||
m_textComboNumber.SetTweenZoom( fNumberZoom );
|
||||
|
||||
m_sprCombo.SetZoom( PULSE_ZOOM );
|
||||
m_sprCombo.BeginTweening( C_TWEEN_SECONDS );
|
||||
m_sprCombo.SetTweenZoom( 1 );
|
||||
}
|
||||
#endif //DEBUG
|
||||
|
||||
// combo of marvelous/perfect
|
||||
switch( score )
|
||||
else
|
||||
{
|
||||
case TNS_MARVELOUS:
|
||||
case TNS_PERFECT:
|
||||
m_iCurComboOfPerfects += iNumNotesInThisRow;
|
||||
|
||||
if( m_iCurComboOfPerfects==250 && !GAMESTATE->m_bDemonstrationOrJukebox )
|
||||
SCREENMAN->SendMessageToTopScreen( SM_PlayToasty, 0 );
|
||||
break;
|
||||
default:
|
||||
m_iCurComboOfPerfects = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
// combo of marvelous/perfect/great
|
||||
switch( score )
|
||||
{
|
||||
case TNS_MARVELOUS:
|
||||
case TNS_PERFECT:
|
||||
case TNS_GREAT:
|
||||
{
|
||||
int iOldCombo = m_iCurCombo;
|
||||
|
||||
m_iCurCombo += iNumNotesInThisRow; // continue combo
|
||||
|
||||
#define CROSSED( i ) (iOldCombo<i && i<=m_iCurCombo)
|
||||
|
||||
if ( CROSSED(100) ) SCREENMAN->SendMessageToTopScreen( SM_100Combo, 0 );
|
||||
else if( CROSSED(200) ) SCREENMAN->SendMessageToTopScreen( SM_200Combo, 0 );
|
||||
else if( CROSSED(300) ) SCREENMAN->SendMessageToTopScreen( SM_300Combo, 0 );
|
||||
else if( CROSSED(400) ) SCREENMAN->SendMessageToTopScreen( SM_400Combo, 0 );
|
||||
else if( CROSSED(500) ) SCREENMAN->SendMessageToTopScreen( SM_500Combo, 0 );
|
||||
else if( CROSSED(600) ) SCREENMAN->SendMessageToTopScreen( SM_600Combo, 0 );
|
||||
else if( CROSSED(700) ) SCREENMAN->SendMessageToTopScreen( SM_700Combo, 0 );
|
||||
else if( CROSSED(800) ) SCREENMAN->SendMessageToTopScreen( SM_800Combo, 0 );
|
||||
else if( CROSSED(900) ) SCREENMAN->SendMessageToTopScreen( SM_900Combo, 0 );
|
||||
else if( CROSSED(1000)) SCREENMAN->SendMessageToTopScreen( SM_1000Combo, 0 );
|
||||
|
||||
// new max combo
|
||||
m_iMaxCombo = max(m_iMaxCombo, m_iCurCombo);
|
||||
|
||||
|
||||
if( m_iCurCombo >= (int)SHOW_COMBO_AT )
|
||||
{
|
||||
m_textComboNumber.SetDiffuse( RageColor(1,1,1,1) ); // visible
|
||||
m_sprCombo.SetDiffuse( RageColor(1,1,1,1) ); // visible
|
||||
|
||||
m_textComboNumber.SetText( ssprintf("%d", m_iCurCombo) );
|
||||
float fNumberZoom = SCALE(m_iCurCombo,0.f,(float)NUMBER_MAX_ZOOM_AT,(float)NUMBER_MIN_ZOOM,(float)NUMBER_MAX_ZOOM);
|
||||
CLAMP( fNumberZoom, (float)NUMBER_MIN_ZOOM, (float)NUMBER_MAX_ZOOM );
|
||||
m_textComboNumber.SetZoom( fNumberZoom * (float)PULSE_ZOOM );
|
||||
m_textComboNumber.BeginTweening( C_TWEEN_SECONDS );
|
||||
m_textComboNumber.SetTweenZoom( fNumberZoom );
|
||||
|
||||
m_sprCombo.SetZoom( PULSE_ZOOM );
|
||||
m_sprCombo.BeginTweening( C_TWEEN_SECONDS );
|
||||
m_sprCombo.SetTweenZoom( 1 );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_textComboNumber.SetDiffuse( RageColor(1,1,1,0) ); // invisible
|
||||
m_sprCombo.SetDiffuse( RageColor(1,1,1,0) ); // invisible
|
||||
}
|
||||
|
||||
}
|
||||
break;
|
||||
case TNS_GOOD:
|
||||
case TNS_BOO:
|
||||
case TNS_MISS:
|
||||
{
|
||||
// don't play "combo stopped" in battle
|
||||
switch( GAMESTATE->m_PlayMode )
|
||||
{
|
||||
case PLAY_MODE_BATTLE:
|
||||
if( pInventory )
|
||||
pInventory->OnComboBroken( m_PlayerNumber, m_iCurCombo );
|
||||
default:
|
||||
if( m_iCurCombo>50 )
|
||||
SCREENMAN->SendMessageToTopScreen( SM_ComboStopped, 0 );
|
||||
}
|
||||
|
||||
m_iCurCombo = 0;
|
||||
|
||||
m_textComboNumber.SetDiffuse( RageColor(1,1,1,0) ); // invisible
|
||||
m_sprCombo.SetDiffuse( RageColor(1,1,1,0) ); // invisible
|
||||
}
|
||||
break;
|
||||
default:
|
||||
ASSERT(0);
|
||||
m_textComboNumber.SetDiffuse( RageColor(1,1,1,0) ); // invisible
|
||||
m_sprCombo.SetDiffuse( RageColor(1,1,1,0) ); // invisible
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,19 +26,11 @@ public:
|
||||
|
||||
void Init( PlayerNumber pn ) { m_PlayerNumber = pn; }
|
||||
|
||||
void SetScore( TapNoteScore score, int iNumNotesInThisRow, Inventory* pInventory );
|
||||
|
||||
int GetCurrentCombo() const { return m_iCurCombo; }
|
||||
int GetMaxCombo() const { return m_iMaxCombo; }
|
||||
void Reset();
|
||||
void SetCombo( int iCombo );
|
||||
|
||||
protected:
|
||||
PlayerNumber m_PlayerNumber;
|
||||
|
||||
int m_iCurCombo;
|
||||
int m_iMaxCombo;
|
||||
int m_iCurComboOfPerfects;
|
||||
|
||||
Sprite m_sprCombo;
|
||||
BitmapText m_textComboNumber;
|
||||
};
|
||||
|
||||
@@ -61,11 +61,6 @@ Player::Player()
|
||||
this->AddChild( &m_HoldJudgment[c] );
|
||||
}
|
||||
|
||||
int Player::GetPlayersMaxCombo()
|
||||
{
|
||||
return( m_Combo.GetMaxCombo() );
|
||||
}
|
||||
|
||||
Player::~Player()
|
||||
{
|
||||
}
|
||||
@@ -490,7 +485,10 @@ void Player::OnRowDestroyed( TapNoteScore lastScore, int iIndexThatWasSteppedOn
|
||||
case TNS_GREAT:
|
||||
case TNS_PERFECT:
|
||||
case TNS_MARVELOUS:
|
||||
m_GhostArrowRow.TapNote( c, score, m_Combo.GetCurrentCombo()>(int)BRIGHT_GHOST_COMBO_THRESHOLD);
|
||||
{
|
||||
bool bBright = GAMESTATE->m_CurStageStats.iCurCombo[m_PlayerNumber]>(int)BRIGHT_GHOST_COMBO_THRESHOLD;
|
||||
m_GhostArrowRow.TapNote( c, score, bBright );
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -499,8 +497,7 @@ void Player::OnRowDestroyed( TapNoteScore lastScore, int iIndexThatWasSteppedOn
|
||||
if( iNumNotesInThisRow > 0 )
|
||||
{
|
||||
HandleTapRowScore( score, iNumNotesInThisRow ); // update score
|
||||
m_Combo.SetScore( score, iNumNotesInThisRow, m_pInventory );
|
||||
GAMESTATE->m_CurStageStats.iMaxCombo[m_PlayerNumber] = max( GAMESTATE->m_CurStageStats.iMaxCombo[m_PlayerNumber], m_Combo.GetCurrentCombo() );
|
||||
m_Combo.SetCombo( GAMESTATE->m_CurStageStats.iCurCombo[m_PlayerNumber] );
|
||||
}
|
||||
|
||||
m_Judgment.SetJudgment( score );
|
||||
@@ -541,7 +538,7 @@ int Player::UpdateTapNotesMissedOlderThan( float fMissIfOlderThanSeconds )
|
||||
if( iNumMissesThisRow > 0 )
|
||||
{
|
||||
HandleTapRowScore( TNS_MISS, iNumMissesThisRow );
|
||||
m_Combo.SetScore( TNS_MISS, iNumMissesThisRow, m_pInventory );
|
||||
m_Combo.SetCombo( GAMESTATE->m_CurStageStats.iCurCombo[m_PlayerNumber] );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -580,7 +577,7 @@ void Player::HandleTapRowScore( TapNoteScore scoreOfLastTap, int iNumTapsInRow )
|
||||
#endif //DEBUG
|
||||
|
||||
if(m_pScoreKeeper)
|
||||
m_pScoreKeeper->HandleTapRowScore(scoreOfLastTap, iNumTapsInRow);
|
||||
m_pScoreKeeper->HandleTapRowScore(scoreOfLastTap, iNumTapsInRow, m_pInventory);
|
||||
|
||||
if (m_pScore)
|
||||
m_pScore->SetScore(GAMESTATE->m_CurStageStats.fScore[m_PlayerNumber]);
|
||||
|
||||
@@ -48,7 +48,6 @@ public:
|
||||
void Load( PlayerNumber player_no, NoteData* pNoteData, LifeMeter* pLM, ScoreDisplay* pScore, Inventory* pInventory, ScoreKeeper* pScoreKeeper );
|
||||
void CrossedRow( int iNoteRow );
|
||||
void Step( int col );
|
||||
int GetPlayersMaxCombo();
|
||||
|
||||
void FadeToFail();
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ ScoreDisplayOni::ScoreDisplayOni()
|
||||
LOG->Trace( "ScoreDisplayOni::ScoreDisplayOni()" );
|
||||
|
||||
// init the text
|
||||
m_text.LoadFromNumbers( THEME->GetPathTo("Numbers","gameplay score numbers") );
|
||||
m_text.LoadFromNumbers( THEME->GetPathTo("Numbers","ScoreDisplayOni numbers") );
|
||||
m_text.EnableShadow( false );
|
||||
this->AddChild( &m_text );
|
||||
}
|
||||
|
||||
@@ -22,6 +22,8 @@
|
||||
#include "PlayerNumber.h"
|
||||
#include "GameConstantsAndTypes.h" // for TapNoteScore and HoldNoteScore
|
||||
class NoteData;
|
||||
class Inventory;
|
||||
|
||||
|
||||
class ScoreKeeper: public Actor
|
||||
{
|
||||
@@ -38,7 +40,7 @@ public:
|
||||
ScoreKeeper(PlayerNumber pn) { m_PlayerNumber=pn; }
|
||||
virtual void DrawPrimitives() { }
|
||||
|
||||
virtual void HandleTapRowScore( TapNoteScore scoreOfLastTap, int iNumTapsInRow ) = 0;
|
||||
virtual void HandleTapRowScore( TapNoteScore scoreOfLastTap, int iNumTapsInRow, Inventory* pInventory ) = 0;
|
||||
virtual void HandleHoldScore( HoldNoteScore holdScore, TapNoteScore tapScore ) = 0;
|
||||
|
||||
virtual int TapNoteScoreToDancePoints( TapNoteScore tns ) = 0;
|
||||
|
||||
@@ -13,31 +13,43 @@
|
||||
#include "GameState.h"
|
||||
#include "PrefsManager.h"
|
||||
#include "Notes.h"
|
||||
#include "PrefsManager.h"
|
||||
#include "ScreenManager.h"
|
||||
#include "ScreenGameplay.h"
|
||||
#include "GameState.h"
|
||||
|
||||
|
||||
ScoreKeeperMAX2::ScoreKeeperMAX2(Notes *notes, PlayerNumber pn_):
|
||||
ScoreKeeper(pn_)
|
||||
{
|
||||
// Stats_DoublesCount = true;
|
||||
if( notes )
|
||||
{
|
||||
NoteData noteData;
|
||||
notes->GetNoteData( ¬eData );
|
||||
|
||||
NoteData noteData;
|
||||
notes->GetNoteData( ¬eData );
|
||||
int Meter = notes->GetMeter();
|
||||
Meter = min(Meter, 10);
|
||||
|
||||
int Meter = notes? notes->GetMeter() : 5;
|
||||
Meter = min(Meter, 10);
|
||||
int N = noteData.GetNumRowsWithTaps() + noteData.GetNumHoldNotes();
|
||||
|
||||
int sum = (N * (N + 1)) / 2;
|
||||
|
||||
int N = noteData.GetNumRowsWithTaps() + noteData.GetNumHoldNotes();
|
||||
|
||||
int sum = (N * (N + 1)) / 2;
|
||||
if(sum)
|
||||
m_fScoreMultiplier = float(Meter * 1000000) / sum;
|
||||
else /* avoid div/0 on empty songs */
|
||||
m_fScoreMultiplier = 0.f;
|
||||
|
||||
if(sum)
|
||||
m_fScoreMultiplier = float(Meter * 1000000) / sum;
|
||||
else /* avoid div/0 on empty songs */
|
||||
ASSERT(m_fScoreMultiplier >= 0.0);
|
||||
}
|
||||
else
|
||||
{
|
||||
ASSERT( GAMESTATE->IsCourseMode() );
|
||||
m_fScoreMultiplier = 0.f;
|
||||
|
||||
ASSERT(m_fScoreMultiplier >= 0.0);
|
||||
}
|
||||
|
||||
m_iTapNotesHit = 0;
|
||||
m_lScore = 0;
|
||||
m_iCurToastyCombo = 0;
|
||||
}
|
||||
|
||||
void ScoreKeeperMAX2::AddScore( TapNoteScore score )
|
||||
@@ -59,7 +71,7 @@ void ScoreKeeperMAX2::AddScore( TapNoteScore score )
|
||||
GAMESTATE->m_CurStageStats.fScore[m_PlayerNumber] = m_lScore * m_fScoreMultiplier;
|
||||
}
|
||||
|
||||
void ScoreKeeperMAX2::HandleTapRowScore( TapNoteScore scoreOfLastTap, int iNumTapsInRow )
|
||||
void ScoreKeeperMAX2::HandleTapRowScore( TapNoteScore scoreOfLastTap, int iNumTapsInRow, Inventory* pInventory )
|
||||
{
|
||||
ASSERT( iNumTapsInRow >= 1 );
|
||||
|
||||
@@ -106,6 +118,99 @@ void ScoreKeeperMAX2::HandleTapRowScore( TapNoteScore scoreOfLastTap, int iNumTa
|
||||
*/
|
||||
// for( int i=0; i<iNumTapsInRow; i++ )
|
||||
AddScore( scoreOfLastTap ); // only score once per row
|
||||
|
||||
|
||||
//
|
||||
// handle combo logic
|
||||
//
|
||||
#ifndef DEBUG
|
||||
if( PREFSMAN->m_bAutoPlay && !GAMESTATE->m_bDemonstrationOrJukebox ) // cheaters never prosper
|
||||
{
|
||||
m_iCurComboOfPerfects = 0;
|
||||
return;
|
||||
}
|
||||
#endif //DEBUG
|
||||
|
||||
// combo of marvelous/perfect
|
||||
switch( scoreOfLastTap )
|
||||
{
|
||||
case TNS_MARVELOUS:
|
||||
case TNS_PERFECT:
|
||||
m_iCurToastyCombo += iNumTapsInRow;
|
||||
|
||||
if( m_iCurToastyCombo==250 && !GAMESTATE->m_bDemonstrationOrJukebox )
|
||||
SCREENMAN->SendMessageToTopScreen( SM_PlayToasty, 0 );
|
||||
break;
|
||||
default:
|
||||
m_iCurToastyCombo = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
int &iCurCombo = GAMESTATE->m_CurStageStats.iCurCombo[m_PlayerNumber];
|
||||
|
||||
switch( scoreOfLastTap )
|
||||
{
|
||||
case TNS_MARVELOUS:
|
||||
case TNS_PERFECT:
|
||||
case TNS_GREAT:
|
||||
{
|
||||
int iOldCombo = iCurCombo;
|
||||
|
||||
if( GAMESTATE->IsCourseMode() )
|
||||
{
|
||||
switch( scoreOfLastTap )
|
||||
{
|
||||
case TNS_MARVELOUS:
|
||||
case TNS_PERFECT:
|
||||
iCurCombo += iNumTapsInRow;
|
||||
break;
|
||||
case TNS_GREAT:
|
||||
int aosid = 4;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
iCurCombo += iNumTapsInRow;
|
||||
|
||||
#define CROSSED( i ) (iOldCombo<i && i<=iCurCombo)
|
||||
|
||||
if ( CROSSED(100) ) SCREENMAN->SendMessageToTopScreen( SM_100Combo, 0 );
|
||||
else if( CROSSED(200) ) SCREENMAN->SendMessageToTopScreen( SM_200Combo, 0 );
|
||||
else if( CROSSED(300) ) SCREENMAN->SendMessageToTopScreen( SM_300Combo, 0 );
|
||||
else if( CROSSED(400) ) SCREENMAN->SendMessageToTopScreen( SM_400Combo, 0 );
|
||||
else if( CROSSED(500) ) SCREENMAN->SendMessageToTopScreen( SM_500Combo, 0 );
|
||||
else if( CROSSED(600) ) SCREENMAN->SendMessageToTopScreen( SM_600Combo, 0 );
|
||||
else if( CROSSED(700) ) SCREENMAN->SendMessageToTopScreen( SM_700Combo, 0 );
|
||||
else if( CROSSED(800) ) SCREENMAN->SendMessageToTopScreen( SM_800Combo, 0 );
|
||||
else if( CROSSED(900) ) SCREENMAN->SendMessageToTopScreen( SM_900Combo, 0 );
|
||||
else if( CROSSED(1000)) SCREENMAN->SendMessageToTopScreen( SM_1000Combo, 0 );
|
||||
|
||||
// new max combo
|
||||
GAMESTATE->m_CurStageStats.iMaxCombo[m_PlayerNumber] = max(GAMESTATE->m_CurStageStats.iMaxCombo[m_PlayerNumber], iCurCombo);
|
||||
}
|
||||
break;
|
||||
case TNS_GOOD:
|
||||
case TNS_BOO:
|
||||
case TNS_MISS:
|
||||
{
|
||||
// don't play "combo stopped" in battle
|
||||
switch( GAMESTATE->m_PlayMode )
|
||||
{
|
||||
case PLAY_MODE_BATTLE:
|
||||
if( pInventory )
|
||||
pInventory->OnComboBroken( m_PlayerNumber, iCurCombo );
|
||||
default:
|
||||
if( iCurCombo>50 )
|
||||
SCREENMAN->SendMessageToTopScreen( SM_ComboStopped, 0 );
|
||||
}
|
||||
|
||||
iCurCombo = 0;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
ASSERT(0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -22,12 +22,14 @@ class ScoreKeeperMAX2: public ScoreKeeper
|
||||
float m_fScoreMultiplier;
|
||||
int m_iTapNotesHit; // number of notes judged so far, needed by scoring
|
||||
|
||||
int m_iCurToastyCombo;
|
||||
|
||||
void AddScore( TapNoteScore score );
|
||||
|
||||
public:
|
||||
ScoreKeeperMAX2(Notes *notes, PlayerNumber pn);
|
||||
|
||||
void HandleTapRowScore( TapNoteScore scoreOfLastTap, int iNumTapsInRow );
|
||||
void HandleTapRowScore( TapNoteScore scoreOfLastTap, int iNumTapsInRow, Inventory* pInventory );
|
||||
void HandleHoldScore( HoldNoteScore holdScore, TapNoteScore tapScore );
|
||||
|
||||
int TapNoteScoreToDancePoints( TapNoteScore tns );
|
||||
|
||||
@@ -175,7 +175,7 @@ ScreenGameplay::ScreenGameplay( bool bDemonstration )
|
||||
{
|
||||
iTotalMeter += m_apCourseNotes[i]->GetMeter();
|
||||
m_apCourseNotes[i]->GetNoteData( ¬edata );
|
||||
iTotalPossibleDancePoints += m_pScoreKeeper[p]->GetPossibleDancePoints( ¬edata );
|
||||
iTotalPossibleDancePoints += m_pScoreKeeper[GAMESTATE->m_MasterPlayerNumber]->GetPossibleDancePoints( ¬edata );
|
||||
}
|
||||
|
||||
GAMESTATE->m_CurStageStats.pSong = NULL;
|
||||
@@ -346,7 +346,7 @@ ScreenGameplay::ScreenGameplay( bool bDemonstration )
|
||||
m_MaxCombo.LoadFromNumbers( THEME->GetPathTo("Numbers","ScreenGameplay max combo numbers") );
|
||||
m_MaxCombo.SetXY( MAXCOMBO_X, MAXCOMBO_Y );
|
||||
m_MaxCombo.SetZoom( MAXCOMBO_ZOOM );
|
||||
m_MaxCombo.SetText( ssprintf("%d", m_Player[GAMESTATE->m_MasterPlayerNumber].GetPlayersMaxCombo()) ); /* MAKE THIS WORK FOR BOTH PLAYERS! */
|
||||
m_MaxCombo.SetText( ssprintf("%d", GAMESTATE->m_CurStageStats.iCurCombo[GAMESTATE->m_MasterPlayerNumber]) ); /* TODO: Make this work for both players */
|
||||
this->AddChild( &m_MaxCombo );
|
||||
|
||||
for( p=0; p<NUM_PLAYERS; p++ )
|
||||
@@ -798,7 +798,7 @@ void ScreenGameplay::Update( float fDeltaTime )
|
||||
|
||||
|
||||
if( GAMESTATE->m_MasterPlayerNumber != PLAYER_INVALID )
|
||||
m_MaxCombo.SetText( ssprintf("%d", m_Player[GAMESTATE->m_MasterPlayerNumber].GetPlayersMaxCombo()) ); /* MAKE THIS WORK FOR BOTH PLAYERS! */
|
||||
m_MaxCombo.SetText( ssprintf("%d", GAMESTATE->m_CurStageStats.iCurCombo[GAMESTATE->m_MasterPlayerNumber]) ); /* MAKE THIS WORK FOR BOTH PLAYERS! */
|
||||
|
||||
|
||||
//LOG->Trace( "m_fOffsetInBeats = %f, m_fBeatsPerSecond = %f, m_Music.GetPositionSeconds = %f", m_fOffsetInBeats, m_fBeatsPerSecond, m_Music.GetPositionSeconds() );
|
||||
|
||||
@@ -121,7 +121,7 @@ ScreenSelectCourse::ScreenSelectCourse()
|
||||
m_sprOptionsMessage.SetXY( CENTER_X, CENTER_Y );
|
||||
m_sprOptionsMessage.SetZoomY( 0 );
|
||||
m_sprOptionsMessage.SetDiffuse( RageColor(1,1,1,0) );
|
||||
this->AddChild( &m_sprOptionsMessage );
|
||||
// this->AddChild( &m_sprOptionsMessage ); // draw and update manually
|
||||
|
||||
|
||||
m_soundSelect.Load( THEME->GetPathTo("Sounds","Common start") );
|
||||
@@ -151,6 +151,13 @@ void ScreenSelectCourse::DrawPrimitives()
|
||||
m_Menu.DrawBottomLayer();
|
||||
Screen::DrawPrimitives();
|
||||
m_Menu.DrawTopLayer();
|
||||
m_sprOptionsMessage.Draw();
|
||||
}
|
||||
|
||||
void ScreenSelectCourse::Update( float fDelta )
|
||||
{
|
||||
Screen::Update( fDelta );
|
||||
m_sprOptionsMessage.Update( fDelta );
|
||||
}
|
||||
|
||||
void ScreenSelectCourse::TweenOnScreen()
|
||||
@@ -338,16 +345,24 @@ void ScreenSelectCourse::MenuStart( PlayerNumber pn )
|
||||
|
||||
m_bMadeChoice = true;
|
||||
|
||||
float fShowSeconds = m_Menu.m_Out.GetLengthSeconds();
|
||||
|
||||
// show "hold START for options"
|
||||
m_sprOptionsMessage.SetDiffuse( RageColor(1,1,1,0) );
|
||||
m_sprOptionsMessage.BeginTweening( 0.25f ); // fade in
|
||||
m_sprOptionsMessage.BeginTweening( 0.15f ); // fade in
|
||||
m_sprOptionsMessage.SetTweenZoomY( 1 );
|
||||
m_sprOptionsMessage.SetTweenDiffuse( RageColor(1,1,1,1) );
|
||||
m_sprOptionsMessage.BeginTweening( 2.0f ); // sleep
|
||||
m_sprOptionsMessage.BeginTweening( 0.25f ); // fade out
|
||||
m_sprOptionsMessage.BeginTweening( fShowSeconds-0.35f ); // sleep
|
||||
m_sprOptionsMessage.BeginTweening( 0.15f ); // fade out
|
||||
m_sprOptionsMessage.SetTweenDiffuse( RageColor(1,1,1,0) );
|
||||
m_sprOptionsMessage.SetTweenZoomY( 0 );
|
||||
this->SendScreenMessage( SM_AllowOptionsMenuRepeat, 0.75f );
|
||||
|
||||
/* Don't accept a held START for a little while, so it's not
|
||||
* hit accidentally. Accept an initial START right away, though,
|
||||
* so we don't ignore deliberate fast presses (which would be
|
||||
* annoying). */
|
||||
this->SendScreenMessage( SM_AllowOptionsMenuRepeat, 0.5f );
|
||||
|
||||
|
||||
m_Menu.StartTransitioning( SM_GoToNextScreen );
|
||||
|
||||
|
||||
@@ -27,6 +27,7 @@ public:
|
||||
virtual ~ScreenSelectCourse();
|
||||
|
||||
virtual void DrawPrimitives();
|
||||
virtual void Update( float fDelta );
|
||||
|
||||
virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI );
|
||||
virtual void HandleScreenMessage( const ScreenMessage SM );
|
||||
|
||||
@@ -219,7 +219,7 @@ ScreenSelectMusic::ScreenSelectMusic()
|
||||
m_sprLongBalloon.SetEffectBob( 2, RageVector3(0,10,0) );
|
||||
this->AddChild( &m_sprLongBalloon );
|
||||
|
||||
m_sprOptionsMessage.Load( THEME->GetPathTo("Graphics","ScreenSelectMusic options") );
|
||||
m_sprOptionsMessage.Load( THEME->GetPathTo("Graphics","ScreenSelectMusic options message 1x2") );
|
||||
m_sprOptionsMessage.StopAnimating();
|
||||
m_sprOptionsMessage.SetXY( CENTER_X, CENTER_Y );
|
||||
m_sprOptionsMessage.SetZoom( 1 );
|
||||
@@ -228,7 +228,7 @@ ScreenSelectMusic::ScreenSelectMusic()
|
||||
|
||||
|
||||
m_soundSelect.Load( THEME->GetPathTo("Sounds","Common start") );
|
||||
m_soundChangeNotes.Load( THEME->GetPathTo("Sounds","ScreenSelectMusic notes") );
|
||||
m_soundChangeNotes.Load( THEME->GetPathTo("Sounds","ScreenSelectMusic difficulty") );
|
||||
m_soundOptionsChange.Load( THEME->GetPathTo("Sounds","ScreenSelectMusic options") );
|
||||
m_soundLocked.Load( THEME->GetPathTo("Sounds","ScreenSelectMusic locked") );
|
||||
|
||||
|
||||
@@ -37,6 +37,7 @@ void StageStats::operator+=( const StageStats& other )
|
||||
iTapNoteScores[p][t] += other.iTapNoteScores[p][t];
|
||||
for( int h=0; h<NUM_HOLD_NOTE_SCORES; h++ )
|
||||
iHoldNoteScores[p][h] += other.iHoldNoteScores[p][h];
|
||||
iCurCombo[p] += other.iCurCombo[p];
|
||||
iMaxCombo[p] += other.iMaxCombo[p];
|
||||
fScore[p] += other.fScore[p];
|
||||
for( int r=0; r<NUM_RADAR_CATEGORIES; r++ )
|
||||
|
||||
@@ -32,6 +32,7 @@ struct StageStats
|
||||
int iActualDancePoints[NUM_PLAYERS];
|
||||
int iTapNoteScores[NUM_PLAYERS][NUM_TAP_NOTE_SCORES];
|
||||
int iHoldNoteScores[NUM_PLAYERS][NUM_HOLD_NOTE_SCORES];
|
||||
int iCurCombo[NUM_PLAYERS];
|
||||
int iMaxCombo[NUM_PLAYERS];
|
||||
float fScore[NUM_PLAYERS];
|
||||
float fRadarPossible[NUM_PLAYERS][NUM_RADAR_CATEGORIES]; // filled in by ScreenGameplay on start of notes
|
||||
|
||||
@@ -215,10 +215,10 @@ try_element_again:
|
||||
* up resolving to the overridden background. */
|
||||
/* Use GetPathToOptional because we don't want report that there's an element
|
||||
* missing. Instead we want to report that the redirect is invalid. */
|
||||
CString sPath = GetPathToOptional(sAssetCategory, sNewFileName);
|
||||
CString sNewPath = GetPathToOptional(sAssetCategory, sNewFileName);
|
||||
|
||||
if( !sPath.empty() )
|
||||
return sPath;
|
||||
if( !sNewPath.empty() )
|
||||
return sNewPath;
|
||||
else
|
||||
{
|
||||
CString message = ssprintf(
|
||||
|
||||
Reference in New Issue
Block a user