diff --git a/stepmania/src/GameDef.h b/stepmania/src/GameDef.h index 1626723571..93af66458c 100644 --- a/stepmania/src/GameDef.h +++ b/stepmania/src/GameDef.h @@ -52,6 +52,12 @@ public: GameButton ButtonNameToIndex( const CString &sButtonName ) const; MenuInput GameInputToMenuInput( GameInput GameI ) const; void MenuInputToGameInput( MenuInput MenuI, GameInput GameIout[4] ) const; + + TapNoteScore m_mapMarvelousTo; + TapNoteScore m_mapPerfectTo; + TapNoteScore m_mapGreatTo; + TapNoteScore m_mapGoodTo; + TapNoteScore m_mapBooTo; }; #endif diff --git a/stepmania/src/GameManager.cpp b/stepmania/src/GameManager.cpp index ab48eb43b1..4d51d6444c 100644 --- a/stepmania/src/GameManager.cpp +++ b/stepmania/src/GameManager.cpp @@ -160,7 +160,12 @@ GameDef g_GameDefs[NUM_GAMES] = NO_DEFAULT_KEY, // DANCE_BUTTON_COIN NO_DEFAULT_KEY // DANCE_BUTTON_OPERATOR }, - } + }, + TNS_MARVELOUS, // m_mapMarvelousTo + TNS_PERFECT, // m_mapPerfectTo + TNS_GREAT, // m_mapGreatTo + TNS_GOOD, // m_mapGoodTo + TNS_BOO, // m_mapBooTo }, { // GAME_PUMP "pump", // m_szName @@ -248,7 +253,12 @@ GameDef g_GameDefs[NUM_GAMES] = NO_DEFAULT_KEY, // PUMP_BUTTON_COIN NO_DEFAULT_KEY // PUMP_BUTTON_OPERATOR }, - } + }, + TNS_MARVELOUS, // m_mapMarvelousTo + TNS_PERFECT, // m_mapPerfectTo + TNS_GREAT, // m_mapGreatTo + TNS_GOOD, // m_mapGoodTo + TNS_BOO, // m_mapBooTo }, { "ez2", // m_szName @@ -345,6 +355,11 @@ GameDef g_GameDefs[NUM_GAMES] = NO_DEFAULT_KEY // EZ2_BUTTON_OPERATOR }, }, + TNS_PERFECT, // m_mapMarvelousTo + TNS_PERFECT, // m_mapPerfectTo + TNS_PERFECT, // m_mapGreatTo + TNS_GOOD, // m_mapGoodTo + TNS_MISS, // m_mapBooTo }, { // GAME_PARA "para", // m_szName @@ -432,7 +447,12 @@ GameDef g_GameDefs[NUM_GAMES] = NO_DEFAULT_KEY, // PARA_BUTTON_COIN NO_DEFAULT_KEY // PARA_BUTTON_OPERATOR }, - } + }, + TNS_MARVELOUS, // m_mapMarvelousTo + TNS_PERFECT, // m_mapPerfectTo + TNS_GREAT, // m_mapGreatTo + TNS_GOOD, // m_mapGoodTo + TNS_BOO, // m_mapBooTo }, { // GAME_DS3DDX "ds3ddx", // m_szName @@ -532,7 +552,12 @@ GameDef g_GameDefs[NUM_GAMES] = NO_DEFAULT_KEY, // DS3DDX_BUTTON_COIN NO_DEFAULT_KEY // DS3DDX_BUTTON_OPERATOR }, - } + }, + TNS_MARVELOUS, // m_mapMarvelousTo + TNS_PERFECT, // m_mapPerfectTo + TNS_GREAT, // m_mapGreatTo + TNS_GOOD, // m_mapGoodTo + TNS_BOO, // m_mapBooTo }, { // GAME_BM "bm", // m_szName @@ -629,7 +654,12 @@ GameDef g_GameDefs[NUM_GAMES] = NO_DEFAULT_KEY, // BM_BUTTON_COIN NO_DEFAULT_KEY // BM_BUTTON_OPERATOR }, - } + }, + TNS_MARVELOUS, // m_mapMarvelousTo + TNS_PERFECT, // m_mapPerfectTo + TNS_GREAT, // m_mapGreatTo + TNS_GOOD, // m_mapGoodTo + TNS_BOO, // m_mapBooTo }, { // GAME_IIDX "iidx", // m_szName @@ -734,7 +764,12 @@ GameDef g_GameDefs[NUM_GAMES] = NO_DEFAULT_KEY, // IIDX_BUTTON_COIN NO_DEFAULT_KEY // IIDX_BUTTON_OPERATOR }, - } + }, + TNS_MARVELOUS, // m_mapMarvelousTo + TNS_PERFECT, // m_mapPerfectTo + TNS_GREAT, // m_mapGreatTo + TNS_GOOD, // m_mapGoodTo + TNS_BOO, // m_mapBooTo }, { // GAME_MANIAX "maniax", // m_szName @@ -818,7 +853,12 @@ GameDef g_GameDefs[NUM_GAMES] = NO_DEFAULT_KEY, // MANIAX_BUTTON_COIN NO_DEFAULT_KEY // MANIAX_BUTTON_OPERATOR }, - } + }, + TNS_MARVELOUS, // m_mapMarvelousTo + TNS_PERFECT, // m_mapPerfectTo + TNS_GREAT, // m_mapGreatTo + TNS_GOOD, // m_mapGoodTo + TNS_BOO, // m_mapBooTo }, { // GAME_TECHNO "techno", // m_szName @@ -920,7 +960,12 @@ GameDef g_GameDefs[NUM_GAMES] = NO_DEFAULT_KEY, // TECHNO_BUTTON_COIN NO_DEFAULT_KEY // TECHNO_BUTTON_OPERATOR }, - } + }, + TNS_MARVELOUS, // m_mapMarvelousTo + TNS_PERFECT, // m_mapPerfectTo + TNS_GREAT, // m_mapGreatTo + TNS_GOOD, // m_mapGoodTo + TNS_BOO, // m_mapBooTo }, { // GAME_PNM "pnm", // m_szName @@ -1025,7 +1070,12 @@ GameDef g_GameDefs[NUM_GAMES] = NO_DEFAULT_KEY, // BM_BUTTON_COIN NO_DEFAULT_KEY // BM_BUTTON_OPERATOR }, - } + }, + TNS_PERFECT, // m_mapMarvelousTo + TNS_PERFECT, // m_mapPerfectTo + TNS_GREAT, // m_mapGreatTo + TNS_GREAT, // m_mapGoodTo + TNS_MISS, // m_mapBooTo }, { // GAME_LIGHTS "lights", // m_szName @@ -1125,7 +1175,12 @@ GameDef g_GameDefs[NUM_GAMES] = NO_DEFAULT_KEY // LIGHTS_BUTTON_COIN NO_DEFAULT_KEY // LIGHTS_BUTTON_OPERATOR }, - } + }, + TNS_MARVELOUS, // m_mapMarvelousTo + TNS_PERFECT, // m_mapPerfectTo + TNS_GREAT, // m_mapGreatTo + TNS_GOOD, // m_mapGoodTo + TNS_BOO, // m_mapBooTo }, }; diff --git a/stepmania/src/Player.cpp b/stepmania/src/Player.cpp index b14af1cfa3..0d6e27e1e1 100644 --- a/stepmania/src/Player.cpp +++ b/stepmania/src/Player.cpp @@ -675,30 +675,6 @@ void PlayerMinus::Step( int col, RageTimer tm ) { case PC_HUMAN: { - // TODO: move the judgments into flags in PrefsManager so we don't need logic like this per-game. - if(GAMESTATE->m_CurGame == GAME_EZ2) - { - /* 1 is normal. 2 means scoring is half as hard; .5 means it's twice as hard. */ - /* Ez2 is only perfect / good / miss */ - if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Marvelous) ) score = TNS_PERFECT; - else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Perfect) ) score = TNS_PERFECT; - else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Great) ) score = TNS_PERFECT; - else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Good) ) score = TNS_GOOD; - else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Boo) ) score = TNS_MISS; - else score = TNS_NONE; - } - else if(GAMESTATE->m_CurGame == GAME_PNM) - { - /* PNM Goods = Great / Boo = Miss */ - if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Marvelous) ) score = TNS_MARVELOUS; - else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Perfect) ) score = TNS_PERFECT; - else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Great) ) score = TNS_GREAT; - else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Good) ) score = TNS_GREAT; - else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Boo) ) score = TNS_MISS; - else score = TNS_NONE; - } - - switch( tn ) { case TAP_MINE: @@ -742,28 +718,12 @@ void PlayerMinus::Step( int col, RageTimer tm ) } else // !IsTapAttack { - // TODO: move the judgments into flags in PrefsManager so we don't need logic like this per-game. - if(GAMESTATE->m_CurGame == GAME_EZ2) - { - /* 1 is normal. 2 means scoring is half as hard; .5 means it's twice as hard. */ - /* Ez2 is only perfect / good / miss */ - if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Marvelous) ) score = TNS_PERFECT; - else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Perfect) ) score = TNS_PERFECT; - else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Great) ) score = TNS_PERFECT; - else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Good) ) score = TNS_GOOD; - else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Boo) ) score = TNS_MISS; - else score = TNS_NONE; - } - else - { - /* 1 is normal. 2 means scoring is half as hard; .5 means it's twice as hard. */ - if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Marvelous) ) score = TNS_MARVELOUS; - else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Perfect) ) score = TNS_PERFECT; - else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Great) ) score = TNS_GREAT; - else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Good) ) score = TNS_GOOD; - else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Boo) ) score = TNS_BOO; - else score = TNS_NONE; - } + if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Marvelous) ) score = TNS_MARVELOUS; + else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Perfect) ) score = TNS_PERFECT; + else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Great) ) score = TNS_GREAT; + else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Good) ) score = TNS_GOOD; + else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Boo) ) score = TNS_BOO; + else score = TNS_NONE; } break; } @@ -781,25 +741,6 @@ void PlayerMinus::Step( int col, RageTimer tm ) break; } - if( GAMESTATE->m_CurGame == GAME_EZ2 ) // scores are only perfect/good/miss on ez2 adjust accordingly - { - if(score == TNS_GREAT || score == TNS_MARVELOUS) - score = TNS_PERFECT; - if(score == TNS_BOO) - score = TNS_MISS; - } - if ( GAMESTATE->m_CurGame == GAME_PNM ) // a boo is really miss on pnm, a good is really a great! - { - if(score == TNS_MARVELOUS) // in demo mode PC shouldnt hit marvelous - score = TNS_PERFECT; - - if(score == TNS_GOOD) - score = TNS_GREAT; - - if(score == TNS_BOO) - score = TNS_MISS; - } - // TRICKY: We're asking the AI to judge mines. consider TNS_GOOD and below // as "mine was hit" and everything else as "mine was avoided" if( tn == TAP_MINE ) @@ -873,6 +814,16 @@ void PlayerMinus::Step( int col, RageTimer tm ) } + // Do game-specific score mapping. + const GameDef* pGameDef = GAMESTATE->GetCurrentGameDef(); + if( score == TNS_MARVELOUS ) score = pGameDef->m_mapMarvelousTo; + if( score == TNS_PERFECT ) score = pGameDef->m_mapPerfectTo; + if( score == TNS_GREAT ) score = pGameDef->m_mapGreatTo; + if( score == TNS_GOOD ) score = pGameDef->m_mapGoodTo; + if( score == TNS_BOO ) score = pGameDef->m_mapBooTo; + + + if( score != TNS_NONE && score != TNS_MISS ) { int ms_error = (int) roundf( fSecondsFromPerfect * 1000 );