diff --git a/stepmania/Themes/default/Graphics/ScreenSelectMusic options message 1x2.png b/stepmania/Themes/default/Graphics/ScreenSelectMusic options message 1x2.png new file mode 100644 index 0000000000..fc3d08b75e Binary files /dev/null and b/stepmania/Themes/default/Graphics/ScreenSelectMusic options message 1x2.png differ diff --git a/stepmania/src/Combo.cpp b/stepmania/src/Combo.cpp index 95ac680067..4c0e33c893 100644 --- a/stepmania/src/Combo.cpp +++ b/stepmania/src/Combo.cpp @@ -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 ) (iOldComboSendMessageToTopScreen( 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 } } diff --git a/stepmania/src/Combo.h b/stepmania/src/Combo.h index 1b82e20f48..9f709cd491 100644 --- a/stepmania/src/Combo.h +++ b/stepmania/src/Combo.h @@ -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; }; diff --git a/stepmania/src/Player.cpp b/stepmania/src/Player.cpp index f47a63c932..ea892caeb1 100644 --- a/stepmania/src/Player.cpp +++ b/stepmania/src/Player.cpp @@ -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]); diff --git a/stepmania/src/Player.h b/stepmania/src/Player.h index f55b2ea1a7..7e250b9f33 100644 --- a/stepmania/src/Player.h +++ b/stepmania/src/Player.h @@ -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(); diff --git a/stepmania/src/ScoreDisplayOni.cpp b/stepmania/src/ScoreDisplayOni.cpp index 94bb1a03d5..38ed621dd6 100644 --- a/stepmania/src/ScoreDisplayOni.cpp +++ b/stepmania/src/ScoreDisplayOni.cpp @@ -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 ); } diff --git a/stepmania/src/ScoreKeeper.h b/stepmania/src/ScoreKeeper.h index 7fd1136b1b..08828efd3b 100644 --- a/stepmania/src/ScoreKeeper.h +++ b/stepmania/src/ScoreKeeper.h @@ -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; diff --git a/stepmania/src/ScoreKeeperMAX2.cpp b/stepmania/src/ScoreKeeperMAX2.cpp index e957701d9c..8c2e210bcf 100644 --- a/stepmania/src/ScoreKeeperMAX2.cpp +++ b/stepmania/src/ScoreKeeperMAX2.cpp @@ -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; im_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 ) (iOldComboSendMessageToTopScreen( 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); + } } diff --git a/stepmania/src/ScoreKeeperMAX2.h b/stepmania/src/ScoreKeeperMAX2.h index aa2c355454..82382bc9ae 100644 --- a/stepmania/src/ScoreKeeperMAX2.h +++ b/stepmania/src/ScoreKeeperMAX2.h @@ -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 ); diff --git a/stepmania/src/ScreenGameplay.cpp b/stepmania/src/ScreenGameplay.cpp index d1172c65a3..523bcf3e74 100644 --- a/stepmania/src/ScreenGameplay.cpp +++ b/stepmania/src/ScreenGameplay.cpp @@ -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; pm_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() ); diff --git a/stepmania/src/ScreenSelectCourse.cpp b/stepmania/src/ScreenSelectCourse.cpp index f451b5f5a2..74e270a460 100644 --- a/stepmania/src/ScreenSelectCourse.cpp +++ b/stepmania/src/ScreenSelectCourse.cpp @@ -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 ); diff --git a/stepmania/src/ScreenSelectCourse.h b/stepmania/src/ScreenSelectCourse.h index 2f7d43bb49..a77b2cfcad 100644 --- a/stepmania/src/ScreenSelectCourse.h +++ b/stepmania/src/ScreenSelectCourse.h @@ -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 ); diff --git a/stepmania/src/ScreenSelectMusic.cpp b/stepmania/src/ScreenSelectMusic.cpp index 94f0772c0b..ee77cb7548 100644 --- a/stepmania/src/ScreenSelectMusic.cpp +++ b/stepmania/src/ScreenSelectMusic.cpp @@ -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") ); diff --git a/stepmania/src/StageStats.cpp b/stepmania/src/StageStats.cpp index 1ef6a15d59..c1dd37e779 100644 --- a/stepmania/src/StageStats.cpp +++ b/stepmania/src/StageStats.cpp @@ -37,6 +37,7 @@ void StageStats::operator+=( const StageStats& other ) iTapNoteScores[p][t] += other.iTapNoteScores[p][t]; for( int h=0; h