diff --git a/stepmania/Courses/TortiseAndHare.crs b/stepmania/Courses/TortiseAndHare.crs index 5b521eedaf..7f25fa03d4 100644 --- a/stepmania/Courses/TortiseAndHare.crs +++ b/stepmania/Courses/TortiseAndHare.crs @@ -1,5 +1,5 @@ #COURSE:Tortise And the Hare; -#SONG:*:TRICK:0.7xmusic; -#SONG:*:TRICK:0.9xmusic; -#SONG:*:TRICK:1.2xmusic; +#SONG:*:TRICK:0.8xmusic; +#SONG:*:TRICK:1.1xmusic; +#SONG:*:TRICK:1.3xmusic; #SONG:*:TRICK:1.5xmusic; diff --git a/stepmania/Themes/default/metrics.ini b/stepmania/Themes/default/metrics.ini index 1b7c7c30a2..51009140c2 100644 --- a/stepmania/Themes/default/metrics.ini +++ b/stepmania/Themes/default/metrics.ini @@ -572,34 +572,24 @@ HelpText=&UP; &DOWN; to change line &LEFT; &RIGHT; to select between options HelpText=Use arrow keys to navigate, ENTER to assign, SPACE to clear, ESCAPE when done. [GhostArrow] -ShowSeconds=0.25 +ShowSeconds=0.12 ZoomStart=1.0 -ZoomEnd=1.5 -ColorMarvelousStart=1.0,1.0,1.0,1 // white -ColorMarvelousEnd=1.0,1.0,1.0,0 // white no alpha -ColorPerfectStart=1.0,1.0,0.3,1 // yellow -ColorPerfectEnd=1.0,1.0,0.3,0 // yellow no alpha -ColorGreatStart=0.0,1.0,0.4,1 // green -ColorGreatEnd=0.0,1.0,0.4,0 // green no alpha -ColorGoodStart=0.3,0.8,1.0,1 // blue -ColorGoodEnd=0.3,0.8,1.0,0 // blue no alpha -ColorBooStart=0.8,0.0,0.6,1 // purple -ColorBooEnd=0.8,0.0,0.6,0 // purple no alpha +ZoomEnd=1.3 +ColorMarvelous=1.0,1.0,1.0,1 // white +ColorPerfect=1.0,1.0,0.3,1 // yellow +ColorGreat=0.0,1.0,0.4,1 // green +ColorGood=0.3,0.8,1.0,1 // blue +ColorBoo=0.8,0.0,0.6,1 // purple [GhostArrowBright] -ShowSeconds=0.25 +ShowSeconds=0.12 ZoomStart=1.0 -ZoomEnd=1.5 -ColorMarvelousStart=1.0,1.0,1.0,1 // white -ColorMarvelousEnd=1.0,1.0,1.0,0 // white no alpha -ColorPerfectStart=1.0,1.0,0.3,1 // yellow -ColorPerfectEnd=1.0,1.0,0.3,0 // yellow no alpha -ColorGreatStart=0.0,1.0,0.4,1 // green -ColorGreatEnd=0.0,1.0,0.4,0 // green no alpha -ColorGoodStart=0.3,0.8,1.0,1 // blue -ColorGoodEnd=0.3,0.8,1.0,0 // blue no alpha -ColorBooStart=0.8,0.0,0.6,1 // purple -ColorBooEnd=0.8,0.0,0.6,0 // purple no alpha +ZoomEnd=1.3 +ColorMarvelous=1.0,1.0,1.0,1 // white +ColorPerfect=1.0,1.0,0.3,1 // yellow +ColorGreat=0.0,1.0,0.4,1 // green +ColorGood=0.3,0.8,1.0,1 // blue +ColorBoo=0.8,0.0,0.6,1 // purple [HoldGhostArrow] WarmUpSeconds=0.25 @@ -648,11 +638,11 @@ ShowSeconds=0.8 [Combo] LabelX=6 -LabelY=16 +LabelY=20 LabelHorizAlign=0 LabelVertAlign=2 NumberX=0 -NumberY=16 +NumberY=20 NumberHorizAlign=2 NumberVertAlign=2 ShowComboAt=4 diff --git a/stepmania/src/Course.cpp b/stepmania/src/Course.cpp index 5f7998ba1c..9a6b7f2543 100644 --- a/stepmania/src/Course.cpp +++ b/stepmania/src/Course.cpp @@ -310,11 +310,14 @@ void Course::GetStageInfo( vector vSongsByMostPlayed = SONGMAN->GetAllSongs(); SortSongPointerArrayByMostPlayed( vSongsByMostPlayed ); - // filter out songs that don't have both medium and hard steps + // filter out songs that don't have both medium and hard steps and long ver sons for( int j=vSongsByMostPlayed.size()-1; j>=0; j-- ) { Song* pSong = vSongsByMostPlayed[j]; - if( !pSong->GetNotes(nt, DIFFICULTY_MEDIUM) || !pSong->GetNotes(nt, DIFFICULTY_HARD) ) + if( pSong->m_fMusicLengthSeconds > PREFSMAN->m_fLongVerSongSeconds || + pSong->m_fMusicLengthSeconds > PREFSMAN->m_fMarathonVerSongSeconds || + !pSong->GetNotes(nt, DIFFICULTY_MEDIUM) || + !pSong->GetNotes(nt, DIFFICULTY_HARD) ) vSongsByMostPlayed.erase( vSongsByMostPlayed.begin()+j ); } diff --git a/stepmania/src/GameState.cpp b/stepmania/src/GameState.cpp index 9d6a7e5082..a3196ffd9c 100644 --- a/stepmania/src/GameState.cpp +++ b/stepmania/src/GameState.cpp @@ -87,8 +87,6 @@ void GameState::Reset() for( p=0; pm_DefaultFailType; } void GameState::ResetLastRanking() diff --git a/stepmania/src/GhostArrow.cpp b/stepmania/src/GhostArrow.cpp index 6d52e561d8..9332ce550e 100644 --- a/stepmania/src/GhostArrow.cpp +++ b/stepmania/src/GhostArrow.cpp @@ -16,45 +16,26 @@ #include "ThemeManager.h" -#define SHOW_SECONDS THEME->GetMetricF("GhostArrow","ShowSeconds") -#define ZOOM_START THEME->GetMetricF("GhostArrow","ZoomStart") -#define ZOOM_END THEME->GetMetricF("GhostArrow","ZoomEnd") -#define COLOR_MARVELOUS_START THEME->GetMetricC("GhostArrow","ColorMarvelousStart") -#define COLOR_MARVELOUS_END THEME->GetMetricC("GhostArrow","ColorMarvelousEnd") -#define COLOR_PERFECT_START THEME->GetMetricC("GhostArrow","ColorPerfectStart") -#define COLOR_PERFECT_END THEME->GetMetricC("GhostArrow","ColorPerfectEnd") -#define COLOR_GREAT_START THEME->GetMetricC("GhostArrow","ColorGreatStart") -#define COLOR_GREAT_END THEME->GetMetricC("GhostArrow","ColorGreatEnd") -#define COLOR_GOOD_START THEME->GetMetricC("GhostArrow","ColorGoodStart") -#define COLOR_GOOD_END THEME->GetMetricC("GhostArrow","ColorGoodEnd") -#define COLOR_BOO_START THEME->GetMetricC("GhostArrow","ColorBooStart") -#define COLOR_BOO_END THEME->GetMetricC("GhostArrow","ColorBooEnd") +CachedThemeMetric GA_SHOW_SECONDS ("GhostArrow","ShowSeconds"); +CachedThemeMetric GA_ZOOM_START ("GhostArrow","ZoomStart"); +CachedThemeMetric GA_ZOOM_END ("GhostArrow","ZoomEnd"); +CachedThemeMetric GA_COLOR_MARVELOUS ("GhostArrow","ColorMarvelous"); +CachedThemeMetric GA_COLOR_PERFECT ("GhostArrow","ColorPerfect"); +CachedThemeMetric GA_COLOR_GREAT ("GhostArrow","ColorGreat"); +CachedThemeMetric GA_COLOR_GOOD ("GhostArrow","ColorGood"); +CachedThemeMetric GA_COLOR_BOO ("GhostArrow","ColorBoo"); -float g_fShowSeconds; -float g_fZoomStart, g_fZoomEnd; -RageColor - g_colorMarvelousStart, g_colorMarvelousEnd, - g_colorPerfectStart, g_colorPerfectEnd, - g_colorGreatStart, g_colorGreatEnd, - g_colorGoodStart, g_colorGoodEnd, - g_colorBooStart, g_colorBooEnd; GhostArrow::GhostArrow() { - g_fShowSeconds = SHOW_SECONDS; - g_fZoomStart = ZOOM_START; - g_fZoomEnd = ZOOM_END; - g_colorMarvelousStart = COLOR_MARVELOUS_START; - g_colorMarvelousEnd = COLOR_MARVELOUS_END; - g_colorPerfectStart = COLOR_PERFECT_START; - g_colorPerfectEnd = COLOR_PERFECT_END; - g_colorGreatStart = COLOR_GREAT_START; - g_colorGreatEnd = COLOR_GREAT_END; - g_colorGoodStart = COLOR_GOOD_START; - g_colorGoodEnd = COLOR_GOOD_END; - g_colorBooStart = COLOR_BOO_START; - g_colorBooEnd = COLOR_BOO_END; - + GA_SHOW_SECONDS.Refresh(); + GA_ZOOM_START.Refresh(); + GA_ZOOM_END.Refresh(); + GA_COLOR_MARVELOUS.Refresh(); + GA_COLOR_PERFECT.Refresh(); + GA_COLOR_GREAT.Refresh(); + GA_COLOR_GOOD.Refresh(); + GA_COLOR_BOO.Refresh(); SetDiffuse( RageColor(1,1,1,0) ); } @@ -69,30 +50,31 @@ void GhostArrow::Step( TapNoteScore score ) // HACK: set the length of each frame so the animation plays in exactly 1 pop up time. // We can't do this in the constructor because the image hasn't been loaded yet for( int i=0; iGetMetricF("GhostArrowBright","ShowSeconds") -#define ZOOM_START THEME->GetMetricF("GhostArrowBright","ZoomStart") -#define ZOOM_END THEME->GetMetricF("GhostArrowBright","ZoomEnd") -#define COLOR_MARVELOUS_START THEME->GetMetricC("GhostArrowBright","ColorMarvelousStart") -#define COLOR_MARVELOUS_END THEME->GetMetricC("GhostArrowBright","ColorMarvelousEnd") -#define COLOR_PERFECT_START THEME->GetMetricC("GhostArrowBright","ColorPerfectStart") -#define COLOR_PERFECT_END THEME->GetMetricC("GhostArrowBright","ColorPerfectEnd") -#define COLOR_GREAT_START THEME->GetMetricC("GhostArrowBright","ColorGreatStart") -#define COLOR_GREAT_END THEME->GetMetricC("GhostArrowBright","ColorGreatEnd") -#define COLOR_GOOD_START THEME->GetMetricC("GhostArrowBright","ColorGoodStart") -#define COLOR_GOOD_END THEME->GetMetricC("GhostArrowBright","ColorGoodEnd") -#define COLOR_BOO_START THEME->GetMetricC("GhostArrowBright","ColorBooStart") -#define COLOR_BOO_END THEME->GetMetricC("GhostArrowBright","ColorBooEnd") - -// "2" appended so the names won't conflict with the GhostArrow -float g_fShowSeconds2; -float g_fZoomStart2, g_fZoomEnd2; -RageColor - g_colorMarvelousStart2, g_colorMarvelousEnd2, - g_colorPerfectStart2, g_colorPerfectEnd2, - g_colorGreatStart2, g_colorGreatEnd2, - g_colorGoodStart2, g_colorGoodEnd2, - g_colorBooStart2, g_colorBooEnd2; +CachedThemeMetric GAB_SHOW_SECONDS ("GhostArrowBright","ShowSeconds"); +CachedThemeMetric GAB_ZOOM_START ("GhostArrowBright","ZoomStart"); +CachedThemeMetric GAB_ZOOM_END ("GhostArrowBright","ZoomEnd"); +CachedThemeMetric GAB_COLOR_MARVELOUS ("GhostArrowBright","ColorMarvelous"); +CachedThemeMetric GAB_COLOR_PERFECT ("GhostArrowBright","ColorPerfect"); +CachedThemeMetric GAB_COLOR_GREAT ("GhostArrowBright","ColorGreat"); +CachedThemeMetric GAB_COLOR_GOOD ("GhostArrowBright","ColorGood"); +CachedThemeMetric GAB_COLOR_BOO ("GhostArrowBright","ColorBoo"); GhostArrowBright::GhostArrowBright() { - g_fShowSeconds2 = SHOW_SECONDS; - g_fZoomStart2 = ZOOM_START; - g_fZoomEnd2 = ZOOM_END; - g_colorMarvelousStart2 = COLOR_MARVELOUS_START; - g_colorMarvelousEnd2 = COLOR_MARVELOUS_END; - g_colorPerfectStart2 = COLOR_PERFECT_START; - g_colorPerfectEnd2 = COLOR_PERFECT_END; - g_colorGreatStart2 = COLOR_GREAT_START; - g_colorGreatEnd2 = COLOR_GREAT_END; - g_colorGoodStart2 = COLOR_GOOD_START; - g_colorGoodEnd2 = COLOR_GOOD_END; - g_colorBooStart2 = COLOR_BOO_START; - g_colorBooEnd2 = COLOR_BOO_END; - + GAB_SHOW_SECONDS.Refresh(); + GAB_ZOOM_START.Refresh(); + GAB_ZOOM_END.Refresh(); + GAB_COLOR_MARVELOUS.Refresh(); + GAB_COLOR_PERFECT.Refresh(); + GAB_COLOR_GREAT.Refresh(); + GAB_COLOR_GOOD.Refresh(); + GAB_COLOR_BOO.Refresh(); SetDiffuse( RageColor(1,1,1,0) ); } @@ -71,30 +50,31 @@ void GhostArrowBright::Step( TapNoteScore score ) // HACK: set the length of each frame so the animation plays in exactly 1 pop up time. // We can't do this in the constructor because the image hasn't been loaded yet for( int i=0; im_PlayerOptions[p] = GAMESTATE->m_SelectedOptions[p]; // Put courses options into effect. GAMESTATE->m_PlayerOptions[p].FromString( m_asCourseModifiers[iPlaySongIndex] ); + GAMESTATE->m_SongOptions.FromString( m_asCourseModifiers[iPlaySongIndex] ); } } break; @@ -548,7 +549,7 @@ void ScreenGameplay::LoadNextSong() m_textStageNumber.SetText( GAMESTATE->GetStageText() ); - + m_textSongOptions.SetText( GAMESTATE->m_SongOptions.GetString() ); for( int p=0; pm_PlayerOptions[p].GetString() ); - // reset oni game over graphic m_sprOniGameOver[p].SetY( SCREEN_TOP - m_sprOniGameOver[p].GetZoomedHeight()/2 ); m_sprOniGameOver[p].SetDiffuse( RageColor(1,1,1,0) ); // 0 alpha so we don't waste time drawing while not visible diff --git a/stepmania/src/ScreenSelectCourse.cpp b/stepmania/src/ScreenSelectCourse.cpp index b7cad614de..a9f6728749 100644 --- a/stepmania/src/ScreenSelectCourse.cpp +++ b/stepmania/src/ScreenSelectCourse.cpp @@ -333,13 +333,25 @@ void ScreenSelectCourse::MenuStart( PlayerNumber pn ) Course* pCourse = m_MusicWheel.GetSelectedCourse(); GAMESTATE->m_pCurCourse = pCourse; - Song* pSong; - Notes* pNotes; - CString sModifiers; - pCourse->GetFirstStageInfo( pSong, pNotes, sModifiers, GAMESTATE->GetCurrentStyleDef()->m_NotesType ); - for( int p=0; pm_PlayerOptions[p].FromString( sModifiers ); - GAMESTATE->m_SongOptions.FromString( sModifiers ); + // apply #LIVES + if( pCourse->m_iLives != -1 ) + { + GAMESTATE->m_SongOptions.m_LifeType = SongOptions::LIFE_BATTERY; + GAMESTATE->m_SongOptions.m_iBatteryLives = pCourse->m_iLives; + } + + // + // Do NOT apply the first song's modifiers before going to the options screen. + // The user should not be able to override modifiers specifically designated + // by the course. + // + //Song* pSong; + //Notes* pNotes; + //CString sModifiers; + //pCourse->GetFirstStageInfo( pSong, pNotes, sModifiers, GAMESTATE->GetCurrentStyleDef()->m_NotesType ); + //for( int p=0; pm_PlayerOptions[p].FromString( sModifiers ); + //GAMESTATE->m_SongOptions.FromString( sModifiers ); m_Menu.StopTimer(); AdjustOptions(); diff --git a/stepmania/src/ScreenSelectMusic.cpp b/stepmania/src/ScreenSelectMusic.cpp index ac617d46b3..c618cc181b 100644 --- a/stepmania/src/ScreenSelectMusic.cpp +++ b/stepmania/src/ScreenSelectMusic.cpp @@ -87,6 +87,8 @@ ScreenSelectMusic::ScreenSelectMusic() CodeDetector::RefreshCacheItems(); + GAMESTATE->m_SongOptions.m_FailType = PREFSMAN->m_DefaultFailType; + int p; m_Menu.Load(