working on finishing checkpoint holds:

track checkpoints missed and hit
allow it to inlfuence the life meter
This commit is contained in:
Glenn Maynard
2007-04-06 23:25:32 +00:00
parent 8864c5b382
commit 8c36383c76
10 changed files with 114 additions and 71 deletions
+4
View File
@@ -21,6 +21,8 @@ static void TugMeterPercentChangeInit( size_t /*ScoreEvent*/ i, RString &sNameOu
case SE_W5: defaultValueOut = -0.010f; break; case SE_W5: defaultValueOut = -0.010f; break;
case SE_Miss: defaultValueOut = -0.020f; break; case SE_Miss: defaultValueOut = -0.020f; break;
case SE_HitMine: defaultValueOut = -0.040f; break; case SE_HitMine: defaultValueOut = -0.040f; break;
case SE_CheckpointHit: defaultValueOut = +0.002f; break;
case SE_CheckpointMiss: defaultValueOut = -0.002f; break;
case SE_Held: defaultValueOut = +0.008f; break; case SE_Held: defaultValueOut = +0.008f; break;
case SE_LetGo: defaultValueOut = -0.020f; break; case SE_LetGo: defaultValueOut = -0.020f; break;
} }
@@ -73,6 +75,8 @@ void CombinedLifeMeterTug::ChangeLife( PlayerNumber pn, TapNoteScore score )
case TNS_W5: fPercentToMove = g_fTugMeterPercentChange[SE_W5]; break; case TNS_W5: fPercentToMove = g_fTugMeterPercentChange[SE_W5]; break;
case TNS_Miss: fPercentToMove = g_fTugMeterPercentChange[SE_Miss]; break; case TNS_Miss: fPercentToMove = g_fTugMeterPercentChange[SE_Miss]; break;
case TNS_HitMine: fPercentToMove = g_fTugMeterPercentChange[SE_HitMine]; break; case TNS_HitMine: fPercentToMove = g_fTugMeterPercentChange[SE_HitMine]; break;
case TNS_CheckpointHit: fPercentToMove = g_fTugMeterPercentChange[SE_CheckpointHit]; break;
case TNS_CheckpointMiss:fPercentToMove = g_fTugMeterPercentChange[SE_CheckpointMiss]; break;
default: ASSERT(0); break; default: ASSERT(0); break;
} }
+6
View File
@@ -156,12 +156,14 @@ static const char *TapNoteScoreNames[] = {
"None", "None",
"HitMine", "HitMine",
"AvoidMine", "AvoidMine",
"CheckpointMiss",
"Miss", "Miss",
"W5", "W5",
"W4", "W4",
"W3", "W3",
"W2", "W2",
"W1", "W1",
"CheckpointHit",
}; };
XToString( TapNoteScore ); XToString( TapNoteScore );
LuaXType( TapNoteScore ); LuaXType( TapNoteScore );
@@ -171,6 +173,8 @@ TapNoteScore StringToTapNoteScore( const RString &s )
if ( s == "None" ) return TNS_None; if ( s == "None" ) return TNS_None;
else if( s == "HitMine" ) return TNS_HitMine; else if( s == "HitMine" ) return TNS_HitMine;
else if( s == "AvoidMine" ) return TNS_AvoidMine; else if( s == "AvoidMine" ) return TNS_AvoidMine;
else if( s == "CheckpointHit" ) return TNS_CheckpointHit;
else if( s == "CheckpointMiss" )return TNS_CheckpointMiss;
else if( s == "Miss" ) return TNS_Miss; else if( s == "Miss" ) return TNS_Miss;
else if( s == "W5" ) return TNS_W5; else if( s == "W5" ) return TNS_W5;
else if( s == "W4" ) return TNS_W4; else if( s == "W4" ) return TNS_W4;
@@ -227,6 +231,7 @@ static const char *TimingWindowNames[] = {
XToString( TimingWindow ); XToString( TimingWindow );
static const char *ScoreEventNames[] = { static const char *ScoreEventNames[] = {
"CheckpointHit",
"W1", "W1",
"W2", "W2",
"W3", "W3",
@@ -234,6 +239,7 @@ static const char *ScoreEventNames[] = {
"W5", "W5",
"Miss", "Miss",
"HitMine", "HitMine",
"CheckpointMiss",
"Held", "Held",
"LetGo", "LetGo",
}; };
+4
View File
@@ -135,12 +135,14 @@ enum TapNoteScore {
TNS_None, TNS_None,
TNS_HitMine, TNS_HitMine,
TNS_AvoidMine, TNS_AvoidMine,
TNS_CheckpointMiss,
TNS_Miss, TNS_Miss,
TNS_W5, TNS_W5,
TNS_W4, TNS_W4,
TNS_W3, TNS_W3,
TNS_W2, TNS_W2,
TNS_W1, TNS_W1,
TNS_CheckpointHit,
NUM_TapNoteScore, NUM_TapNoteScore,
TapNoteScore_Invalid, TapNoteScore_Invalid,
}; };
@@ -181,6 +183,7 @@ const RString& TimingWindowToString( TimingWindow tw );
enum ScoreEvent enum ScoreEvent
{ {
SE_CheckpointHit,
SE_W1, SE_W1,
SE_W2, SE_W2,
SE_W3, SE_W3,
@@ -188,6 +191,7 @@ enum ScoreEvent
SE_W5, SE_W5,
SE_Miss, SE_Miss,
SE_HitMine, SE_HitMine,
SE_CheckpointMiss,
SE_Held, SE_Held,
SE_LetGo, SE_LetGo,
NUM_ScoreEvent NUM_ScoreEvent
+4 -2
View File
@@ -135,9 +135,11 @@ void LifeMeterBar::ChangeLife( TapNoteScore score )
case TNS_Miss: fDeltaLife = m_fLifePercentChange.GetValue(SE_Miss); break; case TNS_Miss: fDeltaLife = m_fLifePercentChange.GetValue(SE_Miss); break;
case TNS_HitMine: fDeltaLife = m_fLifePercentChange.GetValue(SE_HitMine); break; case TNS_HitMine: fDeltaLife = m_fLifePercentChange.GetValue(SE_HitMine); break;
case TNS_None: fDeltaLife = m_fLifePercentChange.GetValue(SE_Miss); break; case TNS_None: fDeltaLife = m_fLifePercentChange.GetValue(SE_Miss); break;
case TNS_CheckpointHit: fDeltaLife = m_fLifePercentChange.GetValue(SE_CheckpointHit); break;
case TNS_CheckpointMiss:fDeltaLife = m_fLifePercentChange.GetValue(SE_CheckpointMiss); break;
} }
if( IsHot() && score < TNS_W4 ) if( IsHot() && fDeltaLife < 0 )
fDeltaLife = -0.10f; // make it take a while to get back to "hot" fDeltaLife = min( fDeltaLife, -0.10f ); // make it take a while to get back to "hot"
switch( GAMESTATE->m_SongOptions.GetSong().m_DrainType ) switch( GAMESTATE->m_SongOptions.GetSong().m_DrainType )
{ {
+19 -13
View File
@@ -20,22 +20,26 @@ static ThemeMetric<int> NUM_CHAMBERS ("LifeMeterTime","NumChambers");
static ThemeMetric<int> NUM_STRIPS ("LifeMeterTime","NumStrips"); static ThemeMetric<int> NUM_STRIPS ("LifeMeterTime","NumStrips");
static ThemeMetric<float> INITIAL_VALUE ("LifeMeterTime","InitialValue"); static ThemeMetric<float> INITIAL_VALUE ("LifeMeterTime","InitialValue");
static const float g_fTimeMeterSecondsChangeInit[] =
{
+0.0f, // SE_CheckpointHit
+0.1f, // SE_W1
+0.0f, // SE_W2
-0.5f, // SE_W3
-1.0f, // SE_W4
-2.0f, // SE_W5
-4.0f, // SE_Miss
-2.0f, // SE_HitMine
-0.0f, // SE_CheckpointMiss
-0.0f, // SE_Held
-4.0f, // SE_LetGo
};
COMPILE_ASSERT( ARRAYSIZE(g_fTimeMeterSecondsChangeInit) == NUM_ScoreEvent );
static void TimeMeterSecondsChangeInit( size_t /*ScoreEvent*/ i, RString &sNameOut, float &defaultValueOut ) static void TimeMeterSecondsChangeInit( size_t /*ScoreEvent*/ i, RString &sNameOut, float &defaultValueOut )
{ {
sNameOut = "TimeMeterSecondsChange" + ScoreEventToString( (ScoreEvent)i ); sNameOut = "TimeMeterSecondsChange" + ScoreEventToString( (ScoreEvent)i );
switch( i ) defaultValueOut = g_fTimeMeterSecondsChangeInit[i];
{
default: ASSERT(0);
case SE_W1: defaultValueOut = +0.1f; break;
case SE_W2: defaultValueOut = +0.0f; break;
case SE_W3: defaultValueOut = -0.5f; break;
case SE_W4: defaultValueOut = -1.0f; break;
case SE_W5: defaultValueOut = -2.0f; break;
case SE_Miss: defaultValueOut = -4.0f; break;
case SE_HitMine: defaultValueOut = -2.0f; break;
case SE_Held: defaultValueOut = -0.0f; break;
case SE_LetGo: defaultValueOut = -4.0f; break;
}
} }
static Preference1D<float> g_fTimeMeterSecondsChange( TimeMeterSecondsChangeInit, NUM_ScoreEvent ); static Preference1D<float> g_fTimeMeterSecondsChange( TimeMeterSecondsChangeInit, NUM_ScoreEvent );
@@ -125,6 +129,8 @@ void LifeMeterTime::ChangeLife( TapNoteScore tns )
case TNS_W5: fMeterChange = g_fTimeMeterSecondsChange[SE_W5]; break; case TNS_W5: fMeterChange = g_fTimeMeterSecondsChange[SE_W5]; break;
case TNS_Miss: fMeterChange = g_fTimeMeterSecondsChange[SE_Miss]; break; case TNS_Miss: fMeterChange = g_fTimeMeterSecondsChange[SE_Miss]; break;
case TNS_HitMine: fMeterChange = g_fTimeMeterSecondsChange[SE_HitMine]; break; case TNS_HitMine: fMeterChange = g_fTimeMeterSecondsChange[SE_HitMine]; break;
case TNS_CheckpointHit: fMeterChange = g_fTimeMeterSecondsChange[SE_CheckpointHit]; break;
case TNS_CheckpointMiss:fMeterChange = g_fTimeMeterSecondsChange[SE_CheckpointMiss]; break;
} }
float fOldLife = m_fLifeTotalLostSeconds; float fOldLife = m_fLifeTotalLostSeconds;
+13 -16
View File
@@ -2261,7 +2261,8 @@ void Player::CrossedRows( int iFirstRowCrossed, int iLastRowCrossed, const RageT
{ {
//LOG->Trace( "%d...", r ); //LOG->Trace( "%d...", r );
vector<int> viColsWithHold; vector<int> viColsWithHold;
bool bAllHoldsHeldThisRow = true; int iNumHoldsHeldThisRow = 0;
int iNumHoldsMissedThisRow = 0;
// start at r-1 so that we consider holds whose end rows are equal to the checkpoint row // start at r-1 so that we consider holds whose end rows are equal to the checkpoint row
NoteData::all_tracks_iterator iter = m_NoteData.GetTapNoteRangeAllTracks( r-1, r, NULL, true ); NoteData::all_tracks_iterator iter = m_NoteData.GetTapNoteRangeAllTracks( r-1, r, NULL, true );
@@ -2289,7 +2290,10 @@ void Player::CrossedRows( int iFirstRowCrossed, int iLastRowCrossed, const RageT
continue; continue;
viColsWithHold.push_back( iTrack ); viColsWithHold.push_back( iTrack );
bAllHoldsHeldThisRow &= tn.HoldResult.fLife > 0; if( tn.HoldResult.fLife > 0 )
++iNumHoldsHeldThisRow;
else
++iNumHoldsMissedThisRow;
} }
if( !viColsWithHold.empty() ) if( !viColsWithHold.empty() )
@@ -2298,21 +2302,14 @@ void Player::CrossedRows( int iFirstRowCrossed, int iLastRowCrossed, const RageT
const int iOldCombo = m_pPlayerStageStats ? m_pPlayerStageStats->m_iCurCombo : 0; const int iOldCombo = m_pPlayerStageStats ? m_pPlayerStageStats->m_iCurCombo : 0;
const int iOldMissCombo = m_pPlayerStageStats ? m_pPlayerStageStats->m_iCurMissCombo : 0; const int iOldMissCombo = m_pPlayerStageStats ? m_pPlayerStageStats->m_iCurMissCombo : 0;
if( m_pPlayerStageStats ) if( m_pPrimaryScoreKeeper )
{ m_pPrimaryScoreKeeper->HandleHoldCheckpointScore( m_NoteData, r, iNumHoldsHeldThisRow, iNumHoldsMissedThisRow );
if( bAllHoldsHeldThisRow ) if( m_pSecondaryScoreKeeper )
{ m_pSecondaryScoreKeeper->HandleHoldCheckpointScore( m_NoteData, r, iNumHoldsHeldThisRow, iNumHoldsMissedThisRow );
m_pPlayerStageStats->m_iCurCombo++;
m_pPlayerStageStats->m_iCurMissCombo = 0;
}
else
{
m_pPlayerStageStats->m_iCurCombo = 0;
m_pPlayerStageStats->m_iCurMissCombo++;
}
}
if( bAllHoldsHeldThisRow ) ChangeLife( iNumHoldsMissedThisRow == 0? TNS_CheckpointHit:TNS_CheckpointMiss );
if( iNumHoldsMissedThisRow == 0 )
{ {
FOREACH( int, viColsWithHold, i ) FOREACH( int, viColsWithHold, i )
{ {
+1
View File
@@ -56,6 +56,7 @@ public:
virtual void HandleTapRowScore( const NoteData &nd, int iRow ) = 0; virtual void HandleTapRowScore( const NoteData &nd, int iRow ) = 0;
virtual void HandleHoldScore( const TapNote &tn ) = 0; virtual void HandleHoldScore( const TapNote &tn ) = 0;
virtual void HandleHoldActiveSeconds( float fMusicSecondsHeld ) = 0; virtual void HandleHoldActiveSeconds( float fMusicSecondsHeld ) = 0;
virtual void HandleHoldCheckpointScore( const NoteData &nd, int iRow, int iNumHoldsHeldThisRow, int iNumHoldsMissedThisRow ) { }
virtual void HandleTapScoreNone() = 0; virtual void HandleTapScoreNone() = 0;
protected: protected:
+44 -27
View File
@@ -33,6 +33,8 @@ void PercentScoreWeightInit( size_t /*ScoreEvent*/ i, RString &sNameOut, int &de
case SE_W5: defaultValueOut = 0; break; case SE_W5: defaultValueOut = 0; break;
case SE_Miss: defaultValueOut = 0; break; case SE_Miss: defaultValueOut = 0; break;
case SE_HitMine: defaultValueOut = -2; break; case SE_HitMine: defaultValueOut = -2; break;
case SE_CheckpointHit: defaultValueOut = 0; break;
case SE_CheckpointMiss: defaultValueOut = 0; break;
case SE_Held: defaultValueOut = 3; break; case SE_Held: defaultValueOut = 3; break;
case SE_LetGo: defaultValueOut = 0; break; case SE_LetGo: defaultValueOut = 0; break;
} }
@@ -51,6 +53,8 @@ void GradeWeightInit( size_t /*ScoreEvent*/ i, RString &sNameOut, int &defaultVa
case SE_W5: defaultValueOut = -4; break; case SE_W5: defaultValueOut = -4; break;
case SE_Miss: defaultValueOut = -8; break; case SE_Miss: defaultValueOut = -8; break;
case SE_HitMine: defaultValueOut = -8; break; case SE_HitMine: defaultValueOut = -8; break;
case SE_CheckpointHit: defaultValueOut = 0; break;
case SE_CheckpointMiss: defaultValueOut = 0; break;
case SE_Held: defaultValueOut = 6; break; case SE_Held: defaultValueOut = 6; break;
case SE_LetGo: defaultValueOut = 0; break; case SE_LetGo: defaultValueOut = 0; break;
} }
@@ -432,6 +436,41 @@ void ScoreKeeperNormal::HandleTapScore( const TapNote &tn )
AddTapScore( tns ); AddTapScore( tns );
} }
void ScoreKeeperNormal::HandleHoldCheckpointScore( const NoteData &nd, int iRow, int iNumHoldsHeldThisRow, int iNumHoldsMissedThisRow )
{
HandleTapNoteScoreInternal( iNumHoldsMissedThisRow == 0? TNS_CheckpointHit:TNS_CheckpointMiss, TNS_CheckpointHit, iNumHoldsHeldThisRow+iNumHoldsMissedThisRow );
}
void ScoreKeeperNormal::HandleTapNoteScoreInternal( TapNoteScore tns, TapNoteScore maximum, int iNumTapsInRow )
{
// Update dance points.
if( !m_pPlayerStageStats->m_bFailed )
m_pPlayerStageStats->m_iActualDancePoints += TapNoteScoreToDancePoints( tns );
// update judged row totals
m_pPlayerStageStats->m_iTapNoteScores[tns] += 1;
// increment the current total possible dance score
m_pPlayerStageStats->m_iCurPossibleDancePoints += TapNoteScoreToDancePoints( maximum );
//
// Regular combo
//
const int iComboCountIfHit = m_ComboIsPerRow? 1: iNumTapsInRow;
if( tns >= m_MinScoreToMaintainCombo )
{
m_pPlayerStageStats->m_iCurMissCombo = 0;
if( tns >= m_MinScoreToContinueCombo )
m_pPlayerStageStats->m_iCurCombo += iComboCountIfHit;
}
else
{
m_pPlayerStageStats->m_iCurCombo = 0;
if( tns == TNS_Miss || tns == TNS_CheckpointMiss )
m_pPlayerStageStats->m_iCurMissCombo += iComboCountIfHit;
}
}
void ScoreKeeperNormal::HandleTapRowScore( const NoteData &nd, int iRow ) void ScoreKeeperNormal::HandleTapRowScore( const NoteData &nd, int iRow )
{ {
TapNoteScore scoreOfLastTap; TapNoteScore scoreOfLastTap;
@@ -442,33 +481,7 @@ void ScoreKeeperNormal::HandleTapRowScore( const NoteData &nd, int iRow )
if( iNumTapsInRow <= 0 ) if( iNumTapsInRow <= 0 )
return; return;
// Update dance points. HandleTapNoteScoreInternal( scoreOfLastTap, TNS_W1, iNumTapsInRow );
if( !m_pPlayerStageStats->m_bFailed )
m_pPlayerStageStats->m_iActualDancePoints += TapNoteScoreToDancePoints( scoreOfLastTap );
// update judged row totals
m_pPlayerStageStats->m_iTapNoteScores[scoreOfLastTap] += 1;
// increment the current total possible dance score
m_pPlayerStageStats->m_iCurPossibleDancePoints += TapNoteScoreToDancePoints( TNS_W1 );
//
// Regular combo
//
const int iComboCountIfHit = m_ComboIsPerRow? 1: iNumTapsInRow;
if( scoreOfLastTap >= m_MinScoreToMaintainCombo )
{
m_pPlayerStageStats->m_iCurMissCombo = 0;
if( scoreOfLastTap >= m_MinScoreToContinueCombo )
m_pPlayerStageStats->m_iCurCombo += iComboCountIfHit;
}
else
{
m_pPlayerStageStats->m_iCurCombo = 0;
if( scoreOfLastTap == TNS_Miss )
m_pPlayerStageStats->m_iCurMissCombo += iComboCountIfHit;
}
if( m_pPlayerState->m_PlayerNumber != PLAYER_INVALID ) if( m_pPlayerState->m_PlayerNumber != PLAYER_INVALID )
MESSAGEMAN->Broadcast( enum_add2(Message_CurrentComboChangedP1,m_pPlayerState->m_PlayerNumber) ); MESSAGEMAN->Broadcast( enum_add2(Message_CurrentComboChangedP1,m_pPlayerState->m_PlayerNumber) );
@@ -635,6 +648,8 @@ int ScoreKeeperNormal::TapNoteScoreToDancePoints( TapNoteScore tns, bool bBeginn
case TNS_W3: iWeight = g_iPercentScoreWeight[SE_W3]; break; case TNS_W3: iWeight = g_iPercentScoreWeight[SE_W3]; break;
case TNS_W2: iWeight = g_iPercentScoreWeight[SE_W2]; break; case TNS_W2: iWeight = g_iPercentScoreWeight[SE_W2]; break;
case TNS_W1: iWeight = g_iPercentScoreWeight[SE_W1]; break; case TNS_W1: iWeight = g_iPercentScoreWeight[SE_W1]; break;
case TNS_CheckpointHit: iWeight = g_iPercentScoreWeight[SE_CheckpointHit]; break;
case TNS_CheckpointMiss:iWeight = g_iPercentScoreWeight[SE_CheckpointMiss]; break;
} }
if( bBeginner && PREFSMAN->m_bMercifulBeginner ) if( bBeginner && PREFSMAN->m_bMercifulBeginner )
iWeight = max( 0, iWeight ); iWeight = max( 0, iWeight );
@@ -676,6 +691,8 @@ int ScoreKeeperNormal::TapNoteScoreToGradePoints( TapNoteScore tns, bool bBeginn
case TNS_W3: iWeight = g_iGradeWeight[SE_W3]; break; case TNS_W3: iWeight = g_iGradeWeight[SE_W3]; break;
case TNS_W2: iWeight = g_iGradeWeight[SE_W2]; break; case TNS_W2: iWeight = g_iGradeWeight[SE_W2]; break;
case TNS_W1: iWeight = g_iGradeWeight[SE_W1]; break; case TNS_W1: iWeight = g_iGradeWeight[SE_W1]; break;
case TNS_CheckpointHit: iWeight = g_iGradeWeight[SE_CheckpointHit]; break;
case TNS_CheckpointMiss:iWeight = g_iGradeWeight[SE_CheckpointMiss]; break;
} }
if( bBeginner && PREFSMAN->m_bMercifulBeginner ) if( bBeginner && PREFSMAN->m_bMercifulBeginner )
iWeight = max( 0, iWeight ); iWeight = max( 0, iWeight );
+3
View File
@@ -59,6 +59,9 @@ public:
void HandleTapRowScore( const NoteData &nd, int iRow ); void HandleTapRowScore( const NoteData &nd, int iRow );
void HandleHoldScore( const TapNote &tn ); void HandleHoldScore( const TapNote &tn );
void HandleHoldActiveSeconds( float fMusicSecondsHeld ) {}; void HandleHoldActiveSeconds( float fMusicSecondsHeld ) {};
void HandleHoldCheckpointScore( const NoteData &nd, int iRow, int iNumHoldsHeldThisRow, int iNumHoldsMissedThisRow );
void HandleTapNoteScoreInternal( TapNoteScore tns, TapNoteScore maximum, int iNumTapsInRow );
// This must be calculated using only cached radar values so that we can // This must be calculated using only cached radar values so that we can
// do it quickly. // do it quickly.
+16 -13
View File
@@ -13,23 +13,26 @@
ThemeMetric<float> ATTACK_DURATION_SECONDS ("ScoreKeeperRave","AttackDurationSeconds"); ThemeMetric<float> ATTACK_DURATION_SECONDS ("ScoreKeeperRave","AttackDurationSeconds");
static const float g_fSuperMeterPercentChangeInit[] =
{
+0.02f, // SE_CheckpointHit
+0.05f, // SE_W1
+0.04f, // SE_W2
+0.02f, // SE_W3
+0.00f, // SE_W4
+0.00f, // SE_W5
+0.20f, // SE_Miss
+0.40f, // SE_HitMine
-0.02f, // SE_CheckpointMiss
+0.04f, // SE_Held
-0.20f, // SE_LetGo
};
COMPILE_ASSERT( ARRAYSIZE(g_fSuperMeterPercentChangeInit) == NUM_ScoreEvent );
static void SuperMeterPercentChangeInit( size_t /*ScoreEvent*/ i, RString &sNameOut, float &defaultValueOut ) static void SuperMeterPercentChangeInit( size_t /*ScoreEvent*/ i, RString &sNameOut, float &defaultValueOut )
{ {
sNameOut = "SuperMeterPercentChange" + ScoreEventToString( (ScoreEvent)i ); sNameOut = "SuperMeterPercentChange" + ScoreEventToString( (ScoreEvent)i );
switch( i ) defaultValueOut = g_fSuperMeterPercentChangeInit[i];
{
default: ASSERT(0);
case SE_W1: defaultValueOut = +0.05f; break;
case SE_W2: defaultValueOut = +0.04f; break;
case SE_W3: defaultValueOut = +0.02f; break;
case SE_W4: defaultValueOut = +0.00f; break;
case SE_W5: defaultValueOut = -0.00f; break;
case SE_Miss: defaultValueOut = -0.20f; break;
case SE_HitMine: defaultValueOut = -0.40f; break;
case SE_Held: defaultValueOut = +0.04f; break;
case SE_LetGo: defaultValueOut = -0.20f; break;
}
} }
static Preference1D<float> g_fSuperMeterPercentChange( SuperMeterPercentChangeInit, NUM_ScoreEvent ); static Preference1D<float> g_fSuperMeterPercentChange( SuperMeterPercentChangeInit, NUM_ScoreEvent );