diff --git a/stepmania/src/NoteField.cpp b/stepmania/src/NoteField.cpp index 83a96ef363..8e4a1ae99d 100644 --- a/stepmania/src/NoteField.cpp +++ b/stepmania/src/NoteField.cpp @@ -169,9 +169,19 @@ void NoteField::Update( float fDeltaTime ) cur->m_ReceptorArrowRow.Update( fDeltaTime ); cur->m_GhostArrowRow.Update( fDeltaTime ); + cur->m_ReceptorArrowRow.Update( fDeltaTime ); + if( m_fPercentFadeToFail >= 0 ) m_fPercentFadeToFail = min( m_fPercentFadeToFail + fDeltaTime/1.5f, 1 ); // take 1.5 seconds to totally fade + + // Update fade to failed + FOREACHM( CString, NoteDisplayCols*, m_NoteDisplays, iter ) + { + iter->second->m_ReceptorArrowRow.SetFadeToFailPercent( m_fPercentFadeToFail ); + } + + RefreshBeatToNoteSkin(); /* diff --git a/stepmania/src/PrefsManager.h b/stepmania/src/PrefsManager.h index d3fa9ec08a..5b84a6fb60 100644 --- a/stepmania/src/PrefsManager.h +++ b/stepmania/src/PrefsManager.h @@ -273,7 +273,7 @@ public: bool m_bSmoothLines; CString m_sSoundDrivers; int m_iSoundWriteAhead; - CString m_iSoundDevice; + CString m_iSoundDevice; float m_fSoundVolume; int m_iSoundResampleQuality; CString m_sInputDrivers; diff --git a/stepmania/src/ReceptorArrowRow.cpp b/stepmania/src/ReceptorArrowRow.cpp index a025ec10ae..9b00248b47 100644 --- a/stepmania/src/ReceptorArrowRow.cpp +++ b/stepmania/src/ReceptorArrowRow.cpp @@ -14,6 +14,9 @@ ReceptorArrowRow::ReceptorArrowRow() { m_iNumCols = 0; + m_pPlayerState = NULL; + m_fYReverseOffsetPixels = 0; + m_fFadeToFailPercent = 0; } void ReceptorArrowRow::Load( const PlayerState* pPlayerState, float fYReverseOffset ) @@ -37,7 +40,10 @@ void ReceptorArrowRow::Update( float fDeltaTime ) for( int c=0; cm_CurrentPlayerOptions.m_fDark ); + + // m_fDark==1 or m_fFadeToFailPercent==1 should make fBaseAlpha==0 + float fBaseAlpha = (1 - m_pPlayerState->m_CurrentPlayerOptions.m_fDark) * (1 - m_fFadeToFailPercent); + m_ReceptorArrow[c].SetBaseAlpha( fBaseAlpha ); // set arrow XYZ const float fX = ArrowEffects::GetXPos( m_pPlayerState, c, 0 ); diff --git a/stepmania/src/ReceptorArrowRow.h b/stepmania/src/ReceptorArrowRow.h index 9464c3c0cc..28800b4298 100644 --- a/stepmania/src/ReceptorArrowRow.h +++ b/stepmania/src/ReceptorArrowRow.h @@ -24,10 +24,13 @@ public: void Step( int iCol, TapNoteScore score ); void SetPressed( int iCol ); + void SetFadeToFailPercent( float fFadeToFailPercent ) { m_fFadeToFailPercent = fFadeToFailPercent; } + protected: int m_iNumCols; const PlayerState* m_pPlayerState; float m_fYReverseOffsetPixels; + float m_fFadeToFailPercent; ReceptorArrow m_ReceptorArrow[MAX_NOTE_TRACKS]; }; diff --git a/stepmania/src/ScreenGameplay.cpp b/stepmania/src/ScreenGameplay.cpp index e253c6e3f4..e627ec7ce9 100644 --- a/stepmania/src/ScreenGameplay.cpp +++ b/stepmania/src/ScreenGameplay.cpp @@ -1411,7 +1411,7 @@ void ScreenGameplay::Update( float fDeltaTime ) { case STATE_DANCING: /* Set STATSMAN->m_CurStageStats.bFailed for failed players. In, FAIL_IMMEDIATE, send - * SM_BeginFailed if all players failed, and kill dead Oni players. */ + * SM_BeginFailed if all players failed, and kill dead Oni players. */ FOREACH_EnabledPlayer( pn ) { SongOptions::FailType ft = GAMESTATE->GetPlayerFailType(pn); @@ -1436,8 +1436,18 @@ void ScreenGameplay::Update( float fDeltaTime ) LOG->Trace("Player %d failed", (int)pn); STATSMAN->m_CurStageStats.m_player[pn].bFailed = true; // fail - if( lt == SongOptions::LIFE_BATTERY && - ft == SongOptions::FAIL_IMMEDIATE ) + // + // Check for and do Oni die. + // + bool bAllowOniDie = false; + switch( lt ) + { + case SongOptions::LIFE_BATTERY: + case SongOptions::LIFE_TIME: + bAllowOniDie = true; + break; + } + if( bAllowOniDie && ft == SongOptions::FAIL_IMMEDIATE ) { if( !STATSMAN->m_CurStageStats.AllFailedEarlier() ) // if not the last one to fail {