int ScoreKeeperNormal::HoldNoteScoreToGradePoints( HoldNoteScore hns, bool bBeginner ) { int iWeight = 0; switch( hns ) { DEFAULT_FAIL( hns ); case HNS_None: iWeight = 0; break; case HNS_LetGo: iWeight = g_iGradeWeight.GetValue(SE_LetGo); break; case HNS_Held: iWeight = g_iGradeWeight.GetValue(SE_Held); break; case HNS_Missed: iWeight = g_iGradeWeight.GetValue(SE_Missed); break; } if( bBeginner && PREFSMAN->m_bMercifulBeginner ) iWeight = max( 0, iWeight ); return iWeight; }
int ScoreKeeperNormal::TapNoteScoreToGradePoints( TapNoteScore tns, bool bBeginner ) { if( !GAMESTATE->ShowW1() && tns == TNS_W1 ) tns = TNS_W2; /* This is used for Oni percentage displays. Grading values are currently in * StageStats::GetGrade. */ int iWeight = 0; switch( tns ) { DEFAULT_FAIL( tns ); case TNS_None: iWeight = 0; break; case TNS_AvoidMine: iWeight = 0; break; case TNS_HitMine: iWeight = g_iGradeWeight.GetValue(SE_HitMine); break; case TNS_Miss: iWeight = g_iGradeWeight.GetValue(SE_Miss); break; case TNS_W5: iWeight = g_iGradeWeight.GetValue(SE_W5); break; case TNS_W4: iWeight = g_iGradeWeight.GetValue(SE_W4); break; case TNS_W3: iWeight = g_iGradeWeight.GetValue(SE_W3); break; case TNS_W2: iWeight = g_iGradeWeight.GetValue(SE_W2); break; case TNS_W1: iWeight = g_iGradeWeight.GetValue(SE_W1); break; case TNS_CheckpointHit: iWeight = g_iGradeWeight.GetValue(SE_CheckpointHit); break; case TNS_CheckpointMiss:iWeight = g_iGradeWeight.GetValue(SE_CheckpointMiss); break; } if( bBeginner && PREFSMAN->m_bMercifulBeginner ) iWeight = max( 0, iWeight ); return iWeight; }
void NoteField::CacheAllUsedNoteSkins() { // If we're in Routine mode, apply our per-player noteskins. if( GAMESTATE->GetCurrentStyle(m_pPlayerState->m_PlayerNumber)->m_StyleType == StyleType_TwoPlayersSharedSides ) { FOREACH_EnabledPlayer( pn ) GAMESTATE->ApplyStageModifiers( pn, ROUTINE_NOTESKIN.GetValue(pn) ); } /* Cache all note skins that we might need for the whole song, course or battle * play, so we don't have to load them later (such as between course songs). */ vector<RString> asSkinsLower; GAMESTATE->GetAllUsedNoteSkins( asSkinsLower ); asSkinsLower.push_back( m_pPlayerState->m_PlayerOptions.GetStage().m_sNoteSkin ); FOREACH( RString, asSkinsLower, s ) { NOTESKIN->ValidateNoteSkinName(*s); s->MakeLower(); }
int ScoreKeeperNormal::GetPossibleGradePoints( NoteData* nd, const TimingData* td, float fSongSeconds ) { /* Note: if W1 timing is disabled or not active (not course mode), * W2 will be used instead. */ // XXX: That's not actually implemented! RadarValues radars; NoteDataUtil::CalculateRadarValues( *nd, fSongSeconds, radars ); int ret = 0; ret += int(radars[RadarCategory_TapsAndHolds]) * TapNoteScoreToGradePoints(TNS_W1, false); if( GAMESTATE->GetCurrentGame()->m_bTickHolds ) ret += NoteDataUtil::GetTotalHoldTicks( nd, td ) * g_iGradeWeight.GetValue(SE_CheckpointHit); ret += int(radars[RadarCategory_Holds]) * HoldNoteScoreToGradePoints(HNS_Held, false); ret += int(radars[RadarCategory_Rolls]) * HoldNoteScoreToGradePoints(HNS_Held, false); return ret; }