naming cleanup: rename scoring "Tier1"s to "W1"s (short for "Window 1")
add Preference1D so that we can index into the grading and life values
This commit is contained in:
@@ -47,13 +47,13 @@ void CombinedLifeMeterTug::ChangeLife( PlayerNumber pn, TapNoteScore score )
|
||||
float fPercentToMove = 0;
|
||||
switch( score )
|
||||
{
|
||||
case TNS_Tier1: fPercentToMove = PREFSMAN->m_fTugMeterPercentChangeTier1; break;
|
||||
case TNS_Tier2: fPercentToMove = PREFSMAN->m_fTugMeterPercentChangeTier2; break;
|
||||
case TNS_Tier3: fPercentToMove = PREFSMAN->m_fTugMeterPercentChangeTier3; break;
|
||||
case TNS_Tier4: fPercentToMove = PREFSMAN->m_fTugMeterPercentChangeTier4; break;
|
||||
case TNS_Tier5: fPercentToMove = PREFSMAN->m_fTugMeterPercentChangeTier5; break;
|
||||
case TNS_Miss: fPercentToMove = PREFSMAN->m_fTugMeterPercentChangeMiss; break;
|
||||
case TNS_HitMine: fPercentToMove = PREFSMAN->m_fTugMeterPercentChangeHitMine; break;
|
||||
case TNS_W1: fPercentToMove = PREFSMAN->m_fTugMeterPercentChange.Get(SE_W1); break;
|
||||
case TNS_W2: fPercentToMove = PREFSMAN->m_fTugMeterPercentChange.Get(SE_W2); break;
|
||||
case TNS_W3: fPercentToMove = PREFSMAN->m_fTugMeterPercentChange.Get(SE_W3); break;
|
||||
case TNS_W4: fPercentToMove = PREFSMAN->m_fTugMeterPercentChange.Get(SE_W4); break;
|
||||
case TNS_W5: fPercentToMove = PREFSMAN->m_fTugMeterPercentChange.Get(SE_W5); break;
|
||||
case TNS_Miss: fPercentToMove = PREFSMAN->m_fTugMeterPercentChange.Get(SE_Miss); break;
|
||||
case TNS_HitMine: fPercentToMove = PREFSMAN->m_fTugMeterPercentChange.Get(SE_HitMine); break;
|
||||
default: ASSERT(0); break;
|
||||
}
|
||||
|
||||
@@ -62,16 +62,11 @@ void CombinedLifeMeterTug::ChangeLife( PlayerNumber pn, TapNoteScore score )
|
||||
|
||||
void CombinedLifeMeterTug::ChangeLife( PlayerNumber pn, HoldNoteScore score, TapNoteScore tscore )
|
||||
{
|
||||
/* The initial tap note score (which we happen to have in have in
|
||||
* tscore) has already been reported to the above function. If the
|
||||
* hold end result was an LetGo, count it as a miss; if the end result
|
||||
* was a Held, count a tier2. (Remember, this is just life meter
|
||||
* computation, not scoring.) */
|
||||
float fPercentToMove = 0;
|
||||
switch( score )
|
||||
{
|
||||
case HNS_Held: fPercentToMove = PREFSMAN->m_fTugMeterPercentChangeHeld; break;
|
||||
case HNS_LetGo: fPercentToMove = PREFSMAN->m_fTugMeterPercentChangeLetGo; break;
|
||||
case HNS_Held: fPercentToMove = PREFSMAN->m_fTugMeterPercentChange.Get(SE_Held); break;
|
||||
case HNS_LetGo: fPercentToMove = PREFSMAN->m_fTugMeterPercentChange.Get(SE_LetGo); break;
|
||||
default: ASSERT(0); break;
|
||||
}
|
||||
|
||||
|
||||
+12
-12
@@ -34,9 +34,9 @@ void Combo::Load( PlayerState *pPlayerState, PlayerStageStats *pPlayerStageStats
|
||||
NUMBER_MAX_ZOOM .Load(m_sName,"NumberMaxZoom");
|
||||
NUMBER_MAX_ZOOM_AT .Load(m_sName,"NumberMaxZoomAt");
|
||||
PULSE_COMMAND .Load(m_sName,"PulseCommand");
|
||||
FULL_COMBO_TIER3_COMMAND .Load(m_sName,"FullComboTier3Command");
|
||||
FULL_COMBO_TIER2_COMMAND .Load(m_sName,"FullComboTier2Command");
|
||||
FULL_COMBO_TIER1_COMMAND .Load(m_sName,"FullComboTier1Command");
|
||||
FULL_COMBO_W3_COMMAND .Load(m_sName,"FullComboW3Command");
|
||||
FULL_COMBO_W2_COMMAND .Load(m_sName,"FullComboW2Command");
|
||||
FULL_COMBO_W1_COMMAND .Load(m_sName,"FullComboW1Command");
|
||||
FULL_COMBO_BROKEN_COMMAND .Load(m_sName,"FullComboBrokenCommand");
|
||||
SHOW_MISS_COMBO .Load(m_sName,"ShowMissCombo");
|
||||
|
||||
@@ -126,20 +126,20 @@ void Combo::SetCombo( int iCombo, int iMisses )
|
||||
|
||||
if( bPastMidpoint )
|
||||
{
|
||||
if( m_pPlayerStageStats->FullComboOfScore(TNS_Tier1) )
|
||||
if( m_pPlayerStageStats->FullComboOfScore(TNS_W1) )
|
||||
{
|
||||
sprLabel->RunCommands( FULL_COMBO_TIER1_COMMAND );
|
||||
m_textNumber.RunCommands( FULL_COMBO_TIER1_COMMAND );
|
||||
sprLabel->RunCommands( FULL_COMBO_W1_COMMAND );
|
||||
m_textNumber.RunCommands( FULL_COMBO_W1_COMMAND );
|
||||
}
|
||||
else if( bPastMidpoint && m_pPlayerStageStats->FullComboOfScore(TNS_Tier2) )
|
||||
else if( bPastMidpoint && m_pPlayerStageStats->FullComboOfScore(TNS_W2) )
|
||||
{
|
||||
sprLabel->RunCommands( FULL_COMBO_TIER2_COMMAND );
|
||||
m_textNumber.RunCommands( FULL_COMBO_TIER2_COMMAND );
|
||||
sprLabel->RunCommands( FULL_COMBO_W2_COMMAND );
|
||||
m_textNumber.RunCommands( FULL_COMBO_W2_COMMAND );
|
||||
}
|
||||
else if( bPastMidpoint && m_pPlayerStageStats->FullComboOfScore(TNS_Tier3) )
|
||||
else if( bPastMidpoint && m_pPlayerStageStats->FullComboOfScore(TNS_W3) )
|
||||
{
|
||||
sprLabel->RunCommands( FULL_COMBO_TIER3_COMMAND );
|
||||
m_textNumber.RunCommands( FULL_COMBO_TIER3_COMMAND );
|
||||
sprLabel->RunCommands( FULL_COMBO_W3_COMMAND );
|
||||
m_textNumber.RunCommands( FULL_COMBO_W3_COMMAND );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -33,9 +33,9 @@ protected:
|
||||
ThemeMetric<float> NUMBER_MAX_ZOOM_AT;
|
||||
ThemeMetric<apActorCommands> PULSE_COMMAND;
|
||||
ThemeMetric<float> TWEEN_SECONDS;
|
||||
ThemeMetric<apActorCommands> FULL_COMBO_TIER3_COMMAND;
|
||||
ThemeMetric<apActorCommands> FULL_COMBO_TIER2_COMMAND;
|
||||
ThemeMetric<apActorCommands> FULL_COMBO_TIER1_COMMAND;
|
||||
ThemeMetric<apActorCommands> FULL_COMBO_W3_COMMAND;
|
||||
ThemeMetric<apActorCommands> FULL_COMBO_W2_COMMAND;
|
||||
ThemeMetric<apActorCommands> FULL_COMBO_W1_COMMAND;
|
||||
ThemeMetric<apActorCommands> FULL_COMBO_BROKEN_COMMAND;
|
||||
ThemeMetric<bool> SHOW_MISS_COMBO;
|
||||
|
||||
|
||||
@@ -105,11 +105,11 @@ TapNoteScore Game::MapTapNoteScore( TapNoteScore tns ) const
|
||||
{
|
||||
switch( tns )
|
||||
{
|
||||
case TNS_Tier1: return m_mapTier1To;
|
||||
case TNS_Tier2: return m_mapTier2To;
|
||||
case TNS_Tier3: return m_mapTier3To;
|
||||
case TNS_Tier4: return m_mapTier4To;
|
||||
case TNS_Tier5: return m_mapTier5To;
|
||||
case TNS_W1: return m_mapW1To;
|
||||
case TNS_W2: return m_mapW2To;
|
||||
case TNS_W3: return m_mapW3To;
|
||||
case TNS_W4: return m_mapW4To;
|
||||
case TNS_W5: return m_mapW5To;
|
||||
default: return tns;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,11 +57,11 @@ public:
|
||||
CString ColToButtonName( int col ) const; // looks up current style. Yuck.
|
||||
|
||||
TapNoteScore MapTapNoteScore( TapNoteScore tns ) const;
|
||||
TapNoteScore m_mapTier1To;
|
||||
TapNoteScore m_mapTier2To;
|
||||
TapNoteScore m_mapTier3To;
|
||||
TapNoteScore m_mapTier4To;
|
||||
TapNoteScore m_mapTier5To;
|
||||
TapNoteScore m_mapW1To;
|
||||
TapNoteScore m_mapW2To;
|
||||
TapNoteScore m_mapW3To;
|
||||
TapNoteScore m_mapW4To;
|
||||
TapNoteScore m_mapW5To;
|
||||
|
||||
//
|
||||
// Lua
|
||||
|
||||
@@ -175,32 +175,32 @@ static const CString TapNoteScoreNames[] = {
|
||||
"HitMine",
|
||||
"AvoidMine",
|
||||
"Miss",
|
||||
"Tier5",
|
||||
"Tier4",
|
||||
"Tier3",
|
||||
"Tier2",
|
||||
"Tier1",
|
||||
"W5",
|
||||
"W4",
|
||||
"W3",
|
||||
"W2",
|
||||
"W1",
|
||||
};
|
||||
XToString( TapNoteScore, NUM_TapNoteScore );
|
||||
TapNoteScore StringToTapNoteScore( const CString &s )
|
||||
{
|
||||
// for backward compatibility
|
||||
if ( s == "Boo" ) return TNS_Tier5;
|
||||
else if( s == "Good" ) return TNS_Tier4;
|
||||
else if( s == "Great" ) return TNS_Tier3;
|
||||
else if( s == "Perfect" ) return TNS_Tier2;
|
||||
else if( s == "Marvelous" ) return TNS_Tier1;
|
||||
|
||||
// new style
|
||||
else if( s == "None" ) return TNS_None;
|
||||
if ( s == "None" ) return TNS_None;
|
||||
else if( s == "HitMine" ) return TNS_HitMine;
|
||||
else if( s == "AvoidMine" ) return TNS_AvoidMine;
|
||||
else if( s == "Miss" ) return TNS_Miss;
|
||||
else if( s == "Tier5" ) return TNS_Tier5;
|
||||
else if( s == "Tier4" ) return TNS_Tier4;
|
||||
else if( s == "Tier3" ) return TNS_Tier3;
|
||||
else if( s == "Tier2" ) return TNS_Tier2;
|
||||
else if( s == "Tier1" ) return TNS_Tier1;
|
||||
else if( s == "W5" ) return TNS_W5;
|
||||
else if( s == "W4" ) return TNS_W4;
|
||||
else if( s == "W3" ) return TNS_W3;
|
||||
else if( s == "W2" ) return TNS_W2;
|
||||
else if( s == "W1" ) return TNS_W1;
|
||||
|
||||
// for backward compatibility
|
||||
else if( s == "Boo" ) return TNS_W5;
|
||||
else if( s == "Good" ) return TNS_W4;
|
||||
else if( s == "Great" ) return TNS_W3;
|
||||
else if( s == "Perfect" ) return TNS_W2;
|
||||
else if( s == "Marvelous" ) return TNS_W1;
|
||||
|
||||
return TNS_INVALID;
|
||||
}
|
||||
@@ -226,7 +226,7 @@ XToString( HoldNoteScore, NUM_HoldNoteScore );
|
||||
HoldNoteScore StringToHoldNoteScore( const CString &s )
|
||||
{
|
||||
// for backward compatibility
|
||||
if ( s == "LetGo" ) return HNS_LetGo;
|
||||
if ( s == "NG" ) return HNS_LetGo;
|
||||
else if( s == "OK" ) return HNS_Held;
|
||||
|
||||
// new style
|
||||
@@ -249,6 +249,34 @@ static void LuaHoldNoteScores( lua_State* L )
|
||||
REGISTER_WITH_LUA_FUNCTION( LuaHoldNoteScores );
|
||||
|
||||
|
||||
static const CString TimingWindowNames[] = {
|
||||
"W1",
|
||||
"W2",
|
||||
"W3",
|
||||
"W4",
|
||||
"W5",
|
||||
"Mine",
|
||||
"Attack",
|
||||
"Hold",
|
||||
"Roll",
|
||||
};
|
||||
XToString( TimingWindow, NUM_TimingWindow );
|
||||
|
||||
|
||||
static const CString ScoreEventNames[] = {
|
||||
"W1",
|
||||
"W2",
|
||||
"W3",
|
||||
"W4",
|
||||
"W5",
|
||||
"Miss",
|
||||
"HitMine",
|
||||
"Held",
|
||||
"LetGo",
|
||||
};
|
||||
XToString( ScoreEvent, NUM_ScoreEvent );
|
||||
|
||||
|
||||
static const CString MemoryCardStateNames[] = {
|
||||
"ready",
|
||||
"checking",
|
||||
@@ -261,16 +289,16 @@ XToString( MemoryCardState, NUM_MEMORY_CARD_STATES );
|
||||
|
||||
|
||||
static const CString PerDifficultyAwardNames[] = {
|
||||
"FullComboTier3",
|
||||
"SingleDigitTier3",
|
||||
"OneTier3",
|
||||
"FullComboTier2",
|
||||
"SingleDigitTier2",
|
||||
"OneTier2",
|
||||
"FullComboTier1",
|
||||
"Percent80Tier3",
|
||||
"Percent90Tier3",
|
||||
"Percent100Tier3",
|
||||
"FullComboW3",
|
||||
"SingleDigitW3",
|
||||
"OneW3",
|
||||
"FullComboW2",
|
||||
"SingleDigitW2",
|
||||
"OneW2",
|
||||
"FullComboW1",
|
||||
"Percent80W3",
|
||||
"Percent90W3",
|
||||
"Percent100W3",
|
||||
};
|
||||
XToString( PerDifficultyAward, NUM_PER_DIFFICULTY_AWARDS );
|
||||
XToThemedString( PerDifficultyAward, NUM_PER_DIFFICULTY_AWARDS );
|
||||
|
||||
@@ -93,7 +93,8 @@ PlayMode StringToPlayMode( const CString& s );
|
||||
|
||||
|
||||
|
||||
enum SortOrder {
|
||||
enum SortOrder
|
||||
{
|
||||
SORT_PREFERRED,
|
||||
SORT_GROUP,
|
||||
SORT_TITLE,
|
||||
@@ -131,11 +132,11 @@ enum TapNoteScore {
|
||||
TNS_HitMine,
|
||||
TNS_AvoidMine,
|
||||
TNS_Miss,
|
||||
TNS_Tier5,
|
||||
TNS_Tier4,
|
||||
TNS_Tier3,
|
||||
TNS_Tier2,
|
||||
TNS_Tier1,
|
||||
TNS_W5,
|
||||
TNS_W4,
|
||||
TNS_W3,
|
||||
TNS_W2,
|
||||
TNS_W1,
|
||||
NUM_TapNoteScore,
|
||||
TNS_INVALID,
|
||||
};
|
||||
@@ -156,22 +157,39 @@ enum HoldNoteScore
|
||||
#define FOREACH_HoldNoteScore( hns ) FOREACH_ENUM( HoldNoteScore, NUM_HoldNoteScore, hns )
|
||||
const CString& HoldNoteScoreToString( HoldNoteScore hns );
|
||||
const CString& HoldNoteScoreToThemedString( HoldNoteScore hns );
|
||||
|
||||
HoldNoteScore StringToHoldNoteScore( const CString& str );
|
||||
|
||||
|
||||
enum TimingWindow
|
||||
{
|
||||
TW_Tier1,
|
||||
TW_Tier2,
|
||||
TW_Tier3,
|
||||
TW_Tier4,
|
||||
TW_Tier5,
|
||||
TW_W1,
|
||||
TW_W2,
|
||||
TW_W3,
|
||||
TW_W4,
|
||||
TW_W5,
|
||||
TW_Mine,
|
||||
TW_Attack,
|
||||
TW_Held,
|
||||
TW_Roll
|
||||
TW_Hold,
|
||||
TW_Roll,
|
||||
NUM_TimingWindow
|
||||
};
|
||||
const CString& TimingWindowToString( TimingWindow i );
|
||||
|
||||
|
||||
enum ScoreEvent
|
||||
{
|
||||
SE_W1,
|
||||
SE_W2,
|
||||
SE_W3,
|
||||
SE_W4,
|
||||
SE_W5,
|
||||
SE_Miss,
|
||||
SE_HitMine,
|
||||
SE_Held,
|
||||
SE_LetGo,
|
||||
NUM_ScoreEvent
|
||||
};
|
||||
const CString& ScoreEventToString( ScoreEvent i );
|
||||
|
||||
|
||||
//
|
||||
@@ -307,16 +325,16 @@ const CString& PremiumToString( Premium p );
|
||||
|
||||
enum PerDifficultyAward
|
||||
{
|
||||
AWARD_FULL_COMBO_TIER3,
|
||||
AWARD_SINGLE_DIGIT_TIER3,
|
||||
AWARD_ONE_TIER3,
|
||||
AWARD_FULL_COMBO_TIER2,
|
||||
AWARD_SINGLE_DIGIT_TIER2,
|
||||
AWARD_ONE_TIER2,
|
||||
AWARD_FULL_COMBO_TIER1,
|
||||
AWARD_PERCENT_80_TIER3,
|
||||
AWARD_PERCENT_90_TIER3,
|
||||
AWARD_PERCENT_100_TIER3,
|
||||
AWARD_FULL_COMBO_W3,
|
||||
AWARD_SINGLE_DIGIT_W3,
|
||||
AWARD_ONE_W3,
|
||||
AWARD_FULL_COMBO_W2,
|
||||
AWARD_SINGLE_DIGIT_W2,
|
||||
AWARD_ONE_W2,
|
||||
AWARD_FULL_COMBO_W1,
|
||||
AWARD_PERCENT_80_W3,
|
||||
AWARD_PERCENT_90_W3,
|
||||
AWARD_PERCENT_100_W3,
|
||||
NUM_PER_DIFFICULTY_AWARDS,
|
||||
PER_DIFFICULTY_AWARD_INVALID,
|
||||
};
|
||||
|
||||
@@ -186,11 +186,11 @@ Game g_Games[NUM_GAMES] =
|
||||
NO_DEFAULT_KEY // DANCE_BUTTON_OPERATOR
|
||||
},
|
||||
},
|
||||
TNS_Tier1, // m_mapTier1To
|
||||
TNS_Tier2, // m_mapTier2To
|
||||
TNS_Tier3, // m_mapTier3To
|
||||
TNS_Tier4, // m_mapTier4To
|
||||
TNS_Tier5, // m_mapTier5To
|
||||
TNS_W1, // m_mapW1To
|
||||
TNS_W2, // m_mapW2To
|
||||
TNS_W3, // m_mapW3To
|
||||
TNS_W4, // m_mapW4To
|
||||
TNS_W5, // m_mapW5To
|
||||
},
|
||||
{ // GAME_PUMP
|
||||
"pump", // m_szName
|
||||
@@ -270,11 +270,11 @@ Game g_Games[NUM_GAMES] =
|
||||
NO_DEFAULT_KEY // PUMP_BUTTON_OPERATOR
|
||||
},
|
||||
},
|
||||
TNS_Tier1, // m_mapTier1To
|
||||
TNS_Tier2, // m_mapTier2To
|
||||
TNS_Tier3, // m_mapTier3To
|
||||
TNS_Tier4, // m_mapTier4To
|
||||
TNS_Tier5, // m_mapTier5To
|
||||
TNS_W1, // m_mapW1To
|
||||
TNS_W2, // m_mapW2To
|
||||
TNS_W3, // m_mapW3To
|
||||
TNS_W4, // m_mapW4To
|
||||
TNS_W5, // m_mapW5To
|
||||
},
|
||||
{
|
||||
"ez2", // m_szName
|
||||
@@ -360,11 +360,11 @@ Game g_Games[NUM_GAMES] =
|
||||
NO_DEFAULT_KEY // EZ2_BUTTON_OPERATOR
|
||||
},
|
||||
},
|
||||
TNS_Tier2, // m_mapTier1To
|
||||
TNS_Tier2, // m_mapTier2To
|
||||
TNS_Tier2, // m_mapTier3To
|
||||
TNS_Tier4, // m_mapTier4To
|
||||
TNS_Miss, // m_mapTier5To
|
||||
TNS_W2, // m_mapW1To
|
||||
TNS_W2, // m_mapW2To
|
||||
TNS_W2, // m_mapW3To
|
||||
TNS_W4, // m_mapW4To
|
||||
TNS_Miss, // m_mapW5To
|
||||
},
|
||||
{ // GAME_PARA
|
||||
"para", // m_szName
|
||||
@@ -444,11 +444,11 @@ Game g_Games[NUM_GAMES] =
|
||||
NO_DEFAULT_KEY // PARA_BUTTON_OPERATOR
|
||||
},
|
||||
},
|
||||
TNS_Tier1, // m_mapTier1To
|
||||
TNS_Tier2, // m_mapTier2To
|
||||
TNS_Tier3, // m_mapTier3To
|
||||
TNS_Tier4, // m_mapTier4To
|
||||
TNS_Tier5, // m_mapTier5To
|
||||
TNS_W1, // m_mapW1To
|
||||
TNS_W2, // m_mapW2To
|
||||
TNS_W3, // m_mapW3To
|
||||
TNS_W4, // m_mapW4To
|
||||
TNS_W5, // m_mapW5To
|
||||
},
|
||||
{ // GAME_DS3DDX
|
||||
"ds3ddx", // m_szName
|
||||
@@ -537,11 +537,11 @@ Game g_Games[NUM_GAMES] =
|
||||
NO_DEFAULT_KEY // DS3DDX_BUTTON_OPERATOR
|
||||
},
|
||||
},
|
||||
TNS_Tier1, // m_mapTier1To
|
||||
TNS_Tier2, // m_mapTier2To
|
||||
TNS_Tier3, // m_mapTier3To
|
||||
TNS_Tier4, // m_mapTier4To
|
||||
TNS_Tier5, // m_mapTier5To
|
||||
TNS_W1, // m_mapW1To
|
||||
TNS_W2, // m_mapW2To
|
||||
TNS_W3, // m_mapW3To
|
||||
TNS_W4, // m_mapW4To
|
||||
TNS_W5, // m_mapW5To
|
||||
},
|
||||
{ // GAME_BEAT
|
||||
"beat", // m_szName
|
||||
@@ -633,11 +633,11 @@ Game g_Games[NUM_GAMES] =
|
||||
NO_DEFAULT_KEY // BEAT_BUTTON_OPERATOR
|
||||
},
|
||||
},
|
||||
TNS_Tier1, // m_mapTier1To
|
||||
TNS_Tier2, // m_mapTier2To
|
||||
TNS_Tier3, // m_mapTier3To
|
||||
TNS_Tier4, // m_mapTier4To
|
||||
TNS_Tier5, // m_mapTier5To
|
||||
TNS_W1, // m_mapW1To
|
||||
TNS_W2, // m_mapW2To
|
||||
TNS_W3, // m_mapW3To
|
||||
TNS_W4, // m_mapW4To
|
||||
TNS_W5, // m_mapW5To
|
||||
},
|
||||
{ // GAME_MANIAX
|
||||
"maniax", // m_szName
|
||||
@@ -714,11 +714,11 @@ Game g_Games[NUM_GAMES] =
|
||||
NO_DEFAULT_KEY // MANIAX_BUTTON_OPERATOR
|
||||
},
|
||||
},
|
||||
TNS_Tier1, // m_mapTier1To
|
||||
TNS_Tier2, // m_mapTier2To
|
||||
TNS_Tier3, // m_mapTier3To
|
||||
TNS_Tier4, // m_mapTier4To
|
||||
TNS_Tier5, // m_mapTier5To
|
||||
TNS_W1, // m_mapW1To
|
||||
TNS_W2, // m_mapW2To
|
||||
TNS_W3, // m_mapW3To
|
||||
TNS_W4, // m_mapW4To
|
||||
TNS_W5, // m_mapW5To
|
||||
},
|
||||
{ // GAME_TECHNO
|
||||
"techno", // m_szName
|
||||
@@ -810,11 +810,11 @@ Game g_Games[NUM_GAMES] =
|
||||
NO_DEFAULT_KEY // TECHNO_BUTTON_OPERATOR
|
||||
},
|
||||
},
|
||||
TNS_Tier1, // m_mapTier1To
|
||||
TNS_Tier2, // m_mapTier2To
|
||||
TNS_Tier3, // m_mapTier3To
|
||||
TNS_Tier4, // m_mapTier4To
|
||||
TNS_Tier5, // m_mapTier5To
|
||||
TNS_W1, // m_mapW1To
|
||||
TNS_W2, // m_mapW2To
|
||||
TNS_W3, // m_mapW3To
|
||||
TNS_W4, // m_mapW4To
|
||||
TNS_W5, // m_mapW5To
|
||||
},
|
||||
{ // GAME_POPN
|
||||
"popn", // m_szName
|
||||
@@ -906,11 +906,11 @@ Game g_Games[NUM_GAMES] =
|
||||
NO_DEFAULT_KEY // BEAT_BUTTON_OPERATOR
|
||||
},
|
||||
},
|
||||
TNS_Tier2, // m_mapTier1To
|
||||
TNS_Tier2, // m_mapTier2To
|
||||
TNS_Tier3, // m_mapTier3To
|
||||
TNS_Tier3, // m_mapTier4To
|
||||
TNS_Miss, // m_mapTier5To
|
||||
TNS_W2, // m_mapW1To
|
||||
TNS_W2, // m_mapW2To
|
||||
TNS_W3, // m_mapW3To
|
||||
TNS_W3, // m_mapW4To
|
||||
TNS_Miss, // m_mapW5To
|
||||
},
|
||||
{ // GAME_LIGHTS
|
||||
"lights", // m_szName
|
||||
@@ -999,11 +999,11 @@ Game g_Games[NUM_GAMES] =
|
||||
NO_DEFAULT_KEY // LIGHTS_BUTTON_OPERATOR
|
||||
},
|
||||
},
|
||||
TNS_Tier1, // m_mapTier1To
|
||||
TNS_Tier2, // m_mapTier2To
|
||||
TNS_Tier3, // m_mapTier3To
|
||||
TNS_Tier4, // m_mapTier4To
|
||||
TNS_Tier5, // m_mapTier5To
|
||||
TNS_W1, // m_mapW1To
|
||||
TNS_W2, // m_mapW2To
|
||||
TNS_W3, // m_mapW3To
|
||||
TNS_W4, // m_mapW4To
|
||||
TNS_W5, // m_mapW5To
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@@ -1282,13 +1282,13 @@ SongOptions::FailType GameState::GetPlayerFailType( const PlayerState *pPlayerSt
|
||||
return ft;
|
||||
}
|
||||
|
||||
bool GameState::ShowTier1() const
|
||||
bool GameState::ShowW1() const
|
||||
{
|
||||
switch( PREFSMAN->m_Tier1Timing )
|
||||
switch( PREFSMAN->m_AllowW1 )
|
||||
{
|
||||
case PrefsManager::TIER1_NEVER: return false;
|
||||
case PrefsManager::TIER1_COURSES_ONLY: return IsCourseMode();
|
||||
case PrefsManager::TIER1_EVERYWHERE: return true;
|
||||
case PrefsManager::ALLOW_W1_NEVER: return false;
|
||||
case PrefsManager::ALLOW_W1_COURSES_ONLY: return IsCourseMode();
|
||||
case PrefsManager::ALLOW_W1_EVERYWHERE: return true;
|
||||
default: ASSERT(0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -100,7 +100,7 @@ public:
|
||||
bool IsCourseMode() const;
|
||||
bool IsBattleMode() const; /* not Rave */
|
||||
|
||||
bool ShowTier1() const;
|
||||
bool ShowW1() const;
|
||||
|
||||
CString m_sLoadingMessage; // used in loading screen
|
||||
BroadcastOnChange<CString> m_sPreferredSongGroup; // GROUP_ALL denotes no preferred group
|
||||
|
||||
+7
-10
@@ -40,8 +40,14 @@ Grade StringToGrade( const CString &sGrade )
|
||||
CString s = sGrade;
|
||||
s.MakeUpper();
|
||||
|
||||
// new style
|
||||
int iTier;
|
||||
if( sscanf(sGrade.c_str(),"Tier%02d",&iTier) == 1 ) return (Grade)(iTier-1);
|
||||
else if( s == "FAILED" ) return Grade_Failed;
|
||||
else if( s == "NODATA" ) return Grade_NoData;
|
||||
|
||||
// for backward compatibility
|
||||
if ( s == "AAAA" ) return Grade_Tier01;
|
||||
else if( s == "AAAA" ) return Grade_Tier01;
|
||||
else if( s == "AAA" ) return Grade_Tier02;
|
||||
else if( s == "AA" ) return Grade_Tier03;
|
||||
else if( s == "A" ) return Grade_Tier04;
|
||||
@@ -51,15 +57,6 @@ Grade StringToGrade( const CString &sGrade )
|
||||
else if( s == "E" ) return Grade_Failed;
|
||||
else if( s == "N" ) return Grade_NoData;
|
||||
|
||||
|
||||
// new style
|
||||
if ( s == "FAILED" ) return Grade_Failed;
|
||||
else if( s == "NODATA" ) return Grade_NoData;
|
||||
|
||||
int iTier;
|
||||
if( sscanf(sGrade.c_str(),"Tier%02d",&iTier) == 1 )
|
||||
return (Grade)(iTier-1);
|
||||
|
||||
LOG->Warn( "Invalid grade: %s", sGrade.c_str() );
|
||||
return Grade_NoData;
|
||||
};
|
||||
|
||||
+16
-16
@@ -6,12 +6,12 @@
|
||||
#include "ThemeManager.h"
|
||||
#include "ThemeMetric.h"
|
||||
|
||||
static ThemeMetric<apActorCommands> TIER1_COMMAND ("Judgment","Tier1Command");
|
||||
static ThemeMetric<apActorCommands> TIER2_COMMAND ("Judgment","Tier2Command");
|
||||
static ThemeMetric<apActorCommands> TIER3_COMMAND ("Judgment","Tier3Command");
|
||||
static ThemeMetric<apActorCommands> TIER4_COMMAND ("Judgment","Tier4Command");
|
||||
static ThemeMetric<apActorCommands> TIER5_COMMAND ("Judgment","Tier5Command");
|
||||
static ThemeMetric<apActorCommands> MISS_COMMAND ("Judgment","MissCommand");
|
||||
static ThemeMetric<apActorCommands> W1_COMMAND ("Judgment","W1Command");
|
||||
static ThemeMetric<apActorCommands> W2_COMMAND ("Judgment","W2Command");
|
||||
static ThemeMetric<apActorCommands> W3_COMMAND ("Judgment","W3Command");
|
||||
static ThemeMetric<apActorCommands> W4_COMMAND ("Judgment","W4Command");
|
||||
static ThemeMetric<apActorCommands> W5_COMMAND ("Judgment","W5Command");
|
||||
static ThemeMetric<apActorCommands> MISS_COMMAND ("Judgment","MissCommand");
|
||||
|
||||
Judgment::Judgment()
|
||||
{
|
||||
@@ -48,25 +48,25 @@ void Judgment::SetJudgment( TapNoteScore score, bool bEarly )
|
||||
|
||||
switch( score )
|
||||
{
|
||||
case TNS_Tier1:
|
||||
case TNS_W1:
|
||||
m_sprJudgment.SetState( 0 * iStateMult + iStateAdd );
|
||||
m_sprJudgment.RunCommands( TIER1_COMMAND );
|
||||
m_sprJudgment.RunCommands( W1_COMMAND );
|
||||
break;
|
||||
case TNS_Tier2:
|
||||
case TNS_W2:
|
||||
m_sprJudgment.SetState( 1 * iStateMult + iStateAdd );
|
||||
m_sprJudgment.RunCommands( TIER2_COMMAND );
|
||||
m_sprJudgment.RunCommands( W2_COMMAND );
|
||||
break;
|
||||
case TNS_Tier3:
|
||||
case TNS_W3:
|
||||
m_sprJudgment.SetState( 2 * iStateMult + iStateAdd );
|
||||
m_sprJudgment.RunCommands( TIER3_COMMAND );
|
||||
m_sprJudgment.RunCommands( W3_COMMAND );
|
||||
break;
|
||||
case TNS_Tier4:
|
||||
case TNS_W4:
|
||||
m_sprJudgment.SetState( 3 * iStateMult + iStateAdd );
|
||||
m_sprJudgment.RunCommands( TIER4_COMMAND );
|
||||
m_sprJudgment.RunCommands( W4_COMMAND );
|
||||
break;
|
||||
case TNS_Tier5:
|
||||
case TNS_W5:
|
||||
m_sprJudgment.SetState( 4 * iStateMult + iStateAdd );
|
||||
m_sprJudgment.RunCommands( TIER5_COMMAND );
|
||||
m_sprJudgment.RunCommands( W5_COMMAND );
|
||||
break;
|
||||
case TNS_Miss:
|
||||
m_sprJudgment.SetState( 5 * iStateMult + iStateAdd );
|
||||
|
||||
@@ -122,54 +122,35 @@ void LifeMeterBar::Load( const PlayerState *pPlayerState, PlayerStageStats *pPla
|
||||
void LifeMeterBar::ChangeLife( TapNoteScore score )
|
||||
{
|
||||
float fDeltaLife=0.f;
|
||||
switch( score )
|
||||
{
|
||||
default: ASSERT(0);
|
||||
case TNS_W1: fDeltaLife = PREFSMAN->m_fLifePercentChange.Get(SE_W1); break;
|
||||
case TNS_W2: fDeltaLife = PREFSMAN->m_fLifePercentChange.Get(SE_W2); break;
|
||||
case TNS_W3: fDeltaLife = PREFSMAN->m_fLifePercentChange.Get(SE_W3); break;
|
||||
case TNS_W4: fDeltaLife = PREFSMAN->m_fLifePercentChange.Get(SE_W4); break;
|
||||
case TNS_W5: fDeltaLife = PREFSMAN->m_fLifePercentChange.Get(SE_W5); break;
|
||||
case TNS_Miss: fDeltaLife = PREFSMAN->m_fLifePercentChange.Get(SE_Miss); break;
|
||||
case TNS_HitMine: fDeltaLife = PREFSMAN->m_fLifePercentChange.Get(SE_HitMine); break;
|
||||
}
|
||||
if( IsHot() && score < TNS_W4 )
|
||||
fDeltaLife = -0.10f; // make it take a while to get back to "hot"
|
||||
|
||||
switch( GAMESTATE->m_SongOptions.m_DrainType )
|
||||
{
|
||||
case SongOptions::DRAIN_NORMAL:
|
||||
switch( score )
|
||||
{
|
||||
case TNS_Tier1: fDeltaLife = PREFSMAN->m_fLifeDeltaPercentChangeTier1; break;
|
||||
case TNS_Tier2: fDeltaLife = PREFSMAN->m_fLifeDeltaPercentChangeTier2; break;
|
||||
case TNS_Tier3: fDeltaLife = PREFSMAN->m_fLifeDeltaPercentChangeTier3; break;
|
||||
case TNS_Tier4: fDeltaLife = PREFSMAN->m_fLifeDeltaPercentChangeTier4; break;
|
||||
case TNS_Tier5: fDeltaLife = PREFSMAN->m_fLifeDeltaPercentChangeTier5; break;
|
||||
case TNS_Miss: fDeltaLife = PREFSMAN->m_fLifeDeltaPercentChangeMiss; break;
|
||||
case TNS_HitMine: fDeltaLife = PREFSMAN->m_fLifeDeltaPercentChangeHitMine; break;
|
||||
default:
|
||||
ASSERT(0);
|
||||
}
|
||||
if( IsHot() && score < TNS_Tier4 )
|
||||
fDeltaLife = -0.10f; // make it take a while to get back to "hot"
|
||||
break;
|
||||
case SongOptions::DRAIN_NO_RECOVER:
|
||||
switch( score )
|
||||
{
|
||||
case TNS_Tier1: fDeltaLife = +0.000f; break;
|
||||
case TNS_Tier2: fDeltaLife = +0.000f; break;
|
||||
case TNS_Tier3: fDeltaLife = +0.000f; break;
|
||||
case TNS_Tier4: fDeltaLife = +0.000f; break;
|
||||
case TNS_Tier5: fDeltaLife = PREFSMAN->m_fLifeDeltaPercentChangeTier5; break;
|
||||
case TNS_Miss: fDeltaLife = PREFSMAN->m_fLifeDeltaPercentChangeMiss; break;
|
||||
case TNS_HitMine: fDeltaLife = PREFSMAN->m_fLifeDeltaPercentChangeHitMine; break;
|
||||
default:
|
||||
ASSERT(0);
|
||||
}
|
||||
break;
|
||||
case SongOptions::DRAIN_SUDDEN_DEATH:
|
||||
switch( score )
|
||||
{
|
||||
case TNS_Tier1: fDeltaLife = +0; break;
|
||||
case TNS_Tier2: fDeltaLife = +0; break;
|
||||
case TNS_Tier3: fDeltaLife = +0; break;
|
||||
case TNS_Tier4: fDeltaLife = -1.0; break;
|
||||
case TNS_Tier5: fDeltaLife = -1.0; break;
|
||||
case TNS_Miss: fDeltaLife = -1.0; break;
|
||||
case TNS_HitMine: fDeltaLife = -1.0; break;
|
||||
default:
|
||||
ASSERT(0);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
ASSERT(0);
|
||||
case SongOptions::DRAIN_NORMAL:
|
||||
break;
|
||||
case SongOptions::DRAIN_NO_RECOVER:
|
||||
fDeltaLife = min( fDeltaLife, 0 );
|
||||
break;
|
||||
case SongOptions::DRAIN_SUDDEN_DEATH:
|
||||
if( fDeltaLife < 0 )
|
||||
fDeltaLife = -1.0f;
|
||||
else
|
||||
fDeltaLife = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
ChangeLife( fDeltaLife );
|
||||
@@ -177,19 +158,14 @@ void LifeMeterBar::ChangeLife( TapNoteScore score )
|
||||
|
||||
void LifeMeterBar::ChangeLife( HoldNoteScore score, TapNoteScore tscore )
|
||||
{
|
||||
/* The initial tap note score (which we happen to have in have in
|
||||
* tscore) has already been reported to the above function. If the
|
||||
* hold end result was an LetGo, count it as a miss; if the end result
|
||||
* was an OK, count a tier2. (Remember, this is just life meter
|
||||
* computation, not scoring.) */
|
||||
float fDeltaLife=0.f;
|
||||
switch( GAMESTATE->m_SongOptions.m_DrainType )
|
||||
{
|
||||
case SongOptions::DRAIN_NORMAL:
|
||||
switch( score )
|
||||
{
|
||||
case HNS_Held: fDeltaLife = PREFSMAN->m_fLifeDeltaPercentChangeHeld; break;
|
||||
case HNS_LetGo: fDeltaLife = PREFSMAN->m_fLifeDeltaPercentChangeLetGo; break;
|
||||
case HNS_Held: fDeltaLife = PREFSMAN->m_fLifePercentChange.Get(SE_Held); break;
|
||||
case HNS_LetGo: fDeltaLife = PREFSMAN->m_fLifePercentChange.Get(SE_LetGo); break;
|
||||
default:
|
||||
ASSERT(0);
|
||||
}
|
||||
@@ -200,7 +176,7 @@ void LifeMeterBar::ChangeLife( HoldNoteScore score, TapNoteScore tscore )
|
||||
switch( score )
|
||||
{
|
||||
case HNS_Held: fDeltaLife = +0.000f; break;
|
||||
case HNS_LetGo: fDeltaLife = PREFSMAN->m_fLifeDeltaPercentChangeLetGo; break;
|
||||
case HNS_LetGo: fDeltaLife = PREFSMAN->m_fLifePercentChange.Get(SE_LetGo); break;
|
||||
default:
|
||||
ASSERT(0);
|
||||
}
|
||||
@@ -237,7 +213,7 @@ void LifeMeterBar::ChangeLife( float fDeltaLife )
|
||||
else
|
||||
{
|
||||
fDeltaLife *= 1 + (float)m_iProgressiveLifebar/8 * m_iMissCombo;
|
||||
// do this after; only successive tier5/miss will
|
||||
// do this after; only successive W5/miss will
|
||||
// increase the amount of life lost.
|
||||
m_iMissCombo++;
|
||||
/* Increase by m_iRegenComboAfterMiss; never push it beyond m_iMaxRegenComboAfterMiss
|
||||
@@ -392,7 +368,7 @@ void LifeMeterBar::UpdateNonstopLifebar(const int cleared,
|
||||
* Life 16+: 200 %
|
||||
*
|
||||
* Note there is 200%, because boos take off 1/2 as much as
|
||||
* a miss, and a tier5 would suck up half of your lifebar.
|
||||
* a miss, and a W5 would suck up half of your lifebar.
|
||||
*
|
||||
* Everything past 7 is intended mainly for nonstop mode.
|
||||
*/
|
||||
@@ -419,14 +395,14 @@ void LifeMeterBar::UpdateNonstopLifebar(const int cleared,
|
||||
return;
|
||||
}
|
||||
|
||||
void LifeMeterBar::FillForHowToPlay(int NumTier2s, int NumMisses)
|
||||
void LifeMeterBar::FillForHowToPlay(int NumW2s, int NumMisses)
|
||||
{
|
||||
m_iProgressiveLifebar = 0; // disable progressive lifebar
|
||||
|
||||
float AmountForTier2 = NumTier2s * m_fLifeDifficulty * 0.008f;
|
||||
float AmountForMiss = NumMisses / m_fLifeDifficulty * 0.08f;
|
||||
float AmountForW2 = NumW2s * m_fLifeDifficulty * 0.008f;
|
||||
float AmountForMiss = NumMisses / m_fLifeDifficulty * 0.08f;
|
||||
|
||||
m_fLifePercentage = AmountForMiss - AmountForTier2;
|
||||
m_fLifePercentage = AmountForMiss - AmountForW2;
|
||||
CLAMP( m_fLifePercentage, 0.0f, 1.0f );
|
||||
AfterLifeChanged();
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@ public:
|
||||
virtual void ForceFail();
|
||||
|
||||
void UpdateNonstopLifebar(int cleared, int total, int ProgressiveLifebarDifficulty);
|
||||
void FillForHowToPlay(int NumTier2s, int NumMisses);
|
||||
void FillForHowToPlay(int NumT2s, int NumMisses);
|
||||
// this function is solely for HowToPlay
|
||||
|
||||
private:
|
||||
@@ -51,7 +51,7 @@ private:
|
||||
float m_fLifeDifficulty; // essentially same as pref
|
||||
|
||||
int m_iProgressiveLifebar; // cached from prefs
|
||||
int m_iMissCombo; // current number of progressive tier5/miss
|
||||
int m_iMissCombo; // current number of progressive W5/miss
|
||||
|
||||
int m_iComboToRegainLife; // combo needed before lifebar starts filling up after fail
|
||||
};
|
||||
|
||||
@@ -87,12 +87,12 @@ void LifeMeterBattery::ChangeLife( TapNoteScore score )
|
||||
|
||||
switch( score )
|
||||
{
|
||||
case TNS_Tier1:
|
||||
case TNS_Tier2:
|
||||
case TNS_Tier3:
|
||||
case TNS_W1:
|
||||
case TNS_W2:
|
||||
case TNS_W3:
|
||||
break;
|
||||
case TNS_Tier4:
|
||||
case TNS_Tier5:
|
||||
case TNS_W4:
|
||||
case TNS_W5:
|
||||
case TNS_Miss:
|
||||
case TNS_HitMine:
|
||||
m_iTrailingLivesLeft = m_iLivesLeft;
|
||||
|
||||
@@ -91,14 +91,14 @@ void LifeMeterTime::ChangeLife( TapNoteScore tns )
|
||||
float fMeterChange = 0;
|
||||
switch( tns )
|
||||
{
|
||||
case TNS_Tier1: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChangeTier1; break;
|
||||
case TNS_Tier2: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChangeTier2; break;
|
||||
case TNS_Tier3: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChangeTier3; break;
|
||||
case TNS_Tier4: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChangeTier4; break;
|
||||
case TNS_Tier5: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChangeTier5; break;
|
||||
case TNS_Miss: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChangeMiss; break;
|
||||
case TNS_HitMine: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChangeHitMine; break;
|
||||
default: ASSERT(0);
|
||||
case TNS_W1: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChange.Get(SE_W1); break;
|
||||
case TNS_W2: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChange.Get(SE_W2); break;
|
||||
case TNS_W3: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChange.Get(SE_W3); break;
|
||||
case TNS_W4: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChange.Get(SE_W4); break;
|
||||
case TNS_W5: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChange.Get(SE_W5); break;
|
||||
case TNS_Miss: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChange.Get(SE_Miss); break;
|
||||
case TNS_HitMine: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChange.Get(SE_HitMine); break;
|
||||
}
|
||||
|
||||
m_fLifeTotalLostSeconds -= fMeterChange;
|
||||
@@ -115,9 +115,9 @@ void LifeMeterTime::ChangeLife( HoldNoteScore hns, TapNoteScore tns )
|
||||
float fMeterChange = 0;
|
||||
switch( hns )
|
||||
{
|
||||
case HNS_Held: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChangeHeld; break;
|
||||
case HNS_LetGo: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChangeLetGo; break;
|
||||
default: ASSERT(0);
|
||||
case HNS_Held: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChange.Get(SE_Held); break;
|
||||
case HNS_LetGo: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChange.Get(SE_LetGo); break;
|
||||
}
|
||||
|
||||
m_fLifeTotalLostSeconds -= fMeterChange;
|
||||
|
||||
@@ -331,7 +331,7 @@ void NetworkSyncManager::ReportScore(int playerID, int step, int score, int comb
|
||||
iOffset=1;
|
||||
|
||||
//Report 0 if hold, or miss (don't forget mines should report)
|
||||
if (((step<TNS_Tier5)||(step>TNS_Tier1))&&(step!=TNS_HitMine))
|
||||
if (((step<TNS_W5)||(step>TNS_W1))&&(step!=TNS_HitMine))
|
||||
iOffset = 0;
|
||||
|
||||
m_packet.Write2((uint16_t) iOffset);
|
||||
|
||||
@@ -977,19 +977,19 @@ void StepManiaLanServer::CheckLowerJudge(const unsigned int clientNum)
|
||||
if (Client[clientNum]->IsPlaying(x))
|
||||
{
|
||||
if ((Client[clientNum]->Player[x].currstep == 2)&&
|
||||
(PREFSMAN->m_fJudgeWindowSecondsTier5 < Client[clientNum]->Player[x].offset))
|
||||
(PREFSMAN->m_fTimingWindowSeconds.Get(SE_W5) < Client[clientNum]->Player[x].offset))
|
||||
Client[clientNum]->lowerJudge = true;
|
||||
if ((Client[clientNum]->Player[x].currstep == 3)&&
|
||||
(PREFSMAN->m_fJudgeWindowSecondsTier4 < Client[clientNum]->Player[x].offset))
|
||||
(PREFSMAN->m_fTimingWindowSeconds.Get(SE_W4) < Client[clientNum]->Player[x].offset))
|
||||
Client[clientNum]->lowerJudge = true;
|
||||
if ((Client[clientNum]->Player[x].currstep == 4)&&
|
||||
(PREFSMAN->m_fJudgeWindowSecondsTier3 < Client[clientNum]->Player[x].offset))
|
||||
(PREFSMAN->m_fTimingWindowSeconds.Get(SE_W3) < Client[clientNum]->Player[x].offset))
|
||||
Client[clientNum]->lowerJudge = true;
|
||||
if ((Client[clientNum]->Player[x].currstep == 5)&&
|
||||
(PREFSMAN->m_fJudgeWindowSecondsTier2 < Client[clientNum]->Player[x].offset))
|
||||
(PREFSMAN->m_fTimingWindowSeconds.Get(SE_W2) < Client[clientNum]->Player[x].offset))
|
||||
Client[clientNum]->lowerJudge = true;
|
||||
if ((Client[clientNum]->Player[x].currstep == 6)&&
|
||||
(PREFSMAN->m_fJudgeWindowSecondsTier1 < Client[clientNum]->Player[x].offset))
|
||||
(PREFSMAN->m_fTimingWindowSeconds.Get(SE_W1) < Client[clientNum]->Player[x].offset))
|
||||
Client[clientNum]->lowerJudge = true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -97,7 +97,7 @@ int GetSuccessfulHands( const NoteData &in, int iStartIndex = 0, int iEndIndex =
|
||||
continue;
|
||||
if( tn.type == TapNote::mine ) // mines don't count
|
||||
continue;
|
||||
if( tn.result.tns <= TNS_Tier5 )
|
||||
if( tn.result.tns <= TNS_W5 )
|
||||
Missed = true;
|
||||
}
|
||||
|
||||
@@ -172,7 +172,7 @@ TapNoteResult NoteDataWithScoring::LastTapNoteResult( const NoteData &in, unsign
|
||||
* taps have been hit), return TNS_None or TNS_Miss. */
|
||||
TapNoteScore NoteDataWithScoring::MinTapNoteScore( const NoteData &in, unsigned row )
|
||||
{
|
||||
TapNoteScore score = TNS_Tier1;
|
||||
TapNoteScore score = TNS_W1;
|
||||
for( int t=0; t<in.GetNumTracks(); t++ )
|
||||
{
|
||||
/* Ignore mines, or the score will always be TNS_None. */
|
||||
@@ -192,15 +192,15 @@ bool NoteDataWithScoring::IsRowCompletelyJudged( const NoteData &in, unsigned ro
|
||||
|
||||
namespace
|
||||
{
|
||||
/* Return the ratio of actual to possible Tier2s. */
|
||||
/* Return the ratio of actual to possible Bs. */
|
||||
float GetActualStreamRadarValue( const NoteData &in, float fSongSeconds, PlayerNumber pn )
|
||||
{
|
||||
int iTotalSteps = in.GetNumTapNotes();
|
||||
if( iTotalSteps == 0 )
|
||||
return 1.0f;
|
||||
|
||||
const int Tier2s = GetNumTapNotesWithScore( in, TNS_Tier2 );
|
||||
return clamp( float(Tier2s)/iTotalSteps, 0.0f, 1.0f );
|
||||
const int iW2s = GetNumTapNotesWithScore( in, TNS_W2 );
|
||||
return clamp( float(iW2s)/iTotalSteps, 0.0f, 1.0f );
|
||||
}
|
||||
|
||||
/* Return the ratio of actual combo to max combo. */
|
||||
@@ -215,7 +215,7 @@ float GetActualVoltageRadarValue( const NoteData &in, float fSongSeconds, Player
|
||||
return clamp( fComboPercent, 0.0f, 1.0f );
|
||||
}
|
||||
|
||||
/* Return the ratio of actual to possible Tier2s on jumps. */
|
||||
/* Return the ratio of actual to possible W2s on jumps. */
|
||||
float GetActualAirRadarValue( const NoteData &in, float fSongSeconds, PlayerNumber pn )
|
||||
{
|
||||
const int iTotalDoubles = in.GetNumJumps();
|
||||
@@ -223,7 +223,7 @@ float GetActualAirRadarValue( const NoteData &in, float fSongSeconds, PlayerNumb
|
||||
return 1.0f; // no jumps in song
|
||||
|
||||
// number of doubles
|
||||
const int iNumDoubles = GetNumNWithScore( in, TNS_Tier2, 2 );
|
||||
const int iNumDoubles = GetNumNWithScore( in, TNS_W2, 2 );
|
||||
return clamp( (float)iNumDoubles / iTotalDoubles, 0.0f, 1.0f );
|
||||
}
|
||||
|
||||
@@ -268,8 +268,8 @@ void NoteDataWithScoring::GetActualRadarValues( const NoteData &in, PlayerNumber
|
||||
case RADAR_AIR: out[rc] = GetActualAirRadarValue( in, fSongSeconds, pn ); break;
|
||||
case RADAR_FREEZE: out[rc] = GetActualFreezeRadarValue( in, fSongSeconds, pn ); break;
|
||||
case RADAR_CHAOS: out[rc] = GetActualChaosRadarValue( in, fSongSeconds, pn ); break;
|
||||
case RADAR_NUM_TAPS_AND_HOLDS: out[rc] = (float) GetNumNWithScore( in, TNS_Tier4, 1 ); break;
|
||||
case RADAR_NUM_JUMPS: out[rc] = (float) GetNumNWithScore( in, TNS_Tier4, 2 ); break;
|
||||
case RADAR_NUM_TAPS_AND_HOLDS: out[rc] = (float) GetNumNWithScore( in, TNS_W4, 1 ); break;
|
||||
case RADAR_NUM_JUMPS: out[rc] = (float) GetNumNWithScore( in, TNS_W4, 2 ); break;
|
||||
case RADAR_NUM_HOLDS: out[rc] = (float) GetNumHoldNotesWithScore( in, TapNote::hold_head_hold, HNS_Held ); break;
|
||||
case RADAR_NUM_MINES: out[rc] = (float) GetSuccessfulMines( in ); break;
|
||||
case RADAR_NUM_HANDS: out[rc] = (float) GetSuccessfulHands( in ); break;
|
||||
|
||||
@@ -16,7 +16,7 @@ struct TapNoteResult
|
||||
|
||||
/* Offset, in seconds, for a tap grade. Negative numbers mean the note
|
||||
* was hit early; positive numbers mean it was hit late. These values are
|
||||
* only meaningful for graded taps (tns >= TNS_Tier5). */
|
||||
* only meaningful for graded taps (tns >= TNS_W5). */
|
||||
float fTapNoteOffset;
|
||||
|
||||
/* If the whole row has been judged, all taps on the row will be set to hidden. */
|
||||
@@ -73,7 +73,7 @@ struct TapNote
|
||||
original, // part of the original NoteData
|
||||
addition, // additional note added by a transform
|
||||
removed, // Removed taps, e.g. in Little - play keysounds here as if
|
||||
// judged Tier2, but don't bother rendering or judging this
|
||||
// judged W2, but don't bother rendering or judging this
|
||||
// step. Also used for when we implement auto-scratch,
|
||||
// and for if/when we do a "reduce" modifier that cancels out
|
||||
// all but N keys on a line [useful for beat->dance autogen, too].
|
||||
|
||||
+38
-51
@@ -49,23 +49,10 @@ static const float StepSearchDistance = 1.0f;
|
||||
|
||||
float AdjustedWindowSeconds( TimingWindow tw, bool bIsPlayingBeginner )
|
||||
{
|
||||
float fSecs = 0;
|
||||
switch( tw )
|
||||
{
|
||||
case TW_Tier1: fSecs = PREFSMAN->m_fJudgeWindowSecondsTier1; break;
|
||||
case TW_Tier2: fSecs = PREFSMAN->m_fJudgeWindowSecondsTier2; break;
|
||||
case TW_Tier3: fSecs = PREFSMAN->m_fJudgeWindowSecondsTier3; break;
|
||||
case TW_Tier4: fSecs = PREFSMAN->m_fJudgeWindowSecondsTier4; break;
|
||||
case TW_Tier5: fSecs = PREFSMAN->m_fJudgeWindowSecondsTier5; break;
|
||||
case TW_Mine: fSecs = PREFSMAN->m_fJudgeWindowSecondsMine; break;
|
||||
case TW_Attack: fSecs = PREFSMAN->m_fJudgeWindowSecondsAttack; break;
|
||||
case TW_Held: fSecs = PREFSMAN->m_fJudgeWindowSecondsHeld; break;
|
||||
case TW_Roll: fSecs = PREFSMAN->m_fJudgeWindowSecondsRoll; break;
|
||||
default: ASSERT(0);
|
||||
}
|
||||
fSecs *= PREFSMAN->m_fJudgeWindowScale;
|
||||
fSecs += PREFSMAN->m_fJudgeWindowAdd;
|
||||
if( tw==TW_Tier5 && bIsPlayingBeginner && PREFSMAN->m_bMercifulBeginner )
|
||||
float fSecs = PREFSMAN->m_fTimingWindowSeconds.Get( tw );
|
||||
fSecs *= PREFSMAN->m_fTimingWindowScale;
|
||||
fSecs += PREFSMAN->m_fTimingWindowAdd;
|
||||
if( tw==TW_W5 && bIsPlayingBeginner && PREFSMAN->m_bMercifulBeginner )
|
||||
fSecs += 0.5f;
|
||||
return fSecs;
|
||||
}
|
||||
@@ -649,7 +636,7 @@ void Player::Update( float fDeltaTime )
|
||||
else
|
||||
{
|
||||
// Decrease life
|
||||
fLife -= fDeltaTime/ADJUSTED_WINDOW_SECONDS(TW_Held);
|
||||
fLife -= fDeltaTime/ADJUSTED_WINDOW_SECONDS(TW_Hold);
|
||||
fLife = max( fLife, 0 ); // clamp
|
||||
}
|
||||
break;
|
||||
@@ -1093,7 +1080,7 @@ void Player::HandleStep( int col, const RageTimer &tm, bool bHeld )
|
||||
// fStepSeconds, fMusicSeconds, fNoteOffset );
|
||||
}
|
||||
|
||||
const float fSecondsFromTier2 = fabsf( fNoteOffset );
|
||||
const float fSecondsFromExact = fabsf( fNoteOffset );
|
||||
|
||||
|
||||
TapNote tn = m_NoteData.GetTapNote( col, iIndexOverlappingNote );
|
||||
@@ -1106,20 +1093,20 @@ void Player::HandleStep( int col, const RageTimer &tm, bool bHeld )
|
||||
{
|
||||
case TapNote::mine:
|
||||
// stepped too close to mine?
|
||||
if( fSecondsFromTier2 <= ADJUSTED_WINDOW_SECONDS(TW_Mine) )
|
||||
if( fSecondsFromExact <= ADJUSTED_WINDOW_SECONDS(TW_Mine) )
|
||||
score = TNS_HitMine;
|
||||
break;
|
||||
|
||||
case TapNote::attack:
|
||||
if( fSecondsFromTier2 <= ADJUSTED_WINDOW_SECONDS(TW_Attack) && !tn.result.bHidden )
|
||||
score = TNS_Tier2; /* sentinel */
|
||||
if( fSecondsFromExact <= ADJUSTED_WINDOW_SECONDS(TW_Attack) && !tn.result.bHidden )
|
||||
score = TNS_W2; /* sentinel */
|
||||
break;
|
||||
default:
|
||||
if( fSecondsFromTier2 <= ADJUSTED_WINDOW_SECONDS(TW_Tier1) ) score = TNS_Tier1;
|
||||
else if( fSecondsFromTier2 <= ADJUSTED_WINDOW_SECONDS(TW_Tier2) ) score = TNS_Tier2;
|
||||
else if( fSecondsFromTier2 <= ADJUSTED_WINDOW_SECONDS(TW_Tier3) ) score = TNS_Tier3;
|
||||
else if( fSecondsFromTier2 <= ADJUSTED_WINDOW_SECONDS(TW_Tier4) ) score = TNS_Tier4;
|
||||
else if( fSecondsFromTier2 <= ADJUSTED_WINDOW_SECONDS(TW_Tier5) ) score = TNS_Tier5;
|
||||
if( fSecondsFromExact <= ADJUSTED_WINDOW_SECONDS(TW_W1) ) score = TNS_W1;
|
||||
else if( fSecondsFromExact <= ADJUSTED_WINDOW_SECONDS(TW_W2) ) score = TNS_W2;
|
||||
else if( fSecondsFromExact <= ADJUSTED_WINDOW_SECONDS(TW_W3) ) score = TNS_W3;
|
||||
else if( fSecondsFromExact <= ADJUSTED_WINDOW_SECONDS(TW_W4) ) score = TNS_W4;
|
||||
else if( fSecondsFromExact <= ADJUSTED_WINDOW_SECONDS(TW_W5) ) score = TNS_W5;
|
||||
else score = TNS_None;
|
||||
break;
|
||||
}
|
||||
@@ -1129,16 +1116,16 @@ void Player::HandleStep( int col, const RageTimer &tm, bool bHeld )
|
||||
case PC_AUTOPLAY:
|
||||
score = PlayerAI::GetTapNoteScore( m_pPlayerState );
|
||||
|
||||
// GetTapNoteScore always returns TNS_Tier1 in autoplay.
|
||||
// GetTapNoteScore always returns TNS_W1 in autoplay.
|
||||
// If the step is far away, don't judge it.
|
||||
if( m_pPlayerState->m_PlayerController == PC_AUTOPLAY &&
|
||||
fSecondsFromTier2 > ADJUSTED_WINDOW_SECONDS(TW_Tier5) )
|
||||
fSecondsFromExact > ADJUSTED_WINDOW_SECONDS(TW_W5) )
|
||||
{
|
||||
score = TNS_None;
|
||||
break;
|
||||
}
|
||||
|
||||
// TRICKY: We're asking the AI to judge mines. consider TNS_Tier4 and below
|
||||
// TRICKY: We're asking the AI to judge mines. consider TNS_W4 and below
|
||||
// as "mine was hit" and everything else as "mine was avoided"
|
||||
if( tn.type == TapNote::mine )
|
||||
{
|
||||
@@ -1154,7 +1141,7 @@ void Player::HandleStep( int col, const RageTimer &tm, bool bHeld )
|
||||
// The CPU hits a lot of mines. Make it less likely to hit
|
||||
// mines that don't have a tap note on the same row.
|
||||
bool bTapsOnRow = m_NoteData.IsThereATapOrHoldHeadAtRow( iIndexOverlappingNote );
|
||||
TapNoteScore get_to_avoid = bTapsOnRow ? TNS_Tier3 : TNS_Tier4;
|
||||
TapNoteScore get_to_avoid = bTapsOnRow ? TNS_W3 : TNS_W4;
|
||||
|
||||
if( score >= get_to_avoid )
|
||||
return; // avoided
|
||||
@@ -1162,8 +1149,8 @@ void Player::HandleStep( int col, const RageTimer &tm, bool bHeld )
|
||||
score = TNS_HitMine;
|
||||
}
|
||||
|
||||
if( tn.type == TapNote::attack && score > TNS_Tier4 )
|
||||
score = TNS_Tier2; /* sentinel */
|
||||
if( tn.type == TapNote::attack && score > TNS_W4 )
|
||||
score = TNS_W2; /* sentinel */
|
||||
|
||||
/* AI will generate misses here. Don't handle a miss like a regular note because
|
||||
* we want the judgment animation to appear delayed. Instead, return early if
|
||||
@@ -1184,7 +1171,7 @@ void Player::HandleStep( int col, const RageTimer &tm, bool bHeld )
|
||||
break;
|
||||
}
|
||||
|
||||
if( tn.type == TapNote::attack && score == TNS_Tier2 )
|
||||
if( tn.type == TapNote::attack && score == TNS_W2 )
|
||||
{
|
||||
score = TNS_None; // don't score this as anything
|
||||
|
||||
@@ -1241,16 +1228,16 @@ void Player::HandleStep( int col, const RageTimer &tm, bool bHeld )
|
||||
m_pNoteField->DidTapNote( col, score, false );
|
||||
}
|
||||
|
||||
if( m_pPlayerState->m_PlayerController == PC_HUMAN && score >= TNS_Tier3 )
|
||||
if( m_pPlayerState->m_PlayerController == PC_HUMAN && score >= TNS_W3 )
|
||||
HandleAutosync( fNoteOffset );
|
||||
|
||||
// Do game-specific and mode-specific score mapping.
|
||||
score = GAMESTATE->GetCurrentGame()->MapTapNoteScore( score );
|
||||
if( score == TNS_Tier1 && !GAMESTATE->ShowTier1() )
|
||||
score = TNS_Tier2;
|
||||
if( score == TNS_W1 && !GAMESTATE->ShowW1() )
|
||||
score = TNS_W2;
|
||||
|
||||
bool bSteppedEarly = -fNoteOffset < 0;
|
||||
if( IsPlayingBeginner() && PREFSMAN->m_bMercifulBeginner && score==TNS_Tier5 && bSteppedEarly )
|
||||
if( IsPlayingBeginner() && PREFSMAN->m_bMercifulBeginner && score==TNS_W5 && bSteppedEarly )
|
||||
{
|
||||
if( m_pJudgment )
|
||||
m_pJudgment->SetJudgment( score, bSteppedEarly );
|
||||
@@ -1264,7 +1251,7 @@ void Player::HandleStep( int col, const RageTimer &tm, bool bHeld )
|
||||
|
||||
if( score != TNS_None && score != TNS_Miss )
|
||||
{
|
||||
int ms_error = (int) roundf( fSecondsFromTier2 * 1000 );
|
||||
int ms_error = (int) roundf( fSecondsFromExact * 1000 );
|
||||
ms_error = min( ms_error, MAX_PRO_TIMING_ERROR.GetValue() );
|
||||
|
||||
if( m_pPlayerStageStats )
|
||||
@@ -1273,7 +1260,7 @@ void Player::HandleStep( int col, const RageTimer &tm, bool bHeld )
|
||||
|
||||
//LOG->Trace("XXX: %i col %i, at %f, music at %f, step was at %f, off by %f",
|
||||
// score, col, fStepSeconds, fCurrentMusicSeconds, fMusicSeconds, fNoteOffset );
|
||||
// LOG->Trace("Note offset: %f (fSecondsFromTier2 = %f), Score: %i", fNoteOffset, fSecondsFromTier2, score);
|
||||
// LOG->Trace("Note offset: %f (fSecondsFromExact = %f), Score: %i", fNoteOffset, fSecondsFromExact, score);
|
||||
|
||||
m_NoteData.SetTapNote( col, iIndexOverlappingNote, tn );
|
||||
|
||||
@@ -1380,9 +1367,9 @@ void Player::DisplayJudgedRow( int iIndexThatWasSteppedOn, TapNoteScore score, i
|
||||
{
|
||||
TapNote tn = m_NoteData.GetTapNote(iTrack, iIndexThatWasSteppedOn);
|
||||
|
||||
// If the score is tier3 or better, remove the note from the screen to
|
||||
// If the score is W3 or better, remove the note from the screen to
|
||||
// indicate success. (Or always if blind is on.)
|
||||
if( score >= TNS_Tier3 || m_pPlayerState->m_PlayerOptions.m_fBlind )
|
||||
if( score >= TNS_W3 || m_pPlayerState->m_PlayerOptions.m_fBlind )
|
||||
{
|
||||
tn.result.bHidden = true;
|
||||
m_NoteData.SetTapNote( iTrack, iIndexThatWasSteppedOn, tn );
|
||||
@@ -1393,7 +1380,7 @@ void Player::DisplayJudgedRow( int iIndexThatWasSteppedOn, TapNoteScore score, i
|
||||
if (m_pPlayerState->m_PlayerOptions.m_fBlind)
|
||||
{
|
||||
if( m_pNoteField )
|
||||
m_pNoteField->DidTapNote( iTrack, TNS_Tier1, bBright );
|
||||
m_pNoteField->DidTapNote( iTrack, TNS_W1, bBright );
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1410,8 +1397,8 @@ void Player::OnRowCompletelyJudged( int iIndexThatWasSteppedOn )
|
||||
/* Find the minimum score of the row. This will never be TNS_None, since this
|
||||
* function is only called when a row is completed. */
|
||||
/* Instead, use the last tap score.
|
||||
/* I'm not sure this is right, either. Can you really jump a tier5 and a tier2
|
||||
* and get scored for a tier2? (That's so loose, you can gallop jumps.) -glenn */
|
||||
/* I'm not sure this is right, either. Can you really jump a W5 and a W1
|
||||
* and get scored for an W1? (That's so loose, you can gallop jumps.) -glenn */
|
||||
/* Instead of grading individual columns, maybe set a "was pressed recently"
|
||||
* countdown every time you step on a column. When you step on the first note of
|
||||
* the jump, it sets the first "was pressed recently" timer. Then, when you do
|
||||
@@ -1652,9 +1639,9 @@ void Player::HandleTapRowScore( unsigned row )
|
||||
int &iCurMissCombo = m_pPlayerStageStats ? m_pPlayerStageStats->iCurMissCombo : iDummy;
|
||||
switch( scoreOfLastTap )
|
||||
{
|
||||
case TNS_Tier1:
|
||||
case TNS_Tier2:
|
||||
case TNS_Tier3:
|
||||
case TNS_W1:
|
||||
case TNS_W2:
|
||||
case TNS_W3:
|
||||
iCurMissCombo = 0;
|
||||
SCREENMAN->PostMessageToTopScreen( SM_MissComboAborted, 0 );
|
||||
break;
|
||||
@@ -1663,8 +1650,8 @@ void Player::HandleTapRowScore( unsigned row )
|
||||
++iCurMissCombo;
|
||||
m_LastTapNoteScore = TNS_Miss;
|
||||
|
||||
case TNS_Tier4:
|
||||
case TNS_Tier5:
|
||||
case TNS_W4:
|
||||
case TNS_W5:
|
||||
if( iCurCombo > 50 )
|
||||
SCREENMAN->PostMessageToTopScreen( SM_ComboStopped, 0 );
|
||||
iCurCombo = 0;
|
||||
@@ -1820,7 +1807,7 @@ void Player::HandleHoldScore( HoldNoteScore holdScore, TapNoteScore tapScore )
|
||||
|
||||
float Player::GetMaxStepDistanceSeconds()
|
||||
{
|
||||
return GAMESTATE->m_SongOptions.m_fMusicRate * ADJUSTED_WINDOW_SECONDS(TW_Tier5);
|
||||
return GAMESTATE->m_SongOptions.m_fMusicRate * ADJUSTED_WINDOW_SECONDS(TW_W5);
|
||||
}
|
||||
|
||||
void Player::FadeToFail()
|
||||
|
||||
@@ -16,14 +16,14 @@ struct TapScoreDistribution
|
||||
{
|
||||
float fRand = randomf(0,1);
|
||||
float fCumulativePercent = 0;
|
||||
for( int i=0; i<=TNS_Tier1; i++ )
|
||||
for( int i=0; i<=TNS_W1; i++ )
|
||||
{
|
||||
fCumulativePercent += fPercent[i];
|
||||
if( fRand <= fCumulativePercent+1e-4 ) /* rounding error */
|
||||
return (TapNoteScore)i;
|
||||
}
|
||||
ASSERT(0); // the fCumulativePercents must sum to 1.0, so we should never get here!
|
||||
return TNS_Tier1;
|
||||
return TNS_W1;
|
||||
}
|
||||
|
||||
};
|
||||
@@ -45,12 +45,12 @@ void PlayerAI::InitFromDisk()
|
||||
|
||||
TapScoreDistribution& dist = g_Distributions[i];
|
||||
dist.fPercent[TNS_None] = 0;
|
||||
pNode->GetAttrValue( "MissWeight", dist.fPercent[TNS_Miss] );
|
||||
pNode->GetAttrValue( "Tier5Weight", dist.fPercent[TNS_Tier5] );
|
||||
pNode->GetAttrValue( "Tier4Weight", dist.fPercent[TNS_Tier4] );
|
||||
pNode->GetAttrValue( "Tier3Weight", dist.fPercent[TNS_Tier3] );
|
||||
pNode->GetAttrValue( "Tier2Weight", dist.fPercent[TNS_Tier2] );
|
||||
pNode->GetAttrValue( "Tier1Weight", dist.fPercent[TNS_Tier1] );
|
||||
pNode->GetAttrValue( "WeightMiss", dist.fPercent[TNS_Miss] );
|
||||
pNode->GetAttrValue( "WeightW5", dist.fPercent[TNS_W5] );
|
||||
pNode->GetAttrValue( "WeightW4", dist.fPercent[TNS_W4] );
|
||||
pNode->GetAttrValue( "WeightW3", dist.fPercent[TNS_W3] );
|
||||
pNode->GetAttrValue( "WeightW2", dist.fPercent[TNS_W2] );
|
||||
pNode->GetAttrValue( "WeightW1", dist.fPercent[TNS_W1] );
|
||||
|
||||
float fSum = 0;
|
||||
for( int j=0; j<NUM_TapNoteScore; j++ )
|
||||
@@ -64,7 +64,7 @@ void PlayerAI::InitFromDisk()
|
||||
TapNoteScore PlayerAI::GetTapNoteScore( const PlayerState* pPlayerState )
|
||||
{
|
||||
if( pPlayerState->m_PlayerController == PC_AUTOPLAY )
|
||||
return TNS_Tier1;
|
||||
return TNS_W1;
|
||||
|
||||
int iCpuSkill = pPlayerState->m_iCpuSkill;
|
||||
|
||||
|
||||
@@ -12,8 +12,8 @@
|
||||
#include "Steps.h"
|
||||
#include "ScoreKeeperNormal.h"
|
||||
|
||||
#define GRADE_PERCENT_TIER(i) THEME->GetMetricF("PlayerStageStats",ssprintf("GradePercent%s",GradeToString((Grade)i).c_str()))
|
||||
#define GRADE_TIER02_IS_ALL_PERFECTS THEME->GetMetricB("PlayerStageStats","GradeTier02IsAllTier2s")
|
||||
#define GRADE_PERCENT_TIER(i) THEME->GetMetricF("PlayerStageStats",ssprintf("GradePercent%s",GradeToString((Grade)i).c_str()))
|
||||
#define GRADE_TIER02_IS_ALL_W2S THEME->GetMetricB("PlayerStageStats","GradeTier02IsAllW2s")
|
||||
|
||||
const float LESSON_PASS_THRESHOLD = 0.8f;
|
||||
|
||||
@@ -173,20 +173,20 @@ Grade PlayerStageStats::GetGrade() const
|
||||
LOG->Trace( "GetGrade: Grade: %s, %i", GradeToString(grade).c_str(), GRADE_TIER02_IS_ALL_PERFECTS );
|
||||
if( GRADE_TIER02_IS_ALL_PERFECTS )
|
||||
{
|
||||
if( iTapNoteScores[TNS_Tier1] > 0 &&
|
||||
iTapNoteScores[TNS_Tier2] == 0 &&
|
||||
iTapNoteScores[TNS_Tier3] == 0 &&
|
||||
iTapNoteScores[TNS_Tier4] == 0 &&
|
||||
iTapNoteScores[TNS_Tier5] == 0 &&
|
||||
if( iTapNoteScores[TNS_W1] > 0 &&
|
||||
iTapNoteScores[TNS_W2] == 0 &&
|
||||
iTapNoteScores[TNS_W3] == 0 &&
|
||||
iTapNoteScores[TNS_W4] == 0 &&
|
||||
iTapNoteScores[TNS_W5] == 0 &&
|
||||
iTapNoteScores[TNS_Miss] == 0 &&
|
||||
iTapNoteScores[TNS_HitMine] == 0 &&
|
||||
iHoldNoteScores[HNS_LetGo] == 0 )
|
||||
return Grade_Tier01;
|
||||
|
||||
if( iTapNoteScores[TNS_Tier2] > 0 &&
|
||||
iTapNoteScores[TNS_Tier3] == 0 &&
|
||||
iTapNoteScores[TNS_Tier4] == 0 &&
|
||||
iTapNoteScores[TNS_Tier5] == 0 &&
|
||||
if( iTapNoteScores[TNS_W2] > 0 &&
|
||||
iTapNoteScores[TNS_W3] == 0 &&
|
||||
iTapNoteScores[TNS_W4] == 0 &&
|
||||
iTapNoteScores[TNS_W5] == 0 &&
|
||||
iTapNoteScores[TNS_Miss] == 0 &&
|
||||
iTapNoteScores[TNS_HitMine] == 0 &&
|
||||
iHoldNoteScores[HNS_LetGo] == 0 )
|
||||
@@ -236,11 +236,11 @@ int PlayerStageStats::GetLessonScoreActual() const
|
||||
switch( tns )
|
||||
{
|
||||
case TNS_AvoidMine:
|
||||
case TNS_Tier5:
|
||||
case TNS_Tier4:
|
||||
case TNS_Tier3:
|
||||
case TNS_Tier2:
|
||||
case TNS_Tier1:
|
||||
case TNS_W5:
|
||||
case TNS_W4:
|
||||
case TNS_W3:
|
||||
case TNS_W2:
|
||||
case TNS_W1:
|
||||
iScore += iTapNoteScores[tns];
|
||||
break;
|
||||
}
|
||||
@@ -453,8 +453,8 @@ int PlayerStageStats::GetComboAtStartOfStage() const
|
||||
|
||||
bool PlayerStageStats::FullComboOfScore( TapNoteScore tnsAllGreaterOrEqual ) const
|
||||
{
|
||||
ASSERT( tnsAllGreaterOrEqual >= TNS_Tier3 );
|
||||
ASSERT( tnsAllGreaterOrEqual <= TNS_Tier1 );
|
||||
ASSERT( tnsAllGreaterOrEqual >= TNS_W3 );
|
||||
ASSERT( tnsAllGreaterOrEqual <= TNS_W1 );
|
||||
|
||||
// If missed any holds, then it's not a full combo
|
||||
if( iHoldNoteScores[HNS_LetGo] > 0 )
|
||||
@@ -526,29 +526,29 @@ void PlayerStageStats::CalcAwards( PlayerNumber p, bool bGaveUp, bool bUsedAutop
|
||||
// don't give per-difficutly awards if using easy mods
|
||||
if( !GAMESTATE->IsDisqualified(p) )
|
||||
{
|
||||
if( FullComboOfScore( TNS_Tier3 ) )
|
||||
vPdas.push_back( AWARD_FULL_COMBO_TIER3 );
|
||||
if( SingleDigitsOfScore( TNS_Tier3 ) )
|
||||
vPdas.push_back( AWARD_SINGLE_DIGIT_TIER3 );
|
||||
if( FullComboOfScore( TNS_Tier2 ) )
|
||||
vPdas.push_back( AWARD_FULL_COMBO_TIER2 );
|
||||
if( SingleDigitsOfScore( TNS_Tier2 ) )
|
||||
vPdas.push_back( AWARD_SINGLE_DIGIT_TIER2 );
|
||||
if( FullComboOfScore( TNS_Tier1 ) )
|
||||
vPdas.push_back( AWARD_FULL_COMBO_TIER1 );
|
||||
if( FullComboOfScore( TNS_W3 ) )
|
||||
vPdas.push_back( AWARD_FULL_COMBO_W3 );
|
||||
if( SingleDigitsOfScore( TNS_W3 ) )
|
||||
vPdas.push_back( AWARD_SINGLE_DIGIT_W3 );
|
||||
if( FullComboOfScore( TNS_W2 ) )
|
||||
vPdas.push_back( AWARD_FULL_COMBO_W2 );
|
||||
if( SingleDigitsOfScore( TNS_W2 ) )
|
||||
vPdas.push_back( AWARD_SINGLE_DIGIT_W2 );
|
||||
if( FullComboOfScore( TNS_W1 ) )
|
||||
vPdas.push_back( AWARD_FULL_COMBO_W1 );
|
||||
|
||||
if( OneOfScore( TNS_Tier3 ) )
|
||||
vPdas.push_back( AWARD_ONE_TIER3 );
|
||||
if( OneOfScore( TNS_Tier2 ) )
|
||||
vPdas.push_back( AWARD_ONE_TIER2 );
|
||||
if( OneOfScore( TNS_W3 ) )
|
||||
vPdas.push_back( AWARD_ONE_W3 );
|
||||
if( OneOfScore( TNS_W2 ) )
|
||||
vPdas.push_back( AWARD_ONE_W2 );
|
||||
|
||||
float fPercentTier3s = GetPercentageOfTaps( TNS_Tier3 );
|
||||
if( fPercentTier3s >= 0.8f )
|
||||
vPdas.push_back( AWARD_PERCENT_80_TIER3 );
|
||||
if( fPercentTier3s >= 0.9f )
|
||||
vPdas.push_back( AWARD_PERCENT_90_TIER3 );
|
||||
if( fPercentTier3s >= 1.f )
|
||||
vPdas.push_back( AWARD_PERCENT_100_TIER3 );
|
||||
float fPercentW3s = GetPercentageOfTaps( TNS_W3 );
|
||||
if( fPercentW3s >= 0.8f )
|
||||
vPdas.push_back( AWARD_PERCENT_80_W3 );
|
||||
if( fPercentW3s >= 0.9f )
|
||||
vPdas.push_back( AWARD_PERCENT_90_W3 );
|
||||
if( fPercentW3s >= 1.f )
|
||||
vPdas.push_back( AWARD_PERCENT_100_W3 );
|
||||
}
|
||||
|
||||
// Max one PDA per stage
|
||||
|
||||
@@ -94,7 +94,7 @@ public:
|
||||
|
||||
int GetComboAtStartOfStage() const;
|
||||
bool FullComboOfScore( TapNoteScore tnsAllGreaterOrEqual ) const;
|
||||
bool FullCombo() const { return FullComboOfScore(TNS_Tier3); }
|
||||
bool FullCombo() const { return FullComboOfScore(TNS_W3); }
|
||||
bool SingleDigitsOfScore( TapNoteScore tnsAllGreaterOrEqual ) const;
|
||||
bool OneOfScore( TapNoteScore tnsAllGreaterOrEqual ) const;
|
||||
int GetTotalTaps() const;
|
||||
|
||||
@@ -59,7 +59,7 @@ READFROM_AND_WRITETO( CString, CString& )
|
||||
READFROM_AND_WRITETO( PrefsManager::BackgroundMode, int& )
|
||||
READFROM_AND_WRITETO( PrefsManager::BannerCache, int& )
|
||||
READFROM_AND_WRITETO( PrefsManager::MusicWheelUsesSections, int& )
|
||||
READFROM_AND_WRITETO( PrefsManager::Tier1Timing, int& )
|
||||
READFROM_AND_WRITETO( PrefsManager::AllowW1, int& )
|
||||
READFROM_AND_WRITETO( CoinMode, int& )
|
||||
READFROM_AND_WRITETO( Premium, int& )
|
||||
READFROM_AND_WRITETO( PrefsManager::Maybe, int& )
|
||||
|
||||
@@ -76,6 +76,34 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
template <class T>
|
||||
class Preference1D
|
||||
{
|
||||
typedef Preference<T> PreferenceT;
|
||||
vector<PreferenceT*> m_v;
|
||||
|
||||
public:
|
||||
Preference1D( void (pfn)(size_t i, CString &sNameOut, T &defaultValueOut ), size_t N )
|
||||
{
|
||||
for( unsigned i=0; i<N; i++ )
|
||||
{
|
||||
CString sName;
|
||||
T defaultValue;
|
||||
pfn( i, sName, defaultValue );
|
||||
m_v.push_back( new Preference<T>(sName,defaultValue) );
|
||||
}
|
||||
}
|
||||
~Preference1D()
|
||||
{
|
||||
for( unsigned i=0; i<m_v.size(); i++ )
|
||||
SAFE_DELETE( m_v[i] );
|
||||
}
|
||||
const Preference<T>& Get( size_t i ) const
|
||||
{
|
||||
return *m_v[i];
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
||||
+137
-66
@@ -56,6 +56,133 @@ bool g_bAutoRestart = false;
|
||||
# define TRUE_IF_DEBUG false
|
||||
#endif
|
||||
|
||||
void TimingWindowSecondsInit( size_t /*TimingWindow*/ i, CString &sNameOut, float &defaultValueOut )
|
||||
{
|
||||
sNameOut = "TimingWindowSeconds" + TimingWindowToString( (TimingWindow)i );
|
||||
switch( i )
|
||||
{
|
||||
default: ASSERT(0);
|
||||
case TW_W1: defaultValueOut = 0.0225f; break;
|
||||
case TW_W2: defaultValueOut = 0.045f; break;
|
||||
case TW_W3: defaultValueOut = 0.090f; break;
|
||||
case TW_W4: defaultValueOut = 0.135f; break;
|
||||
case TW_W5: defaultValueOut = 0.180f; break;
|
||||
case TW_Mine: defaultValueOut = 0.090f; break; // same as great
|
||||
case TW_Hold: defaultValueOut = 0.250f; break; // allow enough time to take foot off and put back on
|
||||
case TW_Roll: defaultValueOut = 0.350f; break;
|
||||
case TW_Attack: defaultValueOut = 0.135f; break;
|
||||
}
|
||||
}
|
||||
|
||||
void LifePercentChangeInit( size_t /*ScoreEvent*/ i, CString &sNameOut, float &defaultValueOut )
|
||||
{
|
||||
sNameOut = "LifePercentChange" + ScoreEventToString( (ScoreEvent)i );
|
||||
switch( i )
|
||||
{
|
||||
default: ASSERT(0);
|
||||
case SE_W1: defaultValueOut = +0.008f; break;
|
||||
case SE_W2: defaultValueOut = +0.008f; break;
|
||||
case SE_W3: defaultValueOut = +0.004f; break;
|
||||
case SE_W4: defaultValueOut = +0.000f; break;
|
||||
case SE_W5: defaultValueOut = -0.040f; break;
|
||||
case SE_Miss: defaultValueOut = -0.080f; break;
|
||||
case SE_HitMine: defaultValueOut = -0.160f; break;
|
||||
case SE_Held: defaultValueOut = +0.008f; break;
|
||||
case SE_LetGo: defaultValueOut = -0.080f; break;
|
||||
}
|
||||
}
|
||||
|
||||
void TugMeterPercentChangeInit( size_t /*ScoreEvent*/ i, CString &sNameOut, float &defaultValueOut )
|
||||
{
|
||||
sNameOut = "TugMeterPercentChange" + ScoreEventToString( (ScoreEvent)i );
|
||||
switch( i )
|
||||
{
|
||||
default: ASSERT(0);
|
||||
case SE_W1: defaultValueOut = +0.010f; break;
|
||||
case SE_W2: defaultValueOut = +0.008f; break;
|
||||
case SE_W3: defaultValueOut = +0.004f; break;
|
||||
case SE_W4: defaultValueOut = +0.000f; break;
|
||||
case SE_W5: defaultValueOut = -0.010f; break;
|
||||
case SE_Miss: defaultValueOut = -0.020f; break;
|
||||
case SE_HitMine: defaultValueOut = -0.040f; break;
|
||||
case SE_Held: defaultValueOut = +0.008f; break;
|
||||
case SE_LetGo: defaultValueOut = -0.020f; break;
|
||||
}
|
||||
}
|
||||
|
||||
void PercentScoreWeightInit( size_t /*ScoreEvent*/ i, CString &sNameOut, int &defaultValueOut )
|
||||
{
|
||||
sNameOut = "PercentScoreWeight" + ScoreEventToString( (ScoreEvent)i );
|
||||
switch( i )
|
||||
{
|
||||
default: ASSERT(0);
|
||||
case SE_W1: defaultValueOut = 3; break;
|
||||
case SE_W2: defaultValueOut = 2; break;
|
||||
case SE_W3: defaultValueOut = 1; break;
|
||||
case SE_W4: defaultValueOut = 0; break;
|
||||
case SE_W5: defaultValueOut = 0; break;
|
||||
case SE_Miss: defaultValueOut = 0; break;
|
||||
case SE_HitMine: defaultValueOut = -2; break;
|
||||
case SE_Held: defaultValueOut = 3; break;
|
||||
case SE_LetGo: defaultValueOut = 0; break;
|
||||
}
|
||||
}
|
||||
|
||||
void GradeWeightInit( size_t /*ScoreEvent*/ i, CString &sNameOut, int &defaultValueOut )
|
||||
{
|
||||
sNameOut = "GradeWeight" + ScoreEventToString( (ScoreEvent)i );
|
||||
switch( i )
|
||||
{
|
||||
default: ASSERT(0);
|
||||
case SE_W1: defaultValueOut = 2; break;
|
||||
case SE_W2: defaultValueOut = 2; break;
|
||||
case SE_W3: defaultValueOut = 1; break;
|
||||
case SE_W4: defaultValueOut = 0; break;
|
||||
case SE_W5: defaultValueOut = -4; break;
|
||||
case SE_Miss: defaultValueOut = -8; break;
|
||||
case SE_HitMine: defaultValueOut = -8; break;
|
||||
case SE_Held: defaultValueOut = 6; break;
|
||||
case SE_LetGo: defaultValueOut = 0; break;
|
||||
}
|
||||
}
|
||||
|
||||
void SuperMeterPercentChangeInit( size_t /*ScoreEvent*/ i, CString &sNameOut, float &defaultValueOut )
|
||||
{
|
||||
sNameOut = "SuperMeterPercentChange" + ScoreEventToString( (ScoreEvent)i );
|
||||
switch( 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;
|
||||
}
|
||||
}
|
||||
|
||||
void TimeMeterSecondsChangeInit( size_t /*ScoreEvent*/ i, CString &sNameOut, float &defaultValueOut )
|
||||
{
|
||||
sNameOut = "TimeMeterSecondsChange" + ScoreEventToString( (ScoreEvent)i );
|
||||
switch( 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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
PrefsManager::PrefsManager() :
|
||||
m_bWindowed ( "Windowed", TRUE_IF_DEBUG),
|
||||
m_iDisplayWidth ( "DisplayWidth", 640 ),
|
||||
@@ -89,38 +216,14 @@ PrefsManager::PrefsManager() :
|
||||
m_bMenuTimer ( "MenuTimer", true ),
|
||||
m_bShowDanger ( "ShowDanger", true ),
|
||||
|
||||
m_fJudgeWindowScale ( "JudgeWindowScale", 1.0f ),
|
||||
m_fJudgeWindowAdd ( "JudgeWindowAdd", 0 ),
|
||||
m_fJudgeWindowSecondsTier1 ( "JudgeWindowSecondsTier1", 0.0225f ),
|
||||
m_fJudgeWindowSecondsTier2 ( "JudgeWindowSecondsTier2", 0.045f ),
|
||||
m_fJudgeWindowSecondsTier3 ( "JudgeWindowSecondsTier3", 0.090f ),
|
||||
m_fJudgeWindowSecondsTier4 ( "JudgeWindowSecondsTier4", 0.135f ),
|
||||
m_fJudgeWindowSecondsTier5 ( "JudgeWindowSecondsTier5", 0.180f ),
|
||||
m_fJudgeWindowSecondsHeld ( "JudgeWindowSecondsHeld", 0.250f ), // allow enough time to take foot off and put back on
|
||||
m_fJudgeWindowSecondsRoll ( "JudgeWindowSecondsRoll", 0.350f ),
|
||||
m_fJudgeWindowSecondsMine ( "JudgeWindowSecondsMine", 0.090f ), // same as great
|
||||
m_fJudgeWindowSecondsAttack ( "JudgeWindowSecondsAttack", 0.135f ),
|
||||
m_fTimingWindowScale ( "TimingWindowScale", 1.0f ),
|
||||
m_fTimingWindowAdd ( "TimingWindowAdd", 0 ),
|
||||
m_fTimingWindowSeconds( TimingWindowSecondsInit, NUM_TimingWindow ),
|
||||
|
||||
m_fLifeDifficultyScale ( "LifeDifficultyScale", 1.0f ),
|
||||
m_fLifeDeltaPercentChangeTier1 ( "LifeDeltaPercentChangeTier1", +0.008f ),
|
||||
m_fLifeDeltaPercentChangeTier2 ( "LifeDeltaPercentChangeTier2", +0.008f ),
|
||||
m_fLifeDeltaPercentChangeTier3 ( "LifeDeltaPercentChangeTier3", +0.004f ),
|
||||
m_fLifeDeltaPercentChangeTier4 ( "LifeDeltaPercentChangeTier4", +0.000f ),
|
||||
m_fLifeDeltaPercentChangeTier5 ( "LifeDeltaPercentChangeTier5", -0.040f ),
|
||||
m_fLifeDeltaPercentChangeMiss ( "LifeDeltaPercentChangeMiss", -0.080f ),
|
||||
m_fLifeDeltaPercentChangeHitMine ( "LifeDeltaPercentChangeHitMine", -0.160f ),
|
||||
m_fLifeDeltaPercentChangeHeld ( "LifeDeltaPercentChangeHeld", +0.008f ),
|
||||
m_fLifeDeltaPercentChangeLetGo ( "LifeDeltaPercentChangeLetGo", -0.080f ),
|
||||
m_fLifePercentChange( LifePercentChangeInit, NUM_ScoreEvent ),
|
||||
m_fTugMeterPercentChange( TugMeterPercentChangeInit, NUM_ScoreEvent ),
|
||||
|
||||
m_fTugMeterPercentChangeTier1 ( "TugMeterPercentChangeTier1", +0.010f ),
|
||||
m_fTugMeterPercentChangeTier2 ( "TugMeterPercentChangeTier2", +0.008f ),
|
||||
m_fTugMeterPercentChangeTier3 ( "TugMeterPercentChangeTier3", +0.004f ),
|
||||
m_fTugMeterPercentChangeTier4 ( "TugMeterPercentChangeTier4", +0.000f ),
|
||||
m_fTugMeterPercentChangeTier5 ( "TugMeterPercentChangeTier5", -0.010f ),
|
||||
m_fTugMeterPercentChangeMiss ( "TugMeterPercentChangeMiss", -0.020f ),
|
||||
m_fTugMeterPercentChangeHitMine ( "TugMeterPercentChangeHitMine", -0.040f ),
|
||||
m_fTugMeterPercentChangeHeld ( "TugMeterPercentChangeHeld", +0.008f ),
|
||||
m_fTugMeterPercentChangeLetGo ( "TugMeterPercentChangeLetGo", -0.020f ),
|
||||
|
||||
m_iRegenComboAfterFail ( "RegenComboAfterFail", 10 ),
|
||||
m_iRegenComboAfterMiss ( "RegenComboAfterMiss", 5 ),
|
||||
@@ -133,46 +236,14 @@ PrefsManager::PrefsManager() :
|
||||
m_bFailOffForFirstStageEasy ( "FailOffForFirstStageEasy", false ),
|
||||
m_bMercifulBeginner ( "MercifulBeginner", false ),
|
||||
|
||||
m_iPercentScoreWeightTier1 ( "PercentScoreWeightTier1", 3 ),
|
||||
m_iPercentScoreWeightTier2 ( "PercentScoreWeightTier2", 2 ),
|
||||
m_iPercentScoreWeightTier3 ( "PercentScoreWeightTier3", 1 ),
|
||||
m_iPercentScoreWeightTier4 ( "PercentScoreWeightTier4", 0 ),
|
||||
m_iPercentScoreWeightTier5 ( "PercentScoreWeightTier5", 0 ),
|
||||
m_iPercentScoreWeightMiss ( "PercentScoreWeightMiss", 0 ),
|
||||
m_iPercentScoreWeightHitMine ( "PercentScoreWeightHitMine", -2 ),
|
||||
m_iPercentScoreWeightHeld ( "PercentScoreWeightHeld", 3 ),
|
||||
m_iPercentScoreWeightLetGo ( "PercentScoreWeightLetGo", 0 ),
|
||||
m_iPercentScoreWeight ( PercentScoreWeightInit, NUM_ScoreEvent ),
|
||||
|
||||
m_iGradeWeightTier1 ( "GradeWeightTier1", 2 ),
|
||||
m_iGradeWeightTier2 ( "GradeWeightTier2", 2 ),
|
||||
m_iGradeWeightTier3 ( "GradeWeightTier3", 1 ),
|
||||
m_iGradeWeightTier4 ( "GradeWeightTier4", 0 ),
|
||||
m_iGradeWeightTier5 ( "GradeWeightTier5", -4 ),
|
||||
m_iGradeWeightMiss ( "GradeWeightMiss", -8 ),
|
||||
m_iGradeWeightHitMine ( "GradeWeightHitMine", -8 ),
|
||||
m_iGradeWeightHeld ( "GradeWeightHeld", 6 ),
|
||||
m_iGradeWeightLetGo ( "GradeWeightLetGo", 0 ),
|
||||
m_iGradeWeight ( GradeWeightInit, NUM_ScoreEvent ),
|
||||
|
||||
m_fSuperMeterPercentChangeTier1 ( "SuperMeterPercentChangeTier1", +0.05f ),
|
||||
m_fSuperMeterPercentChangeTier2 ( "SuperMeterPercentChangeTier2", +0.04f ),
|
||||
m_fSuperMeterPercentChangeTier3 ( "SuperMeterPercentChangeTier3", +0.02f ),
|
||||
m_fSuperMeterPercentChangeTier4 ( "SuperMeterPercentChangeTier4", +0.00f ),
|
||||
m_fSuperMeterPercentChangeTier5 ( "SuperMeterPercentChangeTier5", -0.00f ),
|
||||
m_fSuperMeterPercentChangeMiss ( "SuperMeterPercentChangeMiss", -0.20f ),
|
||||
m_fSuperMeterPercentChangeHitMine ( "SuperMeterPercentChangeHitMine", -0.40f ),
|
||||
m_fSuperMeterPercentChangeHeld ( "SuperMeterPercentChangeHeld", +0.04f ),
|
||||
m_fSuperMeterPercentChangeLetGo ( "SuperMeterPercentChangeLetGo", -0.20f ),
|
||||
m_fSuperMeterPercentChange ( SuperMeterPercentChangeInit, NUM_ScoreEvent ),
|
||||
m_bMercifulSuperMeter ( "MercifulSuperMeter", true ),
|
||||
|
||||
m_fTimeMeterSecondsChangeTier1 ( "TimeMeterSecondsChangeTier1", +0.1f ),
|
||||
m_fTimeMeterSecondsChangeTier2 ( "TimeMeterSecondsChangeTier2", 0.0f ),
|
||||
m_fTimeMeterSecondsChangeTier3 ( "TimeMeterSecondsChangeTier3", -0.5f ),
|
||||
m_fTimeMeterSecondsChangeTier4 ( "TimeMeterSecondsChangeTier4", -1.0f ),
|
||||
m_fTimeMeterSecondsChangeTier5 ( "TimeMeterSecondsChangeTier5", -2.0f ),
|
||||
m_fTimeMeterSecondsChangeMiss ( "TimeMeterSecondsChangeMiss", -4.0f ),
|
||||
m_fTimeMeterSecondsChangeHitMine ( "TimeMeterSecondsChangeHitMine", -2.0f ),
|
||||
m_fTimeMeterSecondsChangeHeld ( "TimeMeterSecondsChangeHeld", -0.0f ),
|
||||
m_fTimeMeterSecondsChangeLetGo ( "TimeMeterSecondsChangeLetGo", -4.0f ),
|
||||
m_fTimeMeterSecondsChange ( TimeMeterSecondsChangeInit, NUM_ScoreEvent ),
|
||||
|
||||
m_AutoPlay ( "AutoPlay", PC_HUMAN ),
|
||||
m_bDelayedBack ( "DelayedBack", true ),
|
||||
@@ -184,7 +255,7 @@ PrefsManager::PrefsManager() :
|
||||
m_MusicWheelUsesSections ( "MusicWheelUsesSections", ALWAYS ),
|
||||
m_iMusicWheelSwitchSpeed ( "MusicWheelSwitchSpeed", 10 ),
|
||||
m_bEasterEggs ( "EasterEggs", true ),
|
||||
m_Tier1Timing ( "Tier1Timing", TIER1_EVERYWHERE ),
|
||||
m_AllowW1 ( "AllowW1", ALLOW_W1_EVERYWHERE ),
|
||||
m_bEventMode ( "EventMode", false ),
|
||||
m_iCoinsPerCredit ( "CoinsPerCredit", 1 ),
|
||||
m_iSongsPerPlay ( "SongsPerPlay", 3 ),
|
||||
|
||||
@@ -58,39 +58,16 @@ public:
|
||||
Preference<bool> m_bMenuTimer;
|
||||
Preference<bool> m_bShowDanger;
|
||||
|
||||
Preference<float> m_fJudgeWindowScale;
|
||||
Preference<float> m_fJudgeWindowAdd; // this is useful for compensating for changes in sampling rate between devices
|
||||
Preference<float> m_fJudgeWindowSecondsTier1;
|
||||
Preference<float> m_fJudgeWindowSecondsTier2;
|
||||
Preference<float> m_fJudgeWindowSecondsTier3;
|
||||
Preference<float> m_fJudgeWindowSecondsTier4;
|
||||
Preference<float> m_fJudgeWindowSecondsTier5;
|
||||
Preference<float> m_fJudgeWindowSecondsHeld;
|
||||
Preference<float> m_fJudgeWindowSecondsRoll;
|
||||
Preference<float> m_fJudgeWindowSecondsMine;
|
||||
Preference<float> m_fJudgeWindowSecondsAttack;
|
||||
Preference<float> m_fTimingWindowScale;
|
||||
Preference<float> m_fTimingWindowAdd; // this is useful for compensating for changes in sampling rate between devices
|
||||
|
||||
Preference1D<float> m_fTimingWindowSeconds;
|
||||
|
||||
Preference<float> m_fLifeDifficultyScale;
|
||||
Preference<float> m_fLifeDeltaPercentChangeTier1;
|
||||
Preference<float> m_fLifeDeltaPercentChangeTier2;
|
||||
Preference<float> m_fLifeDeltaPercentChangeTier3;
|
||||
Preference<float> m_fLifeDeltaPercentChangeTier4;
|
||||
Preference<float> m_fLifeDeltaPercentChangeTier5;
|
||||
Preference<float> m_fLifeDeltaPercentChangeMiss;
|
||||
Preference<float> m_fLifeDeltaPercentChangeHitMine;
|
||||
Preference<float> m_fLifeDeltaPercentChangeHeld;
|
||||
Preference<float> m_fLifeDeltaPercentChangeLetGo;
|
||||
Preference1D<float> m_fLifePercentChange;
|
||||
|
||||
// tug meter used in rave
|
||||
Preference<float> m_fTugMeterPercentChangeTier1;
|
||||
Preference<float> m_fTugMeterPercentChangeTier2;
|
||||
Preference<float> m_fTugMeterPercentChangeTier3;
|
||||
Preference<float> m_fTugMeterPercentChangeTier4;
|
||||
Preference<float> m_fTugMeterPercentChangeTier5;
|
||||
Preference<float> m_fTugMeterPercentChangeMiss;
|
||||
Preference<float> m_fTugMeterPercentChangeHitMine;
|
||||
Preference<float> m_fTugMeterPercentChangeHeld;
|
||||
Preference<float> m_fTugMeterPercentChangeLetGo;
|
||||
Preference1D<float> m_fTugMeterPercentChange;
|
||||
|
||||
// Whoever added these: Please add a comment saying what they do. -Chris
|
||||
Preference<int> m_iRegenComboAfterFail;
|
||||
@@ -102,52 +79,20 @@ public:
|
||||
Preference<bool> m_bMinimum1FullSongInCourses; // FEoS for 1st song, FailImmediate thereafter
|
||||
Preference<bool> m_bFailOffInBeginner;
|
||||
Preference<bool> m_bFailOffForFirstStageEasy;
|
||||
Preference<bool> m_bMercifulBeginner; // don't subtract from percent score or grade DP, larger tier5 window
|
||||
Preference<bool> m_bMercifulBeginner; // don't subtract from percent score or grade DP, larger W5 window
|
||||
|
||||
// percent score (the number that is shown on the screen and saved to memory card)
|
||||
Preference<int> m_iPercentScoreWeightTier1;
|
||||
Preference<int> m_iPercentScoreWeightTier2;
|
||||
Preference<int> m_iPercentScoreWeightTier3;
|
||||
Preference<int> m_iPercentScoreWeightTier4;
|
||||
Preference<int> m_iPercentScoreWeightTier5;
|
||||
Preference<int> m_iPercentScoreWeightMiss;
|
||||
Preference<int> m_iPercentScoreWeightHitMine;
|
||||
Preference<int> m_iPercentScoreWeightHeld;
|
||||
Preference<int> m_iPercentScoreWeightLetGo;
|
||||
Preference1D<int> m_iPercentScoreWeight;
|
||||
|
||||
// grades are calculated based on a percentage, but might have different weights than the percent score
|
||||
Preference<int> m_iGradeWeightTier1;
|
||||
Preference<int> m_iGradeWeightTier2;
|
||||
Preference<int> m_iGradeWeightTier3;
|
||||
Preference<int> m_iGradeWeightTier4;
|
||||
Preference<int> m_iGradeWeightTier5;
|
||||
Preference<int> m_iGradeWeightMiss;
|
||||
Preference<int> m_iGradeWeightHitMine;
|
||||
Preference<int> m_iGradeWeightHeld;
|
||||
Preference<int> m_iGradeWeightLetGo;
|
||||
Preference1D<int> m_iGradeWeight;
|
||||
|
||||
// super meter used in rave
|
||||
Preference<float> m_fSuperMeterPercentChangeTier1;
|
||||
Preference<float> m_fSuperMeterPercentChangeTier2;
|
||||
Preference<float> m_fSuperMeterPercentChangeTier3;
|
||||
Preference<float> m_fSuperMeterPercentChangeTier4;
|
||||
Preference<float> m_fSuperMeterPercentChangeTier5;
|
||||
Preference<float> m_fSuperMeterPercentChangeMiss;
|
||||
Preference<float> m_fSuperMeterPercentChangeHitMine;
|
||||
Preference<float> m_fSuperMeterPercentChangeHeld;
|
||||
Preference<float> m_fSuperMeterPercentChangeLetGo;
|
||||
Preference1D<float> m_fSuperMeterPercentChange;
|
||||
Preference<float> m_bMercifulSuperMeter; // negative super deltas are scaled by the players life percentage
|
||||
|
||||
// time meter used in survival
|
||||
Preference<float> m_fTimeMeterSecondsChangeTier1;
|
||||
Preference<float> m_fTimeMeterSecondsChangeTier2;
|
||||
Preference<float> m_fTimeMeterSecondsChangeTier3;
|
||||
Preference<float> m_fTimeMeterSecondsChangeTier4;
|
||||
Preference<float> m_fTimeMeterSecondsChangeTier5;
|
||||
Preference<float> m_fTimeMeterSecondsChangeMiss;
|
||||
Preference<float> m_fTimeMeterSecondsChangeHitMine;
|
||||
Preference<float> m_fTimeMeterSecondsChangeHeld;
|
||||
Preference<float> m_fTimeMeterSecondsChangeLetGo;
|
||||
Preference1D<float> m_fTimeMeterSecondsChange;
|
||||
|
||||
Preference<PlayerController> m_AutoPlay;
|
||||
Preference<bool> m_bDelayedBack;
|
||||
@@ -160,8 +105,8 @@ public:
|
||||
Preference<MusicWheelUsesSections> m_MusicWheelUsesSections;
|
||||
Preference<int> m_iMusicWheelSwitchSpeed;
|
||||
Preference<bool> m_bEasterEggs;
|
||||
enum Tier1Timing { TIER1_NEVER, TIER1_COURSES_ONLY, TIER1_EVERYWHERE };
|
||||
Preference<Tier1Timing> m_Tier1Timing;
|
||||
enum AllowW1 { ALLOW_W1_NEVER, ALLOW_W1_COURSES_ONLY, ALLOW_W1_EVERYWHERE };
|
||||
Preference<AllowW1> m_AllowW1;
|
||||
Preference<bool> m_bEventMode;
|
||||
Preference<int> m_iCoinsPerCredit;
|
||||
Preference<int> m_iSongsPerPlay;
|
||||
|
||||
@@ -129,7 +129,7 @@ ProfileLoadResult ProfileManager::LoadProfile( PlayerNumber pn, CString sProfile
|
||||
|
||||
if( lr == ProfileLoadResult_Success )
|
||||
{
|
||||
/* Next time the profile is written, move this tier4 profile into LastGood. */
|
||||
/* Next time the profile is written, move this good profile into LastGood. */
|
||||
m_bNeedToBackUpLastLoad[pn] = true;
|
||||
}
|
||||
|
||||
@@ -299,8 +299,8 @@ bool ProfileManager::SaveProfile( PlayerNumber pn ) const
|
||||
|
||||
/*
|
||||
* If the profile we're writing was loaded from the primary (non-backup)
|
||||
* data, then we've validated it and know it's tier4. Before writing our
|
||||
* new data, move the old, tier4 data to the backup. (Only do this once;
|
||||
* data, then we've validated it and know it's good. Before writing our
|
||||
* new data, move the old, good data to the backup. (Only do this once;
|
||||
* if we save the profile more than once, we havn't re-validated the
|
||||
* newly written data.)
|
||||
*/
|
||||
|
||||
@@ -95,13 +95,13 @@ void ScoreDisplayLifeTime::OnJudgment( TapNoteScore tns )
|
||||
float fMeterChange = 0;
|
||||
switch( tns )
|
||||
{
|
||||
case TNS_Tier1: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChangeTier1; break;
|
||||
case TNS_Tier2: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChangeTier2; break;
|
||||
case TNS_Tier3: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChangeTier3; break;
|
||||
case TNS_Tier4: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChangeTier4; break;
|
||||
case TNS_Tier5: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChangeTier5; break;
|
||||
case TNS_Miss: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChangeMiss; break;
|
||||
case TNS_HitMine: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChangeHitMine; break;
|
||||
case TNS_W1: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChange.Get(SE_W1); break;
|
||||
case TNS_W2: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChange.Get(SE_W2); break;
|
||||
case TNS_W3: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChange.Get(SE_W3); break;
|
||||
case TNS_W4: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChange.Get(SE_W4); break;
|
||||
case TNS_W5: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChange.Get(SE_W5); break;
|
||||
case TNS_Miss: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChange.Get(SE_Miss); break;
|
||||
case TNS_HitMine: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChange.Get(SE_HitMine); break;
|
||||
default: ASSERT(0);
|
||||
}
|
||||
|
||||
@@ -116,8 +116,8 @@ void ScoreDisplayLifeTime::OnJudgment( HoldNoteScore hns, TapNoteScore tns )
|
||||
float fMeterChange = 0;
|
||||
switch( hns )
|
||||
{
|
||||
case HNS_Held: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChangeHeld; break;
|
||||
case HNS_LetGo: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChangeLetGo; break;
|
||||
case HNS_Held: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChange.Get(SE_Held); break;
|
||||
case HNS_LetGo: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChange.Get(SE_LetGo); break;
|
||||
default: ASSERT(0);
|
||||
}
|
||||
|
||||
|
||||
@@ -103,9 +103,9 @@ void ScoreKeeperNormal::Load(
|
||||
m_iRoundTo = 5;
|
||||
if (!GAMESTATE->IsCourseMode())
|
||||
{
|
||||
m_ComboBonusFactor[TNS_Tier1] = 55;
|
||||
m_ComboBonusFactor[TNS_Tier2] = 55;
|
||||
m_ComboBonusFactor[TNS_Tier3] = 33;
|
||||
m_ComboBonusFactor[TNS_W1] = 55;
|
||||
m_ComboBonusFactor[TNS_W2] = 55;
|
||||
m_ComboBonusFactor[TNS_W3] = 33;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
@@ -195,28 +195,28 @@ void ScoreKeeperNormal::OnNextSong( int iSongInCourseIndex, const Steps* pSteps,
|
||||
m_iTapNotesHit = 0;
|
||||
}
|
||||
|
||||
static int GetScore(int p, int B, int S, int n)
|
||||
static int GetScore(int p, int Z, int S, int n)
|
||||
{
|
||||
/* There's a problem with the scoring system described below. B/S is truncated
|
||||
/* There's a problem with the scoring system described below. Z/S is truncated
|
||||
* to an int. However, in some cases we can end up with very small base scores.
|
||||
* Each song in a 50-song nonstop course will be worth 2mil, which is a base of
|
||||
* 200k; B/S will end up being zero.
|
||||
* 200k; Z/S will end up being zero.
|
||||
*
|
||||
* If we rearrange the equation to (p*B*n) / S, this problem goes away.
|
||||
* If we rearrange the equation to (p*Z*n) / S, this problem goes away.
|
||||
* (To do that, we need to either use 64-bit ints or rearrange it a little
|
||||
* more and use floats, since p*B*n won't fit a 32-bit int.) However, this
|
||||
* more and use floats, since p*Z*n won't fit a 32-bit int.) However, this
|
||||
* changes the scoring rules slightly.
|
||||
*/
|
||||
|
||||
#if 0
|
||||
/* This is the actual method described below. */
|
||||
return p * (B / S) * n;
|
||||
return p * (Z / S) * n;
|
||||
#elif 1
|
||||
/* This doesn't round down B/S. */
|
||||
return int(int64_t(p) * n * B / S);
|
||||
/* This doesn't round down Z/S. */
|
||||
return int(int64_t(p) * n * Z / S);
|
||||
#else
|
||||
/* This also doesn't round down B/S. Use this if you don't have 64-bit ints. */
|
||||
return int(p * n * (float(B) / S));
|
||||
/* This also doesn't round down Z/S. Use this if you don't have 64-bit ints. */
|
||||
return int(p * n * (float(Z) / S));
|
||||
#endif
|
||||
|
||||
}
|
||||
@@ -228,18 +228,18 @@ void ScoreKeeperNormal::AddScore( TapNoteScore score )
|
||||
/*
|
||||
Regular scoring:
|
||||
|
||||
Let p = score multiplier (Tier2 = 10, Tier3 = 5, other = 0)
|
||||
Let p = score multiplier (W1 = W2 = 10, W3 = 5, other = 0)
|
||||
|
||||
Note on NONSTOP Mode scoring
|
||||
|
||||
Let p = score multiplier (Tier1 = 10, Tier2 = 9, Tier3 = 5, other = 0)
|
||||
Let p = score multiplier (W1 = 10, W2 = 9, W3 = 5, other = 0)
|
||||
|
||||
N = total number of steps and freeze steps
|
||||
S = The sum of all integers from 1 to N (the total number of steps/freeze steps)
|
||||
n = number of the current step or freeze step (varies from 1 to N)
|
||||
B = Base value of the song (1,000,000 X the number of feet difficulty) - All edit data is rated as 5 feet
|
||||
Z = Base value of the song (1,000,000 X the number of feet difficulty) - All edit data is rated as 5 feet
|
||||
So, the score for one step is:
|
||||
one_step_score = p * (B/S) * n
|
||||
one_step_score = p * (Z/S) * n
|
||||
|
||||
*IMPORTANT* : Double steps (U+L, D+R, etc.) count as two steps instead of one *for your combo count only*,
|
||||
so if you get a double L+R on the 112th step of a song, you score is calculated for only one step, not two,
|
||||
@@ -248,13 +248,13 @@ void ScoreKeeperNormal::AddScore( TapNoteScore score )
|
||||
Now, through simple algebraic manipulation:
|
||||
S = 1+...+N = (1+N)*N/2 (1 through N added together)
|
||||
|
||||
Okay, time for an example. Suppose we wanted to calculate the step score of a "Tier3" on the 57th step of
|
||||
Okay, time for an example. Suppose we wanted to calculate the step score of a W3 on the 57th step of
|
||||
a 441 step, 8-foot difficulty song (I'm just making this one up):
|
||||
|
||||
S = (1 + 441)*441 / 2
|
||||
= 194,222 / 2
|
||||
= 97,461
|
||||
StepScore = p * (B/S) * n
|
||||
StepScore = p * (Z/S) * n
|
||||
= 5 * (8,000,000 / 97,461) * 57
|
||||
= 5 * (82) * 57 (The 82 is rounded down from 82.08411...)
|
||||
= 23,370
|
||||
@@ -262,16 +262,16 @@ void ScoreKeeperNormal::AddScore( TapNoteScore score )
|
||||
Remember this is just the score for the step, not the cumulative score up to the 57th step. Also, please note that
|
||||
I am currently checking into rounding errors with the system and if there are any, how they are resolved in the system.
|
||||
|
||||
Note: if you got all Tier2 on this song, you would get (p=10)*B, which is 80,000,000. In fact, the maximum possible
|
||||
Note: if you got all W2s on this song, you would get (p=10)*Z, which is 80,000,000. In fact, the maximum possible
|
||||
score for any song is the number of feet difficulty X 10,000,000.
|
||||
*/
|
||||
int p = 0; // score multiplier
|
||||
|
||||
switch( score )
|
||||
{
|
||||
case TNS_Tier1: p = 10; break;
|
||||
case TNS_Tier2: p = GAMESTATE->ShowTier1()? 9:10; break;
|
||||
case TNS_Tier3: p = 5; break;
|
||||
case TNS_W1: p = 10; break;
|
||||
case TNS_W2: p = GAMESTATE->ShowW1()? 9:10; break;
|
||||
case TNS_W3: p = 5; break;
|
||||
default: p = 0; break;
|
||||
}
|
||||
|
||||
@@ -279,7 +279,7 @@ void ScoreKeeperNormal::AddScore( TapNoteScore score )
|
||||
|
||||
const int N = m_iNumTapsAndHolds;
|
||||
const int sum = (N * (N + 1)) / 2;
|
||||
const int B = m_iMaxPossiblePoints/10;
|
||||
const int Z = m_iMaxPossiblePoints/10;
|
||||
|
||||
// Don't use a multiplier if the player has failed
|
||||
if( m_pPlayerStageStats->bFailedEarlier )
|
||||
@@ -294,17 +294,17 @@ void ScoreKeeperNormal::AddScore( TapNoteScore score )
|
||||
}
|
||||
else
|
||||
{
|
||||
iScore += GetScore(p, B, sum, m_iTapNotesHit);
|
||||
iScore += GetScore(p, Z, sum, m_iTapNotesHit);
|
||||
const int &iCurrentCombo = m_pPlayerStageStats->iCurCombo;
|
||||
m_pPlayerStageStats->iBonus += m_ComboBonusFactor[score] * iCurrentCombo;
|
||||
}
|
||||
|
||||
/* Subtract the maximum this step could have been worth from the bonus. */
|
||||
m_iPointBonus -= GetScore(10, B, sum, m_iTapNotesHit);
|
||||
m_iPointBonus -= GetScore(10, Z, sum, m_iTapNotesHit);
|
||||
/* And add the maximum this step could have been worth to the max score up to now. */
|
||||
iCurMaxScore += GetScore(10, B, sum, m_iTapNotesHit);
|
||||
iCurMaxScore += GetScore(10, Z, sum, m_iTapNotesHit);
|
||||
|
||||
if ( m_iTapNotesHit == m_iNumTapsAndHolds && score >= TNS_Tier2 )
|
||||
if ( m_iTapNotesHit == m_iNumTapsAndHolds && score >= TNS_W2 )
|
||||
{
|
||||
if (!m_pPlayerStageStats->bFailedEarlier)
|
||||
iScore += m_iPointBonus;
|
||||
@@ -349,13 +349,13 @@ void ScoreKeeperNormal::HandleTapRowScore( TapNoteScore scoreOfLastTap, int iNum
|
||||
// Update dance points.
|
||||
if( !m_pPlayerStageStats->bFailed )
|
||||
m_pPlayerStageStats->iActualDancePoints += TapNoteScoreToDancePoints( scoreOfLastTap );
|
||||
m_pPlayerStageStats->iCurPossibleDancePoints += TapNoteScoreToDancePoints( TNS_Tier1 );
|
||||
m_pPlayerStageStats->iCurPossibleDancePoints += TapNoteScoreToDancePoints( TNS_W1 );
|
||||
// update judged row totals
|
||||
m_pPlayerStageStats->iTapNoteScores[scoreOfLastTap] += 1;
|
||||
|
||||
// increment the current total possible dance score
|
||||
|
||||
m_pPlayerStageStats->iCurPossibleDancePoints += TapNoteScoreToDancePoints( TNS_Tier1 );
|
||||
m_pPlayerStageStats->iCurPossibleDancePoints += TapNoteScoreToDancePoints( TNS_W1 );
|
||||
|
||||
//
|
||||
// Regular combo
|
||||
@@ -385,8 +385,8 @@ void ScoreKeeperNormal::HandleTapRowScore( TapNoteScore scoreOfLastTap, int iNum
|
||||
//
|
||||
switch( scoreOfLastTap )
|
||||
{
|
||||
case TNS_Tier1:
|
||||
case TNS_Tier2:
|
||||
case TNS_W1:
|
||||
case TNS_W2:
|
||||
m_iCurToastyCombo += iNumTapsInRow;
|
||||
|
||||
if( m_iCurToastyCombo >= 250 &&
|
||||
@@ -426,15 +426,15 @@ void ScoreKeeperNormal::HandleHoldScore( HoldNoteScore holdScore, TapNoteScore t
|
||||
m_pPlayerStageStats->iCurPossibleDancePoints += HoldNoteScoreToDancePoints( HNS_Held );
|
||||
|
||||
if( holdScore == HNS_Held )
|
||||
AddScore( TNS_Tier1 );
|
||||
AddScore( TNS_W1 );
|
||||
else if ( holdScore == HNS_LetGo )
|
||||
AddScore( TNS_Tier4 ); // required for subtractive score display to work properly
|
||||
AddScore( TNS_W4 ); // required for subtractive score display to work properly
|
||||
|
||||
// TODO: Remove indexing with PlayerNumber
|
||||
PlayerNumber pn = m_pPlayerState->m_PlayerNumber;
|
||||
NSMAN->ReportScore(
|
||||
pn,
|
||||
holdScore+TNS_Tier1,
|
||||
holdScore+TNS_W1,
|
||||
m_pPlayerStageStats->iScore,
|
||||
m_pPlayerStageStats->iCurCombo );
|
||||
}
|
||||
@@ -442,14 +442,14 @@ void ScoreKeeperNormal::HandleHoldScore( HoldNoteScore holdScore, TapNoteScore t
|
||||
|
||||
int ScoreKeeperNormal::GetPossibleDancePoints( const RadarValues& radars )
|
||||
{
|
||||
/* Note that, if Tier1 timing is disabled or not active (not course mode),
|
||||
* PERFECT will be used instead. */
|
||||
/* Note that, if W1 timing is disabled or not active (not course mode),
|
||||
* W2 will be used instead. */
|
||||
|
||||
int NumTaps = int(radars[RADAR_NUM_TAPS_AND_HOLDS]);
|
||||
int NumHolds = int(radars[RADAR_NUM_HOLDS]);
|
||||
int NumRolls = int(radars[RADAR_NUM_ROLLS]);
|
||||
return
|
||||
NumTaps*TapNoteScoreToDancePoints(TNS_Tier1, false)+
|
||||
NumTaps*TapNoteScoreToDancePoints(TNS_W1, false)+
|
||||
NumHolds*HoldNoteScoreToDancePoints(HNS_Held, false) +
|
||||
NumRolls*HoldNoteScoreToDancePoints(HNS_Held, false);
|
||||
}
|
||||
@@ -467,14 +467,14 @@ int ScoreKeeperNormal::GetPossibleDancePoints( const RadarValues& fOriginalRadar
|
||||
|
||||
int ScoreKeeperNormal::GetPossibleGradePoints( const RadarValues& radars )
|
||||
{
|
||||
/* Note that, if Tier1 timing is disabled or not active (not course mode),
|
||||
* PERFECT will be used instead. */
|
||||
/* Note that, if W1 timing is disabled or not active (not course mode),
|
||||
* W2 will be used instead. */
|
||||
|
||||
int NumTaps = int(radars[RADAR_NUM_TAPS_AND_HOLDS]);
|
||||
int NumHolds = int(radars[RADAR_NUM_HOLDS]);
|
||||
int NumRolls = int(radars[RADAR_NUM_ROLLS]);
|
||||
return
|
||||
NumTaps*TapNoteScoreToGradePoints(TNS_Tier1, false)+
|
||||
NumTaps*TapNoteScoreToGradePoints(TNS_W1, false)+
|
||||
NumHolds*HoldNoteScoreToGradePoints(HNS_Held, false) +
|
||||
NumRolls*HoldNoteScoreToGradePoints(HNS_Held, false);
|
||||
}
|
||||
@@ -511,23 +511,23 @@ int ScoreKeeperNormal::HoldNoteScoreToGradePoints( HoldNoteScore hns ) const
|
||||
|
||||
int ScoreKeeperNormal::TapNoteScoreToDancePoints( TapNoteScore tns, bool bBeginner )
|
||||
{
|
||||
if( !GAMESTATE->ShowTier1() && tns == TNS_Tier1 )
|
||||
tns = TNS_Tier2;
|
||||
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 )
|
||||
{
|
||||
case TNS_None: iWeight = 0;
|
||||
case TNS_HitMine: iWeight = PREFSMAN->m_iPercentScoreWeightHitMine; break;
|
||||
case TNS_Miss: iWeight = PREFSMAN->m_iPercentScoreWeightMiss; break;
|
||||
case TNS_Tier5: iWeight = PREFSMAN->m_iPercentScoreWeightTier5; break;
|
||||
case TNS_Tier4: iWeight = PREFSMAN->m_iPercentScoreWeightTier4; break;
|
||||
case TNS_Tier3: iWeight = PREFSMAN->m_iPercentScoreWeightTier3; break;
|
||||
case TNS_Tier2: iWeight = PREFSMAN->m_iPercentScoreWeightTier2; break;
|
||||
case TNS_Tier1: iWeight = PREFSMAN->m_iPercentScoreWeightTier1; break;
|
||||
default: FAIL_M( ssprintf("%i", tns) );
|
||||
case TNS_None: iWeight = 0; break;
|
||||
case TNS_HitMine: iWeight = PREFSMAN->m_iPercentScoreWeight.Get(SE_HitMine); break;
|
||||
case TNS_Miss: iWeight = PREFSMAN->m_iPercentScoreWeight.Get(SE_Miss); break;
|
||||
case TNS_W5: iWeight = PREFSMAN->m_iPercentScoreWeight.Get(SE_W5); break;
|
||||
case TNS_W4: iWeight = PREFSMAN->m_iPercentScoreWeight.Get(SE_W4); break;
|
||||
case TNS_W3: iWeight = PREFSMAN->m_iPercentScoreWeight.Get(SE_W3); break;
|
||||
case TNS_W2: iWeight = PREFSMAN->m_iPercentScoreWeight.Get(SE_W2); break;
|
||||
case TNS_W1: iWeight = PREFSMAN->m_iPercentScoreWeight.Get(SE_W1); break;
|
||||
}
|
||||
if( bBeginner && PREFSMAN->m_bMercifulBeginner )
|
||||
iWeight = max( 0, iWeight );
|
||||
@@ -539,10 +539,10 @@ int ScoreKeeperNormal::HoldNoteScoreToDancePoints( HoldNoteScore hns, bool bBegi
|
||||
int iWeight = 0;
|
||||
switch( hns )
|
||||
{
|
||||
case HNS_None: iWeight = 0; break;
|
||||
case HNS_LetGo: iWeight = PREFSMAN->m_iPercentScoreWeightLetGo; break;
|
||||
case HNS_Held: iWeight = PREFSMAN->m_iPercentScoreWeightHeld; break;
|
||||
default: FAIL_M( ssprintf("%i", hns) );
|
||||
case HNS_None: iWeight = 0; break;
|
||||
case HNS_LetGo: iWeight = PREFSMAN->m_iPercentScoreWeight.Get(SE_LetGo); break;
|
||||
case HNS_Held: iWeight = PREFSMAN->m_iPercentScoreWeight.Get(SE_Held); break;
|
||||
}
|
||||
if( bBeginner && PREFSMAN->m_bMercifulBeginner )
|
||||
iWeight = max( 0, iWeight );
|
||||
@@ -551,24 +551,24 @@ int ScoreKeeperNormal::HoldNoteScoreToDancePoints( HoldNoteScore hns, bool bBegi
|
||||
|
||||
int ScoreKeeperNormal::TapNoteScoreToGradePoints( TapNoteScore tns, bool bBeginner )
|
||||
{
|
||||
if( !GAMESTATE->ShowTier1() && tns == TNS_Tier1 )
|
||||
tns = TNS_Tier2;
|
||||
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 )
|
||||
{
|
||||
case TNS_None: iWeight = 0;
|
||||
case TNS_AvoidMine: iWeight = 0;
|
||||
case TNS_HitMine: iWeight = PREFSMAN->m_iGradeWeightHitMine; break;
|
||||
case TNS_Miss: iWeight = PREFSMAN->m_iGradeWeightMiss; break;
|
||||
case TNS_Tier5: iWeight = PREFSMAN->m_iGradeWeightTier5; break;
|
||||
case TNS_Tier4: iWeight = PREFSMAN->m_iGradeWeightTier4; break;
|
||||
case TNS_Tier3: iWeight = PREFSMAN->m_iGradeWeightTier3; break;
|
||||
case TNS_Tier2: iWeight = PREFSMAN->m_iGradeWeightTier2; break;
|
||||
case TNS_Tier1: iWeight = PREFSMAN->m_iGradeWeightTier1;break;
|
||||
default: FAIL_M( ssprintf("%i", tns) );
|
||||
case TNS_None: iWeight = 0; break;
|
||||
case TNS_AvoidMine: iWeight = 0; break;
|
||||
case TNS_HitMine: iWeight = PREFSMAN->m_iGradeWeight.Get(SE_HitMine); break;
|
||||
case TNS_Miss: iWeight = PREFSMAN->m_iGradeWeight.Get(SE_Miss); break;
|
||||
case TNS_W5: iWeight = PREFSMAN->m_iGradeWeight.Get(SE_W5); break;
|
||||
case TNS_W4: iWeight = PREFSMAN->m_iGradeWeight.Get(SE_W4); break;
|
||||
case TNS_W3: iWeight = PREFSMAN->m_iGradeWeight.Get(SE_W3); break;
|
||||
case TNS_W2: iWeight = PREFSMAN->m_iGradeWeight.Get(SE_W2); break;
|
||||
case TNS_W1: iWeight = PREFSMAN->m_iGradeWeight.Get(SE_W1); break;
|
||||
}
|
||||
if( bBeginner && PREFSMAN->m_bMercifulBeginner )
|
||||
iWeight = max( 0, iWeight );
|
||||
@@ -580,10 +580,10 @@ int ScoreKeeperNormal::HoldNoteScoreToGradePoints( HoldNoteScore hns, bool bBegi
|
||||
int iWeight = 0;
|
||||
switch( hns )
|
||||
{
|
||||
case HNS_None: iWeight = 0; break;
|
||||
case HNS_LetGo: iWeight = PREFSMAN->m_iGradeWeightLetGo; break;
|
||||
case HNS_Held: iWeight = PREFSMAN->m_iGradeWeightHeld; break;
|
||||
default: FAIL_M( ssprintf("%i", hns) );
|
||||
case HNS_None: iWeight = 0; break;
|
||||
case HNS_LetGo: iWeight = PREFSMAN->m_iGradeWeight.Get(SE_LetGo); break;
|
||||
case HNS_Held: iWeight = PREFSMAN->m_iGradeWeight.Get(SE_Held); break;
|
||||
}
|
||||
if( bBeginner && PREFSMAN->m_bMercifulBeginner )
|
||||
iWeight = max( 0, iWeight );
|
||||
|
||||
@@ -28,7 +28,7 @@ void ScoreKeeperRave::HandleTapScore( TapNoteScore score )
|
||||
float fPercentToMove = 0;
|
||||
switch( score )
|
||||
{
|
||||
case TNS_HitMine: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChangeHitMine; break;
|
||||
case TNS_HitMine: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChange.Get(SE_HitMine); break;
|
||||
}
|
||||
|
||||
AddSuperMeterDelta( fPercentToMove );
|
||||
@@ -41,13 +41,13 @@ void ScoreKeeperRave::HandleTapRowScore( TapNoteScore scoreOfLastTap, int iNumTa
|
||||
float fPercentToMove;
|
||||
switch( scoreOfLastTap )
|
||||
{
|
||||
case TNS_Tier1: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChangeTier1; break;
|
||||
case TNS_Tier2: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChangeTier2; break;
|
||||
case TNS_Tier3: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChangeTier3; break;
|
||||
case TNS_Tier4: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChangeTier4; break;
|
||||
case TNS_Tier5: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChangeTier5; break;
|
||||
case TNS_Miss: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChangeMiss; break;
|
||||
default: ASSERT(0); fPercentToMove = +0.00f; break;
|
||||
default: ASSERT(0);
|
||||
case TNS_W1: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChange.Get(SE_W1); break;
|
||||
case TNS_W2: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChange.Get(SE_W2); break;
|
||||
case TNS_W3: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChange.Get(SE_W3); break;
|
||||
case TNS_W4: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChange.Get(SE_W4); break;
|
||||
case TNS_W5: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChange.Get(SE_W5); break;
|
||||
case TNS_Miss: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChange.Get(SE_Miss); break;
|
||||
}
|
||||
AddSuperMeterDelta( fPercentToMove );
|
||||
}
|
||||
@@ -57,7 +57,7 @@ void ScoreKeeperRave::HandleHoldScore( HoldNoteScore holdScore, TapNoteScore tap
|
||||
float fPercentToMove = 0;
|
||||
switch( tapScore )
|
||||
{
|
||||
case TNS_HitMine: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChangeHitMine; break;
|
||||
case TNS_HitMine: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChange.Get(SE_HitMine); break;
|
||||
}
|
||||
AddSuperMeterDelta( fPercentToMove );
|
||||
}
|
||||
|
||||
@@ -1775,7 +1775,7 @@ void ScreenEdit::InputRecord( const InputEventPlus &input, EditButton EditB )
|
||||
tn = TAP_ORIGINAL_MINE;
|
||||
|
||||
m_NoteDataRecord.SetTapNote( iCol, iRow, tn );
|
||||
m_NoteFieldRecord.Step( iCol, TNS_Tier1 );
|
||||
m_NoteFieldRecord.Step( iCol, TNS_W1 );
|
||||
}
|
||||
break;
|
||||
case IET_SLOW_REPEAT:
|
||||
|
||||
@@ -171,12 +171,12 @@ ScreenEnding::ScreenEnding( CString sClassName ) : ScreenAttract( sClassName, fa
|
||||
STATSMAN->m_CurStageStats.m_player[PLAYER_1].iCurCombo = 250;
|
||||
STATSMAN->m_CurStageStats.m_player[PLAYER_1].UpdateComboList( 100, false );
|
||||
|
||||
STATSMAN->m_CurStageStats.m_player[PLAYER_1].iTapNoteScores[TNS_Tier1] = rand()%2;
|
||||
STATSMAN->m_CurStageStats.m_player[PLAYER_1].iTapNoteScores[TNS_Tier2] = rand()%2;
|
||||
STATSMAN->m_CurStageStats.m_player[PLAYER_1].iTapNoteScores[TNS_Tier3] = rand()%2;
|
||||
STATSMAN->m_CurStageStats.m_player[PLAYER_2].iTapNoteScores[TNS_Tier1] = rand()%2;
|
||||
STATSMAN->m_CurStageStats.m_player[PLAYER_2].iTapNoteScores[TNS_Tier2] = rand()%2;
|
||||
STATSMAN->m_CurStageStats.m_player[PLAYER_2].iTapNoteScores[TNS_Tier3] = rand()%2;
|
||||
STATSMAN->m_CurStageStats.m_player[PLAYER_1].iTapNoteScores[TNS_W1] = rand()%2;
|
||||
STATSMAN->m_CurStageStats.m_player[PLAYER_1].iTapNoteScores[TNS_W2] = rand()%2;
|
||||
STATSMAN->m_CurStageStats.m_player[PLAYER_1].iTapNoteScores[TNS_W3] = rand()%2;
|
||||
STATSMAN->m_CurStageStats.m_player[PLAYER_2].iTapNoteScores[TNS_W1] = rand()%2;
|
||||
STATSMAN->m_CurStageStats.m_player[PLAYER_2].iTapNoteScores[TNS_W2] = rand()%2;
|
||||
STATSMAN->m_CurStageStats.m_player[PLAYER_2].iTapNoteScores[TNS_W3] = rand()%2;
|
||||
|
||||
STATSMAN->m_vPlayedStageStats.clear();
|
||||
}
|
||||
|
||||
@@ -39,14 +39,19 @@ const int NUM_SCORE_DIGITS = 9;
|
||||
// metrics that are common to all ScreenEvaluation classes
|
||||
#define BANNER_WIDTH THEME->GetMetricF(m_sName,"BannerWidth")
|
||||
#define BANNER_HEIGHT THEME->GetMetricF(m_sName,"BannerHeight")
|
||||
const char* JUDGE_STRING[NUM_JUDGE_LINES] =
|
||||
static const CString JudgeLineNames[] =
|
||||
{
|
||||
"Tier1", "Tier2", "Tier3", "Tier4", "Tier5", "Miss", "OK", "MaxCombo", "TotalError"
|
||||
"W1", "W2", "W3", "W4", "W5", "Miss", "OK", "MaxCombo", "TotalError"
|
||||
};
|
||||
const char* STATS_STRING[NUM_STATS_LINES] =
|
||||
XToString( JudgeLine, NUM_JudgeLine );
|
||||
#define FOREACH_JudgeLine( rc ) FOREACH_ENUM( JudgeLine, NUM_JudgeLine, rc )
|
||||
|
||||
static const CString StatLineNames[NUM_StatLine] =
|
||||
{
|
||||
"Jumps", "Holds", "Mines", "Hands", "Rolls",
|
||||
};
|
||||
XToString( StatLine, NUM_StatLine );
|
||||
#define FOREACH_StatLine( rc ) FOREACH_ENUM( StatLine, NUM_StatLine, rc )
|
||||
|
||||
#define SPIN_GRADES THEME->GetMetricB(m_sName,"SpinGrades")
|
||||
#define CHEER_DELAY_SECONDS THEME->GetMetricF(m_sName,"CheerDelaySeconds")
|
||||
@@ -60,10 +65,10 @@ const char* STATS_STRING[NUM_STATS_LINES] =
|
||||
#define SHOW_SURVIVED_AREA THEME->GetMetricB(m_sName,"ShowSurvivedArea")
|
||||
#define SHOW_WIN_AREA THEME->GetMetricB(m_sName,"ShowWinArea")
|
||||
#define SHOW_JUDGMENT_LABELS THEME->GetMetricB(m_sName,"ShowJudgmentLabels")
|
||||
#define SHOW_JUDGMENT( l ) THEME->GetMetricB(m_sName,ssprintf("Show%s",JUDGE_STRING[l]))
|
||||
#define SHOW_JUDGMENT( l ) THEME->GetMetricB(m_sName,"Show"+JudgeLineToString(l))
|
||||
#define SHOW_STATS_LABELS THEME->GetMetricB(m_sName,"ShowStatsLabels")
|
||||
|
||||
#define SHOW_STAT( s ) THEME->GetMetricB(m_sName,ssprintf("Show%s",STATS_STRING[l]))
|
||||
#define SHOW_STAT( s ) THEME->GetMetricB(m_sName,"Show"+StatLineToString(l))
|
||||
#define SHOW_SCORE_AREA THEME->GetMetricB(m_sName,"ShowScoreArea")
|
||||
#define SHOW_TOTAL_SCORE_AREA THEME->GetMetricB(m_sName,"ShowTotalScoreArea")
|
||||
#define SHOW_TIME_AREA THEME->GetMetricB(m_sName,"ShowTimeArea")
|
||||
@@ -157,10 +162,10 @@ ScreenEvaluation::ScreenEvaluation( CString sClassName ) : ScreenWithMenuElement
|
||||
{
|
||||
STATSMAN->m_CurStageStats.m_player[p].bFailedEarlier = true;
|
||||
}
|
||||
STATSMAN->m_CurStageStats.m_player[p].iTapNoteScores[TNS_Tier1] = rand()%3;
|
||||
STATSMAN->m_CurStageStats.m_player[p].iTapNoteScores[TNS_Tier2] = rand()%3;
|
||||
STATSMAN->m_CurStageStats.m_player[p].iTapNoteScores[TNS_Tier3] = rand()%3;
|
||||
STATSMAN->m_CurStageStats.m_player[p].iPossibleGradePoints = 4*ScoreKeeperNormal::TapNoteScoreToGradePoints(TNS_Tier1, false);
|
||||
STATSMAN->m_CurStageStats.m_player[p].iTapNoteScores[TNS_W1] = rand()%3;
|
||||
STATSMAN->m_CurStageStats.m_player[p].iTapNoteScores[TNS_W2] = rand()%3;
|
||||
STATSMAN->m_CurStageStats.m_player[p].iTapNoteScores[TNS_W3] = rand()%3;
|
||||
STATSMAN->m_CurStageStats.m_player[p].iPossibleGradePoints = 4*ScoreKeeperNormal::TapNoteScoreToGradePoints(TNS_W1, false);
|
||||
STATSMAN->m_CurStageStats.m_player[p].fLifeRemainingSeconds = randomf( 90, 580 );
|
||||
}
|
||||
|
||||
@@ -471,9 +476,9 @@ void ScreenEvaluation::Init()
|
||||
//
|
||||
// init judgment area
|
||||
//
|
||||
for( int l=0; l<NUM_JUDGE_LINES; l++ )
|
||||
FOREACH_JudgeLine( l )
|
||||
{
|
||||
if( l == 0 && !GAMESTATE->ShowTier1() )
|
||||
if( l == 0 && !GAMESTATE->ShowW1() )
|
||||
continue; // skip
|
||||
|
||||
if( SHOW_JUDGMENT(l) )
|
||||
@@ -483,7 +488,7 @@ void ScreenEvaluation::Init()
|
||||
m_sprJudgeLabels[l].Load( THEME->GetPathG(m_sName,"judge labels") );
|
||||
m_sprJudgeLabels[l].StopAnimating();
|
||||
m_sprJudgeLabels[l].SetState( l );
|
||||
m_sprJudgeLabels[l].SetName( ssprintf("%sLabel",JUDGE_STRING[l]) );
|
||||
m_sprJudgeLabels[l].SetName( JudgeLineToString(l)+"Label" );
|
||||
SET_XY_AND_ON_COMMAND( m_sprJudgeLabels[l] );
|
||||
this->AddChild( &m_sprJudgeLabels[l] );
|
||||
}
|
||||
@@ -493,42 +498,42 @@ void ScreenEvaluation::Init()
|
||||
m_textJudgeNumbers[l][p].LoadFromFont( THEME->GetPathF(m_sName, "judge") );
|
||||
m_textJudgeNumbers[l][p].SetShadowLength( 0 );
|
||||
m_textJudgeNumbers[l][p].RunCommands( PLAYER_COLOR.GetValue(p) );
|
||||
m_textJudgeNumbers[l][p].SetName( ssprintf("%sNumberP%d",JUDGE_STRING[l],p+1) );
|
||||
m_textJudgeNumbers[l][p].SetName( JudgeLineToString(l)+ssprintf("NumberP%d",p+1) );
|
||||
SET_XY_AND_ON_COMMAND( m_textJudgeNumbers[l][p] );
|
||||
this->AddChild( &m_textJudgeNumbers[l][p] );
|
||||
|
||||
int iValue;
|
||||
switch( l )
|
||||
{
|
||||
case tier1: iValue = STATSMAN->m_CurStageStats.m_player[p].iTapNoteScores[TNS_Tier1]; break;
|
||||
case tier2: iValue = STATSMAN->m_CurStageStats.m_player[p].iTapNoteScores[TNS_Tier2]; break;
|
||||
case tier3: iValue = STATSMAN->m_CurStageStats.m_player[p].iTapNoteScores[TNS_Tier3]; break;
|
||||
case tier4: iValue = STATSMAN->m_CurStageStats.m_player[p].iTapNoteScores[TNS_Tier4]; break;
|
||||
case tier5: iValue = STATSMAN->m_CurStageStats.m_player[p].iTapNoteScores[TNS_Tier5]; break;
|
||||
case miss: iValue = STATSMAN->m_CurStageStats.m_player[p].iTapNoteScores[TNS_Miss]; break;
|
||||
case ok: iValue = STATSMAN->m_CurStageStats.m_player[p].iHoldNoteScores[HNS_Held]; break;
|
||||
case max_combo: iValue = STATSMAN->m_CurStageStats.m_player[p].GetMaxCombo().cnt; break;
|
||||
case error: iValue = STATSMAN->m_CurStageStats.m_player[p].iTotalError; break;
|
||||
case JudgeLine_W1: iValue = STATSMAN->m_CurStageStats.m_player[p].iTapNoteScores[TNS_W1]; break;
|
||||
case JudgeLine_W2: iValue = STATSMAN->m_CurStageStats.m_player[p].iTapNoteScores[TNS_W2]; break;
|
||||
case JudgeLine_W3: iValue = STATSMAN->m_CurStageStats.m_player[p].iTapNoteScores[TNS_W3]; break;
|
||||
case JudgeLine_W4: iValue = STATSMAN->m_CurStageStats.m_player[p].iTapNoteScores[TNS_W4]; break;
|
||||
case JudgeLine_W5: iValue = STATSMAN->m_CurStageStats.m_player[p].iTapNoteScores[TNS_W5]; break;
|
||||
case JudgeLine_Miss: iValue = STATSMAN->m_CurStageStats.m_player[p].iTapNoteScores[TNS_Miss]; break;
|
||||
case JudgeLine_Held: iValue = STATSMAN->m_CurStageStats.m_player[p].iHoldNoteScores[HNS_Held]; break;
|
||||
case JudgeLine_MaxCombo: iValue = STATSMAN->m_CurStageStats.m_player[p].GetMaxCombo().cnt; break;
|
||||
case JudgeLine_Error: iValue = STATSMAN->m_CurStageStats.m_player[p].iTotalError; break;
|
||||
default: iValue = 0; ASSERT(0);
|
||||
}
|
||||
|
||||
// UGLY... generalize this
|
||||
int iNumDigits = (l==max_combo) ? MAX_COMBO_NUM_DIGITS : 4;
|
||||
int iNumDigits = (l==JudgeLine_MaxCombo) ? MAX_COMBO_NUM_DIGITS : 4;
|
||||
m_textJudgeNumbers[l][p].SetText( ssprintf("%*d",iNumDigits,iValue) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for( int l=0; l<NUM_STATS_LINES; l++ )
|
||||
FOREACH_StatLine( l )
|
||||
{
|
||||
if( !SHOW_STAT(l) )
|
||||
continue;
|
||||
|
||||
if( SHOW_STATS_LABELS )
|
||||
{
|
||||
m_sprStatsLabel[l].Load( THEME->GetPathG(m_sName,ssprintf("label %s", STATS_STRING[l])) );
|
||||
m_sprStatsLabel[l].Load( THEME->GetPathG(m_sName,"label "+StatLineToString(l)) );
|
||||
m_sprStatsLabel[l]->StopAnimating();
|
||||
m_sprStatsLabel[l]->SetName( ssprintf("%sLabel",STATS_STRING[l]) );
|
||||
m_sprStatsLabel[l]->SetName( StatLineToString(l)+"Label" );
|
||||
SET_XY_AND_ON_COMMAND( m_sprStatsLabel[l] );
|
||||
this->AddChild( m_sprStatsLabel[l] );
|
||||
}
|
||||
@@ -537,11 +542,11 @@ void ScreenEvaluation::Init()
|
||||
{
|
||||
m_textStatsText[l][p].LoadFromFont( THEME->GetPathF(m_sName,"stats") );
|
||||
m_textStatsText[l][p].RunCommands( PLAYER_COLOR.GetValue(p) );
|
||||
m_textStatsText[l][p].SetName( ssprintf("%sTextP%d",STATS_STRING[l],p+1) );
|
||||
m_textStatsText[l][p].SetName( StatLineToString(l)+ssprintf("TextP%d",p+1) );
|
||||
SET_XY_AND_ON_COMMAND( m_textStatsText[l][p] );
|
||||
this->AddChild( &m_textStatsText[l][p] );
|
||||
|
||||
const int indeces[NUM_STATS_LINES] =
|
||||
static const int indeces[NUM_StatLine] =
|
||||
{
|
||||
RADAR_NUM_JUMPS, RADAR_NUM_HOLDS, RADAR_NUM_MINES, RADAR_NUM_HANDS, RADAR_NUM_ROLLS
|
||||
};
|
||||
@@ -789,7 +794,7 @@ void ScreenEvaluation::TweenOursOffScreen()
|
||||
}
|
||||
|
||||
// judgement area
|
||||
for( int l=0; l<NUM_JUDGE_LINES; l++ )
|
||||
FOREACH_JudgeLine( l )
|
||||
{
|
||||
if( !SHOW_JUDGMENT(l) )
|
||||
continue;
|
||||
@@ -801,7 +806,7 @@ void ScreenEvaluation::TweenOursOffScreen()
|
||||
}
|
||||
|
||||
// stats area
|
||||
for( int l=0; l<NUM_STATS_LINES; l++ )
|
||||
FOREACH_StatLine( l )
|
||||
{
|
||||
if( !SHOW_STAT(l) )
|
||||
continue;
|
||||
|
||||
@@ -16,8 +16,28 @@
|
||||
#include "ThemeMetric.h"
|
||||
|
||||
const int MAX_SONGS_TO_SHOW = 5; // In summary, we show last 3 stages, plus extra stages if passed
|
||||
enum JudgeLine { tier1, tier2, tier3, tier4, tier5, miss, ok, max_combo, error, NUM_JUDGE_LINES };
|
||||
enum StatsLine { jumps, holds, mines, hands, rolls, NUM_STATS_LINES };
|
||||
enum JudgeLine
|
||||
{
|
||||
JudgeLine_W1,
|
||||
JudgeLine_W2,
|
||||
JudgeLine_W3,
|
||||
JudgeLine_W4,
|
||||
JudgeLine_W5,
|
||||
JudgeLine_Miss,
|
||||
JudgeLine_Held,
|
||||
JudgeLine_MaxCombo,
|
||||
JudgeLine_Error,
|
||||
NUM_JudgeLine
|
||||
};
|
||||
enum StatLine
|
||||
{
|
||||
StatLine_Jumps,
|
||||
StatLine_Holds,
|
||||
StatLine_Mines,
|
||||
StatLine_Hands,
|
||||
StatLine_Rolls,
|
||||
NUM_StatLine
|
||||
};
|
||||
|
||||
class ScreenEvaluation : public ScreenWithMenuElements
|
||||
{
|
||||
@@ -69,12 +89,12 @@ protected:
|
||||
Sprite m_sprWin[NUM_PLAYERS];
|
||||
|
||||
// judgment area
|
||||
Sprite m_sprJudgeLabels[NUM_JUDGE_LINES];
|
||||
BitmapText m_textJudgeNumbers[NUM_JUDGE_LINES][NUM_PLAYERS];
|
||||
Sprite m_sprJudgeLabels[NUM_JudgeLine];
|
||||
BitmapText m_textJudgeNumbers[NUM_JudgeLine][NUM_PLAYERS];
|
||||
|
||||
// stats area
|
||||
AutoActor m_sprStatsLabel[NUM_STATS_LINES];
|
||||
BitmapText m_textStatsText[NUM_STATS_LINES][NUM_PLAYERS];
|
||||
AutoActor m_sprStatsLabel[NUM_StatLine];
|
||||
BitmapText m_textStatsText[NUM_StatLine][NUM_PLAYERS];
|
||||
|
||||
// score area
|
||||
AutoActor m_sprScoreLabel;
|
||||
|
||||
@@ -14,16 +14,17 @@
|
||||
#include "PercentageDisplay.h"
|
||||
|
||||
|
||||
static const CString JudgeLineNames[] = {
|
||||
"Tier1",
|
||||
"Tier2",
|
||||
"Tier3",
|
||||
"Tier4",
|
||||
"Tier5",
|
||||
static const CString MultiplayerJudgeLineNames[] = {
|
||||
"W1",
|
||||
"W2",
|
||||
"W3",
|
||||
"W4",
|
||||
"W5",
|
||||
"Miss",
|
||||
"Ok",
|
||||
"Held",
|
||||
};
|
||||
XToString( JudgeLine, NUM_JudgeLine );
|
||||
XToString( MultiplayerJudgeLine, NUM_MultiplayerJudgeLine );
|
||||
#define FOREACH_MultiplayerJudgeLine( i ) FOREACH_ENUM( MultiplayerJudgeLine, NUM_MultiplayerJudgeLine, i )
|
||||
|
||||
static void PositionItem( LuaExpression &expr, Actor *pSelf, int iItemIndex, int iNumItems )
|
||||
{
|
||||
@@ -42,7 +43,7 @@ class MultiplayerEvalScoreRow : public ActorFrame
|
||||
protected:
|
||||
AutoActor m_sprFrame;
|
||||
PercentageDisplay m_score;
|
||||
BitmapText m_textJudgmentNumber[NUM_JudgeLine];
|
||||
BitmapText m_textJudgmentNumber[NUM_MultiplayerJudgeLine];
|
||||
|
||||
public:
|
||||
MultiplayerEvalScoreRow( MultiPlayer mp, int iRankIndex )
|
||||
@@ -66,7 +67,7 @@ public:
|
||||
LuaExpression expr;
|
||||
expr.SetFromExpression( THEME->GetMetric("MultiplayerEvalScoreRow","NumberOnCommandFunction") );
|
||||
|
||||
for( int i=0; i<NUM_JudgeLine; i++ )
|
||||
FOREACH_MultiplayerJudgeLine( i )
|
||||
{
|
||||
BitmapText &text = m_textJudgmentNumber[i];
|
||||
text.LoadFromFont( THEME->GetPathF("MultiplayerEvalScoreRow","JudgmentNumber") );
|
||||
@@ -76,19 +77,19 @@ public:
|
||||
switch( i )
|
||||
{
|
||||
default: ASSERT(0);
|
||||
case JudgeLine_Tier1: iVal = pPlayerStageStats->iTapNoteScores[TNS_Tier1];break;
|
||||
case JudgeLine_Tier2: iVal = pPlayerStageStats->iTapNoteScores[TNS_Tier2]; break;
|
||||
case JudgeLine_Tier3: iVal = pPlayerStageStats->iTapNoteScores[TNS_Tier3]; break;
|
||||
case JudgeLine_Tier4: iVal = pPlayerStageStats->iTapNoteScores[TNS_Tier4]; break;
|
||||
case JudgeLine_Tier5: iVal = pPlayerStageStats->iTapNoteScores[TNS_Tier5]; break;
|
||||
case JudgeLine_Miss: iVal = pPlayerStageStats->iTapNoteScores[TNS_Miss]; break;
|
||||
case JudgeLine_Ok: iVal = pPlayerStageStats->iHoldNoteScores[HNS_Held]; break;
|
||||
case MultiplayerJudgeLine_W1: iVal = pPlayerStageStats->iTapNoteScores[TNS_W1]; break;
|
||||
case MultiplayerJudgeLine_W2: iVal = pPlayerStageStats->iTapNoteScores[TNS_W2]; break;
|
||||
case MultiplayerJudgeLine_W3: iVal = pPlayerStageStats->iTapNoteScores[TNS_W3]; break;
|
||||
case MultiplayerJudgeLine_W4: iVal = pPlayerStageStats->iTapNoteScores[TNS_W4]; break;
|
||||
case MultiplayerJudgeLine_W5: iVal = pPlayerStageStats->iTapNoteScores[TNS_W5]; break;
|
||||
case MultiplayerJudgeLine_Miss: iVal = pPlayerStageStats->iTapNoteScores[TNS_Miss]; break;
|
||||
case MultiplayerJudgeLine_Held: iVal = pPlayerStageStats->iHoldNoteScores[HNS_Held];break;
|
||||
}
|
||||
|
||||
CString s = ssprintf( "%3d", iVal );
|
||||
text.SetText( s );
|
||||
|
||||
PositionItem( expr, &text, i, NUM_JudgeLine );
|
||||
PositionItem( expr, &text, i, NUM_MultiplayerJudgeLine );
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -149,10 +150,10 @@ ScreenEvaluationMultiplayer::ScreenEvaluationMultiplayer( CString sClassName ) :
|
||||
{
|
||||
STATSMAN->m_CurStageStats.m_multiPlayer[p].bFailedEarlier = true;
|
||||
}
|
||||
STATSMAN->m_CurStageStats.m_multiPlayer[p].iTapNoteScores[TNS_Tier1] = rand()%3;
|
||||
STATSMAN->m_CurStageStats.m_multiPlayer[p].iTapNoteScores[TNS_Tier2] = rand()%3;
|
||||
STATSMAN->m_CurStageStats.m_multiPlayer[p].iTapNoteScores[TNS_Tier3] = rand()%3;
|
||||
STATSMAN->m_CurStageStats.m_multiPlayer[p].iPossibleGradePoints = 4*ScoreKeeperNormal::TapNoteScoreToGradePoints(TNS_Tier1, false);
|
||||
STATSMAN->m_CurStageStats.m_multiPlayer[p].iTapNoteScores[TNS_W1] = rand()%3;
|
||||
STATSMAN->m_CurStageStats.m_multiPlayer[p].iTapNoteScores[TNS_W2] = rand()%3;
|
||||
STATSMAN->m_CurStageStats.m_multiPlayer[p].iTapNoteScores[TNS_W3] = rand()%3;
|
||||
STATSMAN->m_CurStageStats.m_multiPlayer[p].iPossibleGradePoints = 4*ScoreKeeperNormal::TapNoteScoreToGradePoints(TNS_W1, false);
|
||||
STATSMAN->m_CurStageStats.m_multiPlayer[p].fLifeRemainingSeconds = randomf( 90, 580 );
|
||||
}
|
||||
|
||||
@@ -199,13 +200,13 @@ void ScreenEvaluationMultiplayer::Init()
|
||||
LuaExpression expr;
|
||||
expr.SetFromExpression( THEME->GetMetric("ScreenEvaluationMultiplayer","LabelOnCommandFunction") );
|
||||
|
||||
FOREACH_JudgeLine( i )
|
||||
FOREACH_MultiplayerJudgeLine( i )
|
||||
{
|
||||
AutoActor &a = m_sprJudgmentLabel[i];
|
||||
a.Load( THEME->GetPathG("ScreenEvaluationMultiplayer","JudgmentLabel"+JudgeLineToString(i)) );
|
||||
a.Load( THEME->GetPathG("ScreenEvaluationMultiplayer","JudgmentLabel"+MultiplayerJudgeLineToString(i)) );
|
||||
m_frameLabels.AddChild( m_sprJudgmentLabel[i] );
|
||||
|
||||
PositionItem( expr, a, i, NUM_JudgeLine );
|
||||
PositionItem( expr, a, i, NUM_MultiplayerJudgeLine );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -5,20 +5,18 @@
|
||||
|
||||
class MultiplayerEvalScoreRow;
|
||||
|
||||
enum JudgeLine
|
||||
enum MultiplayerJudgeLine
|
||||
{
|
||||
JudgeLine_Tier1,
|
||||
JudgeLine_Tier2,
|
||||
JudgeLine_Tier3,
|
||||
JudgeLine_Tier4,
|
||||
JudgeLine_Tier5,
|
||||
JudgeLine_Miss,
|
||||
JudgeLine_Ok,
|
||||
NUM_JudgeLine,
|
||||
JudgeLine_INVALID
|
||||
MultiplayerJudgeLine_W1,
|
||||
MultiplayerJudgeLine_W2,
|
||||
MultiplayerJudgeLine_W3,
|
||||
MultiplayerJudgeLine_W4,
|
||||
MultiplayerJudgeLine_W5,
|
||||
MultiplayerJudgeLine_Miss,
|
||||
MultiplayerJudgeLine_Held,
|
||||
NUM_MultiplayerJudgeLine,
|
||||
MultiplayerJudgeLine_INVALID
|
||||
};
|
||||
#define FOREACH_JudgeLine( i ) FOREACH_ENUM( JudgeLine, NUM_JudgeLine, i )
|
||||
const CString& JudgeLineToString( JudgeLine i );
|
||||
|
||||
class ScreenEvaluationMultiplayer : public ScreenWithMenuElements
|
||||
{
|
||||
@@ -37,7 +35,7 @@ protected:
|
||||
void MenuStart( PlayerNumber pn );
|
||||
|
||||
ActorFrame m_frameLabels;
|
||||
AutoActor m_sprJudgmentLabel[NUM_JudgeLine];
|
||||
AutoActor m_sprJudgmentLabel[NUM_MultiplayerJudgeLine];
|
||||
|
||||
vector<AutoActor> m_vsprBullet;
|
||||
vector<MultiplayerEvalScoreRow*> m_vpMultiplayerEvalScoreRow;
|
||||
|
||||
@@ -1744,12 +1744,12 @@ void ScreenGameplay::Update( float fDeltaTime )
|
||||
|
||||
switch( tns )
|
||||
{
|
||||
case TNS_Tier4:
|
||||
case TNS_Tier3:
|
||||
case TNS_W4:
|
||||
case TNS_W3:
|
||||
state = AS2D_GOOD;
|
||||
break;
|
||||
case TNS_Tier2:
|
||||
case TNS_Tier1:
|
||||
case TNS_W2:
|
||||
case TNS_W1:
|
||||
state = AS2D_GREAT;
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -21,13 +21,13 @@
|
||||
#include "CharacterManager.h"
|
||||
#include "StatsManager.h"
|
||||
|
||||
static const ThemeMetric<CString> STEPFILE ("ScreenHowToPlay","Stepfile");
|
||||
static const ThemeMetric<int> NUM_TIER2S ("ScreenHowToPlay","NumTier2s");
|
||||
static const ThemeMetric<int> NUM_MISSES ("ScreenHowToPlay","NumMisses");
|
||||
static const ThemeMetric<bool> USELIFEBAR ("ScreenHowToPlay","UseLifeMeterBar");
|
||||
static const ThemeMetric<bool> USECHARACTER ("ScreenHowToPlay","UseCharacter");
|
||||
static const ThemeMetric<bool> USEPAD ("ScreenHowToPlay","UsePad");
|
||||
static const ThemeMetric<bool> USEPLAYER ("ScreenHowToPlay","UseNotefield");
|
||||
static const ThemeMetric<CString> STEPFILE ("ScreenHowToPlay","Stepfile");
|
||||
static const ThemeMetric<int> NUM_W2S ("ScreenHowToPlay","NumW2s");
|
||||
static const ThemeMetric<int> NUM_MISSES ("ScreenHowToPlay","NumMisses");
|
||||
static const ThemeMetric<bool> USELIFEBAR ("ScreenHowToPlay","UseLifeMeterBar");
|
||||
static const ThemeMetric<bool> USECHARACTER ("ScreenHowToPlay","UseCharacter");
|
||||
static const ThemeMetric<bool> USEPAD ("ScreenHowToPlay","UsePad");
|
||||
static const ThemeMetric<bool> USEPLAYER ("ScreenHowToPlay","UseNotefield");
|
||||
|
||||
enum Animation
|
||||
{
|
||||
@@ -69,8 +69,8 @@ static bool HaveAllCharAnimations()
|
||||
REGISTER_SCREEN_CLASS( ScreenHowToPlay );
|
||||
ScreenHowToPlay::ScreenHowToPlay( CString sName ) : ScreenAttract( sName )
|
||||
{
|
||||
m_iTier2s = 0;
|
||||
m_iNumTier2s = NUM_TIER2S;
|
||||
m_iW2s = 0;
|
||||
m_iNumW2s = NUM_W2S;
|
||||
|
||||
// initialize these because they might not be used.
|
||||
m_pPlayer = NULL;
|
||||
@@ -128,7 +128,7 @@ void ScreenHowToPlay::Init()
|
||||
m_pLifeMeterBar->SetName("LifeMeterBar");
|
||||
m_pLifeMeterBar->Load( GAMESTATE->m_pPlayerState[PLAYER_1], &STATSMAN->m_CurStageStats.m_player[PLAYER_1] );
|
||||
SET_XY_AND_ON_COMMAND( m_pLifeMeterBar );
|
||||
m_pLifeMeterBar->FillForHowToPlay( NUM_TIER2S, NUM_MISSES );
|
||||
m_pLifeMeterBar->FillForHowToPlay( NUM_W2S, NUM_MISSES );
|
||||
}
|
||||
|
||||
GAMESTATE->m_pCurStyle.Set( GAMEMAN->GetHowToPlayStyleForGame(GAMESTATE->m_pCurGame) );
|
||||
@@ -205,7 +205,7 @@ void ScreenHowToPlay::Step()
|
||||
int iStep = 0;
|
||||
const int iNoteRow = BeatToNoteRowNotRounded( GAMESTATE->m_fSongBeat + 0.6f );
|
||||
// if we want to miss from here on out, don't process steps.
|
||||
if( m_iTier2s < m_iNumTier2s && m_NoteData.IsThereATapAtRow( iNoteRow ) )
|
||||
if( m_iW2s < m_iNumW2s && m_NoteData.IsThereATapAtRow( iNoteRow ) )
|
||||
{
|
||||
const int iNumTracks = m_NoteData.GetNumTracks();
|
||||
for( int k=0; k<iNumTracks; k++ )
|
||||
@@ -248,19 +248,19 @@ void ScreenHowToPlay::Update( float fDelta )
|
||||
{
|
||||
if( m_pLifeMeterBar && !m_pPlayer )
|
||||
{
|
||||
if ( m_iTier2s < m_iNumTier2s )
|
||||
m_pLifeMeterBar->ChangeLife(TNS_Tier2);
|
||||
if ( m_iW2s < m_iNumW2s )
|
||||
m_pLifeMeterBar->ChangeLife(TNS_W2);
|
||||
else
|
||||
m_pLifeMeterBar->ChangeLife(TNS_Miss);
|
||||
}
|
||||
m_iTier2s++;
|
||||
m_iW2s++;
|
||||
iLastNoteRowCounted = iCurNoteRow;
|
||||
}
|
||||
|
||||
// once we hit the number of perfects we want, we want to fail.
|
||||
// switch the controller to HUMAN. since we aren't taking input,
|
||||
// the steps will always be misses.
|
||||
if(m_iTier2s > m_iNumTier2s)
|
||||
if(m_iW2s > m_iNumW2s)
|
||||
GAMESTATE->m_pPlayerState[PLAYER_1]->m_PlayerController = PC_HUMAN;
|
||||
|
||||
if ( m_pmCharacter )
|
||||
|
||||
@@ -26,8 +26,8 @@ protected:
|
||||
Player* m_pPlayer;
|
||||
Model* m_pmCharacter;
|
||||
Model* m_pmDancePad;
|
||||
int m_iTier2s;
|
||||
int m_iNumTier2s;
|
||||
int m_iW2s;
|
||||
int m_iNumW2s;
|
||||
|
||||
Song m_Song;
|
||||
NoteData m_NoteData;
|
||||
|
||||
@@ -358,7 +358,7 @@ void ScreenNameEntry::Input( const InputEventPlus &input )
|
||||
int iStringIndex = m_ColToStringIndex[input.StyleI.player][input.StyleI.col];
|
||||
if( iStringIndex != -1 )
|
||||
{
|
||||
m_ReceptorArrowRow[input.StyleI.player].Step( input.StyleI.col, TNS_Tier1 );
|
||||
m_ReceptorArrowRow[input.StyleI.player].Step( input.StyleI.col, TNS_W1 );
|
||||
m_soundStep.Play();
|
||||
char c = NAME_CHARS[GetClosestCharIndex(m_fFakeBeat)];
|
||||
m_textSelectedChars[input.StyleI.player][input.StyleI.col].SetText( ssprintf("%c",c) );
|
||||
|
||||
@@ -199,7 +199,7 @@ void ScreenNetEvaluation::UpdateStats()
|
||||
|
||||
for (int j=0; j<NETNUMTAPSCORES; ++j)
|
||||
{
|
||||
int iNumDigits = (j==max_combo) ? MAX_COMBO_NUM_DIGITS : 4;
|
||||
int iNumDigits = (j==JudgeLine_MaxCombo) ? MAX_COMBO_NUM_DIGITS : 4;
|
||||
if (m_textJudgeNumbers[j][m_pActivePlayer].m_pFont != NULL)
|
||||
m_textJudgeNumbers[j][m_pActivePlayer].SetText( ssprintf( "%*d", iNumDigits, NSMAN->m_EvalPlayerData[m_iCurrentPlayer].tapScores[j] ) );
|
||||
}
|
||||
|
||||
@@ -308,10 +308,10 @@ MOVE( AllowExtraStage, PREFSMAN->m_bAllowExtraStage );
|
||||
MOVE( PickExtraStage, PREFSMAN->m_bPickExtraStage );
|
||||
MOVE( UnlockSystem, PREFSMAN->m_bUseUnlockSystem );
|
||||
|
||||
static void Tier1Timing( int &sel, bool ToSel, const ConfOption *pConfOption )
|
||||
static void AllowW1( int &sel, bool ToSel, const ConfOption *pConfOption )
|
||||
{
|
||||
const PrefsManager::Tier1Timing mapping[] = { PrefsManager::TIER1_NEVER, PrefsManager::TIER1_COURSES_ONLY, PrefsManager::TIER1_EVERYWHERE };
|
||||
MoveMap( sel, PREFSMAN->m_Tier1Timing, ToSel, mapping, ARRAYSIZE(mapping) );
|
||||
const PrefsManager::AllowW1 mapping[] = { PrefsManager::ALLOW_W1_NEVER, PrefsManager::ALLOW_W1_COURSES_ONLY, PrefsManager::ALLOW_W1_EVERYWHERE };
|
||||
MoveMap( sel, PREFSMAN->m_AllowW1, ToSel, mapping, ARRAYSIZE(mapping) );
|
||||
}
|
||||
|
||||
static void CoinModeM( int &sel, bool ToSel, const ConfOption *pConfOption )
|
||||
@@ -361,7 +361,7 @@ MOVE( ScoringType, PREFSMAN->m_ScoringType );
|
||||
static void JudgeDifficulty( int &sel, bool ToSel, const ConfOption *pConfOption )
|
||||
{
|
||||
const float mapping[] = { 1.50f,1.33f,1.16f,1.00f,0.84f,0.66f,0.50f,0.33f,0.20f };
|
||||
MoveMap( sel, PREFSMAN->m_fJudgeWindowScale, ToSel, mapping, ARRAYSIZE(mapping) );
|
||||
MoveMap( sel, PREFSMAN->m_fTimingWindowScale, ToSel, mapping, ARRAYSIZE(mapping) );
|
||||
}
|
||||
|
||||
static void LifeDifficulty( int &sel, bool ToSel, const ConfOption *pConfOption )
|
||||
@@ -570,7 +570,7 @@ static void InitializeConfOptions()
|
||||
ADD( ConfOption( "SoloSingles", SoloSingles, "OFF","ON" ) );
|
||||
ADD( ConfOption( "HiddenSongs", MovePref, "OFF","ON" ) );
|
||||
ADD( ConfOption( "EasterEggs", EasterEggs, "OFF","ON" ) );
|
||||
ADD( ConfOption( "Tier1Timing", Tier1Timing, "NEVER","COURSES ONLY","ALWAYS" ) );
|
||||
ADD( ConfOption( "AllowW1", AllowW1, "NEVER","COURSES ONLY","ALWAYS" ) );
|
||||
ADD( ConfOption( "AllowExtraStage", AllowExtraStage, "OFF","ON" ) );
|
||||
ADD( ConfOption( "PickExtraStage", PickExtraStage, "OFF","ON" ) );
|
||||
ADD( ConfOption( "UnlockSystem", UnlockSystem, "OFF","ON" ) );
|
||||
|
||||
Reference in New Issue
Block a user