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