diff --git a/stepmania/src/GameState.cpp b/stepmania/src/GameState.cpp index 3290b80330..5028cc908e 100644 --- a/stepmania/src/GameState.cpp +++ b/stepmania/src/GameState.cpp @@ -402,6 +402,9 @@ bool GameState::HasEarnedExtraStage() if( PREFSMAN->m_bEventMode ) return false; + if( !PREFSMAN->m_bAllowExtraStage ) + return false; + if( GAMESTATE->m_PlayMode != PLAY_MODE_ARCADE ) return false; diff --git a/stepmania/src/NoteSkinManager.cpp b/stepmania/src/NoteSkinManager.cpp index 0d48ef9c97..6d1e805c8e 100644 --- a/stepmania/src/NoteSkinManager.cpp +++ b/stepmania/src/NoteSkinManager.cpp @@ -111,6 +111,9 @@ void NoteSkinManager::GetNoteSkinNames( CStringArray &AddTo ) for( map::const_iterator iter = m_mapNameToData.begin(); iter != m_mapNameToData.end(); ++iter ) { + // don't show "default" + if( iter->second.sName.CompareNoCase("default")==0 ) + continue; AddTo.push_back( iter->second.sName ); } } diff --git a/stepmania/src/PrefsManager.h b/stepmania/src/PrefsManager.h index 7475c49f39..7eb3d9a09d 100644 --- a/stepmania/src/PrefsManager.h +++ b/stepmania/src/PrefsManager.h @@ -110,6 +110,7 @@ public: float m_fCenterImageScaleX; float m_fCenterImageScaleY; bool m_bAttractSound; + bool m_bAllowExtraStage; // course ranking enum CourseSortOrders { COURSE_SORT_SONGS, COURSE_SORT_METER, COURSE_SORT_METER_SUM, COURSE_SORT_RANK } m_iCourseSortOrder; diff --git a/stepmania/src/Screen.cpp b/stepmania/src/Screen.cpp index d3b8fe91d3..9679845e86 100644 --- a/stepmania/src/Screen.cpp +++ b/stepmania/src/Screen.cpp @@ -126,8 +126,8 @@ void Screen::Input( const DeviceInput& DeviceI, const InputEventType type, const /* Don't send release messages with the default handler. */ if(type == IET_RELEASE) return; // don't care - /* Don't make the user hold the back button if they're pressing escape. */ - if( DeviceI.device == DEVICE_KEYBOARD && DeviceI.button == SDLK_ESCAPE ) + /* Don't make the user hold the back button if they're pressing escape and escape is the back button. */ + if( MenuI.button == MENU_BUTTON_BACK && DeviceI.device == DEVICE_KEYBOARD && DeviceI.button == SDLK_ESCAPE ) { this->MenuBack( MenuI.player ); return; diff --git a/stepmania/src/ScreenEvaluation.cpp b/stepmania/src/ScreenEvaluation.cpp index e3d9d93fe1..450afb5149 100644 --- a/stepmania/src/ScreenEvaluation.cpp +++ b/stepmania/src/ScreenEvaluation.cpp @@ -668,7 +668,7 @@ ScreenEvaluation::ScreenEvaluation( CString sClassName ) : Screen(sClassName) if( GAMESTATE->IsPlayerEnabled(p) && iPersonalHighScoreIndex[p] == 0 ) bOneHasNewRecord = true; - if( m_bTryExtraStage ) + if( PREFSMAN->m_bAllowExtraStage && m_bTryExtraStage ) { m_sprTryExtraStage.Load( THEME->GetPathToG(GAMESTATE->IsExtraStage()?"ScreenEvaluation try extra2":"ScreenEvaluation try extra1") ); m_sprTryExtraStage.SetName( "TryExtraStage" ); diff --git a/stepmania/src/ScreenGameplay.cpp b/stepmania/src/ScreenGameplay.cpp index 32da8af191..0ed6e48ff5 100644 --- a/stepmania/src/ScreenGameplay.cpp +++ b/stepmania/src/ScreenGameplay.cpp @@ -530,9 +530,9 @@ ScreenGameplay::ScreenGameplay( CString sName, bool bDemonstration ) : Screen("S m_Failed.Load( THEME->GetPathToB("ScreenGameplay failed") ); this->AddChild( &m_Failed ); - if( GAMESTATE->IsFinalStage() ) // only load if we're going to use it + if( PREFSMAN->m_bAllowExtraStage && GAMESTATE->IsFinalStage() ) // only load if we're going to use it m_Extra.Load( THEME->GetPathToB("ScreenGameplay extra1") ); - if( GAMESTATE->IsExtraStage() ) // only load if we're going to use it + if( PREFSMAN->m_bAllowExtraStage && GAMESTATE->IsExtraStage() ) // only load if we're going to use it m_Extra.Load( THEME->GetPathToB("ScreenGameplay extra2") ); this->AddChild( &m_Extra ); diff --git a/stepmania/src/ScreenOptions.cpp b/stepmania/src/ScreenOptions.cpp index 21771fb0af..aac77a7a0d 100644 --- a/stepmania/src/ScreenOptions.cpp +++ b/stepmania/src/ScreenOptions.cpp @@ -570,11 +570,29 @@ void ScreenOptions::Input( const DeviceInput& DeviceI, const InputEventType type // if we are in dedicated menubutton input and arcade navigation // check to see if MENU_BUTTON_LEFT and MENU_BUTTON_RIGHT are being held - if( MenuI.IsValid() && MenuI.button == MENU_BUTTON_START && + + // Super Hack to use the feature in ScreenOptionsMenu (where no style is set) + bool bHoldingLeftOrRight = false; + bHoldingLeftOrRight |= MenuI.IsValid() && MenuI.button == MENU_BUTTON_START && PREFSMAN->m_bArcadeOptionsNavigation && GAMESTATE->m_CurStyle != STYLE_INVALID && - INPUTMAPPER->IsButtonDown( MenuInput(MenuI.player, MENU_BUTTON_RIGHT) ) && - INPUTMAPPER->IsButtonDown( MenuInput(MenuI.player, MENU_BUTTON_LEFT) ) ) + (INPUTMAPPER->IsButtonDown( MenuInput(MenuI.player, MENU_BUTTON_RIGHT) ) || + INPUTMAPPER->IsButtonDown( MenuInput(MenuI.player, MENU_BUTTON_LEFT) ) ); + + if( GAMESTATE->m_CurStyle == STYLE_INVALID ) + { + GAMESTATE->m_CurStyle = STYLE_DANCE_VERSUS; + + bHoldingLeftOrRight |= MenuI.IsValid() && MenuI.button == MENU_BUTTON_START && + PREFSMAN->m_bArcadeOptionsNavigation && + GAMESTATE->m_CurStyle != STYLE_INVALID && + (INPUTMAPPER->IsButtonDown( MenuInput(MenuI.player, MENU_BUTTON_RIGHT) ) || + INPUTMAPPER->IsButtonDown( MenuInput(MenuI.player, MENU_BUTTON_LEFT) ) ); + + GAMESTATE->m_CurStyle = STYLE_INVALID; + } + + if( bHoldingLeftOrRight ) { Screen::MenuUp( MenuI.player, type ); return; @@ -772,13 +790,27 @@ void ScreenOptions::ChangeValue( PlayerNumber pn, int iDelta ) int iCurRow = m_iCurrentRow[pn]; OptionRow &row = m_OptionRow[iCurRow]; + const int iNumOptions = row.choices.size(); + if( PREFSMAN->m_bArcadeOptionsNavigation ) + { + if( iCurRow == m_iNumOptionRows || iNumOptions <= 1 ) // 1 or 0 + { + if( iDelta < 0 ) + { + MenuUp( pn ); + return; + } + else + { + MenuDown( pn ); + return; + } + } + } + if( iCurRow == m_iNumOptionRows ) // EXIT is selected return; // don't allow a move - const int iNumOptions = row.choices.size(); - if( iNumOptions <= 1 ) // 1 or 0 - return; // don't change, don't play sound - for( int p=0; p