diff --git a/stepmania/src/Player.cpp b/stepmania/src/Player.cpp index 09374223b7..a6064af3ab 100644 --- a/stepmania/src/Player.cpp +++ b/stepmania/src/Player.cpp @@ -130,6 +130,7 @@ 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" ); +ThemeMetric REQUIRE_STEP_ON_HOLD_HEADS ( "Player", "RequireStepOnHoldHeads" ); float Player::GetWindowSeconds( TimingWindow tw ) @@ -793,15 +794,22 @@ void Player::UpdateHoldNotes( int iSongRow, float fDeltaTime, vectorpTN; - TapNoteScore tns = tn.result.tns; + FOREACH( TrackRowTapNote, vTN, trtn ) + { + TapNote &tn = *trtn->pTN; + TapNoteScore tns = tn.result.tns; - // TODO: When using JUDGE_HOLD_NOTES_ON_SAME_ROW_TOGETHER, require that the whole row of - // taps was hit before activating this group of holds. - bSteppedOnTapNote &= tns != TNS_None && tns != TNS_Miss; // did they step on the start of this hold? + // TODO: When using JUDGE_HOLD_NOTES_ON_SAME_ROW_TOGETHER, require that the whole row of + // taps was hit before activating this group of holds. + bInitiatedNote &= tns != TNS_None && tns != TNS_Miss; // did they step on the start of this hold? + } + } + else + { + bInitiatedNote = true; } bool bIsHoldingButton = true; @@ -826,7 +834,7 @@ void Player::UpdateHoldNotes( int iSongRow, float fDeltaTime, vectorpTN; // set hold flag so NoteField can do intelligent drawing - tn.HoldResult.bHeld = bIsHoldingButton && bSteppedOnTapNote; - tn.HoldResult.bActive = bSteppedOnTapNote; + tn.HoldResult.bHeld = bIsHoldingButton && bInitiatedNote; + tn.HoldResult.bActive = bInitiatedNote; } - if( bSteppedOnTapNote && bIsHoldingButton ) + if( bInitiatedNote && bIsHoldingButton ) { // Increase life fLife = 1; @@ -872,7 +880,7 @@ void Player::UpdateHoldNotes( int iSongRow, float fDeltaTime, vectorpTN; tn.HoldResult.bHeld = true; - tn.HoldResult.bActive = bSteppedOnTapNote; + tn.HoldResult.bActive = bInitiatedNote; } // give positive life in Step(), not here. @@ -900,14 +908,14 @@ void Player::UpdateHoldNotes( int iSongRow, float fDeltaTime, vector= iMaxEndRow ) { - if( bSteppedOnTapNote && fLife > 0 ) + if( bInitiatedNote && fLife > 0 ) { fLife = 1; hns = HNS_Held;