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:
Chris Danford
2005-10-09 04:30:59 +00:00
parent 2264d09032
commit feb1bfb0fc
44 changed files with 767 additions and 698 deletions
+9 -14
View File
@@ -47,13 +47,13 @@ void CombinedLifeMeterTug::ChangeLife( PlayerNumber pn, TapNoteScore score )
float fPercentToMove = 0; float fPercentToMove = 0;
switch( score ) switch( score )
{ {
case TNS_Tier1: fPercentToMove = PREFSMAN->m_fTugMeterPercentChangeTier1; break; case TNS_W1: fPercentToMove = PREFSMAN->m_fTugMeterPercentChange.Get(SE_W1); break;
case TNS_Tier2: fPercentToMove = PREFSMAN->m_fTugMeterPercentChangeTier2; break; case TNS_W2: fPercentToMove = PREFSMAN->m_fTugMeterPercentChange.Get(SE_W2); break;
case TNS_Tier3: fPercentToMove = PREFSMAN->m_fTugMeterPercentChangeTier3; break; case TNS_W3: fPercentToMove = PREFSMAN->m_fTugMeterPercentChange.Get(SE_W3); break;
case TNS_Tier4: fPercentToMove = PREFSMAN->m_fTugMeterPercentChangeTier4; break; case TNS_W4: fPercentToMove = PREFSMAN->m_fTugMeterPercentChange.Get(SE_W4); break;
case TNS_Tier5: fPercentToMove = PREFSMAN->m_fTugMeterPercentChangeTier5; break; case TNS_W5: fPercentToMove = PREFSMAN->m_fTugMeterPercentChange.Get(SE_W5); break;
case TNS_Miss: fPercentToMove = PREFSMAN->m_fTugMeterPercentChangeMiss; break; case TNS_Miss: fPercentToMove = PREFSMAN->m_fTugMeterPercentChange.Get(SE_Miss); break;
case TNS_HitMine: fPercentToMove = PREFSMAN->m_fTugMeterPercentChangeHitMine; break; case TNS_HitMine: fPercentToMove = PREFSMAN->m_fTugMeterPercentChange.Get(SE_HitMine); break;
default: ASSERT(0); 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 ) 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; float fPercentToMove = 0;
switch( score ) switch( score )
{ {
case HNS_Held: fPercentToMove = PREFSMAN->m_fTugMeterPercentChangeHeld; break; case HNS_Held: fPercentToMove = PREFSMAN->m_fTugMeterPercentChange.Get(SE_Held); break;
case HNS_LetGo: fPercentToMove = PREFSMAN->m_fTugMeterPercentChangeLetGo; break; case HNS_LetGo: fPercentToMove = PREFSMAN->m_fTugMeterPercentChange.Get(SE_LetGo); break;
default: ASSERT(0); break; default: ASSERT(0); break;
} }
+12 -12
View File
@@ -34,9 +34,9 @@ void Combo::Load( PlayerState *pPlayerState, PlayerStageStats *pPlayerStageStats
NUMBER_MAX_ZOOM .Load(m_sName,"NumberMaxZoom"); NUMBER_MAX_ZOOM .Load(m_sName,"NumberMaxZoom");
NUMBER_MAX_ZOOM_AT .Load(m_sName,"NumberMaxZoomAt"); NUMBER_MAX_ZOOM_AT .Load(m_sName,"NumberMaxZoomAt");
PULSE_COMMAND .Load(m_sName,"PulseCommand"); PULSE_COMMAND .Load(m_sName,"PulseCommand");
FULL_COMBO_TIER3_COMMAND .Load(m_sName,"FullComboTier3Command"); FULL_COMBO_W3_COMMAND .Load(m_sName,"FullComboW3Command");
FULL_COMBO_TIER2_COMMAND .Load(m_sName,"FullComboTier2Command"); FULL_COMBO_W2_COMMAND .Load(m_sName,"FullComboW2Command");
FULL_COMBO_TIER1_COMMAND .Load(m_sName,"FullComboTier1Command"); FULL_COMBO_W1_COMMAND .Load(m_sName,"FullComboW1Command");
FULL_COMBO_BROKEN_COMMAND .Load(m_sName,"FullComboBrokenCommand"); FULL_COMBO_BROKEN_COMMAND .Load(m_sName,"FullComboBrokenCommand");
SHOW_MISS_COMBO .Load(m_sName,"ShowMissCombo"); SHOW_MISS_COMBO .Load(m_sName,"ShowMissCombo");
@@ -126,20 +126,20 @@ void Combo::SetCombo( int iCombo, int iMisses )
if( bPastMidpoint ) if( bPastMidpoint )
{ {
if( m_pPlayerStageStats->FullComboOfScore(TNS_Tier1) ) if( m_pPlayerStageStats->FullComboOfScore(TNS_W1) )
{ {
sprLabel->RunCommands( FULL_COMBO_TIER1_COMMAND ); sprLabel->RunCommands( FULL_COMBO_W1_COMMAND );
m_textNumber.RunCommands( FULL_COMBO_TIER1_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 ); sprLabel->RunCommands( FULL_COMBO_W2_COMMAND );
m_textNumber.RunCommands( FULL_COMBO_TIER2_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 ); sprLabel->RunCommands( FULL_COMBO_W3_COMMAND );
m_textNumber.RunCommands( FULL_COMBO_TIER3_COMMAND ); m_textNumber.RunCommands( FULL_COMBO_W3_COMMAND );
} }
else else
{ {
+3 -3
View File
@@ -33,9 +33,9 @@ protected:
ThemeMetric<float> NUMBER_MAX_ZOOM_AT; ThemeMetric<float> NUMBER_MAX_ZOOM_AT;
ThemeMetric<apActorCommands> PULSE_COMMAND; ThemeMetric<apActorCommands> PULSE_COMMAND;
ThemeMetric<float> TWEEN_SECONDS; ThemeMetric<float> TWEEN_SECONDS;
ThemeMetric<apActorCommands> FULL_COMBO_TIER3_COMMAND; ThemeMetric<apActorCommands> FULL_COMBO_W3_COMMAND;
ThemeMetric<apActorCommands> FULL_COMBO_TIER2_COMMAND; ThemeMetric<apActorCommands> FULL_COMBO_W2_COMMAND;
ThemeMetric<apActorCommands> FULL_COMBO_TIER1_COMMAND; ThemeMetric<apActorCommands> FULL_COMBO_W1_COMMAND;
ThemeMetric<apActorCommands> FULL_COMBO_BROKEN_COMMAND; ThemeMetric<apActorCommands> FULL_COMBO_BROKEN_COMMAND;
ThemeMetric<bool> SHOW_MISS_COMBO; ThemeMetric<bool> SHOW_MISS_COMBO;
+5 -5
View File
@@ -105,11 +105,11 @@ TapNoteScore Game::MapTapNoteScore( TapNoteScore tns ) const
{ {
switch( tns ) switch( tns )
{ {
case TNS_Tier1: return m_mapTier1To; case TNS_W1: return m_mapW1To;
case TNS_Tier2: return m_mapTier2To; case TNS_W2: return m_mapW2To;
case TNS_Tier3: return m_mapTier3To; case TNS_W3: return m_mapW3To;
case TNS_Tier4: return m_mapTier4To; case TNS_W4: return m_mapW4To;
case TNS_Tier5: return m_mapTier5To; case TNS_W5: return m_mapW5To;
default: return tns; default: return tns;
} }
} }
+5 -5
View File
@@ -57,11 +57,11 @@ public:
CString ColToButtonName( int col ) const; // looks up current style. Yuck. CString ColToButtonName( int col ) const; // looks up current style. Yuck.
TapNoteScore MapTapNoteScore( TapNoteScore tns ) const; TapNoteScore MapTapNoteScore( TapNoteScore tns ) const;
TapNoteScore m_mapTier1To; TapNoteScore m_mapW1To;
TapNoteScore m_mapTier2To; TapNoteScore m_mapW2To;
TapNoteScore m_mapTier3To; TapNoteScore m_mapW3To;
TapNoteScore m_mapTier4To; TapNoteScore m_mapW4To;
TapNoteScore m_mapTier5To; TapNoteScore m_mapW5To;
// //
// Lua // Lua
+57 -29
View File
@@ -175,32 +175,32 @@ static const CString TapNoteScoreNames[] = {
"HitMine", "HitMine",
"AvoidMine", "AvoidMine",
"Miss", "Miss",
"Tier5", "W5",
"Tier4", "W4",
"Tier3", "W3",
"Tier2", "W2",
"Tier1", "W1",
}; };
XToString( TapNoteScore, NUM_TapNoteScore ); XToString( TapNoteScore, NUM_TapNoteScore );
TapNoteScore StringToTapNoteScore( const CString &s ) 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 // 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 == "HitMine" ) return TNS_HitMine;
else if( s == "AvoidMine" ) return TNS_AvoidMine; else if( s == "AvoidMine" ) return TNS_AvoidMine;
else if( s == "Miss" ) return TNS_Miss; else if( s == "Miss" ) return TNS_Miss;
else if( s == "Tier5" ) return TNS_Tier5; else if( s == "W5" ) return TNS_W5;
else if( s == "Tier4" ) return TNS_Tier4; else if( s == "W4" ) return TNS_W4;
else if( s == "Tier3" ) return TNS_Tier3; else if( s == "W3" ) return TNS_W3;
else if( s == "Tier2" ) return TNS_Tier2; else if( s == "W2" ) return TNS_W2;
else if( s == "Tier1" ) return TNS_Tier1; 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; return TNS_INVALID;
} }
@@ -226,7 +226,7 @@ XToString( HoldNoteScore, NUM_HoldNoteScore );
HoldNoteScore StringToHoldNoteScore( const CString &s ) HoldNoteScore StringToHoldNoteScore( const CString &s )
{ {
// for backward compatibility // for backward compatibility
if ( s == "LetGo" ) return HNS_LetGo; if ( s == "NG" ) return HNS_LetGo;
else if( s == "OK" ) return HNS_Held; else if( s == "OK" ) return HNS_Held;
// new style // new style
@@ -249,6 +249,34 @@ static void LuaHoldNoteScores( lua_State* L )
REGISTER_WITH_LUA_FUNCTION( LuaHoldNoteScores ); 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[] = { static const CString MemoryCardStateNames[] = {
"ready", "ready",
"checking", "checking",
@@ -261,16 +289,16 @@ XToString( MemoryCardState, NUM_MEMORY_CARD_STATES );
static const CString PerDifficultyAwardNames[] = { static const CString PerDifficultyAwardNames[] = {
"FullComboTier3", "FullComboW3",
"SingleDigitTier3", "SingleDigitW3",
"OneTier3", "OneW3",
"FullComboTier2", "FullComboW2",
"SingleDigitTier2", "SingleDigitW2",
"OneTier2", "OneW2",
"FullComboTier1", "FullComboW1",
"Percent80Tier3", "Percent80W3",
"Percent90Tier3", "Percent90W3",
"Percent100Tier3", "Percent100W3",
}; };
XToString( PerDifficultyAward, NUM_PER_DIFFICULTY_AWARDS ); XToString( PerDifficultyAward, NUM_PER_DIFFICULTY_AWARDS );
XToThemedString( PerDifficultyAward, NUM_PER_DIFFICULTY_AWARDS ); XToThemedString( PerDifficultyAward, NUM_PER_DIFFICULTY_AWARDS );
+42 -24
View File
@@ -93,7 +93,8 @@ PlayMode StringToPlayMode( const CString& s );
enum SortOrder { enum SortOrder
{
SORT_PREFERRED, SORT_PREFERRED,
SORT_GROUP, SORT_GROUP,
SORT_TITLE, SORT_TITLE,
@@ -131,11 +132,11 @@ enum TapNoteScore {
TNS_HitMine, TNS_HitMine,
TNS_AvoidMine, TNS_AvoidMine,
TNS_Miss, TNS_Miss,
TNS_Tier5, TNS_W5,
TNS_Tier4, TNS_W4,
TNS_Tier3, TNS_W3,
TNS_Tier2, TNS_W2,
TNS_Tier1, TNS_W1,
NUM_TapNoteScore, NUM_TapNoteScore,
TNS_INVALID, TNS_INVALID,
}; };
@@ -156,22 +157,39 @@ enum HoldNoteScore
#define FOREACH_HoldNoteScore( hns ) FOREACH_ENUM( HoldNoteScore, NUM_HoldNoteScore, hns ) #define FOREACH_HoldNoteScore( hns ) FOREACH_ENUM( HoldNoteScore, NUM_HoldNoteScore, hns )
const CString& HoldNoteScoreToString( HoldNoteScore hns ); const CString& HoldNoteScoreToString( HoldNoteScore hns );
const CString& HoldNoteScoreToThemedString( HoldNoteScore hns ); const CString& HoldNoteScoreToThemedString( HoldNoteScore hns );
HoldNoteScore StringToHoldNoteScore( const CString& str ); HoldNoteScore StringToHoldNoteScore( const CString& str );
enum TimingWindow enum TimingWindow
{ {
TW_Tier1, TW_W1,
TW_Tier2, TW_W2,
TW_Tier3, TW_W3,
TW_Tier4, TW_W4,
TW_Tier5, TW_W5,
TW_Mine, TW_Mine,
TW_Attack, TW_Attack,
TW_Held, TW_Hold,
TW_Roll 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 enum PerDifficultyAward
{ {
AWARD_FULL_COMBO_TIER3, AWARD_FULL_COMBO_W3,
AWARD_SINGLE_DIGIT_TIER3, AWARD_SINGLE_DIGIT_W3,
AWARD_ONE_TIER3, AWARD_ONE_W3,
AWARD_FULL_COMBO_TIER2, AWARD_FULL_COMBO_W2,
AWARD_SINGLE_DIGIT_TIER2, AWARD_SINGLE_DIGIT_W2,
AWARD_ONE_TIER2, AWARD_ONE_W2,
AWARD_FULL_COMBO_TIER1, AWARD_FULL_COMBO_W1,
AWARD_PERCENT_80_TIER3, AWARD_PERCENT_80_W3,
AWARD_PERCENT_90_TIER3, AWARD_PERCENT_90_W3,
AWARD_PERCENT_100_TIER3, AWARD_PERCENT_100_W3,
NUM_PER_DIFFICULTY_AWARDS, NUM_PER_DIFFICULTY_AWARDS,
PER_DIFFICULTY_AWARD_INVALID, PER_DIFFICULTY_AWARD_INVALID,
}; };
+50 -50
View File
@@ -186,11 +186,11 @@ Game g_Games[NUM_GAMES] =
NO_DEFAULT_KEY // DANCE_BUTTON_OPERATOR NO_DEFAULT_KEY // DANCE_BUTTON_OPERATOR
}, },
}, },
TNS_Tier1, // m_mapTier1To TNS_W1, // m_mapW1To
TNS_Tier2, // m_mapTier2To TNS_W2, // m_mapW2To
TNS_Tier3, // m_mapTier3To TNS_W3, // m_mapW3To
TNS_Tier4, // m_mapTier4To TNS_W4, // m_mapW4To
TNS_Tier5, // m_mapTier5To TNS_W5, // m_mapW5To
}, },
{ // GAME_PUMP { // GAME_PUMP
"pump", // m_szName "pump", // m_szName
@@ -270,11 +270,11 @@ Game g_Games[NUM_GAMES] =
NO_DEFAULT_KEY // PUMP_BUTTON_OPERATOR NO_DEFAULT_KEY // PUMP_BUTTON_OPERATOR
}, },
}, },
TNS_Tier1, // m_mapTier1To TNS_W1, // m_mapW1To
TNS_Tier2, // m_mapTier2To TNS_W2, // m_mapW2To
TNS_Tier3, // m_mapTier3To TNS_W3, // m_mapW3To
TNS_Tier4, // m_mapTier4To TNS_W4, // m_mapW4To
TNS_Tier5, // m_mapTier5To TNS_W5, // m_mapW5To
}, },
{ {
"ez2", // m_szName "ez2", // m_szName
@@ -360,11 +360,11 @@ Game g_Games[NUM_GAMES] =
NO_DEFAULT_KEY // EZ2_BUTTON_OPERATOR NO_DEFAULT_KEY // EZ2_BUTTON_OPERATOR
}, },
}, },
TNS_Tier2, // m_mapTier1To TNS_W2, // m_mapW1To
TNS_Tier2, // m_mapTier2To TNS_W2, // m_mapW2To
TNS_Tier2, // m_mapTier3To TNS_W2, // m_mapW3To
TNS_Tier4, // m_mapTier4To TNS_W4, // m_mapW4To
TNS_Miss, // m_mapTier5To TNS_Miss, // m_mapW5To
}, },
{ // GAME_PARA { // GAME_PARA
"para", // m_szName "para", // m_szName
@@ -444,11 +444,11 @@ Game g_Games[NUM_GAMES] =
NO_DEFAULT_KEY // PARA_BUTTON_OPERATOR NO_DEFAULT_KEY // PARA_BUTTON_OPERATOR
}, },
}, },
TNS_Tier1, // m_mapTier1To TNS_W1, // m_mapW1To
TNS_Tier2, // m_mapTier2To TNS_W2, // m_mapW2To
TNS_Tier3, // m_mapTier3To TNS_W3, // m_mapW3To
TNS_Tier4, // m_mapTier4To TNS_W4, // m_mapW4To
TNS_Tier5, // m_mapTier5To TNS_W5, // m_mapW5To
}, },
{ // GAME_DS3DDX { // GAME_DS3DDX
"ds3ddx", // m_szName "ds3ddx", // m_szName
@@ -537,11 +537,11 @@ Game g_Games[NUM_GAMES] =
NO_DEFAULT_KEY // DS3DDX_BUTTON_OPERATOR NO_DEFAULT_KEY // DS3DDX_BUTTON_OPERATOR
}, },
}, },
TNS_Tier1, // m_mapTier1To TNS_W1, // m_mapW1To
TNS_Tier2, // m_mapTier2To TNS_W2, // m_mapW2To
TNS_Tier3, // m_mapTier3To TNS_W3, // m_mapW3To
TNS_Tier4, // m_mapTier4To TNS_W4, // m_mapW4To
TNS_Tier5, // m_mapTier5To TNS_W5, // m_mapW5To
}, },
{ // GAME_BEAT { // GAME_BEAT
"beat", // m_szName "beat", // m_szName
@@ -633,11 +633,11 @@ Game g_Games[NUM_GAMES] =
NO_DEFAULT_KEY // BEAT_BUTTON_OPERATOR NO_DEFAULT_KEY // BEAT_BUTTON_OPERATOR
}, },
}, },
TNS_Tier1, // m_mapTier1To TNS_W1, // m_mapW1To
TNS_Tier2, // m_mapTier2To TNS_W2, // m_mapW2To
TNS_Tier3, // m_mapTier3To TNS_W3, // m_mapW3To
TNS_Tier4, // m_mapTier4To TNS_W4, // m_mapW4To
TNS_Tier5, // m_mapTier5To TNS_W5, // m_mapW5To
}, },
{ // GAME_MANIAX { // GAME_MANIAX
"maniax", // m_szName "maniax", // m_szName
@@ -714,11 +714,11 @@ Game g_Games[NUM_GAMES] =
NO_DEFAULT_KEY // MANIAX_BUTTON_OPERATOR NO_DEFAULT_KEY // MANIAX_BUTTON_OPERATOR
}, },
}, },
TNS_Tier1, // m_mapTier1To TNS_W1, // m_mapW1To
TNS_Tier2, // m_mapTier2To TNS_W2, // m_mapW2To
TNS_Tier3, // m_mapTier3To TNS_W3, // m_mapW3To
TNS_Tier4, // m_mapTier4To TNS_W4, // m_mapW4To
TNS_Tier5, // m_mapTier5To TNS_W5, // m_mapW5To
}, },
{ // GAME_TECHNO { // GAME_TECHNO
"techno", // m_szName "techno", // m_szName
@@ -810,11 +810,11 @@ Game g_Games[NUM_GAMES] =
NO_DEFAULT_KEY // TECHNO_BUTTON_OPERATOR NO_DEFAULT_KEY // TECHNO_BUTTON_OPERATOR
}, },
}, },
TNS_Tier1, // m_mapTier1To TNS_W1, // m_mapW1To
TNS_Tier2, // m_mapTier2To TNS_W2, // m_mapW2To
TNS_Tier3, // m_mapTier3To TNS_W3, // m_mapW3To
TNS_Tier4, // m_mapTier4To TNS_W4, // m_mapW4To
TNS_Tier5, // m_mapTier5To TNS_W5, // m_mapW5To
}, },
{ // GAME_POPN { // GAME_POPN
"popn", // m_szName "popn", // m_szName
@@ -906,11 +906,11 @@ Game g_Games[NUM_GAMES] =
NO_DEFAULT_KEY // BEAT_BUTTON_OPERATOR NO_DEFAULT_KEY // BEAT_BUTTON_OPERATOR
}, },
}, },
TNS_Tier2, // m_mapTier1To TNS_W2, // m_mapW1To
TNS_Tier2, // m_mapTier2To TNS_W2, // m_mapW2To
TNS_Tier3, // m_mapTier3To TNS_W3, // m_mapW3To
TNS_Tier3, // m_mapTier4To TNS_W3, // m_mapW4To
TNS_Miss, // m_mapTier5To TNS_Miss, // m_mapW5To
}, },
{ // GAME_LIGHTS { // GAME_LIGHTS
"lights", // m_szName "lights", // m_szName
@@ -999,11 +999,11 @@ Game g_Games[NUM_GAMES] =
NO_DEFAULT_KEY // LIGHTS_BUTTON_OPERATOR NO_DEFAULT_KEY // LIGHTS_BUTTON_OPERATOR
}, },
}, },
TNS_Tier1, // m_mapTier1To TNS_W1, // m_mapW1To
TNS_Tier2, // m_mapTier2To TNS_W2, // m_mapW2To
TNS_Tier3, // m_mapTier3To TNS_W3, // m_mapW3To
TNS_Tier4, // m_mapTier4To TNS_W4, // m_mapW4To
TNS_Tier5, // m_mapTier5To TNS_W5, // m_mapW5To
}, },
}; };
+5 -5
View File
@@ -1282,13 +1282,13 @@ SongOptions::FailType GameState::GetPlayerFailType( const PlayerState *pPlayerSt
return ft; 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::ALLOW_W1_NEVER: return false;
case PrefsManager::TIER1_COURSES_ONLY: return IsCourseMode(); case PrefsManager::ALLOW_W1_COURSES_ONLY: return IsCourseMode();
case PrefsManager::TIER1_EVERYWHERE: return true; case PrefsManager::ALLOW_W1_EVERYWHERE: return true;
default: ASSERT(0); default: ASSERT(0);
} }
} }
+1 -1
View File
@@ -100,7 +100,7 @@ public:
bool IsCourseMode() const; bool IsCourseMode() const;
bool IsBattleMode() const; /* not Rave */ bool IsBattleMode() const; /* not Rave */
bool ShowTier1() const; bool ShowW1() const;
CString m_sLoadingMessage; // used in loading screen CString m_sLoadingMessage; // used in loading screen
BroadcastOnChange<CString> m_sPreferredSongGroup; // GROUP_ALL denotes no preferred group BroadcastOnChange<CString> m_sPreferredSongGroup; // GROUP_ALL denotes no preferred group
+7 -10
View File
@@ -40,8 +40,14 @@ Grade StringToGrade( const CString &sGrade )
CString s = sGrade; CString s = sGrade;
s.MakeUpper(); 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 // 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 == "AAA" ) return Grade_Tier02;
else if( s == "AA" ) return Grade_Tier03; else if( s == "AA" ) return Grade_Tier03;
else if( s == "A" ) return Grade_Tier04; 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 == "E" ) return Grade_Failed;
else if( s == "N" ) return Grade_NoData; 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() ); LOG->Warn( "Invalid grade: %s", sGrade.c_str() );
return Grade_NoData; return Grade_NoData;
}; };
+16 -16
View File
@@ -6,12 +6,12 @@
#include "ThemeManager.h" #include "ThemeManager.h"
#include "ThemeMetric.h" #include "ThemeMetric.h"
static ThemeMetric<apActorCommands> TIER1_COMMAND ("Judgment","Tier1Command"); static ThemeMetric<apActorCommands> W1_COMMAND ("Judgment","W1Command");
static ThemeMetric<apActorCommands> TIER2_COMMAND ("Judgment","Tier2Command"); static ThemeMetric<apActorCommands> W2_COMMAND ("Judgment","W2Command");
static ThemeMetric<apActorCommands> TIER3_COMMAND ("Judgment","Tier3Command"); static ThemeMetric<apActorCommands> W3_COMMAND ("Judgment","W3Command");
static ThemeMetric<apActorCommands> TIER4_COMMAND ("Judgment","Tier4Command"); static ThemeMetric<apActorCommands> W4_COMMAND ("Judgment","W4Command");
static ThemeMetric<apActorCommands> TIER5_COMMAND ("Judgment","Tier5Command"); static ThemeMetric<apActorCommands> W5_COMMAND ("Judgment","W5Command");
static ThemeMetric<apActorCommands> MISS_COMMAND ("Judgment","MissCommand"); static ThemeMetric<apActorCommands> MISS_COMMAND ("Judgment","MissCommand");
Judgment::Judgment() Judgment::Judgment()
{ {
@@ -48,25 +48,25 @@ void Judgment::SetJudgment( TapNoteScore score, bool bEarly )
switch( score ) switch( score )
{ {
case TNS_Tier1: case TNS_W1:
m_sprJudgment.SetState( 0 * iStateMult + iStateAdd ); m_sprJudgment.SetState( 0 * iStateMult + iStateAdd );
m_sprJudgment.RunCommands( TIER1_COMMAND ); m_sprJudgment.RunCommands( W1_COMMAND );
break; break;
case TNS_Tier2: case TNS_W2:
m_sprJudgment.SetState( 1 * iStateMult + iStateAdd ); m_sprJudgment.SetState( 1 * iStateMult + iStateAdd );
m_sprJudgment.RunCommands( TIER2_COMMAND ); m_sprJudgment.RunCommands( W2_COMMAND );
break; break;
case TNS_Tier3: case TNS_W3:
m_sprJudgment.SetState( 2 * iStateMult + iStateAdd ); m_sprJudgment.SetState( 2 * iStateMult + iStateAdd );
m_sprJudgment.RunCommands( TIER3_COMMAND ); m_sprJudgment.RunCommands( W3_COMMAND );
break; break;
case TNS_Tier4: case TNS_W4:
m_sprJudgment.SetState( 3 * iStateMult + iStateAdd ); m_sprJudgment.SetState( 3 * iStateMult + iStateAdd );
m_sprJudgment.RunCommands( TIER4_COMMAND ); m_sprJudgment.RunCommands( W4_COMMAND );
break; break;
case TNS_Tier5: case TNS_W5:
m_sprJudgment.SetState( 4 * iStateMult + iStateAdd ); m_sprJudgment.SetState( 4 * iStateMult + iStateAdd );
m_sprJudgment.RunCommands( TIER5_COMMAND ); m_sprJudgment.RunCommands( W5_COMMAND );
break; break;
case TNS_Miss: case TNS_Miss:
m_sprJudgment.SetState( 5 * iStateMult + iStateAdd ); m_sprJudgment.SetState( 5 * iStateMult + iStateAdd );
+34 -58
View File
@@ -122,54 +122,35 @@ void LifeMeterBar::Load( const PlayerState *pPlayerState, PlayerStageStats *pPla
void LifeMeterBar::ChangeLife( TapNoteScore score ) void LifeMeterBar::ChangeLife( TapNoteScore score )
{ {
float fDeltaLife=0.f; 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 ) 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: default:
ASSERT(0); 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 ); ChangeLife( fDeltaLife );
@@ -177,19 +158,14 @@ void LifeMeterBar::ChangeLife( TapNoteScore score )
void LifeMeterBar::ChangeLife( HoldNoteScore score, TapNoteScore tscore ) 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; float fDeltaLife=0.f;
switch( GAMESTATE->m_SongOptions.m_DrainType ) switch( GAMESTATE->m_SongOptions.m_DrainType )
{ {
case SongOptions::DRAIN_NORMAL: case SongOptions::DRAIN_NORMAL:
switch( score ) switch( score )
{ {
case HNS_Held: fDeltaLife = PREFSMAN->m_fLifeDeltaPercentChangeHeld; break; case HNS_Held: fDeltaLife = PREFSMAN->m_fLifePercentChange.Get(SE_Held); break;
case HNS_LetGo: fDeltaLife = PREFSMAN->m_fLifeDeltaPercentChangeLetGo; break; case HNS_LetGo: fDeltaLife = PREFSMAN->m_fLifePercentChange.Get(SE_LetGo); break;
default: default:
ASSERT(0); ASSERT(0);
} }
@@ -200,7 +176,7 @@ void LifeMeterBar::ChangeLife( HoldNoteScore score, TapNoteScore tscore )
switch( score ) switch( score )
{ {
case HNS_Held: fDeltaLife = +0.000f; break; 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: default:
ASSERT(0); ASSERT(0);
} }
@@ -237,7 +213,7 @@ void LifeMeterBar::ChangeLife( float fDeltaLife )
else else
{ {
fDeltaLife *= 1 + (float)m_iProgressiveLifebar/8 * m_iMissCombo; 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. // increase the amount of life lost.
m_iMissCombo++; m_iMissCombo++;
/* Increase by m_iRegenComboAfterMiss; never push it beyond m_iMaxRegenComboAfterMiss /* Increase by m_iRegenComboAfterMiss; never push it beyond m_iMaxRegenComboAfterMiss
@@ -392,7 +368,7 @@ void LifeMeterBar::UpdateNonstopLifebar(const int cleared,
* Life 16+: 200 % * Life 16+: 200 %
* *
* Note there is 200%, because boos take off 1/2 as much as * 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. * Everything past 7 is intended mainly for nonstop mode.
*/ */
@@ -419,14 +395,14 @@ void LifeMeterBar::UpdateNonstopLifebar(const int cleared,
return; return;
} }
void LifeMeterBar::FillForHowToPlay(int NumTier2s, int NumMisses) void LifeMeterBar::FillForHowToPlay(int NumW2s, int NumMisses)
{ {
m_iProgressiveLifebar = 0; // disable progressive lifebar m_iProgressiveLifebar = 0; // disable progressive lifebar
float AmountForTier2 = NumTier2s * m_fLifeDifficulty * 0.008f; float AmountForW2 = NumW2s * m_fLifeDifficulty * 0.008f;
float AmountForMiss = NumMisses / m_fLifeDifficulty * 0.08f; float AmountForMiss = NumMisses / m_fLifeDifficulty * 0.08f;
m_fLifePercentage = AmountForMiss - AmountForTier2; m_fLifePercentage = AmountForMiss - AmountForW2;
CLAMP( m_fLifePercentage, 0.0f, 1.0f ); CLAMP( m_fLifePercentage, 0.0f, 1.0f );
AfterLifeChanged(); AfterLifeChanged();
} }
+2 -2
View File
@@ -32,7 +32,7 @@ public:
virtual void ForceFail(); virtual void ForceFail();
void UpdateNonstopLifebar(int cleared, int total, int ProgressiveLifebarDifficulty); 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 // this function is solely for HowToPlay
private: private:
@@ -51,7 +51,7 @@ private:
float m_fLifeDifficulty; // essentially same as pref float m_fLifeDifficulty; // essentially same as pref
int m_iProgressiveLifebar; // cached from prefs 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 int m_iComboToRegainLife; // combo needed before lifebar starts filling up after fail
}; };
+5 -5
View File
@@ -87,12 +87,12 @@ void LifeMeterBattery::ChangeLife( TapNoteScore score )
switch( score ) switch( score )
{ {
case TNS_Tier1: case TNS_W1:
case TNS_Tier2: case TNS_W2:
case TNS_Tier3: case TNS_W3:
break; break;
case TNS_Tier4: case TNS_W4:
case TNS_Tier5: case TNS_W5:
case TNS_Miss: case TNS_Miss:
case TNS_HitMine: case TNS_HitMine:
m_iTrailingLivesLeft = m_iLivesLeft; m_iTrailingLivesLeft = m_iLivesLeft;
+9 -9
View File
@@ -91,14 +91,14 @@ void LifeMeterTime::ChangeLife( TapNoteScore tns )
float fMeterChange = 0; float fMeterChange = 0;
switch( tns ) 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); 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; m_fLifeTotalLostSeconds -= fMeterChange;
@@ -115,9 +115,9 @@ void LifeMeterTime::ChangeLife( HoldNoteScore hns, TapNoteScore tns )
float fMeterChange = 0; float fMeterChange = 0;
switch( hns ) switch( hns )
{ {
case HNS_Held: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChangeHeld; break;
case HNS_LetGo: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChangeLetGo; break;
default: ASSERT(0); 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; m_fLifeTotalLostSeconds -= fMeterChange;
+1 -1
View File
@@ -331,7 +331,7 @@ void NetworkSyncManager::ReportScore(int playerID, int step, int score, int comb
iOffset=1; iOffset=1;
//Report 0 if hold, or miss (don't forget mines should report) //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; iOffset = 0;
m_packet.Write2((uint16_t) iOffset); m_packet.Write2((uint16_t) iOffset);
+5 -5
View File
@@ -977,19 +977,19 @@ void StepManiaLanServer::CheckLowerJudge(const unsigned int clientNum)
if (Client[clientNum]->IsPlaying(x)) if (Client[clientNum]->IsPlaying(x))
{ {
if ((Client[clientNum]->Player[x].currstep == 2)&& 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; Client[clientNum]->lowerJudge = true;
if ((Client[clientNum]->Player[x].currstep == 3)&& 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; Client[clientNum]->lowerJudge = true;
if ((Client[clientNum]->Player[x].currstep == 4)&& 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; Client[clientNum]->lowerJudge = true;
if ((Client[clientNum]->Player[x].currstep == 5)&& 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; Client[clientNum]->lowerJudge = true;
if ((Client[clientNum]->Player[x].currstep == 6)&& 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; Client[clientNum]->lowerJudge = true;
} }
} }
+9 -9
View File
@@ -97,7 +97,7 @@ int GetSuccessfulHands( const NoteData &in, int iStartIndex = 0, int iEndIndex =
continue; continue;
if( tn.type == TapNote::mine ) // mines don't count if( tn.type == TapNote::mine ) // mines don't count
continue; continue;
if( tn.result.tns <= TNS_Tier5 ) if( tn.result.tns <= TNS_W5 )
Missed = true; Missed = true;
} }
@@ -172,7 +172,7 @@ TapNoteResult NoteDataWithScoring::LastTapNoteResult( const NoteData &in, unsign
* taps have been hit), return TNS_None or TNS_Miss. */ * taps have been hit), return TNS_None or TNS_Miss. */
TapNoteScore NoteDataWithScoring::MinTapNoteScore( const NoteData &in, unsigned row ) TapNoteScore NoteDataWithScoring::MinTapNoteScore( const NoteData &in, unsigned row )
{ {
TapNoteScore score = TNS_Tier1; TapNoteScore score = TNS_W1;
for( int t=0; t<in.GetNumTracks(); t++ ) for( int t=0; t<in.GetNumTracks(); t++ )
{ {
/* Ignore mines, or the score will always be TNS_None. */ /* Ignore mines, or the score will always be TNS_None. */
@@ -192,15 +192,15 @@ bool NoteDataWithScoring::IsRowCompletelyJudged( const NoteData &in, unsigned ro
namespace 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 ) float GetActualStreamRadarValue( const NoteData &in, float fSongSeconds, PlayerNumber pn )
{ {
int iTotalSteps = in.GetNumTapNotes(); int iTotalSteps = in.GetNumTapNotes();
if( iTotalSteps == 0 ) if( iTotalSteps == 0 )
return 1.0f; return 1.0f;
const int Tier2s = GetNumTapNotesWithScore( in, TNS_Tier2 ); const int iW2s = GetNumTapNotesWithScore( in, TNS_W2 );
return clamp( float(Tier2s)/iTotalSteps, 0.0f, 1.0f ); return clamp( float(iW2s)/iTotalSteps, 0.0f, 1.0f );
} }
/* Return the ratio of actual combo to max combo. */ /* 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 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 ) float GetActualAirRadarValue( const NoteData &in, float fSongSeconds, PlayerNumber pn )
{ {
const int iTotalDoubles = in.GetNumJumps(); const int iTotalDoubles = in.GetNumJumps();
@@ -223,7 +223,7 @@ float GetActualAirRadarValue( const NoteData &in, float fSongSeconds, PlayerNumb
return 1.0f; // no jumps in song return 1.0f; // no jumps in song
// number of doubles // 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 ); 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_AIR: out[rc] = GetActualAirRadarValue( in, fSongSeconds, pn ); break;
case RADAR_FREEZE: out[rc] = GetActualFreezeRadarValue( 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_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_TAPS_AND_HOLDS: out[rc] = (float) GetNumNWithScore( in, TNS_W4, 1 ); break;
case RADAR_NUM_JUMPS: out[rc] = (float) GetNumNWithScore( in, TNS_Tier4, 2 ); 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_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_MINES: out[rc] = (float) GetSuccessfulMines( in ); break;
case RADAR_NUM_HANDS: out[rc] = (float) GetSuccessfulHands( in ); break; case RADAR_NUM_HANDS: out[rc] = (float) GetSuccessfulHands( in ); break;
+2 -2
View File
@@ -16,7 +16,7 @@ struct TapNoteResult
/* Offset, in seconds, for a tap grade. Negative numbers mean the note /* 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 * 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; float fTapNoteOffset;
/* If the whole row has been judged, all taps on the row will be set to hidden. */ /* 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 original, // part of the original NoteData
addition, // additional note added by a transform addition, // additional note added by a transform
removed, // Removed taps, e.g. in Little - play keysounds here as if 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, // step. Also used for when we implement auto-scratch,
// and for if/when we do a "reduce" modifier that cancels out // 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]. // all but N keys on a line [useful for beat->dance autogen, too].
+38 -51
View File
@@ -49,23 +49,10 @@ static const float StepSearchDistance = 1.0f;
float AdjustedWindowSeconds( TimingWindow tw, bool bIsPlayingBeginner ) float AdjustedWindowSeconds( TimingWindow tw, bool bIsPlayingBeginner )
{ {
float fSecs = 0; float fSecs = PREFSMAN->m_fTimingWindowSeconds.Get( tw );
switch( tw ) fSecs *= PREFSMAN->m_fTimingWindowScale;
{ fSecs += PREFSMAN->m_fTimingWindowAdd;
case TW_Tier1: fSecs = PREFSMAN->m_fJudgeWindowSecondsTier1; break; if( tw==TW_W5 && bIsPlayingBeginner && PREFSMAN->m_bMercifulBeginner )
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 )
fSecs += 0.5f; fSecs += 0.5f;
return fSecs; return fSecs;
} }
@@ -649,7 +636,7 @@ void Player::Update( float fDeltaTime )
else else
{ {
// Decrease life // Decrease life
fLife -= fDeltaTime/ADJUSTED_WINDOW_SECONDS(TW_Held); fLife -= fDeltaTime/ADJUSTED_WINDOW_SECONDS(TW_Hold);
fLife = max( fLife, 0 ); // clamp fLife = max( fLife, 0 ); // clamp
} }
break; break;
@@ -1093,7 +1080,7 @@ void Player::HandleStep( int col, const RageTimer &tm, bool bHeld )
// fStepSeconds, fMusicSeconds, fNoteOffset ); // fStepSeconds, fMusicSeconds, fNoteOffset );
} }
const float fSecondsFromTier2 = fabsf( fNoteOffset ); const float fSecondsFromExact = fabsf( fNoteOffset );
TapNote tn = m_NoteData.GetTapNote( col, iIndexOverlappingNote ); TapNote tn = m_NoteData.GetTapNote( col, iIndexOverlappingNote );
@@ -1106,20 +1093,20 @@ void Player::HandleStep( int col, const RageTimer &tm, bool bHeld )
{ {
case TapNote::mine: case TapNote::mine:
// stepped too close to mine? // stepped too close to mine?
if( fSecondsFromTier2 <= ADJUSTED_WINDOW_SECONDS(TW_Mine) ) if( fSecondsFromExact <= ADJUSTED_WINDOW_SECONDS(TW_Mine) )
score = TNS_HitMine; score = TNS_HitMine;
break; break;
case TapNote::attack: case TapNote::attack:
if( fSecondsFromTier2 <= ADJUSTED_WINDOW_SECONDS(TW_Attack) && !tn.result.bHidden ) if( fSecondsFromExact <= ADJUSTED_WINDOW_SECONDS(TW_Attack) && !tn.result.bHidden )
score = TNS_Tier2; /* sentinel */ score = TNS_W2; /* sentinel */
break; break;
default: default:
if( fSecondsFromTier2 <= ADJUSTED_WINDOW_SECONDS(TW_Tier1) ) score = TNS_Tier1; if( fSecondsFromExact <= ADJUSTED_WINDOW_SECONDS(TW_W1) ) score = TNS_W1;
else if( fSecondsFromTier2 <= ADJUSTED_WINDOW_SECONDS(TW_Tier2) ) score = TNS_Tier2; else if( fSecondsFromExact <= ADJUSTED_WINDOW_SECONDS(TW_W2) ) score = TNS_W2;
else if( fSecondsFromTier2 <= ADJUSTED_WINDOW_SECONDS(TW_Tier3) ) score = TNS_Tier3; else if( fSecondsFromExact <= ADJUSTED_WINDOW_SECONDS(TW_W3) ) score = TNS_W3;
else if( fSecondsFromTier2 <= ADJUSTED_WINDOW_SECONDS(TW_Tier4) ) score = TNS_Tier4; else if( fSecondsFromExact <= ADJUSTED_WINDOW_SECONDS(TW_W4) ) score = TNS_W4;
else if( fSecondsFromTier2 <= ADJUSTED_WINDOW_SECONDS(TW_Tier5) ) score = TNS_Tier5; else if( fSecondsFromExact <= ADJUSTED_WINDOW_SECONDS(TW_W5) ) score = TNS_W5;
else score = TNS_None; else score = TNS_None;
break; break;
} }
@@ -1129,16 +1116,16 @@ void Player::HandleStep( int col, const RageTimer &tm, bool bHeld )
case PC_AUTOPLAY: case PC_AUTOPLAY:
score = PlayerAI::GetTapNoteScore( m_pPlayerState ); 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 the step is far away, don't judge it.
if( m_pPlayerState->m_PlayerController == PC_AUTOPLAY && if( m_pPlayerState->m_PlayerController == PC_AUTOPLAY &&
fSecondsFromTier2 > ADJUSTED_WINDOW_SECONDS(TW_Tier5) ) fSecondsFromExact > ADJUSTED_WINDOW_SECONDS(TW_W5) )
{ {
score = TNS_None; score = TNS_None;
break; 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" // as "mine was hit" and everything else as "mine was avoided"
if( tn.type == TapNote::mine ) 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 // 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. // mines that don't have a tap note on the same row.
bool bTapsOnRow = m_NoteData.IsThereATapOrHoldHeadAtRow( iIndexOverlappingNote ); 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 ) if( score >= get_to_avoid )
return; // avoided return; // avoided
@@ -1162,8 +1149,8 @@ void Player::HandleStep( int col, const RageTimer &tm, bool bHeld )
score = TNS_HitMine; score = TNS_HitMine;
} }
if( tn.type == TapNote::attack && score > TNS_Tier4 ) if( tn.type == TapNote::attack && score > TNS_W4 )
score = TNS_Tier2; /* sentinel */ score = TNS_W2; /* sentinel */
/* AI will generate misses here. Don't handle a miss like a regular note because /* 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 * 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; 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 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 ); 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 ); HandleAutosync( fNoteOffset );
// Do game-specific and mode-specific score mapping. // Do game-specific and mode-specific score mapping.
score = GAMESTATE->GetCurrentGame()->MapTapNoteScore( score ); score = GAMESTATE->GetCurrentGame()->MapTapNoteScore( score );
if( score == TNS_Tier1 && !GAMESTATE->ShowTier1() ) if( score == TNS_W1 && !GAMESTATE->ShowW1() )
score = TNS_Tier2; score = TNS_W2;
bool bSteppedEarly = -fNoteOffset < 0; 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 ) if( m_pJudgment )
m_pJudgment->SetJudgment( score, bSteppedEarly ); 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 ) 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() ); ms_error = min( ms_error, MAX_PRO_TIMING_ERROR.GetValue() );
if( m_pPlayerStageStats ) 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", //LOG->Trace("XXX: %i col %i, at %f, music at %f, step was at %f, off by %f",
// score, col, fStepSeconds, fCurrentMusicSeconds, fMusicSeconds, fNoteOffset ); // 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 ); 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); 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.) // 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; tn.result.bHidden = true;
m_NoteData.SetTapNote( iTrack, iIndexThatWasSteppedOn, tn ); 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_pPlayerState->m_PlayerOptions.m_fBlind)
{ {
if( m_pNoteField ) if( m_pNoteField )
m_pNoteField->DidTapNote( iTrack, TNS_Tier1, bBright ); m_pNoteField->DidTapNote( iTrack, TNS_W1, bBright );
} }
else 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 /* Find the minimum score of the row. This will never be TNS_None, since this
* function is only called when a row is completed. */ * function is only called when a row is completed. */
/* Instead, use the last tap score. /* Instead, use the last tap score.
/* I'm not sure this is right, either. Can you really jump a tier5 and a tier2 /* I'm not sure this is right, either. Can you really jump a W5 and a W1
* and get scored for a tier2? (That's so loose, you can gallop jumps.) -glenn */ * 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" /* 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 * 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 * 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; int &iCurMissCombo = m_pPlayerStageStats ? m_pPlayerStageStats->iCurMissCombo : iDummy;
switch( scoreOfLastTap ) switch( scoreOfLastTap )
{ {
case TNS_Tier1: case TNS_W1:
case TNS_Tier2: case TNS_W2:
case TNS_Tier3: case TNS_W3:
iCurMissCombo = 0; iCurMissCombo = 0;
SCREENMAN->PostMessageToTopScreen( SM_MissComboAborted, 0 ); SCREENMAN->PostMessageToTopScreen( SM_MissComboAborted, 0 );
break; break;
@@ -1663,8 +1650,8 @@ void Player::HandleTapRowScore( unsigned row )
++iCurMissCombo; ++iCurMissCombo;
m_LastTapNoteScore = TNS_Miss; m_LastTapNoteScore = TNS_Miss;
case TNS_Tier4: case TNS_W4:
case TNS_Tier5: case TNS_W5:
if( iCurCombo > 50 ) if( iCurCombo > 50 )
SCREENMAN->PostMessageToTopScreen( SM_ComboStopped, 0 ); SCREENMAN->PostMessageToTopScreen( SM_ComboStopped, 0 );
iCurCombo = 0; iCurCombo = 0;
@@ -1820,7 +1807,7 @@ void Player::HandleHoldScore( HoldNoteScore holdScore, TapNoteScore tapScore )
float Player::GetMaxStepDistanceSeconds() 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() void Player::FadeToFail()
+9 -9
View File
@@ -16,14 +16,14 @@ struct TapScoreDistribution
{ {
float fRand = randomf(0,1); float fRand = randomf(0,1);
float fCumulativePercent = 0; float fCumulativePercent = 0;
for( int i=0; i<=TNS_Tier1; i++ ) for( int i=0; i<=TNS_W1; i++ )
{ {
fCumulativePercent += fPercent[i]; fCumulativePercent += fPercent[i];
if( fRand <= fCumulativePercent+1e-4 ) /* rounding error */ if( fRand <= fCumulativePercent+1e-4 ) /* rounding error */
return (TapNoteScore)i; return (TapNoteScore)i;
} }
ASSERT(0); // the fCumulativePercents must sum to 1.0, so we should never get here! 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]; TapScoreDistribution& dist = g_Distributions[i];
dist.fPercent[TNS_None] = 0; dist.fPercent[TNS_None] = 0;
pNode->GetAttrValue( "MissWeight", dist.fPercent[TNS_Miss] ); pNode->GetAttrValue( "WeightMiss", dist.fPercent[TNS_Miss] );
pNode->GetAttrValue( "Tier5Weight", dist.fPercent[TNS_Tier5] ); pNode->GetAttrValue( "WeightW5", dist.fPercent[TNS_W5] );
pNode->GetAttrValue( "Tier4Weight", dist.fPercent[TNS_Tier4] ); pNode->GetAttrValue( "WeightW4", dist.fPercent[TNS_W4] );
pNode->GetAttrValue( "Tier3Weight", dist.fPercent[TNS_Tier3] ); pNode->GetAttrValue( "WeightW3", dist.fPercent[TNS_W3] );
pNode->GetAttrValue( "Tier2Weight", dist.fPercent[TNS_Tier2] ); pNode->GetAttrValue( "WeightW2", dist.fPercent[TNS_W2] );
pNode->GetAttrValue( "Tier1Weight", dist.fPercent[TNS_Tier1] ); pNode->GetAttrValue( "WeightW1", dist.fPercent[TNS_W1] );
float fSum = 0; float fSum = 0;
for( int j=0; j<NUM_TapNoteScore; j++ ) for( int j=0; j<NUM_TapNoteScore; j++ )
@@ -64,7 +64,7 @@ void PlayerAI::InitFromDisk()
TapNoteScore PlayerAI::GetTapNoteScore( const PlayerState* pPlayerState ) TapNoteScore PlayerAI::GetTapNoteScore( const PlayerState* pPlayerState )
{ {
if( pPlayerState->m_PlayerController == PC_AUTOPLAY ) if( pPlayerState->m_PlayerController == PC_AUTOPLAY )
return TNS_Tier1; return TNS_W1;
int iCpuSkill = pPlayerState->m_iCpuSkill; int iCpuSkill = pPlayerState->m_iCpuSkill;
+39 -39
View File
@@ -12,8 +12,8 @@
#include "Steps.h" #include "Steps.h"
#include "ScoreKeeperNormal.h" #include "ScoreKeeperNormal.h"
#define GRADE_PERCENT_TIER(i) THEME->GetMetricF("PlayerStageStats",ssprintf("GradePercent%s",GradeToString((Grade)i).c_str())) #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_TIER02_IS_ALL_W2S THEME->GetMetricB("PlayerStageStats","GradeTier02IsAllW2s")
const float LESSON_PASS_THRESHOLD = 0.8f; 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 ); LOG->Trace( "GetGrade: Grade: %s, %i", GradeToString(grade).c_str(), GRADE_TIER02_IS_ALL_PERFECTS );
if( GRADE_TIER02_IS_ALL_PERFECTS ) if( GRADE_TIER02_IS_ALL_PERFECTS )
{ {
if( iTapNoteScores[TNS_Tier1] > 0 && if( iTapNoteScores[TNS_W1] > 0 &&
iTapNoteScores[TNS_Tier2] == 0 && iTapNoteScores[TNS_W2] == 0 &&
iTapNoteScores[TNS_Tier3] == 0 && iTapNoteScores[TNS_W3] == 0 &&
iTapNoteScores[TNS_Tier4] == 0 && iTapNoteScores[TNS_W4] == 0 &&
iTapNoteScores[TNS_Tier5] == 0 && iTapNoteScores[TNS_W5] == 0 &&
iTapNoteScores[TNS_Miss] == 0 && iTapNoteScores[TNS_Miss] == 0 &&
iTapNoteScores[TNS_HitMine] == 0 && iTapNoteScores[TNS_HitMine] == 0 &&
iHoldNoteScores[HNS_LetGo] == 0 ) iHoldNoteScores[HNS_LetGo] == 0 )
return Grade_Tier01; return Grade_Tier01;
if( iTapNoteScores[TNS_Tier2] > 0 && if( iTapNoteScores[TNS_W2] > 0 &&
iTapNoteScores[TNS_Tier3] == 0 && iTapNoteScores[TNS_W3] == 0 &&
iTapNoteScores[TNS_Tier4] == 0 && iTapNoteScores[TNS_W4] == 0 &&
iTapNoteScores[TNS_Tier5] == 0 && iTapNoteScores[TNS_W5] == 0 &&
iTapNoteScores[TNS_Miss] == 0 && iTapNoteScores[TNS_Miss] == 0 &&
iTapNoteScores[TNS_HitMine] == 0 && iTapNoteScores[TNS_HitMine] == 0 &&
iHoldNoteScores[HNS_LetGo] == 0 ) iHoldNoteScores[HNS_LetGo] == 0 )
@@ -236,11 +236,11 @@ int PlayerStageStats::GetLessonScoreActual() const
switch( tns ) switch( tns )
{ {
case TNS_AvoidMine: case TNS_AvoidMine:
case TNS_Tier5: case TNS_W5:
case TNS_Tier4: case TNS_W4:
case TNS_Tier3: case TNS_W3:
case TNS_Tier2: case TNS_W2:
case TNS_Tier1: case TNS_W1:
iScore += iTapNoteScores[tns]; iScore += iTapNoteScores[tns];
break; break;
} }
@@ -453,8 +453,8 @@ int PlayerStageStats::GetComboAtStartOfStage() const
bool PlayerStageStats::FullComboOfScore( TapNoteScore tnsAllGreaterOrEqual ) const bool PlayerStageStats::FullComboOfScore( TapNoteScore tnsAllGreaterOrEqual ) const
{ {
ASSERT( tnsAllGreaterOrEqual >= TNS_Tier3 ); ASSERT( tnsAllGreaterOrEqual >= TNS_W3 );
ASSERT( tnsAllGreaterOrEqual <= TNS_Tier1 ); ASSERT( tnsAllGreaterOrEqual <= TNS_W1 );
// If missed any holds, then it's not a full combo // If missed any holds, then it's not a full combo
if( iHoldNoteScores[HNS_LetGo] > 0 ) 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 // don't give per-difficutly awards if using easy mods
if( !GAMESTATE->IsDisqualified(p) ) if( !GAMESTATE->IsDisqualified(p) )
{ {
if( FullComboOfScore( TNS_Tier3 ) ) if( FullComboOfScore( TNS_W3 ) )
vPdas.push_back( AWARD_FULL_COMBO_TIER3 ); vPdas.push_back( AWARD_FULL_COMBO_W3 );
if( SingleDigitsOfScore( TNS_Tier3 ) ) if( SingleDigitsOfScore( TNS_W3 ) )
vPdas.push_back( AWARD_SINGLE_DIGIT_TIER3 ); vPdas.push_back( AWARD_SINGLE_DIGIT_W3 );
if( FullComboOfScore( TNS_Tier2 ) ) if( FullComboOfScore( TNS_W2 ) )
vPdas.push_back( AWARD_FULL_COMBO_TIER2 ); vPdas.push_back( AWARD_FULL_COMBO_W2 );
if( SingleDigitsOfScore( TNS_Tier2 ) ) if( SingleDigitsOfScore( TNS_W2 ) )
vPdas.push_back( AWARD_SINGLE_DIGIT_TIER2 ); vPdas.push_back( AWARD_SINGLE_DIGIT_W2 );
if( FullComboOfScore( TNS_Tier1 ) ) if( FullComboOfScore( TNS_W1 ) )
vPdas.push_back( AWARD_FULL_COMBO_TIER1 ); vPdas.push_back( AWARD_FULL_COMBO_W1 );
if( OneOfScore( TNS_Tier3 ) ) if( OneOfScore( TNS_W3 ) )
vPdas.push_back( AWARD_ONE_TIER3 ); vPdas.push_back( AWARD_ONE_W3 );
if( OneOfScore( TNS_Tier2 ) ) if( OneOfScore( TNS_W2 ) )
vPdas.push_back( AWARD_ONE_TIER2 ); vPdas.push_back( AWARD_ONE_W2 );
float fPercentTier3s = GetPercentageOfTaps( TNS_Tier3 ); float fPercentW3s = GetPercentageOfTaps( TNS_W3 );
if( fPercentTier3s >= 0.8f ) if( fPercentW3s >= 0.8f )
vPdas.push_back( AWARD_PERCENT_80_TIER3 ); vPdas.push_back( AWARD_PERCENT_80_W3 );
if( fPercentTier3s >= 0.9f ) if( fPercentW3s >= 0.9f )
vPdas.push_back( AWARD_PERCENT_90_TIER3 ); vPdas.push_back( AWARD_PERCENT_90_W3 );
if( fPercentTier3s >= 1.f ) if( fPercentW3s >= 1.f )
vPdas.push_back( AWARD_PERCENT_100_TIER3 ); vPdas.push_back( AWARD_PERCENT_100_W3 );
} }
// Max one PDA per stage // Max one PDA per stage
+1 -1
View File
@@ -94,7 +94,7 @@ public:
int GetComboAtStartOfStage() const; int GetComboAtStartOfStage() const;
bool FullComboOfScore( TapNoteScore tnsAllGreaterOrEqual ) 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 SingleDigitsOfScore( TapNoteScore tnsAllGreaterOrEqual ) const;
bool OneOfScore( TapNoteScore tnsAllGreaterOrEqual ) const; bool OneOfScore( TapNoteScore tnsAllGreaterOrEqual ) const;
int GetTotalTaps() const; int GetTotalTaps() const;
+1 -1
View File
@@ -59,7 +59,7 @@ READFROM_AND_WRITETO( CString, CString& )
READFROM_AND_WRITETO( PrefsManager::BackgroundMode, int& ) READFROM_AND_WRITETO( PrefsManager::BackgroundMode, int& )
READFROM_AND_WRITETO( PrefsManager::BannerCache, int& ) READFROM_AND_WRITETO( PrefsManager::BannerCache, int& )
READFROM_AND_WRITETO( PrefsManager::MusicWheelUsesSections, 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( CoinMode, int& )
READFROM_AND_WRITETO( Premium, int& ) READFROM_AND_WRITETO( Premium, int& )
READFROM_AND_WRITETO( PrefsManager::Maybe, int& ) READFROM_AND_WRITETO( PrefsManager::Maybe, int& )
+28
View File
@@ -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 #endif
/* /*
+137 -66
View File
@@ -56,6 +56,133 @@ bool g_bAutoRestart = false;
# define TRUE_IF_DEBUG false # define TRUE_IF_DEBUG false
#endif #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() : PrefsManager::PrefsManager() :
m_bWindowed ( "Windowed", TRUE_IF_DEBUG), m_bWindowed ( "Windowed", TRUE_IF_DEBUG),
m_iDisplayWidth ( "DisplayWidth", 640 ), m_iDisplayWidth ( "DisplayWidth", 640 ),
@@ -89,38 +216,14 @@ PrefsManager::PrefsManager() :
m_bMenuTimer ( "MenuTimer", true ), m_bMenuTimer ( "MenuTimer", true ),
m_bShowDanger ( "ShowDanger", true ), m_bShowDanger ( "ShowDanger", true ),
m_fJudgeWindowScale ( "JudgeWindowScale", 1.0f ), m_fTimingWindowScale ( "TimingWindowScale", 1.0f ),
m_fJudgeWindowAdd ( "JudgeWindowAdd", 0 ), m_fTimingWindowAdd ( "TimingWindowAdd", 0 ),
m_fJudgeWindowSecondsTier1 ( "JudgeWindowSecondsTier1", 0.0225f ), m_fTimingWindowSeconds( TimingWindowSecondsInit, NUM_TimingWindow ),
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_fLifeDifficultyScale ( "LifeDifficultyScale", 1.0f ), m_fLifeDifficultyScale ( "LifeDifficultyScale", 1.0f ),
m_fLifeDeltaPercentChangeTier1 ( "LifeDeltaPercentChangeTier1", +0.008f ), m_fLifePercentChange( LifePercentChangeInit, NUM_ScoreEvent ),
m_fLifeDeltaPercentChangeTier2 ( "LifeDeltaPercentChangeTier2", +0.008f ), m_fTugMeterPercentChange( TugMeterPercentChangeInit, NUM_ScoreEvent ),
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_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_iRegenComboAfterFail ( "RegenComboAfterFail", 10 ),
m_iRegenComboAfterMiss ( "RegenComboAfterMiss", 5 ), m_iRegenComboAfterMiss ( "RegenComboAfterMiss", 5 ),
@@ -133,46 +236,14 @@ PrefsManager::PrefsManager() :
m_bFailOffForFirstStageEasy ( "FailOffForFirstStageEasy", false ), m_bFailOffForFirstStageEasy ( "FailOffForFirstStageEasy", false ),
m_bMercifulBeginner ( "MercifulBeginner", false ), m_bMercifulBeginner ( "MercifulBeginner", false ),
m_iPercentScoreWeightTier1 ( "PercentScoreWeightTier1", 3 ), m_iPercentScoreWeight ( PercentScoreWeightInit, NUM_ScoreEvent ),
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_iGradeWeightTier1 ( "GradeWeightTier1", 2 ), m_iGradeWeight ( GradeWeightInit, NUM_ScoreEvent ),
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_fSuperMeterPercentChangeTier1 ( "SuperMeterPercentChangeTier1", +0.05f ), m_fSuperMeterPercentChange ( SuperMeterPercentChangeInit, NUM_ScoreEvent ),
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_bMercifulSuperMeter ( "MercifulSuperMeter", true ), m_bMercifulSuperMeter ( "MercifulSuperMeter", true ),
m_fTimeMeterSecondsChangeTier1 ( "TimeMeterSecondsChangeTier1", +0.1f ), m_fTimeMeterSecondsChange ( TimeMeterSecondsChangeInit, NUM_ScoreEvent ),
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_AutoPlay ( "AutoPlay", PC_HUMAN ), m_AutoPlay ( "AutoPlay", PC_HUMAN ),
m_bDelayedBack ( "DelayedBack", true ), m_bDelayedBack ( "DelayedBack", true ),
@@ -184,7 +255,7 @@ PrefsManager::PrefsManager() :
m_MusicWheelUsesSections ( "MusicWheelUsesSections", ALWAYS ), m_MusicWheelUsesSections ( "MusicWheelUsesSections", ALWAYS ),
m_iMusicWheelSwitchSpeed ( "MusicWheelSwitchSpeed", 10 ), m_iMusicWheelSwitchSpeed ( "MusicWheelSwitchSpeed", 10 ),
m_bEasterEggs ( "EasterEggs", true ), m_bEasterEggs ( "EasterEggs", true ),
m_Tier1Timing ( "Tier1Timing", TIER1_EVERYWHERE ), m_AllowW1 ( "AllowW1", ALLOW_W1_EVERYWHERE ),
m_bEventMode ( "EventMode", false ), m_bEventMode ( "EventMode", false ),
m_iCoinsPerCredit ( "CoinsPerCredit", 1 ), m_iCoinsPerCredit ( "CoinsPerCredit", 1 ),
m_iSongsPerPlay ( "SongsPerPlay", 3 ), m_iSongsPerPlay ( "SongsPerPlay", 3 ),
+13 -68
View File
@@ -58,39 +58,16 @@ public:
Preference<bool> m_bMenuTimer; Preference<bool> m_bMenuTimer;
Preference<bool> m_bShowDanger; Preference<bool> m_bShowDanger;
Preference<float> m_fJudgeWindowScale; Preference<float> m_fTimingWindowScale;
Preference<float> m_fJudgeWindowAdd; // this is useful for compensating for changes in sampling rate between devices Preference<float> m_fTimingWindowAdd; // this is useful for compensating for changes in sampling rate between devices
Preference<float> m_fJudgeWindowSecondsTier1;
Preference<float> m_fJudgeWindowSecondsTier2; Preference1D<float> m_fTimingWindowSeconds;
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_fLifeDifficultyScale; Preference<float> m_fLifeDifficultyScale;
Preference<float> m_fLifeDeltaPercentChangeTier1; Preference1D<float> m_fLifePercentChange;
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;
// tug meter used in rave // tug meter used in rave
Preference<float> m_fTugMeterPercentChangeTier1; Preference1D<float> m_fTugMeterPercentChange;
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;
// Whoever added these: Please add a comment saying what they do. -Chris // Whoever added these: Please add a comment saying what they do. -Chris
Preference<int> m_iRegenComboAfterFail; Preference<int> m_iRegenComboAfterFail;
@@ -102,52 +79,20 @@ public:
Preference<bool> m_bMinimum1FullSongInCourses; // FEoS for 1st song, FailImmediate thereafter Preference<bool> m_bMinimum1FullSongInCourses; // FEoS for 1st song, FailImmediate thereafter
Preference<bool> m_bFailOffInBeginner; Preference<bool> m_bFailOffInBeginner;
Preference<bool> m_bFailOffForFirstStageEasy; 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) // percent score (the number that is shown on the screen and saved to memory card)
Preference<int> m_iPercentScoreWeightTier1; Preference1D<int> m_iPercentScoreWeight;
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;
// grades are calculated based on a percentage, but might have different weights than the percent score // grades are calculated based on a percentage, but might have different weights than the percent score
Preference<int> m_iGradeWeightTier1; Preference1D<int> m_iGradeWeight;
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;
// super meter used in rave // super meter used in rave
Preference<float> m_fSuperMeterPercentChangeTier1; Preference1D<float> m_fSuperMeterPercentChange;
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;
Preference<float> m_bMercifulSuperMeter; // negative super deltas are scaled by the players life percentage Preference<float> m_bMercifulSuperMeter; // negative super deltas are scaled by the players life percentage
// time meter used in survival // time meter used in survival
Preference<float> m_fTimeMeterSecondsChangeTier1; Preference1D<float> m_fTimeMeterSecondsChange;
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;
Preference<PlayerController> m_AutoPlay; Preference<PlayerController> m_AutoPlay;
Preference<bool> m_bDelayedBack; Preference<bool> m_bDelayedBack;
@@ -160,8 +105,8 @@ public:
Preference<MusicWheelUsesSections> m_MusicWheelUsesSections; Preference<MusicWheelUsesSections> m_MusicWheelUsesSections;
Preference<int> m_iMusicWheelSwitchSpeed; Preference<int> m_iMusicWheelSwitchSpeed;
Preference<bool> m_bEasterEggs; Preference<bool> m_bEasterEggs;
enum Tier1Timing { TIER1_NEVER, TIER1_COURSES_ONLY, TIER1_EVERYWHERE }; enum AllowW1 { ALLOW_W1_NEVER, ALLOW_W1_COURSES_ONLY, ALLOW_W1_EVERYWHERE };
Preference<Tier1Timing> m_Tier1Timing; Preference<AllowW1> m_AllowW1;
Preference<bool> m_bEventMode; Preference<bool> m_bEventMode;
Preference<int> m_iCoinsPerCredit; Preference<int> m_iCoinsPerCredit;
Preference<int> m_iSongsPerPlay; Preference<int> m_iSongsPerPlay;
+3 -3
View File
@@ -129,7 +129,7 @@ ProfileLoadResult ProfileManager::LoadProfile( PlayerNumber pn, CString sProfile
if( lr == ProfileLoadResult_Success ) 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; 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) * 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 * data, then we've validated it and know it's good. Before writing our
* new data, move the old, tier4 data to the backup. (Only do this once; * 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 * if we save the profile more than once, we havn't re-validated the
* newly written data.) * newly written data.)
*/ */
+9 -9
View File
@@ -95,13 +95,13 @@ void ScoreDisplayLifeTime::OnJudgment( TapNoteScore tns )
float fMeterChange = 0; float fMeterChange = 0;
switch( tns ) switch( tns )
{ {
case TNS_Tier1: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChangeTier1; break; case TNS_W1: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChange.Get(SE_W1); break;
case TNS_Tier2: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChangeTier2; break; case TNS_W2: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChange.Get(SE_W2); break;
case TNS_Tier3: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChangeTier3; break; case TNS_W3: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChange.Get(SE_W3); break;
case TNS_Tier4: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChangeTier4; break; case TNS_W4: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChange.Get(SE_W4); break;
case TNS_Tier5: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChangeTier5; break; case TNS_W5: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChange.Get(SE_W5); break;
case TNS_Miss: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChangeMiss; break; case TNS_Miss: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChange.Get(SE_Miss); break;
case TNS_HitMine: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChangeHitMine; break; case TNS_HitMine: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChange.Get(SE_HitMine); break;
default: ASSERT(0); default: ASSERT(0);
} }
@@ -116,8 +116,8 @@ void ScoreDisplayLifeTime::OnJudgment( HoldNoteScore hns, TapNoteScore tns )
float fMeterChange = 0; float fMeterChange = 0;
switch( hns ) switch( hns )
{ {
case HNS_Held: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChangeHeld; break; case HNS_Held: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChange.Get(SE_Held); break;
case HNS_LetGo: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChangeLetGo; break; case HNS_LetGo: fMeterChange = PREFSMAN->m_fTimeMeterSecondsChange.Get(SE_LetGo); break;
default: ASSERT(0); default: ASSERT(0);
} }
+68 -68
View File
@@ -103,9 +103,9 @@ void ScoreKeeperNormal::Load(
m_iRoundTo = 5; m_iRoundTo = 5;
if (!GAMESTATE->IsCourseMode()) if (!GAMESTATE->IsCourseMode())
{ {
m_ComboBonusFactor[TNS_Tier1] = 55; m_ComboBonusFactor[TNS_W1] = 55;
m_ComboBonusFactor[TNS_Tier2] = 55; m_ComboBonusFactor[TNS_W2] = 55;
m_ComboBonusFactor[TNS_Tier3] = 33; m_ComboBonusFactor[TNS_W3] = 33;
} }
break; break;
default: default:
@@ -195,28 +195,28 @@ void ScoreKeeperNormal::OnNextSong( int iSongInCourseIndex, const Steps* pSteps,
m_iTapNotesHit = 0; 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. * 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 * 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 * (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. * changes the scoring rules slightly.
*/ */
#if 0 #if 0
/* This is the actual method described below. */ /* This is the actual method described below. */
return p * (B / S) * n; return p * (Z / S) * n;
#elif 1 #elif 1
/* This doesn't round down B/S. */ /* This doesn't round down Z/S. */
return int(int64_t(p) * n * B / S); return int(int64_t(p) * n * Z / S);
#else #else
/* This also doesn't round down B/S. Use this if you don't have 64-bit ints. */ /* This also doesn't round down Z/S. Use this if you don't have 64-bit ints. */
return int(p * n * (float(B) / S)); return int(p * n * (float(Z) / S));
#endif #endif
} }
@@ -228,18 +228,18 @@ void ScoreKeeperNormal::AddScore( TapNoteScore score )
/* /*
Regular scoring: 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 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 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) 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) 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: 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*, *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, 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: Now, through simple algebraic manipulation:
S = 1+...+N = (1+N)*N/2 (1 through N added together) 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): a 441 step, 8-foot difficulty song (I'm just making this one up):
S = (1 + 441)*441 / 2 S = (1 + 441)*441 / 2
= 194,222 / 2 = 194,222 / 2
= 97,461 = 97,461
StepScore = p * (B/S) * n StepScore = p * (Z/S) * n
= 5 * (8,000,000 / 97,461) * 57 = 5 * (8,000,000 / 97,461) * 57
= 5 * (82) * 57 (The 82 is rounded down from 82.08411...) = 5 * (82) * 57 (The 82 is rounded down from 82.08411...)
= 23,370 = 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 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. 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. score for any song is the number of feet difficulty X 10,000,000.
*/ */
int p = 0; // score multiplier int p = 0; // score multiplier
switch( score ) switch( score )
{ {
case TNS_Tier1: p = 10; break; case TNS_W1: p = 10; break;
case TNS_Tier2: p = GAMESTATE->ShowTier1()? 9:10; break; case TNS_W2: p = GAMESTATE->ShowW1()? 9:10; break;
case TNS_Tier3: p = 5; break; case TNS_W3: p = 5; break;
default: p = 0; break; default: p = 0; break;
} }
@@ -279,7 +279,7 @@ void ScoreKeeperNormal::AddScore( TapNoteScore score )
const int N = m_iNumTapsAndHolds; const int N = m_iNumTapsAndHolds;
const int sum = (N * (N + 1)) / 2; 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 // Don't use a multiplier if the player has failed
if( m_pPlayerStageStats->bFailedEarlier ) if( m_pPlayerStageStats->bFailedEarlier )
@@ -294,17 +294,17 @@ void ScoreKeeperNormal::AddScore( TapNoteScore score )
} }
else else
{ {
iScore += GetScore(p, B, sum, m_iTapNotesHit); iScore += GetScore(p, Z, sum, m_iTapNotesHit);
const int &iCurrentCombo = m_pPlayerStageStats->iCurCombo; const int &iCurrentCombo = m_pPlayerStageStats->iCurCombo;
m_pPlayerStageStats->iBonus += m_ComboBonusFactor[score] * iCurrentCombo; m_pPlayerStageStats->iBonus += m_ComboBonusFactor[score] * iCurrentCombo;
} }
/* Subtract the maximum this step could have been worth from the bonus. */ /* 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. */ /* 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) if (!m_pPlayerStageStats->bFailedEarlier)
iScore += m_iPointBonus; iScore += m_iPointBonus;
@@ -349,13 +349,13 @@ void ScoreKeeperNormal::HandleTapRowScore( TapNoteScore scoreOfLastTap, int iNum
// Update dance points. // Update dance points.
if( !m_pPlayerStageStats->bFailed ) if( !m_pPlayerStageStats->bFailed )
m_pPlayerStageStats->iActualDancePoints += TapNoteScoreToDancePoints( scoreOfLastTap ); m_pPlayerStageStats->iActualDancePoints += TapNoteScoreToDancePoints( scoreOfLastTap );
m_pPlayerStageStats->iCurPossibleDancePoints += TapNoteScoreToDancePoints( TNS_Tier1 ); m_pPlayerStageStats->iCurPossibleDancePoints += TapNoteScoreToDancePoints( TNS_W1 );
// update judged row totals // update judged row totals
m_pPlayerStageStats->iTapNoteScores[scoreOfLastTap] += 1; m_pPlayerStageStats->iTapNoteScores[scoreOfLastTap] += 1;
// increment the current total possible dance score // increment the current total possible dance score
m_pPlayerStageStats->iCurPossibleDancePoints += TapNoteScoreToDancePoints( TNS_Tier1 ); m_pPlayerStageStats->iCurPossibleDancePoints += TapNoteScoreToDancePoints( TNS_W1 );
// //
// Regular combo // Regular combo
@@ -385,8 +385,8 @@ void ScoreKeeperNormal::HandleTapRowScore( TapNoteScore scoreOfLastTap, int iNum
// //
switch( scoreOfLastTap ) switch( scoreOfLastTap )
{ {
case TNS_Tier1: case TNS_W1:
case TNS_Tier2: case TNS_W2:
m_iCurToastyCombo += iNumTapsInRow; m_iCurToastyCombo += iNumTapsInRow;
if( m_iCurToastyCombo >= 250 && if( m_iCurToastyCombo >= 250 &&
@@ -426,15 +426,15 @@ void ScoreKeeperNormal::HandleHoldScore( HoldNoteScore holdScore, TapNoteScore t
m_pPlayerStageStats->iCurPossibleDancePoints += HoldNoteScoreToDancePoints( HNS_Held ); m_pPlayerStageStats->iCurPossibleDancePoints += HoldNoteScoreToDancePoints( HNS_Held );
if( holdScore == HNS_Held ) if( holdScore == HNS_Held )
AddScore( TNS_Tier1 ); AddScore( TNS_W1 );
else if ( holdScore == HNS_LetGo ) 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 // TODO: Remove indexing with PlayerNumber
PlayerNumber pn = m_pPlayerState->m_PlayerNumber; PlayerNumber pn = m_pPlayerState->m_PlayerNumber;
NSMAN->ReportScore( NSMAN->ReportScore(
pn, pn,
holdScore+TNS_Tier1, holdScore+TNS_W1,
m_pPlayerStageStats->iScore, m_pPlayerStageStats->iScore,
m_pPlayerStageStats->iCurCombo ); m_pPlayerStageStats->iCurCombo );
} }
@@ -442,14 +442,14 @@ void ScoreKeeperNormal::HandleHoldScore( HoldNoteScore holdScore, TapNoteScore t
int ScoreKeeperNormal::GetPossibleDancePoints( const RadarValues& radars ) int ScoreKeeperNormal::GetPossibleDancePoints( const RadarValues& radars )
{ {
/* Note that, if Tier1 timing is disabled or not active (not course mode), /* Note that, if W1 timing is disabled or not active (not course mode),
* PERFECT will be used instead. */ * W2 will be used instead. */
int NumTaps = int(radars[RADAR_NUM_TAPS_AND_HOLDS]); int NumTaps = int(radars[RADAR_NUM_TAPS_AND_HOLDS]);
int NumHolds = int(radars[RADAR_NUM_HOLDS]); int NumHolds = int(radars[RADAR_NUM_HOLDS]);
int NumRolls = int(radars[RADAR_NUM_ROLLS]); int NumRolls = int(radars[RADAR_NUM_ROLLS]);
return return
NumTaps*TapNoteScoreToDancePoints(TNS_Tier1, false)+ NumTaps*TapNoteScoreToDancePoints(TNS_W1, false)+
NumHolds*HoldNoteScoreToDancePoints(HNS_Held, false) + NumHolds*HoldNoteScoreToDancePoints(HNS_Held, false) +
NumRolls*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 ) int ScoreKeeperNormal::GetPossibleGradePoints( const RadarValues& radars )
{ {
/* Note that, if Tier1 timing is disabled or not active (not course mode), /* Note that, if W1 timing is disabled or not active (not course mode),
* PERFECT will be used instead. */ * W2 will be used instead. */
int NumTaps = int(radars[RADAR_NUM_TAPS_AND_HOLDS]); int NumTaps = int(radars[RADAR_NUM_TAPS_AND_HOLDS]);
int NumHolds = int(radars[RADAR_NUM_HOLDS]); int NumHolds = int(radars[RADAR_NUM_HOLDS]);
int NumRolls = int(radars[RADAR_NUM_ROLLS]); int NumRolls = int(radars[RADAR_NUM_ROLLS]);
return return
NumTaps*TapNoteScoreToGradePoints(TNS_Tier1, false)+ NumTaps*TapNoteScoreToGradePoints(TNS_W1, false)+
NumHolds*HoldNoteScoreToGradePoints(HNS_Held, false) + NumHolds*HoldNoteScoreToGradePoints(HNS_Held, false) +
NumRolls*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 ) int ScoreKeeperNormal::TapNoteScoreToDancePoints( TapNoteScore tns, bool bBeginner )
{ {
if( !GAMESTATE->ShowTier1() && tns == TNS_Tier1 ) if( !GAMESTATE->ShowW1() && tns == TNS_W1 )
tns = TNS_Tier2; tns = TNS_W2;
/* This is used for Oni percentage displays. Grading values are currently in /* This is used for Oni percentage displays. Grading values are currently in
* StageStats::GetGrade. */ * StageStats::GetGrade. */
int iWeight = 0; int iWeight = 0;
switch( tns ) 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) ); 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 ) if( bBeginner && PREFSMAN->m_bMercifulBeginner )
iWeight = max( 0, iWeight ); iWeight = max( 0, iWeight );
@@ -539,10 +539,10 @@ int ScoreKeeperNormal::HoldNoteScoreToDancePoints( HoldNoteScore hns, bool bBegi
int iWeight = 0; int iWeight = 0;
switch( hns ) 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) ); 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 ) if( bBeginner && PREFSMAN->m_bMercifulBeginner )
iWeight = max( 0, iWeight ); iWeight = max( 0, iWeight );
@@ -551,24 +551,24 @@ int ScoreKeeperNormal::HoldNoteScoreToDancePoints( HoldNoteScore hns, bool bBegi
int ScoreKeeperNormal::TapNoteScoreToGradePoints( TapNoteScore tns, bool bBeginner ) int ScoreKeeperNormal::TapNoteScoreToGradePoints( TapNoteScore tns, bool bBeginner )
{ {
if( !GAMESTATE->ShowTier1() && tns == TNS_Tier1 ) if( !GAMESTATE->ShowW1() && tns == TNS_W1 )
tns = TNS_Tier2; tns = TNS_W2;
/* This is used for Oni percentage displays. Grading values are currently in /* This is used for Oni percentage displays. Grading values are currently in
* StageStats::GetGrade. */ * StageStats::GetGrade. */
int iWeight = 0; int iWeight = 0;
switch( tns ) 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) ); 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 ) if( bBeginner && PREFSMAN->m_bMercifulBeginner )
iWeight = max( 0, iWeight ); iWeight = max( 0, iWeight );
@@ -580,10 +580,10 @@ int ScoreKeeperNormal::HoldNoteScoreToGradePoints( HoldNoteScore hns, bool bBegi
int iWeight = 0; int iWeight = 0;
switch( hns ) 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) ); 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 ) if( bBeginner && PREFSMAN->m_bMercifulBeginner )
iWeight = max( 0, iWeight ); iWeight = max( 0, iWeight );
+9 -9
View File
@@ -28,7 +28,7 @@ void ScoreKeeperRave::HandleTapScore( TapNoteScore score )
float fPercentToMove = 0; float fPercentToMove = 0;
switch( score ) switch( score )
{ {
case TNS_HitMine: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChangeHitMine; break; case TNS_HitMine: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChange.Get(SE_HitMine); break;
} }
AddSuperMeterDelta( fPercentToMove ); AddSuperMeterDelta( fPercentToMove );
@@ -41,13 +41,13 @@ void ScoreKeeperRave::HandleTapRowScore( TapNoteScore scoreOfLastTap, int iNumTa
float fPercentToMove; float fPercentToMove;
switch( scoreOfLastTap ) switch( scoreOfLastTap )
{ {
case TNS_Tier1: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChangeTier1; break; default: ASSERT(0);
case TNS_Tier2: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChangeTier2; break; case TNS_W1: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChange.Get(SE_W1); break;
case TNS_Tier3: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChangeTier3; break; case TNS_W2: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChange.Get(SE_W2); break;
case TNS_Tier4: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChangeTier4; break; case TNS_W3: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChange.Get(SE_W3); break;
case TNS_Tier5: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChangeTier5; break; case TNS_W4: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChange.Get(SE_W4); break;
case TNS_Miss: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChangeMiss; break; case TNS_W5: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChange.Get(SE_W5); break;
default: ASSERT(0); fPercentToMove = +0.00f; break; case TNS_Miss: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChange.Get(SE_Miss); break;
} }
AddSuperMeterDelta( fPercentToMove ); AddSuperMeterDelta( fPercentToMove );
} }
@@ -57,7 +57,7 @@ void ScoreKeeperRave::HandleHoldScore( HoldNoteScore holdScore, TapNoteScore tap
float fPercentToMove = 0; float fPercentToMove = 0;
switch( tapScore ) switch( tapScore )
{ {
case TNS_HitMine: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChangeHitMine; break; case TNS_HitMine: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChange.Get(SE_HitMine); break;
} }
AddSuperMeterDelta( fPercentToMove ); AddSuperMeterDelta( fPercentToMove );
} }
+1 -1
View File
@@ -1775,7 +1775,7 @@ void ScreenEdit::InputRecord( const InputEventPlus &input, EditButton EditB )
tn = TAP_ORIGINAL_MINE; tn = TAP_ORIGINAL_MINE;
m_NoteDataRecord.SetTapNote( iCol, iRow, tn ); m_NoteDataRecord.SetTapNote( iCol, iRow, tn );
m_NoteFieldRecord.Step( iCol, TNS_Tier1 ); m_NoteFieldRecord.Step( iCol, TNS_W1 );
} }
break; break;
case IET_SLOW_REPEAT: case IET_SLOW_REPEAT:
+6 -6
View File
@@ -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].iCurCombo = 250;
STATSMAN->m_CurStageStats.m_player[PLAYER_1].UpdateComboList( 100, false ); 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_W1] = rand()%2;
STATSMAN->m_CurStageStats.m_player[PLAYER_1].iTapNoteScores[TNS_Tier2] = rand()%2; STATSMAN->m_CurStageStats.m_player[PLAYER_1].iTapNoteScores[TNS_W2] = rand()%2;
STATSMAN->m_CurStageStats.m_player[PLAYER_1].iTapNoteScores[TNS_Tier3] = rand()%2; STATSMAN->m_CurStageStats.m_player[PLAYER_1].iTapNoteScores[TNS_W3] = rand()%2;
STATSMAN->m_CurStageStats.m_player[PLAYER_2].iTapNoteScores[TNS_Tier1] = rand()%2; STATSMAN->m_CurStageStats.m_player[PLAYER_2].iTapNoteScores[TNS_W1] = rand()%2;
STATSMAN->m_CurStageStats.m_player[PLAYER_2].iTapNoteScores[TNS_Tier2] = rand()%2; STATSMAN->m_CurStageStats.m_player[PLAYER_2].iTapNoteScores[TNS_W2] = rand()%2;
STATSMAN->m_CurStageStats.m_player[PLAYER_2].iTapNoteScores[TNS_Tier3] = rand()%2; STATSMAN->m_CurStageStats.m_player[PLAYER_2].iTapNoteScores[TNS_W3] = rand()%2;
STATSMAN->m_vPlayedStageStats.clear(); STATSMAN->m_vPlayedStageStats.clear();
} }
+35 -30
View File
@@ -39,14 +39,19 @@ const int NUM_SCORE_DIGITS = 9;
// metrics that are common to all ScreenEvaluation classes // metrics that are common to all ScreenEvaluation classes
#define BANNER_WIDTH THEME->GetMetricF(m_sName,"BannerWidth") #define BANNER_WIDTH THEME->GetMetricF(m_sName,"BannerWidth")
#define BANNER_HEIGHT THEME->GetMetricF(m_sName,"BannerHeight") #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", "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 SPIN_GRADES THEME->GetMetricB(m_sName,"SpinGrades")
#define CHEER_DELAY_SECONDS THEME->GetMetricF(m_sName,"CheerDelaySeconds") #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_SURVIVED_AREA THEME->GetMetricB(m_sName,"ShowSurvivedArea")
#define SHOW_WIN_AREA THEME->GetMetricB(m_sName,"ShowWinArea") #define SHOW_WIN_AREA THEME->GetMetricB(m_sName,"ShowWinArea")
#define SHOW_JUDGMENT_LABELS THEME->GetMetricB(m_sName,"ShowJudgmentLabels") #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_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_SCORE_AREA THEME->GetMetricB(m_sName,"ShowScoreArea")
#define SHOW_TOTAL_SCORE_AREA THEME->GetMetricB(m_sName,"ShowTotalScoreArea") #define SHOW_TOTAL_SCORE_AREA THEME->GetMetricB(m_sName,"ShowTotalScoreArea")
#define SHOW_TIME_AREA THEME->GetMetricB(m_sName,"ShowTimeArea") #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].bFailedEarlier = true;
} }
STATSMAN->m_CurStageStats.m_player[p].iTapNoteScores[TNS_Tier1] = rand()%3; STATSMAN->m_CurStageStats.m_player[p].iTapNoteScores[TNS_W1] = rand()%3;
STATSMAN->m_CurStageStats.m_player[p].iTapNoteScores[TNS_Tier2] = rand()%3; STATSMAN->m_CurStageStats.m_player[p].iTapNoteScores[TNS_W2] = rand()%3;
STATSMAN->m_CurStageStats.m_player[p].iTapNoteScores[TNS_Tier3] = rand()%3; STATSMAN->m_CurStageStats.m_player[p].iTapNoteScores[TNS_W3] = rand()%3;
STATSMAN->m_CurStageStats.m_player[p].iPossibleGradePoints = 4*ScoreKeeperNormal::TapNoteScoreToGradePoints(TNS_Tier1, false); STATSMAN->m_CurStageStats.m_player[p].iPossibleGradePoints = 4*ScoreKeeperNormal::TapNoteScoreToGradePoints(TNS_W1, false);
STATSMAN->m_CurStageStats.m_player[p].fLifeRemainingSeconds = randomf( 90, 580 ); STATSMAN->m_CurStageStats.m_player[p].fLifeRemainingSeconds = randomf( 90, 580 );
} }
@@ -471,9 +476,9 @@ void ScreenEvaluation::Init()
// //
// init judgment area // 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 continue; // skip
if( SHOW_JUDGMENT(l) ) if( SHOW_JUDGMENT(l) )
@@ -483,7 +488,7 @@ void ScreenEvaluation::Init()
m_sprJudgeLabels[l].Load( THEME->GetPathG(m_sName,"judge labels") ); m_sprJudgeLabels[l].Load( THEME->GetPathG(m_sName,"judge labels") );
m_sprJudgeLabels[l].StopAnimating(); m_sprJudgeLabels[l].StopAnimating();
m_sprJudgeLabels[l].SetState( l ); 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] ); SET_XY_AND_ON_COMMAND( m_sprJudgeLabels[l] );
this->AddChild( &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].LoadFromFont( THEME->GetPathF(m_sName, "judge") );
m_textJudgeNumbers[l][p].SetShadowLength( 0 ); m_textJudgeNumbers[l][p].SetShadowLength( 0 );
m_textJudgeNumbers[l][p].RunCommands( PLAYER_COLOR.GetValue(p) ); 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] ); SET_XY_AND_ON_COMMAND( m_textJudgeNumbers[l][p] );
this->AddChild( &m_textJudgeNumbers[l][p] ); this->AddChild( &m_textJudgeNumbers[l][p] );
int iValue; int iValue;
switch( l ) switch( l )
{ {
case tier1: iValue = STATSMAN->m_CurStageStats.m_player[p].iTapNoteScores[TNS_Tier1]; break; case JudgeLine_W1: iValue = STATSMAN->m_CurStageStats.m_player[p].iTapNoteScores[TNS_W1]; break;
case tier2: iValue = STATSMAN->m_CurStageStats.m_player[p].iTapNoteScores[TNS_Tier2]; break; case JudgeLine_W2: iValue = STATSMAN->m_CurStageStats.m_player[p].iTapNoteScores[TNS_W2]; break;
case tier3: iValue = STATSMAN->m_CurStageStats.m_player[p].iTapNoteScores[TNS_Tier3]; break; case JudgeLine_W3: iValue = STATSMAN->m_CurStageStats.m_player[p].iTapNoteScores[TNS_W3]; break;
case tier4: iValue = STATSMAN->m_CurStageStats.m_player[p].iTapNoteScores[TNS_Tier4]; break; case JudgeLine_W4: iValue = STATSMAN->m_CurStageStats.m_player[p].iTapNoteScores[TNS_W4]; break;
case tier5: iValue = STATSMAN->m_CurStageStats.m_player[p].iTapNoteScores[TNS_Tier5]; break; case JudgeLine_W5: iValue = STATSMAN->m_CurStageStats.m_player[p].iTapNoteScores[TNS_W5]; break;
case miss: iValue = STATSMAN->m_CurStageStats.m_player[p].iTapNoteScores[TNS_Miss]; break; case JudgeLine_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 JudgeLine_Held: 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 JudgeLine_MaxCombo: iValue = STATSMAN->m_CurStageStats.m_player[p].GetMaxCombo().cnt; break;
case error: iValue = STATSMAN->m_CurStageStats.m_player[p].iTotalError; break; case JudgeLine_Error: iValue = STATSMAN->m_CurStageStats.m_player[p].iTotalError; break;
default: iValue = 0; ASSERT(0); default: iValue = 0; ASSERT(0);
} }
// UGLY... generalize this // 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) ); 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) ) if( !SHOW_STAT(l) )
continue; continue;
if( SHOW_STATS_LABELS ) 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]->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] ); SET_XY_AND_ON_COMMAND( m_sprStatsLabel[l] );
this->AddChild( 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].LoadFromFont( THEME->GetPathF(m_sName,"stats") );
m_textStatsText[l][p].RunCommands( PLAYER_COLOR.GetValue(p) ); 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] ); SET_XY_AND_ON_COMMAND( m_textStatsText[l][p] );
this->AddChild( &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 RADAR_NUM_JUMPS, RADAR_NUM_HOLDS, RADAR_NUM_MINES, RADAR_NUM_HANDS, RADAR_NUM_ROLLS
}; };
@@ -789,7 +794,7 @@ void ScreenEvaluation::TweenOursOffScreen()
} }
// judgement area // judgement area
for( int l=0; l<NUM_JUDGE_LINES; l++ ) FOREACH_JudgeLine( l )
{ {
if( !SHOW_JUDGMENT(l) ) if( !SHOW_JUDGMENT(l) )
continue; continue;
@@ -801,7 +806,7 @@ void ScreenEvaluation::TweenOursOffScreen()
} }
// stats area // stats area
for( int l=0; l<NUM_STATS_LINES; l++ ) FOREACH_StatLine( l )
{ {
if( !SHOW_STAT(l) ) if( !SHOW_STAT(l) )
continue; continue;
+26 -6
View File
@@ -16,8 +16,28 @@
#include "ThemeMetric.h" #include "ThemeMetric.h"
const int MAX_SONGS_TO_SHOW = 5; // In summary, we show last 3 stages, plus extra stages if passed 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 JudgeLine
enum StatsLine { jumps, holds, mines, hands, rolls, NUM_STATS_LINES }; {
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 class ScreenEvaluation : public ScreenWithMenuElements
{ {
@@ -69,12 +89,12 @@ protected:
Sprite m_sprWin[NUM_PLAYERS]; Sprite m_sprWin[NUM_PLAYERS];
// judgment area // judgment area
Sprite m_sprJudgeLabels[NUM_JUDGE_LINES]; Sprite m_sprJudgeLabels[NUM_JudgeLine];
BitmapText m_textJudgeNumbers[NUM_JUDGE_LINES][NUM_PLAYERS]; BitmapText m_textJudgeNumbers[NUM_JudgeLine][NUM_PLAYERS];
// stats area // stats area
AutoActor m_sprStatsLabel[NUM_STATS_LINES]; AutoActor m_sprStatsLabel[NUM_StatLine];
BitmapText m_textStatsText[NUM_STATS_LINES][NUM_PLAYERS]; BitmapText m_textStatsText[NUM_StatLine][NUM_PLAYERS];
// score area // score area
AutoActor m_sprScoreLabel; AutoActor m_sprScoreLabel;
+26 -25
View File
@@ -14,16 +14,17 @@
#include "PercentageDisplay.h" #include "PercentageDisplay.h"
static const CString JudgeLineNames[] = { static const CString MultiplayerJudgeLineNames[] = {
"Tier1", "W1",
"Tier2", "W2",
"Tier3", "W3",
"Tier4", "W4",
"Tier5", "W5",
"Miss", "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 ) static void PositionItem( LuaExpression &expr, Actor *pSelf, int iItemIndex, int iNumItems )
{ {
@@ -42,7 +43,7 @@ class MultiplayerEvalScoreRow : public ActorFrame
protected: protected:
AutoActor m_sprFrame; AutoActor m_sprFrame;
PercentageDisplay m_score; PercentageDisplay m_score;
BitmapText m_textJudgmentNumber[NUM_JudgeLine]; BitmapText m_textJudgmentNumber[NUM_MultiplayerJudgeLine];
public: public:
MultiplayerEvalScoreRow( MultiPlayer mp, int iRankIndex ) MultiplayerEvalScoreRow( MultiPlayer mp, int iRankIndex )
@@ -66,7 +67,7 @@ public:
LuaExpression expr; LuaExpression expr;
expr.SetFromExpression( THEME->GetMetric("MultiplayerEvalScoreRow","NumberOnCommandFunction") ); expr.SetFromExpression( THEME->GetMetric("MultiplayerEvalScoreRow","NumberOnCommandFunction") );
for( int i=0; i<NUM_JudgeLine; i++ ) FOREACH_MultiplayerJudgeLine( i )
{ {
BitmapText &text = m_textJudgmentNumber[i]; BitmapText &text = m_textJudgmentNumber[i];
text.LoadFromFont( THEME->GetPathF("MultiplayerEvalScoreRow","JudgmentNumber") ); text.LoadFromFont( THEME->GetPathF("MultiplayerEvalScoreRow","JudgmentNumber") );
@@ -76,19 +77,19 @@ public:
switch( i ) switch( i )
{ {
default: ASSERT(0); default: ASSERT(0);
case JudgeLine_Tier1: iVal = pPlayerStageStats->iTapNoteScores[TNS_Tier1];break; case MultiplayerJudgeLine_W1: iVal = pPlayerStageStats->iTapNoteScores[TNS_W1]; break;
case JudgeLine_Tier2: iVal = pPlayerStageStats->iTapNoteScores[TNS_Tier2]; break; case MultiplayerJudgeLine_W2: iVal = pPlayerStageStats->iTapNoteScores[TNS_W2]; break;
case JudgeLine_Tier3: iVal = pPlayerStageStats->iTapNoteScores[TNS_Tier3]; break; case MultiplayerJudgeLine_W3: iVal = pPlayerStageStats->iTapNoteScores[TNS_W3]; break;
case JudgeLine_Tier4: iVal = pPlayerStageStats->iTapNoteScores[TNS_Tier4]; break; case MultiplayerJudgeLine_W4: iVal = pPlayerStageStats->iTapNoteScores[TNS_W4]; break;
case JudgeLine_Tier5: iVal = pPlayerStageStats->iTapNoteScores[TNS_Tier5]; break; case MultiplayerJudgeLine_W5: iVal = pPlayerStageStats->iTapNoteScores[TNS_W5]; break;
case JudgeLine_Miss: iVal = pPlayerStageStats->iTapNoteScores[TNS_Miss]; break; case MultiplayerJudgeLine_Miss: iVal = pPlayerStageStats->iTapNoteScores[TNS_Miss]; break;
case JudgeLine_Ok: iVal = pPlayerStageStats->iHoldNoteScores[HNS_Held]; break; case MultiplayerJudgeLine_Held: iVal = pPlayerStageStats->iHoldNoteScores[HNS_Held];break;
} }
CString s = ssprintf( "%3d", iVal ); CString s = ssprintf( "%3d", iVal );
text.SetText( s ); 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].bFailedEarlier = true;
} }
STATSMAN->m_CurStageStats.m_multiPlayer[p].iTapNoteScores[TNS_Tier1] = rand()%3; STATSMAN->m_CurStageStats.m_multiPlayer[p].iTapNoteScores[TNS_W1] = rand()%3;
STATSMAN->m_CurStageStats.m_multiPlayer[p].iTapNoteScores[TNS_Tier2] = rand()%3; STATSMAN->m_CurStageStats.m_multiPlayer[p].iTapNoteScores[TNS_W2] = rand()%3;
STATSMAN->m_CurStageStats.m_multiPlayer[p].iTapNoteScores[TNS_Tier3] = rand()%3; STATSMAN->m_CurStageStats.m_multiPlayer[p].iTapNoteScores[TNS_W3] = rand()%3;
STATSMAN->m_CurStageStats.m_multiPlayer[p].iPossibleGradePoints = 4*ScoreKeeperNormal::TapNoteScoreToGradePoints(TNS_Tier1, false); STATSMAN->m_CurStageStats.m_multiPlayer[p].iPossibleGradePoints = 4*ScoreKeeperNormal::TapNoteScoreToGradePoints(TNS_W1, false);
STATSMAN->m_CurStageStats.m_multiPlayer[p].fLifeRemainingSeconds = randomf( 90, 580 ); STATSMAN->m_CurStageStats.m_multiPlayer[p].fLifeRemainingSeconds = randomf( 90, 580 );
} }
@@ -199,13 +200,13 @@ void ScreenEvaluationMultiplayer::Init()
LuaExpression expr; LuaExpression expr;
expr.SetFromExpression( THEME->GetMetric("ScreenEvaluationMultiplayer","LabelOnCommandFunction") ); expr.SetFromExpression( THEME->GetMetric("ScreenEvaluationMultiplayer","LabelOnCommandFunction") );
FOREACH_JudgeLine( i ) FOREACH_MultiplayerJudgeLine( i )
{ {
AutoActor &a = m_sprJudgmentLabel[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] ); m_frameLabels.AddChild( m_sprJudgmentLabel[i] );
PositionItem( expr, a, i, NUM_JudgeLine ); PositionItem( expr, a, i, NUM_MultiplayerJudgeLine );
} }
} }
+11 -13
View File
@@ -5,20 +5,18 @@
class MultiplayerEvalScoreRow; class MultiplayerEvalScoreRow;
enum JudgeLine enum MultiplayerJudgeLine
{ {
JudgeLine_Tier1, MultiplayerJudgeLine_W1,
JudgeLine_Tier2, MultiplayerJudgeLine_W2,
JudgeLine_Tier3, MultiplayerJudgeLine_W3,
JudgeLine_Tier4, MultiplayerJudgeLine_W4,
JudgeLine_Tier5, MultiplayerJudgeLine_W5,
JudgeLine_Miss, MultiplayerJudgeLine_Miss,
JudgeLine_Ok, MultiplayerJudgeLine_Held,
NUM_JudgeLine, NUM_MultiplayerJudgeLine,
JudgeLine_INVALID MultiplayerJudgeLine_INVALID
}; };
#define FOREACH_JudgeLine( i ) FOREACH_ENUM( JudgeLine, NUM_JudgeLine, i )
const CString& JudgeLineToString( JudgeLine i );
class ScreenEvaluationMultiplayer : public ScreenWithMenuElements class ScreenEvaluationMultiplayer : public ScreenWithMenuElements
{ {
@@ -37,7 +35,7 @@ protected:
void MenuStart( PlayerNumber pn ); void MenuStart( PlayerNumber pn );
ActorFrame m_frameLabels; ActorFrame m_frameLabels;
AutoActor m_sprJudgmentLabel[NUM_JudgeLine]; AutoActor m_sprJudgmentLabel[NUM_MultiplayerJudgeLine];
vector<AutoActor> m_vsprBullet; vector<AutoActor> m_vsprBullet;
vector<MultiplayerEvalScoreRow*> m_vpMultiplayerEvalScoreRow; vector<MultiplayerEvalScoreRow*> m_vpMultiplayerEvalScoreRow;
+4 -4
View File
@@ -1744,12 +1744,12 @@ void ScreenGameplay::Update( float fDeltaTime )
switch( tns ) switch( tns )
{ {
case TNS_Tier4: case TNS_W4:
case TNS_Tier3: case TNS_W3:
state = AS2D_GOOD; state = AS2D_GOOD;
break; break;
case TNS_Tier2: case TNS_W2:
case TNS_Tier1: case TNS_W1:
state = AS2D_GREAT; state = AS2D_GREAT;
break; break;
default: default:
+15 -15
View File
@@ -21,13 +21,13 @@
#include "CharacterManager.h" #include "CharacterManager.h"
#include "StatsManager.h" #include "StatsManager.h"
static const ThemeMetric<CString> STEPFILE ("ScreenHowToPlay","Stepfile"); static const ThemeMetric<CString> STEPFILE ("ScreenHowToPlay","Stepfile");
static const ThemeMetric<int> NUM_TIER2S ("ScreenHowToPlay","NumTier2s"); static const ThemeMetric<int> NUM_W2S ("ScreenHowToPlay","NumW2s");
static const ThemeMetric<int> NUM_MISSES ("ScreenHowToPlay","NumMisses"); static const ThemeMetric<int> NUM_MISSES ("ScreenHowToPlay","NumMisses");
static const ThemeMetric<bool> USELIFEBAR ("ScreenHowToPlay","UseLifeMeterBar"); static const ThemeMetric<bool> USELIFEBAR ("ScreenHowToPlay","UseLifeMeterBar");
static const ThemeMetric<bool> USECHARACTER ("ScreenHowToPlay","UseCharacter"); static const ThemeMetric<bool> USECHARACTER ("ScreenHowToPlay","UseCharacter");
static const ThemeMetric<bool> USEPAD ("ScreenHowToPlay","UsePad"); static const ThemeMetric<bool> USEPAD ("ScreenHowToPlay","UsePad");
static const ThemeMetric<bool> USEPLAYER ("ScreenHowToPlay","UseNotefield"); static const ThemeMetric<bool> USEPLAYER ("ScreenHowToPlay","UseNotefield");
enum Animation enum Animation
{ {
@@ -69,8 +69,8 @@ static bool HaveAllCharAnimations()
REGISTER_SCREEN_CLASS( ScreenHowToPlay ); REGISTER_SCREEN_CLASS( ScreenHowToPlay );
ScreenHowToPlay::ScreenHowToPlay( CString sName ) : ScreenAttract( sName ) ScreenHowToPlay::ScreenHowToPlay( CString sName ) : ScreenAttract( sName )
{ {
m_iTier2s = 0; m_iW2s = 0;
m_iNumTier2s = NUM_TIER2S; m_iNumW2s = NUM_W2S;
// initialize these because they might not be used. // initialize these because they might not be used.
m_pPlayer = NULL; m_pPlayer = NULL;
@@ -128,7 +128,7 @@ void ScreenHowToPlay::Init()
m_pLifeMeterBar->SetName("LifeMeterBar"); m_pLifeMeterBar->SetName("LifeMeterBar");
m_pLifeMeterBar->Load( GAMESTATE->m_pPlayerState[PLAYER_1], &STATSMAN->m_CurStageStats.m_player[PLAYER_1] ); m_pLifeMeterBar->Load( GAMESTATE->m_pPlayerState[PLAYER_1], &STATSMAN->m_CurStageStats.m_player[PLAYER_1] );
SET_XY_AND_ON_COMMAND( m_pLifeMeterBar ); 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) ); GAMESTATE->m_pCurStyle.Set( GAMEMAN->GetHowToPlayStyleForGame(GAMESTATE->m_pCurGame) );
@@ -205,7 +205,7 @@ void ScreenHowToPlay::Step()
int iStep = 0; int iStep = 0;
const int iNoteRow = BeatToNoteRowNotRounded( GAMESTATE->m_fSongBeat + 0.6f ); const int iNoteRow = BeatToNoteRowNotRounded( GAMESTATE->m_fSongBeat + 0.6f );
// if we want to miss from here on out, don't process steps. // 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(); const int iNumTracks = m_NoteData.GetNumTracks();
for( int k=0; k<iNumTracks; k++ ) for( int k=0; k<iNumTracks; k++ )
@@ -248,19 +248,19 @@ void ScreenHowToPlay::Update( float fDelta )
{ {
if( m_pLifeMeterBar && !m_pPlayer ) if( m_pLifeMeterBar && !m_pPlayer )
{ {
if ( m_iTier2s < m_iNumTier2s ) if ( m_iW2s < m_iNumW2s )
m_pLifeMeterBar->ChangeLife(TNS_Tier2); m_pLifeMeterBar->ChangeLife(TNS_W2);
else else
m_pLifeMeterBar->ChangeLife(TNS_Miss); m_pLifeMeterBar->ChangeLife(TNS_Miss);
} }
m_iTier2s++; m_iW2s++;
iLastNoteRowCounted = iCurNoteRow; iLastNoteRowCounted = iCurNoteRow;
} }
// once we hit the number of perfects we want, we want to fail. // once we hit the number of perfects we want, we want to fail.
// switch the controller to HUMAN. since we aren't taking input, // switch the controller to HUMAN. since we aren't taking input,
// the steps will always be misses. // 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; GAMESTATE->m_pPlayerState[PLAYER_1]->m_PlayerController = PC_HUMAN;
if ( m_pmCharacter ) if ( m_pmCharacter )
+2 -2
View File
@@ -26,8 +26,8 @@ protected:
Player* m_pPlayer; Player* m_pPlayer;
Model* m_pmCharacter; Model* m_pmCharacter;
Model* m_pmDancePad; Model* m_pmDancePad;
int m_iTier2s; int m_iW2s;
int m_iNumTier2s; int m_iNumW2s;
Song m_Song; Song m_Song;
NoteData m_NoteData; NoteData m_NoteData;
+1 -1
View File
@@ -358,7 +358,7 @@ void ScreenNameEntry::Input( const InputEventPlus &input )
int iStringIndex = m_ColToStringIndex[input.StyleI.player][input.StyleI.col]; int iStringIndex = m_ColToStringIndex[input.StyleI.player][input.StyleI.col];
if( iStringIndex != -1 ) 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(); m_soundStep.Play();
char c = NAME_CHARS[GetClosestCharIndex(m_fFakeBeat)]; char c = NAME_CHARS[GetClosestCharIndex(m_fFakeBeat)];
m_textSelectedChars[input.StyleI.player][input.StyleI.col].SetText( ssprintf("%c",c) ); m_textSelectedChars[input.StyleI.player][input.StyleI.col].SetText( ssprintf("%c",c) );
+1 -1
View File
@@ -199,7 +199,7 @@ void ScreenNetEvaluation::UpdateStats()
for (int j=0; j<NETNUMTAPSCORES; ++j) 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) 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] ) ); m_textJudgeNumbers[j][m_pActivePlayer].SetText( ssprintf( "%*d", iNumDigits, NSMAN->m_EvalPlayerData[m_iCurrentPlayer].tapScores[j] ) );
} }
+5 -5
View File
@@ -308,10 +308,10 @@ MOVE( AllowExtraStage, PREFSMAN->m_bAllowExtraStage );
MOVE( PickExtraStage, PREFSMAN->m_bPickExtraStage ); MOVE( PickExtraStage, PREFSMAN->m_bPickExtraStage );
MOVE( UnlockSystem, PREFSMAN->m_bUseUnlockSystem ); 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 }; const PrefsManager::AllowW1 mapping[] = { PrefsManager::ALLOW_W1_NEVER, PrefsManager::ALLOW_W1_COURSES_ONLY, PrefsManager::ALLOW_W1_EVERYWHERE };
MoveMap( sel, PREFSMAN->m_Tier1Timing, ToSel, mapping, ARRAYSIZE(mapping) ); MoveMap( sel, PREFSMAN->m_AllowW1, ToSel, mapping, ARRAYSIZE(mapping) );
} }
static void CoinModeM( int &sel, bool ToSel, const ConfOption *pConfOption ) 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 ) 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 }; 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 ) 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( "SoloSingles", SoloSingles, "OFF","ON" ) );
ADD( ConfOption( "HiddenSongs", MovePref, "OFF","ON" ) ); ADD( ConfOption( "HiddenSongs", MovePref, "OFF","ON" ) );
ADD( ConfOption( "EasterEggs", EasterEggs, "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( "AllowExtraStage", AllowExtraStage, "OFF","ON" ) );
ADD( ConfOption( "PickExtraStage", PickExtraStage, "OFF","ON" ) ); ADD( ConfOption( "PickExtraStage", PickExtraStage, "OFF","ON" ) );
ADD( ConfOption( "UnlockSystem", UnlockSystem, "OFF","ON" ) ); ADD( ConfOption( "UnlockSystem", UnlockSystem, "OFF","ON" ) );