diff --git a/stepmania/src/ScreenSelectMaster.cpp b/stepmania/src/ScreenSelectMaster.cpp index 3a00f58a74..b3e0ebcdb6 100644 --- a/stepmania/src/ScreenSelectMaster.cpp +++ b/stepmania/src/ScreenSelectMaster.cpp @@ -347,8 +347,22 @@ int ScreenSelectMaster::GetSelectionIndex( PlayerNumber pn ) void ScreenSelectMaster::UpdateSelectableChoices() { for( unsigned c=0; cPlayCommand( m_aGameCommands[c].IsPlayable()? "Enabled":"Disabled" ); + } + else + { + FOREACH_HumanPlayer( p ) + if( m_sprScroll[c][p].IsLoaded() ) + m_sprScroll[c][p]->PlayCommand( m_aGameCommands[c].IsPlayable()? "Enabled":"Disabled" ); + } + } /* * If no options are playable at all, just wait. Some external @@ -377,16 +391,16 @@ bool ScreenSelectMaster::Move( PlayerNumber pn, MenuDir dir ) int iSwitchToIndex = m_iChoice[pn]; set seen; - do - { - iSwitchToIndex = m_Next[dir][iSwitchToIndex]; - if( iSwitchToIndex == -1 ) - return false; // can't go that way - if( seen.find(iSwitchToIndex) != seen.end() ) - return false; // went full circle and none found - seen.insert( iSwitchToIndex ); - } - while( !m_aGameCommands[iSwitchToIndex].IsPlayable() ); +try_again: + iSwitchToIndex = m_Next[dir][iSwitchToIndex]; + if( iSwitchToIndex == -1 ) + return false; // can't go that way + if( seen.find(iSwitchToIndex) != seen.end() ) + return false; // went full circle and none found + seen.insert( iSwitchToIndex ); + + if( !m_aGameCommands[iSwitchToIndex].IsPlayable() ) + goto try_again; return ChangeSelection( pn, dir, iSwitchToIndex ); }