From 24353f67ad9cbb684d794d12624d31d0295d5663 Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Tue, 13 Mar 2007 07:07:47 +0000 Subject: [PATCH] add ImmediateHoldLetGo --- stepmania/Themes/default/metrics.ini | 1 + stepmania/src/Player.cpp | 36 ++++++++++++++++++---------- 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/stepmania/Themes/default/metrics.ini b/stepmania/Themes/default/metrics.ini index 1f1598c22d..8f44c5b497 100644 --- a/stepmania/Themes/default/metrics.ini +++ b/stepmania/Themes/default/metrics.ini @@ -2233,6 +2233,7 @@ HoldJudgmentsUnderField=false PenalizeTapScoreNone=false JudgeHoldNotesOnSameRowTogether=false HoldCheckpoints=false +ImmediateHoldLetGo=true [PlayerShared] Fallback="Player" diff --git a/stepmania/src/Player.cpp b/stepmania/src/Player.cpp index 24ea04c975..09374223b7 100644 --- a/stepmania/src/Player.cpp +++ b/stepmania/src/Player.cpp @@ -129,6 +129,7 @@ Preference g_fTimingWindowStrum ( "TimingWindowStrum", 0.1f ); // max ThemeMetric PENALIZE_TAP_SCORE_NONE ( "Player", "PenalizeTapScoreNone" ); ThemeMetric JUDGE_HOLD_NOTES_ON_SAME_ROW_TOGETHER ( "Player", "JudgeHoldNotesOnSameRowTogether" ); ThemeMetric HOLD_CHECKPOINTS ( "Player", "HoldCheckpoints" ); +ThemeMetric IMMEDIATE_HOLD_LET_GO ( "Player", "ImmediateHoldLetGo" ); float Player::GetWindowSeconds( TimingWindow tw ) @@ -896,23 +897,34 @@ void Player::UpdateHoldNotes( int iSongRow, float fDeltaTime, vector= iMaxEndRow && bSteppedOnTapNote && fLife > 0 ) // if this HoldNote is in the past + /* Why? If you never step on the head, then it will be left as HNS_None, which doesn't seem correct. */ + if( IMMEDIATE_HOLD_LET_GO ) { - fLife = 1; - hns = HNS_Held; - bool bBright = m_pPlayerStageStats && m_pPlayerStageStats->m_iCurCombo>(int)BRIGHT_GHOST_COMBO_THRESHOLD; - if( m_pNoteField ) + if( bSteppedOnTapNote && fLife == 0 ) // the player has not pressed the button for a long time! + hns = HNS_LetGo; + } + + // score hold notes that have passed + if( iSongRow >= iMaxEndRow ) + { + if( bSteppedOnTapNote && fLife > 0 ) { - FOREACH( TrackRowTapNote, vTN, trtn ) + fLife = 1; + hns = HNS_Held; + bool bBright = m_pPlayerStageStats && m_pPlayerStageStats->m_iCurCombo>(int)BRIGHT_GHOST_COMBO_THRESHOLD; + if( m_pNoteField ) { - int iTrack = trtn->iTrack; - m_pNoteField->DidHoldNote( iTrack, HNS_Held, bBright ); // bright ghost flash + FOREACH( TrackRowTapNote, vTN, trtn ) + { + int iTrack = trtn->iTrack; + m_pNoteField->DidHoldNote( iTrack, HNS_Held, bBright ); // bright ghost flash + } } } + else + { + hns = HNS_LetGo; + } } FOREACH( TrackRowTapNote, vTN, trtn )